@lunora/codegen 1.0.0-alpha.164 → 1.0.0-alpha.165
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +11 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.mjs +1 -1
- package/dist/packem_shared/{GENERATED_HEADER-zxE5ds4T.mjs → GENERATED_HEADER-CR0AOQsV.mjs} +1 -1
- package/dist/packem_shared/{OPENRPC_VERSION-BgLkvCYK.mjs → OPENRPC_VERSION-DlF2XS7T.mjs} +1 -1
- package/dist/packem_shared/SCHEMA_SNAPSHOT_FILENAME-CSgeeyQD.mjs +9 -0
- package/dist/packem_shared/{buildOpenApiDocument-qYjkmRTX.mjs → buildOpenApiDocument-CE9SDrBg.mjs} +1 -1
- package/dist/packem_shared/{emit-BNdsZPcd.mjs → emit-Lx7UkoGn.mjs} +195 -186
- package/dist/packem_shared/{emitApp-CxmA4W3C.mjs → emitApp-9dMkNu6n.mjs} +47 -27
- package/package.json +9 -9
- package/dist/packem_shared/SCHEMA_SNAPSHOT_FILENAME-C9nFNiHX.mjs +0 -9
package/dist/index.d.mts
CHANGED
|
@@ -2207,6 +2207,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2207
2207
|
readonly contextProperty: "access";
|
|
2208
2208
|
readonly key: "access";
|
|
2209
2209
|
readonly moduleSpecifier: "@lunora/cloudflare-access";
|
|
2210
|
+
readonly requiredPackage: "@lunora/cloudflare-access";
|
|
2210
2211
|
}, {
|
|
2211
2212
|
readonly appMethod: {
|
|
2212
2213
|
readonly configKey: "ai";
|
|
@@ -2216,6 +2217,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2216
2217
|
readonly contextProperty: "ai";
|
|
2217
2218
|
readonly key: "ai";
|
|
2218
2219
|
readonly moduleSpecifier: "@lunora/ai";
|
|
2220
|
+
readonly requiredPackage: "@lunora/ai";
|
|
2219
2221
|
}, {
|
|
2220
2222
|
readonly appMethod: {
|
|
2221
2223
|
readonly configKey: "analytics";
|
|
@@ -2225,6 +2227,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2225
2227
|
readonly contextProperty: "analytics";
|
|
2226
2228
|
readonly key: "analytics";
|
|
2227
2229
|
readonly moduleSpecifier: "@lunora/bindings/analytics";
|
|
2230
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2228
2231
|
readonly serverCtxField: {
|
|
2229
2232
|
readonly field: "\n /** Analytics Engine telemetry sink. Fire-and-forget and sampled; do not read it back in-handler. */\n readonly analytics: import(\"@lunora/bindings/analytics\").AnalyticsClient;";
|
|
2230
2233
|
readonly tier: "every";
|
|
@@ -2238,6 +2241,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2238
2241
|
readonly contextProperty: "browser";
|
|
2239
2242
|
readonly key: "browser";
|
|
2240
2243
|
readonly moduleSpecifier: "@lunora/browser";
|
|
2244
|
+
readonly requiredPackage: "@lunora/browser";
|
|
2241
2245
|
readonly serverCtxField: {
|
|
2242
2246
|
readonly field: "\n /** Browser Rendering (screenshots/PDF/scrape). Non-deterministic — available only in actions. */\n readonly browser: import(\"@lunora/browser\").Browser;";
|
|
2243
2247
|
readonly tier: "action";
|
|
@@ -2259,6 +2263,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2259
2263
|
readonly contextProperty: "sql";
|
|
2260
2264
|
readonly key: "hyperdrive";
|
|
2261
2265
|
readonly moduleSpecifier: "@lunora/hyperdrive";
|
|
2266
|
+
readonly requiredPackage: "@lunora/hyperdrive";
|
|
2262
2267
|
readonly serverCtxField: {
|
|
2263
2268
|
readonly field: "\n /**\n * External database access via Hyperdrive. Non-deterministic — available only in actions. Writes here are NOT tracked by Lunora live queries; subscriptions will not re-run on external DB changes.\n */\n readonly sql: import(\"@lunora/hyperdrive\").SqlClient;";
|
|
2264
2269
|
readonly tier: "action";
|
|
@@ -2272,6 +2277,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2272
2277
|
readonly contextProperty: "images";
|
|
2273
2278
|
readonly key: "images";
|
|
2274
2279
|
readonly moduleSpecifier: "@lunora/bindings/images";
|
|
2280
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2275
2281
|
readonly serverCtxField: {
|
|
2276
2282
|
readonly field: "\n /** Cloudflare Images transforms (resize/format/optimize). Non-deterministic — available only in actions. */\n readonly images: import(\"@lunora/bindings/images\").Images;";
|
|
2277
2283
|
readonly tier: "action";
|
|
@@ -2285,6 +2291,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2285
2291
|
readonly contextProperty: "kv";
|
|
2286
2292
|
readonly key: "kv";
|
|
2287
2293
|
readonly moduleSpecifier: "@lunora/bindings/kv";
|
|
2294
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2288
2295
|
readonly serverCtxField: {
|
|
2289
2296
|
readonly field: "\n readonly kv: import(\"@lunora/bindings/kv\").Kv;";
|
|
2290
2297
|
readonly tier: "every";
|
|
@@ -2305,6 +2312,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2305
2312
|
readonly contextProperty: "payments";
|
|
2306
2313
|
readonly key: "payments";
|
|
2307
2314
|
readonly moduleSpecifier: "@lunora/payment";
|
|
2315
|
+
readonly requiredPackage: "@lunora/payment";
|
|
2308
2316
|
}, {
|
|
2309
2317
|
readonly appMethod: {
|
|
2310
2318
|
readonly configKey: "x402";
|
|
@@ -2314,10 +2322,12 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2314
2322
|
readonly contextProperty: "x402";
|
|
2315
2323
|
readonly key: "x402";
|
|
2316
2324
|
readonly moduleSpecifier: "@lunora/x402/pay";
|
|
2325
|
+
readonly requiredPackage: "@lunora/x402";
|
|
2317
2326
|
}, {
|
|
2318
2327
|
readonly contextProperty: "pipelines";
|
|
2319
2328
|
readonly key: "pipelines";
|
|
2320
2329
|
readonly moduleSpecifier: "@lunora/bindings/pipelines";
|
|
2330
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2321
2331
|
readonly serverCtxField: {
|
|
2322
2332
|
readonly field: "\n /** Pipelines ingestion sink (durable, R2-backed). Fire-and-forget and batched; do not read it back in-handler. */\n readonly pipelines: import(\"@lunora/bindings/pipelines\").PipelineClient;";
|
|
2323
2333
|
readonly tier: "action";
|
|
@@ -2331,6 +2341,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2331
2341
|
readonly contextProperty: "r2sql";
|
|
2332
2342
|
readonly key: "r2sql";
|
|
2333
2343
|
readonly moduleSpecifier: "@lunora/bindings/r2sql";
|
|
2344
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2334
2345
|
readonly serverCtxField: {
|
|
2335
2346
|
readonly field: "\n /**\n * R2 SQL over Apache Iceberg tables (window functions, DISTINCT, set operations). Non-deterministic — available only in actions. Reads here are NOT tracked by Lunora live queries.\n */\n readonly r2sql: import(\"@lunora/bindings/r2sql\").R2SqlClient;";
|
|
2336
2347
|
readonly tier: "action";
|
package/dist/index.d.ts
CHANGED
|
@@ -2207,6 +2207,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2207
2207
|
readonly contextProperty: "access";
|
|
2208
2208
|
readonly key: "access";
|
|
2209
2209
|
readonly moduleSpecifier: "@lunora/cloudflare-access";
|
|
2210
|
+
readonly requiredPackage: "@lunora/cloudflare-access";
|
|
2210
2211
|
}, {
|
|
2211
2212
|
readonly appMethod: {
|
|
2212
2213
|
readonly configKey: "ai";
|
|
@@ -2216,6 +2217,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2216
2217
|
readonly contextProperty: "ai";
|
|
2217
2218
|
readonly key: "ai";
|
|
2218
2219
|
readonly moduleSpecifier: "@lunora/ai";
|
|
2220
|
+
readonly requiredPackage: "@lunora/ai";
|
|
2219
2221
|
}, {
|
|
2220
2222
|
readonly appMethod: {
|
|
2221
2223
|
readonly configKey: "analytics";
|
|
@@ -2225,6 +2227,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2225
2227
|
readonly contextProperty: "analytics";
|
|
2226
2228
|
readonly key: "analytics";
|
|
2227
2229
|
readonly moduleSpecifier: "@lunora/bindings/analytics";
|
|
2230
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2228
2231
|
readonly serverCtxField: {
|
|
2229
2232
|
readonly field: "\n /** Analytics Engine telemetry sink. Fire-and-forget and sampled; do not read it back in-handler. */\n readonly analytics: import(\"@lunora/bindings/analytics\").AnalyticsClient;";
|
|
2230
2233
|
readonly tier: "every";
|
|
@@ -2238,6 +2241,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2238
2241
|
readonly contextProperty: "browser";
|
|
2239
2242
|
readonly key: "browser";
|
|
2240
2243
|
readonly moduleSpecifier: "@lunora/browser";
|
|
2244
|
+
readonly requiredPackage: "@lunora/browser";
|
|
2241
2245
|
readonly serverCtxField: {
|
|
2242
2246
|
readonly field: "\n /** Browser Rendering (screenshots/PDF/scrape). Non-deterministic — available only in actions. */\n readonly browser: import(\"@lunora/browser\").Browser;";
|
|
2243
2247
|
readonly tier: "action";
|
|
@@ -2259,6 +2263,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2259
2263
|
readonly contextProperty: "sql";
|
|
2260
2264
|
readonly key: "hyperdrive";
|
|
2261
2265
|
readonly moduleSpecifier: "@lunora/hyperdrive";
|
|
2266
|
+
readonly requiredPackage: "@lunora/hyperdrive";
|
|
2262
2267
|
readonly serverCtxField: {
|
|
2263
2268
|
readonly field: "\n /**\n * External database access via Hyperdrive. Non-deterministic — available only in actions. Writes here are NOT tracked by Lunora live queries; subscriptions will not re-run on external DB changes.\n */\n readonly sql: import(\"@lunora/hyperdrive\").SqlClient;";
|
|
2264
2269
|
readonly tier: "action";
|
|
@@ -2272,6 +2277,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2272
2277
|
readonly contextProperty: "images";
|
|
2273
2278
|
readonly key: "images";
|
|
2274
2279
|
readonly moduleSpecifier: "@lunora/bindings/images";
|
|
2280
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2275
2281
|
readonly serverCtxField: {
|
|
2276
2282
|
readonly field: "\n /** Cloudflare Images transforms (resize/format/optimize). Non-deterministic — available only in actions. */\n readonly images: import(\"@lunora/bindings/images\").Images;";
|
|
2277
2283
|
readonly tier: "action";
|
|
@@ -2285,6 +2291,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2285
2291
|
readonly contextProperty: "kv";
|
|
2286
2292
|
readonly key: "kv";
|
|
2287
2293
|
readonly moduleSpecifier: "@lunora/bindings/kv";
|
|
2294
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2288
2295
|
readonly serverCtxField: {
|
|
2289
2296
|
readonly field: "\n readonly kv: import(\"@lunora/bindings/kv\").Kv;";
|
|
2290
2297
|
readonly tier: "every";
|
|
@@ -2305,6 +2312,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2305
2312
|
readonly contextProperty: "payments";
|
|
2306
2313
|
readonly key: "payments";
|
|
2307
2314
|
readonly moduleSpecifier: "@lunora/payment";
|
|
2315
|
+
readonly requiredPackage: "@lunora/payment";
|
|
2308
2316
|
}, {
|
|
2309
2317
|
readonly appMethod: {
|
|
2310
2318
|
readonly configKey: "x402";
|
|
@@ -2314,10 +2322,12 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2314
2322
|
readonly contextProperty: "x402";
|
|
2315
2323
|
readonly key: "x402";
|
|
2316
2324
|
readonly moduleSpecifier: "@lunora/x402/pay";
|
|
2325
|
+
readonly requiredPackage: "@lunora/x402";
|
|
2317
2326
|
}, {
|
|
2318
2327
|
readonly contextProperty: "pipelines";
|
|
2319
2328
|
readonly key: "pipelines";
|
|
2320
2329
|
readonly moduleSpecifier: "@lunora/bindings/pipelines";
|
|
2330
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2321
2331
|
readonly serverCtxField: {
|
|
2322
2332
|
readonly field: "\n /** Pipelines ingestion sink (durable, R2-backed). Fire-and-forget and batched; do not read it back in-handler. */\n readonly pipelines: import(\"@lunora/bindings/pipelines\").PipelineClient;";
|
|
2323
2333
|
readonly tier: "action";
|
|
@@ -2331,6 +2341,7 @@ declare const CAPABILITY_ROWS: readonly [{
|
|
|
2331
2341
|
readonly contextProperty: "r2sql";
|
|
2332
2342
|
readonly key: "r2sql";
|
|
2333
2343
|
readonly moduleSpecifier: "@lunora/bindings/r2sql";
|
|
2344
|
+
readonly requiredPackage: "@lunora/bindings";
|
|
2334
2345
|
readonly serverCtxField: {
|
|
2335
2346
|
readonly field: "\n /**\n * R2 SQL over Apache Iceberg tables (window functions, DISTINCT, set operations). Non-deterministic — available only in actions. Reads here are NOT tracked by Lunora live queries.\n */\n readonly r2sql: import(\"@lunora/bindings/r2sql\").R2SqlClient;";
|
|
2336
2347
|
readonly tier: "action";
|
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-CWESEYLi.mjs";import{formatAdvisories as m,lintSchema as d,toAdvisorContext as f}from"./packem_shared/formatAdvisories-CkEu1eye.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-DHk9gO3E.mjs";import{listLunoraSourceFiles as g}from"./packem_shared/listLunoraSourceFiles-lHrzFhbX.mjs";import{default as R}from"./packem_shared/discoverAuthApiCalls-mYYZYULR.mjs";import{CONTAINERS_FILENAME as M,discoverContainers as h}from"./packem_shared/CONTAINERS_FILENAME-CqSjcb1-.mjs";import{default as L}from"./packem_shared/discoverCrons-C-GrcmEj.mjs";import{FLAGS_FILENAME as I,discoverFlags as F}from"./packem_shared/FLAGS_FILENAME-Uzu2mD86.mjs";import{default as P}from"./packem_shared/discoverFunctions-BJQ_rvqv.mjs";import{default as G}from"./packem_shared/discoverHttpRoutes-Bsu4ctdh.mjs";import{default as b}from"./packem_shared/discoverHyperdriveCalls-jqn--Zkc.mjs";import{default as y}from"./packem_shared/discoverInserts-Bbw_Fkid.mjs";import{d as j}from"./packem_shared/index-D322boXY.mjs";import{default as V}from"./packem_shared/discoverMigrations-ChOwLUzQ.mjs";import{MUTATORS_FILENAME as Q,discoverMutators as w}from"./packem_shared/MUTATORS_FILENAME-DHX1qUP5.mjs";import{default as B}from"./packem_shared/discoverNondeterministicCalls-Cesk1Srg.mjs";import{NOTIFY_FILENAME as Y,discoverNotifyCalls as X,discoverNotifyConfig as Z}from"./packem_shared/NOTIFY_FILENAME-a3lg_dJ9.mjs";import{default as ee}from"./packem_shared/readPackageDependencies-C6h6FZuP.mjs";import{d as oe}from"./packem_shared/queries-C3PDsG0y.mjs";import{QUEUES_FILENAME as se,discoverQueues as ae}from"./packem_shared/QUEUES_FILENAME-BZ6Ak3QY.mjs";import{default as me}from"./packem_shared/discoverR2sqlCalls-DW4RO223.mjs";import{default as fe}from"./packem_shared/discoverRlsProcedures-iPEyaH0Q.mjs";import{default as ce}from"./packem_shared/discoverRlsMetadata-pjWjG15I.mjs";import{discoverSandboxUsage as le}from"./packem_shared/discoverSandboxUsage-zLtQHdkg.mjs";import{default as xe}from"./packem_shared/discoverSchema-C4znXEB-.mjs";import{SHAPES_FILENAME as Ae,discoverShapes as ue}from"./packem_shared/SHAPES_FILENAME-DhZ3JkkH.mjs";import{default as Ne}from"./packem_shared/discoverStorageRulesMetadata-B1gekVBr.mjs";import{WORKFLOWS_FILENAME as Oe,discoverWorkflows as Re}from"./packem_shared/WORKFLOWS_FILENAME-CXgbWxbT.mjs";import{G as Me,e as he,a as _e,b as Le,c as Te,d as Ie,f as Fe,g as De,h as Pe,i as Ue,j as Ge,k as He,l as be,m as ke}from"./packem_shared/emit-
|
|
1
|
+
import{SCHEMA_SNAPSHOT_VERSION as t,diffSchemaSnapshots as s,serializeSchemaSnapshot as a}from"./packem_shared/SCHEMA_SNAPSHOT_VERSION-CWESEYLi.mjs";import{formatAdvisories as m,lintSchema as d,toAdvisorContext as f}from"./packem_shared/formatAdvisories-CkEu1eye.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-DHk9gO3E.mjs";import{listLunoraSourceFiles as g}from"./packem_shared/listLunoraSourceFiles-lHrzFhbX.mjs";import{default as R}from"./packem_shared/discoverAuthApiCalls-mYYZYULR.mjs";import{CONTAINERS_FILENAME as M,discoverContainers as h}from"./packem_shared/CONTAINERS_FILENAME-CqSjcb1-.mjs";import{default as L}from"./packem_shared/discoverCrons-C-GrcmEj.mjs";import{FLAGS_FILENAME as I,discoverFlags as F}from"./packem_shared/FLAGS_FILENAME-Uzu2mD86.mjs";import{default as P}from"./packem_shared/discoverFunctions-BJQ_rvqv.mjs";import{default as G}from"./packem_shared/discoverHttpRoutes-Bsu4ctdh.mjs";import{default as b}from"./packem_shared/discoverHyperdriveCalls-jqn--Zkc.mjs";import{default as y}from"./packem_shared/discoverInserts-Bbw_Fkid.mjs";import{d as j}from"./packem_shared/index-D322boXY.mjs";import{default as V}from"./packem_shared/discoverMigrations-ChOwLUzQ.mjs";import{MUTATORS_FILENAME as Q,discoverMutators as w}from"./packem_shared/MUTATORS_FILENAME-DHX1qUP5.mjs";import{default as B}from"./packem_shared/discoverNondeterministicCalls-Cesk1Srg.mjs";import{NOTIFY_FILENAME as Y,discoverNotifyCalls as X,discoverNotifyConfig as Z}from"./packem_shared/NOTIFY_FILENAME-a3lg_dJ9.mjs";import{default as ee}from"./packem_shared/readPackageDependencies-C6h6FZuP.mjs";import{d as oe}from"./packem_shared/queries-C3PDsG0y.mjs";import{QUEUES_FILENAME as se,discoverQueues as ae}from"./packem_shared/QUEUES_FILENAME-BZ6Ak3QY.mjs";import{default as me}from"./packem_shared/discoverR2sqlCalls-DW4RO223.mjs";import{default as fe}from"./packem_shared/discoverRlsProcedures-iPEyaH0Q.mjs";import{default as ce}from"./packem_shared/discoverRlsMetadata-pjWjG15I.mjs";import{discoverSandboxUsage as le}from"./packem_shared/discoverSandboxUsage-zLtQHdkg.mjs";import{default as xe}from"./packem_shared/discoverSchema-C4znXEB-.mjs";import{SHAPES_FILENAME as Ae,discoverShapes as ue}from"./packem_shared/SHAPES_FILENAME-DhZ3JkkH.mjs";import{default as Ne}from"./packem_shared/discoverStorageRulesMetadata-B1gekVBr.mjs";import{WORKFLOWS_FILENAME as Oe,discoverWorkflows as Re}from"./packem_shared/WORKFLOWS_FILENAME-CXgbWxbT.mjs";import{G as Me,e as he,a as _e,b as Le,c as Te,d as Ie,f as Fe,g as De,h as Pe,i as Ue,j as Ge,k as He,l as be,m as ke}from"./packem_shared/emit-Lx7UkoGn.mjs";import{emitApp as We}from"./packem_shared/emitApp-9dMkNu6n.mjs";import{buildOpenApiDocument as Ke,emitOpenApi as Ve,emitOpenApiModule as ze}from"./packem_shared/buildOpenApiDocument-CE9SDrBg.mjs";import{OPENRPC_VERSION as we,buildOpenRpcDocument as qe,emitOpenRpc as Be,emitOpenRpcModule as Je}from"./packem_shared/OPENRPC_VERSION-DlF2XS7T.mjs";import{DEFAULT_TARGET as Xe,platformMatrixIds as Ze,readProjectTarget as $e,resolveCodegenTarget as er}from"./packem_shared/DEFAULT_TARGET-lPq34YeN.mjs";import{SCHEMA_SNAPSHOT_FILENAME as or,createCodegenProject as tr,findTsconfig as sr,refreshCodegenProject as ar,runCodegen as ir}from"./packem_shared/SCHEMA_SNAPSHOT_FILENAME-CSgeeyQD.mjs";import{SchemaSnapshotParseError as dr,buildSchemaSnapshot as fr,evaluateSchemaDrift as pr,parseSchemaSnapshot as cr}from"./packem_shared/SchemaSnapshotParseError-yrVM8bTa.mjs";import{schemaFromIr as lr}from"./packem_shared/schemaFromIr-BWFnvCVg.mjs";import{LUNORA_ERROR_CODES as xr,validatorIrToJsonSchema as Er}from"./packem_shared/LUNORA_ERROR_CODES-CW7-uASH.mjs";import{SDK_LANGUAGES as ur,SDK_TARGETS as vr,generateSdk as Nr}from"./packem_shared/SDK_LANGUAGES-CFyux-74.mjs";import{redact as Or,secretKindOf as Rr}from"./packem_shared/redact-Cy14LEnc.mjs";import{MESSAGE_SOLUTIONS as Mr,findSolutionByMessage as hr}from"@lunora/errors";import{isTypedSchema as Lr}from"./packem_shared/isTypedSchema-B_qlBbE-.mjs";const e="0.0.0";export{u as AGENTS_FILENAME,M as CONTAINERS_FILENAME,x as CodegenDiagnosticError,Xe as DEFAULT_TARGET,I as FLAGS_FILENAME,Me as GENERATED_HEADER,xr as LUNORA_ERROR_CODES,Mr as LUNORA_SOLUTION_RULES,Q as MUTATORS_FILENAME,Y as NOTIFY_FILENAME,we as OPENRPC_VERSION,se as QUEUES_FILENAME,or as SCHEMA_SNAPSHOT_FILENAME,t as SCHEMA_SNAPSHOT_VERSION,ur as SDK_LANGUAGES,vr as SDK_TARGETS,Ae as SHAPES_FILENAME,dr as SchemaSnapshotParseError,e as VERSION,Oe as WORKFLOWS_FILENAME,Ke as buildOpenApiDocument,qe as buildOpenRpcDocument,fr as buildSchemaSnapshot,tr as createCodegenProject,c as describeErrorLevelFindings,E as diagnosticAt,s as diffSchemaSnapshots,v as discoverAgents,R as discoverAuthApiCalls,h as discoverContainers,L as discoverCrons,F as discoverFlags,P as discoverFunctions,G as discoverHttpRoutes,b as discoverHyperdriveCalls,y as discoverInserts,j as discoverMaskProcedures,V as discoverMigrations,w as discoverMutators,B 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,Re as discoverWorkflows,he as emitAgents,_e as emitApi,We as emitApp,Le as emitCollections,Te as emitContainers,Ie as emitCrons,Fe as emitDataModel,De as emitDrizzleSchema,Pe as emitFunctions,Ve as emitOpenApi,ze as emitOpenApiModule,Be as emitOpenRpc,Je as emitOpenRpcModule,Ue as emitServer,Ge as emitShard,He as emitVectors,be as emitWorkflows,ke as emitWranglerCronTriggers,n as errorAdvisoryNames,l as errorPlatformDiagnosticNames,pr as evaluateSchemaDrift,hr as findLunoraSolution,sr as findTsconfig,m as formatAdvisories,Nr as generateSdk,Lr as isTypedSchema,d as lintSchema,g as listLunoraSourceFiles,cr as parseSchemaSnapshot,Ze as platformMatrixIds,ee as readPackageDependencies,$e as readProjectTarget,Or as redact,ar as refreshCodegenProject,er as resolveCodegenTarget,ir as runCodegen,lr as schemaFromIr,Rr as secretKindOf,a as serializeSchemaSnapshot,f as toAdvisorContext,Er as validatorIrToJsonSchema};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./SCHEMA_SNAPSHOT_VERSION-CWESEYLi.mjs";import{G as t,U as m,n as r,e as o,a as n,b as l,c as A,d as E,f as S,g,h as C,o as c,p as d,i as p,j as u,k as D,l as f,m as h}from"./emit-
|
|
1
|
+
import"./SCHEMA_SNAPSHOT_VERSION-CWESEYLi.mjs";import{G as t,U as m,n as r,e as o,a as n,b as l,c as A,d as E,f as S,g,h as C,o as c,p as d,i as p,j as u,k as D,l as f,m as h}from"./emit-Lx7UkoGn.mjs";import"./paths-C-9fwEgQ.mjs";export{t as GENERATED_HEADER,m as UMBRELLA_BASE_PACKAGES,r as buildStorageColumns,o as emitAgents,n as emitApi,l as emitCollections,A as emitContainers,E as emitCrons,S as emitDataModel,g as emitDrizzleSchema,C as emitFunctions,c as emitQueues,d as emitSeed,p as emitServer,u as emitShard,D as emitVectors,f as emitWorkflows,h as emitWranglerCronTriggers};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{G as c}from"./emit-
|
|
1
|
+
import{G as c}from"./emit-Lx7UkoGn.mjs";import{s as u}from"./paths-C-9fwEgQ.mjs";import{validatorIrToJsonSchema as m,objectSchema as p,LUNORA_ERROR_CODES as i}from"./LUNORA_ERROR_CODES-CW7-uASH.mjs";const l="1.3.2",d={description:"Result is TS-inferred from the function's return type (no `.output()` declared); best-effort — any JSON."},R=e=>{const n=u(e.filePath),o=`${n}:${e.exportName}`;return{description:`Invoke the \`${e.kind}\` \`${o}\` over the Lunora RPC envelope (POST /_lunora/rpc, body \`{ "functionPath": "${o}", "args": { … } }\`).`,errors:i.map((r,s)=>({code:-32e3-s,data:{code:r},message:r})),name:o,params:[{description:"The function's argument object (the RPC envelope's `args`).",name:"args",required:Object.keys(e.args).length>0,schema:p(e.args)}],result:{name:"result",schema:e.output?m(e.output):d},summary:`${e.kind}: ${o}`,"x-lunora-function-kind":e.kind,"x-tags":[{name:n}]}},g=e=>{const n=e.version??"0.0.0",r=e.functions.filter(t=>t.visibility!=="internal"&&t.kind!=="stream").map(t=>R(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:n},methods:r,openrpc:l}},S=e=>`${JSON.stringify(g(e),void 0,2)}
|
|
2
2
|
`,v=e=>`${c}export const openRpcSpec: Record<string, unknown> = ${JSON.stringify(e,void 0,4)};
|
|
3
3
|
`;export{l as OPENRPC_VERSION,g as buildOpenRpcDocument,S as emitOpenRpc,v as emitOpenRpcModule};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{existsSync as b,mkdirSync as gs,readFileSync as Ct,writeFileSync as ps,rmSync as ms}from"node:fs";import{join as f,dirname as J}from"node:path";import{performance as xe}from"node:perf_hooks";import{runAdvisor as hs}from"@lunora/advisor";import{LunoraError as D}from"@lunora/errors";import{SyntaxKind as l,Node as i,Project as st}from"ts-morph";import{serializeSchemaSnapshot as xs}from"./SCHEMA_SNAPSHOT_VERSION-CWESEYLi.mjs";import{toAdvisorContext as Es}from"./formatAdvisories-CkEu1eye.mjs";import{s as vs}from"./paths-C-9fwEgQ.mjs";import{C as ee,n as Ft,i as Ss,f as ys,j as As,b as Ns,c as bs,l as Ps,e as Is,o as ws,d as Ts,k as Cs,g as Fs,p as Os,m as Rs,a as Ls,h as Ds}from"./emit-Lx7UkoGn.mjs";import{discoverAgents as ks}from"./AGENTS_FILENAME-DHk9gO3E.mjs";import{discoverContainers as Ms}from"./CONTAINERS_FILENAME-CqSjcb1-.mjs";import Ks from"./discoverCrons-C-GrcmEj.mjs";import{diagnosticAt as ae}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{b as ce}from"./module-specifiers-WF8iAydP.mjs";import{listLunoraSourceFiles as m,unwrapExpression as W,listSecurityScanFiles as Ie,objectLiteralFromCallbackBody as Ot,propertyInitializer as N,lunoraRelativePath as S,collectCallRows as I,collectSecurityCallRows as _s,limitNameOf as Rt,isContextIdentifier as ye,handlerOf as zs,isDatabaseAccessor as k,readTargetOf as Lt,enclosingExportName as Us}from"./listLunoraSourceFiles-lHrzFhbX.mjs";import Bs from"./readPackageDependencies-C6h6FZuP.mjs";import{discoverQueues as $s}from"./QUEUES_FILENAME-BZ6Ak3QY.mjs";import{discoverSandboxUsage as qs}from"./discoverSandboxUsage-zLtQHdkg.mjs";import Vs from"./discoverStorageRulesMetadata-B1gekVBr.mjs";import{a as y,c as z,d as Dt,e as js}from"./classify-procedure-call-C5BOBVM7.mjs";import{discoverWorkflows as Ws}from"./WORKFLOWS_FILENAME-CXgbWxbT.mjs";import{gatePlatformFeatures as Hs,resolveCodegenTarget as Gs}from"./DEFAULT_TARGET-lPq34YeN.mjs";import{i as R,a as _,e as v,r as Ys,b as Xs,s as le,c as Qs,f as Zs,d as Js}from"./queries-C3PDsG0y.mjs";import en from"./discoverAuthApiCalls-mYYZYULR.mjs";import nt from"./discoverFunctions-BJQ_rvqv.mjs";import{i as tn,r as sn,e as nn}from"./unwrap-handler-return-CmIWbykC.mjs";import rt from"./discoverHttpRoutes-Bsu4ctdh.mjs";import rn from"./discoverHyperdriveCalls-jqn--Zkc.mjs";import on from"./discoverInserts-Bbw_Fkid.mjs";import{m as we,a as se,s as kt,d as an}from"./index-D322boXY.mjs";import{e as Mt}from"./exported-procedure-chains-CH_Ce-wL.mjs";import cn from"./discoverMigrations-ChOwLUzQ.mjs";import{MUTATORS_FILENAME as ln,isDefineMutatorCallee as un,discoverMutators as ot}from"./MUTATORS_FILENAME-DHX1qUP5.mjs";import dn from"./discoverNondeterministicCalls-Cesk1Srg.mjs";import{discoverNotifyConfig as fn,discoverNotifyCalls as gn}from"./NOTIFY_FILENAME-a3lg_dJ9.mjs";import pn from"./discoverR2sqlCalls-DW4RO223.mjs";import mn from"./discoverRlsProcedures-iPEyaH0Q.mjs";import hn from"./discoverRlsMetadata-pjWjG15I.mjs";import xn from"./discoverSchema-C4znXEB-.mjs";import{secretKindOf as En,redact as vn,isHeuristicSecretKind as Sn,isSecretishName as yn}from"./redact-Cy14LEnc.mjs";import{discoverShapes as An}from"./SHAPES_FILENAME-DhZ3JkkH.mjs";import{emitApp as Nn}from"./emitApp-9dMkNu6n.mjs";import{buildOpenApiDocument as bn,emitOpenApiModule as Pn}from"./buildOpenApiDocument-CE9SDrBg.mjs";import{buildOpenRpcDocument as In,emitOpenRpcModule as wn}from"./OPENRPC_VERSION-DlF2XS7T.mjs";import{s as Tn}from"./parse-validator-CMV0eq2a.mjs";import{buildSchemaSnapshot as Cn}from"./SchemaSnapshotParseError-yrVM8bTa.mjs";const it=(e,t="api")=>{const s=new Map;for(const n of e){const o=vs(n),r=s.get(o);if(r===void 0){s.set(o,n);continue}if(r!==n){const a=t==="api"?`the generated api.ts would declare "${o}" twice and the dispatch key "${o}:<fn>" would be ambiguous`:`the generated api.ts would declare "${o}" twice in HttpStreamsRef and again in the httpStreams object literal`;throw new D("INTERNAL",`@lunora/codegen: "${r}" and "${n}" both map to the ${t} namespace "${o}" — ${a}. Rename one file so the two differ by more than a non-identifier character (\`-\`, \`.\`, \`/\` and \`_\` all sanitize to \`_\`).`,{status:500})}}},Fn=(e,t={})=>{const{hasVectors:s=!0,scheduler:n=!1,storage:o=!1,usage:r}=t,a=[],c=e.tables.filter(u=>u.shardMode==="global");c.some(u=>u.globalBackend!=="hyperdrive")&&a.push({name:"@lunora/d1",reason:"`.global()` tables are D1-backed, so `_generated/app.ts` imports the D1 `ctx.db` adapter"}),c.some(u=>u.globalBackend==="hyperdrive")&&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`"}),o&&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 u of r===void 0?[]:ee)u.requiredPackage!==void 0&&r?.[u.key]===!0&&a.push({name:u.requiredPackage,reason:`\`ctx.${u.contextProperty??u.key}\` usage makes \`_generated/\` import \`${u.moduleSpecifier}\``});return a.filter((u,d)=>a.findIndex(E=>E.name===u.name)===d)},On=(e,t,s={})=>{if(t===void 0)return;const n=Fn(e,s).filter(r=>!t.has(r.name));if(n.length===0)return;const o=n.map(r=>` - ${r.name} — ${r.reason}`).join(`
|
|
2
|
+
`);throw new D("INTERNAL",`@lunora/codegen: this schema's generated code imports packages the project does not declare:
|
|
3
|
+
${o}
|
|
4
|
+
|
|
5
|
+
Install them with your package manager, then re-run codegen.`)},Rn="env.ts",Ln=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineEnv";for(const s of t.getDeclarations())if(i.isImportSpecifier(s))return ce(s.getImportDeclaration().getModuleSpecifierValue())?s.getNameNode().getText()==="defineEnv":!1;return!1},Dn=e=>{const t=e.getSymbol();if(!t)return!1;for(const s of t.getDeclarations()){if(!i.isNamespaceImport(s))continue;const n=s.getFirstAncestorByKind(l.ImportDeclaration);return n!==void 0&&ce(n.getModuleSpecifierValue())}return!1},kn=e=>{if(i.isIdentifier(e))return Ln(e);if(i.isPropertyAccessExpression(e)){const t=e.getExpression();return e.getName()==="defineEnv"&&i.isIdentifier(t)&&Dn(t)}return!1},Mn=e=>{const t=[];for(const s of e.getVariableDeclarations()){if(!s.isExported())continue;const n=s.getInitializer();if(n?.getKind()!==l.CallExpression||!kn(n.getExpression()))continue;const r=s.getNameNode();if(!i.isIdentifier(r))throw ae(r,"defineEnv exports must be plain named exports (no destructuring)");t.push({exportName:r.getText()})}return t},Kn=(e,t)=>{const s=f(t,Rn);if(!b(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s),o=Mn(n);if(o.length!==0){if(o.length>1)throw ae(n,`lunora/env.ts declares ${o.length.toString()} defineEnv() contracts (${o.map(r=>r.exportName).join(", ")}); exactly one is allowed`);return o[0]}},at="ctx",Kt=e=>{const t=new Set,s=new Set([at]),n=r=>{if(i.isObjectBindingPattern(r))for(const a of r.getElements()){const c=a.getPropertyNameNode()?.getText()??a.getName();c&&t.add(c)}};for(const r of e.getDescendantsOfKind(l.BindingElement)){if((r.getPropertyNameNode()?.getText()??r.getName())!==at)continue;const a=r.getNameNode();i.isIdentifier(a)?s.add(a.getText()):n(a)}const o=r=>i.isIdentifier(r)&&s.has(r.getText());for(const r of e.getDescendantsOfKind(l.PropertyAccessExpression))o(r.getExpression())&&t.add(r.getName());for(const r of e.getDescendantsOfKind(l.VariableDeclaration)){const a=r.getInitializer();a!==void 0&&o(a)&&n(r.getNameNode())}return t},_n=(e,t)=>{const s=Object.fromEntries(ee.map(n=>[n.key,!1]));for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=new Set(o.getImportDeclarations().map(c=>c.getModuleSpecifierValue())),a=Kt(o);for(const c of ee)if(!s[c.key]){if(r.has(c.moduleSpecifier)){s[c.key]=!0;continue}c.contextProperty!==void 0&&a.has(c.contextProperty)&&(s[c.key]=!0)}if(ee.every(c=>s[c.key]))break}return s},_t="identity.ts",zn=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineIdentity";for(const s of t.getDeclarations())if(i.isImportSpecifier(s))return ce(s.getImportDeclaration().getModuleSpecifierValue())?s.getNameNode().getText()==="defineIdentity":!1;return!1},Un=e=>{const t=e.getSymbol();if(!t)return!1;for(const s of t.getDeclarations()){if(!i.isNamespaceImport(s))continue;const n=s.getFirstAncestorByKind(l.ImportDeclaration);return n!==void 0&&ce(n.getModuleSpecifierValue())}return!1},Bn=e=>{if(i.isIdentifier(e))return zn(e);if(i.isPropertyAccessExpression(e)){const t=e.getExpression();return e.getName()==="defineIdentity"&&i.isIdentifier(t)&&Un(t)}return!1},$n=e=>{const t=[];for(const s of e.getVariableDeclarations()){if(!s.isExported())continue;const n=s.getInitializer();if(n?.getKind()!==l.CallExpression||!Bn(n.getExpression()))continue;const r=s.getNameNode();if(!i.isIdentifier(r))throw ae(r,"defineIdentity exports must be plain named exports (no destructuring)");t.push({exportName:r.getText()})}return t},qn=(e,t)=>{const s=f(t,_t);if(!b(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s),o=$n(n);if(o.length!==0){if(o.length>1)throw ae(n,`lunora/identity.ts declares ${o.length.toString()} defineIdentity() contracts (${o.map(r=>r.exportName).join(", ")}); exactly one is allowed`);return o[0]}},Vn=(e,t)=>{const s=W(t);if(s===void 0||!i.isIdentifier(s))return s;const n=s.getText();return W(e.getDescendantsOfKind(l.VariableDeclaration).find(o=>o.getName()===n)?.getInitializer())},jn=e=>e!==void 0&&i.isObjectLiteralExpression(e)&&e.getProperties().some(t=>{if(i.isShorthandPropertyAssignment(t))return t.getName()==="durable";if(!i.isPropertyAssignment(t)||t.getName()!=="durable")return!1;const s=t.getInitializer();return s===void 0||W(s)?.getText()!=="false"}),Wn=(e,t)=>{const s={durableStreams:!1,secrets:!1};for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);if(s.secrets||(s.secrets=Kt(o).has("secrets")),s.durableStreams||(s.durableStreams=o.getDescendantsOfKind(l.CallExpression).some(r=>{const a=r.getExpression();return(i.isPropertyAccessExpression(a)?a.getName():a.getText())==="stream"&&r.getArguments().some(u=>jn(Vn(o,u)))})),s.durableStreams&&s.secrets)break}return s},Hn="createWorker",Gn="extend",ct=e=>e!==void 0&&(i.isStringLiteral(e)||i.isNoSubstitutionTemplateLiteral(e))?e.getLiteralValue():void 0,lt=e=>{const t=[],s=ct(N(e,"backupCron"));s!==void 0&&t.push(s);const n=N(e,"crons");if(n===void 0||!i.isObjectLiteralExpression(n))return t;for(const o of n.getProperties()){if(!i.isPropertyAssignment(o)&&!i.isMethodDeclaration(o))continue;const r=ct(o.getNameNode());r!==void 0&&t.push(r)}return t},Yn=e=>{const t=y(e.getExpression()),[s]=e.getArguments();if(s===void 0)return[];if(t===Hn)return i.isObjectLiteralExpression(s)?lt(s):[];if(t!==Gn||!(i.isArrowFunction(s)||i.isFunctionExpression(s)))return[];const n=Ot(s.getBody());return n===void 0?[]:lt(n)},Xn=(e,t)=>{const s=[];for(const{filePath:n}of Ie(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);for(const r of o.getDescendantsOfKind(l.CallExpression))s.push(...Yn(r))}return[...new Set(s)]},Qn=(e,t)=>{const s=new Map,n=new Map,o=new Map;for(const r of e)s.set(r.name,`workflow "${r.exportName}"`),n.set(r.bindingName,`workflow "${r.exportName}"`),o.set(r.className,`workflow "${r.exportName}"`);for(const r of t){const a=s.get(r.name);if(a!==void 0)throw new D("DUPLICATE_WORKFLOW_NAME",`Duplicate deployed name "${r.name}": produced by both ${a} and agent "${r.exportName}". Workflow and agent names share the same wrangler workflows[] array and must be unique together.`,{status:500});const c=n.get(r.bindingName);if(c!==void 0)throw new D("DUPLICATE_WORKFLOW_BINDING",`Duplicate binding "${r.bindingName}": produced by both ${c} and agent "${r.exportName}". Workflow and agent bindings share the same wrangler workflows[] array and must be unique together.`,{status:500});const u=o.get(r.className);if(u!==void 0)throw new D("DUPLICATE_WORKFLOW_CLASS",`Duplicate generated class "${r.className}": produced by both ${u} and agent "${r.exportName}". Workflow and agent export names must yield unique generated class names.`,{status:500})}},Zn=e=>{const{lunoraDirectory:t,project:s,projectRoot:n,schema:o}=e,r=qn(s,t),a=Kn(s,t),c=Ws(s,t),u=$s(s,t),d=ks(s,t);Qn(c,d);const E=Ms(s,t),x=Vs(s,t),P=Ks(s,t,c,d),M=Xn(s,t),g=Wn(s,t),T=qs(s,t),C=_n(s,t);C.browser=C.browser||T.usesSandboxBrowser;const $=Hs(C,Gs(n,e.target),{agents:d.length>0,commitOrderedTables:o.tables.some(p=>p.commitOrdered===!0),cronTriggers:P.length>0,crossShardFanout:o.tables.some(p=>typeof p.shardMode=="object"),durableStreams:g.durableStreams,globalTables:o.tables.some(p=>p.shardMode==="global"),queues:u.length>0,secrets:g.secrets,vectorStore:o.vectorIndexes.length>0}),A=$.usage,L=$.signals.vectorStore!==!1,U=Bs(n),q=U??new Set,G=q.has("lunorash");On(o,U,{hasVectors:L,scheduler:A.scheduler||P.length>0,storage:A.storage||x.rules.length>0||Object.keys(Ft(o)).length>0,usage:A});const K=b(f(t,"flags.ts")),F=b(f(t,"notify.ts"));return{agents:d,containers:E,crons:P,dataModelContent:ys(o),declaredDependencies:U,dependencies:q,entryCronTriggers:M,env:a,featureUsage:A,hasFlags:K,hasNotify:F,identity:r,platformGate:$,queues:u,serverContent:Ss({agents:d,containers:E,env:a,hasAccessFacade:A.access,hasAi:A.ai,hasAnalytics:A.analytics,hasBrowser:A.browser,hasVectors:L,hasFlags:K,hasHyperdrive:A.hyperdrive,hasImages:A.images,hasKv:A.kv,hasNotify:F,hasPayments:A.payments,hasPipelines:A.pipelines,hasR2sql:A.r2sql,hasX402:A.x402,identity:r,queues:u,schema:o,storageRuleBuckets:x.rules.map(p=>p.bucket),useUmbrella:G,workflows:c}),storageRulesMetadata:x,usesSandbox:T.usesSandboxBrowser||T.usesSandboxContainer||T.usesSandboxFs,useUmbrella:G,workflows:c}},zt=new Set(["delete","get","head","options","patch","post","put"]),Jn=new Set(["handler","stream"]),er=/\/(?:_|admin|internal|superuser|sudo|root|debug)/iu,ut=new Set(["ADMIN_TOKEN","adminToken","assertAdmin","assertAuth","auth","Authorization","getSession","identity","isAdmin","requireAdmin","requireAuth","requireRole","verifyAdmin"]),tr=e=>{if(!i.isCallExpression(e))return;const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!zt.has(t.getName()))return;const s=t.getExpression();if(!i.isIdentifier(s)||s.getText()!=="httpRoute")return;const n=e.getArguments()[0];if(!(!n||!i.isStringLiteral(n)))return{method:t.getName().toUpperCase(),path:n.getLiteralValue()}},sr=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t))return;let s=t.getExpression();for(;i.isCallExpression(s);){const n=s.getExpression();if(!i.isPropertyAccessExpression(n)||zt.has(n.getName()))break;s=n.getExpression()}return tr(s)},nr=e=>{for(const t of e.getDescendantsOfKind(l.PropertyAccessExpression))if(ut.has(t.getName()))return!0;for(const t of e.getDescendantsOfKind(l.CallExpression)){const s=t.getExpression();if(i.isIdentifier(s)&&ut.has(s.getText()))return!0}return!1},rr=(e,t)=>{const s=e.getInitializer();if(!s||!i.isCallExpression(s))return;const n=s.getExpression();if(!i.isPropertyAccessExpression(n)||!Jn.has(n.getName()))return;const o=sr(s);if(!o||!er.test(o.path))return;const r=s.getArguments()[0],a=r!==void 0&&(i.isArrowFunction(r)||i.isFunctionExpression(r))&&nr(r);return{exportName:e.getName(),file:t,method:o.method,path:o.path,usesGuard:a}},or=(e,t)=>{const s=[];for(const n of e.getVariableStatements())if(n.isExported())for(const o of n.getDeclarations()){const r=rr(o,t);r&&s.push(r)}return s},ir=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...or(o,S(t,n)))}return s},ar=e=>!i.isPropertyAccessExpression(e)||e.getName()!=="run"?!1:e.getExpression().getText()==="ctx.ai",cr=(e,t)=>{if(!ar(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!R(s)||_(s)))return{exportName:v(e),file:t,line:e.getStartLineNumber()}},lr=(e,t)=>I(e,t,cr),ur=new Set(["generateText","streamText"]),dr=new Set(["messages","prompt","system"]),fr=[{methods:new Set(["delete","insert","insertManyUnsafe","patch","replace"]),prefixes:["context.db","ctx.db"]},{methods:new Set(["run","runAction","runMutation"]),prefixes:["context","ctx"]},{methods:new Set(["fetch"]),prefixes:["context","ctx"]},{methods:new Set(["queue","send"]),prefixes:["context.email","context.mail","ctx.email","ctx.mail"]}],gr=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t))return;const s=t.getName(),n=t.getExpression().getText();for(const o of fr)if(o.methods.has(s)&&o.prefixes.some(r=>n===r||n.startsWith(`${r}.`)))return`${n}.${s}`},pr=e=>{for(const t of e.getDescendantsOfKind(l.CallExpression)){const s=gr(t);if(s!==void 0)return s}},mr=e=>{const t=new Set,s=e.getFirstAncestor(r=>i.isArrowFunction(r)||i.isFunctionExpression(r)||i.isFunctionDeclaration(r)),[n]=s?.getParameters()??[],o=n?.getNameNode();if(o===void 0||!i.isObjectBindingPattern(o))return t;for(const r of o.getElements()){const a=r.getPropertyNameNode()?.getText()??r.getName(),c=r.getNameNode();if(a==="args"&&i.isObjectBindingPattern(c))for(const u of c.getElements())t.add(u.getName())}return t},hr=e=>{if(Ys(e))return!0;const t=mr(e);return t.size===0?!1:e.getDescendantsOfKind(l.Identifier).some(s=>t.has(s.getText()))},xr=e=>{for(const t of e.getProperties()){if(!i.isPropertyAssignment(t)||!dr.has(t.getName()))continue;const s=t.getInitializer();if(s!==void 0&&hr(s))return!0}return!1},Er=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=y(n.getExpression());if(o===void 0||!ur.has(o))continue;const[r]=n.getArguments();if(r===void 0||!i.isObjectLiteralExpression(r))continue;let a;for(const c of r.getDescendantsOfKind(l.CallExpression))if(y(c.getExpression())==="tool"&&(a=pr(c),a!==void 0))break;a!==void 0&&s.push({exportName:v(n),file:t,line:n.getStartLineNumber(),method:o,sideEffect:a,userInputDerived:xr(r)})}return s},vr=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Er(o,S(t,n)))}return s},Sr=e=>{if(!i.isPropertyAccessExpression(e)||e.getName()!=="fetch")return!1;const t=e.getExpression();return i.isIdentifier(t)&&t.getText()==="ctx"},yr=(e,t)=>{if(!Sr(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!R(s)))return{exportName:v(e),file:t,line:e.getStartLineNumber()}},Ar=(e,t)=>I(e,t,yr),Ut=e=>e.getProperties().some(t=>i.isSpreadAssignment(t)),Nr=e=>{const t=e.getArguments()[0];if(!t||!i.isObjectLiteralExpression(t))return{objects:[],opaque:!0};const s=t.getProperty("args");if(!s)return{objects:[],opaque:!1};if(!i.isPropertyAssignment(s))return{objects:[],opaque:!0};const n=s.getInitializer();return!n||!i.isObjectLiteralExpression(n)?{objects:[],opaque:!0}:{objects:[n],opaque:Ut(n)}},br=e=>{const t=[];let s=!1,n=e;for(;i.isCallExpression(n);){const o=n.getExpression();if(!i.isPropertyAccessExpression(o))break;if(o.getName()==="input"){const r=n.getArguments()[0];r&&i.isObjectLiteralExpression(r)?(t.push(r),s||=Ut(r)):s=!0}n=o.getExpression()}return{objects:t,opaque:s}},Bt=(e,t)=>t?br(t):Nr(e),Pr=e=>e.flatMap(t=>t.getProperties().filter(s=>i.isPropertyAssignment(s)||i.isShorthandPropertyAssignment(s)).map(s=>s.getName())),Ir=new Set(["check","length","max"]),Ae=e=>{if(!i.isCallExpression(e))return;const t=e.getExpression();if(!(!i.isPropertyAccessExpression(t)||t.getExpression().getText()!=="v"))return t.getName()},wr=e=>[e,...e.getDescendants()].filter(t=>Ae(t)!==void 0),Tr=e=>{let t=e;for(;;){const s=t.getParent();if(!s||!i.isPropertyAccessExpression(s)||s.getExpression()!==t)return!1;const n=s.getParent();if(!n||!i.isCallExpression(n)||n.getExpression()!==s)return!1;if(Ir.has(s.getName()))return!0;t=n}},Cr=e=>{const t=[],s=[];for(const n of e)for(const o of n.getProperties()){if(!i.isPropertyAssignment(o))continue;const r=o.getInitializer();if(!r)continue;const a=wr(r),c=o.getName();a.some(u=>Ae(u)==="any")?t.push(c):a.some(u=>Ae(u)==="string"&&!Tr(u))&&s.push(c)}return{anyArgs:t,unboundedStringArgs:s}},Fr=(e,t)=>{const s=e.getInitializer();if(!s||!i.isCallExpression(s))return;const n=z(s);if(n?.visibility!=="public")return;const{objects:o}=Bt(s,n.receiver),{anyArgs:r,unboundedStringArgs:a}=Cr(o);if(!(r.length===0&&a.length===0))return{anyArgs:r,exportName:e.getName(),file:t,line:s.getStartLineNumber(),unboundedStringArgs:a}},Or=(e,t)=>{const s=[];for(const n of e.getVariableStatements())if(n.isExported())for(const o of n.getDeclarations()){const r=Fr(o,t);r&&s.push(r)}return s},Rr=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Or(o,S(t,n)))}return s},Ee=e=>e?.getKind()===l.TrueKeyword,Lr=e=>e?.getKind()===l.FalseKeyword,Dr=e=>e!==void 0&&i.isNumericLiteral(e)&&e.getLiteralValue()===0,kr=new Set(["lunoraAuthAdapter","lunoraD1Adapter"]),Mr=e=>!e||!i.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>i.isCallExpression(t)&&y(t.getExpression())==="scim"),Kr=e=>e!==void 0&&i.isCallExpression(e)&&kr.has(y(e.getExpression())??""),_r=e=>!e||!i.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>i.isStringLiteral(t)&&t.getLiteralText()==="*"),zr=e=>{const t=N(e,"advanced"),s=N(e,"emailAndPassword"),n=N(e,"session");return{analyzable:!0,disableCsrfCheck:Ee(N(t,"disableCSRFCheck")),emailPasswordEnabled:Ee(N(s,"enabled")),requireEmailVerification:Ee(N(s,"requireEmailVerification")),scimOnNonTransactionalAdapter:Mr(N(e,"plugins"))&&Kr(N(e,"database")),secureCookiesDisabled:Lr(N(t,"useSecureCookies")),sessionFreshAgeZero:Dr(N(n,"freshAge")),trustedOriginsWildcard:_r(N(e,"trustedOrigins"))}},Ur=()=>({analyzable:!1,disableCsrfCheck:!1,emailPasswordEnabled:!1,requireEmailVerification:!1,scimOnNonTransactionalAdapter:!1,secureCookiesDisabled:!1,sessionFreshAgeZero:!1,trustedOriginsWildcard:!1}),Br=(e,t)=>{if(y(e.getExpression())!=="createAuth")return;const s=e.getArguments()[0],n=s!==void 0&&i.isObjectLiteralExpression(s)&&s.getProperties().some(r=>i.isSpreadAssignment(r)),o=s!==void 0&&i.isObjectLiteralExpression(s)&&!n?zr(s):Ur();return{exportName:v(e),file:t,line:e.getStartLineNumber(),...o}},$r=(e,t)=>_s(e,t,Br),qr=(e,t)=>{if(!i.isPropertyAccessExpression(e))return;const s=e.getName();if(t.methods.has(s))return t.matchReceiver(e.getExpression().getText())?s:void 0},Vr=(e,t,s)=>{const n=qr(e.getExpression(),s);if(n===void 0)return;const o=e.getArguments()[s.argIndex];if(!(!o||!R(o)||_(o))&&!(s.requireUnmodifiedReach===!0&&!Xs(o)))return{exportName:v(e),file:t,line:e.getStartLineNumber(),method:n}},jr=(e,t,s)=>{const n=[];for(const o of e.getDescendantsOfKind(l.CallExpression)){const r=Vr(o,t,s);r&&n.push(r)}return n},ue=(e,t,s)=>{const n=[];for(const o of m(t)){const r=e.getSourceFile(o)??e.addSourceFileAtPath(o);n.push(...jr(r,S(t,o),s))}return n},Wr=new Set(["content","pdf","scrape","screenshot"]),Hr=(e,t)=>ue(e,t,{argIndex:0,matchReceiver:s=>s==="ctx.browser",methods:Wr}),Gr=new Set(["createBrowser","createInboundEmailHandler","createPayment"]),Yr=new Set(["RateLimiter"]),Xr=new Set(["extend"]),dt="lunora",Qr=["vite.config.ts","vite.config.mts","vite.config.js","vite.config.mjs"],$t=e=>{const t=[],s=[];let n=!1;for(const o of e.getProperties()){if(i.isSpreadAssignment(o)){n=!0;continue}if(i.isPropertyAssignment(o)){const r=o.getName();t.push(r),o.getInitializer()?.getKind()===l.TrueKeyword&&s.push(r);continue}(i.isShorthandPropertyAssignment(o)||i.isMethodDeclaration(o))&&t.push(o.getName())}return{analyzable:!n,presentKeys:t,trueKeys:s}},Ne=e=>e&&i.isObjectLiteralExpression(e)?$t(e):{analyzable:!1,presentKeys:[],trueKeys:[]},Zr=e=>{const t=e&&(i.isArrowFunction(e)||i.isFunctionExpression(e))?e:void 0,s=t&&Ot(t.getBody());return s?$t(s):{analyzable:!1,presentKeys:[],trueKeys:[]}},Jr=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=y(n.getExpression());o!==void 0&&(Gr.has(o)?s.push({callee:o,file:t,line:n.getStartLineNumber(),...Ne(n.getArguments()[0])}):Xr.has(o)&&s.push({callee:o,file:t,line:n.getStartLineNumber(),...Zr(n.getArguments()[0])}))}for(const n of e.getDescendantsOfKind(l.NewExpression)){const o=y(n.getExpression());o===void 0||!Yr.has(o)||s.push({callee:o,file:t,line:n.getStartLineNumber(),...Ne(n.getArguments()[0])})}return s},eo=(e,t)=>{for(const s of Qr){const n=f(t,s);if(!b(n))continue;const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=[];for(const a of o.getDescendantsOfKind(l.CallExpression))y(a.getExpression())===dt&&r.push({callee:dt,file:s,line:a.getStartLineNumber(),...Ne(a.getArguments()[0])});return r}return[]},to=(e,t)=>{const s=[];for(const{displayPath:n,filePath:o}of Ie(t)){const r=e.getSourceFile(o)??e.addSourceFileAtPath(o);s.push(...Jr(r,n))}return s.push(...eo(e,J(t))),s},ft="ctx.containers.",so=e=>{if(!e.startsWith(ft))return!1;const t=e.slice(ft.length);return t.length>0&&!t.includes(".")},no=(e,t)=>ue(e,t,{argIndex:0,matchReceiver:so,methods:new Set(["get"])}),ro=new Set(["allow","deny","setAllowed"]),oo=e=>{const t=e.getArguments()[0];if(!t||!i.isObjectLiteralExpression(t))return!1;const s=t.getProperty("enableInternet");return s!==void 0&&i.isPropertyAssignment(s)&&i.isTrueLiteral(s.getInitializerOrThrow())},io=(e,t)=>{const s=e.getExpression();if(!(!i.isPropertyAccessExpression(s)||s.getName()!=="start"||!oo(e)))return{detail:"enableInternet: true",exportName:v(e),file:t,kind:"enable_internet",line:e.getStartLineNumber()}},ao=(e,t)=>{const s=e.getExpression();if(!i.isPropertyAccessExpression(s)||!ro.has(s.getName()))return;const n=s.getExpression();if(!(!i.isPropertyAccessExpression(n)||n.getName()!=="egress"))return{detail:s.getName(),exportName:v(e),file:t,kind:"egress_relaxation",line:e.getStartLineNumber()}},co=(e,t)=>io(e,t)??ao(e,t),lo=(e,t)=>I(e,t,co),uo=new Set(["defineExportSink","r2Sink","webhookExportSink"]),fo=e=>{const t=e.getExpression();if(!i.isIdentifier(t))return;const s=t.getText();return uo.has(s)?s:void 0},go=e=>{const t=[],s=[];for(const n of e.getProperties()){if(i.isSpreadAssignment(n))return{analyzable:!1,emptyKeys:[],presentKeys:[]};if(i.isPropertyAssignment(n)){const o=n.getName();t.push(o);const r=n.getInitializer();r&&i.isStringLiteral(r)&&r.getLiteralText()===""&&s.push(o);continue}(i.isShorthandPropertyAssignment(n)||i.isMethodDeclaration(n)||i.isGetAccessorDeclaration(n))&&t.push(n.getName())}return{analyzable:!0,emptyKeys:s,presentKeys:t}},po=(e,t)=>{const s=[];for(const{displayPath:n,filePath:o}of Ie(t)){const r=e.getSourceFile(o)??e.addSourceFileAtPath(o);for(const a of r.getDescendantsOfKind(l.CallExpression)){const c=fo(a);if(c===void 0)continue;const u=a.getArguments()[0],d=u&&i.isObjectLiteralExpression(u)?go(u):{analyzable:!1,emptyKeys:[],presentKeys:[]};s.push({analyzable:d.analyzable,emptyKeys:d.emptyKeys,factory:c,file:n,line:a.getStartLineNumber(),presentKeys:d.presentKeys})}}return s},mo=new Map([["dbRateLimit",2],["rateLimit",2],["verifyTurnstileMiddleware",0]]),ho=new Set(["dbRateLimit","rateLimit"]),xo=e=>{if(!e||!i.isObjectLiteralExpression(e))return!1;const t=e.getProperty("failOpen");return t!==void 0&&i.isPropertyAssignment(t)&&t.getInitializer()?.getKind()===l.TrueKeyword},Eo=(e,t)=>{const s=y(e.getExpression());if(s===void 0)return;const n=mo.get(s);if(n!==void 0)return{callee:s,exportName:v(e),failOpen:xo(e.getArguments()[n]),file:t,limitName:ho.has(s)?Rt(e):"",line:e.getStartLineNumber()}},vo=(e,t)=>I(e,t,Eo),So=new Set(["boolean","number","object","string"]),yo=e=>{const t=e.getName();if(!So.has(t))return;const s=e.getExpression();if(!i.isPropertyAccessExpression(s))return;if(s.getName()==="flags"&&ye(s.getExpression()))return t;const n=s.getExpression();if(s.getName()==="details"&&i.isPropertyAccessExpression(n)&&n.getName()==="flags"&&ye(n.getExpression()))return t},Ao=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t))return;const s=yo(t);if(s===void 0)return;const n=e.getArguments()[0];if(!n||!(i.isStringLiteral(n)||i.isNoSubstitutionTemplateLiteral(n)))return;const o=n.getLiteralValue();return o.length>0?{key:o,type:s}:void 0},No=(e,t)=>{const s=new Map;for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);for(const r of o.getDescendantsOfKind(l.CallExpression)){const a=Ao(r);a&&!s.has(a.key)&&s.set(a.key,a.type)}}return[...s.entries()].map(([n,o])=>({key:n,type:o})).toSorted((n,o)=>n.key.localeCompare(o.key))},bo=e=>{const t=e.getInitializer();if(!t||!i.isCallExpression(t))return;const s=z(t);if(s?.kind!=="query")return;const n=zs(t,s.receiver);return n?{exportName:e.getName(),handler:n}:void 0},gt=e=>{const t=e.getParent();return t&&i.isPropertyAccessExpression(t)&&t.getExpression()===e?t:void 0},Po=e=>{if(!i.isPropertyAccessExpression(e)||e.getName()!=="flags")return;const t=e.getExpression();if(!i.isIdentifier(t)||t.getText()!=="ctx")return;const s=gt(e);if(!s)return"ctx.flags";if(s.getName()==="details"){const n=gt(s);return n?`ctx.flags.details.${n.getName()}`:"ctx.flags.details"}return`ctx.flags.${s.getName()}`},Io=(e,t)=>{const s=[];for(const n of e.handler.getDescendantsOfKind(l.PropertyAccessExpression)){const o=Po(n);o!==void 0&&s.push({callee:o,exportName:e.exportName,file:t,line:n.getStartLineNumber()})}return s},wo=(e,t)=>{const s=[];for(const n of e.getVariableStatements())if(n.isExported())for(const o of n.getDeclarations()){const r=bo(o);r&&s.push(...Io(r,t))}return s},To=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...wo(o,S(t,n)))}return s},Co=e=>{if(!i.isPropertyAccessExpression(e)||e.getName()!=="boolean")return!1;const t=e.getExpression();return i.isPropertyAccessExpression(t)&&t.getName()==="flags"&&ye(t.getExpression())},Fo=e=>{if(e?.getKind()===l.TrueKeyword)return!0;if(e?.getKind()===l.FalseKeyword)return!1},Oo=(e,t)=>{if(!Co(e.getExpression()))return;const[s,n]=e.getArguments();if(!s||!(i.isStringLiteral(s)||i.isNoSubstitutionTemplateLiteral(s)))return;const o=s.getLiteralValue(),r=Fo(n);if(!(o.length===0||r===void 0))return{defaultValue:r,exportName:v(e),file:t,key:o,line:e.getStartLineNumber()}},Ro=(e,t)=>I(e,t,Oo),Lo=e=>{const t=e.getType().getProperty("~standard");if(!t)return;const s=t.getTypeAtLocation(e).getProperty("types");if(!s)return;const n=s.getTypeAtLocation(e).getNonNullableType().getProperty("output");if(!n)return;const o=n.getTypeAtLocation(e),r=o.getText(e);if(!r||r==="any"||r==="never"||tn(r))return;const a=e.getSourceFile().getFilePath();return sn(o,e,a)?nn(o,e,a,0,new Set):r},Do=e=>{const t=e.getExpression();return i.isPropertyAccessExpression(t)&&t.getName()==="withGeoIndex"},ko=e=>{const t=e.getArguments()[0];return t&&i.isStringLiteral(t)?t.getLiteralText():""},Mo=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=S(t,n);for(const a of o.getDescendantsOfKind(l.CallExpression))Do(a)&&s.push({file:r,indexName:ko(a),line:a.getStartLineNumber()})}return s},H=e=>e!==void 0&&(i.isArrowFunction(e)||i.isFunctionExpression(e))?e:void 0,qt=e=>{const t=e.getArguments()[0],s=H(t);if(s!==void 0)return s;if(t===void 0||!i.isObjectLiteralExpression(t))return;const n=t.getProperty("handler");return n!==void 0&&i.isPropertyAssignment(n)?H(n.getInitializer()):void 0},Ko=new Set(["delete","get","head","options","patch","post","put"]),_o=new Set(["handler","stream"]),zo=new Set(["runAction","runMutation"]),Uo=new Set(["delete","insert","insertManyUnsafe","patch","replace"]),ne=(e,t)=>e!==void 0&&i.isIdentifier(e)&&e.getText()===t,pt=(e,t)=>{const s=e.getParameters()[0];if(s===void 0)return;const n=s.getNameNode();if(t)return i.isIdentifier(n)?n.getText():void 0;if(i.isObjectBindingPattern(n)){for(const o of n.getElements())if((o.getPropertyNameNode()?.getText()??o.getNameNode().getText())==="ctx"){const a=o.getNameNode();return i.isIdentifier(a)?a.getText():void 0}}},mt=(e,t)=>{const s=e.getBody(),n=s.getDescendantsOfKind(l.CallExpression);i.isCallExpression(s)&&n.unshift(s);for(const o of n){const r=o.getExpression();if(!i.isPropertyAccessExpression(r))continue;const a=r.getName(),c=r.getExpression();if(zo.has(a)&&ne(c,t))return a;if(Uo.has(a)&&i.isPropertyAccessExpression(c)&&c.getName()==="db"&&ne(c.getExpression(),t))return`db.${a}`}},ht=(e,t)=>{const s=e.getBody();for(const n of s.getDescendantsOfKind(l.PropertyAccessExpression))if(n.getName()==="auth"&&ne(n.getExpression(),t))return!0;for(const n of s.getDescendantsOfKind(l.VariableDeclaration)){const o=n.getNameNode();if(!(!i.isObjectBindingPattern(o)||!ne(n.getInitializer(),t))){for(const r of o.getElements())if((r.getPropertyNameNode()?.getText()??r.getNameNode().getText())==="auth")return!0}}return!1},Bo=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!_o.has(t.getName()))return;let s=t.getExpression();for(;i.isCallExpression(s);){const n=s.getExpression();if(!i.isPropertyAccessExpression(n))return;const o=n.getName();if(Ko.has(o)){const r=n.getExpression();return i.isIdentifier(r)&&r.getText()==="httpRoute"?o.toUpperCase():void 0}s=n.getExpression()}},$o=(e,t)=>{const s=e.getExpression();if(i.isIdentifier(s)&&s.getText()==="httpAction"){const c=H(e.getArguments()[0]),u=c&&pt(c,!0);if(!c||u===void 0)return;const d=mt(c,u);return d===void 0?void 0:{exportName:v(e),file:t,kind:"httpAction",line:e.getStartLineNumber(),readsAuth:ht(c,u),sideEffect:d}}const n=Bo(e);if(n===void 0)return;const o=H(e.getArguments()[0]),r=o&&pt(o,!1);if(!o||r===void 0)return;const a=mt(o,r);return a===void 0?void 0:{exportName:v(e),file:t,kind:"httpRoute",line:e.getStartLineNumber(),method:n,readsAuth:ht(o,r),sideEffect:a}},qo=(e,t)=>I(e,t,$o),Vo=new Set(["btoa","encodeURI","encodeURIComponent","isSafeHeaderValue","Number","parseFloat","parseInt"]),jo=new Set(["append","set"]),Vt=e=>e!==void 0&&(i.isStringLiteral(e)||i.isNoSubstitutionTemplateLiteral(e))?e.getLiteralText():"",xt=(e,t)=>(i.isCallExpression(e)?[e,...e.getDescendantsOfKind(l.CallExpression)]:e.getDescendantsOfKind(l.CallExpression)).some(n=>Vo.has(y(n.getExpression())??"")&&Zs(n,t)),Wo=(e,t)=>{if(xt(e,t))return!0;const s=le(e);return s!==void 0&&xt(s,t)},be=(e,t)=>Qs(e,t)&&!Wo(e,t),Ho=e=>{if(i.isPropertyAccessExpression(e)&&e.getName()==="headers")return!0;const t=le(e);return t!==void 0&&i.isNewExpression(t)&&y(t.getExpression())==="Headers"},re=e=>{if(e===void 0)return;if(i.isObjectLiteralExpression(e))return e;const t=le(e);return t!==void 0&&i.isObjectLiteralExpression(t)?t:void 0},Te=(e,t,s)=>{for(const n of e.getProperties())if(i.isPropertyAssignment(n)){const o=n.getInitializer();o!==void 0&&be(o,s.requestName)&&s.rows.push({exportName:s.exportName,file:s.relativePath,headerName:Vt(n.getNameNode()),line:o.getStartLineNumber(),via:t})}else if(i.isShorthandPropertyAssignment(n)){const o=n.getNameNode();be(o,s.requestName)&&s.rows.push({exportName:s.exportName,file:s.relativePath,headerName:n.getName(),line:o.getStartLineNumber(),via:t})}else if(i.isSpreadAssignment(n)){const o=re(n.getExpression());o!==void 0&&Te(o,t,s)}},jt=(e,t)=>{const s=re(e);if(s===void 0)return;const n=s.getProperty("headers");if(n===void 0||!i.isPropertyAssignment(n))return;const o=re(n.getInitializer());o!==void 0&&Te(o,"response-init",t)},Go=(e,t)=>{const s=y(e.getExpression());if(s==="Response")jt(e.getArguments()[1],t);else if(s==="Headers"){const n=re(e.getArguments()[0]);n!==void 0&&Te(n,"headers-ctor",t)}},Yo=(e,t)=>{const s=e.getExpression();if(!i.isPropertyAccessExpression(s))return;const n=s.getName(),o=s.getExpression();if(n==="json"&&i.isIdentifier(o)&&o.getText()==="Response"){jt(e.getArguments()[1],t);return}if(jo.has(n)&&Ho(o)){const r=e.getArguments()[1];r!==void 0&&be(r,t.requestName)&&t.rows.push({exportName:t.exportName,file:t.relativePath,headerName:Vt(e.getArguments()[0]),line:r.getStartLineNumber(),via:n==="set"?"headers-set":"headers-append"})}},Xo=(e,t)=>{for(const s of e.getDescendantsOfKind(l.NewExpression))Go(s,t);for(const s of e.getDescendantsOfKind(l.CallExpression))Yo(s,t)},Qo=(e,t)=>{const s=e.getExpression();if(!i.isIdentifier(s)||s.getText()!=="httpAction")return[];const n=H(e.getArguments()[0]);if(n===void 0)return[];const o=n.getParameters()[1];if(o===void 0)return[];const r=o.getNameNode();if(!i.isIdentifier(r))return[];const a=[];return Xo(n,{exportName:v(e),relativePath:t,requestName:r.getText(),rows:a}),a},Zo=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression))s.push(...Qo(n,t));return s},Jo=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Zo(o,S(t,n)))}return s},ei=new Set(["auth","context.auth","ctx.auth"]),ti="userId",si=e=>{const t=new Set;for(const s of e.getProperties()){if(i.isSpreadAssignment(s))return;(i.isPropertyAssignment(s)||i.isShorthandPropertyAssignment(s)||i.isMethodDeclaration(s))&&t.add(s.getName())}return t},ni=(e,t)=>{const s=f(t,_t);if(!b(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);for(const o of n.getDescendantsOfKind(l.CallExpression)){if(y(o.getExpression())!=="defineIdentity")continue;const[r]=o.getArguments();return r&&i.isObjectLiteralExpression(r)?si(r):void 0}},Et=e=>{if(!(e===void 0||!i.isPropertyAccessExpression(e)||e.getName()!=="identity"))return ei.has(e.getExpression().getText())?e:void 0},ri=e=>{if(i.isPropertyAccessExpression(e)&&Et(e.getExpression())!==void 0)return e.getName();if(i.isElementAccessExpression(e)&&Et(e.getExpression())!==void 0){const t=e.getArgumentExpression();return t&&i.isStringLiteral(t)?t.getLiteralValue():void 0}},oi=(e,t,s)=>{const n=[];for(const o of e.getDescendants()){const r=ri(o);r!==void 0&&n.push({declared:r===ti||s.has(r),exportName:v(o),file:t,key:r,line:o.getStartLineNumber()})}return n},ii=(e,t)=>{const s=ni(e,t);if(s===void 0)return[];const n=[];for(const o of m(t)){const r=e.getSourceFile(o)??e.addSourceFileAtPath(o);n.push(...oi(r,S(t,o),s))}return n},ai=(e,t)=>{if(y(e.getExpression())!=="buildImageDeliveryUrl")return;const s=e.getArguments()[0];if(!s)return;const n=N(s,"key");if(!(!n||!R(n)||_(n)))return{exportName:v(e),file:t,line:e.getStartLineNumber()}},ci=(e,t)=>I(e,t,ai),li=new Set(["delete","get","getRaw","getWithMetadata","put"]),ui=(e,t,s=[])=>{const n=new Map(s.map(r=>[`${r.filePath}:${r.exportName}`,r.visibility]));return ue(e,t,{argIndex:0,matchReceiver:r=>r==="ctx.kv"||r.startsWith("ctx.kv."),methods:li}).map(r=>{const a=n.get(`${r.file}:${r.exportName}`);return a===void 0?r:{...r,visibility:a}})},di=new Set(["queue","send"]),vt=new Set(["bcc","cc","to"]),fi=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName();if(!di.has(t))return;const s=e.getExpression().getText();return s==="ctx.mail"||s==="ctx.email"?t:void 0},gi=e=>i.isObjectLiteralExpression(e)?e.getProperties().some(t=>{if(i.isShorthandPropertyAssignment(t)){const n=t.getNameNode();return vt.has(t.getName())&&R(n)&&!_(n)}if(!i.isPropertyAssignment(t)||!vt.has(t.getName()))return!1;const s=t.getInitializer();return s!==void 0&&R(s)&&!_(s)}):!1,pi=(e,t)=>{const s=fi(e.getExpression());if(s===void 0)return;const n=e.getArguments()[0];if(!(!n||!gi(n)))return{exportName:v(e),file:t,line:e.getStartLineNumber(),method:s}},mi=(e,t)=>I(e,t,pi),hi=e=>i.isPropertyAssignment(e)||i.isMethodDeclaration(e)||i.isGetAccessorDeclaration(e)?i.isComputedPropertyName(e.getNameNode()):!1,xi=e=>i.isPropertyAssignment(e)||i.isShorthandPropertyAssignment(e)||i.isMethodDeclaration(e)||i.isGetAccessorDeclaration(e)?hi(e):!0,Wt=(e,t=!1)=>{for(const s of e.getProperties()){if(xi(s))return!0;if(t)continue;if(!i.isPropertyAssignment(s))return!0;const n=s.getInitializer();if(!n||!i.isObjectLiteralExpression(n)||Wt(n,!0))return!0}return!1},Ei=(e,t)=>{for(const s of m(t)){const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);for(const{receiver:o}of Mt(n))for(const r of we(o)){const a=r.getArguments()[0];if(a!==void 0&&(!i.isObjectLiteralExpression(a)||Wt(a)))return!0}}return!1},vi=e=>{const t=e.getArguments()[0];if(!t||!i.isObjectLiteralExpression(t))return[];const s=[];for(const n of t.getProperties()){const o=se(n);if(o===void 0||!i.isPropertyAssignment(n))continue;const r=n.getInitializer();if(!(!r||!i.isObjectLiteralExpression(r)))for(const a of r.getProperties()){const c=se(a);c!==void 0&&s.push({column:c,strategy:kt(a),table:o})}}return s},Si=(e,t)=>{const s=new Map;for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);for(const{receiver:r}of Mt(o))for(const a of we(r))for(const c of vi(a)){const u=`${c.table}\0${c.column}`;s.has(u)||s.set(u,c)}}return{columns:[...s.values()]}},yi=(e,t,s)=>{const n=e.getArguments()[0];if(!n||!i.isObjectLiteralExpression(n))return[];const o=[];for(const r of n.getProperties()){const a=se(r);if(a===void 0||!i.isPropertyAssignment(r))continue;const c=r.getInitializer();if(!(!c||!i.isObjectLiteralExpression(c)))for(const u of c.getProperties()){const d=se(u);if(d===void 0)continue;const E=kt(u);E!=="custom"&&o.push({column:d,exportName:t,file:s,line:u.getStartLineNumber(),strategy:E,table:a})}}return o},Ai=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&i.isCallExpression(s)?z(s):void 0;return n?.receiver?we(n.receiver).flatMap(o=>yi(o,e.getName(),t)):[]},Ni=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=S(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...Ai(c,r))}return s},bi=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||t.getName()!=="replace")return!1;const s=t.getExpression();return k(s)},Pi=e=>{const t=e.getArguments()[0];if(t===void 0||!i.isObjectLiteralExpression(t))return;const s=t.getProperty("server");if(s!==void 0)return i.isPropertyAssignment(s)?s.getInitializer():s},Ii=e=>{if(!e.isExported())return;const t=e.getInitializer();if(t?.getKind()!==l.CallExpression)return;const s=t;return un(s.getExpression())?s:void 0},wi=e=>{const t=Ii(e),s=t===void 0?void 0:Pi(t);if(s===void 0)return[];const n=e.getNameNode(),o=i.isIdentifier(n)?n.getText():"";return s.getDescendantsOfKind(l.CallExpression).filter(r=>bi(r)).map(r=>({exportName:o,file:"lunora/mutators.ts",line:r.getStartLineNumber()}))},Ti=e=>e.getVariableDeclarations().flatMap(t=>wi(t)),Ci=(e,t)=>{const s=f(t,ln);if(!b(s))return[];const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);return Ti(n)},Fi=new Set(["delete","get","patch"]),Oi=new Set(["accountId","authorId","companyId","createdBy","createdById","customerId","groupId","memberId","organizationId","orgId","ownerId","projectId","teamId","tenantId","userId","workspaceId"]),Ri=new Set(["auth","identity","session","user"]),Li=new Set([l.EqualsEqualsEqualsToken,l.EqualsEqualsToken,l.ExclamationEqualsEqualsToken,l.ExclamationEqualsToken]),Di=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||t.getName()!=="normalizeId"||!k(t.getExpression()))return;const s=e.getArguments()[0];return s&&i.isStringLiteral(s)?s.getLiteralText():""},ki=e=>{let t=e,s=t.getParent();for(;s!==void 0&&(i.isAsExpression(s)||i.isParenthesizedExpression(s)||i.isNonNullExpression(s));)t=s,s=t.getParent();if(s===void 0||!i.isVariableDeclaration(s))return;const n=s.getNameNode();return i.isIdentifier(n)?n.getText():void 0},Mi=(e,t)=>e.getDescendantsOfKind(l.Identifier).some(s=>s.getText()===t),Ki=e=>i.isThrowStatement(e)||i.isReturnStatement(e)||e.getDescendantsOfKind(l.ThrowStatement).length>0||e.getDescendantsOfKind(l.ReturnStatement).length>0,_i=(e,t)=>e.getDescendantsOfKind(l.IfStatement).some(s=>Mi(s.getExpression(),t)&&Ki(s.getThenStatement())),zi=(e,t)=>{for(const s of e.getDescendantsOfKind(l.CallExpression)){const n=s.getExpression();if(!i.isPropertyAccessExpression(n))continue;const o=n.getName();if(!Fi.has(o))continue;const r=n.getExpression();if(!(k(r)||i.isPropertyAccessExpression(r)&&k(r.getExpression())))continue;const c=s.getArguments()[0];if(c!==void 0&&i.isIdentifier(c)&&c.getText()===t)return o}},Ui=e=>{let t=e;for(;i.isPropertyAccessExpression(t)||i.isElementAccessExpression(t)||i.isNonNullExpression(t)||i.isParenthesizedExpression(t)||i.isAsExpression(t)||i.isAwaitExpression(t);)t=t.getExpression();return i.isIdentifier(t)?t.getText():void 0},Bi=e=>e.getDescendantsOfKind(l.CallExpression).some(t=>t.getArguments().some(s=>Ui(s)==="ctx")),$i=e=>e.getDescendantsOfKind(l.BinaryExpression).some(t=>Li.has(t.getOperatorToken().getKind())?i.isPropertyAccessExpression(t.getLeft())||i.isPropertyAccessExpression(t.getRight()):!1),qi=e=>{for(const t of e.getDescendantsOfKind(l.Identifier))if(Oi.has(t.getText()))return!0;for(const t of e.getDescendantsOfKind(l.PropertyAccessExpression)){const s=t.getExpression();if(i.isIdentifier(s)&&s.getText()==="ctx"&&Ri.has(t.getName()))return!0}return Bi(e)||$i(e)},Vi=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer();if(s===void 0||!i.isCallExpression(s))return[];const n=z(s);if(n?.kind!=="query"&&n?.kind!=="mutation")return[];const o=qt(s);if(o===void 0)return[];const r=n.receiver!==void 0&&Dt(n.receiver,"use","rls"),a=qi(o),c=new Set,u=[];for(const d of o.getDescendantsOfKind(l.CallExpression)){const E=Di(d);if(E===void 0)continue;const x=ki(d);if(x===void 0||c.has(x)||!_i(o,x))continue;const P=zi(o,x);P!==void 0&&(c.add(x),u.push({exportName:e.getName(),file:t,line:d.getStartLineNumber(),mentionsOwnership:a,sinkMethod:P,table:E,usesRls:r,visibility:n.visibility}))}return u},ji=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=S(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...Vi(c,r))}return s},Wi=new Set(["accountId","authorId","createdBy","createdById","organizationId","orgId","ownerId","tenantId","updatedBy","userId","workspaceId"]),Hi=new Set(["insert","insertManyUnsafe","patch","replace"]),Gi=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName();if(!Hi.has(t))return;const s=e.getExpression();if(!i.isPropertyAccessExpression(s)||s.getName()!=="db")return;const n=s.getExpression();return i.isIdentifier(n)&&n.getText()==="ctx"?t:void 0},Yi=(e,t)=>{if(t!=="insertManyUnsafe")return i.isObjectLiteralExpression(e)?[e]:[];if(!i.isArrayLiteralExpression(e))return[];const s=[];for(const n of e.getElements())i.isObjectLiteralExpression(n)&&s.push(n);return s},Xi=(e,t,s,n)=>{const o=[];for(const r of e.getProperties()){let a,c;i.isPropertyAssignment(r)?(a=r.getName(),c=r.getInitializer()):i.isShorthandPropertyAssignment(r)&&(a=r.getName(),c=r.getNameNode()),!(a===void 0||c===void 0||!Wi.has(a))&&R(c)&&!_(c)&&o.push({exportName:v(s),field:a,file:n,line:s.getStartLineNumber(),method:t})}return o},Qi=(e,t)=>{const s=Gi(e.getExpression());if(s===void 0)return[];const n=e.getArguments()[1];return n?Yi(n,s).flatMap(o=>Xi(o,s,e,t)):[]},Zi=(e,t,s)=>{const n=[];for(const o of e.getDescendantsOfKind(l.CallExpression))for(const r of Qi(o,t)){const a=s(r.exportName);n.push(a===void 0?r:{...r,visibility:a})}return n},Ji=(e,t,s=[])=>{const n=[],o=new Map(s.map(r=>[`${r.filePath}:${r.exportName}`,r.visibility]));for(const r of m(t)){const a=e.getSourceFile(r)??e.addSourceFileAtPath(r),c=S(t,r);n.push(...Zi(a,c,u=>o.get(`${c}:${u}`)))}return n},ea=["providerSubscriptionId","state"],ta=["providerEventId","processedAt"],St=(e,t)=>t.every(s=>s in e.shape),sa=e=>{const t=e.find(n=>n.name==="subscriptions"),s=e.find(n=>n.name==="events");return t!==void 0&&s!==void 0&&St(t,ea)&&St(s,ta)},na=new Set(["createAutumnAdapter","createDodoPaymentsAdapter","createPolarAdapter","createStripeAdapter"]),ra=e=>e&&i.isNumericLiteral(e)?Number(e.getText()):void 0,oa=e=>{const t=e.getProperty("webhookToleranceSeconds");return t&&i.isPropertyAssignment(t)?ra(t.getInitializer()):void 0},ia=(e,t)=>{const s=y(e.getExpression());if(s===void 0||!na.has(s))return;const[n]=e.getArguments(),o=n&&i.isObjectLiteralExpression(n)?oa(n):void 0;return{callee:s,exportName:v(e),file:t,line:e.getStartLineNumber(),...o===void 0?{}:{toleranceSeconds:o}}},aa=(e,t)=>I(e,t,ia),ca=new Set(["defineQueue","defineWorkflow"]),la=new Set(["run","runAction","runMutation","runQuery"]),ua=new Set(["api","internal"]),da=e=>{const t=e.getExpression();return i.isIdentifier(t)?t.getText():void 0},fa=e=>{const t=e.getArguments()[0];if(!t||!i.isObjectLiteralExpression(t))return;const s=t.getProperty("handler");if(s===void 0||!i.isPropertyAssignment(s))return;const n=s.getInitializer();if(n&&(i.isArrowFunction(n)||i.isFunctionExpression(n)))return n},Ht=(e,t)=>{const s=e.getParameters()[t]?.getNameNode();return s&&i.isIdentifier(s)?s.getText():void 0},Gt=(e,t)=>e===t||e.startsWith(`${t}.`),Yt=e=>{const t=e.getDescendantsOfKind(l.PropertyAccessExpression);return i.isPropertyAccessExpression(e)&&t.push(e),t},yt=e=>{const t=e.getParent();return i.isPropertyAccessExpression(t)&&t.getNameNode()===e||i.isPropertyAssignment(t)&&t.getNameNode()===e?!1:!(i.isBindingElement(t)&&t.getNameNode()===e)},Xt=e=>{const t=e.getDescendantsOfKind(l.Identifier).filter(s=>yt(s));return i.isIdentifier(e)&&yt(e)&&t.push(e),t},ga=e=>{if(!i.isVariableDeclaration(e))return[];const t=e.getNameNode();return i.isIdentifier(t)?[t.getText()]:t.getDescendantsOfKind(l.BindingElement).map(s=>s.getName())},pa=e=>{const t=Ht(e,1);if(t===void 0)return[];const s=[`${t}.messages`];for(const n of e.getDescendantsOfKind(l.ForOfStatement)){if(n.getExpression().getText()!==`${t}.messages`)continue;const o=n.getInitializer(),r=i.isVariableDeclarationList(o)?o.getDeclarations()[0]?.getNameNode():void 0;r&&i.isIdentifier(r)&&s.push(`${r.getText()}.body`)}return s},ma=(e,t,s)=>{const n=t==="workflow"?[`${s}.params`]:pa(e),o=new Set,r=a=>Yt(a).some(c=>n.some(u=>Gt(c.getText(),u)))?!0:Xt(a).some(c=>o.has(c.getText()));for(const a of e.getDescendantsOfKind(l.VariableDeclaration)){const c=a.getInitializer();if(c&&r(c))for(const u of ga(a))o.add(u)}return{names:o,prefixes:n}},ha=(e,t)=>Yt(e).some(s=>t.prefixes.some(n=>Gt(s.getText(),n)))?!0:Xt(e).some(s=>t.names.has(s.getText())),xa=e=>{if(e===void 0||!i.isPropertyAccessExpression(e))return;const t=[];let s=e;for(;i.isPropertyAccessExpression(s);)t.unshift(s.getName()),s=s.getExpression();const n=t.at(-1);if(!(n===void 0||!i.isIdentifier(s)||!ua.has(s.getText())||t.length<2))return{exportName:n,file:t.slice(0,-1).join("/")}},Ea=(e,t,s)=>{const n=Ht(e,0);if(n===void 0)return[];const o=ma(e,t,n),r=[];for(const a of e.getDescendantsOfKind(l.CallExpression)){const c=a.getExpression();if(!i.isPropertyAccessExpression(c)||!la.has(c.getName())||c.getExpression().getText()!==n)continue;const u=a.getArguments()[1];if(!u||!ha(u,o))continue;const d=xa(a.getArguments()[0]);d!==void 0&&r.push({dispatchKind:t,file:s,handlerExport:v(a),line:a.getStartLineNumber(),targetExport:d.exportName,targetFile:d.file})}return r},va=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=da(n);if(o===void 0||!ca.has(o))continue;const r=fa(n);r!==void 0&&s.push(...Ea(r,o==="defineQueue"?"queue":"workflow",t))}return s},Sa=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...va(o,S(t,n)))}return s},At={dbRateLimit:"usesRateLimit",emailGateMiddleware:"usesEmailGate",mask:"usesMask",rateLimit:"usesRateLimit",rls:"usesRls",verifyTurnstileMiddleware:"usesCaptcha"},Nt=new Set(["account","credential","member","passkey","session","user"]),ya=e=>e.replaceAll(/[-_]/gu," ").replaceAll(/([a-z0-9])([A-Z])/gu,"$1 $2").split(" ").filter(Boolean).map(t=>t.toLowerCase()),Aa=e=>{const s=ya(e).at(-1);if(!s)return!1;const n=s.endsWith("s")?s.slice(0,-1):s;return Nt.has(s)||Nt.has(n)},Na=e=>{const t=e.replaceAll(/[^a-z0-9]/giu,"").toLowerCase();return t.endsWith("email")||t.endsWith("emailaddress")},ba=(e,t)=>{const{objects:s,opaque:n}=Bt(e,t);return Pr(s).some(o=>Na(o))?!0:n?void 0:!1},Pa=e=>{const t=e.getArguments()[0];return!t||!i.isObjectLiteralExpression(t)?{usesCaptcha:!1,usesRateLimit:!1}:{usesCaptcha:!!t.getProperty("captcha"),usesRateLimit:!!t.getProperty("rateLimit")}},Ia=e=>{if(i.isCallExpression(e))return e;if(!i.isIdentifier(e))return;const s=e.getSourceFile().getVariableDeclaration(e.getText())?.getInitializer();return s&&i.isCallExpression(s)?s:void 0},te={usesCaptcha:!1,usesEmailGate:!1,usesMask:!1,usesRateLimit:!1,usesRls:!1},wa=e=>{const t=Ia(e),s=t?y(t.getExpression()):void 0;if(t&&s==="protectPublic"){const n=Pa(t);return{...te,usesCaptcha:n.usesCaptcha,usesRateLimit:n.usesRateLimit}}return s!==void 0&&s in At?{...te,[At[s]]:!0}:te},Ta=e=>{const t={...te};let s=e;for(;i.isCallExpression(s);){const n=s.getExpression();if(!i.isPropertyAccessExpression(n))break;const o=n.getName()==="use"?s.getArguments()[0]:void 0;if(o){const r=wa(o);t.usesCaptcha||=r.usesCaptcha,t.usesEmailGate||=r.usesEmailGate,t.usesMask||=r.usesMask,t.usesRateLimit||=r.usesRateLimit,t.usesRls||=r.usesRls}s=n.getExpression()}return t},Ca=new Set(["insert","insertMany","insertManyUnsafe","replace"]),Fa=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!Ca.has(t.getName()))return!1;const s=t.getExpression();if(!k(s))return!1;const o=e.getArguments()[0];return!o||!(i.isStringLiteral(o)||i.isNoSubstitutionTemplateLiteral(o))?!1:Aa(o.getLiteralText())},Oa=new Set(["create","runAfter","runAt","send","sendBatch"]),Ra=new Set(["queues","scheduler","workflows"]),La=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!Oa.has(t.getName()))return!1;let s=t.getExpression();for(;i.isCallExpression(s)||i.isElementAccessExpression(s)||i.isPropertyAccessExpression(s);){if(i.isPropertyAccessExpression(s)&&Ra.has(s.getName())){const n=s.getExpression();if(i.isIdentifier(n)&&n.getText()==="ctx")return!0}s=s.getExpression()}return!1},Da=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||t.getName()!=="insertManyUnsafe")return!1;const s=t.getExpression();return k(s)},Qt=new Set(["generateObject","generateText","streamObject","streamText"]),ka=e=>{const t=y(e.getExpression());return t!==void 0&&Qt.has(t)},Ma=e=>{const t=y(e.getExpression());if(t===void 0||!Qt.has(t))return!1;const s=e.getArguments()[0];return!s||!i.isObjectLiteralExpression(s)||s.getProperties().some(n=>i.isSpreadAssignment(n))?!1:!s.getProperty("maxOutputTokens")},Ka=new Set(["log","span","trace"]),_a=new Set(["ai"]),za=new Set(["email","mail"]),Ua=new Set(["ai","browser","fetch","mail","notify","queues","sql","storage","workflows"]),ve=(e,t)=>e.getDescendantsOfKind(l.PropertyAccessExpression).some(s=>{if(!t.has(s.getName()))return!1;const n=s.getExpression();return i.isIdentifier(n)&&n.getText()==="ctx"}),Ba=new Set([l.ArrowFunction,l.FunctionDeclaration,l.FunctionExpression,l.GetAccessor,l.MethodDeclaration,l.SetAccessor]),$a=new Set(["every","filter","flatMap","forEach","map","some"]),qa=new Set(["all","allSettled","race"]),Va=e=>{const t=e.getParent();if(!t||!i.isCallExpression(t)||!t.getArguments().includes(e))return;const s=t.getExpression();if(!i.isPropertyAccessExpression(s))return;const n=s.getName();if($a.has(n))return t;const o=s.getExpression();if(i.isIdentifier(o)&&o.getText()==="Promise"&&qa.has(n))return t},ja=e=>{let t=e.getParent();for(;t;){if(i.isTryStatement(t)){const s=t.getTryBlock();if(e.getPos()>=s.getPos()&&e.getEnd()<=s.getEnd())return!0}if(Ba.has(t.getKind())){const s=Va(t);if(!s)return!1;t=s;continue}t=t.getParent()}return!1},Wa=e=>{let t=e;for(;;){const s=t.getParent();if(!i.isPropertyAccessExpression(s)||s.getExpression()!==t)return!1;if(s.getName()==="catch")return!0;if(s.getName()!=="then"&&s.getName()!=="finally")return!1;const n=s.getParent();if(!i.isCallExpression(n)||n.getExpression()!==s)return!1;t=n}},Ha=e=>{let t=e;for(;;){const s=t.getParent();if(i.isPropertyAccessExpression(s)&&s.getExpression()===t){t=s;continue}return i.isCallExpression(s)&&s.getExpression()===t?s:void 0}},Ga=e=>{let t=!1,s=!0;for(const n of e.getDescendantsOfKind(l.PropertyAccessExpression)){if(!Ua.has(n.getName()))continue;const o=n.getExpression();if(!i.isIdentifier(o)||o.getText()!=="ctx")continue;const r=Ha(n);r&&(t=!0,!ja(r)&&!Wa(r)&&(s=!1))}return{handlesErrors:t&&s,reachesOutbound:t}},Ya=e=>e.getDescendantsOfKind(l.ThrowStatement).some(t=>{const s=t.getExpression();if(!i.isNewExpression(s))return!1;const n=s.getExpression();return i.isIdentifier(n)&&n.getText()==="Error"}),bt="lunora-advisor-exempt",Xa=/^[\s*/]+/u,Qa=/[\w-]/u,Za=e=>{const s=(e.getFirstAncestorByKind(l.VariableStatement)??e).getLeadingCommentRanges().map(n=>n.getText()).join(`
|
|
6
|
+
`);for(const n of s.split(`
|
|
7
|
+
`)){const o=n.replace(Xa,"");if(!o.startsWith(bt))continue;const r=o.slice(bt.length);if(Qa.test(r.charAt(0)))continue;const a=r.indexOf("--");return{exempt:!0,exemptReason:(a===-1?"":r.slice(a+2).split("*")[0]??"").trim()}}return{exempt:!1,exemptReason:""}},Ja=e=>{const[t]=e.getArguments();if(t){if(i.isObjectLiteralExpression(t)){const s=t.getProperty("handler");return s?i.isPropertyAssignment(s)?s.getInitializer():i.isShorthandPropertyAssignment(s)?s.getNameNode():i.isMethodDeclaration(s)?s:void 0:void 0}return t}},ec=(e,t)=>{const s=Ja(t);if(!s)return;if(i.isArrowFunction(s)||i.isFunctionExpression(s)||i.isMethodDeclaration(s))return e;if(!i.isIdentifier(s))return;const n=s.getSourceFile(),o=s.getText(),r=n.getVariableDeclaration(o)?.getInitializer();return r&&(i.isArrowFunction(r)||i.isFunctionExpression(r))?r:n.getFunction(o)},tc=e=>{let t=!1,s=!1,n=!1,o=!1,r=!1;for(const u of e.getDescendantsOfKind(l.CallExpression))if(Fa(u)&&(r=!0),La(u)&&(t=!0),Da(u)&&(o=!0),ka(u)&&(s=!0),Ma(u)&&(n=!0),r&&t&&o&&n)break;const{handlesErrors:a,reachesOutbound:c}=Ga(e);return{callsMail:ve(e,za),emitsEvent:ve(e,Ka),fanOut:t,handlesErrors:a,reachesOutbound:c,runsAiGeneration:s||ve(e,_a),throwsBareError:Ya(e),unboundedAiGeneration:n,usesInsertManyUnsafe:o,writesUserTable:r}},sc=(e,t)=>{const s=e.getInitializer();if(!s||!i.isCallExpression(s))return;const n=z(s);if(!n||n.kind!=="query"&&n.kind!=="mutation"&&n.kind!=="action")return;const o=n.receiver?Ta(n.receiver):{usesCaptcha:!1,usesEmailGate:!1,usesMask:!1,usesRateLimit:!1,usesRls:!1},r=ec(e,s);return{...r?tc(r):{},...Za(e),...o,analyzableBody:r!==void 0,exportName:e.getName(),file:t,hasEmailArg:ba(s,n.receiver),kind:n.kind,visibility:n.visibility}},nc=(e,t)=>{const s=[];for(const n of e.getVariableStatements())if(n.isExported())for(const o of n.getDeclarations()){const r=sc(o,t);r&&s.push(r)}return s},rc=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...nc(o,S(t,n)))}return s},oc=new Set(["dbRateLimit","rateLimit"]),ic=e=>i.isArrowFunction(e)?e.getBody():e,ac=(e,t)=>{const s=y(e.getExpression());if(s===void 0||!oc.has(s))return;const n=e.getArguments()[2];if(!n)return;const o=N(n,"key");if(!o)return;const r=ic(o);if(!(!R(r)||_(r)))return{callee:s,exportName:v(e),file:t,limitName:Rt(e),line:e.getStartLineNumber()}},cc=(e,t)=>I(e,t,ac),lc=new Set(["findFirst","findFirstOrThrow","findMany","get"]),uc=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!lc.has(t.getName()))return;const s=t.getExpression();if(k(s)){const n=e.getArguments()[0];return n&&i.isStringLiteral(n)?n.getLiteralText():""}if(i.isPropertyAccessExpression(s)&&k(s.getExpression()))return s.getName()},dc=e=>{let t=e;for(;i.isCallExpression(t);){const s=t.getExpression();if(!i.isPropertyAccessExpression(s))return;if(s.getName()==="query"&&k(s.getExpression())){const n=t.getArguments()[0];return n&&i.isStringLiteral(n)?n.getLiteralText():""}t=s.getExpression()}},fc=e=>{let t=W(e)??e;for(;i.isAwaitExpression(t);)t=W(t.getExpression())??t.getExpression();return t},Zt=(e,t=!1)=>{const s=fc(e);if(i.isIdentifier(s)){if(t)return;const n=le(s);return n===void 0?void 0:Zt(n,!0)}if(i.isCallExpression(s))return uc(s)??dc(s)},gc=e=>{const t=e.getBody();if(!i.isBlock(t))return[t];const s=[];for(const n of e.getDescendantsOfKind(l.ReturnStatement)){const o=n.getFirstAncestor(a=>i.isArrowFunction(a)||i.isFunctionExpression(a)||i.isFunctionDeclaration(a)),r=n.getExpression();o===e&&r!==void 0&&s.push(r)}return s},pc=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer();if(s===void 0||!i.isCallExpression(s))return[];const n=z(s);if(n?.kind!=="query")return[];const o=qt(s);if(o===void 0)return[];const r=n.receiver!==void 0&&js(n.receiver,"output"),a=n.receiver!==void 0&&Dt(n.receiver,"use","mask"),c=new Set,u=[];for(const d of gc(o)){const E=Zt(d);E===void 0||c.has(E)||(c.add(E),u.push({exportName:e.getName(),file:t,line:d.getStartLineNumber(),table:E,usesMask:a,usesOutput:r,visibility:n.visibility}))}return u},mc=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=S(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...pc(c,r))}return s},hc=e=>{if(!e||!i.isObjectLiteralExpression(e))return[];const t=[];for(const s of e.getProperties())(i.isPropertyAssignment(s)||i.isShorthandPropertyAssignment(s)||i.isMethodDeclaration(s)||i.isGetAccessorDeclaration(s))&&t.push(s.getName());return t},xc=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&i.isCallExpression(s)?z(s):void 0;if(!n)return[];const o=[];for(const r of e.getDescendantsOfKind(l.CallExpression)){const a=Lt(r);if(a===void 0)continue;const c=hc(N(a.options,"with"));c.length!==0&&o.push({exportName:e.getName(),file:t,line:r.getStartLineNumber(),parentTable:a.table,relations:c,visibility:n.visibility})}return o},Ec=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=S(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...xc(c,r))}return s},oe=e=>{if(i.isStringLiteral(e)||i.isNoSubstitutionTemplateLiteral(e))return e.getLiteralText();if(i.isBinaryExpression(e)&&e.getOperatorToken().getKind()===l.PlusToken){const t=oe(e.getLeft()),s=oe(e.getRight());return t!==void 0&&s!==void 0?t+s:void 0}},vc=e=>{let t=e,s=t.getParent();for(;s!==void 0&&i.isBinaryExpression(s)&&s.getOperatorToken().getKind()===l.PlusToken;)t=s,s=t.getParent();return t!==e&&oe(t)!==void 0},Sc=/(?:^|\/)__tests__\//u,yc=/\.(?:spec|test)$/u,Ac=e=>Sc.test(e)||yc.test(e),Nc=e=>{const t=e.getParent();if(t!==void 0){if(i.isVariableDeclaration(t)||i.isPropertyAssignment(t)||i.isPropertySignature(t))return t.getName();if(i.isBinaryExpression(t)&&t.getOperatorToken().getKind()===l.EqualsToken)return t.getLeft().getText()}},bc=(e,t,s)=>Sn(e)?!Ac(s)&&yn(Nc(t)):!0,Pc=(e,t)=>{const s=[],n=[...e.getDescendantsOfKind(l.BinaryExpression),...e.getDescendantsOfKind(l.StringLiteral),...e.getDescendantsOfKind(l.NoSubstitutionTemplateLiteral)],o=new Set;for(const r of n){if(vc(r))continue;const a=oe(r);if(a===void 0)continue;const c=En(a);if(c===void 0||!bc(c,r,t))continue;const u=r.getStartLineNumber(),d=`${String(u)}:${c}`;o.has(d)||(o.add(d),s.push({file:t,kind:c,line:u,preview:vn(a)}))}return s},Ic=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Pc(o,S(t,n)))}return s},wc=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&i.isCallExpression(s)?z(s):void 0;if(!n)return[];const o=[];for(const r of e.getDescendantsOfKind(l.CallExpression)){const a=Lt(r);if(a===void 0)continue;const c=N(a.options,"includeDeleted");if(c===void 0)continue;const u=i.isTrueLiteral(c),d=!u&&R(c);!u&&!d||o.push({exportName:e.getName(),file:t,fromArgs:d,hardcodedTrue:u,line:r.getStartLineNumber(),table:a.table,visibility:n.visibility})}return o},Tc=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=S(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...wc(c,r))}return s},Cc=new Set(["query","unsafe"]),Fc=e=>{if(!i.isPropertyAccessExpression(e)||!Cc.has(e.getName()))return!1;const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||t.getName()!=="sql")return!1;const s=t.getExpression();return i.isIdentifier(s)&&s.getText()==="ctx"},Oc=e=>i.isBinaryExpression(e)||i.isTemplateExpression(e),Rc=e=>e.getFirstAncestorByKind(l.VariableDeclaration)?.getName()??"<module>",Lc=(e,t)=>{if(!Fc(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!Oc(s)))return{exportName:Rc(e),file:t,line:s.getStartLineNumber()}},Dc=(e,t)=>I(e,t,Lc),kc=[["convex",["convex","@convex-dev/"]],["supabase",["@supabase/"]],["firebase",["firebase","@firebase/","firebase-admin"]]],Mc=e=>{for(const[t,s]of kc)for(const n of s)if(e===n||e.startsWith(n.endsWith("/")?n:`${n}/`))return t},Kc=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);for(const r of o.getImportDeclarations()){const a=r.getModuleSpecifierValue(),c=Mc(a);c!==void 0&&s.push({file:S(t,n),line:r.getStartLineNumber(),moduleSpecifier:a,platform:c})}}return s},_c=new Set(["createMultipartUpload","delete","download","generateUploadUrl","get","getMetadata","getPresignedUrl","getSignedUrl","getUrl","head","put","resumeMultipartUpload","store","upload"]),zc=(e,t,s=[])=>{const n=new Map(s.map(r=>[`${r.filePath}:${r.exportName}`,r.visibility]));return ue(e,t,{argIndex:0,matchReceiver:r=>r==="ctx.storage"||r.startsWith("ctx.storage."),methods:_c,requireUnmodifiedReach:!0}).map(r=>{const a=n.get(`${r.file}:${r.exportName}`);return a===void 0?r:{...r,visibility:a}})},Uc=new Map([["generateUploadUrl",1],["getPresignedUrl",1],["getSignedUrl",1],["store",2],["upload",2]]),Bc=e=>e&&i.isNumericLiteral(e)?Number(e.getText()):void 0,$c=e=>{if(e===void 0)return{analyzable:!0,presentKeys:[]};if(!i.isObjectLiteralExpression(e))return{analyzable:!1,presentKeys:[]};const t=[];let s,n=!1;for(const o of e.getProperties()){if(i.isSpreadAssignment(o)){n=!0;continue}if(i.isPropertyAssignment(o)){const r=o.getName();t.push(r),r==="expiresInSeconds"&&(s=Bc(o.getInitializer()));continue}(i.isShorthandPropertyAssignment(o)||i.isMethodDeclaration(o))&&t.push(o.getName())}return{analyzable:!n,expiresInSeconds:s,presentKeys:t}},qc=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName(),s=Uc.get(t);if(s===void 0)return;const n=e.getExpression().getText();return n==="ctx.storage"||n.startsWith("ctx.storage.")?{method:t,optionsIndex:s}:void 0},Vc=(e,t)=>{const s=qc(e.getExpression());if(s!==void 0)return{exportName:v(e),file:t,line:e.getStartLineNumber(),method:s.method,...$c(e.getArguments()[s.optionsIndex])}},jc=(e,t)=>I(e,t,Vc),Wc=(e,t)=>({analytics:e.analytics||t.dependencies.has("@lunora/bindings"),auth:t.dependencies.has("@lunora/auth"),containers:e.container||t.containerCount>0||t.dependencies.has("@lunora/container"),flags:e.flags||t.dependencies.has("@lunora/flags"),kv:e.kv||t.dependencies.has("@lunora/bindings"),mail:e.mail||t.dependencies.has("@lunora/mail"),notifications:e.notify||t.dependencies.has("@lunora/notify"),payments:e.payments||t.hasPaymentTables,queues:t.queueCount>0||t.dependencies.has("@lunora/queue"),scheduler:e.scheduler||t.cronCount>0||t.dependencies.has("@lunora/scheduler"),storage:e.storage||t.storageRuleCount>0||t.storageColumnCount>0||t.dependencies.has("@lunora/storage"),vectors:t.vectorStoreSupported&&t.vectorIndexCount>0,workflows:e.workflows||t.workflowCount>0||t.dependencies.has("@lunora/workflow")}),Hc=new Set(["RegisteredAction","RegisteredMutation","RegisteredQuery"]),Ce=e=>{const t=e.getType(),s=t.getAliasSymbol()?.getName()??t.getSymbol()?.getName();return s!==void 0&&Hc.has(s)?s:void 0},Jt=e=>{const t=e.getInitializer();return t===void 0?!1:i.isCallExpression(t)||i.isIdentifier(t)||i.isPropertyAccessExpression(t)},es={cause:"codegen recognises a procedure only when the initializer is a builder chain, and this one is produced by a call or an alias",remediation:"A factory that returns a procedure cannot be read statically — inline it, or export the chain the factory builds."},Gc={cause:"the binding is exported by a separate `export { … }` statement, and codegen reads the `export` keyword on the declaration itself",remediation:"Move the keyword onto the declaration and drop the separate export statement."},Fe=(e,t,s,n,o)=>({cacheKey:`procedure_not_registered:${e}:${t}`,categories:["SCHEMA"],description:"Codegen registers an export only when the declaration carries `export` and its initializer is literally a builder chain. A procedure written any other way exists at runtime but never reaches `_generated/api.ts`, so no caller can address it.",detail:`\`${t}\` in \`${e}\` (line ${n.toString()}) has type \`${s}\` but was not registered — ${o.cause}.`,facing:"INTERNAL",level:"WARN",metadata:{exportName:t,filePath:e,line:n,typeName:s},name:"procedure_not_registered",remediation:`Assign the builder chain directly: \`export const ${t} = query.input({ … }).query(handler);\`. ${o.remediation}`,title:"Procedure exists at runtime but is missing from the generated API"}),Yc=(e,t,s)=>{const n=[];for(const o of e.getVariableStatements().filter(r=>r.isExported()))for(const r of o.getDeclarations()){const a=r.getName();if(s.has(`${t}:${a}`)||!Jt(r))continue;const c=Ce(r);c!==void 0&&n.push(Fe(t,a,c,r.getStartLineNumber(),es))}return n},Xc=(e,t,s)=>{if(s.has(`${t}:default`))return[];const n=[];for(const o of e.getExportAssignments().filter(r=>!r.isExportEquals())){const r=Ce(o.getExpression());r!==void 0&&n.push(Fe(t,"default",r,o.getStartLineNumber(),es))}return n},Qc=(e,t,s)=>{const n=[];for(const o of e.getExportDeclarations().filter(r=>r.getModuleSpecifier()===void 0))for(const r of o.getNamedExports()){const a=r.getAliasNode()?.getText()??r.getName();if(s.has(`${t}:${a}`))continue;const c=r.getLocalTargetDeclarations().find(d=>i.isVariableDeclaration(d));if(c===void 0||!Jt(c))continue;const u=Ce(c);u!==void 0&&n.push(Fe(t,a,u,r.getStartLineNumber(),Gc))}return n},Zc=(e,t,s)=>[...Yc(e,t,s),...Xc(e,t,s),...Qc(e,t,s)],Jc=(e,t,s)=>{const n=new Set(s.map(r=>`${r.filePath}:${r.exportName}`)),o=[];for(const r of m(t)){const a=e.getSourceFile(r);a!==void 0&&o.push(...Zc(a,S(t,r),n))}return o.toSorted((r,a)=>r.cacheKey.localeCompare(a.cacheKey))},el=new Set(["when","where"]),Se=new Set(["definePolicy","defineShape"]),tl=e=>{if(!i.isCallExpression(e))return;const t=e.getExpression();if(i.isPropertyAccessExpression(t)){const n=t.getName();return Se.has(n)?n:void 0}if(!i.isIdentifier(t))return;for(const n of t.getSymbol()?.getDeclarations()??[])if(i.isImportSpecifier(n)){const o=n.getNameNode().getText();return Se.has(o)?o:void 0}const s=t.getText();return Se.has(s)?s:void 0},sl=e=>i.isObjectLiteralExpression(e)&&e.getProperties().length===0,ts=e=>{if(e!==void 0){if(i.isReturnStatement(e)&&e.getExpression()===void 0||e.getKind()===l.UndefinedKeyword||e.getText()==="undefined")return"undefined";if(sl(e))return"empty-object";if(i.isParenthesizedExpression(e))return ts(e.getExpression())}},Oe=e=>e.getAncestors().find(t=>i.isArrowFunction(t)||i.isFunctionExpression(t)||i.isFunctionDeclaration(t)),nl=e=>e.getDescendantsOfKind(l.ReturnStatement).filter(t=>Oe(t)===e),ss=e=>e.getDescendantsOfKind(l.ConditionalExpression).filter(t=>Oe(t)===e),rl=e=>{const t=nl(e);return t.length>1?!0:t.some(s=>s.getFirstAncestorByKind(l.IfStatement)!==void 0)||ss(e).length>0},ol=e=>e.getDescendantsOfKind(l.IfStatement).filter(t=>Oe(t)===e),Pe=e=>e.getKind()===l.NullKeyword||e.getKind()===l.FalseKeyword||i.isIdentifier(e)&&e.getText()==="undefined"?!0:i.isNumericLiteral(e)?e.getLiteralValue()===0:i.isStringLiteral(e)&&e.getLiteralValue()==="",il=(e,t)=>Pe(e)||Pe(t),al=new Map([[l.EqualsEqualsEqualsToken,"positive"],[l.EqualsEqualsToken,"positive"],[l.ExclamationEqualsEqualsToken,"negative"],[l.ExclamationEqualsToken,"negative"]]),Pt=e=>!Pe(e)&&(i.isLiteralExpression(e)||e.getKind()===l.TrueKeyword),cl=(e,t,s)=>{const n=al.get(e);if(n!==void 0)return il(t,s)?n==="positive"?"negative":"positive":Pt(t)||Pt(s)?void 0:n},j=e=>{if(i.isParenthesizedExpression(e))return j(e.getExpression());if(i.isPrefixUnaryExpression(e)&&e.getOperatorToken()===l.ExclamationToken)return"negative";if(i.isBinaryExpression(e)){const t=e.getOperatorToken().getKind(),s=cl(t,e.getLeft(),e.getRight());if(s!==void 0)return s;if(t===l.AmpersandAmpersandToken||t===l.BarBarToken){const n=j(e.getLeft()),o=j(e.getRight());return n===o?n:"indeterminate"}}return i.isIdentifier(e)||i.isPropertyAccessExpression(e)||i.isElementAccessExpression(e)||i.isCallExpression(e)?"positive":"indeterminate"},It=e=>{if(e!==void 0){if(i.isReturnStatement(e))return e;if(i.isBlock(e)){const t=e.getStatements().at(-1);return t!==void 0&&i.isReturnStatement(t)?t:void 0}}},ll=e=>{if(e.getElseStatement()!==void 0)return;const t=e.getNextSiblingIfKind(l.ReturnStatement);return t!==void 0&&t.getNextSibling()===void 0?t:void 0},ul=e=>i.isReturnStatement(e)?e.getExpression()??e:e,dl=e=>{const t=[];for(const s of ss(e)){const n=j(s.getCondition());n==="positive"?t.push(s.getWhenFalse()):n==="negative"&&t.push(s.getWhenTrue())}for(const s of ol(e)){const n=j(s.getExpression());if(n==="indeterminate")continue;const o=n==="negative"?It(s.getThenStatement()):It(s.getElseStatement())??ll(s);o!==void 0&&t.push(ul(o))}return t},fl=e=>{for(const t of e.getAncestors())if(i.isVariableDeclaration(t)){const s=t.getNameNode();if(i.isIdentifier(s))return s.getText()}return"<anonymous>"},gl=(e,t,s)=>{if(!i.isCallExpression(e))return[];const[n]=e.getArguments();if(!n||!i.isObjectLiteralExpression(n))return[];const o=[];for(const r of n.getProperties()){if(!i.isPropertyAssignment(r)||!el.has(r.getName()))continue;const a=r.getInitializer();if(!(!a||!(i.isArrowFunction(a)||i.isFunctionExpression(a)))&&rl(a))for(const c of dl(a)){const u=ts(c);u!==void 0&&o.push({exportName:fl(e),file:s,form:u,key:r.getName(),line:c.getStartLineNumber(),owner:t})}}return o},pl=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=tl(n);o!==void 0&&s.push(...gl(n,o,t))}return s},ml=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...pl(o,S(t,n)))}return s},hl=new Set(["query","upsert","upsertMany"]),xl=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName();if(hl.has(t))return e.getExpression().getText()==="ctx.vectors"?t:void 0},El=(e,t)=>{const s=xl(e.getExpression());if(s===void 0)return;const n=e.getArguments()[1];if(!n)return;const o=N(n,"namespace");if(!(!o||!R(o)||_(o)))return{exportName:v(e),file:t,line:e.getStartLineNumber(),method:s}},vl=(e,t)=>I(e,t,El),Sl=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||t.getName()!=="get")return!1;const s=t.getExpression();return i.isPropertyAccessExpression(s)?s.getName()==="workflows":i.isIdentifier(s)&&s.getText()==="workflows"},yl=e=>{const t=e.getArguments()[0];return t&&i.isStringLiteral(t)?t.getLiteralText():""},Al=(e,t)=>{const s=[];for(const n of m(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=S(t,n);for(const a of o.getDescendantsOfKind(l.CallExpression)){if(!Sl(a))continue;const c=Us(a);c!==""&&s.push({exportName:c,file:r,line:a.getStartLineNumber(),workflow:yl(a)})}}return s},Nl=".lunora-schema.json",w=(e,t)=>{b(e)&&Ct(e,"utf8")===t||ps(e,t,"utf8")},O=(e,t)=>{if(t===""){ms(e,{force:!0});return}w(e,t)},bl=e=>{const t=f(e,"package.json");if(b(t))try{const s=JSON.parse(Ct(t,"utf8"));return typeof s.version=="string"&&s.version!==""?s.version:void 0}catch{return}},Pl=()=>{const e=process.env.LUNORA_CODEGEN_TIMING;return e!==void 0&&e!==""},Il=e=>{let t=b(e)?e:J(e);for(;t&&t!==J(t);){const s=f(t,"tsconfig.json");if(b(s))return s;t=J(t)}},wt=e=>e.replaceAll("\\","/"),wl=(e,t,s)=>{if(s&&e.length>0){const r=e.map(a=>`"${a.exportName}"`).join(", ");throw new D("MASK_UNSUPPORTED",`This project declares a \`mask(...)\` policy whose argument isn't a plain object literal (e.g. \`mask(sharedPolicies)\` referencing a hoisted variable), or contains a spread (\`...shared\`) or computed key (\`[name]:\`) codegen can't enumerate, so codegen can't tell which columns it masks. Because the project also declares replication shape(s) (${r}), codegen can't verify none of them replicate a table that policy masks — inline every table and column as literal keys so codegen can verify it, or remove the affected shape(s).`,{status:422})}const n=new Map;for(const r of t.columns){const a=n.get(r.table)??[];a.push(r.column),n.set(r.table,a)}const o=t.columns.length>0;for(const r of e){if(r.table===void 0){if(o)throw new D("MASK_UNSUPPORTED",`defineShape "${r.exportName}" has a non-literal \`table\` (a variable or expression, not a string literal), so codegen can't statically verify it doesn't replicate a table that masks a column. This project masks at least one column elsewhere, so the combination can't be proven safe — change "${r.exportName}"'s \`table\` to a plain string literal so codegen can verify it, or remove the mask(s) on the table it targets.`,{status:422});continue}const a=n.get(r.table);if(a===void 0)continue;const c=a.map(u=>`"${u}"`).join(", ");throw new D("MASK_UNSUPPORTED",`defineShape "${r.exportName}" replicates table "${r.table}", which masks column(s) ${c} on at least one procedure. A shape runs no procedure, so \`.use(mask(...))\` never applies to its replicated rows — remove the shape, unmask the table, or wait for shape-masking support.`,{status:422})}},ie=(e,t,s)=>{const n=e.getSourceFile(t);if(n===void 0){e.createSourceFile(t,s,{overwrite:!0});return}n.getFullText()!==s&&n.replaceWithText(s)},Tt=(e,t,s)=>e.getSourceFile(t)?.getFullText()===s,Tl=8,Cl=e=>{const{agents:t,apiPath:s,generatedFunctionsPath:n,lunoraDirectory:o,migrations:r,project:a,shapes:c,usesSandbox:u,useUmbrella:d,workflows:E}=e;let x=nt(a,o),P=ot(a,o),M=rt(a,o);it([...x,...P].map(g=>g.filePath)),it(M.filter(g=>g.stream).map(g=>g.filePath),"http-stream");for(let g=1;;g+=1){const T=Ls({agents:t,functions:x,httpRoutes:M,mutators:P,useUmbrella:d,workflows:E}),C=Ds({agents:t,functions:x,migrations:r,mutators:P,shapes:c,useUmbrella:d,usesSandbox:u});if(g>=Tl||Tt(a,s,T)&&Tt(a,n,C))return{apiContent:T,functions:x,functionsContent:C,httpRoutes:M,mutators:P};ie(a,s,T),ie(a,n,C),x=nt(a,o),P=ot(a,o),M=rt(a,o)}},Fl=e=>{const t=Il(e);return t?new st({skipAddingFilesFromTsConfig:!1,tsConfigFilePath:t,useInMemoryFileSystem:!1}):new st({skipAddingFilesFromTsConfig:!0,useInMemoryFileSystem:!1})},bu=(e,t)=>{const s=m(t),n=f(t,"schema.ts");b(n)&&s.push(n);for(const c of s){const u=e.getSourceFile(c);u===void 0?e.addSourceFileAtPath(c):u.refreshFromFileSystemSync()}const o=new Set(s.map(c=>wt(c))),r=wt(t),a=`${r}/`;for(const c of e.getSourceFiles()){const u=c.getFilePath();(u===r||u.startsWith(a))&&!o.has(u)&&e.removeSourceFile(c)}for(const c of e.getSourceFiles()){const u=c.getFilePath();if(!(u===r||u.startsWith(a)||u.includes("/node_modules/")))try{c.refreshFromFileSystemSync()}catch{e.removeSourceFile(c)}}},Pu=e=>{const t=Pl(),s=t?xe.now():0,n=f(e.projectRoot,e.lunoraDirectory??"lunora"),o=f(n,"schema.ts");if(!b(o))throw new D("INTERNAL",`schema.ts not found at ${o}`);const r=e.project??Fl(n);Tn(Lo);const a=xn(r,o,e.projectRoot),{agents:c,containers:u,crons:d,dataModelContent:E,dependencies:x,entryCronTriggers:P,env:M,featureUsage:g,hasFlags:T,hasNotify:C,identity:$,platformGate:A,queues:L,serverContent:U,storageRulesMetadata:q,usesSandbox:G,useUmbrella:K,workflows:F}=Zn({lunoraDirectory:n,project:r,projectRoot:e.projectRoot,schema:a,target:e.target}),p=f(n,"_generated"),Re=f(p,"dataModel.ts"),Le=f(p,"server.ts"),ns=f(p,"api.ts"),rs=f(p,"functions.ts");ie(r,Re,E),ie(r,Le,U);const de=cn(r,n),V=An(r,n),{apiContent:De,functions:B,functionsContent:ke,httpRoutes:os,mutators:is}=Cl({agents:c,apiPath:ns,generatedFunctionsPath:rs,lunoraDirectory:n,migrations:de,project:r,shapes:V,useUmbrella:K,usesSandbox:G,workflows:F}),Y=e.lint===!1?void 0:Es({adminRoutes:ir(r,n),aiRawRuns:lr(r,n),aiToolSideEffects:vr(r,n),argumentDerivedFetches:Ar(r,n),argumentValidators:Rr(r,n),authApiCalls:en(r,n),authConfigs:$r(r,n),browserUrlAccesses:Hr(r,n),configCalls:to(r,n),containerKeyAccesses:no(r,n),containerOverrides:lo(r,n),containers:u,exportSinks:po(r,n),staleMigrationImports:Kc(r,n),failOpenGuards:vo(r,n),flagReads:To(r,n),flagSecurityDefaults:Ro(r,n),geoIndexUsages:Mo(r,n),httpActionGuards:qo(r,n),httpHeaderWrites:Jo(r,n),hyperdriveCalls:rn(r,n),identityClaimReads:ii(r,n),imageDeliveryUrlAccesses:ci(r,n),inserts:on(r,n),kvKeyAccesses:ui(r,n,B),mailRecipientAccesses:mi(r,n),maskProcedures:an(r,n),maskStrategies:Ni(r,n),mutatorWrites:Ci(r,n),nondeterministicCalls:dn(r,n),normalizeIdAuthorizations:ji(r,n),notifyCalls:gn(r,n),notifyConfig:fn(r,n),ownerFieldWrites:Ji(r,n,B),unrestrictedWhereBranches:ml(r,n),paymentWebhooks:aa(r,n),privilegedDispatches:Sa(r,n),procedureProtections:rc(r,n),queries:Js(r,n),queues:L,r2sqlCalls:pn(r,n),ratelimitKeySelectors:cc(r,n),rawRowReturns:mc(r,n),relationLoads:Ec(r,n),rlsProcedures:mn(r,n),schema:a,secretLiterals:Ic(r,n),shapes:V,softDeleteReads:Tc(r,n),sqlInterpolations:Dc(r,n),storageKeyAccesses:zc(r,n,B),storageUploads:jc(r,n),vectorNamespaceAccesses:vl(r,n),workflowCalls:Al(r,n),workflows:F,wranglerVariables:e.wranglerVariables}),Me=Y===void 0?[]:[...hs(Y,{source:"static"}),...Jc(r,n,B)],as=hn(r,n),Ke=Si(r,n);wl(V,Ke,Ei(r,n));const cs=T?No(r,n):[],fe=A.signals.vectorStore!==!1,X=Wc(g,{containerCount:u.length,cronCount:d.length,dependencies:x,hasPaymentTables:sa(a.tables),queueCount:L.length,storageColumnCount:Object.keys(Ft(a)).length,storageRuleCount:q.rules.length,vectorIndexCount:a.vectorIndexes.length,vectorStoreSupported:fe,workflowCount:F.length}),_e=t?xe.now():0,ge=Cn(a,de.map(h=>h.id)),ze=As({advisories:Me,advisorProcedures:Y?.procedureProtections??[],agents:c,containers:u,env:M,flagKeys:cs,hasAccessFacade:g.access,hasAi:g.ai,hasAnalytics:g.analytics,hasBrowser:g.browser,hasFlags:T,hasHyperdrive:g.hyperdrive,hasImages:g.images,hasKv:g.kv,hasNotify:C,hasPayments:g.payments,hasPipelines:g.pipelines,hasR2sql:g.r2sql,hasVectors:fe,hasX402:g.x402,maskMetadata:Ke,mutators:is,queues:L,rlsMetadata:as,schema:a,schemaSnapshot:ge,shapes:V,storageRules:q,studioFeatures:X,useUmbrella:K,workflows:F}),Ue=Ns(V,x.has("@lunora/db"),K),Be=bs(u,a.jurisdiction),$e=Ps(F),qe=Is(c),Ve=ws(L),je=Ts(d),We=Cs(a.vectorIndexes),Q=Fs(a,K),He=Os(x.has("@lunora/seed")),Z=e.apiSpec??"openapi",pe=Z==="openapi"||Z==="both",me=Z==="openrpc"||Z==="both",Ge=Nn({emailAgents:c.filter(h=>h.onEmail===!0).map(h=>({bindingName:h.bindingName,exportName:h.exportName})),hasAccess:x.has("@lunora/cloudflare-access"),hasAi:g.ai,hasAnalytics:g.analytics,hasAuth:x.has("@lunora/auth"),hasBrowser:g.browser,hasFramework:x.has("@lunora/astro")||x.has("@lunora/svelte")||x.has("@lunora/vue"),hasGlobal:a.tables.some(h=>h.shardMode==="global"&&h.globalBackend!=="hyperdrive"),hasHyperdrive:g.hyperdrive,hasHyperdriveGlobal:a.tables.some(h=>h.shardMode==="global"&&h.globalBackend==="hyperdrive"),hasImages:g.images,hasKv:g.kv,hasKvIntrospector:X.kv,hasNotify:C,hasPayments:g.payments,hasR2sql:g.r2sql,hasQueue:L.some(h=>h.mode==="push"),hasScheduler:X.scheduler,hasStorage:X.storage,hasVectors:fe,hasWorkflow:F.length>0,hasX402:g.x402,identity:$,jurisdiction:a.jurisdiction,tableNames:a.tables.map(h=>h.name),useUmbrella:K,vectorIndexCount:a.vectorIndexes.length,voiceAgents:c.filter(h=>h.voice===!0&&h.voiceBindingName!==void 0).map(h=>({bindingName:h.voiceBindingName,exportName:h.exportName})),wantsOpenApi:pe,wantsOpenRpc:me}),Ye=bl(e.projectRoot),Xe=bn({functions:B,httpRoutes:os,version:Ye}),Qe=In({functions:B,version:Ye}),Ze=`${JSON.stringify(Xe,void 0,2)}
|
|
8
|
+
`,Je=`${JSON.stringify(Qe,void 0,2)}
|
|
9
|
+
`,et=Pn(Xe),tt=wn(Qe),he=f(n,Nl),ls=b(he);if(e.dryRun||(b(p)||gs(p,{recursive:!0}),w(f(p,"app.ts"),Ge),w(Re,E),w(f(p,"api.ts"),De),w(Le,U),w(f(p,"functions.ts"),ke),w(f(p,"shard.ts"),ze),w(f(p,"crons.ts"),je),w(f(p,"vectors.ts"),We),w(f(p,"drizzle.global.ts"),Q.global),w(f(p,"drizzle.shard.ts"),Q.shard),O(f(p,"containers.ts"),Be),O(f(p,"workflows.ts"),$e),O(f(p,"agents.ts"),qe),O(f(p,"queues.ts"),Ve),O(f(p,"seed.ts"),He),O(f(p,"collections.ts"),Ue),O(f(p,"openapi.json"),pe?Ze:""),O(f(p,"openapi.ts"),pe?et:""),O(f(p,"openrpc.json"),me?Je:""),O(f(p,"openrpc.ts"),me?tt:""),(!ls||e.updateSchemaBaseline===!0)&&w(he,xs(ge))),t){const h=xe.now(),us=Math.round(h-s),ds=Math.round(_e-s),fs=Math.round(h-_e);console.error(`@lunora/codegen: codegen took ${us.toString()}ms (discovery ${ds.toString()}ms, emit ${fs.toString()}ms)`)}return{advisories:Me,advisorContext:Y,agents:c,containers:u,cronTriggers:[...new Set([...Rs(d),...P])],generated:{agents:qe,api:De,app:Ge,collections:Ue,containers:Be,crons:je,dataModel:E,drizzleGlobal:Q.global,drizzleShard:Q.shard,functions:ke,openApi:Ze,openApiModule:et,openRpc:Je,openRpcModule:tt,queues:Ve,seed:He,server:U,shard:ze,vectors:We,workflows:$e},migrations:de,outputDirectory:p,platformDiagnostics:A.diagnostics,queues:L,schemaSnapshot:ge,schemaSnapshotPath:he,workflows:F}};export{Nl as SCHEMA_SNAPSHOT_FILENAME,Fl as createCodegenProject,Il as findTsconfig,bu as refreshCodegenProject,Pu as runCodegen};
|
package/dist/packem_shared/{buildOpenApiDocument-qYjkmRTX.mjs → buildOpenApiDocument-CE9SDrBg.mjs}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{G as S}from"./emit-
|
|
1
|
+
import{G as S}from"./emit-Lx7UkoGn.mjs";import{s as p}from"./paths-C-9fwEgQ.mjs";import{LUNORA_ERROR_CODES as O,objectSchema as h,validatorIrToJsonSchema as u}from"./LUNORA_ERROR_CODES-CW7-uASH.mjs";const E="/_lunora/rest",A=["authorization","cf-access-jwt-assertion","cookie","x-payment"],f=["x-d1-bookmark","x-lunora-shard-key"],P=e=>[...A,...(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(", ")},T=(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(", ")},b=e=>e.scope==="public"?y(e.vary,...P(e),...f):y(e.vary,...f),x=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=x(e);if(t!==void 0)return`${E}/${t.namespace}/${t.name}`},k=e=>e==="query"?"GET":"POST",m="#/components/responses/LunoraError",v=/:([A-Za-z_$][\w$]*)/gu,q=e=>[...e.matchAll(v)].map(t=>t[1]),_=e=>e.replaceAll(v,"{$1}"),l=e=>e.kind==="optional"?e.inner??e:e,j=e=>{const t=new Set(q(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."},C=e=>{const t=p(e.filePath),r=j(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},w=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}`}},D=(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:T(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=b(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}},L=e=>{const t=p(e.filePath),r=`${t}:${e.exportName}`,o=N(r);if(o===void 0)return;const s=k(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).",...D(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}},I=e=>{const t=e.version??"0.0.0",r={},o=new Set;for(const n of e.httpRoutes){const a=_(n.path),i=r[a]??{};i[n.method.toLowerCase()]=C(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}=w(n);r[i]={post:a},o.add(p(n.filePath))}for(const n of s){if(n.expose?.rest!==!0)continue;const a=L(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:O,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}},J=e=>`${JSON.stringify(I(e),void 0,2)}
|
|
2
2
|
`,U=e=>`${S}export const openApiSpec: Record<string, unknown> = ${JSON.stringify(e,void 0,4)};
|
|
3
3
|
`;export{I as buildOpenApiDocument,J as emitOpenApi,U as emitOpenApiModule};
|