@protobase/server 0.22.9 → 0.22.11
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/check-views.js +10 -10
- package/dist/view-access.js +14 -6
- package/package.json +4 -4
package/dist/check-views.js
CHANGED
|
@@ -29,9 +29,9 @@ const sensitiveErrors = (view, model) => {
|
|
|
29
29
|
["a list display", (view.list?.displays ?? []).flatMap(displayFields)],
|
|
30
30
|
["a filter", view.filters.flatMap((widget) => widget.kind === "flags" ? widget.fields : [widget.field])],
|
|
31
31
|
["the chart", view.chart ? chartFields(view.chart) : []],
|
|
32
|
-
["the sidebar", view.layout.flatMap((item) => item.kind === "sidebar" ? item.fields : [])],
|
|
33
|
-
["a map", view.layout.flatMap((item) => item.kind === "map" ? [item.latitude, item.longitude] : [])],
|
|
34
|
-
["a gallery", view.layout.flatMap((item) => item.kind === "gallery" && item.image !== void 0 ? [item.image] : [])],
|
|
32
|
+
["the sidebar", layoutItems(view.layout).flatMap((item) => item.kind === "sidebar" ? item.fields : [])],
|
|
33
|
+
["a map", layoutItems(view.layout).flatMap((item) => item.kind === "map" ? [item.latitude, item.longitude] : [])],
|
|
34
|
+
["a gallery", layoutItems(view.layout).flatMap((item) => item.kind === "gallery" && item.image !== void 0 ? [item.image] : [])],
|
|
35
35
|
["the recent records", view.nav?.recent ? [view.nav.recent.status] : []],
|
|
36
36
|
["an action", view.actions.flatMap((action) => actionFields(action.run))]
|
|
37
37
|
].flatMap(([place, names]) => [...new Set(names.filter(sensitive))].map((name) => `sensitive field "${name}" cannot be in ${place}`));
|
|
@@ -99,8 +99,8 @@ const unknownFieldErrors = (view, model) => {
|
|
|
99
99
|
const unknown = (names, what) => names.filter((name) => !Object.hasOwn(model.fields, name)).map((name) => `${what} names field "${name}", which ${model.name} does not have`);
|
|
100
100
|
return [
|
|
101
101
|
...(view.list?.displays ?? []).flatMap((display) => unknown(displayFields(display), `display "${display.name}"`)),
|
|
102
|
-
...view.layout.flatMap((item) => item.kind === "custom" ? unknown(fieldRefsIn(item.props), `custom section ${item.component}`) : []),
|
|
103
|
-
...view.layout.flatMap((item) => item.kind === "gallery" && item.image !== void 0 ? unknown([item.image], `gallery "${item.title}"`) : [])
|
|
102
|
+
...layoutItems(view.layout).flatMap((item) => item.kind === "custom" ? unknown(fieldRefsIn(item.props), `custom section ${item.component}`) : []),
|
|
103
|
+
...layoutItems(view.layout).flatMap((item) => item.kind === "gallery" && item.image !== void 0 ? unknown([item.image], `gallery "${item.title}"`) : [])
|
|
104
104
|
];
|
|
105
105
|
};
|
|
106
106
|
const widgetErrors = (view, model, fieldTypes) => Object.entries(view.fields).flatMap(([name, hints]) => {
|
|
@@ -127,7 +127,7 @@ const galleryErrors = (item, resource, model, models) => {
|
|
|
127
127
|
const image = item.image === void 0 ? void 0 : model.fields[item.image];
|
|
128
128
|
return [...image && image.type !== "file" ? [`"${item.image}" is not a file field`] : [], ...item.photos ? cardPhotosErrors(item.photos, resource, models).map((error) => `photos: ${error}`) : []];
|
|
129
129
|
};
|
|
130
|
-
const conditionErrors = (view, models) => view.layout.flatMap((item) => {
|
|
130
|
+
const conditionErrors = (view, models) => layoutItems(view.layout).flatMap((item) => {
|
|
131
131
|
if (item.kind !== "section" && item.kind !== "sidebar" && item.kind !== "related") return [];
|
|
132
132
|
if (!isRecordCondition(item.when)) return [];
|
|
133
133
|
const place = item.kind === "sidebar" ? "sidebar" : `${item.kind} "${item.title}"`;
|
|
@@ -156,17 +156,17 @@ const checkViews = (registry, views, pages = [], fieldTypes = {}) => {
|
|
|
156
156
|
const photos = [
|
|
157
157
|
...(view.list?.displays ?? []).flatMap((display) => display.kind === "cards" && display.photos ? cardPhotosErrors(display.photos, view.resource, models).map((error) => `display "${display.name}" photos: ${error}`) : []),
|
|
158
158
|
...sharedPhotosErrors(view),
|
|
159
|
-
...view.layout.flatMap((item) => item.kind === "gallery" ? galleryErrors(item, view.resource, model, models).map((error) => `gallery "${item.title}": ${error}`) : [])
|
|
159
|
+
...layoutItems(view.layout).flatMap((item) => item.kind === "gallery" ? galleryErrors(item, view.resource, model, models).map((error) => `gallery "${item.title}": ${error}`) : [])
|
|
160
160
|
];
|
|
161
161
|
const favorites = (view.list?.displays ?? []).flatMap((display) => display.kind === "cards" && display.favorite ? [...cardFavoriteErrors(display.favorite, view.resource, models), ...favoriteOwnerErrors(display.favorite, models)].map((error) => `display "${display.name}" favorite: ${error}`) : []);
|
|
162
162
|
const listOf = view.listOf === void 0 ? [] : listOfErrors(model, view.listOf, models).map((error) => `listOf: ${error}`);
|
|
163
163
|
const searches = [...view.saveSearch ? saveSearchErrors(view.saveSearch, view.resource, models, views).map((error) => `saveSearch: ${error}`) : [], ...view.searchesOf ? searchesOfErrors(view.searchesOf, view.resource, models).map((error) => `searchesOf: ${error}`) : []];
|
|
164
|
-
const maps = [...view.layout.flatMap((item) => item.kind === "map" ? mapErrors(item, model).map((error) => `map "${item.title}": ${error}`) : []), ...(view.list?.displays ?? []).flatMap((display) => display.kind === "map" ? mapDisplayErrors(display, model).map((error) => `display "${display.name}": ${error}`) : [])];
|
|
164
|
+
const maps = [...layoutItems(view.layout).flatMap((item) => item.kind === "map" ? mapErrors(item, model).map((error) => `map "${item.title}": ${error}`) : []), ...(view.list?.displays ?? []).flatMap((display) => display.kind === "map" ? mapDisplayErrors(display, model).map((error) => `display "${display.name}": ${error}`) : [])];
|
|
165
165
|
const boards = (view.list?.displays ?? []).flatMap((display) => display.kind === "board" ? boardErrors(display, model).map((error) => `display "${display.name}": ${error}`) : []);
|
|
166
166
|
const calendars = (view.list?.displays ?? []).flatMap((display) => display.kind === "calendar" ? calendarErrors(display, model).map((error) => `display "${display.name}": ${error}`) : []);
|
|
167
167
|
const chart = view.chart ? chartErrors(view.chart, model).map((error) => `chart: ${error}`) : [];
|
|
168
|
-
const history = model.history ? [] : view.layout.flatMap((item) => item.kind === "history" ? [`history "${item.title}" needs .history() on resource "${view.resource}"`] : []);
|
|
169
|
-
const comments = model.comments ? [] : view.layout.flatMap((item) => item.kind === "comments" ? [`comments "${item.title}" needs .comments() on resource "${view.resource}"`] : []);
|
|
168
|
+
const history = model.history ? [] : layoutItems(view.layout).flatMap((item) => item.kind === "history" ? [`history "${item.title}" needs .history() on resource "${view.resource}"`] : []);
|
|
169
|
+
const comments = model.comments ? [] : layoutItems(view.layout).flatMap((item) => item.kind === "comments" ? [`comments "${item.title}" needs .comments() on resource "${view.resource}"`] : []);
|
|
170
170
|
return [
|
|
171
171
|
...sensitiveErrors(view, model),
|
|
172
172
|
...unknownFieldErrors(view, model),
|
package/dist/view-access.js
CHANGED
|
@@ -176,13 +176,8 @@ const layoutShape = (resource, model, models) => {
|
|
|
176
176
|
fields: shapes.list(shapes.field, { nonEmpty: true })
|
|
177
177
|
}, { requires: ["fields", "when"] });
|
|
178
178
|
const related = shapes.map((item) => pruneRelated(item, resource, models));
|
|
179
|
-
|
|
179
|
+
const main = {
|
|
180
180
|
section,
|
|
181
|
-
sidebar: shapes.object({
|
|
182
|
-
kind: shapes.data,
|
|
183
|
-
fields: shapes.list(shapes.field, { nonEmpty: true }),
|
|
184
|
-
when
|
|
185
|
-
}, { requires: ["fields", "when"] }),
|
|
186
181
|
related,
|
|
187
182
|
group: shapes.object({
|
|
188
183
|
kind: shapes.data,
|
|
@@ -223,6 +218,19 @@ const layoutShape = (resource, model, models) => {
|
|
|
223
218
|
title: shapes.data,
|
|
224
219
|
when: shapes.data
|
|
225
220
|
})
|
|
221
|
+
};
|
|
222
|
+
return shapes.oneOf({
|
|
223
|
+
...main,
|
|
224
|
+
sidebar: shapes.object({
|
|
225
|
+
kind: shapes.data,
|
|
226
|
+
fields: shapes.list(shapes.field, { nonEmpty: true }),
|
|
227
|
+
when
|
|
228
|
+
}, { requires: ["fields", "when"] }),
|
|
229
|
+
tab: shapes.object({
|
|
230
|
+
kind: shapes.data,
|
|
231
|
+
title: shapes.data,
|
|
232
|
+
items: shapes.list(shapes.oneOf(main), { nonEmpty: true })
|
|
233
|
+
}, { requires: ["items"] })
|
|
226
234
|
});
|
|
227
235
|
};
|
|
228
236
|
const linkShape = (model, models) => shapes.map((run) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@protobase/server",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.11",
|
|
4
4
|
"description": "The Protobase REST API as a Hono app, with Better Auth sign-in.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@better-auth/passkey": "^1.7.7",
|
|
33
33
|
"@better-auth/sso": "^1.7.7",
|
|
34
|
-
"@protobase/layout": "0.22.
|
|
35
|
-
"@protobase/query": "0.22.
|
|
36
|
-
"@protobase/schema": "0.22.
|
|
34
|
+
"@protobase/layout": "0.22.11",
|
|
35
|
+
"@protobase/query": "0.22.11",
|
|
36
|
+
"@protobase/schema": "0.22.11",
|
|
37
37
|
"@react-email/render": "^2.1.0",
|
|
38
38
|
"@scalar/hono-api-reference": "^0.12.10",
|
|
39
39
|
"@sentry/core": "^11.7.0",
|