@zenstackhq/runtime 1.8.1 → 2.0.0-alpha.1
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/constants.d.ts +5 -1
- package/constants.js +6 -2
- package/constants.js.map +1 -1
- package/cross/index.d.mts +60 -11
- package/cross/index.d.ts +60 -11
- package/cross/index.js +33 -7
- package/cross/index.js.map +1 -1
- package/cross/index.mjs +30 -7
- package/cross/index.mjs.map +1 -1
- package/enhance.d.ts +1 -0
- package/enhance.js +10 -0
- package/enhancements/create-enhancement.d.ts +78 -0
- package/enhancements/create-enhancement.js +86 -0
- package/enhancements/create-enhancement.js.map +1 -0
- package/enhancements/default-auth.d.ts +7 -0
- package/enhancements/default-auth.js +92 -0
- package/enhancements/default-auth.js.map +1 -0
- package/enhancements/delegate.d.ts +64 -0
- package/enhancements/delegate.js +903 -0
- package/enhancements/delegate.js.map +1 -0
- package/enhancements/index.d.ts +1 -6
- package/enhancements/index.js +1 -6
- package/enhancements/index.js.map +1 -1
- package/enhancements/logger.js.map +1 -0
- package/enhancements/omit.d.ts +4 -14
- package/enhancements/omit.js +14 -14
- package/enhancements/omit.js.map +1 -1
- package/enhancements/password.d.ts +4 -14
- package/enhancements/password.js +6 -10
- package/enhancements/password.js.map +1 -1
- package/enhancements/policy/handler.d.ts +19 -17
- package/enhancements/policy/handler.js +169 -157
- package/enhancements/policy/handler.js.map +1 -1
- package/enhancements/policy/index.d.ts +3 -37
- package/enhancements/policy/index.js +7 -24
- package/enhancements/policy/index.js.map +1 -1
- package/enhancements/policy/policy-utils.d.ts +23 -45
- package/enhancements/policy/policy-utils.js +34 -147
- package/enhancements/policy/policy-utils.js.map +1 -1
- package/enhancements/proxy.d.ts +11 -3
- package/enhancements/proxy.js +10 -9
- package/enhancements/proxy.js.map +1 -1
- package/enhancements/query-utils.d.ts +24 -0
- package/enhancements/query-utils.js +152 -0
- package/enhancements/query-utils.js.map +1 -0
- package/enhancements/types.d.ts +3 -3
- package/enhancements/utils.d.ts +3 -3
- package/enhancements/utils.js +9 -68
- package/enhancements/utils.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/types.d.ts +9 -2
- package/version.d.ts +3 -4
- package/version.js +29 -46
- package/version.js.map +1 -1
- package/enhancements/enhance.d.ts +0 -18
- package/enhancements/enhance.js +0 -42
- package/enhancements/enhance.js.map +0 -1
- package/enhancements/policy/logger.js.map +0 -1
- package/enhancements/preset.d.ts +0 -15
- package/enhancements/preset.js +0 -21
- package/enhancements/preset.js.map +0 -1
- package/loader.d.ts +0 -22
- package/loader.js +0 -99
- package/loader.js.map +0 -1
- /package/enhancements/{policy/logger.d.ts → logger.d.ts} +0 -0
- /package/enhancements/{policy/logger.js → logger.js} +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type ModelMeta } from '../cross';
|
|
2
|
+
import type { AuthUser } from '../types';
|
|
3
|
+
import type { ErrorTransformer } from './proxy';
|
|
4
|
+
import type { PolicyDef, ZodSchemas } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Kinds of enhancements to `PrismaClient`
|
|
7
|
+
*/
|
|
8
|
+
export type EnhancementKind = 'password' | 'omit' | 'policy' | 'delegate';
|
|
9
|
+
/**
|
|
10
|
+
* Transaction isolation levels: https://www.prisma.io/docs/orm/prisma-client/queries/transactions#transaction-isolation-level
|
|
11
|
+
*/
|
|
12
|
+
export type TransactionIsolationLevel = 'ReadUncommitted' | 'ReadCommitted' | 'RepeatableRead' | 'Snapshot' | 'Serializable';
|
|
13
|
+
export type EnhancementOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* The kinds of enhancements to apply. By default all enhancements are applied.
|
|
16
|
+
*/
|
|
17
|
+
kinds?: EnhancementKind[];
|
|
18
|
+
/**
|
|
19
|
+
* Whether to log Prisma query
|
|
20
|
+
*/
|
|
21
|
+
logPrismaQuery?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Hook for transforming errors before they are thrown to the caller.
|
|
24
|
+
*/
|
|
25
|
+
errorTransformer?: ErrorTransformer;
|
|
26
|
+
/**
|
|
27
|
+
* The `maxWait` option passed to `prisma.$transaction()` call for transactions initiated by ZenStack.
|
|
28
|
+
*/
|
|
29
|
+
transactionMaxWait?: number;
|
|
30
|
+
/**
|
|
31
|
+
* The `timeout` option passed to `prisma.$transaction()` call for transactions initiated by ZenStack.
|
|
32
|
+
*/
|
|
33
|
+
transactionTimeout?: number;
|
|
34
|
+
/**
|
|
35
|
+
* The `isolationLevel` option passed to `prisma.$transaction()` call for transactions initiated by ZenStack.
|
|
36
|
+
*/
|
|
37
|
+
transactionIsolationLevel?: TransactionIsolationLevel;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Options for {@link createEnhancement}
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
export type InternalEnhancementOptions = EnhancementOptions & {
|
|
45
|
+
/**
|
|
46
|
+
* Policy definition
|
|
47
|
+
*/
|
|
48
|
+
policy: PolicyDef;
|
|
49
|
+
/**
|
|
50
|
+
* Model metadata
|
|
51
|
+
*/
|
|
52
|
+
modelMeta: ModelMeta;
|
|
53
|
+
/**
|
|
54
|
+
* Zod schemas for validation
|
|
55
|
+
*/
|
|
56
|
+
zodSchemas?: ZodSchemas;
|
|
57
|
+
/**
|
|
58
|
+
* The Node module that contains PrismaClient
|
|
59
|
+
*/
|
|
60
|
+
prismaModule: any;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Context for creating enhanced `PrismaClient`
|
|
64
|
+
*/
|
|
65
|
+
export type EnhancementContext = {
|
|
66
|
+
user?: AuthUser;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Gets a Prisma client enhanced with all enhancement behaviors, including access
|
|
70
|
+
* policy, field validation, field omission and password hashing.
|
|
71
|
+
*
|
|
72
|
+
* @private
|
|
73
|
+
*
|
|
74
|
+
* @param prisma The Prisma client to enhance.
|
|
75
|
+
* @param context Context.
|
|
76
|
+
* @param options Options.
|
|
77
|
+
*/
|
|
78
|
+
export declare function createEnhancement<DbClient extends object>(prisma: DbClient, options: InternalEnhancementOptions, context?: EnhancementContext): DbClient;
|
|
@@ -0,0 +1,86 @@
|
|
|
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.createEnhancement = void 0;
|
|
7
|
+
const colors_1 = __importDefault(require("colors"));
|
|
8
|
+
const semver_1 = __importDefault(require("semver"));
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
const cross_1 = require("../cross");
|
|
11
|
+
const default_auth_1 = require("./default-auth");
|
|
12
|
+
const delegate_1 = require("./delegate");
|
|
13
|
+
const logger_1 = require("./logger");
|
|
14
|
+
const omit_1 = require("./omit");
|
|
15
|
+
const password_1 = require("./password");
|
|
16
|
+
const policy_1 = require("./policy");
|
|
17
|
+
/**
|
|
18
|
+
* All enhancement kinds
|
|
19
|
+
*/
|
|
20
|
+
const ALL_ENHANCEMENTS = ['password', 'omit', 'policy', 'delegate'];
|
|
21
|
+
let hasPassword = undefined;
|
|
22
|
+
let hasOmit = undefined;
|
|
23
|
+
let hasDefaultAuth = undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Gets a Prisma client enhanced with all enhancement behaviors, including access
|
|
26
|
+
* policy, field validation, field omission and password hashing.
|
|
27
|
+
*
|
|
28
|
+
* @private
|
|
29
|
+
*
|
|
30
|
+
* @param prisma The Prisma client to enhance.
|
|
31
|
+
* @param context Context.
|
|
32
|
+
* @param options Options.
|
|
33
|
+
*/
|
|
34
|
+
function createEnhancement(prisma, options, context) {
|
|
35
|
+
var _a, _b;
|
|
36
|
+
if (!prisma) {
|
|
37
|
+
throw new Error('Invalid prisma instance');
|
|
38
|
+
}
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
const prismaVer = prisma._clientVersion;
|
|
41
|
+
if (prismaVer && semver_1.default.lt(prismaVer, constants_1.PRISMA_MINIMUM_VERSION)) {
|
|
42
|
+
console.warn(`ZenStack requires Prisma version "${constants_1.PRISMA_MINIMUM_VERSION}" or higher. Detected version is "${prismaVer}".`);
|
|
43
|
+
}
|
|
44
|
+
const logger = new logger_1.Logger(prisma);
|
|
45
|
+
logger.info(`Enabled ZenStack enhancements: ${(_a = options.kinds) === null || _a === void 0 ? void 0 : _a.join(', ')}`);
|
|
46
|
+
let result = prisma;
|
|
47
|
+
if (process.env.ZENSTACK_TEST === '1' || // avoid caching in tests
|
|
48
|
+
hasPassword === undefined ||
|
|
49
|
+
hasOmit === undefined ||
|
|
50
|
+
hasDefaultAuth === undefined) {
|
|
51
|
+
const allFields = Object.values(options.modelMeta.models).flatMap((modelInfo) => Object.values(modelInfo.fields));
|
|
52
|
+
hasPassword = allFields.some((field) => { var _a; return (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.name === '@password'); });
|
|
53
|
+
hasOmit = allFields.some((field) => { var _a; return (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.name === '@omit'); });
|
|
54
|
+
hasDefaultAuth = allFields.some((field) => field.defaultValueProvider);
|
|
55
|
+
}
|
|
56
|
+
const kinds = (_b = options.kinds) !== null && _b !== void 0 ? _b : ALL_ENHANCEMENTS;
|
|
57
|
+
// delegate proxy needs to be wrapped inside policy proxy, since it may translate `deleteMany`
|
|
58
|
+
// and `updateMany` to plain `delete` and `update`
|
|
59
|
+
if (Object.values(options.modelMeta.models).some((model) => (0, cross_1.isDelegateModel)(options.modelMeta, model.name))) {
|
|
60
|
+
if (!kinds.includes('delegate')) {
|
|
61
|
+
console.warn(colors_1.default.yellow('Your ZModel contains delegate models but "delegate" enhancement kind is not enabled. This may result in unexpected behavior.'));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
result = (0, delegate_1.withDelegate)(result, options);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// policy proxy
|
|
68
|
+
if (kinds.includes('policy')) {
|
|
69
|
+
result = (0, policy_1.withPolicy)(result, options, context);
|
|
70
|
+
if (hasDefaultAuth) {
|
|
71
|
+
// @default(auth()) proxy
|
|
72
|
+
result = (0, default_auth_1.withDefaultAuth)(result, options, context);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (hasPassword && kinds.includes('password')) {
|
|
76
|
+
// @password proxy
|
|
77
|
+
result = (0, password_1.withPassword)(result, options);
|
|
78
|
+
}
|
|
79
|
+
if (hasOmit && kinds.includes('omit')) {
|
|
80
|
+
// @omit proxy
|
|
81
|
+
result = (0, omit_1.withOmit)(result, options);
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
exports.createEnhancement = createEnhancement;
|
|
86
|
+
//# sourceMappingURL=create-enhancement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-enhancement.js","sourceRoot":"","sources":["../../src/enhancements/create-enhancement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EnhancementContext, InternalEnhancementOptions } from './create-enhancement';
|
|
2
|
+
/**
|
|
3
|
+
* Gets an enhanced Prisma client that supports `@default(auth())` attribute.
|
|
4
|
+
*
|
|
5
|
+
* @private
|
|
6
|
+
*/
|
|
7
|
+
export declare function withDefaultAuth<DbClient extends object>(prisma: DbClient, options: InternalEnhancementOptions, context?: EnhancementContext): DbClient;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.withDefaultAuth = void 0;
|
|
18
|
+
const deepcopy_1 = __importDefault(require("deepcopy"));
|
|
19
|
+
const cross_1 = require("../cross");
|
|
20
|
+
const proxy_1 = require("./proxy");
|
|
21
|
+
/**
|
|
22
|
+
* Gets an enhanced Prisma client that supports `@default(auth())` attribute.
|
|
23
|
+
*
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
26
|
+
function withDefaultAuth(prisma, options, context) {
|
|
27
|
+
return (0, proxy_1.makeProxy)(prisma, options.modelMeta, (_prisma, model) => new DefaultAuthHandler(_prisma, model, options, context), 'defaultAuth');
|
|
28
|
+
}
|
|
29
|
+
exports.withDefaultAuth = withDefaultAuth;
|
|
30
|
+
class DefaultAuthHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
31
|
+
constructor(prisma, model, options, context) {
|
|
32
|
+
var _a;
|
|
33
|
+
super(prisma, model, options);
|
|
34
|
+
this.context = context;
|
|
35
|
+
if (!((_a = this.context) === null || _a === void 0 ? void 0 : _a.user)) {
|
|
36
|
+
throw new Error(`Using \`auth()\` in \`@default\` requires a user context`);
|
|
37
|
+
}
|
|
38
|
+
this.userContext = this.context.user;
|
|
39
|
+
}
|
|
40
|
+
// base override
|
|
41
|
+
preprocessArgs(action, args) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const actionsOfInterest = ['create', 'createMany', 'update', 'updateMany', 'upsert'];
|
|
44
|
+
if (actionsOfInterest.includes(action)) {
|
|
45
|
+
const newArgs = yield this.preprocessWritePayload(this.model, action, args);
|
|
46
|
+
return newArgs;
|
|
47
|
+
}
|
|
48
|
+
return args;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
preprocessWritePayload(model, action, args) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const newArgs = (0, deepcopy_1.default)(args);
|
|
54
|
+
const processCreatePayload = (model, data) => {
|
|
55
|
+
const fields = (0, cross_1.getFields)(this.options.modelMeta, model);
|
|
56
|
+
for (const fieldInfo of Object.values(fields)) {
|
|
57
|
+
if (fieldInfo.name in data) {
|
|
58
|
+
// create payload already sets field value
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (!fieldInfo.defaultValueProvider) {
|
|
62
|
+
// field doesn't have a runtime default value provider
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const authDefaultValue = this.getDefaultValueFromAuth(fieldInfo);
|
|
66
|
+
if (authDefaultValue !== undefined) {
|
|
67
|
+
// set field value extracted from `auth()`
|
|
68
|
+
data[fieldInfo.name] = authDefaultValue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// visit create payload and set default value to fields using `auth()` in `@default()`
|
|
73
|
+
const visitor = new cross_1.NestedWriteVisitor(this.options.modelMeta, {
|
|
74
|
+
create: (model, data) => {
|
|
75
|
+
processCreatePayload(model, data);
|
|
76
|
+
},
|
|
77
|
+
createMany: (model, args) => {
|
|
78
|
+
for (const item of (0, cross_1.enumerate)(args.data)) {
|
|
79
|
+
processCreatePayload(model, item);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
yield visitor.visit(model, action, newArgs);
|
|
84
|
+
return newArgs;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
getDefaultValueFromAuth(fieldInfo) {
|
|
88
|
+
var _a;
|
|
89
|
+
return (_a = fieldInfo.defaultValueProvider) === null || _a === void 0 ? void 0 : _a.call(fieldInfo, this.userContext);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=default-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-auth.js","sourceRoot":"","sources":["../../src/enhancements/default-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { DbClientContract } from '../types';
|
|
2
|
+
import type { InternalEnhancementOptions } from './create-enhancement';
|
|
3
|
+
import { DefaultPrismaProxyHandler } from './proxy';
|
|
4
|
+
export declare function withDelegate<DbClient extends object>(prisma: DbClient, options: InternalEnhancementOptions): DbClient;
|
|
5
|
+
export declare class DelegateProxyHandler extends DefaultPrismaProxyHandler {
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly queryUtils;
|
|
8
|
+
constructor(prisma: DbClientContract, model: string, options: InternalEnhancementOptions);
|
|
9
|
+
findFirst(args: any): Promise<unknown>;
|
|
10
|
+
findFirstOrThrow(args: any): Promise<unknown>;
|
|
11
|
+
findUnique(args: any): Promise<unknown>;
|
|
12
|
+
findUniqueOrThrow(args: any): Promise<unknown>;
|
|
13
|
+
findMany(args: any): Promise<unknown[]>;
|
|
14
|
+
private doFind;
|
|
15
|
+
private injectWhereHierarchy;
|
|
16
|
+
private buildWhereHierarchy;
|
|
17
|
+
private injectSelectIncludeHierarchy;
|
|
18
|
+
private buildSelectIncludeHierarchy;
|
|
19
|
+
private injectBaseFieldSelect;
|
|
20
|
+
private injectBaseIncludeRecursively;
|
|
21
|
+
create(args: any): Promise<any>;
|
|
22
|
+
createMany(args: {
|
|
23
|
+
data: any;
|
|
24
|
+
skipDuplicates?: boolean;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
count: number;
|
|
27
|
+
}>;
|
|
28
|
+
private doCreate;
|
|
29
|
+
private injectCreateHierarchy;
|
|
30
|
+
private doProcessCreatePayload;
|
|
31
|
+
private ensureBaseCreateHierarchy;
|
|
32
|
+
private injectBaseFieldData;
|
|
33
|
+
update(args: any): Promise<unknown>;
|
|
34
|
+
updateMany(args: any): Promise<{
|
|
35
|
+
count: number;
|
|
36
|
+
}>;
|
|
37
|
+
upsert(args: any): Promise<unknown>;
|
|
38
|
+
private doUpdate;
|
|
39
|
+
private doUpdateMany;
|
|
40
|
+
private injectUpdateHierarchy;
|
|
41
|
+
private doProcessUpdatePayload;
|
|
42
|
+
delete(args: any): Promise<unknown>;
|
|
43
|
+
deleteMany(args: any): Promise<{
|
|
44
|
+
count: number;
|
|
45
|
+
}>;
|
|
46
|
+
private doDeleteMany;
|
|
47
|
+
private deleteBaseRecursively;
|
|
48
|
+
private doDelete;
|
|
49
|
+
aggregate(args: any): Promise<unknown>;
|
|
50
|
+
count(args: any): Promise<unknown>;
|
|
51
|
+
groupBy(args: any): Promise<unknown>;
|
|
52
|
+
private checkAggregationArgs;
|
|
53
|
+
private extractSelectInclude;
|
|
54
|
+
private makeAuxRelationName;
|
|
55
|
+
private getModelName;
|
|
56
|
+
private getIdFields;
|
|
57
|
+
private getModelInfo;
|
|
58
|
+
private getBaseModel;
|
|
59
|
+
private involvesDelegateModel;
|
|
60
|
+
private isDelegateOrDescendantOfDelegate;
|
|
61
|
+
private assembleHierarchy;
|
|
62
|
+
private transformWhereHierarchy;
|
|
63
|
+
private transformFieldHierarchy;
|
|
64
|
+
}
|