@nicia-ai/typegraph 0.13.0 → 0.15.0

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 (81) hide show
  1. package/dist/backend/postgres/index.cjs +34 -28
  2. package/dist/backend/postgres/index.cjs.map +1 -1
  3. package/dist/backend/postgres/index.d.cts +5 -5
  4. package/dist/backend/postgres/index.d.ts +5 -5
  5. package/dist/backend/postgres/index.js +16 -10
  6. package/dist/backend/postgres/index.js.map +1 -1
  7. package/dist/backend/sqlite/index.cjs +14 -14
  8. package/dist/backend/sqlite/index.d.cts +5 -5
  9. package/dist/backend/sqlite/index.d.ts +5 -5
  10. package/dist/backend/sqlite/index.js +4 -4
  11. package/dist/backend/sqlite/local.cjs +7 -7
  12. package/dist/backend/sqlite/local.cjs.map +1 -1
  13. package/dist/backend/sqlite/local.d.cts +3 -3
  14. package/dist/backend/sqlite/local.d.ts +3 -3
  15. package/dist/backend/sqlite/local.js +7 -7
  16. package/dist/backend/sqlite/local.js.map +1 -1
  17. package/dist/{chunk-7VITUTRA.cjs → chunk-3HQLOKS5.cjs} +163 -13
  18. package/dist/chunk-3HQLOKS5.cjs.map +1 -0
  19. package/dist/{chunk-NZMKJHE2.cjs → chunk-56RQFK7U.cjs} +22 -15
  20. package/dist/chunk-56RQFK7U.cjs.map +1 -0
  21. package/dist/{chunk-U3452TEU.js → chunk-6GWJH6AR.js} +15 -27
  22. package/dist/chunk-6GWJH6AR.js.map +1 -0
  23. package/dist/{chunk-2XPKLHHH.cjs → chunk-CRMN2NOM.cjs} +247 -208
  24. package/dist/chunk-CRMN2NOM.cjs.map +1 -0
  25. package/dist/{chunk-54WJF3DW.js → chunk-GNIYZKBI.js} +29 -3
  26. package/dist/chunk-GNIYZKBI.js.map +1 -0
  27. package/dist/{chunk-52WSY6G5.js → chunk-HWWF3FOP.js} +158 -119
  28. package/dist/chunk-HWWF3FOP.js.map +1 -0
  29. package/dist/{chunk-PYV4ADC6.js → chunk-L4ON6RJF.js} +164 -14
  30. package/dist/chunk-L4ON6RJF.js.map +1 -0
  31. package/dist/{chunk-JQDWEX6V.cjs → chunk-LELLOHJK.cjs} +22 -34
  32. package/dist/chunk-LELLOHJK.cjs.map +1 -0
  33. package/dist/{chunk-2WVFEIHR.cjs → chunk-MME3H4ZF.cjs} +40 -2
  34. package/dist/chunk-MME3H4ZF.cjs.map +1 -0
  35. package/dist/{chunk-J4SICP3X.js → chunk-XZBAGJJH.js} +15 -8
  36. package/dist/chunk-XZBAGJJH.js.map +1 -0
  37. package/dist/{ddl-BJg93HDN.d.cts → ddl-BBo2EcFc.d.cts} +2 -2
  38. package/dist/{ddl-CsfWcl_B.d.ts → ddl-D4jlcOH_.d.ts} +2 -2
  39. package/dist/index.cjs +473 -625
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +12 -9
  42. package/dist/index.d.ts +12 -9
  43. package/dist/index.js +434 -586
  44. package/dist/index.js.map +1 -1
  45. package/dist/indexes/index.cjs +16 -16
  46. package/dist/indexes/index.d.cts +2 -2
  47. package/dist/indexes/index.d.ts +2 -2
  48. package/dist/indexes/index.js +2 -2
  49. package/dist/interchange/index.d.cts +3 -3
  50. package/dist/interchange/index.d.ts +3 -3
  51. package/dist/{manager-DGSnJa1v.d.cts → manager-Bj1UEnhE.d.cts} +2 -2
  52. package/dist/{manager-BCLhWysp.d.ts → manager-Chhrq1vl.d.ts} +2 -2
  53. package/dist/profiler/index.cjs +6 -6
  54. package/dist/profiler/index.cjs.map +1 -1
  55. package/dist/profiler/index.d.cts +3 -3
  56. package/dist/profiler/index.d.ts +3 -3
  57. package/dist/profiler/index.js +6 -6
  58. package/dist/profiler/index.js.map +1 -1
  59. package/dist/schema/index.cjs +20 -20
  60. package/dist/schema/index.d.cts +4 -4
  61. package/dist/schema/index.d.ts +4 -4
  62. package/dist/schema/index.js +2 -2
  63. package/dist/{sqlite-H01wIXvB.d.ts → sqlite-Blq-AhmK.d.ts} +1 -1
  64. package/dist/{sqlite-DVca_IIy.d.cts → sqlite-DE-6NWtC.d.cts} +1 -1
  65. package/dist/{store-Bmdt_dS6.d.cts → store-BNercm8P.d.cts} +86 -31
  66. package/dist/{store-6-vH0ZIj.d.ts → store-CD_0yf2s.d.ts} +86 -31
  67. package/dist/{types-GLkwvQvS.d.cts → types-B3mmOMJV.d.cts} +20 -6
  68. package/dist/{types-C8Ra3ROE.d.cts → types-CZd2PEOc.d.cts} +8 -2
  69. package/dist/{types-CC8eB0PB.d.ts → types-Ceb01czq.d.ts} +8 -2
  70. package/dist/{types-1YJKodRv.d.ts → types-ThB4cFLp.d.ts} +20 -6
  71. package/package.json +1 -1
  72. package/dist/chunk-2WVFEIHR.cjs.map +0 -1
  73. package/dist/chunk-2XPKLHHH.cjs.map +0 -1
  74. package/dist/chunk-52WSY6G5.js.map +0 -1
  75. package/dist/chunk-54WJF3DW.js.map +0 -1
  76. package/dist/chunk-7VITUTRA.cjs.map +0 -1
  77. package/dist/chunk-J4SICP3X.js.map +0 -1
  78. package/dist/chunk-JQDWEX6V.cjs.map +0 -1
  79. package/dist/chunk-NZMKJHE2.cjs.map +0 -1
  80. package/dist/chunk-PYV4ADC6.js.map +0 -1
  81. package/dist/chunk-U3452TEU.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants.ts","../src/query/dialect/postgres.ts","../src/query/dialect/sqlite.ts","../src/query/dialect/index.ts","../src/utils/hash.ts","../src/system-fields.ts"],"names":["sql"],"mappings":"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","file":"chunk-GNIYZKBI.js","sourcesContent":["/**\n * Shared constants used across the TypeGraph codebase.\n */\n\n// ============================================================\n// PostgreSQL Limits\n// ============================================================\n\n/**\n * PostgreSQL truncates identifiers longer than 63 bytes.\n * Used for column aliases, index names, and other generated identifiers.\n */\nexport const MAX_PG_IDENTIFIER_LENGTH = 63;\n\n/** Maximum byte length for the truncated portion of a generated identifier. */\nexport const TRUNCATED_IDENTIFIER_MAX_LENGTH = 54;\n\n/** Maximum length for a single component (kind name, field name) in a generated identifier. */\nexport const IDENTIFIER_COMPONENT_MAX_LENGTH = 20;\n\n// ============================================================\n// FNV-1a Hash Constants\n// ============================================================\n\n/** FNV-1a 32-bit offset basis. */\nexport const FNV1A_OFFSET_BASIS = 0x81_1c_9d_c5;\n\n/** FNV-1a 32-bit prime. */\nexport const FNV1A_PRIME = 0x01_00_01_93;\n\n// ============================================================\n// Pagination\n// ============================================================\n\n/** Default page size for paginate() and cursor-based pagination. */\nexport const DEFAULT_PAGINATION_LIMIT = 20;\n\n/** Default batch size for streaming query results. */\nexport const DEFAULT_STREAM_BATCH_SIZE = 1000;\n\n// ============================================================\n// Index Type Markers\n// ============================================================\n\nexport const NODE_INDEX_TYPE_MARKER = \"typegraph_node_index\" as const;\nexport const EDGE_INDEX_TYPE_MARKER = \"typegraph_edge_index\" as const;\n\n// ============================================================\n// Path Delimiters\n// ============================================================\n\n/** SQLite stores array paths as pipe-delimited strings: |id1|id2|id3| */\nexport const SQLITE_PATH_DELIMITER = \"|\";\n\n/** PostgreSQL text arrays use comma-separated elements: {id1,id2,id3} */\nexport const PG_PATH_ELEMENT_SEPARATOR = \",\";\n\n/** PostgreSQL text array start delimiter. */\nexport const PG_ARRAY_START = \"{\";\n\n/** PostgreSQL text array end delimiter. */\nexport const PG_ARRAY_END = \"}\";\n","/**\n * PostgreSQL Dialect Adapter\n *\n * Implements dialect-specific SQL generation for PostgreSQL databases.\n * Uses PostgreSQL's native JSONB operators for JSON operations.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { type JsonPointer, parseJsonPointer } from \"../json-pointer\";\nimport { type DialectAdapter } from \"./types\";\n\n/**\n * Escapes a string for use in a PostgreSQL string literal.\n * Uses single quotes and escapes embedded single quotes.\n */\nfunction escapePostgresLiteral(value: string): string {\n // PostgreSQL uses '' to escape single quotes inside string literals\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\n/**\n * Converts a JSON pointer to PostgreSQL's text array path.\n *\n * Uses raw SQL (non-parameterized) to ensure the same expression text\n * is generated when the same field is used in multiple clauses (SELECT, GROUP BY).\n * This is safe because JSON pointers come from schema definitions, not user input.\n *\n * @example\n * \"/name\" → ARRAY['name']\n * \"/items/0\" → ARRAY['items', '0']\n * \"/a/b/c\" → ARRAY['a', 'b', 'c']\n */\nfunction toPostgresPath(pointer: JsonPointer): SQL {\n if (!pointer || pointer === \"\" || pointer === \"/\") {\n return sql.raw(\"ARRAY[]::text[]\");\n }\n\n const segments = parseJsonPointer(pointer);\n if (segments.length === 0) {\n return sql.raw(\"ARRAY[]::text[]\");\n }\n\n // Use raw SQL for path segments to ensure identical SQL text\n // when the same field is used in multiple clauses (e.g., SELECT and GROUP BY)\n const escapedSegments = segments\n .map((segment) => escapePostgresLiteral(segment))\n .join(\", \");\n return sql.raw(`ARRAY[${escapedSegments}]`);\n}\n\n/**\n * PostgreSQL dialect adapter implementation.\n */\nexport const postgresDialect: DialectAdapter = {\n name: \"postgres\",\n capabilities: {\n standardQueryStrategy: \"cte_project\",\n recursiveQueryStrategy: \"recursive_cte\",\n setOperationStrategy: \"standard_parenthesized\",\n materializeIntermediateTraversalCtes: false,\n forceRecursiveWorktableOuterJoinOrder: false,\n vectorPredicateStrategy: \"native\",\n vectorMetrics: [\"cosine\", \"l2\", \"inner_product\"] as const,\n },\n\n // ============================================================\n // JSON Path Operations\n // ============================================================\n\n compilePath(pointer) {\n return toPostgresPath(pointer);\n },\n\n jsonExtract(column, pointer) {\n // #> returns JSONB value at path\n const path = toPostgresPath(pointer);\n return sql`${column} #> ${path}`;\n },\n\n jsonExtractText(column, pointer) {\n // #>> returns text value at path\n const path = toPostgresPath(pointer);\n return sql`${column} #>> ${path}`;\n },\n\n jsonExtractNumber(column, pointer) {\n // Extract as text then cast to numeric\n const path = toPostgresPath(pointer);\n return sql`(${column} #>> ${path})::numeric`;\n },\n\n jsonExtractBoolean(column, pointer) {\n // Extract as text then cast to boolean\n const path = toPostgresPath(pointer);\n return sql`(${column} #>> ${path})::boolean`;\n },\n\n jsonExtractDate(column, pointer) {\n // Extract as text then cast to timestamptz\n const path = toPostgresPath(pointer);\n return sql`(${column} #>> ${path})::timestamptz`;\n },\n\n // ============================================================\n // JSON Array Operations\n // ============================================================\n\n jsonArrayLength(column) {\n return sql`jsonb_array_length(${column})`;\n },\n\n jsonArrayContains(column, value) {\n // @> checks if left contains right\n const jsonValue = JSON.stringify([value]);\n return sql`${column} @> ${jsonValue}::jsonb`;\n },\n\n jsonArrayContainsAll(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=1\");\n }\n\n // @> with full array checks all values\n const jsonValue = JSON.stringify(values);\n return sql`${column} @> ${jsonValue}::jsonb`;\n },\n\n jsonArrayContainsAny(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=0\");\n }\n\n // Check each value with @> and OR them together\n // PostgreSQL doesn't have a native \"overlaps\" for jsonb arrays\n const conditions = values.map((value) => {\n const jsonValue = JSON.stringify([value]);\n return sql`${column} @> ${jsonValue}::jsonb`;\n });\n return sql`(${sql.join(conditions, sql` OR `)})`;\n },\n\n // ============================================================\n // JSON Object Operations\n // ============================================================\n\n jsonHasPath(column, pointer) {\n const path = toPostgresPath(pointer);\n return sql`${column} #> ${path} IS NOT NULL`;\n },\n\n jsonPathIsNull(column, pointer) {\n const path = toPostgresPath(pointer);\n // Check both SQL NULL and JSON null literal\n return sql`(${column} #> ${path} IS NULL OR ${column} #>> ${path} = 'null')`;\n },\n\n jsonPathIsNotNull(column, pointer) {\n const path = toPostgresPath(pointer);\n return sql`(${column} #> ${path} IS NOT NULL AND ${column} #>> ${path} != 'null')`;\n },\n\n // ============================================================\n // String Operations\n // ============================================================\n\n ilike(column, pattern) {\n // PostgreSQL has native ILIKE operator\n return sql`${column} ILIKE ${pattern}`;\n },\n\n // ============================================================\n // Recursive CTE Path Operations\n // ============================================================\n\n initializePath(nodeId) {\n // PostgreSQL uses text arrays: ARRAY[id]\n return sql`ARRAY[${nodeId}]`;\n },\n\n extendPath(currentPath, nodeId) {\n // Array concatenation: path || id\n return sql`${currentPath} || ${nodeId}`;\n },\n\n cycleCheck(nodeId, path) {\n // Check that id is NOT in array path\n // Returns TRUE if no cycle (id not in array)\n return sql`${nodeId} != ALL(${path})`;\n },\n\n // ============================================================\n // Type Utilities\n // ============================================================\n\n currentTimestamp() {\n return sql`NOW()`;\n },\n\n // ============================================================\n // Value Binding & Literals\n // ============================================================\n\n bindValue(value) {\n // PostgreSQL supports native booleans, no conversion needed\n return value;\n },\n\n booleanLiteral(value) {\n return sql.raw(this.booleanLiteralString(value));\n },\n\n booleanLiteralString(value) {\n return value ? \"TRUE\" : \"FALSE\";\n },\n\n quoteIdentifier(name) {\n // PostgreSQL uses double quotes, escape embedded quotes by doubling\n return `\"${name.replaceAll('\"', '\"\"')}\"`;\n },\n\n // ============================================================\n // Vector Operations\n // ============================================================\n\n supportsVectors: true,\n\n vectorDistance(column, embedding, metric) {\n const formatted = this.formatEmbedding(embedding);\n // Column is native VECTOR type, no cast needed\n switch (metric) {\n case \"cosine\": {\n // Cosine distance: 1 - cosine_similarity\n // Lower is more similar (0 = identical)\n return sql`(${column} <=> ${formatted})`;\n }\n case \"l2\": {\n // Euclidean (L2) distance\n // Lower is more similar (0 = identical)\n return sql`(${column} <-> ${formatted})`;\n }\n case \"inner_product\": {\n // Inner product distance (negative inner product)\n // Note: pgvector uses <#> which returns NEGATIVE inner product\n // More negative = more similar for normalized vectors\n return sql`(${column} <#> ${formatted})`;\n }\n default: {\n const _exhaustive: never = metric;\n throw new Error(\"Unsupported vector metric: \" + String(_exhaustive));\n }\n }\n },\n\n formatEmbedding(embedding) {\n // Validate all values are finite numbers to prevent injection\n for (const [index, value] of embedding.entries()) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new TypeError(\n `embedding[${index}] must be a finite number, got: ${value}`,\n );\n }\n }\n // Format as PostgreSQL vector literal: '[1.0,2.0,3.0]'::vector\n // Query embedding still needs cast since it's a literal string\n const asString = `[${embedding.join(\",\")}]`;\n return sql`${asString}::vector`;\n },\n};\n","/**\n * SQLite Dialect Adapter\n *\n * Implements dialect-specific SQL generation for SQLite databases.\n * Uses SQLite's JSON1 extension for JSON operations.\n */\nimport { sql } from \"drizzle-orm\";\n\nimport { type JsonPointer, parseJsonPointer } from \"../json-pointer\";\nimport { type DialectAdapter } from \"./types\";\n\n/**\n * Escapes a string for use in a SQLite string literal.\n * SQLite uses single quotes and escapes embedded single quotes by doubling them.\n */\nfunction escapeSqliteLiteral(value: string): string {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\n/**\n * Converts a JSON pointer to SQLite's JSON path syntax.\n *\n * @example\n * \"/name\" → \"$.\\\"name\\\"\"\n * \"/items/0\" → \"$.\\\"items\\\"[0]\"\n * \"/a/b/c\" → \"$.\\\"a\\\".\\\"b\\\".\\\"c\\\"\"\n */\nfunction toSqlitePath(pointer: JsonPointer): string {\n if (!pointer || pointer === \"\" || pointer === \"/\") {\n return \"$\";\n }\n\n const segments = parseJsonPointer(pointer);\n const parts: string[] = [\"$\"];\n\n for (const segment of segments) {\n if (isArrayIndex(segment)) {\n parts.push(`[${segment}]`);\n } else {\n // Quote the key to handle special characters\n parts.push(`.${JSON.stringify(segment)}`);\n }\n }\n\n return parts.join(\"\");\n}\n\n/**\n * Checks if a JSON pointer segment is an array index.\n */\nfunction isArrayIndex(segment: string): boolean {\n return /^\\d+$/.test(segment);\n}\n\n/**\n * SQLite dialect adapter implementation.\n */\nexport const sqliteDialect: DialectAdapter = {\n name: \"sqlite\",\n capabilities: {\n standardQueryStrategy: \"cte_project\",\n recursiveQueryStrategy: \"recursive_cte\",\n setOperationStrategy: \"sqlite_compound\",\n materializeIntermediateTraversalCtes: true,\n forceRecursiveWorktableOuterJoinOrder: true,\n vectorPredicateStrategy: \"native\",\n vectorMetrics: [\"cosine\", \"l2\"] as const,\n },\n\n // ============================================================\n // JSON Path Operations\n // ============================================================\n\n compilePath(pointer) {\n // Use raw SQL to ensure the path is a literal, which allows expression\n // indexes on json_extract(...) to be used by the query planner.\n return sql.raw(escapeSqliteLiteral(toSqlitePath(pointer)));\n },\n\n jsonExtract(column, pointer) {\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractText(column, pointer) {\n // SQLite's json_extract returns the native JSON type, which works\n // for text comparisons. For explicit text, we use the same function.\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractNumber(column, pointer) {\n // SQLite json_extract returns numbers natively when the value is numeric\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractBoolean(column, pointer) {\n // SQLite json_extract returns 0/1 for boolean values\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n jsonExtractDate(column, pointer) {\n // SQLite stores dates as ISO strings, json_extract returns them as text\n const path = toSqlitePath(pointer);\n return sql`json_extract(${column}, ${sql.raw(escapeSqliteLiteral(path))})`;\n },\n\n // ============================================================\n // JSON Array Operations\n // ============================================================\n\n jsonArrayLength(column) {\n return sql`json_array_length(${column})`;\n },\n\n jsonArrayContains(column, value) {\n return sql`EXISTS (SELECT 1 FROM json_each(${column}) WHERE json_each.value = ${value})`;\n },\n\n jsonArrayContainsAll(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=1\");\n }\n\n const conditions = values.map(\n (value) =>\n sql`EXISTS (SELECT 1 FROM json_each(${column}) WHERE json_each.value = ${value})`,\n );\n return sql`(${sql.join(conditions, sql` AND `)})`;\n },\n\n jsonArrayContainsAny(column, values) {\n if (values.length === 0) {\n return sql.raw(\"1=0\");\n }\n\n const conditions = values.map(\n (value) =>\n sql`EXISTS (SELECT 1 FROM json_each(${column}) WHERE json_each.value = ${value})`,\n );\n return sql`(${sql.join(conditions, sql` OR `)})`;\n },\n\n // ============================================================\n // JSON Object Operations\n // ============================================================\n\n jsonHasPath(column, pointer) {\n const path = toSqlitePath(pointer);\n return sql`json_type(${column}, ${sql.raw(escapeSqliteLiteral(path))}) IS NOT NULL`;\n },\n\n jsonPathIsNull(column, pointer) {\n const path = toSqlitePath(pointer);\n const pathSql = sql.raw(escapeSqliteLiteral(path));\n return sql`(json_extract(${column}, ${pathSql}) IS NULL OR json_type(${column}, ${pathSql}) = 'null')`;\n },\n\n jsonPathIsNotNull(column, pointer) {\n const path = toSqlitePath(pointer);\n const pathSql = sql.raw(escapeSqliteLiteral(path));\n return sql`(json_extract(${column}, ${pathSql}) IS NOT NULL AND json_type(${column}, ${pathSql}) != 'null')`;\n },\n\n // ============================================================\n // String Operations\n // ============================================================\n\n ilike(column, pattern) {\n // SQLite LIKE is case-insensitive for ASCII by default, but we use\n // LOWER() for consistency with non-ASCII characters\n return sql`LOWER(${column}) LIKE LOWER(${pattern})`;\n },\n\n // ============================================================\n // Recursive CTE Path Operations\n // ============================================================\n\n initializePath(nodeId) {\n // SQLite uses string-based paths with delimiters: '|id|'\n return sql`'|' || ${nodeId} || '|'`;\n },\n\n extendPath(currentPath, nodeId) {\n // Append: path || id || '|'\n return sql`${currentPath} || ${nodeId} || '|'`;\n },\n\n cycleCheck(nodeId, path) {\n // Check that id is NOT in path using INSTR\n // Returns TRUE if no cycle (id not found in path)\n return sql`INSTR(${path}, '|' || ${nodeId} || '|') = 0`;\n },\n\n // ============================================================\n // Type Utilities\n // ============================================================\n\n currentTimestamp() {\n // Keep ISO-8601 format aligned with stored timestamps from Date.toISOString()\n // so string-based temporal comparisons remain correct in SQLite TEXT columns.\n return sql`strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;\n },\n\n // ============================================================\n // Value Binding & Literals\n // ============================================================\n\n bindValue(value) {\n // SQLite doesn't support native booleans, convert to 0/1\n if (typeof value === \"boolean\") {\n return value ? 1 : 0;\n }\n return value;\n },\n\n booleanLiteral(value) {\n return sql.raw(this.booleanLiteralString(value));\n },\n\n booleanLiteralString(value) {\n return value ? \"1\" : \"0\";\n },\n\n quoteIdentifier(name) {\n // SQLite uses double quotes (or backticks), escape embedded quotes by doubling\n return `\"${name.replaceAll('\"', '\"\"')}\"`;\n },\n\n // ============================================================\n // Vector Operations\n // ============================================================\n\n supportsVectors: true,\n\n vectorDistance(column, embedding, metric) {\n // sqlite-vec functions expect vec_f32 format for the query embedding\n const formatted = this.formatEmbedding(embedding);\n switch (metric) {\n case \"cosine\": {\n // Cosine distance: 1 - cosine_similarity\n // Lower is more similar (0 = identical)\n return sql`vec_distance_cosine(${column}, ${formatted})`;\n }\n case \"l2\": {\n // Euclidean (L2) distance\n // Lower is more similar (0 = identical)\n return sql`vec_distance_l2(${column}, ${formatted})`;\n }\n case \"inner_product\": {\n // sqlite-vec does not support inner product distance\n // See: https://alexgarcia.xyz/sqlite-vec/api-reference.html\n throw new Error(\n \"Inner product distance is not supported by sqlite-vec. Use 'cosine' or 'l2' metrics instead.\",\n );\n }\n default: {\n const _exhaustive: never = metric;\n throw new Error(\"Unsupported vector metric: \" + String(_exhaustive));\n }\n }\n },\n\n formatEmbedding(embedding) {\n // Validate all values are finite numbers\n for (const [index, value] of embedding.entries()) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new TypeError(\n `embedding[${index}] must be a finite number, got: ${value}`,\n );\n }\n }\n // sqlite-vec uses vec_f32() to convert JSON array to binary format\n const asJson = JSON.stringify(embedding);\n return sql`vec_f32(${asJson})`;\n },\n};\n","/**\n * SQL Dialect Module\n *\n * Provides dialect adapters for different SQL databases.\n * Use `getDialect()` to get the appropriate adapter for a dialect name.\n */\n\nexport { postgresDialect } from \"./postgres\";\nexport { sqliteDialect } from \"./sqlite\";\nexport type {\n DialectAdapter,\n DialectCapabilities,\n DialectRecursiveQueryStrategy,\n DialectSetOperationStrategy,\n DialectStandardQueryStrategy,\n DialectVectorPredicateStrategy,\n SqlDialect,\n} from \"./types\";\n\nimport { postgresDialect } from \"./postgres\";\nimport { sqliteDialect } from \"./sqlite\";\nimport { type DialectAdapter, type SqlDialect } from \"./types\";\n\n/**\n * Map of dialect names to their adapters.\n */\nconst DIALECT_ADAPTERS: Record<SqlDialect, DialectAdapter> = {\n sqlite: sqliteDialect,\n postgres: postgresDialect,\n};\n\n/**\n * Gets the dialect adapter for a given dialect name.\n *\n * @param dialect - The dialect name (\"sqlite\" or \"postgres\")\n * @returns The dialect adapter\n *\n * @example\n * ```typescript\n * const adapter = getDialect(\"postgres\");\n * const sql = adapter.jsonExtract(column, \"/name\");\n * ```\n */\nexport function getDialect(dialect: SqlDialect): DialectAdapter {\n return DIALECT_ADAPTERS[dialect];\n}\n\n/**\n * Default dialect used when none is specified.\n */\nexport const DEFAULT_DIALECT: SqlDialect = \"sqlite\";\n","/**\n * FNV-1a hash utilities.\n *\n * FNV-1a is a fast, non-cryptographic hash function used for generating\n * short, deterministic, collision-resistant identifiers (column aliases,\n * index name suffixes, etc.).\n */\nimport { FNV1A_OFFSET_BASIS, FNV1A_PRIME } from \"../constants\";\n\n/**\n * FNV-1a hash of `input`, returned as a base-36 encoded string.\n */\nexport function fnv1aBase36(input: string): string {\n let hash = FNV1A_OFFSET_BASIS;\n for (const character of input) {\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined) continue;\n hash ^= codePoint;\n hash = Math.imul(hash, FNV1A_PRIME);\n }\n return (hash >>> 0).toString(36);\n}\n","export const NODE_META_KEYS = [\n \"version\",\n \"validFrom\",\n \"validTo\",\n \"createdAt\",\n \"updatedAt\",\n \"deletedAt\",\n] as const;\n\nexport const EDGE_META_KEYS = [\n \"validFrom\",\n \"validTo\",\n \"createdAt\",\n \"updatedAt\",\n \"deletedAt\",\n] as const;\n"]}
