@pawabase/client 0.0.0-stage → 0.1.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/README.md +313 -2
- package/dist/cjs/admin.d.ts +187 -0
- package/dist/cjs/admin.d.ts.map +1 -0
- package/dist/cjs/admin.js +235 -0
- package/dist/cjs/admin.js.map +1 -0
- package/dist/cjs/auth.d.ts +448 -0
- package/dist/cjs/auth.d.ts.map +1 -0
- package/dist/cjs/auth.js +1016 -0
- package/dist/cjs/auth.js.map +1 -0
- package/dist/cjs/client.d.ts +103 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +144 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/data.d.ts +220 -0
- package/dist/cjs/data.d.ts.map +1 -0
- package/dist/cjs/data.js +490 -0
- package/dist/cjs/data.js.map +1 -0
- package/dist/cjs/errors.d.ts +167 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +316 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/files.d.ts +80 -0
- package/dist/cjs/files.d.ts.map +1 -0
- package/dist/cjs/files.js +167 -0
- package/dist/cjs/files.js.map +1 -0
- package/dist/cjs/functions.d.ts +66 -0
- package/dist/cjs/functions.d.ts.map +1 -0
- package/dist/cjs/functions.js +109 -0
- package/dist/cjs/functions.js.map +1 -0
- package/dist/cjs/http.d.ts +101 -0
- package/dist/cjs/http.d.ts.map +1 -0
- package/dist/cjs/http.js +249 -0
- package/dist/cjs/http.js.map +1 -0
- package/dist/cjs/index.d.ts +22 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/manage/access.d.ts +136 -0
- package/dist/cjs/manage/access.d.ts.map +1 -0
- package/dist/cjs/manage/access.js +162 -0
- package/dist/cjs/manage/access.js.map +1 -0
- package/dist/cjs/manage/automation.d.ts +106 -0
- package/dist/cjs/manage/automation.d.ts.map +1 -0
- package/dist/cjs/manage/automation.js +144 -0
- package/dist/cjs/manage/automation.js.map +1 -0
- package/dist/cjs/manage/base.d.ts +52 -0
- package/dist/cjs/manage/base.d.ts.map +1 -0
- package/dist/cjs/manage/base.js +69 -0
- package/dist/cjs/manage/base.js.map +1 -0
- package/dist/cjs/manage/data.d.ts +100 -0
- package/dist/cjs/manage/data.d.ts.map +1 -0
- package/dist/cjs/manage/data.js +141 -0
- package/dist/cjs/manage/data.js.map +1 -0
- package/dist/cjs/manage/files.d.ts +45 -0
- package/dist/cjs/manage/files.d.ts.map +1 -0
- package/dist/cjs/manage/files.js +73 -0
- package/dist/cjs/manage/files.js.map +1 -0
- package/dist/cjs/manage/functions.d.ts +48 -0
- package/dist/cjs/manage/functions.d.ts.map +1 -0
- package/dist/cjs/manage/functions.js +61 -0
- package/dist/cjs/manage/functions.js.map +1 -0
- package/dist/cjs/manage/index.d.ts +76 -0
- package/dist/cjs/manage/index.d.ts.map +1 -0
- package/dist/cjs/manage/index.js +134 -0
- package/dist/cjs/manage/index.js.map +1 -0
- package/dist/cjs/manage/lifecycle.d.ts +128 -0
- package/dist/cjs/manage/lifecycle.d.ts.map +1 -0
- package/dist/cjs/manage/lifecycle.js +167 -0
- package/dist/cjs/manage/lifecycle.js.map +1 -0
- package/dist/cjs/manage/mail.d.ts +16 -0
- package/dist/cjs/manage/mail.d.ts.map +1 -0
- package/dist/cjs/manage/mail.js +24 -0
- package/dist/cjs/manage/mail.js.map +1 -0
- package/dist/cjs/manage/observe.d.ts +149 -0
- package/dist/cjs/manage/observe.d.ts.map +1 -0
- package/dist/cjs/manage/observe.js +168 -0
- package/dist/cjs/manage/observe.js.map +1 -0
- package/dist/cjs/manage/realtime.d.ts +52 -0
- package/dist/cjs/manage/realtime.d.ts.map +1 -0
- package/dist/cjs/manage/realtime.js +71 -0
- package/dist/cjs/manage/realtime.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/realtime.d.ts +207 -0
- package/dist/cjs/realtime.d.ts.map +1 -0
- package/dist/cjs/realtime.js +704 -0
- package/dist/cjs/realtime.js.map +1 -0
- package/dist/cjs/session-store.d.ts +16 -0
- package/dist/cjs/session-store.d.ts.map +1 -0
- package/dist/cjs/session-store.js +37 -0
- package/dist/cjs/session-store.js.map +1 -0
- package/dist/cjs/typegen.d.ts +26 -0
- package/dist/cjs/typegen.d.ts.map +1 -0
- package/dist/cjs/typegen.js +167 -0
- package/dist/cjs/typegen.js.map +1 -0
- package/dist/cjs/types.d.ts +178 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +4 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/util.d.ts +27 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +115 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/cjs/version.d.ts +2 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +5 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/admin.d.ts +187 -0
- package/dist/esm/admin.d.ts.map +1 -0
- package/dist/esm/admin.js +222 -0
- package/dist/esm/admin.js.map +1 -0
- package/dist/esm/auth.d.ts +448 -0
- package/dist/esm/auth.d.ts.map +1 -0
- package/dist/esm/auth.js +1012 -0
- package/dist/esm/auth.js.map +1 -0
- package/dist/esm/cli/gen-types.d.ts +2 -0
- package/dist/esm/cli/gen-types.d.ts.map +1 -0
- package/dist/esm/cli/gen-types.js +100 -0
- package/dist/esm/cli/gen-types.js.map +1 -0
- package/dist/esm/client.d.ts +103 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +139 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/data.d.ts +220 -0
- package/dist/esm/data.d.ts.map +1 -0
- package/dist/esm/data.js +485 -0
- package/dist/esm/data.js.map +1 -0
- package/dist/esm/errors.d.ts +167 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +293 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/files.d.ts +80 -0
- package/dist/esm/files.d.ts.map +1 -0
- package/dist/esm/files.js +162 -0
- package/dist/esm/files.js.map +1 -0
- package/dist/esm/functions.d.ts +66 -0
- package/dist/esm/functions.d.ts.map +1 -0
- package/dist/esm/functions.js +103 -0
- package/dist/esm/functions.js.map +1 -0
- package/dist/esm/http.d.ts +101 -0
- package/dist/esm/http.d.ts.map +1 -0
- package/dist/esm/http.js +245 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/manage/access.d.ts +136 -0
- package/dist/esm/manage/access.d.ts.map +1 -0
- package/dist/esm/manage/access.js +155 -0
- package/dist/esm/manage/access.js.map +1 -0
- package/dist/esm/manage/automation.d.ts +106 -0
- package/dist/esm/manage/automation.d.ts.map +1 -0
- package/dist/esm/manage/automation.js +134 -0
- package/dist/esm/manage/automation.js.map +1 -0
- package/dist/esm/manage/base.d.ts +52 -0
- package/dist/esm/manage/base.d.ts.map +1 -0
- package/dist/esm/manage/base.js +63 -0
- package/dist/esm/manage/base.js.map +1 -0
- package/dist/esm/manage/data.d.ts +100 -0
- package/dist/esm/manage/data.d.ts.map +1 -0
- package/dist/esm/manage/data.js +130 -0
- package/dist/esm/manage/data.js.map +1 -0
- package/dist/esm/manage/files.d.ts +45 -0
- package/dist/esm/manage/files.d.ts.map +1 -0
- package/dist/esm/manage/files.js +68 -0
- package/dist/esm/manage/files.js.map +1 -0
- package/dist/esm/manage/functions.d.ts +48 -0
- package/dist/esm/manage/functions.d.ts.map +1 -0
- package/dist/esm/manage/functions.js +57 -0
- package/dist/esm/manage/functions.js.map +1 -0
- package/dist/esm/manage/index.d.ts +76 -0
- package/dist/esm/manage/index.d.ts.map +1 -0
- package/dist/esm/manage/index.js +115 -0
- package/dist/esm/manage/index.js.map +1 -0
- package/dist/esm/manage/lifecycle.d.ts +128 -0
- package/dist/esm/manage/lifecycle.d.ts.map +1 -0
- package/dist/esm/manage/lifecycle.js +161 -0
- package/dist/esm/manage/lifecycle.js.map +1 -0
- package/dist/esm/manage/mail.d.ts +16 -0
- package/dist/esm/manage/mail.d.ts.map +1 -0
- package/dist/esm/manage/mail.js +19 -0
- package/dist/esm/manage/mail.js.map +1 -0
- package/dist/esm/manage/observe.d.ts +149 -0
- package/dist/esm/manage/observe.d.ts.map +1 -0
- package/dist/esm/manage/observe.js +161 -0
- package/dist/esm/manage/observe.js.map +1 -0
- package/dist/esm/manage/realtime.d.ts +52 -0
- package/dist/esm/manage/realtime.d.ts.map +1 -0
- package/dist/esm/manage/realtime.js +66 -0
- package/dist/esm/manage/realtime.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/realtime.d.ts +207 -0
- package/dist/esm/realtime.d.ts.map +1 -0
- package/dist/esm/realtime.js +699 -0
- package/dist/esm/realtime.js.map +1 -0
- package/dist/esm/session-store.d.ts +16 -0
- package/dist/esm/session-store.d.ts.map +1 -0
- package/dist/esm/session-store.js +32 -0
- package/dist/esm/session-store.js.map +1 -0
- package/dist/esm/typegen.d.ts +26 -0
- package/dist/esm/typegen.d.ts.map +1 -0
- package/dist/esm/typegen.js +163 -0
- package/dist/esm/typegen.js.map +1 -0
- package/dist/esm/types.d.ts +178 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/util.d.ts +27 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +102 -0
- package/dist/esm/util.js.map +1 -0
- package/dist/esm/version.d.ts +2 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +84 -4
- package/src/admin.ts +311 -0
- package/src/auth.ts +1180 -0
- package/src/cli/gen-types.ts +105 -0
- package/src/client.ts +189 -0
- package/src/data.ts +576 -0
- package/src/errors.ts +330 -0
- package/src/files.ts +208 -0
- package/src/functions.ts +131 -0
- package/src/http.ts +354 -0
- package/src/index.ts +56 -0
- package/src/manage/access.ts +206 -0
- package/src/manage/automation.ts +162 -0
- package/src/manage/base.ts +83 -0
- package/src/manage/data.ts +159 -0
- package/src/manage/files.ts +79 -0
- package/src/manage/functions.ts +69 -0
- package/src/manage/index.ts +132 -0
- package/src/manage/lifecycle.ts +208 -0
- package/src/manage/mail.ts +22 -0
- package/src/manage/observe.ts +226 -0
- package/src/manage/realtime.ts +95 -0
- package/src/realtime.ts +765 -0
- package/src/session-store.ts +36 -0
- package/src/typegen.ts +192 -0
- package/src/types.ts +195 -0
- package/src/util.ts +114 -0
- package/src/version.ts +1 -0
package/dist/cjs/data.js
ADDED
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResourceClient = exports.QueryBuilder = void 0;
|
|
4
|
+
const errors_js_1 = require("./errors.js");
|
|
5
|
+
const util_js_1 = require("./util.js");
|
|
6
|
+
function format(value, op, column) {
|
|
7
|
+
if (value === null)
|
|
8
|
+
throw new errors_js_1.InvalidQueryError(`Filter on ${column}: null needs is()/isNot(), not ${op}.`);
|
|
9
|
+
if (value instanceof Date)
|
|
10
|
+
return value.toISOString();
|
|
11
|
+
if (typeof value === "bigint" || typeof value === "number")
|
|
12
|
+
return String(value);
|
|
13
|
+
if (typeof value === "boolean")
|
|
14
|
+
return String(value);
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
function encode(column, op, value) {
|
|
18
|
+
switch (op) {
|
|
19
|
+
case "eq":
|
|
20
|
+
case "neq": {
|
|
21
|
+
// `filter[flag]=eq.false` matches true rows on the server; booleans and null go through is/isnot.
|
|
22
|
+
if (value === null)
|
|
23
|
+
return { op: op === "eq" ? "is" : "isnot", value: "null" };
|
|
24
|
+
if (typeof value === "boolean")
|
|
25
|
+
return { op: op === "eq" ? "is" : "isnot", value: String(value) };
|
|
26
|
+
return { op, value: format(value, op, column) };
|
|
27
|
+
}
|
|
28
|
+
case "is":
|
|
29
|
+
case "isnot": {
|
|
30
|
+
if (value !== null && typeof value !== "boolean") {
|
|
31
|
+
throw new errors_js_1.InvalidQueryError(`Filter on ${column}: ${op} takes null, true or false.`);
|
|
32
|
+
}
|
|
33
|
+
return { op, value: String(value) };
|
|
34
|
+
}
|
|
35
|
+
case "in":
|
|
36
|
+
case "nin": {
|
|
37
|
+
if (!Array.isArray(value))
|
|
38
|
+
throw new errors_js_1.InvalidQueryError(`Filter on ${column}: ${op} takes an array.`);
|
|
39
|
+
if (value.length === 0)
|
|
40
|
+
return op === "in" ? { empty: true } : { skip: true };
|
|
41
|
+
const parts = value.map((item) => format(item, op, column));
|
|
42
|
+
const bad = parts.find((part) => part.includes(","));
|
|
43
|
+
if (bad !== undefined) {
|
|
44
|
+
throw new errors_js_1.InvalidQueryError(`Filter on ${column}: the value ${JSON.stringify(bad)} contains a comma, and the server splits ${op} lists on commas.`);
|
|
45
|
+
}
|
|
46
|
+
return { op, value: parts.join(",") };
|
|
47
|
+
}
|
|
48
|
+
case "like":
|
|
49
|
+
case "ilike":
|
|
50
|
+
if (typeof value !== "string")
|
|
51
|
+
throw new errors_js_1.InvalidQueryError(`Filter on ${column}: ${op} takes a string pattern.`);
|
|
52
|
+
return { op, value };
|
|
53
|
+
default:
|
|
54
|
+
return { op, value: format(value, op, column) };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A query on one resource. Builders are immutable: every method returns a new one, so
|
|
59
|
+
* a base query can be reused. It is also a promise, so `await` runs it.
|
|
60
|
+
*
|
|
61
|
+
* ```ts
|
|
62
|
+
* const page = await client.from("posts").eq("status", "live").order("created_at", "desc").perPage(20);
|
|
63
|
+
* for await (const post of client.from("posts").eq("status", "live")) { … }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
class QueryBuilder {
|
|
67
|
+
http;
|
|
68
|
+
resource;
|
|
69
|
+
state;
|
|
70
|
+
options;
|
|
71
|
+
constructor(http, resource, state = {
|
|
72
|
+
filters: new Map(),
|
|
73
|
+
sort: [],
|
|
74
|
+
select: null,
|
|
75
|
+
expand: [],
|
|
76
|
+
page: 1,
|
|
77
|
+
perPage: null,
|
|
78
|
+
empty: false,
|
|
79
|
+
}, options = {}) {
|
|
80
|
+
this.http = http;
|
|
81
|
+
this.resource = resource;
|
|
82
|
+
this.state = state;
|
|
83
|
+
this.options = options;
|
|
84
|
+
}
|
|
85
|
+
with(patch, options) {
|
|
86
|
+
return new QueryBuilder(this.http, this.resource, { ...this.state, filters: new Map(this.state.filters), ...patch }, { ...this.options, ...options });
|
|
87
|
+
}
|
|
88
|
+
// ── filters ───────────────────────────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Add a filter. The server accepts one filter per field and keeps only the last when
|
|
91
|
+
* a field repeats, so a second filter on the same field throws instead of silently
|
|
92
|
+
* dropping one. For a two-sided range, see the docs (a stored period field, or a route).
|
|
93
|
+
*/
|
|
94
|
+
filter(column, op, value) {
|
|
95
|
+
if (this.state.filters.has(column)) {
|
|
96
|
+
throw new errors_js_1.InvalidQueryError(`There is already a filter on "${column}". The server applies one filter per field and drops the others, so a range with two bounds on one field cannot be written as a single list request.`);
|
|
97
|
+
}
|
|
98
|
+
const encoded = encode(column, op, value);
|
|
99
|
+
const filters = new Map(this.state.filters);
|
|
100
|
+
if ("empty" in encoded)
|
|
101
|
+
return this.with({ empty: true, filters });
|
|
102
|
+
if ("skip" in encoded)
|
|
103
|
+
return this.with({ filters });
|
|
104
|
+
filters.set(column, `${encoded.op}.${encoded.value}`);
|
|
105
|
+
return this.with({ filters });
|
|
106
|
+
}
|
|
107
|
+
eq(column, value) {
|
|
108
|
+
return this.filter(column, "eq", value);
|
|
109
|
+
}
|
|
110
|
+
neq(column, value) {
|
|
111
|
+
return this.filter(column, "neq", value);
|
|
112
|
+
}
|
|
113
|
+
gt(column, value) {
|
|
114
|
+
return this.filter(column, "gt", value);
|
|
115
|
+
}
|
|
116
|
+
gte(column, value) {
|
|
117
|
+
return this.filter(column, "gte", value);
|
|
118
|
+
}
|
|
119
|
+
lt(column, value) {
|
|
120
|
+
return this.filter(column, "lt", value);
|
|
121
|
+
}
|
|
122
|
+
lte(column, value) {
|
|
123
|
+
return this.filter(column, "lte", value);
|
|
124
|
+
}
|
|
125
|
+
/** Pattern match. `*` and `%` match any run of characters. Whether it ignores case depends on the database. */
|
|
126
|
+
like(column, pattern) {
|
|
127
|
+
return this.filter(column, "like", pattern);
|
|
128
|
+
}
|
|
129
|
+
/** Case-insensitive match on PostgreSQL; on other databases the same as {@link like}. */
|
|
130
|
+
ilike(column, pattern) {
|
|
131
|
+
return this.filter(column, "ilike", pattern);
|
|
132
|
+
}
|
|
133
|
+
/** Matches any of the values. Values cannot contain commas. An empty list matches nothing. */
|
|
134
|
+
in(column, values) {
|
|
135
|
+
return this.filter(column, "in", values);
|
|
136
|
+
}
|
|
137
|
+
notIn(column, values) {
|
|
138
|
+
return this.filter(column, "nin", values);
|
|
139
|
+
}
|
|
140
|
+
/** `null`, `true` or `false`. The right way to test booleans. */
|
|
141
|
+
is(column, value) {
|
|
142
|
+
return this.filter(column, "is", value);
|
|
143
|
+
}
|
|
144
|
+
isNot(column, value) {
|
|
145
|
+
return this.filter(column, "isnot", value);
|
|
146
|
+
}
|
|
147
|
+
/** Several filters at once: `{ status: "live", views: { gte: 10 } }`. */
|
|
148
|
+
where(conditions) {
|
|
149
|
+
let query = this;
|
|
150
|
+
for (const [column, condition] of Object.entries(conditions)) {
|
|
151
|
+
if (condition === undefined)
|
|
152
|
+
continue;
|
|
153
|
+
if (typeof condition === "object" && condition !== null && !(condition instanceof Date)) {
|
|
154
|
+
const entries = Object.entries(condition);
|
|
155
|
+
if (entries.length !== 1) {
|
|
156
|
+
throw new errors_js_1.InvalidQueryError(`where(): "${column}" has ${entries.length} operators; the server takes one filter per field.`);
|
|
157
|
+
}
|
|
158
|
+
const [op, value] = entries[0];
|
|
159
|
+
query = query.filter(column, op, value);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
query = query.filter(column, "eq", condition);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return query;
|
|
166
|
+
}
|
|
167
|
+
// ── shape ─────────────────────────────────────────────────────────────
|
|
168
|
+
/** Order by a column. Call again for tie-breakers. The default order is the primary key. */
|
|
169
|
+
order(column, direction = "asc") {
|
|
170
|
+
return this.with({ sort: [...this.state.sort, `${direction === "desc" ? "-" : ""}${column}`] });
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Ask for only these columns (the primary key is always included). Columns you leave out
|
|
174
|
+
* still appear in each row, but as `null`, so the result type keeps them optional.
|
|
175
|
+
*/
|
|
176
|
+
select(...columns) {
|
|
177
|
+
return this.with({ select: columns });
|
|
178
|
+
}
|
|
179
|
+
/** Embed `belongs_to` / `has_many` relations declared on the resource. */
|
|
180
|
+
expand(...relations) {
|
|
181
|
+
return this.with({ expand: [...this.state.expand, ...relations] });
|
|
182
|
+
}
|
|
183
|
+
/** The 1-based page. */
|
|
184
|
+
page(page) {
|
|
185
|
+
return this.with({ page });
|
|
186
|
+
}
|
|
187
|
+
/** Rows per page. The server allows 1 to 200 (20 by default). */
|
|
188
|
+
perPage(perPage) {
|
|
189
|
+
return this.with({ perPage });
|
|
190
|
+
}
|
|
191
|
+
/** Alias of {@link perPage}. */
|
|
192
|
+
limit(count) {
|
|
193
|
+
return this.perPage(count);
|
|
194
|
+
}
|
|
195
|
+
/** Abort or time-limit this query. */
|
|
196
|
+
withOptions(options) {
|
|
197
|
+
return this.with({}, options);
|
|
198
|
+
}
|
|
199
|
+
// ── running ───────────────────────────────────────────────────────────
|
|
200
|
+
params() {
|
|
201
|
+
const params = {};
|
|
202
|
+
for (const [column, value] of this.state.filters)
|
|
203
|
+
params[`filter[${column}]`] = value;
|
|
204
|
+
if (this.state.sort.length)
|
|
205
|
+
params["sort"] = this.state.sort.join(",");
|
|
206
|
+
if (this.state.select)
|
|
207
|
+
params["select"] = this.state.select.join(",");
|
|
208
|
+
if (this.state.expand.length)
|
|
209
|
+
params["expand"] = [...new Set(this.state.expand)].join(",");
|
|
210
|
+
if (this.state.page !== 1)
|
|
211
|
+
params["page"] = this.state.page;
|
|
212
|
+
if (this.state.perPage !== null)
|
|
213
|
+
params["per_page"] = this.state.perPage;
|
|
214
|
+
return params;
|
|
215
|
+
}
|
|
216
|
+
/** Run the query and return one page. `await`ing the builder does the same. */
|
|
217
|
+
async execute() {
|
|
218
|
+
if (this.state.empty) {
|
|
219
|
+
return { data: [], page: this.state.page, per_page: this.state.perPage ?? 20, total: 0 };
|
|
220
|
+
}
|
|
221
|
+
return this.http.request({
|
|
222
|
+
path: `/rest/v1/${(0, util_js_1.encodePath)(this.resource)}`,
|
|
223
|
+
query: this.params(),
|
|
224
|
+
signal: this.options.signal,
|
|
225
|
+
...(this.options.timeoutMs !== undefined ? { timeoutMs: this.options.timeoutMs } : {}),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
then(onfulfilled, onrejected) {
|
|
229
|
+
return this.execute().then(onfulfilled, onrejected);
|
|
230
|
+
}
|
|
231
|
+
/** The first matching row, or `null`. */
|
|
232
|
+
async first() {
|
|
233
|
+
const page = await this.perPage(1).page(1).execute();
|
|
234
|
+
return page.data[0] ?? null;
|
|
235
|
+
}
|
|
236
|
+
/** The first matching row; throws {@link NotFoundError} when there is none. */
|
|
237
|
+
async single() {
|
|
238
|
+
const row = await this.first();
|
|
239
|
+
if (row === null) {
|
|
240
|
+
throw new errors_js_1.NotFoundError({ status: 404, code: "not_found", message: `No ${this.resource} record matches.` });
|
|
241
|
+
}
|
|
242
|
+
return row;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* How many rows match. Throws when the server cannot count (a per-row policy
|
|
246
|
+
* makes `total` unknowable); use {@link all} and count instead.
|
|
247
|
+
*/
|
|
248
|
+
async count() {
|
|
249
|
+
const page = await this.perPage(1).page(1).execute();
|
|
250
|
+
if (page.total === null) {
|
|
251
|
+
throw new errors_js_1.InvalidQueryError(`The server cannot count ${this.resource} for this caller: a per-row policy makes the total unknown. Fetch the rows with all() and count them.`);
|
|
252
|
+
}
|
|
253
|
+
return page.total;
|
|
254
|
+
}
|
|
255
|
+
/** Whether any row matches. */
|
|
256
|
+
async exists() {
|
|
257
|
+
return (await this.first()) !== null;
|
|
258
|
+
}
|
|
259
|
+
/** Walk the result one page at a time, from the current page on. */
|
|
260
|
+
async *pages(options = {}) {
|
|
261
|
+
const pageSize = options.pageSize ?? this.state.perPage ?? 100;
|
|
262
|
+
const stopAfterEmpty = Math.max(1, options.stopAfterEmptyPages ?? 1);
|
|
263
|
+
let query = this.perPage(pageSize).withOptions({
|
|
264
|
+
...(options.signal !== undefined ? { signal: options.signal } : {}),
|
|
265
|
+
...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
|
|
266
|
+
});
|
|
267
|
+
let seen = 0;
|
|
268
|
+
let empties = 0;
|
|
269
|
+
for (;;) {
|
|
270
|
+
const page = await query.execute();
|
|
271
|
+
yield page;
|
|
272
|
+
seen += page.data.length;
|
|
273
|
+
if (options.maxRecords !== undefined && seen >= options.maxRecords)
|
|
274
|
+
return;
|
|
275
|
+
if (page.total !== null) {
|
|
276
|
+
if (page.page * page.per_page >= page.total)
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
// Unknown total: a per-row policy filters after the page is read, so a short page proves nothing.
|
|
281
|
+
empties = page.data.length === 0 ? empties + 1 : 0;
|
|
282
|
+
if (empties >= stopAfterEmpty)
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
query = query.page(page.page + 1);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/** Every matching row, across pages. Mind the cost on large tables; `maxRecords` caps it. */
|
|
289
|
+
async all(options = {}) {
|
|
290
|
+
const rows = [];
|
|
291
|
+
for await (const page of this.pages(options)) {
|
|
292
|
+
rows.push(...page.data);
|
|
293
|
+
if (options.maxRecords !== undefined && rows.length >= options.maxRecords)
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
return options.maxRecords !== undefined ? rows.slice(0, options.maxRecords) : rows;
|
|
297
|
+
}
|
|
298
|
+
/** Iterate rows lazily: `for await (const row of query)`. */
|
|
299
|
+
async *[Symbol.asyncIterator]() {
|
|
300
|
+
for await (const page of this.pages())
|
|
301
|
+
yield* page.data;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
exports.QueryBuilder = QueryBuilder;
|
|
305
|
+
/** Create, read, update and delete records of one resource. */
|
|
306
|
+
class ResourceClient {
|
|
307
|
+
http;
|
|
308
|
+
name;
|
|
309
|
+
constructor(http, name) {
|
|
310
|
+
this.http = http;
|
|
311
|
+
this.name = name;
|
|
312
|
+
}
|
|
313
|
+
path(id) {
|
|
314
|
+
const base = `/rest/v1/${(0, util_js_1.encodePath)(this.name)}`;
|
|
315
|
+
return id === undefined ? base : `${base}/${encodeURIComponent(String(id))}`;
|
|
316
|
+
}
|
|
317
|
+
/** Start a query. Every filter and shape method below is a shortcut for `query().…`. */
|
|
318
|
+
query() {
|
|
319
|
+
return new QueryBuilder(this.http, this.name);
|
|
320
|
+
}
|
|
321
|
+
/** One page of records, using plain parameters. For anything richer, build a query. */
|
|
322
|
+
list(params = {}) {
|
|
323
|
+
let query = this.query();
|
|
324
|
+
if (params.where)
|
|
325
|
+
query = query.where(params.where);
|
|
326
|
+
const specs = typeof params.sort === "string" ? params.sort.split(",") : (params.sort ?? []);
|
|
327
|
+
for (const spec of specs.map((s) => s.trim()).filter(Boolean)) {
|
|
328
|
+
query = spec.startsWith("-") ? query.order(spec.slice(1), "desc") : query.order(spec.replace(/^\+/, ""));
|
|
329
|
+
}
|
|
330
|
+
if (params.select)
|
|
331
|
+
query = query.select(...params.select);
|
|
332
|
+
if (params.expand)
|
|
333
|
+
query = query.expand(...params.expand);
|
|
334
|
+
if (params.page)
|
|
335
|
+
query = query.page(params.page);
|
|
336
|
+
if (params.perPage)
|
|
337
|
+
query = query.perPage(params.perPage);
|
|
338
|
+
if (params.signal)
|
|
339
|
+
query = query.withOptions({ signal: params.signal });
|
|
340
|
+
return query.execute();
|
|
341
|
+
}
|
|
342
|
+
where(conditions) {
|
|
343
|
+
return this.query().where(conditions);
|
|
344
|
+
}
|
|
345
|
+
filter(column, op, value) {
|
|
346
|
+
return this.query().filter(column, op, value);
|
|
347
|
+
}
|
|
348
|
+
eq(column, value) {
|
|
349
|
+
return this.query().eq(column, value);
|
|
350
|
+
}
|
|
351
|
+
neq(column, value) {
|
|
352
|
+
return this.query().neq(column, value);
|
|
353
|
+
}
|
|
354
|
+
gt(column, value) {
|
|
355
|
+
return this.query().gt(column, value);
|
|
356
|
+
}
|
|
357
|
+
gte(column, value) {
|
|
358
|
+
return this.query().gte(column, value);
|
|
359
|
+
}
|
|
360
|
+
lt(column, value) {
|
|
361
|
+
return this.query().lt(column, value);
|
|
362
|
+
}
|
|
363
|
+
lte(column, value) {
|
|
364
|
+
return this.query().lte(column, value);
|
|
365
|
+
}
|
|
366
|
+
like(column, pattern) {
|
|
367
|
+
return this.query().like(column, pattern);
|
|
368
|
+
}
|
|
369
|
+
ilike(column, pattern) {
|
|
370
|
+
return this.query().ilike(column, pattern);
|
|
371
|
+
}
|
|
372
|
+
in(column, values) {
|
|
373
|
+
return this.query().in(column, values);
|
|
374
|
+
}
|
|
375
|
+
notIn(column, values) {
|
|
376
|
+
return this.query().notIn(column, values);
|
|
377
|
+
}
|
|
378
|
+
is(column, value) {
|
|
379
|
+
return this.query().is(column, value);
|
|
380
|
+
}
|
|
381
|
+
isNot(column, value) {
|
|
382
|
+
return this.query().isNot(column, value);
|
|
383
|
+
}
|
|
384
|
+
order(column, direction = "asc") {
|
|
385
|
+
return this.query().order(column, direction);
|
|
386
|
+
}
|
|
387
|
+
select(...columns) {
|
|
388
|
+
return this.query().select(...columns);
|
|
389
|
+
}
|
|
390
|
+
expand(...relations) {
|
|
391
|
+
return this.query().expand(...relations);
|
|
392
|
+
}
|
|
393
|
+
page(page) {
|
|
394
|
+
return this.query().page(page);
|
|
395
|
+
}
|
|
396
|
+
perPage(count) {
|
|
397
|
+
return this.query().perPage(count);
|
|
398
|
+
}
|
|
399
|
+
limit(count) {
|
|
400
|
+
return this.query().perPage(count);
|
|
401
|
+
}
|
|
402
|
+
/** The first record in the default order, or `null`. */
|
|
403
|
+
first() {
|
|
404
|
+
return this.query().first();
|
|
405
|
+
}
|
|
406
|
+
/** How many records the caller can see. See {@link QueryBuilder.count}. */
|
|
407
|
+
count() {
|
|
408
|
+
return this.query().count();
|
|
409
|
+
}
|
|
410
|
+
/** Every record, across pages. See {@link QueryBuilder.all}. */
|
|
411
|
+
all(options = {}) {
|
|
412
|
+
return this.query().all(options);
|
|
413
|
+
}
|
|
414
|
+
/** Walk every record page by page. */
|
|
415
|
+
pages(options = {}) {
|
|
416
|
+
return this.query().pages(options);
|
|
417
|
+
}
|
|
418
|
+
/** Iterate every record lazily: `for await (const row of client.from("posts"))`. */
|
|
419
|
+
[Symbol.asyncIterator]() {
|
|
420
|
+
return this.query()[Symbol.asyncIterator]();
|
|
421
|
+
}
|
|
422
|
+
/** One record. `404` also means "a read policy hides it": see {@link maybeGet}. */
|
|
423
|
+
get(id, options = {}) {
|
|
424
|
+
return this.http.request({
|
|
425
|
+
path: this.path(id),
|
|
426
|
+
...(options.expand?.length ? { query: { expand: options.expand.join(",") } } : {}),
|
|
427
|
+
signal: options.signal,
|
|
428
|
+
...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
/** Like {@link get}, but `null` when there is no such record (or a policy hides it). */
|
|
432
|
+
async maybeGet(id, options = {}) {
|
|
433
|
+
try {
|
|
434
|
+
return await this.get(id, options);
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
if (error instanceof errors_js_1.NotFoundError)
|
|
438
|
+
return null;
|
|
439
|
+
throw error;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
/** Create a record; returns it with its server-assigned fields (`id`, timestamps, defaults). */
|
|
443
|
+
create(row, options = {}) {
|
|
444
|
+
return this.http.request({ method: "POST", path: this.path(), body: row, signal: options.signal });
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Create several records, a few at a time. This is **not atomic**: some can succeed while
|
|
448
|
+
* others fail, so the result lists both. With `stopOnError`, no new request starts after
|
|
449
|
+
* the first failure.
|
|
450
|
+
*/
|
|
451
|
+
async createMany(rows, options = {}) {
|
|
452
|
+
const result = { created: [], failed: [] };
|
|
453
|
+
const slots = new Array(rows.length);
|
|
454
|
+
let next = 0;
|
|
455
|
+
let stop = false;
|
|
456
|
+
const worker = async () => {
|
|
457
|
+
while (!stop) {
|
|
458
|
+
const index = next++;
|
|
459
|
+
if (index >= rows.length)
|
|
460
|
+
return;
|
|
461
|
+
try {
|
|
462
|
+
slots[index] = await this.create(rows[index], options);
|
|
463
|
+
}
|
|
464
|
+
catch (error) {
|
|
465
|
+
result.failed.push({ index, error });
|
|
466
|
+
if (options.stopOnError)
|
|
467
|
+
stop = true;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
await Promise.all(Array.from({ length: Math.max(1, Math.min(options.concurrency ?? 5, rows.length)) }, worker));
|
|
472
|
+
result.created = slots.filter((row) => row !== undefined);
|
|
473
|
+
result.failed.sort((a, b) => a.index - b.index);
|
|
474
|
+
return result;
|
|
475
|
+
}
|
|
476
|
+
/** Change the listed fields. (A `PATCH` accepts `null` for any field, even a required one.) */
|
|
477
|
+
update(id, patch, options = {}) {
|
|
478
|
+
return this.http.request({ method: "PATCH", path: this.path(id), body: patch, signal: options.signal });
|
|
479
|
+
}
|
|
480
|
+
/** Replace the record (`PUT`). */
|
|
481
|
+
replace(id, row, options = {}) {
|
|
482
|
+
return this.http.request({ method: "PUT", path: this.path(id), body: row, signal: options.signal });
|
|
483
|
+
}
|
|
484
|
+
/** Delete a record. */
|
|
485
|
+
async delete(id, options = {}) {
|
|
486
|
+
await this.http.request({ method: "DELETE", path: this.path(id), signal: options.signal });
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
exports.ResourceClient = ResourceClient;
|
|
490
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/data.ts"],"names":[],"mappings":"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"}
|