kitcn 0.25.4 → 0.25.5

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.
@@ -1,5 +1,5 @@
1
1
  import { Bn as ConvexTextBuilderInitial, Xt as ConvexTableWithColumns } from "../capabilities-DtDfpdcH.js";
2
- import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-CCMtAIdx.js";
2
+ import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-DlRUDuMx.js";
3
3
  import * as convex_values0 from "convex/values";
4
4
  import { GenericId, Infer, Value } from "convex/values";
5
5
  import { DocumentByName, GenericDataModel, GenericDatabaseReader, GenericDatabaseWriter, TableNamesInDataModel } from "convex/server";
@@ -1,2 +1,2 @@
1
- import { S as defineAuth, _ as GenericAuthBeforeResult, b as GenericAuthTriggerHandlers, g as BetterAuthOptionsWithoutDatabase, i as getGeneratedAuthDisabledReason, n as GeneratedAuthDisabledReasonKind, r as createDisabledAuthRuntime, t as AuthRuntime, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../../generated-contract-disabled-DwYwySy3.js";
1
+ import { S as defineAuth, _ as GenericAuthBeforeResult, b as GenericAuthTriggerHandlers, g as BetterAuthOptionsWithoutDatabase, i as getGeneratedAuthDisabledReason, n as GeneratedAuthDisabledReasonKind, r as createDisabledAuthRuntime, t as AuthRuntime, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../../generated-contract-disabled-B3ByVG3_.js";
2
2
  export { type AuthRuntime, BetterAuthOptionsWithoutDatabase, type GeneratedAuthDisabledReasonKind, GenericAuthBeforeResult, GenericAuthDefinition, GenericAuthTriggerChange, GenericAuthTriggerHandlers, GenericAuthTriggers, createDisabledAuthRuntime, defineAuth, getGeneratedAuthDisabledReason };
@@ -1,7 +1,7 @@
1
1
  import { a as QueryCtxWithPreferredOrmQueryTable, n as LookupByIdResultByCtx, t as DocByCtx } from "../query-context-DJONf8X5.js";
2
2
  import { t as GetAuth } from "../types-Bf3XQex5.js";
3
3
  import { t as GenericCtx } from "../context-utils-DwZ3Cam1.js";
4
- import { S as defineAuth, _ as GenericAuthBeforeResult, a as AuthFunctions, b as GenericAuthTriggerHandlers, c as createApi, d as deleteOneHandler, f as findManyHandler, g as BetterAuthOptionsWithoutDatabase, h as updateOneHandler, i as getGeneratedAuthDisabledReason, l as createHandler, m as updateManyHandler, n as GeneratedAuthDisabledReasonKind, o as Triggers, p as findOneHandler, r as createDisabledAuthRuntime, s as createClient, t as AuthRuntime, u as deleteManyHandler, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../generated-contract-disabled-DwYwySy3.js";
4
+ import { S as defineAuth, _ as GenericAuthBeforeResult, a as AuthFunctions, b as GenericAuthTriggerHandlers, c as createApi, d as deleteOneHandler, f as findManyHandler, g as BetterAuthOptionsWithoutDatabase, h as updateOneHandler, i as getGeneratedAuthDisabledReason, l as createHandler, m as updateManyHandler, n as GeneratedAuthDisabledReasonKind, o as Triggers, p as findOneHandler, r as createDisabledAuthRuntime, s as createClient, t as AuthRuntime, u as deleteManyHandler, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../generated-contract-disabled-B3ByVG3_.js";
5
5
  import * as convex_values0 from "convex/values";
6
6
  import { Infer } from "convex/values";
7
7
  import { AuthConfig, DocumentByName, GenericDataModel, GenericMutationCtx, GenericQueryCtx, GenericSchema, PaginationOptions, PaginationResult, SchemaDefinition, TableNamesInDataModel } from "convex/server";
@@ -123,7 +123,6 @@ declare const adapterWhereValidator: convex_values0.VObject<{
123
123
  value: convex_values0.VUnion<string | number | boolean | string[] | number[] | null, [convex_values0.VString<string, "required">, convex_values0.VFloat64<number, "required">, convex_values0.VBoolean<boolean, "required">, convex_values0.VArray<string[], convex_values0.VString<string, "required">, "required">, convex_values0.VArray<number[], convex_values0.VFloat64<number, "required">, "required">, convex_values0.VNull<null, "required">], "required", never>;
124
124
  }, "required", "mode" | "value" | "connector" | "field" | "operator">;
125
125
  declare const adapterArgsValidator: convex_values0.VObject<{
126
- limit?: number | undefined;
127
126
  select?: string[] | undefined;
128
127
  where?: {
129
128
  mode?: "sensitive" | "insensitive" | undefined;
@@ -132,6 +131,7 @@ declare const adapterArgsValidator: convex_values0.VObject<{
132
131
  value: string | number | boolean | string[] | number[] | null;
133
132
  field: string;
134
133
  }[] | undefined;
134
+ limit?: number | undefined;
135
135
  offset?: number | undefined;
136
136
  sortBy?: {
137
137
  direction: "asc" | "desc";
@@ -169,7 +169,7 @@ declare const adapterArgsValidator: convex_values0.VObject<{
169
169
  operator: convex_values0.VUnion<"lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined, [convex_values0.VLiteral<"lt", "required">, convex_values0.VLiteral<"lte", "required">, convex_values0.VLiteral<"gt", "required">, convex_values0.VLiteral<"gte", "required">, convex_values0.VLiteral<"eq", "required">, convex_values0.VLiteral<"in", "required">, convex_values0.VLiteral<"not_in", "required">, convex_values0.VLiteral<"ne", "required">, convex_values0.VLiteral<"contains", "required">, convex_values0.VLiteral<"starts_with", "required">, convex_values0.VLiteral<"ends_with", "required">], "optional", never>;
170
170
  value: convex_values0.VUnion<string | number | boolean | string[] | number[] | null, [convex_values0.VString<string, "required">, convex_values0.VFloat64<number, "required">, convex_values0.VBoolean<boolean, "required">, convex_values0.VArray<string[], convex_values0.VString<string, "required">, "required">, convex_values0.VArray<number[], convex_values0.VFloat64<number, "required">, "required">, convex_values0.VNull<null, "required">], "required", never>;
171
171
  }, "required", "mode" | "value" | "connector" | "field" | "operator">, "optional">;
172
- }, "required", "limit" | "model" | "select" | "where" | "offset" | "sortBy" | "sortBy.direction" | "sortBy.field">;
172
+ }, "required", "model" | "select" | "where" | "limit" | "offset" | "sortBy" | "sortBy.direction" | "sortBy.field">;
173
173
  declare const hasUniqueFields: (betterAuthSchema: BetterAuthDBSchema, model: string, input: Record<string, any>) => boolean;
174
174
  declare const checkUniqueFields: <Schema extends SchemaDefinition<any, any>>(ctx: GenericQueryCtx<GenericDataModel>, schema: Schema, betterAuthSchema: BetterAuthDBSchema, table: string, input: Record<string, any>, doc?: Record<string, any>) => Promise<void>;
175
175
  declare const selectFields: <T extends TableNamesInDataModel<GenericDataModel>, D extends DocumentByName<GenericDataModel, T>>(doc: D | null, select?: string[]) => D | null;
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { C as Columns, D as TableName, E as RlsPolicies, O as createSystemFields, S as getRankIndexes, T as OrmSchemaExtensions, _ as loadEsbuild, a as generateMeta, b as getAggregateIndexes, c as resolveSchemaDefaultExport, f as createProjectJiti, g as loadDotenv, h as loadClackPrompts, i as resolveConfiguredBackend, l as schemaDeclaresAggregateIndexes, m as loadBabelParser, n as withLocalCodegenEnv, o as getConvexConfig, p as CRPC_BUILDER_STUB_SOURCE, r as loadCliConfig, s as collectSchemaTables, t as getLocalBackendEnvVars, u as logger, v as highlighter, w as EnableRLS, x as getIndexes, y as isColorEnabled } from "./local-env-Dkh4a_BK.mjs";
2
+ import { C as Columns, D as TableName, E as RlsPolicies, O as createSystemFields, S as getRankIndexes, T as OrmSchemaExtensions, _ as loadEsbuild, a as generateMeta, b as getAggregateIndexes, c as resolveSchemaDefaultExport, f as createProjectJiti, g as loadDotenv, h as loadClackPrompts, i as resolveConfiguredBackend, l as schemaDeclaresAggregateIndexes, m as loadBabelParser, n as withLocalCodegenEnv, o as getConvexConfig, p as CRPC_BUILDER_STUB_SOURCE, r as loadCliConfig, s as collectSchemaTables, t as getLocalBackendEnvVars, u as logger, v as highlighter, w as EnableRLS, x as getIndexes, y as isColorEnabled } from "./local-env-CiPqNKS_.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import fs, { existsSync, readFileSync } from "node:fs";
5
5
  import path, { basename, delimiter, dirname, extname, isAbsolute, join, posix, relative, resolve } from "node:path";
@@ -224,7 +224,6 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
224
224
  };
225
225
  }, Promise<Record<string, unknown> | undefined>>;
226
226
  findMany: convex_server0.RegisteredQuery<"internal", {
227
- limit?: number | undefined;
228
227
  join?: any;
229
228
  where?: {
230
229
  mode?: "sensitive" | "insensitive" | undefined;
@@ -233,6 +232,7 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
233
232
  value: string | number | boolean | string[] | number[] | null;
234
233
  field: string;
235
234
  }[] | undefined;
235
+ limit?: number | undefined;
236
236
  offset?: number | undefined;
237
237
  sortBy?: {
238
238
  direction: "asc" | "desc";
@@ -270,16 +270,16 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
270
270
  value: string | number | boolean | string[] | number[] | null;
271
271
  field: string;
272
272
  }[] | undefined;
273
- model: string;
274
273
  update: {
275
274
  [x: string]: unknown;
276
275
  [x: number]: unknown;
277
276
  [x: symbol]: unknown;
278
277
  };
278
+ model: string;
279
279
  } | {
280
280
  where?: any[] | undefined;
281
- model: string;
282
281
  update: any;
282
+ model: string;
283
283
  };
284
284
  paginationOpts: {
285
285
  id?: number;
@@ -305,16 +305,16 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
305
305
  value: string | number | boolean | string[] | number[] | null;
306
306
  field: string;
307
307
  }[] | undefined;
308
- model: string;
309
308
  update: {
310
309
  [x: string]: unknown;
311
310
  [x: number]: unknown;
312
311
  [x: symbol]: unknown;
313
312
  };
313
+ model: string;
314
314
  } | {
315
315
  where?: any[] | undefined;
316
- model: string;
317
316
  update: any;
317
+ model: string;
318
318
  };
319
319
  }, Promise<any>>;
320
320
  };
