@zenstackhq/runtime 1.0.0-beta.1 → 1.0.0-beta.11
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/browser/index.d.mts +13 -0
- package/browser/index.d.ts +13 -0
- package/browser/index.js +70 -0
- package/browser/index.js.map +1 -0
- package/browser/index.mjs +32 -0
- package/browser/index.mjs.map +1 -0
- package/constants.d.ts +12 -2
- package/constants.js +13 -2
- package/constants.js.map +1 -1
- package/enhancements/index.d.ts +4 -0
- package/enhancements/index.js +4 -0
- package/enhancements/index.js.map +1 -1
- package/enhancements/model-meta.d.ts +4 -0
- package/enhancements/model-meta.js +24 -3
- package/enhancements/model-meta.js.map +1 -1
- package/enhancements/nested-write-vistor.d.ts +12 -11
- package/enhancements/nested-write-vistor.js +10 -10
- package/enhancements/nested-write-vistor.js.map +1 -1
- package/enhancements/policy/handler.d.ts +4 -3
- package/enhancements/policy/handler.js +12 -13
- package/enhancements/policy/handler.js.map +1 -1
- package/enhancements/policy/index.d.ts +5 -1
- package/enhancements/policy/index.js +36 -4
- package/enhancements/policy/index.js.map +1 -1
- package/enhancements/policy/policy-utils.d.ts +6 -3
- package/enhancements/policy/policy-utils.js +112 -39
- package/enhancements/policy/policy-utils.js.map +1 -1
- package/enhancements/types.d.ts +10 -1
- package/enhancements/utils.js +26 -4
- package/enhancements/utils.js.map +1 -1
- package/enhancements/where-visitor.d.ts +33 -0
- package/enhancements/where-visitor.js +87 -0
- package/enhancements/where-visitor.js.map +1 -0
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/package.json +31 -8
- package/zod/index.d.ts +2 -0
- package/zod/index.js +4 -0
- package/zod/input.d.ts +1 -0
- package/zod/input.js +8 -0
- package/zod/models.d.ts +1 -0
- package/zod/models.js +8 -0
- package/serialization-utils.d.ts +0 -1
- package/serialization-utils.js +0 -22
- package/serialization-utils.js.map +0 -1
- package/zod.d.ts +0 -10
- package/zod.js +0 -17
- package/zod.js.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize the given value with superjson
|
|
3
|
+
*/
|
|
4
|
+
declare function serialize(value: unknown): {
|
|
5
|
+
data: unknown;
|
|
6
|
+
meta: unknown;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Deserialize the given value with superjson using the given metadata
|
|
10
|
+
*/
|
|
11
|
+
declare function deserialize(value: unknown, meta: any): unknown;
|
|
12
|
+
|
|
13
|
+
export { deserialize, serialize };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize the given value with superjson
|
|
3
|
+
*/
|
|
4
|
+
declare function serialize(value: unknown): {
|
|
5
|
+
data: unknown;
|
|
6
|
+
meta: unknown;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Deserialize the given value with superjson using the given metadata
|
|
10
|
+
*/
|
|
11
|
+
declare function deserialize(value: unknown, meta: any): unknown;
|
|
12
|
+
|
|
13
|
+
export { deserialize, serialize };
|
package/browser/index.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/browser/index.ts
|
|
31
|
+
var browser_exports = {};
|
|
32
|
+
__export(browser_exports, {
|
|
33
|
+
deserialize: () => deserialize,
|
|
34
|
+
serialize: () => serialize
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(browser_exports);
|
|
37
|
+
|
|
38
|
+
// src/browser/serialization.ts
|
|
39
|
+
var import_buffer = require("buffer");
|
|
40
|
+
var import_decimal = __toESM(require("decimal.js"));
|
|
41
|
+
var import_superjson = __toESM(require("superjson"));
|
|
42
|
+
import_superjson.default.registerCustom(
|
|
43
|
+
{
|
|
44
|
+
isApplicable: (v) => import_decimal.default.isDecimal(v),
|
|
45
|
+
serialize: (v) => v.toJSON(),
|
|
46
|
+
deserialize: (v) => new import_decimal.default(v)
|
|
47
|
+
},
|
|
48
|
+
"Decimal"
|
|
49
|
+
);
|
|
50
|
+
import_superjson.default.registerCustom(
|
|
51
|
+
{
|
|
52
|
+
isApplicable: (v) => import_buffer.Buffer.isBuffer(v),
|
|
53
|
+
serialize: (v) => v.toString("base64"),
|
|
54
|
+
deserialize: (v) => import_buffer.Buffer.from(v, "base64")
|
|
55
|
+
},
|
|
56
|
+
"Bytes"
|
|
57
|
+
);
|
|
58
|
+
function serialize(value) {
|
|
59
|
+
const { json, meta } = import_superjson.default.serialize(value);
|
|
60
|
+
return { data: json, meta };
|
|
61
|
+
}
|
|
62
|
+
function deserialize(value, meta) {
|
|
63
|
+
return import_superjson.default.deserialize({ json: value, meta });
|
|
64
|
+
}
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
deserialize,
|
|
68
|
+
serialize
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/browser/index.ts","../../src/browser/serialization.ts"],"sourcesContent":["export * from './serialization';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Buffer } from 'buffer';\nimport Decimal from 'decimal.js';\nimport SuperJSON from 'superjson';\n\nSuperJSON.registerCustom<Decimal, string>(\n {\n isApplicable: (v): v is Decimal => Decimal.isDecimal(v),\n serialize: (v) => v.toJSON(),\n deserialize: (v) => new Decimal(v),\n },\n 'Decimal'\n);\n\nSuperJSON.registerCustom<Buffer, string>(\n {\n isApplicable: (v): v is Buffer => Buffer.isBuffer(v),\n serialize: (v) => v.toString('base64'),\n deserialize: (v) => Buffer.from(v, 'base64'),\n },\n 'Bytes'\n);\n\n/**\n * Serialize the given value with superjson\n */\nexport function serialize(value: unknown): { data: unknown; meta: unknown } {\n const { json, meta } = SuperJSON.serialize(value);\n return { data: json, meta };\n}\n\n/**\n * Deserialize the given value with superjson using the given metadata\n */\nexport function deserialize(value: unknown, meta: any): unknown {\n return SuperJSON.deserialize({ json: value as any, meta });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAAuB;AACvB,qBAAoB;AACpB,uBAAsB;AAEtB,iBAAAA,QAAU;AAAA,EACN;AAAA,IACI,cAAc,CAAC,MAAoB,eAAAC,QAAQ,UAAU,CAAC;AAAA,IACtD,WAAW,CAAC,MAAM,EAAE,OAAO;AAAA,IAC3B,aAAa,CAAC,MAAM,IAAI,eAAAA,QAAQ,CAAC;AAAA,EACrC;AAAA,EACA;AACJ;AAEA,iBAAAD,QAAU;AAAA,EACN;AAAA,IACI,cAAc,CAAC,MAAmB,qBAAO,SAAS,CAAC;AAAA,IACnD,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ;AAAA,IACrC,aAAa,CAAC,MAAM,qBAAO,KAAK,GAAG,QAAQ;AAAA,EAC/C;AAAA,EACA;AACJ;AAKO,SAAS,UAAU,OAAkD;AACxE,QAAM,EAAE,MAAM,KAAK,IAAI,iBAAAA,QAAU,UAAU,KAAK;AAChD,SAAO,EAAE,MAAM,MAAM,KAAK;AAC9B;AAKO,SAAS,YAAY,OAAgB,MAAoB;AAC5D,SAAO,iBAAAA,QAAU,YAAY,EAAE,MAAM,OAAc,KAAK,CAAC;AAC7D;","names":["SuperJSON","Decimal"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// src/browser/serialization.ts
|
|
2
|
+
import { Buffer } from "buffer";
|
|
3
|
+
import Decimal from "decimal.js";
|
|
4
|
+
import SuperJSON from "superjson";
|
|
5
|
+
SuperJSON.registerCustom(
|
|
6
|
+
{
|
|
7
|
+
isApplicable: (v) => Decimal.isDecimal(v),
|
|
8
|
+
serialize: (v) => v.toJSON(),
|
|
9
|
+
deserialize: (v) => new Decimal(v)
|
|
10
|
+
},
|
|
11
|
+
"Decimal"
|
|
12
|
+
);
|
|
13
|
+
SuperJSON.registerCustom(
|
|
14
|
+
{
|
|
15
|
+
isApplicable: (v) => Buffer.isBuffer(v),
|
|
16
|
+
serialize: (v) => v.toString("base64"),
|
|
17
|
+
deserialize: (v) => Buffer.from(v, "base64")
|
|
18
|
+
},
|
|
19
|
+
"Bytes"
|
|
20
|
+
);
|
|
21
|
+
function serialize(value) {
|
|
22
|
+
const { json, meta } = SuperJSON.serialize(value);
|
|
23
|
+
return { data: json, meta };
|
|
24
|
+
}
|
|
25
|
+
function deserialize(value, meta) {
|
|
26
|
+
return SuperJSON.deserialize({ json: value, meta });
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
deserialize,
|
|
30
|
+
serialize
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/browser/serialization.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Buffer } from 'buffer';\nimport Decimal from 'decimal.js';\nimport SuperJSON from 'superjson';\n\nSuperJSON.registerCustom<Decimal, string>(\n {\n isApplicable: (v): v is Decimal => Decimal.isDecimal(v),\n serialize: (v) => v.toJSON(),\n deserialize: (v) => new Decimal(v),\n },\n 'Decimal'\n);\n\nSuperJSON.registerCustom<Buffer, string>(\n {\n isApplicable: (v): v is Buffer => Buffer.isBuffer(v),\n serialize: (v) => v.toString('base64'),\n deserialize: (v) => Buffer.from(v, 'base64'),\n },\n 'Bytes'\n);\n\n/**\n * Serialize the given value with superjson\n */\nexport function serialize(value: unknown): { data: unknown; meta: unknown } {\n const { json, meta } = SuperJSON.serialize(value);\n return { data: json, meta };\n}\n\n/**\n * Deserialize the given value with superjson using the given metadata\n */\nexport function deserialize(value: unknown, meta: any): unknown {\n return SuperJSON.deserialize({ json: value as any, meta });\n}\n"],"mappings":";AACA,SAAS,cAAc;AACvB,OAAO,aAAa;AACpB,OAAO,eAAe;AAEtB,UAAU;AAAA,EACN;AAAA,IACI,cAAc,CAAC,MAAoB,QAAQ,UAAU,CAAC;AAAA,IACtD,WAAW,CAAC,MAAM,EAAE,OAAO;AAAA,IAC3B,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC;AAAA,EACrC;AAAA,EACA;AACJ;AAEA,UAAU;AAAA,EACN;AAAA,IACI,cAAc,CAAC,MAAmB,OAAO,SAAS,CAAC;AAAA,IACnD,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ;AAAA,IACrC,aAAa,CAAC,MAAM,OAAO,KAAK,GAAG,QAAQ;AAAA,EAC/C;AAAA,EACA;AACJ;AAKO,SAAS,UAAU,OAAkD;AACxE,QAAM,EAAE,MAAM,KAAK,IAAI,UAAU,UAAU,KAAK;AAChD,SAAO,EAAE,MAAM,MAAM,KAAK;AAC9B;AAKO,SAAS,YAAY,OAAgB,MAAoB;AAC5D,SAAO,UAAU,YAAY,EAAE,MAAM,OAAc,KAAK,CAAC;AAC7D;","names":[]}
|
package/constants.d.ts
CHANGED
|
@@ -15,11 +15,21 @@ export declare const GUARD_FIELD_NAME = "zenstack_guard";
|
|
|
15
15
|
*/
|
|
16
16
|
export declare const AUXILIARY_FIELDS: string[];
|
|
17
17
|
/**
|
|
18
|
-
* Reasons for a CRUD operation to fail
|
|
18
|
+
* Reasons for a CRUD operation to fail
|
|
19
19
|
*/
|
|
20
20
|
export declare enum CrudFailureReason {
|
|
21
21
|
/**
|
|
22
22
|
* CRUD suceeded but the result was not readable.
|
|
23
23
|
*/
|
|
24
|
-
RESULT_NOT_READABLE = "RESULT_NOT_READABLE"
|
|
24
|
+
RESULT_NOT_READABLE = "RESULT_NOT_READABLE",
|
|
25
|
+
/**
|
|
26
|
+
* CRUD failed because of a data validation rule violation.
|
|
27
|
+
*/
|
|
28
|
+
DATA_VALIDATION_VIOLATION = "DATA_VALIDATION_VIOLATION"
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Prisma error codes used
|
|
32
|
+
*/
|
|
33
|
+
export declare enum PrismaErrorCode {
|
|
34
|
+
CONSTRAINED_FAILED = "P2004"
|
|
25
35
|
}
|
package/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CrudFailureReason = exports.AUXILIARY_FIELDS = exports.GUARD_FIELD_NAME = exports.TRANSACTION_FIELD_NAME = exports.DEFAULT_PASSWORD_SALT_LENGTH = void 0;
|
|
3
|
+
exports.PrismaErrorCode = exports.CrudFailureReason = exports.AUXILIARY_FIELDS = exports.GUARD_FIELD_NAME = exports.TRANSACTION_FIELD_NAME = exports.DEFAULT_PASSWORD_SALT_LENGTH = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Default length of password hash salt (used by bcryptjs to hash password)
|
|
6
6
|
*/
|
|
@@ -18,7 +18,7 @@ exports.GUARD_FIELD_NAME = 'zenstack_guard';
|
|
|
18
18
|
*/
|
|
19
19
|
exports.AUXILIARY_FIELDS = [exports.TRANSACTION_FIELD_NAME, exports.GUARD_FIELD_NAME];
|
|
20
20
|
/**
|
|
21
|
-
* Reasons for a CRUD operation to fail
|
|
21
|
+
* Reasons for a CRUD operation to fail
|
|
22
22
|
*/
|
|
23
23
|
var CrudFailureReason;
|
|
24
24
|
(function (CrudFailureReason) {
|
|
@@ -26,5 +26,16 @@ var CrudFailureReason;
|
|
|
26
26
|
* CRUD suceeded but the result was not readable.
|
|
27
27
|
*/
|
|
28
28
|
CrudFailureReason["RESULT_NOT_READABLE"] = "RESULT_NOT_READABLE";
|
|
29
|
+
/**
|
|
30
|
+
* CRUD failed because of a data validation rule violation.
|
|
31
|
+
*/
|
|
32
|
+
CrudFailureReason["DATA_VALIDATION_VIOLATION"] = "DATA_VALIDATION_VIOLATION";
|
|
29
33
|
})(CrudFailureReason = exports.CrudFailureReason || (exports.CrudFailureReason = {}));
|
|
34
|
+
/**
|
|
35
|
+
* Prisma error codes used
|
|
36
|
+
*/
|
|
37
|
+
var PrismaErrorCode;
|
|
38
|
+
(function (PrismaErrorCode) {
|
|
39
|
+
PrismaErrorCode["CONSTRAINED_FAILED"] = "P2004";
|
|
40
|
+
})(PrismaErrorCode = exports.PrismaErrorCode || (exports.PrismaErrorCode = {}));
|
|
30
41
|
//# sourceMappingURL=constants.js.map
|
package/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;GAEG;AACU,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;GAEG;AACU,QAAA,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD;;GAEG;AACU,QAAA,gBAAgB,GAAG,CAAC,8BAAsB,EAAE,wBAAgB,CAAC,CAAC;AAE3E;;GAEG;AACH,IAAY,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;GAEG;AACU,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;GAEG;AACU,QAAA,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD;;GAEG;AACU,QAAA,gBAAgB,GAAG,CAAC,8BAAsB,EAAE,wBAAgB,CAAC,CAAC;AAE3E;;GAEG;AACH,IAAY,iBAUX;AAVD,WAAY,iBAAiB;IACzB;;OAEG;IACH,gEAA2C,CAAA;IAE3C;;OAEG;IACH,4EAAuD,CAAA;AAC3D,CAAC,EAVW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAU5B;AAED;;GAEG;AACH,IAAY,eAEX;AAFD,WAAY,eAAe;IACvB,+CAA4B,CAAA;AAChC,CAAC,EAFW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAE1B"}
|
package/enhancements/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
export * from './model-meta';
|
|
2
|
+
export * from './nested-write-vistor';
|
|
1
3
|
export * from './omit';
|
|
2
4
|
export * from './password';
|
|
3
5
|
export * from './policy';
|
|
4
6
|
export * from './preset';
|
|
7
|
+
export * from './types';
|
|
5
8
|
export * from './utils';
|
|
9
|
+
export * from './where-visitor';
|
package/enhancements/index.js
CHANGED
|
@@ -14,9 +14,13 @@ 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("./model-meta"), exports);
|
|
18
|
+
__exportStar(require("./nested-write-vistor"), exports);
|
|
17
19
|
__exportStar(require("./omit"), exports);
|
|
18
20
|
__exportStar(require("./password"), exports);
|
|
19
21
|
__exportStar(require("./policy"), exports);
|
|
20
22
|
__exportStar(require("./preset"), exports);
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
21
24
|
__exportStar(require("./utils"), exports);
|
|
25
|
+
__exportStar(require("./where-visitor"), exports);
|
|
22
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enhancements/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enhancements/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,wDAAsC;AACtC,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB;AACxB,kDAAgC"}
|
|
@@ -7,3 +7,7 @@ export declare function getDefaultModelMeta(): ModelMeta;
|
|
|
7
7
|
* Resolves a model field to its metadata. Returns undefined if not found.
|
|
8
8
|
*/
|
|
9
9
|
export declare function resolveField(modelMeta: ModelMeta, model: string, field: string): import("..").FieldInfo;
|
|
10
|
+
/**
|
|
11
|
+
* Gets all fields of a model.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getFields(modelMeta: ModelMeta, model: string): Record<string, import("..").FieldInfo>;
|
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resolveField = exports.getDefaultModelMeta = void 0;
|
|
6
|
+
exports.getFields = exports.resolveField = exports.getDefaultModelMeta = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
4
8
|
const lower_case_first_1 = require("lower-case-first");
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
5
10
|
/**
|
|
6
11
|
* Load model meta from standard location.
|
|
7
12
|
*/
|
|
8
13
|
function getDefaultModelMeta() {
|
|
9
14
|
try {
|
|
10
|
-
//
|
|
15
|
+
// normal load
|
|
11
16
|
return require('.zenstack/model-meta').default;
|
|
12
17
|
}
|
|
13
18
|
catch (_a) {
|
|
14
|
-
|
|
19
|
+
if (process.env.ZENSTACK_TEST === '1') {
|
|
20
|
+
try {
|
|
21
|
+
// special handling for running as tests, try resolving relative to CWD
|
|
22
|
+
return require(path_1.default.join(process.cwd(), 'node_modules', '.zenstack', 'model-meta')).default;
|
|
23
|
+
}
|
|
24
|
+
catch (_b) {
|
|
25
|
+
throw new Error('Model meta cannot be loaded. Please make sure "zenstack generate" has been run.');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
throw new Error('Model meta cannot be loaded. Please make sure "zenstack generate" has been run.');
|
|
15
29
|
}
|
|
16
30
|
}
|
|
17
31
|
exports.getDefaultModelMeta = getDefaultModelMeta;
|
|
@@ -22,4 +36,11 @@ function resolveField(modelMeta, model, field) {
|
|
|
22
36
|
return modelMeta.fields[(0, lower_case_first_1.lowerCaseFirst)(model)][field];
|
|
23
37
|
}
|
|
24
38
|
exports.resolveField = resolveField;
|
|
39
|
+
/**
|
|
40
|
+
* Gets all fields of a model.
|
|
41
|
+
*/
|
|
42
|
+
function getFields(modelMeta, model) {
|
|
43
|
+
return modelMeta.fields[(0, lower_case_first_1.lowerCaseFirst)(model)];
|
|
44
|
+
}
|
|
45
|
+
exports.getFields = getFields;
|
|
25
46
|
//# sourceMappingURL=model-meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-meta.js","sourceRoot":"","sources":["../../src/enhancements/model-meta.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-meta.js","sourceRoot":"","sources":["../../src/enhancements/model-meta.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,uDAAkD;AAClD,gDAAwB;AAGxB;;GAEG;AACH,SAAgB,mBAAmB;IAC/B,IAAI;QACA,cAAc;QACd,OAAO,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC;KAClD;IAAC,WAAM;QACJ,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,EAAE;YACnC,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;AAfD,kDAeC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,SAAoB,EAAE,KAAa,EAAE,KAAa;IAC3E,OAAO,SAAS,CAAC,MAAM,CAAC,IAAA,iCAAc,EAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAFD,oCAEC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,SAAoB,EAAE,KAAa;IACzD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAA,iCAAc,EAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAFD,8BAEC"}
|
|
@@ -2,13 +2,14 @@ import { FieldInfo, PrismaWriteActionType } from '../types';
|
|
|
2
2
|
import { ModelMeta } from './types';
|
|
3
3
|
type NestingPathItem = {
|
|
4
4
|
field?: FieldInfo;
|
|
5
|
+
model: string;
|
|
5
6
|
where: any;
|
|
6
7
|
unique: boolean;
|
|
7
8
|
};
|
|
8
9
|
/**
|
|
9
10
|
* Context for visiting
|
|
10
11
|
*/
|
|
11
|
-
export type
|
|
12
|
+
export type NestedWriteVisitorContext = {
|
|
12
13
|
/**
|
|
13
14
|
* Parent data, can be used to replace fields
|
|
14
15
|
*/
|
|
@@ -26,29 +27,29 @@ export type VisitorContext = {
|
|
|
26
27
|
* NestedWriteVisitor's callback actions
|
|
27
28
|
*/
|
|
28
29
|
export type NestedWriterVisitorCallback = {
|
|
29
|
-
create?: (model: string, args: any[], context:
|
|
30
|
+
create?: (model: string, args: any[], context: NestedWriteVisitorContext) => Promise<void>;
|
|
30
31
|
connectOrCreate?: (model: string, args: {
|
|
31
32
|
where: object;
|
|
32
33
|
create: any;
|
|
33
|
-
}, context:
|
|
34
|
-
connect?: (model: string, args: object, context:
|
|
35
|
-
disconnect?: (model: string, args: object, context:
|
|
34
|
+
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
35
|
+
connect?: (model: string, args: object, context: NestedWriteVisitorContext) => Promise<void>;
|
|
36
|
+
disconnect?: (model: string, args: object, context: NestedWriteVisitorContext) => Promise<void>;
|
|
36
37
|
update?: (model: string, args: {
|
|
37
38
|
where: object;
|
|
38
39
|
data: any;
|
|
39
|
-
}, context:
|
|
40
|
+
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
40
41
|
updateMany?: (model: string, args: {
|
|
41
42
|
where?: object;
|
|
42
43
|
data: any;
|
|
43
|
-
}, context:
|
|
44
|
+
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
44
45
|
upsert?: (model: string, args: {
|
|
45
46
|
where: object;
|
|
46
47
|
create: any;
|
|
47
48
|
update: any;
|
|
48
|
-
}, context:
|
|
49
|
-
delete?: (model: string, args: object | boolean, context:
|
|
50
|
-
deleteMany?: (model: string, args: any | object, context:
|
|
51
|
-
field?: (field: FieldInfo, action: PrismaWriteActionType, data: any, context:
|
|
49
|
+
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
50
|
+
delete?: (model: string, args: object | boolean, context: NestedWriteVisitorContext) => Promise<void>;
|
|
51
|
+
deleteMany?: (model: string, args: any | object, context: NestedWriteVisitorContext) => Promise<void>;
|
|
52
|
+
field?: (field: FieldInfo, action: PrismaWriteActionType, data: any, context: NestedWriteVisitorContext) => Promise<void>;
|
|
52
53
|
};
|
|
53
54
|
/**
|
|
54
55
|
* Recursive visitor for nested write (create/update) payload
|
|
@@ -61,7 +61,7 @@ class NestedWriteVisitor {
|
|
|
61
61
|
// visit payload
|
|
62
62
|
switch (action) {
|
|
63
63
|
case 'create':
|
|
64
|
-
context.nestingPath.push({ field, where: {}, unique: false });
|
|
64
|
+
context.nestingPath.push({ field, model, where: {}, unique: false });
|
|
65
65
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
66
66
|
if (this.callback.create) {
|
|
67
67
|
yield this.callback.create(model, item, context);
|
|
@@ -72,7 +72,7 @@ class NestedWriteVisitor {
|
|
|
72
72
|
case 'createMany':
|
|
73
73
|
// skip the 'data' layer so as to keep consistency with 'create'
|
|
74
74
|
if (data.data) {
|
|
75
|
-
context.nestingPath.push({ field, where: {}, unique: false });
|
|
75
|
+
context.nestingPath.push({ field, model, where: {}, unique: false });
|
|
76
76
|
for (const item of (0, utils_1.enumerate)(data.data)) {
|
|
77
77
|
if (this.callback.create) {
|
|
78
78
|
yield this.callback.create(model, item, context);
|
|
@@ -82,7 +82,7 @@ class NestedWriteVisitor {
|
|
|
82
82
|
}
|
|
83
83
|
break;
|
|
84
84
|
case 'connectOrCreate':
|
|
85
|
-
context.nestingPath.push({ field, where: data.where, unique: true });
|
|
85
|
+
context.nestingPath.push({ field, model, where: data.where, unique: true });
|
|
86
86
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
87
87
|
if (this.callback.connectOrCreate) {
|
|
88
88
|
yield this.callback.connectOrCreate(model, item, context);
|
|
@@ -93,7 +93,7 @@ class NestedWriteVisitor {
|
|
|
93
93
|
case 'connect':
|
|
94
94
|
if (this.callback.connect) {
|
|
95
95
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
96
|
-
const newContext = Object.assign(Object.assign({}, context), { nestingPath: [...context.nestingPath, { field, where: item, unique: true }] });
|
|
96
|
+
const newContext = Object.assign(Object.assign({}, context), { nestingPath: [...context.nestingPath, { field, model, where: item, unique: true }] });
|
|
97
97
|
yield this.callback.connect(model, item, newContext);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -106,14 +106,14 @@ class NestedWriteVisitor {
|
|
|
106
106
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
107
107
|
const newContext = Object.assign(Object.assign({}, context), { nestingPath: [
|
|
108
108
|
...context.nestingPath,
|
|
109
|
-
{ field, where: item, unique: typeof item === 'object' },
|
|
109
|
+
{ field, model, where: item, unique: typeof item === 'object' },
|
|
110
110
|
] });
|
|
111
111
|
yield this.callback.disconnect(model, item, newContext);
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
break;
|
|
115
115
|
case 'update':
|
|
116
|
-
context.nestingPath.push({ field, where: data.where, unique: false });
|
|
116
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
117
117
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
118
118
|
if (this.callback.update) {
|
|
119
119
|
yield this.callback.update(model, item, context);
|
|
@@ -123,7 +123,7 @@ class NestedWriteVisitor {
|
|
|
123
123
|
}
|
|
124
124
|
break;
|
|
125
125
|
case 'updateMany':
|
|
126
|
-
context.nestingPath.push({ field, where: data.where, unique: false });
|
|
126
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
127
127
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
128
128
|
if (this.callback.updateMany) {
|
|
129
129
|
yield this.callback.updateMany(model, item, context);
|
|
@@ -132,7 +132,7 @@ class NestedWriteVisitor {
|
|
|
132
132
|
}
|
|
133
133
|
break;
|
|
134
134
|
case 'upsert': {
|
|
135
|
-
context.nestingPath.push({ field, where: data.where, unique: true });
|
|
135
|
+
context.nestingPath.push({ field, model, where: data.where, unique: true });
|
|
136
136
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
137
137
|
if (this.callback.upsert) {
|
|
138
138
|
yield this.callback.upsert(model, item, context);
|
|
@@ -144,7 +144,7 @@ class NestedWriteVisitor {
|
|
|
144
144
|
}
|
|
145
145
|
case 'delete': {
|
|
146
146
|
if (this.callback.delete) {
|
|
147
|
-
context.nestingPath.push({ field, where: data.where, unique: false });
|
|
147
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
148
148
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
149
149
|
yield this.callback.delete(model, item, context);
|
|
150
150
|
}
|
|
@@ -153,7 +153,7 @@ class NestedWriteVisitor {
|
|
|
153
153
|
}
|
|
154
154
|
case 'deleteMany':
|
|
155
155
|
if (this.callback.deleteMany) {
|
|
156
|
-
context.nestingPath.push({ field, where: data.where, unique: false });
|
|
156
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
157
157
|
for (const item of (0, utils_1.enumerate)(data)) {
|
|
158
158
|
yield this.callback.deleteMany(model, item, context);
|
|
159
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-write-vistor.js","sourceRoot":"","sources":["../../src/enhancements/nested-write-vistor.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,uDAAuD;;;;;;;;;;;;AAEvD,oCAAgF;AAChF,6CAA4C;AAE5C,mCAAoD;
|
|
1
|
+
{"version":3,"file":"nested-write-vistor.js","sourceRoot":"","sources":["../../src/enhancements/nested-write-vistor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AuthUser, DbClientContract, PolicyOperationKind } from '../../types';
|
|
2
2
|
import { BatchResult, PrismaProxyHandler } from '../proxy';
|
|
3
|
-
import { ModelMeta, PolicyDef } from '../types';
|
|
3
|
+
import type { ModelMeta, PolicyDef, ZodSchemas } from '../types';
|
|
4
4
|
/**
|
|
5
5
|
* Prisma proxy handler for injecting access policy check.
|
|
6
6
|
*/
|
|
@@ -8,12 +8,13 @@ export declare class PolicyProxyHandler<DbClient extends DbClientContract> imple
|
|
|
8
8
|
private readonly prisma;
|
|
9
9
|
private readonly policy;
|
|
10
10
|
private readonly modelMeta;
|
|
11
|
+
private readonly zodSchemas;
|
|
11
12
|
private readonly model;
|
|
12
13
|
private readonly user?;
|
|
13
14
|
private readonly logPrismaQuery?;
|
|
14
15
|
private readonly logger;
|
|
15
16
|
private readonly utils;
|
|
16
|
-
constructor(prisma: DbClient, policy: PolicyDef, modelMeta: ModelMeta, model: string, user?: AuthUser | undefined, logPrismaQuery?: boolean | undefined);
|
|
17
|
+
constructor(prisma: DbClient, policy: PolicyDef, modelMeta: ModelMeta, zodSchemas: ZodSchemas | undefined, model: string, user?: AuthUser | undefined, logPrismaQuery?: boolean | undefined);
|
|
17
18
|
private get modelClient();
|
|
18
19
|
findUnique(args: any): Promise<{} | null>;
|
|
19
20
|
findUniqueOrThrow(args: any): Promise<{}>;
|
|
@@ -32,7 +33,7 @@ export declare class PolicyProxyHandler<DbClient extends DbClientContract> imple
|
|
|
32
33
|
aggregate(args: any): Promise<unknown>;
|
|
33
34
|
groupBy(args: any): Promise<unknown>;
|
|
34
35
|
count(args: any): Promise<unknown>;
|
|
35
|
-
tryReject(operation: PolicyOperationKind):
|
|
36
|
+
tryReject(operation: PolicyOperationKind): void;
|
|
36
37
|
private checkReadback;
|
|
37
38
|
private get shouldLogQuery();
|
|
38
39
|
}
|
|
@@ -19,15 +19,16 @@ const policy_utils_1 = require("./policy-utils");
|
|
|
19
19
|
* Prisma proxy handler for injecting access policy check.
|
|
20
20
|
*/
|
|
21
21
|
class PolicyProxyHandler {
|
|
22
|
-
constructor(prisma, policy, modelMeta, model, user, logPrismaQuery) {
|
|
22
|
+
constructor(prisma, policy, modelMeta, zodSchemas, model, user, logPrismaQuery) {
|
|
23
23
|
this.prisma = prisma;
|
|
24
24
|
this.policy = policy;
|
|
25
25
|
this.modelMeta = modelMeta;
|
|
26
|
+
this.zodSchemas = zodSchemas;
|
|
26
27
|
this.model = model;
|
|
27
28
|
this.user = user;
|
|
28
29
|
this.logPrismaQuery = logPrismaQuery;
|
|
29
30
|
this.logger = new logger_1.Logger(prisma);
|
|
30
|
-
this.utils = new policy_utils_1.PolicyUtil(this.prisma, this.modelMeta, this.policy, this.user, this.logPrismaQuery);
|
|
31
|
+
this.utils = new policy_utils_1.PolicyUtil(this.prisma, this.modelMeta, this.policy, this.zodSchemas, this.user, this.logPrismaQuery);
|
|
31
32
|
}
|
|
32
33
|
get modelClient() {
|
|
33
34
|
return this.prisma[this.model];
|
|
@@ -41,7 +42,7 @@ class PolicyProxyHandler {
|
|
|
41
42
|
if (!args.where) {
|
|
42
43
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, 'where field is required in query argument');
|
|
43
44
|
}
|
|
44
|
-
const guard =
|
|
45
|
+
const guard = this.utils.getAuthGuard(this.model, 'read');
|
|
45
46
|
if (guard === false) {
|
|
46
47
|
return null;
|
|
47
48
|
}
|
|
@@ -51,7 +52,7 @@ class PolicyProxyHandler {
|
|
|
51
52
|
}
|
|
52
53
|
findUniqueOrThrow(args) {
|
|
53
54
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
const guard =
|
|
55
|
+
const guard = this.utils.getAuthGuard(this.model, 'read');
|
|
55
56
|
if (guard === false) {
|
|
56
57
|
throw this.utils.notFound(this.model);
|
|
57
58
|
}
|
|
@@ -65,7 +66,7 @@ class PolicyProxyHandler {
|
|
|
65
66
|
findFirst(args) {
|
|
66
67
|
var _a;
|
|
67
68
|
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
-
const guard =
|
|
69
|
+
const guard = this.utils.getAuthGuard(this.model, 'read');
|
|
69
70
|
if (guard === false) {
|
|
70
71
|
return null;
|
|
71
72
|
}
|
|
@@ -75,7 +76,7 @@ class PolicyProxyHandler {
|
|
|
75
76
|
}
|
|
76
77
|
findFirstOrThrow(args) {
|
|
77
78
|
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
const guard =
|
|
79
|
+
const guard = this.utils.getAuthGuard(this.model, 'read');
|
|
79
80
|
if (guard === false) {
|
|
80
81
|
throw this.utils.notFound(this.model);
|
|
81
82
|
}
|
|
@@ -88,7 +89,7 @@ class PolicyProxyHandler {
|
|
|
88
89
|
}
|
|
89
90
|
findMany(args) {
|
|
90
91
|
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
const guard =
|
|
92
|
+
const guard = this.utils.getAuthGuard(this.model, 'read');
|
|
92
93
|
if (guard === false) {
|
|
93
94
|
return [];
|
|
94
95
|
}
|
|
@@ -313,12 +314,10 @@ class PolicyProxyHandler {
|
|
|
313
314
|
});
|
|
314
315
|
}
|
|
315
316
|
tryReject(operation) {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
});
|
|
317
|
+
const guard = this.utils.getAuthGuard(this.model, operation);
|
|
318
|
+
if (guard === false) {
|
|
319
|
+
throw this.utils.deniedByPolicy(this.model, operation);
|
|
320
|
+
}
|
|
322
321
|
}
|
|
323
322
|
checkReadback(origArgs, ids, action, operation) {
|
|
324
323
|
return __awaiter(this, void 0, void 0, function* () {
|