@zenstackhq/runtime 2.15.1 → 3.0.0-alpha.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/LICENSE +1 -1
- package/dist/client.cjs +6094 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.cts +19 -0
- package/dist/client.d.ts +19 -0
- package/dist/client.js +6060 -0
- package/dist/client.js.map +1 -0
- package/dist/contract-DguafRNB.d.cts +1272 -0
- package/dist/contract-DguafRNB.d.ts +1272 -0
- package/dist/index.cjs +6088 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +14 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +6057 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/policy.cjs +2343 -0
- package/dist/plugins/policy.cjs.map +1 -0
- package/dist/plugins/policy.d.cts +24 -0
- package/dist/plugins/policy.d.ts +24 -0
- package/dist/plugins/policy.js +2307 -0
- package/dist/plugins/policy.js.map +1 -0
- package/dist/schema.cjs +110 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +29 -0
- package/dist/schema.d.ts +29 -0
- package/dist/schema.js +85 -0
- package/dist/schema.js.map +1 -0
- package/dist/utils/pg-utils.cjs +39 -0
- package/dist/utils/pg-utils.cjs.map +1 -0
- package/dist/utils/pg-utils.d.cts +8 -0
- package/dist/utils/pg-utils.d.ts +8 -0
- package/dist/utils/pg-utils.js +16 -0
- package/dist/utils/pg-utils.js.map +1 -0
- package/{browser/index.js → dist/utils/sqlite-utils.cjs} +21 -37
- package/dist/utils/sqlite-utils.cjs.map +1 -0
- package/dist/utils/sqlite-utils.d.cts +8 -0
- package/dist/utils/sqlite-utils.d.ts +8 -0
- package/dist/utils/sqlite-utils.js +22 -0
- package/dist/utils/sqlite-utils.js.map +1 -0
- package/package.json +105 -114
- package/README.md +0 -5
- package/browser/index.d.mts +0 -13
- package/browser/index.d.ts +0 -13
- package/browser/index.js.map +0 -1
- package/browser/index.mjs +0 -33
- package/browser/index.mjs.map +0 -1
- package/constants.d.ts +0 -62
- package/constants.js +0 -76
- package/constants.js.map +0 -1
- package/cross/index.d.mts +0 -379
- package/cross/index.d.ts +0 -379
- package/cross/index.js +0 -903
- package/cross/index.js.map +0 -1
- package/cross/index.mjs +0 -861
- package/cross/index.mjs.map +0 -1
- package/edge.d.ts +0 -1
- package/edge.js +0 -18
- package/edge.js.map +0 -1
- package/encryption/index.d.ts +0 -25
- package/encryption/index.js +0 -74
- package/encryption/index.js.map +0 -1
- package/encryption/utils.d.ts +0 -9
- package/encryption/utils.js +0 -99
- package/encryption/utils.js.map +0 -1
- package/enhance-edge.d.ts +0 -1
- package/enhance-edge.js +0 -10
- package/enhance.d.ts +0 -1
- package/enhance.js +0 -10
- package/enhancements/edge/create-enhancement.d.ts +0 -42
- package/enhancements/edge/create-enhancement.js +0 -102
- package/enhancements/edge/create-enhancement.js.map +0 -1
- package/enhancements/edge/default-auth.d.ts +0 -8
- package/enhancements/edge/default-auth.js +0 -180
- package/enhancements/edge/default-auth.js.map +0 -1
- package/enhancements/edge/delegate.d.ts +0 -77
- package/enhancements/edge/delegate.js +0 -1294
- package/enhancements/edge/delegate.js.map +0 -1
- package/enhancements/edge/encryption.d.ts +0 -7
- package/enhancements/edge/encryption.js +0 -150
- package/enhancements/edge/encryption.js.map +0 -1
- package/enhancements/edge/index.d.ts +0 -4
- package/enhancements/edge/index.js +0 -21
- package/enhancements/edge/index.js.map +0 -1
- package/enhancements/edge/json-processor.d.ts +0 -7
- package/enhancements/edge/json-processor.js +0 -89
- package/enhancements/edge/json-processor.js.map +0 -1
- package/enhancements/edge/logger.d.ts +0 -29
- package/enhancements/edge/logger.js +0 -65
- package/enhancements/edge/logger.js.map +0 -1
- package/enhancements/edge/omit.d.ts +0 -7
- package/enhancements/edge/omit.js +0 -96
- package/enhancements/edge/omit.js.map +0 -1
- package/enhancements/edge/password.d.ts +0 -7
- package/enhancements/edge/password.js +0 -64
- package/enhancements/edge/password.js.map +0 -1
- package/enhancements/edge/policy/check-utils.d.ts +0 -5
- package/enhancements/edge/policy/check-utils.js +0 -20
- package/enhancements/edge/policy/check-utils.js.map +0 -1
- package/enhancements/edge/policy/handler.d.ts +0 -100
- package/enhancements/edge/policy/handler.js +0 -1442
- package/enhancements/edge/policy/handler.js.map +0 -1
- package/enhancements/edge/policy/index.d.ts +0 -19
- package/enhancements/edge/policy/index.js +0 -65
- package/enhancements/edge/policy/index.js.map +0 -1
- package/enhancements/edge/policy/policy-utils.d.ts +0 -181
- package/enhancements/edge/policy/policy-utils.js +0 -1357
- package/enhancements/edge/policy/policy-utils.js.map +0 -1
- package/enhancements/edge/promise.d.ts +0 -15
- package/enhancements/edge/promise.js +0 -99
- package/enhancements/edge/promise.js.map +0 -1
- package/enhancements/edge/proxy.d.ts +0 -120
- package/enhancements/edge/proxy.js +0 -287
- package/enhancements/edge/proxy.js.map +0 -1
- package/enhancements/edge/query-utils.d.ts +0 -53
- package/enhancements/edge/query-utils.js +0 -256
- package/enhancements/edge/query-utils.js.map +0 -1
- package/enhancements/edge/types.d.ts +0 -238
- package/enhancements/edge/types.js +0 -3
- package/enhancements/edge/types.js.map +0 -1
- package/enhancements/edge/utils.d.ts +0 -11
- package/enhancements/edge/utils.js +0 -49
- package/enhancements/edge/utils.js.map +0 -1
- package/enhancements/edge/where-visitor.d.ts +0 -32
- package/enhancements/edge/where-visitor.js +0 -86
- package/enhancements/edge/where-visitor.js.map +0 -1
- package/enhancements/node/create-enhancement.d.ts +0 -42
- package/enhancements/node/create-enhancement.js +0 -102
- package/enhancements/node/create-enhancement.js.map +0 -1
- package/enhancements/node/default-auth.d.ts +0 -8
- package/enhancements/node/default-auth.js +0 -180
- package/enhancements/node/default-auth.js.map +0 -1
- package/enhancements/node/delegate.d.ts +0 -77
- package/enhancements/node/delegate.js +0 -1294
- package/enhancements/node/delegate.js.map +0 -1
- package/enhancements/node/encryption.d.ts +0 -7
- package/enhancements/node/encryption.js +0 -150
- package/enhancements/node/encryption.js.map +0 -1
- package/enhancements/node/index.d.ts +0 -4
- package/enhancements/node/index.js +0 -21
- package/enhancements/node/index.js.map +0 -1
- package/enhancements/node/json-processor.d.ts +0 -7
- package/enhancements/node/json-processor.js +0 -89
- package/enhancements/node/json-processor.js.map +0 -1
- package/enhancements/node/logger.d.ts +0 -29
- package/enhancements/node/logger.js +0 -65
- package/enhancements/node/logger.js.map +0 -1
- package/enhancements/node/omit.d.ts +0 -7
- package/enhancements/node/omit.js +0 -96
- package/enhancements/node/omit.js.map +0 -1
- package/enhancements/node/password.d.ts +0 -7
- package/enhancements/node/password.js +0 -64
- package/enhancements/node/password.js.map +0 -1
- package/enhancements/node/policy/check-utils.d.ts +0 -5
- package/enhancements/node/policy/check-utils.js +0 -87
- package/enhancements/node/policy/check-utils.js.map +0 -1
- package/enhancements/node/policy/constraint-solver.d.ts +0 -27
- package/enhancements/node/policy/constraint-solver.js +0 -164
- package/enhancements/node/policy/constraint-solver.js.map +0 -1
- package/enhancements/node/policy/handler.d.ts +0 -100
- package/enhancements/node/policy/handler.js +0 -1442
- package/enhancements/node/policy/handler.js.map +0 -1
- package/enhancements/node/policy/index.d.ts +0 -19
- package/enhancements/node/policy/index.js +0 -65
- package/enhancements/node/policy/index.js.map +0 -1
- package/enhancements/node/policy/policy-utils.d.ts +0 -181
- package/enhancements/node/policy/policy-utils.js +0 -1357
- package/enhancements/node/policy/policy-utils.js.map +0 -1
- package/enhancements/node/promise.d.ts +0 -15
- package/enhancements/node/promise.js +0 -99
- package/enhancements/node/promise.js.map +0 -1
- package/enhancements/node/proxy.d.ts +0 -120
- package/enhancements/node/proxy.js +0 -287
- package/enhancements/node/proxy.js.map +0 -1
- package/enhancements/node/query-utils.d.ts +0 -53
- package/enhancements/node/query-utils.js +0 -256
- package/enhancements/node/query-utils.js.map +0 -1
- package/enhancements/node/types.d.ts +0 -238
- package/enhancements/node/types.js +0 -3
- package/enhancements/node/types.js.map +0 -1
- package/enhancements/node/utils.d.ts +0 -11
- package/enhancements/node/utils.js +0 -49
- package/enhancements/node/utils.js.map +0 -1
- package/enhancements/node/where-visitor.d.ts +0 -32
- package/enhancements/node/where-visitor.js +0 -86
- package/enhancements/node/where-visitor.js.map +0 -1
- package/error.d.ts +0 -11
- package/error.js +0 -22
- package/error.js.map +0 -1
- package/index.d.ts +0 -7
- package/index.js +0 -24
- package/index.js.map +0 -1
- package/model-meta.d.ts +0 -1
- package/model-meta.js +0 -10
- package/models.d.ts +0 -1
- package/models.js +0 -1
- package/types.d.ts +0 -180
- package/types.js +0 -4
- package/types.js.map +0 -1
- package/validation.d.ts +0 -24
- package/validation.js +0 -52
- package/validation.js.map +0 -1
- package/version.d.ts +0 -5
- package/version.js +0 -35
- package/version.js.map +0 -1
- package/zod/index.d.ts +0 -3
- package/zod/index.js +0 -5
- package/zod/input.d.ts +0 -1
- package/zod/input.js +0 -8
- package/zod/models.d.ts +0 -1
- package/zod/models.js +0 -8
- package/zod/objects.d.ts +0 -1
- package/zod/objects.js +0 -8
- package/zod-utils.d.ts +0 -12
- package/zod-utils.js +0 -97
- package/zod-utils.js.map +0 -1
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { type FieldInfo, type NestedWriteVisitorContext } from '../../cross';
|
|
2
|
-
import type { CrudContract, DbClientContract } from '../../types';
|
|
3
|
-
import { InternalEnhancementOptions } from './create-enhancement';
|
|
4
|
-
import { Logger } from './logger';
|
|
5
|
-
export declare class QueryUtils {
|
|
6
|
-
private readonly prisma;
|
|
7
|
-
protected readonly options: InternalEnhancementOptions;
|
|
8
|
-
protected readonly logger: Logger;
|
|
9
|
-
constructor(prisma: DbClientContract, options: InternalEnhancementOptions);
|
|
10
|
-
getIdFields(model: string): FieldInfo[];
|
|
11
|
-
makeIdSelection(model: string): any;
|
|
12
|
-
getEntityIds(model: string, entityData: any): Record<string, unknown>;
|
|
13
|
-
/**
|
|
14
|
-
* Initiates a transaction.
|
|
15
|
-
*/
|
|
16
|
-
transaction<T>(db: CrudContract, action: (tx: CrudContract) => Promise<T>): Promise<T>;
|
|
17
|
-
/**
|
|
18
|
-
* Builds a reversed query for the given nested path.
|
|
19
|
-
*/
|
|
20
|
-
buildReversedQuery(db: CrudContract, context: NestedWriteVisitorContext, forMutationPayload?: boolean, uncheckedOperation?: boolean): Promise<any>;
|
|
21
|
-
/**
|
|
22
|
-
* Composes a compound unique field from multiple fields. E.g.: { a: '1', b: '1' } => { a_b: { a: '1', b: '1' } }.
|
|
23
|
-
*/
|
|
24
|
-
composeCompoundUniqueField(model: string, fieldData: any): any;
|
|
25
|
-
/**
|
|
26
|
-
* Flattens a generated unique field. E.g.: { a_b: { a: '1', b: '1' } } => { a: '1', b: '1' }.
|
|
27
|
-
*/
|
|
28
|
-
flattenGeneratedUniqueField(model: string, args: any): void;
|
|
29
|
-
validationError(message: string): Error;
|
|
30
|
-
unknownError(message: string): Error;
|
|
31
|
-
getModelFields(model: string): Record<string, FieldInfo> | undefined;
|
|
32
|
-
/**
|
|
33
|
-
* Gets information for a specific model field.
|
|
34
|
-
*/
|
|
35
|
-
getModelField(model: string, field: string): FieldInfo | undefined;
|
|
36
|
-
/**
|
|
37
|
-
* Clones an object and makes sure it's not empty.
|
|
38
|
-
*/
|
|
39
|
-
safeClone(value: unknown): any;
|
|
40
|
-
getDelegateConcreteModel(model: string, data: any): string;
|
|
41
|
-
/**
|
|
42
|
-
* Gets relation info for a foreign key field.
|
|
43
|
-
*/
|
|
44
|
-
getRelationForForeignKey(model: string, fkField: string): {
|
|
45
|
-
relation: FieldInfo;
|
|
46
|
-
idField: string;
|
|
47
|
-
fkField: string;
|
|
48
|
-
} | undefined;
|
|
49
|
-
/**
|
|
50
|
-
* Gets fields of object with defined values.
|
|
51
|
-
*/
|
|
52
|
-
getFieldsWithDefinedValues(data: object): string[];
|
|
53
|
-
}
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.QueryUtils = void 0;
|
|
13
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
14
|
-
const cross_1 = require("../../cross");
|
|
15
|
-
const version_1 = require("../../version");
|
|
16
|
-
const edge_1 = require("../edge");
|
|
17
|
-
const logger_1 = require("./logger");
|
|
18
|
-
const utils_1 = require("./utils");
|
|
19
|
-
class QueryUtils {
|
|
20
|
-
constructor(prisma, options) {
|
|
21
|
-
this.prisma = prisma;
|
|
22
|
-
this.options = options;
|
|
23
|
-
this.logger = new logger_1.Logger(prisma);
|
|
24
|
-
}
|
|
25
|
-
getIdFields(model) {
|
|
26
|
-
return (0, cross_1.getIdFields)(this.options.modelMeta, model, true);
|
|
27
|
-
}
|
|
28
|
-
makeIdSelection(model) {
|
|
29
|
-
const idFields = this.getIdFields(model);
|
|
30
|
-
return Object.assign({}, ...idFields.map((f) => ({ [f.name]: true })));
|
|
31
|
-
}
|
|
32
|
-
getEntityIds(model, entityData) {
|
|
33
|
-
const idFields = this.getIdFields(model);
|
|
34
|
-
const result = {};
|
|
35
|
-
for (const idField of idFields) {
|
|
36
|
-
result[idField.name] = entityData[idField.name];
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Initiates a transaction.
|
|
42
|
-
*/
|
|
43
|
-
transaction(db, action) {
|
|
44
|
-
const fullDb = db;
|
|
45
|
-
if (fullDb['$transaction']) {
|
|
46
|
-
return fullDb.$transaction((tx) => {
|
|
47
|
-
tx[Symbol.for('nodejs.util.inspect.custom')] = 'PrismaClient$tx';
|
|
48
|
-
return action(tx);
|
|
49
|
-
}, {
|
|
50
|
-
maxWait: this.options.transactionMaxWait,
|
|
51
|
-
timeout: this.options.transactionTimeout,
|
|
52
|
-
isolationLevel: this.options.transactionIsolationLevel,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
// already in transaction, don't nest
|
|
57
|
-
return action(db);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Builds a reversed query for the given nested path.
|
|
62
|
-
*/
|
|
63
|
-
buildReversedQuery(db_1, context_1) {
|
|
64
|
-
return __awaiter(this, arguments, void 0, function* (db, context, forMutationPayload = false, uncheckedOperation = false) {
|
|
65
|
-
let result, currQuery;
|
|
66
|
-
let currField;
|
|
67
|
-
for (let i = context.nestingPath.length - 1; i >= 0; i--) {
|
|
68
|
-
const { field, model, where } = context.nestingPath[i];
|
|
69
|
-
// never modify the original where because it's shared in the structure
|
|
70
|
-
const visitWhere = Object.assign({}, where);
|
|
71
|
-
if (model && where) {
|
|
72
|
-
// make sure composite unique condition is flattened
|
|
73
|
-
this.flattenGeneratedUniqueField(model, visitWhere);
|
|
74
|
-
}
|
|
75
|
-
if (!result) {
|
|
76
|
-
// first segment (bottom), just use its where clause
|
|
77
|
-
result = currQuery = Object.assign({}, visitWhere);
|
|
78
|
-
currField = field;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
if (!currField) {
|
|
82
|
-
throw this.unknownError(`missing field in nested path`);
|
|
83
|
-
}
|
|
84
|
-
if (!currField.backLink) {
|
|
85
|
-
throw this.unknownError(`field ${currField.type}.${currField.name} doesn't have a backLink`);
|
|
86
|
-
}
|
|
87
|
-
const backLinkField = this.getModelField(currField.type, currField.backLink);
|
|
88
|
-
if (!backLinkField) {
|
|
89
|
-
throw this.unknownError(`missing backLink field ${currField.backLink} in ${currField.type}`);
|
|
90
|
-
}
|
|
91
|
-
if (backLinkField.isArray && !forMutationPayload) {
|
|
92
|
-
// many-side of relationship, wrap with "some" query
|
|
93
|
-
currQuery[currField.backLink] = { some: Object.assign({}, visitWhere) };
|
|
94
|
-
currQuery = currQuery[currField.backLink].some;
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
const fkMapping = where && backLinkField.isRelationOwner && backLinkField.foreignKeyMapping;
|
|
98
|
-
// calculate if we should preserve the relation condition (e.g., { user: { id: 1 } })
|
|
99
|
-
const shouldPreserveRelationCondition =
|
|
100
|
-
// doing a mutation
|
|
101
|
-
forMutationPayload &&
|
|
102
|
-
// and it's not an unchecked mutate
|
|
103
|
-
!uncheckedOperation &&
|
|
104
|
-
// and the current segment is the direct parent (the last one is the mutate itself),
|
|
105
|
-
// the relation condition should be preserved and will be converted to a "connect" later
|
|
106
|
-
i === context.nestingPath.length - 2;
|
|
107
|
-
if (fkMapping && !shouldPreserveRelationCondition) {
|
|
108
|
-
// turn relation condition into foreign key condition, e.g.:
|
|
109
|
-
// { user: { id: 1 } } => { userId: 1 }
|
|
110
|
-
let parentPk = visitWhere;
|
|
111
|
-
if (Object.keys(fkMapping).some((k) => !(k in parentPk) || parentPk[k] === undefined)) {
|
|
112
|
-
// it can happen that the parent condition actually doesn't contain all id fields
|
|
113
|
-
// (when the parent condition is not a primary key but unique constraints)
|
|
114
|
-
// and in such case we need to load it to get the pks
|
|
115
|
-
if (this.options.logPrismaQuery && this.logger.enabled('info')) {
|
|
116
|
-
this.logger.info(`[reverseLookup] \`findUniqueOrThrow\` ${model}: ${(0, edge_1.formatObject)(where)}`);
|
|
117
|
-
}
|
|
118
|
-
parentPk = yield db[model].findUniqueOrThrow({
|
|
119
|
-
where,
|
|
120
|
-
select: this.makeIdSelection(model),
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
for (const [r, fk] of Object.entries(fkMapping)) {
|
|
124
|
-
currQuery[fk] = parentPk[r];
|
|
125
|
-
}
|
|
126
|
-
if (i > 0) {
|
|
127
|
-
// prepare for the next segment
|
|
128
|
-
currQuery[currField.backLink] = {};
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
// preserve the original structure
|
|
133
|
-
currQuery[currField.backLink] = Object.assign({}, visitWhere);
|
|
134
|
-
}
|
|
135
|
-
if (forMutationPayload && currQuery[currField.backLink]) {
|
|
136
|
-
// reconstruct compound unique field
|
|
137
|
-
currQuery[currField.backLink] = this.composeCompoundUniqueField(backLinkField.type, currQuery[currField.backLink]);
|
|
138
|
-
}
|
|
139
|
-
currQuery = currQuery[currField.backLink];
|
|
140
|
-
}
|
|
141
|
-
currField = field;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return result;
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Composes a compound unique field from multiple fields. E.g.: { a: '1', b: '1' } => { a_b: { a: '1', b: '1' } }.
|
|
149
|
-
*/
|
|
150
|
-
composeCompoundUniqueField(model, fieldData) {
|
|
151
|
-
const uniqueConstraints = (0, cross_1.getUniqueConstraints)(this.options.modelMeta, model);
|
|
152
|
-
if (!uniqueConstraints) {
|
|
153
|
-
return fieldData;
|
|
154
|
-
}
|
|
155
|
-
const result = this.safeClone(fieldData);
|
|
156
|
-
for (const [name, constraint] of Object.entries(uniqueConstraints)) {
|
|
157
|
-
if (constraint.fields.length > 1 && constraint.fields.every((f) => fieldData[f] !== undefined)) {
|
|
158
|
-
// multi-field unique constraint, compose it
|
|
159
|
-
result[name] = constraint.fields.reduce((prev, field) => (Object.assign(Object.assign({}, prev), { [field]: fieldData[field] })), {});
|
|
160
|
-
constraint.fields.forEach((f) => delete result[f]);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return result;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Flattens a generated unique field. E.g.: { a_b: { a: '1', b: '1' } } => { a: '1', b: '1' }.
|
|
167
|
-
*/
|
|
168
|
-
flattenGeneratedUniqueField(model, args) {
|
|
169
|
-
const uniqueConstraints = (0, cross_1.getUniqueConstraints)(this.options.modelMeta, model);
|
|
170
|
-
if (uniqueConstraints && Object.keys(uniqueConstraints).length > 0) {
|
|
171
|
-
for (const [field, value] of Object.entries(args)) {
|
|
172
|
-
if (uniqueConstraints[field] &&
|
|
173
|
-
uniqueConstraints[field].fields.length > 1 &&
|
|
174
|
-
typeof value === 'object') {
|
|
175
|
-
// multi-field unique constraint, flatten it
|
|
176
|
-
delete args[field];
|
|
177
|
-
if (value) {
|
|
178
|
-
for (const [f, v] of Object.entries(value)) {
|
|
179
|
-
args[f] = v;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
validationError(message) {
|
|
187
|
-
return (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, message);
|
|
188
|
-
}
|
|
189
|
-
unknownError(message) {
|
|
190
|
-
return (0, utils_1.prismaClientUnknownRequestError)(this.prisma, this.options.prismaModule, message, {
|
|
191
|
-
clientVersion: (0, version_1.getVersion)(),
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
getModelFields(model) {
|
|
195
|
-
var _a;
|
|
196
|
-
return (_a = (0, cross_1.getModelInfo)(this.options.modelMeta, model)) === null || _a === void 0 ? void 0 : _a.fields;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Gets information for a specific model field.
|
|
200
|
-
*/
|
|
201
|
-
getModelField(model, field) {
|
|
202
|
-
return (0, cross_1.resolveField)(this.options.modelMeta, model, field);
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Clones an object and makes sure it's not empty.
|
|
206
|
-
*/
|
|
207
|
-
safeClone(value) {
|
|
208
|
-
return value ? (0, cross_1.clone)(value) : value === undefined || value === null ? {} : value;
|
|
209
|
-
}
|
|
210
|
-
getDelegateConcreteModel(model, data) {
|
|
211
|
-
if (!data || typeof data !== 'object') {
|
|
212
|
-
return model;
|
|
213
|
-
}
|
|
214
|
-
const modelInfo = (0, cross_1.getModelInfo)(this.options.modelMeta, model);
|
|
215
|
-
if (modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.discriminator) {
|
|
216
|
-
// model has a discriminator so it can be a polymorphic base,
|
|
217
|
-
// need to find the concrete model
|
|
218
|
-
const concreteModelName = data[modelInfo.discriminator];
|
|
219
|
-
if (typeof concreteModelName === 'string' && concreteModelName) {
|
|
220
|
-
return concreteModelName;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return model;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Gets relation info for a foreign key field.
|
|
227
|
-
*/
|
|
228
|
-
getRelationForForeignKey(model, fkField) {
|
|
229
|
-
const modelInfo = (0, cross_1.getModelInfo)(this.options.modelMeta, model);
|
|
230
|
-
if (!modelInfo) {
|
|
231
|
-
return undefined;
|
|
232
|
-
}
|
|
233
|
-
for (const field of Object.values(modelInfo.fields)) {
|
|
234
|
-
if (field.foreignKeyMapping) {
|
|
235
|
-
const entry = Object.entries(field.foreignKeyMapping).find(([, v]) => v === fkField);
|
|
236
|
-
if (entry) {
|
|
237
|
-
return { relation: field, idField: entry[0], fkField: entry[1] };
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
return undefined;
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Gets fields of object with defined values.
|
|
245
|
-
*/
|
|
246
|
-
getFieldsWithDefinedValues(data) {
|
|
247
|
-
if (!data) {
|
|
248
|
-
return [];
|
|
249
|
-
}
|
|
250
|
-
return Object.entries(data)
|
|
251
|
-
.filter(([, v]) => v !== undefined)
|
|
252
|
-
.map(([k]) => k);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
exports.QueryUtils = QueryUtils;
|
|
256
|
-
//# sourceMappingURL=query-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-utils.js","sourceRoot":"","sources":["../../../src/enhancements/edge/query-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import type { CrudContract, PermissionCheckerContext, PolicyCrudKind, QueryContext } from '../../types';
|
|
2
|
-
/**
|
|
3
|
-
* Common options for PrismaClient enhancements
|
|
4
|
-
*/
|
|
5
|
-
export interface CommonEnhancementOptions {
|
|
6
|
-
/**
|
|
7
|
-
* Path for loading CLI-generated code
|
|
8
|
-
*/
|
|
9
|
-
loadPath?: string;
|
|
10
|
-
/**
|
|
11
|
-
* The `Prisma` module generated together with `PrismaClient`. You only need to
|
|
12
|
-
* pass it when you specified a custom `PrismaClient` output path. The module can
|
|
13
|
-
* be loaded like: `import { Prisma } from '<your PrismaClient output path>';`.
|
|
14
|
-
*/
|
|
15
|
-
prismaModule?: any;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* CRUD operations
|
|
19
|
-
*/
|
|
20
|
-
export type CRUD = 'create' | 'read' | 'update' | 'delete';
|
|
21
|
-
/**
|
|
22
|
-
* Function for getting policy guard with a given context
|
|
23
|
-
*/
|
|
24
|
-
export type PolicyFunc = (context: QueryContext, db: CrudContract) => object;
|
|
25
|
-
/**
|
|
26
|
-
* Function for checking an entity's data for permission
|
|
27
|
-
*/
|
|
28
|
-
export type EntityCheckerFunc = (input: any, context: QueryContext) => boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Function for checking if an operation is possibly allowed.
|
|
31
|
-
*/
|
|
32
|
-
export type PermissionCheckerFunc = (context: PermissionCheckerContext) => PermissionCheckerConstraint;
|
|
33
|
-
/**
|
|
34
|
-
* Supported checker constraint checking value types.
|
|
35
|
-
*/
|
|
36
|
-
export type ConstraintValueTypes = 'boolean' | 'number' | 'string';
|
|
37
|
-
/**
|
|
38
|
-
* Free variable constraint
|
|
39
|
-
*/
|
|
40
|
-
export type VariableConstraint = {
|
|
41
|
-
kind: 'variable';
|
|
42
|
-
name: string;
|
|
43
|
-
type: ConstraintValueTypes;
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Constant value constraint
|
|
47
|
-
*/
|
|
48
|
-
export type ValueConstraint = {
|
|
49
|
-
kind: 'value';
|
|
50
|
-
value: number | boolean | string;
|
|
51
|
-
type: ConstraintValueTypes;
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Terms for comparison constraints
|
|
55
|
-
*/
|
|
56
|
-
export type ComparisonTerm = VariableConstraint | ValueConstraint;
|
|
57
|
-
/**
|
|
58
|
-
* Comparison constraint
|
|
59
|
-
*/
|
|
60
|
-
export type ComparisonConstraint = {
|
|
61
|
-
kind: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';
|
|
62
|
-
left: ComparisonTerm;
|
|
63
|
-
right: ComparisonTerm;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Logical constraint
|
|
67
|
-
*/
|
|
68
|
-
export type LogicalConstraint = {
|
|
69
|
-
kind: 'and' | 'or' | 'not';
|
|
70
|
-
children: PermissionCheckerConstraint[];
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* Constraint delegated to another model through `check()` function call
|
|
74
|
-
* on a relation field.
|
|
75
|
-
*/
|
|
76
|
-
export type DelegateConstraint = {
|
|
77
|
-
kind: 'delegate';
|
|
78
|
-
model: string;
|
|
79
|
-
relation: string;
|
|
80
|
-
operation?: CRUD;
|
|
81
|
-
};
|
|
82
|
-
/**
|
|
83
|
-
* Operation allowability checking constraint
|
|
84
|
-
*/
|
|
85
|
-
export type PermissionCheckerConstraint = ValueConstraint | VariableConstraint | ComparisonConstraint | LogicalConstraint | DelegateConstraint;
|
|
86
|
-
/**
|
|
87
|
-
* Policy definition
|
|
88
|
-
*/
|
|
89
|
-
export type PolicyDef = {
|
|
90
|
-
policy: Record<ModelName, ModelPolicyDef>;
|
|
91
|
-
validation: Record<string, {
|
|
92
|
-
hasValidation: boolean;
|
|
93
|
-
}>;
|
|
94
|
-
authSelector?: object;
|
|
95
|
-
};
|
|
96
|
-
type ModelName = string;
|
|
97
|
-
type FieldName = string;
|
|
98
|
-
/**
|
|
99
|
-
* Policy definition for a model
|
|
100
|
-
*/
|
|
101
|
-
export type ModelPolicyDef = {
|
|
102
|
-
/**
|
|
103
|
-
* Model-level CRUD policies
|
|
104
|
-
*/
|
|
105
|
-
modelLevel: ModelCrudDef;
|
|
106
|
-
/**
|
|
107
|
-
* Field-level CRUD policies
|
|
108
|
-
*/
|
|
109
|
-
fieldLevel?: FieldCrudDef;
|
|
110
|
-
};
|
|
111
|
-
/**
|
|
112
|
-
* CRUD policy definitions for a model
|
|
113
|
-
*/
|
|
114
|
-
export type ModelCrudDef = {
|
|
115
|
-
read: ModelReadDef;
|
|
116
|
-
create: ModelCreateDef;
|
|
117
|
-
update: ModelUpdateDef;
|
|
118
|
-
delete: ModelDeleteDef;
|
|
119
|
-
postUpdate: ModelPostUpdateDef;
|
|
120
|
-
};
|
|
121
|
-
/**
|
|
122
|
-
* Information for checking entity data outside of Prisma
|
|
123
|
-
*/
|
|
124
|
-
export type EntityChecker = {
|
|
125
|
-
/**
|
|
126
|
-
* Checker function
|
|
127
|
-
*/
|
|
128
|
-
func: EntityCheckerFunc;
|
|
129
|
-
/**
|
|
130
|
-
* Selector for fetching entity data
|
|
131
|
-
*/
|
|
132
|
-
selector?: object;
|
|
133
|
-
};
|
|
134
|
-
/**
|
|
135
|
-
* Common policy definition for a CRUD operation
|
|
136
|
-
*/
|
|
137
|
-
type ModelCrudCommon = {
|
|
138
|
-
/**
|
|
139
|
-
* Prisma query guard or a constant condition
|
|
140
|
-
*/
|
|
141
|
-
guard: PolicyFunc | boolean;
|
|
142
|
-
/**
|
|
143
|
-
* Additional checker function for checking policies outside of Prisma
|
|
144
|
-
*/
|
|
145
|
-
/**
|
|
146
|
-
* Additional checker function for checking policies outside of Prisma
|
|
147
|
-
*/
|
|
148
|
-
entityChecker?: EntityChecker;
|
|
149
|
-
/**
|
|
150
|
-
* Permission checker function or a constant condition
|
|
151
|
-
*/
|
|
152
|
-
permissionChecker?: PermissionCheckerFunc | boolean;
|
|
153
|
-
};
|
|
154
|
-
/**
|
|
155
|
-
* Policy definition for reading a model
|
|
156
|
-
*/
|
|
157
|
-
type ModelReadDef = ModelCrudCommon;
|
|
158
|
-
/**
|
|
159
|
-
* Policy definition for creating a model
|
|
160
|
-
*/
|
|
161
|
-
type ModelCreateDef = ModelCrudCommon & {
|
|
162
|
-
/**
|
|
163
|
-
* Create input validation function. Only generated when a create
|
|
164
|
-
* can be approved or denied based on input values.
|
|
165
|
-
*/
|
|
166
|
-
inputChecker?: EntityCheckerFunc | boolean;
|
|
167
|
-
};
|
|
168
|
-
/**
|
|
169
|
-
* Policy definition for updating a model
|
|
170
|
-
*/
|
|
171
|
-
type ModelUpdateDef = ModelCrudCommon;
|
|
172
|
-
/**
|
|
173
|
-
* Policy definition for deleting a model
|
|
174
|
-
*/
|
|
175
|
-
type ModelDeleteDef = ModelCrudCommon;
|
|
176
|
-
/**
|
|
177
|
-
* Policy definition for post-update checking a model
|
|
178
|
-
*/
|
|
179
|
-
type ModelPostUpdateDef = Exclude<ModelCrudCommon, 'permissionChecker'> & {
|
|
180
|
-
preUpdateSelector?: object;
|
|
181
|
-
};
|
|
182
|
-
/**
|
|
183
|
-
* CRUD policy definitions for a field
|
|
184
|
-
*/
|
|
185
|
-
type FieldCrudDef = {
|
|
186
|
-
/**
|
|
187
|
-
* Field-level read policy
|
|
188
|
-
*/
|
|
189
|
-
read: Record<FieldName, FieldReadDef>;
|
|
190
|
-
/**
|
|
191
|
-
* Field-level update policy
|
|
192
|
-
*/
|
|
193
|
-
update: Record<FieldName, FieldUpdateDef>;
|
|
194
|
-
};
|
|
195
|
-
type FieldReadDef = {
|
|
196
|
-
/**
|
|
197
|
-
* Field-level Prisma query guard
|
|
198
|
-
*/
|
|
199
|
-
guard?: PolicyFunc;
|
|
200
|
-
/**
|
|
201
|
-
* Entity checker
|
|
202
|
-
*/
|
|
203
|
-
entityChecker?: EntityChecker;
|
|
204
|
-
/**
|
|
205
|
-
* Field-level read override Prisma query guard
|
|
206
|
-
*/
|
|
207
|
-
overrideGuard?: PolicyFunc;
|
|
208
|
-
/**
|
|
209
|
-
* Entity checker for override policies
|
|
210
|
-
*/
|
|
211
|
-
overrideEntityChecker?: EntityChecker;
|
|
212
|
-
};
|
|
213
|
-
type FieldUpdateDef = {
|
|
214
|
-
/**
|
|
215
|
-
* Field-level update Prisma query guard
|
|
216
|
-
*/
|
|
217
|
-
guard?: PolicyFunc;
|
|
218
|
-
/**
|
|
219
|
-
* Additional entity checker
|
|
220
|
-
*/
|
|
221
|
-
entityChecker?: EntityChecker;
|
|
222
|
-
/**
|
|
223
|
-
* Field-level update override Prisma query guard
|
|
224
|
-
*/
|
|
225
|
-
overrideGuard?: PolicyFunc;
|
|
226
|
-
/**
|
|
227
|
-
* Additional entity checker for override policies
|
|
228
|
-
*/
|
|
229
|
-
overrideEntityChecker?: EntityChecker;
|
|
230
|
-
};
|
|
231
|
-
/**
|
|
232
|
-
* Permission check API (`check()`) arguments
|
|
233
|
-
*/
|
|
234
|
-
export type PermissionCheckArgs = {
|
|
235
|
-
operation: PolicyCrudKind;
|
|
236
|
-
where?: Record<string, number | string | boolean>;
|
|
237
|
-
};
|
|
238
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/enhancements/edge/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type FieldInfo, type ModelMeta } from '../../cross';
|
|
2
|
-
import type { DbClientContract } from '../../types';
|
|
3
|
-
/**
|
|
4
|
-
* Formats an object for pretty printing.
|
|
5
|
-
*/
|
|
6
|
-
export declare function formatObject(value: any, multiLine?: boolean): string;
|
|
7
|
-
export declare function prismaClientValidationError(prisma: DbClientContract, prismaModule: any, message: string): Error;
|
|
8
|
-
export declare function prismaClientKnownRequestError(prisma: DbClientContract, prismaModule: any, ...args: unknown[]): Error;
|
|
9
|
-
export declare function prismaClientUnknownRequestError(prismaModule: any, ...args: unknown[]): Error;
|
|
10
|
-
export declare function isUnsafeMutate(model: string, args: any, modelMeta: ModelMeta): boolean;
|
|
11
|
-
export declare function isAutoIncrementIdField(field: FieldInfo): boolean | undefined;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.formatObject = formatObject;
|
|
7
|
-
exports.prismaClientValidationError = prismaClientValidationError;
|
|
8
|
-
exports.prismaClientKnownRequestError = prismaClientKnownRequestError;
|
|
9
|
-
exports.prismaClientUnknownRequestError = prismaClientUnknownRequestError;
|
|
10
|
-
exports.isUnsafeMutate = isUnsafeMutate;
|
|
11
|
-
exports.isAutoIncrementIdField = isAutoIncrementIdField;
|
|
12
|
-
const safe_json_stringify_1 = __importDefault(require("safe-json-stringify"));
|
|
13
|
-
const cross_1 = require("../../cross");
|
|
14
|
-
/**
|
|
15
|
-
* Formats an object for pretty printing.
|
|
16
|
-
*/
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
-
function formatObject(value, multiLine = true) {
|
|
19
|
-
return (0, safe_json_stringify_1.default)(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v), multiLine ? 2 : undefined);
|
|
20
|
-
}
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
-
function prismaClientValidationError(prisma, prismaModule, message) {
|
|
23
|
-
throw new prismaModule.PrismaClientValidationError(message, { clientVersion: prisma._clientVersion });
|
|
24
|
-
}
|
|
25
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
-
function prismaClientKnownRequestError(prisma, prismaModule, ...args) {
|
|
27
|
-
return new prismaModule.PrismaClientKnownRequestError(...args);
|
|
28
|
-
}
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
-
function prismaClientUnknownRequestError(prismaModule, ...args) {
|
|
31
|
-
throw new prismaModule.PrismaClientUnknownRequestError(...args);
|
|
32
|
-
}
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
-
function isUnsafeMutate(model, args, modelMeta) {
|
|
35
|
-
if (!args) {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
for (const k of Object.keys(args)) {
|
|
39
|
-
const field = (0, cross_1.resolveField)(modelMeta, model, k);
|
|
40
|
-
if (field && (isAutoIncrementIdField(field) || field.isForeignKey)) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
function isAutoIncrementIdField(field) {
|
|
47
|
-
return field.isId && field.isAutoIncrement;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/enhancements/edge/utils.ts"],"names":[],"mappings":";;;;;AAQA,oCAEC;AAGD,kEAEC;AAGD,sEAEC;AAGD,0EAEC;AAGD,wCAWC;AAED,wDAEC;AA3CD,8EAAoD;AACpD,uCAA2E;AAG3E;;GAEG;AACH,8DAA8D;AAC9D,SAAgB,YAAY,CAAC,KAAU,EAAE,SAAS,GAAG,IAAI;IACrD,OAAO,IAAA,6BAAiB,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACrH,CAAC;AAED,8DAA8D;AAC9D,SAAgB,2BAA2B,CAAC,MAAwB,EAAE,YAAiB,EAAE,OAAe;IACpG,MAAM,IAAI,YAAY,CAAC,2BAA2B,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;AAC1G,CAAC;AAED,8DAA8D;AAC9D,SAAgB,6BAA6B,CAAC,MAAwB,EAAE,YAAiB,EAAE,GAAG,IAAe;IACzG,OAAO,IAAI,YAAY,CAAC,6BAA6B,CAAC,GAAG,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,8DAA8D;AAC9D,SAAgB,+BAA+B,CAAC,YAAiB,EAAE,GAAG,IAAe;IACjF,MAAM,IAAI,YAAY,CAAC,+BAA+B,CAAC,GAAG,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,8DAA8D;AAC9D,SAAgB,cAAc,CAAC,KAAa,EAAE,IAAS,EAAE,SAAoB;IACzE,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAgB;IACnD,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,eAAe,CAAC;AAC/C,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { type FieldInfo, type ModelMeta } from '../../cross';
|
|
2
|
-
/**
|
|
3
|
-
* Context for visiting
|
|
4
|
-
*/
|
|
5
|
-
export type WhereVisitorContext = {
|
|
6
|
-
/**
|
|
7
|
-
* Parent data, can be used to replace fields
|
|
8
|
-
*/
|
|
9
|
-
parent: any;
|
|
10
|
-
/**
|
|
11
|
-
* Current field, undefined if toplevel
|
|
12
|
-
*/
|
|
13
|
-
field?: FieldInfo;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* WhereVisitor's callback actions
|
|
17
|
-
*/
|
|
18
|
-
export type WhereVisitorCallback = {
|
|
19
|
-
field?: (field: FieldInfo, data: any) => Promise<unknown>;
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Recursive visitor for where payload
|
|
23
|
-
*/
|
|
24
|
-
export declare class WhereVisitor {
|
|
25
|
-
private readonly modelMeta;
|
|
26
|
-
private readonly callback;
|
|
27
|
-
constructor(modelMeta: ModelMeta, callback: WhereVisitorCallback);
|
|
28
|
-
/**
|
|
29
|
-
* Start visiting
|
|
30
|
-
*/
|
|
31
|
-
visit(model: string, where: any): Promise<void>;
|
|
32
|
-
}
|