@ikeboy003/cloudrest-client 0.0.1 → 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 +17 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -0
- package/dist/client.js.map +1 -1
- package/dist/filter.d.ts +51 -10
- package/dist/filter.d.ts.map +1 -1
- package/dist/filter.js +71 -36
- package/dist/filter.js.map +1 -1
- package/dist/index.d.ts +36 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/mutation.d.ts +82 -20
- package/dist/mutation.d.ts.map +1 -1
- package/dist/mutation.js +160 -49
- package/dist/mutation.js.map +1 -1
- package/dist/query.d.ts +42 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +84 -17
- package/dist/query.js.map +1 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -1
- package/dist/rpc.js.map +1 -1
- package/dist/serialize.d.ts +4 -0
- package/dist/serialize.d.ts.map +1 -1
- package/dist/serialize.js +21 -1
- package/dist/serialize.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -4
- package/src/client.ts +49 -4
- package/src/filter.ts +86 -36
- package/src/index.ts +26 -8
- package/src/mutation.ts +163 -55
- package/src/query.ts +95 -24
- package/src/rpc.ts +4 -3
- package/src/serialize.ts +24 -1
- package/src/types.ts +3 -1
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
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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;
|
|
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);
|
package/dist/client.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/filter.d.ts
CHANGED
|
@@ -1,17 +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
|
|
7
|
-
export declare
|
|
8
|
-
export declare
|
|
9
|
-
export declare
|
|
10
|
-
export declare
|
|
11
|
-
export declare
|
|
12
|
-
export declare
|
|
13
|
-
export declare
|
|
14
|
-
|
|
15
|
-
export declare
|
|
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). */
|
|
57
|
+
export declare function fOr(entries: readonly FilterEntry[]): FilterEntry;
|
|
17
58
|
//# sourceMappingURL=filter.d.ts.map
|
package/dist/filter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
|
package/dist/filter.js
CHANGED
|
@@ -1,42 +1,77 @@
|
|
|
1
|
-
// Filter ops —
|
|
2
|
-
// null checks, pattern match. Composite ops (or, and, fts, jsonpath) come later.
|
|
1
|
+
// Filter ops — the full PostgREST operator set + nestable and/or/not logic.
|
|
3
2
|
//
|
|
4
|
-
// Each filter contributes one entry
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
export
|
|
28
|
-
|
|
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`. */
|
|
62
|
+
export function fNot(entry) {
|
|
63
|
+
return { column: entry.column, expr: `not.${entry.expr}` };
|
|
29
64
|
}
|
|
30
|
-
|
|
31
|
-
|
|
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}`;
|
|
32
68
|
}
|
|
33
|
-
|
|
34
|
-
export function
|
|
35
|
-
return { column, expr: `
|
|
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 };
|
|
36
72
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return { column: entry.column, expr: `not.${entry.expr}` };
|
|
73
|
+
/** Composite OR — `or=(a.eq.1,b.gt.2)`. Children may be leaves or groups (nests). */
|
|
74
|
+
export function fOr(entries) {
|
|
75
|
+
return { column: "or", expr: `(${entries.map(renderChild).join(",")})`, group: true };
|
|
41
76
|
}
|
|
42
77
|
//# sourceMappingURL=filter.js.map
|
package/dist/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +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 {
|
|
8
|
-
|
|
9
|
+
export type { IsValue, FilterEntry } from "./filter.js";
|
|
10
|
+
import * as F from "./filter.js";
|
|
11
|
+
import type { FilterEntry } from "./filter.js";
|
|
12
|
+
export declare const cond: {
|
|
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;
|
|
42
|
+
};
|
|
9
43
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,4 +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 `.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";
|
|
10
|
+
export const cond = {
|
|
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),
|
|
20
|
+
};
|
|
6
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;
|
|
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"}
|
package/dist/mutation.d.ts
CHANGED
|
@@ -1,45 +1,107 @@
|
|
|
1
1
|
import type { AnyPaths, RowOf, TableName } from "./types.js";
|
|
2
|
-
import {
|
|
2
|
+
import type { FilterEntry, IsValue } from "./filter.js";
|
|
3
3
|
import type { ExecContext } from "./query.js";
|
|
4
|
-
declare class
|
|
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(
|
|
7
|
-
neq(
|
|
8
|
-
gt(
|
|
9
|
-
gte(
|
|
10
|
-
lt(
|
|
11
|
-
lte(
|
|
12
|
-
like(
|
|
13
|
-
ilike(
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
67
|
+
private files;
|
|
68
|
+
private onConflictCols?;
|
|
69
|
+
private columnsList?;
|
|
22
70
|
constructor(ctx: ExecContext, table: T, rows: Partial<Row> | Partial<Row>[]);
|
|
23
|
-
/**
|
|
24
|
-
|
|
71
|
+
/**
|
|
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.
|
|
87
|
+
*/
|
|
88
|
+
attach(column: string, file: Blob): this;
|
|
89
|
+
private buildUrl;
|
|
90
|
+
private formBody;
|
|
25
91
|
then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
|
|
26
92
|
}
|
|
27
93
|
export declare class UpdateBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> extends FilterableMutation<Row> implements PromiseLike<Row[]> {
|
|
28
94
|
private readonly ctx;
|
|
29
95
|
private readonly table;
|
|
30
96
|
private readonly patch;
|
|
31
|
-
private returnRows;
|
|
32
97
|
constructor(ctx: ExecContext, table: T, patch: Partial<Row>);
|
|
33
|
-
returning(): this;
|
|
34
98
|
private url;
|
|
35
99
|
then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
|
|
36
100
|
}
|
|
37
101
|
export declare class DeleteBuilder<P extends AnyPaths, T extends TableName<P>, Row = RowOf<P, T>> extends FilterableMutation<Row> implements PromiseLike<Row[]> {
|
|
38
102
|
private readonly ctx;
|
|
39
103
|
private readonly table;
|
|
40
|
-
private returnRows;
|
|
41
104
|
constructor(ctx: ExecContext, table: T);
|
|
42
|
-
returning(): this;
|
|
43
105
|
private url;
|
|
44
106
|
then<R1 = Row[], R2 = never>(onfulfilled?: ((value: Row[]) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): PromiseLike<R1 | R2>;
|
|
45
107
|
}
|
package/dist/mutation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../src/mutation.ts"],"names":[],"mappings":"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"}
|