@ikeboy003/cloudrest-client 0.0.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.
@@ -0,0 +1,20 @@
1
+ import type { AnyPaths, ClientOptions, RowOf, TableName } from "./types.js";
2
+ import { QueryBuilder } from "./query.js";
3
+ import { InsertBuilder, UpdateBuilder, DeleteBuilder } from "./mutation.js";
4
+ import { RpcCaller } from "./rpc.js";
5
+ export declare class CloudRestClient<P extends AnyPaths> {
6
+ private readonly ctx;
7
+ constructor(opts: ClientOptions);
8
+ /** Start a typed read query against `table`. */
9
+ from<T extends TableName<P>>(table: T): QueryBuilder<P, T>;
10
+ /** Insert one row or many rows into `table`. Add `.returning()` to get them back. */
11
+ insert<T extends TableName<P>>(table: T, rows: Partial<RowOf<P, T>> | Partial<RowOf<P, T>>[]): InsertBuilder<P, T>;
12
+ /** Update rows in `table` matching subsequent filters. */
13
+ update<T extends TableName<P>>(table: T, patch: Partial<RowOf<P, T>>): UpdateBuilder<P, T>;
14
+ /** Delete rows in `table` matching subsequent filters. */
15
+ delete<T extends TableName<P>>(table: T): DeleteBuilder<P, T>;
16
+ /** Call a Postgres function via `POST /rpc/<fn>`. Awaitable. */
17
+ rpc<Result = unknown>(fn: string, args?: Record<string, unknown>): RpcCaller<Result>;
18
+ }
19
+ export declare function createClient<P extends AnyPaths>(opts: ClientOptions): CloudRestClient<P>;
20
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,qBAAa,eAAe,CAAC,CAAC,SAAS,QAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;gBAEtB,IAAI,EAAE,aAAa;IAW/B,gDAAgD;IAChD,IAAI,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAI1D,qFAAqF;IACrF,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAClD,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAItB,0DAA0D;IAC1D,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAItB,0DAA0D;IAC1D,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7D,gEAAgE;IAChE,GAAG,CAAC,MAAM,GAAG,OAAO,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,SAAS,CAAC,MAAM,CAAC;CAGrB;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,CAExF"}
package/dist/client.js ADDED
@@ -0,0 +1,40 @@
1
+ import { QueryBuilder } from "./query.js";
2
+ import { InsertBuilder, UpdateBuilder, DeleteBuilder } from "./mutation.js";
3
+ import { RpcCaller } from "./rpc.js";
4
+ export class CloudRestClient {
5
+ ctx;
6
+ constructor(opts) {
7
+ // Trim trailing slash so we can always use `${baseUrl}/table` cleanly.
8
+ const baseUrl = opts.baseUrl.replace(/\/+$/, "");
9
+ this.ctx = {
10
+ baseUrl,
11
+ getToken: opts.getToken,
12
+ fetch: opts.fetch ?? globalThis.fetch.bind(globalThis),
13
+ headers: opts.headers ?? {},
14
+ };
15
+ }
16
+ /** Start a typed read query against `table`. */
17
+ from(table) {
18
+ return new QueryBuilder(this.ctx, table);
19
+ }
20
+ /** Insert one row or many rows into `table`. Add `.returning()` to get them back. */
21
+ insert(table, rows) {
22
+ return new InsertBuilder(this.ctx, table, rows);
23
+ }
24
+ /** Update rows in `table` matching subsequent filters. */
25
+ update(table, patch) {
26
+ return new UpdateBuilder(this.ctx, table, patch);
27
+ }
28
+ /** Delete rows in `table` matching subsequent filters. */
29
+ delete(table) {
30
+ return new DeleteBuilder(this.ctx, table);
31
+ }
32
+ /** Call a Postgres function via `POST /rpc/<fn>`. Awaitable. */
33
+ rpc(fn, args = {}) {
34
+ return new RpcCaller(this.ctx, fn, args);
35
+ }
36
+ }
37
+ export function createClient(opts) {
38
+ return new CloudRestClient(opts);
39
+ }
40
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,OAAO,eAAe;IACT,GAAG,CAAc;IAElC,YAAY,IAAmB;QAC7B,uEAAuE;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,GAAG;YACT,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACtD,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;SAC5B,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAyB,KAAQ;QACnC,OAAO,IAAI,YAAY,CAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,qFAAqF;IACrF,MAAM,CACJ,KAAQ,EACR,IAAmD;QAEnD,OAAO,IAAI,aAAa,CAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,0DAA0D;IAC1D,MAAM,CACJ,KAAQ,EACR,KAA2B;QAE3B,OAAO,IAAI,aAAa,CAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,0DAA0D;IAC1D,MAAM,CAAyB,KAAQ;QACrC,OAAO,IAAI,aAAa,CAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,gEAAgE;IAChE,GAAG,CACD,EAAU,EACV,OAAgC,EAAE;QAElC,OAAO,IAAI,SAAS,CAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAqB,IAAmB;IAClE,OAAO,IAAI,eAAe,CAAI,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare class CloudRestError extends Error {
2
+ status: number;
3
+ statusText: string;
4
+ body?: unknown | undefined;
5
+ constructor(status: number, statusText: string, body?: unknown | undefined);
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IAE9B,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,IAAI,CAAC,EAAE,OAAO;gBAFd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,OAAO,YAAA;CAKxB"}
package/dist/errors.js ADDED
@@ -0,0 +1,13 @@
1
+ export class CloudRestError extends Error {
2
+ status;
3
+ statusText;
4
+ body;
5
+ constructor(status, statusText, body) {
6
+ super(`${status} ${statusText}`);
7
+ this.status = status;
8
+ this.statusText = statusText;
9
+ this.body = body;
10
+ this.name = "CloudRestError";
11
+ }
12
+ }
13
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE9B;IACA;IACA;IAHT,YACS,MAAc,EACd,UAAkB,EAClB,IAAc;QAErB,KAAK,CAAC,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QAJ1B,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAU;QAGrB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ export type IsValue = "null" | "true" | "false" | "unknown";
2
+ export interface FilterEntry {
3
+ column: string;
4
+ expr: string;
5
+ }
6
+ export declare function fEq(column: string, value: unknown): FilterEntry;
7
+ export declare function fNeq(column: string, value: unknown): FilterEntry;
8
+ export declare function fGt(column: string, value: unknown): FilterEntry;
9
+ export declare function fGte(column: string, value: unknown): FilterEntry;
10
+ export declare function fLt(column: string, value: unknown): FilterEntry;
11
+ export declare function fLte(column: string, value: unknown): FilterEntry;
12
+ export declare function fLike(column: string, pattern: string): FilterEntry;
13
+ export declare function fIlike(column: string, pattern: string): FilterEntry;
14
+ export declare function fIn(column: string, values: readonly unknown[]): FilterEntry;
15
+ export declare function fIs(column: string, value: IsValue): FilterEntry;
16
+ export declare function fNot(entry: FilterEntry): FilterEntry;
17
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAE/D;AACD,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAEhE;AACD,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAE/D;AACD,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAEhE;AACD,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAE/D;AACD,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAEhE;AACD,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAElE;AACD,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAEnE;AACD,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,CAE3E;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAE/D;AAGD,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAEpD"}
package/dist/filter.js ADDED
@@ -0,0 +1,42 @@
1
+ // Filter ops — v0 covers the 80% of queries: equality, comparison, set membership,
2
+ // null checks, pattern match. Composite ops (or, and, fts, jsonpath) come later.
3
+ //
4
+ // Each filter contributes one entry to URLSearchParams as `column=op.value`.
5
+ import { serializeValue } from "./serialize.js";
6
+ export function fEq(column, value) {
7
+ return { column, expr: `eq.${serializeValue(value)}` };
8
+ }
9
+ export function fNeq(column, value) {
10
+ return { column, expr: `neq.${serializeValue(value)}` };
11
+ }
12
+ export function fGt(column, value) {
13
+ return { column, expr: `gt.${serializeValue(value)}` };
14
+ }
15
+ export function fGte(column, value) {
16
+ return { column, expr: `gte.${serializeValue(value)}` };
17
+ }
18
+ export function fLt(column, value) {
19
+ return { column, expr: `lt.${serializeValue(value)}` };
20
+ }
21
+ export function fLte(column, value) {
22
+ return { column, expr: `lte.${serializeValue(value)}` };
23
+ }
24
+ export function fLike(column, pattern) {
25
+ return { column, expr: `like.${serializeValue(pattern)}` };
26
+ }
27
+ export function fIlike(column, pattern) {
28
+ return { column, expr: `ilike.${serializeValue(pattern)}` };
29
+ }
30
+ export function fIn(column, values) {
31
+ return { column, expr: `in.${serializeValue(values)}` };
32
+ }
33
+ // `is` is the correct way to check NULL / boolean — `eq.null` is a no-op in SQL.
34
+ export function fIs(column, value) {
35
+ return { column, expr: `is.${value}` };
36
+ }
37
+ // Negate any single-op filter: PostgREST prefixes the operator with `not.`
38
+ // e.g. `column=not.is.null`, `column=not.eq.5`.
39
+ export function fNot(entry) {
40
+ return { column: entry.column, expr: `not.${entry.expr}` };
41
+ }
42
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,iFAAiF;AACjF,EAAE;AACF,6EAA6E;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAShD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAc;IAChD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACzD,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,KAAc;IACjD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC1D,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAc;IAChD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACzD,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,KAAc;IACjD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC1D,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAc;IAChD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACzD,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,KAAc;IACjD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC1D,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,OAAe;IACnD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AAC7D,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,MAAc,EAAE,OAAe;IACpD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,MAA0B;IAC5D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAC1D,CAAC;AACD,iFAAiF;AACjF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAc;IAChD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,CAAC;AACzC,CAAC;AACD,2EAA2E;AAC3E,gDAAgD;AAChD,MAAM,UAAU,IAAI,CAAC,KAAkB;IACrC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { createClient, CloudRestClient } from "./client.js";
2
+ export { CloudRestError } from "./errors.js";
3
+ export { QueryBuilder } from "./query.js";
4
+ export { InsertBuilder, UpdateBuilder, DeleteBuilder } from "./mutation.js";
5
+ export { RpcCaller } from "./rpc.js";
6
+ export type { AnyPaths, ClientOptions, RowOf, TableName, TokenGetter, } from "./types.js";
7
+ export type { OrderOptions } from "./query.js";
8
+ export type { IsValue } from "./filter.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EACV,QAAQ,EACR,aAAa,EACb,KAAK,EACL,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { createClient, CloudRestClient } from "./client.js";
2
+ export { CloudRestError } from "./errors.js";
3
+ export { QueryBuilder } from "./query.js";
4
+ export { InsertBuilder, UpdateBuilder, DeleteBuilder } from "./mutation.js";
5
+ export { RpcCaller } from "./rpc.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { AnyPaths, RowOf, TableName } from "./types.js";
2
+ import { type FilterEntry, type IsValue } from "./filter.js";
3
+ import type { ExecContext } from "./query.js";
4
+ declare class FilterableMutation<Row> {
5
+ protected filters: FilterEntry[];
6
+ eq(col: string, v: unknown): this;
7
+ neq(col: string, v: unknown): this;
8
+ gt(col: string, v: unknown): this;
9
+ gte(col: string, v: unknown): this;
10
+ lt(col: string, v: unknown): this;
11
+ lte(col: string, v: unknown): this;
12
+ like(col: string, pat: string): this;
13
+ ilike(col: string, pat: string): this;
14
+ in(col: string, vals: readonly unknown[]): this;
15
+ is(col: string, v: IsValue): this;
16
+ }
17
+ export declare class InsertBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> implements PromiseLike<Row[]> {
18
+ private readonly ctx;
19
+ private readonly table;
20
+ private rows;
21
+ private returnRows;
22
+ constructor(ctx: ExecContext, table: T, rows: Partial<Row> | Partial<Row>[]);
23
+ /** Return inserted rows (adds Prefer: return=representation). */
24
+ returning(): this;
25
+ then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
26
+ }
27
+ export declare class UpdateBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> extends FilterableMutation<Row> implements PromiseLike<Row[]> {
28
+ private readonly ctx;
29
+ private readonly table;
30
+ private readonly patch;
31
+ private returnRows;
32
+ constructor(ctx: ExecContext, table: T, patch: Partial<Row>);
33
+ returning(): this;
34
+ private url;
35
+ then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
36
+ }
37
+ export declare class DeleteBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> extends FilterableMutation<Row> implements PromiseLike<Row[]> {
38
+ private readonly ctx;
39
+ private readonly table;
40
+ private returnRows;
41
+ constructor(ctx: ExecContext, table: T);
42
+ returning(): this;
43
+ private url;
44
+ then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=mutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ // Mutations: insert / update / delete. PostgREST conventions:
2
+ // - POST /table with array body → insert
3
+ // - PATCH /table?filters → update
4
+ // - DELETE /table?filters → delete
5
+ // - Prefer: return=representation header makes the server return rows.
6
+ import { fEq, fNeq, fGt, fGte, fLt, fLte, fLike, fIlike, fIn, fIs, } from "./filter.js";
7
+ class FilterableMutation {
8
+ filters = [];
9
+ eq(col, v) { this.filters.push(fEq(col, v)); return this; }
10
+ neq(col, v) { this.filters.push(fNeq(col, v)); return this; }
11
+ gt(col, v) { this.filters.push(fGt(col, v)); return this; }
12
+ gte(col, v) { this.filters.push(fGte(col, v)); return this; }
13
+ lt(col, v) { this.filters.push(fLt(col, v)); return this; }
14
+ lte(col, v) { this.filters.push(fLte(col, v)); return this; }
15
+ like(col, pat) { this.filters.push(fLike(col, pat)); return this; }
16
+ ilike(col, pat) { this.filters.push(fIlike(col, pat)); return this; }
17
+ in(col, vals) { this.filters.push(fIn(col, vals)); return this; }
18
+ is(col, v) { this.filters.push(fIs(col, v)); return this; }
19
+ }
20
+ async function send(ctx, method, url, body, returnRepresentation) {
21
+ const headers = {
22
+ Accept: "application/json",
23
+ "Content-Type": "application/json",
24
+ ...ctx.headers,
25
+ };
26
+ if (returnRepresentation)
27
+ headers["Prefer"] = "return=representation";
28
+ const token = await ctx.getToken?.();
29
+ if (token)
30
+ headers["Authorization"] = `Bearer ${token}`;
31
+ const res = await ctx.fetch(url, {
32
+ method,
33
+ headers,
34
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
35
+ });
36
+ if (!res.ok) {
37
+ const errBody = await res.json().catch(() => null);
38
+ const { CloudRestError } = await import("./errors.js");
39
+ throw new CloudRestError(res.status, res.statusText, errBody);
40
+ }
41
+ if (res.status === 204)
42
+ return [];
43
+ return res.json();
44
+ }
45
+ export class InsertBuilder {
46
+ ctx;
47
+ table;
48
+ rows;
49
+ returnRows = false;
50
+ constructor(ctx, table, rows) {
51
+ this.ctx = ctx;
52
+ this.table = table;
53
+ this.rows = Array.isArray(rows) ? rows : [rows];
54
+ }
55
+ /** Return inserted rows (adds Prefer: return=representation). */
56
+ returning() {
57
+ this.returnRows = true;
58
+ return this;
59
+ }
60
+ then(onfulfilled, onrejected) {
61
+ const url = `${this.ctx.baseUrl}${String(this.table)}`;
62
+ return send(this.ctx, "POST", url, this.rows, this.returnRows)
63
+ .then((v) => v)
64
+ .then(onfulfilled, onrejected);
65
+ }
66
+ }
67
+ export class UpdateBuilder extends FilterableMutation {
68
+ ctx;
69
+ table;
70
+ patch;
71
+ returnRows = false;
72
+ constructor(ctx, table, patch) {
73
+ super();
74
+ this.ctx = ctx;
75
+ this.table = table;
76
+ this.patch = patch;
77
+ }
78
+ returning() {
79
+ this.returnRows = true;
80
+ return this;
81
+ }
82
+ url() {
83
+ const params = new URLSearchParams();
84
+ for (const f of this.filters)
85
+ params.append(f.column, f.expr);
86
+ const qs = params.toString();
87
+ return `${this.ctx.baseUrl}${String(this.table)}${qs ? `?${qs}` : ""}`;
88
+ }
89
+ then(onfulfilled, onrejected) {
90
+ return send(this.ctx, "PATCH", this.url(), this.patch, this.returnRows)
91
+ .then((v) => v)
92
+ .then(onfulfilled, onrejected);
93
+ }
94
+ }
95
+ export class DeleteBuilder extends FilterableMutation {
96
+ ctx;
97
+ table;
98
+ returnRows = false;
99
+ constructor(ctx, table) {
100
+ super();
101
+ this.ctx = ctx;
102
+ this.table = table;
103
+ }
104
+ returning() {
105
+ this.returnRows = true;
106
+ return this;
107
+ }
108
+ url() {
109
+ const params = new URLSearchParams();
110
+ for (const f of this.filters)
111
+ params.append(f.column, f.expr);
112
+ const qs = params.toString();
113
+ return `${this.ctx.baseUrl}${String(this.table)}${qs ? `?${qs}` : ""}`;
114
+ }
115
+ then(onfulfilled, onrejected) {
116
+ return send(this.ctx, "DELETE", this.url(), undefined, this.returnRows)
117
+ .then((v) => v)
118
+ .then(onfulfilled, onrejected);
119
+ }
120
+ }
121
+ //# sourceMappingURL=mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation.js","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { AnyPaths, RowOf, TableName } from "./types.js";
2
+ import { type FilterEntry, type IsValue } from "./filter.js";
3
+ import type { CloudRestError } from "./errors.js";
4
+ export interface ExecContext {
5
+ baseUrl: string;
6
+ getToken?: () => string | null | Promise<string | null>;
7
+ fetch: typeof fetch;
8
+ headers: Record<string, string>;
9
+ }
10
+ export interface OrderOptions {
11
+ ascending?: boolean;
12
+ nullsFirst?: boolean;
13
+ }
14
+ export declare class QueryBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> implements PromiseLike<Row[]> {
15
+ private readonly ctx;
16
+ private readonly table;
17
+ private filters;
18
+ private selectExpr?;
19
+ private orderExpr?;
20
+ private limitN?;
21
+ private offsetN?;
22
+ private rangeFrom?;
23
+ private rangeTo?;
24
+ private singleMode;
25
+ constructor(ctx: ExecContext, table: T);
26
+ select(columns: string): this;
27
+ eq(col: string, v: unknown): this;
28
+ neq(col: string, v: unknown): this;
29
+ gt(col: string, v: unknown): this;
30
+ gte(col: string, v: unknown): this;
31
+ lt(col: string, v: unknown): this;
32
+ lte(col: string, v: unknown): this;
33
+ like(col: string, pat: string): this;
34
+ ilike(col: string, pat: string): this;
35
+ in(col: string, vals: readonly unknown[]): this;
36
+ is(col: string, v: IsValue): this;
37
+ notIs(col: string, v: IsValue): this;
38
+ not(entry: FilterEntry): this;
39
+ order(column: string, opts?: OrderOptions): this;
40
+ limit(n: number): this;
41
+ offset(n: number): this;
42
+ range(from: number, to: number): this;
43
+ /**
44
+ * Expect exactly one row. Resolves to `Row` (not `Row[]`).
45
+ * Throws if 0 or >1 rows match.
46
+ */
47
+ single(): SingleQuery<Row>;
48
+ private buildUrl;
49
+ private exec;
50
+ then<TResult1 = Row[], TResult2 = never>(onfulfilled?: ((value: Row[]) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: CloudRestError) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
51
+ catch<TResult = never>(onrejected?: ((reason: CloudRestError) => TResult | PromiseLike<TResult>) | null): Promise<Row[] | TResult>;
52
+ finally(onfinally?: (() => void) | null): Promise<Row[]>;
53
+ }
54
+ export interface SingleQuery<Row> extends PromiseLike<Row> {
55
+ }
56
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/dist/query.js ADDED
@@ -0,0 +1,120 @@
1
+ // Read query builder. Chainable, immutable-ish: each call returns `this` after
2
+ // pushing to internal state. Terminal `then` (PromiseLike) makes the builder
3
+ // awaitable directly:
4
+ //
5
+ // const rows = await db.from("x").select("a,b").eq("a", 1);
6
+ import { fEq, fNeq, fGt, fGte, fLt, fLte, fLike, fIlike, fIn, fIs, fNot, } from "./filter.js";
7
+ export class QueryBuilder {
8
+ ctx;
9
+ table;
10
+ filters = [];
11
+ selectExpr;
12
+ orderExpr;
13
+ limitN;
14
+ offsetN;
15
+ rangeFrom;
16
+ rangeTo;
17
+ singleMode = false;
18
+ constructor(ctx, table) {
19
+ this.ctx = ctx;
20
+ this.table = table;
21
+ }
22
+ // ── projection ──────────────────────────────────────────────────────────
23
+ select(columns) {
24
+ this.selectExpr = columns;
25
+ return this;
26
+ }
27
+ // ── filters ─────────────────────────────────────────────────────────────
28
+ eq(col, v) { this.filters.push(fEq(col, v)); return this; }
29
+ neq(col, v) { this.filters.push(fNeq(col, v)); return this; }
30
+ gt(col, v) { this.filters.push(fGt(col, v)); return this; }
31
+ gte(col, v) { this.filters.push(fGte(col, v)); return this; }
32
+ lt(col, v) { this.filters.push(fLt(col, v)); return this; }
33
+ lte(col, v) { this.filters.push(fLte(col, v)); return this; }
34
+ like(col, pat) { this.filters.push(fLike(col, pat)); return this; }
35
+ ilike(col, pat) { this.filters.push(fIlike(col, pat)); return this; }
36
+ in(col, vals) { this.filters.push(fIn(col, vals)); return this; }
37
+ is(col, v) { this.filters.push(fIs(col, v)); return this; }
38
+ // Negated `is` — e.g. `notIs("col", "null")` → `col=not.is.null`.
39
+ notIs(col, v) { this.filters.push(fNot(fIs(col, v))); return this; }
40
+ // Generic negation: pass the column + a non-negated filter helper output.
41
+ not(entry) { this.filters.push(fNot(entry)); return this; }
42
+ // ── ordering / paging ───────────────────────────────────────────────────
43
+ order(column, opts = {}) {
44
+ const { ascending = true, nullsFirst } = opts;
45
+ const parts = [column, ascending ? "asc" : "desc"];
46
+ if (nullsFirst !== undefined)
47
+ parts.push(nullsFirst ? "nullsfirst" : "nullslast");
48
+ this.orderExpr = (this.orderExpr ? `${this.orderExpr},` : "") + parts.join(".");
49
+ return this;
50
+ }
51
+ limit(n) { this.limitN = n; return this; }
52
+ offset(n) { this.offsetN = n; return this; }
53
+ range(from, to) { this.rangeFrom = from; this.rangeTo = to; return this; }
54
+ // ── result shape ────────────────────────────────────────────────────────
55
+ /**
56
+ * Expect exactly one row. Resolves to `Row` (not `Row[]`).
57
+ * Throws if 0 or >1 rows match.
58
+ */
59
+ single() {
60
+ this.singleMode = true;
61
+ return this;
62
+ }
63
+ // ── build + execute ─────────────────────────────────────────────────────
64
+ buildUrl() {
65
+ const params = new URLSearchParams();
66
+ if (this.selectExpr)
67
+ params.set("select", this.selectExpr);
68
+ for (const f of this.filters)
69
+ params.append(f.column, f.expr);
70
+ if (this.orderExpr)
71
+ params.set("order", this.orderExpr);
72
+ if (this.limitN !== undefined)
73
+ params.set("limit", String(this.limitN));
74
+ if (this.offsetN !== undefined)
75
+ params.set("offset", String(this.offsetN));
76
+ const qs = params.toString();
77
+ return `${this.ctx.baseUrl}${String(this.table)}${qs ? `?${qs}` : ""}`;
78
+ }
79
+ async exec() {
80
+ const url = this.buildUrl();
81
+ const headers = {
82
+ Accept: "application/json",
83
+ ...this.ctx.headers,
84
+ };
85
+ if (this.rangeFrom !== undefined && this.rangeTo !== undefined) {
86
+ headers["Range-Unit"] = "items";
87
+ headers["Range"] = `${this.rangeFrom}-${this.rangeTo}`;
88
+ }
89
+ const token = await this.ctx.getToken?.();
90
+ if (token)
91
+ headers["Authorization"] = `Bearer ${token}`;
92
+ const res = await this.ctx.fetch(url, { method: "GET", headers });
93
+ if (!res.ok) {
94
+ const body = await res.json().catch(() => null);
95
+ const { CloudRestError } = await import("./errors.js");
96
+ throw new CloudRestError(res.status, res.statusText, body);
97
+ }
98
+ const rows = (await res.json());
99
+ if (this.singleMode) {
100
+ if (rows.length !== 1) {
101
+ const { CloudRestError } = await import("./errors.js");
102
+ throw new CloudRestError(rows.length === 0 ? 404 : 409, rows.length === 0 ? "Not Found" : "Conflict", { expected: 1, got: rows.length });
103
+ }
104
+ return rows[0];
105
+ }
106
+ return rows;
107
+ }
108
+ // PromiseLike — `await db.from(...).select(...)` works without `.exec()`.
109
+ then(onfulfilled, onrejected) {
110
+ return this.exec().then(onfulfilled, onrejected);
111
+ }
112
+ // Match Promise surface so `.catch()` / `.finally()` work directly on builders.
113
+ catch(onrejected) {
114
+ return this.exec().catch(onrejected);
115
+ }
116
+ finally(onfinally) {
117
+ return this.exec().finally(onfinally);
118
+ }
119
+ }
120
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { ExecContext } from "./query.js";
2
+ export declare class RpcCaller<Result = unknown> implements PromiseLike<Result> {
3
+ private readonly ctx;
4
+ private readonly fn;
5
+ private readonly args;
6
+ constructor(ctx: ExecContext, fn: string, args?: Record<string, unknown>);
7
+ private exec;
8
+ then<T1 = Result, T2 = never>(onfulfilled?: ((value: Result) => T1 | PromiseLike<T1>) | null, onrejected?: ((reason: unknown) => T2 | PromiseLike<T2>) | null): PromiseLike<T1 | T2>;
9
+ }
10
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,qBAAa,SAAS,CAAC,MAAM,GAAG,OAAO,CAAE,YAAW,WAAW,CAAC,MAAM,CAAC;IAEnE,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,GAAG,EAAE,WAAW,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;YAGvC,IAAI;IA4BlB,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,KAAK,EAC1B,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAC9D,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GAC9D,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;CAGxB"}