@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.
Files changed (69) hide show
  1. package/constants.d.ts +5 -1
  2. package/constants.js +6 -2
  3. package/constants.js.map +1 -1
  4. package/cross/index.d.mts +60 -11
  5. package/cross/index.d.ts +60 -11
  6. package/cross/index.js +33 -7
  7. package/cross/index.js.map +1 -1
  8. package/cross/index.mjs +30 -7
  9. package/cross/index.mjs.map +1 -1
  10. package/enhance.d.ts +1 -0
  11. package/enhance.js +10 -0
  12. package/enhancements/create-enhancement.d.ts +78 -0
  13. package/enhancements/create-enhancement.js +86 -0
  14. package/enhancements/create-enhancement.js.map +1 -0
  15. package/enhancements/default-auth.d.ts +7 -0
  16. package/enhancements/default-auth.js +92 -0
  17. package/enhancements/default-auth.js.map +1 -0
  18. package/enhancements/delegate.d.ts +64 -0
  19. package/enhancements/delegate.js +903 -0
  20. package/enhancements/delegate.js.map +1 -0
  21. package/enhancements/index.d.ts +1 -6
  22. package/enhancements/index.js +1 -6
  23. package/enhancements/index.js.map +1 -1
  24. package/enhancements/logger.js.map +1 -0
  25. package/enhancements/omit.d.ts +4 -14
  26. package/enhancements/omit.js +14 -14
  27. package/enhancements/omit.js.map +1 -1
  28. package/enhancements/password.d.ts +4 -14
  29. package/enhancements/password.js +6 -10
  30. package/enhancements/password.js.map +1 -1
  31. package/enhancements/policy/handler.d.ts +19 -17
  32. package/enhancements/policy/handler.js +169 -157
  33. package/enhancements/policy/handler.js.map +1 -1
  34. package/enhancements/policy/index.d.ts +3 -37
  35. package/enhancements/policy/index.js +7 -24
  36. package/enhancements/policy/index.js.map +1 -1
  37. package/enhancements/policy/policy-utils.d.ts +23 -45
  38. package/enhancements/policy/policy-utils.js +34 -147
  39. package/enhancements/policy/policy-utils.js.map +1 -1
  40. package/enhancements/proxy.d.ts +11 -3
  41. package/enhancements/proxy.js +10 -9
  42. package/enhancements/proxy.js.map +1 -1
  43. package/enhancements/query-utils.d.ts +24 -0
  44. package/enhancements/query-utils.js +152 -0
  45. package/enhancements/query-utils.js.map +1 -0
  46. package/enhancements/types.d.ts +3 -3
  47. package/enhancements/utils.d.ts +3 -3
  48. package/enhancements/utils.js +9 -68
  49. package/enhancements/utils.js.map +1 -1
  50. package/index.d.ts +1 -1
  51. package/index.js +1 -1
  52. package/index.js.map +1 -1
  53. package/package.json +2 -2
  54. package/types.d.ts +9 -2
  55. package/version.d.ts +3 -4
  56. package/version.js +29 -46
  57. package/version.js.map +1 -1
  58. package/enhancements/enhance.d.ts +0 -18
  59. package/enhancements/enhance.js +0 -42
  60. package/enhancements/enhance.js.map +0 -1
  61. package/enhancements/policy/logger.js.map +0 -1
  62. package/enhancements/preset.d.ts +0 -15
  63. package/enhancements/preset.js +0 -21
  64. package/enhancements/preset.js.map +0 -1
  65. package/loader.d.ts +0 -22
  66. package/loader.js +0 -99
  67. package/loader.js.map +0 -1
  68. /package/enhancements/{policy/logger.d.ts → logger.d.ts} +0 -0
  69. /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
+ }