kitcn 0.33.4 → 0.33.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # kitcn
2
2
 
3
+ ## 0.33.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [#471](https://github.com/udecode/kitcn/pull/471) [`04346ae`](https://github.com/udecode/kitcn/commit/04346ae4c7f207f2e57eed56bffb3100472fb649) Thanks [@zbeyens](https://github.com/zbeyens)! - ## Patches
8
+
9
+ - Improve generated procedure-name lookups with merge-local entries and stale-state warnings.
10
+
3
11
  ## 0.33.4
4
12
 
5
13
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  import { Vn as ConvexTextBuilderInitial, Zt as ConvexTableWithColumns } from "../capabilities-Bxzoofl4.js";
2
- import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-D2ifnjjj.js";
2
+ import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-qH6-NCM9.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";
@@ -1599,6 +1599,7 @@ function extractRouteMap(procedures) {
1599
1599
  //#region src/server/procedure-name.ts
1600
1600
  const LOOKUP_KEY = "__KITCN_PROCEDURE_NAME_LOOKUP__";
1601
1601
  const HINTS_KEY = "__KITCN_PROCEDURE_NAME_HINTS__";
1602
+ const WARNED_MISSES_KEY = "__KITCN_PROCEDURE_NAME_WARNED_MISSES__";
1602
1603
  const PATH_SEPARATOR_RE = /\\/g;
1603
1604
  const TRIM_SLASHES_RE = /^\/+|\/+$/g;
1604
1605
  const PACKAGE_FRAME_MARKERS = ["/node_modules/kitcn/", "/packages/kitcn/"];
@@ -1632,6 +1633,14 @@ function getGlobalHints() {
1632
1633
  globalScope[HINTS_KEY] = hints;
1633
1634
  return hints;
1634
1635
  }
1636
+ function getGlobalWarnedMisses() {
1637
+ const globalScope = globalThis;
1638
+ const existing = globalScope[WARNED_MISSES_KEY];
1639
+ if (existing instanceof Set) return existing;
1640
+ const warnedMisses = /* @__PURE__ */ new Set();
1641
+ globalScope[WARNED_MISSES_KEY] = warnedMisses;
1642
+ return warnedMisses;
1643
+ }
1635
1644
  function registerProcedureNameLookup(lookup, functionsDirHint) {
1636
1645
  const globalLookup = getGlobalLookup();
1637
1646
  for (const [relativeFilePath, entries] of Object.entries(lookup)) {
@@ -1696,6 +1705,12 @@ function findBestEntry(entries, location) {
1696
1705
  return Math.abs(entry.column - location.column) < bestDistance ? entry : best;
1697
1706
  });
1698
1707
  }
1708
+ function warnAboutStaleLookup(relativeFilePath, location) {
1709
+ const warnedMisses = getGlobalWarnedMisses();
1710
+ if (warnedMisses.has(relativeFilePath)) return;
1711
+ warnedMisses.add(relativeFilePath);
1712
+ console.warn(`kitcn could not infer a procedure name at ${relativeFilePath}:${location.line} because generated/procedure-names.gen.ts has no matching entry. Run \`kitcn codegen\` to regenerate it.`);
1713
+ }
1699
1714
  function inferProcedureNameFromCallsite() {
1700
1715
  const location = captureCallsite();
1701
1716
  if (!location) return;
@@ -1703,7 +1718,12 @@ function inferProcedureNameFromCallsite() {
1703
1718
  if (!relativeFilePath) return;
1704
1719
  const entries = getGlobalLookup()[relativeFilePath];
1705
1720
  if (!entries || entries.length === 0) return;
1706
- return findBestEntry(entries, location)?.name;
1721
+ const entry = findBestEntry(entries, location);
1722
+ if (!entry) {
1723
+ warnAboutStaleLookup(relativeFilePath, location);
1724
+ return;
1725
+ }
1726
+ return entry.name;
1707
1727
  }
1708
1728
 
1709
1729
  //#endregion
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-CYYSNf_o.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-DfRydipT.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";
@@ -2925,8 +2925,8 @@ function emitProcedureNameLookupLiteral(lookup) {
2925
2925
  const entries = Object.entries(lookup);
2926
2926
  if (entries.length === 0) return "{}";
2927
2927
  return `{\n${entries.map(([file, locations]) => {
2928
- const items = locations.map((location) => `{ column: ${location.column}, line: ${location.line}, name: ${JSON.stringify(location.name)} }`).join(", ");
2929
- return ` ${JSON.stringify(file)}: [${items}],`;
2928
+ const items = locations.map((location) => ` { column: ${location.column}, line: ${location.line}, name: ${JSON.stringify(location.name)} },`).join("\n");
2929
+ return ` ${JSON.stringify(file)}: [\n${items}\n ],`;
2930
2930
  }).join("\n")}\n}`;
2931
2931
  }
2932
2932
  function extractObjectLiteral(source, startIndex) {
@@ -1,4 +1,4 @@
1
- import { a as createMiddlewareFactory } from "./builder-DDYTlmTB.js";
1
+ import { a as createMiddlewareFactory } from "./builder-C4FTb9Ci.js";
2
2
 
3
3
  //#region src/plugins/middleware.ts
4
4
  const PLUGIN_CONFIG_RESOLVERS = Symbol.for("kitcn:PluginConfigResolvers");
@@ -1,5 +1,5 @@
1
1
  import { $n as TableName, $t as OrmLifecycleChange, An as ConvexCheckBuilder, At as UpdateSet, Bn as ConvexTextBuilder, Br as IsPrimaryKey, Bt as RelationsBuilderColumnBase, C as MigrationStep, Cn as ConvexVectorIndexConfig, Cr as not, Ct as OrderByClause, D as defineMigration, Dn as searchIndex, Dr as startsWith, Dt as ReturningAll, E as buildMigrationPlan, En as rankIndex, Er as or, Et as PredicateWhereIndexConfig, Fn as ConvexUniqueConstraintBuilderOn, Fr as ColumnBuilderTypeConfig, Ft as ExtractTablesFromSchema, Gn as Columns, Gt as TablesRelationalConfig, H as RlsMode, Hn as text, Hr as NotNull, In as ConvexUniqueConstraintConfig, Ir as ColumnBuilderWithTableName, It as ExtractTablesWithRelations, Jn as OrmSchemaExtensionTables, Jt as ConvexDeletionBuilder, Kt as defineRelations, Ln as check, Lr as ColumnDataType, Lt as ManyConfig, M as DatabaseWithQuery, Mn as ConvexForeignKeyBuilder, Mr as ColumnBuilder, Mt as VectorSearchProvider, N as OrmReader$1, Nn as ConvexForeignKeyConfig, Nr as ColumnBuilderBaseConfig, Nt as unsetToken, O as defineMigrationSet, On as uniqueIndex, Ot as ReturningResult, P as OrmWriter$1, Pn as ConvexUniqueConstraintBuilder, Pr as ColumnBuilderRuntimeConfig, Qn as OrmSchemaTriggers, Qt as DiscriminatorBuilderConfig, Rn as foreignKey, Rr as DrizzleEntity, Rt as OneConfig, S as MigrationStateMap, Sn as ConvexVectorIndexBuilderOn, Sr as ne, St as MutationRunMode, T as MigrationWriteMode, Tn as index, Tr as notInArray, Tt as PaginatedResult, U as EdgeMetadata, V as RlsContext, Vn as ConvexTextBuilderInitial, Vr as IsUnique, Vt as RelationsBuilderColumnConfig, W as extractRelationsConfig, Wn as Brand, Wt as TableRelationalConfig, Xn as OrmSchemaExtensions, Xt as ConvexTable, Yt as ConvexDeletionConfig, Zn as OrmSchemaRelations, Zt as ConvexTableWithColumns, _ as MigrationManifestEntry, _n as ConvexRankIndexBuilderOn, _r as isNotNull, _t as MutationExecutionMode, an as RlsPolicy, ar as UnaryExpression, at as BuildRelationResult, b as MigrationRunStatus, bn as ConvexSearchIndexConfig, br as lt, bt as MutationResult, cn as rlsPolicy, cr as contains, ct as DBQueryConfig, d as MigrationAppliedState, dn as rlsRole, dr as fieldRef, dt as InferInsertModel, en as OrmLifecycleOperation, er as BinaryExpression, f as MigrationDefinition, fn as ConvexAggregateIndexBuilder, fr as gt, ft as InferModelFromColumns, g as MigrationDriftIssue, gn as ConvexRankIndexBuilder, gr as isFieldReference, gt as MutationExecuteResult, h as MigrationDocContext, hn as ConvexIndexBuilderOn, hr as inArray, ht as MutationExecuteConfig, i as OrmMigrationCapability, in as discriminator, ir as LogicalExpression, it as BuildQueryResult, j as DatabaseWithMutations, jn as ConvexCheckConfig, jr as AnyColumn, jt as VectorQueryConfig, k as detectMigrationDrift, kn as vectorIndex, kr as SystemFields, kt as ReturningSelection, ln as RlsRole, lr as endsWith, lt as FilterOperators, m as MigrationDoc, mn as ConvexIndexBuilder, mr as ilike, mt as InsertValue, n as OrmCapabilities, nn as convexTable, nr as FieldReference, nt as AggregateFieldValue, on as RlsPolicyConfig, or as and, ot as CountConfig, p as MigrationDirection, pn as ConvexAggregateIndexBuilderOn, pr as gte, pt as InferSelectModel, qt as defineRelationsPart, r as OrmCapability, rn as deletion, rr as FilterExpression, rt as AggregateResult, sn as RlsPolicyToOption, sr as between, st as CountResult, t as OrmAggregateCapability, tn as TableConfig, tr as ExpressionVisitor, tt as AggregateConfig, un as RlsRoleConfig, ur as eq, ut as GetColumnData, v as MigrationMigrateOne, vn as ConvexSearchIndexBuilder, vr as isNull, vt as MutationPaginateConfig, w as MigrationTableName, wn as aggregateIndex, wr as notBetween, wt as OrderDirection, x as MigrationSet, xn as ConvexVectorIndexBuilder, xr as lte, xt as MutationReturning, y as MigrationPlan, yn as ConvexSearchIndexBuilderOn, yr as like, yt as MutationPaginatedResult, zn as unique, zr as HasDefault, zt as RelationsBuilder } from "../capabilities-Bxzoofl4.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-D2ifnjjj.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-qH6-NCM9.js";
3
3
  import { i as pretendRequired, n as deprecated, r as pretend } from "../validators-0I-Ik1EN.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-BkNjkDCk.js";
5
5
  import { DefineSchemaOptions, GenericDatabaseReader, GenericDatabaseWriter, GenericSchema, SchemaDefinition } from "convex/server";
@@ -1,3 +1,3 @@
1
1
  import { C as MigrationStep, D as defineMigration, E as buildMigrationPlan, O as defineMigrationSet, S as MigrationStateMap, T as MigrationWriteMode, _ as MigrationManifestEntry, a as MAX_STATUS_RUN_LIMIT, b as MigrationRunStatus, c as MigrationRunChunkArgs, d as MigrationAppliedState, f as MigrationDefinition, g as MigrationDriftIssue, h as MigrationDocContext, k as detectMigrationDrift, l as MigrationStatusArgs, m as MigrationDoc, o as MigrationCancelArgs, p as MigrationDirection, s as MigrationRunArgs, u as createMigrationHandlers, v as MigrationMigrateOne, w as MigrationTableName, x as MigrationSet, y as MigrationPlan } from "../../capabilities-Bxzoofl4.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-D2ifnjjj.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-qH6-NCM9.js";
3
3
  export { MAX_STATUS_RUN_LIMIT, 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 };
@@ -1,3 +1,3 @@
1
- import { n as resolvePluginOptions, t as definePlugin } from "../middleware-LvZov-hA.js";
1
+ import { n as resolvePluginOptions, t as definePlugin } from "../middleware-0x76j2pR.js";
2
2
 
3
3
  export { definePlugin, resolvePluginOptions };
@@ -1,5 +1,5 @@
1
1
  import { i as decodeWire, o as encodeWire } from "./transformer-C8lVwHNT.js";
2
- import { _ as CRPCError } from "./builder-DDYTlmTB.js";
2
+ import { _ as CRPCError } from "./builder-C4FTb9Ci.js";
3
3
  import * as z$1 from "zod";
4
4
 
5
5
  //#region src/server/env.ts
@@ -1,6 +1,6 @@
1
1
  import { u as requireMutationCtx } from "../api-entry-Buvjl9hn.js";
2
- import { _ as CRPCError } from "../builder-DDYTlmTB.js";
3
- import { t as definePlugin } from "../middleware-LvZov-hA.js";
2
+ import { _ as CRPCError } from "../builder-C4FTb9Ci.js";
3
+ import { t as definePlugin } from "../middleware-0x76j2pR.js";
4
4
  import { v } from "convex/values";
5
5
  import { mutationGeneric, queryGeneric } from "convex/server";
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { a as isMutationCtx, c as isSchedulerCtx, d as requireQueryCtx, f as requireRunMutationCtx, i as isActionCtx, l as requireActionCtx, n as createGeneratedFunctionReference, o as isQueryCtx, p as requireSchedulerCtx, r as getGeneratedValue, s as isRunMutationCtx, t as createApiLeaf, u as requireMutationCtx } from "../api-entry-Buvjl9hn.js";
2
2
  import { n as createLazyCaller, r as createServerCaller, t as createCallerFactory } from "../caller-factory-CEKbQdGY.js";
3
- import { A as zid, C as toCRPCError, D as zCustomAction, E as withSystemFields, M as zodOutputToConvexFields, N as zodToConvex, O as zCustomMutation, P as zodToConvexFields, S as isCRPCError, T as convexToZodFields, _ as CRPCError, a as createMiddlewareFactory, b as getCRPCErrorFromUnknown, c as registerProcedureNameLookup, d as createHttpRouterFactory, f as extractRouteMap, g as matchPathParams, h as handleHttpError, i as QueryProcedureBuilder, j as zodOutputToConvex, k as zCustomQuery, l as HttpRouterWithHono, m as extractPathParams, n as MutationProcedureBuilder, o as initCRPC, p as createHttpProcedureBuilder, r as ProcedureBuilder, s as inferProcedureNameFromCallsite, t as ActionProcedureBuilder, u as createHttpRouter, v as CRPC_ERROR_CODES_BY_KEY, w as convexToZod, x as getHTTPStatusCodeFromError, y as CRPC_ERROR_CODE_TO_HTTP } from "../builder-DDYTlmTB.js";
4
- import { a as createProcedureHandlerFactory, c as typedProcedureResolver, i as createProcedureCallerFactory, l as createEnv, n as createGenericCallerFactory, o as defineProcedure, r as createGenericHandlerFactory, s as getGeneratedFunctionReference, t as createGeneratedRegistryRuntime } from "../procedure-caller-DgGF_hA8.js";
3
+ import { A as zid, C as toCRPCError, D as zCustomAction, E as withSystemFields, M as zodOutputToConvexFields, N as zodToConvex, O as zCustomMutation, P as zodToConvexFields, S as isCRPCError, T as convexToZodFields, _ as CRPCError, a as createMiddlewareFactory, b as getCRPCErrorFromUnknown, c as registerProcedureNameLookup, d as createHttpRouterFactory, f as extractRouteMap, g as matchPathParams, h as handleHttpError, i as QueryProcedureBuilder, j as zodOutputToConvex, k as zCustomQuery, l as HttpRouterWithHono, m as extractPathParams, n as MutationProcedureBuilder, o as initCRPC, p as createHttpProcedureBuilder, r as ProcedureBuilder, s as inferProcedureNameFromCallsite, t as ActionProcedureBuilder, u as createHttpRouter, v as CRPC_ERROR_CODES_BY_KEY, w as convexToZod, x as getHTTPStatusCodeFromError, y as CRPC_ERROR_CODE_TO_HTTP } from "../builder-C4FTb9Ci.js";
4
+ import { a as createProcedureHandlerFactory, c as typedProcedureResolver, i as createProcedureCallerFactory, l as createEnv, n as createGenericCallerFactory, o as defineProcedure, r as createGenericHandlerFactory, s as getGeneratedFunctionReference, t as createGeneratedRegistryRuntime } from "../procedure-caller-CZDaDjju.js";
5
5
 
6
6
  export { ActionProcedureBuilder, CRPCError, CRPC_ERROR_CODES_BY_KEY, CRPC_ERROR_CODE_TO_HTTP, HttpRouterWithHono, MutationProcedureBuilder, ProcedureBuilder, QueryProcedureBuilder, convexToZod, convexToZodFields, createApiLeaf, createCallerFactory, createEnv, createGeneratedFunctionReference, createGeneratedRegistryRuntime, createGenericCallerFactory, createGenericHandlerFactory, createHttpProcedureBuilder, createHttpRouter, createHttpRouterFactory, createLazyCaller, createMiddlewareFactory, createProcedureCallerFactory, createProcedureHandlerFactory, createServerCaller, defineProcedure, extractPathParams, extractRouteMap, getCRPCErrorFromUnknown, getGeneratedFunctionReference, getGeneratedValue, getHTTPStatusCodeFromError, handleHttpError, inferProcedureNameFromCallsite, initCRPC, isActionCtx, isCRPCError, isMutationCtx, isQueryCtx, isRunMutationCtx, isSchedulerCtx, matchPathParams, registerProcedureNameLookup, requireActionCtx, requireMutationCtx, requireQueryCtx, requireRunMutationCtx, requireSchedulerCtx, toCRPCError, typedProcedureResolver, withSystemFields, zCustomAction, zCustomMutation, zCustomQuery, zid, zodOutputToConvex, zodOutputToConvexFields, zodToConvex, zodToConvexFields };
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-CYYSNf_o.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-DfRydipT.mjs";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
 
@@ -120,7 +120,7 @@ declare const migrationStorageTables: {
120
120
  fieldName: "cursor";
121
121
  };
122
122
  };
123
- migrationId: ConvexTextBuilderInitial<""> & {
123
+ processed: ConvexNumberBuilderInitial<""> & {
124
124
  _: {
125
125
  notNull: true;
126
126
  };
@@ -130,23 +130,19 @@ declare const migrationStorageTables: {
130
130
  };
131
131
  } & {
132
132
  _: {
133
- fieldName: "migrationId";
133
+ fieldName: "processed";
134
134
  };
135
135
  };
136
- checksum: ConvexTextBuilderInitial<""> & {
137
- _: {
138
- notNull: true;
139
- };
140
- } & {
136
+ startedAt: ConvexNumberBuilderInitial<""> & {
141
137
  _: {
142
138
  tableName: "migration_state";
143
139
  };
144
140
  } & {
145
141
  _: {
146
- fieldName: "checksum";
142
+ fieldName: "startedAt";
147
143
  };
148
144
  };
149
- applied: ConvexBooleanBuilderInitial<""> & {
145
+ updatedAt: ConvexNumberBuilderInitial<""> & {
150
146
  _: {
151
147
  notNull: true;
152
148
  };
@@ -156,41 +152,41 @@ declare const migrationStorageTables: {
156
152
  };
157
153
  } & {
158
154
  _: {
159
- fieldName: "applied";
155
+ fieldName: "updatedAt";
160
156
  };
161
157
  };
162
- runId: ConvexTextBuilderInitial<""> & {
158
+ completedAt: ConvexNumberBuilderInitial<""> & {
163
159
  _: {
164
160
  tableName: "migration_state";
165
161
  };
166
162
  } & {
167
163
  _: {
168
- fieldName: "runId";
164
+ fieldName: "completedAt";
169
165
  };
170
166
  };
171
- processed: ConvexNumberBuilderInitial<""> & {
172
- _: {
173
- notNull: true;
174
- };
175
- } & {
167
+ lastError: ConvexTextBuilderInitial<""> & {
176
168
  _: {
177
169
  tableName: "migration_state";
178
170
  };
179
171
  } & {
180
172
  _: {
181
- fieldName: "processed";
173
+ fieldName: "lastError";
182
174
  };
183
175
  };
184
- startedAt: ConvexNumberBuilderInitial<""> & {
176
+ migrationId: ConvexTextBuilderInitial<""> & {
177
+ _: {
178
+ notNull: true;
179
+ };
180
+ } & {
185
181
  _: {
186
182
  tableName: "migration_state";
187
183
  };
188
184
  } & {
189
185
  _: {
190
- fieldName: "startedAt";
186
+ fieldName: "migrationId";
191
187
  };
192
188
  };
193
- updatedAt: ConvexNumberBuilderInitial<""> & {
189
+ checksum: ConvexTextBuilderInitial<""> & {
194
190
  _: {
195
191
  notNull: true;
196
192
  };
@@ -200,25 +196,29 @@ declare const migrationStorageTables: {
200
196
  };
201
197
  } & {
202
198
  _: {
203
- fieldName: "updatedAt";
199
+ fieldName: "checksum";
204
200
  };
205
201
  };
206
- completedAt: ConvexNumberBuilderInitial<""> & {
202
+ applied: ConvexBooleanBuilderInitial<""> & {
203
+ _: {
204
+ notNull: true;
205
+ };
206
+ } & {
207
207
  _: {
208
208
  tableName: "migration_state";
209
209
  };
210
210
  } & {
211
211
  _: {
212
- fieldName: "completedAt";
212
+ fieldName: "applied";
213
213
  };
214
214
  };
215
- lastError: ConvexTextBuilderInitial<""> & {
215
+ runId: ConvexTextBuilderInitial<""> & {
216
216
  _: {
217
217
  tableName: "migration_state";
218
218
  };
219
219
  } & {
220
220
  _: {
221
- fieldName: "lastError";
221
+ fieldName: "runId";
222
222
  };
223
223
  };
224
224
  writeMode: ConvexTextBuilderInitial<""> & {
@@ -269,19 +269,6 @@ declare const migrationStorageTables: {
269
269
  fieldName: "direction";
270
270
  };
271
271
  };
272
- runId: ConvexTextBuilderInitial<""> & {
273
- _: {
274
- notNull: true;
275
- };
276
- } & {
277
- _: {
278
- tableName: "migration_run";
279
- };
280
- } & {
281
- _: {
282
- fieldName: "runId";
283
- };
284
- };
285
272
  startedAt: ConvexNumberBuilderInitial<""> & {
286
273
  _: {
287
274
  notNull: true;
@@ -326,6 +313,19 @@ declare const migrationStorageTables: {
326
313
  fieldName: "lastError";
327
314
  };
328
315
  };
316
+ runId: ConvexTextBuilderInitial<""> & {
317
+ _: {
318
+ notNull: true;
319
+ };
320
+ } & {
321
+ _: {
322
+ tableName: "migration_run";
323
+ };
324
+ } & {
325
+ _: {
326
+ fieldName: "runId";
327
+ };
328
+ };
329
329
  dryRun: ConvexBooleanBuilderInitial<""> & {
330
330
  _: {
331
331
  notNull: true;
@@ -1011,7 +1011,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1011
1011
  readonly aggregate_bucket: ConvexTableWithColumns<{
1012
1012
  name: "aggregate_bucket";
1013
1013
  columns: {
1014
- updatedAt: ConvexNumberBuilderInitial<""> & {
1014
+ indexName: ConvexTextBuilderInitial<""> & {
1015
1015
  _: {
1016
1016
  notNull: true;
1017
1017
  };
@@ -1021,10 +1021,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1021
1021
  };
1022
1022
  } & {
1023
1023
  _: {
1024
- fieldName: "updatedAt";
1024
+ fieldName: "indexName";
1025
1025
  };
1026
1026
  };
1027
- indexName: ConvexTextBuilderInitial<""> & {
1027
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1028
1028
  _: {
1029
1029
  notNull: true;
1030
1030
  };
@@ -1034,10 +1034,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1034
1034
  };
1035
1035
  } & {
1036
1036
  _: {
1037
- fieldName: "indexName";
1037
+ fieldName: "updatedAt";
1038
1038
  };
1039
1039
  };
1040
- count: ConvexNumberBuilderInitial<""> & {
1040
+ tableKey: ConvexTextBuilderInitial<""> & {
1041
1041
  _: {
1042
1042
  notNull: true;
1043
1043
  };
@@ -1047,10 +1047,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1047
1047
  };
1048
1048
  } & {
1049
1049
  _: {
1050
- fieldName: "count";
1050
+ fieldName: "tableKey";
1051
1051
  };
1052
1052
  };
1053
- tableKey: ConvexTextBuilderInitial<""> & {
1053
+ count: ConvexNumberBuilderInitial<""> & {
1054
1054
  _: {
1055
1055
  notNull: true;
1056
1056
  };
@@ -1060,7 +1060,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1060
1060
  };
1061
1061
  } & {
1062
1062
  _: {
1063
- fieldName: "tableKey";
1063
+ fieldName: "count";
1064
1064
  };
1065
1065
  };
1066
1066
  keyHash: ConvexTextBuilderInitial<""> & {
@@ -1149,7 +1149,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1149
1149
  fieldName: "kind";
1150
1150
  };
1151
1151
  };
1152
- updatedAt: ConvexNumberBuilderInitial<""> & {
1152
+ indexName: ConvexTextBuilderInitial<""> & {
1153
1153
  _: {
1154
1154
  notNull: true;
1155
1155
  };
@@ -1159,10 +1159,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1159
1159
  };
1160
1160
  } & {
1161
1161
  _: {
1162
- fieldName: "updatedAt";
1162
+ fieldName: "indexName";
1163
1163
  };
1164
1164
  };
1165
- indexName: ConvexTextBuilderInitial<""> & {
1165
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1166
1166
  _: {
1167
1167
  notNull: true;
1168
1168
  };
@@ -1172,7 +1172,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1172
1172
  };
1173
1173
  } & {
1174
1174
  _: {
1175
- fieldName: "indexName";
1175
+ fieldName: "updatedAt";
1176
1176
  };
1177
1177
  };
1178
1178
  tableKey: ConvexTextBuilderInitial<""> & {
@@ -1343,7 +1343,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1343
1343
  fieldName: "value";
1344
1344
  };
1345
1345
  };
1346
- updatedAt: ConvexNumberBuilderInitial<""> & {
1346
+ indexName: ConvexTextBuilderInitial<""> & {
1347
1347
  _: {
1348
1348
  notNull: true;
1349
1349
  };
@@ -1353,10 +1353,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1353
1353
  };
1354
1354
  } & {
1355
1355
  _: {
1356
- fieldName: "updatedAt";
1356
+ fieldName: "indexName";
1357
1357
  };
1358
1358
  };
1359
- indexName: ConvexTextBuilderInitial<""> & {
1359
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1360
1360
  _: {
1361
1361
  notNull: true;
1362
1362
  };
@@ -1366,10 +1366,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1366
1366
  };
1367
1367
  } & {
1368
1368
  _: {
1369
- fieldName: "indexName";
1369
+ fieldName: "updatedAt";
1370
1370
  };
1371
1371
  };
1372
- count: ConvexNumberBuilderInitial<""> & {
1372
+ tableKey: ConvexTextBuilderInitial<""> & {
1373
1373
  _: {
1374
1374
  notNull: true;
1375
1375
  };
@@ -1379,10 +1379,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1379
1379
  };
1380
1380
  } & {
1381
1381
  _: {
1382
- fieldName: "count";
1382
+ fieldName: "tableKey";
1383
1383
  };
1384
1384
  };
1385
- tableKey: ConvexTextBuilderInitial<""> & {
1385
+ count: ConvexNumberBuilderInitial<""> & {
1386
1386
  _: {
1387
1387
  notNull: true;
1388
1388
  };
@@ -1392,7 +1392,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1392
1392
  };
1393
1393
  } & {
1394
1394
  _: {
1395
- fieldName: "tableKey";
1395
+ fieldName: "count";
1396
1396
  };
1397
1397
  };
1398
1398
  keyHash: ConvexTextBuilderInitial<""> & {
@@ -1618,7 +1618,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1618
1618
  fieldName: "cursor";
1619
1619
  };
1620
1620
  };
1621
- processed: ConvexNumberBuilderInitial<""> & {
1621
+ indexName: ConvexTextBuilderInitial<""> & {
1622
1622
  _: {
1623
1623
  notNull: true;
1624
1624
  };
@@ -1628,10 +1628,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1628
1628
  };
1629
1629
  } & {
1630
1630
  _: {
1631
- fieldName: "processed";
1631
+ fieldName: "indexName";
1632
1632
  };
1633
1633
  };
1634
- startedAt: ConvexNumberBuilderInitial<""> & {
1634
+ keyDefinitionHash: ConvexTextBuilderInitial<""> & {
1635
1635
  _: {
1636
1636
  notNull: true;
1637
1637
  };
@@ -1641,10 +1641,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1641
1641
  };
1642
1642
  } & {
1643
1643
  _: {
1644
- fieldName: "startedAt";
1644
+ fieldName: "keyDefinitionHash";
1645
1645
  };
1646
1646
  };
1647
- updatedAt: ConvexNumberBuilderInitial<""> & {
1647
+ metricDefinitionHash: ConvexTextBuilderInitial<""> & {
1648
1648
  _: {
1649
1649
  notNull: true;
1650
1650
  };
@@ -1654,28 +1654,23 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1654
1654
  };
1655
1655
  } & {
1656
1656
  _: {
1657
- fieldName: "updatedAt";
1657
+ fieldName: "metricDefinitionHash";
1658
1658
  };
1659
1659
  };
1660
- completedAt: ConvexNumberBuilderInitial<""> & {
1660
+ processed: ConvexNumberBuilderInitial<""> & {
1661
1661
  _: {
1662
- tableName: "aggregate_state";
1662
+ notNull: true;
1663
1663
  };
1664
1664
  } & {
1665
- _: {
1666
- fieldName: "completedAt";
1667
- };
1668
- };
1669
- lastError: ConvexTextBuilderInitial<""> & {
1670
1665
  _: {
1671
1666
  tableName: "aggregate_state";
1672
1667
  };
1673
1668
  } & {
1674
1669
  _: {
1675
- fieldName: "lastError";
1670
+ fieldName: "processed";
1676
1671
  };
1677
1672
  };
1678
- indexName: ConvexTextBuilderInitial<""> & {
1673
+ startedAt: ConvexNumberBuilderInitial<""> & {
1679
1674
  _: {
1680
1675
  notNull: true;
1681
1676
  };
@@ -1685,10 +1680,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1685
1680
  };
1686
1681
  } & {
1687
1682
  _: {
1688
- fieldName: "indexName";
1683
+ fieldName: "startedAt";
1689
1684
  };
1690
1685
  };
1691
- keyDefinitionHash: ConvexTextBuilderInitial<""> & {
1686
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1692
1687
  _: {
1693
1688
  notNull: true;
1694
1689
  };
@@ -1698,20 +1693,25 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1698
1693
  };
1699
1694
  } & {
1700
1695
  _: {
1701
- fieldName: "keyDefinitionHash";
1696
+ fieldName: "updatedAt";
1702
1697
  };
1703
1698
  };
1704
- metricDefinitionHash: ConvexTextBuilderInitial<""> & {
1699
+ completedAt: ConvexNumberBuilderInitial<""> & {
1705
1700
  _: {
1706
- notNull: true;
1701
+ tableName: "aggregate_state";
1707
1702
  };
1708
1703
  } & {
1704
+ _: {
1705
+ fieldName: "completedAt";
1706
+ };
1707
+ };
1708
+ lastError: ConvexTextBuilderInitial<""> & {
1709
1709
  _: {
1710
1710
  tableName: "aggregate_state";
1711
1711
  };
1712
1712
  } & {
1713
1713
  _: {
1714
- fieldName: "metricDefinitionHash";
1714
+ fieldName: "lastError";
1715
1715
  };
1716
1716
  };
1717
1717
  tableKey: ConvexTextBuilderInitial<""> & {
@@ -1769,7 +1769,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1769
1769
  fieldName: "cursor";
1770
1770
  };
1771
1771
  };
1772
- migrationId: ConvexTextBuilderInitial<""> & {
1772
+ processed: ConvexNumberBuilderInitial<""> & {
1773
1773
  _: {
1774
1774
  notNull: true;
1775
1775
  };
@@ -1779,23 +1779,19 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1779
1779
  };
1780
1780
  } & {
1781
1781
  _: {
1782
- fieldName: "migrationId";
1782
+ fieldName: "processed";
1783
1783
  };
1784
1784
  };
1785
- checksum: ConvexTextBuilderInitial<""> & {
1786
- _: {
1787
- notNull: true;
1788
- };
1789
- } & {
1785
+ startedAt: ConvexNumberBuilderInitial<""> & {
1790
1786
  _: {
1791
1787
  tableName: "migration_state";
1792
1788
  };
1793
1789
  } & {
1794
1790
  _: {
1795
- fieldName: "checksum";
1791
+ fieldName: "startedAt";
1796
1792
  };
1797
1793
  };
1798
- applied: ConvexBooleanBuilderInitial<""> & {
1794
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1799
1795
  _: {
1800
1796
  notNull: true;
1801
1797
  };
@@ -1805,41 +1801,41 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1805
1801
  };
1806
1802
  } & {
1807
1803
  _: {
1808
- fieldName: "applied";
1804
+ fieldName: "updatedAt";
1809
1805
  };
1810
1806
  };
1811
- runId: ConvexTextBuilderInitial<""> & {
1807
+ completedAt: ConvexNumberBuilderInitial<""> & {
1812
1808
  _: {
1813
1809
  tableName: "migration_state";
1814
1810
  };
1815
1811
  } & {
1816
1812
  _: {
1817
- fieldName: "runId";
1813
+ fieldName: "completedAt";
1818
1814
  };
1819
1815
  };
1820
- processed: ConvexNumberBuilderInitial<""> & {
1821
- _: {
1822
- notNull: true;
1823
- };
1824
- } & {
1816
+ lastError: ConvexTextBuilderInitial<""> & {
1825
1817
  _: {
1826
1818
  tableName: "migration_state";
1827
1819
  };
1828
1820
  } & {
1829
1821
  _: {
1830
- fieldName: "processed";
1822
+ fieldName: "lastError";
1831
1823
  };
1832
1824
  };
1833
- startedAt: ConvexNumberBuilderInitial<""> & {
1825
+ migrationId: ConvexTextBuilderInitial<""> & {
1826
+ _: {
1827
+ notNull: true;
1828
+ };
1829
+ } & {
1834
1830
  _: {
1835
1831
  tableName: "migration_state";
1836
1832
  };
1837
1833
  } & {
1838
1834
  _: {
1839
- fieldName: "startedAt";
1835
+ fieldName: "migrationId";
1840
1836
  };
1841
1837
  };
1842
- updatedAt: ConvexNumberBuilderInitial<""> & {
1838
+ checksum: ConvexTextBuilderInitial<""> & {
1843
1839
  _: {
1844
1840
  notNull: true;
1845
1841
  };
@@ -1849,25 +1845,29 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1849
1845
  };
1850
1846
  } & {
1851
1847
  _: {
1852
- fieldName: "updatedAt";
1848
+ fieldName: "checksum";
1853
1849
  };
1854
1850
  };
1855
- completedAt: ConvexNumberBuilderInitial<""> & {
1851
+ applied: ConvexBooleanBuilderInitial<""> & {
1852
+ _: {
1853
+ notNull: true;
1854
+ };
1855
+ } & {
1856
1856
  _: {
1857
1857
  tableName: "migration_state";
1858
1858
  };
1859
1859
  } & {
1860
1860
  _: {
1861
- fieldName: "completedAt";
1861
+ fieldName: "applied";
1862
1862
  };
1863
1863
  };
1864
- lastError: ConvexTextBuilderInitial<""> & {
1864
+ runId: ConvexTextBuilderInitial<""> & {
1865
1865
  _: {
1866
1866
  tableName: "migration_state";
1867
1867
  };
1868
1868
  } & {
1869
1869
  _: {
1870
- fieldName: "lastError";
1870
+ fieldName: "runId";
1871
1871
  };
1872
1872
  };
1873
1873
  writeMode: ConvexTextBuilderInitial<""> & {
@@ -1918,19 +1918,6 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1918
1918
  fieldName: "direction";
1919
1919
  };
1920
1920
  };
1921
- runId: ConvexTextBuilderInitial<""> & {
1922
- _: {
1923
- notNull: true;
1924
- };
1925
- } & {
1926
- _: {
1927
- tableName: "migration_run";
1928
- };
1929
- } & {
1930
- _: {
1931
- fieldName: "runId";
1932
- };
1933
- };
1934
1921
  startedAt: ConvexNumberBuilderInitial<""> & {
1935
1922
  _: {
1936
1923
  notNull: true;
@@ -1975,6 +1962,19 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1975
1962
  fieldName: "lastError";
1976
1963
  };
1977
1964
  };
1965
+ runId: ConvexTextBuilderInitial<""> & {
1966
+ _: {
1967
+ notNull: true;
1968
+ };
1969
+ } & {
1970
+ _: {
1971
+ tableName: "migration_run";
1972
+ };
1973
+ } & {
1974
+ _: {
1975
+ fieldName: "runId";
1976
+ };
1977
+ };
1978
1978
  dryRun: ConvexBooleanBuilderInitial<""> & {
1979
1979
  _: {
1980
1980
  notNull: true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitcn",
3
- "version": "0.33.4",
3
+ "version": "0.33.5",
4
4
  "description": "kitcn - React Query integration and CLI tools for Convex",
5
5
  "keywords": [
6
6
  "convex",