@lunora/codegen 1.0.0-alpha.107 → 1.0.0-alpha.109

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.
Files changed (89) hide show
  1. package/dist/index.d.mts +22 -5
  2. package/dist/index.d.ts +22 -5
  3. package/dist/index.mjs +1 -1
  4. package/dist/packem_shared/AGENTS_FILENAME-CPHo8Se5.mjs +1 -0
  5. package/dist/packem_shared/{CONTAINERS_FILENAME-DQpyhY6c.mjs → CONTAINERS_FILENAME-Bvn6LZP6.mjs} +1 -1
  6. package/dist/packem_shared/CodegenDiagnosticError-BUXlG3P-.mjs +1 -0
  7. package/dist/packem_shared/DEFAULT_TARGET-CIH5PRk1.mjs +1 -0
  8. package/dist/packem_shared/FLAGS_FILENAME-DtBWyUKq.mjs +1 -0
  9. package/dist/packem_shared/GENERATED_HEADER-GSCh67g3.mjs +1 -0
  10. package/dist/packem_shared/{LUNORA_ERROR_CODES-zfAI2OFs.mjs → LUNORA_ERROR_CODES-BYg8Lpgb.mjs} +1 -1
  11. package/dist/packem_shared/MUTATORS_FILENAME-CRmTpN4y.mjs +1 -0
  12. package/dist/packem_shared/NOTIFY_FILENAME-BybR3Xbd.mjs +1 -0
  13. package/dist/packem_shared/OPENRPC_VERSION-DB1PSt8W.mjs +3 -0
  14. package/dist/packem_shared/QUEUES_FILENAME-BnGLtAIu.mjs +1 -0
  15. package/dist/packem_shared/SCHEMA_SNAPSHOT_FILENAME-D9rvsQ0t.mjs +9 -0
  16. package/dist/packem_shared/SCHEMA_SNAPSHOT_VERSION-DIqnj_32.mjs +2 -0
  17. package/dist/packem_shared/SDK_LANGUAGES-p7vq4x7B.mjs +320 -0
  18. package/dist/packem_shared/SHAPES_FILENAME-DxoIrQhA.mjs +1 -0
  19. package/dist/packem_shared/SchemaSnapshotParseError-Dc1aZAph.mjs +16 -0
  20. package/dist/packem_shared/WORKFLOWS_FILENAME-B8y51Frf.mjs +1 -0
  21. package/dist/packem_shared/buildOpenApiDocument-B2mW3f5a.mjs +3 -0
  22. package/dist/packem_shared/describeErrorLevelFindings-D23VSkFP.mjs +1 -0
  23. package/dist/packem_shared/discover-ast-D33zP-NZ.mjs +1 -0
  24. package/dist/packem_shared/discover-queries-Dfj_0WJG.mjs +1 -0
  25. package/dist/packem_shared/discoverAuthApiCalls-DUjcl0SB.mjs +1 -0
  26. package/dist/packem_shared/discoverCrons-BUJO2ipU.mjs +1 -0
  27. package/dist/packem_shared/discoverFunctions-h8i51Mec.mjs +1 -0
  28. package/dist/packem_shared/discoverHttpRoutes-MX6y-iVE.mjs +1 -0
  29. package/dist/packem_shared/discoverInserts-YX8AmrzL.mjs +1 -0
  30. package/dist/packem_shared/discoverMaskProcedures-DhcK-YMG.mjs +1 -0
  31. package/dist/packem_shared/discoverMigrations-4Jjf5DJE.mjs +1 -0
  32. package/dist/packem_shared/discoverNondeterministicCalls-CjS2Mznw.mjs +1 -0
  33. package/dist/packem_shared/discoverQueries-C5S9tFoD.mjs +1 -0
  34. package/dist/packem_shared/discoverR2sqlCalls-DuTuaSMM.mjs +1 -0
  35. package/dist/packem_shared/discoverRlsMetadata-BYVq6cVp.mjs +1 -0
  36. package/dist/packem_shared/{discoverSandboxUsage-DBM98vVh.mjs → discoverSandboxUsage-L0lV17de.mjs} +1 -1
  37. package/dist/packem_shared/discoverSchema-BtlNz9b_.mjs +1 -0
  38. package/dist/packem_shared/discoverStorageRulesMetadata-CKPFWHT5.mjs +1 -0
  39. package/dist/packem_shared/{emit-BbLyaTLJ.mjs → emit-Ba3NiOwK.mjs} +326 -326
  40. package/dist/packem_shared/{emitApp-DkO-Qvoo.mjs → emitApp-hKEej7rj.mjs} +18 -18
  41. package/dist/packem_shared/formatAdvisories-BjTV22uR.mjs +2 -0
  42. package/dist/packem_shared/isTypedSchema-CU-O5qSH.mjs +2 -0
  43. package/dist/packem_shared/module-specifiers-WF8iAydP.mjs +1 -0
  44. package/dist/packem_shared/parse-validator-DtALyvid.mjs +1 -0
  45. package/dist/packem_shared/paths-C-9fwEgQ.mjs +1 -0
  46. package/dist/packem_shared/readPackageDependencies-C6h6FZuP.mjs +1 -0
  47. package/dist/packem_shared/redact-Cy14LEnc.mjs +1 -0
  48. package/dist/packem_shared/schemaFromIr-BWFnvCVg.mjs +1 -0
  49. package/package.json +5 -5
  50. package/dist/packem_shared/AGENTS_FILENAME-Dk-k250h.mjs +0 -1
  51. package/dist/packem_shared/CodegenDiagnosticError-DPezpZTz.mjs +0 -1
  52. package/dist/packem_shared/DEFAULT_TARGET-CH5disA3.mjs +0 -1
  53. package/dist/packem_shared/FLAGS_FILENAME-Boqm0YCP.mjs +0 -1
  54. package/dist/packem_shared/GENERATED_HEADER-CtitJsDk.mjs +0 -1
  55. package/dist/packem_shared/MUTATORS_FILENAME-Cp_JxLSz.mjs +0 -1
  56. package/dist/packem_shared/NOTIFY_FILENAME-DwyJ5I4Q.mjs +0 -1
  57. package/dist/packem_shared/OPENRPC_VERSION-Bzh1vxcl.mjs +0 -3
  58. package/dist/packem_shared/QUEUES_FILENAME-QpMZsde0.mjs +0 -1
  59. package/dist/packem_shared/SCHEMA_SNAPSHOT_FILENAME-DlCvMk66.mjs +0 -9
  60. package/dist/packem_shared/SCHEMA_SNAPSHOT_VERSION-CFhF_hmg.mjs +0 -2
  61. package/dist/packem_shared/SDK_LANGUAGES-fIqQtE14.mjs +0 -320
  62. package/dist/packem_shared/SHAPES_FILENAME-WxXOsYfe.mjs +0 -1
  63. package/dist/packem_shared/SchemaSnapshotParseError-BkgxjBPQ.mjs +0 -16
  64. package/dist/packem_shared/WORKFLOWS_FILENAME-Dz80zqeT.mjs +0 -1
  65. package/dist/packem_shared/buildOpenApiDocument-B8-PH9af.mjs +0 -3
  66. package/dist/packem_shared/describeErrorLevelFindings-IhNx9gPr.mjs +0 -1
  67. package/dist/packem_shared/discover-ast-7ABwvTVn.mjs +0 -1
  68. package/dist/packem_shared/discover-queries-CU9o_j87.mjs +0 -1
  69. package/dist/packem_shared/discoverAuthApiCalls-XfNbxqlq.mjs +0 -1
  70. package/dist/packem_shared/discoverCrons-RlATa0_t.mjs +0 -1
  71. package/dist/packem_shared/discoverFunctions-4TNKUv7P.mjs +0 -1
  72. package/dist/packem_shared/discoverHttpRoutes-DQivLBqT.mjs +0 -1
  73. package/dist/packem_shared/discoverInserts-D6szWzrV.mjs +0 -1
  74. package/dist/packem_shared/discoverMaskProcedures-BBPqLXA5.mjs +0 -1
  75. package/dist/packem_shared/discoverMigrations-rbjxflR8.mjs +0 -1
  76. package/dist/packem_shared/discoverNondeterministicCalls-Bxr652Rz.mjs +0 -1
  77. package/dist/packem_shared/discoverQueries-CIU5dc0u.mjs +0 -1
  78. package/dist/packem_shared/discoverR2sqlCalls-DMxG6gHr.mjs +0 -1
  79. package/dist/packem_shared/discoverRlsMetadata-B63ARnKG.mjs +0 -1
  80. package/dist/packem_shared/discoverSchema-BNr7PVcZ.mjs +0 -1
  81. package/dist/packem_shared/discoverStorageRulesMetadata-_40MGqRX.mjs +0 -1
  82. package/dist/packem_shared/formatAdvisories-CQvIhQ04.mjs +0 -2
  83. package/dist/packem_shared/isTypedSchema-9wiKtXr2.mjs +0 -2
  84. package/dist/packem_shared/module-specifiers-8FEEiUcv.mjs +0 -1
  85. package/dist/packem_shared/parse-validator-CusS8QwU.mjs +0 -1
  86. package/dist/packem_shared/paths-BmX5O1sG.mjs +0 -1
  87. package/dist/packem_shared/readPackageDependencies-CogJX1Ia.mjs +0 -1
  88. package/dist/packem_shared/redact-6jD4lAhq.mjs +0 -1
  89. package/dist/packem_shared/schemaFromIr-R1ZFzVyy.mjs +0 -1
package/dist/index.d.mts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { AdvisorExportSink, AdvisorGeoIndexUsage, AdvisorNotifyCall, AdvisorNotifyConfig, Finding, LintContext, AdvisorProcedureProtection } from '@lunora/advisor';
2
2
  export type { Finding } from '@lunora/advisor';
3
- import '@lunora/platform';
4
3
  import { Project, Node } from 'ts-morph';
5
4
  import { LunoraError } from '@lunora/errors';
6
5
  export { MESSAGE_SOLUTIONS as LUNORA_SOLUTION_RULES, type Solution as LunoraSolution, type SolutionRule as LunoraSolutionRule, findSolutionByMessage as findLunoraSolution } from '@lunora/errors';
