@lunora/codegen 1.0.0-alpha.318 → 1.0.0-alpha.319

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.mjs CHANGED
@@ -1 +1 @@
1
- import{SCHEMA_SNAPSHOT_VERSION as t,diffSchemaSnapshots as s,serializeSchemaSnapshot as a}from"./packem_shared/SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{formatAdvisories as m,lintSchema as f,toAdvisorContext as d}from"./packem_shared/formatAdvisories-BCVASH7N.mjs";import{describeErrorLevelFindings as n,errorAdvisoryNames as l,errorPlatformDiagnosticNames as c,sortedUniqueNames as x}from"./packem_shared/describeErrorLevelFindings-vzaGS9KL.mjs";import{CAPABILITY_PROBES as E}from"./packem_shared/CAPABILITY_PROBES-brcmKenl.mjs";import{CodegenDiagnosticError as A,diagnosticAt as v}from"./packem_shared/CodegenDiagnosticError-BUXlG3P-.mjs";import{AGENTS_FILENAME as N,discoverAgents as g}from"./packem_shared/AGENTS_FILENAME-B6-kjzM3.mjs";import{isTestPath as R,listLunoraSourceFiles as T}from"./packem_shared/isTestPath-B81lOULB.mjs";import{default as I}from"./packem_shared/discoverAuthApiCalls-xs0ONfI-.mjs";import{CONTAINERS_FILENAME as L,discoverContainers as M}from"./packem_shared/CONTAINERS_FILENAME-dFRtAyIe.mjs";import{default as P}from"./packem_shared/discoverCrons-DBnCama4.mjs";import{capabilitiesUsedBy as b,foldCapabilitySignals as y,mayReadCapabilityContext as U,sourceCapabilitySignals as G}from"./packem_shared/capabilitiesUsedBy-QgSZyE0T.mjs";import{FLAGS_FILENAME as j,discoverFlags as B}from"./packem_shared/FLAGS_FILENAME-Bf0MSlHH.mjs";import{default as W}from"./packem_shared/discoverFunctions-5Zy6K4uA.mjs";import{default as V}from"./packem_shared/discoverHttpRoutes-WBAqBcfK.mjs";import{default as Q}from"./packem_shared/discoverHyperdriveCalls-DFbp-ILH.mjs";import{default as w}from"./packem_shared/discoverInserts-DUbjhNzk.mjs";import{d as Y}from"./packem_shared/index-DvmKcoFV.mjs";import{default as Z}from"./packem_shared/discoverMigrations-C9mLIhGZ.mjs";import{MUTATORS_FILENAME as ee,discoverMutators as re}from"./packem_shared/MUTATORS_FILENAME-Jkk8Zgkb.mjs";import{default as te}from"./packem_shared/discoverNondeterministicCalls-D7Ovq8ae.mjs";import{NOTIFY_FILENAME as ae,discoverNotifyCalls as ie,discoverNotifyChannels as me,discoverNotifyConfig as fe}from"./packem_shared/NOTIFY_FILENAME-CjbDYC2a.mjs";import{default as pe}from"./packem_shared/readPackageDependencies-RHhGiz0k.mjs";import{default as le}from"./packem_shared/discoverQueries-BNqjOBY_.mjs";import{QUEUES_FILENAME as xe,discoverQueues as Se}from"./packem_shared/QUEUES_FILENAME-CsRy4VTF.mjs";import{default as ue}from"./packem_shared/discoverR2sqlCalls-TNwsmYje.mjs";import{default as ve}from"./packem_shared/discoverRlsProcedures-BeLdV5RT.mjs";import{default as Ne}from"./packem_shared/discoverRlsMetadata-CbdfaVep.mjs";import{discoverSandboxUsage as Oe}from"./packem_shared/discoverSandboxUsage-w6Q3RvxZ.mjs";import{default as Te}from"./packem_shared/discoverSchema-BtsX-CN9.mjs";import{readServiceBindings as Ie,resolveServiceBindings as _e}from"./packem_shared/readServiceBindings-DvqIThzd.mjs";import{SHAPES_FILENAME as Me,discoverShapes as Fe}from"./packem_shared/SHAPES_FILENAME-DkBUN9dK.mjs";import{default as De}from"./packem_shared/discoverStorageRulesMetadata-BBMy9JVZ.mjs";import{WORKFLOWS_FILENAME as ye,discoverWorkflows as Ue}from"./packem_shared/WORKFLOWS_FILENAME-CdeS224T.mjs";import{emitApp as He}from"./packem_shared/emitApp-CUh_nwCl.mjs";import{isD1GlobalTable as Be,isHyperdriveGlobalTable as ke}from"./packem_shared/isD1GlobalTable-udvHAAzD.mjs";import{buildOpenApiDocument as Ke,emitOpenApi as Ve,emitOpenApiModule as ze}from"./packem_shared/buildOpenApiDocument-DFv-RYZU.mjs";import{OPENRPC_VERSION as qe,buildOpenRpcDocument as we,emitOpenRpc as Je,emitOpenRpcModule as Ye}from"./packem_shared/OPENRPC_VERSION-CCY7xqSL.mjs";import{DEFAULT_TARGET as Ze,platformMatrixIds as $e,readProjectTarget as er,resolveCodegenTarget as rr}from"./packem_shared/DEFAULT_TARGET-B0FkdiZq.mjs";import{l as tr,r as sr}from"./packem_shared/project-config-file-BV7RR-l6.mjs";import{SCHEMA_SNAPSHOT_FILENAME as ir,runCodegen as mr}from"./packem_shared/SCHEMA_SNAPSHOT_FILENAME-DukA5ZOY.mjs";import{SchemaSnapshotParseError as dr,buildSchemaSnapshot as pr,evaluateSchemaDrift as nr,parseSchemaSnapshot as lr}from"./packem_shared/SchemaSnapshotParseError-BRJT7c2k.mjs";import{default as xr}from"./packem_shared/fingerprintSchemaSources-eVG9aVt0.mjs";import{schemaFromIr as Er}from"./packem_shared/schemaFromIr-BWFnvCVg.mjs";import{LUNORA_ERROR_CODES as Ar,validatorIrToJsonSchema as vr}from"./packem_shared/LUNORA_ERROR_CODES-C2s0xWQD.mjs";import{SDK_LANGUAGES as Nr,SDK_TARGETS as gr,generateSdk as Or}from"./sdk/index.mjs";import{redact as Tr,secretKindOf as hr}from"./packem_shared/redact-Cy14LEnc.mjs";import{default as _r}from"./packem_shared/emitDrizzleSchema-DitcRZ1a.mjs";import{default as Mr}from"./packem_shared/emitFunctions-amc10WSc.mjs";import{e as Pr}from"./packem_shared/server-DAvi_bv_.mjs";import{e as br}from"./packem_shared/shard-CI2ip0Np.mjs";import{G as Ur}from"./packem_shared/shared-DnCokNcE.mjs";import{MESSAGE_SOLUTIONS as Hr,findSolutionByMessage as jr}from"@lunora/errors";import{PROJECT_CONFIG_FILENAMES as kr,findProjectConfigFile as Wr}from"./packem_shared/PROJECT_CONFIG_FILENAMES-DzOu-lSc.mjs";import{createCodegenProject as Vr,findTsconfig as zr,refreshCodegenProject as Qr}from"./packem_shared/createCodegenProject-V51_yBw3.mjs";import{s as wr,t as Jr,u as Yr}from"./packem_shared/shard-runtime-CkTgY8tL.mjs";import{emitApi as Zr,emitCollections as $r,emitInternalApi as eo}from"./packem_shared/emitApi-CDgIPAG2.mjs";import{emitCrons as oo,emitScheduler as to,emitVectors as so,emitWranglerCronTriggers as ao}from"./packem_shared/emitCrons-BQW2lviZ.mjs";import{emitDataModel as mo}from"./packem_shared/emitDataModel-BskFt9Wv.mjs";import{isTypedSchema as po}from"./packem_shared/isTypedSchema-CKzc3ioR.mjs";const e="0.0.0";export{N as AGENTS_FILENAME,E as CAPABILITY_PROBES,L as CONTAINERS_FILENAME,A as CodegenDiagnosticError,Ze as DEFAULT_TARGET,j as FLAGS_FILENAME,Ur as GENERATED_HEADER,Ar as LUNORA_ERROR_CODES,Hr as LUNORA_SOLUTION_RULES,ee as MUTATORS_FILENAME,ae as NOTIFY_FILENAME,qe as OPENRPC_VERSION,kr as PROJECT_CONFIG_FILENAMES,xe as QUEUES_FILENAME,ir as SCHEMA_SNAPSHOT_FILENAME,t as SCHEMA_SNAPSHOT_VERSION,Nr as SDK_LANGUAGES,gr as SDK_TARGETS,Me as SHAPES_FILENAME,dr as SchemaSnapshotParseError,e as VERSION,ye as WORKFLOWS_FILENAME,Ke as buildOpenApiDocument,we as buildOpenRpcDocument,pr as buildSchemaSnapshot,b as capabilitiesUsedBy,Vr as createCodegenProject,n as describeErrorLevelFindings,v as diagnosticAt,s as diffSchemaSnapshots,g as discoverAgents,I as discoverAuthApiCalls,M as discoverContainers,P as discoverCrons,B as discoverFlags,W as discoverFunctions,V as discoverHttpRoutes,Q as discoverHyperdriveCalls,w as discoverInserts,Y as discoverMaskProcedures,Z as discoverMigrations,re as discoverMutators,te as discoverNondeterministicCalls,ie as discoverNotifyCalls,me as discoverNotifyChannels,fe as discoverNotifyConfig,le as discoverQueries,Se as discoverQueues,ue as discoverR2sqlCalls,Ne as discoverRlsMetadata,ve as discoverRlsProcedures,Oe as discoverSandboxUsage,Te as discoverSchema,Fe as discoverShapes,De as discoverStorageRulesMetadata,Ue as discoverWorkflows,wr as emitAgents,Zr as emitApi,He as emitApp,$r as emitCollections,Jr as emitContainers,oo as emitCrons,mo as emitDataModel,_r as emitDrizzleSchema,Mr as emitFunctions,eo as emitInternalApi,Ve as emitOpenApi,ze as emitOpenApiModule,Je as emitOpenRpc,Ye as emitOpenRpcModule,to as emitScheduler,Pr as emitServer,br as emitShard,so as emitVectors,Yr as emitWorkflows,ao as emitWranglerCronTriggers,l as errorAdvisoryNames,c as errorPlatformDiagnosticNames,nr as evaluateSchemaDrift,jr as findLunoraSolution,Wr as findProjectConfigFile,zr as findTsconfig,xr as fingerprintSchemaSources,y as foldCapabilitySignals,m as formatAdvisories,Or as generateSdk,Be as isD1GlobalTable,ke as isHyperdriveGlobalTable,R as isTestPath,po as isTypedSchema,f as lintSchema,T as listLunoraSourceFiles,tr as loadProjectConfig,U as mayReadCapabilityContext,lr as parseSchemaSnapshot,$e as platformMatrixIds,pe as readPackageDependencies,sr as readProjectConfigLiterals,er as readProjectTarget,Ie as readServiceBindings,Tr as redact,Qr as refreshCodegenProject,rr as resolveCodegenTarget,_e as resolveServiceBindings,mr as runCodegen,Er as schemaFromIr,hr as secretKindOf,a as serializeSchemaSnapshot,x as sortedUniqueNames,G as sourceCapabilitySignals,d as toAdvisorContext,vr as validatorIrToJsonSchema};
1
+ import{SCHEMA_SNAPSHOT_VERSION as t,diffSchemaSnapshots as s,serializeSchemaSnapshot as a}from"./packem_shared/SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{formatAdvisories as m,lintSchema as f,toAdvisorContext as d}from"./packem_shared/formatAdvisories-BCVASH7N.mjs";import{describeErrorLevelFindings as n,errorAdvisoryNames as l,errorPlatformDiagnosticNames as c,sortedUniqueNames as x}from"./packem_shared/describeErrorLevelFindings-vzaGS9KL.mjs";import{CAPABILITY_PROBES as E}from"./packem_shared/CAPABILITY_PROBES-brcmKenl.mjs";import{CodegenDiagnosticError as A,diagnosticAt as v}from"./packem_shared/CodegenDiagnosticError-BUXlG3P-.mjs";import{AGENTS_FILENAME as N,discoverAgents as g}from"./packem_shared/AGENTS_FILENAME-B6-kjzM3.mjs";import{isTestPath as R,listLunoraSourceFiles as T}from"./packem_shared/isTestPath-B81lOULB.mjs";import{default as I}from"./packem_shared/discoverAuthApiCalls-xs0ONfI-.mjs";import{CONTAINERS_FILENAME as L,discoverContainers as M}from"./packem_shared/CONTAINERS_FILENAME-dFRtAyIe.mjs";import{default as P}from"./packem_shared/discoverCrons-DBnCama4.mjs";import{capabilitiesUsedBy as b,foldCapabilitySignals as y,mayReadCapabilityContext as U,sourceCapabilitySignals as G}from"./packem_shared/capabilitiesUsedBy-QgSZyE0T.mjs";import{FLAGS_FILENAME as j,discoverFlags as B}from"./packem_shared/FLAGS_FILENAME-Bf0MSlHH.mjs";import{default as W}from"./packem_shared/discoverFunctions-5Zy6K4uA.mjs";import{default as V}from"./packem_shared/discoverHttpRoutes-WBAqBcfK.mjs";import{default as Q}from"./packem_shared/discoverHyperdriveCalls-DFbp-ILH.mjs";import{default as w}from"./packem_shared/discoverInserts-DUbjhNzk.mjs";import{d as Y}from"./packem_shared/index-DvmKcoFV.mjs";import{default as Z}from"./packem_shared/discoverMigrations-C9mLIhGZ.mjs";import{MUTATORS_FILENAME as ee,discoverMutators as re}from"./packem_shared/MUTATORS_FILENAME-Jkk8Zgkb.mjs";import{default as te}from"./packem_shared/discoverNondeterministicCalls-D7Ovq8ae.mjs";import{NOTIFY_FILENAME as ae,discoverNotifyCalls as ie,discoverNotifyChannels as me,discoverNotifyConfig as fe}from"./packem_shared/NOTIFY_FILENAME-CjbDYC2a.mjs";import{default as pe}from"./packem_shared/readPackageDependencies-RHhGiz0k.mjs";import{default as le}from"./packem_shared/discoverQueries-BNqjOBY_.mjs";import{QUEUES_FILENAME as xe,discoverQueues as Se}from"./packem_shared/QUEUES_FILENAME-CsRy4VTF.mjs";import{default as ue}from"./packem_shared/discoverR2sqlCalls-TNwsmYje.mjs";import{default as ve}from"./packem_shared/discoverRlsProcedures-BeLdV5RT.mjs";import{default as Ne}from"./packem_shared/discoverRlsMetadata-CbdfaVep.mjs";import{discoverSandboxUsage as Oe}from"./packem_shared/discoverSandboxUsage-w6Q3RvxZ.mjs";import{default as Te}from"./packem_shared/discoverSchema-BtsX-CN9.mjs";import{readServiceBindings as Ie,resolveServiceBindings as _e}from"./packem_shared/readServiceBindings-DvqIThzd.mjs";import{SHAPES_FILENAME as Me,discoverShapes as Fe}from"./packem_shared/SHAPES_FILENAME-DkBUN9dK.mjs";import{default as De}from"./packem_shared/discoverStorageRulesMetadata-BBMy9JVZ.mjs";import{WORKFLOWS_FILENAME as ye,discoverWorkflows as Ue}from"./packem_shared/WORKFLOWS_FILENAME-CdeS224T.mjs";import{emitApp as He}from"./packem_shared/emitApp-BEe4wd3R.mjs";import{isD1GlobalTable as Be,isHyperdriveGlobalTable as ke}from"./packem_shared/isD1GlobalTable-udvHAAzD.mjs";import{buildOpenApiDocument as Ke,emitOpenApi as Ve,emitOpenApiModule as ze}from"./packem_shared/buildOpenApiDocument-DFv-RYZU.mjs";import{OPENRPC_VERSION as qe,buildOpenRpcDocument as we,emitOpenRpc as Je,emitOpenRpcModule as Ye}from"./packem_shared/OPENRPC_VERSION-CCY7xqSL.mjs";import{DEFAULT_TARGET as Ze,platformMatrixIds as $e,readProjectTarget as er,resolveCodegenTarget as rr}from"./packem_shared/DEFAULT_TARGET-B0FkdiZq.mjs";import{l as tr,r as sr}from"./packem_shared/project-config-file-BV7RR-l6.mjs";import{SCHEMA_SNAPSHOT_FILENAME as ir,runCodegen as mr}from"./packem_shared/SCHEMA_SNAPSHOT_FILENAME-DwqkR6hn.mjs";import{SchemaSnapshotParseError as dr,buildSchemaSnapshot as pr,evaluateSchemaDrift as nr,parseSchemaSnapshot as lr}from"./packem_shared/SchemaSnapshotParseError-BRJT7c2k.mjs";import{default as xr}from"./packem_shared/fingerprintSchemaSources-eVG9aVt0.mjs";import{schemaFromIr as Er}from"./packem_shared/schemaFromIr-BWFnvCVg.mjs";import{LUNORA_ERROR_CODES as Ar,validatorIrToJsonSchema as vr}from"./packem_shared/LUNORA_ERROR_CODES-C2s0xWQD.mjs";import{SDK_LANGUAGES as Nr,SDK_TARGETS as gr,generateSdk as Or}from"./sdk/index.mjs";import{redact as Tr,secretKindOf as hr}from"./packem_shared/redact-Cy14LEnc.mjs";import{default as _r}from"./packem_shared/emitDrizzleSchema-DitcRZ1a.mjs";import{default as Mr}from"./packem_shared/emitFunctions-amc10WSc.mjs";import{e as Pr}from"./packem_shared/server-DAvi_bv_.mjs";import{e as br}from"./packem_shared/shard-DYYhXxEG.mjs";import{G as Ur}from"./packem_shared/shared-DnCokNcE.mjs";import{MESSAGE_SOLUTIONS as Hr,findSolutionByMessage as jr}from"@lunora/errors";import{PROJECT_CONFIG_FILENAMES as kr,findProjectConfigFile as Wr}from"./packem_shared/PROJECT_CONFIG_FILENAMES-DzOu-lSc.mjs";import{createCodegenProject as Vr,findTsconfig as zr,refreshCodegenProject as Qr}from"./packem_shared/createCodegenProject-V51_yBw3.mjs";import{s as wr,t as Jr,u as Yr}from"./packem_shared/shard-runtime-BQ6ZNigW.mjs";import{emitApi as Zr,emitCollections as $r,emitInternalApi as eo}from"./packem_shared/emitApi-CDgIPAG2.mjs";import{emitCrons as oo,emitScheduler as to,emitVectors as so,emitWranglerCronTriggers as ao}from"./packem_shared/emitCrons-BQW2lviZ.mjs";import{emitDataModel as mo}from"./packem_shared/emitDataModel-BskFt9Wv.mjs";import{isTypedSchema as po}from"./packem_shared/isTypedSchema-CKzc3ioR.mjs";const e="0.0.0";export{N as AGENTS_FILENAME,E as CAPABILITY_PROBES,L as CONTAINERS_FILENAME,A as CodegenDiagnosticError,Ze as DEFAULT_TARGET,j as FLAGS_FILENAME,Ur as GENERATED_HEADER,Ar as LUNORA_ERROR_CODES,Hr as LUNORA_SOLUTION_RULES,ee as MUTATORS_FILENAME,ae as NOTIFY_FILENAME,qe as OPENRPC_VERSION,kr as PROJECT_CONFIG_FILENAMES,xe as QUEUES_FILENAME,ir as SCHEMA_SNAPSHOT_FILENAME,t as SCHEMA_SNAPSHOT_VERSION,Nr as SDK_LANGUAGES,gr as SDK_TARGETS,Me as SHAPES_FILENAME,dr as SchemaSnapshotParseError,e as VERSION,ye as WORKFLOWS_FILENAME,Ke as buildOpenApiDocument,we as buildOpenRpcDocument,pr as buildSchemaSnapshot,b as capabilitiesUsedBy,Vr as createCodegenProject,n as describeErrorLevelFindings,v as diagnosticAt,s as diffSchemaSnapshots,g as discoverAgents,I as discoverAuthApiCalls,M as discoverContainers,P as discoverCrons,B as discoverFlags,W as discoverFunctions,V as discoverHttpRoutes,Q as discoverHyperdriveCalls,w as discoverInserts,Y as discoverMaskProcedures,Z as discoverMigrations,re as discoverMutators,te as discoverNondeterministicCalls,ie as discoverNotifyCalls,me as discoverNotifyChannels,fe as discoverNotifyConfig,le as discoverQueries,Se as discoverQueues,ue as discoverR2sqlCalls,Ne as discoverRlsMetadata,ve as discoverRlsProcedures,Oe as discoverSandboxUsage,Te as discoverSchema,Fe as discoverShapes,De as discoverStorageRulesMetadata,Ue as discoverWorkflows,wr as emitAgents,Zr as emitApi,He as emitApp,$r as emitCollections,Jr as emitContainers,oo as emitCrons,mo as emitDataModel,_r as emitDrizzleSchema,Mr as emitFunctions,eo as emitInternalApi,Ve as emitOpenApi,ze as emitOpenApiModule,Je as emitOpenRpc,Ye as emitOpenRpcModule,to as emitScheduler,Pr as emitServer,br as emitShard,so as emitVectors,Yr as emitWorkflows,ao as emitWranglerCronTriggers,l as errorAdvisoryNames,c as errorPlatformDiagnosticNames,nr as evaluateSchemaDrift,jr as findLunoraSolution,Wr as findProjectConfigFile,zr as findTsconfig,xr as fingerprintSchemaSources,y as foldCapabilitySignals,m as formatAdvisories,Or as generateSdk,Be as isD1GlobalTable,ke as isHyperdriveGlobalTable,R as isTestPath,po as isTypedSchema,f as lintSchema,T as listLunoraSourceFiles,tr as loadProjectConfig,U as mayReadCapabilityContext,lr as parseSchemaSnapshot,$e as platformMatrixIds,pe as readPackageDependencies,sr as readProjectConfigLiterals,er as readProjectTarget,Ie as readServiceBindings,Tr as redact,Qr as refreshCodegenProject,rr as resolveCodegenTarget,_e as resolveServiceBindings,mr as runCodegen,Er as schemaFromIr,hr as secretKindOf,a as serializeSchemaSnapshot,x as sortedUniqueNames,G as sourceCapabilitySignals,d as toAdvisorContext,vr as validatorIrToJsonSchema};
@@ -1,4 +1,4 @@
1
- import{existsSync as L,mkdirSync as fn,readFileSync as Wi,writeFileSync as qi,rmSync as xt,readdirSync as Hi}from"node:fs";import{dirname as gn,join as E,relative as ji}from"node:path";import{performance as ct}from"node:perf_hooks";import{runAdvisor as Gi}from"@lunora/advisor";import{LunoraError as G}from"@lunora/errors";import{serializeSchemaSnapshot as Yi}from"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{toAdvisorContext as Qi}from"./formatAdvisories-BCVASH7N.mjs";import{Node as r,SyntaxKind as d,ts as Xi,VariableDeclarationKind as Ji}from"ts-morph";import{listLunoraSourceFiles as A,lunoraRelativePath as w,bindingKeyName as re,collectCallRows as I,findObjectProperty as _,collectSecurityCallRows as Zi,propertyInitializer as C,listSecurityScanFiles as Ue,objectLiteralFromCallbackBody as pn,limitNameOf as mn,optionsObjectLiteral as hn,handlerOf as er,collectNodeRows as ee,chainRootOf as Lt,outermostValueWrapper as P,isWriteTarget as We,isSameNode as S,unwrapExpression as h,isConstDeclaration as te,memberAccessOf as vn,returningFunctionOf as St,walkChain as tr,RUN_METHODS as En,functionReferenceSegments as sr,isTestPath as nr,isFunctionLike as se,functionKeyOf as xn}from"./isTestPath-B81lOULB.mjs";import{b as X,d as W,f as O,g as Dt,c as v,a as Sn,w as Mt,k as ir,l as rr,h as or,m as ar,j as At,i as cr}from"./attribution-hVBriwzy.mjs";import{a as Ss,r as lt,i as Y,b as lr,m as An,c as qe,e as _t,E as yn,C as bn,d as dr,f as ur,g as fr}from"./context-root-YkWLB6M2.mjs";import{a as b,i as gr,c as Z,d as Nn,e as pr,f as mr}from"./classify-procedure-call-CcgP-9I0.mjs";import{a as y,r as Pn,s as hr,b as vr}from"./project-config-file-BV7RR-l6.mjs";import{a as Er,b as He}from"./module-specifiers-WF8iAydP.mjs";import{r as je,s as xr}from"./parse-validator-IDBKIT7M.mjs";import Sr from"./discoverAuthApiCalls-xs0ONfI-.mjs";import{i as D,r as wn}from"./database-calls-BnVUlTx_.mjs";import Ar from"./discoverHyperdriveCalls-DFbp-ILH.mjs";import{diagnosticAt as ye}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{m as Kt,a as Me,s as In,d as yr}from"./index-DvmKcoFV.mjs";import{MUTATORS_FILENAME as br,isDefineMutatorCallee as Nr,mutatorServerImplOf as Pr,discoverMutators as wr}from"./MUTATORS_FILENAME-Jkk8Zgkb.mjs";import Ir from"./discoverNondeterministicCalls-D7Ovq8ae.mjs";import{discoverNotifyConfig as Cr,discoverNotifyCalls as Tr}from"./NOTIFY_FILENAME-CjbDYC2a.mjs";import Or from"./discoverR2sqlCalls-TNwsmYje.mjs";import kr from"./discoverRlsProcedures-BeLdV5RT.mjs";import{s as Bt,n as Rr}from"./dispatch-namespace-DwTjD7BU.mjs";import{secretKindOf as Fr,redact as Lr,isHeuristicSecretKind as Dr,isSecretishName as Mr}from"./redact-Cy14LEnc.mjs";import{a as Oe,d as _r,r as Kr}from"./modules-CjOcuQnK.mjs";import{WORKFLOWS_FILENAME as Br,discoverWorkflows as zr}from"./WORKFLOWS_FILENAME-CdeS224T.mjs";import{r as $r}from"./json-data-Chfs2Cz5.mjs";import{G as Vr}from"./shared-DnCokNcE.mjs";import{createCodegenProject as Ur}from"./createCodegenProject-V51_yBw3.mjs";import{findTsconfig as wv,refreshCodegenProject as Iv}from"./createCodegenProject-V51_yBw3.mjs";import{CAPABILITIES as Wr,usedCapabilities as qr}from"./CAPABILITY_PROBES-brcmKenl.mjs";import{isD1GlobalTable as Cn,isHyperdriveGlobalTable as Tn}from"./isD1GlobalTable-udvHAAzD.mjs";import{discoverAgents as Hr}from"./AGENTS_FILENAME-B6-kjzM3.mjs";import{discoverContainers as jr}from"./CONTAINERS_FILENAME-dFRtAyIe.mjs";import Gr from"./discoverCrons-DBnCama4.mjs";import{contextPropertiesRead as Yr,discoverFeatureUsage as Qr}from"./capabilitiesUsedBy-QgSZyE0T.mjs";import On from"./readPackageDependencies-RHhGiz0k.mjs";import{discoverQueueDeclarations as Xr}from"./QUEUES_FILENAME-CsRy4VTF.mjs";import{discoverSandboxUsage as Jr}from"./discoverSandboxUsage-w6Q3RvxZ.mjs";import{resolveServiceBindings as Zr}from"./readServiceBindings-DvqIThzd.mjs";import eo from"./discoverStorageRulesMetadata-BBMy9JVZ.mjs";import{resolveCodegenTarget as kn,gatePlatformFeatures as to,readTargetDiagnostics as so,vectorizeDimensionDiagnostics as no,studioPlatformFor as io}from"./DEFAULT_TARGET-B0FkdiZq.mjs";import{i as ro}from"./schema-BgM8A3XV.mjs";import{b as Rn,e as oo}from"./shard-CI2ip0Np.mjs";import{e as ao,a as co}from"./server-DAvi_bv_.mjs";import{emitDataModel as lo}from"./emitDataModel-BskFt9Wv.mjs";import{i as uo,a as fo,e as go,b as po,d as mo,c as ho}from"./unwrap-handler-return-CeaOifqX.mjs";import vo from"./discoverFunctions-5Zy6K4uA.mjs";import Eo from"./discoverHttpRoutes-WBAqBcfK.mjs";import xo from"./discoverInserts-DUbjhNzk.mjs";import{e as Fn}from"./exported-procedure-chains-DAl7xBBx.mjs";import So from"./discoverMigrations-C9mLIhGZ.mjs";import Ao from"./discoverQueries-BNqjOBY_.mjs";import yo from"./discoverRlsMetadata-CbdfaVep.mjs";import bo from"./discoverSchema-BtsX-CN9.mjs";import{discoverShapes as No}from"./SHAPES_FILENAME-DkBUN9dK.mjs";import{i as Po}from"./reserved-words-CW1QFbTd.mjs";import{emitApp as wo}from"./emitApp-CUh_nwCl.mjs";import{readJsonSync as Io}from"@visulima/fs";import{buildSchemaSnapshot as Co}from"./SchemaSnapshotParseError-BRJT7c2k.mjs";import{buildOpenApiDocument as To,emitOpenApiModule as Oo}from"./buildOpenApiDocument-DFv-RYZU.mjs";import{buildOpenRpcDocument as ko,emitOpenRpcModule as Ro}from"./OPENRPC_VERSION-CCY7xqSL.mjs";import{v as Fo,t as Lo,u as Do,s as Mo,w as _o}from"./shard-runtime-CkTgY8tL.mjs";import{emitCollections as Ko,emitSeed as Bo,emitApi as zo,emitInternalApi as $o}from"./emitApi-CDgIPAG2.mjs";import{emitCrons as Vo,emitScheduler as Uo,emitShardRegistry as Wo,emitDurableObjects as qo,emitVectors as Ho,emitWranglerCronTriggers as jo}from"./emitCrons-BQW2lviZ.mjs";import Go from"./emitDrizzleSchema-DitcRZ1a.mjs";import Yo from"./emitFunctions-amc10WSc.mjs";const Ln=new Set(["delete","get","head","options","patch","post","put"]),Qo=new Set(["handler","stream"]),Xo=/\/(?:_|admin|internal|superuser|sudo|root|debug)/iu,As=new Set(["ADMIN_TOKEN","adminToken","assertAdmin","assertAuth","auth","Authorization","getSession","identity","isAdmin","requireAdmin","requireAuth","requireRole","verifyAdmin"]),Jo=e=>{if(!r.isCallExpression(e))return;const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!Ln.has(t.getName()))return;const s=t.getExpression();if(!r.isIdentifier(s)||s.getText()!=="httpRoute")return;const n=e.getArguments()[0];if(!(!n||!r.isStringLiteral(n)))return{method:t.getName().toUpperCase(),path:n.getLiteralValue()}},Zo=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t))return;let s=t.getExpression();for(;r.isCallExpression(s);){const n=s.getExpression();if(!r.isPropertyAccessExpression(n)||Ln.has(n.getName()))break;s=n.getExpression()}return Jo(s)},ea=e=>{for(const t of e.getDescendantsOfKind(d.PropertyAccessExpression))if(As.has(t.getName()))return!0;for(const t of e.getDescendantsOfKind(d.CallExpression)){const s=t.getExpression();if(r.isIdentifier(s)&&As.has(s.getText()))return!0}return!1},ta=(e,t)=>{const s=e.getInitializer();if(!s||!r.isCallExpression(s))return;const n=s.getExpression();if(!r.isPropertyAccessExpression(n)||!Qo.has(n.getName()))return;const i=Zo(s);if(!i||!Xo.test(i.path))return;const o=s.getArguments()[0],a=o!==void 0&&(r.isArrowFunction(o)||r.isFunctionExpression(o))&&ea(o);return{exportName:W(e)??e.getName(),file:t,method:i.method,path:i.path,usesGuard:a}},sa=(e,t)=>{const s=[];for(const n of X(e)){const i=ta(n,t);i&&s.push(i)}return s},na=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...sa(i,w(t,n)))}return s},ia=e=>{const t=e.getText(),s=n=>{const i=n.getNameNode();return r.isIdentifier(i)&&i.getText()===t};for(const n of e.getAncestors())if(!(!r.isArrowFunction(n)&&!r.isFunctionExpression(n)&&!r.isFunctionDeclaration(n)))for(const i of n.getParameters()){const o=i.getDescendantsOfKind(d.BindingElement).find(a=>s(a));if(o!==void 0)return o}},ra=e=>{let t=e;for(;;){const s=t.getParent();if(!r.isObjectBindingPattern(s))return;const n=s.getParent();if(r.isBindingElement(n)){t=n;continue}return r.isParameterDeclaration(n)?re(t):void 0}},oa=e=>{const t=e.getText();if(!e.getAncestors().some(o=>{const a=r.isFunctionLikeDeclaration(o)||r.isArrowFunction(o)?o.getParameters()[1]:void 0,c=a?.getNameNode();return a!==void 0&&(r.isIdentifier(c)?c.getText()===t:a.getDescendantsOfKind(d.BindingElement).some(l=>l.getName()===t))&&Ss(a)}))return!1;const n=O(e),i=r.isParameterDeclaration(n)?n:n?.getFirstAncestorByKind(d.Parameter);return i!==void 0&&(r.isParameterDeclaration(n)||r.isBindingElement(n))&&Ss(i)},ys=(e,t)=>{const s=e.getParent();if(r.isPropertyAccessExpression(s)&&s.getNameNode()===e||r.isPropertyAssignment(s)&&s.getNameNode()===e)return!1;if(e.getText()===t)return!0;const n=ia(e);return n!==void 0&&ra(n)===t?!0:t==="args"&&oa(e)},Dn=(e,t)=>r.isIdentifier(e)?ys(e,t):e.getDescendantsOfKind(d.Identifier).some(s=>ys(s,t)),aa=e=>{let t=e;for(;r.isPropertyAccessExpression(t)||r.isElementAccessExpression(t)||r.isNonNullExpression(t);)t=t.getExpression();return r.isIdentifier(t)?t:void 0},bs=e=>{const t=r.isIdentifier(e)?O(e):void 0;return r.isVariableDeclaration(t)&&r.isIdentifier(t.getNameNode())&&!Dt(t)?t.getInitializer():void 0},yt=e=>Dn(e,"args"),Q=e=>{if(!r.isIdentifier(e))return;const t=e.getText(),s=e.getFirstAncestor(a=>r.isArrowFunction(a)||r.isFunctionExpression(a)||r.isFunctionDeclaration(a));if(s===void 0)return;const n=e.getStart();let i,o=-1;for(const a of s.getDescendantsOfKind(d.VariableDeclaration)){if(a.getName()!==t)continue;const c=a.getInitializer(),l=a.getStart();c!==void 0&&l<n&&l>o&&(i=c,o=l)}return i},U=e=>{if(yt(e))return!0;const t=Q(e);return t!==void 0&&yt(t)},ca=e=>{if(r.isCallExpression(e)||r.isNewExpression(e))return!1;const t=Q(e);return t===void 0||!(r.isCallExpression(t)||r.isNewExpression(t))},oe=e=>{if(lt(e))return!0;const t=bs(e);if(t!==void 0&&lt(t))return!0;const s=t??e;return(r.isIdentifier(s)?[s]:s.getDescendantsOfKind(d.Identifier)).some(i=>{const o=bs(i);return o!==void 0&&lt(o)})},ke=(e,t)=>Dn(e,t),la=(e,t)=>{if(ke(e,t))return!0;const s=Q(e);if(s!==void 0&&ke(s,t))return!0;const n=aa(e);if(n!==void 0){const i=Q(n);return i!==void 0&&ke(i,t)}return!1},da=e=>!r.isPropertyAccessExpression(e)||e.getName()!=="run"?!1:Y(e.getExpression(),["ai"]),ua=(e,t)=>{if(!da(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!U(s)||oe(s)))return{scope:v(e),file:t,line:e.getStartLineNumber()}},fa=(e,t)=>I(e,t,ua),ga=new Set(["generateText","streamText"]),pa=new Set(["messages","prompt","system"]),ma=[{methods:new Set(["delete","insert","insertManyUnsafe","patch","patchIf","replace"]),prefixes:["context.db","ctx.db"]},{methods:new Set(["run","runAction","runMutation"]),prefixes:["context","ctx"]},{methods:new Set(["fetch"]),prefixes:["context","ctx"]},{methods:new Set(["queue","send"]),prefixes:["context.email","context.mail","ctx.email","ctx.mail"]}],ha=(e,t)=>ma.some(s=>s.methods.has(t)&&s.prefixes.some(n=>e===n||e.startsWith(`${n}.`))),va=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t))return;const s=t.getName(),n=[lr(t.getExpression()),t.getExpression().getText()].find(i=>i!==void 0&&ha(i,s));return n===void 0?void 0:`${n}.${s}`},Ea=e=>{for(const t of e.getDescendantsOfKind(d.CallExpression)){const s=va(t);if(s!==void 0)return s}},xa=e=>{const t=new Set,s=e.getFirstAncestor(o=>r.isArrowFunction(o)||r.isFunctionExpression(o)||r.isFunctionDeclaration(o)),[n]=s?.getParameters()??[],i=n?.getNameNode();if(i===void 0||!r.isObjectBindingPattern(i))return t;for(const o of i.getElements()){const a=re(o),c=o.getNameNode();if(a==="args"&&r.isObjectBindingPattern(c))for(const l of c.getElements())t.add(l.getName())}return t},Sa=e=>{if(yt(e))return!0;const t=xa(e);return t.size===0?!1:e.getDescendantsOfKind(d.Identifier).some(s=>t.has(s.getText()))},Aa=e=>{for(const t of e.getProperties()){if(!r.isPropertyAssignment(t)||!pa.has(y(t)))continue;const s=t.getInitializer();if(s!==void 0&&Sa(s))return!0}return!1},ya=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression)){const i=b(n.getExpression());if(i===void 0||!ga.has(i))continue;const[o]=n.getArguments();if(o===void 0||!r.isObjectLiteralExpression(o))continue;let a;for(const c of o.getDescendantsOfKind(d.CallExpression))if(b(c.getExpression())==="tool"&&(a=Ea(c),a!==void 0))break;a!==void 0&&s.push({scope:v(n),file:t,line:n.getStartLineNumber(),method:i,sideEffect:a,userInputDerived:Aa(o)})}return s},ba=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...ya(i,w(t,n)))}return s},Na=e=>Y(e,["fetch"]),Pa=(e,t)=>{if(!Na(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!U(s)))return{scope:v(e),file:t,line:e.getStartLineNumber()}},wa=(e,t)=>I(e,t,Pa),zt=(e,t=new Set)=>{if(t.has(e))return!0;t.add(e);try{return e.getProperties().some(s=>{if(!r.isSpreadAssignment(s))return!1;const n=je(s.getExpression());return n===void 0||zt(n,t)})}finally{t.delete(e)}},Ia=e=>{const t=e.getArguments()[0];if(!t||!r.isObjectLiteralExpression(t))return{objects:[],opaque:!0};const s=_(t,"args");if(!s)return{objects:[],opaque:!1};if(!r.isPropertyAssignment(s))return{objects:[],opaque:!0};const n=s.getInitializer(),i=n===void 0?void 0:je(n);return i===void 0?{objects:[],opaque:!0}:{objects:[i],opaque:zt(i)}},Ca=e=>{const t=[];let s=!1,n=e;for(;r.isCallExpression(n);){const i=n.getExpression();if(!r.isPropertyAccessExpression(i))break;if(i.getName()==="input"){const o=n.getArguments()[0],a=o!==void 0&&r.isExpression(o)?je(o):void 0;a===void 0?s=!0:(t.push(a),s||=zt(a))}n=i.getExpression()}return{objects:t,opaque:s}},$t=(e,t)=>t?Ca(t):Ia(e),Mn=(e,t)=>{if(t.has(e))return[];t.add(e);try{return e.getProperties().flatMap(s=>{if(r.isSpreadAssignment(s)){const n=je(s.getExpression());return n===void 0?[]:Mn(n,t)}return r.isPropertyAssignment(s)||r.isShorthandPropertyAssignment(s)?[y(s)]:[]})}finally{t.delete(e)}},Ta=e=>e.flatMap(t=>Mn(t,new Set)),Oa=new Set(["check","length","max"]),bt=e=>{let t=e;for(;;){const s=t.getParent();if(!s||!r.isPropertyAccessExpression(s)||s.getExpression()!==t)return!1;const n=s.getParent();if(!n||!r.isCallExpression(n)||n.getExpression()!==s)return!1;if(Oa.has(s.getName()))return!0;t=n}},Nt=e=>Er(e)||e==="@lunora/values",ka=e=>{const t=new Set(["v"]);for(const s of gr(e,"v",Nt))t.add(s);for(const s of e.getImportDeclarations()){const n=s.getNamespaceImport();n&&Nt(s.getModuleSpecifierValue())&&t.add(`${n.getText()}.v`)}return t},Ra=(e,t)=>{const s=new Map;for(const n of e.getVariableStatements())for(const i of n.getDeclarations()){const o=i.getNameNode(),a=i.getInitializer();if(!(!r.isObjectBindingPattern(o)||!a||!t.has(a.getText())))for(const c of o.getElements())c.getDotDotDotToken()||s.set(c.getName(),c.getPropertyNameNode()?.getText()??c.getName())}return s},Fa=e=>(e.getSymbol()?.getDeclarations()??[]).some(t=>!t.getSourceFile().isDeclarationFile()&&!r.isImportSpecifier(t)&&!r.isNamespaceImport(t)&&!r.isImportClause(t)),La=e=>(e.getSymbol()?.getDeclarations()??[]).some(t=>r.isNamespaceImport(t)&&Nt(t.getFirstAncestorByKindOrThrow(d.ImportDeclaration).getModuleSpecifierValue())),Vt=(e,t)=>{if(!r.isCallExpression(e))return;const s=e.getExpression();if(r.isPropertyAccessExpression(s)){const n=s.getExpression();if(!t.namespaces.has(n.getText()))return;if(r.isIdentifier(n))return Fa(n)?void 0:s.getName();const i=r.isPropertyAccessExpression(n)?n.getExpression():void 0;return r.isIdentifier(i)&&La(i)?s.getName():void 0}if(r.isIdentifier(s))return t.destructured.get(s.getText())},Da=(e,t)=>{if(!r.isIdentifier(e))return;const s=e.getText(),n=t.getVariableDeclaration(s)?.getInitializer();return n&&(r.isArrowFunction(n)||r.isFunctionExpression(n))?n:t.getFunction(s)},Ma=e=>{let t=e.getParent();for(;t&&!r.isFunctionLikeDeclaration(t);)t=t.getParent();return t},_a=e=>r.isReturnStatement(e)?e.getExpression():void 0,Ka=e=>r.isArrowFunction(e)&&!r.isBlock(e.getBody())?[e.getBody()]:e.getDescendantsOfKind(d.ReturnStatement).filter(t=>Ma(t)?.compilerNode===e.compilerNode).flatMap(t=>{const s=_a(t);return s?[s]:[]}),_n=(e,t)=>{if(Vt(e,t)!==void 0)return e;if(r.isCallExpression(e)||r.isPropertyAccessExpression(e))return _n(e.getExpression(),t)},Ba=(e,t)=>{const s=Da(e.getExpression(),e.getSourceFile());if(!s)return[];const n=bt(e),i=new Set(Ka(s).map(o=>_n(o,t)).filter(o=>o!==void 0));return[s,...s.getDescendants()].flatMap(o=>{const a=Vt(o,t);return a===void 0?[]:[{bounded:bt(o)||n&&i.has(o),factory:a}]})},za=(e,t)=>[e,...e.getDescendants()].flatMap(s=>{const n=Vt(s,t),i=n===void 0?[]:[{bounded:bt(s),factory:n}];return r.isCallExpression(s)?[...i,...Ba(s,t)]:i}),$a=(e,t)=>{const s=[],n=[];for(const i of e)for(const o of i.getProperties()){if(!r.isPropertyAssignment(o))continue;const a=o.getInitializer();if(!a)continue;const c=za(a,t),l=y(o);c.some(u=>u.factory==="any")?s.push(l):c.some(u=>u.factory==="string"&&!u.bounded)&&n.push(l)}return{anyArgs:s,unboundedStringArgs:n}},Va=(e,t,s)=>{const n=e.getInitializer();if(!n||!r.isCallExpression(n))return;const i=Z(n);if(i?.visibility!=="public")return;const{objects:o}=$t(n,i.receiver),{anyArgs:a,unboundedStringArgs:c}=$a(o,s);if(!(a.length===0&&c.length===0))return{anyArgs:a,exportName:W(e)??e.getName(),file:t,line:n.getStartLineNumber(),unboundedStringArgs:c}},Ua=(e,t)=>{const s=[],n=ka(e),i={destructured:Ra(e,n),namespaces:n};for(const o of X(e)){const a=Va(o,t,i);a&&s.push(a)}return s},Wa=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Ua(i,w(t,n)))}return s},dt=e=>e?.getKind()===d.TrueKeyword,qa=e=>e?.getKind()===d.FalseKeyword,Ha=e=>e!==void 0&&r.isNumericLiteral(e)&&e.getLiteralValue()===0,ja=new Set(["lunoraAuthAdapter","lunoraD1Adapter"]),Ga=e=>!e||!r.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>r.isCallExpression(t)&&b(t.getExpression())==="scim"),Ya=e=>e!==void 0&&r.isCallExpression(e)&&ja.has(b(e.getExpression())??""),Qa=e=>!e||!r.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>r.isStringLiteral(t)&&t.getLiteralText()==="*"),Xa=e=>{const t=C(e,"advanced"),s=C(e,"emailAndPassword"),n=C(e,"session");return{analyzable:!0,disableCsrfCheck:dt(C(t,"disableCSRFCheck")),emailPasswordEnabled:dt(C(s,"enabled")),requireEmailVerification:dt(C(s,"requireEmailVerification")),scimOnNonTransactionalAdapter:Ga(C(e,"plugins"))&&Ya(C(e,"database")),secureCookiesDisabled:qa(C(t,"useSecureCookies")),sessionFreshAgeZero:Ha(C(n,"freshAge")),trustedOriginsWildcard:Qa(C(e,"trustedOrigins"))}},Ja=()=>({analyzable:!1,disableCsrfCheck:!1,emailPasswordEnabled:!1,requireEmailVerification:!1,scimOnNonTransactionalAdapter:!1,secureCookiesDisabled:!1,sessionFreshAgeZero:!1,trustedOriginsWildcard:!1}),Za=(e,t)=>{if(b(e.getExpression())!=="createAuth")return;const s=e.getArguments()[0],n=s!==void 0&&r.isObjectLiteralExpression(s)&&s.getProperties().some(o=>r.isSpreadAssignment(o)),i=s!==void 0&&r.isObjectLiteralExpression(s)&&!n?Xa(s):Ja();return{scope:v(e),file:t,line:e.getStartLineNumber(),...i}},ec=(e,t)=>Zi(e,t,Za),tc=(e,t)=>{if(!r.isPropertyAccessExpression(e))return;const s=e.getName();if(t.methods.has(s))return An(e.getExpression(),t.matchReceiver)?s:void 0},sc=(e,t,s)=>{const n=tc(e.getExpression(),s);if(n===void 0)return;const i=e.getArguments()[s.argIndex];if(!(!i||!U(i)||oe(i))&&!(s.requireUnmodifiedReach===!0&&!ca(i)))return{scope:v(e),file:t,line:e.getStartLineNumber(),method:n}},Ge=(e,t,s)=>I(e,t,(n,i)=>sc(n,i,s)),nc=new Set(["content","pdf","scrape","screenshot"]),ic=(e,t)=>Ge(e,t,{argIndex:0,matchReceiver:s=>s==="ctx.browser",methods:nc}),rc=new Set(["createBrowser","createInboundEmailHandler","createPayment"]),oc=new Set(["RateLimiter"]),ac=new Set(["extend"]),Ns="lunora",cc=["vite.config.ts","vite.config.mts","vite.config.js","vite.config.mjs"],Kn=e=>{const t=[],s=[];let n=!1;for(const i of e.getProperties()){if(r.isSpreadAssignment(i)){n=!0;continue}if(r.isPropertyAssignment(i)){const o=y(i);t.push(o),i.getInitializer()?.getKind()===d.TrueKeyword&&s.push(o);continue}(r.isShorthandPropertyAssignment(i)||r.isMethodDeclaration(i))&&t.push(y(i))}return{analyzable:!n,presentKeys:t,trueKeys:s}},Pt=e=>e&&r.isObjectLiteralExpression(e)?Kn(e):{analyzable:!1,presentKeys:[],trueKeys:[]},lc=e=>{const t=e&&(r.isArrowFunction(e)||r.isFunctionExpression(e))?e:void 0,s=t&&pn(t.getBody());return s?Kn(s):{analyzable:!1,presentKeys:[],trueKeys:[]}},dc=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression)){const i=b(n.getExpression());i!==void 0&&(rc.has(i)?s.push({callee:i,file:t,line:n.getStartLineNumber(),...Pt(n.getArguments()[0])}):ac.has(i)&&s.push({callee:i,file:t,line:n.getStartLineNumber(),...lc(n.getArguments()[0])}))}for(const n of e.getDescendantsOfKind(d.NewExpression)){const i=b(n.getExpression());i===void 0||!oc.has(i)||s.push({callee:i,file:t,line:n.getStartLineNumber(),...Pt(n.getArguments()[0])})}return s},uc=(e,t)=>{for(const s of cc){const n=E(t,s);if(!L(n))continue;const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=[];for(const a of i.getDescendantsOfKind(d.CallExpression))b(a.getExpression())===Ns&&o.push({callee:Ns,file:s,line:a.getStartLineNumber(),...Pt(a.getArguments()[0])});return o}return[]},fc=(e,t)=>{const s=[];for(const{displayPath:n,filePath:i}of Ue(t)){const o=e.getSourceFile(i)??e.addSourceFileAtPath(i);s.push(...dc(o,n))}return s.push(...uc(e,gn(t))),s},Ps="ctx.containers.",gc=e=>{if(!e.startsWith(Ps))return!1;const t=e.slice(Ps.length);return t.length>0&&!t.includes(".")},pc=(e,t)=>Ge(e,t,{argIndex:0,matchReceiver:gc,methods:new Set(["get"])}),mc=new Set(["allow","deny","setAllowed"]),hc=e=>{const t=e.getArguments()[0];if(!t||!r.isObjectLiteralExpression(t))return!1;const s=_(t,"enableInternet");return s!==void 0&&r.isPropertyAssignment(s)&&r.isTrueLiteral(s.getInitializerOrThrow())},vc=(e,t)=>{const s=e.getExpression();if(!(!r.isPropertyAccessExpression(s)||s.getName()!=="start"||!hc(e)))return{detail:"enableInternet: true",scope:v(e),file:t,kind:"enable_internet",line:e.getStartLineNumber()}},Ec=(e,t)=>{const s=e.getExpression();if(!r.isPropertyAccessExpression(s)||!mc.has(s.getName()))return;const n=s.getExpression();if(!(!r.isPropertyAccessExpression(n)||n.getName()!=="egress"))return{detail:s.getName(),scope:v(e),file:t,kind:"egress_relaxation",line:e.getStartLineNumber()}},xc=(e,t)=>vc(e,t)??Ec(e,t),Sc=(e,t)=>I(e,t,xc),Ac=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="count")return;const s=t.getExpression();if(D(s)){const n=e.getArguments()[0];return n&&r.isStringLiteral(n)?n.getLiteralText():""}return r.isPropertyAccessExpression(s)&&D(s.getExpression())?s.getName():void 0},yc=e=>{const t=e.getExpression(),s=r.isPropertyAccessExpression(t)?t.getExpression():void 0;return e.getArguments()[s!==void 0&&D(s)?1:0]},bc=new Set(["baseWhere","relationBaseWhere","restrictsCounts","where"]),Nc=e=>{if(e===void 0||!r.isObjectLiteralExpression(e))return;const t=[];for(const n of e.getProperties()){if(!r.isPropertyAssignment(n)&&!r.isShorthandPropertyAssignment(n))return;t.push(n.getName())}return t.length>0&&t.every(n=>bc.has(n))||t.some(n=>n==="AND"||n==="OR"||n==="NOT")?void 0:t},Pc=(e,t,s)=>{const n=new Map(s.map(i=>[i.name,i.aggregateIndexed===!0]));return I(e,t,(i,o)=>{const a=Ac(i);if(a===void 0)return;const c=Nc(yc(i));return{file:o,indexed:n.get(a)!==!1,...c===void 0?{}:{filterFields:c},line:i.getStartLineNumber(),scope:v(i),table:a}})},wc=new Set(["defineExportSink","r2Sink","webhookExportSink"]),Ic=e=>{const t=e.getExpression();if(!r.isIdentifier(t))return;const s=t.getText();return wc.has(s)?s:void 0},Cc=e=>{const t=[],s=[];for(const n of e.getProperties()){if(r.isSpreadAssignment(n))return{analyzable:!1,emptyKeys:[],presentKeys:[]};if(r.isPropertyAssignment(n)){const i=y(n);t.push(i);const o=n.getInitializer();o&&r.isStringLiteral(o)&&o.getLiteralText()===""&&s.push(i);continue}(r.isShorthandPropertyAssignment(n)||r.isMethodDeclaration(n)||r.isGetAccessorDeclaration(n))&&t.push(y(n))}return{analyzable:!0,emptyKeys:s,presentKeys:t}},Tc=(e,t)=>{const s=[];for(const{displayPath:n,filePath:i}of Ue(t)){const o=e.getSourceFile(i)??e.addSourceFileAtPath(i);for(const a of o.getDescendantsOfKind(d.CallExpression)){const c=Ic(a);if(c===void 0)continue;const l=a.getArguments()[0],u=l&&r.isObjectLiteralExpression(l)?Cc(l):{analyzable:!1,emptyKeys:[],presentKeys:[]};s.push({analyzable:u.analyzable,emptyKeys:u.emptyKeys,factory:c,file:n,line:a.getStartLineNumber(),presentKeys:u.presentKeys})}}return s},Oc=new Map([["dbRateLimit",2],["rateLimit",2],["verifyTurnstileMiddleware",0]]),kc=new Set(["dbRateLimit","rateLimit"]),Rc=e=>{const t=hn(e);if(!t)return!1;const s=_(t,"failOpen");return s!==void 0&&r.isPropertyAssignment(s)&&s.getInitializer()?.getKind()===d.TrueKeyword},Fc=(e,t)=>{const s=b(e.getExpression());if(s===void 0)return;const n=Oc.get(s);if(n!==void 0)return{callee:s,scope:v(e),failOpen:Rc(e.getArguments()[n]),file:t,limitName:kc.has(s)?mn(e):"",line:e.getStartLineNumber()}},Lc=(e,t)=>I(e,t,Fc),Dc=e=>{const t=e.getInitializer();if(!t||!r.isCallExpression(t))return;const s=Z(t);if(s?.kind!=="query")return;const n=er(t,s.receiver);return n?{exportName:W(e)??e.getName(),handler:n}:void 0},ws=e=>{const t=e.getParent();return t&&r.isPropertyAccessExpression(t)&&t.getExpression()===e?t:void 0},Mc=e=>{const t=ws(e);if(!t)return"ctx.flags";if(t.getName()==="details"){const s=ws(t);return s?`ctx.flags.details.${s.getName()}`:"ctx.flags.details"}return`ctx.flags.${t.getName()}`},_c=(e,t)=>{const s=[];for(const n of qe(e.handler,"flags"))s.push({callee:Mc(n),exportName:e.exportName,file:t,line:n.getStartLineNumber()});return s},Kc=(e,t)=>{const s=[];for(const n of X(e)){const i=Dc(n);i&&s.push(..._c(i,t))}return s},Bc=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Kc(i,w(t,n)))}return s},zc=e=>!r.isPropertyAccessExpression(e)||e.getName()!=="boolean"?!1:Y(e.getExpression(),["flags"]),$c=e=>{if(e?.getKind()===d.TrueKeyword)return!0;if(e?.getKind()===d.FalseKeyword)return!1},Vc=(e,t)=>{if(!zc(e.getExpression()))return;const[s,n]=e.getArguments();if(!s||!(r.isStringLiteral(s)||r.isNoSubstitutionTemplateLiteral(s)))return;const i=s.getLiteralValue(),o=$c(n);if(!(i.length===0||o===void 0))return{defaultValue:o,scope:v(e),file:t,key:i,line:e.getStartLineNumber()}},Uc=(e,t)=>I(e,t,Vc),Wc=e=>{const t=e.getExpression();return r.isPropertyAccessExpression(t)&&t.getName()==="withGeoIndex"},qc=e=>{const t=e.getArguments()[0];return t&&r.isStringLiteral(t)?t.getLiteralText():""},Hc=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of i.getDescendantsOfKind(d.CallExpression))Wc(a)&&s.push({file:o,indexName:qc(a),line:a.getStartLineNumber()})}return s},xe=e=>e!==void 0&&(r.isArrowFunction(e)||r.isFunctionExpression(e))?e:void 0,Bn=e=>{const t=e.getArguments()[0],s=xe(t);if(s!==void 0)return s;if(t===void 0||!r.isObjectLiteralExpression(t))return;const n=_(t,"handler");return n!==void 0&&r.isPropertyAssignment(n)?xe(n.getInitializer()):void 0},jc=new Set(["delete","get","head","options","patch","post","put"]),Gc=new Set(["handler","stream"]),Yc=new Set(["runAction","runMutation"]),Qc=new Set(["delete","insert","insertManyUnsafe","patch","patchIf","replace"]),Se=(e,t)=>e!==void 0&&r.isIdentifier(e)&&e.getText()===t,zn=(e,t)=>{if(!(e===void 0||!r.isObjectBindingPattern(e))){for(const s of e.getElements())if(re(s)===t){const i=s.getNameNode();return r.isIdentifier(i)?i.getText():void 0}}},Is=(e,t)=>{const s=e.getParameters()[0]?.getNameNode();if(s!==void 0)return t?r.isIdentifier(s)?s.getText():void 0:zn(s,"ctx")},Cs=(e,t)=>{const s=e.getParameters()[t?1:0]?.getNameNode();return t?s!==void 0&&r.isIdentifier(s)?s.getText():void 0:zn(s,"request")},Ts=(e,t)=>{const s=e.getBody(),n=s.getDescendantsOfKind(d.CallExpression);r.isCallExpression(s)&&n.unshift(s);for(const i of n){const o=i.getExpression();if(!r.isPropertyAccessExpression(o))continue;const a=o.getName(),c=o.getExpression();if(Yc.has(a)&&Se(c,t))return a;if(Qc.has(a)&&r.isPropertyAccessExpression(c)&&c.getName()==="db"&&Se(c.getExpression(),t))return`db.${a}`}},Os=(e,t)=>{const s=e.getBody();for(const n of s.getDescendantsOfKind(d.PropertyAccessExpression))if(n.getName()==="auth"&&Se(n.getExpression(),t))return!0;for(const n of s.getDescendantsOfKind(d.VariableDeclaration)){const i=n.getNameNode();if(!(!r.isObjectBindingPattern(i)||!Se(n.getInitializer(),t))){for(const o of i.getElements())if(re(o)==="auth")return!0}}return!1},Xc=/signature|hmac|digest|(?:^|[_-])sig(?:[_-]|$)/i,Jc=(e,t)=>{const s=e.getExpression();if(!r.isPropertyAccessExpression(s)||s.getName()!=="get"&&s.getName()!=="has")return!1;const n=s.getExpression();return r.isPropertyAccessExpression(n)&&n.getName()==="headers"&&Se(n.getExpression(),t)},Zc=e=>[...r.isStringLiteral(e)?[e.getLiteralText()]:[],...e.getDescendantsOfKind(d.StringLiteral).map(t=>t.getLiteralText())],$n=(e,t)=>{const s=e.getVariableDeclaration(t)?.getInitializer();return s===void 0?[]:Zc(s)},el=(e,t)=>{const s=e.getText();for(let n=e.getParent();n!==void 0;n=n.getParent()){if(!r.isArrowFunction(n)&&!r.isFunctionExpression(n)||!n.getParameters().some(c=>c.getName()===s))continue;const i=n.getParent();if(!r.isCallExpression(i))return[];const o=i.getExpression();if(!r.isPropertyAccessExpression(o))return[];const a=o.getExpression();return r.isIdentifier(a)?$n(t,a.getText()):[]}return[]},tl=e=>{const t=e.getArguments()[0];if(t===void 0)return[];if(r.isStringLiteral(t))return[t.getLiteralText()];if(!r.isIdentifier(t))return[];const s=e.getSourceFile(),n=$n(s,t.getText());return n.length>0?n:el(t,s)},ks=(e,t)=>{if(t===void 0)return!1;const s=e.getBody(),n=s.getDescendantsOfKind(d.CallExpression);return r.isCallExpression(s)&&n.unshift(s),n.some(i=>Jc(i,t)&&tl(i).some(o=>Xc.test(o)))},sl=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!Gc.has(t.getName()))return;let s=t.getExpression();for(;r.isCallExpression(s);){const n=s.getExpression();if(!r.isPropertyAccessExpression(n))return;const i=n.getName();if(jc.has(i)){const o=n.getExpression();return r.isIdentifier(o)&&o.getText()==="httpRoute"?i.toUpperCase():void 0}s=n.getExpression()}},nl=(e,t)=>{const s=e.getExpression();if(r.isIdentifier(s)&&s.getText()==="httpAction"){const c=xe(e.getArguments()[0]),l=c&&Is(c,!0);if(!c||l===void 0||ks(c,Cs(c,!0)))return;const u=Ts(c,l);return u===void 0?void 0:{scope:v(e),file:t,kind:"httpAction",line:e.getStartLineNumber(),readsAuth:Os(c,l),sideEffect:u}}const n=sl(e);if(n===void 0)return;const i=xe(e.getArguments()[0]),o=i&&Is(i,!1);if(!i||o===void 0||ks(i,Cs(i,!1)))return;const a=Ts(i,o);return a===void 0?void 0:{scope:v(e),file:t,kind:"httpRoute",line:e.getStartLineNumber(),method:n,readsAuth:Os(i,o),sideEffect:a}},il=(e,t)=>I(e,t,nl),rl=new Set(["btoa","encodeURI","encodeURIComponent","isSafeHeaderValue","Number","parseFloat","parseInt"]),ol=new Set(["append","set"]),Vn=e=>e!==void 0&&(r.isStringLiteral(e)||r.isNoSubstitutionTemplateLiteral(e))?e.getLiteralText():"",Rs=(e,t)=>(r.isCallExpression(e)?[e,...e.getDescendantsOfKind(d.CallExpression)]:e.getDescendantsOfKind(d.CallExpression)).some(n=>rl.has(b(n.getExpression())??"")&&ke(n,t)),al=(e,t)=>{if(Rs(e,t))return!0;const s=Q(e);return s!==void 0&&Rs(s,t)},wt=(e,t)=>la(e,t)&&!al(e,t),cl=e=>{if(r.isPropertyAccessExpression(e)&&e.getName()==="headers")return!0;const t=Q(e);return t!==void 0&&r.isNewExpression(t)&&b(t.getExpression())==="Headers"},_e=e=>{if(e===void 0)return;if(r.isObjectLiteralExpression(e))return e;const t=Q(e);return t!==void 0&&r.isObjectLiteralExpression(t)?t:void 0},Ut=(e,t,s)=>{for(const n of e.getProperties())if(r.isPropertyAssignment(n)){const i=n.getInitializer();i!==void 0&&wt(i,s.requestName)&&s.rows.push({scope:s.scope,file:s.relativePath,headerName:Vn(n.getNameNode()),line:i.getStartLineNumber(),via:t})}else if(r.isShorthandPropertyAssignment(n)){const i=n.getNameNode();wt(i,s.requestName)&&s.rows.push({scope:s.scope,file:s.relativePath,headerName:y(n),line:i.getStartLineNumber(),via:t})}else if(r.isSpreadAssignment(n)){const i=_e(n.getExpression());i!==void 0&&Ut(i,t,s)}},Un=(e,t)=>{const s=_e(e);if(s===void 0)return;const n=_(s,"headers");if(n===void 0||!r.isPropertyAssignment(n))return;const i=_e(n.getInitializer());i!==void 0&&Ut(i,"response-init",t)},ll=(e,t)=>{const s=b(e.getExpression());if(s==="Response")Un(e.getArguments()[1],t);else if(s==="Headers"){const n=_e(e.getArguments()[0]);n!==void 0&&Ut(n,"headers-ctor",t)}},dl=(e,t)=>{const s=e.getExpression();if(!r.isPropertyAccessExpression(s))return;const n=s.getName(),i=s.getExpression();if(n==="json"&&r.isIdentifier(i)&&i.getText()==="Response"){Un(e.getArguments()[1],t);return}if(ol.has(n)&&cl(i)){const o=e.getArguments()[1];o!==void 0&&wt(o,t.requestName)&&t.rows.push({scope:t.scope,file:t.relativePath,headerName:Vn(e.getArguments()[0]),line:o.getStartLineNumber(),via:n==="set"?"headers-set":"headers-append"})}},ul=(e,t)=>{for(const s of e.getDescendantsOfKind(d.NewExpression))ll(s,t);for(const s of e.getDescendantsOfKind(d.CallExpression))dl(s,t)},fl=(e,t)=>{const s=e.getExpression();if(!r.isIdentifier(s)||s.getText()!=="httpAction")return[];const n=xe(e.getArguments()[0]);if(n===void 0)return[];const i=n.getParameters()[1];if(i===void 0)return[];const o=i.getNameNode();if(!r.isIdentifier(o))return[];const a=[];return ul(n,{scope:v(e),relativePath:t,requestName:o.getText(),rows:a}),a},gl=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression))s.push(...fl(n,t));return s},pl=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...gl(i,w(t,n)))}return s},Wn="identity.ts",ml=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineIdentity";for(const s of t.getDeclarations())if(r.isImportSpecifier(s))return He(s.getImportDeclaration().getModuleSpecifierValue())?s.getNameNode().getText()==="defineIdentity":!1;return!1},hl=e=>{const t=e.getSymbol();if(!t)return!1;for(const s of t.getDeclarations()){if(!r.isNamespaceImport(s))continue;const n=s.getFirstAncestorByKind(d.ImportDeclaration);return n!==void 0&&He(n.getModuleSpecifierValue())}return!1},vl=e=>{if(r.isIdentifier(e))return ml(e);if(r.isPropertyAccessExpression(e)){const t=e.getExpression();return e.getName()==="defineIdentity"&&r.isIdentifier(t)&&hl(t)}return!1},El=e=>{const t=[];for(const s of e.getVariableDeclarations()){const n=s.getInitializer();if(n?.getKind()!==d.CallExpression||!vl(n.getExpression()))continue;const o=s.getNameNode();if(!r.isIdentifier(o)){if(s.getVariableStatement()?.hasExportKeyword()!==!0)continue;throw ye(o,"defineIdentity exports must be plain named exports (no destructuring)")}const a=Sn(s,"member");a!==void 0&&t.push({exportName:a})}return t},xl=(e,t)=>{const s=E(t,Wn);if(!L(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s),i=El(n);if(i.length!==0){if(i.length>1)throw ye(n,`lunora/identity.ts declares ${i.length.toString()} defineIdentity() contracts (${i.map(o=>o.exportName).join(", ")}); exactly one is allowed`);return i[0]}},Sl=new Set(["auth","context.auth"]),Al="userId",yl=e=>{const t=new Set;for(const s of e.getProperties()){if(r.isSpreadAssignment(s))return;(r.isPropertyAssignment(s)||r.isShorthandPropertyAssignment(s)||r.isMethodDeclaration(s))&&t.add(y(s))}return t},bl=(e,t)=>{const s=E(t,Wn);if(!L(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);for(const i of n.getDescendantsOfKind(d.CallExpression)){if(b(i.getExpression())!=="defineIdentity")continue;const[o]=i.getArguments();return o&&r.isObjectLiteralExpression(o)?yl(o):void 0}},Fs=e=>{if(e===void 0||!r.isPropertyAccessExpression(e)||e.getName()!=="identity")return;const t=e.getExpression();return Sl.has(t.getText())||Y(t,["auth"])?e:void 0},Nl=e=>{if(r.isPropertyAccessExpression(e)&&Fs(e.getExpression())!==void 0)return e.getName();if(r.isElementAccessExpression(e)&&Fs(e.getExpression())!==void 0){const t=e.getArgumentExpression();return t&&r.isStringLiteral(t)?t.getLiteralValue():void 0}},Ls=(e,t,s)=>{const n=Nl(e);return n===void 0?void 0:{declared:n===Al||s.has(n),file:t,key:n,line:e.getStartLineNumber(),scope:v(e)}},Pl=(e,t)=>{const s=bl(e,t);return s===void 0?[]:[...ee(e,t,d.PropertyAccessExpression,(n,i)=>Ls(n,i,s)),...ee(e,t,d.ElementAccessExpression,(n,i)=>Ls(n,i,s))]},wl=(e,t)=>{if(b(e.getExpression())!=="buildImageDeliveryUrl")return;const s=e.getArguments()[0];if(!s)return;const n=C(s,"key");if(!(!n||!U(n)||oe(n)))return{scope:v(e),file:t,line:e.getStartLineNumber()}},Il=(e,t)=>I(e,t,wl),Cl=new Set(["delete","get","getRaw","getWithMetadata","put"]),Tl=(e,t,s=[])=>{const n=Ge(e,t,{argIndex:0,matchReceiver:i=>i==="ctx.kv"||i.startsWith("ctx.kv."),methods:Cl});return Mt(n,s)},Ol=new Set(["queue","send"]),Ds=new Set(["bcc","cc","to"]),kl=e=>{if(!r.isPropertyAccessExpression(e))return;const t=e.getName();if(!Ol.has(t))return;const s=e.getExpression();return Y(s,["mail"])||Y(s,["email"])?t:void 0},Rl=e=>r.isObjectLiteralExpression(e)?e.getProperties().some(t=>{if(r.isShorthandPropertyAssignment(t)){const n=t.getNameNode();return Ds.has(y(t))&&U(n)&&!oe(n)}if(!r.isPropertyAssignment(t)||!Ds.has(y(t)))return!1;const s=t.getInitializer();return s!==void 0&&U(s)&&!oe(s)}):!1,Fl=(e,t)=>{const s=kl(e.getExpression());if(s===void 0)return;const n=e.getArguments()[0];if(!(!n||!Rl(n)))return{scope:v(e),file:t,line:e.getStartLineNumber(),method:s}},Ll=(e,t)=>I(e,t,Fl),Dl=(e,t,s)=>{const n=e.getArguments()[0];if(!n||!r.isObjectLiteralExpression(n))return[];const i=[];for(const o of n.getProperties()){const a=Me(o);if(a===void 0||!r.isPropertyAssignment(o))continue;const c=o.getInitializer();if(!(!c||!r.isObjectLiteralExpression(c)))for(const l of c.getProperties()){const u=Me(l);if(u===void 0)continue;const f=In(l);f!=="custom"&&i.push({column:u,exportName:t,file:s,line:l.getStartLineNumber(),strategy:f,table:a})}}return i},Ml=(e,t)=>{if(!r.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&r.isCallExpression(s)?Z(s):void 0;return n?.receiver?Kt(n.receiver).flatMap(i=>Dl(i,W(e)??e.getName(),t)):[]},_l=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of X(i))s.push(...Ml(a,o))}return s},Kl=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="replace")return!1;const s=t.getExpression();return D(s)},Bl=e=>{const t=e.getArguments()[0];if(t===void 0||!r.isObjectLiteralExpression(t))return;const s=_(t,"server");if(s!==void 0)return r.isPropertyAssignment(s)?s.getInitializer():s},zl=e=>{if(!e.isExported())return;const t=e.getInitializer();if(t?.getKind()!==d.CallExpression)return;const s=t;return Nr(s.getExpression())?s:void 0},$l=e=>{const t=zl(e),s=t===void 0?void 0:Bl(t);if(s===void 0)return[];const n=e.getNameNode(),i=r.isIdentifier(n)?W(e)??n.getText():"";return s.getDescendantsOfKind(d.CallExpression).filter(o=>Kl(o)).map(o=>({exportName:i,file:"lunora/mutators.ts",line:o.getStartLineNumber()}))},Vl=e=>e.getVariableDeclarations().flatMap(t=>$l(t)),Ul=(e,t)=>{const s=E(t,br);if(!L(s))return[];const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);return Vl(n)},Wl=new Set(["delete","get","patch"]),ql=new Set(["accountId","authorId","companyId","createdBy","createdById","customerId","groupId","memberId","organizationId","orgId","ownerId","projectId","teamId","tenantId","userId","workspaceId"]),Hl=new Set(["auth","identity","session","user"]),jl=new Set([d.EqualsEqualsEqualsToken,d.EqualsEqualsToken,d.ExclamationEqualsEqualsToken,d.ExclamationEqualsToken]),Gl=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="normalizeId"||!D(t.getExpression()))return;const s=e.getArguments()[0];return s&&r.isStringLiteral(s)?s.getLiteralText():""},Yl=e=>{let t=e,s=t.getParent();for(;s!==void 0&&(r.isAsExpression(s)||r.isParenthesizedExpression(s)||r.isNonNullExpression(s));)t=s,s=t.getParent();if(s===void 0||!r.isVariableDeclaration(s))return;const n=s.getNameNode();return r.isIdentifier(n)?n.getText():void 0},Ql=(e,t)=>e.getDescendantsOfKind(d.Identifier).some(s=>s.getText()===t),Xl=e=>r.isThrowStatement(e)||r.isReturnStatement(e)||e.getDescendantsOfKind(d.ThrowStatement).length>0||e.getDescendantsOfKind(d.ReturnStatement).length>0,Jl=(e,t)=>e.getDescendantsOfKind(d.IfStatement).some(s=>Ql(s.getExpression(),t)&&Xl(s.getThenStatement())),Zl=(e,t)=>{for(const s of e.getDescendantsOfKind(d.CallExpression)){const n=s.getExpression();if(!r.isPropertyAccessExpression(n))continue;const i=n.getName();if(!Wl.has(i))continue;const o=n.getExpression();if(!(D(o)||r.isPropertyAccessExpression(o)&&D(o.getExpression())))continue;const c=s.getArguments()[0];if(c!==void 0&&r.isIdentifier(c)&&c.getText()===t)return i}},ed=e=>e.getDescendantsOfKind(d.CallExpression).some(t=>t.getArguments().some(s=>_t(Lt(s))!==void 0)),td=e=>e.getDescendantsOfKind(d.BinaryExpression).some(t=>jl.has(t.getOperatorToken().getKind())?r.isPropertyAccessExpression(t.getLeft())||r.isPropertyAccessExpression(t.getRight()):!1),sd=e=>{for(const t of e.getDescendantsOfKind(d.Identifier))if(ql.has(t.getText()))return!0;return[...Hl].some(t=>qe(e,t).length>0)?!0:ed(e)||td(e)},nd=(e,t)=>{if(!r.isVariableDeclaration(e))return[];const s=e.getInitializer();if(s===void 0||!r.isCallExpression(s))return[];const n=Z(s);if(n?.kind!=="query"&&n?.kind!=="mutation")return[];const i=Bn(s);if(i===void 0)return[];const o=n.receiver!==void 0&&Nn(n.receiver,"use","rls"),a=sd(i),c=new Set,l=[];for(const u of i.getDescendantsOfKind(d.CallExpression)){const f=Gl(u);if(f===void 0)continue;const g=Yl(u);if(g===void 0||c.has(g)||!Jl(i,g))continue;const p=Zl(i,g);p!==void 0&&(c.add(g),l.push({exportName:W(e)??e.getName(),file:t,line:u.getStartLineNumber(),mentionsOwnership:a,sinkMethod:p,table:f,usesRls:o,visibility:n.visibility}))}return l},id=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of X(i))s.push(...nd(a,o))}return s},qn=(e,t)=>{const s=r.isIdentifier(e)&&t!==void 0?O(e):void 0;return s===void 0||t===void 0?!1:s.compilerNode===t.compilerNode?r.isIdentifier(t.getNameNode()):r.isBindingElement(s)&&s.getFirstAncestorByKind(d.Parameter)?.compilerNode===t.compilerNode},rd=e=>{const t=P(e),s=t.getParent();return(r.isPropertyAccessExpression(s)||r.isElementAccessExpression(s))&&s.getExpression()===t&&!We(s)},od=e=>{const t=P(e).getParent();return r.isVariableDeclaration(t)&&r.isObjectBindingPattern(t.getNameNode())},ad=e=>{const s=P(e).getParent();if(r.isSpreadAssignment(s)||r.isSpreadElement(s)){const n=s.getParent();return(r.isObjectLiteralExpression(n)||r.isArrayLiteralExpression(n))&&!We(n)}return r.isTemplateSpan(s)&&!r.isTaggedTemplateExpression(s.getParent().getParent())},Ke=e=>{const t=O(e);return t===void 0||rr(t.getSourceFile())},It=(e,t)=>{const s=P(e),n=s.getParent();if(!r.isCallExpression(n))return!1;const i=n.getArguments().indexOf(s),o=h(n.getExpression());if(i===-1||o===void 0)return!1;if(r.isIdentifier(o))return o.getText()==="structuredClone"&&Ke(o);if(qn(Lt(o),t))return!(r.isPropertyAccessExpression(o)&&yn.has(o.getName()))||r.isExpressionStatement(P(r.isAwaitExpression(n.getParent())?n.getParentOrThrow():n).getParent());if(!r.isPropertyAccessExpression(o))return!1;const a=o.getExpression();if(!r.isIdentifier(a)||!Ke(a))return!1;const c=a.getText(),l=o.getName();switch(c){case"console":return!0;case"JSON":return l==="stringify";case"Object":return["entries","freeze","isFrozen","keys","values"].includes(l)||l==="assign"&&i>0;default:return!1}},Re={kind:"opaque"},cd={kind:"unreached"},ld=e=>{const t=e.getSymbol()?.getDeclarations()??[],s=t.filter(o=>r.isFunctionDeclaration(o)&&o.hasBody()),[n]=s;return t.every(o=>r.isFunctionDeclaration(o)&&o.getSourceFile()===e.getSourceFile())&&s.length===1&&r.isFunctionDeclaration(n)?n:void 0},Ct=e=>{const t=h(e);if(r.isArrowFunction(t)||r.isFunctionExpression(t))return t;const s=r.isIdentifier(t)?O(t):void 0;if(s?.getSourceFile()!==e.getSourceFile())return;if(r.isFunctionDeclaration(s)){const i=ld(s);return i===void 0||Dt(i)?void 0:i}const n=te(s)?h(s.getInitializer()):void 0;return r.isArrowFunction(n)||r.isFunctionExpression(n)?n:void 0},Hn=(e,t,s)=>{const n=t.getArguments(),i=n.indexOf(s),o=i===-1||n.slice(0,i+1).some(l=>r.isSpreadElement(l))||e.getDescendantsOfKind(d.Identifier).some(l=>l.getText()==="arguments"),a=e.getParameters(),c=a[i];return o?Re:c===void 0?a.some(l=>l.isRestParameter())?Re:cd:c.isRestParameter()?Re:{kind:"parameter",parameter:c}},dd=e=>{const t=P(e),s=t.getParent();if(!r.isCallExpression(s)||s.getExpression()===t)return;const n=Ct(s.getExpression());return n===void 0?Re:Hn(n,s,t)},ud=new Set(["__defineGetter__","__defineSetter__","__proto__"]),fd=e=>r.isForInStatement(e)?e.getExpression():r.isConditionalExpression(e)?e.getCondition():r.isElementAccessExpression(e)?e.getArgumentExpression():void 0,jn=e=>{const t=P(e),s=t.getParent();if(r.isIfStatement(s)||r.isWhileStatement(s)||r.isDoStatement(s)||r.isSwitchStatement(s)||r.isCaseClause(s)||r.isTypeOfExpression(s)||r.isVoidExpression(s)||r.isComputedPropertyName(s))return!0;if(r.isTemplateSpan(s))return!r.isTaggedTemplateExpression(s.getParent().getParent());const n=fd(s);if(n!==void 0)return S(n,t);if(r.isPrefixUnaryExpression(s))return s.getOperatorToken()!==d.PlusPlusToken&&s.getOperatorToken()!==d.MinusMinusToken;if(!r.isBinaryExpression(s))return!1;const i=s.getOperatorToken().getKind(),o=i>=d.FirstAssignment&&i<=d.LastAssignment,a=i===d.QuestionQuestionToken||i===d.BarBarToken||i===d.AmpersandAmpersandToken;return!o&&!a},gd=4,Gn=(e,t,s=0)=>{if(ir(e))return!0;if(rd(e)){const i=P(e).getParent(),o=r.isElementAccessExpression(i)?i.getArgumentExpression():void 0,a=r.isStringLiteral(o)?o.getLiteralValue():void 0,c=r.isPropertyAccessExpression(i)?i.getName():a;return c===void 0||!ud.has(c)}if(od(e)||ad(e)||jn(e)||It(e,t))return!0;const n=dd(e);return n?.kind==="unreached"||n?.kind==="parameter"&&pd(n.parameter,s+1)},Ms=new WeakMap,pd=(e,t=0)=>{const s=e.getNameNode();if(!r.isIdentifier(s))return!0;const n=Ms.get(e.compilerNode);if(n!==void 0)return n;if(t>gd)return!1;const o=(s.getSymbol()?.getDeclarations().length??0)===1&&e.getParentOrThrow().getDescendantsOfKind(d.Identifier).every(a=>a===s||a.getText()!==s.getText()||O(a)?.compilerNode!==e.compilerNode||Gn(a,void 0,t));return(o||t===0)&&Ms.set(e.compilerNode,o),o},_s=new WeakMap,md=(e,t)=>{const s=r.isFunctionExpression(e)?e.getNameNode():void 0;if(!r.isArrowFunction(e)&&e.getFirstDescendantByKind(d.ThisKeyword)!==void 0)return!0;const n=new Set([t.getName(),...s===void 0?[]:[s.getText()]]);return e.getDescendantsOfKind(d.Identifier).some(i=>{if(i===s||!n.has(i.getText()))return!1;const o=O(i)?.compilerNode;return o!==void 0&&(o===t.compilerNode||s!==void 0&&o===e.compilerNode)})},hd=(e,t,s)=>{const{context:n,impl:i}=e,o=_s.get(i.compilerNode);if(o!==void 0)return o;const a=t.getNameNode(),c=r.isIdentifier(a)?[a]:a.getDescendantsOfKind(d.BindingElement).flatMap(g=>{const p=g.getNameNode();return r.isIdentifier(p)?[p]:[]}),l=new Map(c.map(g=>[g.getText(),g.getParentOrThrow().compilerNode])),u=g=>r.isIdentifier(a)?Gn(g,n):!We(g),f=!md(i,s)&&c.every(g=>(g.getSymbol()?.getDeclarations().length??0)===1)&&i.getDescendantsOfKind(d.Identifier).every(g=>{const p=g.getText();if(p==="arguments")return!1;const x=l.get(p);return x===void 0||c.includes(g)||O(g)?.compilerNode!==x?!0:u(g)});return _s.set(i.compilerNode,f),f},Ks=new WeakMap,vd=e=>{let t=Ks.get(e.compilerNode);return t===void 0&&(t=new Map(e.getVariableDeclarations().flatMap(s=>{const n=Pr(s);return n===void 0?[]:[[n.compilerNode,s]]})),Ks.set(e.compilerNode,t)),t},Ed=e=>{const t=vd(e.getSourceFile()),s=e.getAncestors().find(l=>t.has(l.compilerNode)),n=s===void 0?void 0:t.get(s.compilerNode);if(s===void 0||n===void 0)return;const[i,o]=s.getParameters(),a=o===void 0||o.isRestParameter()?void 0:o,c={context:i,impl:s,mutatorName:W(n)??n.getName()};return a!==void 0&&hd(c,a,n)?{...c,parameter:a,pristine:!0}:{...c,parameter:a,pristine:!1}},ut="args",he=e=>{const t=vn(e);if(t!==void 0){const c=h(t.object);return r.isIdentifier(c)&&c.getText()===ut?t.member:void 0}if(!r.isIdentifier(e))return;const s=O(e);if(!r.isBindingElement(s)||s.getDotDotDotToken()!==void 0)return;const n=s.getParent();if(!r.isObjectBindingPattern(n))return;const i=n.getParent(),o=te(i)?h(i.getInitializer()):void 0;return r.isBindingElement(i)&&re(i)===ut||r.isIdentifier(o)&&o.getText()===ut?re(s):void 0},xd=new Set(["auth","identity","user"]),Tt=e=>{const t=i=>{const o=_t(i);return o!==void 0&&o.length>0&&xd.has(o[0]??"")},s=h(e)??e;if(t(s))return!0;const n=Q(s);return n!==void 0&&t(n)},Yn=(e,t=2)=>{const s=new Set;for(const n of[e,...e.getDescendants()]){const i=he(n);i!==void 0&&s.add(i);const o=t>0&&r.isIdentifier(n)?Q(n):void 0;if(o!==void 0)for(const a of Yn(o,t-1))s.add(a)}return s},Fe=e=>{const t=h(e)??e;if(!r.isBinaryExpression(t))return[];const s=t.getOperatorToken().getKind(),n=t.getLeft(),i=t.getRight();if(s===d.BarBarToken)return[...Fe(n),...Fe(i)];if(s===d.AmpersandAmpersandToken){const l=(u,f)=>{const g=he(h(u)??u);return g===void 0?[]:Fe(f).filter(p=>p===g)};return[...l(n,i),...l(i,n)]}if(s!==d.ExclamationEqualsEqualsToken&&s!==d.ExclamationEqualsToken)return[];const o=[],a=he(h(n)??n),c=he(h(i)??i);return a!==void 0&&Tt(i)&&o.push(a),c!==void 0&&Tt(n)&&o.push(c),o},Sd=e=>{const t=h(e)??e;if(!r.isIdentifier(t))return!1;const s=t.getSymbol(),n=s?.getAliasedSymbol()?.getValueDeclaration()??s?.getValueDeclaration();if(!r.isVariableDeclaration(n))return!1;const i=h(n.getInitializer());return r.isCallExpression(i)&&pr(i.getExpression(),"defineIdentityGuard")},Ad=e=>{if(!Sd(e.getExpression()))return[];const t=e.getArguments();return t.flatMap((s,n)=>{const i=he(h(s)??s),o=t.some((a,c)=>c!==n&&Tt(a));return i!==void 0&&o?[i]:[]})},yd=e=>{if(r.isThrowStatement(e))return!0;if(!r.isBlock(e))return!1;const t=e.getStatements().at(-1);return t!==void 0&&r.isThrowStatement(t)},bd=e=>r.isArrowFunction(e)||r.isFunctionExpression(e)||r.isFunctionDeclaration(e)||r.isMethodDeclaration(e),Bs=(e,t)=>{for(let s=e.getParent();s!==void 0;s=s.getParent()){if(s===t||s.compilerNode===t.compilerNode)return!0;if(!(r.isBlock(s)||r.isExpressionStatement(s)||r.isAwaitExpression(s)||r.isParenthesizedExpression(s)||r.isVariableStatement(s)||r.isVariableDeclarationList(s)||r.isVariableDeclaration(s)))return!1}return!1},Nd=e=>r.isAwaitExpression(e.getParent())||e.getType().isVoid(),Pd=(e,t)=>{const s=new Set;for(const n of e.getDescendantsOfKind(d.IfStatement))if(n.getEnd()<=t&&Bs(n,e)&&yd(n.getThenStatement()))for(const i of Fe(n.getExpression()))s.add(i);for(const n of e.getDescendantsOfKind(d.CallExpression))if(n.getEnd()<=t&&Nd(n)&&Bs(n,e))for(const i of Ad(n))s.add(i);return s},wd=(e,t)=>{const s=Yn(t);if(s.size===0)return!1;const n=e.getFirstAncestor(bd);if(n===void 0)return!1;const i=Pd(n,e.getStart());return[...s].every(o=>i.has(o))},Id=new Set(["at","concat","filter","find","findLast","flat","reverse","slice","sort","toReversed","toSorted"]),Cd=new Map([["Array",new Set(["from","of"])],["Object",new Set(["entries","values"])]]),Ot=new Set(["catch","every","filter","finally","find","findIndex","findLast","findLastIndex","flatMap","forEach","map","reduce","reduceRight","some","sort","then"]),Qn=e=>e.getNameNode().getDescendantsOfKind(d.BindingElement).filter(t=>r.isIdentifier(t.getNameNode())),Td=e=>{const t=P(e),s=t.getParent();if(r.isVariableDeclaration(s))return S(s.getInitializer(),t)?s:void 0;const n=r.isForOfStatement(s)&&s.getExpression()===t?s.getInitializer():void 0;return r.isVariableDeclarationList(n)?n.getDeclarations()[0]:void 0},Od=e=>{const t=Td(e);return t===void 0?void 0:r.isIdentifier(t.getNameNode())?r.isForOfStatement(t.getParent().getParent())||te(t)?[t]:void 0:Qn(t)},ve=e=>e.isUnion()?e.getUnionTypes().every(t=>ve(t)):e.isIntersection()?e.getIntersectionTypes().some(t=>ve(t)):!e.isAny()&&!e.isUnknown()&&!e.isObject()&&!e.isTypeParameter(),Be=(e,t,s)=>{const n=r.isCallExpression(e)?h(e.getExpression()):void 0;return r.isPropertyAccessExpression(n)&&t.has(n.getName())&&(s===void 0||n.getExpression()===s)},Le=e=>{const t=h(e);if(!r.isArrowFunction(t)&&!r.isFunctionExpression(t))return;const s=t.getBody();return r.isBlock(s)?s.getDescendantsOfKind(d.ReturnStatement).filter(n=>n.getFirstAncestor(i=>r.isFunctionLikeDeclaration(i))===t).map(n=>n.getExpression()):[s]},kd=e=>{const t=r.isCallExpression(e)?h(e.getExpression()):void 0,s=r.isPropertyAccessExpression(t)?t.getExpression():void 0;return r.isPropertyAccessExpression(t)&&r.isIdentifier(s)&&Cd.get(s.getText())?.has(t.getName())===!0&&Ke(s)},Rd=e=>{const t=St(e);if(!r.isArrowFunction(t)&&!r.isFunctionExpression(t))return;const s=P(t),n=s.getParent();return r.isCallExpression(n)&&n.getArguments().includes(s)&&Be(n,bn)?n:void 0},Fd=(e,t)=>{if(!(r.isPropertyAccessExpression(e)||r.isElementAccessExpression(e))||e.getExpression()!==t)return;const s=P(e),n=s.getParent();return!r.isCallExpression(n)||n.getExpression()!==s?e:Be(n,Id,t)?n:void 0},Ld=(e,t)=>{if(r.isAwaitExpression(e))return e;if(r.isConditionalExpression(e))return e.getCondition()===t?void 0:e;const s=r.isBinaryExpression(e)?e.getOperatorToken().getKind():void 0;return s===d.QuestionQuestionToken||s===d.BarBarToken||s===d.AmpersandAmpersandToken?e:void 0},Dd=(e,t)=>{if(r.isArrayLiteralExpression(e))return e;const n=r.isSpreadElement(e)||r.isSpreadAssignment(e)||r.isShorthandPropertyAssignment(e)||r.isPropertyAssignment(e)&&S(e.getInitializer(),t)?e.getParent():void 0;return r.isArrayLiteralExpression(n)||r.isObjectLiteralExpression(n)?n:void 0},zs=e=>{const t=P(e),s=t.getParent();if(s===void 0)return;const n=r.isCallExpression(s)&&s.getArguments().includes(t)&&kd(s);return Fd(s,t)??Ld(s,t)??Dd(s,t)??(n?s:Rd(t))},Md=5e4,Xn=()=>({inProgress:new Set,verdicts:new Map});class _d{cuts=0;work=0;reset(){this.work=0}cut(){return this.cuts+=1,!0}spend(){return this.work+=1,this.work>Md&&this.cut()}memoized(t,s,n){const i=n.verdicts.get(t);if(i!==void 0)return i;if(n.inProgress.has(t))return this.cuts+=1,!1;if(this.spend())return!0;const o=this.cuts;n.inProgress.add(t);let a;try{a=s()}finally{n.inProgress.delete(t)}return this.cuts===o&&n.verdicts.set(t,a),a}}const Kd=8,Bd=8;class zd{budget;scope;taint;verdicts=Xn();constructor(t,s,n){this.scope=t,this.budget=s,this.taint=n}isCompromised(t){return this.flowHasCompromisingUse(t)&&!ve(t.getType())}flowHasCompromisingUse(t){return this.budget.memoized(t.compilerNode,()=>{const s=this.budget.cuts,n=[],i=new Set,o=(c,l)=>{i.has(c.compilerNode)||(i.add(c.compilerNode),n.push({binding:c,hops:l}))};let a=!1;o(t,0);for(const c of n)if(a=(c.binding===t?void 0:this.verdicts.verdicts.get(c.binding.compilerNode))??this.visitBinding(c,t,o),a)break;if(!a&&this.budget.cuts===s)for(const c of i)this.verdicts.verdicts.set(c,!1);return a},this.verdicts)}visitBinding({binding:t,hops:s},n,i){const o=t.getNameNode();if(!r.isIdentifier(o)){for(const l of r.isParameterDeclaration(t)?Qn(t):[])i(l,s);return!1}if(this.budget.spend())return!0;const a=(l,u)=>u&&s>=Kd?this.budget.cut():(i(l,u?s+1:s),!1);return this.taint.referencesTo(t,o.getText()).some(l=>this.valueCompromises(P(l),!0,a,0))&&(t===n||!ve(t.getType()))}valueCompromises(t,s,n,i){let o=t;for(let p=zs(o);p!==void 0;p=zs(o)){if(r.isCallExpression(p)&&this.callbackCompromises(p,n))return!0;o=P(p)}const a=o.getParent(),c=o===t&&s,l=()=>!c&&ve(o.getType());if(We(o))return!c&&(!r.isBinaryExpression(a)||this.taint.isTaintedValue(a.getRight(),!1));const u=Od(o);if(u!==void 0)return u.some(p=>n(p,!0));const f=r.isPropertyAccessExpression(a)&&a.getExpression()===o?a.getParent():void 0;if(r.isCallExpression(f)&&f.getExpression()===a)return this.methodCallCompromises(f,n);const g=this.nestedReturningFunctionOf(o);return g!==void 0?this.resultCompromises(g,n,i)&&!l():this.positionCompromises(o,n)&&!l()}resultCompromises(t,s,n){const i=P(t).getParent();if(n>=Bd)return this.budget.cut();if(r.isCallExpression(i))return i.getExpression()===P(t)?this.valueCompromises(i,!1,s,n+1):!Be(i,Ot);const o=r.isFunctionDeclaration(t)?t:i,a=r.isFunctionDeclaration(o)||te(o)?o.getNameNode():void 0;return o===void 0||!r.isIdentifier(a)?!0:this.taint.referencesTo(o,a.getText()).some(c=>{const l=P(c),u=l.getParent();return!r.isCallExpression(u)||u.getExpression()!==l||this.valueCompromises(u,!1,s,n+1)})}methodCallCompromises(t,s){return t.getArguments().filter(i=>Le(i)===void 0).some(i=>this.taint.isTaintedValue(i,!1))||this.callbackCompromises(t,s)}callbackCompromises(t,s){const n=Be(t,Ot)?t.getArguments()[0]:void 0;if(n===void 0)return!1;const i=Ct(n);return i!==void 0&&this.taint.isInImpl(i)?i.getParameters().some(o=>s(o,!1)):this.taint.isTaintedValue(n,!1)}positionCompromises(t,s){const n=t.getParent();if(r.isCallExpression(n)&&n.getArguments().includes(t))return this.argumentCompromises(n,t,s);const i=r.isSpreadElement(n)?n.getParent():void 0;if(n!==void 0&&r.isCallExpression(i))return!It(n,this.scope.context)&&this.isOpaqueCallTainted(i.getExpression(),i.getArguments(),n);if(r.isNewExpression(n))return this.isOpaqueCallTainted(n.getExpression(),n.getArguments(),t);if(r.isTemplateSpan(n)){const o=n.getParent(),a=o.getParent(),c=o.getTemplateSpans().map(l=>l.getExpression());return r.isTaggedTemplateExpression(a)&&this.isOpaqueCallTainted(a.getTag(),c,t)}return!this.isReadPosition(t)}argumentCompromises(t,s,n){if(It(s,this.scope.context))return!1;const i=Ct(t.getExpression()),o=i===void 0?void 0:Hn(i,t,s);return o?.kind==="unreached"?!1:o?.kind==="parameter"&&i!==void 0&&this.taint.isInImpl(i)?n(o.parameter,!1):this.isOpaqueCallTainted(t.getExpression(),t.getArguments(),s)}isReadPosition(t){const s=t.getParent();return s===void 0||r.isExpressionStatement(s)||r.isForStatement(s)||r.isElementAccessExpression(s)||jn(t)||S(St(t),this.scope.impl)}isOpaqueCallTainted(t,s,n){const i=!r.isIdentifier(h(n));return this.taint.isTaintedValue(t,!1)||s.some(o=>(o!==n||i)&&this.taint.isTaintedValue(o,!1))}nestedReturningFunctionOf(t){const s=St(t);return S(s,this.scope.impl)?void 0:s}}const $d=new Set(["at","every","filter","finally","find","findIndex","findLast","findLastIndex","forEach","order","slice","some","sort","withIndex","withSearchIndex"]),Vd=e=>{const t=h(e);if(!r.isIdentifier(t))return r.isPropertyAccessExpression(t)||r.isElementAccessExpression(t);const s=O(t),n=r.isVariableDeclaration(s)?h(s.getInitializer()):void 0;return s===void 0||r.isFunctionDeclaration(s)||r.isParameterDeclaration(s)||r.isArrowFunction(n)||r.isFunctionExpression(n)},Ud=new Set(["all","allSettled","any","race"]),$s=e=>r.isParameterDeclaration(e)?e:r.isBindingElement(e)?e.getFirstAncestorByKind(d.Parameter):void 0,ft=8;class Wd{budget=new _d;referencesByDeclaration=new Map;referencesByName=new Map;scope;verdicts=Xn();walk;variableDepth=0;queryDepth=0;constructor(t){this.scope=t,this.walk=new zd(t,this.budget,this);for(const s of t.impl.getDescendantsOfKind(d.Identifier)){const n=s.getText();this.referencesByName.set(n,[...this.referencesByName.get(n)??[],s])}}isTaintedValue(t,s){this.queryDepth===0&&this.budget.reset(),this.queryDepth+=1;try{return s&&this.isRootedInContext(t,ft)?!1:(r.isIdentifier(t)?[t]:t.getDescendantsOfKind(d.Identifier)).some(i=>or(i)&&this.isIdentifierTainted(i))}finally{this.queryDepth-=1}}isInImpl(t){const{impl:s}=this.scope;return t!==s&&s.getPos()<=t.getPos()&&t.getEnd()<=s.getEnd()}referencesTo(t,s){let n=this.referencesByDeclaration.get(s);if(n===void 0){n=new Map;for(const i of this.referencesByName.get(s)??[]){const o=O(i)?.compilerNode;o!==void 0&&n.set(o,[...n.get(o)??[],i])}this.referencesByDeclaration.set(s,n)}return(n.get(t.compilerNode)??[]).filter(i=>i.getParent()!==t)}flowsIntoTainted(t){if([t.getInitializer(),...t.getDescendantsOfKind(d.BindingElement).map(g=>g.getInitializer())].some(g=>g!==void 0&&this.isTaintedValue(g,!1)))return!0;const n=t.getParentOrThrow(),i=r.isFunctionLikeDeclaration(n)?n.getParameters().findIndex(g=>g.compilerNode===t.compilerNode):-1,o=P(n),a=o.getParent();if(i===-1)return!0;if(r.isCallExpression(a)){if(a.getExpression()===o)return this.isCallSiteTainted(a,i,t.isRestParameter());const g=h(a.getExpression());if(!r.isPropertyAccessExpression(g)||!Ot.has(g.getName()))return!0;const p=a.getArguments().filter(x=>x!==o);return this.isTaintedValue(g.getExpression(),!0)||p.some(x=>this.isTaintedValue(x,!1))}const c=r.isVariableDeclaration(a)&&te(a)?a:void 0,l=r.isFunctionDeclaration(n)?n:c,u=l?.getNameNode();if(l===void 0||!r.isIdentifier(u))return!0;const f=this.referencesTo(l,u.getText());return f.length===0||f.some(g=>{const p=P(g),x=p.getParent();return!r.isCallExpression(x)||x.getExpression()!==p||this.isCallSiteTainted(x,i,t.isRestParameter())})}isCallSiteTainted(t,s,n){const i=t.getArguments(),o=i.findIndex(c=>r.isSpreadElement(c)),a=c=>c===s||n&&c>s||o!==-1&&o<=s&&c>=o;return i.some((c,l)=>a(l)&&this.isTaintedValue(c,!1))}isContextRootedCombinator(t,s){const n=h(t.getExpression()),i=r.isPropertyAccessExpression(n)?n.getExpression():void 0,a=r.isPropertyAccessExpression(n)&&r.isIdentifier(i)&&i.getText()==="Promise"&&Ke(i)&&Ud.has(n.getName())?h(t.getArguments()[0]):void 0;if(r.isArrayLiteralExpression(a)){const f=a.getElements();return f.length>0&&f.every(g=>!r.isSpreadElement(g)&&this.isRootedInContext(g,s))}const c=r.isCallExpression(a)?h(a.getExpression()):void 0,l=r.isCallExpression(a)&&r.isPropertyAccessExpression(c)&&c.getName()==="map"?h(a.getArguments()[0]):void 0,u=l===void 0?void 0:Le(l);return u!==void 0&&u.length>0&&u.every(f=>f!==void 0&&this.isRootedInContext(f,s))}isIdentifierTainted(t){const s=t.getText();if(s==="arguments")return!0;const n=O(t),i=$s(n);if(i!==void 0)return this.isSource(i);if(s==="args")return!0;if(n===void 0||!this.isInImpl(n))return!1;if(r.isFunctionDeclaration(n))return this.budget.memoized(n.compilerNode,()=>this.isTaintedValue(n,!1),this.verdicts);if(r.isBindingElement(n)&&this.walk.isCompromised(n))return!0;const o=r.isBindingElement(n)?n.getFirstAncestorByKind(d.VariableDeclaration):n;return r.isVariableDeclaration(o)&&this.isVariableTainted(o)}callChainVerdict(t,s){if(this.isContextRootedCombinator(t,s))return!0;const n=h(t.getExpression()),i=r.isPropertyAccessExpression(n)?n.getName():void 0;return i!==void 0&&yn.has(i)?!1:i!==void 0&&bn.has(i)?this.isCallbackResultServerScoped(t,s)?void 0:!1:t.getArguments().some(a=>Le(a)!==void 0)&&(i===void 0||!$d.has(i))?!1:void 0}isCallbackResultServerScoped(t,s){const n=(i,o=[])=>{const a=Lt(i),c=r.isIdentifier(a)?$s(O(a)):void 0;return c!==void 0&&o.includes(c)?!0:this.isRootedInContext(i,s)||!this.isTaintedValue(i,!1)};return t.getArguments().every(i=>{const o=Le(i);if(o===void 0)return!Vd(i)&&n(i);const a=h(i),c=r.isArrowFunction(a)||r.isFunctionExpression(a)?a.getParameters():[];return o.every(l=>l===void 0||n(l,c))})}isRootedInContext(t,s){const n=tr(t,u=>this.callChainVerdict(u,s)),i=n.root;if(n.verdict!==void 0)return n.verdict;if(qn(i,this.scope.context))return!0;const o=r.isIdentifier(i)?O(i):void 0,a=r.isBindingElement(o)?o.getFirstAncestorByKind(d.VariableDeclaration):o,c=te(a)&&this.isInImpl(a)?a.getInitializer():void 0,l=r.isBindingElement(o)?o:a;return s>0&&c!==void 0&&(r.isBindingElement(l)||r.isVariableDeclaration(l))&&!this.walk.isCompromised(l)&&this.isRootedInContext(c,s-1)}isSource(t){const{impl:s,parameter:n}=this.scope;return t.compilerNode===n?.compilerNode?!0:t.getParent()!==s&&this.isInImpl(t)&&(this.budget.memoized(t.compilerNode,()=>this.flowsIntoTainted(t),this.verdicts)||this.walk.isCompromised(t))}isVariableTainted(t){return this.budget.memoized(t.compilerNode,()=>{const s=t.getParent().getParent();if(r.isCatchClause(t.getParent())||this.walk.isCompromised(t))return!0;if(r.isForOfStatement(s)||r.isForInStatement(s))return this.isTaintedValue(s.getExpression(),!0);const n=t.getInitializer(),i=Dt(t);if(n===void 0||i)return!0;if(this.isRootedInContext(n,ft))return!1;if(this.variableDepth>=ft)return this.budget.cut();this.variableDepth+=1;try{return this.isTaintedValue(n,!1)}finally{this.variableDepth-=1}},this.verdicts)}}const Vs=new WeakMap,qd=e=>{const t=Vs.get(e.impl.compilerNode);if(t!==void 0)return t;const s=new Wd(e);return Vs.set(e.impl.compilerNode,s),s},Hd=new Set(["accountId","authorId","createdBy","createdById","organizationId","orgId","ownerId","tenantId","updatedBy","userId","workspaceId"]),jd=new Set(["insert","insertManyUnsafe","patch","replace"]),Gd=e=>{if(!r.isPropertyAccessExpression(e))return;const t=e.getName();return jd.has(t)&&dr(e.getExpression())?t:void 0},Yd=(e,t)=>{if(t!=="insertManyUnsafe")return r.isObjectLiteralExpression(e)?[e]:[];if(!r.isArrayLiteralExpression(e))return[];const s=[];for(const n of e.getElements())r.isObjectLiteralExpression(n)&&s.push(n);return s},Qd=(e,t)=>{const s=vn(e);return s?.member===t?h(s.object):void 0},Us=(e,t)=>r.isIdentifier(e)&&O(e)?.compilerNode===t.compilerNode,Jn=(e,t,s,n=1)=>{const i=Qd(e,s);if(i!==void 0)return Us(i,t);const o=r.isIdentifier(e)?O(e):void 0;if(r.isBindingElement(o)){const c=o.getParent(),l=c.getParent();return o.getDotDotDotToken()===void 0&&re(o)===s&&r.isObjectBindingPattern(c)&&(l.compilerNode===t.compilerNode||te(l)&&Us(h(l.getInitializer()),t))}const a=te(o)?o.getInitializer():void 0;return n>0&&a!==void 0&&Jn(a,t,s,n-1)},kt=e=>{const t=h(e)??e;return r.isConditionalExpression(t)?[...kt(t.getWhenTrue()),...kt(t.getWhenFalse())]:[t]},Xd=(e,t,s)=>{const n=[],i=s===void 0?void 0:qd(s);for(const o of e.getProperties()){let a,c;if(r.isPropertyAssignment(o)?(a=y(o),c=o.getInitializer()):r.isShorthandPropertyAssignment(o)&&(a=y(o),c=o.getNameNode()),a===void 0||c===void 0||!Hd.has(a))continue;const l=kt(c).filter(f=>i===void 0?U(f)&&!ur(f):i.isTaintedValue(f,!0));if(l.length>0){const f=t.ownerField===a&&s?.pristine===!0&&Jn(c,s.parameter,a),g=l.every(p=>wd(t.call,p));n.push({field:a,file:t.relativePath,line:t.call.getStartLineNumber(),method:t.method,scope:t.scope,...f&&{ownerScoped:!0},...g&&{guarded:!0}})}}return n},Jd=(e,t,s)=>{const n=Gd(e.getExpression()),i=n===void 0?void 0:e.getArguments()[1];if(n===void 0||i===void 0)return[];const o=Yd(i,n);if(o.length===0)return[];const a=v(e),c=Ed(e),l={call:e,method:n,ownerField:c===void 0?void 0:s(c.mutatorName),relativePath:t,scope:a};return o.flatMap(u=>Xd(u,l,c))},Zd=(e,t,s=[],n=[])=>{const i=new Map(n.map(c=>[`${c.filePath}:${c.exportName}`,c.owner])),o=I(e,t,(c,l)=>Jd(c,l,u=>i.get(`${l}:${u}`))),a=new Map(s.map(c=>[`${c.filePath}:${c.exportName}`,c.adminOnly===!0]));return Mt(o,s).map(c=>ar(c.scope)?.every(f=>a.get(`${c.file}:${f}`)===!0)===!0?{...c,adminOnly:!0}:c)},eu=new Set(["createAutumnAdapter","createDodoPaymentsAdapter","createPolarAdapter","createStripeAdapter"]),tu=e=>e&&r.isNumericLiteral(e)?Number(e.getText()):void 0,su=e=>{const t=_(e,"webhookToleranceSeconds");return t&&r.isPropertyAssignment(t)?tu(t.getInitializer()):void 0},nu=(e,t)=>{const s=b(e.getExpression());if(s===void 0||!eu.has(s))return;const[n]=e.getArguments(),i=n&&r.isObjectLiteralExpression(n)?su(n):void 0;return{callee:s,scope:v(e),file:t,line:e.getStartLineNumber(),...i===void 0?{}:{toleranceSeconds:i}}},iu=(e,t)=>I(e,t,nu),ru=new Map([["defineQueue",0],["defineSubscription",1],["defineWorkflow",0]]),ou=e=>{const t=e.getExpression();return r.isIdentifier(t)?t.getText():void 0},au=(e,t)=>{const s=e.getArguments()[t];if(!s||!r.isObjectLiteralExpression(s))return;const n=_(s,"handler");if(n===void 0||!r.isPropertyAssignment(n))return;const i=n.getInitializer();if(i&&(r.isArrowFunction(i)||r.isFunctionExpression(i)))return i},Zn=(e,t)=>{const s=e.getParameters()[t]?.getNameNode();return s&&r.isIdentifier(s)?s.getText():void 0},ei=(e,t)=>e===t||e.startsWith(`${t}.`),ti=e=>{const t=e.getDescendantsOfKind(d.PropertyAccessExpression);return r.isPropertyAccessExpression(e)&&t.push(e),t},Ws=e=>{const t=e.getParent();return r.isPropertyAccessExpression(t)&&t.getNameNode()===e||r.isPropertyAssignment(t)&&t.getNameNode()===e?!1:!(r.isBindingElement(t)&&t.getNameNode()===e)},si=e=>{const t=e.getDescendantsOfKind(d.Identifier).filter(s=>Ws(s));return r.isIdentifier(e)&&Ws(e)&&t.push(e),t},cu=e=>{if(!r.isVariableDeclaration(e))return[];const t=e.getNameNode();return r.isIdentifier(t)?[t.getText()]:t.getDescendantsOfKind(d.BindingElement).map(s=>s.getName())},lu=e=>{const t=Zn(e,1);if(t===void 0)return[];const s=[`${t}.messages`];for(const n of e.getDescendantsOfKind(d.ForOfStatement)){if(n.getExpression().getText()!==`${t}.messages`)continue;const i=n.getInitializer(),o=r.isVariableDeclarationList(i)?i.getDeclarations()[0]?.getNameNode():void 0;o&&r.isIdentifier(o)&&s.push(`${o.getText()}.body`)}return s},du=(e,t,s)=>{const n=t==="workflow"?[`${s}.params`]:lu(e),i=new Set,o=a=>ti(a).some(c=>n.some(l=>ei(c.getText(),l)))?!0:si(a).some(c=>i.has(c.getText()));for(const a of e.getDescendantsOfKind(d.VariableDeclaration)){const c=a.getInitializer();if(c&&o(c))for(const l of cu(a))i.add(l)}return{names:i,prefixes:n}},uu=(e,t)=>ti(e).some(s=>t.prefixes.some(n=>ei(s.getText(),n)))?!0:si(e).some(s=>t.names.has(s.getText())),fu=e=>{const t=sr(e);return t===void 0?void 0:{exportName:String(t.at(-1)),file:t.slice(0,-1).join("/")}},gu=(e,t,s)=>{const n=Zn(e,0);if(n===void 0)return[];const i=du(e,t,n),o=new Set([n,...i.prefixes.filter(c=>c.endsWith(".body")).map(c=>c.slice(0,-5))]),a=[];for(const c of e.getDescendantsOfKind(d.CallExpression)){const l=c.getExpression();if(!r.isPropertyAccessExpression(l)||!En.has(l.getName())||!o.has(l.getExpression().getText()))continue;const u=c.getArguments()[1];if(!u||!uu(u,i))continue;const f=fu(c.getArguments()[0]);f!==void 0&&a.push({dispatchKind:t,file:s,scope:v(c),line:c.getStartLineNumber(),targetExport:f.exportName,targetFile:f.file})}return a},pu=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression)){const i=ou(n),o=i===void 0?void 0:ru.get(i);if(o===void 0)continue;const a=au(n,o);a!==void 0&&s.push(...gu(a,i==="defineWorkflow"?"workflow":"queue",t))}return s},mu=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...pu(i,w(t,n)))}return s},qs={dbRateLimit:"usesRateLimit",emailGateMiddleware:"usesEmailGate",mask:"usesMask",rateLimit:"usesRateLimit",rls:"usesRls",verifyTurnstileMiddleware:"usesCaptcha"},Hs=new Set(["account","credential","member","passkey","session","user"]),hu=e=>e.replaceAll(/[-_]/gu," ").replaceAll(/([a-z0-9])([A-Z])/gu,"$1 $2").split(" ").filter(Boolean).map(t=>t.toLowerCase()),vu=e=>{const s=hu(e).at(-1);if(!s)return!1;const n=s.endsWith("s")?s.slice(0,-1):s;return Hs.has(s)||Hs.has(n)},Eu=e=>{const t=e.replaceAll(/[^a-z0-9]/giu,"").toLowerCase();return t.endsWith("email")||t.endsWith("emailaddress")},xu=(e,t)=>{const{objects:s,opaque:n}=$t(e,t);return Ta(s).some(i=>Eu(i))?!0:n?void 0:!1},Su=e=>{const t=e.getArguments()[0];return!t||!r.isObjectLiteralExpression(t)?{usesCaptcha:!1,usesRateLimit:!1}:{usesCaptcha:!!_(t,"captcha"),usesRateLimit:!!_(t,"rateLimit")}},Au=e=>{if(r.isCallExpression(e))return e;if(!r.isIdentifier(e))return;const s=e.getSourceFile().getVariableDeclaration(e.getText())?.getInitializer();return s&&r.isCallExpression(s)?s:void 0},De={usesCaptcha:!1,usesEmailGate:!1,usesMask:!1,usesRateLimit:!1,usesRls:!1},yu=e=>{const t=Au(e),s=t?b(t.getExpression()):void 0;if(t&&s==="protectPublic"){const n=Su(t);return{...De,usesCaptcha:n.usesCaptcha,usesRateLimit:n.usesRateLimit}}return s!==void 0&&s in qs?{...De,[qs[s]]:!0}:De},bu=e=>{const t={...De};let s=e;for(;r.isCallExpression(s);){const n=s.getExpression();if(!r.isPropertyAccessExpression(n))break;const i=n.getName()==="use"?s.getArguments()[0]:void 0;if(i){const o=yu(i);t.usesCaptcha||=o.usesCaptcha,t.usesEmailGate||=o.usesEmailGate,t.usesMask||=o.usesMask,t.usesRateLimit||=o.usesRateLimit,t.usesRls||=o.usesRls}s=n.getExpression()}return t},Nu=new Set(["insert","insertMany","insertManyUnsafe","replace"]),Pu=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!Nu.has(t.getName()))return!1;const s=t.getExpression();if(!D(s))return!1;const i=e.getArguments()[0];return!i||!(r.isStringLiteral(i)||r.isNoSubstitutionTemplateLiteral(i))?!1:vu(i.getLiteralText())},wu=new Set(["create","publish","publishBatch","runAfter","runAt","send","sendBatch"]),js=new Set(["queues","scheduler","topics","workflows"]),Iu=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!wu.has(t.getName()))return!1;let s=t.getExpression();for(;r.isCallExpression(s)||r.isElementAccessExpression(s)||r.isPropertyAccessExpression(s);){if(r.isPropertyAccessExpression(s)&&js.has(s.getName())&&fr(s.getExpression()))return!0;s=s.getExpression()}const n=_t(s);return n?.length===1&&js.has(n[0]??"")},Cu=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="insertManyUnsafe")return!1;const s=t.getExpression();return D(s)},ni=new Set(["generateObject","generateText","streamObject","streamText"]),Tu=e=>{const t=b(e.getExpression());return t!==void 0&&ni.has(t)},Ou=e=>{const t=b(e.getExpression());if(t===void 0||!ni.has(t))return!1;const s=e.getArguments()[0];return!s||!r.isObjectLiteralExpression(s)||s.getProperties().some(n=>r.isSpreadAssignment(n))?!1:!_(s,"maxOutputTokens")},ku=new Set(["log","span","trace"]),Ru=new Set(["ai"]),Fu=new Set(["email","mail"]),Lu=new Set(["ai","browser","fetch","mail","notify","queues","sql","storage","topics","workflows"]),gt=(e,t)=>[...t].some(s=>qe(e,s).length>0),ii=new Set([d.ArrowFunction,d.FunctionDeclaration,d.FunctionExpression,d.GetAccessor,d.MethodDeclaration,d.SetAccessor]),Du=new Set(["every","filter","flatMap","forEach","map","some"]),Mu=new Set(["all","allSettled","race"]),ri=e=>{const t=e.getParent();if(!t||!r.isCallExpression(t)||!t.getArguments().includes(e))return;const s=t.getExpression();if(!r.isPropertyAccessExpression(s))return;const n=s.getName();if(Du.has(n))return t;const i=s.getExpression();if(r.isIdentifier(i)&&i.getText()==="Promise"&&Mu.has(n))return t},_u=e=>{let t=e.getParent();for(;t;){if(r.isTryStatement(t)){const s=t.getTryBlock();if(e.getPos()>=s.getPos()&&e.getEnd()<=s.getEnd())return!0}if(ii.has(t.getKind())){const s=ri(t);if(!s)return!1;t=s;continue}t=t.getParent()}return!1},Ku=e=>{let t=e.getParent();for(;t!==void 0;){if(r.isCallExpression(t)&&t.getExpression().getText()==="Promise.allSettled")return!0;if(ii.has(t.getKind())){if(t=ri(t),t===void 0)return!1;continue}t=t.getParent()}return!1},Bu=e=>{const t=e.getFirstAncestor(u=>r.isArrowFunction(u)||r.isFunctionExpression(u)),s=t?.getParent();if(!t||!r.isCallExpression(s)||!s.getArguments().includes(t))return!1;const n=s.getExpression();if(!r.isIdentifier(n))return!1;const i=n.getSymbol(),o=i?.getAliasedSymbol()?.getValueDeclaration()??i?.getValueDeclaration(),a=r.isVariableDeclaration(o)?o.getInitializer():o;if(!r.isArrowFunction(a)&&!r.isFunctionExpression(a)&&!r.isFunctionDeclaration(a))return!1;const c=s.getArguments().indexOf(t),l=a.getParameters()[c]?.getName();return l===void 0?!1:a.getDescendantsOfKind(d.TryStatement).some(u=>{const f=u.getTryBlock().getDescendantsOfKind(d.CallExpression).some(p=>{const x=p.getExpression();return r.isIdentifier(x)&&x.getText()===l&&r.isAwaitExpression(p.getParent())}),g=u.getCatchClause();return f&&g!==void 0&&g.getDescendantsOfKind(d.ThrowStatement).length>0})},zu=e=>{let t=e;for(;;){const s=t.getParent();if(!r.isPropertyAccessExpression(s)||s.getExpression()!==t)return!1;if(s.getName()==="catch")return!0;if(s.getName()!=="then"&&s.getName()!=="finally")return!1;const n=s.getParent();if(!r.isCallExpression(n)||n.getExpression()!==s)return!1;t=n}},$u=e=>{let t=e;for(;;){const s=t.getParent();if(r.isPropertyAccessExpression(s)&&s.getExpression()===t){t=s;continue}return r.isCallExpression(s)&&s.getExpression()===t?s:void 0}},Vu=e=>{let t=!1,s=!0;for(const n of[...Lu].flatMap(i=>qe(e,i))){const i=$u(n);i&&(t=!0,!_u(i)&&!zu(i)&&!Bu(i)&&!Ku(i)&&(s=!1))}return{handlesErrors:t&&s,reachesOutbound:t}},Uu=e=>e.getDescendantsOfKind(d.ThrowStatement).some(t=>{const s=t.getExpression();if(!r.isNewExpression(s))return!1;const n=s.getExpression();return r.isIdentifier(n)&&n.getText()==="Error"}),Gs="lunora-advisor-exempt",Wu=/^[\s*/]+/u,qu=/[\w-]/u,Hu=e=>{const s=(e.getFirstAncestorByKind(d.VariableStatement)??e).getLeadingCommentRanges().map(n=>n.getText()).join(`
1
+ import{existsSync as L,mkdirSync as fn,readFileSync as Wi,writeFileSync as qi,rmSync as xt,readdirSync as Hi}from"node:fs";import{dirname as gn,join as E,relative as ji}from"node:path";import{performance as ct}from"node:perf_hooks";import{runAdvisor as Gi}from"@lunora/advisor";import{LunoraError as G}from"@lunora/errors";import{serializeSchemaSnapshot as Yi}from"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{toAdvisorContext as Qi}from"./formatAdvisories-BCVASH7N.mjs";import{Node as r,SyntaxKind as d,ts as Xi,VariableDeclarationKind as Ji}from"ts-morph";import{listLunoraSourceFiles as A,lunoraRelativePath as w,bindingKeyName as re,collectCallRows as I,findObjectProperty as _,collectSecurityCallRows as Zi,propertyInitializer as C,listSecurityScanFiles as Ue,objectLiteralFromCallbackBody as pn,limitNameOf as mn,optionsObjectLiteral as hn,handlerOf as er,collectNodeRows as ee,chainRootOf as Lt,outermostValueWrapper as P,isWriteTarget as We,isSameNode as S,unwrapExpression as h,isConstDeclaration as te,memberAccessOf as vn,returningFunctionOf as St,walkChain as tr,RUN_METHODS as En,functionReferenceSegments as sr,isTestPath as nr,isFunctionLike as se,functionKeyOf as xn}from"./isTestPath-B81lOULB.mjs";import{b as X,d as W,f as O,g as Dt,c as v,a as Sn,w as Mt,k as ir,l as rr,h as or,m as ar,j as At,i as cr}from"./attribution-hVBriwzy.mjs";import{a as Ss,r as lt,i as Y,b as lr,m as An,c as qe,e as _t,E as yn,C as bn,d as dr,f as ur,g as fr}from"./context-root-YkWLB6M2.mjs";import{a as b,i as gr,c as Z,d as Nn,e as pr,f as mr}from"./classify-procedure-call-CcgP-9I0.mjs";import{a as y,r as Pn,s as hr,b as vr}from"./project-config-file-BV7RR-l6.mjs";import{a as Er,b as He}from"./module-specifiers-WF8iAydP.mjs";import{r as je,s as xr}from"./parse-validator-IDBKIT7M.mjs";import Sr from"./discoverAuthApiCalls-xs0ONfI-.mjs";import{i as D,r as wn}from"./database-calls-BnVUlTx_.mjs";import Ar from"./discoverHyperdriveCalls-DFbp-ILH.mjs";import{diagnosticAt as ye}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{m as Kt,a as Me,s as In,d as yr}from"./index-DvmKcoFV.mjs";import{MUTATORS_FILENAME as br,isDefineMutatorCallee as Nr,mutatorServerImplOf as Pr,discoverMutators as wr}from"./MUTATORS_FILENAME-Jkk8Zgkb.mjs";import Ir from"./discoverNondeterministicCalls-D7Ovq8ae.mjs";import{discoverNotifyConfig as Cr,discoverNotifyCalls as Tr}from"./NOTIFY_FILENAME-CjbDYC2a.mjs";import Or from"./discoverR2sqlCalls-TNwsmYje.mjs";import kr from"./discoverRlsProcedures-BeLdV5RT.mjs";import{s as Bt,n as Rr}from"./dispatch-namespace-DwTjD7BU.mjs";import{secretKindOf as Fr,redact as Lr,isHeuristicSecretKind as Dr,isSecretishName as Mr}from"./redact-Cy14LEnc.mjs";import{a as Oe,d as _r,r as Kr}from"./modules-CjOcuQnK.mjs";import{WORKFLOWS_FILENAME as Br,discoverWorkflows as zr}from"./WORKFLOWS_FILENAME-CdeS224T.mjs";import{r as $r}from"./json-data-Chfs2Cz5.mjs";import{G as Vr}from"./shared-DnCokNcE.mjs";import{createCodegenProject as Ur}from"./createCodegenProject-V51_yBw3.mjs";import{findTsconfig as wv,refreshCodegenProject as Iv}from"./createCodegenProject-V51_yBw3.mjs";import{CAPABILITIES as Wr,usedCapabilities as qr}from"./CAPABILITY_PROBES-brcmKenl.mjs";import{isD1GlobalTable as Cn,isHyperdriveGlobalTable as Tn}from"./isD1GlobalTable-udvHAAzD.mjs";import{discoverAgents as Hr}from"./AGENTS_FILENAME-B6-kjzM3.mjs";import{discoverContainers as jr}from"./CONTAINERS_FILENAME-dFRtAyIe.mjs";import Gr from"./discoverCrons-DBnCama4.mjs";import{contextPropertiesRead as Yr,discoverFeatureUsage as Qr}from"./capabilitiesUsedBy-QgSZyE0T.mjs";import On from"./readPackageDependencies-RHhGiz0k.mjs";import{discoverQueueDeclarations as Xr}from"./QUEUES_FILENAME-CsRy4VTF.mjs";import{discoverSandboxUsage as Jr}from"./discoverSandboxUsage-w6Q3RvxZ.mjs";import{resolveServiceBindings as Zr}from"./readServiceBindings-DvqIThzd.mjs";import eo from"./discoverStorageRulesMetadata-BBMy9JVZ.mjs";import{resolveCodegenTarget as kn,gatePlatformFeatures as to,readTargetDiagnostics as so,vectorizeDimensionDiagnostics as no,studioPlatformFor as io}from"./DEFAULT_TARGET-B0FkdiZq.mjs";import{i as ro}from"./schema-BgM8A3XV.mjs";import{b as Rn,e as oo}from"./shard-DYYhXxEG.mjs";import{e as ao,a as co}from"./server-DAvi_bv_.mjs";import{emitDataModel as lo}from"./emitDataModel-BskFt9Wv.mjs";import{i as uo,a as fo,e as go,b as po,d as mo,c as ho}from"./unwrap-handler-return-CeaOifqX.mjs";import vo from"./discoverFunctions-5Zy6K4uA.mjs";import Eo from"./discoverHttpRoutes-WBAqBcfK.mjs";import xo from"./discoverInserts-DUbjhNzk.mjs";import{e as Fn}from"./exported-procedure-chains-DAl7xBBx.mjs";import So from"./discoverMigrations-C9mLIhGZ.mjs";import Ao from"./discoverQueries-BNqjOBY_.mjs";import yo from"./discoverRlsMetadata-CbdfaVep.mjs";import bo from"./discoverSchema-BtsX-CN9.mjs";import{discoverShapes as No}from"./SHAPES_FILENAME-DkBUN9dK.mjs";import{i as Po}from"./reserved-words-CW1QFbTd.mjs";import{emitApp as wo}from"./emitApp-BEe4wd3R.mjs";import{readJsonSync as Io}from"@visulima/fs";import{buildSchemaSnapshot as Co}from"./SchemaSnapshotParseError-BRJT7c2k.mjs";import{buildOpenApiDocument as To,emitOpenApiModule as Oo}from"./buildOpenApiDocument-DFv-RYZU.mjs";import{buildOpenRpcDocument as ko,emitOpenRpcModule as Ro}from"./OPENRPC_VERSION-CCY7xqSL.mjs";import{v as Fo,t as Lo,u as Do,s as Mo,w as _o}from"./shard-runtime-BQ6ZNigW.mjs";import{emitCollections as Ko,emitSeed as Bo,emitApi as zo,emitInternalApi as $o}from"./emitApi-CDgIPAG2.mjs";import{emitCrons as Vo,emitScheduler as Uo,emitShardRegistry as Wo,emitDurableObjects as qo,emitVectors as Ho,emitWranglerCronTriggers as jo}from"./emitCrons-BQW2lviZ.mjs";import Go from"./emitDrizzleSchema-DitcRZ1a.mjs";import Yo from"./emitFunctions-amc10WSc.mjs";const Ln=new Set(["delete","get","head","options","patch","post","put"]),Qo=new Set(["handler","stream"]),Xo=/\/(?:_|admin|internal|superuser|sudo|root|debug)/iu,As=new Set(["ADMIN_TOKEN","adminToken","assertAdmin","assertAuth","auth","Authorization","getSession","identity","isAdmin","requireAdmin","requireAuth","requireRole","verifyAdmin"]),Jo=e=>{if(!r.isCallExpression(e))return;const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!Ln.has(t.getName()))return;const s=t.getExpression();if(!r.isIdentifier(s)||s.getText()!=="httpRoute")return;const n=e.getArguments()[0];if(!(!n||!r.isStringLiteral(n)))return{method:t.getName().toUpperCase(),path:n.getLiteralValue()}},Zo=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t))return;let s=t.getExpression();for(;r.isCallExpression(s);){const n=s.getExpression();if(!r.isPropertyAccessExpression(n)||Ln.has(n.getName()))break;s=n.getExpression()}return Jo(s)},ea=e=>{for(const t of e.getDescendantsOfKind(d.PropertyAccessExpression))if(As.has(t.getName()))return!0;for(const t of e.getDescendantsOfKind(d.CallExpression)){const s=t.getExpression();if(r.isIdentifier(s)&&As.has(s.getText()))return!0}return!1},ta=(e,t)=>{const s=e.getInitializer();if(!s||!r.isCallExpression(s))return;const n=s.getExpression();if(!r.isPropertyAccessExpression(n)||!Qo.has(n.getName()))return;const i=Zo(s);if(!i||!Xo.test(i.path))return;const o=s.getArguments()[0],a=o!==void 0&&(r.isArrowFunction(o)||r.isFunctionExpression(o))&&ea(o);return{exportName:W(e)??e.getName(),file:t,method:i.method,path:i.path,usesGuard:a}},sa=(e,t)=>{const s=[];for(const n of X(e)){const i=ta(n,t);i&&s.push(i)}return s},na=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...sa(i,w(t,n)))}return s},ia=e=>{const t=e.getText(),s=n=>{const i=n.getNameNode();return r.isIdentifier(i)&&i.getText()===t};for(const n of e.getAncestors())if(!(!r.isArrowFunction(n)&&!r.isFunctionExpression(n)&&!r.isFunctionDeclaration(n)))for(const i of n.getParameters()){const o=i.getDescendantsOfKind(d.BindingElement).find(a=>s(a));if(o!==void 0)return o}},ra=e=>{let t=e;for(;;){const s=t.getParent();if(!r.isObjectBindingPattern(s))return;const n=s.getParent();if(r.isBindingElement(n)){t=n;continue}return r.isParameterDeclaration(n)?re(t):void 0}},oa=e=>{const t=e.getText();if(!e.getAncestors().some(o=>{const a=r.isFunctionLikeDeclaration(o)||r.isArrowFunction(o)?o.getParameters()[1]:void 0,c=a?.getNameNode();return a!==void 0&&(r.isIdentifier(c)?c.getText()===t:a.getDescendantsOfKind(d.BindingElement).some(l=>l.getName()===t))&&Ss(a)}))return!1;const n=O(e),i=r.isParameterDeclaration(n)?n:n?.getFirstAncestorByKind(d.Parameter);return i!==void 0&&(r.isParameterDeclaration(n)||r.isBindingElement(n))&&Ss(i)},ys=(e,t)=>{const s=e.getParent();if(r.isPropertyAccessExpression(s)&&s.getNameNode()===e||r.isPropertyAssignment(s)&&s.getNameNode()===e)return!1;if(e.getText()===t)return!0;const n=ia(e);return n!==void 0&&ra(n)===t?!0:t==="args"&&oa(e)},Dn=(e,t)=>r.isIdentifier(e)?ys(e,t):e.getDescendantsOfKind(d.Identifier).some(s=>ys(s,t)),aa=e=>{let t=e;for(;r.isPropertyAccessExpression(t)||r.isElementAccessExpression(t)||r.isNonNullExpression(t);)t=t.getExpression();return r.isIdentifier(t)?t:void 0},bs=e=>{const t=r.isIdentifier(e)?O(e):void 0;return r.isVariableDeclaration(t)&&r.isIdentifier(t.getNameNode())&&!Dt(t)?t.getInitializer():void 0},yt=e=>Dn(e,"args"),Q=e=>{if(!r.isIdentifier(e))return;const t=e.getText(),s=e.getFirstAncestor(a=>r.isArrowFunction(a)||r.isFunctionExpression(a)||r.isFunctionDeclaration(a));if(s===void 0)return;const n=e.getStart();let i,o=-1;for(const a of s.getDescendantsOfKind(d.VariableDeclaration)){if(a.getName()!==t)continue;const c=a.getInitializer(),l=a.getStart();c!==void 0&&l<n&&l>o&&(i=c,o=l)}return i},U=e=>{if(yt(e))return!0;const t=Q(e);return t!==void 0&&yt(t)},ca=e=>{if(r.isCallExpression(e)||r.isNewExpression(e))return!1;const t=Q(e);return t===void 0||!(r.isCallExpression(t)||r.isNewExpression(t))},oe=e=>{if(lt(e))return!0;const t=bs(e);if(t!==void 0&&lt(t))return!0;const s=t??e;return(r.isIdentifier(s)?[s]:s.getDescendantsOfKind(d.Identifier)).some(i=>{const o=bs(i);return o!==void 0&&lt(o)})},ke=(e,t)=>Dn(e,t),la=(e,t)=>{if(ke(e,t))return!0;const s=Q(e);if(s!==void 0&&ke(s,t))return!0;const n=aa(e);if(n!==void 0){const i=Q(n);return i!==void 0&&ke(i,t)}return!1},da=e=>!r.isPropertyAccessExpression(e)||e.getName()!=="run"?!1:Y(e.getExpression(),["ai"]),ua=(e,t)=>{if(!da(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!U(s)||oe(s)))return{scope:v(e),file:t,line:e.getStartLineNumber()}},fa=(e,t)=>I(e,t,ua),ga=new Set(["generateText","streamText"]),pa=new Set(["messages","prompt","system"]),ma=[{methods:new Set(["delete","insert","insertManyUnsafe","patch","patchIf","replace"]),prefixes:["context.db","ctx.db"]},{methods:new Set(["run","runAction","runMutation"]),prefixes:["context","ctx"]},{methods:new Set(["fetch"]),prefixes:["context","ctx"]},{methods:new Set(["queue","send"]),prefixes:["context.email","context.mail","ctx.email","ctx.mail"]}],ha=(e,t)=>ma.some(s=>s.methods.has(t)&&s.prefixes.some(n=>e===n||e.startsWith(`${n}.`))),va=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t))return;const s=t.getName(),n=[lr(t.getExpression()),t.getExpression().getText()].find(i=>i!==void 0&&ha(i,s));return n===void 0?void 0:`${n}.${s}`},Ea=e=>{for(const t of e.getDescendantsOfKind(d.CallExpression)){const s=va(t);if(s!==void 0)return s}},xa=e=>{const t=new Set,s=e.getFirstAncestor(o=>r.isArrowFunction(o)||r.isFunctionExpression(o)||r.isFunctionDeclaration(o)),[n]=s?.getParameters()??[],i=n?.getNameNode();if(i===void 0||!r.isObjectBindingPattern(i))return t;for(const o of i.getElements()){const a=re(o),c=o.getNameNode();if(a==="args"&&r.isObjectBindingPattern(c))for(const l of c.getElements())t.add(l.getName())}return t},Sa=e=>{if(yt(e))return!0;const t=xa(e);return t.size===0?!1:e.getDescendantsOfKind(d.Identifier).some(s=>t.has(s.getText()))},Aa=e=>{for(const t of e.getProperties()){if(!r.isPropertyAssignment(t)||!pa.has(y(t)))continue;const s=t.getInitializer();if(s!==void 0&&Sa(s))return!0}return!1},ya=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression)){const i=b(n.getExpression());if(i===void 0||!ga.has(i))continue;const[o]=n.getArguments();if(o===void 0||!r.isObjectLiteralExpression(o))continue;let a;for(const c of o.getDescendantsOfKind(d.CallExpression))if(b(c.getExpression())==="tool"&&(a=Ea(c),a!==void 0))break;a!==void 0&&s.push({scope:v(n),file:t,line:n.getStartLineNumber(),method:i,sideEffect:a,userInputDerived:Aa(o)})}return s},ba=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...ya(i,w(t,n)))}return s},Na=e=>Y(e,["fetch"]),Pa=(e,t)=>{if(!Na(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!U(s)))return{scope:v(e),file:t,line:e.getStartLineNumber()}},wa=(e,t)=>I(e,t,Pa),zt=(e,t=new Set)=>{if(t.has(e))return!0;t.add(e);try{return e.getProperties().some(s=>{if(!r.isSpreadAssignment(s))return!1;const n=je(s.getExpression());return n===void 0||zt(n,t)})}finally{t.delete(e)}},Ia=e=>{const t=e.getArguments()[0];if(!t||!r.isObjectLiteralExpression(t))return{objects:[],opaque:!0};const s=_(t,"args");if(!s)return{objects:[],opaque:!1};if(!r.isPropertyAssignment(s))return{objects:[],opaque:!0};const n=s.getInitializer(),i=n===void 0?void 0:je(n);return i===void 0?{objects:[],opaque:!0}:{objects:[i],opaque:zt(i)}},Ca=e=>{const t=[];let s=!1,n=e;for(;r.isCallExpression(n);){const i=n.getExpression();if(!r.isPropertyAccessExpression(i))break;if(i.getName()==="input"){const o=n.getArguments()[0],a=o!==void 0&&r.isExpression(o)?je(o):void 0;a===void 0?s=!0:(t.push(a),s||=zt(a))}n=i.getExpression()}return{objects:t,opaque:s}},$t=(e,t)=>t?Ca(t):Ia(e),Mn=(e,t)=>{if(t.has(e))return[];t.add(e);try{return e.getProperties().flatMap(s=>{if(r.isSpreadAssignment(s)){const n=je(s.getExpression());return n===void 0?[]:Mn(n,t)}return r.isPropertyAssignment(s)||r.isShorthandPropertyAssignment(s)?[y(s)]:[]})}finally{t.delete(e)}},Ta=e=>e.flatMap(t=>Mn(t,new Set)),Oa=new Set(["check","length","max"]),bt=e=>{let t=e;for(;;){const s=t.getParent();if(!s||!r.isPropertyAccessExpression(s)||s.getExpression()!==t)return!1;const n=s.getParent();if(!n||!r.isCallExpression(n)||n.getExpression()!==s)return!1;if(Oa.has(s.getName()))return!0;t=n}},Nt=e=>Er(e)||e==="@lunora/values",ka=e=>{const t=new Set(["v"]);for(const s of gr(e,"v",Nt))t.add(s);for(const s of e.getImportDeclarations()){const n=s.getNamespaceImport();n&&Nt(s.getModuleSpecifierValue())&&t.add(`${n.getText()}.v`)}return t},Ra=(e,t)=>{const s=new Map;for(const n of e.getVariableStatements())for(const i of n.getDeclarations()){const o=i.getNameNode(),a=i.getInitializer();if(!(!r.isObjectBindingPattern(o)||!a||!t.has(a.getText())))for(const c of o.getElements())c.getDotDotDotToken()||s.set(c.getName(),c.getPropertyNameNode()?.getText()??c.getName())}return s},Fa=e=>(e.getSymbol()?.getDeclarations()??[]).some(t=>!t.getSourceFile().isDeclarationFile()&&!r.isImportSpecifier(t)&&!r.isNamespaceImport(t)&&!r.isImportClause(t)),La=e=>(e.getSymbol()?.getDeclarations()??[]).some(t=>r.isNamespaceImport(t)&&Nt(t.getFirstAncestorByKindOrThrow(d.ImportDeclaration).getModuleSpecifierValue())),Vt=(e,t)=>{if(!r.isCallExpression(e))return;const s=e.getExpression();if(r.isPropertyAccessExpression(s)){const n=s.getExpression();if(!t.namespaces.has(n.getText()))return;if(r.isIdentifier(n))return Fa(n)?void 0:s.getName();const i=r.isPropertyAccessExpression(n)?n.getExpression():void 0;return r.isIdentifier(i)&&La(i)?s.getName():void 0}if(r.isIdentifier(s))return t.destructured.get(s.getText())},Da=(e,t)=>{if(!r.isIdentifier(e))return;const s=e.getText(),n=t.getVariableDeclaration(s)?.getInitializer();return n&&(r.isArrowFunction(n)||r.isFunctionExpression(n))?n:t.getFunction(s)},Ma=e=>{let t=e.getParent();for(;t&&!r.isFunctionLikeDeclaration(t);)t=t.getParent();return t},_a=e=>r.isReturnStatement(e)?e.getExpression():void 0,Ka=e=>r.isArrowFunction(e)&&!r.isBlock(e.getBody())?[e.getBody()]:e.getDescendantsOfKind(d.ReturnStatement).filter(t=>Ma(t)?.compilerNode===e.compilerNode).flatMap(t=>{const s=_a(t);return s?[s]:[]}),_n=(e,t)=>{if(Vt(e,t)!==void 0)return e;if(r.isCallExpression(e)||r.isPropertyAccessExpression(e))return _n(e.getExpression(),t)},Ba=(e,t)=>{const s=Da(e.getExpression(),e.getSourceFile());if(!s)return[];const n=bt(e),i=new Set(Ka(s).map(o=>_n(o,t)).filter(o=>o!==void 0));return[s,...s.getDescendants()].flatMap(o=>{const a=Vt(o,t);return a===void 0?[]:[{bounded:bt(o)||n&&i.has(o),factory:a}]})},za=(e,t)=>[e,...e.getDescendants()].flatMap(s=>{const n=Vt(s,t),i=n===void 0?[]:[{bounded:bt(s),factory:n}];return r.isCallExpression(s)?[...i,...Ba(s,t)]:i}),$a=(e,t)=>{const s=[],n=[];for(const i of e)for(const o of i.getProperties()){if(!r.isPropertyAssignment(o))continue;const a=o.getInitializer();if(!a)continue;const c=za(a,t),l=y(o);c.some(u=>u.factory==="any")?s.push(l):c.some(u=>u.factory==="string"&&!u.bounded)&&n.push(l)}return{anyArgs:s,unboundedStringArgs:n}},Va=(e,t,s)=>{const n=e.getInitializer();if(!n||!r.isCallExpression(n))return;const i=Z(n);if(i?.visibility!=="public")return;const{objects:o}=$t(n,i.receiver),{anyArgs:a,unboundedStringArgs:c}=$a(o,s);if(!(a.length===0&&c.length===0))return{anyArgs:a,exportName:W(e)??e.getName(),file:t,line:n.getStartLineNumber(),unboundedStringArgs:c}},Ua=(e,t)=>{const s=[],n=ka(e),i={destructured:Ra(e,n),namespaces:n};for(const o of X(e)){const a=Va(o,t,i);a&&s.push(a)}return s},Wa=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Ua(i,w(t,n)))}return s},dt=e=>e?.getKind()===d.TrueKeyword,qa=e=>e?.getKind()===d.FalseKeyword,Ha=e=>e!==void 0&&r.isNumericLiteral(e)&&e.getLiteralValue()===0,ja=new Set(["lunoraAuthAdapter","lunoraD1Adapter"]),Ga=e=>!e||!r.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>r.isCallExpression(t)&&b(t.getExpression())==="scim"),Ya=e=>e!==void 0&&r.isCallExpression(e)&&ja.has(b(e.getExpression())??""),Qa=e=>!e||!r.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>r.isStringLiteral(t)&&t.getLiteralText()==="*"),Xa=e=>{const t=C(e,"advanced"),s=C(e,"emailAndPassword"),n=C(e,"session");return{analyzable:!0,disableCsrfCheck:dt(C(t,"disableCSRFCheck")),emailPasswordEnabled:dt(C(s,"enabled")),requireEmailVerification:dt(C(s,"requireEmailVerification")),scimOnNonTransactionalAdapter:Ga(C(e,"plugins"))&&Ya(C(e,"database")),secureCookiesDisabled:qa(C(t,"useSecureCookies")),sessionFreshAgeZero:Ha(C(n,"freshAge")),trustedOriginsWildcard:Qa(C(e,"trustedOrigins"))}},Ja=()=>({analyzable:!1,disableCsrfCheck:!1,emailPasswordEnabled:!1,requireEmailVerification:!1,scimOnNonTransactionalAdapter:!1,secureCookiesDisabled:!1,sessionFreshAgeZero:!1,trustedOriginsWildcard:!1}),Za=(e,t)=>{if(b(e.getExpression())!=="createAuth")return;const s=e.getArguments()[0],n=s!==void 0&&r.isObjectLiteralExpression(s)&&s.getProperties().some(o=>r.isSpreadAssignment(o)),i=s!==void 0&&r.isObjectLiteralExpression(s)&&!n?Xa(s):Ja();return{scope:v(e),file:t,line:e.getStartLineNumber(),...i}},ec=(e,t)=>Zi(e,t,Za),tc=(e,t)=>{if(!r.isPropertyAccessExpression(e))return;const s=e.getName();if(t.methods.has(s))return An(e.getExpression(),t.matchReceiver)?s:void 0},sc=(e,t,s)=>{const n=tc(e.getExpression(),s);if(n===void 0)return;const i=e.getArguments()[s.argIndex];if(!(!i||!U(i)||oe(i))&&!(s.requireUnmodifiedReach===!0&&!ca(i)))return{scope:v(e),file:t,line:e.getStartLineNumber(),method:n}},Ge=(e,t,s)=>I(e,t,(n,i)=>sc(n,i,s)),nc=new Set(["content","pdf","scrape","screenshot"]),ic=(e,t)=>Ge(e,t,{argIndex:0,matchReceiver:s=>s==="ctx.browser",methods:nc}),rc=new Set(["createBrowser","createInboundEmailHandler","createPayment"]),oc=new Set(["RateLimiter"]),ac=new Set(["extend"]),Ns="lunora",cc=["vite.config.ts","vite.config.mts","vite.config.js","vite.config.mjs"],Kn=e=>{const t=[],s=[];let n=!1;for(const i of e.getProperties()){if(r.isSpreadAssignment(i)){n=!0;continue}if(r.isPropertyAssignment(i)){const o=y(i);t.push(o),i.getInitializer()?.getKind()===d.TrueKeyword&&s.push(o);continue}(r.isShorthandPropertyAssignment(i)||r.isMethodDeclaration(i))&&t.push(y(i))}return{analyzable:!n,presentKeys:t,trueKeys:s}},Pt=e=>e&&r.isObjectLiteralExpression(e)?Kn(e):{analyzable:!1,presentKeys:[],trueKeys:[]},lc=e=>{const t=e&&(r.isArrowFunction(e)||r.isFunctionExpression(e))?e:void 0,s=t&&pn(t.getBody());return s?Kn(s):{analyzable:!1,presentKeys:[],trueKeys:[]}},dc=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression)){const i=b(n.getExpression());i!==void 0&&(rc.has(i)?s.push({callee:i,file:t,line:n.getStartLineNumber(),...Pt(n.getArguments()[0])}):ac.has(i)&&s.push({callee:i,file:t,line:n.getStartLineNumber(),...lc(n.getArguments()[0])}))}for(const n of e.getDescendantsOfKind(d.NewExpression)){const i=b(n.getExpression());i===void 0||!oc.has(i)||s.push({callee:i,file:t,line:n.getStartLineNumber(),...Pt(n.getArguments()[0])})}return s},uc=(e,t)=>{for(const s of cc){const n=E(t,s);if(!L(n))continue;const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=[];for(const a of i.getDescendantsOfKind(d.CallExpression))b(a.getExpression())===Ns&&o.push({callee:Ns,file:s,line:a.getStartLineNumber(),...Pt(a.getArguments()[0])});return o}return[]},fc=(e,t)=>{const s=[];for(const{displayPath:n,filePath:i}of Ue(t)){const o=e.getSourceFile(i)??e.addSourceFileAtPath(i);s.push(...dc(o,n))}return s.push(...uc(e,gn(t))),s},Ps="ctx.containers.",gc=e=>{if(!e.startsWith(Ps))return!1;const t=e.slice(Ps.length);return t.length>0&&!t.includes(".")},pc=(e,t)=>Ge(e,t,{argIndex:0,matchReceiver:gc,methods:new Set(["get"])}),mc=new Set(["allow","deny","setAllowed"]),hc=e=>{const t=e.getArguments()[0];if(!t||!r.isObjectLiteralExpression(t))return!1;const s=_(t,"enableInternet");return s!==void 0&&r.isPropertyAssignment(s)&&r.isTrueLiteral(s.getInitializerOrThrow())},vc=(e,t)=>{const s=e.getExpression();if(!(!r.isPropertyAccessExpression(s)||s.getName()!=="start"||!hc(e)))return{detail:"enableInternet: true",scope:v(e),file:t,kind:"enable_internet",line:e.getStartLineNumber()}},Ec=(e,t)=>{const s=e.getExpression();if(!r.isPropertyAccessExpression(s)||!mc.has(s.getName()))return;const n=s.getExpression();if(!(!r.isPropertyAccessExpression(n)||n.getName()!=="egress"))return{detail:s.getName(),scope:v(e),file:t,kind:"egress_relaxation",line:e.getStartLineNumber()}},xc=(e,t)=>vc(e,t)??Ec(e,t),Sc=(e,t)=>I(e,t,xc),Ac=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="count")return;const s=t.getExpression();if(D(s)){const n=e.getArguments()[0];return n&&r.isStringLiteral(n)?n.getLiteralText():""}return r.isPropertyAccessExpression(s)&&D(s.getExpression())?s.getName():void 0},yc=e=>{const t=e.getExpression(),s=r.isPropertyAccessExpression(t)?t.getExpression():void 0;return e.getArguments()[s!==void 0&&D(s)?1:0]},bc=new Set(["baseWhere","relationBaseWhere","restrictsCounts","where"]),Nc=e=>{if(e===void 0||!r.isObjectLiteralExpression(e))return;const t=[];for(const n of e.getProperties()){if(!r.isPropertyAssignment(n)&&!r.isShorthandPropertyAssignment(n))return;t.push(n.getName())}return t.length>0&&t.every(n=>bc.has(n))||t.some(n=>n==="AND"||n==="OR"||n==="NOT")?void 0:t},Pc=(e,t,s)=>{const n=new Map(s.map(i=>[i.name,i.aggregateIndexed===!0]));return I(e,t,(i,o)=>{const a=Ac(i);if(a===void 0)return;const c=Nc(yc(i));return{file:o,indexed:n.get(a)!==!1,...c===void 0?{}:{filterFields:c},line:i.getStartLineNumber(),scope:v(i),table:a}})},wc=new Set(["defineExportSink","r2Sink","webhookExportSink"]),Ic=e=>{const t=e.getExpression();if(!r.isIdentifier(t))return;const s=t.getText();return wc.has(s)?s:void 0},Cc=e=>{const t=[],s=[];for(const n of e.getProperties()){if(r.isSpreadAssignment(n))return{analyzable:!1,emptyKeys:[],presentKeys:[]};if(r.isPropertyAssignment(n)){const i=y(n);t.push(i);const o=n.getInitializer();o&&r.isStringLiteral(o)&&o.getLiteralText()===""&&s.push(i);continue}(r.isShorthandPropertyAssignment(n)||r.isMethodDeclaration(n)||r.isGetAccessorDeclaration(n))&&t.push(y(n))}return{analyzable:!0,emptyKeys:s,presentKeys:t}},Tc=(e,t)=>{const s=[];for(const{displayPath:n,filePath:i}of Ue(t)){const o=e.getSourceFile(i)??e.addSourceFileAtPath(i);for(const a of o.getDescendantsOfKind(d.CallExpression)){const c=Ic(a);if(c===void 0)continue;const l=a.getArguments()[0],u=l&&r.isObjectLiteralExpression(l)?Cc(l):{analyzable:!1,emptyKeys:[],presentKeys:[]};s.push({analyzable:u.analyzable,emptyKeys:u.emptyKeys,factory:c,file:n,line:a.getStartLineNumber(),presentKeys:u.presentKeys})}}return s},Oc=new Map([["dbRateLimit",2],["rateLimit",2],["verifyTurnstileMiddleware",0]]),kc=new Set(["dbRateLimit","rateLimit"]),Rc=e=>{const t=hn(e);if(!t)return!1;const s=_(t,"failOpen");return s!==void 0&&r.isPropertyAssignment(s)&&s.getInitializer()?.getKind()===d.TrueKeyword},Fc=(e,t)=>{const s=b(e.getExpression());if(s===void 0)return;const n=Oc.get(s);if(n!==void 0)return{callee:s,scope:v(e),failOpen:Rc(e.getArguments()[n]),file:t,limitName:kc.has(s)?mn(e):"",line:e.getStartLineNumber()}},Lc=(e,t)=>I(e,t,Fc),Dc=e=>{const t=e.getInitializer();if(!t||!r.isCallExpression(t))return;const s=Z(t);if(s?.kind!=="query")return;const n=er(t,s.receiver);return n?{exportName:W(e)??e.getName(),handler:n}:void 0},ws=e=>{const t=e.getParent();return t&&r.isPropertyAccessExpression(t)&&t.getExpression()===e?t:void 0},Mc=e=>{const t=ws(e);if(!t)return"ctx.flags";if(t.getName()==="details"){const s=ws(t);return s?`ctx.flags.details.${s.getName()}`:"ctx.flags.details"}return`ctx.flags.${t.getName()}`},_c=(e,t)=>{const s=[];for(const n of qe(e.handler,"flags"))s.push({callee:Mc(n),exportName:e.exportName,file:t,line:n.getStartLineNumber()});return s},Kc=(e,t)=>{const s=[];for(const n of X(e)){const i=Dc(n);i&&s.push(..._c(i,t))}return s},Bc=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Kc(i,w(t,n)))}return s},zc=e=>!r.isPropertyAccessExpression(e)||e.getName()!=="boolean"?!1:Y(e.getExpression(),["flags"]),$c=e=>{if(e?.getKind()===d.TrueKeyword)return!0;if(e?.getKind()===d.FalseKeyword)return!1},Vc=(e,t)=>{if(!zc(e.getExpression()))return;const[s,n]=e.getArguments();if(!s||!(r.isStringLiteral(s)||r.isNoSubstitutionTemplateLiteral(s)))return;const i=s.getLiteralValue(),o=$c(n);if(!(i.length===0||o===void 0))return{defaultValue:o,scope:v(e),file:t,key:i,line:e.getStartLineNumber()}},Uc=(e,t)=>I(e,t,Vc),Wc=e=>{const t=e.getExpression();return r.isPropertyAccessExpression(t)&&t.getName()==="withGeoIndex"},qc=e=>{const t=e.getArguments()[0];return t&&r.isStringLiteral(t)?t.getLiteralText():""},Hc=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of i.getDescendantsOfKind(d.CallExpression))Wc(a)&&s.push({file:o,indexName:qc(a),line:a.getStartLineNumber()})}return s},xe=e=>e!==void 0&&(r.isArrowFunction(e)||r.isFunctionExpression(e))?e:void 0,Bn=e=>{const t=e.getArguments()[0],s=xe(t);if(s!==void 0)return s;if(t===void 0||!r.isObjectLiteralExpression(t))return;const n=_(t,"handler");return n!==void 0&&r.isPropertyAssignment(n)?xe(n.getInitializer()):void 0},jc=new Set(["delete","get","head","options","patch","post","put"]),Gc=new Set(["handler","stream"]),Yc=new Set(["runAction","runMutation"]),Qc=new Set(["delete","insert","insertManyUnsafe","patch","patchIf","replace"]),Se=(e,t)=>e!==void 0&&r.isIdentifier(e)&&e.getText()===t,zn=(e,t)=>{if(!(e===void 0||!r.isObjectBindingPattern(e))){for(const s of e.getElements())if(re(s)===t){const i=s.getNameNode();return r.isIdentifier(i)?i.getText():void 0}}},Is=(e,t)=>{const s=e.getParameters()[0]?.getNameNode();if(s!==void 0)return t?r.isIdentifier(s)?s.getText():void 0:zn(s,"ctx")},Cs=(e,t)=>{const s=e.getParameters()[t?1:0]?.getNameNode();return t?s!==void 0&&r.isIdentifier(s)?s.getText():void 0:zn(s,"request")},Ts=(e,t)=>{const s=e.getBody(),n=s.getDescendantsOfKind(d.CallExpression);r.isCallExpression(s)&&n.unshift(s);for(const i of n){const o=i.getExpression();if(!r.isPropertyAccessExpression(o))continue;const a=o.getName(),c=o.getExpression();if(Yc.has(a)&&Se(c,t))return a;if(Qc.has(a)&&r.isPropertyAccessExpression(c)&&c.getName()==="db"&&Se(c.getExpression(),t))return`db.${a}`}},Os=(e,t)=>{const s=e.getBody();for(const n of s.getDescendantsOfKind(d.PropertyAccessExpression))if(n.getName()==="auth"&&Se(n.getExpression(),t))return!0;for(const n of s.getDescendantsOfKind(d.VariableDeclaration)){const i=n.getNameNode();if(!(!r.isObjectBindingPattern(i)||!Se(n.getInitializer(),t))){for(const o of i.getElements())if(re(o)==="auth")return!0}}return!1},Xc=/signature|hmac|digest|(?:^|[_-])sig(?:[_-]|$)/i,Jc=(e,t)=>{const s=e.getExpression();if(!r.isPropertyAccessExpression(s)||s.getName()!=="get"&&s.getName()!=="has")return!1;const n=s.getExpression();return r.isPropertyAccessExpression(n)&&n.getName()==="headers"&&Se(n.getExpression(),t)},Zc=e=>[...r.isStringLiteral(e)?[e.getLiteralText()]:[],...e.getDescendantsOfKind(d.StringLiteral).map(t=>t.getLiteralText())],$n=(e,t)=>{const s=e.getVariableDeclaration(t)?.getInitializer();return s===void 0?[]:Zc(s)},el=(e,t)=>{const s=e.getText();for(let n=e.getParent();n!==void 0;n=n.getParent()){if(!r.isArrowFunction(n)&&!r.isFunctionExpression(n)||!n.getParameters().some(c=>c.getName()===s))continue;const i=n.getParent();if(!r.isCallExpression(i))return[];const o=i.getExpression();if(!r.isPropertyAccessExpression(o))return[];const a=o.getExpression();return r.isIdentifier(a)?$n(t,a.getText()):[]}return[]},tl=e=>{const t=e.getArguments()[0];if(t===void 0)return[];if(r.isStringLiteral(t))return[t.getLiteralText()];if(!r.isIdentifier(t))return[];const s=e.getSourceFile(),n=$n(s,t.getText());return n.length>0?n:el(t,s)},ks=(e,t)=>{if(t===void 0)return!1;const s=e.getBody(),n=s.getDescendantsOfKind(d.CallExpression);return r.isCallExpression(s)&&n.unshift(s),n.some(i=>Jc(i,t)&&tl(i).some(o=>Xc.test(o)))},sl=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!Gc.has(t.getName()))return;let s=t.getExpression();for(;r.isCallExpression(s);){const n=s.getExpression();if(!r.isPropertyAccessExpression(n))return;const i=n.getName();if(jc.has(i)){const o=n.getExpression();return r.isIdentifier(o)&&o.getText()==="httpRoute"?i.toUpperCase():void 0}s=n.getExpression()}},nl=(e,t)=>{const s=e.getExpression();if(r.isIdentifier(s)&&s.getText()==="httpAction"){const c=xe(e.getArguments()[0]),l=c&&Is(c,!0);if(!c||l===void 0||ks(c,Cs(c,!0)))return;const u=Ts(c,l);return u===void 0?void 0:{scope:v(e),file:t,kind:"httpAction",line:e.getStartLineNumber(),readsAuth:Os(c,l),sideEffect:u}}const n=sl(e);if(n===void 0)return;const i=xe(e.getArguments()[0]),o=i&&Is(i,!1);if(!i||o===void 0||ks(i,Cs(i,!1)))return;const a=Ts(i,o);return a===void 0?void 0:{scope:v(e),file:t,kind:"httpRoute",line:e.getStartLineNumber(),method:n,readsAuth:Os(i,o),sideEffect:a}},il=(e,t)=>I(e,t,nl),rl=new Set(["btoa","encodeURI","encodeURIComponent","isSafeHeaderValue","Number","parseFloat","parseInt"]),ol=new Set(["append","set"]),Vn=e=>e!==void 0&&(r.isStringLiteral(e)||r.isNoSubstitutionTemplateLiteral(e))?e.getLiteralText():"",Rs=(e,t)=>(r.isCallExpression(e)?[e,...e.getDescendantsOfKind(d.CallExpression)]:e.getDescendantsOfKind(d.CallExpression)).some(n=>rl.has(b(n.getExpression())??"")&&ke(n,t)),al=(e,t)=>{if(Rs(e,t))return!0;const s=Q(e);return s!==void 0&&Rs(s,t)},wt=(e,t)=>la(e,t)&&!al(e,t),cl=e=>{if(r.isPropertyAccessExpression(e)&&e.getName()==="headers")return!0;const t=Q(e);return t!==void 0&&r.isNewExpression(t)&&b(t.getExpression())==="Headers"},_e=e=>{if(e===void 0)return;if(r.isObjectLiteralExpression(e))return e;const t=Q(e);return t!==void 0&&r.isObjectLiteralExpression(t)?t:void 0},Ut=(e,t,s)=>{for(const n of e.getProperties())if(r.isPropertyAssignment(n)){const i=n.getInitializer();i!==void 0&&wt(i,s.requestName)&&s.rows.push({scope:s.scope,file:s.relativePath,headerName:Vn(n.getNameNode()),line:i.getStartLineNumber(),via:t})}else if(r.isShorthandPropertyAssignment(n)){const i=n.getNameNode();wt(i,s.requestName)&&s.rows.push({scope:s.scope,file:s.relativePath,headerName:y(n),line:i.getStartLineNumber(),via:t})}else if(r.isSpreadAssignment(n)){const i=_e(n.getExpression());i!==void 0&&Ut(i,t,s)}},Un=(e,t)=>{const s=_e(e);if(s===void 0)return;const n=_(s,"headers");if(n===void 0||!r.isPropertyAssignment(n))return;const i=_e(n.getInitializer());i!==void 0&&Ut(i,"response-init",t)},ll=(e,t)=>{const s=b(e.getExpression());if(s==="Response")Un(e.getArguments()[1],t);else if(s==="Headers"){const n=_e(e.getArguments()[0]);n!==void 0&&Ut(n,"headers-ctor",t)}},dl=(e,t)=>{const s=e.getExpression();if(!r.isPropertyAccessExpression(s))return;const n=s.getName(),i=s.getExpression();if(n==="json"&&r.isIdentifier(i)&&i.getText()==="Response"){Un(e.getArguments()[1],t);return}if(ol.has(n)&&cl(i)){const o=e.getArguments()[1];o!==void 0&&wt(o,t.requestName)&&t.rows.push({scope:t.scope,file:t.relativePath,headerName:Vn(e.getArguments()[0]),line:o.getStartLineNumber(),via:n==="set"?"headers-set":"headers-append"})}},ul=(e,t)=>{for(const s of e.getDescendantsOfKind(d.NewExpression))ll(s,t);for(const s of e.getDescendantsOfKind(d.CallExpression))dl(s,t)},fl=(e,t)=>{const s=e.getExpression();if(!r.isIdentifier(s)||s.getText()!=="httpAction")return[];const n=xe(e.getArguments()[0]);if(n===void 0)return[];const i=n.getParameters()[1];if(i===void 0)return[];const o=i.getNameNode();if(!r.isIdentifier(o))return[];const a=[];return ul(n,{scope:v(e),relativePath:t,requestName:o.getText(),rows:a}),a},gl=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression))s.push(...fl(n,t));return s},pl=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...gl(i,w(t,n)))}return s},Wn="identity.ts",ml=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineIdentity";for(const s of t.getDeclarations())if(r.isImportSpecifier(s))return He(s.getImportDeclaration().getModuleSpecifierValue())?s.getNameNode().getText()==="defineIdentity":!1;return!1},hl=e=>{const t=e.getSymbol();if(!t)return!1;for(const s of t.getDeclarations()){if(!r.isNamespaceImport(s))continue;const n=s.getFirstAncestorByKind(d.ImportDeclaration);return n!==void 0&&He(n.getModuleSpecifierValue())}return!1},vl=e=>{if(r.isIdentifier(e))return ml(e);if(r.isPropertyAccessExpression(e)){const t=e.getExpression();return e.getName()==="defineIdentity"&&r.isIdentifier(t)&&hl(t)}return!1},El=e=>{const t=[];for(const s of e.getVariableDeclarations()){const n=s.getInitializer();if(n?.getKind()!==d.CallExpression||!vl(n.getExpression()))continue;const o=s.getNameNode();if(!r.isIdentifier(o)){if(s.getVariableStatement()?.hasExportKeyword()!==!0)continue;throw ye(o,"defineIdentity exports must be plain named exports (no destructuring)")}const a=Sn(s,"member");a!==void 0&&t.push({exportName:a})}return t},xl=(e,t)=>{const s=E(t,Wn);if(!L(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s),i=El(n);if(i.length!==0){if(i.length>1)throw ye(n,`lunora/identity.ts declares ${i.length.toString()} defineIdentity() contracts (${i.map(o=>o.exportName).join(", ")}); exactly one is allowed`);return i[0]}},Sl=new Set(["auth","context.auth"]),Al="userId",yl=e=>{const t=new Set;for(const s of e.getProperties()){if(r.isSpreadAssignment(s))return;(r.isPropertyAssignment(s)||r.isShorthandPropertyAssignment(s)||r.isMethodDeclaration(s))&&t.add(y(s))}return t},bl=(e,t)=>{const s=E(t,Wn);if(!L(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);for(const i of n.getDescendantsOfKind(d.CallExpression)){if(b(i.getExpression())!=="defineIdentity")continue;const[o]=i.getArguments();return o&&r.isObjectLiteralExpression(o)?yl(o):void 0}},Fs=e=>{if(e===void 0||!r.isPropertyAccessExpression(e)||e.getName()!=="identity")return;const t=e.getExpression();return Sl.has(t.getText())||Y(t,["auth"])?e:void 0},Nl=e=>{if(r.isPropertyAccessExpression(e)&&Fs(e.getExpression())!==void 0)return e.getName();if(r.isElementAccessExpression(e)&&Fs(e.getExpression())!==void 0){const t=e.getArgumentExpression();return t&&r.isStringLiteral(t)?t.getLiteralValue():void 0}},Ls=(e,t,s)=>{const n=Nl(e);return n===void 0?void 0:{declared:n===Al||s.has(n),file:t,key:n,line:e.getStartLineNumber(),scope:v(e)}},Pl=(e,t)=>{const s=bl(e,t);return s===void 0?[]:[...ee(e,t,d.PropertyAccessExpression,(n,i)=>Ls(n,i,s)),...ee(e,t,d.ElementAccessExpression,(n,i)=>Ls(n,i,s))]},wl=(e,t)=>{if(b(e.getExpression())!=="buildImageDeliveryUrl")return;const s=e.getArguments()[0];if(!s)return;const n=C(s,"key");if(!(!n||!U(n)||oe(n)))return{scope:v(e),file:t,line:e.getStartLineNumber()}},Il=(e,t)=>I(e,t,wl),Cl=new Set(["delete","get","getRaw","getWithMetadata","put"]),Tl=(e,t,s=[])=>{const n=Ge(e,t,{argIndex:0,matchReceiver:i=>i==="ctx.kv"||i.startsWith("ctx.kv."),methods:Cl});return Mt(n,s)},Ol=new Set(["queue","send"]),Ds=new Set(["bcc","cc","to"]),kl=e=>{if(!r.isPropertyAccessExpression(e))return;const t=e.getName();if(!Ol.has(t))return;const s=e.getExpression();return Y(s,["mail"])||Y(s,["email"])?t:void 0},Rl=e=>r.isObjectLiteralExpression(e)?e.getProperties().some(t=>{if(r.isShorthandPropertyAssignment(t)){const n=t.getNameNode();return Ds.has(y(t))&&U(n)&&!oe(n)}if(!r.isPropertyAssignment(t)||!Ds.has(y(t)))return!1;const s=t.getInitializer();return s!==void 0&&U(s)&&!oe(s)}):!1,Fl=(e,t)=>{const s=kl(e.getExpression());if(s===void 0)return;const n=e.getArguments()[0];if(!(!n||!Rl(n)))return{scope:v(e),file:t,line:e.getStartLineNumber(),method:s}},Ll=(e,t)=>I(e,t,Fl),Dl=(e,t,s)=>{const n=e.getArguments()[0];if(!n||!r.isObjectLiteralExpression(n))return[];const i=[];for(const o of n.getProperties()){const a=Me(o);if(a===void 0||!r.isPropertyAssignment(o))continue;const c=o.getInitializer();if(!(!c||!r.isObjectLiteralExpression(c)))for(const l of c.getProperties()){const u=Me(l);if(u===void 0)continue;const f=In(l);f!=="custom"&&i.push({column:u,exportName:t,file:s,line:l.getStartLineNumber(),strategy:f,table:a})}}return i},Ml=(e,t)=>{if(!r.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&r.isCallExpression(s)?Z(s):void 0;return n?.receiver?Kt(n.receiver).flatMap(i=>Dl(i,W(e)??e.getName(),t)):[]},_l=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of X(i))s.push(...Ml(a,o))}return s},Kl=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="replace")return!1;const s=t.getExpression();return D(s)},Bl=e=>{const t=e.getArguments()[0];if(t===void 0||!r.isObjectLiteralExpression(t))return;const s=_(t,"server");if(s!==void 0)return r.isPropertyAssignment(s)?s.getInitializer():s},zl=e=>{if(!e.isExported())return;const t=e.getInitializer();if(t?.getKind()!==d.CallExpression)return;const s=t;return Nr(s.getExpression())?s:void 0},$l=e=>{const t=zl(e),s=t===void 0?void 0:Bl(t);if(s===void 0)return[];const n=e.getNameNode(),i=r.isIdentifier(n)?W(e)??n.getText():"";return s.getDescendantsOfKind(d.CallExpression).filter(o=>Kl(o)).map(o=>({exportName:i,file:"lunora/mutators.ts",line:o.getStartLineNumber()}))},Vl=e=>e.getVariableDeclarations().flatMap(t=>$l(t)),Ul=(e,t)=>{const s=E(t,br);if(!L(s))return[];const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);return Vl(n)},Wl=new Set(["delete","get","patch"]),ql=new Set(["accountId","authorId","companyId","createdBy","createdById","customerId","groupId","memberId","organizationId","orgId","ownerId","projectId","teamId","tenantId","userId","workspaceId"]),Hl=new Set(["auth","identity","session","user"]),jl=new Set([d.EqualsEqualsEqualsToken,d.EqualsEqualsToken,d.ExclamationEqualsEqualsToken,d.ExclamationEqualsToken]),Gl=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="normalizeId"||!D(t.getExpression()))return;const s=e.getArguments()[0];return s&&r.isStringLiteral(s)?s.getLiteralText():""},Yl=e=>{let t=e,s=t.getParent();for(;s!==void 0&&(r.isAsExpression(s)||r.isParenthesizedExpression(s)||r.isNonNullExpression(s));)t=s,s=t.getParent();if(s===void 0||!r.isVariableDeclaration(s))return;const n=s.getNameNode();return r.isIdentifier(n)?n.getText():void 0},Ql=(e,t)=>e.getDescendantsOfKind(d.Identifier).some(s=>s.getText()===t),Xl=e=>r.isThrowStatement(e)||r.isReturnStatement(e)||e.getDescendantsOfKind(d.ThrowStatement).length>0||e.getDescendantsOfKind(d.ReturnStatement).length>0,Jl=(e,t)=>e.getDescendantsOfKind(d.IfStatement).some(s=>Ql(s.getExpression(),t)&&Xl(s.getThenStatement())),Zl=(e,t)=>{for(const s of e.getDescendantsOfKind(d.CallExpression)){const n=s.getExpression();if(!r.isPropertyAccessExpression(n))continue;const i=n.getName();if(!Wl.has(i))continue;const o=n.getExpression();if(!(D(o)||r.isPropertyAccessExpression(o)&&D(o.getExpression())))continue;const c=s.getArguments()[0];if(c!==void 0&&r.isIdentifier(c)&&c.getText()===t)return i}},ed=e=>e.getDescendantsOfKind(d.CallExpression).some(t=>t.getArguments().some(s=>_t(Lt(s))!==void 0)),td=e=>e.getDescendantsOfKind(d.BinaryExpression).some(t=>jl.has(t.getOperatorToken().getKind())?r.isPropertyAccessExpression(t.getLeft())||r.isPropertyAccessExpression(t.getRight()):!1),sd=e=>{for(const t of e.getDescendantsOfKind(d.Identifier))if(ql.has(t.getText()))return!0;return[...Hl].some(t=>qe(e,t).length>0)?!0:ed(e)||td(e)},nd=(e,t)=>{if(!r.isVariableDeclaration(e))return[];const s=e.getInitializer();if(s===void 0||!r.isCallExpression(s))return[];const n=Z(s);if(n?.kind!=="query"&&n?.kind!=="mutation")return[];const i=Bn(s);if(i===void 0)return[];const o=n.receiver!==void 0&&Nn(n.receiver,"use","rls"),a=sd(i),c=new Set,l=[];for(const u of i.getDescendantsOfKind(d.CallExpression)){const f=Gl(u);if(f===void 0)continue;const g=Yl(u);if(g===void 0||c.has(g)||!Jl(i,g))continue;const p=Zl(i,g);p!==void 0&&(c.add(g),l.push({exportName:W(e)??e.getName(),file:t,line:u.getStartLineNumber(),mentionsOwnership:a,sinkMethod:p,table:f,usesRls:o,visibility:n.visibility}))}return l},id=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of X(i))s.push(...nd(a,o))}return s},qn=(e,t)=>{const s=r.isIdentifier(e)&&t!==void 0?O(e):void 0;return s===void 0||t===void 0?!1:s.compilerNode===t.compilerNode?r.isIdentifier(t.getNameNode()):r.isBindingElement(s)&&s.getFirstAncestorByKind(d.Parameter)?.compilerNode===t.compilerNode},rd=e=>{const t=P(e),s=t.getParent();return(r.isPropertyAccessExpression(s)||r.isElementAccessExpression(s))&&s.getExpression()===t&&!We(s)},od=e=>{const t=P(e).getParent();return r.isVariableDeclaration(t)&&r.isObjectBindingPattern(t.getNameNode())},ad=e=>{const s=P(e).getParent();if(r.isSpreadAssignment(s)||r.isSpreadElement(s)){const n=s.getParent();return(r.isObjectLiteralExpression(n)||r.isArrayLiteralExpression(n))&&!We(n)}return r.isTemplateSpan(s)&&!r.isTaggedTemplateExpression(s.getParent().getParent())},Ke=e=>{const t=O(e);return t===void 0||rr(t.getSourceFile())},It=(e,t)=>{const s=P(e),n=s.getParent();if(!r.isCallExpression(n))return!1;const i=n.getArguments().indexOf(s),o=h(n.getExpression());if(i===-1||o===void 0)return!1;if(r.isIdentifier(o))return o.getText()==="structuredClone"&&Ke(o);if(qn(Lt(o),t))return!(r.isPropertyAccessExpression(o)&&yn.has(o.getName()))||r.isExpressionStatement(P(r.isAwaitExpression(n.getParent())?n.getParentOrThrow():n).getParent());if(!r.isPropertyAccessExpression(o))return!1;const a=o.getExpression();if(!r.isIdentifier(a)||!Ke(a))return!1;const c=a.getText(),l=o.getName();switch(c){case"console":return!0;case"JSON":return l==="stringify";case"Object":return["entries","freeze","isFrozen","keys","values"].includes(l)||l==="assign"&&i>0;default:return!1}},Re={kind:"opaque"},cd={kind:"unreached"},ld=e=>{const t=e.getSymbol()?.getDeclarations()??[],s=t.filter(o=>r.isFunctionDeclaration(o)&&o.hasBody()),[n]=s;return t.every(o=>r.isFunctionDeclaration(o)&&o.getSourceFile()===e.getSourceFile())&&s.length===1&&r.isFunctionDeclaration(n)?n:void 0},Ct=e=>{const t=h(e);if(r.isArrowFunction(t)||r.isFunctionExpression(t))return t;const s=r.isIdentifier(t)?O(t):void 0;if(s?.getSourceFile()!==e.getSourceFile())return;if(r.isFunctionDeclaration(s)){const i=ld(s);return i===void 0||Dt(i)?void 0:i}const n=te(s)?h(s.getInitializer()):void 0;return r.isArrowFunction(n)||r.isFunctionExpression(n)?n:void 0},Hn=(e,t,s)=>{const n=t.getArguments(),i=n.indexOf(s),o=i===-1||n.slice(0,i+1).some(l=>r.isSpreadElement(l))||e.getDescendantsOfKind(d.Identifier).some(l=>l.getText()==="arguments"),a=e.getParameters(),c=a[i];return o?Re:c===void 0?a.some(l=>l.isRestParameter())?Re:cd:c.isRestParameter()?Re:{kind:"parameter",parameter:c}},dd=e=>{const t=P(e),s=t.getParent();if(!r.isCallExpression(s)||s.getExpression()===t)return;const n=Ct(s.getExpression());return n===void 0?Re:Hn(n,s,t)},ud=new Set(["__defineGetter__","__defineSetter__","__proto__"]),fd=e=>r.isForInStatement(e)?e.getExpression():r.isConditionalExpression(e)?e.getCondition():r.isElementAccessExpression(e)?e.getArgumentExpression():void 0,jn=e=>{const t=P(e),s=t.getParent();if(r.isIfStatement(s)||r.isWhileStatement(s)||r.isDoStatement(s)||r.isSwitchStatement(s)||r.isCaseClause(s)||r.isTypeOfExpression(s)||r.isVoidExpression(s)||r.isComputedPropertyName(s))return!0;if(r.isTemplateSpan(s))return!r.isTaggedTemplateExpression(s.getParent().getParent());const n=fd(s);if(n!==void 0)return S(n,t);if(r.isPrefixUnaryExpression(s))return s.getOperatorToken()!==d.PlusPlusToken&&s.getOperatorToken()!==d.MinusMinusToken;if(!r.isBinaryExpression(s))return!1;const i=s.getOperatorToken().getKind(),o=i>=d.FirstAssignment&&i<=d.LastAssignment,a=i===d.QuestionQuestionToken||i===d.BarBarToken||i===d.AmpersandAmpersandToken;return!o&&!a},gd=4,Gn=(e,t,s=0)=>{if(ir(e))return!0;if(rd(e)){const i=P(e).getParent(),o=r.isElementAccessExpression(i)?i.getArgumentExpression():void 0,a=r.isStringLiteral(o)?o.getLiteralValue():void 0,c=r.isPropertyAccessExpression(i)?i.getName():a;return c===void 0||!ud.has(c)}if(od(e)||ad(e)||jn(e)||It(e,t))return!0;const n=dd(e);return n?.kind==="unreached"||n?.kind==="parameter"&&pd(n.parameter,s+1)},Ms=new WeakMap,pd=(e,t=0)=>{const s=e.getNameNode();if(!r.isIdentifier(s))return!0;const n=Ms.get(e.compilerNode);if(n!==void 0)return n;if(t>gd)return!1;const o=(s.getSymbol()?.getDeclarations().length??0)===1&&e.getParentOrThrow().getDescendantsOfKind(d.Identifier).every(a=>a===s||a.getText()!==s.getText()||O(a)?.compilerNode!==e.compilerNode||Gn(a,void 0,t));return(o||t===0)&&Ms.set(e.compilerNode,o),o},_s=new WeakMap,md=(e,t)=>{const s=r.isFunctionExpression(e)?e.getNameNode():void 0;if(!r.isArrowFunction(e)&&e.getFirstDescendantByKind(d.ThisKeyword)!==void 0)return!0;const n=new Set([t.getName(),...s===void 0?[]:[s.getText()]]);return e.getDescendantsOfKind(d.Identifier).some(i=>{if(i===s||!n.has(i.getText()))return!1;const o=O(i)?.compilerNode;return o!==void 0&&(o===t.compilerNode||s!==void 0&&o===e.compilerNode)})},hd=(e,t,s)=>{const{context:n,impl:i}=e,o=_s.get(i.compilerNode);if(o!==void 0)return o;const a=t.getNameNode(),c=r.isIdentifier(a)?[a]:a.getDescendantsOfKind(d.BindingElement).flatMap(g=>{const p=g.getNameNode();return r.isIdentifier(p)?[p]:[]}),l=new Map(c.map(g=>[g.getText(),g.getParentOrThrow().compilerNode])),u=g=>r.isIdentifier(a)?Gn(g,n):!We(g),f=!md(i,s)&&c.every(g=>(g.getSymbol()?.getDeclarations().length??0)===1)&&i.getDescendantsOfKind(d.Identifier).every(g=>{const p=g.getText();if(p==="arguments")return!1;const x=l.get(p);return x===void 0||c.includes(g)||O(g)?.compilerNode!==x?!0:u(g)});return _s.set(i.compilerNode,f),f},Ks=new WeakMap,vd=e=>{let t=Ks.get(e.compilerNode);return t===void 0&&(t=new Map(e.getVariableDeclarations().flatMap(s=>{const n=Pr(s);return n===void 0?[]:[[n.compilerNode,s]]})),Ks.set(e.compilerNode,t)),t},Ed=e=>{const t=vd(e.getSourceFile()),s=e.getAncestors().find(l=>t.has(l.compilerNode)),n=s===void 0?void 0:t.get(s.compilerNode);if(s===void 0||n===void 0)return;const[i,o]=s.getParameters(),a=o===void 0||o.isRestParameter()?void 0:o,c={context:i,impl:s,mutatorName:W(n)??n.getName()};return a!==void 0&&hd(c,a,n)?{...c,parameter:a,pristine:!0}:{...c,parameter:a,pristine:!1}},ut="args",he=e=>{const t=vn(e);if(t!==void 0){const c=h(t.object);return r.isIdentifier(c)&&c.getText()===ut?t.member:void 0}if(!r.isIdentifier(e))return;const s=O(e);if(!r.isBindingElement(s)||s.getDotDotDotToken()!==void 0)return;const n=s.getParent();if(!r.isObjectBindingPattern(n))return;const i=n.getParent(),o=te(i)?h(i.getInitializer()):void 0;return r.isBindingElement(i)&&re(i)===ut||r.isIdentifier(o)&&o.getText()===ut?re(s):void 0},xd=new Set(["auth","identity","user"]),Tt=e=>{const t=i=>{const o=_t(i);return o!==void 0&&o.length>0&&xd.has(o[0]??"")},s=h(e)??e;if(t(s))return!0;const n=Q(s);return n!==void 0&&t(n)},Yn=(e,t=2)=>{const s=new Set;for(const n of[e,...e.getDescendants()]){const i=he(n);i!==void 0&&s.add(i);const o=t>0&&r.isIdentifier(n)?Q(n):void 0;if(o!==void 0)for(const a of Yn(o,t-1))s.add(a)}return s},Fe=e=>{const t=h(e)??e;if(!r.isBinaryExpression(t))return[];const s=t.getOperatorToken().getKind(),n=t.getLeft(),i=t.getRight();if(s===d.BarBarToken)return[...Fe(n),...Fe(i)];if(s===d.AmpersandAmpersandToken){const l=(u,f)=>{const g=he(h(u)??u);return g===void 0?[]:Fe(f).filter(p=>p===g)};return[...l(n,i),...l(i,n)]}if(s!==d.ExclamationEqualsEqualsToken&&s!==d.ExclamationEqualsToken)return[];const o=[],a=he(h(n)??n),c=he(h(i)??i);return a!==void 0&&Tt(i)&&o.push(a),c!==void 0&&Tt(n)&&o.push(c),o},Sd=e=>{const t=h(e)??e;if(!r.isIdentifier(t))return!1;const s=t.getSymbol(),n=s?.getAliasedSymbol()?.getValueDeclaration()??s?.getValueDeclaration();if(!r.isVariableDeclaration(n))return!1;const i=h(n.getInitializer());return r.isCallExpression(i)&&pr(i.getExpression(),"defineIdentityGuard")},Ad=e=>{if(!Sd(e.getExpression()))return[];const t=e.getArguments();return t.flatMap((s,n)=>{const i=he(h(s)??s),o=t.some((a,c)=>c!==n&&Tt(a));return i!==void 0&&o?[i]:[]})},yd=e=>{if(r.isThrowStatement(e))return!0;if(!r.isBlock(e))return!1;const t=e.getStatements().at(-1);return t!==void 0&&r.isThrowStatement(t)},bd=e=>r.isArrowFunction(e)||r.isFunctionExpression(e)||r.isFunctionDeclaration(e)||r.isMethodDeclaration(e),Bs=(e,t)=>{for(let s=e.getParent();s!==void 0;s=s.getParent()){if(s===t||s.compilerNode===t.compilerNode)return!0;if(!(r.isBlock(s)||r.isExpressionStatement(s)||r.isAwaitExpression(s)||r.isParenthesizedExpression(s)||r.isVariableStatement(s)||r.isVariableDeclarationList(s)||r.isVariableDeclaration(s)))return!1}return!1},Nd=e=>r.isAwaitExpression(e.getParent())||e.getType().isVoid(),Pd=(e,t)=>{const s=new Set;for(const n of e.getDescendantsOfKind(d.IfStatement))if(n.getEnd()<=t&&Bs(n,e)&&yd(n.getThenStatement()))for(const i of Fe(n.getExpression()))s.add(i);for(const n of e.getDescendantsOfKind(d.CallExpression))if(n.getEnd()<=t&&Nd(n)&&Bs(n,e))for(const i of Ad(n))s.add(i);return s},wd=(e,t)=>{const s=Yn(t);if(s.size===0)return!1;const n=e.getFirstAncestor(bd);if(n===void 0)return!1;const i=Pd(n,e.getStart());return[...s].every(o=>i.has(o))},Id=new Set(["at","concat","filter","find","findLast","flat","reverse","slice","sort","toReversed","toSorted"]),Cd=new Map([["Array",new Set(["from","of"])],["Object",new Set(["entries","values"])]]),Ot=new Set(["catch","every","filter","finally","find","findIndex","findLast","findLastIndex","flatMap","forEach","map","reduce","reduceRight","some","sort","then"]),Qn=e=>e.getNameNode().getDescendantsOfKind(d.BindingElement).filter(t=>r.isIdentifier(t.getNameNode())),Td=e=>{const t=P(e),s=t.getParent();if(r.isVariableDeclaration(s))return S(s.getInitializer(),t)?s:void 0;const n=r.isForOfStatement(s)&&s.getExpression()===t?s.getInitializer():void 0;return r.isVariableDeclarationList(n)?n.getDeclarations()[0]:void 0},Od=e=>{const t=Td(e);return t===void 0?void 0:r.isIdentifier(t.getNameNode())?r.isForOfStatement(t.getParent().getParent())||te(t)?[t]:void 0:Qn(t)},ve=e=>e.isUnion()?e.getUnionTypes().every(t=>ve(t)):e.isIntersection()?e.getIntersectionTypes().some(t=>ve(t)):!e.isAny()&&!e.isUnknown()&&!e.isObject()&&!e.isTypeParameter(),Be=(e,t,s)=>{const n=r.isCallExpression(e)?h(e.getExpression()):void 0;return r.isPropertyAccessExpression(n)&&t.has(n.getName())&&(s===void 0||n.getExpression()===s)},Le=e=>{const t=h(e);if(!r.isArrowFunction(t)&&!r.isFunctionExpression(t))return;const s=t.getBody();return r.isBlock(s)?s.getDescendantsOfKind(d.ReturnStatement).filter(n=>n.getFirstAncestor(i=>r.isFunctionLikeDeclaration(i))===t).map(n=>n.getExpression()):[s]},kd=e=>{const t=r.isCallExpression(e)?h(e.getExpression()):void 0,s=r.isPropertyAccessExpression(t)?t.getExpression():void 0;return r.isPropertyAccessExpression(t)&&r.isIdentifier(s)&&Cd.get(s.getText())?.has(t.getName())===!0&&Ke(s)},Rd=e=>{const t=St(e);if(!r.isArrowFunction(t)&&!r.isFunctionExpression(t))return;const s=P(t),n=s.getParent();return r.isCallExpression(n)&&n.getArguments().includes(s)&&Be(n,bn)?n:void 0},Fd=(e,t)=>{if(!(r.isPropertyAccessExpression(e)||r.isElementAccessExpression(e))||e.getExpression()!==t)return;const s=P(e),n=s.getParent();return!r.isCallExpression(n)||n.getExpression()!==s?e:Be(n,Id,t)?n:void 0},Ld=(e,t)=>{if(r.isAwaitExpression(e))return e;if(r.isConditionalExpression(e))return e.getCondition()===t?void 0:e;const s=r.isBinaryExpression(e)?e.getOperatorToken().getKind():void 0;return s===d.QuestionQuestionToken||s===d.BarBarToken||s===d.AmpersandAmpersandToken?e:void 0},Dd=(e,t)=>{if(r.isArrayLiteralExpression(e))return e;const n=r.isSpreadElement(e)||r.isSpreadAssignment(e)||r.isShorthandPropertyAssignment(e)||r.isPropertyAssignment(e)&&S(e.getInitializer(),t)?e.getParent():void 0;return r.isArrayLiteralExpression(n)||r.isObjectLiteralExpression(n)?n:void 0},zs=e=>{const t=P(e),s=t.getParent();if(s===void 0)return;const n=r.isCallExpression(s)&&s.getArguments().includes(t)&&kd(s);return Fd(s,t)??Ld(s,t)??Dd(s,t)??(n?s:Rd(t))},Md=5e4,Xn=()=>({inProgress:new Set,verdicts:new Map});class _d{cuts=0;work=0;reset(){this.work=0}cut(){return this.cuts+=1,!0}spend(){return this.work+=1,this.work>Md&&this.cut()}memoized(t,s,n){const i=n.verdicts.get(t);if(i!==void 0)return i;if(n.inProgress.has(t))return this.cuts+=1,!1;if(this.spend())return!0;const o=this.cuts;n.inProgress.add(t);let a;try{a=s()}finally{n.inProgress.delete(t)}return this.cuts===o&&n.verdicts.set(t,a),a}}const Kd=8,Bd=8;class zd{budget;scope;taint;verdicts=Xn();constructor(t,s,n){this.scope=t,this.budget=s,this.taint=n}isCompromised(t){return this.flowHasCompromisingUse(t)&&!ve(t.getType())}flowHasCompromisingUse(t){return this.budget.memoized(t.compilerNode,()=>{const s=this.budget.cuts,n=[],i=new Set,o=(c,l)=>{i.has(c.compilerNode)||(i.add(c.compilerNode),n.push({binding:c,hops:l}))};let a=!1;o(t,0);for(const c of n)if(a=(c.binding===t?void 0:this.verdicts.verdicts.get(c.binding.compilerNode))??this.visitBinding(c,t,o),a)break;if(!a&&this.budget.cuts===s)for(const c of i)this.verdicts.verdicts.set(c,!1);return a},this.verdicts)}visitBinding({binding:t,hops:s},n,i){const o=t.getNameNode();if(!r.isIdentifier(o)){for(const l of r.isParameterDeclaration(t)?Qn(t):[])i(l,s);return!1}if(this.budget.spend())return!0;const a=(l,u)=>u&&s>=Kd?this.budget.cut():(i(l,u?s+1:s),!1);return this.taint.referencesTo(t,o.getText()).some(l=>this.valueCompromises(P(l),!0,a,0))&&(t===n||!ve(t.getType()))}valueCompromises(t,s,n,i){let o=t;for(let p=zs(o);p!==void 0;p=zs(o)){if(r.isCallExpression(p)&&this.callbackCompromises(p,n))return!0;o=P(p)}const a=o.getParent(),c=o===t&&s,l=()=>!c&&ve(o.getType());if(We(o))return!c&&(!r.isBinaryExpression(a)||this.taint.isTaintedValue(a.getRight(),!1));const u=Od(o);if(u!==void 0)return u.some(p=>n(p,!0));const f=r.isPropertyAccessExpression(a)&&a.getExpression()===o?a.getParent():void 0;if(r.isCallExpression(f)&&f.getExpression()===a)return this.methodCallCompromises(f,n);const g=this.nestedReturningFunctionOf(o);return g!==void 0?this.resultCompromises(g,n,i)&&!l():this.positionCompromises(o,n)&&!l()}resultCompromises(t,s,n){const i=P(t).getParent();if(n>=Bd)return this.budget.cut();if(r.isCallExpression(i))return i.getExpression()===P(t)?this.valueCompromises(i,!1,s,n+1):!Be(i,Ot);const o=r.isFunctionDeclaration(t)?t:i,a=r.isFunctionDeclaration(o)||te(o)?o.getNameNode():void 0;return o===void 0||!r.isIdentifier(a)?!0:this.taint.referencesTo(o,a.getText()).some(c=>{const l=P(c),u=l.getParent();return!r.isCallExpression(u)||u.getExpression()!==l||this.valueCompromises(u,!1,s,n+1)})}methodCallCompromises(t,s){return t.getArguments().filter(i=>Le(i)===void 0).some(i=>this.taint.isTaintedValue(i,!1))||this.callbackCompromises(t,s)}callbackCompromises(t,s){const n=Be(t,Ot)?t.getArguments()[0]:void 0;if(n===void 0)return!1;const i=Ct(n);return i!==void 0&&this.taint.isInImpl(i)?i.getParameters().some(o=>s(o,!1)):this.taint.isTaintedValue(n,!1)}positionCompromises(t,s){const n=t.getParent();if(r.isCallExpression(n)&&n.getArguments().includes(t))return this.argumentCompromises(n,t,s);const i=r.isSpreadElement(n)?n.getParent():void 0;if(n!==void 0&&r.isCallExpression(i))return!It(n,this.scope.context)&&this.isOpaqueCallTainted(i.getExpression(),i.getArguments(),n);if(r.isNewExpression(n))return this.isOpaqueCallTainted(n.getExpression(),n.getArguments(),t);if(r.isTemplateSpan(n)){const o=n.getParent(),a=o.getParent(),c=o.getTemplateSpans().map(l=>l.getExpression());return r.isTaggedTemplateExpression(a)&&this.isOpaqueCallTainted(a.getTag(),c,t)}return!this.isReadPosition(t)}argumentCompromises(t,s,n){if(It(s,this.scope.context))return!1;const i=Ct(t.getExpression()),o=i===void 0?void 0:Hn(i,t,s);return o?.kind==="unreached"?!1:o?.kind==="parameter"&&i!==void 0&&this.taint.isInImpl(i)?n(o.parameter,!1):this.isOpaqueCallTainted(t.getExpression(),t.getArguments(),s)}isReadPosition(t){const s=t.getParent();return s===void 0||r.isExpressionStatement(s)||r.isForStatement(s)||r.isElementAccessExpression(s)||jn(t)||S(St(t),this.scope.impl)}isOpaqueCallTainted(t,s,n){const i=!r.isIdentifier(h(n));return this.taint.isTaintedValue(t,!1)||s.some(o=>(o!==n||i)&&this.taint.isTaintedValue(o,!1))}nestedReturningFunctionOf(t){const s=St(t);return S(s,this.scope.impl)?void 0:s}}const $d=new Set(["at","every","filter","finally","find","findIndex","findLast","findLastIndex","forEach","order","slice","some","sort","withIndex","withSearchIndex"]),Vd=e=>{const t=h(e);if(!r.isIdentifier(t))return r.isPropertyAccessExpression(t)||r.isElementAccessExpression(t);const s=O(t),n=r.isVariableDeclaration(s)?h(s.getInitializer()):void 0;return s===void 0||r.isFunctionDeclaration(s)||r.isParameterDeclaration(s)||r.isArrowFunction(n)||r.isFunctionExpression(n)},Ud=new Set(["all","allSettled","any","race"]),$s=e=>r.isParameterDeclaration(e)?e:r.isBindingElement(e)?e.getFirstAncestorByKind(d.Parameter):void 0,ft=8;class Wd{budget=new _d;referencesByDeclaration=new Map;referencesByName=new Map;scope;verdicts=Xn();walk;variableDepth=0;queryDepth=0;constructor(t){this.scope=t,this.walk=new zd(t,this.budget,this);for(const s of t.impl.getDescendantsOfKind(d.Identifier)){const n=s.getText();this.referencesByName.set(n,[...this.referencesByName.get(n)??[],s])}}isTaintedValue(t,s){this.queryDepth===0&&this.budget.reset(),this.queryDepth+=1;try{return s&&this.isRootedInContext(t,ft)?!1:(r.isIdentifier(t)?[t]:t.getDescendantsOfKind(d.Identifier)).some(i=>or(i)&&this.isIdentifierTainted(i))}finally{this.queryDepth-=1}}isInImpl(t){const{impl:s}=this.scope;return t!==s&&s.getPos()<=t.getPos()&&t.getEnd()<=s.getEnd()}referencesTo(t,s){let n=this.referencesByDeclaration.get(s);if(n===void 0){n=new Map;for(const i of this.referencesByName.get(s)??[]){const o=O(i)?.compilerNode;o!==void 0&&n.set(o,[...n.get(o)??[],i])}this.referencesByDeclaration.set(s,n)}return(n.get(t.compilerNode)??[]).filter(i=>i.getParent()!==t)}flowsIntoTainted(t){if([t.getInitializer(),...t.getDescendantsOfKind(d.BindingElement).map(g=>g.getInitializer())].some(g=>g!==void 0&&this.isTaintedValue(g,!1)))return!0;const n=t.getParentOrThrow(),i=r.isFunctionLikeDeclaration(n)?n.getParameters().findIndex(g=>g.compilerNode===t.compilerNode):-1,o=P(n),a=o.getParent();if(i===-1)return!0;if(r.isCallExpression(a)){if(a.getExpression()===o)return this.isCallSiteTainted(a,i,t.isRestParameter());const g=h(a.getExpression());if(!r.isPropertyAccessExpression(g)||!Ot.has(g.getName()))return!0;const p=a.getArguments().filter(x=>x!==o);return this.isTaintedValue(g.getExpression(),!0)||p.some(x=>this.isTaintedValue(x,!1))}const c=r.isVariableDeclaration(a)&&te(a)?a:void 0,l=r.isFunctionDeclaration(n)?n:c,u=l?.getNameNode();if(l===void 0||!r.isIdentifier(u))return!0;const f=this.referencesTo(l,u.getText());return f.length===0||f.some(g=>{const p=P(g),x=p.getParent();return!r.isCallExpression(x)||x.getExpression()!==p||this.isCallSiteTainted(x,i,t.isRestParameter())})}isCallSiteTainted(t,s,n){const i=t.getArguments(),o=i.findIndex(c=>r.isSpreadElement(c)),a=c=>c===s||n&&c>s||o!==-1&&o<=s&&c>=o;return i.some((c,l)=>a(l)&&this.isTaintedValue(c,!1))}isContextRootedCombinator(t,s){const n=h(t.getExpression()),i=r.isPropertyAccessExpression(n)?n.getExpression():void 0,a=r.isPropertyAccessExpression(n)&&r.isIdentifier(i)&&i.getText()==="Promise"&&Ke(i)&&Ud.has(n.getName())?h(t.getArguments()[0]):void 0;if(r.isArrayLiteralExpression(a)){const f=a.getElements();return f.length>0&&f.every(g=>!r.isSpreadElement(g)&&this.isRootedInContext(g,s))}const c=r.isCallExpression(a)?h(a.getExpression()):void 0,l=r.isCallExpression(a)&&r.isPropertyAccessExpression(c)&&c.getName()==="map"?h(a.getArguments()[0]):void 0,u=l===void 0?void 0:Le(l);return u!==void 0&&u.length>0&&u.every(f=>f!==void 0&&this.isRootedInContext(f,s))}isIdentifierTainted(t){const s=t.getText();if(s==="arguments")return!0;const n=O(t),i=$s(n);if(i!==void 0)return this.isSource(i);if(s==="args")return!0;if(n===void 0||!this.isInImpl(n))return!1;if(r.isFunctionDeclaration(n))return this.budget.memoized(n.compilerNode,()=>this.isTaintedValue(n,!1),this.verdicts);if(r.isBindingElement(n)&&this.walk.isCompromised(n))return!0;const o=r.isBindingElement(n)?n.getFirstAncestorByKind(d.VariableDeclaration):n;return r.isVariableDeclaration(o)&&this.isVariableTainted(o)}callChainVerdict(t,s){if(this.isContextRootedCombinator(t,s))return!0;const n=h(t.getExpression()),i=r.isPropertyAccessExpression(n)?n.getName():void 0;return i!==void 0&&yn.has(i)?!1:i!==void 0&&bn.has(i)?this.isCallbackResultServerScoped(t,s)?void 0:!1:t.getArguments().some(a=>Le(a)!==void 0)&&(i===void 0||!$d.has(i))?!1:void 0}isCallbackResultServerScoped(t,s){const n=(i,o=[])=>{const a=Lt(i),c=r.isIdentifier(a)?$s(O(a)):void 0;return c!==void 0&&o.includes(c)?!0:this.isRootedInContext(i,s)||!this.isTaintedValue(i,!1)};return t.getArguments().every(i=>{const o=Le(i);if(o===void 0)return!Vd(i)&&n(i);const a=h(i),c=r.isArrowFunction(a)||r.isFunctionExpression(a)?a.getParameters():[];return o.every(l=>l===void 0||n(l,c))})}isRootedInContext(t,s){const n=tr(t,u=>this.callChainVerdict(u,s)),i=n.root;if(n.verdict!==void 0)return n.verdict;if(qn(i,this.scope.context))return!0;const o=r.isIdentifier(i)?O(i):void 0,a=r.isBindingElement(o)?o.getFirstAncestorByKind(d.VariableDeclaration):o,c=te(a)&&this.isInImpl(a)?a.getInitializer():void 0,l=r.isBindingElement(o)?o:a;return s>0&&c!==void 0&&(r.isBindingElement(l)||r.isVariableDeclaration(l))&&!this.walk.isCompromised(l)&&this.isRootedInContext(c,s-1)}isSource(t){const{impl:s,parameter:n}=this.scope;return t.compilerNode===n?.compilerNode?!0:t.getParent()!==s&&this.isInImpl(t)&&(this.budget.memoized(t.compilerNode,()=>this.flowsIntoTainted(t),this.verdicts)||this.walk.isCompromised(t))}isVariableTainted(t){return this.budget.memoized(t.compilerNode,()=>{const s=t.getParent().getParent();if(r.isCatchClause(t.getParent())||this.walk.isCompromised(t))return!0;if(r.isForOfStatement(s)||r.isForInStatement(s))return this.isTaintedValue(s.getExpression(),!0);const n=t.getInitializer(),i=Dt(t);if(n===void 0||i)return!0;if(this.isRootedInContext(n,ft))return!1;if(this.variableDepth>=ft)return this.budget.cut();this.variableDepth+=1;try{return this.isTaintedValue(n,!1)}finally{this.variableDepth-=1}},this.verdicts)}}const Vs=new WeakMap,qd=e=>{const t=Vs.get(e.impl.compilerNode);if(t!==void 0)return t;const s=new Wd(e);return Vs.set(e.impl.compilerNode,s),s},Hd=new Set(["accountId","authorId","createdBy","createdById","organizationId","orgId","ownerId","tenantId","updatedBy","userId","workspaceId"]),jd=new Set(["insert","insertManyUnsafe","patch","replace"]),Gd=e=>{if(!r.isPropertyAccessExpression(e))return;const t=e.getName();return jd.has(t)&&dr(e.getExpression())?t:void 0},Yd=(e,t)=>{if(t!=="insertManyUnsafe")return r.isObjectLiteralExpression(e)?[e]:[];if(!r.isArrayLiteralExpression(e))return[];const s=[];for(const n of e.getElements())r.isObjectLiteralExpression(n)&&s.push(n);return s},Qd=(e,t)=>{const s=vn(e);return s?.member===t?h(s.object):void 0},Us=(e,t)=>r.isIdentifier(e)&&O(e)?.compilerNode===t.compilerNode,Jn=(e,t,s,n=1)=>{const i=Qd(e,s);if(i!==void 0)return Us(i,t);const o=r.isIdentifier(e)?O(e):void 0;if(r.isBindingElement(o)){const c=o.getParent(),l=c.getParent();return o.getDotDotDotToken()===void 0&&re(o)===s&&r.isObjectBindingPattern(c)&&(l.compilerNode===t.compilerNode||te(l)&&Us(h(l.getInitializer()),t))}const a=te(o)?o.getInitializer():void 0;return n>0&&a!==void 0&&Jn(a,t,s,n-1)},kt=e=>{const t=h(e)??e;return r.isConditionalExpression(t)?[...kt(t.getWhenTrue()),...kt(t.getWhenFalse())]:[t]},Xd=(e,t,s)=>{const n=[],i=s===void 0?void 0:qd(s);for(const o of e.getProperties()){let a,c;if(r.isPropertyAssignment(o)?(a=y(o),c=o.getInitializer()):r.isShorthandPropertyAssignment(o)&&(a=y(o),c=o.getNameNode()),a===void 0||c===void 0||!Hd.has(a))continue;const l=kt(c).filter(f=>i===void 0?U(f)&&!ur(f):i.isTaintedValue(f,!0));if(l.length>0){const f=t.ownerField===a&&s?.pristine===!0&&Jn(c,s.parameter,a),g=l.every(p=>wd(t.call,p));n.push({field:a,file:t.relativePath,line:t.call.getStartLineNumber(),method:t.method,scope:t.scope,...f&&{ownerScoped:!0},...g&&{guarded:!0}})}}return n},Jd=(e,t,s)=>{const n=Gd(e.getExpression()),i=n===void 0?void 0:e.getArguments()[1];if(n===void 0||i===void 0)return[];const o=Yd(i,n);if(o.length===0)return[];const a=v(e),c=Ed(e),l={call:e,method:n,ownerField:c===void 0?void 0:s(c.mutatorName),relativePath:t,scope:a};return o.flatMap(u=>Xd(u,l,c))},Zd=(e,t,s=[],n=[])=>{const i=new Map(n.map(c=>[`${c.filePath}:${c.exportName}`,c.owner])),o=I(e,t,(c,l)=>Jd(c,l,u=>i.get(`${l}:${u}`))),a=new Map(s.map(c=>[`${c.filePath}:${c.exportName}`,c.adminOnly===!0]));return Mt(o,s).map(c=>ar(c.scope)?.every(f=>a.get(`${c.file}:${f}`)===!0)===!0?{...c,adminOnly:!0}:c)},eu=new Set(["createAutumnAdapter","createDodoPaymentsAdapter","createPolarAdapter","createStripeAdapter"]),tu=e=>e&&r.isNumericLiteral(e)?Number(e.getText()):void 0,su=e=>{const t=_(e,"webhookToleranceSeconds");return t&&r.isPropertyAssignment(t)?tu(t.getInitializer()):void 0},nu=(e,t)=>{const s=b(e.getExpression());if(s===void 0||!eu.has(s))return;const[n]=e.getArguments(),i=n&&r.isObjectLiteralExpression(n)?su(n):void 0;return{callee:s,scope:v(e),file:t,line:e.getStartLineNumber(),...i===void 0?{}:{toleranceSeconds:i}}},iu=(e,t)=>I(e,t,nu),ru=new Map([["defineQueue",0],["defineSubscription",1],["defineWorkflow",0]]),ou=e=>{const t=e.getExpression();return r.isIdentifier(t)?t.getText():void 0},au=(e,t)=>{const s=e.getArguments()[t];if(!s||!r.isObjectLiteralExpression(s))return;const n=_(s,"handler");if(n===void 0||!r.isPropertyAssignment(n))return;const i=n.getInitializer();if(i&&(r.isArrowFunction(i)||r.isFunctionExpression(i)))return i},Zn=(e,t)=>{const s=e.getParameters()[t]?.getNameNode();return s&&r.isIdentifier(s)?s.getText():void 0},ei=(e,t)=>e===t||e.startsWith(`${t}.`),ti=e=>{const t=e.getDescendantsOfKind(d.PropertyAccessExpression);return r.isPropertyAccessExpression(e)&&t.push(e),t},Ws=e=>{const t=e.getParent();return r.isPropertyAccessExpression(t)&&t.getNameNode()===e||r.isPropertyAssignment(t)&&t.getNameNode()===e?!1:!(r.isBindingElement(t)&&t.getNameNode()===e)},si=e=>{const t=e.getDescendantsOfKind(d.Identifier).filter(s=>Ws(s));return r.isIdentifier(e)&&Ws(e)&&t.push(e),t},cu=e=>{if(!r.isVariableDeclaration(e))return[];const t=e.getNameNode();return r.isIdentifier(t)?[t.getText()]:t.getDescendantsOfKind(d.BindingElement).map(s=>s.getName())},lu=e=>{const t=Zn(e,1);if(t===void 0)return[];const s=[`${t}.messages`];for(const n of e.getDescendantsOfKind(d.ForOfStatement)){if(n.getExpression().getText()!==`${t}.messages`)continue;const i=n.getInitializer(),o=r.isVariableDeclarationList(i)?i.getDeclarations()[0]?.getNameNode():void 0;o&&r.isIdentifier(o)&&s.push(`${o.getText()}.body`)}return s},du=(e,t,s)=>{const n=t==="workflow"?[`${s}.params`]:lu(e),i=new Set,o=a=>ti(a).some(c=>n.some(l=>ei(c.getText(),l)))?!0:si(a).some(c=>i.has(c.getText()));for(const a of e.getDescendantsOfKind(d.VariableDeclaration)){const c=a.getInitializer();if(c&&o(c))for(const l of cu(a))i.add(l)}return{names:i,prefixes:n}},uu=(e,t)=>ti(e).some(s=>t.prefixes.some(n=>ei(s.getText(),n)))?!0:si(e).some(s=>t.names.has(s.getText())),fu=e=>{const t=sr(e);return t===void 0?void 0:{exportName:String(t.at(-1)),file:t.slice(0,-1).join("/")}},gu=(e,t,s)=>{const n=Zn(e,0);if(n===void 0)return[];const i=du(e,t,n),o=new Set([n,...i.prefixes.filter(c=>c.endsWith(".body")).map(c=>c.slice(0,-5))]),a=[];for(const c of e.getDescendantsOfKind(d.CallExpression)){const l=c.getExpression();if(!r.isPropertyAccessExpression(l)||!En.has(l.getName())||!o.has(l.getExpression().getText()))continue;const u=c.getArguments()[1];if(!u||!uu(u,i))continue;const f=fu(c.getArguments()[0]);f!==void 0&&a.push({dispatchKind:t,file:s,scope:v(c),line:c.getStartLineNumber(),targetExport:f.exportName,targetFile:f.file})}return a},pu=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression)){const i=ou(n),o=i===void 0?void 0:ru.get(i);if(o===void 0)continue;const a=au(n,o);a!==void 0&&s.push(...gu(a,i==="defineWorkflow"?"workflow":"queue",t))}return s},mu=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...pu(i,w(t,n)))}return s},qs={dbRateLimit:"usesRateLimit",emailGateMiddleware:"usesEmailGate",mask:"usesMask",rateLimit:"usesRateLimit",rls:"usesRls",verifyTurnstileMiddleware:"usesCaptcha"},Hs=new Set(["account","credential","member","passkey","session","user"]),hu=e=>e.replaceAll(/[-_]/gu," ").replaceAll(/([a-z0-9])([A-Z])/gu,"$1 $2").split(" ").filter(Boolean).map(t=>t.toLowerCase()),vu=e=>{const s=hu(e).at(-1);if(!s)return!1;const n=s.endsWith("s")?s.slice(0,-1):s;return Hs.has(s)||Hs.has(n)},Eu=e=>{const t=e.replaceAll(/[^a-z0-9]/giu,"").toLowerCase();return t.endsWith("email")||t.endsWith("emailaddress")},xu=(e,t)=>{const{objects:s,opaque:n}=$t(e,t);return Ta(s).some(i=>Eu(i))?!0:n?void 0:!1},Su=e=>{const t=e.getArguments()[0];return!t||!r.isObjectLiteralExpression(t)?{usesCaptcha:!1,usesRateLimit:!1}:{usesCaptcha:!!_(t,"captcha"),usesRateLimit:!!_(t,"rateLimit")}},Au=e=>{if(r.isCallExpression(e))return e;if(!r.isIdentifier(e))return;const s=e.getSourceFile().getVariableDeclaration(e.getText())?.getInitializer();return s&&r.isCallExpression(s)?s:void 0},De={usesCaptcha:!1,usesEmailGate:!1,usesMask:!1,usesRateLimit:!1,usesRls:!1},yu=e=>{const t=Au(e),s=t?b(t.getExpression()):void 0;if(t&&s==="protectPublic"){const n=Su(t);return{...De,usesCaptcha:n.usesCaptcha,usesRateLimit:n.usesRateLimit}}return s!==void 0&&s in qs?{...De,[qs[s]]:!0}:De},bu=e=>{const t={...De};let s=e;for(;r.isCallExpression(s);){const n=s.getExpression();if(!r.isPropertyAccessExpression(n))break;const i=n.getName()==="use"?s.getArguments()[0]:void 0;if(i){const o=yu(i);t.usesCaptcha||=o.usesCaptcha,t.usesEmailGate||=o.usesEmailGate,t.usesMask||=o.usesMask,t.usesRateLimit||=o.usesRateLimit,t.usesRls||=o.usesRls}s=n.getExpression()}return t},Nu=new Set(["insert","insertMany","insertManyUnsafe","replace"]),Pu=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!Nu.has(t.getName()))return!1;const s=t.getExpression();if(!D(s))return!1;const i=e.getArguments()[0];return!i||!(r.isStringLiteral(i)||r.isNoSubstitutionTemplateLiteral(i))?!1:vu(i.getLiteralText())},wu=new Set(["create","publish","publishBatch","runAfter","runAt","send","sendBatch"]),js=new Set(["queues","scheduler","topics","workflows"]),Iu=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!wu.has(t.getName()))return!1;let s=t.getExpression();for(;r.isCallExpression(s)||r.isElementAccessExpression(s)||r.isPropertyAccessExpression(s);){if(r.isPropertyAccessExpression(s)&&js.has(s.getName())&&fr(s.getExpression()))return!0;s=s.getExpression()}const n=_t(s);return n?.length===1&&js.has(n[0]??"")},Cu=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||t.getName()!=="insertManyUnsafe")return!1;const s=t.getExpression();return D(s)},ni=new Set(["generateObject","generateText","streamObject","streamText"]),Tu=e=>{const t=b(e.getExpression());return t!==void 0&&ni.has(t)},Ou=e=>{const t=b(e.getExpression());if(t===void 0||!ni.has(t))return!1;const s=e.getArguments()[0];return!s||!r.isObjectLiteralExpression(s)||s.getProperties().some(n=>r.isSpreadAssignment(n))?!1:!_(s,"maxOutputTokens")},ku=new Set(["log","span","trace"]),Ru=new Set(["ai"]),Fu=new Set(["email","mail"]),Lu=new Set(["ai","browser","fetch","mail","notify","queues","sql","storage","topics","workflows"]),gt=(e,t)=>[...t].some(s=>qe(e,s).length>0),ii=new Set([d.ArrowFunction,d.FunctionDeclaration,d.FunctionExpression,d.GetAccessor,d.MethodDeclaration,d.SetAccessor]),Du=new Set(["every","filter","flatMap","forEach","map","some"]),Mu=new Set(["all","allSettled","race"]),ri=e=>{const t=e.getParent();if(!t||!r.isCallExpression(t)||!t.getArguments().includes(e))return;const s=t.getExpression();if(!r.isPropertyAccessExpression(s))return;const n=s.getName();if(Du.has(n))return t;const i=s.getExpression();if(r.isIdentifier(i)&&i.getText()==="Promise"&&Mu.has(n))return t},_u=e=>{let t=e.getParent();for(;t;){if(r.isTryStatement(t)){const s=t.getTryBlock();if(e.getPos()>=s.getPos()&&e.getEnd()<=s.getEnd())return!0}if(ii.has(t.getKind())){const s=ri(t);if(!s)return!1;t=s;continue}t=t.getParent()}return!1},Ku=e=>{let t=e.getParent();for(;t!==void 0;){if(r.isCallExpression(t)&&t.getExpression().getText()==="Promise.allSettled")return!0;if(ii.has(t.getKind())){if(t=ri(t),t===void 0)return!1;continue}t=t.getParent()}return!1},Bu=e=>{const t=e.getFirstAncestor(u=>r.isArrowFunction(u)||r.isFunctionExpression(u)),s=t?.getParent();if(!t||!r.isCallExpression(s)||!s.getArguments().includes(t))return!1;const n=s.getExpression();if(!r.isIdentifier(n))return!1;const i=n.getSymbol(),o=i?.getAliasedSymbol()?.getValueDeclaration()??i?.getValueDeclaration(),a=r.isVariableDeclaration(o)?o.getInitializer():o;if(!r.isArrowFunction(a)&&!r.isFunctionExpression(a)&&!r.isFunctionDeclaration(a))return!1;const c=s.getArguments().indexOf(t),l=a.getParameters()[c]?.getName();return l===void 0?!1:a.getDescendantsOfKind(d.TryStatement).some(u=>{const f=u.getTryBlock().getDescendantsOfKind(d.CallExpression).some(p=>{const x=p.getExpression();return r.isIdentifier(x)&&x.getText()===l&&r.isAwaitExpression(p.getParent())}),g=u.getCatchClause();return f&&g!==void 0&&g.getDescendantsOfKind(d.ThrowStatement).length>0})},zu=e=>{let t=e;for(;;){const s=t.getParent();if(!r.isPropertyAccessExpression(s)||s.getExpression()!==t)return!1;if(s.getName()==="catch")return!0;if(s.getName()!=="then"&&s.getName()!=="finally")return!1;const n=s.getParent();if(!r.isCallExpression(n)||n.getExpression()!==s)return!1;t=n}},$u=e=>{let t=e;for(;;){const s=t.getParent();if(r.isPropertyAccessExpression(s)&&s.getExpression()===t){t=s;continue}return r.isCallExpression(s)&&s.getExpression()===t?s:void 0}},Vu=e=>{let t=!1,s=!0;for(const n of[...Lu].flatMap(i=>qe(e,i))){const i=$u(n);i&&(t=!0,!_u(i)&&!zu(i)&&!Bu(i)&&!Ku(i)&&(s=!1))}return{handlesErrors:t&&s,reachesOutbound:t}},Uu=e=>e.getDescendantsOfKind(d.ThrowStatement).some(t=>{const s=t.getExpression();if(!r.isNewExpression(s))return!1;const n=s.getExpression();return r.isIdentifier(n)&&n.getText()==="Error"}),Gs="lunora-advisor-exempt",Wu=/^[\s*/]+/u,qu=/[\w-]/u,Hu=e=>{const s=(e.getFirstAncestorByKind(d.VariableStatement)??e).getLeadingCommentRanges().map(n=>n.getText()).join(`
2
2
  `);for(const n of s.split(`
3
3
  `)){const i=n.replace(Wu,"");if(!i.startsWith(Gs))continue;const o=i.slice(Gs.length);if(qu.test(o.charAt(0)))continue;const a=o.indexOf("--");return{exempt:!0,exemptReason:(a===-1?"":o.slice(a+2).split("*")[0]??"").trim()}}return{exempt:!1,exemptReason:""}},ju=e=>{const[t]=e.getArguments();if(t){if(r.isObjectLiteralExpression(t)){const s=_(t,"handler");return s?r.isPropertyAssignment(s)?s.getInitializer():r.isShorthandPropertyAssignment(s)?s.getNameNode():r.isMethodDeclaration(s)?s:void 0:void 0}return t}},Gu=(e,t)=>{const s=ju(t);if(!s)return;if(r.isArrowFunction(s)||r.isFunctionExpression(s)||r.isMethodDeclaration(s))return e;if(!r.isIdentifier(s))return;const n=s.getSourceFile(),i=s.getText(),o=n.getVariableDeclaration(i)?.getInitializer();return o&&(r.isArrowFunction(o)||r.isFunctionExpression(o))?o:n.getFunction(i)},Yu=e=>{let t=!1,s=!1,n=!1,i=!1,o=!1;for(const l of e.getDescendantsOfKind(d.CallExpression))if(Pu(l)&&(o=!0),Iu(l)&&(t=!0),Cu(l)&&(i=!0),Tu(l)&&(s=!0),Ou(l)&&(n=!0),o&&t&&i&&n)break;const{handlesErrors:a,reachesOutbound:c}=Vu(e);return{callsMail:gt(e,Fu),emitsEvent:gt(e,ku),fanOut:t,handlesErrors:a,reachesOutbound:c,runsAiGeneration:s||gt(e,Ru),throwsBareError:Uu(e),unboundedAiGeneration:n,usesInsertManyUnsafe:i,writesUserTable:o}},Qu=(e,t)=>{const s=e.getInitializer();if(!s||!r.isCallExpression(s))return;const n=Z(s);if(!n||n.kind!=="query"&&n.kind!=="mutation"&&n.kind!=="action")return;const i=n.receiver?bu(n.receiver):{usesCaptcha:!1,usesEmailGate:!1,usesMask:!1,usesRateLimit:!1,usesRls:!1},o=Gu(e,s);return{...o?Yu(o):{},...Hu(e),...i,analyzableBody:o!==void 0,exportName:W(e)??e.getName(),file:t,hasEmailArg:xu(s,n.receiver),kind:n.kind,visibility:n.visibility}},Xu=(e,t)=>{const s=[];for(const n of X(e)){const i=Qu(n,t);i&&s.push(i)}return s},Ju=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Xu(i,w(t,n)))}return s},Zu=new Set(["dbRateLimit","rateLimit"]),ef=e=>r.isArrowFunction(e)?e.getBody():e,tf=e=>{if(!r.isArrowFunction(e))return;const t=e.getParameters()[0]?.getNameNode();return t!==void 0&&r.isIdentifier(t)?t:void 0},oi=e=>{const t=e.getParent();return r.isPropertyAccessExpression(t)&&t.getExpression()===e&&t.getName()==="args"},ai=(e,t)=>{const s=t.getSymbol();return s===void 0?[]:e.getDescendantsOfKind(d.Identifier).filter(n=>{if(n.getSymbol()!==s)return!1;const i=n.getParent();return!(r.isPropertyAccessExpression(i)&&i.getNameNode()===n)})},sf=(e,t)=>U(e)||t!==void 0&&ai(e,t).some(s=>oi(s)),nf=(e,t)=>t===void 0?oe(e):ai(e,t).some(s=>!oi(s)),rf=(e,t)=>{const s=b(e.getExpression());if(s===void 0||!Zu.has(s))return;const n=C(hn(e.getArguments()[2]),"key");if(!n)return;const i=ef(n),o=tf(n);if(!(!sf(i,o)||nf(i,o)))return{callee:s,scope:v(e),file:t,limitName:mn(e),line:e.getStartLineNumber()}},of=(e,t)=>I(e,t,rf),af=new Set(["findFirst","findFirstOrThrow","findMany","findUnique","get"]),cf=e=>{const t=e.getExpression();if(!r.isPropertyAccessExpression(t)||!af.has(t.getName()))return;const s=t.getExpression();if(D(s)){const n=e.getArguments()[0];return n&&r.isStringLiteral(n)?n.getLiteralText():""}if(r.isPropertyAccessExpression(s)&&D(s.getExpression()))return s.getName()},lf=e=>{let t=e;for(;r.isCallExpression(t);){const s=t.getExpression();if(!r.isPropertyAccessExpression(s))return;if(s.getName()==="query"&&D(s.getExpression())){const n=t.getArguments()[0];return n&&r.isStringLiteral(n)?n.getLiteralText():""}t=s.getExpression()}},df=e=>{let t=h(e)??e;for(;r.isAwaitExpression(t);)t=h(t.getExpression())??t.getExpression();return t},ci=(e,t=!1)=>{const s=df(e);if(r.isIdentifier(s)){if(t)return;const n=Q(s);return n===void 0?void 0:ci(n,!0)}if(r.isCallExpression(s))return cf(s)??lf(s)},uf=e=>{const t=e.getBody();if(!r.isBlock(t))return[t];const s=[];for(const n of e.getDescendantsOfKind(d.ReturnStatement)){const i=n.getFirstAncestor(a=>r.isArrowFunction(a)||r.isFunctionExpression(a)||r.isFunctionDeclaration(a)),o=n.getExpression();i===e&&o!==void 0&&s.push(o)}return s},ff=(e,t)=>{if(!r.isVariableDeclaration(e))return[];const s=e.getInitializer();if(s===void 0||!r.isCallExpression(s))return[];const n=Z(s);if(n?.kind!=="query")return[];const i=Bn(s);if(i===void 0)return[];const o=n.receiver!==void 0&&mr(n.receiver,"output"),a=n.receiver!==void 0&&Nn(n.receiver,"use","mask"),c=new Set,l=[];for(const u of uf(i)){const f=ci(u);f===void 0||c.has(f)||(c.add(f),l.push({exportName:W(e)??e.getName(),file:t,line:u.getStartLineNumber(),table:f,usesMask:a,usesOutput:o,visibility:n.visibility}))}return l},gf=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of X(i))s.push(...ff(a,o))}return s},pf=e=>{if(!e||!r.isObjectLiteralExpression(e))return[];const t=[];for(const s of e.getProperties())(r.isPropertyAssignment(s)||r.isShorthandPropertyAssignment(s)||r.isMethodDeclaration(s)||r.isGetAccessorDeclaration(s))&&t.push(y(s));return t},mf=(e,t)=>{if(!r.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&r.isCallExpression(s)?Z(s):void 0;if(!n)return[];const i=[];for(const o of e.getDescendantsOfKind(d.CallExpression)){const a=wn(o);if(a===void 0)continue;const c=pf(C(a.options,"with"));c.length!==0&&i.push({exportName:W(e)??e.getName(),file:t,line:o.getStartLineNumber(),parentTable:a.table,relations:c,visibility:n.visibility})}return i},hf=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of X(i))s.push(...mf(a,o))}return s},V=(e,t)=>`${e}:${t}`,Ys=(e,t,s,n)=>s===void 0?void 0:{endLine:e.getEndLineNumber(),exported:n,file:t,name:s,node:e,startLine:e.getStartLineNumber()},vf=(e,t)=>[...ee(e,t,d.FunctionDeclaration,(s,n)=>s.getParent().getKind()===d.SourceFile?Ys(s,n,s.getName(),s.isExported()):void 0),...ee(e,t,d.VariableDeclaration,(s,n)=>{const i=s.getVariableStatement();return i?.getParent().getKind()===d.SourceFile?Ys(i,n,s.getName(),i.isExported()):void 0})],Ef=(e,t,s)=>{const n=e.getExpression();if(!r.isIdentifier(n))return;const i=n.getSymbol(),o=(i?.getAliasedSymbol()??i)?.getDeclarations()[0];if(o===void 0||!(r.isFunctionDeclaration(o)||r.isVariableDeclaration(o)))return;const a=o.getName(),c=w(s,o.getSourceFile().getFilePath());return a===void 0?void 0:t.get(V(c,a))},xf=e=>`${e.table}|${e.method}|${e.fields?.join(",")??"*"}`,Sf=(e,t)=>{const s=new Map(e.map(n=>[V(n.file,n.name),new Map]));for(const n of t){const i=e.find(o=>o.file===n.file&&o.startLine<=n.line&&n.line<=o.endLine);i!==void 0&&n.table!==""&&s.get(V(i.file,i.name))?.set(xf(n),{fields:n.fields,method:n.method,table:n.table})}return s},Af=(e,t,s)=>e.node.getDescendantsOfKind(d.CallExpression).map(n=>Ef(n,t,s)).filter(n=>n!==void 0),yf=(e,t,s,n)=>{for(const i of e){const o=i.scope.kind==="module"?void 0:t.get(V(i.file,i.scope.name)),a=i.target===void 0?void 0:s.get(i.target);i.kind==="call"&&o!==void 0&&a!==void 0&&n.get(V(o.file,o.name))?.push(a)}},bf=(e,t,s)=>{const n=new Map(e.map(a=>[V(a.file,a.name),a])),i=new Map(e.map(a=>[`${Bt(a.file)}:${a.name}`,a])),o=new Map(e.map(a=>[V(a.file,a.name),Af(a,n,t)]));return yf(s,n,i,o),o},Nf=(e,t)=>{let s=!1;for(const[n,i]of t??[])e!==void 0&&!e.has(n)&&(e.set(n,i),s=!0);return s},Pf=(e,t,s)=>{let n=!0;for(;n;){n=!1;for(const i of e)for(const o of s.get(V(i.file,i.name))??[])Nf(t.get(V(i.file,i.name)),t.get(V(o.file,o.name)))&&(n=!0)}},wf=(e,t,s,n)=>{const i=vf(e,t),o=Sf(i,s);return Pf(i,o,bf(i,t,n)),i.filter(a=>a.exported).flatMap(a=>[...o.get(V(a.file,a.name))?.values()??[]].map(c=>({...c,exportName:a.name,file:a.file})))},ze=e=>{if(r.isStringLiteral(e)||r.isNoSubstitutionTemplateLiteral(e))return e.getLiteralText();if(r.isBinaryExpression(e)&&e.getOperatorToken().getKind()===d.PlusToken){const t=ze(e.getLeft()),s=ze(e.getRight());return t!==void 0&&s!==void 0?t+s:void 0}},If=e=>{let t=e,s=t.getParent();for(;s!==void 0&&r.isBinaryExpression(s)&&s.getOperatorToken().getKind()===d.PlusToken;)t=s,s=t.getParent();return t!==e&&ze(t)!==void 0},Cf=e=>{const t=e.getParent();if(t!==void 0){if(r.isVariableDeclaration(t)||r.isPropertyAssignment(t)||r.isPropertySignature(t))return y(t);if(r.isBinaryExpression(t)&&t.getOperatorToken().getKind()===d.EqualsToken)return t.getLeft().getText()}},Tf=(e,t,s)=>Dr(e)?!nr(s)&&Mr(Cf(t)):!0,Of=(e,t)=>{const s=[],n=[...e.getDescendantsOfKind(d.BinaryExpression),...e.getDescendantsOfKind(d.StringLiteral),...e.getDescendantsOfKind(d.NoSubstitutionTemplateLiteral)],i=new Set;for(const o of n){if(If(o))continue;const a=ze(o);if(a===void 0)continue;const c=Fr(a);if(c===void 0||!Tf(c,o,t))continue;const l=o.getStartLineNumber(),u=`${String(l)}:${c}`;i.has(u)||(i.add(u),s.push({file:t,kind:c,line:l,preview:Lr(a)}))}return s},kf=(e,t)=>{const s=[];for(const n of A(t,{includeSkipped:!0})){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Of(i,w(t,n)))}return s},Rf=(e,t)=>{if(!r.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&r.isCallExpression(s)?Z(s):void 0;if(!n)return[];const i=[];for(const o of e.getDescendantsOfKind(d.CallExpression)){const a=wn(o);if(a===void 0)continue;const c=C(a.options,"includeDeleted");if(c===void 0)continue;const l=r.isTrueLiteral(c),u=!l&&U(c);!l&&!u||i.push({exportName:W(e)??e.getName(),file:t,fromArgs:u,hardcodedTrue:l,line:o.getStartLineNumber(),table:a.table,visibility:n.visibility})}return i},Ff=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n),o=w(t,n);for(const a of X(i))s.push(...Rf(a,o))}return s},Lf=new Set(["query","unsafe"]),Df=e=>!r.isPropertyAccessExpression(e)||!Lf.has(e.getName())?!1:Y(e.getExpression(),["sql"]),Mf=e=>r.isBinaryExpression(e)||r.isTemplateExpression(e),_f=(e,t)=>{if(!Df(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!Mf(s)))return{file:t,line:s.getStartLineNumber(),scope:v(e)}},Kf=(e,t)=>I(e,t,_f),Bf=[["convex",["convex","@convex-dev/"]],["supabase",["@supabase/"]],["firebase",["firebase","@firebase/","firebase-admin"]]],zf=e=>{for(const[t,s]of Bf)for(const n of s)if(e===n||e.startsWith(n.endsWith("/")?n:`${n}/`))return t},$f=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);for(const o of i.getImportDeclarations()){const a=o.getModuleSpecifierValue(),c=zf(a);c!==void 0&&s.push({file:w(t,n),line:o.getStartLineNumber(),moduleSpecifier:a,platform:c})}}return s},Vf=new Set(["createMultipartUpload","delete","download","generateUploadUrl","get","getMetadata","getPresignedUrl","getSignedUrl","getUrl","head","put","resumeMultipartUpload","store","upload"]),Uf=(e,t,s=[])=>{const n=Ge(e,t,{argIndex:0,matchReceiver:i=>i==="ctx.storage"||i.startsWith("ctx.storage."),methods:Vf,requireUnmodifiedReach:!0});return Mt(n,s)},Wf=new Map([["generateUploadUrl",1],["getPresignedUrl",1],["getSignedUrl",1],["store",2],["upload",2]]),qf=e=>e&&r.isNumericLiteral(e)?Number(e.getText()):void 0,Hf=e=>{if(e===void 0)return{analyzable:!0,presentKeys:[]};if(!r.isObjectLiteralExpression(e))return{analyzable:!1,presentKeys:[]};const t=[];let s,n=!1;for(const i of e.getProperties()){if(r.isSpreadAssignment(i)){n=!0;continue}if(r.isPropertyAssignment(i)){const o=y(i);t.push(o),o==="expiresInSeconds"&&(s=qf(i.getInitializer()));continue}(r.isShorthandPropertyAssignment(i)||r.isMethodDeclaration(i))&&t.push(y(i))}return{analyzable:!n,expiresInSeconds:s,presentKeys:t}},jf=e=>{if(!r.isPropertyAccessExpression(e))return;const t=e.getName(),s=Wf.get(t);return s===void 0?void 0:An(e.getExpression(),i=>i==="ctx.storage"||i.startsWith("ctx.storage."))?{method:t,optionsIndex:s}:void 0},Gf=(e,t)=>{const s=jf(e.getExpression());if(s!==void 0)return{scope:v(e),file:t,line:e.getStartLineNumber(),method:s.method,...Hf(e.getArguments()[s.optionsIndex])}},Yf=(e,t)=>I(e,t,Gf),Qf=e=>r.isDoStatement(e)||r.isForInStatement(e)||r.isForOfStatement(e)||r.isForStatement(e)||r.isWhileStatement(e),li=e=>{const t=e.getLabel()?.getText(),s=i=>t!==void 0?r.isLabeledStatement(i)&&i.getLabel().getText()===t:Qf(i)||r.isBreakStatement(e)&&r.isSwitchStatement(i);let n=e.getFirstAncestor(i=>se(i)||s(i));if(!(n===void 0||se(n))){for(;r.isContinueStatement(e)&&r.isLabeledStatement(n);)n=n.getStatement();return n}},Wt=(e,t)=>S(e.getFirstAncestor(s=>S(s,t)||se(s)),t),Xf=(e,t)=>S(e,t)||e.getFirstAncestor(s=>S(s,t))!==void 0,di=(e,t)=>{if(r.isReturnStatement(e)||r.isThrowStatement(e))return S(e,t)||Wt(e,t);if(r.isBreakStatement(e)||r.isContinueStatement(e)){const s=li(e);return s!==void 0&&!Xf(s,t)}return!1},ui=e=>[...r.isBreakStatement(e)||r.isContinueStatement(e)||r.isReturnStatement(e)||r.isThrowStatement(e)?[e]:[],...e.getDescendantsOfKind(d.BreakStatement),...e.getDescendantsOfKind(d.ContinueStatement),...e.getDescendantsOfKind(d.ReturnStatement),...e.getDescendantsOfKind(d.ThrowStatement)],Jf=e=>ui(e).some(t=>di(t,e)),Zf=e=>{const t=r.isCallExpression(e)?e.getExpression():void 0;return r.isPropertyAccessExpression(t)&&t.getName()==="throwIfAborted"},eg=e=>ui(e).some(t=>di(t,e)||r.isBreakStatement(t)&&S(li(t),e))||e.getDescendantsOfKind(d.CallExpression).some(t=>Zf(t)&&Wt(t,e)),tg=e=>e.getDescendantsOfKind(d.YieldExpression).some(t=>Wt(t,e)),sg=e=>r.isDoStatement(e)||r.isWhileStatement(e)?e.getExpression():e.getCondition(),ng=e=>r.isDoStatement(e)?"do":r.isWhileStatement(e)?"while":"for",pt=(e,t)=>{const s=sg(e);if(!(s===void 0||r.isTrueLiteral(h(s)))||eg(e)||tg(e))return;const i=v(e);if(!(i.kind==="module"&&e.getFirstAncestor(se)!==void 0))return{file:t,kind:ng(e),line:e.getStartLineNumber(),scope:i}},ig=(e,t)=>[...ee(e,t,d.WhileStatement,pt),...ee(e,t,d.ForStatement,pt),...ee(e,t,d.DoStatement,pt)].toSorted((s,n)=>s.file.localeCompare(n.file)||s.line-n.line),rg=new Set(["when","where"]),mt=new Set(["definePolicy","defineShape"]),og=e=>{if(!r.isCallExpression(e))return;const t=e.getExpression();if(r.isPropertyAccessExpression(t)){const n=t.getName();return mt.has(n)?n:void 0}if(!r.isIdentifier(t))return;for(const n of t.getSymbol()?.getDeclarations()??[])if(r.isImportSpecifier(n)){const i=n.getNameNode().getText();return mt.has(i)?i:void 0}const s=t.getText();return mt.has(s)?s:void 0},ag=e=>r.isObjectLiteralExpression(e)&&e.getProperties().length===0,fi=e=>{if(e!==void 0){if(r.isReturnStatement(e)&&e.getExpression()===void 0||e.getKind()===d.UndefinedKeyword||e.getText()==="undefined")return"undefined";if(ag(e))return"empty-object";if(r.isParenthesizedExpression(e))return fi(e.getExpression())}},qt=e=>e.getAncestors().find(t=>r.isArrowFunction(t)||r.isFunctionExpression(t)||r.isFunctionDeclaration(t)),cg=e=>e.getDescendantsOfKind(d.ReturnStatement).filter(t=>qt(t)===e),gi=e=>e.getDescendantsOfKind(d.ConditionalExpression).filter(t=>qt(t)===e),lg=e=>{const t=cg(e);return t.length>1?!0:t.some(s=>s.getFirstAncestorByKind(d.IfStatement)!==void 0)||gi(e).length>0},dg=e=>e.getDescendantsOfKind(d.IfStatement).filter(t=>qt(t)===e),Rt=e=>e.getKind()===d.NullKeyword||e.getKind()===d.FalseKeyword||r.isIdentifier(e)&&e.getText()==="undefined"?!0:r.isNumericLiteral(e)?e.getLiteralValue()===0:r.isStringLiteral(e)&&e.getLiteralValue()==="",ug=(e,t)=>Rt(e)||Rt(t),fg=new Map([[d.EqualsEqualsEqualsToken,"positive"],[d.EqualsEqualsToken,"positive"],[d.ExclamationEqualsEqualsToken,"negative"],[d.ExclamationEqualsToken,"negative"]]),Qs=e=>!Rt(e)&&(r.isLiteralExpression(e)||e.getKind()===d.TrueKeyword),gg=(e,t,s)=>{const n=fg.get(e);if(n!==void 0)return ug(t,s)?n==="positive"?"negative":"positive":Qs(t)||Qs(s)?void 0:n},Ee=e=>{if(r.isParenthesizedExpression(e))return Ee(e.getExpression());if(r.isPrefixUnaryExpression(e)&&e.getOperatorToken()===d.ExclamationToken)return"negative";if(r.isBinaryExpression(e)){const t=e.getOperatorToken().getKind(),s=gg(t,e.getLeft(),e.getRight());if(s!==void 0)return s;if(t===d.AmpersandAmpersandToken||t===d.BarBarToken){const n=Ee(e.getLeft()),i=Ee(e.getRight());return n===i?n:"indeterminate"}}return r.isIdentifier(e)||r.isPropertyAccessExpression(e)||r.isElementAccessExpression(e)||r.isCallExpression(e)?"positive":"indeterminate"},Xs=e=>{if(e!==void 0){if(r.isReturnStatement(e))return e;if(r.isBlock(e)){const t=e.getStatements().at(-1);return t!==void 0&&r.isReturnStatement(t)?t:void 0}}},pg=e=>{if(e.getElseStatement()!==void 0)return;const t=e.getNextSiblingIfKind(d.ReturnStatement);return t!==void 0&&t.getNextSibling()===void 0?t:void 0},mg=e=>r.isReturnStatement(e)?e.getExpression()??e:e,hg=e=>{const t=[];for(const s of gi(e)){const n=Ee(s.getCondition());n==="positive"?t.push(s.getWhenFalse()):n==="negative"&&t.push(s.getWhenTrue())}for(const s of dg(e)){const n=Ee(s.getExpression());if(n==="indeterminate")continue;const i=n==="negative"?Xs(s.getThenStatement()):Xs(s.getElseStatement())??pg(s);i!==void 0&&t.push(mg(i))}return t},vg=e=>{for(const t of e.getAncestors())if(r.isVariableDeclaration(t)){const s=t.getNameNode();if(r.isIdentifier(s))return s.getText()}return"<anonymous>"},Eg=(e,t,s)=>{if(!r.isCallExpression(e))return[];const[n]=e.getArguments();if(!n||!r.isObjectLiteralExpression(n))return[];const i=[];for(const o of n.getProperties()){if(!r.isPropertyAssignment(o)||!rg.has(y(o)))continue;const a=o.getInitializer();if(!(!a||!(r.isArrowFunction(a)||r.isFunctionExpression(a)))&&lg(a))for(const c of hg(a)){const l=fi(c);l!==void 0&&i.push({exportName:vg(e),file:s,form:l,key:y(o),line:c.getStartLineNumber(),owner:t})}}return i},xg=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(d.CallExpression)){const i=og(n);i!==void 0&&s.push(...Eg(n,i,t))}return s},Sg=(e,t)=>{const s=[];for(const n of A(t)){const i=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...xg(i,w(t,n)))}return s},Ag=new Set(["query","upsert","upsertMany","upsertNow"]),le=new Set,yg=e=>{if(!r.isPropertyAccessExpression(e))return;const t=e.getName();if(Ag.has(t))return Y(e.getExpression(),["vectors"])?t:void 0},Ht=e=>{let t=e;for(;r.isParenthesizedExpression(t)||r.isAsExpression(t)||r.isSatisfiesExpression(t)||r.isNonNullExpression(t)||r.isTypeAssertion(t);)t=t.getExpression();return t},pi=e=>{const t=e.getParent();return r.isShorthandPropertyAssignment(t)&&t.getNameNode()===e?t.getValueSymbol():e.getSymbol()},mi=e=>pi(e)?.getDeclarations()[0],bg=e=>{const t=e.getParent();return r.isBindingElement(t)||(r.isPropertyAccessExpression(t)||r.isPropertyAssignment(t)||r.isVariableDeclaration(t)||r.isParameterDeclaration(t)||r.isMethodDeclaration(t))&&t.getNameNode()===e?!1:!r.isQualifiedName(t)||t.getLeft()===e},hi=e=>{let t=e;for(;t!==void 0&&(r.isBindingElement(t)||r.isObjectBindingPattern(t)||r.isArrayBindingPattern(t));)t=t.getParent();return t!==void 0&&r.isVariableDeclaration(t)?t:void 0},Js=(e,t,s)=>{const n=pi(e)?.compilerSymbol;if(n!==void 0&&t.has(n))return!0;if(s>0){const i=hi(mi(e)),o=i!==void 0&&r.isVariableDeclaration(i)?i.getInitializer():void 0;if(o!==void 0)return jt(o,t,s-1)}return U(e)},jt=(e,t,s)=>{const n=Ht(e);return oe(n)?!1:r.isIdentifier(n)?Js(n,t,s):U(n)?!0:n.getDescendantsOfKind(d.Identifier).some(i=>bg(i)&&Js(i,t,s))},vi=e=>{const t=hi(mi(e));return t!==void 0&&r.isVariableDeclaration(t)?t.getInitializer():void 0},J=(e,t)=>{const s=Ht(e);if(r.isObjectLiteralExpression(s))return[s];if(r.isConditionalExpression(s))return[...J(s.getWhenTrue(),t),...J(s.getWhenFalse(),t)];if(r.isBinaryExpression(s)){const n=s.getOperatorToken().getKind();if(n===d.BarBarToken||n===d.QuestionQuestionToken||n===d.AmpersandAmpersandToken)return[...J(s.getLeft(),t),...J(s.getRight(),t)]}if(r.isIdentifier(s)&&t){const n=vi(s);return n===void 0?[]:J(n,!1)}return[]},Ng=(e,t)=>{const s=J(e,t);if(s.length===0)return{replaces:!0,sources:[e]};const n=s.map(o=>$e(o,!1)),i=n.flat();if(i.length!==0)return{replaces:n.every(o=>o.length>0),sources:i}},Pg=e=>(r.isPropertyAssignment(e)||r.isShorthandPropertyAssignment(e))&&e.getName()==="namespace",wg=e=>r.isShorthandPropertyAssignment(e)?e.getNameNode():e.getInitializer()??e.getNameNode(),$e=(e,t)=>{let s=[];for(const n of e.getProperties())if(r.isSpreadAssignment(n)){const i=Ng(n.getExpression(),t);i!==void 0&&(s=i.replaces?i.sources:[...s,...i.sources])}else Pg(n)&&(s=[wg(n)]);return s},Ig=e=>{if(!e||!(r.isArrowFunction(e)||r.isFunctionExpression(e)))return[];const t=e.getBody();return r.isBlock(t)?t.getDescendantsOfKind(d.ReturnStatement).filter(s=>s.getFirstAncestor(n=>r.isFunctionLikeDeclaration(n))===e).flatMap(s=>s.getExpression()??[]):[t]},Cg=e=>{if(!e||!(r.isArrowFunction(e)||r.isFunctionExpression(e)))return le;const t=e.getParameters()[0]?.getNameNode();if(t===void 0)return le;const s=r.isIdentifier(t)?[t]:t.getDescendantsOfKind(d.BindingElement).map(n=>n.getNameNode());return new Set(s.flatMap(n=>r.isIdentifier(n)?n.getSymbol()?.compilerSymbol??[]:[]))},Ft=(e,t=!0,s=le)=>{const n=Ht(e);if(r.isIdentifier(n)){const o=t?vi(n):void 0;return o===void 0?[{node:n,parameters:s}]:Ft(o,!1,s)}if(r.isArrayLiteralExpression(n))return n.getElements().flatMap(o=>r.isSpreadElement(o)?Ft(o.getExpression(),t,s):J(o,!0).flatMap(a=>$e(a,!0).map(c=>({node:c,parameters:s}))));const i=r.isCallExpression(n)?n.getExpression():void 0;if(r.isCallExpression(n)&&r.isPropertyAccessExpression(i)&&i.getName()==="map"){const o=n.getArguments()[0],a=jt(i.getExpression(),le,1)?Cg(o):le;return Ig(o).flatMap(c=>J(c,!0).flatMap(l=>$e(l,!0).map(u=>({node:u,parameters:a}))))}return[{node:n,parameters:s}]},Tg=(e,t)=>{const s=yg(e.getExpression());if(s===void 0)return;const n=e.getArguments()[1];if(!(!n||!(s==="upsertMany"?Ft(n):J(n,!0).flatMap(o=>$e(o,!0).map(a=>({node:a,parameters:le})))).some(({node:o,parameters:a})=>jt(o,a,1))))return{scope:v(e),file:t,line:e.getStartLineNumber(),method:s}},Og=(e,t)=>I(e,t,Tg),kg=(e,t,s)=>{const{callSites:n,containers:i,crons:o,functions:a,modules:c,mutators:l,queues:u,schema:f,shapes:g,wranglerVariables:p,workflows:x}=s;return Qi({adminRoutes:na(e,t),aiRawRuns:fa(e,t),aiToolSideEffects:ba(e,t),argumentDerivedFetches:wa(e,t),argumentValidators:Wa(e,t),authApiCalls:Sr(e,t),authConfigs:ec(e,t),browserUrlAccesses:ic(e,t),callEdges:n.callEdges,configCalls:fc(e,t),containerKeyAccesses:pc(e,t),containerOverrides:Sc(e,t),containers:i,countReads:Pc(e,t,f.tables),cronTargets:o.flatMap(z=>z.functionPath===void 0?[]:[z.functionPath]),exportSinks:Tc(e,t),staleMigrationImports:$f(e,t),failOpenGuards:Lc(e,t),flagReads:Bc(e,t),flagSecurityDefaults:Uc(e,t),geoIndexUsages:Hc(e,t),httpActionGuards:il(e,t),httpHeaderWrites:pl(e,t),hyperdriveCalls:Ar(e,t),identityClaimReads:Pl(e,t),imageDeliveryUrlAccesses:Il(e,t),inserts:n.inserts,kvKeyAccesses:Tl(e,t,a),mailRecipientAccesses:Ll(e,t),maskProcedures:yr(e,t),maskStrategies:_l(e,t),mutatorWrites:Ul(e,t),nondeterministicCalls:Ir(e,t),normalizeIdAuthorizations:id(e,t),notifyCalls:Tr(e,t),notifyConfig:Cr(e,t),mutators:l,ownerFieldWrites:Zd(e,t,a,l),unrestrictedWhereBranches:Sg(e,t),paymentWebhooks:iu(e,t),privilegedDispatches:mu(e,t),procedureProtections:Ju(e,t),queries:n.queries,queues:u,r2sqlCalls:Or(e,t),ratelimitKeySelectors:of(e,t),rawRowReturns:gf(e,t),relationLoads:hf(e,t),rlsProcedures:kr(e,t),schema:f,secretLiterals:kf(e,t),modules:c,shapes:g,softDeleteReads:Ff(e,t),sqlInterpolations:Kf(e,t),storageKeyAccesses:Uf(e,t,a),storageUploads:Yf(e,t),tableWrites:n.tableWrites,rowEffects:wf(e,t,n.tableWrites,n.callEdges),unboundedLoops:ig(e,t),vectorNamespaceAccesses:Og(e,t),workflowCalls:n.workflowCalls,workflows:x,wranglerVariables:p})},Rg=e=>({cacheKey:`advisor_accept_unused:${e.rule}:${e.file}:${e.exportName}`,categories:["SCHEMA"],description:"`advisor.accept` in `lunora.config.*` accepts a finding the advisor does not report as an error.",detail:`No ERROR \`${e.rule}\` in \`${e.file}\` for \`${e.exportName}\` — the acceptance no longer applies.`,facing:"INTERNAL",level:"WARN",metadata:{exportName:e.exportName,file:e.file,rule:e.rule},name:"advisor_accept_unused",remediation:"Remove the entry, or correct the rule, file and export name it names.",title:"An accepted advisor finding matches no error"}),Fg=(e,t)=>{const s=new Set;return[...e.map(i=>{if(i.level!=="ERROR")return i;const o=t.find(a=>a.rule===i.name&&a.file===i.metadata.file&&a.exportName===i.metadata.exportName);return o===void 0?i:(s.add(o),{...i,detail:`Accepted: ${o.reason}. ${i.detail}`,level:"INFO",metadata:{...i.metadata,accepted:o.reason}})}),...t.filter(i=>!s.has(i)).map(i=>Rg(i))]},Lg=()=>({cacheKey:"advisor_accept_invalid",categories:["SCHEMA"],description:"`advisor.accept` in `lunora.config.*` is read by parsing the file, so every entry must be a literal.",detail:"`advisor.accept` is not an array of literal `{ rule, file, exportName, reason }` objects with non-empty strings, so codegen ignored all of it and every ERROR still fails the gate.",facing:"INTERNAL",level:"WARN",metadata:{},name:"advisor_accept_invalid",remediation:'Write `advisor: { accept: [{ rule: "owner_field_from_args_not_auth", file: "lunora/auth/team.ts", exportName: "addTeamMember", reason: "…" }] }` as literals on the config\'s default export.',title:"`advisor.accept` is not a list codegen can read, so no acceptance applies"}),Dg=e=>e.metadata.accepted!==void 0||e.name==="advisor_accept_unused"||e.name==="advisor_accept_invalid",Zs={error:"ERROR",info:"INFO",warn:"WARN"},en={ERROR:2,INFO:0,WARN:1},Mg=e=>({cacheKey:"advisor_min_severity_invalid",categories:["SCHEMA"],description:"`advisor.minSeverity` in `lunora.config.*` sets the lowest advisory level codegen reports and writes into `_generated/shard.ts`. Codegen reads it by parsing the file, so it has to be a string literal.",detail:e,facing:"INTERNAL",level:"WARN",metadata:{},name:"advisor_min_severity_invalid",remediation:'Set `advisor: { minSeverity: "info" | "warn" | "error" }` as a literal on the config\'s default export.',title:"`advisor.minSeverity` is not a level codegen can read, so every advisory was reported"}),_g=(e,t)=>{const{advisor:s}=Pn(e);if(s===void 0||s.minSeverity===void 0&&s.unreadable!==!0)return[...t];const{minSeverity:n}=s,i=n!==void 0&&Object.hasOwn(Zs,n)?Zs[n]:void 0;return i===void 0?[...t,Mg(n===void 0?"`advisor.minSeverity` is not a string literal codegen can read without evaluating the config: a computed value or key, or a spread that could set or override it.":`\`advisor.minSeverity\` is "${n}", which is not one of "info", "warn" or "error".`)]:t.filter(o=>Dg(o)||en[o.level]>=en[i])},Kg=(e,t)=>{const{advisor:s}=Pn(e),n=Fg(t,s?.accept??[]);return _g(e,s?.acceptUnreadable===!0?[...n,Lg()]:n)},Bg={call:"function",enqueue:"queue",invoke:"service",publish:"topic",schedule:"function"},zg="crons",$g=Br.replace(/\.ts$/u,""),ce=(e,t)=>`${Bt(e)}:${t}`,ht=(e,t,s)=>t===""?{reason:`the ${s} is not a string literal`}:{to:`${e}:${t}`},Vg=e=>[...e.callEdges.map(t=>{const s=t.target===void 0?{reason:t.reason??"unreadable target"}:{to:`${Bg[t.kind]}:${t.target}`};return{file:t.file,kind:t.kind,line:t.line,scope:t.scope,...s}}),...e.queries.map(t=>({file:t.file,kind:"read",line:t.line,scope:t.scope,...ht("table",t.table,"table name")})),...[...e.inserts,...e.tableWrites].map(t=>({file:t.file,kind:"write",line:t.line,scope:t.scope,...ht("table",t.table,"written table")})),...e.workflowCalls.map(t=>({file:t.file,kind:"start",line:t.line,scope:t.scope,...ht("workflow",t.workflow,"workflow name")}))],Ug=e=>e.untracked===!0?"inside a helper only code outside any export calls":"inside a non-exported helper",Wg=e=>{const{scope:t}=e;switch(t.kind){case"export":return[{...e,exportName:t.name}];case"helper":return t.callers.length===0?[{...e,unattributed:Ug(t)}]:t.callers.map(s=>({...e,exportName:s}));default:return[{...e,unattributed:"at module scope"}]}},qg=e=>Vg(e).flatMap(t=>Wg(t)),Hg=e=>[...e.queues.flatMap(t=>t.topic===void 0?[]:[{file:t.filePath,from:`topic:${t.topic}`,kind:"subscribe",line:0,to:`queue:${t.exportName}`}]),...e.crons.map(t=>{const s=t.workflow===void 0?void 0:`workflow:${t.workflow.exportName}`,n=t.functionPath===void 0?void 0:`function:${t.functionPath}`,i=s??n;return{file:zg,from:`cron:${t.name}`,kind:"trigger",line:0,...i===void 0?{reason:"the cron has no target"}:{to:i}}})],jg=e=>new Map(e.flatMap(t=>t.tables.map(s=>[s,t.name]))),me=(e,t)=>t===void 0?e:{...e,module:t},Gg=e=>{const t=new Map,s=new Map,n=jg(e.modules),i=(c,l)=>{s.set(c,[...s.get(c)??[],l])},o=(c,l)=>{t.set(c.id,c),l!==void 0&&i(l,c.id)},a=(c,l)=>{c!==void 0&&i(ce(c.file,c.exportName),l)};for(const c of e.functions){const l=ce(c.filePath,c.exportName),u=[...Rr(c.filePath),c.exportName].join(".");o(me({detail:c.kind,id:`function:${l}`,kind:"function",name:u},Oe(e.modules,c.filePath)),l)}for(const c of e.httpRoutes){const l=ce(c.filePath,c.exportName);o(me({id:`http:${l}`,kind:"http",name:`${c.method} ${c.path}`},Oe(e.modules,c.filePath)),l)}for(const c of e.schema.tables)o(me({id:`table:${c.name}`,kind:"table",name:c.name},n.get(c.name)));for(const c of e.queues){const l=c.topic===void 0?{}:{detail:"subscription"};o(me({...l,id:`queue:${c.exportName}`,kind:"queue",name:c.exportName},Oe(e.modules,c.filePath)),ce(c.filePath,c.exportName)),a(c.handlerSite,`queue:${c.exportName}`)}for(const c of e.topics)o(me({id:`topic:${c.exportName}`,kind:"topic",name:c.exportName},Oe(e.modules,c.filePath)));for(const c of e.workflows)o({id:`workflow:${c.exportName}`,kind:"workflow",name:c.exportName},ce($g,c.exportName)),a(c.handlerSite,`workflow:${c.exportName}`);for(const c of e.crons)o({detail:c.cron,id:`cron:${c.name}`,kind:"cron",name:c.name});for(const c of e.services){const l=c.rpcEntrypoint===void 0?"fetch":"rpc";o({detail:c.entrypoint===void 0?l:`${l} · ${c.entrypoint}`,id:`service:${c.name}`,kind:"service",name:c.worker})}return{nodes:t,sites:s}},Yg=e=>e==="default"?"the default export is not a registered function":`"${e}" is not a registered function`,Qg=(e,t)=>"from"in e?[e.from]:"unattributed"in e?{reason:e.unattributed}:t.get(ce(e.file,e.exportName))??{reason:Yg(e.exportName)},Xg=(e,t,s)=>{if("reason"in e)return{reason:e.reason};const n=Qg(e,t);if("reason"in n)return n;const{to:i}=e;return s.has(i)?{drawn:n.map(o=>({from:o,kind:e.kind,to:i}))}:{reason:`${i} is not declared`}},vt=e=>`${e.from}|${e.kind}|${e.to}`,Jg=e=>`${e.file}|${String(e.line)}|${e.kind}|${e.reason}`,Zg=e=>{const{nodes:t,sites:s}=Gg(e),n=new Map,i=new Map;for(const o of[...Hg(e),...qg(e)]){const a=Xg(o,s,t);if("drawn"in a)for(const c of a.drawn)n.set(vt(c),c);else{const c={file:o.file,kind:o.kind,line:o.line,reason:a.reason};i.set(Jg(c),c)}}return{edges:[...n.values()].toSorted((o,a)=>vt(o).localeCompare(vt(a))),nodes:[...t.values()].toSorted((o,a)=>o.id.localeCompare(a.id)),modules:e.modules.map(o=>({...o.description===void 0?{}:{description:o.description},...o.installed===!0?{installed:!0}:{},...o.ownsFolder===!1?{ownsFolder:!1}:{},name:o.name,tables:[...o.tables]})),unresolved:[...i.values()].toSorted((o,a)=>o.file.localeCompare(a.file)||o.line-a.line),version:1}},ep=e=>`${Vr}export const architecture = ${$r(e,"Record<string, unknown>")};
4
4
  `,tn=(e,t="api")=>{const s=new Map;for(const n of e){const i=Bt(n),o=s.get(i);if(o===void 0){s.set(i,n);continue}if(o!==n){const a=t==="api"?`the generated api.ts would declare "${i}" twice and the dispatch key "${i}:<fn>" would be ambiguous`:`the generated api.ts would declare "${i}" twice in HttpStreamsRef and again in the httpStreams object literal`;throw new G("INTERNAL",`@lunora/codegen: "${o}" and "${n}" both map to the ${t} namespace "${i}" — ${a}. Rename one file so the two differ by more than a non-identifier character (\`-\`, \`.\`, \`/\` and \`_\` all sanitize to \`_\`).`,{status:500})}}},tp=(e,t={})=>{const{hasVectors:s=!0,scheduler:n=!1,storage:i=!1,usage:o}=t,a=[];e.tables.some(c=>Cn(c))&&a.push({name:"@lunora/d1",reason:"`.global()` tables are D1-backed, so `_generated/app.ts` imports the D1 `ctx.db` adapter"}),e.tables.some(c=>Tn(c))&&a.push({name:"@lunora/hyperdrive",reason:'`.global({ backend: "hyperdrive" })` tables route through `@lunora/hyperdrive/global`'},{name:"@lunora/sql-store",reason:'`.global({ backend: "hyperdrive" })` makes `_generated/app.ts` import the `SqlCtxDbOptions` / `SqlExec` types'}),n&&a.push({name:"@lunora/scheduler",reason:"a declared cron (or `ctx.scheduler` use) makes `_generated/app.ts` import `createScheduler`"}),i&&a.push({name:"@lunora/storage",reason:"a `v.storage()` column, a storage access rule (or `ctx.storage` use) makes `_generated/app.ts` import `createStorage`"}),e.vectorIndexes.length>0&&s&&a.push({name:"@lunora/bindings",reason:"`.vectorize()` indexes make `_generated/shard.ts` import `@lunora/bindings/vectors`"});for(const c of o===void 0?[]:Wr)c.requiredPackage!==void 0&&o?.[c.key]===!0&&a.push({name:c.requiredPackage,reason:`\`ctx.${c.contextProperty??c.key}\` usage makes \`_generated/\` import \`${c.moduleSpecifier}\``});return a.filter((c,l)=>a.findIndex(u=>u.name===c.name)===l)},sp=(e,t,s={})=>{if(t===void 0)return;const n=tp(e,s).filter(o=>!t.has(o.name));if(n.length===0)return;const i=n.map(o=>` - ${o.name} — ${o.reason}`).join(`
@@ -1 +1 @@
1
- import"./json-data-Chfs2Cz5.mjs";import{o as i,j as r,s as n,h as o,t as g,k as u,d as F,w as p,m as l,g as d,f,i as k,u as w,l as A,v as Q}from"./shard-runtime-CkTgY8tL.mjs";import"./shared-DnCokNcE.mjs";import"./platform-8oj7iXQy.mjs";export{i as buildDoTypeImports,r as emitAgentFragments,n as emitAgents,o as emitContainerFragments,g as emitContainers,u as emitPaymentFragments,F as emitQueueFragments,p as emitQueues,l as emitQueuesMetadataFragments,d as emitServiceFragments,f as emitTopicFragments,k as emitWorkflowFragments,w as emitWorkflows,A as emitWorkflowsMetadataFragments,Q as queueAliasFindings};
1
+ import"./json-data-Chfs2Cz5.mjs";import{o as i,j as r,s as n,h as o,t as g,k as u,d as F,w as p,m as l,g as d,f,i as k,u as w,l as A,v as Q}from"./shard-runtime-BQ6ZNigW.mjs";import"./shared-DnCokNcE.mjs";import"./platform-8oj7iXQy.mjs";export{i as buildDoTypeImports,r as emitAgentFragments,n as emitAgents,o as emitContainerFragments,g as emitContainers,u as emitPaymentFragments,F as emitQueueFragments,p as emitQueues,l as emitQueuesMetadataFragments,d as emitServiceFragments,f as emitTopicFragments,k as emitWorkflowFragments,w as emitWorkflows,A as emitWorkflowsMetadataFragments,Q as queueAliasFindings};
@@ -5,7 +5,7 @@ import{APP_METHOD_CAPABILITIES as k}from"./CAPABILITY_PROBES-brcmKenl.mjs";impor
5
5
 
6
6
  return namespace ? createScheduler({${e.jurisdiction?` jurisdiction: ${JSON.stringify(e.jurisdiction)},`:""} namespace }) : undefined;
7
7
  }
8
- `:"",x=e=>e?`
8
+ `:"",A=e=>e?`
9
9
  /**
10
10
  * One bucket's \`Storage\`, signing under the name it is registered as.
11
11
  *
@@ -114,7 +114,7 @@ import{APP_METHOD_CAPABILITIES as k}from"./CAPABILITY_PROBES-brcmKenl.mjs";impor
114
114
  storageUpload: (key: string, body: ArrayBuffer, opts?: { bucket?: string; contentType?: string; sha256?: string }) => pick(opts?.bucket).upload(key, body, opts),
115
115
  };
116
116
  }
117
- `:"",A=e=>e?`
117
+ `:"",x=e=>e?`
118
118
  /**
119
119
  * Adapt the raw D1 binding to \`@lunora/d1\`'s \`D1Exec\` (reads via \`all\`, writes via \`run\`, and — when the binding exposes it — several writes in one round trip via \`batch\`).
120
120
  *
@@ -336,7 +336,7 @@ const buildGlobalCdcApplier =
336
336
 
337
337
  return request.changes.length;
338
338
  };
339
- `:"",C=e=>[...e.hasStorage?["/** `.storage(...)` declaration — one bucket (required) plus optional extra named buckets and signed-URL config. Backs `ctx.storage` AND the studio file browser. */\ninterface StorageDeclaration<Env> {\n /** The default R2 bucket binding (the bare `ctx.storage`). */\n bucket: Selector<Env, R2BucketLike>;\n /** Extra named buckets, reached via `ctx.storage.bucket(\"name\")` and the studio's bucket picker. */\n buckets?: Record<string, Selector<Env, R2BucketLike>>;\n /** Public base URL signed/public object URLs resolve against. Omit it and `ctx.storage` in a mutation, action or HTTP handler (and the studio's copy-URL) signs against the origin the request reached the worker on — no per-environment value to ship. Queries get no such fallback (a live query re-runs with no request behind it), so a query that signs URLs needs this set. */\n publicBaseUrl?: Selector<Env, string>;\n /** R2 S3-API credentials (`{ accountId, accessKeyId, secretAccessKey, bucket, jurisdiction? }`) enabling `ctx.storage.getPresignedUrl` — native S3 presigned URLs that hit R2 directly, bypassing the worker. Omit to use only the worker-signed `getSignedUrl` path. */\n s3?: Selector<Env, R2S3Credentials>;\n /** HMAC secret for signed URLs. */\n signingSecret?: Selector<Env, string>;\n}"]:[],...e.hasScheduler?["/** `.scheduler(...)` declaration — the `SchedulerDO` namespace. Backs `ctx.scheduler` AND the studio's scheduled-jobs view. The origin its callbacks dispatch back to is not declared here: the DO reads `env.LUNORA_ORIGIN_URL` at fire time, because a caller-supplied dispatch target would be an SSRF vector. */\ninterface SchedulerDeclaration<Env> {\n /** The `SchedulerDO` namespace binding (typically `env.SCHEDULER`). */\n namespace: Selector<Env, DurableObjectNamespaceLike & ShardNamespaceLike>;\n}"]:[],...e.hasGlobal?["/** `.global(...)` declaration — the D1 binding backing `.global()` tables. Backs cross-tenant `ctx.db` reads/writes AND the studio's global data browser. */\ninterface GlobalDeclaration<Env> {\n /** The D1 binding (typically `env.DB`). */\n d1: Selector<Env, D1DatabaseLike>;\n /** The worker origin used to fan reverse cross-backend relations across shards. Without it, such a relation throws a clear error. */\n origin?: Selector<Env, string>;\n}"]:[],...e.hasHyperdriveGlobal?['/** `.hyperdriveGlobal(...)` declaration — backs `.global({ backend: "hyperdrive" })` tables on a Postgres/MySQL database via Hyperdrive. Stays reactive: the writer is injected as `globalDb` and the broadcast hook drives live queries. */\ninterface HyperdriveGlobalDeclaration<Env> {\n /** The Hyperdrive engine — selects the Postgres or MySQL dialect. */\n engine: HyperdriveEngine;\n /** Build the `SqlExec` from `env` — e.g. `buildPgExec(fromPostgresJs(postgres(env.HYPERDRIVE.connectionString)))`. Cache the driver on the DO instance; rebuild lazily after hibernation. */\n exec: (env: Env) => SqlExec;\n /** The worker origin used to fan reverse cross-backend relations across shards. Without it, such a relation throws a clear error. */\n origin?: Selector<Env, string>;\n}']:[],...e.hasAuth?['/** `.auth(...)` declaration — better-auth options plus the storage the adapter reads. Give it `d1` (the default) or `namespace` (a Durable Object that hosts the auth tables), never both. The builder owns the lazy build + `ensureMigrated` dance and wires `authHandler` / `resolveIdentity` / `authAdmin`. */\ninterface AuthDeclaration<Env> {\n /** The D1 binding the auth SQL adapter is wired over (via `lunoraD1Adapter`). Omit only when using `namespace`. */\n d1?: Selector<Env, unknown>;\n /** Shared secret the worker presents on the object\'s internal session route. REQUIRED with `namespace`: the binding is reachable from any worker bound to it, so the secret — not the binding — is the authorization boundary. Without it identity resolution fails closed. */\n internalSecret?: Selector<Env, string>;\n /** Name of the Durable Object instance holding the auth tables. Defaults to `"auth"`. Set it to run separate auth objects (per deployment, per tenant) off one namespace. */\n objectName?: Selector<Env, string>;\n /** The auth Durable Object namespace — the DO-backed mode. Needed for `@better-auth/scim`, which requires native transactions that D1 has none of. The object owns the auth tables, so `/api/auth/*` and identity resolution both go through it. Typed as `AuthNamespaceLike` because `createDoAuthWiring` resolves through `idFromName` + `get` and has no `getByName` fallback — both members are load-bearing here, and `ShardNamespaceLike` leaves both optional. */\n namespace?: Selector<Env, AuthNamespaceLike>;\n /** Build the better-auth options from `env` (secret, plugins, email/password, …). */\n options: (env: Env) => LunoraAuthOptions;\n}']:[]],O=e=>[...e.hasAccess?[" private accessSelector?: Selector<Env, CreateAccessResolverOptions | undefined>;"]:[]," private adminToken?: Selector<Env, string>;",...e.hasAuth?[" private authDeclaration?: AuthDeclaration<Env>;"]:[]," private cdcEnabled = false;"," private reactiveCacheConfig: boolean | { maxBytes?: number; maxEntries?: number } = false;",' private maxRelationKeysLimit?: ShardConfig["maxRelationKeys"];',' private observabilitySink?: ShardConfig["observability"];',' private relationExistsPushDownMode?: ShardConfig["relationExistsPushDown"];'," private readonly extendFns: ((env: Env, derived: Readonly<WorkerOptions>) => Partial<WorkerOptions>)[] = [];",...e.hasGlobal?[" private globalDeclaration?: GlobalDeclaration<Env>;"]:[],...e.hasHyperdriveGlobal?[" private hyperdriveGlobalDeclaration?: HyperdriveGlobalDeclaration<Env>;"]:[]," private httpRouterApp?: HttpRouterLike;"," private readonly routeMap: Record<string, Route> = {};",...e.hasScheduler?[" private schedulerDeclaration?: SchedulerDeclaration<Env>;"]:[],...g(e)?[" private readonly shardExtras: Partial<ShardConfig> = {};"]:[],...d(e)?[" private shardRegistrySelector?: Selector<Env, ShardNamespaceLike>;"]:[]," private shardSelector?: Selector<Env, ShardNamespaceLike>;",...e.hasSourcedTables?[' private sourceClientFactory?: NonNullable<ShardConfig["sourceClient"]>;']:[],...e.hasStorage?[" private storageDeclaration?: StorageDeclaration<Env>;"]:[]],T=e=>m(e).map(({configKey:r,doc:t,method:a})=>` /** ${t} */
339
+ `:"",C=e=>[...e.hasStorage?["/** `.storage(...)` declaration — one bucket (required) plus optional extra named buckets and signed-URL config. Backs `ctx.storage` AND the studio file browser. */\ninterface StorageDeclaration<Env> {\n /** The default R2 bucket binding (the bare `ctx.storage`). */\n bucket: Selector<Env, R2BucketLike>;\n /** Extra named buckets, reached via `ctx.storage.bucket(\"name\")` and the studio's bucket picker. */\n buckets?: Record<string, Selector<Env, R2BucketLike>>;\n /** Public base URL signed/public object URLs resolve against. Omit it and `ctx.storage` in a mutation, action or HTTP handler (and the studio's copy-URL) signs against the origin the request reached the worker on — no per-environment value to ship. Queries get no such fallback (a live query re-runs with no request behind it), so a query that signs URLs needs this set. */\n publicBaseUrl?: Selector<Env, string>;\n /** R2 S3-API credentials (`{ accountId, accessKeyId, secretAccessKey, bucket, jurisdiction? }`) enabling `ctx.storage.getPresignedUrl` — native S3 presigned URLs that hit R2 directly, bypassing the worker. Omit to use only the worker-signed `getSignedUrl` path. */\n s3?: Selector<Env, R2S3Credentials>;\n /** HMAC secret for signed URLs. */\n signingSecret?: Selector<Env, string>;\n}"]:[],...e.hasScheduler?["/** `.scheduler(...)` declaration — the `SchedulerDO` namespace. Backs `ctx.scheduler` AND the studio's scheduled-jobs view. The origin its callbacks dispatch back to is not declared here: the DO reads `env.LUNORA_ORIGIN_URL` at fire time, because a caller-supplied dispatch target would be an SSRF vector. */\ninterface SchedulerDeclaration<Env> {\n /** The `SchedulerDO` namespace binding (typically `env.SCHEDULER`). */\n namespace: Selector<Env, DurableObjectNamespaceLike & ShardNamespaceLike>;\n}"]:[],...e.hasGlobal?["/** `.global(...)` declaration — the D1 binding backing `.global()` tables. Backs cross-tenant `ctx.db` reads/writes AND the studio's global data browser. */\ninterface GlobalDeclaration<Env> {\n /** The D1 binding (typically `env.DB`). */\n d1: Selector<Env, D1DatabaseLike>;\n /** The worker origin used to fan reverse cross-backend relations across shards. Without it, such a relation throws a clear error. */\n origin?: Selector<Env, string>;\n}"]:[],...e.hasHyperdriveGlobal?['/** `.hyperdriveGlobal(...)` declaration — backs `.global({ backend: "hyperdrive" })` tables on a Postgres/MySQL database via Hyperdrive. Stays reactive: the writer is injected as `globalDb` and the broadcast hook drives live queries. */\ninterface HyperdriveGlobalDeclaration<Env> {\n /** The Hyperdrive engine — selects the Postgres or MySQL dialect. */\n engine: HyperdriveEngine;\n /** Build the `SqlExec` from `env` — e.g. `buildPgExec(fromPostgresJs(postgres(env.HYPERDRIVE.connectionString)))`. Cache the driver on the DO instance; rebuild lazily after hibernation. */\n exec: (env: Env) => SqlExec;\n /** The worker origin used to fan reverse cross-backend relations across shards. Without it, such a relation throws a clear error. */\n origin?: Selector<Env, string>;\n}']:[],...e.hasAuth?['/** `.auth(...)` declaration — better-auth options plus the storage the adapter reads. Give it `d1` (the default) or `namespace` (a Durable Object that hosts the auth tables), never both. The builder owns the lazy build + `ensureMigrated` dance and wires `authHandler` / `resolveIdentity` / `authAdmin`. */\ninterface AuthDeclaration<Env> {\n /** The D1 binding the auth SQL adapter is wired over (via `lunoraD1Adapter`). Omit only when using `namespace`. */\n d1?: Selector<Env, unknown>;\n /** Shared secret the worker presents on the object\'s internal session route. REQUIRED with `namespace`: the binding is reachable from any worker bound to it, so the secret — not the binding — is the authorization boundary. Without it identity resolution fails closed. */\n internalSecret?: Selector<Env, string>;\n /** Name of the Durable Object instance holding the auth tables. Defaults to `"auth"`. Set it to run separate auth objects (per deployment, per tenant) off one namespace. */\n objectName?: Selector<Env, string>;\n /** The auth Durable Object namespace — the DO-backed mode. Needed for `@better-auth/scim`, which requires native transactions that D1 has none of. The object owns the auth tables, so `/api/auth/*` and identity resolution both go through it. Typed as `AuthNamespaceLike` because `createDoAuthWiring` resolves through `idFromName` + `get` and has no `getByName` fallback — both members are load-bearing here, and `ShardNamespaceLike` leaves both optional. */\n namespace?: Selector<Env, AuthNamespaceLike>;\n /** Build the better-auth options from `env` (secret, plugins, email/password, …). */\n options: (env: Env) => LunoraAuthOptions;\n}']:[]],O=e=>[...e.hasAccess?[" private accessSelector?: Selector<Env, CreateAccessResolverOptions | undefined>;"]:[]," private adminToken?: Selector<Env, string>;",...e.hasAuth?[" private authDeclaration?: AuthDeclaration<Env>;"]:[]," private cdcEnabled = false;",' private deliveryAuthorizationSelector?: ShardConfig["deliveryAuthorization"];'," private reactiveCacheConfig: boolean | { maxBytes?: number; maxEntries?: number } = false;",' private maxRelationKeysLimit?: ShardConfig["maxRelationKeys"];',' private observabilitySink?: ShardConfig["observability"];',' private relationExistsPushDownMode?: ShardConfig["relationExistsPushDown"];'," private readonly extendFns: ((env: Env, derived: Readonly<WorkerOptions>) => Partial<WorkerOptions>)[] = [];",...e.hasGlobal?[" private globalDeclaration?: GlobalDeclaration<Env>;"]:[],...e.hasHyperdriveGlobal?[" private hyperdriveGlobalDeclaration?: HyperdriveGlobalDeclaration<Env>;"]:[]," private httpRouterApp?: HttpRouterLike;"," private readonly routeMap: Record<string, Route> = {};",...e.hasScheduler?[" private schedulerDeclaration?: SchedulerDeclaration<Env>;"]:[],...g(e)?[" private readonly shardExtras: Partial<ShardConfig> = {};"]:[],...d(e)?[" private shardRegistrySelector?: Selector<Env, ShardNamespaceLike>;"]:[]," private shardSelector?: Selector<Env, ShardNamespaceLike>;",...e.hasSourcedTables?[' private sourceClientFactory?: NonNullable<ShardConfig["sourceClient"]>;']:[],...e.hasStorage?[" private storageDeclaration?: StorageDeclaration<Env>;"]:[]],T=e=>m(e).map(({configKey:r,doc:t,method:a})=>` /** ${t} */
340
340
  public ${a}(factory: (env: Env) => ReturnType<NonNullable<ShardConfig["${r}"]>>): this {
341
341
  this.shardExtras.${r} = factory as NonNullable<ShardConfig["${r}"]>;
342
342
 
@@ -360,7 +360,11 @@ const buildGlobalCdcApplier =
360
360
  this.maxRelationKeysLimit = limit;
361
361
 
362
362
  return this;
363
- }`," /**\n * Route the shard's `ctx.log` lines, `ctx.trace` spans and `ctx.metrics` measurements to a telemetry sink.\n *\n * The DO half of observability: without it every in-handler signal stays in the shard's local ring buffer (the studio Logs panel) and reaches no collector. The worker half — one `onRpc` event per dispatched RPC — is a `createWorker` option; pass the SAME sink to both via `.extend((env) => ({ observability: sink(env) }))` to correlate them.\n */\n public observability(selector: NonNullable<ShardConfig[\"observability\"]>): this {\n this.observabilitySink = selector;\n\n return this;\n }",' /** Resolution policy for a relation-crossing `where` whose child is co-located in this shard: `"auto"` (cost-based, the engine default), `"always"` (inline correlated EXISTS) or `"never"` (universal semijoin). All three return identical rows. */\n public relationExistsPushDown(mode: NonNullable<ShardConfig["relationExistsPushDown"]>): this {\n this.relationExistsPushDownMode = mode;\n\n return this;\n }',...e.hasAuth?[' /** Wire better-auth — the builder lazily builds the instance, runs `ensureMigrated`, and dispatches `/api/auth/*` inside the worker (instrumented for the auth-failure SLO). Pass `d1` for the D1-backed default, or `namespace` + `internalSecret` to host the auth tables in a Durable Object (what `@better-auth/scim` needs). */\n public auth(declaration: AuthDeclaration<Env>): this {\n // Reject the ambiguous and the empty shapes here rather than at the first\n // request: with neither storage set, auth would silently never answer, and\n // with both it is unclear which one owns the tables.\n if (declaration.d1 && declaration.namespace) {\n throw new Error(".auth(): pass either `d1` or `namespace`, not both — they are two different homes for the same tables.");\n }\n\n if (!declaration.d1 && !declaration.namespace) {\n throw new Error(".auth(): needs `d1` (D1-backed) or `namespace` (Durable-Object-backed) to know where the auth tables live.");\n }\n\n if (declaration.namespace && !declaration.internalSecret) {\n throw new Error(\n ".auth(): `namespace` requires `internalSecret` — the auth DO binding is reachable from any worker bound to it, so identity resolution is gated on a shared secret and would otherwise fail closed on every request.",\n );\n }\n\n this.authDeclaration = declaration;\n\n return this;\n }']:[]," /** Escape hatch — merge raw `WorkerOptions` (anything not yet sugared) over the derived options at build time. The second `derived` argument is a snapshot of the options assembled so far (after `.auth(...)` etc.), so you can compose rather than clobber — e.g. wrap `derived.resolveIdentity` instead of replacing it. */\n public extend(fn: (env: Env, derived: Readonly<WorkerOptions>) => Partial<WorkerOptions>): this {\n this.extendFns.push(fn);\n\n return this;\n }",...e.hasGlobal?[` /** Back \`.global()\` (cross-tenant) tables with D1 — wires \`ctx.db\` routing, the studio global browser, and reverse cross-shard relations. */
363
+ }`," /**\n * Route the shard's `ctx.log` lines, `ctx.trace` spans and `ctx.metrics` measurements to a telemetry sink.\n *\n * The DO half of observability: without it every in-handler signal stays in the shard's local ring buffer (the studio Logs panel) and reaches no collector. The worker half — one `onRpc` event per dispatched RPC — is a `createWorker` option; pass the SAME sink to both via `.extend((env) => ({ observability: sink(env) }))` to correlate them.\n */\n public observability(selector: NonNullable<ShardConfig[\"observability\"]>): this {\n this.observabilitySink = selector;\n\n return this;\n }",' /** Resolution policy for a relation-crossing `where` whose child is co-located in this shard: `"auto"` (cost-based, the engine default), `"always"` (inline correlated EXISTS) or `"never"` (universal semijoin). All three return identical rows. */\n public relationExistsPushDown(mode: NonNullable<ShardConfig["relationExistsPushDown"]>): this {\n this.relationExistsPushDownMode = mode;\n\n return this;\n }',` /** Authorize each RPC/subscription read and fence its eventual delivery against durable authority epochs. */
364
+ public deliveryAuthorization(selector: NonNullable<ShardConfig["deliveryAuthorization"]>): this {
365
+ this.deliveryAuthorizationSelector = selector;
366
+ return this;
367
+ }`,...e.hasAuth?[' /** Wire better-auth — the builder lazily builds the instance, runs `ensureMigrated`, and dispatches `/api/auth/*` inside the worker (instrumented for the auth-failure SLO). Pass `d1` for the D1-backed default, or `namespace` + `internalSecret` to host the auth tables in a Durable Object (what `@better-auth/scim` needs). */\n public auth(declaration: AuthDeclaration<Env>): this {\n // Reject the ambiguous and the empty shapes here rather than at the first\n // request: with neither storage set, auth would silently never answer, and\n // with both it is unclear which one owns the tables.\n if (declaration.d1 && declaration.namespace) {\n throw new Error(".auth(): pass either `d1` or `namespace`, not both — they are two different homes for the same tables.");\n }\n\n if (!declaration.d1 && !declaration.namespace) {\n throw new Error(".auth(): needs `d1` (D1-backed) or `namespace` (Durable-Object-backed) to know where the auth tables live.");\n }\n\n if (declaration.namespace && !declaration.internalSecret) {\n throw new Error(\n ".auth(): `namespace` requires `internalSecret` — the auth DO binding is reachable from any worker bound to it, so identity resolution is gated on a shared secret and would otherwise fail closed on every request.",\n );\n }\n\n this.authDeclaration = declaration;\n\n return this;\n }']:[]," /** Escape hatch — merge raw `WorkerOptions` (anything not yet sugared) over the derived options at build time. The second `derived` argument is a snapshot of the options assembled so far (after `.auth(...)` etc.), so you can compose rather than clobber — e.g. wrap `derived.resolveIdentity` instead of replacing it. */\n public extend(fn: (env: Env, derived: Readonly<WorkerOptions>) => Partial<WorkerOptions>): this {\n this.extendFns.push(fn);\n\n return this;\n }",...e.hasGlobal?[` /** Back \`.global()\` (cross-tenant) tables with D1 — wires \`ctx.db\` routing, the studio global browser, and reverse cross-shard relations. */
364
368
  public global(declaration: GlobalDeclaration<Env>): this {
365
369
  this.globalDeclaration = declaration;
366
370
 
@@ -401,7 +405,7 @@ const buildGlobalCdcApplier =
401
405
 
402
406
  return this;
403
407
  }`]:[],...T(e)],I=e=>{const r=a=>e.hasScheduler?`
404
- ...(this.schedulerDeclaration ? { scheduler: this.resolveScheduler(env) as unknown as ${a}["scheduler"] } : {}),`:"",t=[" cdc: this.cdcEnabled,"," reactiveCache: this.reactiveCacheConfig,"," ...(this.maxRelationKeysLimit === undefined ? {} : { maxRelationKeys: this.maxRelationKeysLimit }),"," ...(this.observabilitySink === undefined ? {} : { observability: this.observabilitySink }),"," ...(this.relationExistsPushDownMode === undefined ? {} : { relationExistsPushDown: this.relationExistsPushDownMode }),",...e.hasGlobal?[` ...(this.globalDeclaration
408
+ ...(this.schedulerDeclaration ? { scheduler: this.resolveScheduler(env) as unknown as ${a}["scheduler"] } : {}),`:"",t=[" cdc: this.cdcEnabled,"," reactiveCache: this.reactiveCacheConfig,"," ...(this.maxRelationKeysLimit === undefined ? {} : { maxRelationKeys: this.maxRelationKeysLimit }),"," ...(this.observabilitySink === undefined ? {} : { observability: this.observabilitySink }),"," ...(this.deliveryAuthorizationSelector === undefined ? {} : { deliveryAuthorization: this.deliveryAuthorizationSelector }),"," ...(this.relationExistsPushDownMode === undefined ? {} : { relationExistsPushDown: this.relationExistsPushDownMode }),",...e.hasGlobal?[` ...(this.globalDeclaration
405
409
  ? {
406
410
  d1: (rawEnv: Record<string, unknown>, request?: { bookmark?: string; cdc?: boolean; cdcRetentionMs?: number; identity?: Record<string, unknown>; onBookmark?: (bookmark: string | undefined) => void; userId?: string | null }) => {
407
411
  const env = rawEnv as Env;
@@ -483,7 +487,7 @@ const buildGlobalCdcApplier =
483
487
  : {}),`]:[],...d(e)?[" ...(this.shardRegistrySelector ? { shardRegistry: (rawEnv: Record<string, unknown>) => this.shardRegistrySelector?.(rawEnv as Env) } : {}),"]:[],...e.hasSourcedTables?[" ...(this.sourceClientFactory === undefined ? {} : { sourceClient: this.sourceClientFactory }),"]:[],...e.hasStorage?[" ...(this.storageDeclaration ? { storage: (rawEnv: Record<string, unknown>, origin?: string) => this.resolveStorage(rawEnv as Env, origin) } : {}),"]:[],...g(e)?[" ...this.shardExtras,"]:[]];return t.length>0?`
484
488
  ${t.join(`
485
489
  `)}
486
- `:""},q=e=>e?['import * as lunoraIdentityContract from "../identity.js";']:[],L=(e,r)=>e?['import type { CreateAccessResolverOptions } from "@lunora/cloudflare-access";',`import { createAccessResolver${r?", composeResolvers":""} } from "@lunora/cloudflare-access";`]:[],j=e=>e?['import { createKvIntrospectorFromEnv } from "@lunora/bindings/kv";']:[],B=e=>e?['import { createVectorAdminIntrospector } from "@lunora/bindings/vectors";']:[],P=e=>e?['import type { D1CtxDbOptions, D1DatabaseLike, D1Exec } from "@lunora/d1";','import { applyCdcChanges, createD1CtxDb, emitD1QueryCost, exportGlobalRows, facetGlobalColumn, importGlobalRows, listGlobalTables, readD1CdcChanges, readGlobalTablePage, retryingExec } from "@lunora/d1";']:[],G=e=>e?['import notifyConfig from "../notify.js";']:[],_=e=>v(e)?['import { dispatchAgentEmail } from "@lunora/agent/inbound";']:[],W=e=>v(e)?['import * as lunoraAgentDefinitions from "../agents.js";']:[],M=e=>{const{hasFramework:r,hasGlobal:t,hasHyperdriveGlobal:a,hasQueue:s,useUmbrella:o}=e,i=o?"lunorash/runtime":"@lunora/runtime",c=["ExecutionContextLike","HttpRouterLike","LunoraWorker","Route","ScheduledControllerLike","ShardNamespaceLike","WorkerOptions",...s?["TriggerTrace"]:[],...t?["GlobalIntrospector"]:[],...e.tables.length>0?["ShardingInfo"]:[],...r?["FrameworkHostHandler"]:[]],l=[...t||a?["createCrossShardRelationCapabilities"]:[],...d(e)?["createDynamicShardRegistry","createQueryCoordinator"]:[],"createWorker",...e.jurisdiction?["declareAppJurisdiction"]:[],"resolveLogArchiveFromEnv",...e.hasAuth?["memoizeIdentity"]:[],...r?["withFrameworkWorker"]:[]].join(", ");return[`import type { ${[...c].toSorted((n,h)=>n.localeCompare(h)).join(", ")} } from "${i}";`,`import { ${l} } from "${i}";`]},H=e=>{const{hasAccess:r,hasAuth:t,hasGlobal:a,hasHyperdriveGlobal:s,hasKvIntrospector:o,hasQueue:i,hasScheduler:c,hasStorage:l,hasWorkflow:n,wantsOpenApi:h,wantsOpenRpc:u}=e;return[...t?['import type { AuthNamespaceLike, LunoraAuth, LunoraAuthOptions } from "@lunora/auth";','import { authDiscoveryPathsFor, createAuth, createAuthAdmin, createAuthAuditReader, createDoAuthWiring, d1Executor, handleAuthDiscoveryRequest, handleAuthRequest, lunoraD1Adapter } from "@lunora/auth";']:[],...L(r,t),...P(a),...s?['import type { HyperdriveEngine } from "@lunora/hyperdrive/global";','import { createHyperdriveGlobalCtxDb } from "@lunora/hyperdrive/global";','import type { SqlCtxDbOptions, SqlExec } from "@lunora/sql-store";']:[],...j(o),...B(e.hasVectors),...c?['import type { DurableObjectNamespaceLike } from "@lunora/scheduler";','import { createScheduler } from "@lunora/scheduler";']:[],...l?['import type { R2BucketLike, R2S3Credentials, Storage } from "@lunora/storage";','import { createBucketStorage, createStorage } from "@lunora/storage";']:[],...n?['import { createWorkflowsRestClient } from "@lunora/workflow";']:[],..._(e),...M(e),"",...q(e.identity),...W(e),...a||s?['import schema from "../schema.js";']:[],...G(e.hasNotify),'import { LUNORA_CRONS } from "./crons.js";','import { LUNORA_FUNCTIONS } from "./functions.js";',...i?['import { createQueueCaptureSink, dispatchQueueBatch, shouldCaptureQueue } from "@lunora/queue";','import { LUNORA_QUEUE_REGISTRY } from "./queues.js";']:[],...e.wantsArchitecture?['import { architecture } from "./architecture.js";']:[],...h?['import { openApiSpec } from "./openapi.js";']:[],...u?['import { openRpcSpec } from "./openrpc.js";']:[],'import { createShardDO } from "./shard.js";',...e.hasVectors?['import { LUNORA_VECTOR_INDEXES } from "./vectors.js";']:[]]},$=e=>e.jurisdiction&&e.jurisdictionPinsAuth===!0?`
490
+ `:""},q=e=>e?['import * as lunoraIdentityContract from "../identity.js";']:[],L=(e,r)=>e?['import type { CreateAccessResolverOptions } from "@lunora/cloudflare-access";',`import { createAccessResolver${r?", composeResolvers":""} } from "@lunora/cloudflare-access";`]:[],j=e=>e?['import { createKvIntrospectorFromEnv } from "@lunora/bindings/kv";']:[],B=e=>e?['import { createVectorAdminIntrospector } from "@lunora/bindings/vectors";']:[],P=e=>e?['import type { D1CtxDbOptions, D1DatabaseLike, D1Exec } from "@lunora/d1";','import { applyCdcChanges, createD1CtxDb, emitD1QueryCost, exportGlobalRows, facetGlobalColumn, importGlobalRows, listGlobalTables, readD1CdcChanges, readGlobalTablePage, retryingExec } from "@lunora/d1";']:[],G=e=>e?['import notifyConfig from "../notify.js";']:[],_=e=>v(e)?['import { dispatchAgentEmail } from "@lunora/agent/inbound";']:[],W=e=>v(e)?['import * as lunoraAgentDefinitions from "../agents.js";']:[],M=e=>{const{hasFramework:r,hasGlobal:t,hasHyperdriveGlobal:a,hasQueue:n,useUmbrella:o}=e,i=o?"lunorash/runtime":"@lunora/runtime",c=["ExecutionContextLike","HttpRouterLike","LunoraWorker","Route","ScheduledControllerLike","ShardNamespaceLike","WorkerOptions",...n?["TriggerTrace"]:[],...t?["GlobalIntrospector"]:[],...e.tables.length>0?["ShardingInfo"]:[],...r?["FrameworkHostHandler"]:[]],l=[...t||a?["createCrossShardRelationCapabilities"]:[],...d(e)?["createDynamicShardRegistry","createQueryCoordinator"]:[],"createWorker",...e.jurisdiction?["declareAppJurisdiction"]:[],"resolveLogArchiveFromEnv",...e.hasAuth?["memoizeIdentity"]:[],...r?["withFrameworkWorker"]:[]].join(", ");return[`import type { ${[...c].toSorted((s,h)=>s.localeCompare(h)).join(", ")} } from "${i}";`,`import { ${l} } from "${i}";`]},H=e=>{const{hasAccess:r,hasAuth:t,hasGlobal:a,hasHyperdriveGlobal:n,hasKvIntrospector:o,hasQueue:i,hasScheduler:c,hasStorage:l,hasWorkflow:s,wantsOpenApi:h,wantsOpenRpc:u}=e;return[...t?['import type { AuthNamespaceLike, LunoraAuth, LunoraAuthOptions } from "@lunora/auth";','import { authDiscoveryPathsFor, createAuth, createAuthAdmin, createAuthAuditReader, createDoAuthWiring, d1Executor, handleAuthDiscoveryRequest, handleAuthRequest, lunoraD1Adapter } from "@lunora/auth";']:[],...L(r,t),...P(a),...n?['import type { HyperdriveEngine } from "@lunora/hyperdrive/global";','import { createHyperdriveGlobalCtxDb } from "@lunora/hyperdrive/global";','import type { SqlCtxDbOptions, SqlExec } from "@lunora/sql-store";']:[],...j(o),...B(e.hasVectors),...c?['import type { DurableObjectNamespaceLike } from "@lunora/scheduler";','import { createScheduler } from "@lunora/scheduler";']:[],...l?['import type { R2BucketLike, R2S3Credentials, Storage } from "@lunora/storage";','import { createBucketStorage, createStorage } from "@lunora/storage";']:[],...s?['import { createWorkflowsRestClient } from "@lunora/workflow";']:[],..._(e),...M(e),"",...q(e.identity),...W(e),...a||n?['import schema from "../schema.js";']:[],...G(e.hasNotify),'import { LUNORA_CRONS } from "./crons.js";','import { LUNORA_FUNCTIONS } from "./functions.js";',...i?['import { createQueueCaptureSink, dispatchQueueBatch, shouldCaptureQueue } from "@lunora/queue";','import { LUNORA_QUEUE_REGISTRY } from "./queues.js";']:[],...e.wantsArchitecture?['import { architecture } from "./architecture.js";']:[],...h?['import { openApiSpec } from "./openapi.js";']:[],...u?['import { openRpcSpec } from "./openrpc.js";']:[],'import { createShardDO } from "./shard.js";',...e.hasVectors?['import { LUNORA_VECTOR_INDEXES } from "./vectors.js";']:[]]},$=e=>e.jurisdiction&&e.jurisdictionPinsAuth===!0?`
487
491
  // The schema's jurisdiction pins the auth object like every other DO.
488
492
  jurisdiction: ${JSON.stringify(e.jurisdiction)},`:"",U=e=>typeof e=="string"?`{ mode: { kind: ${JSON.stringify(e)} } }`:`{ mode: { field: ${JSON.stringify(e.field)}, kind: "shardBy" } }`,F=e=>[...e.tables.length>0?[` const tableSharding = new Map<string, ShardingInfo>([
489
493
  ${e.tables.map(r=>` [${JSON.stringify(r.name)}, ${U(r.shardMode)}],`).join(`
@@ -743,10 +747,10 @@ ${e.tables.map(r=>` [${JSON.stringify(r.name)}, ${U(r.shardMode)}],`)
743
747
  }`]:[],...e.voiceAgents&&e.voiceAgents.length>0?[` options.voiceAgents = {
744
748
  ${e.voiceAgents.map(r=>` ${JSON.stringify(r.exportName)}: (env as Record<string, unknown>)[${JSON.stringify(r.bindingName)}] as ShardNamespaceLike,`).join(`
745
749
  `)}
746
- };`]:[]],J=e=>[" cronJobs: LUNORA_CRONS,"," functions: LUNORA_FUNCTIONS,",...e.identity?[` identity: lunoraIdentityContract.${e.identity.exportName},`]:[],...e.jurisdiction?[` jurisdiction: ${JSON.stringify(e.jurisdiction)},`]:[],...e.wantsArchitecture?[" architecture,"]:[],...e.wantsOpenApi?[" openApiSpec,"]:[],...e.wantsOpenRpc?[" openRpcSpec,"]:[],...e.hasQueue?[" queue: (batch: unknown, queueEnv: unknown, _context: ExecutionContextLike, trigger: TriggerTrace): Promise<void> =>"," dispatchQueueBatch(batch as Parameters<typeof dispatchQueueBatch>[0], LUNORA_QUEUE_REGISTRY, {"," capture: shouldCaptureQueue(queueEnv as Record<string, unknown>)",` ? createQueueCaptureSink(queueEnv as Record<string, unknown>${e.jurisdiction?`, { jurisdiction: ${JSON.stringify(e.jurisdiction)} }`:""})`," : undefined,"," env: queueEnv as Record<string, unknown>,"," traceparent: trigger.traceparent,"," }),"]:[]," ...(this.httpRouterApp ? { httpRouter: this.httpRouterApp } : {}),"," routes: this.routeMap,"," shardDO: this.shardSelector?.(env) ?? (undefined as unknown as ShardNamespaceLike),"],K=e=>e?`
750
+ };`]:[]],z=e=>[" cronJobs: LUNORA_CRONS,"," functions: LUNORA_FUNCTIONS,",...e.identity?[` identity: lunoraIdentityContract.${e.identity.exportName},`]:[],...e.jurisdiction?[` jurisdiction: ${JSON.stringify(e.jurisdiction)},`]:[],...e.wantsArchitecture?[" architecture,"]:[],...e.wantsOpenApi?[" openApiSpec,"]:[],...e.wantsOpenRpc?[" openRpcSpec,"]:[],...e.hasQueue?[" queue: (batch: unknown, queueEnv: unknown, _context: ExecutionContextLike, trigger: TriggerTrace): Promise<void> =>"," dispatchQueueBatch(batch as Parameters<typeof dispatchQueueBatch>[0], LUNORA_QUEUE_REGISTRY, {"," capture: shouldCaptureQueue(queueEnv as Record<string, unknown>)",` ? createQueueCaptureSink(queueEnv as Record<string, unknown>${e.jurisdiction?`, { jurisdiction: ${JSON.stringify(e.jurisdiction)} }`:""})`," : undefined,"," env: queueEnv as Record<string, unknown>,"," traceparent: trigger.traceparent,"," }),"]:[]," ...(this.httpRouterApp ? { httpRouter: this.httpRouterApp } : {}),"," routes: this.routeMap,"," shardDO: this.shardSelector?.(env) ?? (undefined as unknown as ShardNamespaceLike),"],J=e=>e?`
747
751
  /** The identity memo per \`env\` object, owned by one assembled worker. */
748
752
  type IdentityMemoStore = WeakMap<object, ReturnType<typeof memoizeIdentity>>;
749
- `:"",V=e=>[...e.hasAuth?["AuthDeclaration"]:[],"ComposedApp",...e.hasGlobal?["GlobalDeclaration"]:[],"LunoraConfig",...e.hasScheduler?["SchedulerDeclaration"]:[],"Selector",...e.hasStorage?["StorageDeclaration"]:[]].toSorted((r,t)=>r.localeCompare(t)).join(", "),Z=e=>{const r=(e.hasVectors??!0)&&(e.vectorIndexCount??0)>0,t={...e,hasVectors:r},{hasAuth:a}=t,s=C(t),o=Q(t),i=a?` let auth: LunoraAuth | null = null;
753
+ `:"",K=e=>[...e.hasAuth?["AuthDeclaration"]:[],"ComposedApp",...e.hasGlobal?["GlobalDeclaration"]:[],"LunoraConfig",...e.hasScheduler?["SchedulerDeclaration"]:[],"Selector",...e.hasStorage?["StorageDeclaration"]:[]].toSorted((r,t)=>r.localeCompare(t)).join(", "),Z=e=>{const r=(e.hasVectors??!0)&&(e.vectorIndexCount??0)>0,t={...e,hasVectors:r},{hasAuth:a}=t,n=C(t),o=Q(t),i=a?` let auth: LunoraAuth | null = null;
750
754
  let authInit: Promise<void> | null = null;
751
755
  // One memo per env for THIS assembled worker: a framework-hosted worker rebuilds its options per
752
756
  // request and must reuse it, but a second \`assemble()\` has its own auth closure and must not share.
@@ -804,8 +808,8 @@ type IdentityMemoStore = WeakMap<object, ReturnType<typeof memoizeIdentity>>;
804
808
  throw error;
805
809
  }));
806
810
  `:"",l=a?`
807
- await ensureAuth(env);`:"",n=a?"() => auth, identityMemos":"() => null",h=a?"getAuth: () => LunoraAuth | null, identityMemos: IdentityMemoStore":"_getAuth: () => null",u=t.hasFramework?` const buildWorker = (env: Env): LunoraWorker =>
808
- host ? withFrameworkWorker(host, (hostEnv) => this.buildWorkerOptions(hostEnv as Env, ${n})) : createWorker(this.buildWorkerOptions(env, ${n}));`:` const buildWorker = (env: Env): LunoraWorker => createWorker(this.buildWorkerOptions(env, ${n}));`,y=t.hasFramework?"host?: FrameworkHostHandler":"",p=t.emailAgents??[],f=p.length>0?` composed.email = dispatchAgentEmail([
811
+ await ensureAuth(env);`:"",s=a?"() => auth, identityMemos":"() => null",h=a?"getAuth: () => LunoraAuth | null, identityMemos: IdentityMemoStore":"_getAuth: () => null",u=t.hasFramework?` const buildWorker = (env: Env): LunoraWorker =>
812
+ host ? withFrameworkWorker(host, (hostEnv) => this.buildWorkerOptions(hostEnv as Env, ${s})) : createWorker(this.buildWorkerOptions(env, ${s}));`:` const buildWorker = (env: Env): LunoraWorker => createWorker(this.buildWorkerOptions(env, ${s}));`,y=t.hasFramework?"host?: FrameworkHostHandler":"",p=t.emailAgents??[],f=p.length>0?` composed.email = dispatchAgentEmail([
809
813
  ${p.map(b=>` { agent: lunoraAgentDefinitions.${b.exportName}, className: ${JSON.stringify(b.className)} },`).join(`
810
814
  `)}
811
815
  ]);
@@ -821,15 +825,15 @@ type Selector<Env, T> = (env: Env) => T | undefined;
821
825
 
822
826
  /** The generated \`createShardDO\` config — \`.observability()\`, \`.maxRelationKeys()\` and the long-tail \`.ai()\` / \`.kv()\` / … methods pass straight through to it. */
823
827
  type ShardConfig = NonNullable<Parameters<typeof createShardDO>[0]>;
824
- ${K(a)}${t.jurisdiction?`
828
+ ${J(a)}${t.jurisdiction?`
825
829
  // Module scope, so every isolate loading this script (the worker and each Durable
826
830
  // Object class it exports) knows the schema's jurisdiction before a request runs.
827
831
  // \`@lunora/mail\` reads it to pin its shard RPC like every other DO path.
828
832
  declareAppJurisdiction(${JSON.stringify(t.jurisdiction)});
829
833
  `:""}
830
- ${s.join(`
834
+ ${n.join(`
831
835
 
832
- `)}${s.length>0?`
836
+ `)}${n.length>0?`
833
837
 
834
838
  `:""}/** The composed app: a Cloudflare module worker (\`fetch\` / \`scheduled\` / optional \`email\`) plus the \`ShardDO\` class binding. */
835
839
  interface ComposedApp extends LunoraWorker {
@@ -913,11 +917,11 @@ ${t.hasFramework?`
913
917
  `:""}
914
918
  return composed;
915
919
  }
916
- ${R(t)}${x(t.hasStorage)}
920
+ ${R(t)}${A(t.hasStorage)}
917
921
  /** Fan the recorded declarations into the worker-side \`createWorker\` options. */
918
922
  private buildWorkerOptions(env: Env, ${h}): WorkerOptions {
919
923
  const options: WorkerOptions = {
920
- ${J(t).join(`
924
+ ${z(t).join(`
921
925
  `)}
922
926
  };
923
927
 
@@ -938,7 +942,7 @@ ${o.join(`
938
942
  return options;
939
943
  }
940
944
  }
941
- ${A(t.hasGlobal)}
945
+ ${x(t.hasGlobal)}
942
946
  /**
943
947
  * Shape of the project's root \`lunora.config.*\`.
944
948
  *
@@ -977,5 +981,5 @@ interface LunoraConfig<Env extends object = object> {
977
981
  const defineApp = <Env extends object>(): AppBuilder<Env> => new AppBuilder<Env>();
978
982
 
979
983
  export { AppBuilder, defineApp };
980
- export type { ${V(t)} };
984
+ export type { ${K(t)} };
981
985
  `};export{Z as emitApp};
@@ -1 +1 @@
1
- import"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import"./isD1GlobalTable-udvHAAzD.mjs";import"./json-data-Chfs2Cz5.mjs";import{e as d}from"./shard-CI2ip0Np.mjs";import"./shard-runtime-CkTgY8tL.mjs";import"./shared-DnCokNcE.mjs";import"./platform-8oj7iXQy.mjs";import"./schema-BgM8A3XV.mjs";export{d as default};
1
+ import"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import"./isD1GlobalTable-udvHAAzD.mjs";import"./json-data-Chfs2Cz5.mjs";import{e as d}from"./shard-DYYhXxEG.mjs";import"./shard-runtime-BQ6ZNigW.mjs";import"./shared-DnCokNcE.mjs";import"./platform-8oj7iXQy.mjs";import"./schema-BgM8A3XV.mjs";export{d as default};
@@ -1,4 +1,4 @@
1
- import{LunoraError as At}from"@lunora/errors";import{serializeSchemaSnapshot as Ot,hashSchemaSnapshot as Dt}from"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{isHyperdriveGlobalTable as Tt,isD1GlobalTable as Et}from"./isD1GlobalTable-udvHAAzD.mjs";import{r as Ct}from"./json-data-Chfs2Cz5.mjs";import{r as T,e as Lt,a as _t,b as It,c as Mt,d as Pt,f as Nt,g as $t,h as qt,i as Ft,j as Ut,k as Bt,l as Wt,m as jt,n as Ht,o as Vt,p as Kt,q as Gt}from"./shard-runtime-CkTgY8tL.mjs";import{u as K,i as Qt,G as zt,d as Jt}from"./shared-DnCokNcE.mjs";import{p as Yt}from"./platform-8oj7iXQy.mjs";import{i as Xt}from"./schema-BgM8A3XV.mjs";const h=(a,e)=>`((): (() => ${e}) => { let cached: ${e} | undefined; return () => (cached ??= JSON.parse(${JSON.stringify(JSON.stringify(a))}) as ${e}); })()`,te=["categories","description","facing","level","remediation","title"],Zt=a=>{const e={};return{advisoryRows:a.map(n=>{let r=e[n.name];return r||(r=Object.fromEntries(te.filter(s=>s in n).map(s=>[s,n[s]])),e[n.name]=r),Object.fromEntries(Object.entries(n).filter(([s,d])=>!te.includes(s)||JSON.stringify(d)!==JSON.stringify(r[s])))}),advisoryRules:e}},er=` /**
1
+ import{LunoraError as At}from"@lunora/errors";import{serializeSchemaSnapshot as Ot,hashSchemaSnapshot as Dt}from"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{isHyperdriveGlobalTable as Tt,isD1GlobalTable as Et}from"./isD1GlobalTable-udvHAAzD.mjs";import{r as Ct}from"./json-data-Chfs2Cz5.mjs";import{r as T,e as Lt,a as _t,b as It,c as Mt,d as Pt,f as Nt,g as $t,h as qt,i as Ft,j as Ut,k as Bt,l as Wt,m as jt,n as Ht,o as Vt,p as Kt,q as Gt}from"./shard-runtime-BQ6ZNigW.mjs";import{u as K,i as zt,G as Qt,d as Jt}from"./shared-DnCokNcE.mjs";import{p as Yt}from"./platform-8oj7iXQy.mjs";import{i as Xt}from"./schema-BgM8A3XV.mjs";const h=(n,e)=>`((): (() => ${e}) => { let cached: ${e} | undefined; return () => (cached ??= JSON.parse(${JSON.stringify(JSON.stringify(n))}) as ${e}); })()`,te=["categories","description","facing","level","remediation","title"],Zt=n=>{const e={};return{advisoryRows:n.map(a=>{let r=e[a.name];return r||(r=Object.fromEntries(te.filter(s=>s in a).map(s=>[s,a[s]])),e[a.name]=r),Object.fromEntries(Object.entries(a).filter(([s,d])=>!te.includes(s)||JSON.stringify(d)!==JSON.stringify(r[s])))}),advisoryRules:e}},er=` /**
2
2
  * The bare writer every admin/maintenance entry point writes through.
3
3
  *
4
4
  * Admin and maintenance writes go through the SAME reactive-cache hooks as a
@@ -30,7 +30,7 @@ import{LunoraError as At}from"@lunora/errors";import{serializeSchemaSnapshot as
30
30
  schema: schema as unknown as SchemaLike,
31
31
  sql: this.sql as SqlExec,
32
32
  });
33
- }`,m=(a="")=>` const writer = this.adminWriter(${a});`,tr=`${er}
33
+ }`,m=(n="")=>` const writer = this.adminWriter(${n});`,tr=`${er}
34
34
 
35
35
  protected override async runShardDataMigration(args: RunShardMigrationArgs): Promise<MigrationRunResult> {
36
36
  this.ensureMigrated();
@@ -225,11 +225,11 @@ ${m()}
225
225
  await applyCdcChanges(writer, args.changes);
226
226
 
227
227
  return { applied: args.changes.length };
228
- }`,rr=({actionOnlyBuild:a,actionOnlyFields:e,agentsBuild:t,agentsContextField:n,containersBuild:r,containersContextField:s,databaseOptions:d,everyContextBuild:g,everyContextField:y,facadeBlock:c,globalDatabaseLine:w,notifyBuild:S,ormContextField:E,paymentsBuild:v,paymentsContextField:C,queuesBuild:i,queuesContextField:f,topicsBuild:L,topicsContextField:_,vectorsBuild:I,vectorsContextField:x,workflowsBuild:M,workflowsContextField:P})=>{const k=e.length>0,l=k?`
228
+ }`,rr=({actionOnlyBuild:n,actionOnlyFields:e,agentsBuild:t,agentsContextField:a,containersBuild:r,containersContextField:s,databaseOptions:d,everyContextBuild:g,everyContextField:y,facadeBlock:c,globalDatabaseLine:w,notifyBuild:S,ormContextField:E,paymentsBuild:v,paymentsContextField:C,queuesBuild:i,queuesContextField:f,topicsBuild:L,topicsContextField:_,vectorsBuild:I,vectorsContextField:x,workflowsBuild:M,workflowsContextField:P})=>{const k=e.length>0,l=k?`
229
229
  // ActionCtx-only helpers (external, non-deterministic I/O): constructed
230
230
  // and attached only for an \`action\` so query/mutation ctx never carry them.
231
231
  if (isAction) {
232
- ${a.replaceAll(/^(?=.)/gmu," ")}${e.map(u=>` ctx.${u} = ${u};`).join(`
232
+ ${n.replaceAll(/^(?=.)/gmu," ")}${e.map(u=>` ctx.${u} = ${u};`).join(`
233
233
  `)}
234
234
  }
235
235
  `:"";return` private buildCtx(options: { bookmarks?: DispatchBookmark | undefined; functionPath?: string | undefined; headroom?: TransactionHeadroomTracker | undefined; identity?: SubscriptionIdentity | undefined; kind?: "query" | undefined; onRead?: ((table: string, idOrScan?: string) => void) | undefined; onReadRange?: ((range: KeyRange) => void) | undefined; scope?: QueryReadScope | undefined; trusted?: boolean | undefined } = {}): unknown {
@@ -437,7 +437,7 @@ ${S}
437
437
  scheduler,
438
438
  span,
439
439
  storage: contextStorage,
440
- trace,${x}${y}${C}${s}${P}${f}${_}${n}
440
+ trace,${x}${y}${C}${s}${P}${f}${_}${a}
441
441
  };
442
442
  ${k?` const isAction = contextKind === "action";
443
443
  `:""}${l}
@@ -510,7 +510,7 @@ ${e.map(u=>` delete descriptors.${u};
510
510
  installRun(ctx, contextKind);
511
511
 
512
512
  return ctx;
513
- }`},ar=`// Bound in-process \`ctx.run*\` composition depth so a self- or cyclically-
513
+ }`},nr=`// Bound in-process \`ctx.run*\` composition depth so a self- or cyclically-
514
514
  // referencing call fails loudly with a clear error instead of overflowing the
515
515
  // stack. Tracked across the awaited handler chain (one DO invocation is
516
516
  // single-threaded), so the counter reflects true nesting depth.
@@ -576,7 +576,7 @@ const dispatchRun = async (
576
576
  } finally {
577
577
  runDepth -= 1;
578
578
  }
579
- };`,nr=` public override async handleRpc(functionPath: string, args: Record<string, unknown>, headroom?: TransactionHeadroomTracker, scope?: QueryReadScope, bookmarks?: DispatchBookmark): Promise<unknown> {
579
+ };`,ar=` public override async handleRpc(functionPath: string, args: Record<string, unknown>, headroom?: TransactionHeadroomTracker, scope?: QueryReadScope, bookmarks?: DispatchBookmark): Promise<unknown> {
580
580
  const registered = LUNORA_FUNCTIONS[functionPath];
581
581
 
582
582
  // Internal functions are reachable server-side only: via \`ctx.run*\`
@@ -802,7 +802,7 @@ __COMMITTED_CATCH__ } finally {
802
802
  }
803
803
 
804
804
  throw error;
805
- `,ir=a=>nr.replace("__COMMITTED_CATCH__",a?or:""),dr=a=>{const e={};for(const t of a.tables){const n={};for(const[r,s]of Object.entries(t.shape)){const d=K(s);d.kind==="id"&&d.tableName!==void 0&&(n[r]=d.tableName)}Object.keys(n).length>0&&(e[t.name]=n)}return e},cr=a=>{const e={};for(const t of a.tables){const n=[];for(const[r,s]of Object.entries(t.shape))K(s).kind==="storage"&&n.push(r);n.length>0&&(e[t.name]=n)}return e},lr=a=>{const e={};for(const t of a.tables){const n=[...t.indexes.map(r=>({fields:[...r.fields],name:r.name,type:"index",...r.unique===!0?{unique:!0}:{}})),...t.searchIndexes.map(r=>({fields:[r.field,...r.filterFields??[]],name:r.name,type:"search"})),...(t.geoIndexes??[]).map(r=>({fields:[r.field],name:r.name,type:"geo"})),...t.rankIndexes.map(r=>({fields:r.sortBy.map(s=>s.field),name:r.name,type:"rank"})),...t.vectorIndexes.map(r=>({fields:r.field===void 0?[]:[r.field],name:r.name,type:"vector"}))];n.length>0&&(e[t.name]=n)}return e},hr=a=>{const e=[];for(const t of a.tables)!t.ttl||t.shardMode==="global"||e.push({...t.ttl.after===void 0?{}:{after:t.ttl.after},field:t.ttl.field,...t.softDelete?{softDeleteField:t.softDelete.field}:{},table:t.name});return e},ur=a=>{if(a.kind!=="union"||a.members===void 0||a.members.length===0)return;const e=[];for(const t of a.members){if(t.kind!=="literal"||t.literalValue===void 0)return;try{const n=JSON.parse(t.literalValue);if(typeof n!="string")return;e.push(n)}catch{return}}return e},pr=(a,e,t)=>{const n=K(e),r={name:a,optional:Qt(e),type:n.kind};if(n.kind==="id"&&n.tableName!==void 0){r.ref=n.tableName;const d=t.get(a);d!==void 0&&(r.onDelete=d)}n.kind==="storage"&&(r.isStorage=!0,n.bucket!==void 0&&(r.bucket=n.bucket));const s=ur(n);return s!==void 0&&(r.enumValues=s),n.column?.notNull===!1&&(r.nullable=!0),r},mr=a=>{const e={};for(const t of a.tables){const n=[{name:"_id",optional:!1,pk:!0,type:"id"},{name:"_creationTime",optional:!1,type:"number"},...t.commitOrdered===!0?[{name:"_commitSeq",optional:!1,type:"number"}]:[]],r=new Map(t.relations.flatMap(s=>s.kind==="one"?[[s.field,s.onDelete]]:[]));for(const[s,d]of Object.entries(t.shape))n.push(pr(s,d,r));e[t.name]=n}return e},gr=({hasMutators:a,hasShapes:e,rlsData:t})=>{const n=e?`
805
+ `,ir=n=>ar.replace("__COMMITTED_CATCH__",n?or:""),dr=n=>{const e={};for(const t of n.tables){const a={};for(const[r,s]of Object.entries(t.shape)){const d=K(s);d.kind==="id"&&d.tableName!==void 0&&(a[r]=d.tableName)}Object.keys(a).length>0&&(e[t.name]=a)}return e},cr=n=>{const e={};for(const t of n.tables){const a=[];for(const[r,s]of Object.entries(t.shape))K(s).kind==="storage"&&a.push(r);a.length>0&&(e[t.name]=a)}return e},lr=n=>{const e={};for(const t of n.tables){const a=[...t.indexes.map(r=>({fields:[...r.fields],name:r.name,type:"index",...r.unique===!0?{unique:!0}:{}})),...t.searchIndexes.map(r=>({fields:[r.field,...r.filterFields??[]],name:r.name,type:"search"})),...(t.geoIndexes??[]).map(r=>({fields:[r.field],name:r.name,type:"geo"})),...t.rankIndexes.map(r=>({fields:r.sortBy.map(s=>s.field),name:r.name,type:"rank"})),...t.vectorIndexes.map(r=>({fields:r.field===void 0?[]:[r.field],name:r.name,type:"vector"}))];a.length>0&&(e[t.name]=a)}return e},hr=n=>{const e=[];for(const t of n.tables)!t.ttl||t.shardMode==="global"||e.push({...t.ttl.after===void 0?{}:{after:t.ttl.after},field:t.ttl.field,...t.softDelete?{softDeleteField:t.softDelete.field}:{},table:t.name});return e},ur=n=>{if(n.kind!=="union"||n.members===void 0||n.members.length===0)return;const e=[];for(const t of n.members){if(t.kind!=="literal"||t.literalValue===void 0)return;try{const a=JSON.parse(t.literalValue);if(typeof a!="string")return;e.push(a)}catch{return}}return e},pr=(n,e,t)=>{const a=K(e),r={name:n,optional:zt(e),type:a.kind};if(a.kind==="id"&&a.tableName!==void 0){r.ref=a.tableName;const d=t.get(n);d!==void 0&&(r.onDelete=d)}a.kind==="storage"&&(r.isStorage=!0,a.bucket!==void 0&&(r.bucket=a.bucket));const s=ur(a);return s!==void 0&&(r.enumValues=s),a.column?.notNull===!1&&(r.nullable=!0),r},mr=n=>{const e={};for(const t of n.tables){const a=[{name:"_id",optional:!1,pk:!0,type:"id"},{name:"_creationTime",optional:!1,type:"number"},...t.commitOrdered===!0?[{name:"_commitSeq",optional:!1,type:"number"}]:[]],r=new Map(t.relations.flatMap(s=>s.kind==="one"?[[s.field,s.onDelete]]:[]));for(const[s,d]of Object.entries(t.shape))a.push(pr(s,d,r));e[t.name]=a}return e},gr=({hasMutators:n,hasShapes:e,rlsData:t})=>{const a=e?`
806
806
  protected override resolveShape(name: string, args: Record<string, unknown>, identity?: SubscriptionIdentity): { columns?: readonly string[]; effectiveWhere?: WhereInput; global?: boolean; table: string } | undefined {
807
807
  const shape = LUNORA_SHAPES[name];
808
808
 
@@ -868,11 +868,11 @@ __COMMITTED_CATCH__ } finally {
868
868
  `:"",r=e?[...new Set(t.policies.filter(c=>c.on==="read"&&c.table!=="").map(c=>c.table))].toSorted((c,w)=>c.localeCompare(w)):[],s=r.length>0?`
869
869
  /** Refuses to boot a shape that would replicate around the read policies its table is governed by (\`defineShape({ use })\` is how a shape opts in; \`use: []\` acknowledges an ungoverned one). */
870
870
  assertShapesDeclareReadPolicies(LUNORA_SHAPES, ${JSON.stringify(r)}, (schema as unknown as { rlsMode?: string }).rlsMode === "required");
871
- `:"";return{customMutatorOverride:a?`
871
+ `:"";return{customMutatorOverride:n?`
872
872
  protected override isCustomMutator(functionPath: string): boolean {
873
873
  return LUNORA_MUTATOR_PATHS.has(functionPath);
874
874
  }
875
- `:"",shapeGuardImport:e?"assertShapeShardable, ":"",shapeReadPolicyAssertion:s,shapeReadPolicyImport:s===""?"":"assertShapesDeclareReadPolicies, ",shapeResolveOverride:n}},fr=(a,e)=>a?`
875
+ `:"",shapeGuardImport:e?"assertShapeShardable, ":"",shapeReadPolicyAssertion:s,shapeReadPolicyImport:s===""?"":"assertShapesDeclareReadPolicies, ",shapeResolveOverride:a}},fr=(n,e)=>n?`
876
876
  protected override async readGlobalShapeRows(resolved: { columns?: readonly string[]; effectiveWhere?: WhereInput; global?: boolean; table: string }, identity?: SubscriptionIdentity): Promise<Array<{ doc: Record<string, unknown>; id: string }>> {
877
877
  const env = this.env as Record<string, unknown>;
878
878
  // A shape read performs no writes, so the widened request only needs
@@ -938,7 +938,7 @@ assertShapesDeclareReadPolicies(LUNORA_SHAPES, ${JSON.stringify(r)}, (schema as
938
938
 
939
939
  return globalDb.cdcChangedTables?.(sinceSeq, cursorOnly === undefined ? {} : { cursorOnly });
940
940
  }
941
- `:"",br=a=>({externalSourceOverride:a?`
941
+ `:"",br=n=>({externalSourceOverride:n?`
942
942
  protected override async pollExternalSources(trace?: TraceRefLike): Promise<number | undefined> {
943
943
  const env = (this.env ?? {}) as Record<string, unknown>;
944
944
  const sourced = Object.entries((schema as unknown as SchemaLike).tables)
@@ -1078,7 +1078,7 @@ assertShapesDeclareReadPolicies(LUNORA_SHAPES, ${JSON.stringify(r)}, (schema as
1078
1078
 
1079
1079
  return nextDueAt;
1080
1080
  }
1081
- `:"",sourceBootstrap:a?`
1081
+ `:"",sourceBootstrap:n?`
1082
1082
  const autoSourced = Object.values((schema as unknown as SchemaLike).tables).some((definition) => {
1083
1083
  const source = (definition as { externalSource?: ExternalSourceLike }).externalSource;
1084
1084
 
@@ -1088,11 +1088,11 @@ assertShapesDeclareReadPolicies(LUNORA_SHAPES, ${JSON.stringify(r)}, (schema as
1088
1088
  if (autoSourced) {
1089
1089
  void this.scheduleSourcePoll();
1090
1090
  }
1091
- `:"",sourceClientCacheConst:a?`
1091
+ `:"",sourceClientCacheConst:n?`
1092
1092
  const sourceClientCache = new WeakMap<object, Map<string, SourceClientLike>>();
1093
1093
  const sourcePollAtCache = new WeakMap<object, Map<string, number>>();
1094
- `:""}),yr=(a,e)=>{const t=e.length>0,r=a?T("vectorsStub: VectorSearchLike","ctx.vectors: no vectors configured. Pass `vectors` to createShardDO().",["deleteByIds","getByIds","query","upsert","upsertMany","upsertNow"]):"",s=t?` const vectorShardKey = this.currentShardKey();
1095
- `:"",d=t?"namespace: vectorShardKey === ROOT_SHARD_NAME ? undefined : vectorShardKey, ":"",y=`, { ${["deferAfterCommit: (work) => this.deferAfterCommit(work)",...t?["namespace: vectorShardKey === ROOT_SHARD_NAME ? undefined : vectorShardKey",`shardedIndexNames: [${e.map(S=>JSON.stringify(S)).join(", ")}]`]:[]].join(", ")} }`,c=a?`
1094
+ `:""}),yr=(n,e)=>{const t=e.length>0,r=n?T("vectorsStub: VectorSearchLike","ctx.vectors: no vectors configured. Pass `vectors` to createShardDO().",["deleteByIds","getByIds","query","upsert","upsertMany","upsertNow"]):"",s=t?` const vectorShardKey = this.currentShardKey();
1095
+ `:"",d=t?"namespace: vectorShardKey === ROOT_SHARD_NAME ? undefined : vectorShardKey, ":"",y=`, { ${["deferAfterCommit: (work) => this.deferAfterCommit(work)",...t?["namespace: vectorShardKey === ROOT_SHARD_NAME ? undefined : vectorShardKey",`shardedIndexNames: [${e.map(S=>JSON.stringify(S)).join(", ")}]`]:[]].join(", ")} }`,c=n?`
1096
1096
  const vectorSync = this.vectorSync(env);
1097
1097
  // Vectorize lives outside this shard's SQLite, so a query whose result
1098
1098
  // depends on a similarity search cannot be proven current on reconnect —
@@ -1102,7 +1102,7 @@ const sourcePollAtCache = new WeakMap<object, Map<string, number>>();
1102
1102
  const bareVectors = vectorSync?.vectors ?? vectorsStub;
1103
1103
  const vectors = markUnvouchableReads(bareVectors, options.onRead, ["getByIds", "query"]);
1104
1104
  const onWrite = vectorSync?.onWrite;
1105
- `:"";return{vectorSyncMethod:a?`
1105
+ `:"";return{vectorSyncMethod:n?`
1106
1106
  private vectorSync(env: Record<string, unknown>): { backfill: VectorBackfillSync; onWrite: WriteHook; vectors: VectorSearchLike } | undefined {
1107
1107
  if (!config.vectors) {
1108
1108
  return undefined;
@@ -1135,14 +1135,14 @@ ${s} const vectors = createContextVectors(lunora${y});
1135
1135
  ordered: async (read, work) => this.runOrderedAfterWrites(read, work),
1136
1136
  });
1137
1137
  }
1138
- `:"",vectorsBuild:c,vectorsStub:r}},Lr=({advisories:a=[],advisorProcedures:e=[],agents:t=[],capabilities:n=new Set,containers:r=[],env:s,flagKeys:d=[],hasFlags:g=!1,hasNotify:y=!1,hasRooms:c=!1,hasVectors:w=!0,maskMetadata:S,mutators:E=[],queues:v=[],rlsMetadata:C,schema:i,schemaSnapshot:f,shapes:L=[],storageRules:_,studioFeatures:I,services:x=[],topics:M=[],useUmbrella:P=!1,workflows:k=[]})=>{const l=Jt(P),N=E.length>0,u=L.length>0,re=f===void 0?"":Ot(f),ae=f===void 0?"":`
1138
+ `:"",vectorsBuild:c,vectorsStub:r}},Lr=({advisories:n=[],advisorProcedures:e=[],agents:t=[],capabilities:a=new Set,containers:r=[],env:s,flagKeys:d=[],hasFlags:g=!1,hasNotify:y=!1,hasRooms:c=!1,hasVectors:w=!0,maskMetadata:S,mutators:E=[],queues:v=[],rlsMetadata:C,schema:i,schemaSnapshot:f,shapes:L=[],storageRules:_,studioFeatures:I,services:x=[],topics:M=[],useUmbrella:P=!1,workflows:k=[]})=>{const l=Jt(P),N=E.length>0,u=L.length>0,re=f===void 0?"":Ot(f),ne=f===void 0?"":`
1139
1139
  /** Structural schema snapshot + its content hash, recorded in the shard's \`__lunora_schema_history\` ledger on cold start so the studio can show a schema-version timeline and diff any two versions. */
1140
1140
  const LUNORA_SCHEMA_SNAPSHOT: { hash: string; json: string } = { hash: ${JSON.stringify(Dt(f))}, json: ${JSON.stringify(re)} };
1141
- `,ne=f===void 0?"":", schemaSnapshot: LUNORA_SCHEMA_SNAPSHOT",b=Lt(n),A=_t(g,l.flags),$=It(d,g,l.flags),q=Gt(y),F=Mt(s),{build:se,contextField:oe,importLines:ie,specs:de}=Pt(Yt(v)),{build:ce,contextField:le,importLines:he,specs:ue}=Nt(M,v),U=$t(x,l.server),{build:pe,contextField:me,importLines:ge,specs:fe}=qt(r,i.jurisdiction),{build:be,contextField:ye,importLines:we,specs:ve}=Ft(k),{build:ke,contextField:Se,importLines:Re,specs:xe}=Ut(t),{build:Ae,configField:Oe,contextField:De,imports:Te,stub:Ee}=Bt(n.has("payments")),Ce=a,{advisoryRules:Le,advisoryRows:_e}=Zt(Ce),Ie=e,G=C??{policies:[],roles:[]},Me=S??{columns:[]},Pe=_??{rules:[]},Ne=I??{analytics:!1,auth:!1,containers:!1,flags:!1,kv:!1,mail:!1,notifications:!1,payments:!1,privacy:!1,queues:!1,scheduler:!1,storage:!1,vectors:!1,workflows:!1},{constant:$e,override:qe}=Wt(k),{constant:Fe,override:Ue}=jt(v),p=w&&i.vectorIndexes.length>0,B=new Set(i.tables.filter(o=>Xt(o)).map(o=>o.name)),Q=p&&i.vectorIndexes.some(o=>B.has(o.table)),R=i.tables.some(o=>o.shardMode==="global"),W=Ht(B),j=i.tables.some(o=>Tt(o)),z=i.tables.some(o=>Et(o)),O=i.tables.some(o=>o.externalSource!==void 0),J=i.tables.some(o=>o.memory===!0),H=i.tables.some(o=>o.shardMode!=="global"&&o.searchIndexes.length>0);if(z&&j)throw new At("INTERNAL",'lunora codegen: mixing `.global()` (D1) and `.global({ backend: "hyperdrive" })` tables in one app is not supported yet — use a single global backend.');const V=i.tables.length>0,Be=dr(i),We=lr(i),je=mr(i),He=cr(i),Y=hr(i),X=Vt(p,k.length>0,v.length>0,g,H);u&&X.push("WhereInput");const Z=Kt(R),{customMutatorOverride:Ve,shapeGuardImport:Ke,shapeReadPolicyAssertion:Ge,shapeReadPolicyImport:Qe,shapeResolveOverride:ze}=gr({hasMutators:N,hasShapes:u,rlsData:G}),D=[`import type { ${X.join(", ")} } from "${l.do}";`,`import { applyCdcChanges, createStableIdFactory, ${H?"backfillSearchIndexes, ":""}${p?"backfillVectorIndexes, ":""}buildReprojectionMigration, ${J?"clearMemoryTables, ":""}${Ke}createReadFootprint, createShardCtxDb, exportShardRows, importShardRows, ${O?"isSourceDue, pullExternalSourceIncrementalTick, pullExternalSourceTick, ":""}markUnvouchableReads, ${Q?"ROOT_SHARD_NAME, ":""}runDataMigration, runShardMigrations, ${Z.importFragment}ShardDO as ShardDOBase } from "${l.do}";`,...O?[`import type { ExternalSourceLike, SourceClientLike, TraceRefLike } from "${l.do}";`]:[],u?`import { asBucketStorage, ${Qe}beginDeferredDeletes, beginDeferredSchedules, composeShapeReadWhere, createSecrets, flushDeferredDeletes, LunoraError, withDeferredDeletes, withDeferredSchedules } from "${l.server}";`:`import { asBucketStorage, beginDeferredDeletes, beginDeferredSchedules, createSecrets, flushDeferredDeletes, LunoraError, withDeferredDeletes, withDeferredSchedules } from "${l.server}";`];V&&D.push(`import { bindOrm, bindTableFacade } from "${l.server}";`),p&&D.push('import type { SchemaLike as VectorSchemaLike, VectorBackfillSync, VectorizeIndexLike, VectorSearchLike } from "@lunora/bindings/vectors";','import { createContextVectors, createVectorBackfillSync, createVectors, createVectorSyncHook, vectorBackfillTargets } from "@lunora/bindings/vectors";'),D.push(...b.importLines,...A.importLines,...q.importLines,...F.importLines,...ge,...we,...ie,...he,...U.importLines,...Re,...Te,"",'import schema from "../schema.js";',`import { ${["LUNORA_FUNCTIONS","LUNORA_LIFECYCLE_HOOKS","LUNORA_MIGRATIONS",...N?["LUNORA_MUTATOR_PATHS"]:[],...c?["LUNORA_ROOMS"]:[],...u?["LUNORA_SHAPES"]:[]].join(", ")} } from "./functions.js";`);const Je=p?`
1142
- vectors?: (env: Record<string, unknown>) => Record<string, VectorizeIndexLike>;`:"",Ye=z?`
1141
+ `,ae=f===void 0?"":", schemaSnapshot: LUNORA_SCHEMA_SNAPSHOT",b=Lt(a),A=_t(g,l.flags),$=It(d,g,l.flags),q=Gt(y),F=Mt(s),{build:se,contextField:oe,importLines:ie,specs:de}=Pt(Yt(v)),{build:ce,contextField:le,importLines:he,specs:ue}=Nt(M,v),U=$t(x,l.server),{build:pe,contextField:me,importLines:ge,specs:fe}=qt(r,i.jurisdiction),{build:be,contextField:ye,importLines:we,specs:ve}=Ft(k),{build:ke,contextField:Se,importLines:Re,specs:xe}=Ut(t),{build:Ae,configField:Oe,contextField:De,imports:Te,stub:Ee}=Bt(a.has("payments")),Ce=n,{advisoryRules:Le,advisoryRows:_e}=Zt(Ce),Ie=e,G=C??{policies:[],roles:[]},Me=S??{columns:[]},Pe=_??{rules:[]},Ne=I??{analytics:!1,auth:!1,containers:!1,flags:!1,kv:!1,mail:!1,notifications:!1,payments:!1,privacy:!1,queues:!1,scheduler:!1,storage:!1,vectors:!1,workflows:!1},{constant:$e,override:qe}=Wt(k),{constant:Fe,override:Ue}=jt(v),p=w&&i.vectorIndexes.length>0,B=new Set(i.tables.filter(o=>Xt(o)).map(o=>o.name)),z=p&&i.vectorIndexes.some(o=>B.has(o.table)),R=i.tables.some(o=>o.shardMode==="global"),W=Ht(B),j=i.tables.some(o=>Tt(o)),Q=i.tables.some(o=>Et(o)),O=i.tables.some(o=>o.externalSource!==void 0),J=i.tables.some(o=>o.memory===!0),H=i.tables.some(o=>o.shardMode!=="global"&&o.searchIndexes.length>0);if(Q&&j)throw new At("INTERNAL",'lunora codegen: mixing `.global()` (D1) and `.global({ backend: "hyperdrive" })` tables in one app is not supported yet — use a single global backend.');const V=i.tables.length>0,Be=dr(i),We=lr(i),je=mr(i),He=cr(i),Y=hr(i),X=Vt(p,k.length>0,v.length>0,g,H);u&&X.push("WhereInput");const Z=Kt(R),{customMutatorOverride:Ve,shapeGuardImport:Ke,shapeReadPolicyAssertion:Ge,shapeReadPolicyImport:ze,shapeResolveOverride:Qe}=gr({hasMutators:N,hasShapes:u,rlsData:G}),D=[`import type { ${X.join(", ")} } from "${l.do}";`,`import { applyCdcChanges, createStableIdFactory, ${H?"backfillSearchIndexes, ":""}${p?"backfillVectorIndexes, ":""}buildReprojectionMigration, ${J?"clearMemoryTables, ":""}${Ke}createReadFootprint, createShardCtxDb, exportShardRows, importShardRows, ${O?"isSourceDue, pullExternalSourceIncrementalTick, pullExternalSourceTick, ":""}markUnvouchableReads, ${z?"ROOT_SHARD_NAME, ":""}runDataMigration, runShardMigrations, ${Z.importFragment}ShardDO as ShardDOBase } from "${l.do}";`,...O?[`import type { ExternalSourceLike, SourceClientLike, TraceRefLike } from "${l.do}";`]:[],u?`import { asBucketStorage, ${ze}beginDeferredDeletes, beginDeferredSchedules, composeShapeReadWhere, createSecrets, flushDeferredDeletes, LunoraError, withDeferredDeletes, withDeferredSchedules } from "${l.server}";`:`import { asBucketStorage, beginDeferredDeletes, beginDeferredSchedules, createSecrets, flushDeferredDeletes, LunoraError, withDeferredDeletes, withDeferredSchedules } from "${l.server}";`];V&&D.push(`import { bindOrm, bindTableFacade } from "${l.server}";`),p&&D.push('import type { SchemaLike as VectorSchemaLike, VectorBackfillSync, VectorizeIndexLike, VectorSearchLike } from "@lunora/bindings/vectors";','import { createContextVectors, createVectorBackfillSync, createVectors, createVectorSyncHook, vectorBackfillTargets } from "@lunora/bindings/vectors";'),D.push(...b.importLines,...A.importLines,...q.importLines,...F.importLines,...ge,...we,...ie,...he,...U.importLines,...Re,...Te,"",'import schema from "../schema.js";',`import { ${["LUNORA_FUNCTIONS","LUNORA_LIFECYCLE_HOOKS","LUNORA_MIGRATIONS",...N?["LUNORA_MUTATOR_PATHS"]:[],...c?["LUNORA_ROOMS"]:[],...u?["LUNORA_SHAPES"]:[]].join(", ")} } from "./functions.js";`);const Je=p?`
1142
+ vectors?: (env: Record<string, unknown>) => Record<string, VectorizeIndexLike>;`:"",Ye=Q?`
1143
1143
  d1?: (env: Record<string, unknown>, request?: { bookmark?: string; cdc?: boolean; cdcRetentionMs?: number; identity?: Record<string, unknown>; onBookmark?: (bookmark: string | undefined) => void; userId?: string }) => DatabaseWriterLike | undefined;`:"",Xe=j?`
1144
1144
  hyperdriveGlobal?: (env: Record<string, unknown>, request?: { cdc?: boolean; cdcRetentionMs?: number; identity?: Record<string, unknown>; userId?: string }) => DatabaseWriterLike | undefined;`:"",Ze=O?`
1145
- sourceClient?: (env: Record<string, unknown>, binding: string) => { query: <Row = Record<string, unknown>>(text: string, params?: readonly unknown[]) => Promise<Row[]> } | undefined;`:"",et="ctx.db.<globalTable>: no global backend configured. Pass `d1` or `hyperdriveGlobal` to createShardDO().",tt="ctx.scheduler: no scheduler configured. Pass `scheduler` to createShardDO().",rt="ctx.storage: no storage configured. Pass `storage` to createShardDO().",at=R?T("globalDbStub: DatabaseWriterLike",et,["aggregate","count","delete","explain","findFirst","findFirstOrThrow","findMany","get","groupBy","insert","normalizeId","patch","query","rank","rankPage","replace"],{sync:["normalizeId","query"]}):"",{vectorSyncMethod:nt,vectorsBuild:st,vectorsStub:ot}=yr(p,Q?i.vectorIndexes.filter(o=>B.has(o.table)).map(o=>o.name):[]),it=`{
1145
+ sourceClient?: (env: Record<string, unknown>, binding: string) => { query: <Row = Record<string, unknown>>(text: string, params?: readonly unknown[]) => Promise<Row[]> } | undefined;`:"",et="ctx.db.<globalTable>: no global backend configured. Pass `d1` or `hyperdriveGlobal` to createShardDO().",tt="ctx.scheduler: no scheduler configured. Pass `scheduler` to createShardDO().",rt="ctx.storage: no storage configured. Pass `storage` to createShardDO().",nt=R?T("globalDbStub: DatabaseWriterLike",et,["aggregate","count","delete","explain","findFirst","findFirstOrThrow","findMany","get","groupBy","insert","normalizeId","patch","query","rank","rankPage","replace"],{sync:["normalizeId","query"]}):"",{vectorSyncMethod:at,vectorsBuild:st,vectorsStub:ot}=yr(p,z?i.vectorIndexes.filter(o=>B.has(o.table)).map(o=>o.name):[]),it=`{
1146
1146
  ...this.ctxDbTuning(),
1147
1147
  auth: { identity: identity ?? null, userId: userId ?? null },
1148
1148
  broadcast: (delta) => {
@@ -1231,6 +1231,7 @@ ${J?` clearMemoryTables(this.sql as SqlExec, schema as unknown as Sch
1231
1231
  // emitter can know that; a hand-written subclass leaves this unset
1232
1232
  // and keeps the backstop.
1233
1233
  ctxDbCacheWired: true,
1234
+ ...(config.deliveryAuthorization === undefined ? {} : { deliveryAuthorization: config.deliveryAuthorization((env ?? {}) as Record<string, unknown>) }),
1234
1235
  ...(config.maxRelationKeys === undefined ? {} : { maxRelationKeys: config.maxRelationKeys }),
1235
1236
  ...(config.reactiveCache ? { reactiveCache: config.reactiveCache === true ? {} : config.reactiveCache } : {}),
1236
1237
  ...(config.relationExistsPushDown === undefined ? {} : { relationExistsPushDown: config.relationExistsPushDown }),
@@ -1269,7 +1270,7 @@ ${i.tables.map(o=>` facade[${JSON.stringify(o.name)}] = bindTableFaca
1269
1270
  `:"",vt=`${b.everyBuild}${A.build}${F.build}
1270
1271
  const secrets = createSecrets(env);
1271
1272
  `,kt=`${b.everyFields}${A.contextField}${q.contextField}${F.contextField}
1272
- secrets,`,St=q.build,Rt=[...b.actionFields,...x.length>0?["services"]:[]],xt=`${b.actionBuild}${U.build}`;return`${zt}${D.join(`
1273
+ secrets,`,St=q.build,Rt=[...b.actionFields,...x.length>0?["services"]:[]],xt=`${b.actionBuild}${U.build}`;return`${Qt}${D.join(`
1273
1274
  `)}
1274
1275
 
1275
1276
  type FunctionKind = "action" | "mutation" | "query";
@@ -1332,8 +1333,10 @@ const LUNORA_STORAGE_RULES = ${h(Pe,"StorageRulesResult")};
1332
1333
 
1333
1334
  /** Which optional package-backed features this app wires up (discovered from imports / \`ctx.*\` reads / schema signals) served via \`__lunora_admin__:studioFeatures\` so the studio hides nav pages whose package isn't enabled. */
1334
1335
  const LUNORA_STUDIO_FEATURES = ${h(Ne,"StudioFeaturesResult")};
1335
- ${ae}${W.constant}${$.constant}${$e}${Fe}${fe}${ve}${de}${ue}${U.specs}${xe}
1336
+ ${ne}${W.constant}${$.constant}${$e}${Fe}${fe}${ve}${de}${ue}${U.specs}${xe}
1336
1337
  export interface ShardDOConfig {
1338
+ /** Current authority for RPC and ordinary subscription deliveries; other live delivery modes are refused. */
1339
+ deliveryAuthorization?: (env: Record<string, unknown>) => DeliveryAuthorization;
1337
1340
  /** Opt into change-data-capture: records a post-image to \`__cdc_log\` on every write (backs streaming export + replay-PITR). */
1338
1341
  cdc?: boolean;
1339
1342
  /** Ceiling on the join keys one relation-crossing \`where\` predicate may pre-resolve via semijoin before failing closed. Omit for the engine default. */
@@ -1349,8 +1352,8 @@ export interface ShardDOConfig {
1349
1352
  /** \`origin\` is the origin the current \`/rpc\` request reached the worker on — the fallback base for signed object URLs when no \`publicBaseUrl\` is configured. \`undefined\` off the synchronous dispatch path. */
1350
1353
  storage?: (env: Record<string, unknown>, origin?: string) => unknown;${Je}${b.configFields}${A.configField}${Oe}${Ye}${Xe}${Ze}${W.configField}
1351
1354
  }
1352
- ${T("schedulerStub",tt,["cancel","runAfter","runAt"])}${T("storageStub",rt,["createMultipartUpload","delete","download","generateUploadUrl","getMetadata","getPresignedUrl","getSignedUrl","getUrl","head","list","resumeMultipartUpload","store","upload"],{sync:["getUrl","resumeMultipartUpload"]})}${at}${gt}${ot}${b.stubs}${Ee}
1353
- ${ar}
1355
+ ${T("schedulerStub",tt,["cancel","runAfter","runAt"])}${T("storageStub",rt,["createMultipartUpload","delete","download","generateUploadUrl","getMetadata","getPresignedUrl","getSignedUrl","getUrl","head","list","resumeMultipartUpload","store","upload"],{sync:["getUrl","resumeMultipartUpload"]})}${nt}${gt}${ot}${b.stubs}${Ee}
1356
+ ${nr}
1354
1357
 
1355
1358
  /**
1356
1359
  * Build the project's shard Durable Object. Export the result as \`ShardDO\`
@@ -1363,7 +1366,7 @@ export const createShardDO = (config: ShardDOConfig = {}): new (state: ShardDOSt
1363
1366
  ${ir(c)}
1364
1367
  ${Z.override}
1365
1368
  ${sr}
1366
- ${Ve}${ze}${ht}${pt}
1369
+ ${Ve}${Qe}${ht}${pt}
1367
1370
  protected override lifecycleHookPaths(event: "connect" | "disconnect" | "init" | "reactor" | "whisper"): readonly string[] {
1368
1371
  return LUNORA_LIFECYCLE_HOOKS[event];
1369
1372
  }
@@ -1471,7 +1474,7 @@ ${tr}
1471
1474
  return;
1472
1475
  }
1473
1476
 
1474
- runShardMigrations(this.sql as SqlExec, schema as unknown as SchemaLike, { cdc: config.cdc ?? false${ne} });
1477
+ runShardMigrations(this.sql as SqlExec, schema as unknown as SchemaLike, { cdc: config.cdc ?? false${ae} });
1475
1478
  this.migrated = true;
1476
1479
  }
1477
1480
  ${H?`
@@ -1483,7 +1486,7 @@ ${H?`
1483
1486
 
1484
1487
  return backfillSearchIndexes(this.sql as SqlExec, schema as unknown as SchemaLike, options);
1485
1488
  }
1486
- `:""}${nt}
1489
+ `:""}${at}
1487
1490
  ${rr({actionOnlyFields:Rt,agentsBuild:ke,agentsContextField:Se,containersBuild:pe,containersContextField:me,databaseOptions:it,everyContextBuild:vt,everyContextField:kt,facadeBlock:wt,globalDatabaseLine:lt,notifyBuild:St,ormContextField:ct,paymentsBuild:Ae,paymentsContextField:De,queuesBuild:se,queuesContextField:oe,topicsBuild:ce,topicsContextField:le,vectorsBuild:st,vectorsContextField:dt,workflowsBuild:be,workflowsContextField:ye,actionOnlyBuild:xt})}
1488
1491
  };
1489
1492
  `};export{cr as b,Lr as e};
@@ -323,4 +323,4 @@ const ${e} = ${b(n,r)};
323
323
  : paymentStub;
324
324
 
325
325
  return payments;
326
- },`,stub:f("paymentStub: LunoraPayment","ctx.payments: no payment configured. Pass `payment` to createShardDO().",P,{cast:" as unknown as LunoraPayment",sync:!0})}:{build:"",configField:"",contextField:"",imports:[],stub:""},ae=(e,r,t,n,a)=>["AdvisorProcedure","AdvisoryFinding","DatabaseWriterLike","DataMigrationLike","DispatchBookmark","ExportRow",...n?["FlagsResult"]:[],"ImportShardResult","KeyRange","MaskPoliciesResult","MigrationRunResult","QueryReadScope",...t?["QueuesResult"]:[],"RelatedPage","RunShardApplyCdcArgs","RunShardExportArgs","RunShardFindRelatedArgs","RunShardImportArgs","RunShardMigrationArgs","RlsPoliciesResult","RunShardRankBeforeArgs","RunShardRankPageArgs","RunShardWriteArgs","RunShardWriteResult","SchedulerLike",...a?["SearchBackfillProgress"]:[],"TransactionHeadroomTracker","SchemaLike","ShardDOState","ShardRankPageResult","SqlExec","StorageRulesResult","StudioFeaturesResult","SubscriptionIdentity","SystemReaderStorageLike","TelemetrySink",...e?["VectorBackfillProgress"]:[],...r?["WorkflowsResult"]:[],...e?["WriteHook"]:[]];export{j as a,M as b,Q as c,Z as d,K as e,ee as f,te as g,H as h,z as i,ne as j,se as k,re as l,oe as m,D as n,ae as o,I as p,U as q,f as r,V as s,G as t,J as u,Y as v,X as w};
326
+ },`,stub:f("paymentStub: LunoraPayment","ctx.payments: no payment configured. Pass `payment` to createShardDO().",P,{cast:" as unknown as LunoraPayment",sync:!0})}:{build:"",configField:"",contextField:"",imports:[],stub:""},ae=(e,r,t,n,a)=>["AdvisorProcedure","AdvisoryFinding","DatabaseWriterLike","DataMigrationLike","DispatchBookmark","ExportRow",...n?["FlagsResult"]:[],"ImportShardResult","KeyRange","MaskPoliciesResult","MigrationRunResult","QueryReadScope",...t?["QueuesResult"]:[],"RelatedPage","RunShardApplyCdcArgs","RunShardExportArgs","RunShardFindRelatedArgs","RunShardImportArgs","RunShardMigrationArgs","RlsPoliciesResult","RunShardRankBeforeArgs","RunShardRankPageArgs","RunShardWriteArgs","RunShardWriteResult","SchedulerLike",...a?["SearchBackfillProgress"]:[],"TransactionHeadroomTracker","SchemaLike","ShardDOState","DeliveryAuthorization","ShardRankPageResult","SqlExec","StorageRulesResult","StudioFeaturesResult","SubscriptionIdentity","SystemReaderStorageLike","TelemetrySink",...e?["VectorBackfillProgress"]:[],...r?["WorkflowsResult"]:[],...e?["WriteHook"]:[]];export{j as a,M as b,Q as c,Z as d,K as e,ee as f,te as g,H as h,z as i,ne as j,se as k,re as l,oe as m,D as n,ae as o,I as p,U as q,f as r,V as s,G as t,J as u,Y as v,X as w};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/codegen",
3
- "version": "1.0.0-alpha.318",
3
+ "version": "1.0.0-alpha.319",
4
4
  "description": "Code generator for Lunora: emits _generated/{api,server,dataModel}.ts from your schema",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -50,15 +50,15 @@
50
50
  "access": "public"
51
51
  },
52
52
  "dependencies": {
53
- "@lunora/advisor": "1.0.0-alpha.227",
54
- "@lunora/agent": "1.0.0-alpha.219",
55
- "@lunora/container": "1.0.0-alpha.78",
53
+ "@lunora/advisor": "1.0.0-alpha.228",
54
+ "@lunora/agent": "1.0.0-alpha.220",
55
+ "@lunora/container": "1.0.0-alpha.79",
56
56
  "@lunora/errors": ">=1.0.0-alpha.51 <2.0.0-0",
57
57
  "@lunora/platform": "1.0.0-alpha.66",
58
- "@lunora/queue": "1.0.0-alpha.110",
59
- "@lunora/scheduler": "1.0.0-alpha.132",
60
- "@lunora/values": "1.0.0-alpha.68",
61
- "@lunora/workflow": "1.0.0-alpha.80",
58
+ "@lunora/queue": "1.0.0-alpha.111",
59
+ "@lunora/scheduler": "1.0.0-alpha.133",
60
+ "@lunora/values": "1.0.0-alpha.69",
61
+ "@lunora/workflow": "1.0.0-alpha.81",
62
62
  "@visulima/fs": "6.0.29",
63
63
  "jiti": "^2.7.0",
64
64
  "quicktype-core": "^26.0.0",