@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.
- package/dist/backend/postgres/index.cjs +34 -28
- package/dist/backend/postgres/index.cjs.map +1 -1
- package/dist/backend/postgres/index.d.cts +5 -5
- package/dist/backend/postgres/index.d.ts +5 -5
- package/dist/backend/postgres/index.js +16 -10
- package/dist/backend/postgres/index.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +14 -14
- package/dist/backend/sqlite/index.d.cts +5 -5
- package/dist/backend/sqlite/index.d.ts +5 -5
- package/dist/backend/sqlite/index.js +4 -4
- package/dist/backend/sqlite/local.cjs +7 -7
- package/dist/backend/sqlite/local.cjs.map +1 -1
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +7 -7
- package/dist/backend/sqlite/local.js.map +1 -1
- package/dist/{chunk-7VITUTRA.cjs → chunk-3HQLOKS5.cjs} +163 -13
- package/dist/chunk-3HQLOKS5.cjs.map +1 -0
- package/dist/{chunk-NZMKJHE2.cjs → chunk-56RQFK7U.cjs} +22 -15
- package/dist/chunk-56RQFK7U.cjs.map +1 -0
- package/dist/{chunk-U3452TEU.js → chunk-6GWJH6AR.js} +15 -27
- package/dist/chunk-6GWJH6AR.js.map +1 -0
- package/dist/{chunk-2XPKLHHH.cjs → chunk-CRMN2NOM.cjs} +247 -208
- package/dist/chunk-CRMN2NOM.cjs.map +1 -0
- package/dist/{chunk-54WJF3DW.js → chunk-GNIYZKBI.js} +29 -3
- package/dist/chunk-GNIYZKBI.js.map +1 -0
- package/dist/{chunk-52WSY6G5.js → chunk-HWWF3FOP.js} +158 -119
- package/dist/chunk-HWWF3FOP.js.map +1 -0
- package/dist/{chunk-PYV4ADC6.js → chunk-L4ON6RJF.js} +164 -14
- package/dist/chunk-L4ON6RJF.js.map +1 -0
- package/dist/{chunk-JQDWEX6V.cjs → chunk-LELLOHJK.cjs} +22 -34
- package/dist/chunk-LELLOHJK.cjs.map +1 -0
- package/dist/{chunk-2WVFEIHR.cjs → chunk-MME3H4ZF.cjs} +40 -2
- package/dist/chunk-MME3H4ZF.cjs.map +1 -0
- package/dist/{chunk-J4SICP3X.js → chunk-XZBAGJJH.js} +15 -8
- package/dist/chunk-XZBAGJJH.js.map +1 -0
- package/dist/{ddl-BJg93HDN.d.cts → ddl-BBo2EcFc.d.cts} +2 -2
- package/dist/{ddl-CsfWcl_B.d.ts → ddl-D4jlcOH_.d.ts} +2 -2
- package/dist/index.cjs +473 -625
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -9
- package/dist/index.d.ts +12 -9
- package/dist/index.js +434 -586
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +16 -16
- package/dist/indexes/index.d.cts +2 -2
- package/dist/indexes/index.d.ts +2 -2
- package/dist/indexes/index.js +2 -2
- package/dist/interchange/index.d.cts +3 -3
- package/dist/interchange/index.d.ts +3 -3
- package/dist/{manager-DGSnJa1v.d.cts → manager-Bj1UEnhE.d.cts} +2 -2
- package/dist/{manager-BCLhWysp.d.ts → manager-Chhrq1vl.d.ts} +2 -2
- package/dist/profiler/index.cjs +6 -6
- package/dist/profiler/index.cjs.map +1 -1
- package/dist/profiler/index.d.cts +3 -3
- package/dist/profiler/index.d.ts +3 -3
- package/dist/profiler/index.js +6 -6
- package/dist/profiler/index.js.map +1 -1
- package/dist/schema/index.cjs +20 -20
- package/dist/schema/index.d.cts +4 -4
- package/dist/schema/index.d.ts +4 -4
- package/dist/schema/index.js +2 -2
- package/dist/{sqlite-H01wIXvB.d.ts → sqlite-Blq-AhmK.d.ts} +1 -1
- package/dist/{sqlite-DVca_IIy.d.cts → sqlite-DE-6NWtC.d.cts} +1 -1
- package/dist/{store-Bmdt_dS6.d.cts → store-BNercm8P.d.cts} +86 -31
- package/dist/{store-6-vH0ZIj.d.ts → store-CD_0yf2s.d.ts} +86 -31
- package/dist/{types-GLkwvQvS.d.cts → types-B3mmOMJV.d.cts} +20 -6
- package/dist/{types-C8Ra3ROE.d.cts → types-CZd2PEOc.d.cts} +8 -2
- package/dist/{types-CC8eB0PB.d.ts → types-Ceb01czq.d.ts} +8 -2
- package/dist/{types-1YJKodRv.d.ts → types-ThB4cFLp.d.ts} +20 -6
- package/package.json +1 -1
- package/dist/chunk-2WVFEIHR.cjs.map +0 -1
- package/dist/chunk-2XPKLHHH.cjs.map +0 -1
- package/dist/chunk-52WSY6G5.js.map +0 -1
- package/dist/chunk-54WJF3DW.js.map +0 -1
- package/dist/chunk-7VITUTRA.cjs.map +0 -1
- package/dist/chunk-J4SICP3X.js.map +0 -1
- package/dist/chunk-JQDWEX6V.cjs.map +0 -1
- package/dist/chunk-NZMKJHE2.cjs.map +0 -1
- package/dist/chunk-PYV4ADC6.js.map +0 -1
- 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 {
|
|
3
|
-
import {
|
|
4
|
-
import { customType, pgTable, timestamp, integer
|
|
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
|
|
35
|
+
function createPostgresTables(names = {}, options = {}) {
|
|
15
36
|
const n = { ...DEFAULT_TABLE_NAMES, ...names };
|
|
16
37
|
const indexes = options.indexes ?? [];
|
|
17
|
-
const nodes3 =
|
|
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:
|
|
44
|
+
props: jsonb("props").notNull(),
|
|
24
45
|
version: integer("version").notNull().default(1),
|
|
25
|
-
validFrom:
|
|
26
|
-
validTo:
|
|
27
|
-
createdAt:
|
|
28
|
-
updatedAt:
|
|
29
|
-
deletedAt:
|
|
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
|
-
...
|
|
63
|
+
...buildPostgresNodeIndexBuilders(t, indexes)
|
|
43
64
|
]
|
|
44
65
|
);
|
|
45
|
-
const edges3 =
|
|
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:
|
|
56
|
-
validFrom:
|
|
57
|
-
validTo:
|
|
58
|
-
createdAt:
|
|
59
|
-
updatedAt:
|
|
60
|
-
deletedAt:
|
|
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
|
-
...
|
|
122
|
+
...buildPostgresEdgeIndexBuilders(t, indexes)
|
|
102
123
|
]
|
|
103
124
|
);
|
|
104
|
-
const uniques3 =
|
|
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:
|
|
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 =
|
|
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:
|
|
129
|
-
createdAt:
|
|
130
|
-
isActive:
|
|
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 =
|
|
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
|
-
|
|
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:
|
|
153
|
-
updatedAt:
|
|
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 =
|
|
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
|
|
201
|
+
function createSqliteTables(names = {}, options = {}) {
|
|
205
202
|
const n = { ...DEFAULT_TABLE_NAMES2, ...names };
|
|
206
203
|
const indexes = options.indexes ?? [];
|
|
207
|
-
const nodes3 =
|
|
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:
|
|
210
|
+
props: text$1("props").notNull(),
|
|
214
211
|
version: integer$1("version").notNull().default(1),
|
|
215
|
-
validFrom:
|
|
216
|
-
validTo:
|
|
217
|
-
createdAt:
|
|
218
|
-
updatedAt:
|
|
219
|
-
deletedAt:
|
|
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
|
-
...
|
|
229
|
+
...buildSqliteNodeIndexBuilders(t, indexes)
|
|
233
230
|
]
|
|
234
231
|
);
|
|
235
|
-
const edges3 =
|
|
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:
|
|
246
|
-
validFrom:
|
|
247
|
-
validTo:
|
|
248
|
-
createdAt:
|
|
249
|
-
updatedAt:
|
|
250
|
-
deletedAt:
|
|
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
|
-
...
|
|
288
|
+
...buildSqliteEdgeIndexBuilders(t, indexes)
|
|
292
289
|
]
|
|
293
290
|
);
|
|
294
|
-
const uniques3 =
|
|
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:
|
|
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 =
|
|
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:
|
|
319
|
-
createdAt:
|
|
320
|
-
isActive:
|
|
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 =
|
|
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
|
-
/**
|
|
335
|
-
|
|
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:
|
|
339
|
-
updatedAt:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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) =>
|
|
649
|
-
|
|
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
|
-
|
|
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 <=
|
|
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,
|
|
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-
|
|
2087
|
-
//# sourceMappingURL=chunk-
|
|
2125
|
+
//# sourceMappingURL=chunk-HWWF3FOP.js.map
|
|
2126
|
+
//# sourceMappingURL=chunk-HWWF3FOP.js.map
|