@neutron-build/nucleus 0.1.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/LICENSE +21 -0
- package/README.md +27 -0
- package/dist/blob/index.d.ts +42 -0
- package/dist/blob/index.d.ts.map +1 -0
- package/dist/blob/index.js +121 -0
- package/dist/blob/index.js.map +1 -0
- package/dist/cdc/index.d.ts +14 -0
- package/dist/cdc/index.d.ts.map +1 -0
- package/dist/cdc/index.js +41 -0
- package/dist/cdc/index.js.map +1 -0
- package/dist/client.d.ts +59 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +68 -0
- package/dist/client.js.map +1 -0
- package/dist/columnar/index.d.ts +20 -0
- package/dist/columnar/index.d.ts.map +1 -0
- package/dist/columnar/index.js +60 -0
- package/dist/columnar/index.js.map +1 -0
- package/dist/datalog/index.d.ts +20 -0
- package/dist/datalog/index.d.ts.map +1 -0
- package/dist/datalog/index.js +53 -0
- package/dist/datalog/index.js.map +1 -0
- package/dist/document/index.d.ts +42 -0
- package/dist/document/index.d.ts.map +1 -0
- package/dist/document/index.js +154 -0
- package/dist/document/index.js.map +1 -0
- package/dist/errors.d.ts +39 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +64 -0
- package/dist/errors.js.map +1 -0
- package/dist/features.d.ts +14 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +85 -0
- package/dist/features.js.map +1 -0
- package/dist/fts/index.d.ts +35 -0
- package/dist/fts/index.d.ts.map +1 -0
- package/dist/fts/index.js +76 -0
- package/dist/fts/index.js.map +1 -0
- package/dist/geo/index.d.ts +34 -0
- package/dist/geo/index.d.ts.map +1 -0
- package/dist/geo/index.js +121 -0
- package/dist/geo/index.js.map +1 -0
- package/dist/graph/index.d.ts +43 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +109 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/helpers.d.ts +11 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +47 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/kv/index.d.ts +93 -0
- package/dist/kv/index.d.ts.map +1 -0
- package/dist/kv/index.js +223 -0
- package/dist/kv/index.js.map +1 -0
- package/dist/migrate.d.ts +37 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +95 -0
- package/dist/migrate.js.map +1 -0
- package/dist/pubsub/index.d.ts +14 -0
- package/dist/pubsub/index.d.ts.map +1 -0
- package/dist/pubsub/index.js +44 -0
- package/dist/pubsub/index.js.map +1 -0
- package/dist/sql/index.d.ts +31 -0
- package/dist/sql/index.d.ts.map +1 -0
- package/dist/sql/index.js +65 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/streams/index.d.ts +26 -0
- package/dist/streams/index.d.ts.map +1 -0
- package/dist/streams/index.js +83 -0
- package/dist/streams/index.js.map +1 -0
- package/dist/timeseries/index.d.ts +46 -0
- package/dist/timeseries/index.d.ts.map +1 -0
- package/dist/timeseries/index.js +122 -0
- package/dist/timeseries/index.js.map +1 -0
- package/dist/transport.d.ts +97 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +477 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/vector/index.d.ts +34 -0
- package/dist/vector/index.d.ts.map +1 -0
- package/dist/vector/index.js +104 -0
- package/dist/vector/index.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Nucleus client — transport implementations
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { NucleusAuthError, NucleusConflictError, NucleusConnectionError, NucleusNotFoundError, NucleusQueryError, NucleusTransactionError, } from './errors.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// URL sanitization
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
function sanitizeUrl(url) {
|
|
9
|
+
try {
|
|
10
|
+
const parsed = new URL(url);
|
|
11
|
+
if (parsed.username || parsed.password) {
|
|
12
|
+
parsed.username = '***';
|
|
13
|
+
parsed.password = '***';
|
|
14
|
+
}
|
|
15
|
+
return parsed.toString();
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return url.replace(/\/\/[^@]+@/, '//***:***@');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function request(url, body, headers, timeout) {
|
|
22
|
+
let res;
|
|
23
|
+
const controller = timeout != null ? new AbortController() : undefined;
|
|
24
|
+
const timer = controller ? setTimeout(() => controller.abort(), timeout) : undefined;
|
|
25
|
+
try {
|
|
26
|
+
res = await fetch(url, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: { 'Content-Type': 'application/json', ...headers },
|
|
29
|
+
body: JSON.stringify(body),
|
|
30
|
+
signal: controller?.signal,
|
|
31
|
+
keepalive: true,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
throw new NucleusConnectionError('Failed to reach Nucleus server', {
|
|
36
|
+
cause: err instanceof Error ? err : undefined,
|
|
37
|
+
meta: { url: sanitizeUrl(url) },
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
if (timer != null)
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
}
|
|
44
|
+
if (!res.ok) {
|
|
45
|
+
const text = await res.text().catch(() => '');
|
|
46
|
+
mapHttpError(res.status, text, url);
|
|
47
|
+
}
|
|
48
|
+
return (await res.json());
|
|
49
|
+
}
|
|
50
|
+
function mapHttpError(status, body, url) {
|
|
51
|
+
const meta = { status, url: sanitizeUrl(url) };
|
|
52
|
+
switch (status) {
|
|
53
|
+
case 401:
|
|
54
|
+
case 403:
|
|
55
|
+
throw new NucleusAuthError(body || 'Authentication failed', { meta });
|
|
56
|
+
case 404:
|
|
57
|
+
throw new NucleusNotFoundError(body || 'Resource not found', { meta });
|
|
58
|
+
case 409:
|
|
59
|
+
throw new NucleusConflictError(body || 'Conflict', { meta });
|
|
60
|
+
default:
|
|
61
|
+
throw new NucleusQueryError(body || `HTTP ${status}`, { meta });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// HttpTransport
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
export class HttpTransport {
|
|
68
|
+
baseUrl;
|
|
69
|
+
headers;
|
|
70
|
+
timeout;
|
|
71
|
+
constructor(url, headers = {}, timeout) {
|
|
72
|
+
// Strip trailing slash for consistent URL building
|
|
73
|
+
this.baseUrl = url.replace(/\/+$/, '');
|
|
74
|
+
this.headers = headers;
|
|
75
|
+
this.timeout = timeout;
|
|
76
|
+
// Warn about insecure connections
|
|
77
|
+
if (this.baseUrl.startsWith('http://') && typeof process !== 'undefined' && process.env.NODE_ENV === 'production') {
|
|
78
|
+
console.warn('[neutron-nucleus] WARNING: Using unencrypted HTTP connection. Use HTTPS in production.');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async query(sql, params = []) {
|
|
82
|
+
const res = await request(`${this.baseUrl}/api/query`, { sql, params }, this.headers, this.timeout);
|
|
83
|
+
const rows = (res.data ?? []);
|
|
84
|
+
return { rows, rowCount: res.rowCount ?? rows.length };
|
|
85
|
+
}
|
|
86
|
+
async execute(sql, params = []) {
|
|
87
|
+
const res = await request(`${this.baseUrl}/api/execute`, { sql, params }, this.headers, this.timeout);
|
|
88
|
+
return res.affected ?? 0;
|
|
89
|
+
}
|
|
90
|
+
async fetchval(sql, params = []) {
|
|
91
|
+
const result = await this.query(sql, params);
|
|
92
|
+
if (result.rows.length === 0)
|
|
93
|
+
return null;
|
|
94
|
+
const first = result.rows[0];
|
|
95
|
+
const keys = Object.keys(first);
|
|
96
|
+
if (keys.length === 0)
|
|
97
|
+
return null;
|
|
98
|
+
return first[keys[0]];
|
|
99
|
+
}
|
|
100
|
+
async beginTransaction(isolationLevel) {
|
|
101
|
+
const res = await request(`${this.baseUrl}/api/transaction/begin`, { isolationLevel }, this.headers, this.timeout);
|
|
102
|
+
const txId = res.data?.txId;
|
|
103
|
+
if (!txId) {
|
|
104
|
+
throw new NucleusTransactionError('Server did not return a transaction ID');
|
|
105
|
+
}
|
|
106
|
+
return new HttpTransactionTransport(this.baseUrl, this.headers, txId, this.timeout);
|
|
107
|
+
}
|
|
108
|
+
async close() {
|
|
109
|
+
// HTTP is stateless — nothing to close.
|
|
110
|
+
}
|
|
111
|
+
async ping() {
|
|
112
|
+
await request(`${this.baseUrl}/api/query`, { sql: 'SELECT 1', params: [] }, this.headers, this.timeout);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// HttpTransactionTransport
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
class HttpTransactionTransport {
|
|
119
|
+
baseUrl;
|
|
120
|
+
headers;
|
|
121
|
+
txId;
|
|
122
|
+
timeout;
|
|
123
|
+
finished = false;
|
|
124
|
+
constructor(baseUrl, headers, txId, timeout) {
|
|
125
|
+
this.baseUrl = baseUrl;
|
|
126
|
+
this.headers = { ...headers, 'X-Nucleus-TxId': txId };
|
|
127
|
+
this.txId = txId;
|
|
128
|
+
this.timeout = timeout;
|
|
129
|
+
}
|
|
130
|
+
assertOpen() {
|
|
131
|
+
if (this.finished) {
|
|
132
|
+
throw new NucleusTransactionError('Transaction has already been committed or rolled back');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async query(sql, params = []) {
|
|
136
|
+
this.assertOpen();
|
|
137
|
+
const res = await request(`${this.baseUrl}/api/query`, { sql, params, txId: this.txId }, this.headers, this.timeout);
|
|
138
|
+
const rows = (res.data ?? []);
|
|
139
|
+
return { rows, rowCount: res.rowCount ?? rows.length };
|
|
140
|
+
}
|
|
141
|
+
async execute(sql, params = []) {
|
|
142
|
+
this.assertOpen();
|
|
143
|
+
const res = await request(`${this.baseUrl}/api/execute`, { sql, params, txId: this.txId }, this.headers, this.timeout);
|
|
144
|
+
return res.affected ?? 0;
|
|
145
|
+
}
|
|
146
|
+
async fetchval(sql, params = []) {
|
|
147
|
+
const result = await this.query(sql, params);
|
|
148
|
+
if (result.rows.length === 0)
|
|
149
|
+
return null;
|
|
150
|
+
const first = result.rows[0];
|
|
151
|
+
const keys = Object.keys(first);
|
|
152
|
+
if (keys.length === 0)
|
|
153
|
+
return null;
|
|
154
|
+
return first[keys[0]];
|
|
155
|
+
}
|
|
156
|
+
async beginTransaction(_isolationLevel) {
|
|
157
|
+
throw new NucleusTransactionError('Nested transactions are not supported');
|
|
158
|
+
}
|
|
159
|
+
async commit() {
|
|
160
|
+
this.assertOpen();
|
|
161
|
+
await request(`${this.baseUrl}/api/transaction/commit`, { txId: this.txId }, this.headers, this.timeout);
|
|
162
|
+
this.finished = true;
|
|
163
|
+
}
|
|
164
|
+
async rollback() {
|
|
165
|
+
this.assertOpen();
|
|
166
|
+
await request(`${this.baseUrl}/api/transaction/rollback`, { txId: this.txId }, this.headers, this.timeout);
|
|
167
|
+
this.finished = true;
|
|
168
|
+
}
|
|
169
|
+
async close() {
|
|
170
|
+
if (!this.finished) {
|
|
171
|
+
await this.rollback();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async ping() {
|
|
175
|
+
this.assertOpen();
|
|
176
|
+
await this.query('SELECT 1');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Transport for mobile (React Native) environments.
|
|
181
|
+
*
|
|
182
|
+
* Wraps `HttpTransport` and adds:
|
|
183
|
+
* - Automatic retry with exponential backoff for transient failures
|
|
184
|
+
* - In-memory cache for SELECT queries
|
|
185
|
+
* - Offline write queue that flushes when connectivity is restored
|
|
186
|
+
*/
|
|
187
|
+
export class MobileTransport {
|
|
188
|
+
http;
|
|
189
|
+
cache;
|
|
190
|
+
cacheTTL;
|
|
191
|
+
cacheEnabled;
|
|
192
|
+
maxRetries;
|
|
193
|
+
retryDelay;
|
|
194
|
+
offlineQueueEnabled;
|
|
195
|
+
maxQueueSize;
|
|
196
|
+
offlineQueue = [];
|
|
197
|
+
isOnline;
|
|
198
|
+
constructor(config) {
|
|
199
|
+
this.http = new HttpTransport(config.url, config.headers, config.timeout);
|
|
200
|
+
this.cache = new Map();
|
|
201
|
+
this.cacheTTL = config.cacheTTL ?? 60_000;
|
|
202
|
+
this.cacheEnabled = config.cacheEnabled !== false;
|
|
203
|
+
this.maxRetries = config.maxRetries ?? 3;
|
|
204
|
+
this.retryDelay = config.retryDelay ?? 1_000;
|
|
205
|
+
this.offlineQueueEnabled = config.offlineQueueEnabled !== false;
|
|
206
|
+
this.maxQueueSize = config.maxQueueSize ?? 100;
|
|
207
|
+
this.isOnline = typeof navigator !== 'undefined' ? navigator.onLine : true;
|
|
208
|
+
if (typeof window !== 'undefined') {
|
|
209
|
+
window.addEventListener('online', () => {
|
|
210
|
+
this.isOnline = true;
|
|
211
|
+
void this.flushQueue();
|
|
212
|
+
});
|
|
213
|
+
window.addEventListener('offline', () => {
|
|
214
|
+
this.isOnline = false;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
async query(sql, params = []) {
|
|
219
|
+
const isRead = sql.trimStart().toUpperCase().startsWith('SELECT');
|
|
220
|
+
// Check cache for read queries
|
|
221
|
+
if (isRead && this.cacheEnabled) {
|
|
222
|
+
const cacheKey = JSON.stringify({ sql, params });
|
|
223
|
+
const cached = this.cache.get(cacheKey);
|
|
224
|
+
if (cached && Date.now() - cached.timestamp < this.cacheTTL) {
|
|
225
|
+
return cached.data;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const result = await this.withRetry(() => this.http.query(sql, params));
|
|
229
|
+
// Cache read results
|
|
230
|
+
if (isRead && this.cacheEnabled) {
|
|
231
|
+
const cacheKey = JSON.stringify({ sql, params });
|
|
232
|
+
this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
|
|
233
|
+
// Evict oldest entries when cache grows too large
|
|
234
|
+
if (this.cache.size > 500) {
|
|
235
|
+
const entries = [...this.cache.entries()].sort((a, b) => a[1].timestamp - b[1].timestamp);
|
|
236
|
+
for (let i = 0; i < 100; i++)
|
|
237
|
+
this.cache.delete(entries[i][0]);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
async execute(sql, params = []) {
|
|
243
|
+
if (!this.isOnline && this.offlineQueueEnabled) {
|
|
244
|
+
return new Promise((resolve, reject) => {
|
|
245
|
+
if (this.offlineQueue.length >= this.maxQueueSize) {
|
|
246
|
+
reject(new NucleusConnectionError('Offline queue full', { meta: { queueSize: this.maxQueueSize } }));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
this.offlineQueue.push({ resolve, reject, sql, params });
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
return this.withRetry(() => this.http.execute(sql, params));
|
|
253
|
+
}
|
|
254
|
+
async fetchval(sql, params = []) {
|
|
255
|
+
const result = await this.query(sql, params);
|
|
256
|
+
if (result.rows.length === 0)
|
|
257
|
+
return null;
|
|
258
|
+
const first = result.rows[0];
|
|
259
|
+
const keys = Object.keys(first);
|
|
260
|
+
if (keys.length === 0)
|
|
261
|
+
return null;
|
|
262
|
+
return first[keys[0]];
|
|
263
|
+
}
|
|
264
|
+
async beginTransaction(isolationLevel) {
|
|
265
|
+
// Transactions go through the underlying HTTP transport directly — no caching or queueing
|
|
266
|
+
return this.withRetry(() => this.http.beginTransaction(isolationLevel));
|
|
267
|
+
}
|
|
268
|
+
async close() {
|
|
269
|
+
this.cache.clear();
|
|
270
|
+
await this.http.close();
|
|
271
|
+
}
|
|
272
|
+
async ping() {
|
|
273
|
+
await this.withRetry(() => this.http.ping());
|
|
274
|
+
}
|
|
275
|
+
// -- Mobile-specific API --------------------------------------------------
|
|
276
|
+
/** Clear all cached query results, or only those matching `pattern`. */
|
|
277
|
+
invalidateCache(pattern) {
|
|
278
|
+
if (!pattern) {
|
|
279
|
+
this.cache.clear();
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
for (const key of this.cache.keys()) {
|
|
283
|
+
if (key.includes(pattern))
|
|
284
|
+
this.cache.delete(key);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/** Number of operations waiting in the offline queue. */
|
|
288
|
+
get queueSize() {
|
|
289
|
+
return this.offlineQueue.length;
|
|
290
|
+
}
|
|
291
|
+
// -- Internals ------------------------------------------------------------
|
|
292
|
+
async withRetry(fn) {
|
|
293
|
+
let lastError;
|
|
294
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
295
|
+
try {
|
|
296
|
+
return await fn();
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
lastError = err instanceof Error ? err : new Error(String(err));
|
|
300
|
+
// Don't retry client errors (4xx)
|
|
301
|
+
const status = err?.meta?.status;
|
|
302
|
+
if (status != null && status >= 400 && status < 500)
|
|
303
|
+
throw err;
|
|
304
|
+
if (attempt < this.maxRetries) {
|
|
305
|
+
await new Promise((r) => setTimeout(r, this.retryDelay * Math.pow(2, attempt)));
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
throw lastError;
|
|
310
|
+
}
|
|
311
|
+
async flushQueue() {
|
|
312
|
+
const queue = this.offlineQueue;
|
|
313
|
+
this.offlineQueue = [];
|
|
314
|
+
for (const item of queue) {
|
|
315
|
+
try {
|
|
316
|
+
const result = await this.http.execute(item.sql, item.params);
|
|
317
|
+
item.resolve(result);
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
item.reject(err);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Transport for desktop environments where Nucleus is embedded via Tauri.
|
|
327
|
+
*
|
|
328
|
+
* Skips HTTP serialization overhead by calling Tauri's IPC `invoke()` directly.
|
|
329
|
+
* Falls back to the `neutron://` custom protocol when Tauri internals are not
|
|
330
|
+
* available.
|
|
331
|
+
*/
|
|
332
|
+
export class EmbeddedTransport {
|
|
333
|
+
invoke;
|
|
334
|
+
constructor() {
|
|
335
|
+
// Prefer Tauri's IPC invoke when available
|
|
336
|
+
if (typeof window !== 'undefined' && window.__TAURI_INTERNALS__) {
|
|
337
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
338
|
+
this.invoke = window.__TAURI_INTERNALS__.invoke;
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
// Fallback to neutron:// custom protocol
|
|
342
|
+
this.invoke = async (cmd, args) => {
|
|
343
|
+
const res = await fetch(`neutron://localhost/api/${cmd}`, {
|
|
344
|
+
method: 'POST',
|
|
345
|
+
headers: { 'Content-Type': 'application/json' },
|
|
346
|
+
body: JSON.stringify(args),
|
|
347
|
+
});
|
|
348
|
+
if (!res.ok) {
|
|
349
|
+
const text = await res.text().catch(() => '');
|
|
350
|
+
throw new NucleusQueryError(text || `Embedded call failed: ${res.status}`, {
|
|
351
|
+
meta: { status: res.status, cmd },
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
return res.json();
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
async query(sql, params = []) {
|
|
359
|
+
const result = (await this.invoke('nucleus_query', { sql, params }));
|
|
360
|
+
const rows = (result.rows ?? result.data ?? []);
|
|
361
|
+
return { rows, rowCount: result.rowCount ?? rows.length };
|
|
362
|
+
}
|
|
363
|
+
async execute(sql, params = []) {
|
|
364
|
+
const result = (await this.invoke('nucleus_execute', { sql, params }));
|
|
365
|
+
return result.affected ?? result.rowsAffected ?? 0;
|
|
366
|
+
}
|
|
367
|
+
async fetchval(sql, params = []) {
|
|
368
|
+
const result = await this.query(sql, params);
|
|
369
|
+
if (result.rows.length === 0)
|
|
370
|
+
return null;
|
|
371
|
+
const first = result.rows[0];
|
|
372
|
+
const keys = Object.keys(first);
|
|
373
|
+
if (keys.length === 0)
|
|
374
|
+
return null;
|
|
375
|
+
return first[keys[0]];
|
|
376
|
+
}
|
|
377
|
+
async beginTransaction(isolationLevel) {
|
|
378
|
+
const result = (await this.invoke('nucleus_transaction_begin', {
|
|
379
|
+
isolationLevel: isolationLevel ?? null,
|
|
380
|
+
}));
|
|
381
|
+
const txId = result.txId;
|
|
382
|
+
if (!txId) {
|
|
383
|
+
throw new NucleusTransactionError('Embedded Nucleus did not return a transaction ID');
|
|
384
|
+
}
|
|
385
|
+
return new EmbeddedTransactionTransport(this.invoke, txId);
|
|
386
|
+
}
|
|
387
|
+
async close() {
|
|
388
|
+
// Embedded — nothing to close from the client side.
|
|
389
|
+
}
|
|
390
|
+
async ping() {
|
|
391
|
+
await this.invoke('nucleus_query', { sql: 'SELECT 1', params: [] });
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// ---------------------------------------------------------------------------
|
|
395
|
+
// EmbeddedTransactionTransport
|
|
396
|
+
// ---------------------------------------------------------------------------
|
|
397
|
+
class EmbeddedTransactionTransport {
|
|
398
|
+
invoke;
|
|
399
|
+
txId;
|
|
400
|
+
finished = false;
|
|
401
|
+
constructor(invoke, txId) {
|
|
402
|
+
this.invoke = invoke;
|
|
403
|
+
this.txId = txId;
|
|
404
|
+
}
|
|
405
|
+
assertOpen() {
|
|
406
|
+
if (this.finished) {
|
|
407
|
+
throw new NucleusTransactionError('Transaction has already been committed or rolled back');
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
async query(sql, params = []) {
|
|
411
|
+
this.assertOpen();
|
|
412
|
+
const result = (await this.invoke('nucleus_query', { sql, params, txId: this.txId }));
|
|
413
|
+
const rows = (result.rows ?? result.data ?? []);
|
|
414
|
+
return { rows, rowCount: result.rowCount ?? rows.length };
|
|
415
|
+
}
|
|
416
|
+
async execute(sql, params = []) {
|
|
417
|
+
this.assertOpen();
|
|
418
|
+
const result = (await this.invoke('nucleus_execute', { sql, params, txId: this.txId }));
|
|
419
|
+
return result.affected ?? result.rowsAffected ?? 0;
|
|
420
|
+
}
|
|
421
|
+
async fetchval(sql, params = []) {
|
|
422
|
+
const result = await this.query(sql, params);
|
|
423
|
+
if (result.rows.length === 0)
|
|
424
|
+
return null;
|
|
425
|
+
const first = result.rows[0];
|
|
426
|
+
const keys = Object.keys(first);
|
|
427
|
+
if (keys.length === 0)
|
|
428
|
+
return null;
|
|
429
|
+
return first[keys[0]];
|
|
430
|
+
}
|
|
431
|
+
async beginTransaction(_isolationLevel) {
|
|
432
|
+
throw new NucleusTransactionError('Nested transactions are not supported');
|
|
433
|
+
}
|
|
434
|
+
async commit() {
|
|
435
|
+
this.assertOpen();
|
|
436
|
+
await this.invoke('nucleus_transaction_commit', { txId: this.txId });
|
|
437
|
+
this.finished = true;
|
|
438
|
+
}
|
|
439
|
+
async rollback() {
|
|
440
|
+
this.assertOpen();
|
|
441
|
+
await this.invoke('nucleus_transaction_rollback', { txId: this.txId });
|
|
442
|
+
this.finished = true;
|
|
443
|
+
}
|
|
444
|
+
async close() {
|
|
445
|
+
if (!this.finished) {
|
|
446
|
+
await this.rollback();
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
async ping() {
|
|
450
|
+
this.assertOpen();
|
|
451
|
+
await this.query('SELECT 1');
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// ---------------------------------------------------------------------------
|
|
455
|
+
// Auto-detection factory
|
|
456
|
+
// ---------------------------------------------------------------------------
|
|
457
|
+
/**
|
|
458
|
+
* Create the best transport for the current platform.
|
|
459
|
+
*
|
|
460
|
+
* Detection order:
|
|
461
|
+
* 1. Desktop with Tauri internals -> `EmbeddedTransport` (IPC, zero serialization overhead)
|
|
462
|
+
* 2. React Native -> `MobileTransport` (retries, caching, offline queue)
|
|
463
|
+
* 3. Everything else -> `HttpTransport` (standard fetch)
|
|
464
|
+
*/
|
|
465
|
+
export function createTransport(config) {
|
|
466
|
+
// Desktop with Tauri — use embedded transport (skips HTTP entirely)
|
|
467
|
+
if (typeof window !== 'undefined' && window.__TAURI_INTERNALS__) {
|
|
468
|
+
return new EmbeddedTransport();
|
|
469
|
+
}
|
|
470
|
+
// React Native — use mobile transport with retries, caching, and offline queue
|
|
471
|
+
if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
472
|
+
return new MobileTransport(config);
|
|
473
|
+
}
|
|
474
|
+
// Web / Node / everything else — standard HTTP
|
|
475
|
+
return new HttpTransport(config.url, config.headers, config.timeout);
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAG9E,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAgCrB,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAcD,KAAK,UAAU,OAAO,CACpB,GAAW,EACX,IAAa,EACb,OAA+B,EAC/B,OAAgB;IAEhB,IAAI,GAAa,CAAC;IAClB,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAErF,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE;YAC3D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,EAAE,MAAM;YAC1B,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,sBAAsB,CAAC,gCAAgC,EAAE;YACjE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YAC7C,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,IAAI,IAAI;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,GAAW;IAC7D,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,MAAM,IAAI,gBAAgB,CAAC,IAAI,IAAI,uBAAuB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,KAAK,GAAG;YACN,MAAM,IAAI,oBAAoB,CAAC,IAAI,IAAI,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,KAAK,GAAG;YACN,MAAM,IAAI,oBAAoB,CAAC,IAAI,IAAI,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D;YACE,MAAM,IAAI,iBAAiB,CAAC,IAAI,IAAI,QAAQ,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,OAAO,aAAa;IACP,OAAO,CAAS;IAChB,OAAO,CAAyB;IAChC,OAAO,CAAqB;IAE7C,YAAY,GAAW,EAAE,UAAkC,EAAE,EAAE,OAAgB;QAC7E,mDAAmD;QACnD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,kCAAkC;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAClH,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAA8B,GAAW,EAAE,SAAoB,EAAE;QAC1E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAM,GAAG,IAAI,CAAC,OAAO,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAQ,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAO,GAAG,IAAI,CAAC,OAAO,cAAc,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5G,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAc,GAAW,EAAE,SAAoB,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAA0B,GAAG,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAM,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,cAA+B;QACpD,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,GAAG,IAAI,CAAC,OAAO,wBAAwB,EACvC,EAAE,cAAc,EAAE,EAClB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,uBAAuB,CAAC,wCAAwC,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,KAAK;QACT,wCAAwC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,CAAO,GAAG,IAAI,CAAC,OAAO,YAAY,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChH,CAAC;CACF;AAED,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,wBAAwB;IACX,OAAO,CAAS;IAChB,OAAO,CAAyB;IAChC,IAAI,CAAS;IACb,OAAO,CAAqB;IACrC,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,OAAe,EAAE,OAA+B,EAAE,IAAY,EAAE,OAAgB;QAC1F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,uBAAuB,CAAC,uDAAuD,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAA8B,GAAW,EAAE,SAAoB,EAAE;QAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,GAAG,IAAI,CAAC,OAAO,YAAY,EAC3B,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAChC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAQ,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,GAAG,IAAI,CAAC,OAAO,cAAc,EAC7B,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAChC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAc,GAAW,EAAE,SAAoB,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAA0B,GAAG,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAM,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,eAAgC;QACrD,MAAM,IAAI,uBAAuB,CAAC,uCAAuC,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,OAAO,CACX,GAAG,IAAI,CAAC,OAAO,yBAAyB,EACxC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EACnB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,OAAO,CACX,GAAG,IAAI,CAAC,OAAO,2BAA2B,EAC1C,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EACnB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;CACF;AAaD;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IACT,IAAI,CAAgB;IACpB,KAAK,CAAoD;IACzD,QAAQ,CAAS;IACjB,YAAY,CAAU;IACtB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,mBAAmB,CAAU;IAC7B,YAAY,CAAS;IAC9B,YAAY,GAAkB,EAAE,CAAC;IACjC,QAAQ,CAAU;IAE1B,YAAY,MAA6B;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,KAAK,KAAK,CAAC;QAChE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3E,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE;gBACtC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAA8B,GAAW,EAAE,SAAoB,EAAE;QAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAElE,+BAA+B;QAC/B,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC5D,OAAO,MAAM,CAAC,IAAsB,CAAC;YACvC,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAE3E,qBAAqB;QACrB,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClE,kDAAkD;YAClD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC1F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/C,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClD,MAAM,CAAC,IAAI,sBAAsB,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;oBACrG,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAc,GAAW,EAAE,SAAoB,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAA0B,GAAG,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAM,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,cAA+B;QACpD,0FAA0F;QAC1F,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,4EAA4E;IAE5E,wEAAwE;IACxE,eAAe,CAAC,OAAgB;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,4EAA4E;IAEpE,KAAK,CAAC,SAAS,CAAI,EAAoB;QAC7C,IAAI,SAA4B,CAAC;QACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,kCAAkC;gBAClC,MAAM,MAAM,GAAI,GAAsC,EAAE,IAAI,EAAE,MAAM,CAAC;gBACrE,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;oBAAE,MAAM,GAAG,CAAC;gBAC/D,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,SAAS,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAQD;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAW;IAElC;QACE,2CAA2C;QAC3C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAA6C,CAAC,mBAAmB,EAAE,CAAC;YACxG,8DAA8D;YAC9D,IAAI,CAAC,MAAM,GAAI,MAAc,CAAC,mBAAmB,CAAC,MAAkB,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,GAAW,EAAE,IAA6B,EAAE,EAAE;gBACjE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,2BAA2B,GAAG,EAAE,EAAE;oBACxD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iBAC3B,CAAC,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,IAAI,iBAAiB,CAAC,IAAI,IAAI,yBAAyB,GAAG,CAAC,MAAM,EAAE,EAAE;wBACzE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE;qBAClC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAA8B,GAAW,EAAE,SAAoB,EAAE;QAC1E,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAIlE,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAQ,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC/C,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAGpE,CAAC;QACF,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAc,GAAW,EAAE,SAAoB,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAA0B,GAAG,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAM,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,cAA+B;QACpD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YAC7D,cAAc,EAAE,cAAc,IAAI,IAAI;SACvC,CAAC,CAAsB,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,uBAAuB,CAAC,kDAAkD,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,IAAI,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,oDAAoD;IACtD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;CACF;AAED,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,MAAM,4BAA4B;IACf,MAAM,CAAW;IACjB,IAAI,CAAS;IACtB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,MAAgB,EAAE,IAAY;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,uBAAuB,CAAC,uDAAuD,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAA8B,GAAW,EAAE,SAAoB,EAAE;QAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAInF,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAQ,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAGrF,CAAC;QACF,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAc,GAAW,EAAE,SAAoB,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAA0B,GAAG,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAM,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,eAAgC;QACrD,MAAM,IAAI,uBAAuB,CAAC,uCAAuC,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,oEAAoE;IACpE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAA6C,CAAC,mBAAmB,EAAE,CAAC;QACxG,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED,+EAA+E;IAC/E,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QAC5E,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,+CAA+C;IAC/C,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACvE,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Transport interface for communicating with a Nucleus / PostgreSQL server. */
|
|
2
|
+
export interface Transport {
|
|
3
|
+
/** Execute a SQL query and return typed rows. */
|
|
4
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
|
|
5
|
+
/** Execute a SQL statement (INSERT / UPDATE / DELETE) and return the affected row count. */
|
|
6
|
+
execute(sql: string, params?: unknown[]): Promise<number>;
|
|
7
|
+
/** Execute a query and return the first column of the first row, or null. */
|
|
8
|
+
fetchval<T = unknown>(sql: string, params?: unknown[]): Promise<T | null>;
|
|
9
|
+
/** Begin a transaction, returning a transport scoped to that transaction. */
|
|
10
|
+
beginTransaction(isolationLevel?: IsolationLevel): Promise<TransactionTransport>;
|
|
11
|
+
/** Close the transport and release resources. */
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
/** Verify the server is reachable. */
|
|
14
|
+
ping(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
/** A transport that lives inside a transaction and can commit / rollback. */
|
|
17
|
+
export interface TransactionTransport extends Transport {
|
|
18
|
+
commit(): Promise<void>;
|
|
19
|
+
rollback(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/** Rows returned from a query. */
|
|
22
|
+
export interface QueryResult<T> {
|
|
23
|
+
rows: T[];
|
|
24
|
+
rowCount: number;
|
|
25
|
+
}
|
|
26
|
+
/** SQL transaction isolation levels. */
|
|
27
|
+
export type IsolationLevel = 'read_committed' | 'repeatable_read' | 'serializable';
|
|
28
|
+
/** Feature flags detected from the connected database on connect. */
|
|
29
|
+
export interface NucleusFeatures {
|
|
30
|
+
isNucleus: boolean;
|
|
31
|
+
hasKV: boolean;
|
|
32
|
+
hasVector: boolean;
|
|
33
|
+
hasTimeSeries: boolean;
|
|
34
|
+
hasDocument: boolean;
|
|
35
|
+
hasGraph: boolean;
|
|
36
|
+
hasFTS: boolean;
|
|
37
|
+
hasGeo: boolean;
|
|
38
|
+
hasBlob: boolean;
|
|
39
|
+
hasStreams: boolean;
|
|
40
|
+
hasColumnar: boolean;
|
|
41
|
+
hasDatalog: boolean;
|
|
42
|
+
hasCDC: boolean;
|
|
43
|
+
hasPubSub: boolean;
|
|
44
|
+
version: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Plugin interface for the `.use()` composition pattern.
|
|
48
|
+
*
|
|
49
|
+
* `T` is the shape that gets merged into the client when the plugin is used.
|
|
50
|
+
* For example `NucleusPlugin<{ sql: SQLModel }>` adds a `sql` property.
|
|
51
|
+
*/
|
|
52
|
+
export interface NucleusPlugin<T> {
|
|
53
|
+
/** Human-readable plugin name (used for diagnostics). */
|
|
54
|
+
name: string;
|
|
55
|
+
/** Called once when `.connect()` resolves. Must return the object to merge. */
|
|
56
|
+
init(transport: Transport, features: NucleusFeatures): T;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAChF,MAAM,WAAW,SAAS;IACxB,iDAAiD;IACjD,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,4FAA4F;IAC5F,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1D,6EAA6E;IAC7E,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE1E,6EAA6E;IAC7E,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEjF,iDAAiD;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,sCAAsC;IACtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,6EAA6E;AAC7E,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,kCAAkC;AAClC,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAEnF,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAG,CAAC,CAAC;CAC1D"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { NucleusPlugin } from '../types.js';
|
|
2
|
+
export type DistanceMetric = 'cosine' | 'l2' | 'inner';
|
|
3
|
+
export interface VectorSearchResult<T = Record<string, unknown>> {
|
|
4
|
+
item: T;
|
|
5
|
+
score: number;
|
|
6
|
+
distance: number;
|
|
7
|
+
}
|
|
8
|
+
export interface VectorSearchOptions {
|
|
9
|
+
/** Maximum number of results (default 10). */
|
|
10
|
+
limit?: number;
|
|
11
|
+
/** Distance metric (default `'cosine'`). */
|
|
12
|
+
metric?: DistanceMetric;
|
|
13
|
+
/** Metadata key/value filters. */
|
|
14
|
+
filter?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export interface VectorModel {
|
|
17
|
+
/** Create a collection (table) with a VECTOR column and index. */
|
|
18
|
+
createCollection(name: string, dimension: number, metric?: DistanceMetric): Promise<void>;
|
|
19
|
+
/** Insert a vector with metadata into a collection. */
|
|
20
|
+
insert(collection: string, id: string, vector: number[], metadata?: Record<string, unknown>): Promise<void>;
|
|
21
|
+
/** Delete a vector by ID from a collection. */
|
|
22
|
+
delete(collection: string, id: string): Promise<void>;
|
|
23
|
+
/** Perform a vector similarity search. */
|
|
24
|
+
search(collection: string, query: number[], opts?: VectorSearchOptions): Promise<VectorSearchResult[]>;
|
|
25
|
+
/** Return the dimensionality of a vector. */
|
|
26
|
+
dims(vector: number[]): Promise<number>;
|
|
27
|
+
/** Compute the distance between two vectors. */
|
|
28
|
+
distance(a: number[], b: number[], metric?: DistanceMetric): Promise<number>;
|
|
29
|
+
}
|
|
30
|
+
/** Plugin: adds `.vector` to the client. */
|
|
31
|
+
export declare const withVector: NucleusPlugin<{
|
|
32
|
+
vector: VectorModel;
|
|
33
|
+
}>;
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vector/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,aAAa,EAAmB,MAAM,aAAa,CAAC;AAO7E,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAMD,MAAM,WAAW,WAAW;IAC1B,kEAAkE;IAClE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1F,uDAAuD;IACvD,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5G,+CAA+C;IAC/C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,0CAA0C;IAC1C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEvG,6CAA6C;IAC7C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC,gDAAgD;IAChD,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9E;AAkID,4CAA4C;AAC5C,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAK7D,CAAC"}
|