@zenstackhq/runtime 1.0.0-beta.8 → 1.0.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.
Files changed (86) hide show
  1. package/browser/index.d.mts +13 -0
  2. package/browser/index.d.ts +13 -0
  3. package/browser/index.js +70 -0
  4. package/browser/index.js.map +1 -0
  5. package/browser/index.mjs +32 -0
  6. package/browser/index.mjs.map +1 -0
  7. package/constants.d.ts +66 -13
  8. package/constants.js +69 -15
  9. package/constants.js.map +1 -1
  10. package/enhancements/enhance.d.ts +18 -0
  11. package/enhancements/enhance.js +42 -0
  12. package/enhancements/enhance.js.map +1 -0
  13. package/enhancements/index.d.ts +5 -0
  14. package/enhancements/index.js +5 -0
  15. package/enhancements/index.js.map +1 -1
  16. package/enhancements/model-data-visitor.d.ts +16 -0
  17. package/enhancements/model-data-visitor.js +41 -0
  18. package/enhancements/model-data-visitor.js.map +1 -0
  19. package/enhancements/model-meta.d.ts +3 -6
  20. package/enhancements/model-meta.js +3 -28
  21. package/enhancements/model-meta.js.map +1 -1
  22. package/enhancements/nested-write-visitor.d.ts +75 -0
  23. package/enhancements/{nested-write-vistor.js → nested-write-visitor.js} +68 -29
  24. package/enhancements/nested-write-visitor.js.map +1 -0
  25. package/enhancements/omit.d.ts +4 -4
  26. package/enhancements/omit.js +2 -1
  27. package/enhancements/omit.js.map +1 -1
  28. package/enhancements/password.d.ts +4 -4
  29. package/enhancements/password.js +4 -4
  30. package/enhancements/password.js.map +1 -1
  31. package/enhancements/policy/handler.d.ts +34 -18
  32. package/enhancements/policy/handler.js +844 -157
  33. package/enhancements/policy/handler.js.map +1 -1
  34. package/enhancements/policy/index.d.ts +4 -4
  35. package/enhancements/policy/index.js +20 -38
  36. package/enhancements/policy/index.js.map +1 -1
  37. package/enhancements/policy/logger.js +1 -1
  38. package/enhancements/policy/logger.js.map +1 -1
  39. package/enhancements/policy/policy-utils.d.ts +106 -48
  40. package/enhancements/policy/policy-utils.js +778 -650
  41. package/enhancements/policy/policy-utils.js.map +1 -1
  42. package/enhancements/policy/promise.d.ts +5 -0
  43. package/enhancements/policy/promise.js +42 -0
  44. package/enhancements/policy/promise.js.map +1 -0
  45. package/enhancements/preset.d.ts +3 -8
  46. package/enhancements/preset.js +2 -4
  47. package/enhancements/preset.js.map +1 -1
  48. package/enhancements/proxy.d.ts +3 -1
  49. package/enhancements/proxy.js +45 -28
  50. package/enhancements/proxy.js.map +1 -1
  51. package/enhancements/types.d.ts +24 -7
  52. package/enhancements/types.js +1 -0
  53. package/enhancements/types.js.map +1 -1
  54. package/enhancements/utils.d.ts +5 -1
  55. package/enhancements/utils.js +62 -12
  56. package/enhancements/utils.js.map +1 -1
  57. package/enhancements/where-visitor.d.ts +33 -0
  58. package/enhancements/where-visitor.js +87 -0
  59. package/enhancements/where-visitor.js.map +1 -0
  60. package/error.js +9 -3
  61. package/error.js.map +1 -1
  62. package/index.d.ts +4 -2
  63. package/index.js +4 -2
  64. package/index.js.map +1 -1
  65. package/loader.d.ts +22 -0
  66. package/loader.js +99 -0
  67. package/loader.js.map +1 -0
  68. package/package.json +33 -7
  69. package/types.d.ts +28 -14
  70. package/types.js +2 -0
  71. package/types.js.map +1 -1
  72. package/validation.d.ts +5 -0
  73. package/validation.js +13 -1
  74. package/validation.js.map +1 -1
  75. package/version.d.ts +5 -0
  76. package/version.js +34 -1
  77. package/version.js.map +1 -1
  78. package/zod/index.d.ts +1 -0
  79. package/zod/index.js +1 -0
  80. package/zod/objects.d.ts +1 -0
  81. package/zod/objects.js +8 -0
  82. package/enhancements/nested-write-vistor.d.ts +0 -71
  83. package/enhancements/nested-write-vistor.js.map +0 -1
  84. package/utils/serialization-utils.d.ts +0 -1
  85. package/utils/serialization-utils.js +0 -22
  86. package/utils/serialization-utils.js.map +0 -1
