@lunora/codegen 1.0.0-alpha.229 → 1.0.0-alpha.230

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 d,toAdvisorContext as f}from"./packem_shared/formatAdvisories-DwmUKYuc.mjs";import{describeErrorLevelFindings as c,errorAdvisoryNames as n,errorPlatformDiagnosticNames as l}from"./packem_shared/describeErrorLevelFindings-D23VSkFP.mjs";import{CodegenDiagnosticError as x,diagnosticAt as E}from"./packem_shared/CodegenDiagnosticError-BUXlG3P-.mjs";import{AGENTS_FILENAME as u,discoverAgents as v}from"./packem_shared/AGENTS_FILENAME-DoPI92Wu.mjs";import{listLunoraSourceFiles as g}from"./packem_shared/listLunoraSourceFiles-DP-5e-RE.mjs";import{default as O}from"./packem_shared/discoverAuthApiCalls-FxrdBeVt.mjs";import{CONTAINERS_FILENAME as M,discoverContainers as T}from"./packem_shared/CONTAINERS_FILENAME-B6TFs82W.mjs";import{default as h}from"./packem_shared/discoverCrons-MfKw7IFf.mjs";import{FLAGS_FILENAME as F,discoverFlags as I}from"./packem_shared/FLAGS_FILENAME-BedPDCsR.mjs";import{default as D}from"./packem_shared/discoverFunctions-BsmX-sEq.mjs";import{default as U}from"./packem_shared/discoverHttpRoutes-BcXI9CNt.mjs";import{default as H}from"./packem_shared/discoverHyperdriveCalls-D9qXqTq3.mjs";import{default as y}from"./packem_shared/discoverInserts-CFJ3IVeI.mjs";import{d as W}from"./packem_shared/index-BoaHhVtM.mjs";import{default as V}from"./packem_shared/discoverMigrations-DbrHwcGE.mjs";import{MUTATORS_FILENAME as Q,discoverMutators as w}from"./packem_shared/MUTATORS_FILENAME-B6cKrN_m.mjs";import{default as q}from"./packem_shared/discoverNondeterministicCalls-CSQ_GDcA.mjs";import{NOTIFY_FILENAME as Y,discoverNotifyCalls as X,discoverNotifyConfig as Z}from"./packem_shared/NOTIFY_FILENAME-Cri3NT5U.mjs";import{default as ee}from"./packem_shared/readPackageDependencies-C6h6FZuP.mjs";import{d as oe}from"./packem_shared/queries-B-f4jO-x.mjs";import{QUEUES_FILENAME as se,discoverQueues as ae}from"./packem_shared/QUEUES_FILENAME-CxkPcMH1.mjs";import{default as me}from"./packem_shared/discoverR2sqlCalls-fu7fC0i_.mjs";import{default as fe}from"./packem_shared/discoverRlsProcedures-BO4qC77y.mjs";import{default as ce}from"./packem_shared/discoverRlsMetadata-CPmAGL0W.mjs";import{discoverSandboxUsage as le}from"./packem_shared/discoverSandboxUsage-CgmfgDTS.mjs";import{default as xe}from"./packem_shared/discoverSchema-D8DBDHEg.mjs";import{SHAPES_FILENAME as Ae,discoverShapes as ue}from"./packem_shared/SHAPES_FILENAME-zJgzynXR.mjs";import{default as Ne}from"./packem_shared/discoverStorageRulesMetadata-D8VYflWt.mjs";import{WORKFLOWS_FILENAME as Ce,discoverWorkflows as Oe}from"./packem_shared/WORKFLOWS_FILENAME-B_ZJxRSx.mjs";import{G as Me,e as Te,a as _e,b as he,c as Le,d as Fe,f as Ie,g as Pe,h as De,i as Ge,j as Ue,k as be,l as He,m as je,n as ye}from"./packem_shared/emit-6YJU3YbV.mjs";import{emitApp as We}from"./packem_shared/emitApp-BiATunRA.mjs";import{isD1GlobalTable as Ve,isHyperdriveGlobalTable as ze}from"./packem_shared/isD1GlobalTable-udvHAAzD.mjs";import{buildOpenApiDocument as we,emitOpenApi as Je,emitOpenApiModule as qe}from"./packem_shared/buildOpenApiDocument-D1dd4rBh.mjs";import{OPENRPC_VERSION as Ye,buildOpenRpcDocument as Xe,emitOpenRpc as Ze,emitOpenRpcModule as $e}from"./packem_shared/OPENRPC_VERSION-DAxS0CaZ.mjs";import{DEFAULT_TARGET as rr,platformMatrixIds as or,readProjectTarget as tr,resolveCodegenTarget as sr}from"./packem_shared/DEFAULT_TARGET-kmm2i4Fw.mjs";import{loadProjectConfig as ir,readProjectConfigLiterals as mr}from"./packem_shared/loadProjectConfig-CKsFNgn3.mjs";import{SCHEMA_SNAPSHOT_FILENAME as fr,createCodegenProject as pr,findTsconfig as cr,refreshCodegenProject as nr,runCodegen as lr}from"./packem_shared/SCHEMA_SNAPSHOT_FILENAME-BveaOaFr.mjs";import{SchemaSnapshotParseError as xr,buildSchemaSnapshot as Er,evaluateSchemaDrift as Ar,parseSchemaSnapshot as ur}from"./packem_shared/SchemaSnapshotParseError-lUWe6lPo.mjs";import{schemaFromIr as Nr}from"./packem_shared/schemaFromIr-BWFnvCVg.mjs";import{LUNORA_ERROR_CODES as Cr,validatorIrToJsonSchema as Or}from"./packem_shared/LUNORA_ERROR_CODES-C2s0xWQD.mjs";import{SDK_LANGUAGES as Mr,SDK_TARGETS as Tr,generateSdk as _r}from"./packem_shared/SDK_LANGUAGES-Cmn8nq91.mjs";import{redact as Lr,secretKindOf as Fr}from"./packem_shared/redact-Cy14LEnc.mjs";import{MESSAGE_SOLUTIONS as Pr,findSolutionByMessage as Dr}from"@lunora/errors";import{PROJECT_CONFIG_FILENAMES as Ur,findProjectConfigFile as br}from"./packem_shared/PROJECT_CONFIG_FILENAMES-DzOu-lSc.mjs";import{isTypedSchema as jr}from"./packem_shared/isTypedSchema-B_qlBbE-.mjs";const e="0.0.0";export{u as AGENTS_FILENAME,M as CONTAINERS_FILENAME,x as CodegenDiagnosticError,rr as DEFAULT_TARGET,F as FLAGS_FILENAME,Me as GENERATED_HEADER,Cr as LUNORA_ERROR_CODES,Pr as LUNORA_SOLUTION_RULES,Q as MUTATORS_FILENAME,Y as NOTIFY_FILENAME,Ye as OPENRPC_VERSION,Ur as PROJECT_CONFIG_FILENAMES,se as QUEUES_FILENAME,fr as SCHEMA_SNAPSHOT_FILENAME,t as SCHEMA_SNAPSHOT_VERSION,Mr as SDK_LANGUAGES,Tr as SDK_TARGETS,Ae as SHAPES_FILENAME,xr as SchemaSnapshotParseError,e as VERSION,Ce as WORKFLOWS_FILENAME,we as buildOpenApiDocument,Xe as buildOpenRpcDocument,Er as buildSchemaSnapshot,pr as createCodegenProject,c as describeErrorLevelFindings,E as diagnosticAt,s as diffSchemaSnapshots,v as discoverAgents,O as discoverAuthApiCalls,T as discoverContainers,h as discoverCrons,I as discoverFlags,D as discoverFunctions,U as discoverHttpRoutes,H as discoverHyperdriveCalls,y as discoverInserts,W as discoverMaskProcedures,V as discoverMigrations,w as discoverMutators,q as discoverNondeterministicCalls,X as discoverNotifyCalls,Z as discoverNotifyConfig,oe as discoverQueries,ae as discoverQueues,me as discoverR2sqlCalls,ce as discoverRlsMetadata,fe as discoverRlsProcedures,le as discoverSandboxUsage,xe as discoverSchema,ue as discoverShapes,Ne as discoverStorageRulesMetadata,Oe as discoverWorkflows,Te as emitAgents,_e as emitApi,We as emitApp,he as emitCollections,Le as emitContainers,Fe as emitCrons,Ie as emitDataModel,Pe as emitDrizzleSchema,De as emitFunctions,Je as emitOpenApi,qe as emitOpenApiModule,Ze as emitOpenRpc,$e as emitOpenRpcModule,Ge as emitScheduler,Ue as emitServer,be as emitShard,He as emitVectors,je as emitWorkflows,ye as emitWranglerCronTriggers,n as errorAdvisoryNames,l as errorPlatformDiagnosticNames,Ar as evaluateSchemaDrift,Dr as findLunoraSolution,br as findProjectConfigFile,cr as findTsconfig,m as formatAdvisories,_r as generateSdk,Ve as isD1GlobalTable,ze as isHyperdriveGlobalTable,jr as isTypedSchema,d as lintSchema,g as listLunoraSourceFiles,ir as loadProjectConfig,ur as parseSchemaSnapshot,or as platformMatrixIds,ee as readPackageDependencies,mr as readProjectConfigLiterals,tr as readProjectTarget,Lr as redact,nr as refreshCodegenProject,sr as resolveCodegenTarget,lr as runCodegen,Nr as schemaFromIr,Fr as secretKindOf,a as serializeSchemaSnapshot,f as toAdvisorContext,Or 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 d,toAdvisorContext as f}from"./packem_shared/formatAdvisories-DwmUKYuc.mjs";import{describeErrorLevelFindings as c,errorAdvisoryNames as n,errorPlatformDiagnosticNames as l}from"./packem_shared/describeErrorLevelFindings-D23VSkFP.mjs";import{CodegenDiagnosticError as x,diagnosticAt as E}from"./packem_shared/CodegenDiagnosticError-BUXlG3P-.mjs";import{AGENTS_FILENAME as u,discoverAgents as v}from"./packem_shared/AGENTS_FILENAME-DoPI92Wu.mjs";import{listLunoraSourceFiles as g}from"./packem_shared/listLunoraSourceFiles-DP-5e-RE.mjs";import{default as O}from"./packem_shared/discoverAuthApiCalls-FxrdBeVt.mjs";import{CONTAINERS_FILENAME as M,discoverContainers as T}from"./packem_shared/CONTAINERS_FILENAME-B6TFs82W.mjs";import{default as h}from"./packem_shared/discoverCrons-MfKw7IFf.mjs";import{FLAGS_FILENAME as F,discoverFlags as I}from"./packem_shared/FLAGS_FILENAME-BedPDCsR.mjs";import{default as D}from"./packem_shared/discoverFunctions-BsmX-sEq.mjs";import{default as U}from"./packem_shared/discoverHttpRoutes-BcXI9CNt.mjs";import{default as H}from"./packem_shared/discoverHyperdriveCalls-D9qXqTq3.mjs";import{default as y}from"./packem_shared/discoverInserts-CFJ3IVeI.mjs";import{d as W}from"./packem_shared/index-BoaHhVtM.mjs";import{default as V}from"./packem_shared/discoverMigrations-DbrHwcGE.mjs";import{MUTATORS_FILENAME as Q,discoverMutators as w}from"./packem_shared/MUTATORS_FILENAME-B6cKrN_m.mjs";import{default as q}from"./packem_shared/discoverNondeterministicCalls-CSQ_GDcA.mjs";import{NOTIFY_FILENAME as Y,discoverNotifyCalls as X,discoverNotifyConfig as Z}from"./packem_shared/NOTIFY_FILENAME-Cri3NT5U.mjs";import{default as ee}from"./packem_shared/readPackageDependencies-C6h6FZuP.mjs";import{d as oe}from"./packem_shared/queries-B-f4jO-x.mjs";import{QUEUES_FILENAME as se,discoverQueues as ae}from"./packem_shared/QUEUES_FILENAME-CxkPcMH1.mjs";import{default as me}from"./packem_shared/discoverR2sqlCalls-fu7fC0i_.mjs";import{default as fe}from"./packem_shared/discoverRlsProcedures-BO4qC77y.mjs";import{default as ce}from"./packem_shared/discoverRlsMetadata-CPmAGL0W.mjs";import{discoverSandboxUsage as le}from"./packem_shared/discoverSandboxUsage-CgmfgDTS.mjs";import{default as xe}from"./packem_shared/discoverSchema-D8DBDHEg.mjs";import{SHAPES_FILENAME as Ae,discoverShapes as ue}from"./packem_shared/SHAPES_FILENAME-zJgzynXR.mjs";import{default as Ne}from"./packem_shared/discoverStorageRulesMetadata-D8VYflWt.mjs";import{WORKFLOWS_FILENAME as Ce,discoverWorkflows as Oe}from"./packem_shared/WORKFLOWS_FILENAME-B_ZJxRSx.mjs";import{G as Me,e as Te,a as _e,b as he,c as Le,d as Fe,f as Ie,g as Pe,h as De,i as Ge,j as Ue,k as be,l as He,m as je,n as ye}from"./packem_shared/emit-D_prE7y6.mjs";import{emitApp as We}from"./packem_shared/emitApp-rCWsXXGd.mjs";import{isD1GlobalTable as Ve,isHyperdriveGlobalTable as ze}from"./packem_shared/isD1GlobalTable-udvHAAzD.mjs";import{buildOpenApiDocument as we,emitOpenApi as Je,emitOpenApiModule as qe}from"./packem_shared/buildOpenApiDocument-D6SBl-tk.mjs";import{OPENRPC_VERSION as Ye,buildOpenRpcDocument as Xe,emitOpenRpc as Ze,emitOpenRpcModule as $e}from"./packem_shared/OPENRPC_VERSION-DDd0VJyT.mjs";import{DEFAULT_TARGET as rr,platformMatrixIds as or,readProjectTarget as tr,resolveCodegenTarget as sr}from"./packem_shared/DEFAULT_TARGET-kmm2i4Fw.mjs";import{loadProjectConfig as ir,readProjectConfigLiterals as mr}from"./packem_shared/loadProjectConfig-CKsFNgn3.mjs";import{SCHEMA_SNAPSHOT_FILENAME as fr,createCodegenProject as pr,findTsconfig as cr,refreshCodegenProject as nr,runCodegen as lr}from"./packem_shared/SCHEMA_SNAPSHOT_FILENAME-Cssrg7G6.mjs";import{SchemaSnapshotParseError as xr,buildSchemaSnapshot as Er,evaluateSchemaDrift as Ar,parseSchemaSnapshot as ur}from"./packem_shared/SchemaSnapshotParseError-lUWe6lPo.mjs";import{schemaFromIr as Nr}from"./packem_shared/schemaFromIr-BWFnvCVg.mjs";import{LUNORA_ERROR_CODES as Cr,validatorIrToJsonSchema as Or}from"./packem_shared/LUNORA_ERROR_CODES-C2s0xWQD.mjs";import{SDK_LANGUAGES as Mr,SDK_TARGETS as Tr,generateSdk as _r}from"./packem_shared/SDK_LANGUAGES-Df_CnJx5.mjs";import{redact as Lr,secretKindOf as Fr}from"./packem_shared/redact-Cy14LEnc.mjs";import{MESSAGE_SOLUTIONS as Pr,findSolutionByMessage as Dr}from"@lunora/errors";import{PROJECT_CONFIG_FILENAMES as Ur,findProjectConfigFile as br}from"./packem_shared/PROJECT_CONFIG_FILENAMES-DzOu-lSc.mjs";import{isTypedSchema as jr}from"./packem_shared/isTypedSchema-CKzc3ioR.mjs";const e="0.0.0";export{u as AGENTS_FILENAME,M as CONTAINERS_FILENAME,x as CodegenDiagnosticError,rr as DEFAULT_TARGET,F as FLAGS_FILENAME,Me as GENERATED_HEADER,Cr as LUNORA_ERROR_CODES,Pr as LUNORA_SOLUTION_RULES,Q as MUTATORS_FILENAME,Y as NOTIFY_FILENAME,Ye as OPENRPC_VERSION,Ur as PROJECT_CONFIG_FILENAMES,se as QUEUES_FILENAME,fr as SCHEMA_SNAPSHOT_FILENAME,t as SCHEMA_SNAPSHOT_VERSION,Mr as SDK_LANGUAGES,Tr as SDK_TARGETS,Ae as SHAPES_FILENAME,xr as SchemaSnapshotParseError,e as VERSION,Ce as WORKFLOWS_FILENAME,we as buildOpenApiDocument,Xe as buildOpenRpcDocument,Er as buildSchemaSnapshot,pr as createCodegenProject,c as describeErrorLevelFindings,E as diagnosticAt,s as diffSchemaSnapshots,v as discoverAgents,O as discoverAuthApiCalls,T as discoverContainers,h as discoverCrons,I as discoverFlags,D as discoverFunctions,U as discoverHttpRoutes,H as discoverHyperdriveCalls,y as discoverInserts,W as discoverMaskProcedures,V as discoverMigrations,w as discoverMutators,q as discoverNondeterministicCalls,X as discoverNotifyCalls,Z as discoverNotifyConfig,oe as discoverQueries,ae as discoverQueues,me as discoverR2sqlCalls,ce as discoverRlsMetadata,fe as discoverRlsProcedures,le as discoverSandboxUsage,xe as discoverSchema,ue as discoverShapes,Ne as discoverStorageRulesMetadata,Oe as discoverWorkflows,Te as emitAgents,_e as emitApi,We as emitApp,he as emitCollections,Le as emitContainers,Fe as emitCrons,Ie as emitDataModel,Pe as emitDrizzleSchema,De as emitFunctions,Je as emitOpenApi,qe as emitOpenApiModule,Ze as emitOpenRpc,$e as emitOpenRpcModule,Ge as emitScheduler,Ue as emitServer,be as emitShard,He as emitVectors,je as emitWorkflows,ye as emitWranglerCronTriggers,n as errorAdvisoryNames,l as errorPlatformDiagnosticNames,Ar as evaluateSchemaDrift,Dr as findLunoraSolution,br as findProjectConfigFile,cr as findTsconfig,m as formatAdvisories,_r as generateSdk,Ve as isD1GlobalTable,ze as isHyperdriveGlobalTable,jr as isTypedSchema,d as lintSchema,g as listLunoraSourceFiles,ir as loadProjectConfig,ur as parseSchemaSnapshot,or as platformMatrixIds,ee as readPackageDependencies,mr as readProjectConfigLiterals,tr as readProjectTarget,Lr as redact,nr as refreshCodegenProject,sr as resolveCodegenTarget,lr as runCodegen,Nr as schemaFromIr,Fr as secretKindOf,a as serializeSchemaSnapshot,f as toAdvisorContext,Or as validatorIrToJsonSchema};
@@ -1 +1 @@
1
- import"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{G as o,U as n,o as l,e as p,a as A,b as E,c as S,d as c,f as d,g,h as u,p as C,i as h,q as D,j as f,k as G,l as R,m as _,n as b}from"./emit-6YJU3YbV.mjs";import"./declared-output-Iaar469J.mjs";import"./isD1GlobalTable-udvHAAzD.mjs";import"./paths-C-9fwEgQ.mjs";import"./LUNORA_ERROR_CODES-C2s0xWQD.mjs";export{o as GENERATED_HEADER,n as UMBRELLA_BASE_PACKAGES,l as buildStorageColumns,p as emitAgents,A as emitApi,E as emitCollections,S as emitContainers,c as emitCrons,d as emitDataModel,g as emitDrizzleSchema,u as emitFunctions,C as emitQueues,h as emitScheduler,D as emitSeed,f as emitServer,G as emitShard,R as emitVectors,_ as emitWorkflows,b as emitWranglerCronTriggers};
1
+ import"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{G as o,U as n,o as l,e as p,a as A,b as E,c as S,d as c,f as d,g,h as u,p as C,i as h,q as D,j as f,k as G,l as R,m as _,n as b}from"./emit-D_prE7y6.mjs";import"./declared-output-Iaar469J.mjs";import"./isD1GlobalTable-udvHAAzD.mjs";import"./paths-C-9fwEgQ.mjs";import"./LUNORA_ERROR_CODES-C2s0xWQD.mjs";export{o as GENERATED_HEADER,n as UMBRELLA_BASE_PACKAGES,l as buildStorageColumns,p as emitAgents,A as emitApi,E as emitCollections,S as emitContainers,c as emitCrons,d as emitDataModel,g as emitDrizzleSchema,u as emitFunctions,C as emitQueues,h as emitScheduler,D as emitSeed,f as emitServer,G as emitShard,R as emitVectors,_ as emitWorkflows,b as emitWranglerCronTriggers};
@@ -1,3 +1,3 @@
1
- import{G as c,r as u}from"./emit-6YJU3YbV.mjs";import{s as m}from"./paths-C-9fwEgQ.mjs";import{validatorIrToJsonSchema as p,objectSchema as l,LUNORA_ERROR_CODES as d}from"./LUNORA_ERROR_CODES-C2s0xWQD.mjs";const i="1.3.2",R={description:"Result is TS-inferred from the function's return type (no `.output()` declared); best-effort — any JSON."},h=e=>{const o=m(e.filePath),n=`${o}:${e.exportName}`;return{description:`Invoke the \`${e.kind}\` \`${n}\` over the Lunora RPC envelope (POST /_lunora/rpc, body \`{ "functionPath": "${n}", "args": { … } }\`).`,errors:d.map((r,s)=>({code:-32e3-s,data:{code:r},message:r})),name:n,params:[{description:"The function's argument object (the RPC envelope's `args`).",name:"args",required:Object.keys(e.args).length>0,schema:l(e.args)}],result:{name:"result",schema:e.output?p(e.output):R},summary:`${e.kind}: ${n}`,"x-lunora-function-kind":e.kind,"x-tags":[{name:o}]}},g=e=>{const o=e.version??"0.0.0",r=e.functions.filter(t=>t.visibility!=="internal"&&t.kind!=="stream").map(t=>h(t)).toSorted((t,a)=>t.name.localeCompare(a.name));return{info:{description:"Auto-generated from @lunora/values-typed functions by @lunora/codegen. Do not edit — run `lunora codegen` to regenerate.",title:"Lunora RPC",version:o},methods:r,openrpc:i}},v=e=>`${JSON.stringify(g(e),void 0,2)}
1
+ import{G as c,r as u}from"./emit-D_prE7y6.mjs";import{s as m}from"./paths-C-9fwEgQ.mjs";import{validatorIrToJsonSchema as p,objectSchema as l,LUNORA_ERROR_CODES as d}from"./LUNORA_ERROR_CODES-C2s0xWQD.mjs";const i="1.3.2",R={description:"Result is TS-inferred from the function's return type (no `.output()` declared); best-effort — any JSON."},h=e=>{const o=m(e.filePath),n=`${o}:${e.exportName}`;return{description:`Invoke the \`${e.kind}\` \`${n}\` over the Lunora RPC envelope (POST /_lunora/rpc, body \`{ "functionPath": "${n}", "args": { … } }\`).`,errors:d.map((r,s)=>({code:-32e3-s,data:{code:r},message:r})),name:n,params:[{description:"The function's argument object (the RPC envelope's `args`).",name:"args",required:Object.keys(e.args).length>0,schema:l(e.args)}],result:{name:"result",schema:e.output?p(e.output):R},summary:`${e.kind}: ${n}`,"x-lunora-function-kind":e.kind,"x-tags":[{name:o}]}},g=e=>{const o=e.version??"0.0.0",r=e.functions.filter(t=>t.visibility!=="internal"&&t.kind!=="stream").map(t=>h(t)).toSorted((t,a)=>t.name.localeCompare(a.name));return{info:{description:"Auto-generated from @lunora/values-typed functions by @lunora/codegen. Do not edit — run `lunora codegen` to regenerate.",title:"Lunora RPC",version:o},methods:r,openrpc:i}},v=e=>`${JSON.stringify(g(e),void 0,2)}
2
2
  `,$=e=>`${c}export const openRpcSpec = ${u(e,"Record<string, unknown>")};
3
3
  `;export{i as OPENRPC_VERSION,g as buildOpenRpcDocument,v as emitOpenRpc,$ as emitOpenRpcModule};
