@svarabase/js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +282 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/session.d.ts +42 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +65 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/client.d.ts +38 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +41 -0
- package/dist/client.js.map +1 -0
- package/dist/db/filterBuilder.d.ts +84 -0
- package/dist/db/filterBuilder.d.ts.map +1 -0
- package/dist/db/filterBuilder.js +227 -0
- package/dist/db/filterBuilder.js.map +1 -0
- package/dist/db/index.d.ts +42 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +67 -0
- package/dist/db/index.js.map +1 -0
- package/dist/esm/auth/index.js +277 -0
- package/dist/esm/auth/session.js +60 -0
- package/dist/esm/client.js +36 -0
- package/dist/esm/db/filterBuilder.js +222 -0
- package/dist/esm/db/index.js +61 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/realtime/index.js +23 -0
- package/dist/esm/storage/index.js +144 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/realtime/index.d.ts +14 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +29 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/storage/index.d.ts +74 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +149 -0
- package/dist/storage/index.js.map +1 -0
- package/package.json +46 -0
- package/src/auth/index.ts +325 -0
- package/src/auth/session.ts +94 -0
- package/src/client.ts +66 -0
- package/src/db/filterBuilder.ts +302 -0
- package/src/db/index.ts +86 -0
- package/src/index.ts +22 -0
- package/src/realtime/index.ts +38 -0
- package/src/storage/index.ts +174 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SvarabaseClient = void 0;
|
|
4
|
+
const auth_1 = require("./auth");
|
|
5
|
+
const db_1 = require("./db");
|
|
6
|
+
const storage_1 = require("./storage");
|
|
7
|
+
const realtime_1 = require("./realtime");
|
|
8
|
+
class SvarabaseClient {
|
|
9
|
+
constructor(url, key, options) {
|
|
10
|
+
this.url = url.replace(/\/$/, '');
|
|
11
|
+
this.key = key;
|
|
12
|
+
const getAuthHeader = () => {
|
|
13
|
+
const session = this.auth['sessionManager']?.getSession?.();
|
|
14
|
+
if (session?.access_token)
|
|
15
|
+
return `Bearer ${session.access_token}`;
|
|
16
|
+
return `Bearer ${this.key}`;
|
|
17
|
+
};
|
|
18
|
+
this.auth = new auth_1.SvarabaseAuthClient(this.url, this.key, {
|
|
19
|
+
autoRefreshToken: options?.auth?.autoRefreshToken,
|
|
20
|
+
persistSession: options?.auth?.persistSession,
|
|
21
|
+
storageKey: options?.auth?.storageKey,
|
|
22
|
+
});
|
|
23
|
+
this._queryBuilder = new db_1.SvarabaseQueryBuilder(this.url, this.key, getAuthHeader);
|
|
24
|
+
this.storage = new storage_1.SvarabaseStorageClient(this.url, this.key, getAuthHeader);
|
|
25
|
+
this.realtime = new realtime_1.SvarabaseRealtimeClient();
|
|
26
|
+
}
|
|
27
|
+
from(table) {
|
|
28
|
+
return this._queryBuilder.from(table);
|
|
29
|
+
}
|
|
30
|
+
rpc(functionName, params, options) {
|
|
31
|
+
return this._queryBuilder.rpc(functionName, params ?? {}, options);
|
|
32
|
+
}
|
|
33
|
+
channel(id) {
|
|
34
|
+
return this.realtime.channel(id);
|
|
35
|
+
}
|
|
36
|
+
removeChannel(channel) {
|
|
37
|
+
return this.realtime.removeChannel(channel);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.SvarabaseClient = SvarabaseClient;
|
|
41
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAC7C,6BAAyD;AACzD,uCAAmD;AACnD,yCAAqD;AAgBrD,MAAa,eAAe;IAU1B,YAAY,GAAW,EAAE,GAAW,EAAE,OAAgC;QACpE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;YAC5D,IAAI,OAAO,EAAE,YAAY;gBAAE,OAAO,UAAU,OAAO,CAAC,YAAY,EAAE,CAAC;YACnE,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,0BAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;YACtD,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB;YACjD,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc;YAC7C,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU;SACtC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,IAAI,0BAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAsB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC7E,IAAI,CAAC,QAAQ,GAAG,IAAI,kCAAuB,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,CAA8B,KAAa;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAI,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAc,YAAoB,EAAE,MAAgC,EAAE,OAA6C;QACpH,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAI,YAAY,EAAE,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,aAAa,CAAC,OAAuD;QACnE,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AA9CD,0CA8CC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export type FilterOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'is' | 'in' | 'cs' | 'cd' | 'not';
|
|
2
|
+
export interface QueryState {
|
|
3
|
+
table: string;
|
|
4
|
+
selectCols: string;
|
|
5
|
+
filters: Array<{
|
|
6
|
+
key: string;
|
|
7
|
+
value: string;
|
|
8
|
+
}>;
|
|
9
|
+
orderByStr: string | null;
|
|
10
|
+
limitVal: number | null;
|
|
11
|
+
offsetVal: number | null;
|
|
12
|
+
countMode: 'exact' | null;
|
|
13
|
+
isHead: boolean;
|
|
14
|
+
isSingle: boolean;
|
|
15
|
+
isMaybeSingle: boolean;
|
|
16
|
+
method: 'GET' | 'POST' | 'PATCH' | 'DELETE';
|
|
17
|
+
body?: unknown;
|
|
18
|
+
isUpsert: boolean;
|
|
19
|
+
onConflict?: string;
|
|
20
|
+
}
|
|
21
|
+
export type PostgrestSingleResponse<T> = {
|
|
22
|
+
data: T | null;
|
|
23
|
+
error: {
|
|
24
|
+
message: string;
|
|
25
|
+
code: string;
|
|
26
|
+
details: string;
|
|
27
|
+
hint: string;
|
|
28
|
+
} | null;
|
|
29
|
+
count: number | null;
|
|
30
|
+
status: number;
|
|
31
|
+
statusText: string;
|
|
32
|
+
};
|
|
33
|
+
export type PostgrestResponse<T> = {
|
|
34
|
+
data: T[] | null;
|
|
35
|
+
error: {
|
|
36
|
+
message: string;
|
|
37
|
+
code: string;
|
|
38
|
+
details: string;
|
|
39
|
+
hint: string;
|
|
40
|
+
} | null;
|
|
41
|
+
count: number | null;
|
|
42
|
+
status: number;
|
|
43
|
+
statusText: string;
|
|
44
|
+
};
|
|
45
|
+
export declare class FilterBuilder<T = unknown> {
|
|
46
|
+
protected state: QueryState;
|
|
47
|
+
protected url: string;
|
|
48
|
+
protected key: string;
|
|
49
|
+
protected getAuthHeader: () => string;
|
|
50
|
+
constructor(url: string, key: string, getAuthHeader: () => string, table: string, method?: 'GET' | 'POST' | 'PATCH' | 'DELETE', body?: unknown, isUpsert?: boolean, onConflict?: string);
|
|
51
|
+
select(cols: string, options?: {
|
|
52
|
+
count?: 'exact';
|
|
53
|
+
head?: boolean;
|
|
54
|
+
}): this;
|
|
55
|
+
eq(column: string, value: unknown): this;
|
|
56
|
+
neq(column: string, value: unknown): this;
|
|
57
|
+
gt(column: string, value: unknown): this;
|
|
58
|
+
gte(column: string, value: unknown): this;
|
|
59
|
+
lt(column: string, value: unknown): this;
|
|
60
|
+
lte(column: string, value: unknown): this;
|
|
61
|
+
like(column: string, pattern: string): this;
|
|
62
|
+
ilike(column: string, pattern: string): this;
|
|
63
|
+
is(column: string, value: boolean | null): this;
|
|
64
|
+
in(column: string, values: unknown[]): this;
|
|
65
|
+
contains(column: string, value: unknown): this;
|
|
66
|
+
not(column: string, operator: string, value: unknown): this;
|
|
67
|
+
or(filters: string, options?: {
|
|
68
|
+
foreignTable?: string;
|
|
69
|
+
}): this;
|
|
70
|
+
order(column: string, options?: {
|
|
71
|
+
ascending?: boolean;
|
|
72
|
+
nullsFirst?: boolean;
|
|
73
|
+
}): this;
|
|
74
|
+
limit(count: number): this;
|
|
75
|
+
range(from: number, to: number): this;
|
|
76
|
+
single(): PromiseLike<PostgrestSingleResponse<T>>;
|
|
77
|
+
maybeSingle(): PromiseLike<PostgrestSingleResponse<T | null>>;
|
|
78
|
+
then<R>(onfulfilled?: ((value: PostgrestResponse<T> | PostgrestSingleResponse<T>) => R) | null, onrejected?: ((reason: unknown) => R) | null): Promise<R>;
|
|
79
|
+
catch<R>(onrejected?: ((reason: unknown) => R) | null): Promise<R | PostgrestResponse<T> | PostgrestSingleResponse<T>>;
|
|
80
|
+
protected buildUrl(): string;
|
|
81
|
+
protected buildHeaders(): Record<string, string>;
|
|
82
|
+
protected _execute(): Promise<PostgrestResponse<T> | PostgrestSingleResponse<T>>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=filterBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterBuilder.d.ts","sourceRoot":"","sources":["../../src/db/filterBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterBuilder = void 0;
|
|
4
|
+
class FilterBuilder {
|
|
5
|
+
constructor(url, key, getAuthHeader, table, method = 'GET', body, isUpsert = false, onConflict) {
|
|
6
|
+
this.url = url;
|
|
7
|
+
this.key = key;
|
|
8
|
+
this.getAuthHeader = getAuthHeader;
|
|
9
|
+
this.state = {
|
|
10
|
+
table,
|
|
11
|
+
selectCols: '*',
|
|
12
|
+
filters: [],
|
|
13
|
+
orderByStr: null,
|
|
14
|
+
limitVal: null,
|
|
15
|
+
offsetVal: null,
|
|
16
|
+
countMode: null,
|
|
17
|
+
isHead: false,
|
|
18
|
+
isSingle: false,
|
|
19
|
+
isMaybeSingle: false,
|
|
20
|
+
method,
|
|
21
|
+
body,
|
|
22
|
+
isUpsert,
|
|
23
|
+
onConflict,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
select(cols, options) {
|
|
27
|
+
this.state.selectCols = cols || '*';
|
|
28
|
+
if (options?.count)
|
|
29
|
+
this.state.countMode = options.count;
|
|
30
|
+
if (options?.head)
|
|
31
|
+
this.state.isHead = true;
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
eq(column, value) {
|
|
35
|
+
this.state.filters.push({ key: column, value: `eq.${value}` });
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
neq(column, value) {
|
|
39
|
+
this.state.filters.push({ key: column, value: `neq.${value}` });
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
gt(column, value) {
|
|
43
|
+
this.state.filters.push({ key: column, value: `gt.${value}` });
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
gte(column, value) {
|
|
47
|
+
this.state.filters.push({ key: column, value: `gte.${value}` });
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
lt(column, value) {
|
|
51
|
+
this.state.filters.push({ key: column, value: `lt.${value}` });
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
lte(column, value) {
|
|
55
|
+
this.state.filters.push({ key: column, value: `lte.${value}` });
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
like(column, pattern) {
|
|
59
|
+
this.state.filters.push({ key: column, value: `like.${pattern}` });
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
ilike(column, pattern) {
|
|
63
|
+
this.state.filters.push({ key: column, value: `ilike.${pattern}` });
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
is(column, value) {
|
|
67
|
+
this.state.filters.push({ key: column, value: `is.${value}` });
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
in(column, values) {
|
|
71
|
+
this.state.filters.push({ key: column, value: `in.(${values.join(',')})` });
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
contains(column, value) {
|
|
75
|
+
this.state.filters.push({ key: column, value: `cs.${JSON.stringify(value)}` });
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
not(column, operator, value) {
|
|
79
|
+
this.state.filters.push({ key: column, value: `not.${operator}.${value}` });
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
or(filters, options) {
|
|
83
|
+
const key = options?.foreignTable ? `${options.foreignTable}.or` : 'or';
|
|
84
|
+
this.state.filters.push({ key, value: `(${filters})` });
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
order(column, options) {
|
|
88
|
+
const dir = options?.ascending === false ? 'desc' : 'asc';
|
|
89
|
+
const nulls = options?.nullsFirst ? '.nullsfirst' : '';
|
|
90
|
+
this.state.orderByStr = (this.state.orderByStr ? this.state.orderByStr + ',' : '') + `${column}.${dir}${nulls}`;
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
limit(count) {
|
|
94
|
+
this.state.limitVal = count;
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
range(from, to) {
|
|
98
|
+
this.state.offsetVal = from;
|
|
99
|
+
this.state.limitVal = to - from + 1;
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
single() {
|
|
103
|
+
this.state.isSingle = true;
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
maybeSingle() {
|
|
107
|
+
this.state.isMaybeSingle = true;
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
then(onfulfilled, onrejected) {
|
|
111
|
+
return this._execute().then(onfulfilled, onrejected);
|
|
112
|
+
}
|
|
113
|
+
catch(onrejected) {
|
|
114
|
+
return this._execute().catch(onrejected);
|
|
115
|
+
}
|
|
116
|
+
buildUrl() {
|
|
117
|
+
const params = new URLSearchParams();
|
|
118
|
+
if (this.state.method === 'GET' || this.state.method === 'DELETE') {
|
|
119
|
+
if (this.state.selectCols && this.state.selectCols !== '*') {
|
|
120
|
+
params.set('select', this.state.selectCols);
|
|
121
|
+
}
|
|
122
|
+
else if (this.state.selectCols) {
|
|
123
|
+
params.set('select', this.state.selectCols);
|
|
124
|
+
}
|
|
125
|
+
for (const { key, value } of this.state.filters) {
|
|
126
|
+
params.set(key, value);
|
|
127
|
+
}
|
|
128
|
+
if (this.state.orderByStr)
|
|
129
|
+
params.set('order', this.state.orderByStr);
|
|
130
|
+
if (this.state.limitVal != null)
|
|
131
|
+
params.set('limit', String(this.state.limitVal));
|
|
132
|
+
if (this.state.offsetVal != null)
|
|
133
|
+
params.set('offset', String(this.state.offsetVal));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// For POST/PATCH, filters go as query params too
|
|
137
|
+
for (const { key, value } of this.state.filters) {
|
|
138
|
+
params.set(key, value);
|
|
139
|
+
}
|
|
140
|
+
if (this.state.isUpsert && this.state.onConflict) {
|
|
141
|
+
params.set('on_conflict', this.state.onConflict);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const qs = params.toString();
|
|
145
|
+
return `${this.url}/rest/v1/${this.state.table}${qs ? '?' + qs : ''}`;
|
|
146
|
+
}
|
|
147
|
+
buildHeaders() {
|
|
148
|
+
const headers = {
|
|
149
|
+
'Content-Type': 'application/json',
|
|
150
|
+
apikey: this.key,
|
|
151
|
+
Authorization: this.getAuthHeader(),
|
|
152
|
+
};
|
|
153
|
+
const prefer = [];
|
|
154
|
+
if (this.state.countMode)
|
|
155
|
+
prefer.push(`count=${this.state.countMode}`);
|
|
156
|
+
if (this.state.isUpsert)
|
|
157
|
+
prefer.push('resolution=merge-duplicates');
|
|
158
|
+
if (prefer.length > 0)
|
|
159
|
+
headers['Prefer'] = prefer.join(',');
|
|
160
|
+
if (this.state.isHead)
|
|
161
|
+
headers['method'] = 'HEAD';
|
|
162
|
+
return headers;
|
|
163
|
+
}
|
|
164
|
+
async _execute() {
|
|
165
|
+
const url = this.buildUrl();
|
|
166
|
+
const headers = this.buildHeaders();
|
|
167
|
+
const init = {
|
|
168
|
+
method: this.state.method,
|
|
169
|
+
headers,
|
|
170
|
+
};
|
|
171
|
+
if (this.state.body !== undefined && (this.state.method === 'POST' || this.state.method === 'PATCH')) {
|
|
172
|
+
init.body = JSON.stringify(this.state.body);
|
|
173
|
+
}
|
|
174
|
+
// Use HEAD for count-only
|
|
175
|
+
if (this.state.isHead) {
|
|
176
|
+
init.method = 'HEAD';
|
|
177
|
+
}
|
|
178
|
+
const res = await fetch(url, init);
|
|
179
|
+
const contentRange = res.headers.get('Content-Range');
|
|
180
|
+
const count = contentRange ? parseInt(contentRange.split('/')[1]) : null;
|
|
181
|
+
if (this.state.isHead) {
|
|
182
|
+
return { data: null, error: null, count, status: res.status, statusText: res.statusText };
|
|
183
|
+
}
|
|
184
|
+
if (!res.ok) {
|
|
185
|
+
const errData = await res.json().catch(() => ({}));
|
|
186
|
+
return {
|
|
187
|
+
data: null,
|
|
188
|
+
error: {
|
|
189
|
+
message: (errData.message ?? errData.error_description ?? 'Query failed'),
|
|
190
|
+
code: String(res.status),
|
|
191
|
+
details: (errData.details ?? ''),
|
|
192
|
+
hint: (errData.hint ?? ''),
|
|
193
|
+
},
|
|
194
|
+
count: null,
|
|
195
|
+
status: res.status,
|
|
196
|
+
statusText: res.statusText,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const raw = await res.json();
|
|
200
|
+
if (this.state.isSingle) {
|
|
201
|
+
if (!raw || (Array.isArray(raw) && raw.length === 0)) {
|
|
202
|
+
return {
|
|
203
|
+
data: null,
|
|
204
|
+
error: { message: 'JSON object requested, multiple (or no) rows returned', code: 'PGRST116', details: '', hint: '' },
|
|
205
|
+
count,
|
|
206
|
+
status: 406,
|
|
207
|
+
statusText: 'Not Acceptable',
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const single = Array.isArray(raw) ? raw[0] : raw;
|
|
211
|
+
return { data: single, error: null, count, status: res.status, statusText: res.statusText };
|
|
212
|
+
}
|
|
213
|
+
if (this.state.isMaybeSingle) {
|
|
214
|
+
const single = Array.isArray(raw) ? (raw[0] ?? null) : raw;
|
|
215
|
+
return { data: single, error: null, count, status: res.status, statusText: res.statusText };
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
data: (Array.isArray(raw) ? raw : [raw]),
|
|
219
|
+
error: null,
|
|
220
|
+
count,
|
|
221
|
+
status: res.status,
|
|
222
|
+
statusText: res.statusText,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.FilterBuilder = FilterBuilder;
|
|
227
|
+
//# sourceMappingURL=filterBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterBuilder.js","sourceRoot":"","sources":["../../src/db/filterBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { FilterBuilder } from './filterBuilder';
|
|
2
|
+
export declare class SvarabaseQueryBuilder {
|
|
3
|
+
private url;
|
|
4
|
+
private key;
|
|
5
|
+
private getAuthHeader;
|
|
6
|
+
constructor(url: string, key: string, getAuthHeader: () => string);
|
|
7
|
+
from<T = Record<string, unknown>>(table: string): TableQuery<T>;
|
|
8
|
+
rpc<T = unknown>(functionName: string, params?: Record<string, unknown>, options?: {
|
|
9
|
+
count?: 'exact';
|
|
10
|
+
head?: boolean;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
data: T | null;
|
|
13
|
+
error: Error | null;
|
|
14
|
+
count?: number | null;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export declare class TableQuery<T> {
|
|
18
|
+
private url;
|
|
19
|
+
private key;
|
|
20
|
+
private getAuthHeader;
|
|
21
|
+
private table;
|
|
22
|
+
constructor(url: string, key: string, getAuthHeader: () => string, table: string);
|
|
23
|
+
select(cols?: string, options?: {
|
|
24
|
+
count?: 'exact';
|
|
25
|
+
head?: boolean;
|
|
26
|
+
}): FilterBuilder<T>;
|
|
27
|
+
insert(values: Partial<T> | Partial<T>[], options?: {
|
|
28
|
+
count?: 'exact';
|
|
29
|
+
}): FilterBuilder<T>;
|
|
30
|
+
upsert(values: Partial<T> | Partial<T>[], options?: {
|
|
31
|
+
onConflict?: string;
|
|
32
|
+
count?: 'exact';
|
|
33
|
+
}): FilterBuilder<T>;
|
|
34
|
+
update(values: Partial<T>, options?: {
|
|
35
|
+
count?: 'exact';
|
|
36
|
+
}): FilterBuilder<T>;
|
|
37
|
+
delete(options?: {
|
|
38
|
+
count?: 'exact';
|
|
39
|
+
}): FilterBuilder<T>;
|
|
40
|
+
}
|
|
41
|
+
export { FilterBuilder };
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,aAAa,CAAe;gBAExB,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,MAAM;IAMjE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM;IAIzC,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CA2B3E;AAED,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,KAAK,CAAS;gBAEV,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,MAAM,EAAE,KAAK,EAAE,MAAM;IAOhF,MAAM,CAAC,IAAI,SAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC,CAAC,CAAC;IAKnF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC,CAAC,CAAC;IAI1F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC,CAAC,CAAC;IAI/G,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC,CAAC,CAAC;IAI3E,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC,CAAC,CAAC;CAGxD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/db/index.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterBuilder = exports.TableQuery = exports.SvarabaseQueryBuilder = void 0;
|
|
4
|
+
const filterBuilder_1 = require("./filterBuilder");
|
|
5
|
+
Object.defineProperty(exports, "FilterBuilder", { enumerable: true, get: function () { return filterBuilder_1.FilterBuilder; } });
|
|
6
|
+
class SvarabaseQueryBuilder {
|
|
7
|
+
constructor(url, key, getAuthHeader) {
|
|
8
|
+
this.url = url;
|
|
9
|
+
this.key = key;
|
|
10
|
+
this.getAuthHeader = getAuthHeader;
|
|
11
|
+
}
|
|
12
|
+
from(table) {
|
|
13
|
+
return new TableQuery(this.url, this.key, this.getAuthHeader, table);
|
|
14
|
+
}
|
|
15
|
+
async rpc(functionName, params = {}, options) {
|
|
16
|
+
try {
|
|
17
|
+
const res = await fetch(`${this.url}/rest/v1/rpc/${functionName}`, {
|
|
18
|
+
method: 'POST',
|
|
19
|
+
headers: {
|
|
20
|
+
'Content-Type': 'application/json',
|
|
21
|
+
apikey: this.key,
|
|
22
|
+
Authorization: this.getAuthHeader(),
|
|
23
|
+
...(options?.count ? { Prefer: `count=${options.count}` } : {}),
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify(params),
|
|
26
|
+
});
|
|
27
|
+
const contentRange = res.headers.get('Content-Range');
|
|
28
|
+
const count = contentRange ? parseInt(contentRange.split('/')[1]) : null;
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
const errData = await res.json().catch(() => ({}));
|
|
31
|
+
return { data: null, error: new Error((errData.message ?? 'RPC failed')), count };
|
|
32
|
+
}
|
|
33
|
+
const data = await res.json();
|
|
34
|
+
return { data, error: null, count };
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
return { data: null, error: e };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.SvarabaseQueryBuilder = SvarabaseQueryBuilder;
|
|
42
|
+
class TableQuery {
|
|
43
|
+
constructor(url, key, getAuthHeader, table) {
|
|
44
|
+
this.url = url;
|
|
45
|
+
this.key = key;
|
|
46
|
+
this.getAuthHeader = getAuthHeader;
|
|
47
|
+
this.table = table;
|
|
48
|
+
}
|
|
49
|
+
select(cols = '*', options) {
|
|
50
|
+
const fb = new filterBuilder_1.FilterBuilder(this.url, this.key, this.getAuthHeader, this.table, 'GET');
|
|
51
|
+
return fb.select(cols, options);
|
|
52
|
+
}
|
|
53
|
+
insert(values, options) {
|
|
54
|
+
return new filterBuilder_1.FilterBuilder(this.url, this.key, this.getAuthHeader, this.table, 'POST', values);
|
|
55
|
+
}
|
|
56
|
+
upsert(values, options) {
|
|
57
|
+
return new filterBuilder_1.FilterBuilder(this.url, this.key, this.getAuthHeader, this.table, 'POST', values, true, options?.onConflict);
|
|
58
|
+
}
|
|
59
|
+
update(values, options) {
|
|
60
|
+
return new filterBuilder_1.FilterBuilder(this.url, this.key, this.getAuthHeader, this.table, 'PATCH', values);
|
|
61
|
+
}
|
|
62
|
+
delete(options) {
|
|
63
|
+
return new filterBuilder_1.FilterBuilder(this.url, this.key, this.getAuthHeader, this.table, 'DELETE');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.TableQuery = TableQuery;
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
|