kitcn 0.12.1 → 0.12.2

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 (2) hide show
  1. package/dist/cli.mjs +87 -66
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -9,7 +9,6 @@ import { confirm, isCancel, multiselect, select, spinner } from "@clack/prompts"
9
9
  import { parse } from "dotenv";
10
10
  import { execa } from "execa";
11
11
  import { createJiti } from "jiti";
12
- import ts from "typescript";
13
12
  import { createInterface } from "node:readline/promises";
14
13
  import { build } from "esbuild";
15
14
  import os from "node:os";
@@ -3470,20 +3469,40 @@ const buildPluginInstallPlan = async (params) => {
3470
3469
  };
3471
3470
  };
3472
3471
 
3472
+ //#endregion
3473
+ //#region src/cli/utils/typescript-runtime.ts
3474
+ const require$1 = createRequire(import.meta.url);
3475
+ let cachedTypeScript = null;
3476
+ const loadTypeScript = () => {
3477
+ if (cachedTypeScript) return cachedTypeScript;
3478
+ const loaded = require$1("typescript");
3479
+ const resolved = "default" in loaded && loaded.default ? loaded.default : loaded;
3480
+ cachedTypeScript = resolved;
3481
+ return resolved;
3482
+ };
3483
+ const createTypeScriptProxy = () => new Proxy({}, { get(_target, property) {
3484
+ return loadTypeScript()[property];
3485
+ } });
3486
+
3473
3487
  //#endregion
3474
3488
  //#region src/cli/registry/schema-ownership.ts
3475
3489
  const OBJECT_ENTRY_INDENT = " ";
3476
3490
  const LEADING_INDENT_RE = /^[ \t]*/;
3477
3491
  const LEGACY_MANAGED_COMMENT_RE = /^[ \t]*\/\* kitcn-managed [^*]+ \*\/\n?/gm;
3478
3492
  const WHITESPACE_RE = /\s/;
3479
- const printer = ts.createPrinter({ removeComments: true });
3493
+ const ts$2 = createTypeScriptProxy();
3494
+ let printer = null;
3495
+ const getPrinter = () => {
3496
+ printer ??= ts$2.createPrinter({ removeComments: true });
3497
+ return printer;
3498
+ };
3480
3499
  const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3481
3500
  const normalizePathForMessage = (path) => {
3482
3501
  const relativePath = relative(process.cwd(), path).replaceAll("\\", "/");
3483
3502
  return relativePath.startsWith("..") ? path.replaceAll("\\", "/") : relativePath;
3484
3503
  };
3485
3504
  const stripLegacyManagedComments = (source) => source.replace(LEGACY_MANAGED_COMMENT_RE, "").replace(/\n{3,}/g, "\n\n");