@@ -1,4 +1,4 @@
1
- import{existsSync as w,mkdirSync as Ls,readFileSync as $t,writeFileSync as Ds,rmSync as ks}from"node:fs";import{join as y,dirname as ae}from"node:path";import{performance as we}from"node:perf_hooks";import{runAdvisor as Ms}from"@lunora/advisor";import{LunoraError as K}from"@lunora/errors";import{SyntaxKind as l,Node as o,VariableDeclarationKind as Ks,Project as dt}from"ts-morph";import{serializeSchemaSnapshot as _s}from"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{toAdvisorContext as zs}from"./formatAdvisories-DwmUKYuc.mjs";import{readProjectConfigLiterals as $s}from"./loadProjectConfig-CKsFNgn3.mjs";import{s as Us}from"./paths-C-9fwEgQ.mjs";import{C as ce,o as Ut,j as qs,f as Bs,k as js,b as Vs,c as Ws,m as Hs,e as Gs,p as Ys,d as Qs,i as Xs,l as Zs,g as Js,q as en,n as tn,a as sn,h as nn}from"./emit-6YJU3YbV.mjs";import{isD1GlobalTable as qt,isHyperdriveGlobalTable as Bt}from"./isD1GlobalTable-udvHAAzD.mjs";import{discoverAgents as rn}from"./AGENTS_FILENAME-DoPI92Wu.mjs";import{discoverContainers as on}from"./CONTAINERS_FILENAME-B6TFs82W.mjs";import an from"./discoverCrons-MfKw7IFf.mjs";import{diagnosticAt as ee}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{b as pe}from"./module-specifiers-WF8iAydP.mjs";import{listLunoraSourceFiles as p,bindingKeyName as Q,propertyKeyName as E,unwrapExpression as X,listSecurityScanFiles as me,objectLiteralFromCallbackBody as jt,propertyInitializer as b,lunoraRelativePath as x,collectCallRows as F,findObjectProperty as C,collectSecurityCallRows as cn,limitNameOf as Vt,optionsObjectLiteral as Wt,isContextIdentifier as Fe,handlerOf as ln,isDatabaseAccessor as _,readTargetOf as Ht,enclosingExportName as un}from"./listLunoraSourceFiles-DP-5e-RE.mjs";import dn from"./readPackageDependencies-C6h6FZuP.mjs";import{discoverQueues as fn}from"./QUEUES_FILENAME-CxkPcMH1.mjs";import{discoverSandboxUsage as gn}from"./discoverSandboxUsage-CgmfgDTS.mjs";import pn from"./discoverStorageRulesMetadata-D8VYflWt.mjs";import{a as A,c as z,d as Gt,e as mn}from"./classify-procedure-call-BztLe76A.mjs";import{discoverWorkflows as hn}from"./WORKFLOWS_FILENAME-B_ZJxRSx.mjs";import{gatePlatformFeatures as vn,resolveCodegenTarget as Yt,readTargetDiagnostics as xn,studioPlatformFor as En}from"./DEFAULT_TARGET-kmm2i4Fw.mjs";import{i as k,a as U,e as S,r as Sn,b as yn,s as he,c as An,f as bn,d as Nn}from"./queries-B-f4jO-x.mjs";import{r as ve,s as Pn}from"./parse-validator-C94Yiabo.mjs";import wn from"./discoverAuthApiCalls-FxrdBeVt.mjs";import{i as In,a as Tn,e as Cn,b as Fn,d as On,c as Rn}from"./unwrap-handler-return-CoV_GK33.mjs";import Ln from"./discoverFunctions-BsmX-sEq.mjs";import Dn from"./discoverHttpRoutes-BcXI9CNt.mjs";import kn from"./discoverHyperdriveCalls-D9qXqTq3.mjs";import Mn from"./discoverInserts-CFJ3IVeI.mjs";import{m as Me,a as ue,s as Qt,d as Kn}from"./index-BoaHhVtM.mjs";import{e as Xt}from"./exported-procedure-chains-CmCDiPBV.mjs";import _n from"./discoverMigrations-DbrHwcGE.mjs";import{MUTATORS_FILENAME as zn,isDefineMutatorCallee as $n,discoverMutators as Un}from"./MUTATORS_FILENAME-B6cKrN_m.mjs";import qn from"./discoverNondeterministicCalls-CSQ_GDcA.mjs";import{discoverNotifyConfig as Bn,discoverNotifyCalls as jn}from"./NOTIFY_FILENAME-Cri3NT5U.mjs";import Vn from"./discoverR2sqlCalls-fu7fC0i_.mjs";import Wn from"./discoverRlsProcedures-BO4qC77y.mjs";import Hn from"./discoverRlsMetadata-CPmAGL0W.mjs";import Gn from"./discoverSchema-D8DBDHEg.mjs";import{secretKindOf as Yn,redact as Qn,isHeuristicSecretKind as Xn,isSecretishName as Zn}from"./redact-Cy14LEnc.mjs";import{discoverShapes as Jn}from"./SHAPES_FILENAME-zJgzynXR.mjs";import{emitApp as er}from"./emitApp-BiATunRA.mjs";import{buildOpenApiDocument as tr,emitOpenApiModule as sr}from"./buildOpenApiDocument-D1dd4rBh.mjs";import{buildOpenRpcDocument as nr,emitOpenRpcModule as rr}from"./OPENRPC_VERSION-DAxS0CaZ.mjs";import{buildSchemaSnapshot as ir}from"./SchemaSnapshotParseError-lUWe6lPo.mjs";const ft={error:"ERROR",info:"INFO",warn:"WARN"},gt={ERROR:2,INFO:0,WARN:1},or=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"}),ar=(e,t)=>{const{advisor:s}=$s(e);if(s===void 0||s.minSeverity===void 0&&s.unreadable!==!0)return[...t];const{minSeverity:n}=s,i=n!==void 0&&Object.hasOwn(ft,n)?ft[n]:void 0;return i===void 0?[...t,or(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(r=>gt[r.level]>=gt[i])},pt=(e,t="api")=>{const s=new Map;for(const n of e){const i=Us(n),r=s.get(i);if(r===void 0){s.set(i,n);continue}if(r!==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 K("INTERNAL",`@lunora/codegen: "${r}" 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})}}},cr=(e,t={})=>{const{hasVectors:s=!0,scheduler:n=!1,storage:i=!1,usage:r}=t,a=[];e.tables.some(c=>qt(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=>Bt(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 r===void 0?[]:ce)c.requiredPackage!==void 0&&r?.[c.key]===!0&&a.push({name:c.requiredPackage,reason:`\`ctx.${c.contextProperty??c.key}\` usage makes \`_generated/\` import \`${c.moduleSpecifier}\``});return a.filter((c,u)=>a.findIndex(d=>d.name===c.name)===u)},lr=(e,t,s={})=>{if(t===void 0)return;const n=cr(e,s).filter(r=>!t.has(r.name));if(n.length===0)return;const i=n.map(r=>` - ${r.name} — ${r.reason}`).join(`
1
+ import{existsSync as w,mkdirSync as Ls,readFileSync as $t,writeFileSync as Ds,rmSync as ks}from"node:fs";import{join as y,dirname as ae}from"node:path";import{performance as we}from"node:perf_hooks";import{runAdvisor as Ms}from"@lunora/advisor";import{LunoraError as K}from"@lunora/errors";import{SyntaxKind as l,Node as o,VariableDeclarationKind as Ks,Project as dt}from"ts-morph";import{serializeSchemaSnapshot as _s}from"./SCHEMA_SNAPSHOT_VERSION-C0oHwiJZ.mjs";import{toAdvisorContext as zs}from"./formatAdvisories-DwmUKYuc.mjs";import{readProjectConfigLiterals as $s}from"./loadProjectConfig-CKsFNgn3.mjs";import{s as Us}from"./paths-C-9fwEgQ.mjs";import{C as ce,o as Ut,j as qs,f as Bs,k as js,b as Vs,c as Ws,m as Hs,e as Gs,p as Ys,d as Qs,i as Xs,l as Zs,g as Js,q as en,n as tn,a as sn,h as nn}from"./emit-D_prE7y6.mjs";import{isD1GlobalTable as qt,isHyperdriveGlobalTable as Bt}from"./isD1GlobalTable-udvHAAzD.mjs";import{discoverAgents as rn}from"./AGENTS_FILENAME-DoPI92Wu.mjs";import{discoverContainers as on}from"./CONTAINERS_FILENAME-B6TFs82W.mjs";import an from"./discoverCrons-MfKw7IFf.mjs";import{diagnosticAt as ee}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{b as pe}from"./module-specifiers-WF8iAydP.mjs";import{listLunoraSourceFiles as p,bindingKeyName as Q,propertyKeyName as E,unwrapExpression as X,listSecurityScanFiles as me,objectLiteralFromCallbackBody as jt,propertyInitializer as b,lunoraRelativePath as x,collectCallRows as F,findObjectProperty as C,collectSecurityCallRows as cn,limitNameOf as Vt,optionsObjectLiteral as Wt,isContextIdentifier as Fe,handlerOf as ln,isDatabaseAccessor as _,readTargetOf as Ht,enclosingExportName as un}from"./listLunoraSourceFiles-DP-5e-RE.mjs";import dn from"./readPackageDependencies-C6h6FZuP.mjs";import{discoverQueues as fn}from"./QUEUES_FILENAME-CxkPcMH1.mjs";import{discoverSandboxUsage as gn}from"./discoverSandboxUsage-CgmfgDTS.mjs";import pn from"./discoverStorageRulesMetadata-D8VYflWt.mjs";import{a as A,c as z,d as Gt,e as mn}from"./classify-procedure-call-BztLe76A.mjs";import{discoverWorkflows as hn}from"./WORKFLOWS_FILENAME-B_ZJxRSx.mjs";import{gatePlatformFeatures as vn,resolveCodegenTarget as Yt,readTargetDiagnostics as xn,studioPlatformFor as En}from"./DEFAULT_TARGET-kmm2i4Fw.mjs";import{i as k,a as U,e as S,r as Sn,b as yn,s as he,c as An,f as bn,d as Nn}from"./queries-B-f4jO-x.mjs";import{r as ve,s as Pn}from"./parse-validator-C94Yiabo.mjs";import wn from"./discoverAuthApiCalls-FxrdBeVt.mjs";import{i as In,a as Tn,e as Cn,b as Fn,d as On,c as Rn}from"./unwrap-handler-return-CoV_GK33.mjs";import Ln from"./discoverFunctions-BsmX-sEq.mjs";import Dn from"./discoverHttpRoutes-BcXI9CNt.mjs";import kn from"./discoverHyperdriveCalls-D9qXqTq3.mjs";import Mn from"./discoverInserts-CFJ3IVeI.mjs";import{m as Me,a as ue,s as Qt,d as Kn}from"./index-BoaHhVtM.mjs";import{e as Xt}from"./exported-procedure-chains-CmCDiPBV.mjs";import _n from"./discoverMigrations-DbrHwcGE.mjs";import{MUTATORS_FILENAME as zn,isDefineMutatorCallee as $n,discoverMutators as Un}from"./MUTATORS_FILENAME-B6cKrN_m.mjs";import qn from"./discoverNondeterministicCalls-CSQ_GDcA.mjs";import{discoverNotifyConfig as Bn,discoverNotifyCalls as jn}from"./NOTIFY_FILENAME-Cri3NT5U.mjs";import Vn from"./discoverR2sqlCalls-fu7fC0i_.mjs";import Wn from"./discoverRlsProcedures-BO4qC77y.mjs";import Hn from"./discoverRlsMetadata-CPmAGL0W.mjs";import Gn from"./discoverSchema-D8DBDHEg.mjs";import{secretKindOf as Yn,redact as Qn,isHeuristicSecretKind as Xn,isSecretishName as Zn}from"./redact-Cy14LEnc.mjs";import{discoverShapes as Jn}from"./SHAPES_FILENAME-zJgzynXR.mjs";import{emitApp as er}from"./emitApp-rCWsXXGd.mjs";import{buildOpenApiDocument as tr,emitOpenApiModule as sr}from"./buildOpenApiDocument-D6SBl-tk.mjs";import{buildOpenRpcDocument as nr,emitOpenRpcModule as rr}from"./OPENRPC_VERSION-DDd0VJyT.mjs";import{buildSchemaSnapshot as ir}from"./SchemaSnapshotParseError-lUWe6lPo.mjs";const ft={error:"ERROR",info:"INFO",warn:"WARN"},gt={ERROR:2,INFO:0,WARN:1},or=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"}),ar=(e,t)=>{const{advisor:s}=$s(e);if(s===void 0||s.minSeverity===void 0&&s.unreadable!==!0)return[...t];const{minSeverity:n}=s,i=n!==void 0&&Object.hasOwn(ft,n)?ft[n]:void 0;return i===void 0?[...t,or(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(r=>gt[r.level]>=gt[i])},pt=(e,t="api")=>{const s=new Map;for(const n of e){const i=Us(n),r=s.get(i);if(r===void 0){s.set(i,n);continue}if(r!==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 K("INTERNAL",`@lunora/codegen: "${r}" 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})}}},cr=(e,t={})=>{const{hasVectors:s=!0,scheduler:n=!1,storage:i=!1,usage:r}=t,a=[];e.tables.some(c=>qt(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=>Bt(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 r===void 0?[]:ce)c.requiredPackage!==void 0&&r?.[c.key]===!0&&a.push({name:c.requiredPackage,reason:`\`ctx.${c.contextProperty??c.key}\` usage makes \`_generated/\` import \`${c.moduleSpecifier}\``});return a.filter((c,u)=>a.findIndex(d=>d.name===c.name)===u)},lr=(e,t,s={})=>{if(t===void 0)return;const n=cr(e,s).filter(r=>!t.has(r.name));if(n.length===0)return;const i=n.map(r=>` - ${r.name} — ${r.reason}`).join(`
2
2
  `);throw new K("INTERNAL",`@lunora/codegen: this schema's generated code imports packages the project does not declare:
3
3
  ${i}
4
4
 
@@ -0,0 +1,372 @@
1
+ import{modelSources as pe,assertDistinctMembers as T,toPascalCase as l,referencedModels as W,generatedHeaderLines as f,commentText as p,argsChoice as $,stringLiteral as m,kotlinLiteral as w,allMethods as x,toSnakeCase as E,parseSpec as Ne,assertGeneratable as Oe,withDeclaredModels as Ce,unrepresentableFunctions as Le,undeclaredModels as Re}from"./isTypedSchema-CKzc3ioR.mjs";import{isTypedSchema as St}from"./isTypedSchema-CKzc3ioR.mjs";const We=async(e,n)=>{if(n.quicktype===void 0)return"";const t=pe(e);if(t.length===0)return"";const{InputData:r,JSONSchemaInput:a,JSONSchemaStore:i,quicktype:o}=await import("quicktype-core");class s extends i{fetch(){return Promise.resolve(void 0)}}const d=new a(new s);for(const g of t)await d.addSource({name:g.name,schema:JSON.stringify(g.schema)});const c=new r;c.addInput(d);const{lines:u}=await o({inputData:c,lang:n.quicktype.lang,rendererOptions:n.quicktype.rendererOptions??{}});return u.join(`
2
+ `)},D=`${f("dart").map(e=>`// ${e}`).join(`
3
+ `)}
4
+
5
+ `,Me=`# GENERATED by \`lunora sdk generate --lang dart\` — do not edit.
6
+ #
7
+ # The transport is vendored under lib/, so this package has no dependencies and
8
+ # nothing to fetch. Add it to a consuming app as a path dependency — pub takes a
9
+ # path dependency's identity from the "name" below, NOT from the directory, so
10
+ # this is the name you write no matter where you generated into:
11
+ #
12
+ # dependencies:
13
+ # lunora_sdk:
14
+ # path: sdk/dart
15
+ #
16
+ # import 'package:lunora_sdk/lunora_api.dart';
17
+ name: lunora_sdk
18
+ description: Generated Lunora SDK, transport included.
19
+ version: 0.0.0
20
+ publish_to: none
21
+
22
+ environment:
23
+ sdk: ^3.6.0
24
+ `,De=new Set(["assert","break","case","catch","class","const","continue","default","do","else","enum","extends","false","final","finally","for","if","in","is","new","null","rethrow","return","super","switch","this","throw","true","try","var","void","while","with"]),j=e=>{const n=l(e),t=n.charAt(0).toLowerCase()+n.slice(1);return De.has(t)?`${t}_`:t},de=e=>m(e).replaceAll("$",String.raw`\$`),Pe=e=>e.replaceAll(" == null ? [] : List<"," == null ? null : List<").replaceAll(/Map\.from\((?<source>[^()]*?)!\)/gu,"$<source> == null ? null : Map.from($<source>!)"),Z=" ".repeat(8),Ve=/^class (\w+) \{/u,Ke=/^class \w+ \{\n[\s\S]*?\n\}$/gmu,Ie=/^ {4}\w+\(\{\n([\s\S]*?)^ {4}\}\);$/mu,xe=/^ {8}(?:required )?this\.\w+,$/gmu,Fe=/^ {4}Map<String, dynamic> toJson\(\) => \{\n([\s\S]*?)^ {4}\};$/mu,qe=/^ {8}"(?:[^\\"]|\\.)*": .*,$/gmu,Ue=e=>e.replaceAll(Ke,n=>{const[,t]=Ie.exec(n)??[],[,r]=Fe.exec(n)??[];if(t===void 0||r===void 0)return n;const a=[...t.matchAll(xe)].map(d=>{const c=d[0].trim();return{field:c.slice(c.indexOf("this.")+5,-1),optional:!c.startsWith("required ")}}),i=[...r.matchAll(qe)],o=a.filter(d=>d.optional);if(a.length!==i.length){if(o.length===0)return n;throw new Error(`dart models: cannot place the optional-field guards in ${Ve.exec(n)?.[1]??"a generated class"} — ${String(a.length)} constructor parameter(s) against ${String(i.length)} toJson entr(ies). quicktype's Dart output has changed shape; \`guardOptionalFields\` in targets/dart.ts must be updated to match.`)}let s=r;for(const[d,c]of i.entries()){const u=a[d];if(!u?.optional)continue;const g=c[0],ke=g.slice(Z.length).replace(`${u.field} == null ? null : `,"");s=s.replace(g,`${Z}if (${u.field} != null) ${ke}`)}return n.replace(r,s)}),$e=e=>$(e,{none:"null",typed:()=>"LunoraClient.wireValue(args)",untyped:"args"}),me={declaration:"LunoraOptimistic? optimistic, LunoraOptimisticUpdate? optimisticUpdate, bool Function()? precondition",forward:"optimistic: optimistic, optimisticUpdate: optimisticUpdate, precondition: precondition"},X=e=>{const n=e.verb==="mutation"?`{String? shardKey, ${me.declaration}}`:"{String? shardKey}";return $(e,{none:n,typed:t=>`${t} args, ${n}`,untyped:`Object? args, ${n}`})},ye=(e,n)=>`${e}.fromJson(${n} as Map<String, dynamic>)`,Q=e=>{const n=e.verb==="mutation"?`, ${me.forward}`:"",t=`_client.${e.verb}("${de(e.functionPath)}", args: ${$e(e)}, shardKey: shardKey${n})`;return e.resultType===void 0?[` /// ${p(e.summary)}`,` Future<Object?> ${j(e.functionName)}(${X(e)}) => ${t};`].join(`
25
+ `):[` /// ${p(e.summary)}`,` Future<${e.resultType}> ${j(e.functionName)}(${X(e)}) async =>`,` ${ye(e.resultType,`await ${t}`)};`].join(`
26
+ `)},He=e=>{const n=$(e,{none:"",typed:o=>`${o} args`,untyped:"Object? args"}),t=n===""?"":`${n}, `,r=$e(e),a=`"${de(e.functionPath)}"`,i=`_client.watch(${a}, args: ${r})`;return[` /// live ${p(e.summary)} — re-runs on every write to the tables it reads.`,` LunoraUnsubscribe subscribe${l(e.functionName)}(`,` ${t}{LunoraDataCallback? onData, LunoraErrorCallback? onError}`,` ) => _client.subscribe(${a}, args: ${r}, onData: onData, onError: onError);`,"",` /// live ${p(e.summary)}, as a Stream — bind it with StreamBuilder.`,e.resultType===void 0?` Stream<Object?> watch${l(e.functionName)}(${n}) => ${i};`:[` Stream<${e.resultType}> watch${l(e.functionName)}(${n}) =>`,` ${i}.map((raw) => ${ye(e.resultType,"raw")});`].join(`
27
+ `)].join(`
28
+ `)},Ge=e=>{const n=`${l(e.name)}Api`,t=e.methods.map(r=>r.verb==="query"?`${Q(r)}
29
+
30
+ ${He(r)}`:Q(r)).join(`
31
+
32
+ `);return[`/// Functions declared in \`${p(e.name)}\`.`,`class ${n} {`,` const ${n}(this._client);`,""," final LunoraClient _client;","",t,"}"].join(`
33
+ `)},Be=(e,n)=>{const t=r=>{if(r===void 0)return;const a=`${r.charAt(0).toLowerCase()}${r.slice(1)}FromJson`;if(!new RegExp(String.raw`^\S+ ${a}\(String str\) =>`,"mu").test(n))throw new Error(`sdk: the dart models declare "${r}" but no top-level decoder "${a}" — quicktype's Dart naming has changed; update objectResultsOnly in targets/dart.ts.`);return new RegExp(String.raw`^${r} ${a}\(String str\) => ${r}\.fromJson\(`,"mu").test(n)?r:void 0};return e.map(r=>({methods:r.methods.map(a=>({...a,resultType:t(a.resultType)})),name:r.name}))},Je=({models:e,namespaces:n})=>{T(n,"Dart",s=>[j(s.functionName)]);const t=Be(n,e),r=t.map(s=>` final ${l(s.name)}Api ${j(s.name)};`).join(`
34
+ `),a=t.map(s=>` ${j(s.name)} = ${l(s.name)}Api(client)`).join(`,
35
+ `),i=W(t).length>0?`import 'models.dart';
36
+ `:"";return{"lib/lunora_api.dart":[D,`/// The generated Lunora surface. Re-exports the vendored transport, so one
37
+ `,`/// import gives a consumer the client, the wire types and the models.
38
+ `,`library;
39
+ `,`
40
+ `,`export 'lunora.dart';
41
+ `,`export 'models.dart';
42
+ `,`
43
+ `,`import 'lunora.dart';
44
+ `,i,`
45
+ `,t.map(s=>Ge(s)).join(`
46
+
47
+ `),t.length>0?`
48
+
49
+ `:"","/// Typed entry point: `Api(client).<namespace>.<function>(args)`.\n",`class Api {
50
+ `,t.length>0?` Api(LunoraClient client)
51
+ : ${a.trimStart()};
52
+
53
+ ${r}
54
+ `:` const Api(LunoraClient client);
55
+ `,`}
56
+ `].join(""),"lib/models.dart":e.length>0?`${D}${Ue(Pe(e))}
57
+ `:`${D}// No typed argument or result schemas in this deployment.
58
+ `,"pubspec.yaml":Me}},Ye={id:"dart",quicktype:{lang:"dart"},render:Je,requires:[],vendor:[{from:"lib",to:"lib"}]},P=`${f("go").map(e=>`// ${e}`).join(`
59
+ `)}
60
+
61
+ `,b="lunoraapi",N="lunorasdk",ze=`${N}/lunora`,Ze="1.22",F=e=>l(e),ee=(e,n)=>{const t=$(n,{none:"",typed:s=>`args ${s}, `,untyped:"args any, "}),r=$(n,{none:"nil",typed:()=>"args",untyped:"args"}),a=n.resultType??"any",i=`lunora.Verb${n.verb.charAt(0).toUpperCase()}${n.verb.slice(1)}`,o=`lunora.Call[${a}](a.client, ${i}, "${m(n.functionPath)}", ${r}, shardKey)`;return[`// ${F(n.functionName)} invokes ${p(n.summary)}.`,`func (a *${e}) ${F(n.functionName)}(${t}shardKey string) (${a}, error) {`,` return ${o}`,"}"].join(`
62
+ `)},Xe=(e,n)=>{const t=$(n,{none:"",typed:i=>`args ${i}, `,untyped:"args any, "}),r=$(n,{none:"nil",typed:()=>"args",untyped:"args"}),a=`Subscribe${F(n.functionName)}`;return[`// ${a} opens a live ${p(n.functionPath)}; it re-runs on every write to the tables it reads.`,`func (a *${e}) ${a}(${t}onData lunora.DataHandler, onError lunora.ErrorHandler, shardKey string) lunora.Unsubscribe {`,` return a.client.Subscribe("${m(n.functionPath)}", ${r}, onData, onError, shardKey)`,"}"].join(`
63
+ `)},Qe=e=>{const n=`${l(e.name)}API`,t=e.methods.map(r=>r.verb==="query"?`${ee(n,r)}
64
+
65
+ ${Xe(n,r)}`:ee(n,r)).join(`
66
+
67
+ `);return[`// ${n} groups the functions declared in ${p(e.name)}.`,`type ${n} struct{ client *lunora.Client }`,"",t].join(`
68
+ `)},en=e=>{const n=new Map;for(const a of e.matchAll(/^type (\w+) (struct \{\n[\s\S]*?^\}|.*)$/gmu))n.set(a[1],a[2]);const t=new Set([...n].filter(([,a])=>a.startsWith(`struct {
69
+ `)&&!a.includes("`")).map(([a])=>a));let r=!0;for(;r;){r=!1;for(const[a,i]of n)!t.has(a)&&[...t].some(o=>new RegExp(String.raw`\b${o}\b`,"u").test(i))&&(t.add(a),r=!0)}return t},nn=({models:e,namespaces:n})=>{const t=en(e),r=c=>c!==void 0&&t.has(c)?void 0:c,a=n.map(c=>({methods:c.methods.map(u=>({...u,argsType:r(u.argsType),resultType:r(u.resultType)})),name:c.name})),i=a.map(c=>` ${l(c.name)} *${l(c.name)}API`).join(`
70
+ `),o=a.map(c=>` ${l(c.name)}: &${l(c.name)}API{client: client},`).join(`
71
+ `),s=[P,`package ${b}
72
+ `,`
73
+ `,`import "${ze}"
74
+ `,`
75
+ `,`// API is the typed entry point: api.<Namespace>.<Function>(args, shardKey).
76
+ `,`type API struct {
77
+ `,`${i}
78
+ `,`}
79
+ `,`
80
+ `,`// NewAPI binds the generated surface to a client.
81
+ `,`func NewAPI(client *lunora.Client) *API {
82
+ `,` return &API{
83
+ `,`${o}
84
+ `,` }
85
+ `,`}
86
+ `,`
87
+ `,a.map(c=>Qe(c)).join(`
88
+
89
+ `),`
90
+ `].join(""),d=e.length>0?`${P}package ${b}
91
+
92
+ ${e}
93
+ `:`${P}package ${b}
94
+
95
+ // No typed argument or result schemas in this deployment.
96
+ `;return{[`${b}/api.go`]:s,[`${b}/models.go`]:d,"go.mod":[`// The generated Lunora Go SDK, with the transport vendored under ./lunora.
97
+ `,`//
98
+ `,`// A consuming module wires it in without a network fetch:
99
+ `,`//
100
+ `,`// require ${N} v0.0.0
101
+ `,`// replace ${N} => ./path/to/this/directory
102
+ `,`module ${N}
103
+ `,`
104
+ `,`go ${Ze}
105
+ `].join("")}},tn={id:"go",quicktype:{lang:"go",rendererOptions:{"just-types":"true",package:b}},render:nn,requires:[],vendor:[{from:"lunora",to:"lunora"}]},h="lunoraapi.models",q="lunoraapi/models",rn=24,an=new Set(["abstract","as","assert","boolean","break","byte","case","catch","char","class","const","continue","default","do","double","else","enum","extends","false","final","finally","float","for","fromWire","fun","goto","if","implements","import","in","instanceof","int","interface","is","long","native","new","null","object","package","private","protected","public","return","short","static","strictfp","super","switch","synchronized","this","throw","throws","toWire","transient","true","try","typealias","typeof","val","var","void","volatile","when","while","wireValue"]),sn=/[^A-Za-z0-9]+/gu,on=/([a-z0-9])([A-Z])/gu,ln=/^[A-Za-z]/u,cn=/^[A-Z]/u;class fe extends Error{}const y=e=>e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0,un=e=>{const n=e.anyOf??e.oneOf;if(!Array.isArray(n)||n.length===0)return;const t=n.map(r=>y(r)?.const);if(t.every(r=>typeof r=="string"))return[...new Set(t)].toSorted((r,a)=>r.localeCompare(a))},ge=e=>{const n=e.anyOf??e.oneOf;if(!Array.isArray(n)||n.length!==2)return e;const t=n.filter(r=>y(r)?.type!=="null");return t.length===1?y(t[0])??e:e},pn=e=>{const n=l(e),t=n.charAt(0).toLowerCase()+n.slice(1),r=ln.test(t)?t:`value${n}`;return an.has(r)?`${r}_`:r},dn=e=>{const n=e.replaceAll(on,"$1_$2").replaceAll(sn,"_").toUpperCase().split("_").filter(t=>t.length>0).join("_");return cn.test(n)?n:`VALUE_${n}`},be=(e,n)=>{if(!n.has(e))return n.add(e),e;let t=2;for(;n.has(`${e}${String(t)}`);)t+=1;return n.add(`${e}${String(t)}`),`${e}${String(t)}`},ne=(e,n)=>{if(e.has(n.name))throw new fe(`sdk: two schemas both produce the JVM model "${n.name}"`);e.set(n.name,n)},$n=(e,n,t,r,a)=>{const i=new Set(Array.isArray(n)?n.filter(s=>typeof s=="string"):[]),o=new Set;return Object.entries(e).map(([s,d])=>{const c=y(d)??{},u=!i.has(s);return{name:be(pn(s),o),nullable:!u&&ge(c)!==c,optional:u,type:A(c,`${t}${l(s)}`,r+1,a),wireKey:s}})},A=(e,n,t,r)=>{if(t>=rn)return{kind:"unknown"};const a=un(e);if(a!==void 0){const c=new Set;return ne(r,{constants:a.map(u=>({name:be(dn(u),c),wireValue:u})),kind:"enum",name:n}),{kind:"enum",name:n}}const i=ge(e);if(i!==e)return A(i,n,t+1,r);const o=y(e.properties);if(o!==void 0)return ne(r,{fields:$n(o,e.required,n,t,r),kind:"class",name:n}),{kind:"class",name:n};const s=y(e.additionalProperties);if(s!==void 0)return{kind:"record",value:A(s,`${n}Value`,t+1,r)};const d=y(e.items);if(d!==void 0)return{item:A(d,`${n}Item`,t+1,r),kind:"list"};switch(e.type){case"boolean":return{kind:"boolean"};case"integer":case"number":return{kind:"number"};case"string":return{kind:"string"};default:return{kind:"unknown"}}},ve=e=>{const n=new Map;for(const t of pe(e)){if(y(t.schema.properties)===void 0)continue;const r=new Map;try{A(t.schema,t.name,0,r)}catch(a){if(a instanceof fe)continue;throw a}if(![...r.keys()].some(a=>n.has(a)))for(const[a,i]of r)n.set(a,i)}return[...n.values()].toSorted((t,r)=>t.name.localeCompare(r.name))},M=e=>[`// GENERATED by \`lunora sdk generate --lang ${e}\` — do not edit.`,"// Run the command again to regenerate."],L=e=>{switch(e.kind){case"boolean":return"Boolean";case"class":case"enum":return e.name;case"list":return`java.util.List<${L(e.item)}>`;case"number":return"Double";case"record":return`java.util.Map<String, ${L(e.value)}>`;case"string":return"String";default:return"Object"}},U=e=>{switch(e.kind){case"class":case"enum":return!0;case"list":return U(e.item);case"record":return U(e.value);default:return!1}},H=(e,n,t)=>{if(!U(e))return n;const r=`item${String(t)}`;switch(e.kind){case"class":return`${n} == null ? null : ${n}.toWire()`;case"enum":return`${n} == null ? null : ${n}.toValue()`;case"list":return`ModelWire.writeList(${n}, ${r} -> ${H(e.item,r,t+1)})`;case"record":return`ModelWire.writeRecord(${n}, ${r} -> ${H(e.value,r,t+1)})`;default:return n}},G=(e,n,t)=>{const r=`item${String(t)}`;switch(e.kind){case"boolean":return`ModelWire.flag(${n})`;case"class":return`ModelWire.readObject(${n}, ${e.name}::fromWire)`;case"enum":return`ModelWire.readEnum(${n}, ${e.name}::forValue)`;case"list":return`ModelWire.readList(${n}, ${r} -> ${G(e.item,r,t+1)})`;case"number":return`ModelWire.number(${n})`;case"record":return`ModelWire.readRecord(${n}, ${r} -> ${G(e.value,r,t+1)})`;case"string":return`ModelWire.text(${n})`;default:return n}},mn=e=>{const n=p(e.wireKey);return e.optional?[" /**",` * Wire key {@code ${n}} — OPTIONAL: null omits the key entirely, because`," * `v.optional` accepts the value or `undefined` and rejects an explicit null."," */"]:[` /** Wire key {@code ${n}}.${e.nullable?" Nullable: null is sent as an explicit null.":""} */`]},yn=100,fn=e=>{const n=e.fields.map(r=>`${L(r.type)} ${r.name}`),t=` public ${e.name}(${n.join(", ")}) {`;return t.length<=yn?[t]:[` public ${e.name}(`,...n.map((r,a)=>` ${r}${a===n.length-1?") {":","}`)]},gn=e=>{const n=e.fields.flatMap(r=>{const a=`wire.put("${m(r.wireKey)}", ${H(r.type,`this.${r.name}`,0)});`;return r.optional?[` if (this.${r.name} != null) {`,` ${a}`," }"]:[` ${a}`]}),t=e.fields.map(r=>` ${G(r.type,`wire.get("${m(r.wireKey)}")`,0)}`);return[...M("java"),"",`package ${h};`,"","/**",` * The \`${e.name}\` model.`," *"," * <p>Field names are local; the keys {@link #toWire()} and {@link #fromWire(Object)} use are"," * the schema's own, emitted verbatim, so a renamed field cannot reach the wire."," */",`public final class ${e.name} {`,...e.fields.flatMap(r=>[...mn(r),` public final ${L(r.type)} ${r.name};`,""]),...fn(e),...e.fields.map(r=>` this.${r.name} = ${r.name};`)," }",""," /** This model as the wire-shaped map the transport encodes. */"," public java.util.Map<String, Object> toWire() {"," java.util.Map<String, Object> wire = new java.util.LinkedHashMap<>();",...n,""," return wire;"," }",""," /** Rebuild from a decoded wire value. */",` public static ${e.name} fromWire(Object value) {`," java.util.Map<String, Object> wire = ModelWire.object(value);","",...t.length===0?[` return new ${e.name}();`]:[` return new ${e.name}(`,`${t.join(`,
106
+ `)});`]," }","}",""].join(`
107
+ `)},bn=e=>[...M("java"),"",`package ${h};`,"",`/** The \`${e.name}\` union. Each constant keeps the wire string it encodes to. */`,`public enum ${e.name} {`,...e.constants.map((n,t)=>` ${n.name}("${m(n.wireValue)}")${t===e.constants.length-1?";":","}`),""," private final String value;","",` ${e.name}(String value) {`," this.value = value;"," }",""," /** The wire string this constant encodes to. */"," public String toValue() {"," return this.value;"," }",""," /** The constant a wire string decodes to. */",` public static ${e.name} forValue(String value) {`,` for (${e.name} candidate : values()) {`," if (candidate.value.equals(value)) {"," return candidate;"," }"," }","",` throw new IllegalArgumentException("${e.name}: unknown wire value " + value);`," }","}",""].join(`
108
+ `),vn=[{lines:[' @SuppressWarnings("unchecked")'," static java.util.Map<String, Object> object(Object value) {"," return value instanceof java.util.Map"," ? (java.util.Map<String, Object>) value"," : new java.util.LinkedHashMap<String, Object>();"," }"],name:"object"},{lines:[" static String text(Object value) {"," return value instanceof String ? (String) value : null;"," }"],name:"text"},{lines:[" static Double number(Object value) {"," return value instanceof Number ? ((Number) value).doubleValue() : null;"," }"],name:"number"},{lines:[" static Boolean flag(Object value) {"," return value instanceof Boolean ? (Boolean) value : null;"," }"],name:"flag"},{lines:[" /** A nested model, or null when the payload carried no object there. */"," static <T> T readObject(Object value, java.util.function.Function<Object, T> read) {"," return value instanceof java.util.Map ? read.apply(value) : null;"," }"],name:"readObject"},{lines:[" /** An enum constant, or null when the payload carried no string there. */"," static <T> T readEnum(Object value, java.util.function.Function<String, T> read) {"," return value instanceof String ? read.apply((String) value) : null;"," }"],name:"readEnum"},{lines:[" static <T> java.util.List<T> readList("," Object value, java.util.function.Function<Object, T> read) {"," if (!(value instanceof java.util.List)) {"," return null;"," }",""," java.util.List<T> items = new java.util.ArrayList<T>();",""," for (Object item : (java.util.List<?>) value) {"," items.add(read.apply(item));"," }",""," return items;"," }"],name:"readList"},{lines:[" static <T> java.util.Map<String, T> readRecord("," Object value, java.util.function.Function<Object, T> read) {"," if (!(value instanceof java.util.Map)) {"," return null;"," }",""," java.util.Map<String, T> entries = new java.util.LinkedHashMap<String, T>();",""," for (java.util.Map.Entry<?, ?> entry : ((java.util.Map<?, ?>) value).entrySet()) {"," entries.put(String.valueOf(entry.getKey()), read.apply(entry.getValue()));"," }",""," return entries;"," }"],name:"readRecord"},{lines:[" static <T> java.util.List<Object> writeList("," java.util.List<T> items, java.util.function.Function<T, Object> write) {"," if (items == null) {"," return null;"," }",""," java.util.List<Object> encoded = new java.util.ArrayList<Object>(items.size());",""," for (T item : items) {"," encoded.add(write.apply(item));"," }",""," return encoded;"," }"],name:"writeList"},{lines:[" static <T> java.util.Map<String, Object> writeRecord("," java.util.Map<String, T> entries, java.util.function.Function<T, Object> write) {"," if (entries == null) {"," return null;"," }",""," java.util.Map<String, Object> encoded = new java.util.LinkedHashMap<String, Object>();",""," for (java.util.Map.Entry<String, T> entry : entries.entrySet()) {"," encoded.put(entry.getKey(), write.apply(entry.getValue()));"," }",""," return encoded;"," }"],name:"writeRecord"}],wn=e=>{const n=vn.filter(t=>e.includes(`ModelWire.${t.name}(`));return[...M("java"),"",`package ${h};`,"","/** Wire readers and writers shared by the generated models. */","final class ModelWire {"," private ModelWire() {}",...n.flatMap(t=>["",...t.lines]),"}",""].join(`
109
+ `)},hn=e=>{const n=ve(e);if(n.length===0)return{};const t={};for(const r of n)t[`${q}/${r.name}.java`]=r.kind==="enum"?bn(r):gn(r);return{[`${q}/ModelWire.java`]:wn(Object.values(t).join(`
110
+ `)),...t}},B=e=>{switch(e.kind){case"boolean":return"Boolean";case"class":case"enum":return e.name;case"list":return`List<${B(e.item)}>`;case"number":return"Double";case"record":return`Map<String, ${B(e.value)}>`;case"string":return"String";default:return"WireValue"}},S=(e,n,t)=>{const r=`item${String(t)}`,a=`entry${String(t)}`;switch(e.kind){case"boolean":return`WireValue.Bool(${n})`;case"class":return`${n}.toWire()`;case"enum":return`WireValue.Text(${n}.wireValue)`;case"list":return`WireValue.Arr(${n}.map { ${r} -> ${S(e.item,r,t+1)} })`;case"number":return`WireValue.Num(${n})`;case"record":return`WireValue.Obj(${n}.map { ${a} -> ${a}.key to ${S(e.value,`${a}.value`,t+1)} })`;case"string":return`WireValue.Text(${n})`;default:return n}},J=(e,n,t,r)=>`wireNeed(${we(e,n,t,r)}, "${w(r)}")`,we=(e,n,t,r)=>{const a=`item${String(t)}`,i=`entry${String(t)}`;switch(e.kind){case"boolean":return`wireBool(${n})`;case"class":return`wireObj(${n})?.let { ${a} -> ${e.name}.fromWire(${a}) }`;case"enum":return`wireText(${n})?.let { ${a} -> ${e.name}.forValue(${a}) }`;case"list":return`wireArr(${n})?.items?.map { ${a} -> ${J(e.item,a,t+1,`${r}[]`)} }`;case"number":return`wireNum(${n})`;case"record":return`wireObj(${n})?.fields?.associate { ${i} -> ${i}.first to ${J(e.value,`${i}.second`,t+1,`${r}{}`)} }`;case"string":return`wireText(${n})`;default:return n}},jn=e=>{const n=e.fields.map(a=>{const i=p(a.wireKey);return[...a.optional?[" /**",` * Wire key \`${i}\` — OPTIONAL: null omits the key entirely, because`," * `v.optional` accepts the value or `undefined` and rejects an explicit null."," */"]:[` /** Wire key \`${i}\`.${a.nullable?" Nullable: null is sent as an explicit null.":""} */`],` val ${a.name}: ${B(a.type)}${a.optional||a.nullable?"?":""}${a.optional?" = null":""},`]}),t=e.fields.map(a=>{const i=w(a.wireKey),o=`this@${e.name}.${a.name}`;return a.optional?` ${o}?.let { add("${i}" to ${S(a.type,"it",0)}) }`:a.nullable?` add("${i}" to (${o}?.let { ${S(a.type,"it",0)} } ?: WireValue.Null))`:` add("${i}" to ${S(a.type,o,0)})`}),r=e.fields.map(a=>{const i=`wireField(value, "${w(a.wireKey)}")`,o=a.optional||a.nullable?we(a.type,i,0,a.wireKey):J(a.type,i,0,a.wireKey);return` ${a.name} = ${o},`});return["/**",` * The \`${e.name}\` model.`," *"," * Property names are local; the keys [toWire] and [fromWire] use are the schema's own,"," * emitted verbatim, so a renamed property cannot reach the wire."," */",`class ${e.name}(`,...n.flat(),") {"," /** This model as the wire-shaped object the transport encodes. */"," fun toWire(): WireValue ="," WireValue.Obj("," buildList {",...t," },"," )",""," companion object {"," /** Rebuild from a decoded wire value. */",` fun fromWire(value: WireValue): ${e.name} =`,` ${e.name}(`,...r," )"," }","}"]},An=e=>[`/** The \`${e.name}\` union. Each entry keeps the wire string it encodes to. */`,`enum class ${e.name}(val wireValue: String) {`,...e.constants.map(n=>` ${n.name}("${w(n.wireValue)}"),`)," ;",""," companion object {"," /** The entry a wire string decodes to. */",` fun forValue(value: String): ${e.name} =`," entries.firstOrNull { it.wireValue == value }",` ?: throw IllegalArgumentException("${e.name}: unknown wire value " + value)`," }","}"],Sn=[{lines:["private fun wireField(value: WireValue, key: String): WireValue? ="," (value as? WireValue.Obj)?.fields?.firstOrNull { it.first == key }?.second"],name:"wireField"},{lines:["private fun wireText(value: WireValue?): String? = (value as? WireValue.Text)?.value"],name:"wireText"},{lines:["private fun wireNum(value: WireValue?): Double? = (value as? WireValue.Num)?.value"],name:"wireNum"},{lines:["private fun wireBool(value: WireValue?): Boolean? = (value as? WireValue.Bool)?.value"],name:"wireBool"},{lines:["private fun wireArr(value: WireValue?): WireValue.Arr? = value as? WireValue.Arr"],name:"wireArr"},{lines:["private fun wireObj(value: WireValue?): WireValue.Obj? = value as? WireValue.Obj"],name:"wireObj"},{lines:["/** A required field the payload omitted or mistyped is a contract violation, not a null. */","private fun <T> wireNeed(read: T?, label: String): T =",' read ?: throw WireFormatException("lunora: the wire payload is missing or mistyped " + label)'],name:"wireNeed"}],_n=e=>{const n=ve(e);if(n.length===0)return{};const t=n.flatMap(o=>[...o.kind==="enum"?An(o):jn(o),""]),r=Sn.filter(o=>t.some(s=>s.includes(`${o.name}(`))),a=r.flatMap((o,s)=>s===0?[...o.lines]:["",...o.lines]),i=[...M("kotlin"),"",`package ${h}`,"",...r.some(o=>o.name==="wireNeed")?["import dev.lunora.WireFormatException"]:[],"import dev.lunora.WireValue","",...t,...a,""].join(`
111
+ `);return{[`${q}/Models.kt`]:i}},Tn=`${f("java").map(e=>`// ${e}`).join(`
112
+ `)}
113
+
114
+ `,te="lunoraapi",En=new Set(["abstract","assert","boolean","break","byte","case","catch","char","class","const","continue","default","do","double","else","enum","extends","final","finally","float","for","goto","if","implements","import","instanceof","int","interface","long","native","new","package","private","protected","public","return","short","static","strictfp","super","switch","synchronized","this","throw","throws","transient","try","void","volatile","while"]),O=e=>{const n=l(e),t=n.charAt(0).toLowerCase()+n.slice(1);return En.has(t)?`${t}_`:t},kn=e=>`Client.Verb.${e.toUpperCase()}`,he=e=>e.argsType===void 0?{payload:"args",type:"java.util.Map<String, Object>"}:{payload:"args == null ? null : args.toWire()",type:e.argsType},re=e=>{const n=he(e),t=`client.call(
115
+ ${kn(e.verb)}, "${m(e.functionPath)}", ${n.payload}, shardKey)`;return[` /** ${p(e.summary)} */`,` public ${e.resultType??"Object"} ${O(e.functionName)}(${n.type} args, String shardKey) {`,` return ${e.resultType===void 0?t:`${e.resultType}.fromWire(${t})`};`," }"].join(`
116
+ `)},Nn=e=>{const n=he(e);return[` /** live ${p(e.summary)} — re-runs on every write to the tables it reads. */`,` public Runnable subscribe${l(e.functionName)}(`,` ${n.type} args,`," java.util.function.Consumer<Object> onData,"," java.util.function.Consumer<Client.SubscriptionError> onError,"," String shardKey) {"," return client.subscribe(",` "${m(e.functionPath)}", ${n.payload}, onData, onError, shardKey);`," }"].join(`
117
+ `)},On=e=>{const n=`${l(e.name)}Api`,t=e.methods.map(r=>r.verb==="query"?`${re(r)}
118
+
119
+ ${Nn(r)}`:re(r)).join(`
120
+
121
+ `);return[` /** Functions declared in \`${p(e.name)}\`. */`,` public static final class ${n} {`," private final Client client;","",` ${n}(Client client) {`," this.client = client;"," }","",t.replaceAll(/^ {4}/gmu," ")," }"].join(`
122
+ `)},Cn=({namespaces:e})=>{T(e,"Java",i=>[O(i.functionName)]);const n=e.map(i=>` public final ${l(i.name)}Api ${O(i.name)};`).join(`
123
+ `),t=e.map(i=>` this.${O(i.name)} = new ${l(i.name)}Api(client);`).join(`
124
+ `),r=W(e).map(i=>`import ${h}.${i};
125
+ `),a=[Tn,`package ${te};
126
+ `,`
127
+ `,`import dev.lunora.Client;
128
+ `,...r,`
129
+ `,"/** Typed entry point: `new Api(client).<namespace>.<function>(args, shardKey)`. */\n",`public final class Api {
130
+ `,n.length>0?`${n}
131
+
132
+ `:"",` public Api(Client client) {
133
+ `,t.length>0?`${t}
134
+ `:` // No functions in this deployment.
135
+ `,` }
136
+ `,`
137
+ `,e.map(i=>On(i)).join(`
138
+
139
+ `),`
140
+ }
141
+ `].join("");return{[`${te}/Api.java`]:a}},Ln={id:"java",render:Cn,renderModels:hn,requires:[],vendor:[{from:"src/dev/lunora",to:"dev/lunora"}]},Rn=`${f("kotlin").map(e=>`// ${e}`).join(`
142
+ `)}
143
+
144
+ `,ae="lunoraapi",Wn=new Set(["as","break","class","continue","do","else","false","for","fun","if","in","interface","is","null","object","package","return","super","this","throw","true","try","typealias","typeof","val","var","when","while"]),je=e=>{const n=l(e),t=n.charAt(0).toLowerCase()+n.slice(1);return Wn.has(t)?`\`${t}\``:t},Mn=e=>`Verb.${e.toUpperCase()}`,Ae=e=>e.argsType===void 0?{declaration:"args: WireValue? = null",payload:"args"}:{declaration:`args: ${e.argsType}`,payload:"args.toWire()"},ie=e=>{const n=Ae(e),t=`client.call(${Mn(e.verb)}, "${w(e.functionPath)}", ${n.payload}, shardKey)`;return[` /** ${p(e.summary)} */`,` fun ${je(e.functionName)}(${n.declaration}, shardKey: String? = null): ${e.resultType??"WireValue"} =`,` ${e.resultType===void 0?t:`${e.resultType}.fromWire(${t})`}`].join(`
145
+ `)},Dn=e=>{const n=Ae(e);return[` /** live ${p(e.summary)} — re-runs on every write to the tables it reads. */`,` fun subscribe${l(e.functionName)}(`,` ${n.declaration},`," onData: ((WireValue) -> Unit)?,"," onError: ((SubscriptionError) -> Unit)? = null,"," shardKey: String? = null,"," ): () -> Unit =",` client.subscribe("${w(e.functionPath)}", ${n.payload}, onData, onError, shardKey)`].join(`
146
+ `)},Pn=e=>{const n=`${l(e.name)}Api`,t=e.methods.map(r=>r.verb==="query"?`${ie(r)}
147
+
148
+ ${Dn(r)}`:ie(r)).join(`
149
+
150
+ `);return[`/** Functions declared in \`${p(e.name)}\`. */`,`class ${n}(private val client: Client) {`,t,"}"].join(`
151
+ `)},Vn=({namespaces:e})=>{const n=e.map(i=>` val ${je(i.name)}: ${l(i.name)}Api = ${l(i.name)}Api(client)`).join(`
152
+ `),t=e.flatMap(i=>i.methods),r=[`import dev.lunora.Client
153
+ `,...t.some(i=>i.verb==="query")?[`import dev.lunora.SubscriptionError
154
+ `]:[],`import dev.lunora.Verb
155
+ `,...t.some(i=>i.argsType===void 0||i.resultType===void 0)?[`import dev.lunora.WireValue
156
+ `]:[],...W(e).map(i=>`import ${h}.${i}
157
+ `)],a=[Rn,`package ${ae}
158
+ `,`
159
+ `,...r,`
160
+ `,e.map(i=>Pn(i)).join(`
161
+
162
+ `),`
163
+
164
+ `,"/** Typed entry point: `Api(client).<namespace>.<function>(args)`. */\n",`class Api(client: Client) {
165
+ `,n.length>0?`${n}
166
+ `:` init { require(true) { client } }
167
+ `,`}
168
+ `].join("");return{[`${ae}/Api.kt`]:a}},Kn={id:"kotlin",render:Vn,renderModels:_n,requires:[],vendor:[{from:"src",to:"dev/lunora"}]},In=new Set(["and","as","assert","async","await","break","class","continue","def","del","elif","else","except","False","finally","for","from","global","if","import","in","is","lambda","None","nonlocal","not","or","pass","raise","return","True","try","while","with","yield"]),k=`"""${f("python").join(`
169
+
170
+ `)}
171
+ """
172
+
173
+ `,V="lunora_api",_=e=>{const n=E(e);return In.has(n)?`${n}_`:n},Se=e=>$(e,{none:"{}",typed:()=>"args.to_dict()",untyped:"args"}),xn=(e,n,t,r)=>$(e,{none:n,typed:t,untyped:r}),se=e=>{const n=e.resultType??"Any",t=xn(e,"self",i=>`self, args: ${i}`,"self, args: Any"),r=Se(e),a=`await self._client.${e.verb}("${m(e.functionPath)}", ${r}, shard_key)`;return[` async def ${_(e.functionName)}(${t}, *, shard_key: Optional[str] = None) -> ${n}:`,` """${p(e.summary)}"""`,` ${e.resultType===void 0?`return ${a}`:`return ${e.resultType}.from_dict(${a})`}`].join(`
174
+ `)},Fn=e=>{const n=Se(e),t=["self",...$(e,{none:[],typed:r=>[`args: ${r}`],untyped:["args: Any"]}),"on_data: Callback","on_error: Optional[ErrorCallback] = None","*","shard_key: Optional[str] = None"];return[` def subscribe_${_(e.functionName)}(`,...t.map(r=>` ${r},`)," ) -> Unsubscribe:",` """live ${p(e.summary)} — re-runs on every write to the tables it reads."""`,` return self._client.subscribe("${m(e.functionPath)}", ${n}, on_data, on_error, shard_key)`].join(`
175
+ `)},qn=e=>{const n=e.methods.map(t=>t.verb==="query"?`${se(t)}
176
+
177
+ ${Fn(t)}`:se(t)).join(`
178
+
179
+ `);return[`class ${l(e.name)}Api:`,` """Functions declared in \`${p(e.name)}\`."""`,""," def __init__(self, client: LunoraClient) -> None:"," self._client = client","",n].join(`
180
+ `)},Un=e=>e.replaceAll(/^([ \t]*)except:$/gmu,"$1except Exception:"),Hn=({models:e,namespaces:n})=>{T(n,"Python",u=>[_(u.functionName),`subscribe_${_(u.functionName)}`]);const t=W(n),r=t.length>0?`from .models import ${t.join(", ")}
181
+ `:"",i=x(n).some(u=>u.verb==="query")?"Callback, ErrorCallback, LunoraClient, Unsubscribe":"LunoraClient",o=x(n).some(u=>u.resultType===void 0),s=n.map(u=>` self.${_(u.name)} = ${l(u.name)}Api(client)`).join(`
182
+ `),d=[k,`from typing import ${o?"Any, Optional":"Optional"}
183
+ `,`
184
+ `,`from lunora.client import ${i}
185
+ `,r,`
186
+
187
+ `,n.map(u=>qn(u)).join(`
188
+
189
+
190
+ `),`
191
+
192
+
193
+ `,`class Api:
194
+ `,' """Typed entry point: `Api(client).<namespace>.<function>(args)`."""\n',`
195
+ `,` def __init__(self, client: LunoraClient) -> None:
196
+ `,s.length>0?`${s}
197
+ `:` pass
198
+ `].join(""),c=["Api",...n.map(u=>`${l(u.name)}Api`)];return{[`${V}/__init__.py`]:[k,`from .api import ${c.join(", ")}
199
+ `,`
200
+ `,`__all__ = [${c.map(u=>`"${u}"`).join(", ")}]
201
+ `].join(""),[`${V}/api.py`]:d,[`${V}/models.py`]:e.length>0?`${k}${Un(e)}
202
+ `:`${k}# No typed argument or result schemas in this deployment.
203
+ `}},Gn={id:"python",quicktype:{lang:"python",rendererOptions:{"python-version":"3.7"}},render:Hn,requires:[],vendor:[{from:"lunora",to:"lunora"}]},K=`${f("ruby").map(e=>`# ${e}`).join(`
204
+ `)}
205
+
206
+ `,Bn=new Set(["alias","and","begin","break","case","class","def","defined?","do","else","elsif","end","ensure","false","for","if","in","module","next","nil","not","or","redo","rescue","retry","return","self","super","then","true","undef","unless","until","when","while","yield"]),z=e=>m(e).replaceAll("#","\\#"),v=e=>{const n=E(e);return Bn.has(n)?`${n}_`:n},Jn=` # Delegates to the transport, which owns the projection and its tests — see
207
+ # \`Lunora.wire_args\`. The path list is generated per model because only the
208
+ # schema knows which nils may be dropped.
209
+ def self.wire_args(model, optional_paths = [])
210
+ Lunora.wire_args(model, optional_paths)
211
+ end
212
+
213
+ `,Yn=e=>`[${e.map(n=>`[${n.map(t=>`"${z(t)}"`).join(", ")}]`).join(", ")}]`,_e=e=>$(e,{none:"{}",typed:()=>`LunoraApi.wire_args(args, ${Yn(e.argsNullPaths.optional)})`,untyped:"args"}),oe=e=>{const n=e.argsType===void 0&&!e.takesArgs?"shard_key: nil":"args, shard_key: nil",t=_e(e),r=`@client.${e.verb}("${z(e.functionPath)}", ${t}, shard_key)`,a=e.resultType===void 0?r:`${e.resultType}.from_dynamic!(${r})`;return[` # ${p(e.summary)}`,` def ${v(e.functionName)}(${n})`,` ${a}`," end"].join(`
214
+ `)},zn=e=>{const n=e.argsType===void 0&&!e.takesArgs?"on_data, on_error = nil, shard_key: nil":"args, on_data, on_error = nil, shard_key: nil",t=_e(e);return[` # live ${p(e.summary)} — re-runs on every write to the tables it reads.`,` def subscribe_${v(e.functionName)}(${n})`,` @client.subscribe("${z(e.functionPath)}", ${t}, on_data, on_error, shard_key)`," end"].join(`
215
+ `)},Zn=e=>{const n=e.methods.map(t=>t.verb==="query"?`${oe(t)}
216
+
217
+ ${zn(t)}`:oe(t)).join(`
218
+
219
+ `);return[` # Functions declared in \`${p(e.name)}\`.`,` class ${l(e.name)}Api`," def initialize(client)"," @client = client"," end","",n," end"].join(`
220
+ `)},Xn=/^class \w+ < Dry::Struct\n[\s\S]*?def self\.from_dynamic!\(d\)\n\s*d = Types::Hash\[d\]/u,Qn=(e,n)=>{const t=new Map;for(const s of n.matchAll(/^class (\w+)\b[^\n]*\n[\s\S]*?^end$/gmu))t.set(s[1],s[0]);const r=s=>Xn.test(s),a=new Set([...t].filter(([,s])=>s.includes("< Dry::Struct")&&!r(s)).map(([s])=>s));let i=!0;for(;i;){i=!1;for(const[s,d]of t)!a.has(s)&&[...a].some(c=>new RegExp(String.raw`\b${c}\b`,"u").test(d))&&(a.add(s),i=!0)}const o=s=>{const d=s===void 0?void 0:t.get(s);return d!==void 0&&r(d)&&!a.has(s)?s:void 0};return e.map(s=>({methods:s.methods.map(d=>({...d,argsType:o(d.argsType),resultType:o(d.resultType)})),name:s.name}))},et=({models:e,namespaces:n})=>{T(n,"Ruby",o=>[v(o.functionName),`subscribe_${v(o.functionName)}`]);const t=Qn(n,e),r=t.map(o=>`:${v(o.name)}`).join(", "),a=t.map(o=>` @${v(o.name)} = ${l(o.name)}Api.new(client)`).join(`
221
+ `);return{"api.rb":[`# frozen_string_literal: true
222
+
223
+ `,K,`require_relative "models"
224
+ `,`
225
+ `,`module LunoraApi
226
+ `,x(t).some(o=>o.argsType!==void 0)?Jn:"",t.map(o=>Zn(o)).join(`
227
+
228
+ `),`
229
+
230
+ `," # Typed entry point: `Api.new(client).<namespace>.<function>(args)`.\n",` class Api
231
+ `,r.length>0?` attr_reader ${r}
232
+
233
+ `:"",` def initialize(client)
234
+ `,a.length>0?`${a}
235
+ `:` @client = client
236
+ `,` end
237
+ `,` end
238
+ `,`end
239
+ `].join(""),"models.rb":e.length>0?`# frozen_string_literal: true
240
+
241
+ ${K}${e}
242
+ `:`# frozen_string_literal: true
243
+
244
+ ${K}# No typed argument or result schemas in this deployment.
245
+ `}},nt={id:"ruby",quicktype:{lang:"ruby",rendererOptions:{}},render:et,requires:["dry-struct + dry-types (gems, required by the generated models)"],vendor:[{from:"lib/lunora.rb",to:"lunora.rb"},{from:"lib/lunora",to:"lunora"}]},C=`${f("rust").map(e=>`// ${e}`).join(`
246
+ `)}
247
+
248
+ `,tt=`${C}pub mod api;
249
+ pub mod models;
250
+ `,rt=`# The generated Lunora Rust SDK, with the transport vendored under ./lunora.
251
+ #
252
+ # Add to a consuming crate:
253
+ #
254
+ # lunora-api = { path = "sdk/rust" }
255
+
256
+ [package]
257
+ name = "lunora-api"
258
+ version = "0.1.0"
259
+ edition = "2021"
260
+ publish = false
261
+
262
+ # Its own workspace root, so a consumer whose project IS a workspace does not
263
+ # adopt this directory as a member (which then fails to build on its own).
264
+ [workspace]
265
+
266
+ [dependencies]
267
+ lunora = { path = "lunora" }
268
+ serde = { version = "1", features = ["derive"] }
269
+ serde_json = "1"
270
+ `,at=new Set(["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"]),it=new Set(["crate","self","Self","super"]),R=e=>{const n=E(e);return it.has(n)?`${n}_`:at.has(n)?`r#${n}`:n},st=e=>`Verb::${l(e)}`,Te=e=>e.length===0?"&[]":`&[${e.map(n=>`&["${n.map(t=>m(t)).join('", "')}"][..]`).join(", ")}]`,le=e=>{const n=$(e,{none:"&self, shard_key: Option<&str>",typed:a=>`&self, args: &${a}, shard_key: Option<&str>`,untyped:"&self, args: &WireValue, shard_key: Option<&str>"}),t=$(e,{none:"&WireValue::Object(Vec::new())",typed:()=>`&from_model_json(&serde_json::to_value(args).map_err(|error| ClientError::Transport(error.to_string()))?, ${Te(e.argsNullPaths.optional)})`,untyped:"args"}),r=`self.client.call(${st(e.verb)}, "${m(e.functionPath)}", ${t}, shard_key)`;return e.resultType===void 0?[` /// ${p(e.summary)}`,` pub fn ${R(e.functionName)}(${n}) -> Result<WireValue, ClientError> {`,` ${r}`," }"].join(`
271
+ `):[` /// ${p(e.summary)}`,` pub fn ${R(e.functionName)}(${n}) -> Result<${e.resultType}, ClientError> {`,` let raw = ${r}?;`," let json = encode_wire(&raw).map_err(ClientError::Wire)?;"," serde_json::from_value(json).map_err(|error| ClientError::Transport(error.to_string()))"," }"].join(`
272
+ `)},ot=e=>{const n=$(e,{none:"",typed:r=>`args: &${r}, `,untyped:"args: &WireValue, "}),t=$(e,{none:"WireValue::Object(Vec::new())",typed:()=>`from_model_json(&serde_json::to_value(args).map_err(|error| ClientError::Transport(error.to_string()))?, ${Te(e.argsNullPaths.optional)})`,untyped:"args.clone()"});return[` /// live ${p(e.summary)} — re-runs on every write to the tables it reads.`,` pub fn subscribe_${E(e.functionName)}(`," &mut self,",` ${n}on_data: DataHandler,`," on_error: ErrorHandler,"," shard_key: Option<&str>,"," ) -> Result<String, ClientError> {",` Ok(self.client.subscribe_on_shard("${m(e.functionPath)}", ${t}, on_data, on_error, shard_key))`," }"].join(`
273
+ `)},lt=e=>{const n=`${l(e.name)}Api`,t=e.methods.map(r=>r.verb==="query"?`${le(r)}
274
+
275
+ ${ot(r)}`:le(r)).join(`
276
+
277
+ `);return[`/// Functions declared in \`${p(e.name)}\`.`,`pub struct ${n}<'client> {`," client: &'client mut Client,","}","",`impl<'client> ${n}<'client> {`,t,"}"].join(`
278
+ `)},ct=({models:e,namespaces:n})=>{T(n,"Rust",a=>[R(a.functionName),`subscribe_${E(a.functionName)}`]);const t=n.map(a=>[` /// Functions declared in \`${p(a.name)}\`.`,` pub fn ${R(a.name)}(&mut self) -> ${l(a.name)}Api<'_> {`,` ${l(a.name)}Api { client: self.client }`," }"].join(`
279
+ `)).join(`
280
+
281
+ `),r=[C,`#![allow(dead_code, unused_imports)]
282
+ `,`
283
+ `,`use lunora::client::{Client, ClientError, DataHandler, ErrorHandler, Verb};
284
+ `,`use lunora::wire::{encode_wire, from_model_json, WireValue};
285
+ `,`
286
+ `,`use crate::models::*;
287
+ `,`
288
+ `,n.map(a=>lt(a)).join(`
289
+
290
+ `),`
291
+
292
+ `,"/// Typed entry point: `Api::new(&client).<namespace>().<function>(args)`.\n",`pub struct Api<'client> {
293
+ `,` client: &'client mut Client,
294
+ `,`}
295
+ `,`
296
+ `,`impl<'client> Api<'client> {
297
+ `,` pub fn new(client: &'client mut Client) -> Self {
298
+ `,` Self { client }
299
+ `,` }
300
+ `,t.length>0?`
301
+ ${t}
302
+ `:"",`}
303
+ `].join("");return{"Cargo.toml":rt,"src/api.rs":r,"src/lib.rs":tt,"src/models.rs":e.length>0?`${C}#![allow(dead_code)]
304
+
305
+ ${e}
306
+ `:`${C}#![allow(dead_code)]
307
+
308
+ // No typed argument or result schemas in this deployment.
309
+ `}},ut={id:"rust",quicktype:{lang:"rust",rendererOptions:{"just-types":"true"}},render:ct,requires:["serde (derive) + serde_json — declared in the emitted Cargo.toml, fetched by cargo"],vendor:[{from:"Cargo.toml",to:"lunora/Cargo.toml"},{from:"src",to:"lunora/src"}]},I=`${f("swift").map(e=>`// ${e}`).join(`
310
+ `)}
311
+
312
+ `,ce="Sources/LunoraApi",pt=`// swift-tools-version:5.9
313
+
314
+ import PackageDescription
315
+
316
+ // The generated Lunora Swift SDK, with the transport vendored under
317
+ // Sources/Lunora. Add to a consuming package — where "swift" below is the NAME OF
318
+ // THE DIRECTORY THIS FILE IS IN, which is how SwiftPM identifies a local path
319
+ // dependency. It ignores the "name:" field for that, and a bare product name in a
320
+ // target's dependencies does not resolve at all, so the directory name is the one
321
+ // spelling that works:
322
+ //
323
+ // dependencies: [.package(path: "sdk/swift")],
324
+ // targets: [
325
+ // .target(
326
+ // name: "YourTarget",
327
+ // dependencies: [.product(name: "LunoraApi", package: "swift")]
328
+ // )
329
+ // ]
330
+ let package = Package(
331
+ name: "LunoraSdk",
332
+ platforms: [.macOS(.v12), .iOS(.v15)],
333
+ products: [
334
+ .library(name: "LunoraApi", targets: ["LunoraApi"]),
335
+ .library(name: "Lunora", targets: ["Lunora"]),
336
+ ],
337
+ targets: [
338
+ .target(name: "Lunora"),
339
+ .target(name: "LunoraApi", dependencies: ["Lunora"]),
340
+ ]
341
+ )
342
+ `,dt=new Set(["as","associatedtype","borrowing","break","case","catch","class","consuming","continue","default","defer","deinit","do","else","enum","extension","fallthrough","false","fileprivate","for","func","guard","if","import","in","init","inout","internal","is","let","nil","nonisolated","open","operator","precedencegroup","private","protocol","public","repeat","rethrows","return","self","static","struct","subscript","super","switch","throw","throws","true","try","typealias","var","where","while"]),Y=e=>{const n=l(e),t=n.charAt(0).toLowerCase()+n.slice(1);return dt.has(t)?`\`${t}\``:t},$t=e=>`[${e.map(n=>`["${n.map(t=>m(t)).join('", "')}"]`).join(", ")}]`,Ee=e=>$(e,{none:"nil",typed:()=>{const{nullable:n}=e.argsNullPaths;return n.length===0?"try LunoraClient.wireValue(args)":`try LunoraClient.wireValue(args, nullablePaths: ${$t(n)})`},untyped:"args"}),ue=e=>{const n=$(e,{none:"shardKey: String? = nil",typed:o=>`_ args: ${o}, shardKey: String? = nil`,untyped:"_ args: Any, shardKey: String? = nil"}),t=Ee(e),r=e.resultType??"Any",a=`try client.${e.verb}("${m(e.functionPath)}", args: ${t}, shardKey: shardKey)`,i=e.resultType===void 0?`return ${a}`:[`let raw = ${a}`," let data = Data(Wire.stableStringify(raw).utf8)",` return try JSONDecoder().decode(${e.resultType}.self, from: data)`].join(`
343
+ `);return[` /// ${p(e.summary)}`,` public func ${Y(e.functionName)}(${n}) throws -> ${r} {`,` ${i}`," }"].join(`
344
+ `)},mt=e=>{const n=$(e,{none:"",typed:r=>`_ args: ${r}, `,untyped:"_ args: Any, "}),t=Ee(e);return[` /// live ${p(e.summary)} — re-runs on every write to the tables it reads.`," @discardableResult",` public func subscribe${l(e.functionName)}(`,` ${n}onData: ((Any) -> Void)?,`," onError: ((LunoraSubscriptionError) -> Void)? = nil,"," shardKey: String? = nil"," ) throws -> LunoraUnsubscribe {",` client.subscribe("${m(e.functionPath)}", args: ${t}, onData: onData, onError: onError, shardKey: shardKey)`," }"].join(`
345
+ `)},yt=e=>{const n=`${l(e.name)}API`,t=e.methods.map(r=>r.verb==="query"?`${ue(r)}
346
+
347
+ ${mt(r)}`:ue(r)).join(`
348
+
349
+ `);return[`/// Functions declared in \`${p(e.name)}\`.`,`public struct ${n} {`," let client: LunoraClient","",t,"}"].join(`
350
+ `)},ft=({models:e,namespaces:n})=>{const t=n.map(i=>` public let ${Y(i.name)}: ${l(i.name)}API`).join(`
351
+ `),r=n.map(i=>` ${Y(i.name)} = ${l(i.name)}API(client: client)`).join(`
352
+ `),a=[I,`import Foundation
353
+ `,`import Lunora
354
+ `,`
355
+ `,n.map(i=>yt(i)).join(`
356
+
357
+ `),`
358
+
359
+ `,"/// Typed entry point: `API(client:).<namespace>.<function>(args)`.\n",`public struct API {
360
+ `,t.length>0?`${t}
361
+
362
+ `:"",` public init(client: LunoraClient) {
363
+ `,r.length>0?`${r}
364
+ `:` _ = client
365
+ `,` }
366
+ `,`}
367
+ `].join("");return{"Package.swift":pt,[`${ce}/Api.swift`]:a,[`${ce}/Models.swift`]:e.length>0?`${I}${e}
368
+ `:`${I}import Foundation
369
+
370
+ // No typed argument or result schemas in this deployment.
371
+ `}},gt={id:"swift",quicktype:{lang:"swift",rendererOptions:{"access-level":"public",initializers:"false"}},render:ft,requires:[],vendor:[{from:"Sources/Lunora",to:"Sources/Lunora"}]},bt={dart:Ye,go:tn,java:Ln,kotlin:Kn,python:Gn,ruby:nt,rust:ut,swift:gt},wt=Object.keys(bt).toSorted((e,n)=>e.localeCompare(n)),ht=async(e,n)=>{const t=Ne(e);Oe(t);const r=n.renderModels?.(e),a=r===void 0?await We(e,n):Object.values(r).join(`
372
+ `),i=Ce(t,a);return{files:{...r,...n.render({models:a,namespaces:i})},undeclared:Re(t,a),unrepresentable:Le(e)}};export{wt as SDK_LANGUAGES,bt as SDK_TARGETS,ht as generateSdk,St as isTypedSchema};
@@ -1,3 +1,3 @@
1
- import{G as S,r as O}from"./emit-6YJU3YbV.mjs";import{s as p}from"./paths-C-9fwEgQ.mjs";import{LUNORA_ERROR_CODES as E,objectSchema as h,validatorIrToJsonSchema as u}from"./LUNORA_ERROR_CODES-C2s0xWQD.mjs";const A="/_lunora/rest",P=["authorization","cf-access-jwt-assertion","cookie","x-payment"],f=["x-d1-bookmark","x-lunora-shard-key"],T=e=>[...P,...(e.credentialHeaders??[]).map(t=>t.toLowerCase())],g=e=>Number.isFinite(e)?Math.max(0,Math.floor(e)):0,y=(...e)=>{const t=[];for(const r of e)for(const o of r?.split(",")??[]){const s=o.trim().toLowerCase();s!==""&&!t.includes(s)&&t.push(s)}return t.length===0?void 0:t.join(", ")},b=(e,t)=>{const r=[t,`max-age=${String(g(e.maxAge))}`];return e.staleWhileRevalidate!==void 0&&r.push(`stale-while-revalidate=${String(g(e.staleWhileRevalidate))}`),r.join(", ")},x=e=>e.scope==="public"?y(e.vary,...T(e),...f):y(e.vary,...f),k=e=>{const t=e.indexOf(":");if(!(t<=0||t>=e.length-1||e.indexOf(":",t+1)!==-1))return{name:e.slice(t+1),namespace:e.slice(0,t)}},N=e=>{const t=k(e);if(t!==void 0)return`${A}/${t.namespace}/${t.name}`},q=e=>e==="query"?"GET":"POST",m="#/components/responses/LunoraError",v=/:([A-Za-z_$][\w$]*)/gu,_=e=>[...e.matchAll(v)].map(t=>t[1]),j=e=>e.replaceAll(v,"{$1}"),l=e=>e.kind==="optional"?e.inner??e:e,C=e=>{const t=new Set(_(e.path)),r=[];for(const[o,s]of Object.entries(e.searchParams)){const c=l(s);r.push({description:`Query parameter \`${o}\``,in:"query",name:o,required:s.kind!=="optional",schema:u(c)})}for(const[o,s]of Object.entries(e.params)){const c=l(s);r.push({description:`Path parameter \`${o}\``,in:t.has(o)?"path":"query",name:o,required:t.has(o)?!0:s.kind!=="optional",schema:u(c)})}return r},$=e=>e?{content:{"application/json":{schema:u(e)}},description:"Successful response."}:{content:{"application/json":{schema:{description:"Return shape is TS-inferred (no `.output()` declared); best-effort — any JSON."}}},description:"Successful response. The return shape is TypeScript-inferred and not declared via `.output()`, so it is documented best-effort."},w=e=>{const t=p(e.filePath),r=C(e),o={description:`${e.stream?"Streaming (SSE) ":""}HTTP route handler \`${e.exportName}\` (${e.method} ${e.path}).`,operationId:`${e.method.toLowerCase()}_${p(e.path)}`,responses:{200:$(e.output),204:{description:"No content (handler returned `undefined`)."},default:{$ref:m}},summary:`${e.method} ${e.path}`,tags:[t]};return r.length>0&&(o.parameters=r),Object.keys(e.body).length>0&&(o.requestBody={content:{"application/json":{schema:h(e.body)}},required:!0}),e.stream&&(o["x-lunora-stream"]="text/event-stream"),o},D=e=>{const t=p(e.filePath),r=`${t}:${e.exportName}`,o={additionalProperties:!1,properties:{args:h(e.args),functionPath:{const:r,type:"string"},shardKey:{description:"Optional shard key; omitted routes to the default shard.",type:"string"}},required:["functionPath"],type:"object"};return{operation:{description:`Invoke the \`${e.kind}\` \`${r}\` over the Lunora RPC envelope (POST /_lunora/rpc).`,operationId:r,requestBody:{content:{"application/json":{schema:o}},required:!0},responses:{200:$(e.output),default:{$ref:m}},summary:`${e.kind}: ${r}`,tags:[t],"x-lunora-function-kind":e.kind},pathKey:`/_lunora/rpc#${r}`}},L=(e,t)=>{if(e===void 0||t!=="get"||e.scope===void 0||e.maxAge===void 0)return{};const r={maxAge:e.maxAge,scope:e.scope,...e.staleWhileRevalidate===void 0?{}:{staleWhileRevalidate:e.staleWhileRevalidate},...e.tag===void 0?{}:{tag:e.tag},...e.vary===void 0?{}:{vary:e.vary}},o={"Cache-Control":{description:r.scope==="public"?"Caching policy. `public` applies only to an uncredentialed request — a request carrying `Authorization` or `Cookie` is always answered `private`.":"Caching policy. Restricted to the caller's own cache; never stored by a shared/edge cache.",schema:{example:b(r,r.scope),type:"string"}}};r.tag!==void 0&&(o["Cache-Tag"]={description:"Purge tag for `ctx.cache.purge({ tags: [...] })`.",schema:{example:r.tag,type:"string"}});const s=x(r);return s!==void 0&&(o.Vary={description:"Request headers this response varies by. The endpoint's own negotiated headers are merged in at runtime.",schema:{example:s,type:"string"}}),{headers:o}},I=e=>{const t=p(e.filePath),r=`${t}:${e.exportName}`,o=N(r);if(o===void 0)return;const s=q(e.kind),c=s==="GET",d={description:`Public REST endpoint for the \`${e.kind}\` \`${r}\` (opt-in via \`.expose({ rest: true })\`). Routed through the procedure, so auth / RLS / validators are enforced.`,operationId:`rest_${p(o)}`,responses:{200:{content:{"application/json":{schema:{description:"Procedure result. The shape is TS-inferred from the return type; best-effort — any JSON."}}},description:"Successful result (TypeScript-inferred return shape, documented best-effort).",...L(e.expose?.cache,c?"get":"post")},default:{$ref:m}},summary:`${s} ${o}`,tags:[t],"x-lunora-function-kind":e.kind};if(c){const n=Object.entries(e.args).map(([a,i])=>{const R=l(i);return{description:`Argument \`${a}\` (JSON-encoded for non-string values).`,in:"query",name:a,required:i.kind!=="optional",schema:u(R)}});return n.length>0&&(d.parameters=n),{method:"get",operation:d,path:o}}return d.requestBody={content:{"application/json":{schema:h(e.args)}},required:Object.keys(e.args).length>0},{method:"post",operation:d,path:o}},F=e=>{const t=e.version??"0.0.0",r={},o=new Set;for(const n of e.httpRoutes){const a=j(n.path),i=r[a]??{};i[n.method.toLowerCase()]=w(n),r[a]=i,o.add(p(n.filePath))}const s=e.functions.filter(n=>n.visibility!=="internal"&&n.kind!=="stream");for(const n of s){const{operation:a,pathKey:i}=D(n);r[i]={post:a},o.add(p(n.filePath))}for(const n of s){if(n.expose?.rest!==!0)continue;const a=I(n);if(a===void 0)continue;const i=r[a.path]??{};i[a.method]=a.operation,r[a.path]=i}const c=[...o].toSorted((n,a)=>n.localeCompare(a)).map(n=>({description:`Operations declared in \`lunora/${n}\`.`,name:n}));return{components:{responses:{LunoraError:{content:{"application/json":{schema:{additionalProperties:!1,description:"Standard Lunora error envelope.",properties:{error:{additionalProperties:!1,properties:{code:{description:"Machine-readable error code. Clients switch on this value.",enum:E,type:"string"},message:{description:"Human-readable error message (never echoes internal details).",type:"string"}},required:["code","message"],type:"object"}},required:["error"],type:"object"}}},description:"A Lunora error response. The HTTP status reflects the error code (e.g. BAD_REQUEST→400, UNAUTHORIZED→401, FORBIDDEN→403, NOT_FOUND→404)."}}},info:{description:"Auto-generated from @lunora/values-typed functions by @lunora/codegen. Do not edit — run `lunora codegen` to regenerate.",title:"Lunora API",version:t},openapi:"3.1.0",paths:r,tags:c}},U=e=>`${JSON.stringify(F(e),void 0,2)}
1
+ import{G as S,r as O}from"./emit-D_prE7y6.mjs";import{s as p}from"./paths-C-9fwEgQ.mjs";import{LUNORA_ERROR_CODES as E,objectSchema as h,validatorIrToJsonSchema as u}from"./LUNORA_ERROR_CODES-C2s0xWQD.mjs";const A="/_lunora/rest",P=["authorization","cf-access-jwt-assertion","cookie","x-payment"],f=["x-d1-bookmark","x-lunora-shard-key"],T=e=>[...P,...(e.credentialHeaders??[]).map(t=>t.toLowerCase())],g=e=>Number.isFinite(e)?Math.max(0,Math.floor(e)):0,y=(...e)=>{const t=[];for(const r of e)for(const o of r?.split(",")??[]){const s=o.trim().toLowerCase();s!==""&&!t.includes(s)&&t.push(s)}return t.length===0?void 0:t.join(", ")},b=(e,t)=>{const r=[t,`max-age=${String(g(e.maxAge))}`];return e.staleWhileRevalidate!==void 0&&r.push(`stale-while-revalidate=${String(g(e.staleWhileRevalidate))}`),r.join(", ")},x=e=>e.scope==="public"?y(e.vary,...T(e),...f):y(e.vary,...f),k=e=>{const t=e.indexOf(":");if(!(t<=0||t>=e.length-1||e.indexOf(":",t+1)!==-1))return{name:e.slice(t+1),namespace:e.slice(0,t)}},N=e=>{const t=k(e);if(t!==void 0)return`${A}/${t.namespace}/${t.name}`},q=e=>e==="query"?"GET":"POST",m="#/components/responses/LunoraError",v=/:([A-Za-z_$][\w$]*)/gu,_=e=>[...e.matchAll(v)].map(t=>t[1]),j=e=>e.replaceAll(v,"{$1}"),l=e=>e.kind==="optional"?e.inner??e:e,C=e=>{const t=new Set(_(e.path)),r=[];for(const[o,s]of Object.entries(e.searchParams)){const c=l(s);r.push({description:`Query parameter \`${o}\``,in:"query",name:o,required:s.kind!=="optional",schema:u(c)})}for(const[o,s]of Object.entries(e.params)){const c=l(s);r.push({description:`Path parameter \`${o}\``,in:t.has(o)?"path":"query",name:o,required:t.has(o)?!0:s.kind!=="optional",schema:u(c)})}return r},$=e=>e?{content:{"application/json":{schema:u(e)}},description:"Successful response."}:{content:{"application/json":{schema:{description:"Return shape is TS-inferred (no `.output()` declared); best-effort — any JSON."}}},description:"Successful response. The return shape is TypeScript-inferred and not declared via `.output()`, so it is documented best-effort."},w=e=>{const t=p(e.filePath),r=C(e),o={description:`${e.stream?"Streaming (SSE) ":""}HTTP route handler \`${e.exportName}\` (${e.method} ${e.path}).`,operationId:`${e.method.toLowerCase()}_${p(e.path)}`,responses:{200:$(e.output),204:{description:"No content (handler returned `undefined`)."},default:{$ref:m}},summary:`${e.method} ${e.path}`,tags:[t]};return r.length>0&&(o.parameters=r),Object.keys(e.body).length>0&&(o.requestBody={content:{"application/json":{schema:h(e.body)}},required:!0}),e.stream&&(o["x-lunora-stream"]="text/event-stream"),o},D=e=>{const t=p(e.filePath),r=`${t}:${e.exportName}`,o={additionalProperties:!1,properties:{args:h(e.args),functionPath:{const:r,type:"string"},shardKey:{description:"Optional shard key; omitted routes to the default shard.",type:"string"}},required:["functionPath"],type:"object"};return{operation:{description:`Invoke the \`${e.kind}\` \`${r}\` over the Lunora RPC envelope (POST /_lunora/rpc).`,operationId:r,requestBody:{content:{"application/json":{schema:o}},required:!0},responses:{200:$(e.output),default:{$ref:m}},summary:`${e.kind}: ${r}`,tags:[t],"x-lunora-function-kind":e.kind},pathKey:`/_lunora/rpc#${r}`}},L=(e,t)=>{if(e===void 0||t!=="get"||e.scope===void 0||e.maxAge===void 0)return{};const r={maxAge:e.maxAge,scope:e.scope,...e.staleWhileRevalidate===void 0?{}:{staleWhileRevalidate:e.staleWhileRevalidate},...e.tag===void 0?{}:{tag:e.tag},...e.vary===void 0?{}:{vary:e.vary}},o={"Cache-Control":{description:r.scope==="public"?"Caching policy. `public` applies only to an uncredentialed request — a request carrying `Authorization` or `Cookie` is always answered `private`.":"Caching policy. Restricted to the caller's own cache; never stored by a shared/edge cache.",schema:{example:b(r,r.scope),type:"string"}}};r.tag!==void 0&&(o["Cache-Tag"]={description:"Purge tag for `ctx.cache.purge({ tags: [...] })`.",schema:{example:r.tag,type:"string"}});const s=x(r);return s!==void 0&&(o.Vary={description:"Request headers this response varies by. The endpoint's own negotiated headers are merged in at runtime.",schema:{example:s,type:"string"}}),{headers:o}},I=e=>{const t=p(e.filePath),r=`${t}:${e.exportName}`,o=N(r);if(o===void 0)return;const s=q(e.kind),c=s==="GET",d={description:`Public REST endpoint for the \`${e.kind}\` \`${r}\` (opt-in via \`.expose({ rest: true })\`). Routed through the procedure, so auth / RLS / validators are enforced.`,operationId:`rest_${p(o)}`,responses:{200:{content:{"application/json":{schema:{description:"Procedure result. The shape is TS-inferred from the return type; best-effort — any JSON."}}},description:"Successful result (TypeScript-inferred return shape, documented best-effort).",...L(e.expose?.cache,c?"get":"post")},default:{$ref:m}},summary:`${s} ${o}`,tags:[t],"x-lunora-function-kind":e.kind};if(c){const n=Object.entries(e.args).map(([a,i])=>{const R=l(i);return{description:`Argument \`${a}\` (JSON-encoded for non-string values).`,in:"query",name:a,required:i.kind!=="optional",schema:u(R)}});return n.length>0&&(d.parameters=n),{method:"get",operation:d,path:o}}return d.requestBody={content:{"application/json":{schema:h(e.args)}},required:Object.keys(e.args).length>0},{method:"post",operation:d,path:o}},F=e=>{const t=e.version??"0.0.0",r={},o=new Set;for(const n of e.httpRoutes){const a=j(n.path),i=r[a]??{};i[n.method.toLowerCase()]=w(n),r[a]=i,o.add(p(n.filePath))}const s=e.functions.filter(n=>n.visibility!=="internal"&&n.kind!=="stream");for(const n of s){const{operation:a,pathKey:i}=D(n);r[i]={post:a},o.add(p(n.filePath))}for(const n of s){if(n.expose?.rest!==!0)continue;const a=I(n);if(a===void 0)continue;const i=r[a.path]??{};i[a.method]=a.operation,r[a.path]=i}const c=[...o].toSorted((n,a)=>n.localeCompare(a)).map(n=>({description:`Operations declared in \`lunora/${n}\`.`,name:n}));return{components:{responses:{LunoraError:{content:{"application/json":{schema:{additionalProperties:!1,description:"Standard Lunora error envelope.",properties:{error:{additionalProperties:!1,properties:{code:{description:"Machine-readable error code. Clients switch on this value.",enum:E,type:"string"},message:{description:"Human-readable error message (never echoes internal details).",type:"string"}},required:["code","message"],type:"object"}},required:["error"],type:"object"}}},description:"A Lunora error response. The HTTP status reflects the error code (e.g. BAD_REQUEST→400, UNAUTHORIZED→401, FORBIDDEN→403, NOT_FOUND→404)."}}},info:{description:"Auto-generated from @lunora/values-typed functions by @lunora/codegen. Do not edit — run `lunora codegen` to regenerate.",title:"Lunora API",version:t},openapi:"3.1.0",paths:r,tags:c}},U=e=>`${JSON.stringify(F(e),void 0,2)}
2
2
  `,B=e=>`${S}export const openApiSpec = ${O(e,"Record<string, unknown>")};
3
3
  `;export{F as buildOpenApiDocument,U as emitOpenApi,B as emitOpenApiModule};