@zenstackhq/runtime 1.0.0-beta.9 → 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.
- package/browser/index.js +3 -2
- package/browser/index.js.map +1 -1
- package/browser/index.mjs +1 -0
- package/browser/index.mjs.map +1 -1
- package/constants.d.ts +57 -14
- package/constants.js +57 -14
- package/constants.js.map +1 -1
- package/enhancements/enhance.d.ts +18 -0
- package/enhancements/enhance.js +42 -0
- package/enhancements/enhance.js.map +1 -0
- package/enhancements/index.d.ts +2 -1
- package/enhancements/index.js +2 -1
- package/enhancements/index.js.map +1 -1
- package/enhancements/model-data-visitor.d.ts +16 -0
- package/enhancements/model-data-visitor.js +41 -0
- package/enhancements/model-data-visitor.js.map +1 -0
- package/enhancements/model-meta.d.ts +3 -6
- package/enhancements/model-meta.js +3 -28
- package/enhancements/model-meta.js.map +1 -1
- package/enhancements/{nested-write-vistor.d.ts → nested-write-visitor.d.ts} +18 -14
- package/enhancements/{nested-write-vistor.js → nested-write-visitor.js} +68 -29
- package/enhancements/nested-write-visitor.js.map +1 -0
- package/enhancements/omit.d.ts +4 -4
- package/enhancements/omit.js +2 -1
- package/enhancements/omit.js.map +1 -1
- package/enhancements/password.d.ts +4 -4
- package/enhancements/password.js +4 -4
- package/enhancements/password.js.map +1 -1
- package/enhancements/policy/handler.d.ts +34 -18
- package/enhancements/policy/handler.js +844 -157
- package/enhancements/policy/handler.js.map +1 -1
- package/enhancements/policy/index.d.ts +4 -4
- package/enhancements/policy/index.js +20 -38
- package/enhancements/policy/index.js.map +1 -1
- package/enhancements/policy/logger.js +1 -1
- package/enhancements/policy/logger.js.map +1 -1
- package/enhancements/policy/policy-utils.d.ts +106 -48
- package/enhancements/policy/policy-utils.js +778 -671
- package/enhancements/policy/policy-utils.js.map +1 -1
- package/enhancements/policy/promise.d.ts +5 -0
- package/enhancements/policy/promise.js +42 -0
- package/enhancements/policy/promise.js.map +1 -0
- package/enhancements/preset.d.ts +3 -8
- package/enhancements/preset.js +2 -4
- package/enhancements/preset.js.map +1 -1
- package/enhancements/proxy.d.ts +3 -1
- package/enhancements/proxy.js +45 -28
- package/enhancements/proxy.js.map +1 -1
- package/enhancements/types.d.ts +24 -7
- package/enhancements/types.js +1 -0
- package/enhancements/types.js.map +1 -1
- package/enhancements/utils.d.ts +5 -1
- package/enhancements/utils.js +36 -8
- package/enhancements/utils.js.map +1 -1
- package/error.js +9 -3
- package/error.js.map +1 -1
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/loader.d.ts +22 -0
- package/loader.js +99 -0
- package/loader.js.map +1 -0
- package/package.json +9 -2
- package/types.d.ts +28 -14
- package/types.js +2 -0
- package/types.js.map +1 -1
- package/validation.d.ts +5 -0
- package/validation.js +13 -1
- package/validation.js.map +1 -1
- package/version.d.ts +5 -0
- package/version.js +34 -1
- package/version.js.map +1 -1
- package/zod/index.d.ts +1 -0
- package/zod/index.js +1 -0
- package/zod/objects.d.ts +1 -0
- package/zod/objects.js +8 -0
- package/enhancements/nested-write-vistor.js.map +0 -1
package/browser/index.js
CHANGED
|
@@ -36,6 +36,7 @@ __export(browser_exports, {
|
|
|
36
36
|
module.exports = __toCommonJS(browser_exports);
|
|
37
37
|
|
|
38
38
|
// src/browser/serialization.ts
|
|
39
|
+
var import_buffer = require("buffer");
|
|
39
40
|
var import_decimal = __toESM(require("decimal.js"));
|
|
40
41
|
var import_superjson = __toESM(require("superjson"));
|
|
41
42
|
import_superjson.default.registerCustom(
|
|
@@ -48,9 +49,9 @@ import_superjson.default.registerCustom(
|
|
|
48
49
|
);
|
|
49
50
|
import_superjson.default.registerCustom(
|
|
50
51
|
{
|
|
51
|
-
isApplicable: (v) => Buffer.isBuffer(v),
|
|
52
|
+
isApplicable: (v) => import_buffer.Buffer.isBuffer(v),
|
|
52
53
|
serialize: (v) => v.toString("base64"),
|
|
53
|
-
deserialize: (v) => Buffer.from(v, "base64")
|
|
54
|
+
deserialize: (v) => import_buffer.Buffer.from(v, "base64")
|
|
54
55
|
},
|
|
55
56
|
"Bytes"
|
|
56
57
|
);
|
package/browser/index.js.map
CHANGED
|
@@ -1 +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 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,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,
|
|
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"]}
|
package/browser/index.mjs
CHANGED
package/browser/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/browser/serialization.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\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,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":[]}
|
|
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
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Default
|
|
2
|
+
* Default path for loading CLI-generated code
|
|
3
3
|
*/
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const DEFAULT_RUNTIME_LOAD_PATH = ".zenstack";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
export declare const TRANSACTION_FIELD_NAME = "zenstack_transaction";
|
|
9
|
-
/**
|
|
10
|
-
* Auxiliary database field for building up policy check queries
|
|
11
|
-
*/
|
|
12
|
-
export declare const GUARD_FIELD_NAME = "zenstack_guard";
|
|
13
|
-
/**
|
|
14
|
-
* All Auxiliary fields.
|
|
6
|
+
* Default length of password hash salt (used by bcryptjs to hash password)
|
|
15
7
|
*/
|
|
16
|
-
export declare const
|
|
8
|
+
export declare const DEFAULT_PASSWORD_SALT_LENGTH = 12;
|
|
17
9
|
/**
|
|
18
10
|
* Reasons for a CRUD operation to fail
|
|
19
11
|
*/
|
|
20
12
|
export declare enum CrudFailureReason {
|
|
21
13
|
/**
|
|
22
|
-
* CRUD
|
|
14
|
+
* CRUD failed because of access policy violation.
|
|
15
|
+
*/
|
|
16
|
+
ACCESS_POLICY_VIOLATION = "ACCESS_POLICY_VIOLATION",
|
|
17
|
+
/**
|
|
18
|
+
* CRUD succeeded but the result was not readable.
|
|
23
19
|
*/
|
|
24
20
|
RESULT_NOT_READABLE = "RESULT_NOT_READABLE",
|
|
25
21
|
/**
|
|
@@ -31,5 +27,52 @@ export declare enum CrudFailureReason {
|
|
|
31
27
|
* Prisma error codes used
|
|
32
28
|
*/
|
|
33
29
|
export declare enum PrismaErrorCode {
|
|
34
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Unique constraint failed
|
|
32
|
+
*/
|
|
33
|
+
UNIQUE_CONSTRAINT_FAILED = "P2002",
|
|
34
|
+
/**
|
|
35
|
+
* A constraint failed on the database
|
|
36
|
+
*/
|
|
37
|
+
CONSTRAINED_FAILED = "P2004",
|
|
38
|
+
/**
|
|
39
|
+
* The required connected records were not found
|
|
40
|
+
*/
|
|
41
|
+
REQUIRED_CONNECTED_RECORD_NOT_FOUND = "P2018",
|
|
42
|
+
/**
|
|
43
|
+
* An operation failed because it depends on one or more records that were required but not found
|
|
44
|
+
*/
|
|
45
|
+
DEPEND_ON_RECORD_NOT_FOUND = "P2025"
|
|
35
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Field name for storing in-transaction flag
|
|
49
|
+
*/
|
|
50
|
+
export declare const PRISMA_TX_FLAG = "$__zenstack_tx";
|
|
51
|
+
/**
|
|
52
|
+
* Field name for getting current enhancer
|
|
53
|
+
*/
|
|
54
|
+
export declare const PRISMA_PROXY_ENHANCER = "$__zenstack_enhancer";
|
|
55
|
+
/**
|
|
56
|
+
* Minimum Prisma version supported
|
|
57
|
+
*/
|
|
58
|
+
export declare const PRISMA_MINIMUM_VERSION = "4.8.0";
|
|
59
|
+
/**
|
|
60
|
+
* Selector function name for fetching pre-update entity values.
|
|
61
|
+
*/
|
|
62
|
+
export declare const PRE_UPDATE_VALUE_SELECTOR = "preValueSelect";
|
|
63
|
+
/**
|
|
64
|
+
* Prefix for field-level read checker function name
|
|
65
|
+
*/
|
|
66
|
+
export declare const FIELD_LEVEL_READ_CHECKER_PREFIX = "readFieldCheck$";
|
|
67
|
+
/**
|
|
68
|
+
* Field-level access control evaluation selector function name
|
|
69
|
+
*/
|
|
70
|
+
export declare const FIELD_LEVEL_READ_CHECKER_SELECTOR = "readFieldSelect";
|
|
71
|
+
/**
|
|
72
|
+
* Prefix for field-level update guard function name
|
|
73
|
+
*/
|
|
74
|
+
export declare const FIELD_LEVEL_UPDATE_GUARD_PREFIX = "updateFieldCheck$";
|
|
75
|
+
/**
|
|
76
|
+
* Flag that indicates if the model has field-level access control
|
|
77
|
+
*/
|
|
78
|
+
export declare const HAS_FIELD_LEVEL_POLICY_FLAG = "hasFieldLevelPolicy";
|
package/constants.js
CHANGED
|
@@ -1,29 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.HAS_FIELD_LEVEL_POLICY_FLAG = exports.FIELD_LEVEL_UPDATE_GUARD_PREFIX = exports.FIELD_LEVEL_READ_CHECKER_SELECTOR = exports.FIELD_LEVEL_READ_CHECKER_PREFIX = exports.PRE_UPDATE_VALUE_SELECTOR = exports.PRISMA_MINIMUM_VERSION = exports.PRISMA_PROXY_ENHANCER = exports.PRISMA_TX_FLAG = exports.PrismaErrorCode = exports.CrudFailureReason = exports.DEFAULT_PASSWORD_SALT_LENGTH = exports.DEFAULT_RUNTIME_LOAD_PATH = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* Default
|
|
5
|
+
* Default path for loading CLI-generated code
|
|
6
6
|
*/
|
|
7
|
-
exports.
|
|
7
|
+
exports.DEFAULT_RUNTIME_LOAD_PATH = '.zenstack';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
exports.TRANSACTION_FIELD_NAME = 'zenstack_transaction';
|
|
12
|
-
/**
|
|
13
|
-
* Auxiliary database field for building up policy check queries
|
|
14
|
-
*/
|
|
15
|
-
exports.GUARD_FIELD_NAME = 'zenstack_guard';
|
|
16
|
-
/**
|
|
17
|
-
* All Auxiliary fields.
|
|
9
|
+
* Default length of password hash salt (used by bcryptjs to hash password)
|
|
18
10
|
*/
|
|
19
|
-
exports.
|
|
11
|
+
exports.DEFAULT_PASSWORD_SALT_LENGTH = 12;
|
|
20
12
|
/**
|
|
21
13
|
* Reasons for a CRUD operation to fail
|
|
22
14
|
*/
|
|
23
15
|
var CrudFailureReason;
|
|
24
16
|
(function (CrudFailureReason) {
|
|
25
17
|
/**
|
|
26
|
-
* CRUD
|
|
18
|
+
* CRUD failed because of access policy violation.
|
|
19
|
+
*/
|
|
20
|
+
CrudFailureReason["ACCESS_POLICY_VIOLATION"] = "ACCESS_POLICY_VIOLATION";
|
|
21
|
+
/**
|
|
22
|
+
* CRUD succeeded but the result was not readable.
|
|
27
23
|
*/
|
|
28
24
|
CrudFailureReason["RESULT_NOT_READABLE"] = "RESULT_NOT_READABLE";
|
|
29
25
|
/**
|
|
@@ -36,6 +32,53 @@ var CrudFailureReason;
|
|
|
36
32
|
*/
|
|
37
33
|
var PrismaErrorCode;
|
|
38
34
|
(function (PrismaErrorCode) {
|
|
35
|
+
/**
|
|
36
|
+
* Unique constraint failed
|
|
37
|
+
*/
|
|
38
|
+
PrismaErrorCode["UNIQUE_CONSTRAINT_FAILED"] = "P2002";
|
|
39
|
+
/**
|
|
40
|
+
* A constraint failed on the database
|
|
41
|
+
*/
|
|
39
42
|
PrismaErrorCode["CONSTRAINED_FAILED"] = "P2004";
|
|
43
|
+
/**
|
|
44
|
+
* The required connected records were not found
|
|
45
|
+
*/
|
|
46
|
+
PrismaErrorCode["REQUIRED_CONNECTED_RECORD_NOT_FOUND"] = "P2018";
|
|
47
|
+
/**
|
|
48
|
+
* An operation failed because it depends on one or more records that were required but not found
|
|
49
|
+
*/
|
|
50
|
+
PrismaErrorCode["DEPEND_ON_RECORD_NOT_FOUND"] = "P2025";
|
|
40
51
|
})(PrismaErrorCode = exports.PrismaErrorCode || (exports.PrismaErrorCode = {}));
|
|
52
|
+
/**
|
|
53
|
+
* Field name for storing in-transaction flag
|
|
54
|
+
*/
|
|
55
|
+
exports.PRISMA_TX_FLAG = '$__zenstack_tx';
|
|
56
|
+
/**
|
|
57
|
+
* Field name for getting current enhancer
|
|
58
|
+
*/
|
|
59
|
+
exports.PRISMA_PROXY_ENHANCER = '$__zenstack_enhancer';
|
|
60
|
+
/**
|
|
61
|
+
* Minimum Prisma version supported
|
|
62
|
+
*/
|
|
63
|
+
exports.PRISMA_MINIMUM_VERSION = '4.8.0';
|
|
64
|
+
/**
|
|
65
|
+
* Selector function name for fetching pre-update entity values.
|
|
66
|
+
*/
|
|
67
|
+
exports.PRE_UPDATE_VALUE_SELECTOR = 'preValueSelect';
|
|
68
|
+
/**
|
|
69
|
+
* Prefix for field-level read checker function name
|
|
70
|
+
*/
|
|
71
|
+
exports.FIELD_LEVEL_READ_CHECKER_PREFIX = 'readFieldCheck$';
|
|
72
|
+
/**
|
|
73
|
+
* Field-level access control evaluation selector function name
|
|
74
|
+
*/
|
|
75
|
+
exports.FIELD_LEVEL_READ_CHECKER_SELECTOR = 'readFieldSelect';
|
|
76
|
+
/**
|
|
77
|
+
* Prefix for field-level update guard function name
|
|
78
|
+
*/
|
|
79
|
+
exports.FIELD_LEVEL_UPDATE_GUARD_PREFIX = 'updateFieldCheck$';
|
|
80
|
+
/**
|
|
81
|
+
* Flag that indicates if the model has field-level access control
|
|
82
|
+
*/
|
|
83
|
+
exports.HAS_FIELD_LEVEL_POLICY_FLAG = 'hasFieldLevelPolicy';
|
|
41
84
|
//# 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,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,yBAAyB,GAAG,WAAW,CAAC;AAErD;;GAEG;AACU,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;GAEG;AACH,IAAY,iBAeX;AAfD,WAAY,iBAAiB;IACzB;;OAEG;IACH,wEAAmD,CAAA;IAEnD;;OAEG;IACH,gEAA2C,CAAA;IAE3C;;OAEG;IACH,4EAAuD,CAAA;AAC3D,CAAC,EAfW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAe5B;AAED;;GAEG;AACH,IAAY,eAoBX;AApBD,WAAY,eAAe;IACvB;;OAEG;IACH,qDAAkC,CAAA;IAElC;;OAEG;IACH,+CAA4B,CAAA;IAE5B;;OAEG;IACH,gEAA6C,CAAA;IAE7C;;OAEG;IACH,uDAAoC,CAAA;AACxC,CAAC,EApBW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAoB1B;AAED;;GAEG;AACU,QAAA,cAAc,GAAG,gBAAgB,CAAC;AAE/C;;GAEG;AACU,QAAA,qBAAqB,GAAG,sBAAsB,CAAC;AAE5D;;GAEG;AACU,QAAA,sBAAsB,GAAG,OAAO,CAAC;AAE9C;;GAEG;AACU,QAAA,yBAAyB,GAAG,gBAAgB,CAAC;AAE1D;;GAEG;AACU,QAAA,+BAA+B,GAAG,iBAAiB,CAAC;AAEjE;;GAEG;AACU,QAAA,iCAAiC,GAAG,iBAAiB,CAAC;AAEnE;;GAEG;AACU,QAAA,+BAA+B,GAAG,mBAAmB,CAAC;AAEnE;;GAEG;AACU,QAAA,2BAA2B,GAAG,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { WithOmitOptions } from './omit';
|
|
2
|
+
import { WithPasswordOptions } from './password';
|
|
3
|
+
import { WithPolicyContext, WithPolicyOptions } from './policy';
|
|
4
|
+
/**
|
|
5
|
+
* Options @see enhance
|
|
6
|
+
*/
|
|
7
|
+
export type EnhancementOptions = WithPolicyOptions & WithPasswordOptions & WithOmitOptions;
|
|
8
|
+
/**
|
|
9
|
+
* Gets a Prisma client enhanced with all essential behaviors, including access
|
|
10
|
+
* policy, field validation, field omission and password hashing.
|
|
11
|
+
*
|
|
12
|
+
* It's a shortcut for calling withOmit(withPassword(withPolicy(prisma, options))).
|
|
13
|
+
*
|
|
14
|
+
* @param prisma The Prisma client to enhance.
|
|
15
|
+
* @param context The context to for evaluating access policies.
|
|
16
|
+
* @param options Options.
|
|
17
|
+
*/
|
|
18
|
+
export declare function enhance<DbClient extends object>(prisma: DbClient, context?: WithPolicyContext, options?: EnhancementOptions): DbClient;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enhance = void 0;
|
|
4
|
+
const loader_1 = require("../loader");
|
|
5
|
+
const omit_1 = require("./omit");
|
|
6
|
+
const password_1 = require("./password");
|
|
7
|
+
const policy_1 = require("./policy");
|
|
8
|
+
let hasPassword = undefined;
|
|
9
|
+
let hasOmit = undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Gets a Prisma client enhanced with all essential behaviors, including access
|
|
12
|
+
* policy, field validation, field omission and password hashing.
|
|
13
|
+
*
|
|
14
|
+
* It's a shortcut for calling withOmit(withPassword(withPolicy(prisma, options))).
|
|
15
|
+
*
|
|
16
|
+
* @param prisma The Prisma client to enhance.
|
|
17
|
+
* @param context The context to for evaluating access policies.
|
|
18
|
+
* @param options Options.
|
|
19
|
+
*/
|
|
20
|
+
function enhance(prisma, context, options) {
|
|
21
|
+
var _a;
|
|
22
|
+
let result = prisma;
|
|
23
|
+
if (hasPassword === undefined || hasOmit === undefined) {
|
|
24
|
+
const modelMeta = (_a = options === null || options === void 0 ? void 0 : options.modelMeta) !== null && _a !== void 0 ? _a : (0, loader_1.getDefaultModelMeta)(options === null || options === void 0 ? void 0 : options.loadPath);
|
|
25
|
+
const allFields = Object.values(modelMeta.fields).flatMap((modelInfo) => Object.values(modelInfo));
|
|
26
|
+
hasPassword = allFields.some((field) => { var _a; return (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.name === '@password'); });
|
|
27
|
+
hasOmit = allFields.some((field) => { var _a; return (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.name === '@omit'); });
|
|
28
|
+
}
|
|
29
|
+
if (hasPassword) {
|
|
30
|
+
// @password proxy
|
|
31
|
+
result = (0, password_1.withPassword)(result, options);
|
|
32
|
+
}
|
|
33
|
+
if (hasOmit) {
|
|
34
|
+
// @omit proxy
|
|
35
|
+
result = (0, omit_1.withOmit)(result, options);
|
|
36
|
+
}
|
|
37
|
+
// policy proxy
|
|
38
|
+
result = (0, policy_1.withPolicy)(result, context, options);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
exports.enhance = enhance;
|
|
42
|
+
//# sourceMappingURL=enhance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../src/enhancements/enhance.ts"],"names":[],"mappings":";;;AAAA,sCAAgD;AAChD,iCAAmD;AACnD,yCAA+D;AAC/D,qCAA4E;AAO5E,IAAI,WAAW,GAAwB,SAAS,CAAC;AACjD,IAAI,OAAO,GAAwB,SAAS,CAAC;AAE7C;;;;;;;;;GASG;AACH,SAAgB,OAAO,CACnB,MAAgB,EAChB,OAA2B,EAC3B,OAA4B;;IAE5B,IAAI,MAAM,GAAG,MAAM,CAAC;IAEpB,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE;QACpD,MAAM,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,IAAA,4BAAmB,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACnG,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA,EAAA,CAAC,CAAC;QACrG,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA,EAAA,CAAC,CAAC;KAChG;IAED,IAAI,WAAW,EAAE;QACb,kBAAkB;QAClB,MAAM,GAAG,IAAA,uBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC1C;IAED,IAAI,OAAO,EAAE;QACT,cAAc;QACd,MAAM,GAAG,IAAA,eAAQ,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;IAED,eAAe;IACf,MAAM,GAAG,IAAA,mBAAU,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE9C,OAAO,MAAM,CAAC;AAClB,CAAC;AA5BD,0BA4BC"}
|
package/enhancements/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export * from './model-meta';
|
|
2
|
-
export * from './nested-write-
|
|
2
|
+
export * from './nested-write-visitor';
|
|
3
3
|
export * from './omit';
|
|
4
4
|
export * from './password';
|
|
5
5
|
export * from './policy';
|
|
6
6
|
export * from './preset';
|
|
7
|
+
export * from './enhance';
|
|
7
8
|
export * from './types';
|
|
8
9
|
export * from './utils';
|
|
9
10
|
export * from './where-visitor';
|
package/enhancements/index.js
CHANGED
|
@@ -15,11 +15,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./model-meta"), exports);
|
|
18
|
-
__exportStar(require("./nested-write-
|
|
18
|
+
__exportStar(require("./nested-write-visitor"), exports);
|
|
19
19
|
__exportStar(require("./omit"), exports);
|
|
20
20
|
__exportStar(require("./password"), exports);
|
|
21
21
|
__exportStar(require("./policy"), exports);
|
|
22
22
|
__exportStar(require("./preset"), exports);
|
|
23
|
+
__exportStar(require("./enhance"), exports);
|
|
23
24
|
__exportStar(require("./types"), exports);
|
|
24
25
|
__exportStar(require("./utils"), exports);
|
|
25
26
|
__exportStar(require("./where-visitor"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enhancements/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enhancements/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,yDAAuC;AACvC,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,0CAAwB;AACxB,kDAAgC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ModelMeta } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Callback for @see ModelDataVisitor.
|
|
4
|
+
*/
|
|
5
|
+
export type ModelDataVisitorCallback = (model: string, data: any, scalarData: any) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Visitor that traverses data returned by a Prisma query.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ModelDataVisitor {
|
|
10
|
+
private modelMeta;
|
|
11
|
+
constructor(modelMeta: ModelMeta);
|
|
12
|
+
/**
|
|
13
|
+
* Visits the given model data.
|
|
14
|
+
*/
|
|
15
|
+
visit(model: string, data: any, callback: ModelDataVisitorCallback): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelDataVisitor = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
const model_meta_1 = require("./model-meta");
|
|
6
|
+
/**
|
|
7
|
+
* Visitor that traverses data returned by a Prisma query.
|
|
8
|
+
*/
|
|
9
|
+
class ModelDataVisitor {
|
|
10
|
+
constructor(modelMeta) {
|
|
11
|
+
this.modelMeta = modelMeta;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Visits the given model data.
|
|
15
|
+
*/
|
|
16
|
+
visit(model, data, callback) {
|
|
17
|
+
if (!data || typeof data !== 'object') {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const scalarData = {};
|
|
21
|
+
const subTasks = [];
|
|
22
|
+
for (const [k, v] of Object.entries(data)) {
|
|
23
|
+
const field = (0, model_meta_1.resolveField)(this.modelMeta, model, k);
|
|
24
|
+
if (field && field.isDataModel) {
|
|
25
|
+
if (field.isArray && Array.isArray(v)) {
|
|
26
|
+
subTasks.push(...v.map((item) => ({ model: field.type, data: item })));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
subTasks.push({ model: field.type, data: v });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
scalarData[k] = v;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
callback(model, data, scalarData);
|
|
37
|
+
subTasks.forEach(({ model, data }) => this.visit(model, data, callback));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.ModelDataVisitor = ModelDataVisitor;
|
|
41
|
+
//# sourceMappingURL=model-data-visitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-data-visitor.js","sourceRoot":"","sources":["../../src/enhancements/model-data-visitor.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,6CAA4C;AAQ5C;;GAEG;AACH,MAAa,gBAAgB;IACzB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C;;OAEG;IACH,KAAK,CAAC,KAAa,EAAE,IAAS,EAAE,QAAkC;QAC9D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACnC,OAAO;SACV;QAED,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAwC,EAAE,CAAC;QAEzD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvC,MAAM,KAAK,GAAG,IAAA,yBAAY,EAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE;gBAC5B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC1E;qBAAM;oBACH,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjD;aACJ;iBAAM;gBACH,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB;SACJ;QAED,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;CACJ;AA9BD,4CA8BC"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
import { FieldInfo } from '../types';
|
|
1
2
|
import { ModelMeta } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Load model meta from standard location.
|
|
4
|
-
*/
|
|
5
|
-
export declare function getDefaultModelMeta(): ModelMeta;
|
|
6
3
|
/**
|
|
7
4
|
* Resolves a model field to its metadata. Returns undefined if not found.
|
|
8
5
|
*/
|
|
9
|
-
export declare function resolveField(modelMeta: ModelMeta, model: string, field: string):
|
|
6
|
+
export declare function resolveField(modelMeta: ModelMeta, model: string, field: string): FieldInfo | undefined;
|
|
10
7
|
/**
|
|
11
8
|
* Gets all fields of a model.
|
|
12
9
|
*/
|
|
13
|
-
export declare function getFields(modelMeta: ModelMeta, model: string): Record<string,
|
|
10
|
+
export declare function getFields(modelMeta: ModelMeta, model: string): Record<string, FieldInfo>;
|
|
@@ -1,39 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getFields = exports.resolveField =
|
|
3
|
+
exports.getFields = exports.resolveField = void 0;
|
|
7
4
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
8
5
|
const lower_case_first_1 = require("lower-case-first");
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
/**
|
|
11
|
-
* Load model meta from standard location.
|
|
12
|
-
*/
|
|
13
|
-
function getDefaultModelMeta() {
|
|
14
|
-
try {
|
|
15
|
-
// normal load
|
|
16
|
-
return require('.zenstack/model-meta').default;
|
|
17
|
-
}
|
|
18
|
-
catch (_a) {
|
|
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.');
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
exports.getDefaultModelMeta = getDefaultModelMeta;
|
|
32
6
|
/**
|
|
33
7
|
* Resolves a model field to its metadata. Returns undefined if not found.
|
|
34
8
|
*/
|
|
35
9
|
function resolveField(modelMeta, model, field) {
|
|
36
|
-
|
|
10
|
+
var _a;
|
|
11
|
+
return (_a = modelMeta.fields[(0, lower_case_first_1.lowerCaseFirst)(model)]) === null || _a === void 0 ? void 0 : _a[field];
|
|
37
12
|
}
|
|
38
13
|
exports.resolveField = resolveField;
|
|
39
14
|
/**
|
|
@@ -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;AAIlD;;GAEG;AACH,SAAgB,YAAY,CAAC,SAAoB,EAAE,KAAa,EAAE,KAAa;;IAC3E,OAAO,MAAA,SAAS,CAAC,MAAM,CAAC,IAAA,iCAAc,EAAC,KAAK,CAAC,CAAC,0CAAG,KAAK,CAAC,CAAC;AAC5D,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"}
|
|
@@ -24,35 +24,39 @@ export type NestedWriteVisitorContext = {
|
|
|
24
24
|
nestingPath: NestingPathItem[];
|
|
25
25
|
};
|
|
26
26
|
/**
|
|
27
|
-
* NestedWriteVisitor's callback actions
|
|
27
|
+
* NestedWriteVisitor's callback actions. A call back function should return true or void to indicate
|
|
28
|
+
* that the visitor should continue traversing its children, or false to stop. It can also return an object
|
|
29
|
+
* to let the visitor traverse it instead of its original children.
|
|
28
30
|
*/
|
|
29
31
|
export type NestedWriterVisitorCallback = {
|
|
30
|
-
create?: (model: string, args: any[], context: NestedWriteVisitorContext) => Promise<void>;
|
|
32
|
+
create?: (model: string, args: any[], context: NestedWriteVisitorContext) => Promise<boolean | void>;
|
|
33
|
+
createMany?: (model: string, args: {
|
|
34
|
+
data: any;
|
|
35
|
+
skipDuplicates?: boolean;
|
|
36
|
+
}, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
31
37
|
connectOrCreate?: (model: string, args: {
|
|
32
38
|
where: object;
|
|
33
39
|
create: any;
|
|
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>;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
data: any;
|
|
40
|
-
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
40
|
+
}, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
41
|
+
connect?: (model: string, args: object, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
42
|
+
disconnect?: (model: string, args: object, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
43
|
+
set?: (model: string, args: object, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
44
|
+
update?: (model: string, args: object, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
41
45
|
updateMany?: (model: string, args: {
|
|
42
46
|
where?: object;
|
|
43
47
|
data: any;
|
|
44
|
-
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
48
|
+
}, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
45
49
|
upsert?: (model: string, args: {
|
|
46
50
|
where: object;
|
|
47
51
|
create: any;
|
|
48
52
|
update: any;
|
|
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>;
|
|
53
|
+
}, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
54
|
+
delete?: (model: string, args: object | boolean, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
55
|
+
deleteMany?: (model: string, args: any | object, context: NestedWriteVisitorContext) => Promise<boolean | object | void>;
|
|
52
56
|
field?: (field: FieldInfo, action: PrismaWriteActionType, data: any, context: NestedWriteVisitorContext) => Promise<void>;
|
|
53
57
|
};
|
|
54
58
|
/**
|
|
55
|
-
* Recursive visitor for nested write (create/update) payload
|
|
59
|
+
* Recursive visitor for nested write (create/update) payload.
|
|
56
60
|
*/
|
|
57
61
|
export declare class NestedWriteVisitor {
|
|
58
62
|
private readonly modelMeta;
|