@@ -2321,6 +2320,17 @@ interface PlatformDiagnostic {
2321
2320
  * dot keeps it tucked away next to the schema it describes.
2322
2321
  */
2323
2322
  declare const SCHEMA_SNAPSHOT_FILENAME = ".lunora-schema.json";
2323
+ /**
2324
+ * Walk up from `startPath` until we find a `tsconfig.json` or hit the file
2325
+ * system root. Returns the absolute path to the tsconfig, or `undefined`.
2326
+ *
2327
+ * Exported (see the bottom-of-file `export { findTsconfig }`) so a long-lived
2328
+ * caller (the Vite dev-loop's cached-Project invalidation) can ask "which
2329
+ * tsconfig would {@link createCodegenProject} resolve right now?" without
2330
+ * duplicating the walk — recomputing it per call is a handful of `existsSync`
2331
+ * checks, negligible next to a Project rebuild.
2332
+ */
2333
+ declare const findTsconfig: (startPath: string) => string | undefined;
2324
2334
  /**
2325
2335
  * Construct the ts-morph `Project` codegen discovers over. Prefers the user's
2326
2336
  * `tsconfig.json` (when one is found walking up from `lunoraDirectory`) so
@@ -2341,9 +2351,16 @@ declare const createCodegenProject: (lunoraDirectory: string) => Project;
2341
2351
  * removes Project source files under `lunoraDirectory` that no longer exist on
2342
2352
  * disk (the classic stale-deleted-file cache bug).
2343
2353
  *
2344
- * Files outside `lunoraDirectory` (e.g. those pulled in by the user's tsconfig)
2345
- * are left untouchedthey back type resolution and rarely change in the
2346
- * dev-loop; a tsconfig change invalidates the whole cached Project upstream.
2354
+ * Files outside `lunoraDirectory` e.g. a shared validator or type pulled in
2355
+ * via the user's tsconfig are also `refreshFromFileSystemSync()`ed, but only
2356
+ * the ones already loaded into the Project; none are added. `resolveValidatorAlias`
2357
+ * (parse-validator.ts) follows `getAliasedSymbol()` across module boundaries, so a
2358
+ * validator defined outside `lunoraDirectory` is genuinely read from whatever
2359
+ * source the Project currently holds — leaving those files stale made a reused
2360
+ * Project (the Vite dev loop) silently disagree with a fresh one (`lunora
2361
+ * codegen`) about the same source. `node_modules` is excluded: its `.d.ts` set
2362
+ * dominates the file count and never changes mid dev-loop, so refreshing it would
2363
+ * reinstate close to the full re-parse cost this cache exists to avoid.
2347
2364
  */
2348
2365
  declare const refreshCodegenProject: (project: Project, lunoraDirectory: string) => void;
2349
2366
  /**
@@ -3588,4 +3605,4 @@ declare const secretKindOf: (value: string) => string | undefined;
3588
3605
  /** A redacted preview of a secret value — first 4 chars plus its length, never the full value. */
3589
3606
  declare const redact: (value: string) => string;
3590
3607
  declare const VERSION = "0.0.0";
3591
- export { AGENTS_FILENAME, type AgentIR, type AuthApiCallIR, CONTAINERS_FILENAME, CodegenDiagnosticError, type CodegenOptions, type CodegenResult, type ContainerIR, type CronJobIR, DEFAULT_TARGET, type DriftChange, type DriftScope, type EmitAppOptions, FLAGS_FILENAME, type FieldSnapshot, type FlagsIR, type FunctionIR, GENERATED_HEADER, type HttpRouteIR, type IndexIR, type IndexSnapshot, type InsertWriteIR, LUNORA_ERROR_CODES, type LintSchemaOptions, MUTATORS_FILENAME, type MaskProcedureIR, type MigrationIR, type MutatorIR, NOTIFY_FILENAME, OPENRPC_VERSION, type OpenApiEmitInput, type OpenRpcDocument, type OpenRpcEmitInput, type OpenRpcMethod, type PlatformDiagnostic, type ProjectIR, QUEUES_FILENAME, type QueryReadIR, type QueueIR, type R2sqlCallIR, type RelationSnapshot, type RlsMetadataIR, type RlsPolicyIR, type RlsProcedureIR, type RlsRoleIR, type RuntimeVerb, SCHEMA_SNAPSHOT_FILENAME, SCHEMA_SNAPSHOT_VERSION, SDK_LANGUAGES, SDK_TARGETS, SHAPES_FILENAME, type SandboxUsage, type SchemaDrift, type SchemaDriftDecision, type SchemaIR, type SchemaSnapshot, SchemaSnapshotParseError, type SdkFiles, type SdkMethod, type SdkNamespace, type SdkRenderInput, type SdkResult, type SdkTarget, type ShapeIR, type StorageRuleIR, type StorageRulesMetadataIR, type TableIR, type TableSnapshot, VERSION, type ValidatorIR, type VectorIndexIR, WORKFLOWS_FILENAME, type WorkflowIR, type WranglerVariableIR, buildOpenApiDocument, buildOpenRpcDocument, buildSchemaSnapshot, createCodegenProject, describeErrorLevelFindings, diagnosticAt, diffSchemaSnapshots, discoverAgents, discoverAuthApiCalls, discoverContainers, discoverCrons, discoverFlags, discoverFunctions, discoverHttpRoutes, discoverInserts, discoverMaskProcedures, discoverMigrations, discoverMutators, discoverNondeterministicCalls, discoverNotifyCalls, discoverNotifyConfig, discoverQueries, discoverQueues, discoverR2sqlCalls, discoverRlsMetadata, discoverRlsProcedures, discoverSandboxUsage, discoverSchema, discoverShapes, discoverStorageRulesMetadata, discoverWorkflows, emitAgents, emitApi, emitApp, emitCollections, emitContainers, emitCrons, emitDataModel, emitDrizzleSchema, emitFunctions, emitOpenApi, emitOpenApiModule, emitOpenRpc, emitOpenRpcModule, emitServer, emitShard, emitVectors, emitWorkflows, emitWranglerCronTriggers, errorAdvisoryNames, errorPlatformDiagnosticNames, evaluateSchemaDrift, formatAdvisories, generateSdk, isTypedSchema, lintSchema, parseSchemaSnapshot, platformMatrixIds, readPackageDependencies, readProjectTarget, redact, refreshCodegenProject, resolveCodegenTarget, runCodegen, schemaFromIr, secretKindOf, serializeSchemaSnapshot, toAdvisorContext, validatorIrToJsonSchema };
3608
+ export { AGENTS_FILENAME, type AgentIR, type AuthApiCallIR, CONTAINERS_FILENAME, CodegenDiagnosticError, type CodegenOptions, type CodegenResult, type ContainerIR, type CronJobIR, DEFAULT_TARGET, type DriftChange, type DriftScope, type EmitAppOptions, FLAGS_FILENAME, type FieldSnapshot, type FlagsIR, type FunctionIR, GENERATED_HEADER, type HttpRouteIR, type IndexIR, type IndexSnapshot, type InsertWriteIR, LUNORA_ERROR_CODES, type LintSchemaOptions, MUTATORS_FILENAME, type MaskProcedureIR, type MigrationIR, type MutatorIR, NOTIFY_FILENAME, OPENRPC_VERSION, type OpenApiEmitInput, type OpenRpcDocument, type OpenRpcEmitInput, type OpenRpcMethod, type PlatformDiagnostic, type ProjectIR, QUEUES_FILENAME, type QueryReadIR, type QueueIR, type R2sqlCallIR, type RelationSnapshot, type RlsMetadataIR, type RlsPolicyIR, type RlsProcedureIR, type RlsRoleIR, type RuntimeVerb, SCHEMA_SNAPSHOT_FILENAME, SCHEMA_SNAPSHOT_VERSION, SDK_LANGUAGES, SDK_TARGETS, SHAPES_FILENAME, type SandboxUsage, type SchemaDrift, type SchemaDriftDecision, type SchemaIR, type SchemaSnapshot, SchemaSnapshotParseError, type SdkFiles, type SdkMethod, type SdkNamespace, type SdkRenderInput, type SdkResult, type SdkTarget, type ShapeIR, type StorageRuleIR, type StorageRulesMetadataIR, type TableIR, type TableSnapshot, VERSION, type ValidatorIR, type VectorIndexIR, WORKFLOWS_FILENAME, type WorkflowIR, type WranglerVariableIR, buildOpenApiDocument, buildOpenRpcDocument, buildSchemaSnapshot, createCodegenProject, describeErrorLevelFindings, diagnosticAt, diffSchemaSnapshots, discoverAgents, discoverAuthApiCalls, discoverContainers, discoverCrons, discoverFlags, discoverFunctions, discoverHttpRoutes, discoverInserts, discoverMaskProcedures, discoverMigrations, discoverMutators, discoverNondeterministicCalls, discoverNotifyCalls, discoverNotifyConfig, discoverQueries, discoverQueues, discoverR2sqlCalls, discoverRlsMetadata, discoverRlsProcedures, discoverSandboxUsage, discoverSchema, discoverShapes, discoverStorageRulesMetadata, discoverWorkflows, emitAgents, emitApi, emitApp, emitCollections, emitContainers, emitCrons, emitDataModel, emitDrizzleSchema, emitFunctions, emitOpenApi, emitOpenApiModule, emitOpenRpc, emitOpenRpcModule, emitServer, emitShard, emitVectors, emitWorkflows, emitWranglerCronTriggers, errorAdvisoryNames, errorPlatformDiagnosticNames, evaluateSchemaDrift, findTsconfig, formatAdvisories, generateSdk, isTypedSchema, lintSchema, parseSchemaSnapshot, platformMatrixIds, readPackageDependencies, readProjectTarget, redact, refreshCodegenProject, resolveCodegenTarget, runCodegen, schemaFromIr, secretKindOf, serializeSchemaSnapshot, toAdvisorContext, validatorIrToJsonSchema };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { AdvisorExportSink, AdvisorGeoIndexUsage, AdvisorNotifyCall, AdvisorNotifyConfig, Finding, LintContext, AdvisorProcedureProtection } from '@lunora/advisor';
2
2
  export type { Finding } from '@lunora/advisor';
3
- import '@lunora/platform';
4
3
  import { Project, Node } from 'ts-morph';
5
4
  import { LunoraError } from '@lunora/errors';
6
5
  export { MESSAGE_SOLUTIONS as LUNORA_SOLUTION_RULES, type Solution as LunoraSolution, type SolutionRule as LunoraSolutionRule, findSolutionByMessage as findLunoraSolution } from '@lunora/errors';
@@ -2321,6 +2320,17 @@ interface PlatformDiagnostic {
2321
2320
  * dot keeps it tucked away next to the schema it describes.
2322
2321
  */
2323
2322
  declare const SCHEMA_SNAPSHOT_FILENAME = ".lunora-schema.json";
2323
+ /**
2324
+ * Walk up from `startPath` until we find a `tsconfig.json` or hit the file
2325
+ * system root. Returns the absolute path to the tsconfig, or `undefined`.
2326
+ *
2327
+ * Exported (see the bottom-of-file `export { findTsconfig }`) so a long-lived
2328
+ * caller (the Vite dev-loop's cached-Project invalidation) can ask "which
2329
+ * tsconfig would {@link createCodegenProject} resolve right now?" without
2330
+ * duplicating the walk — recomputing it per call is a handful of `existsSync`
2331
+ * checks, negligible next to a Project rebuild.
2332
+ */
2333
+ declare const findTsconfig: (startPath: string) => string | undefined;
2324
2334
  /**
2325
2335
  * Construct the ts-morph `Project` codegen discovers over. Prefers the user's
2326
2336
  * `tsconfig.json` (when one is found walking up from `lunoraDirectory`) so
@@ -2341,9 +2351,16 @@ declare const createCodegenProject: (lunoraDirectory: string) => Project;
2341
2351
  * removes Project source files under `lunoraDirectory` that no longer exist on
2342
2352
  * disk (the classic stale-deleted-file cache bug).
2343
2353
  *
2344
- * Files outside `lunoraDirectory` (e.g. those pulled in by the user's tsconfig)
2345
- * are left untouchedthey back type resolution and rarely change in the
2346
- * dev-loop; a tsconfig change invalidates the whole cached Project upstream.
2354
+ * Files outside `lunoraDirectory` e.g. a shared validator or type pulled in
2355
+ * via the user's tsconfig are also `refreshFromFileSystemSync()`ed, but only
2356
+ * the ones already loaded into the Project; none are added. `resolveValidatorAlias`
2357
+ * (parse-validator.ts) follows `getAliasedSymbol()` across module boundaries, so a
2358
+ * validator defined outside `lunoraDirectory` is genuinely read from whatever
2359
+ * source the Project currently holds — leaving those files stale made a reused
2360
+ * Project (the Vite dev loop) silently disagree with a fresh one (`lunora
2361
+ * codegen`) about the same source. `node_modules` is excluded: its `.d.ts` set
2362
+ * dominates the file count and never changes mid dev-loop, so refreshing it would
2363
+ * reinstate close to the full re-parse cost this cache exists to avoid.
2347
2364
  */
2348
2365
  declare const refreshCodegenProject: (project: Project, lunoraDirectory: string) => void;
2349
2366
  /**
@@ -3588,4 +3605,4 @@ declare const secretKindOf: (value: string) => string | undefined;
3588
3605
  /** A redacted preview of a secret value — first 4 chars plus its length, never the full value. */
3589
3606
  declare const redact: (value: string) => string;
3590
3607
  declare const VERSION = "0.0.0";
3591
- export { AGENTS_FILENAME, type AgentIR, type AuthApiCallIR, CONTAINERS_FILENAME, CodegenDiagnosticError, type CodegenOptions, type CodegenResult, type ContainerIR, type CronJobIR, DEFAULT_TARGET, type DriftChange, type DriftScope, type EmitAppOptions, FLAGS_FILENAME, type FieldSnapshot, type FlagsIR, type FunctionIR, GENERATED_HEADER, type HttpRouteIR, type IndexIR, type IndexSnapshot, type InsertWriteIR, LUNORA_ERROR_CODES, type LintSchemaOptions, MUTATORS_FILENAME, type MaskProcedureIR, type MigrationIR, type MutatorIR, NOTIFY_FILENAME, OPENRPC_VERSION, type OpenApiEmitInput, type OpenRpcDocument, type OpenRpcEmitInput, type OpenRpcMethod, type PlatformDiagnostic, type ProjectIR, QUEUES_FILENAME, type QueryReadIR, type QueueIR, type R2sqlCallIR, type RelationSnapshot, type RlsMetadataIR, type RlsPolicyIR, type RlsProcedureIR, type RlsRoleIR, type RuntimeVerb, SCHEMA_SNAPSHOT_FILENAME, SCHEMA_SNAPSHOT_VERSION, SDK_LANGUAGES, SDK_TARGETS, SHAPES_FILENAME, type SandboxUsage, type SchemaDrift, type SchemaDriftDecision, type SchemaIR, type SchemaSnapshot, SchemaSnapshotParseError, type SdkFiles, type SdkMethod, type SdkNamespace, type SdkRenderInput, type SdkResult, type SdkTarget, type ShapeIR, type StorageRuleIR, type StorageRulesMetadataIR, type TableIR, type TableSnapshot, VERSION, type ValidatorIR, type VectorIndexIR, WORKFLOWS_FILENAME, type WorkflowIR, type WranglerVariableIR, buildOpenApiDocument, buildOpenRpcDocument, buildSchemaSnapshot, createCodegenProject, describeErrorLevelFindings, diagnosticAt, diffSchemaSnapshots, discoverAgents, discoverAuthApiCalls, discoverContainers, discoverCrons, discoverFlags, discoverFunctions, discoverHttpRoutes, discoverInserts, discoverMaskProcedures, discoverMigrations, discoverMutators, discoverNondeterministicCalls, discoverNotifyCalls, discoverNotifyConfig, discoverQueries, discoverQueues, discoverR2sqlCalls, discoverRlsMetadata, discoverRlsProcedures, discoverSandboxUsage, discoverSchema, discoverShapes, discoverStorageRulesMetadata, discoverWorkflows, emitAgents, emitApi, emitApp, emitCollections, emitContainers, emitCrons, emitDataModel, emitDrizzleSchema, emitFunctions, emitOpenApi, emitOpenApiModule, emitOpenRpc, emitOpenRpcModule, emitServer, emitShard, emitVectors, emitWorkflows, emitWranglerCronTriggers, errorAdvisoryNames, errorPlatformDiagnosticNames, evaluateSchemaDrift, formatAdvisories, generateSdk, isTypedSchema, lintSchema, parseSchemaSnapshot, platformMatrixIds, readPackageDependencies, readProjectTarget, redact, refreshCodegenProject, resolveCodegenTarget, runCodegen, schemaFromIr, secretKindOf, serializeSchemaSnapshot, toAdvisorContext, validatorIrToJsonSchema };
3608
+ export { AGENTS_FILENAME, type AgentIR, type AuthApiCallIR, CONTAINERS_FILENAME, CodegenDiagnosticError, type CodegenOptions, type CodegenResult, type ContainerIR, type CronJobIR, DEFAULT_TARGET, type DriftChange, type DriftScope, type EmitAppOptions, FLAGS_FILENAME, type FieldSnapshot, type FlagsIR, type FunctionIR, GENERATED_HEADER, type HttpRouteIR, type IndexIR, type IndexSnapshot, type InsertWriteIR, LUNORA_ERROR_CODES, type LintSchemaOptions, MUTATORS_FILENAME, type MaskProcedureIR, type MigrationIR, type MutatorIR, NOTIFY_FILENAME, OPENRPC_VERSION, type OpenApiEmitInput, type OpenRpcDocument, type OpenRpcEmitInput, type OpenRpcMethod, type PlatformDiagnostic, type ProjectIR, QUEUES_FILENAME, type QueryReadIR, type QueueIR, type R2sqlCallIR, type RelationSnapshot, type RlsMetadataIR, type RlsPolicyIR, type RlsProcedureIR, type RlsRoleIR, type RuntimeVerb, SCHEMA_SNAPSHOT_FILENAME, SCHEMA_SNAPSHOT_VERSION, SDK_LANGUAGES, SDK_TARGETS, SHAPES_FILENAME, type SandboxUsage, type SchemaDrift, type SchemaDriftDecision, type SchemaIR, type SchemaSnapshot, SchemaSnapshotParseError, type SdkFiles, type SdkMethod, type SdkNamespace, type SdkRenderInput, type SdkResult, type SdkTarget, type ShapeIR, type StorageRuleIR, type StorageRulesMetadataIR, type TableIR, type TableSnapshot, VERSION, type ValidatorIR, type VectorIndexIR, WORKFLOWS_FILENAME, type WorkflowIR, type WranglerVariableIR, buildOpenApiDocument, buildOpenRpcDocument, buildSchemaSnapshot, createCodegenProject, describeErrorLevelFindings, diagnosticAt, diffSchemaSnapshots, discoverAgents, discoverAuthApiCalls, discoverContainers, discoverCrons, discoverFlags, discoverFunctions, discoverHttpRoutes, discoverInserts, discoverMaskProcedures, discoverMigrations, discoverMutators, discoverNondeterministicCalls, discoverNotifyCalls, discoverNotifyConfig, discoverQueries, discoverQueues, discoverR2sqlCalls, discoverRlsMetadata, discoverRlsProcedures, discoverSandboxUsage, discoverSchema, discoverShapes, discoverStorageRulesMetadata, discoverWorkflows, emitAgents, emitApi, emitApp, emitCollections, emitContainers, emitCrons, emitDataModel, emitDrizzleSchema, emitFunctions, emitOpenApi, emitOpenApiModule, emitOpenRpc, emitOpenRpcModule, emitServer, emitShard, emitVectors, emitWorkflows, emitWranglerCronTriggers, errorAdvisoryNames, errorPlatformDiagnosticNames, evaluateSchemaDrift, findTsconfig, formatAdvisories, generateSdk, isTypedSchema, lintSchema, parseSchemaSnapshot, platformMatrixIds, readPackageDependencies, readProjectTarget, redact, refreshCodegenProject, resolveCodegenTarget, runCodegen, schemaFromIr, secretKindOf, serializeSchemaSnapshot, toAdvisorContext, validatorIrToJsonSchema };
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-CFhF_hmg.mjs";import{formatAdvisories as m,lintSchema as d,toAdvisorContext as p}from"./packem_shared/formatAdvisories-CQvIhQ04.mjs";import{describeErrorLevelFindings as c,errorAdvisoryNames as n,errorPlatformDiagnosticNames as S}from"./packem_shared/describeErrorLevelFindings-IhNx9gPr.mjs";import{CodegenDiagnosticError as E,diagnosticAt as x}from"./packem_shared/CodegenDiagnosticError-DPezpZTz.mjs";import{AGENTS_FILENAME as u,discoverAgents as v}from"./packem_shared/AGENTS_FILENAME-Dk-k250h.mjs";import{default as O}from"./packem_shared/discoverAuthApiCalls-XfNbxqlq.mjs";import{CONTAINERS_FILENAME as g,discoverContainers as M}from"./packem_shared/CONTAINERS_FILENAME-DQpyhY6c.mjs";import{default as h}from"./packem_shared/discoverCrons-RlATa0_t.mjs";import{FLAGS_FILENAME as I,discoverFlags as L}from"./packem_shared/FLAGS_FILENAME-Boqm0YCP.mjs";import{discoverFunctions as F}from"./packem_shared/discoverFunctions-4TNKUv7P.mjs";import{default as P}from"./packem_shared/discoverHttpRoutes-DQivLBqT.mjs";import{default as G}from"./packem_shared/discoverInserts-D6szWzrV.mjs";import{default as b}from"./packem_shared/discoverMaskProcedures-BBPqLXA5.mjs";import{default as y}from"./packem_shared/discoverMigrations-rbjxflR8.mjs";import{MUTATORS_FILENAME as W,discoverMutators as K}from"./packem_shared/MUTATORS_FILENAME-Cp_JxLSz.mjs";import{default as j}from"./packem_shared/discoverNondeterministicCalls-Bxr652Rz.mjs";import{NOTIFY_FILENAME as w,discoverNotifyCalls as B,discoverNotifyConfig as q}from"./packem_shared/NOTIFY_FILENAME-DwyJ5I4Q.mjs";import{default as Y}from"./packem_shared/readPackageDependencies-CogJX1Ia.mjs";import{I as X}from"./packem_shared/discover-queries-CU9o_j87.mjs";import{QUEUES_FILENAME as ee,discoverQueues as re}from"./packem_shared/QUEUES_FILENAME-QpMZsde0.mjs";import{default as te}from"./packem_shared/discoverR2sqlCalls-DMxG6gHr.mjs";import{discoverRlsMetadata as ae,default as ie}from"./packem_shared/discoverRlsMetadata-B63ARnKG.mjs";import{discoverSandboxUsage as de}from"./packem_shared/discoverSandboxUsage-DBM98vVh.mjs";import{default as fe}from"./packem_shared/discoverSchema-BNr7PVcZ.mjs";import{SHAPES_FILENAME as ne,discoverShapes as Se}from"./packem_shared/SHAPES_FILENAME-WxXOsYfe.mjs";import{default as Ee}from"./packem_shared/discoverStorageRulesMetadata-_40MGqRX.mjs";import{WORKFLOWS_FILENAME as Ae,discoverWorkflows as ue}from"./packem_shared/WORKFLOWS_FILENAME-Dz80zqeT.mjs";import{S as Ne,h as Oe,M as Re,B as ge,p as Me,L as Ce,R as he,C as _e,V as Ie,Q as Le,$ as Te,E as Fe,m as De,F as Pe}from"./packem_shared/emit-BbLyaTLJ.mjs";import{emitApp as Ge}from"./packem_shared/emitApp-DkO-Qvoo.mjs";import{buildOpenApiDocument as be,emitOpenApi as ke,emitOpenApiModule as ye}from"./packem_shared/buildOpenApiDocument-B8-PH9af.mjs";import{OPENRPC_VERSION as We,buildOpenRpcDocument as Ke,emitOpenRpc as Qe,emitOpenRpcModule as je}from"./packem_shared/OPENRPC_VERSION-Bzh1vxcl.mjs";import{DEFAULT_TARGET as we,platformMatrixIds as Be,readProjectTarget as qe,resolveCodegenTarget as Je}from"./packem_shared/DEFAULT_TARGET-CH5disA3.mjs";import{SCHEMA_SNAPSHOT_FILENAME as $e,createCodegenProject as Xe,refreshCodegenProject as Ze,runCodegen as er}from"./packem_shared/SCHEMA_SNAPSHOT_FILENAME-DlCvMk66.mjs";import{SchemaSnapshotParseError as or,buildSchemaSnapshot as tr,evaluateSchemaDrift as sr,parseSchemaSnapshot as ar}from"./packem_shared/SchemaSnapshotParseError-BkgxjBPQ.mjs";import{schemaFromIr as mr}from"./packem_shared/schemaFromIr-R1ZFzVyy.mjs";import{LUNORA_ERROR_CODES as pr,validatorIrToJsonSchema as fr}from"./packem_shared/LUNORA_ERROR_CODES-zfAI2OFs.mjs";import{SDK_LANGUAGES as nr,SDK_TARGETS as Sr,generateSdk as lr}from"./packem_shared/SDK_LANGUAGES-fIqQtE14.mjs";import{redact as xr,secretKindOf as Ar}from"./packem_shared/redact-6jD4lAhq.mjs";import{MESSAGE_SOLUTIONS as vr,findSolutionByMessage as Nr}from"@lunora/errors";import{isTypedSchema as Rr}from"./packem_shared/isTypedSchema-9wiKtXr2.mjs";const e="0.0.0";export{u as AGENTS_FILENAME,g as CONTAINERS_FILENAME,E as CodegenDiagnosticError,we as DEFAULT_TARGET,I as FLAGS_FILENAME,Ne as GENERATED_HEADER,pr as LUNORA_ERROR_CODES,vr as LUNORA_SOLUTION_RULES,W as MUTATORS_FILENAME,w as NOTIFY_FILENAME,We as OPENRPC_VERSION,ee as QUEUES_FILENAME,$e as SCHEMA_SNAPSHOT_FILENAME,t as SCHEMA_SNAPSHOT_VERSION,nr as SDK_LANGUAGES,Sr as SDK_TARGETS,ne as SHAPES_FILENAME,or as SchemaSnapshotParseError,e as VERSION,Ae as WORKFLOWS_FILENAME,be as buildOpenApiDocument,Ke as buildOpenRpcDocument,tr as buildSchemaSnapshot,Xe as createCodegenProject,c as describeErrorLevelFindings,x as diagnosticAt,s as diffSchemaSnapshots,v as discoverAgents,O as discoverAuthApiCalls,M as discoverContainers,h as discoverCrons,L as discoverFlags,F as discoverFunctions,P as discoverHttpRoutes,G as discoverInserts,b as discoverMaskProcedures,y as discoverMigrations,K as discoverMutators,j as discoverNondeterministicCalls,B as discoverNotifyCalls,q as discoverNotifyConfig,X as discoverQueries,re as discoverQueues,te as discoverR2sqlCalls,ae as discoverRlsMetadata,ie as discoverRlsProcedures,de as discoverSandboxUsage,fe as discoverSchema,Se as discoverShapes,Ee as discoverStorageRulesMetadata,ue as discoverWorkflows,Oe as emitAgents,Re as emitApi,Ge as emitApp,ge as emitCollections,Me as emitContainers,Ce as emitCrons,he as emitDataModel,_e as emitDrizzleSchema,Ie as emitFunctions,ke as emitOpenApi,ye as emitOpenApiModule,Qe as emitOpenRpc,je as emitOpenRpcModule,Le as emitServer,Te as emitShard,Fe as emitVectors,De as emitWorkflows,Pe as emitWranglerCronTriggers,n as errorAdvisoryNames,S as errorPlatformDiagnosticNames,sr as evaluateSchemaDrift,Nr as findLunoraSolution,m as formatAdvisories,lr as generateSdk,Rr as isTypedSchema,d as lintSchema,ar as parseSchemaSnapshot,Be as platformMatrixIds,Y as readPackageDependencies,qe as readProjectTarget,xr as redact,Ze as refreshCodegenProject,Je as resolveCodegenTarget,er as runCodegen,mr as schemaFromIr,Ar as secretKindOf,a as serializeSchemaSnapshot,p as toAdvisorContext,fr as validatorIrToJsonSchema};
1
+ import{SCHEMA_SNAPSHOT_VERSION as t,diffSchemaSnapshots as s,serializeSchemaSnapshot as a}from"./packem_shared/SCHEMA_SNAPSHOT_VERSION-DIqnj_32.mjs";import{formatAdvisories as m,lintSchema as d,toAdvisorContext as f}from"./packem_shared/formatAdvisories-BjTV22uR.mjs";import{describeErrorLevelFindings as c,errorAdvisoryNames as n,errorPlatformDiagnosticNames as S}from"./packem_shared/describeErrorLevelFindings-D23VSkFP.mjs";import{CodegenDiagnosticError as E,diagnosticAt as x}from"./packem_shared/CodegenDiagnosticError-BUXlG3P-.mjs";import{AGENTS_FILENAME as u,discoverAgents as v}from"./packem_shared/AGENTS_FILENAME-CPHo8Se5.mjs";import{default as g}from"./packem_shared/discoverAuthApiCalls-DUjcl0SB.mjs";import{CONTAINERS_FILENAME as R,discoverContainers as M}from"./packem_shared/CONTAINERS_FILENAME-Bvn6LZP6.mjs";import{default as C}from"./packem_shared/discoverCrons-BUJO2ipU.mjs";import{FLAGS_FILENAME as T,discoverFlags as I}from"./packem_shared/FLAGS_FILENAME-DtBWyUKq.mjs";import{discoverFunctions as F}from"./packem_shared/discoverFunctions-h8i51Mec.mjs";import{default as P}from"./packem_shared/discoverHttpRoutes-MX6y-iVE.mjs";import{default as G}from"./packem_shared/discoverInserts-YX8AmrzL.mjs";import{default as b}from"./packem_shared/discoverMaskProcedures-DhcK-YMG.mjs";import{default as y}from"./packem_shared/discoverMigrations-4Jjf5DJE.mjs";import{MUTATORS_FILENAME as j,discoverMutators as K}from"./packem_shared/MUTATORS_FILENAME-CRmTpN4y.mjs";import{default as z}from"./packem_shared/discoverNondeterministicCalls-CjS2Mznw.mjs";import{NOTIFY_FILENAME as w,discoverNotifyCalls as q,discoverNotifyConfig as B}from"./packem_shared/NOTIFY_FILENAME-BybR3Xbd.mjs";import{default as Y}from"./packem_shared/readPackageDependencies-C6h6FZuP.mjs";import{d as Z}from"./packem_shared/discover-queries-Dfj_0WJG.mjs";import{QUEUES_FILENAME as ee,discoverQueues as re}from"./packem_shared/QUEUES_FILENAME-BnGLtAIu.mjs";import{default as te}from"./packem_shared/discoverR2sqlCalls-DuTuaSMM.mjs";import{discoverRlsMetadata as ae,default as ie}from"./packem_shared/discoverRlsMetadata-BYVq6cVp.mjs";import{discoverSandboxUsage as de}from"./packem_shared/discoverSandboxUsage-L0lV17de.mjs";import{default as pe}from"./packem_shared/discoverSchema-BtlNz9b_.mjs";import{SHAPES_FILENAME as ne,discoverShapes as Se}from"./packem_shared/SHAPES_FILENAME-DxoIrQhA.mjs";import{default as Ee}from"./packem_shared/discoverStorageRulesMetadata-CKPFWHT5.mjs";import{WORKFLOWS_FILENAME as Ae,discoverWorkflows as ue}from"./packem_shared/WORKFLOWS_FILENAME-B8y51Frf.mjs";import{G as Ne,e as ge,a as Oe,b as Re,c as Me,d as he,f as Ce,g as _e,h as Te,i as Ie,j as Le,k as Fe,l as De,m as Pe}from"./packem_shared/emit-Ba3NiOwK.mjs";import{emitApp as Ge}from"./packem_shared/emitApp-hKEej7rj.mjs";import{buildOpenApiDocument as be,emitOpenApi as ke,emitOpenApiModule as ye}from"./packem_shared/buildOpenApiDocument-B2mW3f5a.mjs";import{OPENRPC_VERSION as je,buildOpenRpcDocument as Ke,emitOpenRpc as Ve,emitOpenRpcModule as ze}from"./packem_shared/OPENRPC_VERSION-DB1PSt8W.mjs";import{DEFAULT_TARGET as we,platformMatrixIds as qe,readProjectTarget as Be,resolveCodegenTarget as Je}from"./packem_shared/DEFAULT_TARGET-CIH5PRk1.mjs";import{SCHEMA_SNAPSHOT_FILENAME as Xe,createCodegenProject as Ze,findTsconfig as $e,refreshCodegenProject as er,runCodegen as rr}from"./packem_shared/SCHEMA_SNAPSHOT_FILENAME-D9rvsQ0t.mjs";import{SchemaSnapshotParseError as tr,buildSchemaSnapshot as sr,evaluateSchemaDrift as ar,parseSchemaSnapshot as ir}from"./packem_shared/SchemaSnapshotParseError-Dc1aZAph.mjs";import{schemaFromIr as dr}from"./packem_shared/schemaFromIr-BWFnvCVg.mjs";import{LUNORA_ERROR_CODES as pr,validatorIrToJsonSchema as cr}from"./packem_shared/LUNORA_ERROR_CODES-BYg8Lpgb.mjs";import{SDK_LANGUAGES as Sr,SDK_TARGETS as lr,generateSdk as Er}from"./packem_shared/SDK_LANGUAGES-p7vq4x7B.mjs";import{redact as Ar,secretKindOf as ur}from"./packem_shared/redact-Cy14LEnc.mjs";import{MESSAGE_SOLUTIONS as Nr,findSolutionByMessage as gr}from"@lunora/errors";import{isTypedSchema as Rr}from"./packem_shared/isTypedSchema-CU-O5qSH.mjs";const e="0.0.0";export{u as AGENTS_FILENAME,R as CONTAINERS_FILENAME,E as CodegenDiagnosticError,we as DEFAULT_TARGET,T as FLAGS_FILENAME,Ne as GENERATED_HEADER,pr as LUNORA_ERROR_CODES,Nr as LUNORA_SOLUTION_RULES,j as MUTATORS_FILENAME,w as NOTIFY_FILENAME,je as OPENRPC_VERSION,ee as QUEUES_FILENAME,Xe as SCHEMA_SNAPSHOT_FILENAME,t as SCHEMA_SNAPSHOT_VERSION,Sr as SDK_LANGUAGES,lr as SDK_TARGETS,ne as SHAPES_FILENAME,tr as SchemaSnapshotParseError,e as VERSION,Ae as WORKFLOWS_FILENAME,be as buildOpenApiDocument,Ke as buildOpenRpcDocument,sr as buildSchemaSnapshot,Ze as createCodegenProject,c as describeErrorLevelFindings,x as diagnosticAt,s as diffSchemaSnapshots,v as discoverAgents,g as discoverAuthApiCalls,M as discoverContainers,C as discoverCrons,I as discoverFlags,F as discoverFunctions,P as discoverHttpRoutes,G as discoverInserts,b as discoverMaskProcedures,y as discoverMigrations,K as discoverMutators,z as discoverNondeterministicCalls,q as discoverNotifyCalls,B as discoverNotifyConfig,Z as discoverQueries,re as discoverQueues,te as discoverR2sqlCalls,ae as discoverRlsMetadata,ie as discoverRlsProcedures,de as discoverSandboxUsage,pe as discoverSchema,Se as discoverShapes,Ee as discoverStorageRulesMetadata,ue as discoverWorkflows,ge as emitAgents,Oe as emitApi,Ge as emitApp,Re as emitCollections,Me as emitContainers,he as emitCrons,Ce as emitDataModel,_e as emitDrizzleSchema,Te as emitFunctions,ke as emitOpenApi,ye as emitOpenApiModule,Ve as emitOpenRpc,ze as emitOpenRpcModule,Ie as emitServer,Le as emitShard,Fe as emitVectors,De as emitWorkflows,Pe as emitWranglerCronTriggers,n as errorAdvisoryNames,S as errorPlatformDiagnosticNames,ar as evaluateSchemaDrift,gr as findLunoraSolution,$e as findTsconfig,m as formatAdvisories,Er as generateSdk,Rr as isTypedSchema,d as lintSchema,ir as parseSchemaSnapshot,qe as platformMatrixIds,Y as readPackageDependencies,Be as readProjectTarget,Ar as redact,er as refreshCodegenProject,Je as resolveCodegenTarget,rr as runCodegen,dr as schemaFromIr,ur as secretKindOf,a as serializeSchemaSnapshot,f as toAdvisorContext,cr as validatorIrToJsonSchema};
@@ -0,0 +1 @@
1
+ import{existsSync as u}from"node:fs";import{join as p}from"node:path";import{agentDefaultName as d,agentClassName as f,agentBindingName as b,voiceBindingName as N,voiceClassName as y}from"@lunora/agent/naming";import{LunoraError as l}from"@lunora/errors";import{Node as a,SyntaxKind as m}from"ts-morph";import{diagnosticAt as g}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{u as A,s as w}from"./discover-ast-D33zP-NZ.mjs";const h="agents.ts",E=i=>{const t=i.getSymbol();if(!t)return i.getText()==="defineAgent";for(const n of t.getDeclarations())if(a.isImportSpecifier(n))return n.getImportDeclaration().getModuleSpecifierValue()!=="@lunora/agent"?!1:n.getNameNode().getText()==="defineAgent";return!1},P=w("agent"),I=(i,t,n)=>{if(i.getKind()===m.TrueKeyword)return!0;if(i.getKind()===m.FalseKeyword)return!1;throw g(i,`agent "${t}": \`${n}\` must be a static boolean literal — it is deploy configuration codegen writes into the ctx.agents wiring spec`)},T=(i,t)=>{const n=i.getArguments()[0];if(!n||!a.isObjectLiteralExpression(n))throw g(i,`agent "${t}": defineAgent must be passed an inline object literal`);const o={bindingName:b(t),className:f(t),exportName:t,name:d(t)},e=n.getProperty("name");e&&a.isPropertyAssignment(e)&&(o.name=P(e.getInitializerOrThrow(),t,"name"));const r=n.getProperty("publicRun");r&&a.isPropertyAssignment(r)&&I(r.getInitializerOrThrow(),t,"publicRun")&&(o.publicRun=!0);const s=n.getProperty("voice");if(s&&a.isPropertyAssignment(s)){const c=s.getInitializerOrThrow();if(!a.isObjectLiteralExpression(c))throw g(c,`agent "${t}": \`voice\` must be an inline object literal — its presence tells codegen to emit the voice-session Durable Object`);o.voice=!0,o.voiceBindingName=N(t),o.voiceClassName=y(t)}return n.getProperty("onEmail")&&(o.onEmail=!0),o},v=i=>{const t=[];for(const n of i.getVariableDeclarations()){if(!n.isExported())continue;const o=A(n.getInitializer());if(!o)continue;const e=o.getExpression();if(!a.isIdentifier(e)||!E(e))continue;const r=n.getNameNode();if(!a.isIdentifier(r))throw g(r,"defineAgent exports must be plain named exports (no destructuring)");t.push(T(o,r.getText()))}return t},D=i=>{const t=new Map,n=new Map,o=new Map;for(const e of i){const r=t.get(e.name);if(r!==void 0)throw new l("DUPLICATE_AGENT_NAME",`Duplicate agent name "${e.name}": produced by both "${r}" and "${e.exportName}". Deployed agent names must be unique across the project.`,{status:500});t.set(e.name,e.exportName);const s=n.get(e.bindingName);if(s!==void 0)throw new l("DUPLICATE_AGENT_BINDING",`Duplicate agent binding "${e.bindingName}": produced by both "${s}" and "${e.exportName}". Agent export names must yield unique binding names.`,{status:500});n.set(e.bindingName,e.exportName);const c=o.get(e.className);if(c!==void 0)throw new l("DUPLICATE_AGENT_CLASS",`Duplicate agent class "${e.className}": produced by both "${c}" and "${e.exportName}". Agent export names must yield unique generated class names.`,{status:500});o.set(e.className,e.exportName)}},j=(i,t)=>{const n=p(t,h);if(!u(n))return[];const o=i.getSourceFile(n)??i.addSourceFileAtPath(n),e=v(o);return e.sort((r,s)=>r.exportName.localeCompare(s.exportName)),D(e),e};export{h as AGENTS_FILENAME,j as discoverAgents};
@@ -1 +1 @@
1
- import{existsSync as f}from"node:fs";import{join as p}from"node:path";import{containerClassName as d,containerBindingName as b,normalizeContainerImage as g}from"@lunora/container";import{SyntaxKind as y,Node as n}from"ts-morph";import{diagnosticAt as c}from"./CodegenDiagnosticError-DPezpZTz.mjs";import{v as N}from"./discover-ast-7ABwvTVn.mjs";const x="containers.ts",L=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineContainer";for(const i of t.getDeclarations())if(n.isImportSpecifier(i))return i.getImportDeclaration().getModuleSpecifierValue()!=="@lunora/container"?!1:i.getNameNode().getText()==="defineContainer";return!1},u=N("container"),m=(e,t,i)=>{if(n.isNumericLiteral(e))return e.getLiteralValue();throw c(e,`container "${t}": \`${i}\` must be a static number literal — it is deploy configuration codegen writes into wrangler.jsonc`)},h=(e,t)=>{if(n.isStringLiteral(e)||n.isNoSubstitutionTemplateLiteral(e))return g(e.getLiteralValue());if(n.isObjectLiteralExpression(e)){const i=e.getProperty("registry");if(i&&n.isPropertyAssignment(i)){const o=i.getInitializerOrThrow();return g({registry:u(o,t,"image.registry")})}const r=e.getProperty("build");if(r&&n.isPropertyAssignment(r)){const o=r.getInitializerOrThrow();return g({build:u(o,t,"image.build")})}}throw c(e,`container "${t}": \`image\` must be a static string path, { registry: "…" }, or { build: "…" } literal`)},T=e=>{if(!n.isObjectLiteralExpression(e))return;const t={};for(const i of e.getProperties()){if(!n.isPropertyAssignment(i))continue;const r=i.getInitializerOrThrow();(n.isStringLiteral(r)||n.isNoSubstitutionTemplateLiteral(r))&&(t[i.getName()]=r.getLiteralValue())}return Object.keys(t).length>0?t:void 0},w=e=>{if(!n.isObjectLiteralExpression(e))return;const t={};for(const i of e.getProperties()){if(!n.isPropertyAssignment(i))continue;const r=i.getName(),o=i.getInitializerOrThrow();n.isNumericLiteral(o)&&(r==="gracePeriodSeconds"||r==="stepPercentage")&&(t[r]=o.getLiteralValue())}return t.gracePeriodSeconds===void 0&&t.stepPercentage===void 0?void 0:t},I=e=>{if(n.isTrueLiteral(e))return!0;if(n.isFalseLiteral(e))return!1},P=e=>{if(n.isStringLiteral(e)||n.isNoSubstitutionTemplateLiteral(e)||n.isNumericLiteral(e))return e.getLiteralValue()},k=(e,t)=>{if(n.isStringLiteral(e))return e.getLiteralValue();if(n.isObjectLiteralExpression(e)){const i={};for(const r of e.getProperties()){if(!n.isPropertyAssignment(r))throw c(r,`container "${t}": \`instanceType\` must be an object of static number literals`);const o=r.getName();if(o!=="diskMb"&&o!=="memoryMib"&&o!=="vcpu")throw c(r,`container "${t}": unknown \`instanceType\` field "${o}" — expected vcpu, memoryMib, or diskMb`);i[o]=m(r.getInitializerOrThrow(),t,`instanceType.${o}`)}return i}throw c(e,`container "${t}": \`instanceType\` must be a static string or { vcpu, memoryMib, diskMb } literal`)},S=(e,t)=>{const i=e.getArguments()[0];if(!i||!n.isObjectLiteralExpression(i))throw c(e,`container "${t}": defineContainer must be passed an inline object literal`);const r={bindingName:b(t),className:d(t),exportName:t,image:{buildContext:".",dockerfilePath:"./Dockerfile",kind:"dockerfile"}};let o=!1;for(const s of i.getProperties()){if(!n.isPropertyAssignment(s))continue;const l=s.getName(),a=s.getInitializerOrThrow();switch(l){case"buildArgs":{r.buildArgs=T(a);break}case"enableInternet":{r.enableInternet=I(a);break}case"image":{r.image=h(a,t),o=!0;break}case"instanceType":{r.instanceType=k(a,t);break}case"maxInstances":{r.maxInstances=m(a,t,"maxInstances");break}case"name":{r.name=u(a,t,"name");break}case"rollout":{r.rollout=w(a);break}case"sleepAfter":{r.sleepAfter=P(a);break}}}if(!o)throw c(i,`container "${t}": defineContainer requires a static \`image\` property`);return r},A=e=>{const t=[];for(const i of e.getVariableDeclarations()){if(!i.isExported())continue;const r=i.getInitializer();if(r?.getKind()!==y.CallExpression)continue;const o=r,s=o.getExpression();if(!n.isIdentifier(s)||!L(s))continue;const l=i.getNameNode();if(!n.isIdentifier(l))throw c(l,"defineContainer exports must be plain named exports (no destructuring)");t.push(S(o,l.getText()))}return t},z=(e,t)=>{const i=p(t,x);if(!f(i))return[];const r=e.getSourceFile(i)??e.addSourceFileAtPath(i),o=A(r);return o.sort((s,l)=>s.exportName.localeCompare(l.exportName)),o};export{x as CONTAINERS_FILENAME,z as discoverContainers};
1
+ import{existsSync as f}from"node:fs";import{join as d}from"node:path";import{containerClassName as b,containerBindingName as p,normalizeContainerImage as u}from"@lunora/container";import{SyntaxKind as y,Node as n}from"ts-morph";import{diagnosticAt as c}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{s as L}from"./discover-ast-D33zP-NZ.mjs";const P="containers.ts",h=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineContainer";for(const i of t.getDeclarations())if(n.isImportSpecifier(i))return i.getImportDeclaration().getModuleSpecifierValue()!=="@lunora/container"?!1:i.getNameNode().getText()==="defineContainer";return!1},g=L("container"),m=(e,t,i)=>{if(n.isNumericLiteral(e))return e.getLiteralValue();throw c(e,`container "${t}": \`${i}\` must be a static number literal — it is deploy configuration codegen writes into wrangler.jsonc`)},T=(e,t)=>{if(n.isStringLiteral(e)||n.isNoSubstitutionTemplateLiteral(e))return u(e.getLiteralValue());if(n.isObjectLiteralExpression(e)){const i=e.getProperty("registry");if(i&&n.isPropertyAssignment(i)){const o=i.getInitializerOrThrow();return u({registry:g(o,t,"image.registry")})}const r=e.getProperty("build");if(r&&n.isPropertyAssignment(r)){const o=r.getInitializerOrThrow();return u({build:g(o,t,"image.build")})}}throw c(e,`container "${t}": \`image\` must be a static string path, { registry: "…" }, or { build: "…" } literal`)},k=e=>{if(!n.isObjectLiteralExpression(e))return;const t={};for(const i of e.getProperties()){if(!n.isPropertyAssignment(i))continue;const r=i.getInitializerOrThrow();(n.isStringLiteral(r)||n.isNoSubstitutionTemplateLiteral(r))&&(t[i.getName()]=r.getLiteralValue())}return Object.keys(t).length>0?t:void 0},I=e=>{if(!n.isObjectLiteralExpression(e))return;const t={};for(const i of e.getProperties()){if(!n.isPropertyAssignment(i))continue;const r=i.getName(),o=i.getInitializerOrThrow();n.isNumericLiteral(o)&&(r==="gracePeriodSeconds"||r==="stepPercentage")&&(t[r]=o.getLiteralValue())}return t.gracePeriodSeconds===void 0&&t.stepPercentage===void 0?void 0:t},w=e=>{if(n.isTrueLiteral(e))return!0;if(n.isFalseLiteral(e))return!1},S=e=>{if(n.isStringLiteral(e)||n.isNoSubstitutionTemplateLiteral(e)||n.isNumericLiteral(e))return e.getLiteralValue()},A=(e,t)=>{if(n.isStringLiteral(e))return e.getLiteralValue();if(n.isObjectLiteralExpression(e)){const i={};for(const r of e.getProperties()){if(!n.isPropertyAssignment(r))throw c(r,`container "${t}": \`instanceType\` must be an object of static number literals`);const o=r.getName();if(o!=="diskMb"&&o!=="memoryMib"&&o!=="vcpu")throw c(r,`container "${t}": unknown \`instanceType\` field "${o}" — expected vcpu, memoryMib, or diskMb`);i[o]=m(r.getInitializerOrThrow(),t,`instanceType.${o}`)}return i}throw c(e,`container "${t}": \`instanceType\` must be a static string or { vcpu, memoryMib, diskMb } literal`)},v=(e,t)=>{const i=e.getArguments()[0];if(!i||!n.isObjectLiteralExpression(i))throw c(e,`container "${t}": defineContainer must be passed an inline object literal`);const r={bindingName:p(t),className:b(t),exportName:t,image:{buildContext:".",dockerfilePath:"./Dockerfile",kind:"dockerfile"}};let o=!1;for(const a of i.getProperties()){if(!n.isPropertyAssignment(a))continue;const l=a.getName(),s=a.getInitializerOrThrow();switch(l){case"buildArgs":{r.buildArgs=k(s);break}case"enableInternet":{r.enableInternet=w(s);break}case"image":{r.image=T(s,t),o=!0;break}case"instanceType":{r.instanceType=A(s,t);break}case"maxInstances":{r.maxInstances=m(s,t,"maxInstances");break}case"name":{r.name=g(s,t,"name");break}case"rollout":{r.rollout=I(s);break}case"sleepAfter":{r.sleepAfter=S(s);break}}}if(!o)throw c(i,`container "${t}": defineContainer requires a static \`image\` property`);return r},C=e=>{const t=[];for(const i of e.getVariableDeclarations()){if(!i.isExported())continue;const r=i.getInitializer();if(r?.getKind()!==y.CallExpression)continue;const o=r,a=o.getExpression();if(!n.isIdentifier(a)||!h(a))continue;const l=i.getNameNode();if(!n.isIdentifier(l))throw c(l,"defineContainer exports must be plain named exports (no destructuring)");t.push(v(o,l.getText()))}return t},F=(e,t)=>{const i=d(t,P);if(!f(i))return[];const r=e.getSourceFile(i)??e.addSourceFileAtPath(i),o=C(r);return o.sort((a,l)=>a.exportName.localeCompare(l.exportName)),o};export{P as CONTAINERS_FILENAME,F as discoverContainers};
@@ -0,0 +1 @@
1
+ import{LunoraError as l}from"@lunora/errors";class a extends l{column;file;line;constructor(r,t,o,e){super("CODEGEN_DIAGNOSTIC",r,{location:{column:e,file:t,line:o},name:"CodegenDiagnosticError"}),this.file=t,this.line=o,this.column=e}}const m=(n,r,t)=>{const o=n.getSourceFile(),e=o.getFilePath(),s=n.getStartLineNumber(),{column:i}=o.getLineAndColumnAtPos(n.getStart()),g=`@lunora/codegen: ${r} (${e}:${s.toString()}:${i.toString()})`,c=new a(g,e,s,i);return t?Object.assign(c,t):c};export{a as CodegenDiagnosticError,m as diagnosticAt};
@@ -0,0 +1 @@
1
+ import{existsSync as c,readFileSync as d}from"node:fs";import{join as u}from"node:path";import{NODE_CAPABILITIES as p,CLOUDFLARE_CAPABILITIES as f}from"@lunora/platform";import{parse as m}from"jsonc-parser";const g="cloudflare",y="lunora.json",h=r=>{const e=u(r,y);if(!c(e))return;let o;try{o=d(e,"utf8")}catch{return}const s=[],a=m(o,s,{allowTrailingComma:!0});if(s.length>0||a===null||typeof a!="object")return;const{target:t}=a;return typeof t=="string"&&t.length>0?t:void 0},b=(r,e)=>e??h(r)??g,i={cloudflare:f,node:p},w=()=>Object.keys(i).toSorted((r,e)=>r.localeCompare(e)),v={ai:"ai",analytics:"analytics",browser:"browser",container:"containers",hyperdrive:"hyperdrive",kv:"keyValueStore",mail:"mail",pipelines:"pipelines",scheduler:"scheduler",storage:"objectStorage",vectors:"vectorStore",workflows:"workflows"},T=(r,e,o)=>{const s={...r},a=[];for(const[t,n]of Object.entries(v)){if(!r[t])continue;const l=e.features[n]?.level;l==="unsupported"?(s[t]=!1,a.push({feature:t,level:"error",message:`${e.name} does not support "${t}" (ctx.${t}). Its surface was omitted from the generated types.`,name:"platform_unsupported_feature",remediation:`Remove the ctx.${t} usage, or deploy to a target whose capability matrix marks "${n}" as native or emulated.`,target:o})):l===void 0&&(s[t]=!1,a.push({feature:t,level:"error",message:`${e.name}'s capability matrix does not declare a support level for "${t}" (ctx.${t}). Treated as unsupported and its surface was omitted from the generated types.`,name:"platform_undeclared_feature",remediation:`Rate "${n}" in the ${e.name} capability matrix as "native", "emulated", or "unsupported" — an undeclared feature fails closed rather than shipping a surface the host may not provide.`,target:o}))}return{diagnostics:a,usage:s}},C=(r,e)=>{const o=i[e];return o===void 0?{diagnostics:[{level:"error",message:`Unknown deploy target "${e}" — no capability matrix is registered for it. Codegen emitted the full Cloudflare surface un-gated.`,name:"platform_unknown_target",remediation:`Use a registered target (${Object.keys(i).join(", ")}) or install the target's @lunora/platform-${e} package.`,target:e}],usage:{...r}}:T(r,o,e)};export{g as DEFAULT_TARGET,y as PROJECT_CONFIG_FILE,T as gateAgainstMatrix,C as gatePlatformFeatures,w as platformMatrixIds,h as readProjectTarget,b as resolveCodegenTarget};
@@ -0,0 +1 @@
1
+ import{existsSync as c}from"node:fs";import{join as g}from"node:path";import{SyntaxKind as p,Node as o}from"ts-morph";import{l as d,d as f,p as u,i as l}from"./discover-ast-D33zP-NZ.mjs";const m="flags.ts",v=new Set(["boolean","number","object","string"]),x="@lunora/flags/providers/flagship",y=r=>{const i=r.getSymbol();if(!i)return r.getText()==="flagshipProvider";for(const e of i.getDeclarations())if(o.isImportSpecifier(e))return e.getImportDeclaration().getModuleSpecifierValue()!==x?!1:e.getNameNode().getText()==="flagshipProvider";return!1},E=(r,i)=>{const e=r.getProperty(i);if(!e||!o.isPropertyAssignment(e))return;const t=e.getInitializerOrThrow();if(o.isStringLiteral(t)||o.isNoSubstitutionTemplateLiteral(t))return t.getLiteralValue()},S=r=>{const i=r.getArguments()[0];if(i&&o.isObjectLiteralExpression(i)){const e=E(i,"binding");if(e!==void 0&&e.length>0)return{bindingName:e,mode:"binding",provider:"flagship"}}return{mode:"http",provider:"flagship"}},h=r=>u(r.getArguments()[0],"provider"),N=(r,i)=>{const e=g(i,m);if(!c(e))return;const t=r.getSourceFile(e)??r.addSourceFileAtPath(e),s=f(t);if(!s||!o.isCallExpression(s))return{provider:"custom"};const a=h(s);if(a&&o.isCallExpression(a)){const n=a.getExpression();if(o.isIdentifier(n)&&y(n))return S(a)}return{provider:"custom"}},F=r=>{const i=r.getName();if(!v.has(i))return;const e=r.getExpression();if(!o.isPropertyAccessExpression(e))return;if(e.getName()==="flags"&&l(e.getExpression()))return i;const t=e.getExpression();if(e.getName()==="details"&&o.isPropertyAccessExpression(t)&&t.getName()==="flags"&&l(t.getExpression()))return i},P=r=>{const i=r.getExpression();if(!o.isPropertyAccessExpression(i))return;const e=F(i);if(e===void 0)return;const t=r.getArguments()[0];if(!t||!(o.isStringLiteral(t)||o.isNoSubstitutionTemplateLiteral(t)))return;const s=t.getLiteralValue();return s.length>0?{key:s,type:e}:void 0},C=(r,i)=>{const e=new Map;for(const t of d(i)){const s=r.getSourceFile(t)??r.addSourceFileAtPath(t);for(const a of s.getDescendantsOfKind(p.CallExpression)){const n=P(a);n&&!e.has(n.key)&&e.set(n.key,n.type)}}return[...e.entries()].map(([t,s])=>({key:t,type:s})).toSorted((t,s)=>t.key.localeCompare(s.key))};export{m as FLAGS_FILENAME,C as discoverFlagKeys,N as discoverFlags};
@@ -0,0 +1 @@
1
+ import"./SCHEMA_SNAPSHOT_VERSION-DIqnj_32.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-Ba3NiOwK.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 +1 @@
1
- import{jsonSchemaFromNode as n,objectSchemaFromNodes as a}from"@lunora/values";const N=t=>{if(t===void 0)return{};const e=t.trim();if(e==="true")return{const:!0};if(e==="false")return{const:!1};if(e==="null")return{const:null,type:"null"};if(e.startsWith('"')&&e.endsWith('"'))try{return{const:JSON.parse(e),type:"string"}}catch{return{const:e.slice(1,-1),type:"string"}}if(e.startsWith("'")&&e.endsWith("'"))return{const:e.slice(1,-1),type:"string"};const r=Number(e);return Number.isNaN(r)?{const:e}:{const:r}},s={constraints:()=>{},inner:t=>t.inner,isNullable:t=>t.column?.notNull===!1,kind:t=>t.kind,literalSchema:t=>N(t.literalValue),members:t=>t.members??[],shape:t=>t.shape??{},tableName:t=>t.tableName,valueChild:t=>t.valueType},l=t=>n(t,s),o=t=>a(t,s),O=["BAD_REQUEST","CONFLICT","COUNT_RLS_UNSUPPORTED","FORBIDDEN","FUNCTION_NOT_FOUND","INTERNAL","INTERNAL_SERVER_ERROR","METHOD_NOT_ALLOWED","NOT_FOUND","NOT_IMPLEMENTED","PAYLOAD_TOO_LARGE","TOO_MANY_REQUESTS","UNAUTHORIZED","UNPROCESSABLE","VALIDATION_ERROR"];export{O as LUNORA_ERROR_CODES,N as literalConst,o as objectSchema,l as validatorIrToJsonSchema};
1
+ import{jsonSchemaFromNode as s,objectSchemaFromNodes as o}from"@lunora/values";const N=t=>{if(t===void 0)return{};const e=t.trim();if(e==="true")return{const:!0};if(e==="false")return{const:!1};if(e==="null")return{const:null,type:"null"};if(e.startsWith('"')&&e.endsWith('"'))try{return{const:JSON.parse(e),type:"string"}}catch{return{const:e.slice(1,-1),type:"string"}}if(e.startsWith("'")&&e.endsWith("'"))return{const:e.slice(1,-1),type:"string"};const r=Number(e);return Number.isNaN(r)?{const:e}:{const:r}},n={constraints:()=>{},inner:t=>t.inner,isNullable:t=>t.column?.notNull===!1,kind:t=>t.kind,literalSchema:t=>N(t.literalValue),members:t=>t.members??[],shape:t=>t.shape??{},tableName:t=>t.tableName,valueChild:t=>t.valueType},a=t=>s(t,n),c=t=>o(t,n),l=["BAD_REQUEST","CONFLICT","COUNT_RLS_UNSUPPORTED","FORBIDDEN","FUNCTION_NOT_FOUND","INTERNAL","INTERNAL_SERVER_ERROR","METHOD_NOT_ALLOWED","NOT_FOUND","NOT_IMPLEMENTED","PAYLOAD_TOO_LARGE","TOO_MANY_REQUESTS","UNAUTHORIZED","UNPROCESSABLE","VALIDATION_ERROR"];export{l as LUNORA_ERROR_CODES,N as literalConst,c as objectSchema,a as validatorIrToJsonSchema};
@@ -0,0 +1 @@
1
+ import{existsSync as f}from"node:fs";import{join as p}from"node:path";import{Node as o,SyntaxKind as u}from"ts-morph";import{diagnosticAt as l}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{unwrapHandlerReturn as g}from"./discoverFunctions-h8i51Mec.mjs";import{a as d}from"./module-specifiers-WF8iAydP.mjs";import{a as x}from"./parse-validator-DtALyvid.mjs";const M="mutators.ts",m=d,y=r=>{const t=r.getSymbol();if(!t)return r.getText()==="defineMutator";for(const e of t.getDeclarations())if(o.isImportSpecifier(e))return m(e.getImportDeclaration().getModuleSpecifierValue())?e.getNameNode().getText()==="defineMutator":!1;return!1},S=r=>{const t=r.getSymbol();if(!t)return!1;for(const e of t.getDeclarations()){if(!o.isNamespaceImport(e))continue;const i=e.getFirstAncestorByKind(u.ImportDeclaration);return i!==void 0&&m(i.getModuleSpecifierValue())}return!1},N=r=>{if(o.isIdentifier(r))return y(r);if(o.isPropertyAccessExpression(r)){const t=r.getExpression();return r.getName()==="defineMutator"&&o.isIdentifier(t)&&S(t)}return!1},I=r=>{const t=r.getArguments()[0];return t&&o.isObjectLiteralExpression(t)?t:void 0},b=r=>{const t=r?.getProperty("args");if(!t||!o.isPropertyAssignment(t))return{};const e=t.getInitializer();return e&&o.isObjectLiteralExpression(e)?x(e):{}},A=r=>{const t=r?.getProperty("server");if(!t||!o.isPropertyAssignment(t))return"unknown";const e=t.getInitializer();return!e||!(o.isArrowFunction(e)||o.isFunctionExpression(e))?"unknown":g(e)},E=r=>{const t=[];for(const e of r.getVariableDeclarations()){if(!e.isExported())continue;const i=e.getInitializer();if(i?.getKind()!==u.CallExpression)continue;const n=i,a=n.getExpression();if(!N(a))continue;const s=e.getNameNode();if(!o.isIdentifier(s))throw l(s,"defineMutator exports must be plain named exports (no destructuring)");const c=I(n);t.push({args:b(c),exportName:s.getText(),filePath:"mutators",returnType:A(c)})}return t},w=(r,t)=>{const e=p(t,M);if(!f(e))return[];const i=r.getSourceFile(e)??r.addSourceFileAtPath(e),n=E(i);return n.sort((a,s)=>a.exportName.localeCompare(s.exportName)),n};export{M as MUTATORS_FILENAME,w as discoverMutators,N as isDefineMutatorCallee};
@@ -0,0 +1 @@
1
+ import{existsSync as m}from"node:fs";import{join as x}from"node:path";import{SyntaxKind as d,Node as c}from"ts-morph";import{l,a as g,d as P,h as E}from"./discover-ast-D33zP-NZ.mjs";import{classifyProcedureCall as S}from"./discoverFunctions-h8i51Mec.mjs";const y="notify.ts",v=new Set(["chat","inApp","send","webhook"]),p=new Set(["broadcast","send"]),N=e=>{const t=e.getInitializer();if(!t||!c.isCallExpression(t))return;const o=S(t);if(!o)return;const s=E(t,o.receiver);return s?{exportName:e.getName(),handler:s,kind:o.kind}:void 0},h=e=>{const t=[];for(const o of e.getVariableStatements())if(o.isExported())for(const s of o.getDeclarations()){const r=N(s);r&&t.push(r)}return t},f=e=>{if(!c.isPropertyAccessExpression(e))return;const t=e.getName(),o=e.getExpression();if((t==="notify"||t==="push")&&c.isIdentifier(o)&&o.getText()==="ctx")return t;if(t==="push"&&f(o)==="notify")return"push"},F=e=>{if(!c.isPropertyAccessExpression(e))return;const t=e.getName(),o=f(e.getExpression());if(o==="notify"&&v.has(t))return`ctx.notify.${t}`;if(o==="push"&&p.has(t))return`ctx.push.${t}`},A=e=>c.isPropertyAccessExpression(e)?f(e.getExpression())==="push"&&p.has(e.getName()):!1,T=(e,t)=>{const o=[];for(const s of l(t)){const r=e.getSourceFile(s)??e.addSourceFileAtPath(s),a=g(t,s);for(const n of h(r))if(!(n.kind!=="query"&&n.kind!=="mutation"))for(const i of n.handler.getDescendantsOfKind(d.PropertyAccessExpression)){const u=F(i);u!==void 0&&o.push({callee:u,exportName:n.exportName,file:a,kind:n.kind,line:i.getStartLineNumber()})}}return o},O=(e,t)=>{for(const o of l(t)){const s=e.getSourceFile(o)??e.addSourceFileAtPath(o);for(const r of h(s))for(const a of r.handler.getDescendantsOfKind(d.PropertyAccessExpression))if(A(a))return!0}return!1},_=(e,t)=>{const o=x(t,y);if(!m(o))return;const s=e.getSourceFile(o)??e.addSourceFileAtPath(o),r=P(s);let a=!1,n=!1;if(r&&c.isCallExpression(r)){const i=r.getArguments()[0];i&&c.isObjectLiteralExpression(i)&&(a=i.getProperty("webPush")!==void 0,n=i.getProperty("fcm")!==void 0)}return{hasFcm:n,hasWebPush:a,usesPush:O(e,t)}};export{y as NOTIFY_FILENAME,T as discoverNotifyCalls,_ as discoverNotifyConfig};
@@ -0,0 +1,3 @@
1
+ import{G as c}from"./emit-Ba3NiOwK.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-BYg8Lpgb.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
+ `,v=e=>`${c}export const openRpcSpec: Record<string, unknown> = ${JSON.stringify(e,void 0,4)};
3
+ `;export{l as OPENRPC_VERSION,g as buildOpenRpcDocument,S as emitOpenRpc,v as emitOpenRpcModule};
@@ -0,0 +1 @@
1
+ import{existsSync as g}from"node:fs";import{join as l}from"node:path";import{LunoraError as d}from"@lunora/errors";import{queueDefaultName as p,queueBindingName as f}from"@lunora/queue";import{SyntaxKind as y,Node as u}from"ts-morph";import{diagnosticAt as a}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{s as h}from"./discover-ast-D33zP-NZ.mjs";const q="queues.ts",b=r=>{const t=r.getSymbol();if(!t)return r.getText()==="defineQueue";for(const e of t.getDeclarations())if(u.isImportSpecifier(e))return e.getImportDeclaration().getModuleSpecifierValue()!=="@lunora/queue"?!1:e.getNameNode().getText()==="defineQueue";return!1},c=h("queue"),N=(r,t,e)=>{if(u.isNumericLiteral(r))return r.getLiteralValue();throw a(r,`queue "${t}": \`${e}\` must be a static numeric literal — it is deploy configuration codegen writes into wrangler.jsonc`)},w=(r,t)=>{const e=r.getProperty("name");if(!e||!u.isPropertyAssignment(e))return;const n=c(e.getInitializerOrThrow(),t,"name");if(n.length===0)throw a(e,`queue "${t}": \`name\` must be a non-empty string when provided`);return n},P=(r,t)=>{const e=r.getArguments()[0];if(!e||!u.isObjectLiteralExpression(e))throw a(r,`queue "${t}": defineQueue must be passed an inline object literal`);const n={bindingName:f(t),exportName:t,mode:"push",name:w(e,t)??p(t),tuning:{}},o=e.getProperty("mode");if(o&&u.isPropertyAssignment(o)){const i=c(o.getInitializerOrThrow(),t,"mode");if(i!=="push"&&i!=="pull")throw a(o,`queue "${t}": \`mode\` must be "push" or "pull" (got ${JSON.stringify(i)})`);n.mode=i}const s=e.getProperty("deadLetterQueue");s&&u.isPropertyAssignment(s)&&(n.tuning.deadLetterQueue=c(s.getInitializerOrThrow(),t,"deadLetterQueue"));for(const i of["maxBatchSize","maxBatchTimeout","maxRetries","retryDelay"]){const m=e.getProperty(i);m&&u.isPropertyAssignment(m)&&(n.tuning[i]=N(m.getInitializerOrThrow(),t,i))}return n},E=r=>{const t=[];for(const e of r.getVariableDeclarations()){if(!e.isExported())continue;const n=e.getInitializer();if(n?.getKind()!==y.CallExpression)continue;const o=n,s=o.getExpression();if(!u.isIdentifier(s)||!b(s))continue;const i=e.getNameNode();if(!u.isIdentifier(i))throw a(i,"defineQueue exports must be plain named exports (no destructuring)");t.push(P(o,i.getText()))}return t},I=r=>{const t=new Map,e=new Map;for(const n of r){const o=t.get(n.name);if(o!==void 0)throw new d("DUPLICATE_QUEUE_NAME",`Duplicate queue name "${n.name}": produced by both "${o}" and "${n.exportName}". Deployed queue names must be unique across the project.`,{status:500});t.set(n.name,n.exportName);const s=e.get(n.bindingName);if(s!==void 0)throw new d("DUPLICATE_QUEUE_BINDING",`Duplicate queue binding "${n.bindingName}": produced by both "${s}" and "${n.exportName}". Queue export names must yield unique binding names.`,{status:500});e.set(n.bindingName,n.exportName)}},T=(r,t)=>{const e=l(t,q);if(!g(e))return[];const n=r.getSourceFile(e)??r.addSourceFileAtPath(e),o=E(n);return o.sort((s,i)=>s.exportName.localeCompare(i.exportName)),I(o),o};export{q as QUEUES_FILENAME,T as discoverQueues};
@@ -0,0 +1,9 @@
1
+ import{existsSync as N,mkdirSync as Bt,readFileSync as dt,writeFileSync as $t,rmSync as qt}from"node:fs";import{join as f,dirname as le}from"node:path";import{performance as ue}from"node:perf_hooks";import{runAdvisor as jt}from"@lunora/advisor";import{LunoraError as R}from"@lunora/errors";import{SyntaxKind as l,Node as i,Project as He}from"ts-morph";import{serializeSchemaSnapshot as Wt}from"./SCHEMA_SNAPSHOT_VERSION-DIqnj_32.mjs";import{toAdvisorContext as Vt}from"./formatAdvisories-BjTV22uR.mjs";import{discoverAgents as Ht}from"./AGENTS_FILENAME-CPHo8Se5.mjs";import{discoverContainers as Gt}from"./CONTAINERS_FILENAME-Bvn6LZP6.mjs";import{diagnosticAt as Z}from"./CodegenDiagnosticError-BUXlG3P-.mjs";import{b as J}from"./module-specifiers-WF8iAydP.mjs";import{C as de,i as Yt,f as Xt,n as Qt,a as Zt,h as Jt,j as es,b as ts,c as ss,l as ns,e as rs,o as is,d as os,k as as,g as cs,p as ls,m as us}from"./emit-Ba3NiOwK.mjs";import{l as h,a as E,c as y,p as S,f as ft,i as ds,r as pt,e as fs}from"./discover-ast-D33zP-NZ.mjs";import ps from"./readPackageDependencies-C6h6FZuP.mjs";import{discoverQueues as gs}from"./QUEUES_FILENAME-BnGLtAIu.mjs";import{discoverSandboxUsage as ms}from"./discoverSandboxUsage-L0lV17de.mjs";import hs from"./discoverStorageRulesMetadata-CKPFWHT5.mjs";import{discoverWorkflows as xs}from"./WORKFLOWS_FILENAME-B8y51Frf.mjs";import{gatePlatformFeatures as Es,resolveCodegenTarget as vs}from"./DEFAULT_TARGET-CIH5PRk1.mjs";import{i as T,a as F,e as x,c as I,r as Ss,b as As,s as ee,f as Ns,g as ys,d as bs}from"./discover-queries-Dfj_0WJG.mjs";import{classifyProcedureCall as _,inlineHandler as Is,procedureHandler as gt,chainUsesWrappedCall as mt,isDatabaseAccessor as K,chainHasStep as Ps,discoverFunctions as ws,resolveStandardSchemaType as Ts}from"./discoverFunctions-h8i51Mec.mjs";import Cs from"./discoverAuthApiCalls-DUjcl0SB.mjs";import Os from"./discoverCrons-BUJO2ipU.mjs";import{discoverFlagKeys as Rs}from"./FLAGS_FILENAME-DtBWyUKq.mjs";import Fs from"./discoverHttpRoutes-MX6y-iVE.mjs";import Ls from"./discoverInserts-YX8AmrzL.mjs";import Ds,{discoverMaskStrategies as ks,discoverMaskMetadata as Ms,discoverMaskHasNonLiteralPolicy as Ks}from"./discoverMaskProcedures-DhcK-YMG.mjs";import _s from"./discoverMigrations-4Jjf5DJE.mjs";import{MUTATORS_FILENAME as zs,isDefineMutatorCallee as Us,discoverMutators as Bs}from"./MUTATORS_FILENAME-CRmTpN4y.mjs";import $s from"./discoverNondeterministicCalls-CjS2Mznw.mjs";import{discoverNotifyConfig as qs,discoverNotifyCalls as js}from"./NOTIFY_FILENAME-BybR3Xbd.mjs";import Ws from"./discoverR2sqlCalls-DuTuaSMM.mjs";import Vs,{discoverRlsMetadata as Hs}from"./discoverRlsMetadata-BYVq6cVp.mjs";import Gs from"./discoverSchema-BtlNz9b_.mjs";import{secretKindOf as Ys,redact as Xs,isHeuristicSecretKind as Qs,isSecretishName as Zs}from"./redact-Cy14LEnc.mjs";import{discoverShapes as Js}from"./SHAPES_FILENAME-DxoIrQhA.mjs";import{emitApp as en}from"./emitApp-hKEej7rj.mjs";import{buildOpenApiDocument as tn,emitOpenApiModule as sn}from"./buildOpenApiDocument-B2mW3f5a.mjs";import{buildOpenRpcDocument as nn,emitOpenRpcModule as rn}from"./OPENRPC_VERSION-DB1PSt8W.mjs";import{s as on}from"./parse-validator-DtALyvid.mjs";import{buildSchemaSnapshot as an}from"./SchemaSnapshotParseError-Dc1aZAph.mjs";const cn=e=>{const t=[],s=e.tables.filter(n=>n.shardMode==="global");return s.some(n=>n.globalBackend!=="hyperdrive")&&t.push({name:"@lunora/d1",reason:"`.global()` tables are D1-backed, so `_generated/app.ts` imports the D1 `ctx.db` adapter"}),s.some(n=>n.globalBackend==="hyperdrive")&&t.push({name:"@lunora/hyperdrive",reason:'`.global({ backend: "hyperdrive" })` tables route through `@lunora/hyperdrive/global`'}),e.vectorIndexes.length>0&&t.push({name:"@lunora/bindings",reason:"`.vectorize()` indexes make `_generated/vectors.ts` import `@lunora/bindings/vectors`"}),t},ln=(e,t)=>{if(t===void 0)return;const s=cn(e).filter(o=>!t.has(o.name));if(s.length===0)return;const n=s.map(o=>` - ${o.name} — ${o.reason}`).join(`
2
+ `);throw new R("INTERNAL",`@lunora/codegen: this schema's generated code imports packages the project does not declare:
3
+ ${n}
4
+
5
+ Install them with your package manager, then re-run codegen.`)},un="env.ts",dn=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineEnv";for(const s of t.getDeclarations())if(i.isImportSpecifier(s))return J(s.getImportDeclaration().getModuleSpecifierValue())?s.getNameNode().getText()==="defineEnv":!1;return!1},fn=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&&J(n.getModuleSpecifierValue())}return!1},pn=e=>{if(i.isIdentifier(e))return dn(e);if(i.isPropertyAccessExpression(e)){const t=e.getExpression();return e.getName()==="defineEnv"&&i.isIdentifier(t)&&fn(t)}return!1},gn=e=>{const t=[];for(const s of e.getVariableDeclarations()){if(!s.isExported())continue;const n=s.getInitializer();if(n?.getKind()!==l.CallExpression||!pn(n.getExpression()))continue;const r=s.getNameNode();if(!i.isIdentifier(r))throw Z(r,"defineEnv exports must be plain named exports (no destructuring)");t.push({exportName:r.getText()})}return t},mn=(e,t)=>{const s=f(t,un);if(!N(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s),o=gn(n);if(o.length!==0){if(o.length>1)throw Z(n,`lunora/env.ts declares ${o.length.toString()} defineEnv() contracts (${o.map(r=>r.exportName).join(", ")}); exactly one is allowed`);return o[0]}},hn=e=>{const t=n=>i.isIdentifier(n)&&n.getText()==="ctx",s=new Set;for(const n of e.getDescendantsOfKind(l.PropertyAccessExpression))t(n.getExpression())&&s.add(n.getName());for(const n of e.getDescendantsOfKind(l.VariableDeclaration)){const o=n.getInitializer(),r=n.getNameNode();if(!(o===void 0||!t(o)||!i.isObjectBindingPattern(r)))for(const a of r.getElements()){const c=a.getPropertyNameNode()?.getText()??a.getName();c&&s.add(c)}}return s},xn=(e,t)=>{const s=Object.fromEntries(de.map(n=>[n.key,!1]));for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=new Set(o.getImportDeclarations().map(c=>c.getModuleSpecifierValue())),a=hn(o);for(const c of de)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(de.every(c=>s[c.key]))break}return s},En=["providerSubscriptionId","state"],vn=["providerEventId","processedAt"],Ge=(e,t)=>t.every(s=>s in e.shape),Sn=e=>{const t=e.find(n=>n.name==="subscriptions"),s=e.find(n=>n.name==="events");return t!==void 0&&s!==void 0&&Ge(t,En)&&Ge(s,vn)},An=(e,t)=>({analytics:e.analytics||t.dependencies.has("@lunora/bindings/analytics"),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/kv"),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:e.vectors||t.vectorIndexCount>0||t.dependencies.has("@lunora/bindings/vectors"),workflows:e.workflows||t.workflowCount>0||t.dependencies.has("@lunora/workflow")}),ht="identity.ts",Nn=e=>{const t=e.getSymbol();if(!t)return e.getText()==="defineIdentity";for(const s of t.getDeclarations())if(i.isImportSpecifier(s))return J(s.getImportDeclaration().getModuleSpecifierValue())?s.getNameNode().getText()==="defineIdentity":!1;return!1},yn=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&&J(n.getModuleSpecifierValue())}return!1},bn=e=>{if(i.isIdentifier(e))return Nn(e);if(i.isPropertyAccessExpression(e)){const t=e.getExpression();return e.getName()==="defineIdentity"&&i.isIdentifier(t)&&yn(t)}return!1},In=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 Z(r,"defineIdentity exports must be plain named exports (no destructuring)");t.push({exportName:r.getText()})}return t},Pn=(e,t)=>{const s=f(t,ht);if(!N(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s),o=In(n);if(o.length!==0){if(o.length>1)throw Z(n,`lunora/identity.ts declares ${o.length.toString()} defineIdentity() contracts (${o.map(r=>r.exportName).join(", ")}); exactly one is allowed`);return o[0]}},wn=(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 R("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 R("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 R("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})}},Tn=e=>{const{lunoraDirectory:t,project:s,projectRoot:n,schema:o}=e,r=Pn(s,t),a=mn(s,t),c=xs(s,t),u=gs(s,t),d=Ht(s,t);wn(c,d);const v=Gt(s,t),P=hs(s,t),p=Es(xn(s,t),vs(n,e.target)),A=p.usage,D=ms(s,t),z=A.browser||D.usesSandboxBrowser,U=ps(n),q=U??new Set,C=q.has("lunorash");ln(o,U);const k=N(f(t,"flags.ts")),B=N(f(t,"notify.ts"));return{agents:d,containers:v,dataModelContent:Xt(o),declaredDependencies:U,dependencies:q,env:a,featureUsage:A,hasBrowser:z,hasFlags:k,hasNotify:B,identity:r,platformGate:p,queues:u,serverContent:Yt({agents:d,containers:v,env:a,hasAccessFacade:A.access,hasAi:A.ai,hasAnalytics:A.analytics,hasBrowser:z,hasFlags:k,hasHyperdrive:A.hyperdrive,hasImages:A.images,hasKv:A.kv,hasNotify:B,hasPayments:A.payments,hasPipelines:A.pipelines,hasR2sql:A.r2sql,hasX402:A.x402,identity:r,queues:u,schema:o,storageRuleBuckets:P.rules.map(se=>se.bucket),useUmbrella:C,workflows:c}),storageRulesMetadata:P,usesSandbox:D.usesSandboxBrowser||D.usesSandboxContainer,useUmbrella:C,workflows:c}},xt=new Set(["delete","get","head","options","patch","post","put"]),Cn=new Set(["handler","stream"]),On=/\/(?:_|admin|internal|superuser|sudo|root|debug)/iu,Ye=new Set(["ADMIN_TOKEN","adminToken","assertAdmin","assertAuth","auth","Authorization","getSession","identity","isAdmin","requireAdmin","requireAuth","requireRole","verifyAdmin"]),Rn=e=>{if(!i.isCallExpression(e))return;const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!xt.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()}},Fn=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)||xt.has(n.getName()))break;s=n.getExpression()}return Rn(s)},Ln=e=>{for(const t of e.getDescendantsOfKind(l.PropertyAccessExpression))if(Ye.has(t.getName()))return!0;for(const t of e.getDescendantsOfKind(l.CallExpression)){const s=t.getExpression();if(i.isIdentifier(s)&&Ye.has(s.getText()))return!0}return!1},Dn=(e,t)=>{const s=e.getInitializer();if(!s||!i.isCallExpression(s))return;const n=s.getExpression();if(!i.isPropertyAccessExpression(n)||!Cn.has(n.getName()))return;const o=Fn(s);if(!o||!On.test(o.path))return;const r=s.getArguments()[0],a=r!==void 0&&(i.isArrowFunction(r)||i.isFunctionExpression(r))&&Ln(r);return{exportName:e.getName(),file:t,method:o.method,path:o.path,usesGuard:a}},kn=(e,t)=>{const s=[];for(const n of e.getVariableStatements())if(n.isExported())for(const o of n.getDeclarations()){const r=Dn(o,t);r&&s.push(r)}return s},Mn=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...kn(o,E(t,n)))}return s},Kn=e=>!i.isPropertyAccessExpression(e)||e.getName()!=="run"?!1:e.getExpression().getText()==="ctx.ai",_n=(e,t)=>{if(!Kn(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!T(s)||F(s)))return{exportName:x(e),file:t,line:e.getStartLineNumber()}},zn=(e,t)=>y(e,t,_n),Un=new Set(["generateText","streamText"]),Bn=new Set(["messages","prompt","system"]),$n=[{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"]}],qn=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t))return;const s=t.getName(),n=t.getExpression().getText();for(const o of $n)if(o.methods.has(s)&&o.prefixes.some(r=>n===r||n.startsWith(`${r}.`)))return`${n}.${s}`},jn=e=>{for(const t of e.getDescendantsOfKind(l.CallExpression)){const s=qn(t);if(s!==void 0)return s}},Wn=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},Vn=e=>{if(Ss(e))return!0;const t=Wn(e);return t.size===0?!1:e.getDescendantsOfKind(l.Identifier).some(s=>t.has(s.getText()))},Hn=e=>{for(const t of e.getProperties()){if(!i.isPropertyAssignment(t)||!Bn.has(t.getName()))continue;const s=t.getInitializer();if(s!==void 0&&Vn(s))return!0}return!1},Gn=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=I(n.getExpression());if(o===void 0||!Un.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(I(c.getExpression())==="tool"&&(a=jn(c),a!==void 0))break;a!==void 0&&s.push({exportName:x(n),file:t,line:n.getStartLineNumber(),method:o,sideEffect:a,userInputDerived:Hn(r)})}return s},Yn=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Gn(o,E(t,n)))}return s},Xn=e=>{if(!i.isPropertyAccessExpression(e)||e.getName()!=="fetch")return!1;const t=e.getExpression();return i.isIdentifier(t)&&t.getText()==="ctx"},Qn=(e,t)=>{if(!Xn(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!T(s)))return{exportName:x(e),file:t,line:e.getStartLineNumber()}},Zn=(e,t)=>y(e,t,Qn),Et=e=>e.getProperties().some(t=>i.isSpreadAssignment(t)),Jn=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:Et(n)}},er=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||=Et(r)):s=!0}n=o.getExpression()}return{objects:t,opaque:s}},vt=(e,t)=>t?er(t):Jn(e),tr=e=>e.flatMap(t=>t.getProperties().filter(s=>i.isPropertyAssignment(s)||i.isShorthandPropertyAssignment(s)).map(s=>s.getName())),sr=/\.check\(|\.meta\(|length|max/iu,nr=/\bv\.any\s*\(/u,rr=/\bv\.string\s*\(/u,ir=e=>nr.test(e),or=e=>rr.test(e)&&!sr.test(e),ar=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=r.getText(),c=o.getName();ir(a)?t.push(c):or(a)&&s.push(c)}return{anyArgs:t,unboundedStringArgs:s}},cr=(e,t)=>{const s=e.getInitializer();if(!s||!i.isCallExpression(s))return;const n=_(s);if(n?.visibility!=="public")return;const{objects:o}=vt(s,n.receiver),{anyArgs:r,unboundedStringArgs:a}=ar(o);if(!(r.length===0&&a.length===0))return{anyArgs:r,exportName:e.getName(),file:t,line:s.getStartLineNumber(),unboundedStringArgs:a}},lr=(e,t)=>{const s=[];for(const n of e.getVariableStatements())if(n.isExported())for(const o of n.getDeclarations()){const r=cr(o,t);r&&s.push(r)}return s},ur=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...lr(o,E(t,n)))}return s},fe=e=>e?.getKind()===l.TrueKeyword,dr=e=>e?.getKind()===l.FalseKeyword,fr=e=>e!==void 0&&i.isNumericLiteral(e)&&e.getLiteralValue()===0,pr=new Set(["lunoraAuthAdapter","lunoraD1Adapter"]),gr=e=>!e||!i.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>i.isCallExpression(t)&&I(t.getExpression())==="scim"),mr=e=>e!==void 0&&i.isCallExpression(e)&&pr.has(I(e.getExpression())??""),hr=e=>!e||!i.isArrayLiteralExpression(e)?!1:e.getElements().some(t=>i.isStringLiteral(t)&&t.getLiteralText()==="*"),xr=e=>{const t=S(e,"advanced"),s=S(e,"emailAndPassword"),n=S(e,"session");return{analyzable:!0,disableCsrfCheck:fe(S(t,"disableCSRFCheck")),emailPasswordEnabled:fe(S(s,"enabled")),requireEmailVerification:fe(S(s,"requireEmailVerification")),scimOnNonTransactionalAdapter:gr(S(e,"plugins"))&&mr(S(e,"database")),secureCookiesDisabled:dr(S(t,"useSecureCookies")),sessionFreshAgeZero:fr(S(n,"freshAge")),trustedOriginsWildcard:hr(S(e,"trustedOrigins"))}},Er=()=>({analyzable:!1,disableCsrfCheck:!1,emailPasswordEnabled:!1,requireEmailVerification:!1,scimOnNonTransactionalAdapter:!1,secureCookiesDisabled:!1,sessionFreshAgeZero:!1,trustedOriginsWildcard:!1}),vr=(e,t)=>{if(I(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?xr(s):Er();return{exportName:x(e),file:t,line:e.getStartLineNumber(),...o}},Sr=(e,t)=>y(e,t,vr),Ar=(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},Nr=(e,t,s)=>{const n=Ar(e.getExpression(),s);if(n===void 0)return;const o=e.getArguments()[s.argIndex];if(!(!o||!T(o)||F(o))&&!(s.requireUnmodifiedReach===!0&&!As(o)))return{exportName:x(e),file:t,line:e.getStartLineNumber(),method:n}},yr=(e,t,s)=>{const n=[];for(const o of e.getDescendantsOfKind(l.CallExpression)){const r=Nr(o,t,s);r&&n.push(r)}return n},te=(e,t,s)=>{const n=[];for(const o of h(t)){const r=e.getSourceFile(o)??e.addSourceFileAtPath(o);n.push(...yr(r,E(t,o),s))}return n},br=new Set(["content","pdf","scrape","screenshot"]),Ir=(e,t)=>te(e,t,{argIndex:0,matchReceiver:s=>s==="ctx.browser",methods:br}),Pr=new Set(["createBrowser","createInboundEmailHandler","createPayment"]),wr=new Set(["RateLimiter"]),Tr=new Set(["extend"]),St=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}},Xe=e=>e&&i.isObjectLiteralExpression(e)?St(e):{analyzable:!1,presentKeys:[],trueKeys:[]},Cr=e=>{const t=e.getStatements(),[s]=t;if(t.length!==1||s===void 0||!i.isReturnStatement(s))return;const n=s.getExpression();return n!==void 0&&i.isObjectLiteralExpression(n)?n:void 0},Or=e=>{if(i.isObjectLiteralExpression(e))return e;if(i.isParenthesizedExpression(e)){const t=e.getExpression();return i.isObjectLiteralExpression(t)?t:void 0}return i.isBlock(e)?Cr(e):void 0},Rr=e=>{const t=e&&(i.isArrowFunction(e)||i.isFunctionExpression(e))?e:void 0,s=t&&Or(t.getBody());return s?St(s):{analyzable:!1,presentKeys:[],trueKeys:[]}},Fr=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=I(n.getExpression());o!==void 0&&(Pr.has(o)?s.push({callee:o,file:t,line:n.getStartLineNumber(),...Xe(n.getArguments()[0])}):Tr.has(o)&&s.push({callee:o,file:t,line:n.getStartLineNumber(),...Rr(n.getArguments()[0])}))}for(const n of e.getDescendantsOfKind(l.NewExpression)){const o=I(n.getExpression());o===void 0||!wr.has(o)||s.push({callee:o,file:t,line:n.getStartLineNumber(),...Xe(n.getArguments()[0])})}return s},Lr=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Fr(o,E(t,n)))}return s},Qe="ctx.containers.",Dr=e=>{if(!e.startsWith(Qe))return!1;const t=e.slice(Qe.length);return t.length>0&&!t.includes(".")},kr=(e,t)=>te(e,t,{argIndex:0,matchReceiver:Dr,methods:new Set(["get"])}),Mr=new Set(["allow","deny","setAllowed"]),Kr=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())},_r=(e,t)=>{const s=e.getExpression();if(!(!i.isPropertyAccessExpression(s)||s.getName()!=="start"||!Kr(e)))return{detail:"enableInternet: true",exportName:x(e),file:t,kind:"enable_internet",line:e.getStartLineNumber()}},zr=(e,t)=>{const s=e.getExpression();if(!i.isPropertyAccessExpression(s)||!Mr.has(s.getName()))return;const n=s.getExpression();if(!(!i.isPropertyAccessExpression(n)||n.getName()!=="egress"))return{detail:s.getName(),exportName:x(e),file:t,kind:"egress_relaxation",line:e.getStartLineNumber()}},Ur=(e,t)=>_r(e,t)??zr(e,t),Br=(e,t)=>y(e,t,Ur),$r=new Set(["defineExportSink","r2Sink","webhookExportSink"]),qr=e=>{const t=e.getExpression();if(!i.isIdentifier(t))return;const s=t.getText();return $r.has(s)?s:void 0},jr=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}},Wr=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=E(t,n);for(const a of o.getDescendantsOfKind(l.CallExpression)){const c=qr(a);if(c===void 0)continue;const u=a.getArguments()[0],d=u&&i.isObjectLiteralExpression(u)?jr(u):{analyzable:!1,emptyKeys:[],presentKeys:[]};s.push({analyzable:d.analyzable,emptyKeys:d.emptyKeys,factory:c,file:r,line:a.getStartLineNumber(),presentKeys:d.presentKeys})}}return s},Vr=new Map([["dbRateLimit",2],["rateLimit",2],["verifyTurnstileMiddleware",0]]),Hr=new Set(["dbRateLimit","rateLimit"]),Gr=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},Yr=(e,t)=>{const s=I(e.getExpression());if(s===void 0)return;const n=Vr.get(s);if(n!==void 0)return{callee:s,exportName:x(e),failOpen:Gr(e.getArguments()[n]),file:t,limitName:Hr.has(s)?ft(e):"",line:e.getStartLineNumber()}},Xr=(e,t)=>y(e,t,Yr),Qr=e=>{if(!i.isPropertyAccessExpression(e)||e.getName()!=="boolean")return!1;const t=e.getExpression();return i.isPropertyAccessExpression(t)&&t.getName()==="flags"&&ds(t.getExpression())},Zr=e=>{if(e?.getKind()===l.TrueKeyword)return!0;if(e?.getKind()===l.FalseKeyword)return!1},Jr=(e,t)=>{if(!Qr(e.getExpression()))return;const[s,n]=e.getArguments();if(!s||!(i.isStringLiteral(s)||i.isNoSubstitutionTemplateLiteral(s)))return;const o=s.getLiteralValue(),r=Zr(n);if(!(o.length===0||r===void 0))return{defaultValue:r,exportName:x(e),file:t,key:o,line:e.getStartLineNumber()}},ei=(e,t)=>y(e,t,Jr),ti=e=>{const t=e.getExpression();return i.isPropertyAccessExpression(t)&&t.getName()==="withGeoIndex"},si=e=>{const t=e.getArguments()[0];return t&&i.isStringLiteral(t)?t.getLiteralText():""},ni=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=E(t,n);for(const a of o.getDescendantsOfKind(l.CallExpression))ti(a)&&s.push({file:r,indexName:si(a),line:a.getStartLineNumber()})}return s},ri=new Set(["delete","get","head","options","patch","post","put"]),ii=new Set(["handler","stream"]),oi=new Set(["runAction","runMutation"]),ai=new Set(["delete","insert","insertManyUnsafe","patch","replace"]),Y=(e,t)=>e!==void 0&&i.isIdentifier(e)&&e.getText()===t,Ze=e=>e!==void 0&&(i.isArrowFunction(e)||i.isFunctionExpression(e))?e:void 0,Je=(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}}},et=(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(oi.has(a)&&Y(c,t))return a;if(ai.has(a)&&i.isPropertyAccessExpression(c)&&c.getName()==="db"&&Y(c.getExpression(),t))return`db.${a}`}},tt=(e,t)=>{const s=e.getBody();for(const n of s.getDescendantsOfKind(l.PropertyAccessExpression))if(n.getName()==="auth"&&Y(n.getExpression(),t))return!0;for(const n of s.getDescendantsOfKind(l.VariableDeclaration)){const o=n.getNameNode();if(!(!i.isObjectBindingPattern(o)||!Y(n.getInitializer(),t))){for(const r of o.getElements())if((r.getPropertyNameNode()?.getText()??r.getNameNode().getText())==="auth")return!0}}return!1},ci=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!ii.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(ri.has(o)){const r=n.getExpression();return i.isIdentifier(r)&&r.getText()==="httpRoute"?o.toUpperCase():void 0}s=n.getExpression()}},li=(e,t)=>{const s=e.getExpression();if(i.isIdentifier(s)&&s.getText()==="httpAction"){const c=Ze(e.getArguments()[0]),u=c&&Je(c,!0);if(!c||u===void 0)return;const d=et(c,u);return d===void 0?void 0:{exportName:x(e),file:t,kind:"httpAction",line:e.getStartLineNumber(),readsAuth:tt(c,u),sideEffect:d}}const n=ci(e);if(n===void 0)return;const o=Ze(e.getArguments()[0]),r=o&&Je(o,!1);if(!o||r===void 0)return;const a=et(o,r);return a===void 0?void 0:{exportName:x(e),file:t,kind:"httpRoute",line:e.getStartLineNumber(),method:n,readsAuth:tt(o,r),sideEffect:a}},ui=(e,t)=>y(e,t,li),di=new Set(["btoa","encodeURI","encodeURIComponent","isSafeHeaderValue","Number","parseFloat","parseInt"]),fi=new Set(["append","set"]),he=e=>i.isIdentifier(e)?e.getText():i.isPropertyAccessExpression(e)?e.getName():"",At=e=>e!==void 0&&(i.isStringLiteral(e)||i.isNoSubstitutionTemplateLiteral(e))?e.getLiteralText():"",st=(e,t)=>(i.isCallExpression(e)?[e,...e.getDescendantsOfKind(l.CallExpression)]:e.getDescendantsOfKind(l.CallExpression)).some(n=>di.has(he(n.getExpression()))&&ys(n,t)),pi=(e,t)=>{if(st(e,t))return!0;const s=ee(e);return s!==void 0&&st(s,t)},me=(e,t)=>Ns(e,t)&&!pi(e,t),gi=e=>{if(i.isPropertyAccessExpression(e)&&e.getName()==="headers")return!0;const t=ee(e);return t!==void 0&&i.isNewExpression(t)&&he(t.getExpression())==="Headers"},X=e=>{if(e===void 0)return;if(i.isObjectLiteralExpression(e))return e;const t=ee(e);return t!==void 0&&i.isObjectLiteralExpression(t)?t:void 0},xe=(e,t,s)=>{for(const n of e.getProperties())if(i.isPropertyAssignment(n)){const o=n.getInitializer();o!==void 0&&me(o,s.requestName)&&s.rows.push({exportName:s.exportName,file:s.relativePath,headerName:At(n.getNameNode()),line:o.getStartLineNumber(),via:t})}else if(i.isShorthandPropertyAssignment(n)){const o=n.getNameNode();me(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=X(n.getExpression());o!==void 0&&xe(o,t,s)}},Nt=(e,t)=>{const s=X(e);if(s===void 0)return;const n=s.getProperty("headers");if(n===void 0||!i.isPropertyAssignment(n))return;const o=X(n.getInitializer());o!==void 0&&xe(o,"response-init",t)},mi=(e,t)=>{const s=he(e.getExpression());if(s==="Response")Nt(e.getArguments()[1],t);else if(s==="Headers"){const n=X(e.getArguments()[0]);n!==void 0&&xe(n,"headers-ctor",t)}},hi=(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"){Nt(e.getArguments()[1],t);return}if(fi.has(n)&&gi(o)){const r=e.getArguments()[1];r!==void 0&&me(r,t.requestName)&&t.rows.push({exportName:t.exportName,file:t.relativePath,headerName:At(e.getArguments()[0]),line:r.getStartLineNumber(),via:n==="set"?"headers-set":"headers-append"})}},xi=(e,t)=>{for(const s of e.getDescendantsOfKind(l.NewExpression))mi(s,t);for(const s of e.getDescendantsOfKind(l.CallExpression))hi(s,t)},Ei=(e,t)=>{const s=e.getExpression();if(!i.isIdentifier(s)||s.getText()!=="httpAction")return[];const n=Is(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 xi(n,{exportName:x(e),relativePath:t,requestName:r.getText(),rows:a}),a},vi=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression))s.push(...Ei(n,t));return s},Si=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...vi(o,E(t,n)))}return s},Ai=new Set(["auth","context.auth","ctx.auth"]),Ni="userId",yi=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},bi=(e,t)=>{const s=f(t,ht);if(!N(s))return;const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);for(const o of n.getDescendantsOfKind(l.CallExpression)){if(I(o.getExpression())!=="defineIdentity")continue;const[r]=o.getArguments();return r&&i.isObjectLiteralExpression(r)?yi(r):void 0}},nt=e=>{if(!(e===void 0||!i.isPropertyAccessExpression(e)||e.getName()!=="identity"))return Ai.has(e.getExpression().getText())?e:void 0},Ii=e=>{if(i.isPropertyAccessExpression(e)&&nt(e.getExpression())!==void 0)return e.getName();if(i.isElementAccessExpression(e)&&nt(e.getExpression())!==void 0){const t=e.getArgumentExpression();return t&&i.isStringLiteral(t)?t.getLiteralValue():void 0}},Pi=(e,t,s)=>{const n=[];for(const o of e.getDescendants()){const r=Ii(o);r!==void 0&&n.push({declared:r===Ni||s.has(r),exportName:x(o),file:t,key:r,line:o.getStartLineNumber()})}return n},wi=(e,t)=>{const s=bi(e,t);if(s===void 0)return[];const n=[];for(const o of h(t)){const r=e.getSourceFile(o)??e.addSourceFileAtPath(o);n.push(...Pi(r,E(t,o),s))}return n},Ti=(e,t)=>{if(I(e.getExpression())!=="buildImageDeliveryUrl")return;const s=e.getArguments()[0];if(!s)return;const n=S(s,"key");if(!(!n||!T(n)||F(n)))return{exportName:x(e),file:t,line:e.getStartLineNumber()}},Ci=(e,t)=>y(e,t,Ti),Oi=new Set(["delete","get","getRaw","getWithMetadata","put"]),Ri=(e,t)=>te(e,t,{argIndex:0,matchReceiver:s=>s==="ctx.kv"||s.startsWith("ctx.kv."),methods:Oi}),Fi=new Set(["queue","send"]),rt=new Set(["bcc","cc","to"]),Li=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName();if(!Fi.has(t))return;const s=e.getExpression().getText();return s==="ctx.mail"||s==="ctx.email"?t:void 0},Di=e=>i.isObjectLiteralExpression(e)?e.getProperties().some(t=>{if(i.isShorthandPropertyAssignment(t)){const n=t.getNameNode();return rt.has(t.getName())&&T(n)&&!F(n)}if(!i.isPropertyAssignment(t)||!rt.has(t.getName()))return!1;const s=t.getInitializer();return s!==void 0&&T(s)&&!F(s)}):!1,ki=(e,t)=>{const s=Li(e.getExpression());if(s===void 0)return;const n=e.getArguments()[0];if(!(!n||!Di(n)))return{exportName:x(e),file:t,line:e.getStartLineNumber(),method:s}},Mi=(e,t)=>y(e,t,ki),Ki=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||t.getName()!=="replace")return!1;const s=t.getExpression();return i.isPropertyAccessExpression(s)?s.getName()==="db":i.isIdentifier(s)&&s.getText()==="db"},_i=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},zi=e=>{if(!e.isExported())return;const t=e.getInitializer();if(t?.getKind()!==l.CallExpression)return;const s=t;return Us(s.getExpression())?s:void 0},Ui=e=>{const t=zi(e),s=t===void 0?void 0:_i(t);if(s===void 0)return[];const n=e.getNameNode(),o=i.isIdentifier(n)?n.getText():"";return s.getDescendantsOfKind(l.CallExpression).filter(r=>Ki(r)).map(r=>({exportName:o,file:"lunora/mutators.ts",line:r.getStartLineNumber()}))},Bi=e=>e.getVariableDeclarations().flatMap(t=>Ui(t)),$i=(e,t)=>{const s=f(t,zs);if(!N(s))return[];const n=e.getSourceFile(s)??e.addSourceFileAtPath(s);return Bi(n)},qi=new Set(["delete","get","patch"]),ji=new Set(["accountId","authorId","companyId","createdBy","createdById","customerId","groupId","memberId","organizationId","orgId","ownerId","projectId","teamId","tenantId","userId","workspaceId"]),Wi=new Set(["auth","identity","session","user"]),Vi=new Set([l.EqualsEqualsEqualsToken,l.EqualsEqualsToken,l.ExclamationEqualsEqualsToken,l.ExclamationEqualsToken]),Hi=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():""},Gi=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},Yi=(e,t)=>e.getDescendantsOfKind(l.Identifier).some(s=>s.getText()===t),Xi=e=>i.isThrowStatement(e)||i.isReturnStatement(e)||e.getDescendantsOfKind(l.ThrowStatement).length>0||e.getDescendantsOfKind(l.ReturnStatement).length>0,Qi=(e,t)=>e.getDescendantsOfKind(l.IfStatement).some(s=>Yi(s.getExpression(),t)&&Xi(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(!qi.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}},Ji=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},eo=e=>e.getDescendantsOfKind(l.CallExpression).some(t=>t.getArguments().some(s=>Ji(s)==="ctx")),to=e=>e.getDescendantsOfKind(l.BinaryExpression).some(t=>Vi.has(t.getOperatorToken().getKind())?i.isPropertyAccessExpression(t.getLeft())||i.isPropertyAccessExpression(t.getRight()):!1),so=e=>{for(const t of e.getDescendantsOfKind(l.Identifier))if(ji.has(t.getText()))return!0;for(const t of e.getDescendantsOfKind(l.PropertyAccessExpression)){const s=t.getExpression();if(i.isIdentifier(s)&&s.getText()==="ctx"&&Wi.has(t.getName()))return!0}return eo(e)||to(e)},no=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer();if(s===void 0||!i.isCallExpression(s))return[];const n=_(s);if(n?.kind!=="query"&&n?.kind!=="mutation")return[];const o=gt(s);if(o===void 0)return[];const r=n.receiver!==void 0&&mt(n.receiver,"use","rls"),a=so(o),c=new Set,u=[];for(const d of o.getDescendantsOfKind(l.CallExpression)){const v=Hi(d);if(v===void 0)continue;const P=Gi(d);if(P===void 0||c.has(P)||!Qi(o,P))continue;const p=Zi(o,P);p!==void 0&&(c.add(P),u.push({exportName:e.getName(),file:t,line:d.getStartLineNumber(),mentionsOwnership:a,sinkMethod:p,table:v,usesRls:r,visibility:n.visibility}))}return u},ro=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=E(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...no(c,r))}return s},io=new Set(["accountId","authorId","createdBy","createdById","organizationId","orgId","ownerId","tenantId","updatedBy","userId","workspaceId"]),oo=new Set(["insert","insertManyUnsafe","patch","replace"]),ao=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName();if(!oo.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},co=(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},lo=(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||!io.has(a))&&T(c)&&!F(c)&&o.push({exportName:x(s),field:a,file:n,line:s.getStartLineNumber(),method:t})}return o},uo=(e,t)=>{const s=ao(e.getExpression());if(s===void 0)return[];const n=e.getArguments()[1];return n?co(n,s).flatMap(o=>lo(o,s,e,t)):[]},fo=(e,t,s)=>{const n=[];for(const o of e.getDescendantsOfKind(l.CallExpression))for(const r of uo(o,t)){const a=s(r.exportName);n.push(a===void 0?r:{...r,visibility:a})}return n},po=(e,t,s=[])=>{const n=[],o=new Map(s.map(r=>[`${r.filePath}:${r.exportName}`,r.visibility]));for(const r of h(t)){const a=e.getSourceFile(r)??e.addSourceFileAtPath(r),c=E(t,r);n.push(...fo(a,c,u=>o.get(`${c}:${u}`)))}return n},go=new Set(["createAutumnAdapter","createDodoPaymentsAdapter","createPolarAdapter","createStripeAdapter"]),mo=e=>e&&i.isNumericLiteral(e)?Number(e.getText()):void 0,ho=e=>{const t=e.getProperty("webhookToleranceSeconds");return t&&i.isPropertyAssignment(t)?mo(t.getInitializer()):void 0},xo=(e,t)=>{const s=I(e.getExpression());if(s===void 0||!go.has(s))return;const[n]=e.getArguments(),o=n&&i.isObjectLiteralExpression(n)?ho(n):void 0;return{callee:s,exportName:x(e),file:t,line:e.getStartLineNumber(),...o===void 0?{}:{toleranceSeconds:o}}},Eo=(e,t)=>y(e,t,xo),vo=new Set(["defineQueue","defineWorkflow"]),So=new Set(["run","runAction","runMutation","runQuery"]),Ao=new Set(["api","internal"]),No=e=>{const t=e.getExpression();return i.isIdentifier(t)?t.getText():void 0},yo=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},yt=(e,t)=>{const s=e.getParameters()[t]?.getNameNode();return s&&i.isIdentifier(s)?s.getText():void 0},bt=(e,t)=>e===t||e.startsWith(`${t}.`),It=e=>{const t=e.getDescendantsOfKind(l.PropertyAccessExpression);return i.isPropertyAccessExpression(e)&&t.push(e),t},it=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)},Pt=e=>{const t=e.getDescendantsOfKind(l.Identifier).filter(s=>it(s));return i.isIdentifier(e)&&it(e)&&t.push(e),t},bo=e=>{if(!i.isVariableDeclaration(e))return[];const t=e.getNameNode();return i.isIdentifier(t)?[t.getText()]:t.getDescendantsOfKind(l.BindingElement).map(s=>s.getName())},Io=e=>{const t=yt(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},Po=(e,t,s)=>{const n=t==="workflow"?[`${s}.params`]:Io(e),o=new Set,r=a=>It(a).some(c=>n.some(u=>bt(c.getText(),u)))?!0:Pt(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 bo(a))o.add(u)}return{names:o,prefixes:n}},wo=(e,t)=>It(e).some(s=>t.prefixes.some(n=>bt(s.getText(),n)))?!0:Pt(e).some(s=>t.names.has(s.getText())),To=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)||!Ao.has(s.getText())||t.length<2))return{exportName:n,file:t.slice(0,-1).join("/")}},Co=(e,t,s)=>{const n=yt(e,0);if(n===void 0)return[];const o=Po(e,t,n),r=[];for(const a of e.getDescendantsOfKind(l.CallExpression)){const c=a.getExpression();if(!i.isPropertyAccessExpression(c)||!So.has(c.getName())||c.getExpression().getText()!==n)continue;const u=a.getArguments()[1];if(!u||!wo(u,o))continue;const d=To(a.getArguments()[0]);d!==void 0&&r.push({dispatchKind:t,file:s,handlerExport:x(a),line:a.getStartLineNumber(),targetExport:d.exportName,targetFile:d.file})}return r},Oo=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=No(n);if(o===void 0||!vo.has(o))continue;const r=yo(n);r!==void 0&&s.push(...Co(r,o==="defineQueue"?"queue":"workflow",t))}return s},Ro=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Oo(o,E(t,n)))}return s},ot={dbRateLimit:"usesRateLimit",emailGateMiddleware:"usesEmailGate",mask:"usesMask",rateLimit:"usesRateLimit",rls:"usesRls",verifyTurnstile:"usesCaptcha",verifyTurnstileMiddleware:"usesCaptcha"},at=new Set(["account","credential","member","passkey","session","user"]),Fo=e=>e.replaceAll(/[-_]/gu," ").replaceAll(/([a-z0-9])([A-Z])/gu,"$1 $2").split(" ").filter(Boolean).map(t=>t.toLowerCase()),Lo=e=>{const s=Fo(e).at(-1);if(!s)return!1;const n=s.endsWith("s")?s.slice(0,-1):s;return at.has(s)||at.has(n)},Do=e=>{const t=e.replaceAll(/[^a-z0-9]/giu,"").toLowerCase();return t.endsWith("email")||t.endsWith("emailaddress")},ko=(e,t)=>{const{objects:s,opaque:n}=vt(e,t);return tr(s).some(o=>Do(o))?!0:n?void 0:!1},Ee=e=>{const t=e.getExpression();if(i.isIdentifier(t))return t.getText();if(i.isPropertyAccessExpression(t))return t.getName()},Mo=e=>{const t=e.getArguments()[0];return!t||!i.isObjectLiteralExpression(t)?{usesCaptcha:!1,usesRateLimit:!1}:{usesCaptcha:!!t.getProperty("captcha"),usesRateLimit:!!t.getProperty("rateLimit")}},Ko=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},G={usesCaptcha:!1,usesEmailGate:!1,usesMask:!1,usesRateLimit:!1,usesRls:!1},_o=e=>{const t=Ko(e),s=t?Ee(t):void 0;if(t&&s==="protectPublic"){const n=Mo(t);return{...G,usesCaptcha:n.usesCaptcha,usesRateLimit:n.usesRateLimit}}return s!==void 0&&s in ot?{...G,[ot[s]]:!0}:G},zo=e=>{const t={...G};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=_o(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},Uo=new Set(["insert","insertMany","insertManyUnsafe","replace"]),Bo=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!Uo.has(t.getName()))return!1;const s=t.getExpression();if(!(i.isPropertyAccessExpression(s)?s.getName()==="db":i.isIdentifier(s)&&s.getText()==="db"))return!1;const o=e.getArguments()[0];return!o||!(i.isStringLiteral(o)||i.isNoSubstitutionTemplateLiteral(o))?!1:Lo(o.getLiteralText())},$o=new Set(["create","runAfter","runAt","send","sendBatch"]),qo=new Set(["queues","scheduler","workflows"]),jo=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!$o.has(t.getName()))return!1;let s=t.getExpression();for(;i.isCallExpression(s)||i.isElementAccessExpression(s)||i.isPropertyAccessExpression(s);){if(i.isPropertyAccessExpression(s)&&qo.has(s.getName())){const n=s.getExpression();if(i.isIdentifier(n)&&n.getText()==="ctx")return!0}s=s.getExpression()}return!1},Wo=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||t.getName()!=="insertManyUnsafe")return!1;const s=t.getExpression();return i.isPropertyAccessExpression(s)?s.getName()==="db":i.isIdentifier(s)&&s.getText()==="db"},wt=new Set(["generateObject","generateText","streamObject","streamText"]),Vo=e=>{const t=Ee(e);return t!==void 0&&wt.has(t)},Ho=e=>{const t=Ee(e);if(t===void 0||!wt.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")},Go=new Set(["log","span","trace"]),Yo=new Set(["ai"]),Xo=new Set(["email","mail"]),Qo=new Set(["ai","browser","fetch","mail","notify","queues","sql","storage","workflows"]),pe=(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"}),Zo=new Set([l.ArrowFunction,l.FunctionDeclaration,l.FunctionExpression,l.GetAccessor,l.MethodDeclaration,l.SetAccessor]),Jo=new Set(["every","filter","flatMap","forEach","map","some"]),ea=new Set(["all","allSettled","race"]),ta=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(Jo.has(n))return t;const o=s.getExpression();if(i.isIdentifier(o)&&o.getText()==="Promise"&&ea.has(n))return t},sa=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(Zo.has(t.getKind())){const s=ta(t);if(!s)return!1;t=s;continue}t=t.getParent()}return!1},na=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}},ra=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}},ia=e=>{let t=!1,s=!0;for(const n of e.getDescendantsOfKind(l.PropertyAccessExpression)){if(!Qo.has(n.getName()))continue;const o=n.getExpression();if(!i.isIdentifier(o)||o.getText()!=="ctx")continue;const r=ra(n);r&&(t=!0,!sa(r)&&!na(r)&&(s=!1))}return{handlesErrors:t&&s,reachesOutbound:t}},oa=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"}),ct="lunora-advisor-exempt",aa=/^[\s*/]+/u,ca=/[\w-]/u,la=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(aa,"");if(!o.startsWith(ct))continue;const r=o.slice(ct.length);if(ca.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:""}},ua=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}},da=(e,t)=>{const s=ua(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)},fa=e=>{let t=!1,s=!1,n=!1,o=!1,r=!1;for(const u of e.getDescendantsOfKind(l.CallExpression))if(Bo(u)&&(r=!0),jo(u)&&(t=!0),Wo(u)&&(o=!0),Vo(u)&&(s=!0),Ho(u)&&(n=!0),r&&t&&o&&n)break;const{handlesErrors:a,reachesOutbound:c}=ia(e);return{callsMail:pe(e,Xo),emitsEvent:pe(e,Go),fanOut:t,handlesErrors:a,reachesOutbound:c,runsAiGeneration:s||pe(e,Yo),throwsBareError:oa(e),unboundedAiGeneration:n,usesInsertManyUnsafe:o,writesUserTable:r}},pa=(e,t)=>{const s=e.getInitializer();if(!s||!i.isCallExpression(s))return;const n=_(s);if(!n||n.kind!=="query"&&n.kind!=="mutation"&&n.kind!=="action")return;const o=n.receiver?zo(n.receiver):{usesCaptcha:!1,usesEmailGate:!1,usesMask:!1,usesRateLimit:!1,usesRls:!1},r=da(e,s);return{...r?fa(r):{},...la(e),...o,analyzableBody:r!==void 0,exportName:e.getName(),file:t,hasEmailArg:ko(s,n.receiver),kind:n.kind,visibility:n.visibility}},ga=(e,t)=>{const s=[];for(const n of e.getVariableStatements())if(n.isExported())for(const o of n.getDeclarations()){const r=pa(o,t);r&&s.push(r)}return s},ma=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...ga(o,E(t,n)))}return s},ha=new Set(["dbRateLimit","rateLimit"]),xa=e=>i.isArrowFunction(e)?e.getBody():e,Ea=(e,t)=>{const s=I(e.getExpression());if(s===void 0||!ha.has(s))return;const n=e.getArguments()[2];if(!n)return;const o=S(n,"key");if(!o)return;const r=xa(o);if(!(!T(r)||F(r)))return{callee:s,exportName:x(e),file:t,limitName:ft(e),line:e.getStartLineNumber()}},va=(e,t)=>y(e,t,Ea),Sa=new Set(["findFirst","findFirstOrThrow","findMany","get"]),Aa=e=>{const t=e.getExpression();if(!i.isPropertyAccessExpression(t)||!Sa.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()},Na=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()}},ya=e=>{let t=e;for(;i.isAwaitExpression(t)||i.isParenthesizedExpression(t)||i.isNonNullExpression(t)||i.isAsExpression(t);)t=t.getExpression();return t},Tt=(e,t=!1)=>{const s=ya(e);if(i.isIdentifier(s)){if(t)return;const n=ee(s);return n===void 0?void 0:Tt(n,!0)}if(i.isCallExpression(s))return Aa(s)??Na(s)},ba=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},Ia=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer();if(s===void 0||!i.isCallExpression(s))return[];const n=_(s);if(n?.kind!=="query")return[];const o=gt(s);if(o===void 0)return[];const r=n.receiver!==void 0&&Ps(n.receiver,"output"),a=n.receiver!==void 0&&mt(n.receiver,"use","mask"),c=new Set,u=[];for(const d of ba(o)){const v=Tt(d);v===void 0||c.has(v)||(c.add(v),u.push({exportName:e.getName(),file:t,line:d.getStartLineNumber(),table:v,usesMask:a,usesOutput:r,visibility:n.visibility}))}return u},Pa=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=E(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...Ia(c,r))}return s},wa=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},Ta=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&i.isCallExpression(s)?_(s):void 0;if(!n)return[];const o=[];for(const r of e.getDescendantsOfKind(l.CallExpression)){const a=pt(r);if(a===void 0)continue;const c=wa(S(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},Ca=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=E(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(...Ta(c,r))}return s},Q=e=>{if(i.isStringLiteral(e)||i.isNoSubstitutionTemplateLiteral(e))return e.getLiteralText();if(i.isBinaryExpression(e)&&e.getOperatorToken().getKind()===l.PlusToken){const t=Q(e.getLeft()),s=Q(e.getRight());return t!==void 0&&s!==void 0?t+s:void 0}},Oa=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&&Q(t)!==void 0},Ra=/(?:^|\/)__tests__\//u,Fa=/\.(?:spec|test)$/u,La=e=>Ra.test(e)||Fa.test(e),Da=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()}},ka=(e,t,s)=>Qs(e)?!La(s)&&Zs(Da(t)):!0,Ma=(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(Oa(r))continue;const a=Q(r);if(a===void 0)continue;const c=Ys(a);if(c===void 0||!ka(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:Xs(a)}))}return s},Ka=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...Ma(o,E(t,n)))}return s},_a=(e,t)=>{if(!i.isVariableDeclaration(e))return[];const s=e.getInitializer(),n=s&&i.isCallExpression(s)?_(s):void 0;if(!n)return[];const o=[];for(const r of e.getDescendantsOfKind(l.CallExpression)){const a=pt(r);if(a===void 0)continue;const c=S(a.options,"includeDeleted");if(c===void 0)continue;const u=i.isTrueLiteral(c),d=!u&&T(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},za=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=E(t,n);for(const a of o.getVariableStatements())if(a.isExported())for(const c of a.getDeclarations())s.push(..._a(c,r))}return s},Ua=new Set(["query","unsafe"]),Ba=e=>{if(!i.isPropertyAccessExpression(e)||!Ua.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"},$a=e=>i.isBinaryExpression(e)||i.isTemplateExpression(e),qa=e=>e.getFirstAncestorByKind(l.VariableDeclaration)?.getName()??"<module>",ja=(e,t)=>{if(!Ba(e.getExpression()))return;const s=e.getArguments()[0];if(!(!s||!$a(s)))return{exportName:qa(e),file:t,line:s.getStartLineNumber()}},Wa=(e,t)=>y(e,t,ja),Va=[["convex",["convex","@convex-dev/"]],["supabase",["@supabase/"]],["firebase",["firebase","@firebase/","firebase-admin"]]],Ha=e=>{for(const[t,s]of Va)for(const n of s)if(e===n||e.startsWith(n.endsWith("/")?n:`${n}/`))return t},Ga=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);for(const r of o.getImportDeclarations()){const a=r.getModuleSpecifierValue(),c=Ha(a);c!==void 0&&s.push({file:E(t,n),line:r.getStartLineNumber(),moduleSpecifier:a,platform:c})}}return s},Ya=new Set(["createMultipartUpload","delete","download","generateUploadUrl","get","getMetadata","getPresignedUrl","getSignedUrl","getUrl","head","put","resumeMultipartUpload","store","upload"]),Xa=(e,t,s=[])=>{const n=new Map(s.map(r=>[`${r.filePath}:${r.exportName}`,r.visibility]));return te(e,t,{argIndex:0,matchReceiver:r=>r==="ctx.storage"||r.startsWith("ctx.storage."),methods:Ya,requireUnmodifiedReach:!0}).map(r=>{const a=n.get(`${r.file}:${r.exportName}`);return a===void 0?r:{...r,visibility:a}})},Qa=new Map([["generateUploadUrl",1],["getPresignedUrl",1],["getSignedUrl",1],["store",2],["upload",2]]),Za=e=>e&&i.isNumericLiteral(e)?Number(e.getText()):void 0,Ja=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=Za(o.getInitializer()));continue}(i.isShorthandPropertyAssignment(o)||i.isMethodDeclaration(o))&&t.push(o.getName())}return{analyzable:!n,expiresInSeconds:s,presentKeys:t}},ec=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName(),s=Qa.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},tc=(e,t)=>{const s=ec(e.getExpression());if(s!==void 0)return{exportName:x(e),file:t,line:e.getStartLineNumber(),method:s.method,...Ja(e.getArguments()[s.optionsIndex])}},sc=(e,t)=>y(e,t,tc),nc=new Set(["RegisteredAction","RegisteredMutation","RegisteredQuery"]),ve=e=>{const t=e.getType(),s=t.getAliasSymbol()?.getName()??t.getSymbol()?.getName();return s!==void 0&&nc.has(s)?s:void 0},Ct=e=>{const t=e.getInitializer();return t===void 0?!1:i.isCallExpression(t)||i.isIdentifier(t)||i.isPropertyAccessExpression(t)},Ot={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."},rc={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."},Se=(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"}),ic=(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}`)||!Ct(r))continue;const c=ve(r);c!==void 0&&n.push(Se(t,a,c,r.getStartLineNumber(),Ot))}return n},oc=(e,t,s)=>{if(s.has(`${t}:default`))return[];const n=[];for(const o of e.getExportAssignments().filter(r=>!r.isExportEquals())){const r=ve(o.getExpression());r!==void 0&&n.push(Se(t,"default",r,o.getStartLineNumber(),Ot))}return n},ac=(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||!Ct(c))continue;const u=ve(c);u!==void 0&&n.push(Se(t,a,u,r.getStartLineNumber(),rc))}return n},cc=(e,t,s)=>[...ic(e,t,s),...oc(e,t,s),...ac(e,t,s)],lc=(e,t,s)=>{const n=new Set(s.map(r=>`${r.filePath}:${r.exportName}`)),o=[];for(const r of h(t)){const a=e.getSourceFile(r);a!==void 0&&o.push(...cc(a,E(t,r),n))}return o.toSorted((r,a)=>r.cacheKey.localeCompare(a.cacheKey))},uc=new Set(["when","where"]),ge=new Set(["definePolicy","defineShape"]),dc=e=>{if(!i.isCallExpression(e))return;const t=e.getExpression();if(i.isPropertyAccessExpression(t)){const n=t.getName();return ge.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 ge.has(o)?o:void 0}const s=t.getText();return ge.has(s)?s:void 0},fc=e=>i.isObjectLiteralExpression(e)&&e.getProperties().length===0,Rt=e=>{if(e!==void 0){if(i.isReturnStatement(e)&&e.getExpression()===void 0||e.getKind()===l.UndefinedKeyword||e.getText()==="undefined")return"undefined";if(fc(e))return"empty-object";if(i.isParenthesizedExpression(e))return Rt(e.getExpression())}},Ft=e=>e.getAncestors().find(t=>i.isArrowFunction(t)||i.isFunctionExpression(t)||i.isFunctionDeclaration(t)),Lt=e=>e.getDescendantsOfKind(l.ReturnStatement).filter(t=>Ft(t)===e),Dt=e=>e.getDescendantsOfKind(l.ConditionalExpression).filter(t=>Ft(t)===e),pc=e=>{const t=Lt(e);return t.length>1?!0:t.some(s=>s.getFirstAncestorByKind(l.IfStatement)!==void 0)||Dt(e).length>0},gc=e=>{const t=[],s=e.getBody();i.isBlock(s)||t.push(s);for(const n of Lt(e)){const o=i.isReturnStatement(n)?n.getExpression():void 0;t.push(o??n)}for(const n of Dt(e))t.push(n.getWhenTrue(),n.getWhenFalse());return t},mc=e=>{for(const t of e.getAncestors())if(i.isVariableDeclaration(t)){const s=t.getNameNode();if(i.isIdentifier(s))return s.getText()}return"<anonymous>"},hc=(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)||!uc.has(r.getName()))continue;const a=r.getInitializer();if(!(!a||!(i.isArrowFunction(a)||i.isFunctionExpression(a)))&&pc(a))for(const c of gc(a)){const u=Rt(c);u!==void 0&&o.push({exportName:mc(e),file:s,form:u,key:r.getName(),line:c.getStartLineNumber(),owner:t})}}return o},xc=(e,t)=>{const s=[];for(const n of e.getDescendantsOfKind(l.CallExpression)){const o=dc(n);o!==void 0&&s.push(...hc(n,o,t))}return s},Ec=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n);s.push(...xc(o,E(t,n)))}return s},vc=new Set(["query","upsert","upsertMany"]),Sc=e=>{if(!i.isPropertyAccessExpression(e))return;const t=e.getName();if(vc.has(t))return e.getExpression().getText()==="ctx.vectors"?t:void 0},Ac=(e,t)=>{const s=Sc(e.getExpression());if(s===void 0)return;const n=e.getArguments()[1];if(!n)return;const o=S(n,"namespace");if(!(!o||!T(o)||F(o)))return{exportName:x(e),file:t,line:e.getStartLineNumber(),method:s}},Nc=(e,t)=>y(e,t,Ac),yc=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"},bc=e=>{const t=e.getArguments()[0];return t&&i.isStringLiteral(t)?t.getLiteralText():""},Ic=(e,t)=>{const s=[];for(const n of h(t)){const o=e.getSourceFile(n)??e.addSourceFileAtPath(n),r=E(t,n);for(const a of o.getDescendantsOfKind(l.CallExpression)){if(!yc(a))continue;const c=fs(a);c!==""&&s.push({exportName:c,file:r,line:a.getStartLineNumber(),workflow:bc(a)})}}return s},Pc=".lunora-schema.json",b=(e,t)=>{N(e)&&dt(e,"utf8")===t||$t(e,t,"utf8")},w=(e,t)=>{if(t===""){qt(e,{force:!0});return}b(e,t)},wc=e=>{const t=f(e,"package.json");if(N(t))try{const s=JSON.parse(dt(t,"utf8"));return typeof s.version=="string"&&s.version!==""?s.version:void 0}catch{return}},Tc=()=>{const e=process.env.LUNORA_CODEGEN_TIMING;return e!==void 0&&e!==""},Cc=e=>{let t=N(e)?e:le(e);for(;t&&t!==le(t);){const s=f(t,"tsconfig.json");if(N(s))return s;t=le(t)}},lt=e=>e.replaceAll("\\","/"),Oc=(e,t,s)=>{if(s&&e.length>0){const r=e.map(a=>`"${a.exportName}"`).join(", ");throw new R("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 R("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 R("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})}},ut=(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)},Rc=e=>{const t=Cc(e);return t?new He({skipAddingFilesFromTsConfig:!1,tsConfigFilePath:t,useInMemoryFileSystem:!1}):new He({skipAddingFilesFromTsConfig:!0,useInMemoryFileSystem:!1})},Sl=(e,t)=>{const s=h(t),n=f(t,"schema.ts");N(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=>lt(c))),r=lt(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)}}},Al=e=>{const t=Tc(),s=t?ue.now():0,n=f(e.projectRoot,e.lunoraDirectory??"lunora"),o=f(n,"schema.ts");if(!N(o))throw new R("INTERNAL",`schema.ts not found at ${o}`);const r=e.project??Rc(n);on(Ts);const a=Gs(r,o,e.projectRoot),{agents:c,containers:u,dataModelContent:d,dependencies:v,env:P,featureUsage:p,hasBrowser:A,hasFlags:D,hasNotify:z,identity:U,platformGate:q,queues:C,serverContent:k,storageRulesMetadata:B,usesSandbox:se,useUmbrella:M,workflows:O}=Tn({lunoraDirectory:n,project:r,projectRoot:e.projectRoot,schema:a,target:e.target}),g=f(n,"_generated"),Ae=f(g,"dataModel.ts"),Ne=f(g,"server.ts");ut(r,Ae,d),ut(r,Ne,k);const L=ws(r,n),ye=Fs(r,n),be=_s(r,n),$=Js(r,n),ne=Bs(r,n),re=Os(r,n,O,c),j=e.lint===!1?void 0:Vt({adminRoutes:Mn(r,n),aiRawRuns:zn(r,n),aiToolSideEffects:Yn(r,n),argumentDerivedFetches:Zn(r,n),argumentValidators:ur(r,n),authApiCalls:Cs(r,n),authConfigs:Sr(r,n),browserUrlAccesses:Ir(r,n),configCalls:Lr(r,n),containerKeyAccesses:kr(r,n),containerOverrides:Br(r,n),containers:u,exportSinks:Wr(r,n),staleMigrationImports:Ga(r,n),failOpenGuards:Xr(r,n),flagSecurityDefaults:ei(r,n),geoIndexUsages:ni(r,n),httpActionGuards:ui(r,n),httpHeaderWrites:Si(r,n),identityClaimReads:wi(r,n),imageDeliveryUrlAccesses:Ci(r,n),inserts:Ls(r,n),kvKeyAccesses:Ri(r,n),mailRecipientAccesses:Mi(r,n),maskProcedures:Ds(r,n),maskStrategies:ks(r,n),mutatorWrites:$i(r,n),nondeterministicCalls:$s(r,n),normalizeIdAuthorizations:ro(r,n),notifyCalls:js(r,n),notifyConfig:qs(r,n),ownerFieldWrites:po(r,n,L),unrestrictedWhereBranches:Ec(r,n),paymentWebhooks:Eo(r,n),privilegedDispatches:Ro(r,n),procedureProtections:ma(r,n),queries:bs(r,n),queues:C,r2sqlCalls:Ws(r,n),ratelimitKeySelectors:va(r,n),rawRowReturns:Pa(r,n),relationLoads:Ca(r,n),rlsProcedures:Vs(r,n),schema:a,secretLiterals:Ka(r,n),shapes:$,softDeleteReads:za(r,n),sqlInterpolations:Wa(r,n),storageKeyAccesses:Xa(r,n,L),storageUploads:sc(r,n),vectorNamespaceAccesses:Nc(r,n),workflowCalls:Ic(r,n),workflows:O,wranglerVariables:e.wranglerVariables}),Ie=j===void 0?[]:[...jt(j,{source:"static"}),...lc(r,n,L)],kt=Hs(r,n),Pe=Ms(r,n);Oc($,Pe,Ks(r,n));const Mt=D?Rs(r,n):[],W=An(p,{containerCount:u.length,cronCount:re.length,dependencies:v,hasPaymentTables:Sn(a.tables),queueCount:C.length,storageColumnCount:Object.keys(Qt(a)).length,storageRuleCount:B.rules.length,vectorIndexCount:a.vectorIndexes.length,workflowCount:O.length}),we=t?ue.now():0,Te=Zt({agents:c,functions:L,httpRoutes:ye,mutators:ne,useUmbrella:M,workflows:O}),Ce=Jt({agents:c,functions:L,migrations:be,mutators:ne,shapes:$,useUmbrella:M,usesSandbox:se}),ie=an(a,be.map(m=>m.id)),Oe=es({advisories:Ie,advisorProcedures:j?.procedureProtections??[],agents:c,containers:u,env:P,flagKeys:Mt,hasAccessFacade:p.access,hasAi:p.ai,hasAnalytics:p.analytics,hasBrowser:A,hasFlags:D,hasHyperdrive:p.hyperdrive,hasImages:p.images,hasKv:p.kv,hasNotify:z,hasPayments:p.payments,hasPipelines:p.pipelines,hasR2sql:p.r2sql,hasX402:p.x402,maskMetadata:Pe,mutators:ne,queues:C,rlsMetadata:kt,schema:a,schemaSnapshot:ie,shapes:$,storageRules:B,studioFeatures:W,useUmbrella:M,workflows:O}),Re=ts($,v.has("@lunora/db"),M),Fe=ss(u,a.jurisdiction),Le=ns(O),De=rs(c),ke=is(C),Me=os(re),Ke=as(a.vectorIndexes),V=cs(a,M),_e=ls(v.has("@lunora/seed")),H=e.apiSpec??"openapi",oe=H==="openapi"||H==="both",ae=H==="openrpc"||H==="both",ze=en({emailAgents:c.filter(m=>m.onEmail===!0).map(m=>({bindingName:m.bindingName,exportName:m.exportName})),hasAccess:v.has("@lunora/cloudflare-access"),hasAi:p.ai,hasAnalytics:p.analytics,hasAuth:v.has("@lunora/auth"),hasBrowser:A,hasFramework:v.has("@lunora/astro")||v.has("@lunora/svelte")||v.has("@lunora/vue"),hasGlobal:a.tables.some(m=>m.shardMode==="global"&&m.globalBackend!=="hyperdrive"),hasHyperdrive:p.hyperdrive,hasHyperdriveGlobal:a.tables.some(m=>m.shardMode==="global"&&m.globalBackend==="hyperdrive"),hasImages:p.images,hasKv:W.kv,hasNotify:z,hasPayments:p.payments,hasR2sql:p.r2sql,hasQueue:C.some(m=>m.mode==="push"),hasScheduler:W.scheduler,hasStorage:W.storage,hasVectors:a.vectorIndexes.length>0,hasWorkflow:O.length>0,hasX402:p.x402,identity:U,jurisdiction:a.jurisdiction,useUmbrella:M,voiceAgents:c.filter(m=>m.voice===!0&&m.voiceBindingName!==void 0).map(m=>({bindingName:m.voiceBindingName,exportName:m.exportName})),wantsOpenApi:oe,wantsOpenRpc:ae}),Ue=wc(e.projectRoot),Be=tn({functions:L,httpRoutes:ye,version:Ue}),$e=nn({functions:L,version:Ue}),qe=`${JSON.stringify(Be,void 0,2)}
8
+ `,je=`${JSON.stringify($e,void 0,2)}
9
+ `,We=sn(Be),Ve=rn($e),ce=f(n,Pc),Kt=N(ce);if(e.dryRun||(N(g)||Bt(g,{recursive:!0}),b(f(g,"app.ts"),ze),b(Ae,d),b(f(g,"api.ts"),Te),b(Ne,k),b(f(g,"functions.ts"),Ce),b(f(g,"shard.ts"),Oe),b(f(g,"crons.ts"),Me),b(f(g,"vectors.ts"),Ke),b(f(g,"drizzle.global.ts"),V.global),b(f(g,"drizzle.shard.ts"),V.shard),w(f(g,"containers.ts"),Fe),w(f(g,"workflows.ts"),Le),w(f(g,"agents.ts"),De),w(f(g,"queues.ts"),ke),w(f(g,"seed.ts"),_e),w(f(g,"collections.ts"),Re),w(f(g,"openapi.json"),oe?qe:""),w(f(g,"openapi.ts"),oe?We:""),w(f(g,"openrpc.json"),ae?je:""),w(f(g,"openrpc.ts"),ae?Ve:""),(!Kt||e.updateSchemaBaseline===!0)&&b(ce,Wt(ie))),t){const m=ue.now(),_t=Math.round(m-s),zt=Math.round(we-s),Ut=Math.round(m-we);console.error(`@lunora/codegen: codegen took ${_t.toString()}ms (discovery ${zt.toString()}ms, emit ${Ut.toString()}ms)`)}return{advisories:Ie,advisorContext:j,agents:c,containers:u,cronTriggers:us(re),generated:{agents:De,api:Te,app:ze,collections:Re,containers:Fe,crons:Me,dataModel:d,drizzleGlobal:V.global,drizzleShard:V.shard,functions:Ce,openApi:qe,openApiModule:We,openRpc:je,openRpcModule:Ve,queues:ke,seed:_e,server:k,shard:Oe,vectors:Ke,workflows:Le},outputDirectory:g,platformDiagnostics:q.diagnostics,queues:C,schemaSnapshot:ie,schemaSnapshotPath:ce,workflows:O}};export{Pc as SCHEMA_SNAPSHOT_FILENAME,Rc as createCodegenProject,Cc as findTsconfig,Sl as refreshCodegenProject,Al as runCodegen};
@@ -0,0 +1,2 @@
1
+ const v=1;function b(e){const i={},s=Object.keys(e);s.sort();for(const o of s)i[o]=e[o];return i}const r=e=>`${JSON.stringify(e,void 0,2)}
2
+ `,g=e=>{const i=r(e),s=o=>{let t=o;for(let d=0;d<i.length;d+=1)t^=i.codePointAt(d)??0,t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")};return`${s(2166136261)}${s(16777619)}`},a=e=>typeof e=="object"&&e!==null,l=e=>a(e)&&a(e.fields)&&a(e.indexes)&&a(e.relations)&&typeof e.shardMode=="string",$=e=>{if(e===void 0||e.trim()==="")return{status:"absent"};let i;try{i=JSON.parse(e)}catch(o){return{error:`baseline is not valid JSON: ${o instanceof Error?o.message:String(o)}`,status:"invalid"}}if(!a(i)||i.version!==1||!a(i.tables))return{error:`baseline is malformed or written by an incompatible version (expected version ${String(1)})`,status:"invalid"};for(const[o,t]of Object.entries(i.tables))if(!l(t))return{error:`baseline table "${o}" has an invalid structure`,status:"invalid"};return{snapshot:{jurisdiction:typeof i.jurisdiction=="string"?i.jurisdiction:void 0,migrationIds:Array.isArray(i.migrationIds)?i.migrationIds:[],tables:i.tables,version:1},status:"ok"}},c=(e,i)=>e.unique===i.unique&&e.fields.length===i.fields.length&&e.fields.every((s,o)=>s===i.fields[o]),f=(e,i,s,o)=>{const t=[];return s.kind!==o.kind&&t.push({severity:"breaking",summary:`field ${e}.${i} changed type: ${s.kind} → ${o.kind} — add a data migration to convert existing values`,table:e,scope:"table",type:"changedFieldKind"}),s.optional&&!o.optional?t.push({severity:"breaking",summary:`field ${e}.${i} became required — rows missing it would be invalid; add a data migration to backfill it`,table:e,scope:"table",type:"fieldOptionalToRequired"}):!s.optional&&o.optional&&t.push({scope:"table",severity:"safe",summary:`field ${e}.${i} became optional`,table:e,type:"fieldRequiredToOptional"}),t},p=(e,i,s)=>s.optional?{scope:"table",severity:"safe",summary:`added optional field ${e}.${i}`,table:e,type:"addedOptionalField"}:{severity:"breaking",summary:`added required field ${e}.${i} — existing rows have no value; add a data migration to backfill it`,table:e,scope:"table",type:"addedRequiredField"},u=(e,i,s,o)=>{for(const[t,d]of Object.entries(s.fields)){const n=i.fields[t];n===void 0?o.push(p(e,t,d)):o.push(...f(e,t,n,d))}for(const t of Object.keys(i.fields))s.fields[t]===void 0&&o.push({severity:"breaking",summary:`removed field ${e}.${t} — add a data migration if stored data must be cleaned up`,table:e,scope:"table",type:"removedField"})},y=(e,i,s,o)=>{for(const[t,d]of Object.entries(s.indexes)){const n=i.indexes[t];if(n===void 0){o.push({scope:"table",severity:"safe",summary:`added index ${t} on ${e}`,table:e,type:"addedIndex"});continue}c(n,d)||o.push({severity:"breaking",summary:`index ${t} on ${e} changed shape — a query may have relied on the old index`,table:e,scope:"table",type:"changedIndex"})}for(const t of Object.keys(i.indexes))s.indexes[t]===void 0&&o.push({severity:"breaking",summary:`removed index ${t} on ${e} — a query that used \`.withIndex("${t}")\` would break`,table:e,scope:"table",type:"removedIndex"})},h=(e,i,s,o)=>{for(const t of Object.keys(s.relations))i.relations[t]===void 0&&o.push({scope:"schema",severity:"safe",summary:`added relation ${e}.${t}`,table:e,type:"addedRelation"});for(const t of Object.keys(i.relations))s.relations[t]===void 0&&o.push({scope:"schema",severity:"breaking",summary:`removed relation ${e}.${t}`,table:e,type:"removedRelation"})},m=(e,i,s,o)=>{i.shardMode!==s.shardMode&&o.push({severity:"breaking",summary:`table ${e} changed shard mode: ${i.shardMode} → ${s.shardMode} — its physical storage moves; add a data migration / re-shard plan`,table:e,scope:"table",type:"changedShardMode"}),u(e,i,s,o),y(e,i,s,o),h(e,i,s,o)},S=(e,i)=>{const s=[],o=e?.tables??{};for(const[t,d]of Object.entries(i.tables)){const n=o[t];if(n===void 0){s.push({scope:"table",severity:"safe",summary:`added table ${t}`,table:t,type:"addedTable"});continue}m(t,n,d,s)}for(const t of Object.keys(o))i.tables[t]===void 0&&s.push({scope:"table",severity:"breaking",summary:`removed table ${t} — add a data migration if its data must be archived/cleaned up`,table:t,type:"removedTable"});if(e!==void 0&&e.jurisdiction!==i.jurisdiction){const t=e.jurisdiction??"(none)",d=i.jurisdiction??"(none)";s.push({scope:"schema",severity:"breaking",summary:`Durable Object jurisdiction changed from ${t} to ${d} — this re-homes every DO and strands all existing shard, scheduler, and session-DO data in the old region (no in-place migration; export then import to move it). Revert the change, or override the gate to proceed intentionally.`,type:"changedJurisdiction"})}return{changes:s}};export{v as SCHEMA_SNAPSHOT_VERSION,S as diffSchemaSnapshots,g as hashSchemaSnapshot,l as isValidTableSnapshot,$ as parseSnapshotJson,r as serializeSchemaSnapshot,b as sortKeys};