@nicia-ai/typegraph 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +2 -2
  2. package/dist/{ast-CXFx6bF6.d.ts → ast-CG87Zr6p.d.ts} +2 -2
  3. package/dist/{ast-D-3bOanX.d.cts → ast-Cq9qrnNP.d.cts} +2 -2
  4. package/dist/backend/postgres/index.cjs +295 -23
  5. package/dist/backend/postgres/index.cjs.map +1 -1
  6. package/dist/backend/postgres/index.d.cts +33 -10
  7. package/dist/backend/postgres/index.d.ts +33 -10
  8. package/dist/backend/postgres/index.js +285 -5
  9. package/dist/backend/postgres/index.js.map +1 -1
  10. package/dist/backend/sqlite/index.cjs +21 -90
  11. package/dist/backend/sqlite/index.cjs.map +1 -1
  12. package/dist/backend/sqlite/index.d.cts +22 -58
  13. package/dist/backend/sqlite/index.d.ts +22 -58
  14. package/dist/backend/sqlite/index.js +3 -78
  15. package/dist/backend/sqlite/index.js.map +1 -1
  16. package/dist/backend/sqlite/local.cjs +83 -0
  17. package/dist/backend/sqlite/local.cjs.map +1 -0
  18. package/dist/backend/sqlite/local.d.cts +66 -0
  19. package/dist/backend/sqlite/local.d.ts +66 -0
  20. package/dist/backend/sqlite/local.js +77 -0
  21. package/dist/backend/sqlite/local.js.map +1 -0
  22. package/dist/chunk-23NGZHUN.cjs +2132 -0
  23. package/dist/chunk-23NGZHUN.cjs.map +1 -0
  24. package/dist/{chunk-ZO2FRJ2U.js → chunk-2DKSQNPW.js} +3 -4
  25. package/dist/chunk-2DKSQNPW.js.map +1 -0
  26. package/dist/chunk-JPO7W262.js +2093 -0
  27. package/dist/chunk-JPO7W262.js.map +1 -0
  28. package/dist/{chunk-NYDXJGA3.cjs → chunk-K5O7TOJO.cjs} +15 -16
  29. package/dist/chunk-K5O7TOJO.cjs.map +1 -0
  30. package/dist/{backend/drizzle/schema/postgres.d.ts → ddl-Bcyb4DW1.d.cts} +17 -17
  31. package/dist/{backend/drizzle/schema/postgres.d.cts → ddl-D7DQx8w8.d.ts} +17 -17
  32. package/dist/{index-DyrR_d-H.d.cts → index-QTnQwakS.d.cts} +1 -1
  33. package/dist/{index-DyrR_d-H.d.ts → index-QTnQwakS.d.ts} +1 -1
  34. package/dist/index.cjs +238 -1
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +11 -12
  37. package/dist/index.d.ts +11 -12
  38. package/dist/index.js +238 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/indexes/index.d.cts +5 -6
  41. package/dist/indexes/index.d.ts +5 -6
  42. package/dist/interchange/index.d.cts +5 -6
  43. package/dist/interchange/index.d.ts +5 -6
  44. package/dist/{manager-0NysX4s6.d.cts → manager-BImRiYwz.d.cts} +3 -3
  45. package/dist/{manager-DFKe7ql3.d.ts → manager-DGQ9UF18.d.ts} +3 -3
  46. package/dist/profiler/index.d.cts +7 -8
  47. package/dist/profiler/index.d.ts +7 -8
  48. package/dist/schema/index.d.cts +6 -7
  49. package/dist/schema/index.d.ts +6 -7
  50. package/dist/{backend/drizzle/schema/sqlite.d.ts → sqlite-CSJ-fgIm.d.ts} +2 -25
  51. package/dist/{backend/drizzle/schema/sqlite.d.cts → sqlite-FWGZLwDd.d.cts} +2 -25
  52. package/dist/{store-SiovWEYA.d.ts → store-CscQUG-S.d.ts} +57 -6
  53. package/dist/{store-DhoA5uRc.d.cts → store-DNv1yd3n.d.cts} +57 -6
  54. package/dist/{types-DHRsi6j9.d.cts → types-BbMn2Ycv.d.cts} +2 -2
  55. package/dist/{types-ZT5mlism.d.ts → types-C2rhqkg7.d.ts} +2 -2
  56. package/dist/{types-6EKrWTs9.d.ts → types-D5ggX07j.d.ts} +7 -3
  57. package/dist/{types-BL1GyVku.d.cts → types-DEMAqkA1.d.cts} +1 -1
  58. package/dist/{types-DCGa53O2.d.ts → types-DJZoHy5R.d.ts} +1 -1
  59. package/dist/{types-DTJEu_-h.d.ts → types-DolHw9pJ.d.cts} +14 -1
  60. package/dist/{types-DTJEu_-h.d.cts → types-DolHw9pJ.d.ts} +14 -1
  61. package/dist/{types-BUy-pHKH.d.cts → types-SVDEKnU6.d.cts} +7 -3
  62. package/package.json +6 -46
  63. package/dist/backend/drizzle/index.cjs +0 -40
  64. package/dist/backend/drizzle/index.cjs.map +0 -1
  65. package/dist/backend/drizzle/index.d.cts +0 -13
  66. package/dist/backend/drizzle/index.d.ts +0 -13
  67. package/dist/backend/drizzle/index.js +0 -11
  68. package/dist/backend/drizzle/index.js.map +0 -1
  69. package/dist/backend/drizzle/postgres.cjs +0 -26
  70. package/dist/backend/drizzle/postgres.cjs.map +0 -1
  71. package/dist/backend/drizzle/postgres.d.cts +0 -35
  72. package/dist/backend/drizzle/postgres.d.ts +0 -35
  73. package/dist/backend/drizzle/postgres.js +0 -9
  74. package/dist/backend/drizzle/postgres.js.map +0 -1
  75. package/dist/backend/drizzle/schema/postgres.cjs +0 -39
  76. package/dist/backend/drizzle/schema/postgres.cjs.map +0 -1
  77. package/dist/backend/drizzle/schema/postgres.js +0 -6
  78. package/dist/backend/drizzle/schema/postgres.js.map +0 -1
  79. package/dist/backend/drizzle/schema/sqlite.cjs +0 -39
  80. package/dist/backend/drizzle/schema/sqlite.cjs.map +0 -1
  81. package/dist/backend/drizzle/schema/sqlite.js +0 -6
  82. package/dist/backend/drizzle/schema/sqlite.js.map +0 -1
  83. package/dist/backend/drizzle/sqlite.cjs +0 -26
  84. package/dist/backend/drizzle/sqlite.cjs.map +0 -1
  85. package/dist/backend/drizzle/sqlite.d.cts +0 -35
  86. package/dist/backend/drizzle/sqlite.d.ts +0 -35
  87. package/dist/backend/drizzle/sqlite.js +0 -9
  88. package/dist/backend/drizzle/sqlite.js.map +0 -1
  89. package/dist/chunk-3PURVEA4.js +0 -193
  90. package/dist/chunk-3PURVEA4.js.map +0 -1
  91. package/dist/chunk-7RVSDXT3.cjs +0 -1509
  92. package/dist/chunk-7RVSDXT3.cjs.map +0 -1
  93. package/dist/chunk-LUARLSYT.cjs +0 -289
  94. package/dist/chunk-LUARLSYT.cjs.map +0 -1
  95. package/dist/chunk-NU2XNMVI.cjs +0 -201
  96. package/dist/chunk-NU2XNMVI.cjs.map +0 -1
  97. package/dist/chunk-NYDXJGA3.cjs.map +0 -1
  98. package/dist/chunk-OGGLFYFA.js +0 -177
  99. package/dist/chunk-OGGLFYFA.js.map +0 -1
  100. package/dist/chunk-Q6PXIKRQ.js +0 -287
  101. package/dist/chunk-Q6PXIKRQ.js.map +0 -1
  102. package/dist/chunk-SMLIWLS7.js +0 -236
  103. package/dist/chunk-SMLIWLS7.js.map +0 -1
  104. package/dist/chunk-UYMT4LO2.cjs +0 -241
  105. package/dist/chunk-UYMT4LO2.cjs.map +0 -1
  106. package/dist/chunk-XZL6MCZJ.cjs +0 -185
  107. package/dist/chunk-XZL6MCZJ.cjs.map +0 -1
  108. package/dist/chunk-ZO2FRJ2U.js.map +0 -1
  109. package/dist/chunk-ZQGOBVXZ.js +0 -1488
  110. package/dist/chunk-ZQGOBVXZ.js.map +0 -1
  111. package/dist/test-helpers-CIq1Hhj1.d.ts +0 -26
  112. package/dist/test-helpers-DPRFVky4.d.cts +0 -26
  113. package/dist/types-BRzHlhKC.d.cts +0 -14
  114. package/dist/types-BRzHlhKC.d.ts +0 -14
