@framers/sql-storage-adapter 0.7.1 → 0.7.3

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 (192) hide show
  1. package/README.md +43 -0
  2. package/dist/adapters/electron/preload.cjs +289 -0
  3. package/dist/adapters/electron/renderer.d.ts +9 -0
  4. package/dist/adapters/electron/renderer.d.ts.map +1 -0
  5. package/dist/adapters/electron/renderer.js +8 -0
  6. package/dist/adapters/electron/renderer.js.map +1 -0
  7. package/dist/cjs/adapters/__tests__/indexedDbAdapter.spec.d.ts +2 -0
  8. package/dist/cjs/adapters/__tests__/indexedDbAdapter.spec.js +133 -0
  9. package/dist/cjs/adapters/baseStorageAdapter.d.ts +368 -0
  10. package/dist/cjs/adapters/baseStorageAdapter.js +744 -0
  11. package/dist/cjs/adapters/betterSqliteAdapter.d.ts +124 -0
  12. package/dist/cjs/adapters/betterSqliteAdapter.js +334 -0
  13. package/dist/cjs/adapters/capacitorSqliteAdapter.d.ts +83 -0
  14. package/dist/cjs/adapters/capacitorSqliteAdapter.js +250 -0
  15. package/dist/cjs/adapters/electron/electronMainAdapter.d.ts +251 -0
  16. package/dist/cjs/adapters/electron/electronMainAdapter.js +392 -0
  17. package/dist/cjs/adapters/electron/electronRendererAdapter.d.ts +177 -0
  18. package/dist/cjs/adapters/electron/electronRendererAdapter.js +283 -0
  19. package/dist/cjs/adapters/electron/index.d.ts +74 -0
  20. package/dist/cjs/adapters/electron/index.js +86 -0
  21. package/dist/cjs/adapters/electron/ipc/channels.d.ts +196 -0
  22. package/dist/cjs/adapters/electron/ipc/channels.js +127 -0
  23. package/dist/cjs/adapters/electron/ipc/index.d.ts +11 -0
  24. package/dist/cjs/adapters/electron/ipc/index.js +38 -0
  25. package/dist/cjs/adapters/electron/ipc/protocol.d.ts +78 -0
  26. package/dist/cjs/adapters/electron/ipc/protocol.js +341 -0
  27. package/dist/cjs/adapters/electron/ipc/types.d.ts +248 -0
  28. package/dist/cjs/adapters/electron/ipc/types.js +15 -0
  29. package/dist/cjs/adapters/electron/migration/autoMigrator.d.ts +184 -0
  30. package/dist/cjs/adapters/electron/migration/autoMigrator.js +441 -0
  31. package/dist/cjs/adapters/electron/migration/index.d.ts +9 -0
  32. package/dist/cjs/adapters/electron/migration/index.js +29 -0
  33. package/dist/cjs/adapters/electron/preload.d.ts +126 -0
  34. package/dist/cjs/adapters/electron/preload.js +233 -0
  35. package/dist/cjs/adapters/electron/recovery/corruptionDetector.d.ts +214 -0
  36. package/dist/cjs/adapters/electron/recovery/corruptionDetector.js +359 -0
  37. package/dist/cjs/adapters/electron/recovery/index.d.ts +11 -0
  38. package/dist/cjs/adapters/electron/recovery/index.js +34 -0
  39. package/dist/cjs/adapters/electron/recovery/walCheckpoint.d.ts +186 -0
  40. package/dist/cjs/adapters/electron/recovery/walCheckpoint.js +263 -0
  41. package/dist/cjs/adapters/electron/renderer.d.ts +9 -0
  42. package/dist/cjs/adapters/electron/renderer.js +33 -0
  43. package/dist/cjs/adapters/electron/window/index.d.ts +9 -0
  44. package/dist/cjs/adapters/electron/window/index.js +29 -0
  45. package/dist/cjs/adapters/electron/window/windowManager.d.ts +190 -0
  46. package/dist/cjs/adapters/electron/window/windowManager.js +321 -0
  47. package/dist/cjs/adapters/indexedDbAdapter.d.ts +490 -0
  48. package/dist/cjs/adapters/indexedDbAdapter.js +993 -0
  49. package/dist/cjs/adapters/postgresAdapter.d.ts +424 -0
  50. package/dist/cjs/adapters/postgresAdapter.js +889 -0
  51. package/dist/cjs/adapters/sqlJsAdapter.d.ts +64 -0
  52. package/dist/cjs/adapters/sqlJsAdapter.js +268 -0
  53. package/dist/cjs/adapters/supabase.d.ts +58 -0
  54. package/dist/cjs/adapters/supabase.js +401 -0
  55. package/dist/cjs/codecs/BrowserBlobCodec.d.ts +14 -0
  56. package/dist/cjs/codecs/BrowserBlobCodec.js +57 -0
  57. package/dist/cjs/codecs/NodeBlobCodec.d.ts +14 -0
  58. package/dist/cjs/codecs/NodeBlobCodec.js +59 -0
  59. package/dist/cjs/core/contracts/blobCodec.d.ts +15 -0
  60. package/dist/cjs/core/contracts/blobCodec.js +15 -0
  61. package/dist/cjs/core/contracts/context.d.ts +221 -0
  62. package/dist/cjs/core/contracts/context.js +15 -0
  63. package/dist/cjs/core/contracts/dialect.d.ts +154 -0
  64. package/dist/cjs/core/contracts/dialect.js +15 -0
  65. package/dist/cjs/core/contracts/events.d.ts +225 -0
  66. package/dist/cjs/core/contracts/events.js +15 -0
  67. package/dist/cjs/core/contracts/exporter.d.ts +13 -0
  68. package/dist/cjs/core/contracts/exporter.js +15 -0
  69. package/dist/cjs/core/contracts/extensions.d.ts +73 -0
  70. package/dist/cjs/core/contracts/extensions.js +15 -0
  71. package/dist/cjs/core/contracts/features.d.ts +25 -0
  72. package/dist/cjs/core/contracts/features.js +61 -0
  73. package/dist/cjs/core/contracts/fts.d.ts +66 -0
  74. package/dist/cjs/core/contracts/fts.js +15 -0
  75. package/dist/cjs/core/contracts/hooks.d.ts +481 -0
  76. package/dist/cjs/core/contracts/hooks.js +140 -0
  77. package/dist/cjs/core/contracts/index.d.ts +260 -0
  78. package/dist/cjs/core/contracts/index.js +41 -0
  79. package/dist/cjs/core/contracts/limitations.d.ts +46 -0
  80. package/dist/cjs/core/contracts/limitations.js +218 -0
  81. package/dist/cjs/core/contracts/performance.d.ts +308 -0
  82. package/dist/cjs/core/contracts/performance.js +144 -0
  83. package/dist/cjs/core/database.d.ts +220 -0
  84. package/dist/cjs/core/database.js +136 -0
  85. package/dist/cjs/core/portable.d.ts +23 -0
  86. package/dist/cjs/core/portable.js +66 -0
  87. package/dist/cjs/core/resolver.d.ts +77 -0
  88. package/dist/cjs/core/resolver.js +235 -0
  89. package/dist/cjs/dialects/PostgresDialect.d.ts +35 -0
  90. package/dist/cjs/dialects/PostgresDialect.js +143 -0
  91. package/dist/cjs/dialects/SqliteDialect.d.ts +35 -0
  92. package/dist/cjs/dialects/SqliteDialect.js +142 -0
  93. package/dist/cjs/dialects/shared.d.ts +17 -0
  94. package/dist/cjs/dialects/shared.js +90 -0
  95. package/dist/cjs/exporters/PostgresExporter.d.ts +14 -0
  96. package/dist/cjs/exporters/PostgresExporter.js +61 -0
  97. package/dist/cjs/exporters/SqliteFileExporter.d.ts +16 -0
  98. package/dist/cjs/exporters/SqliteFileExporter.js +43 -0
  99. package/dist/cjs/features/backup/cloudBackup.d.ts +219 -0
  100. package/dist/cjs/features/backup/cloudBackup.js +209 -0
  101. package/dist/cjs/features/kv/idb.d.ts +79 -0
  102. package/dist/cjs/features/kv/idb.js +32 -0
  103. package/dist/cjs/features/kv/index.d.ts +14 -0
  104. package/dist/cjs/features/kv/index.js +40 -0
  105. package/dist/cjs/features/kv/indexedDbKeyValueStore.d.ts +77 -0
  106. package/dist/cjs/features/kv/indexedDbKeyValueStore.js +116 -0
  107. package/dist/cjs/features/kv/keyValueStore.d.ts +48 -0
  108. package/dist/cjs/features/kv/keyValueStore.js +67 -0
  109. package/dist/cjs/features/kv/sqlKeyValueStore.d.ts +34 -0
  110. package/dist/cjs/features/kv/sqlKeyValueStore.js +81 -0
  111. package/dist/cjs/features/kv/valueCodec.d.ts +35 -0
  112. package/dist/cjs/features/kv/valueCodec.js +426 -0
  113. package/dist/cjs/features/migrations/dataExport.d.ts +77 -0
  114. package/dist/cjs/features/migrations/dataExport.js +194 -0
  115. package/dist/cjs/features/migrations/dataImport.d.ts +54 -0
  116. package/dist/cjs/features/migrations/dataImport.js +300 -0
  117. package/dist/cjs/features/migrations/migration.d.ts +89 -0
  118. package/dist/cjs/features/migrations/migration.js +187 -0
  119. package/dist/cjs/features/migrations/schemaMigrations.d.ts +93 -0
  120. package/dist/cjs/features/migrations/schemaMigrations.js +220 -0
  121. package/dist/cjs/features/sync/conflicts/conflictResolver.d.ts +222 -0
  122. package/dist/cjs/features/sync/conflicts/conflictResolver.js +366 -0
  123. package/dist/cjs/features/sync/conflicts/index.d.ts +9 -0
  124. package/dist/cjs/features/sync/conflicts/index.js +21 -0
  125. package/dist/cjs/features/sync/crossPlatformSync.d.ts +281 -0
  126. package/dist/cjs/features/sync/crossPlatformSync.js +551 -0
  127. package/dist/cjs/features/sync/devices/deviceManager.d.ts +243 -0
  128. package/dist/cjs/features/sync/devices/deviceManager.js +450 -0
  129. package/dist/cjs/features/sync/devices/index.d.ts +10 -0
  130. package/dist/cjs/features/sync/devices/index.js +21 -0
  131. package/dist/cjs/features/sync/index.d.ts +37 -0
  132. package/dist/cjs/features/sync/index.js +111 -0
  133. package/dist/cjs/features/sync/protocol/index.d.ts +11 -0
  134. package/dist/cjs/features/sync/protocol/index.js +23 -0
  135. package/dist/cjs/features/sync/protocol/messages.d.ts +348 -0
  136. package/dist/cjs/features/sync/protocol/messages.js +215 -0
  137. package/dist/cjs/features/sync/protocol/vectorClock.d.ts +164 -0
  138. package/dist/cjs/features/sync/protocol/vectorClock.js +256 -0
  139. package/dist/cjs/features/sync/syncManager.d.ts +348 -0
  140. package/dist/cjs/features/sync/syncManager.js +455 -0
  141. package/dist/cjs/features/sync/tables/index.d.ts +10 -0
  142. package/dist/cjs/features/sync/tables/index.js +21 -0
  143. package/dist/cjs/features/sync/tables/syncLogManager.d.ts +216 -0
  144. package/dist/cjs/features/sync/tables/syncLogManager.js +423 -0
  145. package/dist/cjs/features/sync/transport/httpTransport.d.ts +123 -0
  146. package/dist/cjs/features/sync/transport/httpTransport.js +346 -0
  147. package/dist/cjs/features/sync/transport/index.d.ts +12 -0
  148. package/dist/cjs/features/sync/transport/index.js +25 -0
  149. package/dist/cjs/features/sync/transport/transport.d.ts +259 -0
  150. package/dist/cjs/features/sync/transport/transport.js +163 -0
  151. package/dist/cjs/features/sync/transport/websocketTransport.d.ts +126 -0
  152. package/dist/cjs/features/sync/transport/websocketTransport.js +342 -0
  153. package/dist/cjs/fts/PostgresFts.d.ts +29 -0
  154. package/dist/cjs/fts/PostgresFts.js +77 -0
  155. package/dist/cjs/fts/SqliteFts5.d.ts +22 -0
  156. package/dist/cjs/fts/SqliteFts5.js +58 -0
  157. package/dist/cjs/index.d.ts +30 -0
  158. package/dist/cjs/index.js +101 -0
  159. package/dist/cjs/package.json +3 -0
  160. package/dist/cjs/shared/connectionGate.d.ts +94 -0
  161. package/dist/cjs/shared/connectionGate.js +77 -0
  162. package/dist/cjs/shared/errors.d.ts +23 -0
  163. package/dist/cjs/shared/errors.js +45 -0
  164. package/dist/cjs/shared/logger.d.ts +26 -0
  165. package/dist/cjs/shared/logger.js +40 -0
  166. package/dist/cjs/shared/parameterUtils.d.ts +16 -0
  167. package/dist/cjs/shared/parameterUtils.js +59 -0
  168. package/dist/cjs/shared/postgresTarget.d.ts +11 -0
  169. package/dist/cjs/shared/postgresTarget.js +30 -0
  170. package/dist/cjs/shared/segment.d.ts +43 -0
  171. package/dist/cjs/shared/segment.js +63 -0
  172. package/dist/cjs/shared/serializedTransaction.d.ts +14 -0
  173. package/dist/cjs/shared/serializedTransaction.js +74 -0
  174. package/dist/cjs/shared/splitSqlStatements.d.ts +27 -0
  175. package/dist/cjs/shared/splitSqlStatements.js +163 -0
  176. package/dist/cjs/shared/sqlPlaceholders.d.ts +48 -0
  177. package/dist/cjs/shared/sqlPlaceholders.js +263 -0
  178. package/dist/cjs/types/index.d.ts +29 -0
  179. package/dist/cjs/types/index.js +33 -0
  180. package/dist/core/portable.d.ts +23 -0
  181. package/dist/core/portable.d.ts.map +1 -0
  182. package/dist/core/portable.js +23 -0
  183. package/dist/core/portable.js.map +1 -0
  184. package/dist/features/migrations/schemaMigrations.d.ts +93 -0
  185. package/dist/features/migrations/schemaMigrations.d.ts.map +1 -0
  186. package/dist/features/migrations/schemaMigrations.js +216 -0
  187. package/dist/features/migrations/schemaMigrations.js.map +1 -0
  188. package/dist/index.d.ts +1 -0
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +1 -0
  191. package/dist/index.js.map +1 -1
  192. package/package.json +139 -24