@@ -473,8 +473,23 @@ export class CRPCError extends Error {
473
473
  }
474
474
  }
475
475
 
476
- export const createEnv = ({ schema }) => () =>
477
- typeof schema?.parse === "function" ? schema.parse(process.env) : process.env;
476
+ export const createEnv = ({ schema }) => () => {
477
+ if (typeof schema?.parse !== "function") return process.env;
478
+ if (globalThis.__KITCN_CODEGEN__ !== true || !schema.shape) {
479
+ return schema.parse(process.env);
480
+ }
481
+ const fallback = Object.fromEntries(
482
+ Object.entries(schema.shape).map(([key, zodType]) => {
483
+ const result = zodType?.safeParse?.(undefined);
484
+ if (result?.success) return [key, result.data];
485
+ if (Array.isArray(zodType?.options) && zodType.options.length > 0) {
486
+ return [key, zodType.options[0]];
487
+ }
488
+ return [key, ""];
489
+ })
490
+ );
491
+ return schema.parse({ ...fallback, ...process.env });
492
+ };
478
493
  export const createHttpRouter = (_app, httpRouter) => httpRouter ?? {};
479
494
  export const createCallerFactory = () => () => ({});
480
495
  export const createApiLeaf = (fnOrRoot, pathOrMeta, maybeMeta) => {
@@ -2587,6 +2602,9 @@ const TS_EXTENSION_RE = /\.ts$/;
2587
2602
  /** Pattern to detect default exports in auth contract files. */
2588
2603
  const DEFAULT_EXPORT_RE = /\bexport\s+default\b/;
2589
2604
  const MISSING_KITCN_IMPORT_RE = /Cannot find (?:module|package) ['"]kitcn(?:\/[^'"]+)?['"]/;
2605
+ const LEGACY_PROCEDURE_LOOKUP_START_RE = /\bregisterProcedureNameLookup\s*\(\s*(\{)/;
2606
+ const LEGACY_PROCEDURE_FILE_RE = /("(?:\\.|[^"\\])*")\s*:\s*\[([\s\S]*?)\]\s*,?/g;
2607
+ const LEGACY_PROCEDURE_ENTRY_RE = /\{\s*column:\s*(\d+)\s*,\s*line:\s*(\d+)\s*,\s*name:\s*("(?:\\.|[^"\\])*")\s*\}/g;
2590
2608
  const RUNTIME_CALLER_RESERVED_EXPORTS = new Set(["actions", "schedule"]);
2591
2609
  const DEFAULT_TRIM_SEGMENTS = ["plugins", "generated"];
2592
2610
  const CODEGEN_SCOPES$1 = new Set([
@@ -2784,6 +2802,59 @@ function emitProcedureNameLookupLiteral(lookup) {
2784
2802
  return ` ${JSON.stringify(file)}: [${items}],`;
2785
2803
  }).join("\n")}\n}`;
2786
2804
  }
2805
+ function extractObjectLiteral(source, startIndex) {
2806
+ let depth = 0;
2807
+ let quote = null;
2808
+ let escaped = false;
2809
+ for (let index = startIndex; index < source.length; index += 1) {
2810
+ const character = source[index];
2811
+ if (quote) {
2812
+ if (escaped) escaped = false;
2813
+ else if (character === "\\") escaped = true;
2814
+ else if (character === quote) quote = null;
2815
+ continue;
2816
+ }
2817
+ if (character === "\"" || character === "'") quote = character;
2818
+ else if (character === "{") depth += 1;
2819
+ else if (character === "}") {
2820
+ depth -= 1;
2821
+ if (depth === 0) return source.slice(startIndex, index + 1);
2822
+ }
2823
+ }
2824
+ return null;
2825
+ }
2826
+ function readLegacyProcedureNameLookup(serverOutputFile) {
2827
+ if (!fs.existsSync(serverOutputFile)) return;
2828
+ const source = fs.readFileSync(serverOutputFile, "utf8");
2829
+ const startMatch = LEGACY_PROCEDURE_LOOKUP_START_RE.exec(source);
2830
+ if (!startMatch || startMatch.index === void 0) return;
2831
+ const literal = extractObjectLiteral(source, startMatch.index + startMatch[0].lastIndexOf("{"));
2832
+ if (!literal) return;
2833
+ if (literal.trim() === "{}") return {};
2834
+ const lookup = {};
2835
+ for (const fileMatch of literal.matchAll(LEGACY_PROCEDURE_FILE_RE)) {
2836
+ const fileLiteral = fileMatch[1];
2837
+ const entriesLiteral = fileMatch[2];
2838
+ if (!fileLiteral || entriesLiteral === void 0) return;
2839
+ const file = JSON.parse(fileLiteral);
2840
+ if (typeof file !== "string") return;
2841
+ const entries = [];
2842
+ for (const entryMatch of entriesLiteral.matchAll(LEGACY_PROCEDURE_ENTRY_RE)) {
2843
+ const nameLiteral = entryMatch[3];
2844
+ if (!nameLiteral) return;
2845
+ const name = JSON.parse(nameLiteral);
2846
+ if (typeof name !== "string") return;
2847
+ entries.push({
2848
+ column: Number(entryMatch[1]),
2849
+ line: Number(entryMatch[2]),
2850
+ name
2851
+ });
2852
+ }
2853
+ if (entries.length === 0) return;
2854
+ lookup[file] = entries;
2855
+ }
2856
+ return Object.keys(lookup).length > 0 ? lookup : void 0;
2857
+ }
2787
2858
  function formatKey(key) {
2788
2859
  return VALID_IDENTIFIER_RE.test(key) ? key : `'${key}'`;
2789
2860
  }
@@ -2877,6 +2948,20 @@ function getModuleImportPath(outputFile, functionsDir, moduleName) {
2877
2948
  const moduleFile = path.join(functionsDir, moduleName);
2878
2949
  return ensureRelativeImportPath(normalizeImportPath(path.relative(path.dirname(outputFile), moduleFile)));
2879
2950
  }
2951
+ /**
2952
+ * Convex's own generated server module. `convex codegen` writes it, and kitcn
2953
+ * codegen runs before it on a first bootstrap, so it can legitimately be
2954
+ * missing.
2955
+ */
2956
+ function getConvexGeneratedServerFile(functionsDir) {
2957
+ const base = path.join(functionsDir, "_generated", "server");
2958
+ return [
2959
+ ".js",
2960
+ ".ts",
2961
+ ".mjs",
2962
+ ".cjs"
2963
+ ].map((extension) => `${base}${extension}`).find((candidate) => fs.existsSync(candidate));
2964
+ }
2880
2965
  function getRuntimeApiImportPath(outputFile, functionsDir) {
2881
2966
  const runtimeApiFile = path.join(functionsDir, "_generated", "api.js");
2882
2967
  return ensureRelativeImportPath(normalizeImportPath(path.relative(path.dirname(outputFile), runtimeApiFile)));
@@ -2931,6 +3016,17 @@ function getGeneratedAuthOutputFile(functionsDir) {
2931
3016
  function getGeneratedMigrationsHelperOutputFile(functionsDir) {
2932
3017
  return path.join(functionsDir, GENERATED_DIR, "migrations.gen.ts");
2933
3018
  }
3019
+ /**
3020
+ * The only parse-derived input to `generated/server.ts`, split into its own
3021
+ * module so `server.ts` stays fully determined by pre-parse facts and can be
3022
+ * written before codegen evaluates the modules that import it.
3023
+ *
3024
+ * Two dots in the basename keep Convex's entry-point walker from deploying it
3025
+ * as a function module, matching `migrations.gen.ts`.
3026
+ */
3027
+ function getGeneratedProcedureNamesOutputFile(functionsDir) {
3028
+ return path.join(functionsDir, GENERATED_DIR, "procedure-names.gen.ts");
3029
+ }
2934
3030
  function getLegacyGeneratedOutputFile(functionsDir) {
2935
3031
  return path.join(functionsDir, "generated.ts");
2936
3032
  }
@@ -2992,6 +3088,19 @@ export const getAuth = () => ({} as Record<string, unknown>);
2992
3088
  export const auth = {} as Record<string, unknown>;
2993
3089
  `;
2994
3090
  }