@@ -1,9 +1,30 @@
1
1
  import { DatabaseOperationError, UniquenessError } from './chunk-SJ2QMDXY.js';
2
- import { buildSqliteNodeIndexBuilders, buildSqliteEdgeIndexBuilders, buildPostgresNodeIndexBuilders, buildPostgresEdgeIndexBuilders } from './chunk-U3452TEU.js';
3
- import { sqliteTable, text, integer, primaryKey, index, blob, getTableConfig } from 'drizzle-orm/sqlite-core';
4
- import { customType, pgTable, timestamp, integer as integer$1, jsonb, text as text$1, primaryKey as primaryKey$1, index as index$1, boolean, getTableConfig as getTableConfig$1 } from 'drizzle-orm/pg-core';
2
+ import { buildPostgresNodeIndexBuilders, buildPostgresEdgeIndexBuilders, buildSqliteNodeIndexBuilders, buildSqliteEdgeIndexBuilders } from './chunk-6GWJH6AR.js';
3
+ import { MAX_PG_IDENTIFIER_LENGTH } from './chunk-GNIYZKBI.js';
4
+ import { customType, pgTable, timestamp, integer, jsonb, text, primaryKey, index, boolean, getTableConfig as getTableConfig$1 } from 'drizzle-orm/pg-core';
5
+ import { sqliteTable, text as text$1, integer as integer$1, primaryKey as primaryKey$1, index as index$1, blob, getTableConfig } from 'drizzle-orm/sqlite-core';
5
6
  import { sql, getTableName } from 'drizzle-orm';
