velocious 1.0.659 → 1.0.660
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 +1 -1
- package/build/frontend-model-controller.js +15 -2
- package/build/frontend-models/query.js +43 -0
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +15 -3
- package/build/src/frontend-models/query.d.ts +6 -0
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +40 -1
- package/package.json +1 -1
- package/src/frontend-model-controller.js +15 -2
- package/src/frontend-models/query.js +43 -0
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ import {frontendModelResourceClassFromDefinition, frontendModelResourceConfigura
|
|
|
10
10
|
import {createOfflineGrantFromBootstrap, verifyOfflineGrant} from "./sync/offline-grant.js"
|
|
11
11
|
import {serverChangeFeedStoreForConfiguration} from "./sync/server-change-feed.js"
|
|
12
12
|
import {mutationIdempotencyKey, verifySignedMutation} from "./sync/device-identity.js"
|
|
13
|
-
import {FrontendModelQueryError, normalizeGroup as normalizeQueryGroup, normalizeJoins as normalizeQueryJoins, normalizePluck as normalizeQueryPluck, normalizePreload as normalizeQueryPreload, normalizeSearchOperator as normalizeQuerySearchOperator, normalizeSort as normalizeQuerySort} from "./frontend-models/query.js"
|
|
13
|
+
import {assertFrontendModelIndexPayload, FrontendModelQueryError, normalizeGroup as normalizeQueryGroup, normalizeJoins as normalizeQueryJoins, normalizePluck as normalizeQueryPluck, normalizePreload as normalizeQueryPreload, normalizeSearchOperator as normalizeQuerySearchOperator, normalizeSort as normalizeQuerySort} from "./frontend-models/query.js"
|
|
14
14
|
import {assignSafeProperty, deserializeFrontendModelTransportValue, isBackendModelInstance, serializeFrontendModelTransportValue} from "./frontend-models/transport-serialization.js"
|
|
15
15
|
import {requestDetails} from "./error-reporting/request-details.js"
|
|
16
16
|
import RoutesResolver from "./routes/resolver.js"
|
|
@@ -4455,14 +4455,27 @@ export default class FrontendModelController extends Controller {
|
|
|
4455
4455
|
}
|
|
4456
4456
|
|
|
4457
4457
|
try {
|
|
4458
|
+
let indexPayload = {}
|
|
4459
|
+
|
|
4460
|
+
if (commandType === "index") {
|
|
4461
|
+
try {
|
|
4462
|
+
indexPayload = assertFrontendModelIndexPayload(payload)
|
|
4463
|
+
} catch (error) {
|
|
4464
|
+
throwFrontendModelQueryErrorForParserError(error)
|
|
4465
|
+
}
|
|
4466
|
+
}
|
|
4467
|
+
|
|
4458
4468
|
const requestContext = captureFrontendModelRemoteRequestContext(requestEntry?.requestContext)
|
|
4459
4469
|
let responsePayload
|
|
4460
4470
|
|
|
4461
4471
|
if (isBuiltInCommand) {
|
|
4472
|
+
const commandPayload = commandType === "index"
|
|
4473
|
+
? indexPayload
|
|
4474
|
+
: (payload && typeof payload === "object" ? payload : {})
|
|
4462
4475
|
const commandParams = mergeFrontendModelRemoteRequestContext(
|
|
4463
4476
|
requestContext,
|
|
4464
4477
|
{
|
|
4465
|
-
...
|
|
4478
|
+
...commandPayload,
|
|
4466
4479
|
model
|
|
4467
4480
|
}
|
|
4468
4481
|
)
|
|
@@ -118,6 +118,28 @@ export class FrontendModelQueryError extends Error {
|
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
const FRONTEND_MODEL_INDEX_PAYLOAD_KEYS = new Set([
|
|
122
|
+
"abilities",
|
|
123
|
+
"count",
|
|
124
|
+
"distinct",
|
|
125
|
+
"group",
|
|
126
|
+
"joins",
|
|
127
|
+
"limit",
|
|
128
|
+
"offset",
|
|
129
|
+
"page",
|
|
130
|
+
"perPage",
|
|
131
|
+
"pluck",
|
|
132
|
+
"preload",
|
|
133
|
+
"queryData",
|
|
134
|
+
"ransack",
|
|
135
|
+
"searches",
|
|
136
|
+
"select",
|
|
137
|
+
"selectsExtra",
|
|
138
|
+
"sort",
|
|
139
|
+
"where",
|
|
140
|
+
"withCount"
|
|
141
|
+
])
|
|
142
|
+
|
|
121
143
|
/**
|
|
122
144
|
* Builds a query descriptor error.
|
|
123
145
|
* @param {string} message - Error message.
|
|
@@ -127,6 +149,27 @@ function frontendModelQueryError(message) {
|
|
|
127
149
|
return new FrontendModelQueryError(message)
|
|
128
150
|
}
|
|
129
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Asserts the raw payload accepted by a shared frontend-model index command.
|
|
154
|
+
* @param {ReturnType<typeof JSON.parse>} payload - Raw index payload.
|
|
155
|
+
* @returns {Record<string, ReturnType<typeof JSON.parse>>} - Valid index payload.
|
|
156
|
+
*/
|
|
157
|
+
export function assertFrontendModelIndexPayload(payload) {
|
|
158
|
+
if (payload == null) return {}
|
|
159
|
+
|
|
160
|
+
if (!isPlainObject(payload)) {
|
|
161
|
+
throw frontendModelQueryError("Expected frontend-model index payload to be a plain object")
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
for (const payloadKey of Object.keys(payload)) {
|
|
165
|
+
if (!FRONTEND_MODEL_INDEX_PAYLOAD_KEYS.has(payloadKey)) {
|
|
166
|
+
throw frontendModelQueryError(`Unknown frontend-model index payload key "${payloadKey}"`)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return payload
|
|
171
|
+
}
|
|
172
|
+
|
|
130
173
|
/**
|
|
131
174
|
* Runs the normalizePreload helper.
|
|
132
175
|
* @param {import("../database/query/index.js").NestedPreloadRecord | string | Array<string | import("../database/query/index.js").NestedPreloadRecord> | boolean | undefined | null} preload - Preload shorthand.
|