3091
+ /**
3092
+ * Pure data, zero imports: nothing here can throw while codegen evaluates the
3093
+ * project, and the value export survives tree-shaking even when the app sets
3094
+ * `"sideEffects": false` (a bare side-effect import would not).
3095
+ */
3096
+ function emitGeneratedProcedureNamesFile(procedureNameLookup) {
3097
+ return `// biome-ignore-all format: generated
3098
+ // This file is auto-generated by kitcn
3099
+ // Do not edit manually. Run \`kitcn codegen\` to regenerate.
3100
+
3101
+ export const procedureNames = ${emitProcedureNameLookupLiteral(procedureNameLookup)};
3102
+ `;
3103
+ }
2995
3104
  function emitGeneratedMigrationsPlaceholderFile() {
2996
3105
  return `// biome-ignore-all format: generated
2997
3106
  /* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-unused-vars */
@@ -3010,16 +3119,25 @@ function writeFileIfChanged(filePath, content) {
3010
3119
  }
3011
3120
  function ensureGeneratedSupportPlaceholders(functionsDir, options) {
3012
3121
  const createdPlaceholderFiles = [];
3122
+ const replacedFiles = [];
3013
3123
  const serverOutputFile = getGeneratedServerOutputFile(functionsDir);
3014
3124
  const authOutputFile = getGeneratedAuthOutputFile(functionsDir);
3015
3125
  const migrationsHelperOutputFile = getGeneratedMigrationsHelperOutputFile(functionsDir);
3126
+ const procedureNamesOutputFile = getGeneratedProcedureNamesOutputFile(functionsDir);
3016
3127
  const generatedDir = path.dirname(serverOutputFile);
3017
3128
  fs.mkdirSync(generatedDir, { recursive: true });
3018
3129
  const includeAuth = options?.includeAuth ?? true;
3019
3130
  if (!fs.existsSync(serverOutputFile)) {
3020
3131
  writeFileIfChanged(serverOutputFile, emitGeneratedServerPlaceholderFile(functionsDir));
3021
3132
  createdPlaceholderFiles.push(serverOutputFile);
3133
+ } else if (options?.replaceServer) {
3134
+ const content = fs.readFileSync(serverOutputFile, "utf8");
3135
+ if (writeFileIfChanged(serverOutputFile, emitGeneratedServerPlaceholderFile(functionsDir))) replacedFiles.push({
3136
+ content,
3137
+ filePath: serverOutputFile
3138
+ });
3022
3139
  }
3140
+ if (!fs.existsSync(procedureNamesOutputFile)) writeFileIfChanged(procedureNamesOutputFile, emitGeneratedProcedureNamesFile(options?.procedureNameLookup ?? {}));
3023
3141
  if (includeAuth && !fs.existsSync(authOutputFile)) {
3024
3142
  writeFileIfChanged(authOutputFile, emitGeneratedAuthPlaceholderFile());
3025
3143
  createdPlaceholderFiles.push(authOutputFile);
@@ -3028,7 +3146,22 @@ function ensureGeneratedSupportPlaceholders(functionsDir, options) {
3028
3146
  writeFileIfChanged(migrationsHelperOutputFile, emitGeneratedMigrationsPlaceholderFile());
3029
3147
  createdPlaceholderFiles.push(migrationsHelperOutputFile);
3030
3148
  }
3031
- return createdPlaceholderFiles;
3149
+ return {
3150
+ createdFiles: createdPlaceholderFiles,
3151
+ replacedFiles
3152
+ };
3153
+ }
3154
+ async function withCodegenParseSentinel(callback) {
3155
+ const globals = globalThis;
3156
+ const hadSentinel = Object.hasOwn(globals, "__KITCN_CODEGEN__");
3157
+ const previousSentinel = globals.__KITCN_CODEGEN__;
3158
+ globals.__KITCN_CODEGEN__ = true;
3159
+ try {
3160
+ return await callback();
3161
+ } finally {
3162
+ if (hadSentinel) globals.__KITCN_CODEGEN__ = previousSentinel;
3163
+ else delete globals.__KITCN_CODEGEN__;
3164
+ }
3032
3165
  }
3033
3166
  function emitGeneratedRuntimePlaceholderFile(exportNames) {
3034
3167
  const { callerExportName, handlerExportName } = exportNames;
@@ -3086,8 +3219,7 @@ async function resolveSchemaMetadataForCodegen(functionsDir, debug, createJitiIn
3086
3219
  hasTriggers
3087
3220
  };
3088
3221
  } catch (error) {
3089
- if (debug) logger.warn(`⚠️ Failed to load schema extensions from ${schemaPath}: ${error.message}`);
3090
- return EMPTY_SCHEMA_METADATA;
3222
+ throw new Error(`kitcn codegen could not load ${schemaPath}: ${error.message}`, { cause: error });
3091
3223
  }
3092
3224
  }
3093
3225
  /**
@@ -3108,7 +3240,13 @@ function cleanupGeneratedPluginArtifacts(functionsDir) {
3108
3240
  force: true
3109
3241
  });
3110
3242
  }
3111
- function emitGeneratedServerFile(outputFile, functionsDir, hasOrmSchema, hasAggregateIndexes, hasMigrationsManifest, procedureNameLookup) {
3243
+ /**
3244
+ * Every input here is known before codegen evaluates any project module, so
3245
+ * this file is written first and is authoritative: a stale copy on disk is
3246
+ * replaced before anything can import it. The parse-derived procedure-name
3247
+ * lookup lives in `procedure-names.gen.ts` to keep that true.
3248
+ */
3249
+ function emitGeneratedServerFile(outputFile, functionsDir, hasOrmSchema, hasAggregateIndexes, hasMigrationsManifest) {
3112
3250
  const asSingleQuotedImport = (importPath) => `'${importPath.replaceAll("'", "\\'")}'`;
3113
3251
  const serverTypesImportPath = getServerTypesImportPath(outputFile, functionsDir);
3114
3252
  const dataModelImportPath = getDataModelImportPath(outputFile, functionsDir);
@@ -3124,7 +3262,7 @@ function emitGeneratedServerFile(outputFile, functionsDir, hasOrmSchema, hasAggr
3124
3262
  const capabilityEntries = [...hasAggregateIndexes ? ["aggregateCapability()"] : [], ...hasMigrationsManifest ? ["migrationCapability()"] : []];
3125
3263
  const capabilitiesConfigLine = capabilityEntries.length > 0 ? ` capabilities: [${capabilityEntries.join(", ")}],\n` : "";
3126
3264
  const functionsDirHint = normalizeImportPath(path.relative(process.cwd(), functionsDir)) || "convex";
3127
- const procedureNameLookupLiteral = emitProcedureNameLookupLiteral(procedureNameLookup);
3265
+ const procedureNamesImportLiteral = asSingleQuotedImport(ensureRelativeImportPath(normalizeImportPath(path.relative(path.dirname(outputFile), getGeneratedProcedureNamesOutputFile(functionsDir))).replace(TS_EXTENSION_RE, "")));
3128
3266
  if (!hasOrmSchema) return `// biome-ignore-all format: generated
3129
3267
  // This file is auto-generated by kitcn
3130
3268
  // Do not edit manually. Run \`kitcn codegen\` to regenerate.
@@ -3140,6 +3278,7 @@ import type {
3140
3278
  QueryCtx as ServerQueryCtx,
3141
3279
  } from ${serverTypesImportLiteral};
3142
3280
  import { httpAction, internalMutation } from ${serverTypesImportLiteral};
3281
+ import { procedureNames } from ${procedureNamesImportLiteral};
3143
3282
 
3144
3283
  export type QueryCtx = ServerQueryCtx;
3145
3284
  export type MutationCtx = ServerMutationCtx;
@@ -3147,10 +3286,7 @@ export type ActionCtx = ServerActionCtx;
3147
3286
  export type GenericCtx = QueryCtx | MutationCtx | ActionCtx;
3148
3287
  export type OrmCtx<Ctx = QueryCtx> = Ctx;
3149
3288
 
3150
- registerProcedureNameLookup(
3151
- ${procedureNameLookupLiteral},
3152
- ${JSON.stringify(functionsDirHint)}
3153
- );
3289
+ registerProcedureNameLookup(procedureNames, ${JSON.stringify(functionsDirHint)});
3154
3290
 
3155
3291
  export function withOrm<Ctx extends ServerQueryCtx | ServerMutationCtx>(ctx: Ctx): OrmCtx<Ctx> {
3156
3292
  return ctx as OrmCtx<Ctx>;
@@ -3187,6 +3323,7 @@ import type {
3187
3323
  } from ${serverTypesImportLiteral};
3188
3324
  import { httpAction, internalMutation } from ${serverTypesImportLiteral};
3189
3325
  import schema from ${schemaImportLiteral};
3326
+ import { procedureNames } from ${procedureNamesImportLiteral};
3190
3327
  ${migrationsImportLine}
3191
3328
 
3192
3329
  ${`const ormFunctions: OrmFunctions = {
@@ -3198,10 +3335,7 @@ ${`const ormFunctions: OrmFunctions = {
3198
3335
  };`}
3199
3336
  const ormSchema = schema;
3200
3337
 
3201
- registerProcedureNameLookup(
3202
- ${procedureNameLookupLiteral},
3203
- ${JSON.stringify(functionsDirHint)}
3204
- );
3338
+ registerProcedureNameLookup(procedureNames, ${JSON.stringify(functionsDirHint)});
3205
3339
 
3206
3340
  export const orm = createOrm({
3207
3341
  schema: ormSchema,
@@ -3745,6 +3879,7 @@ async function generateMeta(sharedDir, options) {
3745
3879
  const crpcOutputFile = getGeneratedCrpcOutputFile(functionsDir);
3746
3880
  const authOutputFile = getGeneratedAuthOutputFile(functionsDir);
3747
3881
  const migrationsHelperOutputFile = getGeneratedMigrationsHelperOutputFile(functionsDir);
3882
+ const procedureNamesOutputFile = getGeneratedProcedureNamesOutputFile(functionsDir);
3748
3883
  const legacyGeneratedMigrationsOutputFile = path.join(functionsDir, GENERATED_DIR, "migrations.ts");
3749
3884
  const legacyGeneratedMigrationsRuntimeOutputFile = path.join(functionsDir, GENERATED_DIR, "migrations.runtime.ts");
3750
3885
  const legacyGeneratedMigrationsUnderscoreOutputFile = path.join(functionsDir, GENERATED_DIR, "_migrations.ts");
@@ -3761,7 +3896,10 @@ async function generateMeta(sharedDir, options) {
3761
3896
  const procedureNameLookup = {};
3762
3897
  const fatalParseFailures = [];
3763
3898
  let createdRuntimePlaceholders = [];
3764
- let createdSupportPlaceholders = [];
3899
+ let supportPlaceholderState = {
3900
+ createdFiles: [],
3901
+ replacedFiles: []
3902
+ };
3765
3903
  const runtimeFilesPreservedFromParseFailures = /* @__PURE__ */ new Set();
3766
3904
  let totalFunctions = 0;
3767
3905
  const authFilePath = path.join(functionsDir, "auth.ts");
@@ -3773,7 +3911,7 @@ async function generateMeta(sharedDir, options) {
3773
3911
  };
3774
3912
  let sharedJitiInstance;
3775
3913
  const getSharedJitiInstance = () => sharedJitiInstance ??= createProjectJiti();
3776
- const schemaMetadata = await resolveSchemaMetadataForCodegen(functionsDir, debug, getSharedJitiInstance);
3914
+ const schemaMetadata = await withCodegenParseSentinel(() => resolveSchemaMetadataForCodegen(functionsDir, debug, getSharedJitiInstance));
3777
3915
  const hasOrmSchemaMetadata = schemaMetadata.hasOrmSchema;
3778
3916
  const hasRelationsMetadata = schemaMetadata.hasRelations;
3779
3917
  const hasRelationsExport = hasNamedExport(path.join(functionsDir, "schema.ts"), "relations");
@@ -3783,7 +3921,14 @@ async function generateMeta(sharedDir, options) {
3783
3921
  if (hasRelationsExport) throw new Error("Codegen error: do not export `relations` from schema.ts. Chain relations on the default schema export with `defineSchema(...).relations(...)`.");
3784
3922
  if (hasSchemaTriggersExport || hasDedicatedTriggersExport) throw new Error("Codegen error: do not export `triggers` from schema.ts or triggers.ts. Chain triggers on the default schema export with `defineSchema(...).relations(...).triggers(...)`.");
3785
3923
  const hasOrmSchema = hasOrmSchemaMetadata;
3786
- createdSupportPlaceholders = ensureGeneratedSupportPlaceholders(functionsDir, { includeAuth: generateAuth });
3924
+ const convexGeneratedServerFile = getConvexGeneratedServerFile(functionsDir);
3925
+ supportPlaceholderState = ensureGeneratedSupportPlaceholders(functionsDir, {
3926
+ includeAuth: generateAuth,
3927
+ procedureNameLookup: fs.existsSync(procedureNamesOutputFile) ? void 0 : readLegacyProcedureNameLookup(serverOutputFile),
3928
+ replaceServer: convexGeneratedServerFile === void 0
3929
+ });
3930
+ const emitServerFile = () => writeFileIfChanged(serverOutputFile, emitGeneratedServerFile(serverOutputFile, functionsDir, hasOrmSchema, schemaMetadata.hasAggregateIndexes, hasMigrationsManifest));
3931
+ if (convexGeneratedServerFile) emitServerFile();
3787
3932
  if (generateApi) {
3788
3933
  globalThis.__KITCN_CODEGEN__ = true;
3789
3934
  try {
@@ -3844,7 +3989,8 @@ async function generateMeta(sharedDir, options) {
3844
3989
  }
3845
3990
  if (fatalParseFailures.length > 0) {
3846
3991
  for (const createdRuntimePlaceholder of createdRuntimePlaceholders) fs.rmSync(createdRuntimePlaceholder, { force: true });
3847
- for (const createdSupportPlaceholder of createdSupportPlaceholders) fs.rmSync(createdSupportPlaceholder, { force: true });
3992
+ for (const createdSupportPlaceholder of supportPlaceholderState.createdFiles) fs.rmSync(createdSupportPlaceholder, { force: true });
3993
+ for (const replacedSupportFile of supportPlaceholderState.replacedFiles) fs.writeFileSync(replacedSupportFile.filePath, replacedSupportFile.content, "utf8");
3848
3994
  const failureSummary = fatalParseFailures.map(({ file, error }) => `- ${file}: ${error instanceof Error ? error.message : String(error)}`).join("\n");
3849
3995
  throw new Error(`kitcn codegen aborted because module parsing failed:\n${failureSummary}`);
3850
3996
  }
@@ -3906,10 +4052,10 @@ ${optionalTypeExports}
3906
4052
  if (!fs.existsSync(outputDirname)) fs.mkdirSync(outputDirname, { recursive: true });
3907
4053
  writeFileIfChanged(outputFile, output);
3908
4054
  } else fs.rmSync(outputFile, { force: true });
3909
- const serverOutput = emitGeneratedServerFile(serverOutputFile, functionsDir, hasOrmSchema, schemaMetadata.hasAggregateIndexes, hasMigrationsManifest, procedureNameLookup);
3910
4055
  const generatedOutputDirname = path.dirname(serverOutputFile);
3911
4056
  if (!fs.existsSync(generatedOutputDirname)) fs.mkdirSync(generatedOutputDirname, { recursive: true });
3912
- writeFileIfChanged(serverOutputFile, serverOutput);
4057
+ emitServerFile();
4058
+ if (generateApi) writeFileIfChanged(procedureNamesOutputFile, emitGeneratedProcedureNamesFile(procedureNameLookup));
3913
4059
  if (hasOrmSchema) writeFileIfChanged(aggregateOutputFile, emitGeneratedAggregateFile(aggregateOutputFile, functionsDir));
3914
4060
  else fs.rmSync(aggregateOutputFile, { force: true });
3915
4061
  fs.rmSync(ormOutputFile, { force: true });
@@ -1,5 +1,5 @@
1
1
  import { $n as BinaryExpression, $t as OrmLifecycleOperation, A as DatabaseWithMutations, An as ConvexCheckConfig, Ar as AnyColumn, At as VectorQueryConfig, B as RlsContext, Bn as ConvexTextBuilderInitial, Br as IsUnique, Bt as RelationsBuilderColumnConfig, C as MigrationTableName, Cn as aggregateIndex, Cr as notBetween, Ct as OrderDirection, D as defineMigrationSet, Dn as uniqueIndex, Dt as ReturningResult, E as defineMigration, En as searchIndex, Er as startsWith, Et as ReturningAll, Fn as ConvexUniqueConstraintConfig, Fr as ColumnBuilderWithTableName, Ft as ExtractTablesWithRelations, Gt as defineRelations, H as EdgeMetadata, In as check, Ir as ColumnDataType, It as ManyConfig, Jt as ConvexDeletionConfig, Kt as defineRelationsPart, Ln as foreignKey, Lr as DrizzleEntity, Lt as OneConfig, M as OrmReader$1, Mn as ConvexForeignKeyConfig, Mr as ColumnBuilderBaseConfig, Mt as unsetToken, N as OrmWriter$1, Nn as ConvexUniqueConstraintBuilder, Nr as ColumnBuilderRuntimeConfig, O as detectMigrationDrift, On as vectorIndex, Or as SystemFields, Ot as ReturningSelection, Pn as ConvexUniqueConstraintBuilderOn, Pr as ColumnBuilderTypeConfig, Pt as ExtractTablesFromSchema, Qn as TableName, Qt as OrmLifecycleChange, Rn as unique, Rr as HasDefault, Rt as RelationsBuilder, S as MigrationStep, Sn as ConvexVectorIndexConfig, Sr as not, St as OrderByClause, T as buildMigrationPlan, Tn as rankIndex, Tr as or, Tt as PredicateWhereIndexConfig, U as extractRelationsConfig, Un as Brand, Ut as TableRelationalConfig, V as RlsMode, Vn as text, Vr as NotNull, Wn as Columns, Wt as TablesRelationalConfig, Xn as OrmSchemaRelations, Xt as ConvexTableWithColumns, Yn as OrmSchemaExtensions, Yt as ConvexTable, Zn as OrmSchemaTriggers, Zt as DiscriminatorBuilderConfig, _ as MigrationMigrateOne, _n as ConvexSearchIndexBuilder, _r as isNull, _t as MutationPaginateConfig, an as RlsPolicyConfig, ar as and, at as CountConfig, b as MigrationSet, bn as ConvexVectorIndexBuilder, br as lte, bt as MutationReturning, cn as RlsRole, cr as endsWith, ct as FilterOperators, d as MigrationDefinition, dn as ConvexAggregateIndexBuilder, dr as gt, dt as InferModelFromColumns, en as TableConfig, er as ExpressionVisitor, et as AggregateConfig, f as MigrationDirection, fn as ConvexAggregateIndexBuilderOn, fr as gte, ft as InferSelectModel, g as MigrationManifestEntry, gn as ConvexRankIndexBuilderOn, gr as isNotNull, gt as MutationExecutionMode, h as MigrationDriftIssue, hn as ConvexRankIndexBuilder, hr as isFieldReference, ht as MutationExecuteResult, i as OrmMigrationCapability, in as RlsPolicy, ir as UnaryExpression, it as BuildRelationResult, j as DatabaseWithQuery, jn as ConvexForeignKeyBuilder, jr as ColumnBuilder, jt as VectorSearchProvider, kn as ConvexCheckBuilder, kt as UpdateSet, ln as RlsRoleConfig, lr as eq, lt as GetColumnData, m as MigrationDocContext, mn as ConvexIndexBuilderOn, mr as inArray, mt as MutationExecuteConfig, n as OrmCapabilities, nn as deletion, nr as FilterExpression, nt as AggregateResult, on as RlsPolicyToOption, or as between, ot as CountResult, p as MigrationDoc, pn as ConvexIndexBuilder, pr as ilike, pt as InsertValue, qn as OrmSchemaExtensionTables, qt as ConvexDeletionBuilder, r as OrmCapability, rn as discriminator, rr as LogicalExpression, rt as BuildQueryResult, sn as rlsPolicy, sr as contains, st as DBQueryConfig, t as OrmAggregateCapability, tn as convexTable, tr as FieldReference, tt as AggregateFieldValue, u as MigrationAppliedState, un as rlsRole, ur as fieldRef, ut as InferInsertModel, v as MigrationPlan, vn as ConvexSearchIndexBuilderOn, vr as like, vt as MutationPaginatedResult, w as MigrationWriteMode, wn as index, wr as notInArray, wt as PaginatedResult, x as MigrationStateMap, xn as ConvexVectorIndexBuilderOn, xr as ne, xt as MutationRunMode, y as MigrationRunStatus, yn as ConvexSearchIndexConfig, yr as lt, yt as MutationResult, zn as ConvexTextBuilder, zr as IsPrimaryKey, zt as RelationsBuilderColumnBase } from "../capabilities-DtDfpdcH.js";
2
- import { $ as OrmClientWithApi$1, A as ConvexDateMode, B as ConvexBytesBuilderInitial, C as ConvexNumberBuilderInitial, D as id, E as ConvexIdBuilderInitial, F as custom, G as ConvexBigIntBuilder, H as ConvexBooleanBuilder, I as json, J as CreateOrmOptions, K as ConvexBigIntBuilderInitial, L as objectOf, M as ConvexCustomBuilder, N as ConvexCustomBuilderInitial, O as ConvexDateBuilder, P as arrayOf, Q as OrmClientBase$1, R as unionOf, S as ConvexNumberBuilder, St as defineTriggers, T as ConvexIdBuilder, U as ConvexBooleanBuilderInitial, V as bytes, W as boolean, X as GenericOrmCtx$1, Y as GenericOrm$1, Z as OrmApiResult, _ as ConvexTimestampMode, _t as OrmBeforeResult, a as requireSchemaRelations, at as ScheduledMutationBatchArgs, b as ConvexTextEnumBuilderInitial, bt as OrmTriggerContext, c as TableConfigResult, ct as scheduledDeleteFactory, d as OrmNotFoundError, et as OrmFunctions, f as ConvexVectorBuilder, g as ConvexTimestampBuilderInitial, gt as defineSchemaExtension, h as ConvexTimestampBuilder, ht as SchemaExtension, i as getSchemaTriggers, it as createOrm, j as date, k as ConvexDateBuilderInitial, l as getTableColumns, m as vector, n as defineSchema, nt as OrmWriterCtx, o as asc, ot as scheduledMutationBatchFactory, p as ConvexVectorBuilderInitial, q as bigint, r as getSchemaRelations, rt as ResolveOrmSchema, s as desc, st as ScheduledDeleteArgs, t as WhereClauseResult, tt as OrmReaderCtx, u as getTableConfig, v as timestamp, vt as OrmTableTriggers, w as integer, x as textEnum, xt as OrmTriggers, y as ConvexTextEnumBuilder, yt as OrmTriggerChange, z as ConvexBytesBuilder } from "../where-clause-compiler-CCMtAIdx.js";
2
+ import { $ as OrmClientWithApi$1, A as ConvexDateMode, B as ConvexBytesBuilderInitial, C as ConvexNumberBuilderInitial, D as id, E as ConvexIdBuilderInitial, F as custom, G as ConvexBigIntBuilder, H as ConvexBooleanBuilder, I as json, J as CreateOrmOptions, K as ConvexBigIntBuilderInitial, L as objectOf, M as ConvexCustomBuilder, N as ConvexCustomBuilderInitial, O as ConvexDateBuilder, P as arrayOf, Q as OrmClientBase$1, R as unionOf, S as ConvexNumberBuilder, St as defineTriggers, T as ConvexIdBuilder, U as ConvexBooleanBuilderInitial, V as bytes, W as boolean, X as GenericOrmCtx$1, Y as GenericOrm$1, Z as OrmApiResult, _ as ConvexTimestampMode, _t as OrmBeforeResult, a as requireSchemaRelations, at as ScheduledMutationBatchArgs, b as ConvexTextEnumBuilderInitial, bt as OrmTriggerContext, c as TableConfigResult, ct as scheduledDeleteFactory, d as OrmNotFoundError, et as OrmFunctions, f as ConvexVectorBuilder, g as ConvexTimestampBuilderInitial, gt as defineSchemaExtension, h as ConvexTimestampBuilder, ht as SchemaExtension, i as getSchemaTriggers, it as createOrm, j as date, k as ConvexDateBuilderInitial, l as getTableColumns, m as vector, n as defineSchema, nt as OrmWriterCtx, o as asc, ot as scheduledMutationBatchFactory, p as ConvexVectorBuilderInitial, q as bigint, r as getSchemaRelations, rt as ResolveOrmSchema, s as desc, st as ScheduledDeleteArgs, t as WhereClauseResult, tt as OrmReaderCtx, u as getTableConfig, v as timestamp, vt as OrmTableTriggers, w as integer, x as textEnum, xt as OrmTriggers, y as ConvexTextEnumBuilder, yt as OrmTriggerChange, z as ConvexBytesBuilder } from "../where-clause-compiler-DlRUDuMx.js";
3
3
  import { i as pretendRequired, n as deprecated, r as pretend } from "../validators-wOIjhkfN.js";
4
4
  import { a as QueryCtxWithPreferredOrmQueryTable, i as QueryCtxWithOrmQueryTable, n as LookupByIdResultByCtx, o as getByIdWithOrmQueryFallback, r as QueryCtxWithOptionalOrmQueryTable, t as DocByCtx } from "../query-context-DJONf8X5.js";
5
5
  import { DefineSchemaOptions, GenericDatabaseReader, GenericDatabaseWriter, GenericSchema, SchemaDefinition } from "convex/server";
package/dist/orm/index.js CHANGED
@@ -277,7 +277,7 @@ const resolveOrmCapabilities = (capabilities) => {
277
277
  }
278
278
  return resolved;
279
279
  };
280
- const AGGREGATE_SETUP_HINT = "Generated ORM: declare an aggregateIndex(...)/rankIndex(...) in your schema and rerun `kitcn codegen`, which registers the capability in <functionsDir>/generated/server.ts. Hand-written ORM: import { aggregateCapability } from 'kitcn/orm/aggregate-index' and pass createOrm({ schema, capabilities: [aggregateCapability()] }).";
280
+ const AGGREGATE_SETUP_HINT = "Generated ORM: `kitcn codegen` registers the capability in <functionsDir>/generated/server.ts from the aggregateIndex(...)/rankIndex(...) declarations in your schema if you are seeing this from that generated file, delete it and run `kitcn codegen` again. Hand-written ORM: import { aggregateCapability } from 'kitcn/orm/aggregate-index' and pass createOrm({ schema, capabilities: [aggregateCapability()] }).";
281
281
  const missingAggregateCapabilityError = (usage) => /* @__PURE__ */ new Error(`${usage} requires the aggregate capability. ${AGGREGATE_SETUP_HINT}`);
282
282
  const requireAggregateCapability = (capabilities, usage) => {
283
283
  const aggregate = capabilities?.aggregate;
@@ -286,7 +286,7 @@ const requireAggregateCapability = (capabilities, usage) => {
286
286
  };
287
287
  const requireMigrationCapability = (capabilities, usage) => {
288
288
  const migrations = capabilities?.migrations;
289
- if (!migrations) throw new Error(`${usage} requires the migration capability. Generated ORM: add a migration under <functionsDir>/migrations and rerun \`kitcn codegen\`, which registers the capability in <functionsDir>/generated/server.ts. Hand-written ORM: import { migrationCapability } from 'kitcn/orm/migrations' and pass createOrm({ schema, capabilities: [migrationCapability()] }).`);
289
+ if (!migrations) throw new Error(`${usage} requires the migration capability. Generated ORM: \`kitcn codegen\` registers the capability in <functionsDir>/generated/server.ts once <functionsDir>/migrations/manifest.ts exists — if you are seeing this from that generated file, delete it and run \`kitcn codegen\` again. Hand-written ORM: import { migrationCapability } from 'kitcn/orm/migrations' and pass createOrm({ schema, capabilities: [migrationCapability()] }).`);
290
290
  return migrations;
291
291
  };
292
292
 
@@ -1,3 +1,3 @@
1
1
  import { C as MigrationTableName, D as defineMigrationSet, E as defineMigration, O as detectMigrationDrift, S as MigrationStep, T as buildMigrationPlan, _ as MigrationMigrateOne, a as MigrationCancelArgs, b as MigrationSet, c as MigrationStatusArgs, d as MigrationDefinition, f as MigrationDirection, g as MigrationManifestEntry, h as MigrationDriftIssue, l as createMigrationHandlers, m as MigrationDocContext, o as MigrationRunArgs, p as MigrationDoc, s as MigrationRunChunkArgs, u as MigrationAppliedState, v as MigrationPlan, w as MigrationWriteMode, x as MigrationStateMap, y as MigrationRunStatus } from "../../capabilities-DtDfpdcH.js";
2
- import { Ct as migrationCapability, dt as MIGRATION_STORAGE_TABLE_NAMES, ft as injectMigrationStorageTables, lt as MIGRATION_RUN_TABLE, mt as migrationStorageTables, pt as migrationExtension, ut as MIGRATION_STATE_TABLE } from "../../where-clause-compiler-CCMtAIdx.js";
2
+ import { Ct as migrationCapability, dt as MIGRATION_STORAGE_TABLE_NAMES, ft as injectMigrationStorageTables, lt as MIGRATION_RUN_TABLE, mt as migrationStorageTables, pt as migrationExtension, ut as MIGRATION_STATE_TABLE } from "../../where-clause-compiler-DlRUDuMx.js";
3
3
  export { MIGRATION_RUN_TABLE, MIGRATION_STATE_TABLE, MIGRATION_STORAGE_TABLE_NAMES, type MigrationAppliedState, type MigrationCancelArgs, type MigrationDefinition, type MigrationDirection, type MigrationDoc, type MigrationDocContext, type MigrationDriftIssue, type MigrationManifestEntry, type MigrationMigrateOne, type MigrationPlan, type MigrationRunArgs, type MigrationRunChunkArgs, type MigrationRunStatus, type MigrationSet, type MigrationStateMap, type MigrationStatusArgs, type MigrationStep, type MigrationTableName, type MigrationWriteMode, buildMigrationPlan, createMigrationHandlers, defineMigration, defineMigrationSet, detectMigrationDrift, injectMigrationStorageTables, migrationCapability, migrationExtension, migrationStorageTables };
package/dist/watcher.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as generateMeta, d as PARSE_SNAPSHOT_SUFFIX, i as resolveConfiguredBackend, n as withLocalCodegenEnv, o as getConvexConfig, r as loadCliConfig, u as logger } from "./local-env-Dkh4a_BK.mjs";
2
+ import { a as generateMeta, d as PARSE_SNAPSHOT_SUFFIX, i as resolveConfiguredBackend, n as withLocalCodegenEnv, o as getConvexConfig, r as loadCliConfig, u as logger } from "./local-env-CiPqNKS_.mjs";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
 
