@edge-base/core 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context.d.ts +36 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +60 -0
- package/dist/context.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -0
- package/dist/field-ops.d.ts +43 -0
- package/dist/field-ops.d.ts.map +1 -0
- package/dist/field-ops.js +61 -0
- package/dist/field-ops.js.map +1 -0
- package/dist/functions.d.ts +50 -0
- package/dist/functions.d.ts.map +1 -0
- package/dist/functions.js +56 -0
- package/dist/functions.js.map +1 -0
- package/dist/generated/api-core.d.ts +503 -0
- package/dist/generated/api-core.d.ts.map +1 -0
- package/dist/generated/api-core.js +496 -0
- package/dist/generated/api-core.js.map +1 -0
- package/dist/generated/client-wrappers.d.ts +120 -0
- package/dist/generated/client-wrappers.d.ts.map +1 -0
- package/dist/generated/client-wrappers.js +219 -0
- package/dist/generated/client-wrappers.js.map +1 -0
- package/dist/http.d.ts +57 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +198 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/mime.d.ts +15 -0
- package/dist/mime.d.ts.map +1 -0
- package/dist/mime.js +84 -0
- package/dist/mime.js.map +1 -0
- package/dist/storage.d.ts +246 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +460 -0
- package/dist/storage.js.map +1 -0
- package/dist/table.d.ts +322 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +734 -0
- package/dist/table.js.map +1 -0
- package/dist/transport-adapter.d.ts +37 -0
- package/dist/transport-adapter.d.ts.map +1 -0
- package/dist/transport-adapter.js +70 -0
- package/dist/transport-adapter.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +49 -0
package/dist/table.d.ts
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection client with query builder and CRUD operations
|
|
3
|
+
*: filter tuple format
|
|
4
|
+
*: OR filter (.or() chaining)
|
|
5
|
+
*: increment, deleteField
|
|
6
|
+
*: upsert
|
|
7
|
+
*: count
|
|
8
|
+
*: batch-by-filter
|
|
9
|
+
*: batch operations
|
|
10
|
+
* #136: /api/db/{namespace}/tables/{name} URL scheme
|
|
11
|
+
*
|
|
12
|
+
* All HTTP calls delegate to Generated Core (api-core.ts).
|
|
13
|
+
* No hardcoded API paths — the core is the single source of truth.
|
|
14
|
+
*/
|
|
15
|
+
import type { HttpClient } from './http.js';
|
|
16
|
+
import { type GeneratedDbApi } from './generated/api-core.js';
|
|
17
|
+
import { EdgeBaseError } from './errors.js';
|
|
18
|
+
import type { IDatabaseLiveSubscriber, IDbChange, FilterMatchFn } from './types.js';
|
|
19
|
+
/** Filter tuple: [field, operator, value] */
|
|
20
|
+
export type FilterTuple = [string, string, unknown];
|
|
21
|
+
/**
|
|
22
|
+
* Query result — unified type for both offset and cursor pagination.
|
|
23
|
+
*: SDK ListResult unification + cursor pagination support.
|
|
24
|
+
*
|
|
25
|
+
* Offset mode (default): total/page/perPage are populated, hasMore/cursor are null.
|
|
26
|
+
* Cursor mode (.after/.before): hasMore/cursor are populated, total/page/perPage are null.
|
|
27
|
+
* Rules-filtered mode: total is null, hasMore/cursor are populated.
|
|
28
|
+
*/
|
|
29
|
+
export interface ListResult<T> {
|
|
30
|
+
items: T[];
|
|
31
|
+
total: number | null;
|
|
32
|
+
page: number | null;
|
|
33
|
+
perPage: number | null;
|
|
34
|
+
hasMore: boolean | null;
|
|
35
|
+
cursor: string | null;
|
|
36
|
+
}
|
|
37
|
+
/** Upsert result */
|
|
38
|
+
export interface UpsertResult<T> {
|
|
39
|
+
item: T;
|
|
40
|
+
action: 'inserted' | 'updated';
|
|
41
|
+
}
|
|
42
|
+
/** Batch-by-filter result */
|
|
43
|
+
export interface BatchByFilterResult {
|
|
44
|
+
totalProcessed: number;
|
|
45
|
+
totalSucceeded: number;
|
|
46
|
+
errors: Array<{
|
|
47
|
+
chunkIndex: number;
|
|
48
|
+
chunkSize: number;
|
|
49
|
+
error: EdgeBaseError;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Document reference for single-record operations.
|
|
54
|
+
* Created via `client.db('shared').table('posts').doc('post-1')`
|
|
55
|
+
*/
|
|
56
|
+
export declare class DocRef<T = Record<string, unknown>> {
|
|
57
|
+
private core;
|
|
58
|
+
private namespace;
|
|
59
|
+
private instanceId;
|
|
60
|
+
private tableName;
|
|
61
|
+
private id;
|
|
62
|
+
private databaseLiveClient?;
|
|
63
|
+
private filterMatchFn?;
|
|
64
|
+
constructor(core: GeneratedDbApi, namespace: string, instanceId: string | undefined, tableName: string, id: string, databaseLiveClient?: IDatabaseLiveSubscriber | undefined, filterMatchFn?: FilterMatchFn | undefined);
|
|
65
|
+
/** Get a single record */
|
|
66
|
+
get(): Promise<T>;
|
|
67
|
+
/** Update a record (supports increment, deleteField) */
|
|
68
|
+
update(data: Partial<T>): Promise<T>;
|
|
69
|
+
/** Delete a record */
|
|
70
|
+
delete(): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Subscribe to database-live changes for this document.
|
|
73
|
+
* Returns an unsubscribe function.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* const unsub = client.db('shared').table('posts').doc('post-1').onSnapshot((post) => {
|
|
77
|
+
* console.log('Post updated:', post);
|
|
78
|
+
* });
|
|
79
|
+
*/
|
|
80
|
+
onSnapshot(callback: (data: T | null, change: IDbChange<T>) => void): () => void;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Collection reference with query builder (immutable chaining).
|
|
84
|
+
* Created via `client.db('shared').table('posts')`
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* const result = await client.db('shared').table('posts')
|
|
88
|
+
* .where('status', '==', 'published')
|
|
89
|
+
* .orderBy('createdAt', 'desc')
|
|
90
|
+
* .limit(20)
|
|
91
|
+
* .getList();
|
|
92
|
+
*/
|
|
93
|
+
export declare class TableRef<T = Record<string, unknown>> {
|
|
94
|
+
private core;
|
|
95
|
+
/** Table name within the DB block */
|
|
96
|
+
private name;
|
|
97
|
+
private databaseLiveClient?;
|
|
98
|
+
private filterMatchFn?;
|
|
99
|
+
/** DB namespace: 'shared' | 'workspace' | 'user' | ... (§2) */
|
|
100
|
+
private namespace;
|
|
101
|
+
/** DB instance ID for dynamic DOs (e.g. 'ws-456'). Omit for static DBs. */
|
|
102
|
+
private instanceId?;
|
|
103
|
+
/**
|
|
104
|
+
* Raw HttpClient — only used for sql() which is admin-only and not in client core.
|
|
105
|
+
* TODO: remove once admin core is wired.
|
|
106
|
+
*/
|
|
107
|
+
private _httpClient?;
|
|
108
|
+
private filters;
|
|
109
|
+
private orFilters;
|
|
110
|
+
private sorts;
|
|
111
|
+
private limitValue?;
|
|
112
|
+
private offsetValue?;
|
|
113
|
+
private pageValue?;
|
|
114
|
+
private searchQuery?;
|
|
115
|
+
private afterCursor?;
|
|
116
|
+
private beforeCursor?;
|
|
117
|
+
constructor(core: GeneratedDbApi,
|
|
118
|
+
/** Table name within the DB block */
|
|
119
|
+
name: string, databaseLiveClient?: IDatabaseLiveSubscriber | undefined, filterMatchFn?: FilterMatchFn | undefined,
|
|
120
|
+
/** DB namespace: 'shared' | 'workspace' | 'user' | ... (§2) */
|
|
121
|
+
namespace?: string,
|
|
122
|
+
/** DB instance ID for dynamic DOs (e.g. 'ws-456'). Omit for static DBs. */
|
|
123
|
+
instanceId?: string | undefined,
|
|
124
|
+
/**
|
|
125
|
+
* Raw HttpClient — only used for sql() which is admin-only and not in client core.
|
|
126
|
+
* TODO: remove once admin core is wired.
|
|
127
|
+
*/
|
|
128
|
+
_httpClient?: HttpClient | undefined);
|
|
129
|
+
/** Create a clone with current state (for immutable chaining) */
|
|
130
|
+
private clone;
|
|
131
|
+
/** Add a filter condition */
|
|
132
|
+
where(field: string, operator: string, value: unknown): TableRef<T>;
|
|
133
|
+
/**
|
|
134
|
+
* Add OR conditions.
|
|
135
|
+
* Conditions inside the builder are joined with OR.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* client.db('shared').table('posts')
|
|
139
|
+
* .where('createdAt', '>', '2025-01-01') // AND
|
|
140
|
+
* .or(q => q.where('status', '==', 'draft').where('status', '==', 'archived')) // OR
|
|
141
|
+
* .getList()
|
|
142
|
+
*/
|
|
143
|
+
or(builder: (q: OrBuilder) => OrBuilder): TableRef<T>;
|
|
144
|
+
/** Add sort order (supports multiple — chained calls accumulate) */
|
|
145
|
+
orderBy(field: string, direction?: 'asc' | 'desc'): TableRef<T>;
|
|
146
|
+
/** Set result limit */
|
|
147
|
+
limit(n: number): TableRef<T>;
|
|
148
|
+
/** Set result offset */
|
|
149
|
+
offset(n: number): TableRef<T>;
|
|
150
|
+
/** Set page number for offset pagination (1-based) */
|
|
151
|
+
page(n: number): TableRef<T>;
|
|
152
|
+
/** Set full-text search query */
|
|
153
|
+
search(query: string): TableRef<T>;
|
|
154
|
+
/**
|
|
155
|
+
* Set cursor for forward pagination.
|
|
156
|
+
* Fetches records with id > cursor. Mutually exclusive with page()/offset().
|
|
157
|
+
*/
|
|
158
|
+
after(cursor: string): TableRef<T>;
|
|
159
|
+
/**
|
|
160
|
+
* Set cursor for backward pagination.
|
|
161
|
+
* Fetches records with id < cursor. Mutually exclusive with page()/offset().
|
|
162
|
+
*/
|
|
163
|
+
before(cursor: string): TableRef<T>;
|
|
164
|
+
/** Build query parameters from current state */
|
|
165
|
+
private buildQueryParams;
|
|
166
|
+
/** Get a document reference for single-record operations */
|
|
167
|
+
doc(id: string): DocRef<T>;
|
|
168
|
+
/**
|
|
169
|
+
* List records with filters, sorting, and pagination.
|
|
170
|
+
* Parses server response into unified ListResult with both offset and cursor fields.
|
|
171
|
+
*/
|
|
172
|
+
getList(): Promise<ListResult<T>>;
|
|
173
|
+
/** Alias for getList() to match existing docs and SDK usage. */
|
|
174
|
+
get(): Promise<ListResult<T>>;
|
|
175
|
+
/** Get a single record by ID */
|
|
176
|
+
getOne(id: string): Promise<T>;
|
|
177
|
+
/**
|
|
178
|
+
* Get the first record matching the current query conditions.
|
|
179
|
+
* Returns null if no records match.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* const user = await client.db('shared').table('users')
|
|
183
|
+
* .where('email', '==', 'june@example.com')
|
|
184
|
+
* .getFirst();
|
|
185
|
+
*/
|
|
186
|
+
getFirst(): Promise<T | null>;
|
|
187
|
+
/** Insert a new record */
|
|
188
|
+
insert(data: Partial<T>): Promise<T>;
|
|
189
|
+
/** Update a record by ID (supports increment, deleteField) */
|
|
190
|
+
update(id: string, data: Partial<T>): Promise<T>;
|
|
191
|
+
/** Delete a record by ID */
|
|
192
|
+
delete(id: string): Promise<void>;
|
|
193
|
+
/** Upsert: insert or update */
|
|
194
|
+
upsert(data: Partial<T>, options?: {
|
|
195
|
+
conflictTarget?: string;
|
|
196
|
+
}): Promise<T & {
|
|
197
|
+
action: 'inserted' | 'updated';
|
|
198
|
+
}>;
|
|
199
|
+
/** Batch upsert */
|
|
200
|
+
upsertMany(items: Array<Partial<T>>, options?: {
|
|
201
|
+
conflictTarget?: string;
|
|
202
|
+
}): Promise<T[]>;
|
|
203
|
+
/** Count records matching filters */
|
|
204
|
+
count(): Promise<number>;
|
|
205
|
+
/**
|
|
206
|
+
* Batch insert.
|
|
207
|
+
* Auto-chunks into 500-item batches.
|
|
208
|
+
* Each chunk is an independent transaction — partial failure possible across chunks.
|
|
209
|
+
*/
|
|
210
|
+
insertMany(items: Array<Partial<T>>): Promise<T[]>;
|
|
211
|
+
/**
|
|
212
|
+
* Batch update matching records.
|
|
213
|
+
* Processes 500 records per call, max 100 iterations.
|
|
214
|
+
*/
|
|
215
|
+
updateMany(data: Partial<T>): Promise<BatchByFilterResult>;
|
|
216
|
+
/**
|
|
217
|
+
* Batch delete matching records.
|
|
218
|
+
* Processes 500 records per call, max 100 iterations.
|
|
219
|
+
*/
|
|
220
|
+
deleteMany(): Promise<BatchByFilterResult>;
|
|
221
|
+
/** Internal: batch-by-filter calls */
|
|
222
|
+
private batchByFilter;
|
|
223
|
+
/**
|
|
224
|
+
* Subscribe to table changes via database-live.
|
|
225
|
+
* By default, client-side filtering is applied for where() conditions.
|
|
226
|
+
* With `{ serverFilter: true }`, filters are evaluated server-side for bandwidth savings.
|
|
227
|
+
* Returns an unsubscribe function.
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* // Client-side filtering (default)
|
|
231
|
+
* const unsub = client.db('shared').table('posts')
|
|
232
|
+
* .where('status', '==', 'published')
|
|
233
|
+
* .onSnapshot((snapshot) => {
|
|
234
|
+
* console.log('Updated posts:', snapshot.items);
|
|
235
|
+
* });
|
|
236
|
+
*/
|
|
237
|
+
onSnapshot(callback: (snapshot: {
|
|
238
|
+
items: T[];
|
|
239
|
+
changes: {
|
|
240
|
+
added: T[];
|
|
241
|
+
modified: T[];
|
|
242
|
+
removed: T[];
|
|
243
|
+
};
|
|
244
|
+
}) => void, options?: {
|
|
245
|
+
serverFilter?: boolean;
|
|
246
|
+
}): () => void;
|
|
247
|
+
/**
|
|
248
|
+
* Execute raw SQL on this table's DO.
|
|
249
|
+
* Tagged template — interpolated values are automatically extracted as bind params,
|
|
250
|
+
* preventing SQL injection.
|
|
251
|
+
*
|
|
252
|
+
* NOTE: Admin-only (/api/sql). Uses raw HttpClient since this endpoint is
|
|
253
|
+
* in the admin core, not the client core. Requires Service Key auth.
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* // In App Functions or server-side code
|
|
257
|
+
* const results = await context.admin.db('shared').table('posts').sql`
|
|
258
|
+
* SELECT p.*, COUNT(c.id) as commentCount
|
|
259
|
+
* FROM posts p LEFT JOIN comments c ON c.postId = p.id
|
|
260
|
+
* WHERE p.status = ${'published'}
|
|
261
|
+
* GROUP BY p.id
|
|
262
|
+
* `;
|
|
263
|
+
*/
|
|
264
|
+
sql(strings: TemplateStringsArray, ...values: unknown[]): Promise<unknown[]>;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* DB block reference. Returned by `client.db(namespace, id?)`.
|
|
268
|
+
* Provides `.table(name)` to get a TableRef for a specific table.
|
|
269
|
+
*
|
|
270
|
+
* @example
|
|
271
|
+
* // Static shared DB
|
|
272
|
+
* const postsRef = client.db('shared').table('posts');
|
|
273
|
+
*
|
|
274
|
+
* // Dynamic workspace DB
|
|
275
|
+
* const docsRef = client.db('workspace', 'ws-456').table('documents');
|
|
276
|
+
*/
|
|
277
|
+
export declare class DbRef {
|
|
278
|
+
private core;
|
|
279
|
+
/** DB namespace: 'shared' | 'workspace' | 'user' | ... */
|
|
280
|
+
private namespace;
|
|
281
|
+
/** DB instance ID for dynamic DOs (e.g. 'ws-456'). Omit for static DBs. */
|
|
282
|
+
private instanceId?;
|
|
283
|
+
private databaseLiveClient?;
|
|
284
|
+
private filterMatchFn?;
|
|
285
|
+
/**
|
|
286
|
+
* Raw HttpClient — only passed through to TableRef for sql().
|
|
287
|
+
* TODO: remove once admin core is wired.
|
|
288
|
+
*/
|
|
289
|
+
private _httpClient?;
|
|
290
|
+
constructor(core: GeneratedDbApi,
|
|
291
|
+
/** DB namespace: 'shared' | 'workspace' | 'user' | ... */
|
|
292
|
+
namespace: string,
|
|
293
|
+
/** DB instance ID for dynamic DOs (e.g. 'ws-456'). Omit for static DBs. */
|
|
294
|
+
instanceId?: string | undefined, databaseLiveClient?: IDatabaseLiveSubscriber | undefined, filterMatchFn?: FilterMatchFn | undefined,
|
|
295
|
+
/**
|
|
296
|
+
* Raw HttpClient — only passed through to TableRef for sql().
|
|
297
|
+
* TODO: remove once admin core is wired.
|
|
298
|
+
*/
|
|
299
|
+
_httpClient?: HttpClient | undefined);
|
|
300
|
+
/**
|
|
301
|
+
* Select a table within this DB block.
|
|
302
|
+
* Returns a TableRef configured with the correct namespace/instanceId.
|
|
303
|
+
*
|
|
304
|
+
* @param name — Table name (as defined in config.databases[namespace].tables)
|
|
305
|
+
*/
|
|
306
|
+
table<T = Record<string, unknown>>(name: string): TableRef<T>;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Builder for OR conditions.
|
|
310
|
+
* Used with .or() method on TableRef.
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* client.db('shared').table('posts')
|
|
314
|
+
* .or(q => q.where('status', '==', 'draft').where('authorId', '==', 'user-123'))
|
|
315
|
+
* .getList()
|
|
316
|
+
*/
|
|
317
|
+
export declare class OrBuilder {
|
|
318
|
+
private filters;
|
|
319
|
+
where(field: string, operator: string, value: unknown): OrBuilder;
|
|
320
|
+
getFilters(): FilterTuple[];
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|