@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
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { G as GraphBackend } from '../../types-
|
|
1
|
+
import { G as GraphBackend } from '../../types-ThB4cFLp.js';
|
|
2
2
|
import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
|
|
3
|
-
import { S as SqliteTables } from '../../sqlite-
|
|
4
|
-
export { C as CreateSqliteTablesOptions, a as SqliteTableNames, c as createSqliteTables, e as edges, b as embeddings, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../sqlite-
|
|
5
|
-
export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-Blq-AhmK.js';
|
|
4
|
+
export { C as CreateSqliteTablesOptions, a as SqliteTableNames, c as createSqliteTables, e as edges, b as embeddings, n as nodes, s as schemaVersions, t as tables, u as uniques } from '../../sqlite-Blq-AhmK.js';
|
|
5
|
+
export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-D4jlcOH_.js';
|
|
6
6
|
import 'drizzle-orm';
|
|
7
7
|
import '../../types-DMzKq0d5.js';
|
|
8
8
|
import 'zod';
|
|
9
|
-
import '../../types-
|
|
9
|
+
import '../../types-Ceb01czq.js';
|
|
10
10
|
import '../../ast-COMyNeMn.js';
|
|
11
11
|
import 'drizzle-orm/pg-core';
|
|
12
12
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { createSqliteBackend } from '../../chunk-
|
|
2
|
-
export { createSqliteTables, edges, embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-
|
|
1
|
+
export { createSqliteBackend } from '../../chunk-XZBAGJJH.js';
|
|
2
|
+
export { createSqliteTables, edges2 as edges, embeddings2 as embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes2 as nodes, schemaVersions2 as schemaVersions, tables2 as tables, uniques2 as uniques } from '../../chunk-HWWF3FOP.js';
|
|
3
3
|
import '../../chunk-SJ2QMDXY.js';
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
4
|
+
import '../../chunk-6GWJH6AR.js';
|
|
5
|
+
import '../../chunk-GNIYZKBI.js';
|
|
6
6
|
import '../../chunk-K7SQ3SWP.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk56RQFK7U_cjs = require('../../chunk-56RQFK7U.cjs');
|
|
4
|
+
var chunkCRMN2NOM_cjs = require('../../chunk-CRMN2NOM.cjs');
|
|
5
5
|
var chunk44SXEVF4_cjs = require('../../chunk-44SXEVF4.cjs');
|
|
6
|
-
require('../../chunk-
|
|
7
|
-
require('../../chunk-
|
|
6
|
+
require('../../chunk-LELLOHJK.cjs');
|
|
7
|
+
require('../../chunk-MME3H4ZF.cjs');
|
|
8
8
|
require('../../chunk-P5CNM325.cjs');
|
|
9
9
|
var Database = require('better-sqlite3');
|
|
10
10
|
var betterSqlite3 = require('drizzle-orm/better-sqlite3');
|
|
@@ -53,14 +53,14 @@ function createDatabase(path) {
|
|
|
53
53
|
}
|
|
54
54
|
function createLocalSqliteBackend(options = {}) {
|
|
55
55
|
const path = options.path ?? ":memory:";
|
|
56
|
-
const tables2 = options.tables ??
|
|
56
|
+
const tables2 = options.tables ?? chunkCRMN2NOM_cjs.tables2;
|
|
57
57
|
const sqlite = createDatabase(path);
|
|
58
58
|
const db = betterSqlite3.drizzle(sqlite);
|
|
59
|
-
const ddlStatements =
|
|
59
|
+
const ddlStatements = chunkCRMN2NOM_cjs.generateSqliteDDL(tables2);
|
|
60
60
|
for (const statement of ddlStatements) {
|
|
61
61
|
sqlite.exec(statement);
|
|
62
62
|
}
|
|
63
|
-
const backend =
|
|
63
|
+
const backend = chunk56RQFK7U_cjs.createSqliteBackend(db, {
|
|
64
64
|
executionProfile: {
|
|
65
65
|
isSync: true
|
|
66
66
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":";;;;;;;;;;;;;;;AA+CA,SAAS,uBAAuB,KAAA,EAAwB;AACtD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,OAAA;AACzC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,sCACP,OAAA,EACuC;AACvC,EAAA,MAAM,MAAA,GACJ,kFAAA;AACF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAC,MAAA,CAAO,SAAS,QAAQ,CAAA;AACzD,IAAA,OAAO,MAAA;AAET,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAEA,SAAS,eAAe,IAAA,EAAiC;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,IAAIA,0BAAS,IAAI,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,sCAAsC,OAAO,CAAA;AAC9D,IAAA,IAAI,CAAC,UAAU,MAAM,KAAA;AAErB,IAAA,MAAM,IAAIC,oCAAA;AAAA,MACR;AAAA,QACE,6CAAA;AAAA,QACA,CAAA,wCAAA,EAA2C,QAAA,CAAS,QAAQ,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,QACpH,4FAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV;AAAA,QACE,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,iBAAA,EAAmB,QAAQ,QAAA,CAAS,OAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS,QAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS;AAAA,OACtC;AAAA,MACA,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAmEO,SAAS,wBAAA,CACd,OAAA,GAAqC,EAAC,EACZ;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,UAAA;AAC7B,EAAA,MAAMC,OAAAA,GAAS,QAAQ,MAAA,IAAUA,
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":"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","file":"local.cjs","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups.compiled);\n const required = Number(match.groups.required);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: GraphBackend;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: true,\n },\n tables,\n });\n let isClosed = false;\n\n function close(): Promise<void> {\n if (isClosed) return Promise.resolve();\n isClosed = true;\n sqlite.close();\n return Promise.resolve();\n }\n\n const managedBackend: GraphBackend = { ...backend, close };\n\n return { backend: managedBackend, db };\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
2
|
-
import { G as GraphBackend } from '../../types-
|
|
3
|
-
import { S as SqliteTables } from '../../sqlite-
|
|
2
|
+
import { G as GraphBackend } from '../../types-B3mmOMJV.cjs';
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-DE-6NWtC.cjs';
|
|
4
4
|
import 'drizzle-orm';
|
|
5
5
|
import '../../types-DMzKq0d5.cjs';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'drizzle-orm/sqlite-core';
|
|
8
|
-
import '../../types-
|
|
8
|
+
import '../../types-CZd2PEOc.cjs';
|
|
9
9
|
import '../../ast-Bh2NDeaK.cjs';
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
2
|
-
import { G as GraphBackend } from '../../types-
|
|
3
|
-
import { S as SqliteTables } from '../../sqlite-
|
|
2
|
+
import { G as GraphBackend } from '../../types-ThB4cFLp.js';
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-Blq-AhmK.js';
|
|
4
4
|
import 'drizzle-orm';
|
|
5
5
|
import '../../types-DMzKq0d5.js';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'drizzle-orm/sqlite-core';
|
|
8
|
-
import '../../types-
|
|
8
|
+
import '../../types-Ceb01czq.js';
|
|
9
9
|
import '../../ast-COMyNeMn.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createSqliteBackend } from '../../chunk-
|
|
2
|
-
import {
|
|
1
|
+
import { createSqliteBackend } from '../../chunk-XZBAGJJH.js';
|
|
2
|
+
import { tables2, generateSqliteDDL } from '../../chunk-HWWF3FOP.js';
|
|
3
3
|
import { ConfigurationError } from '../../chunk-SJ2QMDXY.js';
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
4
|
+
import '../../chunk-6GWJH6AR.js';
|
|
5
|
+
import '../../chunk-GNIYZKBI.js';
|
|
6
6
|
import '../../chunk-K7SQ3SWP.js';
|
|
7
7
|
import Database from 'better-sqlite3';
|
|
8
8
|
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
@@ -47,10 +47,10 @@ function createDatabase(path) {
|
|
|
47
47
|
}
|
|
48
48
|
function createLocalSqliteBackend(options = {}) {
|
|
49
49
|
const path = options.path ?? ":memory:";
|
|
50
|
-
const tables2 = options.tables ??
|
|
50
|
+
const tables2$1 = options.tables ?? tables2;
|
|
51
51
|
const sqlite = createDatabase(path);
|
|
52
52
|
const db = drizzle(sqlite);
|
|
53
|
-
const ddlStatements = generateSqliteDDL(tables2);
|
|
53
|
+
const ddlStatements = generateSqliteDDL(tables2$1);
|
|
54
54
|
for (const statement of ddlStatements) {
|
|
55
55
|
sqlite.exec(statement);
|
|
56
56
|
}
|
|
@@ -58,7 +58,7 @@ function createLocalSqliteBackend(options = {}) {
|
|
|
58
58
|
executionProfile: {
|
|
59
59
|
isSync: true
|
|
60
60
|
},
|
|
61
|
-
tables: tables2
|
|
61
|
+
tables: tables2$1
|
|
62
62
|
});
|
|
63
63
|
let isClosed = false;
|
|
64
64
|
function close() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":";;;;;;;;;AA+CA,SAAS,uBAAuB,KAAA,EAAwB;AACtD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,OAAA;AACzC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,sCACP,OAAA,EACuC;AACvC,EAAA,MAAM,MAAA,GACJ,kFAAA;AACF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAC,MAAA,CAAO,SAAS,QAAQ,CAAA;AACzD,IAAA,OAAO,MAAA;AAET,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAEA,SAAS,eAAe,IAAA,EAAiC;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,SAAS,IAAI,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,sCAAsC,OAAO,CAAA;AAC9D,IAAA,IAAI,CAAC,UAAU,MAAM,KAAA;AAErB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,QACE,6CAAA;AAAA,QACA,CAAA,wCAAA,EAA2C,QAAA,CAAS,QAAQ,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,QACpH,4FAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV;AAAA,QACE,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,iBAAA,EAAmB,QAAQ,QAAA,CAAS,OAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS,QAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS;AAAA,OACtC;AAAA,MACA,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAmEO,SAAS,wBAAA,CACd,OAAA,GAAqC,EAAC,EACZ;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,UAAA;AAC7B,EAAA,MAAMA,
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":";;;;;;;;;AA+CA,SAAS,uBAAuB,KAAA,EAAwB;AACtD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,OAAA;AACzC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,sCACP,OAAA,EACuC;AACvC,EAAA,MAAM,MAAA,GACJ,kFAAA;AACF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAC,MAAA,CAAO,SAAS,QAAQ,CAAA;AACzD,IAAA,OAAO,MAAA;AAET,EAAA,OAAO,EAAE,UAAU,QAAA,EAAS;AAC9B;AAEA,SAAS,eAAe,IAAA,EAAiC;AACvD,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,SAAS,IAAI,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,sCAAsC,OAAO,CAAA;AAC9D,IAAA,IAAI,CAAC,UAAU,MAAM,KAAA;AAErB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,QACE,6CAAA;AAAA,QACA,CAAA,wCAAA,EAA2C,QAAA,CAAS,QAAQ,CAAA,oCAAA,EAAuC,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,QACpH,4FAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV;AAAA,QACE,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,iBAAA,EAAmB,QAAQ,QAAA,CAAS,OAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS,QAAA;AAAA,QACpC,2BAA2B,QAAA,CAAS;AAAA,OACtC;AAAA,MACA,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAmEO,SAAS,wBAAA,CACd,OAAA,GAAqC,EAAC,EACZ;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,UAAA;AAC7B,EAAA,MAAMA,SAAAA,GAAS,QAAQ,MAAA,IAAUA,OAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAI,CAAA;AAClC,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AAGzB,EAAA,MAAM,aAAA,GAAgB,kBAAkBA,SAAM,CAAA;AAC9C,EAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,IAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,OAAA,GAAU,oBAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,MAAA,EAAAA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,SAAS,KAAA,GAAuB;AAC9B,IAAA,IAAI,QAAA,EAAU,OAAO,OAAA,CAAQ,OAAA,EAAQ;AACrC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAEA,EAAA,MAAM,cAAA,GAA+B,EAAE,GAAG,OAAA,EAAS,KAAA,EAAM;AAEzD,EAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,EAAA,EAAG;AACvC","file":"local.js","sourcesContent":["/**\n * Local SQLite backend using better-sqlite3.\n *\n * This module depends on the `better-sqlite3` native addon and should only\n * be imported in Node.js environments. For bundler-friendly SQLite DDL\n * generation and Drizzle backend creation, import from `@nicia-ai/typegraph/sqlite`.\n *\n * @example In-memory database (default)\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database for persistent local development\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite/local\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nimport Database from \"better-sqlite3\";\nimport {\n type BetterSQLite3Database,\n drizzle,\n} from \"drizzle-orm/better-sqlite3\";\n\nimport { ConfigurationError } from \"../../errors\";\nimport { generateSqliteDDL } from \"../drizzle/ddl\";\nimport {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport type { GraphBackend } from \"../types\";\n\n// ============================================================\n// Native Addon Helpers\n// ============================================================\n\ntype NodeModuleVersionMismatch = Readonly<{\n compiled: number;\n required: number;\n}>;\n\nfunction getUnknownErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction parseNodeModuleVersionMismatchMessage(\n message: string,\n): NodeModuleVersionMismatch | undefined {\n const regexp =\n /NODE_MODULE_VERSION (?<compiled>\\d+)[\\s\\S]*?NODE_MODULE_VERSION (?<required>\\d+)/;\n const match = regexp.exec(message);\n if (!match?.groups) return undefined;\n\n const compiled = Number(match.groups.compiled);\n const required = Number(match.groups.required);\n\n if (!Number.isFinite(compiled) || !Number.isFinite(required))\n return undefined;\n\n return { compiled, required };\n}\n\nfunction createDatabase(path: string): Database.Database {\n try {\n return new Database(path);\n } catch (error) {\n const message = getUnknownErrorMessage(error);\n const mismatch = parseNodeModuleVersionMismatchMessage(message);\n if (!mismatch) throw error;\n\n throw new ConfigurationError(\n [\n \"Failed to load better-sqlite3 native addon.\",\n `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,\n \"This usually happens after switching Node versions without rebuilding native dependencies.\",\n \"Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3).\",\n ].join(\" \"),\n {\n nodeVersion: process.version,\n nodeModuleVersion: process.versions.modules,\n compiledNodeModuleVersion: mismatch.compiled,\n requiredNodeModuleVersion: mismatch.required,\n },\n { cause: error },\n );\n }\n}\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Options for creating a local SQLite backend.\n */\nexport type LocalSqliteBackendOptions = Readonly<{\n /**\n * Path to the SQLite database file.\n * Defaults to \":memory:\" for an in-memory database.\n */\n path?: string;\n\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a local SQLite backend.\n */\nexport type LocalSqliteBackendResult = Readonly<{\n /**\n * The GraphBackend instance for use with createStore.\n */\n backend: GraphBackend;\n\n /**\n * The underlying Drizzle database instance.\n * Useful for direct SQL access or cleanup.\n */\n db: BetterSQLite3Database;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a SQLite backend with minimal configuration.\n *\n * This is a convenience function for local development and testing.\n * It handles database creation, schema migration, and backend setup.\n *\n * For production deployments or custom configurations, use createSqliteBackend\n * directly with your own Drizzle database instance.\n *\n * @param options - Configuration options\n * @returns Backend and database instances\n *\n * @example In-memory database (default)\n * ```typescript\n * const { backend } = createLocalSqliteBackend();\n * const store = createStore(graph, backend);\n * ```\n *\n * @example File-based database\n * ```typescript\n * const { backend, db } = createLocalSqliteBackend({ path: \"./data.db\" });\n * const store = createStore(graph, backend);\n * ```\n */\nexport function createLocalSqliteBackend(\n options: LocalSqliteBackendOptions = {},\n): LocalSqliteBackendResult {\n const path = options.path ?? \":memory:\";\n const tables = options.tables ?? defaultTables;\n\n const sqlite = createDatabase(path);\n const db = drizzle(sqlite);\n\n // Generate and execute DDL from schema\n const ddlStatements = generateSqliteDDL(tables);\n for (const statement of ddlStatements) {\n sqlite.exec(statement);\n }\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: true,\n },\n tables,\n });\n let isClosed = false;\n\n function close(): Promise<void> {\n if (isClosed) return Promise.resolve();\n isClosed = true;\n sqlite.close();\n return Promise.resolve();\n }\n\n const managedBackend: GraphBackend = { ...backend, close };\n\n return { backend: managedBackend, db };\n}\n"]}
|
|
@@ -615,10 +615,10 @@ var KindRegistry = class {
|
|
|
615
615
|
const result = [];
|
|
616
616
|
for (const pair of this.disjointPairs) {
|
|
617
617
|
const parts = pair.split("|");
|
|
618
|
-
const
|
|
619
|
-
const
|
|
620
|
-
if (
|
|
621
|
-
else if (
|
|
618
|
+
const firstKind = parts[0];
|
|
619
|
+
const secondKind = parts[1];
|
|
620
|
+
if (firstKind === kind) result.push(secondKind);
|
|
621
|
+
else if (secondKind === kind) result.push(firstKind);
|
|
622
622
|
}
|
|
623
623
|
return result;
|
|
624
624
|
}
|
|
@@ -820,9 +820,9 @@ function computeEquivalenceSets(relations) {
|
|
|
820
820
|
parent.set(x, x);
|
|
821
821
|
return x;
|
|
822
822
|
}
|
|
823
|
-
const
|
|
824
|
-
if (
|
|
825
|
-
const root = find(
|
|
823
|
+
const parentNode = parent.get(x);
|
|
824
|
+
if (parentNode === x) return x;
|
|
825
|
+
const root = find(parentNode);
|
|
826
826
|
parent.set(x, root);
|
|
827
827
|
return root;
|
|
828
828
|
}
|
|
@@ -1111,17 +1111,167 @@ async function sha256Hash(input) {
|
|
|
1111
1111
|
}
|
|
1112
1112
|
return hex;
|
|
1113
1113
|
}
|
|
1114
|
+
var deleteBehaviorZod = zod.z.enum(["restrict", "cascade", "disconnect"]);
|
|
1115
|
+
var cardinalityZod = zod.z.enum(["many", "one", "unique", "oneActive"]);
|
|
1116
|
+
var endpointExistenceZod = zod.z.enum(["notDeleted", "currentlyValid", "ever"]);
|
|
1117
|
+
var temporalModeZod = zod.z.enum([
|
|
1118
|
+
"current",
|
|
1119
|
+
"asOf",
|
|
1120
|
+
"includeEnded",
|
|
1121
|
+
"includeTombstones"
|
|
1122
|
+
]);
|
|
1123
|
+
var uniquenessScopeZod = zod.z.enum(["kind", "kindWithSubClasses"]);
|
|
1124
|
+
var collationZod = zod.z.enum(["binary", "caseInsensitive"]);
|
|
1125
|
+
var inferenceTypeZod = zod.z.enum([
|
|
1126
|
+
"subsumption",
|
|
1127
|
+
"hierarchy",
|
|
1128
|
+
"substitution",
|
|
1129
|
+
"constraint",
|
|
1130
|
+
"composition",
|
|
1131
|
+
"association",
|
|
1132
|
+
"none"
|
|
1133
|
+
]);
|
|
1134
|
+
function checkRecordKeyMatchesField(field, section) {
|
|
1135
|
+
return (record, ctx) => {
|
|
1136
|
+
for (const [key, value] of Object.entries(record)) {
|
|
1137
|
+
const embedded = value[field];
|
|
1138
|
+
if (typeof embedded === "string" && embedded !== key) {
|
|
1139
|
+
ctx.addIssue({
|
|
1140
|
+
code: "custom",
|
|
1141
|
+
path: [key, field],
|
|
1142
|
+
message: `Record key "${key}" does not match ${field} "${embedded}" in ${section}`
|
|
1143
|
+
});
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
};
|
|
1147
|
+
}
|
|
1148
|
+
var serializedSchemaZod = zod.z.object({
|
|
1149
|
+
graphId: zod.z.string(),
|
|
1150
|
+
version: zod.z.number(),
|
|
1151
|
+
generatedAt: zod.z.string(),
|
|
1152
|
+
nodes: zod.z.record(
|
|
1153
|
+
zod.z.string(),
|
|
1154
|
+
zod.z.object({
|
|
1155
|
+
kind: zod.z.string(),
|
|
1156
|
+
properties: zod.z.record(zod.z.string(), zod.z.unknown()),
|
|
1157
|
+
uniqueConstraints: zod.z.array(
|
|
1158
|
+
zod.z.object({
|
|
1159
|
+
name: zod.z.string(),
|
|
1160
|
+
fields: zod.z.array(zod.z.string()),
|
|
1161
|
+
where: zod.z.string().optional(),
|
|
1162
|
+
scope: uniquenessScopeZod,
|
|
1163
|
+
collation: collationZod
|
|
1164
|
+
}).loose()
|
|
1165
|
+
),
|
|
1166
|
+
onDelete: deleteBehaviorZod,
|
|
1167
|
+
description: zod.z.string().optional()
|
|
1168
|
+
}).loose()
|
|
1169
|
+
).superRefine(checkRecordKeyMatchesField("kind", "nodes")),
|
|
1170
|
+
edges: zod.z.record(
|
|
1171
|
+
zod.z.string(),
|
|
1172
|
+
zod.z.object({
|
|
1173
|
+
kind: zod.z.string(),
|
|
1174
|
+
fromKinds: zod.z.array(zod.z.string()),
|
|
1175
|
+
toKinds: zod.z.array(zod.z.string()),
|
|
1176
|
+
properties: zod.z.record(zod.z.string(), zod.z.unknown()),
|
|
1177
|
+
cardinality: cardinalityZod,
|
|
1178
|
+
endpointExistence: endpointExistenceZod,
|
|
1179
|
+
description: zod.z.string().optional()
|
|
1180
|
+
}).loose()
|
|
1181
|
+
).superRefine(checkRecordKeyMatchesField("kind", "edges")),
|
|
1182
|
+
ontology: zod.z.object({
|
|
1183
|
+
metaEdges: zod.z.record(
|
|
1184
|
+
zod.z.string(),
|
|
1185
|
+
zod.z.object({
|
|
1186
|
+
name: zod.z.string(),
|
|
1187
|
+
transitive: zod.z.boolean(),
|
|
1188
|
+
symmetric: zod.z.boolean(),
|
|
1189
|
+
reflexive: zod.z.boolean(),
|
|
1190
|
+
inference: inferenceTypeZod,
|
|
1191
|
+
inverse: zod.z.string().optional(),
|
|
1192
|
+
description: zod.z.string().optional()
|
|
1193
|
+
}).loose()
|
|
1194
|
+
).superRefine(checkRecordKeyMatchesField("name", "ontology.metaEdges")),
|
|
1195
|
+
relations: zod.z.array(
|
|
1196
|
+
zod.z.object({
|
|
1197
|
+
metaEdge: zod.z.string(),
|
|
1198
|
+
from: zod.z.string(),
|
|
1199
|
+
to: zod.z.string()
|
|
1200
|
+
}).loose()
|
|
1201
|
+
),
|
|
1202
|
+
closures: zod.z.object({
|
|
1203
|
+
subClassAncestors: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1204
|
+
subClassDescendants: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1205
|
+
broaderClosure: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1206
|
+
narrowerClosure: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1207
|
+
equivalenceSets: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1208
|
+
disjointPairs: zod.z.array(zod.z.string()),
|
|
1209
|
+
partOfClosure: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1210
|
+
hasPartClosure: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1211
|
+
iriToKind: zod.z.record(zod.z.string(), zod.z.string()),
|
|
1212
|
+
edgeInverses: zod.z.record(zod.z.string(), zod.z.string()),
|
|
1213
|
+
edgeImplicationsClosure: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())),
|
|
1214
|
+
edgeImplyingClosure: zod.z.record(zod.z.string(), zod.z.array(zod.z.string()))
|
|
1215
|
+
}).loose()
|
|
1216
|
+
}).loose(),
|
|
1217
|
+
defaults: zod.z.object({
|
|
1218
|
+
onNodeDelete: deleteBehaviorZod,
|
|
1219
|
+
temporalMode: temporalModeZod
|
|
1220
|
+
}).loose()
|
|
1221
|
+
});
|
|
1114
1222
|
|
|
1115
1223
|
// src/schema/manager.ts
|
|
1224
|
+
function parseSerializedSchema(json) {
|
|
1225
|
+
let parsed;
|
|
1226
|
+
try {
|
|
1227
|
+
parsed = JSON.parse(json);
|
|
1228
|
+
} catch {
|
|
1229
|
+
throw new chunk44SXEVF4_cjs.DatabaseOperationError(
|
|
1230
|
+
"Stored schema document is not valid JSON",
|
|
1231
|
+
{ operation: "select", entity: "schema" }
|
|
1232
|
+
);
|
|
1233
|
+
}
|
|
1234
|
+
const result = serializedSchemaZod.safeParse(parsed);
|
|
1235
|
+
if (!result.success) {
|
|
1236
|
+
const issues = result.error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`).join("; ");
|
|
1237
|
+
throw new chunk44SXEVF4_cjs.DatabaseOperationError(
|
|
1238
|
+
`Stored schema document is malformed: ${issues}`,
|
|
1239
|
+
{ operation: "select", entity: "schema" }
|
|
1240
|
+
);
|
|
1241
|
+
}
|
|
1242
|
+
return result.data;
|
|
1243
|
+
}
|
|
1244
|
+
var MISSING_TABLE_PATTERNS = [
|
|
1245
|
+
"no such table",
|
|
1246
|
+
// SQLite
|
|
1247
|
+
"does not exist",
|
|
1248
|
+
// PostgreSQL ("relation ... does not exist")
|
|
1249
|
+
"SQLITE_ERROR"
|
|
1250
|
+
// D1 / Durable Objects error code
|
|
1251
|
+
];
|
|
1252
|
+
function isMissingTableError(error) {
|
|
1253
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1254
|
+
return MISSING_TABLE_PATTERNS.some((pattern) => message.includes(pattern));
|
|
1255
|
+
}
|
|
1116
1256
|
async function ensureSchema(backend, graph, options) {
|
|
1117
1257
|
const autoMigrate = options?.autoMigrate ?? true;
|
|
1118
1258
|
const throwOnBreaking = options?.throwOnBreaking ?? true;
|
|
1119
|
-
|
|
1259
|
+
let activeSchema;
|
|
1260
|
+
try {
|
|
1261
|
+
activeSchema = await backend.getActiveSchema(graph.id);
|
|
1262
|
+
} catch (error) {
|
|
1263
|
+
if (backend.bootstrapTables && isMissingTableError(error)) {
|
|
1264
|
+
await backend.bootstrapTables();
|
|
1265
|
+
activeSchema = await backend.getActiveSchema(graph.id);
|
|
1266
|
+
} else {
|
|
1267
|
+
throw error;
|
|
1268
|
+
}
|
|
1269
|
+
}
|
|
1120
1270
|
if (!activeSchema) {
|
|
1121
1271
|
const result = await initializeSchema(backend, graph);
|
|
1122
1272
|
return { status: "initialized", version: result.version };
|
|
1123
1273
|
}
|
|
1124
|
-
const storedSchema =
|
|
1274
|
+
const storedSchema = parseSerializedSchema(activeSchema.schema_doc);
|
|
1125
1275
|
const currentSchema = serializeSchema(graph, activeSchema.version + 1);
|
|
1126
1276
|
const storedHash = activeSchema.schema_hash;
|
|
1127
1277
|
const currentHash = await computeSchemaHash(currentSchema);
|
|
@@ -1211,7 +1361,7 @@ async function rollbackSchema(backend, graphId, targetVersion) {
|
|
|
1211
1361
|
async function getActiveSchema(backend, graphId) {
|
|
1212
1362
|
const row = await backend.getActiveSchema(graphId);
|
|
1213
1363
|
if (!row) return void 0;
|
|
1214
|
-
return
|
|
1364
|
+
return parseSerializedSchema(row.schema_doc);
|
|
1215
1365
|
}
|
|
1216
1366
|
async function isSchemaInitialized(backend, graphId) {
|
|
1217
1367
|
const row = await backend.getActiveSchema(graphId);
|
|
@@ -1220,7 +1370,7 @@ async function isSchemaInitialized(backend, graphId) {
|
|
|
1220
1370
|
async function getSchemaChanges(backend, graph) {
|
|
1221
1371
|
const activeSchema = await backend.getActiveSchema(graph.id);
|
|
1222
1372
|
if (!activeSchema) return void 0;
|
|
1223
|
-
const storedSchema =
|
|
1373
|
+
const storedSchema = parseSerializedSchema(activeSchema.schema_doc);
|
|
1224
1374
|
const currentSchema = serializeSchema(graph, activeSchema.version + 1);
|
|
1225
1375
|
return computeSchemaDiff(storedSchema, currentSchema);
|
|
1226
1376
|
}
|
|
@@ -1260,5 +1410,5 @@ exports.validateEdgeProps = validateEdgeProps;
|
|
|
1260
1410
|
exports.validateNodeProps = validateNodeProps;
|
|
1261
1411
|
exports.validateProps = validateProps;
|
|
1262
1412
|
exports.wrapZodError = wrapZodError;
|
|
1263
|
-
//# sourceMappingURL=chunk-
|
|
1264
|
-
//# sourceMappingURL=chunk-
|
|
1413
|
+
//# sourceMappingURL=chunk-3HQLOKS5.cjs.map
|
|
1414
|
+
//# sourceMappingURL=chunk-3HQLOKS5.cjs.map
|