@nicia-ai/typegraph 0.22.0 → 0.23.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/{ast-CSLbPIOC.d.ts → ast-C8S37w1A.d.ts} +1 -1
- package/dist/{ast-DogwbBqA.d.cts → ast-dgLhLOg0.d.cts} +1 -1
- package/dist/backend/postgres/index.cjs +165 -48
- package/dist/backend/postgres/index.cjs.map +1 -1
- package/dist/backend/postgres/index.d.cts +43 -6
- package/dist/backend/postgres/index.d.ts +43 -6
- package/dist/backend/postgres/index.js +138 -21
- package/dist/backend/postgres/index.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +13 -12
- package/dist/backend/sqlite/index.d.cts +6 -6
- package/dist/backend/sqlite/index.d.ts +6 -6
- package/dist/backend/sqlite/index.js +3 -2
- package/dist/backend/sqlite/libsql.cjs +6 -5
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +4 -4
- package/dist/backend/sqlite/libsql.d.ts +4 -4
- package/dist/backend/sqlite/libsql.js +3 -2
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +7 -6
- package/dist/backend/sqlite/local.cjs.map +1 -1
- package/dist/backend/sqlite/local.d.cts +4 -4
- package/dist/backend/sqlite/local.d.ts +4 -4
- package/dist/backend/sqlite/local.js +3 -2
- package/dist/backend/sqlite/local.js.map +1 -1
- package/dist/chunk-3EUKJEQ3.js +77 -0
- package/dist/chunk-3EUKJEQ3.js.map +1 -0
- package/dist/{chunk-SCXOGKLD.cjs → chunk-7OD2EPN4.cjs} +20 -42
- package/dist/chunk-7OD2EPN4.cjs.map +1 -0
- package/dist/chunk-7TU5EWQ7.js +47 -0
- package/dist/chunk-7TU5EWQ7.js.map +1 -0
- package/dist/{chunk-NSLTDXVH.js → chunk-EP2KSSD5.js} +18 -21
- package/dist/chunk-EP2KSSD5.js.map +1 -0
- package/dist/{chunk-5ZMMHUWR.js → chunk-H2CAJ4ZV.js} +20 -40
- package/dist/chunk-H2CAJ4ZV.js.map +1 -0
- package/dist/chunk-HTGDWIDE.cjs +89 -0
- package/dist/chunk-HTGDWIDE.cjs.map +1 -0
- package/dist/{chunk-GUYI6VAS.cjs → chunk-O5BRZEIZ.cjs} +34 -37
- package/dist/chunk-O5BRZEIZ.cjs.map +1 -0
- package/dist/chunk-RNUNP5JD.cjs +52 -0
- package/dist/chunk-RNUNP5JD.cjs.map +1 -0
- package/dist/{ddl-BqkTShcR.d.ts → ddl-1tFIvt9V.d.ts} +3 -3
- package/dist/{ddl-Dk1NDN3M.d.cts → ddl-B_H8JM-E.d.cts} +3 -3
- package/dist/index.cjs +133 -145
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +94 -106
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.d.cts +5 -5
- package/dist/indexes/index.d.ts +5 -5
- package/dist/interchange/index.d.cts +4 -4
- package/dist/interchange/index.d.ts +4 -4
- package/dist/{manager-BPK-2PUI.d.cts → manager-Vkz28eAC.d.cts} +1 -1
- package/dist/{manager-0jVZtiE8.d.ts → manager-nIhmttD-.d.ts} +1 -1
- package/dist/profiler/index.d.cts +6 -6
- package/dist/profiler/index.d.ts +6 -6
- package/dist/schema/index.d.cts +4 -4
- package/dist/schema/index.d.ts +4 -4
- package/dist/{sqlite-D1rrwcir.d.cts → sqlite-D0aceIe0.d.cts} +1 -1
- package/dist/{sqlite-W3rmJMlc.d.ts → sqlite-SUxbZqfy.d.ts} +1 -1
- package/dist/{store-C0q13mtJ.d.ts → store-CpvwTMxV.d.cts} +58 -8
- package/dist/{store-2QW2SIRk.d.cts → store-U3i2tUch.d.ts} +58 -8
- package/dist/{types-IMQCuser.d.ts → types-C-zfYDJB.d.ts} +2 -2
- package/dist/{types-vgjar7Ch.d.cts → types-CQx4iW5Y.d.cts} +2 -2
- package/dist/{types-CQF88McG.d.ts → types-Qk2l3IkQ.d.cts} +20 -1
- package/dist/{types-CQF88McG.d.cts → types-Qk2l3IkQ.d.ts} +20 -1
- package/dist/{types-CglvhPKz.d.ts → types-qYFZ9SqD.d.ts} +1 -1
- package/dist/{types-D23slCOA.d.cts → types-yH4_p0XB.d.cts} +1 -1
- package/package.json +15 -1
- package/dist/chunk-5ZMMHUWR.js.map +0 -1
- package/dist/chunk-GUYI6VAS.cjs.map +0 -1
- package/dist/chunk-NSLTDXVH.js.map +0 -1
- package/dist/chunk-SCXOGKLD.cjs.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { m as FulltextStrategy, G as GraphBackend } from '../../types-
|
|
1
|
+
import { m as FulltextStrategy, G as GraphBackend } from '../../types-Qk2l3IkQ.cjs';
|
|
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-D0aceIe0.cjs';
|
|
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-D0aceIe0.cjs';
|
|
5
|
+
export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-B_H8JM-E.cjs';
|
|
6
6
|
import 'drizzle-orm';
|
|
7
7
|
import 'zod';
|
|
8
|
-
import '../../types-
|
|
9
|
-
import '../../ast-
|
|
8
|
+
import '../../types-CQx4iW5Y.cjs';
|
|
9
|
+
import '../../ast-dgLhLOg0.cjs';
|
|
10
10
|
import 'drizzle-orm/pg-core';
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { m as FulltextStrategy, G as GraphBackend } from '../../types-
|
|
1
|
+
import { m as FulltextStrategy, G as GraphBackend } from '../../types-Qk2l3IkQ.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-SUxbZqfy.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-SUxbZqfy.js';
|
|
5
|
+
export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-1tFIvt9V.js';
|
|
6
6
|
import 'drizzle-orm';
|
|
7
7
|
import 'zod';
|
|
8
|
-
import '../../types-
|
|
9
|
-
import '../../ast-
|
|
8
|
+
import '../../types-C-zfYDJB.js';
|
|
9
|
+
import '../../ast-C8S37w1A.js';
|
|
10
10
|
import 'drizzle-orm/pg-core';
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { createSqliteBackend } from '../../chunk-
|
|
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-
|
|
1
|
+
export { createSqliteBackend } from '../../chunk-EP2KSSD5.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-H2CAJ4ZV.js';
|
|
3
|
+
import '../../chunk-7TU5EWQ7.js';
|
|
3
4
|
import '../../chunk-WFMTAEEN.js';
|
|
4
5
|
import '../../chunk-3PPEHLGK.js';
|
|
5
6
|
import '../../chunk-753F33CV.js';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkO5BRZEIZ_cjs = require('../../chunk-O5BRZEIZ.cjs');
|
|
4
|
+
var chunk7OD2EPN4_cjs = require('../../chunk-7OD2EPN4.cjs');
|
|
5
|
+
require('../../chunk-RNUNP5JD.cjs');
|
|
5
6
|
require('../../chunk-O5PST6TB.cjs');
|
|
6
7
|
require('../../chunk-PEE4EWXZ.cjs');
|
|
7
8
|
require('../../chunk-3JK66E3I.cjs');
|
|
@@ -9,11 +10,11 @@ require('../../chunk-UVZHTBZ5.cjs');
|
|
|
9
10
|
var libsql = require('drizzle-orm/libsql');
|
|
10
11
|
|
|
11
12
|
async function createLibsqlBackend(client, options = {}) {
|
|
12
|
-
const tables2 = options.tables ??
|
|
13
|
+
const tables2 = options.tables ?? chunk7OD2EPN4_cjs.tables2;
|
|
13
14
|
const db = libsql.drizzle(client);
|
|
14
|
-
const ddlStatements =
|
|
15
|
+
const ddlStatements = chunk7OD2EPN4_cjs.generateSqliteDDL(tables2);
|
|
15
16
|
await client.executeMultiple(ddlStatements.join(";\n"));
|
|
16
|
-
const backend =
|
|
17
|
+
const backend = chunkO5BRZEIZ_cjs.createSqliteBackend(db, {
|
|
17
18
|
executionProfile: {
|
|
18
19
|
isSync: false,
|
|
19
20
|
transactionMode: "drizzle"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/backend/sqlite/libsql.ts"],"names":["tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/libsql.ts"],"names":["tables","drizzle","generateSqliteDDL","createSqliteBackend"],"mappings":";;;;;;;;;;;AA6FA,eAAsB,mBAAA,CACpB,MAAA,EACA,OAAA,GAAgC,EAAC,EACH;AAC9B,EAAA,MAAMA,OAAAA,GAAS,QAAQ,MAAA,IAAUA,yBAAA;AACjC,EAAA,MAAM,EAAA,GAAKC,eAAQ,MAAM,CAAA;AAEzB,EAAA,MAAM,aAAA,GAAgBC,oCAAkBF,OAAM,CAAA;AAC9C,EAAA,MAAM,MAAA,CAAO,eAAA,CAAgB,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAA;AAEtD,EAAA,MAAM,OAAA,GAAUG,sCAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ,KAAA;AAAA,MACR,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,MAAA,EAAAH;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,EAAA,EAAG;AACvB","file":"libsql.cjs","sourcesContent":["/**\n * libsql backend for TypeGraph.\n *\n * This module wraps `@libsql/client` with the correct execution profile\n * for use with TypeGraph. It is compatible with any `@libsql/client`\n * instance (local file, remote Turso, embedded replicas).\n *\n * @example In-memory database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Remote Turso database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"libsql://my-db.turso.io\", authToken: \"...\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n */\nimport type { Client } from \"@libsql/client\";\nimport { drizzle, type LibSQLDatabase } from \"drizzle-orm/libsql\";\n\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// Types\n// ============================================================\n\n/**\n * Options for creating a libsql backend.\n */\nexport type LibsqlBackendOptions = Readonly<{\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a libsql backend.\n */\nexport type LibsqlBackendResult = 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 sharing the connection.\n */\n db: LibSQLDatabase;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a TypeGraph backend backed by `@libsql/client`.\n *\n * Handles DDL execution and configures the correct execution profile\n * (`isSync: false`, `transactionMode: \"drizzle\"`). The caller retains\n * ownership of the client and is responsible for closing it.\n *\n * @param client - An `@libsql/client` Client instance\n * @param options - Configuration options\n * @returns Backend and Drizzle database instances\n *\n * @example\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * ```\n */\nexport async function createLibsqlBackend(\n client: Client,\n options: LibsqlBackendOptions = {},\n): Promise<LibsqlBackendResult> {\n const tables = options.tables ?? defaultTables;\n const db = drizzle(client);\n\n const ddlStatements = generateSqliteDDL(tables);\n await client.executeMultiple(ddlStatements.join(\";\\n\"));\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: false,\n transactionMode: \"drizzle\",\n },\n tables,\n });\n\n return { backend, db };\n}\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Client } from '@libsql/client';
|
|
2
2
|
import { LibSQLDatabase } from 'drizzle-orm/libsql';
|
|
3
|
-
import { G as GraphBackend } from '../../types-
|
|
4
|
-
import { S as SqliteTables } from '../../sqlite-
|
|
3
|
+
import { G as GraphBackend } from '../../types-Qk2l3IkQ.cjs';
|
|
4
|
+
import { S as SqliteTables } from '../../sqlite-D0aceIe0.cjs';
|
|
5
5
|
import 'drizzle-orm';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'drizzle-orm/sqlite-core';
|
|
8
|
-
import '../../types-
|
|
9
|
-
import '../../ast-
|
|
8
|
+
import '../../types-CQx4iW5Y.cjs';
|
|
9
|
+
import '../../ast-dgLhLOg0.cjs';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* libsql backend for TypeGraph.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Client } from '@libsql/client';
|
|
2
2
|
import { LibSQLDatabase } from 'drizzle-orm/libsql';
|
|
3
|
-
import { G as GraphBackend } from '../../types-
|
|
4
|
-
import { S as SqliteTables } from '../../sqlite-
|
|
3
|
+
import { G as GraphBackend } from '../../types-Qk2l3IkQ.js';
|
|
4
|
+
import { S as SqliteTables } from '../../sqlite-SUxbZqfy.js';
|
|
5
5
|
import 'drizzle-orm';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'drizzle-orm/sqlite-core';
|
|
8
|
-
import '../../types-
|
|
9
|
-
import '../../ast-
|
|
8
|
+
import '../../types-C-zfYDJB.js';
|
|
9
|
+
import '../../ast-C8S37w1A.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* libsql backend for TypeGraph.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { createSqliteBackend } from '../../chunk-
|
|
2
|
-
import { tables2, generateSqliteDDL } from '../../chunk-
|
|
1
|
+
import { createSqliteBackend } from '../../chunk-EP2KSSD5.js';
|
|
2
|
+
import { tables2, generateSqliteDDL } from '../../chunk-H2CAJ4ZV.js';
|
|
3
|
+
import '../../chunk-7TU5EWQ7.js';
|
|
3
4
|
import '../../chunk-WFMTAEEN.js';
|
|
4
5
|
import '../../chunk-3PPEHLGK.js';
|
|
5
6
|
import '../../chunk-753F33CV.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/backend/sqlite/libsql.ts"],"names":["tables"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/libsql.ts"],"names":["tables"],"mappings":";;;;;;;;;AA6FA,eAAsB,mBAAA,CACpB,MAAA,EACA,OAAA,GAAgC,EAAC,EACH;AAC9B,EAAA,MAAMA,SAAAA,GAAS,QAAQ,MAAA,IAAUA,OAAA;AACjC,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AAEzB,EAAA,MAAM,aAAA,GAAgB,kBAAkBA,SAAM,CAAA;AAC9C,EAAA,MAAM,MAAA,CAAO,eAAA,CAAgB,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAA;AAEtD,EAAA,MAAM,OAAA,GAAU,oBAAoB,EAAA,EAAI;AAAA,IACtC,gBAAA,EAAkB;AAAA,MAChB,MAAA,EAAQ,KAAA;AAAA,MACR,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,MAAA,EAAAA;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,EAAA,EAAG;AACvB","file":"libsql.js","sourcesContent":["/**\n * libsql backend for TypeGraph.\n *\n * This module wraps `@libsql/client` with the correct execution profile\n * for use with TypeGraph. It is compatible with any `@libsql/client`\n * instance (local file, remote Turso, embedded replicas).\n *\n * @example In-memory database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Remote Turso database\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"libsql://my-db.turso.io\", authToken: \"...\" });\n * const { backend } = await createLibsqlBackend(client);\n * const store = createStore(graph, backend);\n * ```\n */\nimport type { Client } from \"@libsql/client\";\nimport { drizzle, type LibSQLDatabase } from \"drizzle-orm/libsql\";\n\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// Types\n// ============================================================\n\n/**\n * Options for creating a libsql backend.\n */\nexport type LibsqlBackendOptions = Readonly<{\n /**\n * Custom table definitions.\n * Defaults to standard TypeGraph table names.\n */\n tables?: SqliteTables;\n}>;\n\n/**\n * Result of creating a libsql backend.\n */\nexport type LibsqlBackendResult = 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 sharing the connection.\n */\n db: LibSQLDatabase;\n}>;\n\n// ============================================================\n// Factory Function\n// ============================================================\n\n/**\n * Creates a TypeGraph backend backed by `@libsql/client`.\n *\n * Handles DDL execution and configures the correct execution profile\n * (`isSync: false`, `transactionMode: \"drizzle\"`). The caller retains\n * ownership of the client and is responsible for closing it.\n *\n * @param client - An `@libsql/client` Client instance\n * @param options - Configuration options\n * @returns Backend and Drizzle database instances\n *\n * @example\n * ```typescript\n * import { createClient } from \"@libsql/client\";\n * import { createLibsqlBackend } from \"@nicia-ai/typegraph/sqlite/libsql\";\n *\n * const client = createClient({ url: \"file::memory:\" });\n * const { backend } = await createLibsqlBackend(client);\n * ```\n */\nexport async function createLibsqlBackend(\n client: Client,\n options: LibsqlBackendOptions = {},\n): Promise<LibsqlBackendResult> {\n const tables = options.tables ?? defaultTables;\n const db = drizzle(client);\n\n const ddlStatements = generateSqliteDDL(tables);\n await client.executeMultiple(ddlStatements.join(\";\\n\"));\n\n const backend = createSqliteBackend(db, {\n executionProfile: {\n isSync: false,\n transactionMode: \"drizzle\",\n },\n tables,\n });\n\n return { backend, db };\n}\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkO5BRZEIZ_cjs = require('../../chunk-O5BRZEIZ.cjs');
|
|
4
|
+
var chunk7OD2EPN4_cjs = require('../../chunk-7OD2EPN4.cjs');
|
|
5
|
+
var chunkRNUNP5JD_cjs = require('../../chunk-RNUNP5JD.cjs');
|
|
5
6
|
var chunkO5PST6TB_cjs = require('../../chunk-O5PST6TB.cjs');
|
|
6
7
|
require('../../chunk-PEE4EWXZ.cjs');
|
|
7
8
|
require('../../chunk-3JK66E3I.cjs');
|
|
@@ -56,22 +57,22 @@ function createDatabase(path) {
|
|
|
56
57
|
}
|
|
57
58
|
function createLocalSqliteBackend(options = {}) {
|
|
58
59
|
const path = options.path ?? ":memory:";
|
|
59
|
-
const tables2 = options.tables ??
|
|
60
|
+
const tables2 = options.tables ?? chunk7OD2EPN4_cjs.tables2;
|
|
60
61
|
const sqlite = createDatabase(path);
|
|
61
62
|
const hasVectorEmbeddings = tryLoadSqliteVec(sqlite);
|
|
62
63
|
const db = betterSqlite3.drizzle(sqlite);
|
|
63
|
-
const ddlStatements =
|
|
64
|
+
const ddlStatements = chunk7OD2EPN4_cjs.generateSqliteDDL(tables2);
|
|
64
65
|
for (const statement of ddlStatements) {
|
|
65
66
|
sqlite.exec(statement);
|
|
66
67
|
}
|
|
67
|
-
const backend =
|
|
68
|
+
const backend = chunkO5BRZEIZ_cjs.createSqliteBackend(db, {
|
|
68
69
|
executionProfile: {
|
|
69
70
|
isSync: true
|
|
70
71
|
},
|
|
71
72
|
tables: tables2,
|
|
72
73
|
hasVectorEmbeddings
|
|
73
74
|
});
|
|
74
|
-
const managedBackend =
|
|
75
|
+
const managedBackend = chunkRNUNP5JD_cjs.wrapWithManagedClose(backend, () => {
|
|
75
76
|
sqlite.close();
|
|
76
77
|
});
|
|
77
78
|
return { backend: managedBackend, db };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["createRequire","Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend","wrapWithManagedClose"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["createRequire","Database","ConfigurationError","tables","drizzle","generateSqliteDDL","createSqliteBackend","wrapWithManagedClose"],"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 { createRequire } from \"node:module\";\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, wrapWithManagedClose } from \"../types\";\n\nconst nodeRequire = createRequire(import.meta.url);\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\n // Best-effort: load sqlite-vec so embedding fields are persisted to the\n // embeddings table. Without it, nodes with `embedding()` fields validate\n // and insert but their vectors are silently dropped. When the user has\n // installed sqlite-vec as a peer dep we load it; otherwise we proceed\n // without vector support.\n const hasVectorEmbeddings = tryLoadSqliteVec(sqlite);\n\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 hasVectorEmbeddings,\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\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-Qk2l3IkQ.cjs';
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-D0aceIe0.cjs';
|
|
4
4
|
import 'drizzle-orm';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import 'drizzle-orm/sqlite-core';
|
|
7
|
-
import '../../types-
|
|
8
|
-
import '../../ast-
|
|
7
|
+
import '../../types-CQx4iW5Y.cjs';
|
|
8
|
+
import '../../ast-dgLhLOg0.cjs';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Options for creating a local SQLite backend.
|
|
@@ -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-Qk2l3IkQ.js';
|
|
3
|
+
import { S as SqliteTables } from '../../sqlite-SUxbZqfy.js';
|
|
4
4
|
import 'drizzle-orm';
|
|
5
5
|
import 'zod';
|
|
6
6
|
import 'drizzle-orm/sqlite-core';
|
|
7
|
-
import '../../types-
|
|
8
|
-
import '../../ast-
|
|
7
|
+
import '../../types-C-zfYDJB.js';
|
|
8
|
+
import '../../ast-C8S37w1A.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Options for creating a local SQLite backend.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { createSqliteBackend } from '../../chunk-
|
|
2
|
-
import { tables2, generateSqliteDDL
|
|
1
|
+
import { createSqliteBackend } from '../../chunk-EP2KSSD5.js';
|
|
2
|
+
import { tables2, generateSqliteDDL } from '../../chunk-H2CAJ4ZV.js';
|
|
3
|
+
import { wrapWithManagedClose } from '../../chunk-7TU5EWQ7.js';
|
|
3
4
|
import { ConfigurationError } from '../../chunk-WFMTAEEN.js';
|
|
4
5
|
import '../../chunk-3PPEHLGK.js';
|
|
5
6
|
import '../../chunk-753F33CV.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/backend/sqlite/local.ts"],"names":["tables"],"mappings":"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","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 { createRequire } from \"node:module\";\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, wrapWithManagedClose } from \"../types\";\n\nconst nodeRequire = createRequire(import.meta.url);\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\n // Best-effort: load sqlite-vec so embedding fields are persisted to the\n // embeddings table. Without it, nodes with `embedding()` fields validate\n // and insert but their vectors are silently dropped. When the user has\n // installed sqlite-vec as a peer dep we load it; otherwise we proceed\n // without vector support.\n const hasVectorEmbeddings = tryLoadSqliteVec(sqlite);\n\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 hasVectorEmbeddings,\n });\n const managedBackend = wrapWithManagedClose(backend, () => {\n sqlite.close();\n });\n\n return { backend: managedBackend, db };\n}\n\nfunction tryLoadSqliteVec(sqlite: Database.Database): boolean {\n try {\n // `sqlite-vec` is an optional peer dep; resolved via createRequire so\n // bundlers don't mark it as a hard import. Node resolves the package\n // only when it's actually installed.\n const module_: unknown = nodeRequire(\"sqlite-vec\");\n if (\n typeof module_ === \"object\" &&\n module_ !== null &&\n \"load\" in module_ &&\n typeof module_.load === \"function\"\n ) {\n (module_ as { load: (db: Database.Database) => void }).load(sqlite);\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
|
|
3
|
+
// src/query/compiler/utils.ts
|
|
4
|
+
var NODE_COLUMNS = [
|
|
5
|
+
"id",
|
|
6
|
+
"kind",
|
|
7
|
+
"props",
|
|
8
|
+
"version",
|
|
9
|
+
"valid_from",
|
|
10
|
+
"valid_to",
|
|
11
|
+
"created_at",
|
|
12
|
+
"updated_at",
|
|
13
|
+
"deleted_at"
|
|
14
|
+
];
|
|
15
|
+
var EDGE_COLUMNS = [
|
|
16
|
+
"id",
|
|
17
|
+
"kind",
|
|
18
|
+
"from_id",
|
|
19
|
+
"to_id",
|
|
20
|
+
"props",
|
|
21
|
+
"valid_from",
|
|
22
|
+
"valid_to",
|
|
23
|
+
"created_at",
|
|
24
|
+
"updated_at",
|
|
25
|
+
"deleted_at"
|
|
26
|
+
];
|
|
27
|
+
var EMPTY_REQUIRED_COLUMNS = /* @__PURE__ */ new Set();
|
|
28
|
+
function quoteIdentifier(identifier) {
|
|
29
|
+
return sql.raw(`"${identifier.replaceAll('"', '""')}"`);
|
|
30
|
+
}
|
|
31
|
+
function shouldProjectColumn(requiredColumns, column, alwaysRequiredColumns) {
|
|
32
|
+
if (alwaysRequiredColumns?.has(column)) return true;
|
|
33
|
+
if (requiredColumns === void 0) return true;
|
|
34
|
+
return requiredColumns.has(column);
|
|
35
|
+
}
|
|
36
|
+
function addRequiredColumn(requiredColumnsByAlias, alias, column) {
|
|
37
|
+
const existing = requiredColumnsByAlias.get(alias);
|
|
38
|
+
if (existing) {
|
|
39
|
+
existing.add(column);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
requiredColumnsByAlias.set(alias, /* @__PURE__ */ new Set([column]));
|
|
43
|
+
}
|
|
44
|
+
function markFieldRefAsRequired(requiredColumnsByAlias, field) {
|
|
45
|
+
const column = field.path[0];
|
|
46
|
+
if (column === void 0) return;
|
|
47
|
+
addRequiredColumn(requiredColumnsByAlias, field.alias, column);
|
|
48
|
+
}
|
|
49
|
+
function mapSelectiveSystemFieldToColumn(field) {
|
|
50
|
+
if (field === "fromId") return "from_id";
|
|
51
|
+
if (field === "toId") return "to_id";
|
|
52
|
+
if (field.startsWith("meta.")) {
|
|
53
|
+
return field.slice(5).replaceAll(/([A-Z])/g, "_$1").toLowerCase();
|
|
54
|
+
}
|
|
55
|
+
return field;
|
|
56
|
+
}
|
|
57
|
+
function markSelectiveFieldAsRequired(requiredColumnsByAlias, field) {
|
|
58
|
+
if (field.isSystemField) {
|
|
59
|
+
addRequiredColumn(
|
|
60
|
+
requiredColumnsByAlias,
|
|
61
|
+
field.alias,
|
|
62
|
+
mapSelectiveSystemFieldToColumn(field.field)
|
|
63
|
+
);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
addRequiredColumn(requiredColumnsByAlias, field.alias, "props");
|
|
67
|
+
}
|
|
68
|
+
function isIdFieldRef(field) {
|
|
69
|
+
return field.path.length === 1 && field.path[0] === "id" && field.jsonPointer === void 0;
|
|
70
|
+
}
|
|
71
|
+
function isAggregateExpr(source) {
|
|
72
|
+
return "__type" in source && source.__type === "aggregate";
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { EDGE_COLUMNS, EMPTY_REQUIRED_COLUMNS, NODE_COLUMNS, addRequiredColumn, isAggregateExpr, isIdFieldRef, mapSelectiveSystemFieldToColumn, markFieldRefAsRequired, markSelectiveFieldAsRequired, quoteIdentifier, shouldProjectColumn };
|
|
76
|
+
//# sourceMappingURL=chunk-3EUKJEQ3.js.map
|
|
77
|
+
//# sourceMappingURL=chunk-3EUKJEQ3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/query/compiler/utils.ts"],"names":[],"mappings":";;;AAaO,IAAM,YAAA,GAAe;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAEO,IAAM,YAAA,GAAe;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;AAGO,IAAM,sBAAA,uBAA6B,GAAA;AAMnC,SAAS,gBAAgB,UAAA,EAAyB;AACvD,EAAA,OAAO,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,UAAA,CAAW,WAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACxD;AAcO,SAAS,mBAAA,CACd,eAAA,EACA,MAAA,EACA,qBAAA,EACS;AACT,EAAA,IAAI,qBAAA,EAAuB,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,IAAA;AAC/C,EAAA,IAAI,eAAA,KAAoB,QAAW,OAAO,IAAA;AAC1C,EAAA,OAAO,eAAA,CAAgB,IAAI,MAAM,CAAA;AACnC;AAMO,SAAS,iBAAA,CACd,sBAAA,EACA,KAAA,EACA,MAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,GAAA,CAAI,KAAK,CAAA;AACjD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,QAAA,CAAS,IAAI,MAAM,CAAA;AACnB,IAAA;AAAA,EACF;AACA,EAAA,sBAAA,CAAuB,IAAI,KAAA,kBAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACrD;AAEO,SAAS,sBAAA,CACd,wBACA,KAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,EAAA,iBAAA,CAAkB,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAC/D;AAEO,SAAS,gCAAgC,KAAA,EAAuB;AACrE,EAAA,IAAI,KAAA,KAAU,UAAU,OAAO,SAAA;AAC/B,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,OAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA,EAAG;AAC7B,IAAA,OAAO,KAAA,CACJ,MAAM,CAAC,CAAA,CACP,WAAW,UAAA,EAAY,KAAK,EAC5B,WAAA,EAAY;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,4BAAA,CACd,wBACA,KAAA,EACM;AACN,EAAA,IAAI,MAAM,aAAA,EAAe;AACvB,IAAA,iBAAA;AAAA,MACE,sBAAA;AAAA,MACA,KAAA,CAAM,KAAA;AAAA,MACN,+BAAA,CAAgC,MAAM,KAAK;AAAA,KAC7C;AACA,IAAA;AAAA,EACF;AACA,EAAA,iBAAA,CAAkB,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,OAAO,CAAA;AAChE;AAMO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,OACE,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,IACtB,KAAA,CAAM,KAAK,CAAC,CAAA,KAAM,IAAA,IAClB,KAAA,CAAM,WAAA,KAAgB,MAAA;AAE1B;AAEO,SAAS,gBACd,MAAA,EACyB;AACzB,EAAA,OAAO,QAAA,IAAY,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,WAAA;AACjD","file":"chunk-3EUKJEQ3.js","sourcesContent":["/**\n * Shared Compiler Utilities\n *\n * Functions and constants shared between the standard and recursive compilers.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { type AggregateExpr, type FieldRef, type SelectiveField } from \"../ast\";\n\n// ============================================================\n// Constants\n// ============================================================\n\nexport const NODE_COLUMNS = [\n \"id\",\n \"kind\",\n \"props\",\n \"version\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n] as const;\n\nexport const EDGE_COLUMNS = [\n \"id\",\n \"kind\",\n \"from_id\",\n \"to_id\",\n \"props\",\n \"valid_from\",\n \"valid_to\",\n \"created_at\",\n \"updated_at\",\n \"deleted_at\",\n] as const;\n\nexport type RequiredColumnsByAlias = ReadonlyMap<string, ReadonlySet<string>>;\nexport const EMPTY_REQUIRED_COLUMNS = new Set<string>();\n\n// ============================================================\n// SQL Helpers\n// ============================================================\n\nexport function quoteIdentifier(identifier: string): SQL {\n return sql.raw(`\"${identifier.replaceAll('\"', '\"\"')}\"`);\n}\n\n// ============================================================\n// Column Projection\n// ============================================================\n\n/**\n * Determines whether a column should be included in the projection.\n *\n * @param requiredColumns - Set of columns required by the query, or undefined to include all.\n * @param column - The column name to check.\n * @param alwaysRequiredColumns - Optional set of columns that are always projected\n * (e.g. join keys in recursive CTEs). Pass only from recursive compiler callers.\n */\nexport function shouldProjectColumn(\n requiredColumns: ReadonlySet<string> | undefined,\n column: string,\n alwaysRequiredColumns?: ReadonlySet<string>,\n): boolean {\n if (alwaysRequiredColumns?.has(column)) return true;\n if (requiredColumns === undefined) return true;\n return requiredColumns.has(column);\n}\n\n// ============================================================\n// Required Column Tracking\n// ============================================================\n\nexport function addRequiredColumn(\n requiredColumnsByAlias: Map<string, Set<string>>,\n alias: string,\n column: string,\n): void {\n const existing = requiredColumnsByAlias.get(alias);\n if (existing) {\n existing.add(column);\n return;\n }\n requiredColumnsByAlias.set(alias, new Set([column]));\n}\n\nexport function markFieldRefAsRequired(\n requiredColumnsByAlias: Map<string, Set<string>>,\n field: FieldRef,\n): void {\n const column = field.path[0];\n if (column === undefined) return;\n addRequiredColumn(requiredColumnsByAlias, field.alias, column);\n}\n\nexport function mapSelectiveSystemFieldToColumn(field: string): string {\n if (field === \"fromId\") return \"from_id\";\n if (field === \"toId\") return \"to_id\";\n if (field.startsWith(\"meta.\")) {\n return field\n .slice(5)\n .replaceAll(/([A-Z])/g, \"_$1\")\n .toLowerCase();\n }\n return field;\n}\n\nexport function markSelectiveFieldAsRequired(\n requiredColumnsByAlias: Map<string, Set<string>>,\n field: SelectiveField,\n): void {\n if (field.isSystemField) {\n addRequiredColumn(\n requiredColumnsByAlias,\n field.alias,\n mapSelectiveSystemFieldToColumn(field.field),\n );\n return;\n }\n addRequiredColumn(requiredColumnsByAlias, field.alias, \"props\");\n}\n\n// ============================================================\n// AST Type Guards\n// ============================================================\n\nexport function isIdFieldRef(field: FieldRef): boolean {\n return (\n field.path.length === 1 &&\n field.path[0] === \"id\" &&\n field.jsonPointer === undefined\n );\n}\n\nexport function isAggregateExpr(\n source: FieldRef | AggregateExpr,\n): source is AggregateExpr {\n return \"__type\" in source && source.__type === \"aggregate\";\n}\n"]}
|
|
@@ -7,43 +7,6 @@ var pgCore = require('drizzle-orm/pg-core');
|
|
|
7
7
|
var sqliteCore = require('drizzle-orm/sqlite-core');
|
|
8
8
|
var drizzleOrm = require('drizzle-orm');
|
|
9
9
|
|
|
10
|
-
// src/backend/types.ts
|
|
11
|
-
function wrapWithManagedClose(backend, teardown) {
|
|
12
|
-
let isClosed = false;
|
|
13
|
-
return {
|
|
14
|
-
...backend,
|
|
15
|
-
async close() {
|
|
16
|
-
if (isClosed) return;
|
|
17
|
-
isClosed = true;
|
|
18
|
-
await backend.close();
|
|
19
|
-
await teardown();
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
var SQLITE_CAPABILITIES = {
|
|
24
|
-
jsonb: false,
|
|
25
|
-
// SQLite uses TEXT with json functions
|
|
26
|
-
partialIndexes: true,
|
|
27
|
-
// SQLite supports WHERE in CREATE INDEX
|
|
28
|
-
ginIndexes: false,
|
|
29
|
-
// SQLite doesn't have GIN
|
|
30
|
-
cte: true,
|
|
31
|
-
// SQLite supports WITH
|
|
32
|
-
returning: true,
|
|
33
|
-
// SQLite 3.35+ supports RETURNING
|
|
34
|
-
transactions: true
|
|
35
|
-
// SQLite supports transactions
|
|
36
|
-
};
|
|
37
|
-
var POSTGRES_CAPABILITIES = {
|
|
38
|
-
jsonb: true,
|
|
39
|
-
// PostgreSQL has native JSONB
|
|
40
|
-
partialIndexes: true,
|
|
41
|
-
ginIndexes: true,
|
|
42
|
-
cte: true,
|
|
43
|
-
returning: true,
|
|
44
|
-
transactions: true
|
|
45
|
-
// PostgreSQL supports transactions
|
|
46
|
-
};
|
|
47
10
|
var vector = pgCore.customType({
|
|
48
11
|
dataType(config) {
|
|
49
12
|
return config?.dimensions ? `vector(${config.dimensions})` : "vector";
|
|
@@ -2285,6 +2248,23 @@ function dropSqliteVectorIndex(graphId, nodeKind, fieldPath, metric = "cosine")
|
|
|
2285
2248
|
};
|
|
2286
2249
|
}
|
|
2287
2250
|
|
|
2251
|
+
// src/backend/drizzle/execution/lru.ts
|
|
2252
|
+
function getOrCreateLru(cache, key, cacheMax, create) {
|
|
2253
|
+
const cached = cache.get(key);
|
|
2254
|
+
if (cached !== void 0) {
|
|
2255
|
+
cache.delete(key);
|
|
2256
|
+
cache.set(key, cached);
|
|
2257
|
+
return cached;
|
|
2258
|
+
}
|
|
2259
|
+
const value = create();
|
|
2260
|
+
cache.set(key, value);
|
|
2261
|
+
if (cache.size > cacheMax) {
|
|
2262
|
+
const oldest = cache.keys().next().value;
|
|
2263
|
+
if (oldest !== void 0) cache.delete(oldest);
|
|
2264
|
+
}
|
|
2265
|
+
return value;
|
|
2266
|
+
}
|
|
2267
|
+
|
|
2288
2268
|
// src/backend/drizzle/execution/types.ts
|
|
2289
2269
|
function compileQueryWithDialect(db, query, backendName) {
|
|
2290
2270
|
const databaseWithCompiler = db;
|
|
@@ -2295,9 +2275,7 @@ function compileQueryWithDialect(db, query, backendName) {
|
|
|
2295
2275
|
return compiler.sqlToQuery(query);
|
|
2296
2276
|
}
|
|
2297
2277
|
|
|
2298
|
-
exports.POSTGRES_CAPABILITIES = POSTGRES_CAPABILITIES;
|
|
2299
2278
|
exports.POSTGRES_ROW_MAPPER_CONFIG = POSTGRES_ROW_MAPPER_CONFIG;
|
|
2300
|
-
exports.SQLITE_CAPABILITIES = SQLITE_CAPABILITIES;
|
|
2301
2279
|
exports.SQLITE_ROW_MAPPER_CONFIG = SQLITE_ROW_MAPPER_CONFIG;
|
|
2302
2280
|
exports.compileQueryWithDialect = compileQueryWithDialect;
|
|
2303
2281
|
exports.createCommonOperationBackend = createCommonOperationBackend;
|
|
@@ -2323,6 +2301,7 @@ exports.generatePostgresMigrationSQL = generatePostgresMigrationSQL;
|
|
|
2323
2301
|
exports.generateSqliteDDL = generateSqliteDDL;
|
|
2324
2302
|
exports.generateSqliteMigrationSQL = generateSqliteMigrationSQL;
|
|
2325
2303
|
exports.generateVectorIndexName = generateVectorIndexName;
|
|
2304
|
+
exports.getOrCreateLru = getOrCreateLru;
|
|
2326
2305
|
exports.nodes = nodes;
|
|
2327
2306
|
exports.nodes2 = nodes2;
|
|
2328
2307
|
exports.nowIso = nowIso;
|
|
@@ -2332,6 +2311,5 @@ exports.tables = tables;
|
|
|
2332
2311
|
exports.tables2 = tables2;
|
|
2333
2312
|
exports.uniques = uniques;
|
|
2334
2313
|
exports.uniques2 = uniques2;
|
|
2335
|
-
|
|
2336
|
-
//# sourceMappingURL=chunk-
|
|
2337
|
-
//# sourceMappingURL=chunk-SCXOGKLD.cjs.map
|
|
2314
|
+
//# sourceMappingURL=chunk-7OD2EPN4.cjs.map
|
|
2315
|
+
//# sourceMappingURL=chunk-7OD2EPN4.cjs.map
|