@@ -1,72 +1,36 @@
1
- import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
2
- export { SqliteBackendOptions, createSqliteBackend } from '../drizzle/sqlite.js';
3
- import { G as GraphBackend } from '../../types-6EKrWTs9.js';
4
- import { SqliteTables } from '../drizzle/schema/sqlite.js';
5
- export { SqliteTableNames, createSqliteTables, edges, nodes, schemaVersions, tables, uniques } from '../drizzle/schema/sqlite.js';
6
- export { b as generateSqliteDDL, c as getSqliteMigrationSQL } from '../../test-helpers-CIq1Hhj1.js';
7
- import 'drizzle-orm/sqlite-core';
1
+ import { G as GraphBackend } from '../../types-D5ggX07j.js';
2
+ import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core';
3
+ import { S as SqliteTables } from '../../sqlite-CSJ-fgIm.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-CSJ-fgIm.js';
5
+ export { g as generateSqliteDDL, a as generateSqliteMigrationSQL } from '../../ddl-D7DQx8w8.js';
8
6
  import 'drizzle-orm';
9
- import '../../types-DTJEu_-h.js';
7
+ import '../../types-DolHw9pJ.js';
10
8
  import 'zod';
11
- import '../../types-BRzHlhKC.js';
12
- import '../../types-ZT5mlism.js';
13
- import '../../ast-CXFx6bF6.js';
14
- import '../drizzle/schema/postgres.js';
9
+ import '../../types-C2rhqkg7.js';
10
+ import '../../ast-CG87Zr6p.js';
15
11
  import 'drizzle-orm/pg-core';
