@zenstackhq/runtime 3.0.0-alpha.26 → 3.0.0-alpha.28
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/{contract-BF6mvhVn.d.cts → contract-cndmlzV3.d.cts} +15 -17
- package/dist/{contract-BF6mvhVn.d.ts → contract-cndmlzV3.d.ts} +15 -17
- package/dist/index.cjs +111 -156
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +111 -156
- package/dist/index.js.map +1 -1
- package/dist/plugins/policy/index.cjs +59 -24
- package/dist/plugins/policy/index.cjs.map +1 -1
- package/dist/plugins/policy/index.d.cts +1 -1
- package/dist/plugins/policy/index.d.ts +1 -1
- package/dist/plugins/policy/index.js +59 -24
- package/dist/plugins/policy/index.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as kysely from 'kysely';
|
|
2
|
-
import { R as RuntimePlugin, V as OnKyselyQueryArgs } from '../../contract-
|
|
2
|
+
import { R as RuntimePlugin, V as OnKyselyQueryArgs } from '../../contract-cndmlzV3.cjs';
|
|
3
3
|
import { SchemaDef } from '@zenstackhq/sdk/schema';
|
|
4
4
|
import 'decimal.js';
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as kysely from 'kysely';
|
|
2
|
-
import { R as RuntimePlugin, V as OnKyselyQueryArgs } from '../../contract-
|
|
2
|
+
import { R as RuntimePlugin, V as OnKyselyQueryArgs } from '../../contract-cndmlzV3.js';
|
|
3
3
|
import { SchemaDef } from '@zenstackhq/sdk/schema';
|
|
4
4
|
import 'decimal.js';
|
|
5
5
|
|
|
@@ -337,6 +337,16 @@ function flattenCompoundUniqueFilters(schema, model, filter) {
|
|
|
337
337
|
return result;
|
|
338
338
|
}
|
|
339
339
|
__name(flattenCompoundUniqueFilters, "flattenCompoundUniqueFilters");
|
|
340
|
+
function ensureArray(value) {
|
|
341
|
+
if (Array.isArray(value)) {
|
|
342
|
+
return value;
|
|
343
|
+
} else {
|
|
344
|
+
return [
|
|
345
|
+
value
|
|
346
|
+
];
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
__name(ensureArray, "ensureArray");
|
|
340
350
|
function getDelegateDescendantModels(schema, model, collected = /* @__PURE__ */ new Set()) {
|
|
341
351
|
const subModels = Object.values(schema.models).filter((m) => m.baseModel === model);
|
|
342
352
|
subModels.forEach((def) => {
|
|
@@ -399,6 +409,33 @@ var BaseCrudDialect = class {
|
|
|
399
409
|
}
|
|
400
410
|
return result;
|
|
401
411
|
}
|
|
412
|
+
buildFilterSortTake(model, args, query) {
|
|
413
|
+
let result = query;
|
|
414
|
+
if (args.where) {
|
|
415
|
+
result = result.where((eb) => this.buildFilter(eb, model, model, args?.where));
|
|
416
|
+
}
|
|
417
|
+
let negateOrderBy = false;
|
|
418
|
+
const skip = args.skip;
|
|
419
|
+
let take = args.take;
|
|
420
|
+
if (take !== void 0 && take < 0) {
|
|
421
|
+
negateOrderBy = true;
|
|
422
|
+
take = -take;
|
|
423
|
+
}
|
|
424
|
+
result = this.buildSkipTake(result, skip, take);
|
|
425
|
+
result = this.buildOrderBy(result, model, model, args.orderBy, skip !== void 0 || take !== void 0, negateOrderBy);
|
|
426
|
+
if ("distinct" in args && args.distinct) {
|
|
427
|
+
const distinct = ensureArray(args.distinct);
|
|
428
|
+
if (this.supportsDistinctOn) {
|
|
429
|
+
result = result.distinctOn(distinct.map((f) => sql.ref(`${model}.${f}`)));
|
|
430
|
+
} else {
|
|
431
|
+
throw new QueryError(`"distinct" is not supported by "${this.schema.provider.type}" provider`);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
if (args.cursor) {
|
|
435
|
+
result = this.buildCursorFilter(model, result, args.cursor, args.orderBy, negateOrderBy);
|
|
436
|
+
}
|
|
437
|
+
return result;
|
|
438
|
+
}
|
|
402
439
|
buildFilter(eb, model, modelAlias, where) {
|
|
403
440
|
if (where === true || where === void 0) {
|
|
404
441
|
return this.true(eb);
|
|
@@ -436,6 +473,26 @@ var BaseCrudDialect = class {
|
|
|
436
473
|
}
|
|
437
474
|
return result;
|
|
438
475
|
}
|
|
476
|
+
buildCursorFilter(model, query, cursor, orderBy, negateOrderBy) {
|
|
477
|
+
const _orderBy = orderBy ?? makeDefaultOrderBy(this.schema, model);
|
|
478
|
+
const orderByItems = ensureArray(_orderBy).flatMap((obj) => Object.entries(obj));
|
|
479
|
+
const eb = expressionBuilder();
|
|
480
|
+
const cursorFilter = this.buildFilter(eb, model, model, cursor);
|
|
481
|
+
let result = query;
|
|
482
|
+
const filters = [];
|
|
483
|
+
for (let i = orderByItems.length - 1; i >= 0; i--) {
|
|
484
|
+
const andFilters = [];
|
|
485
|
+
for (let j = 0; j <= i; j++) {
|
|
486
|
+
const [field, order] = orderByItems[j];
|
|
487
|
+
const _order = negateOrderBy ? order === "asc" ? "desc" : "asc" : order;
|
|
488
|
+
const op = j === i ? _order === "asc" ? ">=" : "<=" : "=";
|
|
489
|
+
andFilters.push(eb(eb.ref(`${model}.${field}`), op, eb.selectFrom(model).select(`${model}.${field}`).where(cursorFilter)));
|
|
490
|
+
}
|
|
491
|
+
filters.push(eb.and(andFilters));
|
|
492
|
+
}
|
|
493
|
+
result = result.where((eb2) => eb2.or(filters));
|
|
494
|
+
return result;
|
|
495
|
+
}
|
|
439
496
|
isLogicalCombinator(key) {
|
|
440
497
|
return LOGICAL_COMBINATORS.includes(key);
|
|
441
498
|
}
|
|
@@ -962,18 +1019,7 @@ var PostgresCrudDialect = class extends BaseCrudDialect {
|
|
|
962
1019
|
let subQuery = this.buildSelectModel(eb, relationModel);
|
|
963
1020
|
subQuery = this.buildSelectAllFields(relationModel, subQuery, typeof payload === "object" ? payload?.omit : void 0);
|
|
964
1021
|
if (payload && typeof payload === "object") {
|
|
965
|
-
|
|
966
|
-
subQuery = subQuery.where((eb2) => this.buildFilter(eb2, relationModel, relationModel, payload.where));
|
|
967
|
-
}
|
|
968
|
-
const skip = payload.skip;
|
|
969
|
-
let take = payload.take;
|
|
970
|
-
let negateOrderBy = false;
|
|
971
|
-
if (take !== void 0 && take < 0) {
|
|
972
|
-
negateOrderBy = true;
|
|
973
|
-
take = -take;
|
|
974
|
-
}
|
|
975
|
-
subQuery = this.buildSkipTake(subQuery, skip, take);
|
|
976
|
-
subQuery = this.buildOrderBy(subQuery, relationModel, relationModel, payload.orderBy, skip !== void 0 || take !== void 0, negateOrderBy);
|
|
1022
|
+
subQuery = this.buildFilterSortTake(relationModel, payload, subQuery);
|
|
977
1023
|
}
|
|
978
1024
|
const m2m = getManyToManyRelation(this.schema, model, relationField);
|
|
979
1025
|
if (m2m) {
|
|
@@ -1136,18 +1182,7 @@ var SqliteCrudDialect = class extends BaseCrudDialect {
|
|
|
1136
1182
|
let subQuery = this.buildSelectModel(eb, relationModel);
|
|
1137
1183
|
subQuery = this.buildSelectAllFields(relationModel, subQuery, typeof payload === "object" ? payload?.omit : void 0);
|
|
1138
1184
|
if (payload && typeof payload === "object") {
|
|
1139
|
-
|
|
1140
|
-
subQuery = subQuery.where((eb2) => this.buildFilter(eb2, relationModel, relationModel, payload.where));
|
|
1141
|
-
}
|
|
1142
|
-
const skip = payload.skip;
|
|
1143
|
-
let take = payload.take;
|
|
1144
|
-
let negateOrderBy = false;
|
|
1145
|
-
if (take !== void 0 && take < 0) {
|
|
1146
|
-
negateOrderBy = true;
|
|
1147
|
-
take = -take;
|
|
1148
|
-
}
|
|
1149
|
-
subQuery = this.buildSkipTake(subQuery, skip, take);
|
|
1150
|
-
subQuery = this.buildOrderBy(subQuery, relationModel, relationModel, payload.orderBy, skip !== void 0 || take !== void 0, negateOrderBy);
|
|
1185
|
+
subQuery = this.buildFilterSortTake(relationModel, payload, subQuery);
|
|
1151
1186
|
}
|
|
1152
1187
|
const m2m = getManyToManyRelation(this.schema, model, relationField);
|
|
1153
1188
|
if (m2m) {
|