3486
- const parseSource = (source) => ts.createSourceFile("schema.ts", source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
3505
+ const parseSource = (source) => ts$2.createSourceFile("schema.ts", source, ts$2.ScriptTarget.Latest, true, ts$2.ScriptKind.TS);
3487
3506
  const indentBlock = (value, indent) => value.trim().split("\n").map((line) => `${indent}${line}`).join("\n");
3488
3507
  const ensureTrailingComma = (value) => {
3489
3508
  const trimmed = value.trim();
@@ -3494,15 +3513,15 @@ const getIndentAt = (source, index) => {
3494
3513
  return LEADING_INDENT_RE.exec(source.slice(lineStart))?.[0] ?? "";
3495
3514
  };
3496
3515
  const replaceRange = (source, start, end, content) => `${source.slice(0, start)}${content}${source.slice(end)}`;
3497
- const isStringLiteralLike = (node) => ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node);
3516
+ const isStringLiteralLike = (node) => ts$2.isStringLiteral(node) || ts$2.isNoSubstitutionTemplateLiteral(node);
3498
3517
  const getPropertyName = (property) => {
3499
- if ((ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)) && property.name) {
3500
- if (ts.isIdentifier(property.name)) return property.name.text;
3518
+ if ((ts$2.isPropertyAssignment(property) || ts$2.isShorthandPropertyAssignment(property)) && property.name) {
3519
+ if (ts$2.isIdentifier(property.name)) return property.name.text;
3501
3520
  if (isStringLiteralLike(property.name)) return property.name.text;
3502
3521
  }
3503
3522
  return null;
3504
3523
  };
3505
- const renderNode = (node, sourceFile) => printer.printNode(ts.EmitHint.Unspecified, node, sourceFile).trim();
3524
+ const renderNode = (node, sourceFile) => getPrinter().printNode(ts$2.EmitHint.Unspecified, node, sourceFile).trim();
3506
3525
  const renderObjectLiteral = (baseIndent, entries) => {
3507
3526
  if (entries.length === 0) return "{}";
3508
3527
  const entryIndent = `${baseIndent}${OBJECT_ENTRY_INDENT}`;
@@ -3516,8 +3535,8 @@ const renderArrayLiteral = (baseIndent, entries) => {
3516
3535
  const findTablesObject = (source) => {
3517
3536
  const sourceFile = parseSource(source);
3518
3537
  for (const statement of sourceFile.statements) {
3519
- if (!ts.isVariableStatement(statement)) continue;
3520
- for (const declaration of statement.declarationList.declarations) if (ts.isIdentifier(declaration.name) && declaration.name.text === "tables" && declaration.initializer && ts.isObjectLiteralExpression(declaration.initializer)) return {
3538
+ if (!ts$2.isVariableStatement(statement)) continue;
3539
+ for (const declaration of statement.declarationList.declarations) if (ts$2.isIdentifier(declaration.name) && declaration.name.text === "tables" && declaration.initializer && ts$2.isObjectLiteralExpression(declaration.initializer)) return {
3521
3540
  object: declaration.initializer,
3522
3541
  sourceFile,
3523
3542
  statementStart: statement.getStart(sourceFile)
@@ -3525,15 +3544,15 @@ const findTablesObject = (source) => {
3525
3544
  }
3526
3545
  let defineSchemaObject = null;
3527
3546
  const visit = (node, statementStart) => {
3528
- if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "defineSchema") {
3547
+ if (ts$2.isCallExpression(node) && ts$2.isIdentifier(node.expression) && node.expression.text === "defineSchema") {
3529
3548
  const firstArg = node.arguments[0];
3530
- if (firstArg && ts.isObjectLiteralExpression(firstArg) && !defineSchemaObject) defineSchemaObject = {
3549
+ if (firstArg && ts$2.isObjectLiteralExpression(firstArg) && !defineSchemaObject) defineSchemaObject = {
3531
3550
  object: firstArg,
3532
3551
  sourceFile,
3533
3552
  statementStart
3534
3553
  };
3535
3554
  }
3536
- ts.forEachChild(node, (child) => visit(child, statementStart));
3555
+ ts$2.forEachChild(node, (child) => visit(child, statementStart));
3537
3556
  };
3538
3557
  for (const statement of sourceFile.statements) visit(statement, statement.getStart(sourceFile));
3539
3558
  return defineSchemaObject;
@@ -3542,18 +3561,18 @@ const findRelationsCall = (source) => {
3542
3561
  const sourceFile = parseSource(source);
3543
3562
  let result = null;
3544
3563
  const visit = (node) => {
3545
- if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === "relations") {
3564
+ if (ts$2.isCallExpression(node) && ts$2.isPropertyAccessExpression(node.expression) && node.expression.name.text === "relations") {
3546
3565
  const firstArg = node.arguments[0];
3547
- if (firstArg && ts.isArrowFunction(firstArg)) {
3548
- const body = ts.isParenthesizedExpression(firstArg.body) ? firstArg.body.expression : firstArg.body;
3549
- if (ts.isObjectLiteralExpression(body) && !result) result = {
3566
+ if (firstArg && ts$2.isArrowFunction(firstArg)) {
3567
+ const body = ts$2.isParenthesizedExpression(firstArg.body) ? firstArg.body.expression : firstArg.body;
3568
+ if (ts$2.isObjectLiteralExpression(body) && !result) result = {
3550
3569
  call: node,
3551
3570
  object: body,
3552
3571
  sourceFile
3553
3572
  };
3554
3573
  }
3555
3574
  }
3556
- ts.forEachChild(node, visit);
3575
+ ts$2.forEachChild(node, visit);
3557
3576
  };
3558
3577
  visit(sourceFile);
3559
3578
  return result;
@@ -3562,36 +3581,36 @@ const hasStandaloneDefineRelations = (source) => {
3562
3581
  const sourceFile = parseSource(source);
3563
3582
  let found = false;
3564
3583
  const visit = (node) => {
3565
- if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "defineRelations") {
3584
+ if (ts$2.isCallExpression(node) && ts$2.isIdentifier(node.expression) && node.expression.text === "defineRelations") {
3566
3585
  found = true;
3567
3586
  return;
3568
3587
  }
3569
- if (!found) ts.forEachChild(node, visit);
3588
+ if (!found) ts$2.forEachChild(node, visit);
3570
3589
  };
3571
3590
  visit(sourceFile);
3572
3591
  return found;
3573
3592
  };
3574
3593
  const getArrayLiteralFromExpression = (expression) => {
3575
- if (ts.isArrayLiteralExpression(expression)) return expression;
3576
- if (ts.isParenthesizedExpression(expression) && ts.isArrayLiteralExpression(expression.expression)) return expression.expression;
3594
+ if (ts$2.isArrayLiteralExpression(expression)) return expression;
3595
+ if (ts$2.isParenthesizedExpression(expression) && ts$2.isArrayLiteralExpression(expression.expression)) return expression.expression;
3577
3596
  return null;
3578
3597
  };
3579
3598
  const readTableDeclarationInfo = (source, tableKey) => {
3580
3599
  const sourceFile = parseSource(source);
3581
3600
  for (const statement of sourceFile.statements) {
3582
- if (!ts.isVariableStatement(statement)) continue;
3601
+ if (!ts$2.isVariableStatement(statement)) continue;
3583
3602
  for (const declaration of statement.declarationList.declarations) {
3584
- if (!ts.isIdentifier(declaration.name) || !declaration.initializer || !ts.isCallExpression(declaration.initializer) || !ts.isIdentifier(declaration.initializer.expression) || declaration.initializer.expression.text !== "convexTable") continue;
3603
+ if (!ts$2.isIdentifier(declaration.name) || !declaration.initializer || !ts$2.isCallExpression(declaration.initializer) || !ts$2.isIdentifier(declaration.initializer.expression) || declaration.initializer.expression.text !== "convexTable") continue;
3585
3604
  const firstArg = declaration.initializer.arguments[0];
3586
3605
  const secondArg = declaration.initializer.arguments[1];
3587
- if (!firstArg || !secondArg || !isStringLiteralLike(firstArg) || firstArg.text !== tableKey || !ts.isObjectLiteralExpression(secondArg)) continue;
3606
+ if (!firstArg || !secondArg || !isStringLiteralLike(firstArg) || firstArg.text !== tableKey || !ts$2.isObjectLiteralExpression(secondArg)) continue;
3588
3607
  const thirdArg = declaration.initializer.arguments[2];
3589
3608
  let indexEntries = null;
3590
3609
  let indexParamName = null;
3591
- if (thirdArg && ts.isArrowFunction(thirdArg) && thirdArg.parameters[0] && ts.isIdentifier(thirdArg.parameters[0].name)) {
3592
- const arrayLiteral = ts.isBlock(thirdArg.body) ? null : getArrayLiteralFromExpression(thirdArg.body);
3610
+ if (thirdArg && ts$2.isArrowFunction(thirdArg) && thirdArg.parameters[0] && ts$2.isIdentifier(thirdArg.parameters[0].name)) {
3611
+ const arrayLiteral = ts$2.isBlock(thirdArg.body) ? null : getArrayLiteralFromExpression(thirdArg.body);
3593
3612
  if (arrayLiteral) {
3594
- indexEntries = arrayLiteral.elements.filter((element) => ts.isExpression(element));
3613
+ indexEntries = arrayLiteral.elements.filter((element) => ts$2.isExpression(element));
3595
3614
  indexParamName = thirdArg.parameters[0].name.text;
3596
3615
  }
3597
3616
  }
@@ -3619,11 +3638,11 @@ const parseUnitTableDeclaration = (unit) => {
3619
3638
  const readPropertyObject = (source, expectedKey) => {
3620
3639
  const sourceFile = parseSource(`const object = {${source.trim()}};`);
3621
3640
  const statement = sourceFile.statements[0];
3622
- if (!statement || !ts.isVariableStatement(statement)) return null;
3641
+ if (!statement || !ts$2.isVariableStatement(statement)) return null;
3623
3642
  const declaration = statement.declarationList.declarations[0];
3624
- if (!declaration?.initializer || !ts.isObjectLiteralExpression(declaration.initializer)) return null;
3643
+ if (!declaration?.initializer || !ts$2.isObjectLiteralExpression(declaration.initializer)) return null;
3625
3644
  const property = declaration.initializer.properties[0];
3626
- if (!property || !ts.isPropertyAssignment(property) || !property.name || !ts.isObjectLiteralExpression(property.initializer)) return null;
3645
+ if (!property || !ts$2.isPropertyAssignment(property) || !property.name || !ts$2.isObjectLiteralExpression(property.initializer)) return null;
3627
3646
  const propertyName = getPropertyName(property);
3628
3647
  if (expectedKey && propertyName !== expectedKey) return null;
3629
3648
  return {
@@ -3639,21 +3658,21 @@ const getObjectPropertyMap = (object, _sourceFile) => new Map(object.properties.
3639
3658
  }));
3640
3659
  const getFieldRootSignature = (expression, sourceFile) => {
3641
3660
  let current = expression;
3642
- while (ts.isCallExpression(current) && ts.isPropertyAccessExpression(current.expression)) current = current.expression.expression;
3643
- return ts.isCallExpression(current) ? renderNode(current, sourceFile) : null;
3661
+ while (ts$2.isCallExpression(current) && ts$2.isPropertyAccessExpression(current.expression)) current = current.expression.expression;
3662
+ return ts$2.isCallExpression(current) ? renderNode(current, sourceFile) : null;
3644
3663
  };
3645
3664
  const isCompatibleFieldProperty = (existingProperty, existingSourceFile, desiredProperty, desiredSourceFile) => {
3646
- if (!ts.isPropertyAssignment(existingProperty) || !ts.isPropertyAssignment(desiredProperty)) return false;
3665
+ if (!ts$2.isPropertyAssignment(existingProperty) || !ts$2.isPropertyAssignment(desiredProperty)) return false;
3647
3666
  if (renderNode(existingProperty, existingSourceFile) === renderNode(desiredProperty, desiredSourceFile)) return true;
3648
3667
  const existingSignature = getFieldRootSignature(existingProperty.initializer, existingSourceFile);
3649
3668
  const desiredSignature = getFieldRootSignature(desiredProperty.initializer, desiredSourceFile);
3650
3669
  return typeof existingSignature === "string" && existingSignature === desiredSignature;
3651
3670
  };
3652
3671
  const getRelationCompatibilitySignature = (property, sourceFile) => {
3653
- if (!ts.isPropertyAssignment(property) || !ts.isCallExpression(property.initializer)) return null;
3672
+ if (!ts$2.isPropertyAssignment(property) || !ts$2.isCallExpression(property.initializer)) return null;
3654
3673
  const relationKind = renderNormalizedExpression(property.initializer.expression, sourceFile, {});
3655
3674
  const firstArg = property.initializer.arguments[0];
3656
- if (!firstArg || !ts.isObjectLiteralExpression(firstArg)) return relationKind;
3675
+ if (!firstArg || !ts$2.isObjectLiteralExpression(firstArg)) return relationKind;
3657
3676
  const propertyMap = getObjectPropertyMap(firstArg, sourceFile);
3658
3677
  const from = propertyMap.get("from");
3659
3678
  const to = propertyMap.get("to");
@@ -3665,16 +3684,16 @@ const getRelationCompatibilitySignature = (property, sourceFile) => {
3665
3684
  };
3666
3685
  const getIndexIdentity = (expression, sourceFile) => {
3667
3686
  let current = expression;
3668
- while (ts.isCallExpression(current) && ts.isPropertyAccessExpression(current.expression)) current = current.expression.expression;
3669
- if (ts.isCallExpression(current) && ts.isIdentifier(current.expression) && current.arguments[0] && isStringLiteralLike(current.arguments[0])) return `${current.expression.text}:${current.arguments[0].text}`;
3687
+ while (ts$2.isCallExpression(current) && ts$2.isPropertyAccessExpression(current.expression)) current = current.expression.expression;
3688
+ if (ts$2.isCallExpression(current) && ts$2.isIdentifier(current.expression) && current.arguments[0] && isStringLiteralLike(current.arguments[0])) return `${current.expression.text}:${current.arguments[0].text}`;
3670
3689
  return renderNode(current, sourceFile);
3671
3690
  };
3672
3691
  const renderNormalizedExpression = (node, sourceFile, replacements) => {
3673
- if (ts.isIdentifier(node)) return replacements[node.text] ?? node.text;
3692
+ if (ts$2.isIdentifier(node)) return replacements[node.text] ?? node.text;
3674
3693
  if (isStringLiteralLike(node)) return JSON.stringify(node.text);
3675
- if (ts.isPropertyAccessExpression(node)) return `${renderNormalizedExpression(node.expression, sourceFile, replacements)}.${node.name.text}`;
3676
- if (ts.isCallExpression(node)) return `${renderNormalizedExpression(node.expression, sourceFile, replacements)}(${node.arguments.map((argument) => renderNormalizedExpression(argument, sourceFile, replacements)).join(",")})`;
3677
- if (ts.isParenthesizedExpression(node)) return `(${renderNormalizedExpression(node.expression, sourceFile, replacements)})`;
3694
+ if (ts$2.isPropertyAccessExpression(node)) return `${renderNormalizedExpression(node.expression, sourceFile, replacements)}.${node.name.text}`;
3695
+ if (ts$2.isCallExpression(node)) return `${renderNormalizedExpression(node.expression, sourceFile, replacements)}(${node.arguments.map((argument) => renderNormalizedExpression(argument, sourceFile, replacements)).join(",")})`;
3696
+ if (ts$2.isParenthesizedExpression(node)) return `(${renderNormalizedExpression(node.expression, sourceFile, replacements)})`;
3678
3697
  return renderNode(node, sourceFile);
3679
3698
  };
3680
3699
  const mergeNamedEntries = (params) => {
@@ -3852,7 +3871,7 @@ const findRelationsInsertIndex = (source) => {
3852
3871
  const mergeRelationProperty = (params) => {
3853
3872
  const desiredInfo = readPropertyObject(params.desiredRelation, params.tableKey);
3854
3873
  if (!desiredInfo) throw new Error(`Schema patch error: expected relation block for "${params.tableKey}".`);
3855
- if (!ts.isPropertyAssignment(params.existingProperty) || !ts.isObjectLiteralExpression(params.existingProperty.initializer)) throw new Error(`Schema patch conflict in ${params.displayPath}: ${params.pluginKey} relations for table "${params.tableKey}" are incompatible with the existing schema.`);
3874
+ if (!ts$2.isPropertyAssignment(params.existingProperty) || !ts$2.isObjectLiteralExpression(params.existingProperty.initializer)) throw new Error(`Schema patch conflict in ${params.displayPath}: ${params.pluginKey} relations for table "${params.tableKey}" are incompatible with the existing schema.`);
3856
3875
  const existingPropertyName = params.existingProperty.name.getText(params.existingSourceFile);
3857
3876
  const nestedMerge = mergeNamedEntries({
3858
3877
  compatibilityLabel: "relation",
@@ -3920,9 +3939,9 @@ const updateRelationsObject = (source, params) => {
3920
3939
  const printCanonicalObjectEntry = (content) => {
3921
3940
  const sourceFile = parseSource(`const object = {\n${content.trim()}\n};`);
3922
3941
  const statement = sourceFile.statements[0];
3923
- if (!statement || !ts.isVariableStatement(statement)) return content.trim();
3942
+ if (!statement || !ts$2.isVariableStatement(statement)) return content.trim();
3924
3943
  const declaration = statement.declarationList.declarations[0];
3925
- if (!declaration?.initializer || !ts.isObjectLiteralExpression(declaration.initializer)) return content.trim();
3944
+ if (!declaration?.initializer || !ts$2.isObjectLiteralExpression(declaration.initializer)) return content.trim();
3926
3945
  const property = declaration.initializer.properties[0];
3927
3946
  if (!property) return content.trim();
3928
3947
  return renderNode(property, sourceFile);
@@ -3968,9 +3987,9 @@ const readManagedChecksumFromSource = (source, unit) => {
3968
3987
  const mergeOrmImports = (source, importNames) => {
3969
3988
  if (importNames.length === 0) return source;
3970
3989
  const sourceFile = parseSource(source);
3971
- const ormImport = sourceFile.statements.find((statement) => ts.isImportDeclaration(statement) && isStringLiteralLike(statement.moduleSpecifier) && statement.moduleSpecifier.text === "kitcn/orm");
3990
+ const ormImport = sourceFile.statements.find((statement) => ts$2.isImportDeclaration(statement) && isStringLiteralLike(statement.moduleSpecifier) && statement.moduleSpecifier.text === "kitcn/orm");
3972
3991
  if (!ormImport) return `${`import {\n ${[...new Set(importNames)].sort().join(",\n ")},\n} from 'kitcn/orm';\n\n`}${source}`;
3973
- if (!ormImport.importClause?.namedBindings || !ts.isNamedImports(ormImport.importClause.namedBindings)) return source;
3992
+ if (!ormImport.importClause?.namedBindings || !ts$2.isNamedImports(ormImport.importClause.namedBindings)) return source;
3974
3993
  const existingImports = ormImport.importClause.namedBindings.elements.map((element) => element.getText(sourceFile));
3975
3994
  const nextImport = `import {\n ${[...new Set([...existingImports, ...importNames])].sort((a, b) => a.localeCompare(b)).join(",\n ")},\n} from 'kitcn/orm';`;
3976
3995
  return replaceRange(source, ormImport.getStart(sourceFile), ormImport.end, nextImport);
@@ -5125,6 +5144,7 @@ const DEFAULT_AUTH_SCHEMA_ENV = {
5125
5144
  };
5126
5145
  const loadGetAuthTables = async () => (await import("better-auth/db")).getAuthTables;
5127
5146
  const loadConvexAuthPlugin = async () => (await import("@convex-dev/better-auth/plugins")).convex;
5147
+ const ts$1 = createTypeScriptProxy();
5128
5148
  const withAuthSchemaEnv = async (run) => {
5129
5149
  const globalScope = globalThis;
5130
5150
  const originalEntries = Object.fromEntries(Object.keys(DEFAULT_AUTH_SCHEMA_ENV).map((key) => [key, process.env[key]]));
@@ -5157,36 +5177,36 @@ const renderManagedAuthSchemaFile = async ({ authOptions, kind, outputPath }) =>
5157
5177
  })).code;
5158
5178
  };
5159
5179
  const parseRootSchemaUnitsFromExtension = (source) => {
5160
- const sourceFile = ts.createSourceFile("auth-schema.ts", source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
5161
- const ormImport = sourceFile.statements.find((statement) => ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === "kitcn/orm");
5162
- const importNames = ormImport && ts.isImportDeclaration(ormImport) && ormImport.importClause?.namedBindings && ts.isNamedImports(ormImport.importClause.namedBindings) ? ormImport.importClause.namedBindings.elements.map((element) => element.getText(sourceFile)).filter((name) => name !== "defineSchemaExtension") : [];
5180
+ const sourceFile = ts$1.createSourceFile("auth-schema.ts", source, ts$1.ScriptTarget.Latest, true, ts$1.ScriptKind.TS);
5181
+ const ormImport = sourceFile.statements.find((statement) => ts$1.isImportDeclaration(statement) && ts$1.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === "kitcn/orm");
5182
+ const importNames = ormImport && ts$1.isImportDeclaration(ormImport) && ormImport.importClause?.namedBindings && ts$1.isNamedImports(ormImport.importClause.namedBindings) ? ormImport.importClause.namedBindings.elements.map((element) => element.getText(sourceFile)).filter((name) => name !== "defineSchemaExtension") : [];
5163
5183
  const declarations = /* @__PURE__ */ new Map();
5164
5184
  for (const statement of sourceFile.statements) {
5165
- if (!ts.isVariableStatement(statement)) continue;
5166
- for (const declaration of statement.declarationList.declarations) if (declaration.initializer && ts.isCallExpression(declaration.initializer) && ts.isIdentifier(declaration.initializer.expression) && declaration.initializer.expression.text === "convexTable") {
5185
+ if (!ts$1.isVariableStatement(statement)) continue;
5186
+ for (const declaration of statement.declarationList.declarations) if (declaration.initializer && ts$1.isCallExpression(declaration.initializer) && ts$1.isIdentifier(declaration.initializer.expression) && declaration.initializer.expression.text === "convexTable") {
5167
5187
  const firstArg = declaration.initializer.arguments[0];
5168
- if (firstArg && (ts.isStringLiteral(firstArg) || ts.isNoSubstitutionTemplateLiteral(firstArg))) declarations.set(firstArg.text, statement.getText(sourceFile));
5188
+ if (firstArg && (ts$1.isStringLiteral(firstArg) || ts$1.isNoSubstitutionTemplateLiteral(firstArg))) declarations.set(firstArg.text, statement.getText(sourceFile));
5169
5189
  }
5170
5190
  }
5171
5191
  let registrationObject = null;
5172
5192
  let relationObject = null;
5173
5193
  const visit = (node) => {
5174
- if (ts.isCallExpression(node)) {
5175
- if (ts.isIdentifier(node.expression) && node.expression.text === "defineSchemaExtension") {
5194
+ if (ts$1.isCallExpression(node)) {
5195
+ if (ts$1.isIdentifier(node.expression) && node.expression.text === "defineSchemaExtension") {
5176
5196
  const secondArg = node.arguments[1];
5177
- if (secondArg && ts.isObjectLiteralExpression(secondArg) && !registrationObject) registrationObject = secondArg;
5197
+ if (secondArg && ts$1.isObjectLiteralExpression(secondArg) && !registrationObject) registrationObject = secondArg;
5178
5198
  }
5179
- if (ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === "relations" && ts.isCallExpression(node.expression.expression) && ts.isIdentifier(node.expression.expression.expression) && node.expression.expression.expression.text === "defineSchemaExtension") {
5199
+ if (ts$1.isPropertyAccessExpression(node.expression) && node.expression.name.text === "relations" && ts$1.isCallExpression(node.expression.expression) && ts$1.isIdentifier(node.expression.expression.expression) && node.expression.expression.expression.text === "defineSchemaExtension") {
5180
5200
  const secondArg = node.expression.expression.arguments[1];
5181
- if (secondArg && ts.isObjectLiteralExpression(secondArg) && !registrationObject) registrationObject = secondArg;
5201
+ if (secondArg && ts$1.isObjectLiteralExpression(secondArg) && !registrationObject) registrationObject = secondArg;
5182
5202
  const firstArg = node.arguments[0];
5183
- if (firstArg && ts.isArrowFunction(firstArg)) {
5184
- const body = ts.isParenthesizedExpression(firstArg.body) ? firstArg.body.expression : firstArg.body;
5185
- if (ts.isObjectLiteralExpression(body) && !relationObject) relationObject = body;
5203
+ if (firstArg && ts$1.isArrowFunction(firstArg)) {
5204
+ const body = ts$1.isParenthesizedExpression(firstArg.body) ? firstArg.body.expression : firstArg.body;
5205
+ if (ts$1.isObjectLiteralExpression(body) && !relationObject) relationObject = body;
5186
5206
  }
5187
5207
  }
5188
5208
  }
5189
- ts.forEachChild(node, visit);
5209
+ ts$1.forEachChild(node, visit);
5190
5210
  };
5191
5211
  visit(sourceFile);
5192
5212
  if (!registrationObject) return [];
@@ -5194,15 +5214,15 @@ const parseRootSchemaUnitsFromExtension = (source) => {
5194
5214
  const relationObjectLiteral = relationObject;
5195
5215
  const relationMap = /* @__PURE__ */ new Map();
5196
5216
  const relationProperties = relationObjectLiteral?.properties ?? [];
5197
- for (const property of relationProperties) if (ts.isPropertyAssignment(property) && (ts.isIdentifier(property.name) || ts.isStringLiteral(property.name))) {
5198
- const key = ts.isIdentifier(property.name) ? property.name.text : property.name.text;
5217
+ for (const property of relationProperties) if (ts$1.isPropertyAssignment(property) && (ts$1.isIdentifier(property.name) || ts$1.isStringLiteral(property.name))) {
5218
+ const key = ts$1.isIdentifier(property.name) ? property.name.text : property.name.text;
5199
5219
  relationMap.set(key, property.getText(sourceFile));
5200
5220
  }
5201
5221
  return registrationObjectLiteral.properties.flatMap((property) => {
5202
- if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property)) return [];
5222
+ if (!ts$1.isPropertyAssignment(property) && !ts$1.isShorthandPropertyAssignment(property)) return [];
5203
5223
  const propertyName = property.name;
5204
- if (!ts.isIdentifier(propertyName) && !ts.isStringLiteral(propertyName)) return [];
5205
- const key = ts.isIdentifier(propertyName) ? propertyName.text : propertyName.text;
5224
+ if (!ts$1.isIdentifier(propertyName) && !ts$1.isStringLiteral(propertyName)) return [];
5225
+ const key = ts$1.isIdentifier(propertyName) ? propertyName.text : propertyName.text;
5206
5226
  const declaration = declarations.get(key);
5207
5227
  if (!declaration) return [];
5208
5228
  return [{
@@ -8250,6 +8270,7 @@ const createSpinner = (text, options = {}) => {
8250
8270
  const __filename$2 = fileURLToPath(import.meta.url);
8251
8271
  const __dirname$1 = dirname(__filename$2);
8252
8272
  let ownVersion;
8273
+ const ts = createTypeScriptProxy();
8253
8274
  const require = createRequire(import.meta.url);
8254
8275
  const realConvex = join(dirname(require.resolve("convex/package.json")), "bin/main.js");
8255
8276
  const MISSING_BACKFILL_FUNCTION_RE = /could not find function|function .* was not found|unknown function/i;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitcn",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "kitcn - React Query integration and CLI tools for Convex",
5
5
  "keywords": [
6
6
  "convex",