@zenstackhq/runtime 1.0.0-alpha.99 → 1.0.0-beta.10
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 +69 -0
- package/browser/index.js.map +1 -0
- package/browser/index.mjs +31 -0
- package/browser/index.mjs.map +1 -0
- package/constants.d.ts +31 -0
- package/constants.js +34 -1
- package/constants.js.map +1 -1
- package/enhancements/index.d.ts +5 -0
- package/enhancements/index.js +5 -0
- package/enhancements/index.js.map +1 -1
- package/enhancements/model-meta.d.ts +4 -0
- package/enhancements/model-meta.js +26 -5
- package/enhancements/model-meta.js.map +1 -1
- package/enhancements/nested-write-vistor.d.ts +17 -16
- package/enhancements/nested-write-vistor.js +86 -59
- package/enhancements/nested-write-vistor.js.map +1 -1
- package/enhancements/omit.d.ts +10 -1
- package/enhancements/omit.js +4 -3
- package/enhancements/omit.js.map +1 -1
- package/enhancements/password.d.ts +10 -1
- package/enhancements/password.js +3 -2
- package/enhancements/password.js.map +1 -1
- package/enhancements/policy/handler.d.ts +6 -3
- package/enhancements/policy/handler.js +99 -39
- package/enhancements/policy/handler.js.map +1 -1
- package/enhancements/policy/index.d.ts +23 -2
- package/enhancements/policy/index.js +39 -6
- package/enhancements/policy/index.js.map +1 -1
- package/enhancements/policy/logger.d.ts +9 -1
- package/enhancements/policy/logger.js +14 -3
- package/enhancements/policy/logger.js.map +1 -1
- package/enhancements/policy/policy-utils.d.ts +13 -9
- package/enhancements/policy/policy-utils.js +250 -138
- package/enhancements/policy/policy-utils.js.map +1 -1
- package/enhancements/preset.d.ts +9 -7
- package/enhancements/preset.js +3 -6
- package/enhancements/preset.js.map +1 -1
- package/enhancements/proxy.js +62 -1
- package/enhancements/proxy.js.map +1 -1
- package/enhancements/types.d.ts +10 -1
- package/enhancements/utils.d.ts +12 -4
- package/enhancements/utils.js +97 -11
- 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 +33 -12
- package/version.js +1 -0
- package/version.js.map +1 -1
- 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,69 @@
|
|
|
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_decimal = __toESM(require("decimal.js"));
|
|
40
|
+
var import_superjson = __toESM(require("superjson"));
|
|
41
|
+
import_superjson.default.registerCustom(
|
|
42
|
+
{
|
|
43
|
+
isApplicable: (v) => import_decimal.default.isDecimal(v),
|
|
44
|
+
serialize: (v) => v.toJSON(),
|
|
45
|
+
deserialize: (v) => new import_decimal.default(v)
|
|
46
|
+
},
|
|
47
|
+
"Decimal"
|
|
48
|
+
);
|
|
49
|
+
import_superjson.default.registerCustom(
|
|
50
|
+
{
|
|
51
|
+
isApplicable: (v) => Buffer.isBuffer(v),
|
|
52
|
+
serialize: (v) => v.toString("base64"),
|
|
53
|
+
deserialize: (v) => Buffer.from(v, "base64")
|
|
54
|
+
},
|
|
55
|
+
"Bytes"
|
|
56
|
+
);
|
|
57
|
+
function serialize(value) {
|
|
58
|
+
const { json, meta } = import_superjson.default.serialize(value);
|
|
59
|
+
return { data: json, meta };
|
|
60
|
+
}
|
|
61
|
+
function deserialize(value, meta) {
|
|
62
|
+
return import_superjson.default.deserialize({ json: value, meta });
|
|
63
|
+
}
|
|
64
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
65
|
+
0 && (module.exports = {
|
|
66
|
+
deserialize,
|
|
67
|
+
serialize
|
|
68
|
+
});
|
|
69
|
+
//# 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 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,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,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,31 @@
|
|
|
1
|
+
// src/browser/serialization.ts
|
|
2
|
+
import Decimal from "decimal.js";
|
|
3
|
+
import SuperJSON from "superjson";
|
|
4
|
+
SuperJSON.registerCustom(
|
|
5
|
+
{
|
|
6
|
+
isApplicable: (v) => Decimal.isDecimal(v),
|
|
7
|
+
serialize: (v) => v.toJSON(),
|
|
8
|
+
deserialize: (v) => new Decimal(v)
|
|
9
|
+
},
|
|
10
|
+
"Decimal"
|
|
11
|
+
);
|
|
12
|
+
SuperJSON.registerCustom(
|
|
13
|
+
{
|
|
14
|
+
isApplicable: (v) => Buffer.isBuffer(v),
|
|
15
|
+
serialize: (v) => v.toString("base64"),
|
|
16
|
+
deserialize: (v) => Buffer.from(v, "base64")
|
|
17
|
+
},
|
|
18
|
+
"Bytes"
|
|
19
|
+
);
|
|
20
|
+
function serialize(value) {
|
|
21
|
+
const { json, meta } = SuperJSON.serialize(value);
|
|
22
|
+
return { data: json, meta };
|
|
23
|
+
}
|
|
24
|
+
function deserialize(value, meta) {
|
|
25
|
+
return SuperJSON.deserialize({ json: value, meta });
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
deserialize,
|
|
29
|
+
serialize
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +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":[]}
|
package/constants.d.ts
CHANGED
|
@@ -2,3 +2,34 @@
|
|
|
2
2
|
* Default length of password hash salt (used by bcryptjs to hash password)
|
|
3
3
|
*/
|
|
4
4
|
export declare const DEFAULT_PASSWORD_SALT_LENGTH = 12;
|
|
5
|
+
/**
|
|
6
|
+
* Auxiliary database field for supporting policy check for nested writes
|
|
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.
|
|
15
|
+
*/
|
|
16
|
+
export declare const AUXILIARY_FIELDS: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Reasons for a CRUD operation to fail
|
|
19
|
+
*/
|
|
20
|
+
export declare enum CrudFailureReason {
|
|
21
|
+
/**
|
|
22
|
+
* CRUD suceeded but the result was not readable.
|
|
23
|
+
*/
|
|
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"
|
|
35
|
+
}
|
package/constants.js
CHANGED
|
@@ -1,8 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
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
|
*/
|
|
7
7
|
exports.DEFAULT_PASSWORD_SALT_LENGTH = 12;
|
|
8
|
+
/**
|
|
9
|
+
* Auxiliary database field for supporting policy check for nested writes
|
|
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.
|
|
18
|
+
*/
|
|
19
|
+
exports.AUXILIARY_FIELDS = [exports.TRANSACTION_FIELD_NAME, exports.GUARD_FIELD_NAME];
|
|
20
|
+
/**
|
|
21
|
+
* Reasons for a CRUD operation to fail
|
|
22
|
+
*/
|
|
23
|
+
var CrudFailureReason;
|
|
24
|
+
(function (CrudFailureReason) {
|
|
25
|
+
/**
|
|
26
|
+
* CRUD suceeded but the result was not readable.
|
|
27
|
+
*/
|
|
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";
|
|
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 = {}));
|
|
8
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"}
|
|
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,4 +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';
|
|
8
|
+
export * from './utils';
|
|
9
|
+
export * from './where-visitor';
|
package/enhancements/index.js
CHANGED
|
@@ -14,8 +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);
|
|
24
|
+
__exportStar(require("./utils"), exports);
|
|
25
|
+
__exportStar(require("./where-visitor"), exports);
|
|
21
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"}
|
|
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;
|
|
4
|
-
|
|
6
|
+
exports.getFields = exports.resolveField = exports.getDefaultModelMeta = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
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;
|
|
@@ -19,7 +33,14 @@ exports.getDefaultModelMeta = getDefaultModelMeta;
|
|
|
19
33
|
* Resolves a model field to its metadata. Returns undefined if not found.
|
|
20
34
|
*/
|
|
21
35
|
function resolveField(modelMeta, model, field) {
|
|
22
|
-
return modelMeta.fields[(0,
|
|
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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { FieldInfo, PrismaWriteActionType } from '../types';
|
|
2
2
|
import { ModelMeta } from './types';
|
|
3
|
-
import { Enumerable } from './utils';
|
|
4
3
|
type NestingPathItem = {
|
|
5
4
|
field?: FieldInfo;
|
|
5
|
+
model: string;
|
|
6
6
|
where: any;
|
|
7
7
|
unique: boolean;
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
10
10
|
* Context for visiting
|
|
11
11
|
*/
|
|
12
|
-
export type
|
|
12
|
+
export type NestedWriteVisitorContext = {
|
|
13
13
|
/**
|
|
14
14
|
* Parent data, can be used to replace fields
|
|
15
15
|
*/
|
|
@@ -27,29 +27,29 @@ export type VisitorContext = {
|
|
|
27
27
|
* NestedWriteVisitor's callback actions
|
|
28
28
|
*/
|
|
29
29
|
export type NestedWriterVisitorCallback = {
|
|
30
|
-
create?: (model: string, args: any[], context:
|
|
31
|
-
connectOrCreate?: (model: string, args:
|
|
30
|
+
create?: (model: string, args: any[], context: NestedWriteVisitorContext) => Promise<void>;
|
|
31
|
+
connectOrCreate?: (model: string, args: {
|
|
32
32
|
where: object;
|
|
33
33
|
create: any;
|
|
34
|
-
}
|
|
35
|
-
connect?: (model: string, args:
|
|
36
|
-
disconnect?: (model: string, args:
|
|
37
|
-
update?: (model: string, args:
|
|
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
|
+
update?: (model: string, args: {
|
|
38
38
|
where: object;
|
|
39
39
|
data: any;
|
|
40
|
-
}
|
|
41
|
-
updateMany?: (model: string, args:
|
|
40
|
+
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
41
|
+
updateMany?: (model: string, args: {
|
|
42
42
|
where?: object;
|
|
43
43
|
data: any;
|
|
44
|
-
}
|
|
45
|
-
upsert?: (model: string, args:
|
|
44
|
+
}, context: NestedWriteVisitorContext) => Promise<void>;
|
|
45
|
+
upsert?: (model: string, args: {
|
|
46
46
|
where: object;
|
|
47
47
|
create: any;
|
|
48
48
|
update: any;
|
|
49
|
-
}
|
|
50
|
-
delete?: (model: string, args:
|
|
51
|
-
deleteMany?: (model: string, args:
|
|
52
|
-
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>;
|
|
53
53
|
};
|
|
54
54
|
/**
|
|
55
55
|
* Recursive visitor for nested write (create/update) payload
|
|
@@ -66,5 +66,6 @@ export declare class NestedWriteVisitor {
|
|
|
66
66
|
*/
|
|
67
67
|
visit(model: string, action: PrismaWriteActionType, args: any): Promise<void>;
|
|
68
68
|
private doVisit;
|
|
69
|
+
private visitSubPayload;
|
|
69
70
|
}
|
|
70
71
|
export {};
|
|
@@ -56,113 +56,140 @@ class NestedWriteVisitor {
|
|
|
56
56
|
if (!data) {
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
|
-
const fieldContainers = [];
|
|
60
59
|
const isToOneUpdate = (field === null || field === void 0 ? void 0 : field.isDataModel) && !field.isArray;
|
|
61
60
|
const context = { parent, field, nestingPath: [...nestingPath] };
|
|
62
61
|
// visit payload
|
|
63
62
|
switch (action) {
|
|
64
63
|
case 'create':
|
|
65
|
-
context.nestingPath.push({ field, where: {}, unique: false });
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
context.nestingPath.push({ field, model, where: {}, unique: false });
|
|
65
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
66
|
+
if (this.callback.create) {
|
|
67
|
+
yield this.callback.create(model, item, context);
|
|
68
|
+
}
|
|
69
|
+
yield this.visitSubPayload(model, action, item, context.nestingPath);
|
|
68
70
|
}
|
|
69
|
-
fieldContainers.push(...(0, utils_1.ensureArray)(data));
|
|
70
71
|
break;
|
|
71
72
|
case 'createMany':
|
|
72
73
|
// skip the 'data' layer so as to keep consistency with 'create'
|
|
73
74
|
if (data.data) {
|
|
74
|
-
context.nestingPath.push({ field, where: {}, unique: false });
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
context.nestingPath.push({ field, model, where: {}, unique: false });
|
|
76
|
+
for (const item of (0, utils_1.enumerate)(data.data)) {
|
|
77
|
+
if (this.callback.create) {
|
|
78
|
+
yield this.callback.create(model, item, context);
|
|
79
|
+
}
|
|
80
|
+
yield this.visitSubPayload(model, action, item, context.nestingPath);
|
|
77
81
|
}
|
|
78
|
-
fieldContainers.push(...(0, utils_1.ensureArray)(data.data));
|
|
79
82
|
}
|
|
80
83
|
break;
|
|
81
84
|
case 'connectOrCreate':
|
|
82
|
-
context.nestingPath.push({ field, where: data.where, unique: true });
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
context.nestingPath.push({ field, model, where: data.where, unique: true });
|
|
86
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
87
|
+
if (this.callback.connectOrCreate) {
|
|
88
|
+
yield this.callback.connectOrCreate(model, item, context);
|
|
89
|
+
}
|
|
90
|
+
yield this.visitSubPayload(model, action, item.create, context.nestingPath);
|
|
85
91
|
}
|
|
86
|
-
fieldContainers.push(...(0, utils_1.ensureArray)(data).map((d) => d.create));
|
|
87
92
|
break;
|
|
88
93
|
case 'connect':
|
|
89
|
-
context.nestingPath.push({ field, where: data, unique: true });
|
|
90
94
|
if (this.callback.connect) {
|
|
91
|
-
|
|
95
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
96
|
+
const newContext = Object.assign(Object.assign({}, context), { nestingPath: [...context.nestingPath, { field, model, where: item, unique: true }] });
|
|
97
|
+
yield this.callback.connect(model, item, newContext);
|
|
98
|
+
}
|
|
92
99
|
}
|
|
93
100
|
break;
|
|
94
101
|
case 'disconnect':
|
|
95
102
|
// disconnect has two forms:
|
|
96
103
|
// if relation is to-many, the payload is a unique filter object
|
|
97
104
|
// if relation is to-one, the payload can only be boolean `true`
|
|
98
|
-
context.nestingPath.push({ field, where: data, unique: typeof data === 'object' });
|
|
99
105
|
if (this.callback.disconnect) {
|
|
100
|
-
|
|
106
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
107
|
+
const newContext = Object.assign(Object.assign({}, context), { nestingPath: [
|
|
108
|
+
...context.nestingPath,
|
|
109
|
+
{ field, model, where: item, unique: typeof item === 'object' },
|
|
110
|
+
] });
|
|
111
|
+
yield this.callback.disconnect(model, item, newContext);
|
|
112
|
+
}
|
|
101
113
|
}
|
|
102
114
|
break;
|
|
103
115
|
case 'update':
|
|
104
|
-
context.nestingPath.push({ field, where: data.where, unique: false });
|
|
105
|
-
|
|
106
|
-
|
|
116
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
117
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
118
|
+
if (this.callback.update) {
|
|
119
|
+
yield this.callback.update(model, item, context);
|
|
120
|
+
}
|
|
121
|
+
const payload = isToOneUpdate ? item : item.data;
|
|
122
|
+
yield this.visitSubPayload(model, action, payload, context.nestingPath);
|
|
107
123
|
}
|
|
108
|
-
fieldContainers.push(...(0, utils_1.ensureArray)(data).map((d) => (isToOneUpdate ? d : d.data)));
|
|
109
124
|
break;
|
|
110
125
|
case 'updateMany':
|
|
111
|
-
context.nestingPath.push({ field, where: data.where, unique: false });
|
|
112
|
-
|
|
113
|
-
|
|
126
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
127
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
128
|
+
if (this.callback.updateMany) {
|
|
129
|
+
yield this.callback.updateMany(model, item, context);
|
|
130
|
+
}
|
|
131
|
+
yield this.visitSubPayload(model, action, item, context.nestingPath);
|
|
114
132
|
}
|
|
115
|
-
fieldContainers.push(...(0, utils_1.ensureArray)(data));
|
|
116
133
|
break;
|
|
117
|
-
case 'upsert':
|
|
118
|
-
context.nestingPath.push({ field, where: data.where, unique: true });
|
|
119
|
-
|
|
120
|
-
|
|
134
|
+
case 'upsert': {
|
|
135
|
+
context.nestingPath.push({ field, model, where: data.where, unique: true });
|
|
136
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
137
|
+
if (this.callback.upsert) {
|
|
138
|
+
yield this.callback.upsert(model, item, context);
|
|
139
|
+
}
|
|
140
|
+
yield this.visitSubPayload(model, action, item.create, context.nestingPath);
|
|
141
|
+
yield this.visitSubPayload(model, action, item.update, context.nestingPath);
|
|
121
142
|
}
|
|
122
|
-
fieldContainers.push(...(0, utils_1.ensureArray)(data).map((d) => d.create));
|
|
123
|
-
fieldContainers.push(...(0, utils_1.ensureArray)(data).map((d) => d.update));
|
|
124
143
|
break;
|
|
125
|
-
|
|
126
|
-
|
|
144
|
+
}
|
|
145
|
+
case 'delete': {
|
|
127
146
|
if (this.callback.delete) {
|
|
128
|
-
|
|
147
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
148
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
149
|
+
yield this.callback.delete(model, item, context);
|
|
150
|
+
}
|
|
129
151
|
}
|
|
130
152
|
break;
|
|
153
|
+
}
|
|
131
154
|
case 'deleteMany':
|
|
132
|
-
context.nestingPath.push({ field, where: data.where, unique: false });
|
|
133
155
|
if (this.callback.deleteMany) {
|
|
134
|
-
|
|
156
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
157
|
+
for (const item of (0, utils_1.enumerate)(data)) {
|
|
158
|
+
yield this.callback.deleteMany(model, item, context);
|
|
159
|
+
}
|
|
135
160
|
}
|
|
136
161
|
break;
|
|
137
162
|
default: {
|
|
138
163
|
throw new Error(`unhandled action type ${action}`);
|
|
139
164
|
}
|
|
140
165
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
visitSubPayload(model, action, payload, nestingPath) {
|
|
169
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
170
|
+
for (const field of (0, utils_1.getModelFields)(payload)) {
|
|
171
|
+
const fieldInfo = (0, model_meta_1.resolveField)(this.modelMeta, model, field);
|
|
172
|
+
if (!fieldInfo) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (fieldInfo.isDataModel) {
|
|
176
|
+
// recurse into nested payloads
|
|
177
|
+
for (const [subAction, subData] of Object.entries(payload[field])) {
|
|
178
|
+
if (this.isPrismaWriteAction(subAction) && subData) {
|
|
179
|
+
yield this.doVisit(fieldInfo.type, subAction, subData, payload[field], fieldInfo, [
|
|
180
|
+
...nestingPath,
|
|
181
|
+
]);
|
|
155
182
|
}
|
|
156
183
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
// visit plain field
|
|
187
|
+
if (this.callback.field) {
|
|
188
|
+
yield this.callback.field(fieldInfo, action, payload[field], {
|
|
189
|
+
parent: payload,
|
|
190
|
+
nestingPath,
|
|
191
|
+
field: fieldInfo,
|
|
192
|
+
});
|
|
166
193
|
}
|
|
167
194
|
}
|
|
168
195
|
}
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"nested-write-vistor.js","sourceRoot":"","sources":["../../src/enhancements/nested-write-vistor.ts"],"names":[],"mappings":"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"}
|