@@ -0,0 +1,136 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var database_exports = {};
19
+ __export(database_exports, {
20
+ connectDatabase: () => connectDatabase,
21
+ createDatabase: () => createDatabase,
22
+ createMemoryDatabase: () => createMemoryDatabase,
23
+ openDatabase: () => openDatabase,
24
+ resolveStorageAdapter: () => import_resolver2.resolveStorageAdapter
25
+ });
26
+ module.exports = __toCommonJS(database_exports);
27
+ var import_contracts = require("./contracts/index.js");
28
+ var import_resolver = require("./resolver.js");
29
+ var import_postgresTarget = require("../shared/postgresTarget.js");
30
+ var import_segment = require("../shared/segment.js");
31
+ var import_resolver2 = require("./resolver.js");
32
+ const configuredPostgresOptions = (options) => {
33
+ const named = [];
34
+ if (Object.prototype.hasOwnProperty.call(options, "url"))
35
+ named.push("url");
36
+ if (options.postgres !== void 0)
37
+ named.push("postgres");
38
+ return named;
39
+ };
40
+ const isCapacitorNative = () => {
41
+ const scope = globalThis;
42
+ const capacitor = scope.window?.Capacitor;
43
+ return Boolean(capacitor?.isNativePlatform?.());
44
+ };
45
+ async function createDatabase(options = {}) {
46
+ const resolverOptions = {};
47
+ const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined";
48
+ const isNode = typeof process !== "undefined" && !!process.versions?.node;
49
+ const isDeno = typeof globalThis.Deno !== "undefined";
50
+ if (options.url || options.postgres) {
51
+ resolverOptions.postgres = {
52
+ ...options.postgres,
53
+ connectionString: options.postgres?.connectionString || options.url || void 0
54
+ };
55
+ }
56
+ if (options.file) {
57
+ resolverOptions.filePath = options.file;
58
+ }
59
+ if (options.mobile) {
60
+ resolverOptions.capacitor = options.mobile;
61
+ }
62
+ if (options.indexedDb) {
63
+ resolverOptions.indexedDb = options.indexedDb;
64
+ }
65
+ if (options.segment !== void 0) {
66
+ resolverOptions.segment = options.segment;
67
+ }
68
+ if (options.type) {
69
+ const typeMap = {
70
+ postgres: "postgres",
71
+ sqlite: "better-sqlite3",
72
+ browser: "sqljs",
73
+ mobile: "capacitor",
74
+ memory: "better-sqlite3"
75
+ };
76
+ resolverOptions.priority = [typeMap[options.type]];
77
+ if (options.type === "memory") {
78
+ resolverOptions.filePath = ":memory:";
79
+ }
80
+ }
81
+ if (options.priority) {
82
+ resolverOptions.priority = options.priority;
83
+ }
84
+ if (options.strict) {
85
+ resolverOptions.strict = true;
86
+ }
87
+ if (options.foreignKeys !== void 0) {
88
+ resolverOptions.openOptions = { ...resolverOptions.openOptions, foreignKeys: options.foreignKeys };
89
+ }
90
+ if (options.logger) {
91
+ resolverOptions.logger = options.logger;
92
+ }
93
+ if (!resolverOptions.priority || resolverOptions.priority.length === 0) {
94
+ if (isBrowser && options.file !== void 0 && (0, import_segment.namesInMemoryDatabase)(options.file)) {
95
+ resolverOptions.priority = ["sqljs"];
96
+ } else if (isBrowser && isCapacitorNative()) {
97
+ resolverOptions.priority = ["capacitor", "indexeddb", "sqljs"];
98
+ } else if (isBrowser) {
99
+ resolverOptions.priority = ["indexeddb", "sqljs"];
100
+ } else if (isDeno) {
101
+ resolverOptions.priority = ["sqljs"];
102
+ } else if (isNode && (0, import_postgresTarget.namesPostgresServer)(resolverOptions.postgres)) {
103
+ resolverOptions.priority = ["postgres"];
104
+ } else if (isNode && options.strict && !options.file && configuredPostgresOptions(options).length > 0) {
105
+ const named = configuredPostgresOptions(options);
106
+ throw new import_contracts.StorageResolutionError(`[StorageAdapter] Strict resolution: the ${named.join(" and ")} option${named.length > 1 ? "s name" : " names"} no server. Give a connection string, or a host, database or user, or pass file to open a local database.`);
107
+ } else if (isNode) {
108
+ resolverOptions.priority = ["better-sqlite3", "sqljs"];
109
+ } else {
110
+ throw new Error("[StorageAdapter] Unsupported runtime environment for automatic adapter selection.");
111
+ }
112
+ }
113
+ const adapter = await (0, import_resolver.resolveStorageAdapter)(resolverOptions);
114
+ await adapter.open(resolverOptions.openOptions);
115
+ return adapter;
116
+ }
117
+ async function connectDatabase(config) {
118
+ if (typeof config === "string") {
119
+ return createDatabase({ url: config });
120
+ }
121
+ return createDatabase({ postgres: config });
122
+ }
123
+ async function openDatabase(filePath) {
124
+ return createDatabase({ file: filePath });
125
+ }
126
+ async function createMemoryDatabase() {
127
+ return openDatabase(":memory:");
128
+ }
129
+ // Annotate the CommonJS export names for ESM import in node:
130
+ 0 && (module.exports = {
131
+ connectDatabase,
132
+ createDatabase,
133
+ createMemoryDatabase,
134
+ openDatabase,
135
+ resolveStorageAdapter
136
+ });
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The adapter-free entry, `@framers/sql-storage-adapter/core`: the contracts and errors, the SQL dialects, full-text
3
+ * search, codecs and exporters, `createStorageFeatures`, the schema-migration runner, `isUniqueViolation` and the
4
+ * logger. It imports no adapter, so a server that takes its adapter from a per-adapter entry
5
+ * (`@framers/sql-storage-adapter/postgres`) bundles neither sql.js nor the S3 client.
6
+ *
7
+ * @module
8
+ */
9
+ export * from '../types/index.js';
10
+ export { SqliteDialect } from '../dialects/SqliteDialect.js';
11
+ export { PostgresDialect } from '../dialects/PostgresDialect.js';
12
+ export { SqliteFts5 } from '../fts/SqliteFts5.js';
13
+ export { PostgresFts } from '../fts/PostgresFts.js';
14
+ export { NodeBlobCodec } from '../codecs/NodeBlobCodec.js';
15
+ export { BrowserBlobCodec } from '../codecs/BrowserBlobCodec.js';
16
+ export { SqliteFileExporter } from '../exporters/SqliteFileExporter.js';
17
+ export { PostgresExporter } from '../exporters/PostgresExporter.js';
18
+ export { createStorageFeatures } from './contracts/features.js';
19
+ export { isUniqueViolation } from '../shared/errors.js';
20
+ export { setStorageLogger, getStorageLogger, type StorageLogger } from '../shared/logger.js';
21
+ export * from '../features/migrations/schemaMigrations.js';
22
+ export * from '../shared/parameterUtils.js';
23
+ //# sourceMappingURL=portable.d.ts.map
@@ -0,0 +1,66 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var portable_exports = {};
20
+ __export(portable_exports, {
21
+ BrowserBlobCodec: () => import_BrowserBlobCodec.BrowserBlobCodec,
22
+ NodeBlobCodec: () => import_NodeBlobCodec.NodeBlobCodec,
23
+ PostgresDialect: () => import_PostgresDialect.PostgresDialect,
24
+ PostgresExporter: () => import_PostgresExporter.PostgresExporter,
25
+ PostgresFts: () => import_PostgresFts.PostgresFts,
26
+ SqliteDialect: () => import_SqliteDialect.SqliteDialect,
27
+ SqliteFileExporter: () => import_SqliteFileExporter.SqliteFileExporter,
28
+ SqliteFts5: () => import_SqliteFts5.SqliteFts5,
29
+ createStorageFeatures: () => import_features.createStorageFeatures,
30
+ getStorageLogger: () => import_logger.getStorageLogger,
31
+ isUniqueViolation: () => import_errors.isUniqueViolation,
32
+ setStorageLogger: () => import_logger.setStorageLogger
33
+ });
34
+ module.exports = __toCommonJS(portable_exports);
35
+ __reExport(portable_exports, require("../types/index.js"), module.exports);
36
+ var import_SqliteDialect = require("../dialects/SqliteDialect.js");
37
+ var import_PostgresDialect = require("../dialects/PostgresDialect.js");
38
+ var import_SqliteFts5 = require("../fts/SqliteFts5.js");
39
+ var import_PostgresFts = require("../fts/PostgresFts.js");
40
+ var import_NodeBlobCodec = require("../codecs/NodeBlobCodec.js");
41
+ var import_BrowserBlobCodec = require("../codecs/BrowserBlobCodec.js");
42
+ var import_SqliteFileExporter = require("../exporters/SqliteFileExporter.js");
43
+ var import_PostgresExporter = require("../exporters/PostgresExporter.js");
44
+ var import_features = require("./contracts/features.js");
45
+ var import_errors = require("../shared/errors.js");
46
+ var import_logger = require("../shared/logger.js");
47
+ __reExport(portable_exports, require("../features/migrations/schemaMigrations.js"), module.exports);
48
+ __reExport(portable_exports, require("../shared/parameterUtils.js"), module.exports);
49
+ // Annotate the CommonJS export names for ESM import in node:
50
+ 0 && (module.exports = {
51
+ BrowserBlobCodec,
52
+ NodeBlobCodec,
53
+ PostgresDialect,
54
+ PostgresExporter,
55
+ PostgresFts,
56
+ SqliteDialect,
57
+ SqliteFileExporter,
58
+ SqliteFts5,
59
+ createStorageFeatures,
60
+ getStorageLogger,
61
+ isUniqueViolation,
62
+ setStorageLogger,
63
+ ...require("../types/index.js"),
64
+ ...require("../features/migrations/schemaMigrations.js"),
65
+ ...require("../shared/parameterUtils.js")
66
+ });
@@ -0,0 +1,77 @@
1
+ import type { StorageAdapter, StorageOpenOptions } from './contracts/index.js';
2
+ import type { AdapterKind } from './contracts/context.js';
3
+ import { type CapacitorAdapterOptions } from '../adapters/capacitorSqliteAdapter.js';
4
+ import { type PostgresAdapterOptions } from '../adapters/postgresAdapter.js';
5
+ import { type IndexedDbAdapterOptions } from '../adapters/indexedDbAdapter.js';
6
+ import { type StorageLogger } from '../shared/logger.js';
7
+ export type { AdapterKind } from './contracts/context.js';
8
+ export interface StorageResolutionOptions {
9
+ /** Absolute path for sqlite file (used by better-sqlite3/sql.js when persistence is desired). */
10
+ filePath?: string;
11
+ /**
12
+ * Explicit adapter priority override. The resolver builds `postgres`,
13
+ * `better-sqlite3`, `capacitor`, `indexeddb` and `sqljs`; `memory` builds
14
+ * sql.js, as `sqljs` does. Any other kind (`electron-main`,
15
+ * `electron-renderer`, `supabase`, or an unknown name) fails as a candidate
16
+ * with an error that names it, and the resolver goes on to the next one.
17
+ */
18
+ priority?: AdapterKind[];
19
+ /** Options passed to the Capacitor adapter. */
20
+ capacitor?: CapacitorAdapterOptions;
21
+ /**
22
+ * Options passed to the Postgres adapter, all of them: a connection string,
23
+ * or host, port, database, user and password, and the pool, SSL and timeout
24
+ * settings. Without a connection string or a host, database or user here,
25
+ * the connection string comes from DATABASE_URL.
26
+ */
27
+ postgres?: PostgresAdapterOptions;
28
+ /** Options passed to the IndexedDB adapter (browser persistence), all of them. */
29
+ indexedDb?: IndexedDbAdapterOptions;
30
+ /** Options forwarded to adapter.open. */
31
+ openOptions?: StorageOpenOptions;
32
+ /** Suppress fallback chain logs (adapter not-found warnings). Default: false. */
33
+ quiet?: boolean;
34
+ /**
35
+ * The logger for this call's resolver lines (pino's fits). Default: the one
36
+ * `setStorageLogger()` set, else the console.
37
+ */
38
+ logger?: StorageLogger;
39
+ /**
40
+ * Strict resolution, for servers: only the database the options name opens.
41
+ * Default: false.
42
+ *
43
+ * - The postgres candidate is the last one tried. When it fails to open,
44
+ * resolution throws a `StorageResolutionError` instead of trying a local
45
+ * SQLite database, whatever `priority` lists after it.
46
+ * - A Postgres server named by `postgres` or `DATABASE_URL`, with no
47
+ * `priority`, makes `['postgres']` the whole list.
48
+ * - An explicit `filePath` outranks `DATABASE_URL`: with a `filePath` and no
49
+ * `postgres` options that name a server, `DATABASE_URL` is not read.
50
+ * - `postgres` options that name no server, with no `DATABASE_URL` to fill
51
+ * in and no `filePath`, fail instead of opening the local default.
52
+ *
53
+ * Without `strict`, a postgres candidate that fails falls through to the
54
+ * next candidate, and `DATABASE_URL` puts Postgres first even when a
55
+ * `filePath` is given.
56
+ */
57
+ strict?: boolean;
58
+ /**
59
+ * Keeps the resolved adapter's tables apart from other users of the same
60
+ * database: on PostgreSQL a schema of the segment's name, on better-sqlite3
61
+ * and sql.js a file with the segment in its name (`app.sqlite3` becomes
62
+ * `app-agentos.sqlite3`), on IndexedDB and Capacitor a database name with
63
+ * the segment appended (`app-db-agentos`). Lower-case letters, digits and
64
+ * underscores; not `public`, `information_schema` or a name beginning with
65
+ * `pg_`. A name that cannot be a segment is refused before any adapter is
66
+ * tried, and so is a segment with `postgres.pool`, which the Postgres
67
+ * adapter cannot start in the segment. Takes the place of a `segment` in
68
+ * `postgres`, `indexedDb` or `capacitor`.
69
+ */
70
+ segment?: string;
71
+ }
72
+ /**
73
+ * Resolves the most appropriate storage adapter for the current runtime.
74
+ * Tries candidates in the supplied priority order and falls back when one fails.
75
+ */
76
+ export declare const resolveStorageAdapter: (options?: StorageResolutionOptions) => Promise<StorageAdapter>;
77
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1,235 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var resolver_exports = {};
29
+ __export(resolver_exports, {
30
+ resolveStorageAdapter: () => resolveStorageAdapter
31
+ });
32
+ module.exports = __toCommonJS(resolver_exports);
33
+ var import_contracts = require("./contracts/index.js");
34
+ var import_betterSqliteAdapter = require("../adapters/betterSqliteAdapter.js");
35
+ var import_sqlJsAdapter = require("../adapters/sqlJsAdapter.js");
36
+ var import_capacitorSqliteAdapter = require("../adapters/capacitorSqliteAdapter.js");
37
+ var import_postgresAdapter = require("../adapters/postgresAdapter.js");
38
+ var import_indexedDbAdapter = require("../adapters/indexedDbAdapter.js");
39
+ var import_postgresTarget = require("../shared/postgresTarget.js");
40
+ var import_segment = require("../shared/segment.js");
41
+ var import_logger = require("../shared/logger.js");
42
+ const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined";
43
+ const isNode = typeof process !== "undefined" && !!process.versions?.node;
44
+ const joinPath = async (parts) => {
45
+ if (isBrowser) {
46
+ return parts.join("/");
47
+ }
48
+ if (isNode) {
49
+ try {
50
+ const path = await Promise.resolve().then(() => __toESM(require("path")));
51
+ return path.join(...parts);
52
+ } catch {
53
+ return parts.join("/");
54
+ }
55
+ }
56
+ return parts.join("/");
57
+ };
58
+ const getEnv = (key) => {
59
+ if (typeof process !== "undefined" && process.env) {
60
+ return process.env[key];
61
+ }
62
+ return void 0;
63
+ };
64
+ const getCwd = () => {
65
+ if (isNode && typeof process !== "undefined" && process.cwd) {
66
+ return process.cwd();
67
+ }
68
+ return "/";
69
+ };
70
+ const isCapacitorRuntime = () => {
71
+ if (typeof window === "undefined") {
72
+ return false;
73
+ }
74
+ const maybeCapacitor = window.Capacitor;
75
+ return Boolean(maybeCapacitor?.isNativePlatform?.());
76
+ };
77
+ const isElectronMain = () => {
78
+ return typeof process !== "undefined" && Boolean(process.versions?.electron) && process.type === "browser";
79
+ };
80
+ const isElectronRenderer = () => {
81
+ return typeof window !== "undefined" && typeof process !== "undefined" && Boolean(process.versions?.electron) && process.type === "renderer";
82
+ };
83
+ const unsupportedKind = (kind) => {
84
+ switch (kind) {
85
+ case "electron-main":
86
+ return new Error(`The resolver cannot build adapter kind "${kind}". Create it with createElectronMainAdapter from '@framers/sql-storage-adapter/electron'.`);
87
+ case "electron-renderer":
88
+ return new Error(`The resolver cannot build adapter kind "${kind}". Create it with createElectronRendererAdapter from '@framers/sql-storage-adapter/electron'.`);
89
+ case "supabase":
90
+ return new Error(`The resolver cannot build adapter kind "${kind}". Use kind "postgres" with the Supabase connection string, or create a SupabaseAdapter.`);
91
+ default:
92
+ return new Error(`Unknown adapter kind "${kind}". The resolver builds postgres, better-sqlite3, capacitor, indexeddb, sqljs and memory.`);
93
+ }
94
+ };
95
+ const resolveStorageAdapter = async (options = {}) => {
96
+ const segment = options.segment === void 0 ? void 0 : (0, import_segment.validateSegment)(options.segment);
97
+ if ((segment ?? options.postgres?.segment) !== void 0 && options.postgres?.pool) {
98
+ throw new Error("A segment cannot run on a PostgreSQL pool of the caller's (postgres.pool): the segment's search_path is set when each connection of the pool starts, and the adapter does not start the connections of a pool it did not make. Give the connection settings and the segment instead of the pool.");
99
+ }
100
+ const segmentFor = (own) => {
101
+ const chosen = segment ?? own;
102
+ return chosen === void 0 ? {} : { segment: chosen };
103
+ };
104
+ const envOverride = getEnv("STORAGE_ADAPTER");
105
+ const log = options.logger ?? (0, import_logger.getStorageLogger)();
106
+ const strict = options.strict === true;
107
+ const postgresOptions = options.postgres;
108
+ const explicitConnection = postgresOptions?.connectionString;
109
+ const fileOutranksEnv = strict && (0, import_postgresTarget.isNonEmpty)(options.filePath);
110
+ const postgresConnection = (0, import_postgresTarget.isNonEmpty)(explicitConnection) ? explicitConnection : (0, import_postgresTarget.namesPostgresServer)(postgresOptions) || fileOutranksEnv ? void 0 : getEnv("DATABASE_URL") || void 0;
111
+ const postgresTarget = (0, import_postgresTarget.isNonEmpty)(postgresConnection) || (0, import_postgresTarget.namesPostgresServer)(postgresOptions);
112
+ const defaultFilePath = isBrowser ? "db_data/app.sqlite3" : await joinPath([getCwd(), "db_data", "app.sqlite3"]);
113
+ const filePath = options.filePath ?? defaultFilePath;
114
+ const defaultPriority = (() => {
115
+ if (options.priority && options.priority.length > 0) {
116
+ return options.priority;
117
+ }
118
+ if (envOverride) {
119
+ return [envOverride];
120
+ }
121
+ if (isElectronMain()) {
122
+ log.warn({ runtime: "electron-main" }, "Electron main process detected. Consider using the dedicated Electron adapter for full framework support:\n import { createElectronMainAdapter } from '@framers/sql-storage-adapter/electron';\nFalling back to better-sqlite3 adapter.");
123
+ return ["better-sqlite3"];
124
+ }
125
+ if (isElectronRenderer()) {
126
+ log.warn({ runtime: "electron-renderer" }, "Electron renderer process detected. For IPC-based database access, use the dedicated Electron adapter:\n import { createElectronRendererAdapter } from '@framers/sql-storage-adapter/electron';\nNote: Direct database access in renderer is not recommended for security reasons.");
127
+ return ["indexeddb", "sqljs"];
128
+ }
129
+ if (isCapacitorRuntime()) {
130
+ return ["capacitor", "indexeddb", "sqljs"];
131
+ }
132
+ if (postgresTarget) {
133
+ return strict ? ["postgres"] : ["postgres", "better-sqlite3", "indexeddb", "sqljs"];
134
+ }
135
+ if (strict && postgresOptions !== void 0 && !(0, import_postgresTarget.isNonEmpty)(options.filePath)) {
136
+ return ["postgres"];
137
+ }
138
+ if (typeof window !== "undefined" && window.indexedDB) {
139
+ return ["indexeddb", "sqljs"];
140
+ }
141
+ return ["better-sqlite3", "indexeddb", "sqljs"];
142
+ })();
143
+ const candidates = defaultPriority.map((name) => {
144
+ switch (name) {
145
+ case "postgres": {
146
+ return {
147
+ name,
148
+ factory: async () => {
149
+ if (!postgresTarget) {
150
+ throw new Error(fileOutranksEnv ? "A postgres connection string, or a postgres host, database or user is required. Strict resolution does not read DATABASE_URL when a filePath is given." : "DATABASE_URL, a postgres connection string, or a postgres host, database or user is required.");
151
+ }
152
+ return (0, import_postgresAdapter.createPostgresAdapter)({
153
+ ...postgresOptions,
154
+ ...postgresConnection ? { connectionString: postgresConnection } : {},
155
+ ...segmentFor(postgresOptions?.segment)
156
+ });
157
+ },
158
+ openOptions: postgresConnection ? { connectionString: postgresConnection } : void 0
159
+ };
160
+ }
161
+ case "better-sqlite3":
162
+ return {
163
+ name,
164
+ factory: async () => (0, import_betterSqliteAdapter.createBetterSqliteAdapter)(filePath, segmentFor(void 0)),
165
+ openOptions: { filePath }
166
+ };
167
+ case "capacitor":
168
+ return {
169
+ name,
170
+ factory: async () => (0, import_capacitorSqliteAdapter.createCapacitorSqliteAdapter)({ ...options.capacitor, ...segmentFor(options.capacitor?.segment) })
171
+ };
172
+ case "indexeddb":
173
+ return {
174
+ name,
175
+ factory: async () => {
176
+ const legacyOptions = options.openOptions?.adapterOptions;
177
+ return new import_indexedDbAdapter.IndexedDbAdapter({
178
+ ...options.indexedDb,
179
+ dbName: options.indexedDb?.dbName || legacyOptions?.dbName || "app-db",
180
+ autoSave: options.indexedDb?.autoSave ?? true,
181
+ ...segmentFor(options.indexedDb?.segment)
182
+ });
183
+ }
184
+ };
185
+ case "sqljs":
186
+ // Not an AdapterKind, but the README lists it and hosts pass it; it builds
187
+ // what it has always built.
188
+ case "memory":
189
+ return {
190
+ name: "sqljs",
191
+ factory: async () => (0, import_sqlJsAdapter.createSqlJsAdapter)(segmentFor(void 0)),
192
+ openOptions: { filePath }
193
+ };
194
+ default:
195
+ return {
196
+ name,
197
+ factory: async () => {
198
+ throw unsupportedKind(name);
199
+ }
200
+ };
201
+ }
202
+ });
203
+ const errors = [];
204
+ const quiet = options.quiet === true;
205
+ for (const candidate of candidates) {
206
+ try {
207
+ const adapter = await candidate.factory();
208
+ const openOptions = {
209
+ ...candidate.openOptions,
210
+ ...options.openOptions
211
+ };
212
+ await adapter.open(openOptions);
213
+ if (!quiet) {
214
+ log.info(segment === void 0 ? { adapter: candidate.name } : { adapter: candidate.name, segment }, `Using adapter "${candidate.name}"${segment === void 0 ? "" : ` for segment "${segment}"`}.`);
215
+ }
216
+ return adapter;
217
+ } catch (error) {
218
+ errors.push(error);
219
+ if (strict && candidate.name === "postgres") {
220
+ const msg = error instanceof Error ? error.message : String(error);
221
+ throw new import_contracts.StorageResolutionError(`PostgreSQL could not be opened, and strict resolution does not fall back to a local database. ${msg}`, errors);
222
+ }
223
+ if (!quiet) {
224
+ const msg = error instanceof Error ? error.message : String(error);
225
+ log.warn({ adapter: candidate.name, error: msg }, `${candidate.name} not available, trying next. ${msg}`);
226
+ }
227
+ continue;
228
+ }
229
+ }
230
+ throw new import_contracts.StorageResolutionError("Unable to resolve a storage adapter for the current environment.", errors);
231
+ };
232
+ // Annotate the CommonJS export names for ESM import in node:
233
+ 0 && (module.exports = {
234
+ resolveStorageAdapter
235
+ });
@@ -0,0 +1,35 @@
1
+ import type { CastType, ColumnKind, DateBucketUnit, IntervalUnit, JsonValueType, SqlDialect } from '../core/contracts/dialect.js';
2
+ /**
3
+ * PostgreSQL dialect implementation.
4
+ *
5
+ * Generates Postgres-compatible SQL syntax including `ON CONFLICT DO NOTHING`,
6
+ * `ON CONFLICT ... DO UPDATE SET`, `jsonb` extraction operators, `COALESCE()`,
7
+ * `GENERATED ALWAYS AS IDENTITY`, and `$N` positional placeholders.
8
+ */
9
+ export declare class PostgresDialect implements SqlDialect {
10
+ readonly name: "postgres";
11
+ insertOrIgnore(table: string, columns: string[], placeholders: string[]): string;
12
+ insertOrReplace(table: string, columns: string[], placeholders: string[], primaryKey?: string): string;
13
+ upsert(table: string, columns: string[], placeholders: string[], conflictColumns: string[], updateColumns?: string[]): string;
14
+ jsonExtract(column: string, jsonPath: string): string;
15
+ jsonExtractAs(column: string, jsonPath: string, type: JsonValueType): string;
16
+ jsonArrayContains(jsonArray: string, valueExpr: string): string;
17
+ ifnull(expr: string, fallback: string): string;
18
+ autoIncrementPrimaryKey(): string;
19
+ columnType(kind: ColumnKind): string;
20
+ pragma(_key: string, _value: string): string | null;
21
+ placeholder(index: number): string;
22
+ now(): string;
23
+ cast(expr: string, type: CastType): string;
24
+ addInterval(expr: string, amount: number, unit: IntervalUnit): string;
25
+ dateBucket(unit: DateBucketUnit, expr: string): string;
26
+ ilike(expr: string, pattern: string): string;
27
+ inList(expr: string, items: string[]): string;
28
+ inArray(expr: string, arrayParam: string): string;
29
+ rowLock(mode: 'update' | 'share', wait?: 'wait' | 'skipLocked' | 'noWait'): string;
30
+ advisoryTransactionLock(keyExpr: string): string | null;
31
+ greatest(...exprs: string[]): string;
32
+ least(...exprs: string[]): string;
33
+ uuid(): string;
34
+ }
35
+ //# sourceMappingURL=PostgresDialect.d.ts.map