@@ -102,15 +102,6 @@ declare const migrationStorageTables: {
102
102
  fieldName: "status";
103
103
  };
104
104
  };
105
- cursor: ConvexTextBuilderInitial<""> & {
106
- _: {
107
- tableName: "migration_state";
108
- };
109
- } & {
110
- _: {
111
- fieldName: "cursor";
112
- };
113
- };
114
105
  migrationId: ConvexTextBuilderInitial<""> & {
115
106
  _: {
116
107
  notNull: true;
@@ -168,6 +159,15 @@ declare const migrationStorageTables: {
168
159
  fieldName: "runId";
169
160
  };
170
161
  };
162
+ cursor: ConvexTextBuilderInitial<""> & {
163
+ _: {
164
+ tableName: "migration_state";
165
+ };
166
+ } & {
167
+ _: {
168
+ fieldName: "cursor";
169
+ };
170
+ };
171
171
  processed: ConvexNumberBuilderInitial<""> & {
172
172
  _: {
173
173
  notNull: true;
@@ -1008,7 +1008,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1008
1008
  readonly aggregate_bucket: ConvexTableWithColumns<{
1009
1009
  name: "aggregate_bucket";
1010
1010
  columns: {
1011
- count: ConvexNumberBuilderInitial<""> & {
1011
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1012
1012
  _: {
1013
1013
  notNull: true;
1014
1014
  };
@@ -1018,10 +1018,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1018
1018
  };
1019
1019
  } & {
1020
1020
  _: {
1021
- fieldName: "count";
1021
+ fieldName: "updatedAt";
1022
1022
  };
1023
1023
  };
1024
- updatedAt: ConvexNumberBuilderInitial<""> & {
1024
+ indexName: ConvexTextBuilderInitial<""> & {
1025
1025
  _: {
1026
1026
  notNull: true;
1027
1027
  };
@@ -1031,10 +1031,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1031
1031
  };
1032
1032
  } & {
1033
1033
  _: {
1034
- fieldName: "updatedAt";
1034
+ fieldName: "indexName";
1035
1035
  };
1036
1036
  };
1037
- indexName: ConvexTextBuilderInitial<""> & {
1037
+ tableKey: ConvexTextBuilderInitial<""> & {
1038
1038
  _: {
1039
1039
  notNull: true;
1040
1040
  };
@@ -1044,10 +1044,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1044
1044
  };
1045
1045
  } & {
1046
1046
  _: {
1047
- fieldName: "indexName";
1047
+ fieldName: "tableKey";
1048
1048
  };
1049
1049
  };
1050
- tableKey: ConvexTextBuilderInitial<""> & {
1050
+ count: ConvexNumberBuilderInitial<""> & {
1051
1051
  _: {
1052
1052
  notNull: true;
1053
1053
  };
@@ -1057,7 +1057,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1057
1057
  };
1058
1058
  } & {
1059
1059
  _: {
1060
- fieldName: "tableKey";
1060
+ fieldName: "count";
1061
1061
  };
1062
1062
  };
1063
1063
  keyHash: ConvexTextBuilderInitial<""> & {
@@ -1323,7 +1323,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1323
1323
  readonly aggregate_extrema: ConvexTableWithColumns<{
1324
1324
  name: "aggregate_extrema";
1325
1325
  columns: {
1326
- count: ConvexNumberBuilderInitial<""> & {
1326
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1327
1327
  _: {
1328
1328
  notNull: true;
1329
1329
  };
@@ -1333,10 +1333,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1333
1333
  };
1334
1334
  } & {
1335
1335
  _: {
1336
- fieldName: "count";
1336
+ fieldName: "updatedAt";
1337
1337
  };
1338
1338
  };
1339
- updatedAt: ConvexNumberBuilderInitial<""> & {
1339
+ indexName: ConvexTextBuilderInitial<""> & {
1340
1340
  _: {
1341
1341
  notNull: true;
1342
1342
  };
@@ -1346,14 +1346,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1346
1346
  };
1347
1347
  } & {
1348
1348
  _: {
1349
- fieldName: "updatedAt";
1349
+ fieldName: "indexName";
1350
1350
  };
1351
1351
  };
1352
- value: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
1353
- _: {
1354
- $type: convex_values0.Value;
1355
- };
1356
- } & {
1352
+ tableKey: ConvexTextBuilderInitial<""> & {
1357
1353
  _: {
1358
1354
  notNull: true;
1359
1355
  };
@@ -1363,10 +1359,14 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1363
1359
  };
1364
1360
  } & {
1365
1361
  _: {
1366
- fieldName: "value";
1362
+ fieldName: "tableKey";
1367
1363
  };
1368
1364
  };
1369
- indexName: ConvexTextBuilderInitial<""> & {
1365
+ value: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
1366
+ _: {
1367
+ $type: convex_values0.Value;
1368
+ };
1369
+ } & {
1370
1370
  _: {
1371
1371
  notNull: true;
1372
1372
  };
@@ -1376,10 +1376,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1376
1376
  };
1377
1377
  } & {
1378
1378
  _: {
1379
- fieldName: "indexName";
1379
+ fieldName: "value";
1380
1380
  };
1381
1381
  };
1382
- tableKey: ConvexTextBuilderInitial<""> & {
1382
+ count: ConvexNumberBuilderInitial<""> & {
1383
1383
  _: {
1384
1384
  notNull: true;
1385
1385
  };
@@ -1389,7 +1389,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1389
1389
  };
1390
1390
  } & {
1391
1391
  _: {
1392
- fieldName: "tableKey";
1392
+ fieldName: "count";
1393
1393
  };
1394
1394
  };
1395
1395
  keyHash: ConvexTextBuilderInitial<""> & {
@@ -1744,15 +1744,6 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1744
1744
  fieldName: "status";
1745
1745
  };
1746
1746
  };
1747
- cursor: ConvexTextBuilderInitial<""> & {
1748
- _: {
1749
- tableName: "migration_state";
1750
- };
1751
- } & {
1752
- _: {
1753
- fieldName: "cursor";
1754
- };
1755
- };
1756
1747
  migrationId: ConvexTextBuilderInitial<""> & {
1757
1748
  _: {
1758
1749
  notNull: true;
@@ -1810,6 +1801,15 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1810
1801
  fieldName: "runId";
1811
1802
  };
1812
1803
  };
1804
+ cursor: ConvexTextBuilderInitial<""> & {
1805
+ _: {
1806
+ tableName: "migration_state";
1807
+ };
1808
+ } & {
1809
+ _: {
1810
+ fieldName: "cursor";
1811
+ };
1812
+ };
1813
1813
  processed: ConvexNumberBuilderInitial<""> & {
1814
1814
  _: {
1815
1815
  notNull: true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitcn",
3
- "version": "0.25.4",
3
+ "version": "0.25.5",
4
4
  "description": "kitcn - React Query integration and CLI tools for Convex",
5
5
  "keywords": [
6
6
  "convex",
@@ -141,6 +141,7 @@ bunx kitcn add resend
141
141
  - `convex/functions/schema.ts`
142
142
  - `convex/functions/http.ts`
143
143
  - `convex/functions/generated/server.ts`
144
+ - `convex/functions/generated/procedure-names.gen.ts`
144
145
  - `convex/lib/crpc.ts`
145
146
  - `convex/lib/get-env.ts`
146
147
  - `convex/shared/api.ts`
@@ -218,6 +218,15 @@ This generates:
218
218
  - `convex/functions/generated/` directory
219
219
  - `convex/shared/api.ts`
220
220
 
221
+ Everything under `convex/functions/generated/` is codegen-owned. Never edit it,
222
+ and never hand-repair it. `convex/functions/generated/server.ts` is rewritten
223
+ from the schema before codegen reads any app module.
224
+
225
+ `convex/functions/generated/procedure-names.gen.ts` holds the procedure-name
226
+ lookup. It is the only generated output that depends on scanning procedures, so
227
+ only default-scope runs rebuild it; `kitcn codegen --scope auth|orm` preserves
228
+ the recorded lookup.
229
+
221
230
  Agent command policy:
222
231
 
223
232
  1. Default to `bunx kitcn dev`.