16
12
 
13
+ type SqliteExecutionProfileHints = Readonly<{
14
+ isD1?: boolean;
15
+ isSync?: boolean;
16
+ }>;
17
+ type AnySqliteDatabase = BaseSQLiteDatabase<"sync" | "async", unknown>;
18
+
17
19
  /**
18
- * Options for creating a local SQLite backend.
20
+ * Options for creating a SQLite backend.
19
21
  */
20
- type LocalSqliteBackendOptions = Readonly<{
21
- /**
22
- * Path to the SQLite database file.
23
- * Defaults to ":memory:" for an in-memory database.
24
- */
25
- path?: string;
22
+ type SqliteBackendOptions = Readonly<{
26
23
  /**
27
- * Custom table definitions.
24
+ * Custom table definitions. Use createSqliteTables() to customize table names.
28
25
  * Defaults to standard TypeGraph table names.
29
26
  */
30
27
  tables?: SqliteTables;
31
- }>;
32
- /**
33
- * Result of creating a local SQLite backend.
34
- */
35
- type LocalSqliteBackendResult = Readonly<{
36
- /**
37
- * The GraphBackend instance for use with createStore.
38
- */
39
- backend: GraphBackend;
40
28
  /**
41
- * The underlying Drizzle database instance.
42
- * Useful for direct SQL access or cleanup.
29
+ * Optional execution profile hints used to avoid runtime driver reflection.
30
+ * Set `isD1: true` when using Cloudflare D1.
43
31
  */
44
- db: BetterSQLite3Database;
32
+ executionProfile?: SqliteExecutionProfileHints;
45
33
  }>;
46
- /**
47
- * Creates a SQLite backend with minimal configuration.
48
- *
49
- * This is a convenience function for local development and testing.
50
- * It handles database creation, schema migration, and backend setup.
51
- *
52
- * For production deployments or custom configurations, use createSqliteBackend
53
- * directly with your own Drizzle database instance.
54
- *
55
- * @param options - Configuration options
56
- * @returns Backend and database instances
57
- *
58
- * @example In-memory database (default)
59
- * ```typescript
60
- * const { backend } = createLocalSqliteBackend();
61
- * const store = createStore(graph, backend);
62
- * ```
63
- *
64
- * @example File-based database
65
- * ```typescript
66
- * const { backend, db } = createLocalSqliteBackend({ path: "./data.db" });
67
- * const store = createStore(graph, backend);
68
- * ```
69
- */
70
- declare function createLocalSqliteBackend(options?: LocalSqliteBackendOptions): LocalSqliteBackendResult;
34
+ declare function createSqliteBackend(db: AnySqliteDatabase, options?: SqliteBackendOptions): GraphBackend;
71
35
 
72
- export { type LocalSqliteBackendOptions, type LocalSqliteBackendResult, SqliteTables, createLocalSqliteBackend };
36
+ export { type SqliteBackendOptions, SqliteTables, createSqliteBackend };
@@ -1,83 +1,8 @@
1
- import { generateSqliteDDL } from '../../chunk-SMLIWLS7.js';
2
- export { generateSqliteDDL, getSqliteMigrationSQL } from '../../chunk-SMLIWLS7.js';
3
- import { createSqliteBackend } from '../../chunk-ZO2FRJ2U.js';
4
- export { createSqliteBackend } from '../../chunk-ZO2FRJ2U.js';
5
- import '../../chunk-ZQGOBVXZ.js';
6
- import { tables } from '../../chunk-OGGLFYFA.js';
7
- export { createSqliteTables, edges, nodes, schemaVersions, tables, uniques } from '../../chunk-OGGLFYFA.js';
8
- import '../../chunk-3PURVEA4.js';
9
- import { ConfigurationError } from '../../chunk-SJ2QMDXY.js';
1
+ export { createSqliteBackend } from '../../chunk-2DKSQNPW.js';
2
+ export { createSqliteTables, edges, embeddings, generateSqliteDDL, generateSqliteMigrationSQL, nodes, schemaVersions, tables, uniques } from '../../chunk-JPO7W262.js';
3
+ import '../../chunk-SJ2QMDXY.js';
10
4
  import '../../chunk-U3452TEU.js';
11
5
  import '../../chunk-54WJF3DW.js';
12
6
  import '../../chunk-K7SQ3SWP.js';
13
- import Database from 'better-sqlite3';
14
- import { drizzle } from 'drizzle-orm/better-sqlite3';
15
-
16
- function getUnknownErrorMessage(error) {
17
- if (error instanceof Error) return error.message;
18
- return String(error);
19
- }
20
- function parseNodeModuleVersionMismatchMessage(message) {
21
- const regexp = /NODE_MODULE_VERSION (?<compiled>\d+)[\s\S]*?NODE_MODULE_VERSION (?<required>\d+)/;
22
- const match = regexp.exec(message);
23
- if (!match?.groups) return void 0;
24
- const compiled = Number(match.groups.compiled);
25
- const required = Number(match.groups.required);
26
- if (!Number.isFinite(compiled) || !Number.isFinite(required))
27
- return void 0;
28
- return { compiled, required };
29
- }
30
- function createDatabase(path) {
31
- try {
32
- return new Database(path);
33
- } catch (error) {
34
- const message = getUnknownErrorMessage(error);
35
- const mismatch = parseNodeModuleVersionMismatchMessage(message);
36
- if (!mismatch) throw error;
37
- throw new ConfigurationError(
38
- [
39
- "Failed to load better-sqlite3 native addon.",
40
- `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,
41
- "This usually happens after switching Node versions without rebuilding native dependencies.",
42
- "Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)."
43
- ].join(" "),
44
- {
45
- nodeVersion: process.version,
46
- nodeModuleVersion: process.versions.modules,
47
- compiledNodeModuleVersion: mismatch.compiled,
48
- requiredNodeModuleVersion: mismatch.required
49
- },
50
- { cause: error }
51
- );
52
- }
53
- }
54
- function createLocalSqliteBackend(options = {}) {
55
- const path = options.path ?? ":memory:";
56
- const tables2 = options.tables ?? tables;
57
- const sqlite = createDatabase(path);
58
- const db = drizzle(sqlite);
59
- const ddlStatements = generateSqliteDDL(tables2);
60
- for (const statement of ddlStatements) {
61
- sqlite.exec(statement);
62
- }
63
- const backend = createSqliteBackend(db, {
64
- executionProfile: {
65
- isD1: false,
66
- isSync: true
67
- },
68
- tables: tables2
69
- });
70
- let isClosed = false;
71
- function close() {
72
- if (isClosed) return Promise.resolve();
73
- isClosed = true;
74
- sqlite.close();
75
- return Promise.resolve();
76
- }
77
- const managedBackend = { ...backend, close };
78
- return { backend: managedBackend, db };
79
- }
80
-
81
- export { createLocalSqliteBackend };
82
7
  //# sourceMappingURL=index.js.map
83
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/backend/sqlite/index.ts"],"names":["tables"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SQLite backend for TypeGraph.\n *\n * Re-exports from the Drizzle implementation for backwards compatibility.\n *\n * @example Quick start with in-memory database\n * ```typescript\n * import { createLocalSqliteBackend } from \"@nicia-ai/typegraph/sqlite\";\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\";\n *\n * const { backend, db } = createLocalSqliteBackend({ path: \"./dev.db\" });\n * const store = createStore(graph, backend);\n * ```\n *\n * @example Full manual configuration\n * ```typescript\n * import { drizzle } from \"drizzle-orm/better-sqlite3\";\n * import Database from \"better-sqlite3\";\n * import { createSqliteBackend, getSqliteMigrationSQL } from \"@nicia-ai/typegraph/sqlite\";\n *\n * const sqlite = new Database(\"app.db\");\n * sqlite.exec(getSqliteMigrationSQL());\n * const db = drizzle(sqlite);\n * const backend = createSqliteBackend(db);\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 {\n createSqliteBackend,\n type SqliteTables,\n tables as defaultTables,\n} from \"../drizzle/sqlite\";\nimport { generateSqliteDDL } from \"../drizzle/test-helpers\";\nimport type { GraphBackend } from \"../types\";\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 isD1: false,\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\n// ============================================================\n// Re-exports\n// ============================================================\n\n// Re-export everything from the Drizzle SQLite implementation\nexport {\n createSqliteBackend,\n createSqliteTables,\n type SqliteBackendOptions,\n type SqliteTableNames,\n type SqliteTables,\n tables,\n} from \"../drizzle/sqlite\";\n\n// Re-export individual tables for schema usage\nexport {\n edges,\n nodes,\n schemaVersions,\n uniques,\n} from \"../drizzle/schema/sqlite\";\n\n// Re-export migration SQL generation\nexport {\n generateSqliteDDL,\n getSqliteMigrationSQL,\n} from \"../drizzle/test-helpers\";\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ var chunkK5O7TOJO_cjs = require('../../chunk-K5O7TOJO.cjs');
4
+ var chunk23NGZHUN_cjs = require('../../chunk-23NGZHUN.cjs');
5
+ var chunk44SXEVF4_cjs = require('../../chunk-44SXEVF4.cjs');
6
+ require('../../chunk-JQDWEX6V.cjs');
7
+ require('../../chunk-2WVFEIHR.cjs');
8
+ require('../../chunk-P5CNM325.cjs');
9
+ var Database = require('better-sqlite3');
10
+ var betterSqlite3 = require('drizzle-orm/better-sqlite3');
11
+
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
+
14
+ var Database__default = /*#__PURE__*/_interopDefault(Database);
15
+
16
+ function getUnknownErrorMessage(error) {
17
+ if (error instanceof Error) return error.message;
18
+ return String(error);
19
+ }
20
+ function parseNodeModuleVersionMismatchMessage(message) {
21
+ const regexp = /NODE_MODULE_VERSION (?<compiled>\d+)[\s\S]*?NODE_MODULE_VERSION (?<required>\d+)/;
22
+ const match = regexp.exec(message);
23
+ if (!match?.groups) return void 0;
24
+ const compiled = Number(match.groups.compiled);
25
+ const required = Number(match.groups.required);
26
+ if (!Number.isFinite(compiled) || !Number.isFinite(required))
27
+ return void 0;
28
+ return { compiled, required };
29
+ }
30
+ function createDatabase(path) {
31
+ try {
32
+ return new Database__default.default(path);
33
+ } catch (error) {
34
+ const message = getUnknownErrorMessage(error);
35
+ const mismatch = parseNodeModuleVersionMismatchMessage(message);
36
+ if (!mismatch) throw error;
37
+ throw new chunk44SXEVF4_cjs.ConfigurationError(
38
+ [
39
+ "Failed to load better-sqlite3 native addon.",
40
+ `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,
41
+ "This usually happens after switching Node versions without rebuilding native dependencies.",
42
+ "Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)."
43
+ ].join(" "),
44
+ {
45
+ nodeVersion: process.version,
46
+ nodeModuleVersion: process.versions.modules,
47
+ compiledNodeModuleVersion: mismatch.compiled,
48
+ requiredNodeModuleVersion: mismatch.required
49
+ },
50
+ { cause: error }
51
+ );
52
+ }
53
+ }
54
+ function createLocalSqliteBackend(options = {}) {
55
+ const path = options.path ?? ":memory:";
56
+ const tables2 = options.tables ?? chunk23NGZHUN_cjs.tables;
57
+ const sqlite = createDatabase(path);
58
+ const db = betterSqlite3.drizzle(sqlite);
59
+ const ddlStatements = chunk23NGZHUN_cjs.generateSqliteDDL(tables2);
60
+ for (const statement of ddlStatements) {
61
+ sqlite.exec(statement);
62
+ }
63
+ const backend = chunkK5O7TOJO_cjs.createSqliteBackend(db, {
64
+ executionProfile: {
65
+ isD1: false,
66
+ isSync: true
67
+ },
68
+ tables: tables2
69
+ });
70
+ let isClosed = false;
71
+ function close() {
72
+ if (isClosed) return Promise.resolve();
73
+ isClosed = true;
74
+ sqlite.close();
75
+ return Promise.resolve();
76
+ }
77
+ const managedBackend = { ...backend, close };
78
+ return { backend: managedBackend, db };
79
+ }
80
+
81
+ exports.createLocalSqliteBackend = createLocalSqliteBackend;
82
+ //# sourceMappingURL=local.cjs.map
83
+ //# sourceMappingURL=local.cjs.map
@@ -0,0 +1 @@
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 isD1: false,\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"]}
@@ -0,0 +1,66 @@
1
+ import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
2
+ import { G as GraphBackend } from '../../types-SVDEKnU6.cjs';
3
+ import { S as SqliteTables } from '../../sqlite-FWGZLwDd.cjs';
4
+ import 'drizzle-orm';
5
+ import '../../types-DolHw9pJ.cjs';
6
+ import 'zod';
7
+ import 'drizzle-orm/sqlite-core';
8
+ import '../../types-BbMn2Ycv.cjs';
9
+ import '../../ast-Cq9qrnNP.cjs';
10
+
11
+ /**
12
+ * Options for creating a local SQLite backend.
13
+ */
14
+ type LocalSqliteBackendOptions = Readonly<{
15
+ /**
16
+ * Path to the SQLite database file.
17
+ * Defaults to ":memory:" for an in-memory database.
18
+ */
19
+ path?: string;
20
+ /**
21
+ * Custom table definitions.
22
+ * Defaults to standard TypeGraph table names.
23
+ */
24
+ tables?: SqliteTables;
25
+ }>;
26
+ /**
27
+ * Result of creating a local SQLite backend.
28
+ */
29
+ type LocalSqliteBackendResult = Readonly<{
30
+ /**
31
+ * The GraphBackend instance for use with createStore.
32
+ */
33
+ backend: GraphBackend;
34
+ /**
35
+ * The underlying Drizzle database instance.
36
+ * Useful for direct SQL access or cleanup.
37
+ */
38
+ db: BetterSQLite3Database;
39
+ }>;
40
+ /**
41
+ * Creates a SQLite backend with minimal configuration.
42
+ *
43
+ * This is a convenience function for local development and testing.
44
+ * It handles database creation, schema migration, and backend setup.
45
+ *
46
+ * For production deployments or custom configurations, use createSqliteBackend
47
+ * directly with your own Drizzle database instance.
48
+ *
49
+ * @param options - Configuration options
50
+ * @returns Backend and database instances
51
+ *
52
+ * @example In-memory database (default)
53
+ * ```typescript
54
+ * const { backend } = createLocalSqliteBackend();
55
+ * const store = createStore(graph, backend);
56
+ * ```
57
+ *
58
+ * @example File-based database
59
+ * ```typescript
60
+ * const { backend, db } = createLocalSqliteBackend({ path: "./data.db" });
61
+ * const store = createStore(graph, backend);
62
+ * ```
63
+ */
64
+ declare function createLocalSqliteBackend(options?: LocalSqliteBackendOptions): LocalSqliteBackendResult;
65
+
66
+ export { type LocalSqliteBackendOptions, type LocalSqliteBackendResult, createLocalSqliteBackend };
@@ -0,0 +1,66 @@
1
+ import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
2
+ import { G as GraphBackend } from '../../types-D5ggX07j.js';
3
+ import { S as SqliteTables } from '../../sqlite-CSJ-fgIm.js';
4
+ import 'drizzle-orm';
5
+ import '../../types-DolHw9pJ.js';
6
+ import 'zod';
7
+ import 'drizzle-orm/sqlite-core';
8
+ import '../../types-C2rhqkg7.js';
9
+ import '../../ast-CG87Zr6p.js';
10
+
11
+ /**
12
+ * Options for creating a local SQLite backend.
13
+ */
14
+ type LocalSqliteBackendOptions = Readonly<{
15
+ /**
16
+ * Path to the SQLite database file.
17
+ * Defaults to ":memory:" for an in-memory database.
18
+ */
19
+ path?: string;
20
+ /**
21
+ * Custom table definitions.
22
+ * Defaults to standard TypeGraph table names.
23
+ */
24
+ tables?: SqliteTables;
25
+ }>;
26
+ /**
27
+ * Result of creating a local SQLite backend.
28
+ */
29
+ type LocalSqliteBackendResult = Readonly<{
30
+ /**
31
+ * The GraphBackend instance for use with createStore.
32
+ */
33
+ backend: GraphBackend;
34
+ /**
35
+ * The underlying Drizzle database instance.
36
+ * Useful for direct SQL access or cleanup.
37
+ */
38
+ db: BetterSQLite3Database;
39
+ }>;
40
+ /**
41
+ * Creates a SQLite backend with minimal configuration.
42
+ *
43
+ * This is a convenience function for local development and testing.
44
+ * It handles database creation, schema migration, and backend setup.
45
+ *
46
+ * For production deployments or custom configurations, use createSqliteBackend
47
+ * directly with your own Drizzle database instance.
48
+ *
49
+ * @param options - Configuration options
50
+ * @returns Backend and database instances
51
+ *
52
+ * @example In-memory database (default)
53
+ * ```typescript
54
+ * const { backend } = createLocalSqliteBackend();
55
+ * const store = createStore(graph, backend);
56
+ * ```
57
+ *
58
+ * @example File-based database
59
+ * ```typescript
60
+ * const { backend, db } = createLocalSqliteBackend({ path: "./data.db" });
61
+ * const store = createStore(graph, backend);
62
+ * ```
63
+ */
64
+ declare function createLocalSqliteBackend(options?: LocalSqliteBackendOptions): LocalSqliteBackendResult;
65
+
66
+ export { type LocalSqliteBackendOptions, type LocalSqliteBackendResult, createLocalSqliteBackend };
@@ -0,0 +1,77 @@
1
+ import { createSqliteBackend } from '../../chunk-2DKSQNPW.js';
2
+ import { tables, generateSqliteDDL } from '../../chunk-JPO7W262.js';
3
+ import { ConfigurationError } from '../../chunk-SJ2QMDXY.js';
4
+ import '../../chunk-U3452TEU.js';
5
+ import '../../chunk-54WJF3DW.js';
6
+ import '../../chunk-K7SQ3SWP.js';
7
+ import Database from 'better-sqlite3';
8
+ import { drizzle } from 'drizzle-orm/better-sqlite3';
9
+
10
+ function getUnknownErrorMessage(error) {
11
+ if (error instanceof Error) return error.message;
12
+ return String(error);
13
+ }
14
+ function parseNodeModuleVersionMismatchMessage(message) {
15
+ const regexp = /NODE_MODULE_VERSION (?<compiled>\d+)[\s\S]*?NODE_MODULE_VERSION (?<required>\d+)/;
16
+ const match = regexp.exec(message);
17
+ if (!match?.groups) return void 0;
18
+ const compiled = Number(match.groups.compiled);
19
+ const required = Number(match.groups.required);
20
+ if (!Number.isFinite(compiled) || !Number.isFinite(required))
21
+ return void 0;
22
+ return { compiled, required };
23
+ }
24
+ function createDatabase(path) {
25
+ try {
26
+ return new Database(path);
27
+ } catch (error) {
28
+ const message = getUnknownErrorMessage(error);
29
+ const mismatch = parseNodeModuleVersionMismatchMessage(message);
30
+ if (!mismatch) throw error;
31
+ throw new ConfigurationError(
32
+ [
33
+ "Failed to load better-sqlite3 native addon.",
34
+ `It was compiled for NODE_MODULE_VERSION ${mismatch.compiled}, but this Node.js runtime requires ${mismatch.required}.`,
35
+ "This usually happens after switching Node versions without rebuilding native dependencies.",
36
+ "Rebuild with: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)."
37
+ ].join(" "),
38
+ {
39
+ nodeVersion: process.version,
40
+ nodeModuleVersion: process.versions.modules,
41
+ compiledNodeModuleVersion: mismatch.compiled,
42
+ requiredNodeModuleVersion: mismatch.required
43
+ },
44
+ { cause: error }
45
+ );
46
+ }
47
+ }
48
+ function createLocalSqliteBackend(options = {}) {
49
+ const path = options.path ?? ":memory:";
50
+ const tables2 = options.tables ?? tables;
51
+ const sqlite = createDatabase(path);
52
+ const db = drizzle(sqlite);
53
+ const ddlStatements = generateSqliteDDL(tables2);
54
+ for (const statement of ddlStatements) {
55
+ sqlite.exec(statement);
56
+ }
57
+ const backend = createSqliteBackend(db, {
58
+ executionProfile: {
59
+ isD1: false,
60
+ isSync: true
61
+ },
62
+ tables: tables2
63
+ });
64
+ let isClosed = false;
65
+ function close() {
66
+ if (isClosed) return Promise.resolve();
67
+ isClosed = true;
68
+ sqlite.close();
69
+ return Promise.resolve();
70
+ }
71
+ const managedBackend = { ...backend, close };
72
+ return { backend: managedBackend, db };
73
+ }
74
+
75
+ export { createLocalSqliteBackend };
76
+ //# sourceMappingURL=local.js.map
77
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
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 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 isD1: false,\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"]}