@ikeboy003/cloudrest-client 0.1.0 → 0.2.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/client.d.ts CHANGED
@@ -2,6 +2,14 @@ import type { AnyPaths, ClientOptions, RowOf, TableName } from "./types.js";
2
2
  import { QueryBuilder } from "./query.js";
3
3
  import { InsertBuilder, UpdateBuilder, DeleteBuilder } from "./mutation.js";
4
4
  import { RpcCaller } from "./rpc.js";
5
+ export interface CopyOptions {
6
+ /** Target columns, in body order. Required (maps to `?columns=`). */
7
+ columns: string[];
8
+ /** Schema the table lives in (default "public"). */
9
+ schema?: string;
10
+ /** Wire format of `body` (default "csv"). NDJSON is transcoded server-side. */
11
+ format?: "csv" | "ndjson";
12
+ }
5
13
  export declare class CloudRestClient<P extends AnyPaths> {
6
14
  private readonly ctx;
7
15
  constructor(opts: ClientOptions);
@@ -15,6 +23,15 @@ export declare class CloudRestClient<P extends AnyPaths> {
15
23
  delete<T extends TableName<P>>(table: T): DeleteBuilder<P, T>;
16
24
  /** Call a Postgres function via `POST /rpc/<fn>`. Awaitable. */
17
25
  rpc<Result = unknown>(fn: string, args?: Record<string, unknown>): RpcCaller<Result>;
26
+ /**
27
+ * Bulk-ingest via the server's COPY endpoint
28
+ * (`POST /_copy/{schema}/{table}?columns=`). `body` is CSV (with a header row)
29
+ * or NDJSON. Streams straight into `COPY` — far faster than row-by-row
30
+ * inserts for large loads. Resolves to `{ inserted: N }`.
31
+ */
32
+ copy(table: TableName<P>, body: string | Uint8Array, opts: CopyOptions): Promise<{
33
+ inserted: number;
34
+ }>;
18
35
  }
19
36
  export declare function createClient<P extends AnyPaths>(opts: ClientOptions): CloudRestClient<P>;
20
37
  //# sourceMappingURL=client.d.ts.map
@@ -1 +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"}
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,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC3B;AAED,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;IAIpB;;;;;OAKG;IACG,IAAI,CACR,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAyBjC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,CAExF"}
package/dist/client.js CHANGED
@@ -33,6 +33,36 @@ export class CloudRestClient {
33
33
  rpc(fn, args = {}) {
34
34
  return new RpcCaller(this.ctx, fn, args);
35
35
  }
36
+ /**
37
+ * Bulk-ingest via the server's COPY endpoint
38
+ * (`POST /_copy/{schema}/{table}?columns=`). `body` is CSV (with a header row)
39
+ * or NDJSON. Streams straight into `COPY` — far faster than row-by-row
40
+ * inserts for large loads. Resolves to `{ inserted: N }`.
41
+ */
42
+ async copy(table, body, opts) {
43
+ const schema = opts.schema ?? "public";
44
+ const cols = opts.columns.map(encodeURIComponent).join(",");
45
+ const url = `${this.ctx.baseUrl}/_copy/${schema}/${String(table)}?columns=${cols}`;
46
+ const headers = {
47
+ Accept: "application/json",
48
+ "Content-Type": opts.format === "ndjson" ? "application/x-ndjson" : "text/csv",
49
+ ...this.ctx.headers,
50
+ };
51
+ const token = await this.ctx.getToken?.();
52
+ if (token)
53
+ headers["Authorization"] = `Bearer ${token}`;
54
+ const res = await this.ctx.fetch(url, {
55
+ method: "POST",
56
+ headers,
57
+ body: body,
58
+ });
59
+ if (!res.ok) {
60
+ const errBody = await res.json().catch(() => null);
61
+ const { CloudRestError } = await import("./errors.js");
62
+ throw new CloudRestError(res.status, res.statusText, errBody);
63
+ }
64
+ return (await res.json());
65
+ }
36
66
  }
37
67
  export function createClient(opts) {
38
68
  return new CloudRestClient(opts);
@@ -1 +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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/filter.d.ts CHANGED
@@ -1,18 +1,58 @@
1
1
  export type IsValue = "null" | "true" | "false" | "unknown";
2
2
  export interface FilterEntry {
3
+ /** Leaf: the column. Group: "and" | "or". */
3
4
  column: string;
5
+ /** Leaf: "op.value". Group: "(child,child,...)". */
4
6
  expr: string;
7
+ /** True for a logic group (and/or), so child-rendering omits the dot. */
8
+ group?: boolean;
5
9
  }
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;
10
+ export declare const fEq: (c: string, v: unknown) => FilterEntry;
11
+ export declare const fNeq: (c: string, v: unknown) => FilterEntry;
12
+ export declare const fGt: (c: string, v: unknown) => FilterEntry;
13
+ export declare const fGte: (c: string, v: unknown) => FilterEntry;
14
+ export declare const fLt: (c: string, v: unknown) => FilterEntry;
15
+ export declare const fLte: (c: string, v: unknown) => FilterEntry;
16
+ export declare const fLike: (c: string, p: string) => FilterEntry;
17
+ export declare const fIlike: (c: string, p: string) => FilterEntry;
18
+ /** POSIX regex (`~`). */
19
+ export declare const fMatch: (c: string, p: string) => FilterEntry;
20
+ /** Case-insensitive POSIX regex (`~*`). */
21
+ export declare const fImatch: (c: string, p: string) => FilterEntry;
22
+ export declare const fIn: (c: string, vals: readonly unknown[]) => FilterEntry;
23
+ export declare const fIs: (c: string, v: IsValue) => FilterEntry;
24
+ /** `IS DISTINCT FROM` — null-safe inequality. */
25
+ export declare const fIsDistinct: (c: string, v: unknown) => FilterEntry;
26
+ /** `to_tsquery` full-text search. */
27
+ export declare const fFts: (c: string, query: string, config?: string) => FilterEntry;
28
+ /** `plainto_tsquery`. */
29
+ export declare const fPlfts: (c: string, query: string, config?: string) => FilterEntry;
30
+ /** `phraseto_tsquery`. */
31
+ export declare const fPhfts: (c: string, query: string, config?: string) => FilterEntry;
32
+ /** `websearch_to_tsquery`. */
33
+ export declare const fWfts: (c: string, query: string, config?: string) => FilterEntry;
34
+ /** contains `@>` (array/range/jsonb). */
35
+ export declare const fCs: (c: string, v: readonly unknown[]) => FilterEntry;
36
+ /** contained-in `<@`. */
37
+ export declare const fCd: (c: string, v: readonly unknown[]) => FilterEntry;
38
+ /** overlap `&&` (array or range). */
39
+ export declare const fOv: (c: string, v: readonly unknown[] | string) => FilterEntry;
40
+ /** strictly-left-of `<<`. */
41
+ export declare const fSl: (c: string, range: unknown) => FilterEntry;
42
+ /** strictly-right-of `>>`. */
43
+ export declare const fSr: (c: string, range: unknown) => FilterEntry;
44
+ /** does-not-extend-to-the-right-of `&<`. */
45
+ export declare const fNxr: (c: string, range: unknown) => FilterEntry;
46
+ /** does-not-extend-to-the-left-of `&>`. */
47
+ export declare const fNxl: (c: string, range: unknown) => FilterEntry;
48
+ /** adjacent `-|-`. */
49
+ export declare const fAdj: (c: string, range: unknown) => FilterEntry;
50
+ /** Any operator + already-serialized value, e.g. `fFilter("data->>k", "eq", "x")`. */
51
+ export declare const fFilter: (c: string, op: string, value: string) => FilterEntry;
52
+ /** Negate any single-op filter: `column=not.is.null`, `column=not.eq.5`. */
16
53
  export declare function fNot(entry: FilterEntry): FilterEntry;
54
+ /** Composite AND — `and=(a.eq.1,b.gt.2)`. Children may be leaves or groups (nests). */
55
+ export declare function fAnd(entries: readonly FilterEntry[]): FilterEntry;
56
+ /** Composite OR — `or=(a.eq.1,b.gt.2)`. Children may be leaves or groups (nests). */
17
57
  export declare function fOr(entries: readonly FilterEntry[]): FilterEntry;
18
58
  //# sourceMappingURL=filter.d.ts.map
@@ -1 +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;AAID,wBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,CAGhE"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
package/dist/filter.js CHANGED
@@ -1,49 +1,77 @@
1
- // Filter ops — equality, comparison, set membership, null checks, pattern match,
2
- // plus the `or` composite. (`and`, `fts`, `jsonpath` still to come.)
1
+ // Filter ops — the full PostgREST operator set + nestable and/or/not logic.
3
2
  //
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`.
3
+ // Each filter contributes one entry. A leaf renders as `column=op.value`; a
4
+ // logic group renders as `and=(child,child)` / `or=(...)`. As a CHILD inside a
5
+ // group, a leaf re-spells to `column.op.value` and a group to `and(...)`/`or(...)`,
6
+ // which is how PostgREST nests them.
7
+ import { serializeValue, serializeArray, serializeRange } from "./serialize.js";
8
+ const leaf = (column, expr) => ({ column, expr });
9
+ // ── comparison / equality ───────────────────────────────────────────────────
10
+ export const fEq = (c, v) => leaf(c, `eq.${serializeValue(v)}`);
11
+ export const fNeq = (c, v) => leaf(c, `neq.${serializeValue(v)}`);
12
+ export const fGt = (c, v) => leaf(c, `gt.${serializeValue(v)}`);
13
+ export const fGte = (c, v) => leaf(c, `gte.${serializeValue(v)}`);
14
+ export const fLt = (c, v) => leaf(c, `lt.${serializeValue(v)}`);
15
+ export const fLte = (c, v) => leaf(c, `lte.${serializeValue(v)}`);
16
+ // ── pattern match ───────────────────────────────────────────────────────────
17
+ export const fLike = (c, p) => leaf(c, `like.${serializeValue(p)}`);
18
+ export const fIlike = (c, p) => leaf(c, `ilike.${serializeValue(p)}`);
19
+ /** POSIX regex (`~`). */
20
+ export const fMatch = (c, p) => leaf(c, `match.${serializeValue(p)}`);
21
+ /** Case-insensitive POSIX regex (`~*`). */
22
+ export const fImatch = (c, p) => leaf(c, `imatch.${serializeValue(p)}`);
23
+ // ── set membership / null / distinct ────────────────────────────────────────
24
+ export const fIn = (c, vals) => leaf(c, `in.${serializeValue(vals)}`);
25
+ // `is` is the correct NULL / boolean check — `eq.null` is a SQL no-op.
26
+ export const fIs = (c, v) => leaf(c, `is.${v}`);
27
+ /** `IS DISTINCT FROM` — null-safe inequality. */
28
+ export const fIsDistinct = (c, v) => leaf(c, `isdistinct.${serializeValue(v)}`);
29
+ // ── full-text search ────────────────────────────────────────────────────────
30
+ // Optional text-search config (e.g. "english") rides in parens: `fts(english).query`.
31
+ const ftsOp = (op) => (c, query, config) => leaf(c, config ? `${op}(${config}).${serializeValue(query)}` : `${op}.${serializeValue(query)}`);
32
+ /** `to_tsquery` full-text search. */
33
+ export const fFts = ftsOp("fts");
34
+ /** `plainto_tsquery`. */
35
+ export const fPlfts = ftsOp("plfts");
36
+ /** `phraseto_tsquery`. */
37
+ export const fPhfts = ftsOp("phfts");
38
+ /** `websearch_to_tsquery`. */
39
+ export const fWfts = ftsOp("wfts");
40
+ // ── array / range containment + adjacency ───────────────────────────────────
41
+ /** contains `@>` (array/range/jsonb). */
42
+ export const fCs = (c, v) => leaf(c, `cs.${serializeArray(v)}`);
43
+ /** contained-in `<@`. */
44
+ export const fCd = (c, v) => leaf(c, `cd.${serializeArray(v)}`);
45
+ /** overlap `&&` (array or range). */
46
+ export const fOv = (c, v) => leaf(c, `ov.${Array.isArray(v) ? serializeArray(v) : serializeRange(v)}`);
47
+ /** strictly-left-of `<<`. */
48
+ export const fSl = (c, range) => leaf(c, `sl.${serializeRange(range)}`);
49
+ /** strictly-right-of `>>`. */
50
+ export const fSr = (c, range) => leaf(c, `sr.${serializeRange(range)}`);
51
+ /** does-not-extend-to-the-right-of `&<`. */
52
+ export const fNxr = (c, range) => leaf(c, `nxr.${serializeRange(range)}`);
53
+ /** does-not-extend-to-the-left-of `&>`. */
54
+ export const fNxl = (c, range) => leaf(c, `nxl.${serializeRange(range)}`);
55
+ /** adjacent `-|-`. */
56
+ export const fAdj = (c, range) => leaf(c, `adj.${serializeRange(range)}`);
57
+ // ── generic escape hatch ────────────────────────────────────────────────────
58
+ /** Any operator + already-serialized value, e.g. `fFilter("data->>k", "eq", "x")`. */
59
+ export const fFilter = (c, op, value) => leaf(c, `${op}.${value}`);
60
+ // ── negation + logic groups (nestable) ──────────────────────────────────────
61
+ /** Negate any single-op filter: `column=not.is.null`, `column=not.eq.5`. */
39
62
  export function fNot(entry) {
40
63
  return { column: entry.column, expr: `not.${entry.expr}` };
41
64
  }
42
- // Composite OR: `or=(title.ilike.*x*,author.ilike.*x*)`. Each child is a normal
43
- // FilterEntry (`column` + `op.value`) re-spelled in the dotted inner grammar
44
- // `column.op.value`. Compose children from the same f* helpers above.
65
+ /** Render an entry as a CHILD inside a logic group. */
66
+ function renderChild(e) {
67
+ return e.group ? `${e.column}${e.expr}` : `${e.column}.${e.expr}`;
68
+ }
69
+ /** Composite AND — `and=(a.eq.1,b.gt.2)`. Children may be leaves or groups (nests). */
70
+ export function fAnd(entries) {
71
+ return { column: "and", expr: `(${entries.map(renderChild).join(",")})`, group: true };
72
+ }
73
+ /** Composite OR — `or=(a.eq.1,b.gt.2)`. Children may be leaves or groups (nests). */
45
74
  export function fOr(entries) {
46
- const inner = entries.map((e) => `${e.column}.${e.expr}`).join(",");
47
- return { column: "or", expr: `(${inner})` };
75
+ return { column: "or", expr: `(${entries.map(renderChild).join(",")})`, group: true };
48
76
  }
49
77
  //# sourceMappingURL=filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,qEAAqE;AACrE,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;AACD,gFAAgF;AAChF,6EAA6E;AAC7E,sEAAsE;AACtE,MAAM,UAAU,GAAG,CAAC,OAA+B;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,23 +1,43 @@
1
1
  export { createClient, CloudRestClient } from "./client.js";
2
+ export type { CopyOptions } from "./client.js";
2
3
  export { CloudRestError } from "./errors.js";
3
4
  export { QueryBuilder } from "./query.js";
5
+ export type { OrderOptions, CountStrategy, SingleQuery, PagedQuery } from "./query.js";
4
6
  export { InsertBuilder, UpdateBuilder, DeleteBuilder } from "./mutation.js";
5
7
  export { RpcCaller } from "./rpc.js";
6
8
  export type { AnyPaths, ClientOptions, RowOf, TableName, TokenGetter, } from "./types.js";
7
- export type { OrderOptions, SingleQuery, PagedQuery } from "./query.js";
8
9
  export type { IsValue, FilterEntry } from "./filter.js";
9
- import { fEq, fNeq, fGt, fGte, fLt, fLte, fLike, fIlike, fIn, fIs, fNot } from "./filter.js";
10
+ import * as F from "./filter.js";
11
+ import type { FilterEntry } from "./filter.js";
10
12
  export declare const cond: {
11
- readonly eq: typeof fEq;
12
- readonly neq: typeof fNeq;
13
- readonly gt: typeof fGt;
14
- readonly gte: typeof fGte;
15
- readonly lt: typeof fLt;
16
- readonly lte: typeof fLte;
17
- readonly like: typeof fLike;
18
- readonly ilike: typeof fIlike;
19
- readonly in: typeof fIn;
20
- readonly is: typeof fIs;
21
- readonly not: typeof fNot;
13
+ readonly eq: (c: string, v: unknown) => FilterEntry;
14
+ readonly neq: (c: string, v: unknown) => FilterEntry;
15
+ readonly gt: (c: string, v: unknown) => FilterEntry;
16
+ readonly gte: (c: string, v: unknown) => FilterEntry;
17
+ readonly lt: (c: string, v: unknown) => FilterEntry;
18
+ readonly lte: (c: string, v: unknown) => FilterEntry;
19
+ readonly like: (c: string, p: string) => FilterEntry;
20
+ readonly ilike: (c: string, p: string) => FilterEntry;
21
+ readonly match: (c: string, p: string) => FilterEntry;
22
+ readonly imatch: (c: string, p: string) => FilterEntry;
23
+ readonly in: (c: string, vals: readonly unknown[]) => FilterEntry;
24
+ readonly is: (c: string, v: F.IsValue) => FilterEntry;
25
+ readonly isDistinct: (c: string, v: unknown) => FilterEntry;
26
+ readonly fts: (c: string, query: string, config?: string) => FilterEntry;
27
+ readonly plfts: (c: string, query: string, config?: string) => FilterEntry;
28
+ readonly phfts: (c: string, query: string, config?: string) => FilterEntry;
29
+ readonly wfts: (c: string, query: string, config?: string) => FilterEntry;
30
+ readonly cs: (c: string, v: readonly unknown[]) => FilterEntry;
31
+ readonly cd: (c: string, v: readonly unknown[]) => FilterEntry;
32
+ readonly ov: (c: string, v: readonly unknown[] | string) => FilterEntry;
33
+ readonly sl: (c: string, range: unknown) => FilterEntry;
34
+ readonly sr: (c: string, range: unknown) => FilterEntry;
35
+ readonly nxr: (c: string, range: unknown) => FilterEntry;
36
+ readonly nxl: (c: string, range: unknown) => FilterEntry;
37
+ readonly adj: (c: string, range: unknown) => FilterEntry;
38
+ readonly filter: (c: string, op: string, value: string) => FilterEntry;
39
+ readonly not: typeof F.fNot;
40
+ readonly and: (...e: FilterEntry[]) => FilterEntry;
41
+ readonly or: (...e: FilterEntry[]) => FilterEntry;
22
42
  };
23
43
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAIxD,OAAO,EACL,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAC/D,MAAM,aAAa,CAAC;AACrB,eAAO,MAAM,IAAI;;;;;;;;;;;;CAGP,CAAC"}
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,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvF,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,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAKxD,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAQH,WAAW,EAAE,KAAG,WAAW;wBAC5B,WAAW,EAAE,KAAG,WAAW;CAC9B,CAAC"}
package/dist/index.js CHANGED
@@ -3,11 +3,19 @@ export { CloudRestError } from "./errors.js";
3
3
  export { QueryBuilder } from "./query.js";
4
4
  export { InsertBuilder, UpdateBuilder, DeleteBuilder } from "./mutation.js";
5
5
  export { RpcCaller } from "./rpc.js";
6
- // Bare condition builders for composing `.or(...)`. Each returns a FilterEntry:
7
- // db.from("catalog_public").or(cond.ilike("title","*x*"), cond.ilike("author","*x*"))
8
- import { fEq, fNeq, fGt, fGte, fLt, fLte, fLike, fIlike, fIn, fIs, fNot, } from "./filter.js";
6
+ // Bare condition builders for composing `.and(...)` / `.or(...)` (nestable).
7
+ // db.from("books").or(cond.ilike("title","*x*"), cond.ilike("author","*x*"))
8
+ // db.from("books").and(cond.gte("year",2000), cond.or(cond.eq("a",1), cond.eq("b",2)))
9
+ import * as F from "./filter.js";
9
10
  export const cond = {
10
- eq: fEq, neq: fNeq, gt: fGt, gte: fGte, lt: fLt, lte: fLte,
11
- like: fLike, ilike: fIlike, in: fIn, is: fIs, not: fNot,
11
+ eq: F.fEq, neq: F.fNeq, gt: F.fGt, gte: F.fGte, lt: F.fLt, lte: F.fLte,
12
+ like: F.fLike, ilike: F.fIlike, match: F.fMatch, imatch: F.fImatch,
13
+ in: F.fIn, is: F.fIs, isDistinct: F.fIsDistinct,
14
+ fts: F.fFts, plfts: F.fPlfts, phfts: F.fPhfts, wfts: F.fWfts,
15
+ cs: F.fCs, cd: F.fCd, ov: F.fOv, sl: F.fSl, sr: F.fSr, nxr: F.fNxr, nxl: F.fNxl, adj: F.fAdj,
16
+ filter: F.fFilter, not: F.fNot,
17
+ // Variadic so they compose ergonomically + nest: cond.and(cond.eq(..), cond.or(..)).
18
+ and: (...e) => F.fAnd(e),
19
+ or: (...e) => F.fOr(e),
12
20
  };
13
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +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;AAWrC,gFAAgF;AAChF,wFAAwF;AACxF,OAAO,EACL,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAC/D,MAAM,aAAa,CAAC;AACrB,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;IAC1D,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;CAC/C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAUrC,6EAA6E;AAC7E,+EAA+E;AAC/E,yFAAyF;AACzF,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI;IACtE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO;IAClE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW;IAC/C,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK;IAC5D,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI;IAC5F,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI;IAC9B,qFAAqF;IACrF,GAAG,EAAE,CAAC,GAAG,CAAgB,EAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,EAAE,EAAE,CAAC,GAAG,CAAgB,EAAe,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1C,CAAC"}
@@ -1,36 +1,92 @@
1
1
  import type { AnyPaths, RowOf, TableName } from "./types.js";
2
- import { type FilterEntry, type IsValue } from "./filter.js";
2
+ import type { FilterEntry, IsValue } from "./filter.js";
3
3
  import type { ExecContext } from "./query.js";
4
- declare class FilterableMutation<Row> {
4
+ declare abstract class WriteTuning<Row> {
5
+ protected returnMode?: "representation" | "minimal";
6
+ protected txMode?: "rollback" | "commit";
7
+ protected maxAff?: number;
8
+ protected minAff?: number;
9
+ protected tz?: string;
10
+ protected bufferedFlag: boolean;
11
+ protected missingMode?: "default" | "null";
12
+ protected resolution?: "merge-duplicates" | "ignore-duplicates";
13
+ /** Return affected rows (adds Prefer: return=representation). */
14
+ returning(): this;
15
+ /** No body back (Prefer: return=minimal) — the default if unset. */
16
+ minimal(): this;
17
+ /** Dry-run: run + roll back (Prefer: tx=rollback). */
18
+ dryRun(): this;
19
+ /** Fail (PGRST) if more than N rows would be affected. */
20
+ maxAffected(n: number): this;
21
+ /** Fail if fewer than N rows are affected. */
22
+ minAffected(n: number): this;
23
+ /** Render timestamptz output in this zone (Prefer: timezone=<tz>). */
24
+ timezone(tz: string): this;
25
+ /** Buffer the response + set Content-Length (Prefer: response-buffered). */
26
+ buffered(): this;
27
+ protected prefer(): string[];
28
+ }
29
+ declare abstract class FilterableMutation<Row> extends WriteTuning<Row> {
5
30
  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;
31
+ eq(c: string, v: unknown): this;
32
+ neq(c: string, v: unknown): this;
33
+ gt(c: string, v: unknown): this;
34
+ gte(c: string, v: unknown): this;
35
+ lt(c: string, v: unknown): this;
36
+ lte(c: string, v: unknown): this;
37
+ like(c: string, p: string): this;
38
+ ilike(c: string, p: string): this;
39
+ match(c: string, p: string): this;
40
+ imatch(c: string, p: string): this;
41
+ in(c: string, vals: readonly unknown[]): this;
42
+ is(c: string, v: IsValue): this;
43
+ isDistinct(c: string, v: unknown): this;
44
+ fts(c: string, q: string, cfg?: string): this;
45
+ plfts(c: string, q: string, cfg?: string): this;
46
+ phfts(c: string, q: string, cfg?: string): this;
47
+ wfts(c: string, q: string, cfg?: string): this;
48
+ cs(c: string, vals: readonly unknown[]): this;
49
+ cd(c: string, vals: readonly unknown[]): this;
50
+ ov(c: string, v: readonly unknown[] | string): this;
51
+ sl(c: string, r: unknown): this;
52
+ sr(c: string, r: unknown): this;
53
+ nxr(c: string, r: unknown): this;
54
+ nxl(c: string, r: unknown): this;
55
+ adj(c: string, r: unknown): this;
56
+ not(entry: FilterEntry): this;
57
+ notIs(c: string, v: IsValue): this;
58
+ filter(c: string, op: string, value: string): this;
59
+ and(...entries: FilterEntry[]): this;
60
+ or(...entries: FilterEntry[]): this;
61
+ protected filterQs(): string;
16
62
  }
17
- export declare class InsertBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> implements PromiseLike<Row[]> {
63
+ export declare class InsertBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> extends WriteTuning<Row> implements PromiseLike<Row[]> {
18
64
  private readonly ctx;
19
65
  private readonly table;
20
66
  private rows;
21
- private returnRows;
22
67
  private files;
68
+ private onConflictCols?;
69
+ private columnsList?;
23
70
  constructor(ctx: ExecContext, table: T, rows: Partial<Row> | Partial<Row>[]);
24
- /** Return inserted rows (adds Prefer: return=representation). */
25
- returning(): this;
26
71
  /**
27
- * Attach a file for a media column. Switches the insert to a multipart
28
- * write: the row's scalar columns ride as a `payload` JSON part and each
29
- * file as a part named after its column. The server's media stage stores
30
- * the bytes and puts a reference in the column. Single-row inserts only.
72
+ * Upsert on conflict of `columns` (a PK/unique set). Default resolution
73
+ * merges (UPDATE); pass `{ ignoreDuplicates: true }` for DO NOTHING.
74
+ */
75
+ onConflict(columns: string | string[], opts?: {
76
+ ignoreDuplicates?: boolean;
77
+ }): this;
78
+ /** Restrict the insert to these columns (`?columns=`) — consistent bulk keys. */
79
+ columns(cols: string[]): this;
80
+ /** Treat keys absent from a row as `NULL` rather than the column default. */
81
+ missing(mode: "default" | "null"): this;
82
+ /**
83
+ * Attach a file for a media column — switches to a multipart write (scalar
84
+ * columns as a JSON `payload` part, each file as a part named after its
85
+ * column). The server's media stage stores bytes → reference into the column.
86
+ * Single-row inserts only.
31
87
  */
32
88
  attach(column: string, file: Blob): this;
33
- private hasFiles;
89
+ private buildUrl;
34
90
  private formBody;
35
91
  then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
36
92
  }
@@ -38,18 +94,14 @@ export declare class UpdateBuilder<P extends AnyPaths, T extends TableName<P>, R
38
94
  private readonly ctx;
39
95
  private readonly table;
40
96
  private readonly patch;
41
- private returnRows;
42
97
  constructor(ctx: ExecContext, table: T, patch: Partial<Row>);
43
- returning(): this;
44
98
  private url;
45
99
  then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
46
100
  }
47
101
  export declare class DeleteBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> extends FilterableMutation<Row> implements PromiseLike<Row[]> {
48
102
  private readonly ctx;
49
103
  private readonly table;
50
- private returnRows;
51
104
  constructor(ctx: ExecContext, table: T);
52
- returning(): this;
53
105
  private url;
54
106
  then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
55
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAEL,KAAK,WAAW,EAAE,KAAK,OAAO,EAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,cAAM,kBAAkB,CAAC,GAAG;IAC1B,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,CAAM;IACtC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI;IAClC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI;IAClC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI;IAClC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IACpC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IACrC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAC/C,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI;CAClC;AAqCD,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtF,YAAW,WAAW,CAAC,GAAG,EAAE,CAAC;IAO3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IANxB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAA4B;gBAGtB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,CAAC,EACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE;IAKrC,iEAAiE;IACjE,SAAS,IAAI,IAAI;IAKjB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAKxC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAehB,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EACzB,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAC7D,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;CAOxB;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtF,SAAQ,kBAAkB,CAAC,GAAG,CAC9B,YAAW,WAAW,CAAC,GAAG,EAAE,CAAC;IAK3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,UAAU,CAAS;gBAGR,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;IAKtC,SAAS,IAAI,IAAI;IAKjB,OAAO,CAAC,GAAG;IAOX,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EACzB,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAC7D,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;CAKxB;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtF,SAAQ,kBAAkB,CAAC,GAAG,CAC9B,YAAW,WAAW,CAAC,GAAG,EAAE,CAAC;IAK3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,OAAO,CAAC,UAAU,CAAS;gBAGR,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,CAAC;IAK3B,SAAS,IAAI,IAAI;IAKjB,OAAO,CAAC,GAAG;IAOX,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EACzB,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAC7D,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;CAKxB"}
1
+ {"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"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"}