6
7
 
8
+ var vector = customType({
9
+ dataType(config) {
10
+ return config?.dimensions ? `vector(${config.dimensions})` : "vector";
11
+ },
12
+ toDriver(value) {
13
+ return `[${value.join(",")}]`;
14
+ },
15
+ fromDriver(value) {
16
+ if (Array.isArray(value)) {
17
+ return value;
18
+ }
19
+ const content = value.slice(1, -1);
20
+ if (content === "") {
21
+ return [];
22
+ }
23
+ return content.split(",").map((s) => Number.parseFloat(s.trim()));
24
+ }
25
+ });
26
+
27
+ // src/backend/drizzle/schema/postgres.ts
7
28
  var DEFAULT_TABLE_NAMES = {
8
29
  nodes: "typegraph_nodes",
9
30
  edges: "typegraph_edges",
@@ -11,22 +32,22 @@ var DEFAULT_TABLE_NAMES = {
11
32
  schemaVersions: "typegraph_schema_versions",
12
33
  embeddings: "typegraph_node_embeddings"
13
34
  };
14
- function createSqliteTables(names = {}, options = {}) {
35
+ function createPostgresTables(names = {}, options = {}) {
15
36
  const n = { ...DEFAULT_TABLE_NAMES, ...names };
16
37
  const indexes = options.indexes ?? [];
17
- const nodes3 = sqliteTable(
38
+ const nodes3 = pgTable(
18
39
  n.nodes,
19
40
  {
20
41
  graphId: text("graph_id").notNull(),
21
42
  kind: text("kind").notNull(),
22
43
  id: text("id").notNull(),
23
- props: text("props").notNull(),
44
+ props: jsonb("props").notNull(),
24
45
  version: integer("version").notNull().default(1),
25
- validFrom: text("valid_from"),
26
- validTo: text("valid_to"),
27
- createdAt: text("created_at").notNull(),
28
- updatedAt: text("updated_at").notNull(),
29
- deletedAt: text("deleted_at")
46
+ validFrom: timestamp("valid_from", { withTimezone: true }),
47
+ validTo: timestamp("valid_to", { withTimezone: true }),
48
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
49
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull(),
50
+ deletedAt: timestamp("deleted_at", { withTimezone: true })
30
51
  },
31
52
  (t) => [
32
53
  primaryKey({ columns: [t.graphId, t.kind, t.id] }),
@@ -39,10 +60,10 @@ function createSqliteTables(names = {}, options = {}) {
39
60
  ),
40
61
  index(`${n.nodes}_deleted_idx`).on(t.graphId, t.deletedAt),
41
62
  index(`${n.nodes}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),
42
- ...buildSqliteNodeIndexBuilders(t, indexes)
63
+ ...buildPostgresNodeIndexBuilders(t, indexes)
43
64
  ]
44
65
  );
45
- const edges3 = sqliteTable(
66
+ const edges3 = pgTable(
46
67
  n.edges,
47
68
  {
48
69
  graphId: text("graph_id").notNull(),
@@ -52,12 +73,12 @@ function createSqliteTables(names = {}, options = {}) {
52
73
  fromId: text("from_id").notNull(),
53
74
  toKind: text("to_kind").notNull(),
54
75
  toId: text("to_id").notNull(),
55
- props: text("props").notNull(),
56
- validFrom: text("valid_from"),
57
- validTo: text("valid_to"),
58
- createdAt: text("created_at").notNull(),
59
- updatedAt: text("updated_at").notNull(),
60
- deletedAt: text("deleted_at")
76
+ props: jsonb("props").notNull(),
77
+ validFrom: timestamp("valid_from", { withTimezone: true }),
78
+ validTo: timestamp("valid_to", { withTimezone: true }),
79
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
80
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull(),
81
+ deletedAt: timestamp("deleted_at", { withTimezone: true })
61
82
  },
62
83
  (t) => [
63
84
  primaryKey({ columns: [t.graphId, t.id] }),
@@ -98,10 +119,10 @@ function createSqliteTables(names = {}, options = {}) {
98
119
  t.fromId,
99
120
  t.validTo
100
121
  ),
101
- ...buildSqliteEdgeIndexBuilders(t, indexes)
122
+ ...buildPostgresEdgeIndexBuilders(t, indexes)
102
123
  ]
103
124
  );
104
- const uniques3 = sqliteTable(
125
+ const uniques3 = pgTable(
105
126
  n.uniques,
106
127
  {
107
128
  graphId: text("graph_id").notNull(),
@@ -110,7 +131,7 @@ function createSqliteTables(names = {}, options = {}) {
110
131
  key: text("key").notNull(),
111
132
  nodeId: text("node_id").notNull(),
112
133
  concreteKind: text("concrete_kind").notNull(),
113
- deletedAt: text("deleted_at")
134
+ deletedAt: timestamp("deleted_at", { withTimezone: true })
114
135
  },
115
136
  (t) => [
116
137
  primaryKey({
@@ -119,38 +140,34 @@ function createSqliteTables(names = {}, options = {}) {
119
140
  index(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId)
120
141
  ]
121
142
  );
122
- const schemaVersions3 = sqliteTable(
143
+ const schemaVersions3 = pgTable(
123
144
  n.schemaVersions,
124
145
  {
125
146
  graphId: text("graph_id").notNull(),
126
147
  version: integer("version").notNull(),
127
148
  schemaHash: text("schema_hash").notNull(),
128
- schemaDoc: text("schema_doc").notNull(),
129
- createdAt: text("created_at").notNull(),
130
- isActive: integer("is_active", { mode: "boolean" }).notNull().default(false)
149
+ schemaDoc: jsonb("schema_doc").notNull(),
150
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
151
+ isActive: boolean("is_active").notNull().default(false)
131
152
  },
132
153
  (t) => [
133
154
  primaryKey({ columns: [t.graphId, t.version] }),
134
155
  index(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive)
135
156
  ]
136
157
  );
137
- const embeddings3 = sqliteTable(
158
+ const embeddings3 = pgTable(
138
159
  n.embeddings,
139
160
  {
140
161
  graphId: text("graph_id").notNull(),
141
162
  nodeKind: text("node_kind").notNull(),
142
163
  nodeId: text("node_id").notNull(),
143
164
  fieldPath: text("field_path").notNull(),
144
- /**
145
- * Embedding vector.
146
- * Stored as BLOB for sqlite-vec binary format, or JSON text for fallback.
147
- * For sqlite-vec: use vec_f32() to convert JSON array to binary.
148
- */
149
- embedding: blob("embedding", { mode: "buffer" }).notNull(),
165
+ /** Embedding vector stored as native pgvector type */
166
+ embedding: vector("embedding").notNull(),
150
167
  /** Number of dimensions (for validation) */
151
168
  dimensions: integer("dimensions").notNull(),
152
- createdAt: text("created_at").notNull(),
153
- updatedAt: text("updated_at").notNull()
169
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
170
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull()
154
171
  },
155
172
  (t) => [
156
173
  primaryKey({
@@ -172,28 +189,8 @@ function createSqliteTables(names = {}, options = {}) {
172
189
  );
173
190
  return { nodes: nodes3, edges: edges3, uniques: uniques3, schemaVersions: schemaVersions3, embeddings: embeddings3 };
174
191
  }
175
- var tables = createSqliteTables();
192
+ var tables = createPostgresTables();
176
193
  var { nodes, edges, uniques, schemaVersions, embeddings } = tables;
177
- var vector = customType({
178
- dataType(config) {
179
- return config?.dimensions ? `vector(${config.dimensions})` : "vector";
180
- },
181
- toDriver(value) {
182
- return `[${value.join(",")}]`;
183
- },
184
- fromDriver(value) {
185
- if (Array.isArray(value)) {
186
- return value;
187
- }
188
- const content = value.slice(1, -1);
189
- if (content === "") {
190
- return [];
191
- }
192
- return content.split(",").map((s) => Number.parseFloat(s.trim()));
193
- }
194
- });
195
-
196
- // src/backend/drizzle/schema/postgres.ts
197
194
  var DEFAULT_TABLE_NAMES2 = {
198
195
  nodes: "typegraph_nodes",
199
196
  edges: "typegraph_edges",
@@ -201,22 +198,22 @@ var DEFAULT_TABLE_NAMES2 = {
201
198
  schemaVersions: "typegraph_schema_versions",
202
199
  embeddings: "typegraph_node_embeddings"
203
200
  };
204
- function createPostgresTables(names = {}, options = {}) {
201
+ function createSqliteTables(names = {}, options = {}) {
205
202
  const n = { ...DEFAULT_TABLE_NAMES2, ...names };
206
203
  const indexes = options.indexes ?? [];
207
- const nodes3 = pgTable(
204
+ const nodes3 = sqliteTable(
208
205
  n.nodes,
209
206
  {
210
207
  graphId: text$1("graph_id").notNull(),
211
208
  kind: text$1("kind").notNull(),
212
209
  id: text$1("id").notNull(),
213
- props: jsonb("props").notNull(),
210
+ props: text$1("props").notNull(),
214
211
  version: integer$1("version").notNull().default(1),
215
- validFrom: timestamp("valid_from", { withTimezone: true }),
216
- validTo: timestamp("valid_to", { withTimezone: true }),
217
- createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
218
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull(),
219
- deletedAt: timestamp("deleted_at", { withTimezone: true })
212
+ validFrom: text$1("valid_from"),
213
+ validTo: text$1("valid_to"),
214
+ createdAt: text$1("created_at").notNull(),
215
+ updatedAt: text$1("updated_at").notNull(),
216
+ deletedAt: text$1("deleted_at")
220
217
  },
221
218
  (t) => [
222
219
  primaryKey$1({ columns: [t.graphId, t.kind, t.id] }),
@@ -229,10 +226,10 @@ function createPostgresTables(names = {}, options = {}) {
229
226
  ),
230
227
  index$1(`${n.nodes}_deleted_idx`).on(t.graphId, t.deletedAt),
231
228
  index$1(`${n.nodes}_valid_idx`).on(t.graphId, t.validFrom, t.validTo),
232
- ...buildPostgresNodeIndexBuilders(t, indexes)
229
+ ...buildSqliteNodeIndexBuilders(t, indexes)
233
230
  ]
234
231
  );
235
- const edges3 = pgTable(
232
+ const edges3 = sqliteTable(
236
233
  n.edges,
237
234
  {
238
235
  graphId: text$1("graph_id").notNull(),
@@ -242,12 +239,12 @@ function createPostgresTables(names = {}, options = {}) {
242
239
  fromId: text$1("from_id").notNull(),
243
240
  toKind: text$1("to_kind").notNull(),
244
241
  toId: text$1("to_id").notNull(),
245
- props: jsonb("props").notNull(),
246
- validFrom: timestamp("valid_from", { withTimezone: true }),
247
- validTo: timestamp("valid_to", { withTimezone: true }),
248
- createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
249
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull(),
250
- deletedAt: timestamp("deleted_at", { withTimezone: true })
242
+ props: text$1("props").notNull(),
243
+ validFrom: text$1("valid_from"),
244
+ validTo: text$1("valid_to"),
245
+ createdAt: text$1("created_at").notNull(),
246
+ updatedAt: text$1("updated_at").notNull(),
247
+ deletedAt: text$1("deleted_at")
251
248
  },
252
249
  (t) => [
253
250
  primaryKey$1({ columns: [t.graphId, t.id] }),
@@ -288,10 +285,10 @@ function createPostgresTables(names = {}, options = {}) {
288
285
  t.fromId,
289
286
  t.validTo
290
287
  ),
291
- ...buildPostgresEdgeIndexBuilders(t, indexes)
288
+ ...buildSqliteEdgeIndexBuilders(t, indexes)
292
289
  ]
293
290
  );
294
- const uniques3 = pgTable(
291
+ const uniques3 = sqliteTable(
295
292
  n.uniques,
296
293
  {
297
294
  graphId: text$1("graph_id").notNull(),
@@ -300,7 +297,7 @@ function createPostgresTables(names = {}, options = {}) {
300
297
  key: text$1("key").notNull(),
301
298
  nodeId: text$1("node_id").notNull(),
302
299
  concreteKind: text$1("concrete_kind").notNull(),
303
- deletedAt: timestamp("deleted_at", { withTimezone: true })
300
+ deletedAt: text$1("deleted_at")
304
301
  },
305
302
  (t) => [
306
303
  primaryKey$1({
@@ -309,34 +306,38 @@ function createPostgresTables(names = {}, options = {}) {
309
306
  index$1(`${n.uniques}_node_idx`).on(t.graphId, t.concreteKind, t.nodeId)
310
307
  ]
311
308
  );
312
- const schemaVersions3 = pgTable(
309
+ const schemaVersions3 = sqliteTable(
313
310
  n.schemaVersions,
314
311
  {
315
312
  graphId: text$1("graph_id").notNull(),
316
313
  version: integer$1("version").notNull(),
317
314
  schemaHash: text$1("schema_hash").notNull(),
318
- schemaDoc: jsonb("schema_doc").notNull(),
319
- createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
320
- isActive: boolean("is_active").notNull().default(false)
315
+ schemaDoc: text$1("schema_doc").notNull(),
316
+ createdAt: text$1("created_at").notNull(),
317
+ isActive: integer$1("is_active", { mode: "boolean" }).notNull().default(false)
321
318
  },
322
319
  (t) => [
323
320
  primaryKey$1({ columns: [t.graphId, t.version] }),
324
321
  index$1(`${n.schemaVersions}_active_idx`).on(t.graphId, t.isActive)
325
322
  ]
326
323
  );
327
- const embeddings3 = pgTable(
324
+ const embeddings3 = sqliteTable(
328
325
  n.embeddings,
329
326
  {
330
327
  graphId: text$1("graph_id").notNull(),
331
328
  nodeKind: text$1("node_kind").notNull(),
332
329
  nodeId: text$1("node_id").notNull(),
333
330
  fieldPath: text$1("field_path").notNull(),
334
- /** Embedding vector stored as native pgvector type */
335
- embedding: vector("embedding").notNull(),
331
+ /**
332
+ * Embedding vector.
333
+ * Stored as BLOB for sqlite-vec binary format, or JSON text for fallback.
334
+ * For sqlite-vec: use vec_f32() to convert JSON array to binary.
335
+ */
336
+ embedding: blob("embedding", { mode: "buffer" }).notNull(),
336
337
  /** Number of dimensions (for validation) */
337
338
  dimensions: integer$1("dimensions").notNull(),
338
- createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
339
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull()
339
+ createdAt: text$1("created_at").notNull(),
340
+ updatedAt: text$1("updated_at").notNull()
340
341
  },
341
342
  (t) => [
342
343
  primaryKey$1({
@@ -358,7 +359,7 @@ function createPostgresTables(names = {}, options = {}) {
358
359
  );
359
360
  return { nodes: nodes3, edges: edges3, uniques: uniques3, schemaVersions: schemaVersions3, embeddings: embeddings3 };
360
361
  }
361
- var tables2 = createPostgresTables();
362
+ var tables2 = createSqliteTables();
362
363
  var { nodes: nodes2, edges: edges2, uniques: uniques2, schemaVersions: schemaVersions2, embeddings: embeddings2 } = tables2;
363
364
  function getSqliteColumnType(column) {
364
365
  switch (column.columnType) {
@@ -478,7 +479,7 @@ function generateSqliteCreateIndexSQL(table) {
478
479
  }
479
480
  return statements;
480
481
  }
481
- function generateSqliteDDL(tables3 = tables) {
482
+ function generateSqliteDDL(tables3 = tables2) {
482
483
  const statements = [];
483
484
  for (const table of Object.values(tables3)) {
484
485
  statements.push(generateSqliteCreateTableSQL(table));
@@ -488,7 +489,7 @@ function generateSqliteDDL(tables3 = tables) {
488
489
  }
489
490
  return statements;
490
491
  }
491
- function generateSqliteMigrationSQL(tables3 = tables) {
492
+ function generateSqliteMigrationSQL(tables3 = tables2) {
492
493
  return generateSqliteDDL(tables3).join("\n\n");
493
494
  }
494
495
  function getPgColumnType(column) {
@@ -570,7 +571,7 @@ function generatePgCreateIndexSQL(table) {
570
571
  }
571
572
  return statements;
572
573
  }
573
- function generatePostgresDDL(tables3 = tables2) {
574
+ function generatePostgresDDL(tables3 = tables) {
574
575
  const statements = [];
575
576
  for (const table of Object.values(tables3)) {
576
577
  statements.push(generatePgCreateTableSQL(table));
@@ -580,7 +581,7 @@ function generatePostgresDDL(tables3 = tables2) {
580
581
  }
581
582
  return statements;
582
583
  }
583
- function generatePostgresMigrationSQL(tables3 = tables2) {
584
+ function generatePostgresMigrationSQL(tables3 = tables) {
584
585
  const extensionSql = "-- Enable pgvector extension for vector similarity search\nCREATE EXTENSION IF NOT EXISTS vector;";
585
586
  const ddlSql = generatePostgresDDL(tables3).join("\n\n");
586
587
  return `${extensionSql}
@@ -624,6 +625,24 @@ function requireTimestamp(value, field) {
624
625
  }
625
626
  return value;
626
627
  }
628
+ function asString(value, field) {
629
+ if (typeof value !== "string") {
630
+ throw new DatabaseOperationError(
631
+ `Expected ${field} to be string, got ${typeof value}`,
632
+ { operation: "select", entity: "row" }
633
+ );
634
+ }
635
+ return value;
636
+ }
637
+ function asNumber(value, field) {
638
+ if (typeof value !== "number") {
639
+ throw new DatabaseOperationError(
640
+ `Expected ${field} to be number, got ${typeof value}`,
641
+ { operation: "select", entity: "row" }
642
+ );
643
+ }
644
+ return value;
645
+ }
627
646
  function nowIso() {
628
647
  return (/* @__PURE__ */ new Date()).toISOString();
629
648
  }
@@ -645,8 +664,25 @@ function normalizeJsonColumn(value) {
645
664
  return typeof value === "string" ? value : JSON.stringify(value ?? {});
646
665
  }
647
666
  var SQLITE_ROW_MAPPER_CONFIG = {
648
- formatTimestamp: (value) => nullToUndefined(value),
649
- normalizeJson: (value) => value
667
+ formatTimestamp: (value) => {
668
+ if (value === null || value === void 0) return;
669
+ if (typeof value !== "string") {
670
+ throw new DatabaseOperationError(
671
+ `Expected timestamp to be string, got ${typeof value}`,
672
+ { operation: "select", entity: "row" }
673
+ );
674
+ }
675
+ return value;
676
+ },
677
+ normalizeJson: (value) => {
678
+ if (typeof value !== "string") {
679
+ throw new DatabaseOperationError(
680
+ `Expected JSON column to be string, got ${typeof value}`,
681
+ { operation: "select", entity: "row" }
682
+ );
683
+ }
684
+ return value;
685
+ }
650
686
  };
651
687
  var POSTGRES_ROW_MAPPER_CONFIG = {
652
688
  formatTimestamp: formatPostgresTimestamp,
@@ -654,11 +690,11 @@ var POSTGRES_ROW_MAPPER_CONFIG = {
654
690
  };
655
691
  function createNodeRowMapper(config) {
656
692
  return (row) => ({
657
- graph_id: row.graph_id,
658
- kind: row.kind,
659
- id: row.id,
693
+ graph_id: asString(row.graph_id, "graph_id"),
694
+ kind: asString(row.kind, "kind"),
695
+ id: asString(row.id, "id"),
660
696
  props: config.normalizeJson(row.props),
661
- version: row.version,
697
+ version: asNumber(row.version, "version"),
662
698
  valid_from: nullToUndefined(config.formatTimestamp(row.valid_from)),
663
699
  valid_to: nullToUndefined(config.formatTimestamp(row.valid_to)),
664
700
  created_at: requireTimestamp(config.formatTimestamp(row.created_at), "created_at"),
@@ -668,13 +704,13 @@ function createNodeRowMapper(config) {
668
704
  }
669
705
  function createEdgeRowMapper(config) {
670
706
  return (row) => ({
671
- graph_id: row.graph_id,
672
- id: row.id,
673
- kind: row.kind,
674
- from_kind: row.from_kind,
675
- from_id: row.from_id,
676
- to_kind: row.to_kind,
677
- to_id: row.to_id,
707
+ graph_id: asString(row.graph_id, "graph_id"),
708
+ id: asString(row.id, "id"),
709
+ kind: asString(row.kind, "kind"),
710
+ from_kind: asString(row.from_kind, "from_kind"),
711
+ from_id: asString(row.from_id, "from_id"),
712
+ to_kind: asString(row.to_kind, "to_kind"),
713
+ to_id: asString(row.to_id, "to_id"),
678
714
  props: config.normalizeJson(row.props),
679
715
  valid_from: nullToUndefined(config.formatTimestamp(row.valid_from)),
680
716
  valid_to: nullToUndefined(config.formatTimestamp(row.valid_to)),
@@ -685,12 +721,12 @@ function createEdgeRowMapper(config) {
685
721
  }
686
722
  function createUniqueRowMapper(config) {
687
723
  return (row) => ({
688
- graph_id: row.graph_id,
689
- node_kind: row.node_kind,
690
- constraint_name: row.constraint_name,
691
- key: row.key,
692
- node_id: row.node_id,
693
- concrete_kind: row.concrete_kind,
724
+ graph_id: asString(row.graph_id, "graph_id"),
725
+ node_kind: asString(row.node_kind, "node_kind"),
726
+ constraint_name: asString(row.constraint_name, "constraint_name"),
727
+ key: asString(row.key, "key"),
728
+ node_id: asString(row.node_id, "node_id"),
729
+ concrete_kind: asString(row.concrete_kind, "concrete_kind"),
694
730
  deleted_at: nullToUndefined(config.formatTimestamp(row.deleted_at))
695
731
  });
696
732
  }
@@ -699,9 +735,9 @@ function createSchemaVersionRowMapper(config) {
699
735
  const isActiveValue = row.is_active;
700
736
  const isActive = isActiveValue === true || isActiveValue === 1 || isActiveValue === "1";
701
737
  return {
702
- graph_id: row.graph_id,
703
- version: row.version,
704
- schema_hash: row.schema_hash,
738
+ graph_id: asString(row.graph_id, "graph_id"),
739
+ version: asNumber(row.version, "version"),
740
+ schema_hash: asString(row.schema_hash, "schema_hash"),
705
741
  schema_doc: config.normalizeJson(row.schema_doc),
706
742
  created_at: requireTimestamp(config.formatTimestamp(row.created_at), "created_at"),
707
743
  is_active: isActive
@@ -990,10 +1026,14 @@ function buildTemporalConditions(table, params) {
990
1026
  conditions.push(sql`${table.deletedAt} IS NULL`);
991
1027
  }
992
1028
  if (mode === "current" || mode === "asOf") {
993
- const asOf = params.asOf;
1029
+ if (params.asOf === void 0) {
1030
+ throw new Error(
1031
+ `asOf timestamp is required for temporal mode "${mode}"`
1032
+ );
1033
+ }
994
1034
  conditions.push(
995
- sql`(${table.validFrom} IS NULL OR ${table.validFrom} <= ${asOf})`,
996
- sql`(${table.validTo} IS NULL OR ${table.validTo} > ${asOf})`
1035
+ sql`(${table.validFrom} IS NULL OR ${table.validFrom} <= ${params.asOf})`,
1036
+ sql`(${table.validTo} IS NULL OR ${table.validTo} > ${params.asOf})`
997
1037
  );
998
1038
  }
999
1039
  return conditions;
@@ -1907,7 +1947,6 @@ function assertSafeIdentifier(value, name) {
1907
1947
  );
1908
1948
  }
1909
1949
  }
1910
- var MAX_IDENTIFIER_LENGTH = 63;
1911
1950
  function sanitizeIdentifier(s) {
1912
1951
  return s.toLowerCase().replaceAll(/[^a-z0-9_]/g, "_");
1913
1952
  }
@@ -1937,11 +1976,11 @@ function generateVectorIndexName(graphId, nodeKind, fieldPath, metric = "cosine"
1937
1976
  metric
1938
1977
  ];
1939
1978
  const name = parts.join("_");
1940
- if (name.length <= MAX_IDENTIFIER_LENGTH) {
1979
+ if (name.length <= MAX_PG_IDENTIFIER_LENGTH) {
1941
1980
  return name;
1942
1981
  }
1943
1982
  const hash = shortHash(name);
1944
- const truncated = name.slice(0, MAX_IDENTIFIER_LENGTH - 1 - hash.length);
1983
+ const truncated = name.slice(0, MAX_PG_IDENTIFIER_LENGTH - 1 - hash.length);
1945
1984
  return `${truncated}_${hash}`;
1946
1985
  }
1947
1986
  function getOperatorClass(metric) {
@@ -2083,5 +2122,5 @@ function compileQueryWithDialect(db, query, backendName) {
2083
2122
  }
2084
2123
 
2085
2124
  export { POSTGRES_CAPABILITIES, POSTGRES_ROW_MAPPER_CONFIG, SQLITE_CAPABILITIES, SQLITE_ROW_MAPPER_CONFIG, compileQueryWithDialect, createCommonOperationBackend, createEdgeRowMapper, createNodeRowMapper, createPostgresOperationStrategy, createPostgresTables, createPostgresVectorIndex, createSchemaVersionRowMapper, createSqliteOperationStrategy, createSqliteTables, createSqliteVectorIndex, createUniqueRowMapper, dropPostgresVectorIndex, dropSqliteVectorIndex, edges, edges2, embeddings, embeddings2, formatPostgresTimestamp, generatePostgresDDL, generatePostgresMigrationSQL, generateSqliteDDL, generateSqliteMigrationSQL, generateVectorIndexName, nodes, nodes2, nowIso, schemaVersions, schemaVersions2, tables, tables2, uniques, uniques2 };
2086
- //# sourceMappingURL=chunk-52WSY6G5.js.map
2087
- //# sourceMappingURL=chunk-52WSY6G5.js.map
2125
+ //# sourceMappingURL=chunk-HWWF3FOP.js.map
2126
+ //# sourceMappingURL=chunk-HWWF3FOP.js.map