@@ -27,25 +27,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  return (mod && mod.__esModule) ? mod : { "default": mod };
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.prismaClientUnknownRequestError = exports.prismaClientKnownRequestError = exports.prismaClientValidationError = exports.formatObject = exports.enumerate = exports.getIdFields = exports.getModelFields = void 0;
30
+ exports.prismaClientUnknownRequestError = exports.prismaClientKnownRequestError = exports.prismaClientValidationError = exports.formatObject = exports.zip = exports.enumerate = exports.getIdFields = exports.getModelFields = void 0;
31
31
  const lower_case_first_1 = require("lower-case-first");
32
32
  const path_1 = __importDefault(require("path"));
33
33
  const util = __importStar(require("util"));
34
- const constants_1 = require("../constants");
35
34
  /**
36
35
  * Gets field names in a data model entity, filtering out internal fields.
37
36
  */
38
37
  function getModelFields(data) {
39
- return data ? Object.keys(data).filter((f) => !constants_1.AUXILIARY_FIELDS.includes(f)) : [];
38
+ return data ? Object.keys(data) : [];
40
39
  }
41
40
  exports.getModelFields = getModelFields;
42
41
  /**
43
42
  * Gets id fields for the given model.
44
43
  */
45
44
  function getIdFields(modelMeta, model, throwIfNotFound = false) {
46
- const fields = modelMeta.fields[(0, lower_case_first_1.lowerCaseFirst)(model)];
45
+ let fields = modelMeta.fields[(0, lower_case_first_1.lowerCaseFirst)(model)];
47
46
  if (!fields) {
48
- throw new Error(`Unable to load fields for ${model}`);
47
+ if (throwIfNotFound) {
48
+ throw new Error(`Unable to load fields for ${model}`);
49
+ }
50
+ else {
51
+ fields = {};
52
+ }
49
53
  }
50
54
  const result = Object.values(fields).filter((f) => f.isId);
51
55
  if (result.length === 0 && throwIfNotFound) {
@@ -58,7 +62,10 @@ exports.getIdFields = getIdFields;
58
62
  * Uniformly enumerates an array or scalar.
59
63
  */
60
64
  function enumerate(x) {
61
- if (Array.isArray(x)) {
65
+ if (x === null || x === undefined) {
66
+ return [];
67
+ }
68
+ else if (Array.isArray(x)) {
62
69
  return x;
63
70
  }
64
71
  else {
@@ -66,6 +73,27 @@ function enumerate(x) {
66
73
  }
67
74
  }
68
75
  exports.enumerate = enumerate;
76
+ /**
77
+ * Zip two arrays or scalars.
78
+ */
79
+ function zip(x, y) {
80
+ if (Array.isArray(x)) {
81
+ if (!Array.isArray(y)) {
82
+ throw new Error('x and y should be both array or both scalar');
83
+ }
84
+ if (x.length !== y.length) {
85
+ throw new Error('x and y should have the same length');
86
+ }
87
+ return x.map((_, i) => [x[i], y[i]]);
88
+ }
89
+ else {
90
+ if (Array.isArray(y)) {
91
+ throw new Error('x and y should be both array or both scalar');
92
+ }
93
+ return [[x, y]];
94
+ }
95
+ }
96
+ exports.zip = zip;
69
97
  /**
70
98
  * Formats an object for pretty printing.
71
99
  */
@@ -81,27 +109,49 @@ function loadPrismaModule(prisma) {
81
109
  var _a;
82
110
  // https://github.com/prisma/prisma/discussions/17832
83
111
  if ((_a = prisma._engineConfig) === null || _a === void 0 ? void 0 : _a.datamodelPath) {
112
+ // try engine path first
84
113
  const loadPath = path_1.default.dirname(prisma._engineConfig.datamodelPath);
85
114
  try {
86
115
  const _prisma = require(loadPath).Prisma;
87
- if (typeof _prisma !== 'undefined')
116
+ if (typeof _prisma !== 'undefined') {
88
117
  return _prisma;
89
- return require('@prisma/client/runtime');
118
+ }
90
119
  }
91
120
  catch (_b) {
92
- return require('@prisma/client/runtime');
121
+ // noop
93
122
  }
94
123
  }
95
- else {
124
+ try {
125
+ // Prisma v4
96
126
  return require('@prisma/client/runtime');
97
127
  }
128
+ catch (_c) {
129
+ try {
130
+ // Prisma v5
131
+ return require('@prisma/client');
132
+ }
133
+ catch (err) {
134
+ if (process.env.ZENSTACK_TEST === '1') {
135
+ // running in test, try cwd
136
+ try {
137
+ return require(path_1.default.join(process.cwd(), 'node_modules/@prisma/client/runtime'));
138
+ }
139
+ catch (_d) {
140
+ return require(path_1.default.join(process.cwd(), 'node_modules/@prisma/client'));
141
+ }
142
+ }
143
+ else {
144
+ throw err;
145
+ }
146
+ }
147
+ }
98
148
  }
99
- function prismaClientValidationError(prisma, ...args) {
149
+ function prismaClientValidationError(prisma, message) {
100
150
  if (!_PrismaClientValidationError) {
101
151
  const _prisma = loadPrismaModule(prisma);
102
152
  _PrismaClientValidationError = _prisma.PrismaClientValidationError;
103
153
  }
104
- throw new _PrismaClientValidationError(...args);
154
+ throw new _PrismaClientValidationError(message, { clientVersion: prisma._clientVersion });
105
155
  }
106
156
  exports.prismaClientValidationError = prismaClientValidationError;
107
157
  function prismaClientKnownRequestError(prisma, ...args) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/enhancements/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/enhancements/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { FieldInfo } from '../types';
2
+ import { ModelMeta } from './types';
3
+ /**
4
+ * Context for visiting
5
+ */
6
+ export type WhereVisitorContext = {
7
+ /**
8
+ * Parent data, can be used to replace fields
9
+ */
10
+ parent: any;
11
+ /**
12
+ * Current field, undefined if toplevel
13
+ */
14
+ field?: FieldInfo;
15
+ };
16
+ /**
17
+ * WhereVisitor's callback actions
18
+ */
19
+ export type WhereVisitorCallback = {
20
+ field?: (field: FieldInfo, data: any) => Promise<unknown>;
21
+ };
22
+ /**
23
+ * Recursive visitor for where payload
24
+ */
25
+ export declare class WhereVisitor {
26
+ private readonly modelMeta;
27
+ private readonly callback;
28
+ constructor(modelMeta: ModelMeta, callback: WhereVisitorCallback);
29
+ /**
30
+ * Start visiting
31
+ */
32
+ visit(model: string, where: any): Promise<void>;
33
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
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
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.WhereVisitor = void 0;
15
+ const model_meta_1 = require("./model-meta");
16
+ const utils_1 = require("./utils");
17
+ const FILTER_OPERATORS = [
18
+ 'equals',
19
+ 'not',
20
+ 'in',
21
+ 'notIn',
22
+ 'lt',
23
+ 'lte',
24
+ 'gt',
25
+ 'gte',
26
+ 'contains',
27
+ 'search',
28
+ 'startsWith',
29
+ 'endsWith',
30
+ ];
31
+ const RELATION_FILTER_OPERATORS = ['is', 'isNot', 'some', 'every', 'none'];
32
+ /**
33
+ * Recursive visitor for where payload
34
+ */
35
+ class WhereVisitor {
36
+ constructor(modelMeta, callback) {
37
+ this.modelMeta = modelMeta;
38
+ this.callback = callback;
39
+ }
40
+ /**
41
+ * Start visiting
42
+ */
43
+ visit(model, where) {
44
+ var _a, _b, _c, _d;
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ if (!where) {
47
+ return;
48
+ }
49
+ for (const [k, v] of Object.entries(where)) {
50
+ if (['AND', 'OR', 'NOT'].includes(k)) {
51
+ for (const item of (0, utils_1.enumerate)(v)) {
52
+ yield this.visit(model, item);
53
+ }
54
+ continue;
55
+ }
56
+ if (RELATION_FILTER_OPERATORS.includes(k)) {
57
+ // visit into filter body
58
+ yield this.visit(model, v);
59
+ continue;
60
+ }
61
+ const field = (0, model_meta_1.resolveField)(this.modelMeta, model, k);
62
+ if (!field) {
63
+ continue;
64
+ }
65
+ if (typeof v === 'object') {
66
+ const filterOp = Object.keys(v).find((f) => FILTER_OPERATORS.includes(f));
67
+ if (filterOp) {
68
+ // reach into filter value
69
+ const newValue = yield ((_b = (_a = this.callback).field) === null || _b === void 0 ? void 0 : _b.call(_a, field, v[filterOp]));
70
+ v[filterOp] = newValue;
71
+ continue;
72
+ }
73
+ if (Object.keys(v).some((f) => RELATION_FILTER_OPERATORS.includes(f))) {
74
+ // filter payload
75
+ yield this.visit(field.type, v);
76
+ continue;
77
+ }
78
+ }
79
+ // scalar field
80
+ const newValue = yield ((_d = (_c = this.callback).field) === null || _d === void 0 ? void 0 : _d.call(_c, field, v));
81
+ where[k] = newValue;
82
+ }
83
+ });
84
+ }
85
+ }
86
+ exports.WhereVisitor = WhereVisitor;
87
+ //# sourceMappingURL=where-visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where-visitor.js","sourceRoot":"","sources":["../../src/enhancements/where-visitor.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,uDAAuD;;;;;;;;;;;;AAGvD,6CAA4C;AAE5C,mCAAoC;AAwBpC,MAAM,gBAAgB,GAAG;IACrB,QAAQ;IACR,KAAK;IACL,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,KAAK;IACL,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,UAAU;CACb,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAa,YAAY;IACrB,YAA6B,SAAoB,EAAmB,QAA8B;QAArE,cAAS,GAAT,SAAS,CAAW;QAAmB,aAAQ,GAAR,QAAQ,CAAsB;IAAG,CAAC;IAEtG;;OAEG;IACG,KAAK,CAAC,KAAa,EAAE,KAAU;;;YACjC,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO;aACV;YAED,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAM,KAAK,CAAC,EAAE;gBAC7C,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBAClC,KAAK,MAAM,IAAI,IAAI,IAAA,iBAAS,EAAC,CAAC,CAAC,EAAE;wBAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;qBACjC;oBACD,SAAS;iBACZ;gBAED,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACvC,yBAAyB;oBACzB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC3B,SAAS;iBACZ;gBAED,MAAM,KAAK,GAAG,IAAA,yBAAY,EAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,EAAE;oBACR,SAAS;iBACZ;gBAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;oBACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1E,IAAI,QAAQ,EAAE;wBACV,0BAA0B;wBAC1B,MAAM,QAAQ,GAAG,MAAM,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,EAAC,KAAK,mDAAG,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAC;wBACjE,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;wBACvB,SAAS;qBACZ;oBAED,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBACnE,iBAAiB;wBACjB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBAChC,SAAS;qBACZ;iBACJ;gBAED,eAAe;gBACf,MAAM,QAAQ,GAAG,MAAM,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,EAAC,KAAK,mDAAG,KAAK,EAAE,CAAC,CAAC,CAAA,CAAC;gBACvD,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;aACvB;;KACJ;CACJ;AAnDD,oCAmDC"}
package/error.js CHANGED
@@ -3,15 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isPrismaClientValidationError = exports.isPrismaClientUnknownRequestError = exports.isPrismaClientKnownRequestError = void 0;
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  function isPrismaClientKnownRequestError(err) {
6
- return err.__proto__.constructor.name === 'PrismaClientKnownRequestError';
6
+ return findConstructorName(err.__proto__, 'PrismaClientKnownRequestError');
7
7
  }
8
8
  exports.isPrismaClientKnownRequestError = isPrismaClientKnownRequestError;
9
9
  function isPrismaClientUnknownRequestError(err) {
10
- return err.__proto__.constructor.name === 'PrismaClientUnknownRequestError';
10
+ return findConstructorName(err.__proto__, 'PrismaClientUnknownRequestError');
11
11
  }
12
12
  exports.isPrismaClientUnknownRequestError = isPrismaClientUnknownRequestError;
13
13
  function isPrismaClientValidationError(err) {
14
- return err.__proto__.constructor.name === 'PrismaClientValidationError';
14
+ return findConstructorName(err.__proto__, 'PrismaClientValidationError');
15
15
  }
16
16
  exports.isPrismaClientValidationError = isPrismaClientValidationError;
17
+ function findConstructorName(proto, name) {
18
+ if (!proto) {
19
+ return false;
20
+ }
21
+ return proto.constructor.name === name || findConstructorName(proto.__proto__, name);
22
+ }
17
23
  //# sourceMappingURL=error.js.map
package/error.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,SAAgB,+BAA+B,CAC3C,GAAQ;IAER,OAAO,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,+BAA+B,CAAC;AAC9E,CAAC;AAJD,0EAIC;AAED,SAAgB,iCAAiC,CAAC,GAAQ;IACtD,OAAO,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,iCAAiC,CAAC;AAChF,CAAC;AAFD,8EAEC;AAED,SAAgB,6BAA6B,CAAC,GAAQ;IAClD,OAAO,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,KAAK,6BAA6B,CAAC;AAC5E,CAAC;AAFD,sEAEC"}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,SAAgB,+BAA+B,CAC3C,GAAQ;IAER,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;AAC/E,CAAC;AAJD,0EAIC;AAED,SAAgB,iCAAiC,CAAC,GAAQ;IACtD,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;AACjF,CAAC;AAFD,8EAEC;AAED,SAAgB,6BAA6B,CAAC,GAAQ;IAClD,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;AAC7E,CAAC;AAFD,sEAEC;AAED,SAAS,mBAAmB,CAAC,KAAU,EAAE,IAAY;IACjD,IAAI,CAAC,KAAK,EAAE;QACR,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,IAAI,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACzF,CAAC"}
package/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ export * from './constants';
1
2
  export * from './enhancements';
2
- export * from './enhancements/policy';
3
+ export * from './error';
4
+ export * from './loader';
3
5
  export * from './types';
4
6
  export * from './validation';
5
- export * from './error';
7
+ export * from './version';
package/index.js CHANGED
@@ -14,9 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
17
18
  __exportStar(require("./enhancements"), exports);
18
- __exportStar(require("./enhancements/policy"), exports);
19
+ __exportStar(require("./error"), exports);
20
+ __exportStar(require("./loader"), exports);
19
21
  __exportStar(require("./types"), exports);
20
22
  __exportStar(require("./validation"), exports);
21
- __exportStar(require("./error"), exports);
23
+ __exportStar(require("./version"), exports);
22
24
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,wDAAsC;AACtC,0CAAwB;AACxB,+CAA6B;AAC7B,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,iDAA+B;AAC/B,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,+CAA6B;AAC7B,4CAA0B"}
package/loader.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ import { ModelMeta, PolicyDef, ZodSchemas } from './enhancements';
2
+ /**
3
+ * Load model metadata.
4
+ *
5
+ * @param loadPath The path to load model metadata from. If not provided,
6
+ * will use default load path.
7
+ */
8
+ export declare function getDefaultModelMeta(loadPath: string | undefined): ModelMeta;
9
+ /**
10
+ * Load access policies.
11
+ *
12
+ * @param loadPath The path to load access policies from. If not provided,
13
+ * will use default load path.
14
+ */
15
+ export declare function getDefaultPolicy(loadPath: string | undefined): PolicyDef;
16
+ /**
17
+ * Load zod schemas.
18
+ *
19
+ * @param loadPath The path to load zod schemas from. If not provided,
20
+ * will use default load path.
21
+ */
22
+ export declare function getDefaultZodSchemas(loadPath: string | undefined): ZodSchemas | undefined;
package/loader.js ADDED
@@ -0,0 +1,99 @@
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.getDefaultZodSchemas = exports.getDefaultPolicy = exports.getDefaultModelMeta = void 0;
7
+ /* eslint-disable @typescript-eslint/no-var-requires */
8
+ const path_1 = __importDefault(require("path"));
9
+ /**
10
+ * Load model metadata.
11
+ *
12
+ * @param loadPath The path to load model metadata from. If not provided,
13
+ * will use default load path.
14
+ */
15
+ function getDefaultModelMeta(loadPath) {
16
+ try {
17
+ if (loadPath) {
18
+ const toLoad = path_1.default.resolve(loadPath, 'model-meta');
19
+ return require(toLoad).default;
20
+ }
21
+ else {
22
+ return require('.zenstack/model-meta').default;
23
+ }
24
+ }
25
+ catch (_a) {
26
+ if (process.env.ZENSTACK_TEST === '1' && !loadPath) {
27
+ try {
28
+ // special handling for running as tests, try resolving relative to CWD
29
+ return require(path_1.default.join(process.cwd(), 'node_modules', '.zenstack', 'model-meta')).default;
30
+ }
31
+ catch (_b) {
32
+ throw new Error('Model meta cannot be loaded. Please make sure "zenstack generate" has been run.');
33
+ }
34
+ }
35
+ throw new Error('Model meta cannot be loaded. Please make sure "zenstack generate" has been run.');
36
+ }
37
+ }
38
+ exports.getDefaultModelMeta = getDefaultModelMeta;
39
+ /**
40
+ * Load access policies.
41
+ *
42
+ * @param loadPath The path to load access policies from. If not provided,
43
+ * will use default load path.
44
+ */
45
+ function getDefaultPolicy(loadPath) {
46
+ try {
47
+ if (loadPath) {
48
+ const toLoad = path_1.default.resolve(loadPath, 'policy');
49
+ return require(toLoad).default;
50
+ }
51
+ else {
52
+ return require('.zenstack/policy').default;
53
+ }
54
+ }
55
+ catch (_a) {
56
+ if (process.env.ZENSTACK_TEST === '1' && !loadPath) {
57
+ try {
58
+ // special handling for running as tests, try resolving relative to CWD
59
+ return require(path_1.default.join(process.cwd(), 'node_modules', '.zenstack', 'policy')).default;
60
+ }
61
+ catch (_b) {
62
+ throw new Error('Policy definition cannot be loaded from default location. Please make sure "zenstack generate" has been run.');
63
+ }
64
+ }
65
+ throw new Error('Policy definition cannot be loaded from default location. Please make sure "zenstack generate" has been run.');
66
+ }
67
+ }
68
+ exports.getDefaultPolicy = getDefaultPolicy;
69
+ /**
70
+ * Load zod schemas.
71
+ *
72
+ * @param loadPath The path to load zod schemas from. If not provided,
73
+ * will use default load path.
74
+ */
75
+ function getDefaultZodSchemas(loadPath) {
76
+ try {
77
+ if (loadPath) {
78
+ const toLoad = path_1.default.resolve(loadPath, 'zod');
79
+ return require(toLoad);
80
+ }
81
+ else {
82
+ return require('.zenstack/zod');
83
+ }
84
+ }
85
+ catch (_a) {
86
+ if (process.env.ZENSTACK_TEST === '1' && !loadPath) {
87
+ try {
88
+ // special handling for running as tests, try resolving relative to CWD
89
+ return require(path_1.default.join(process.cwd(), 'node_modules', '.zenstack', 'zod'));
90
+ }
91
+ catch (_b) {
92
+ return undefined;
93
+ }
94
+ }
95
+ return undefined;
96
+ }
97
+ }
98
+ exports.getDefaultZodSchemas = getDefaultZodSchemas;
99
+ //# sourceMappingURL=loader.js.map
package/loader.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,gDAAwB;AAGxB;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,QAA4B;IAC5D,IAAI;QACA,IAAI,QAAQ,EAAE;YACV,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACpD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;SAClC;aAAM;YACH,OAAO,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC;SAClD;KACJ;IAAC,WAAM;QACJ,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChD,IAAI;gBACA,uEAAuE;gBACvE,OAAO,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;aAC/F;YAAC,WAAM;gBACJ,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;aACtG;SACJ;QACD,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;KACtG;AACL,CAAC;AAnBD,kDAmBC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,QAA4B;IACzD,IAAI;QACA,IAAI,QAAQ,EAAE;YACV,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;SAClC;aAAM;YACH,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;SAC9C;KACJ;IAAC,WAAM;QACJ,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChD,IAAI;gBACA,uEAAuE;gBACvE,OAAO,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;aAC3F;YAAC,WAAM;gBACJ,MAAM,IAAI,KAAK,CACX,8GAA8G,CACjH,CAAC;aACL;SACJ;QACD,MAAM,IAAI,KAAK,CACX,8GAA8G,CACjH,CAAC;KACL;AACL,CAAC;AAvBD,4CAuBC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,QAA4B;IAC7D,IAAI;QACA,IAAI,QAAQ,EAAE;YACV,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;SAC1B;aAAM;YACH,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC;SACnC;KACJ;IAAC,WAAM;QACJ,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChD,IAAI;gBACA,uEAAuE;gBACvE,OAAO,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;aAChF;YAAC,WAAM;gBACJ,OAAO,SAAS,CAAC;aACpB;SACJ;QACD,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAnBD,oDAmBC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zenstackhq/runtime",
3
3
  "displayName": "ZenStack Runtime Library",
4
- "version": "1.0.0-beta.8",
4
+ "version": "1.0.0",
5
5
  "description": "Runtime of ZenStack for both client-side and server-side environments.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -9,20 +9,47 @@
9
9
  },
10
10
  "main": "index.js",
11
11
  "types": "index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "default": "./index.js"
15
+ },
16
+ "./package.json": {
17
+ "default": "./package.json"
18
+ },
19
+ "./zod": {
20
+ "default": "./zod/index.js"
21
+ },
22
+ "./zod/input": {
23
+ "default": "./zod/input.js"
24
+ },
25
+ "./zod/models": {
26
+ "default": "./zod/models.js"
27
+ },
28
+ "./zod/objects": {
29
+ "default": "./zod/objects.js"
30
+ },
31
+ "./browser": {
32
+ "import": "./browser/index.mjs",
33
+ "require": "./browser/index.js",
34
+ "default": "./browser/index.js",
35
+ "types": "./browser/index.d.ts"
36
+ }
37
+ },
12
38
  "publishConfig": {
13
39
  "directory": "dist",
14
40
  "linkDirectory": true
15
41
  },
16
42
  "dependencies": {
17
- "@paralleldrive/cuid2": "^2.2.0",
18
43
  "@types/bcryptjs": "^2.4.2",
19
44
  "bcryptjs": "^2.4.3",
45
+ "buffer": "^6.0.3",
20
46
  "change-case": "^4.1.2",
21
47
  "colors": "1.4.0",
22
48
  "decimal.js": "^10.4.2",
23
49
  "deepcopy": "^2.1.0",
24
50
  "lower-case-first": "^2.0.2",
25
51
  "pluralize": "^8.0.0",
52
+ "semver": "^7.3.8",
26
53
  "superjson": "^1.11.0",
27
54
  "tslib": "^2.4.1",
28
55
  "upper-case-first": "^2.0.2",
@@ -35,20 +62,19 @@
35
62
  "homepage": "https://zenstack.dev",
36
63
  "license": "MIT",
37
64
  "devDependencies": {
38
- "@prisma/client": "^4.0.0",
39
65
  "@types/bcryptjs": "^2.4.2",
40
66
  "@types/jest": "^29.5.0",
41
- "@types/lower-case-first": "^1.0.1",
42
- "@types/node": "^14.18.29",
67
+ "@types/node": "^18.0.0",
43
68
  "@types/pluralize": "^0.0.29",
69
+ "@types/semver": "^7.3.13",
44
70
  "copyfiles": "^2.4.1",
45
71
  "rimraf": "^3.0.2",
46
72
  "typescript": "^4.9.3"
47
73
  },
48
74
  "scripts": {
49
75
  "clean": "rimraf dist",
50
- "build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./README.md ../../LICENSE dist && copyfiles -u1 'res/**/*' dist && pnpm pack dist --pack-destination '../../../.build'",
51
- "watch": "tsc --watch",
76
+ "build": "pnpm lint && pnpm clean && tsc && tsup-node && copyfiles ./package.json ./README.md ../../LICENSE dist && copyfiles -u1 'res/**/*' dist && pnpm pack dist --pack-destination '../../../.build'",
77
+ "watch": "concurrently \"tsc --watch\" \"tsup-node --watch\"",
52
78
  "lint": "eslint src --ext ts",
53
79
  "publish-dev": "pnpm publish --tag dev"
54
80
  }
package/types.d.ts CHANGED
@@ -1,28 +1,31 @@
1
+ export type PrismaPromise<T> = Promise<T> & Record<string, (args?: any) => PrismaPromise<any>>;
1
2
  /**
2
3
  * Weakly-typed database access methods
3
4
  */
4
5
  export interface DbOperations {
5
- findMany(args?: unknown): Promise<unknown[]>;
6
- findFirst(args: unknown): Promise<unknown>;
7
- findFirstOrThrow(args: unknown): Promise<unknown>;
8
- findUnique(args: unknown): Promise<unknown>;
9
- findUniqueOrThrow(args: unknown): Promise<unknown>;
10
- create(args: unknown): Promise<unknown>;
6
+ findMany(args?: unknown): Promise<any[]>;
7
+ findFirst(args?: unknown): PrismaPromise<any>;
8
+ findFirstOrThrow(args?: unknown): PrismaPromise<any>;
9
+ findUnique(args: unknown): PrismaPromise<any>;
10
+ findUniqueOrThrow(args: unknown): PrismaPromise<any>;
11
+ create(args: unknown): Promise<any>;
11
12
  createMany(args: unknown, skipDuplicates?: boolean): Promise<{
12
13
  count: number;
13
14
  }>;
14
- update(args: unknown): Promise<unknown>;
15
+ update(args: unknown): Promise<any>;
15
16
  updateMany(args: unknown): Promise<{
16
17
  count: number;
17
18
  }>;
18
- upsert(args: unknown): Promise<unknown>;
19
- delete(args: unknown): Promise<unknown>;
19
+ upsert(args: unknown): Promise<any>;
20
+ delete(args: unknown): Promise<any>;
20
21
  deleteMany(args?: unknown): Promise<{
21
22
  count: number;
22
23
  }>;
23
- aggregate(args: unknown): Promise<unknown>;
24
- groupBy(args: unknown): Promise<unknown>;
25
- count(args?: unknown): Promise<unknown>;
24
+ aggregate(args: unknown): Promise<any>;
25
+ groupBy(args: unknown): Promise<any>;
26
+ count(args?: unknown): Promise<any>;
27
+ subscribe(args?: unknown): Promise<any>;
28
+ fields: Record<string, any>;
26
29
  }
27
30
  /**
28
31
  * Kinds of access policy
@@ -44,6 +47,9 @@ export type QueryContext = {
44
47
  * Current login user (provided by @see RequestHandlerOptions)
45
48
  */
46
49
  user?: AuthUser;
50
+ /**
51
+ * Pre-update value of the entity
52
+ */
47
53
  preValue?: any;
48
54
  };
49
55
  export type RuntimeAttribute = {
@@ -93,9 +99,17 @@ export type FieldInfo = {
93
99
  * If the field is the owner side of a relation
94
100
  */
95
101
  isRelationOwner: boolean;
102
+ /**
103
+ * If the field is a foreign key field
104
+ */
105
+ isForeignKey: boolean;
106
+ /**
107
+ * Mapping from foreign key field names to relation field names
108
+ */
109
+ foreignKeyMapping?: Record<string, string>;
96
110
  };
97
111
  export type DbClientContract = Record<string, DbOperations> & {
98
- $transaction: <T>(action: (tx: Record<string, DbOperations>) => Promise<T>) => Promise<T>;
112
+ $transaction: <T>(action: (tx: Record<string, DbOperations>) => Promise<T>, options?: unknown) => Promise<T>;
99
113
  };
100
- export declare const PrismaWriteActions: readonly ["create", "createMany", "connectOrCreate", "update", "updateMany", "upsert", "connect", "disconnect", "delete", "deleteMany"];
114
+ export declare const PrismaWriteActions: readonly ["create", "createMany", "connectOrCreate", "update", "updateMany", "upsert", "connect", "disconnect", "set", "delete", "deleteMany"];
101
115
  export type PrismaWriteActionType = (typeof PrismaWriteActions)[number];
package/types.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.PrismaWriteActions = void 0;
4
5
  exports.PrismaWriteActions = [
@@ -10,6 +11,7 @@ exports.PrismaWriteActions = [
10
11
  'upsert',
11
12
  'connect',
12
13
  'disconnect',
14
+ 'set',
13
15
  'delete',
14
16
  'deleteMany',
15
17
  ];
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4Ga,QAAA,kBAAkB,GAAG;IAC9B,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,YAAY;CACN,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AA+H1C,QAAA,kBAAkB,GAAG;IAC9B,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,KAAK;IACL,QAAQ;IACR,YAAY;CACN,CAAC"}
package/validation.d.ts CHANGED
@@ -17,3 +17,8 @@ export declare function validate(validator: z.ZodType, data: unknown): void;
17
17
  * @returns
18
18
  */
19
19
  export declare function hasAllFields(obj: any, fields: string[]): boolean;
20
+ /**
21
+ * Check if the given objects have equal values for the given fields. Returns
22
+ * false if either object is nullish or is not an object.
23
+ */
24
+ export declare function allFieldsEqual(obj1: any, obj2: any, fields: string[]): boolean;