zenstack 1.0.0-beta.2 → 1.0.0-beta.21
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/README.md +16 -8
- package/cli/cli-util.js +1 -1
- package/cli/cli-util.js.map +1 -1
- package/cli/config.d.ts +1 -10
- package/cli/config.js +2 -7
- package/cli/config.js.map +1 -1
- package/cli/plugin-runner.d.ts +2 -1
- package/cli/plugin-runner.js +101 -47
- package/cli/plugin-runner.js.map +1 -1
- package/language-server/constants.d.ts +0 -4
- package/language-server/constants.js +1 -14
- package/language-server/constants.js.map +1 -1
- package/language-server/utils.d.ts +1 -10
- package/language-server/utils.js +1 -20
- package/language-server/utils.js.map +1 -1
- package/language-server/validator/attribute-application-validator.d.ts +15 -0
- package/language-server/validator/attribute-application-validator.js +246 -0
- package/language-server/validator/attribute-application-validator.js.map +1 -0
- package/language-server/validator/attribute-validator.d.ts +1 -1
- package/language-server/validator/attribute-validator.js +4 -1
- package/language-server/validator/attribute-validator.js.map +1 -1
- package/language-server/validator/datamodel-validator.js +13 -9
- package/language-server/validator/datamodel-validator.js.map +1 -1
- package/language-server/validator/enum-validator.js +3 -6
- package/language-server/validator/enum-validator.js.map +1 -1
- package/language-server/validator/expression-validator.js +70 -1
- package/language-server/validator/expression-validator.js.map +1 -1
- package/language-server/validator/function-decl-validator.d.ts +9 -0
- package/language-server/validator/function-decl-validator.js +13 -0
- package/language-server/validator/function-decl-validator.js.map +1 -0
- package/language-server/validator/function-invocation-validator.js +34 -9
- package/language-server/validator/function-invocation-validator.js.map +1 -1
- package/language-server/validator/utils.d.ts +2 -3
- package/language-server/validator/utils.js +3 -119
- package/language-server/validator/utils.js.map +1 -1
- package/language-server/validator/zmodel-validator.d.ts +2 -1
- package/language-server/validator/zmodel-validator.js +8 -3
- package/language-server/validator/zmodel-validator.js.map +1 -1
- package/language-server/zmodel-linker.d.ts +1 -0
- package/language-server/zmodel-linker.js +76 -26
- package/language-server/zmodel-linker.js.map +1 -1
- package/package.json +9 -16
- package/plugins/access-policy/expression-writer.d.ts +5 -0
- package/plugins/access-policy/expression-writer.js +154 -74
- package/plugins/access-policy/expression-writer.js.map +1 -1
- package/plugins/access-policy/policy-guard-generator.d.ts +8 -1
- package/plugins/access-policy/policy-guard-generator.js +296 -75
- package/plugins/access-policy/policy-guard-generator.js.map +1 -1
- package/plugins/model-meta/index.js +69 -5
- package/plugins/model-meta/index.js.map +1 -1
- package/plugins/plugin-utils.d.ts +4 -0
- package/plugins/plugin-utils.js +16 -1
- package/plugins/plugin-utils.js.map +1 -1
- package/plugins/prisma/prisma-builder.d.ts +3 -1
- package/plugins/prisma/prisma-builder.js +17 -16
- package/plugins/prisma/prisma-builder.js.map +1 -1
- package/plugins/prisma/schema-generator.d.ts +1 -3
- package/plugins/prisma/schema-generator.js +61 -84
- package/plugins/prisma/schema-generator.js.map +1 -1
- package/plugins/prisma/zmodel-code-generator.js +4 -2
- package/plugins/prisma/zmodel-code-generator.js.map +1 -1
- package/plugins/zod/generator.js +148 -19
- package/plugins/zod/generator.js.map +1 -1
- package/plugins/zod/index.d.ts +1 -1
- package/plugins/zod/transformer.d.ts +6 -5
- package/plugins/zod/transformer.js +172 -108
- package/plugins/zod/transformer.js.map +1 -1
- package/plugins/zod/types.d.ts +4 -1
- package/plugins/zod/utils/schema-gen.d.ts +3 -0
- package/plugins/zod/utils/schema-gen.js +188 -0
- package/plugins/zod/utils/schema-gen.js.map +1 -0
- package/res/stdlib.zmodel +121 -32
- package/telemetry.d.ts +1 -0
- package/telemetry.js +3 -1
- package/telemetry.js.map +1 -1
- package/utils/ast-utils.d.ts +1 -14
- package/utils/ast-utils.js +2 -72
- package/utils/ast-utils.js.map +1 -1
- package/utils/pkg-utils.js +1 -1
- package/utils/pkg-utils.js.map +1 -1
- package/utils/typescript-expression-transformer.d.ts +53 -0
- package/utils/typescript-expression-transformer.js +312 -0
- package/utils/typescript-expression-transformer.js.map +1 -0
- package/utils/version-utils.js +7 -2
- package/utils/version-utils.js.map +1 -1
- package/plugins/access-policy/typescript-expression-transformer.d.ts +0 -28
- package/plugins/access-policy/typescript-expression-transformer.js +0 -180
- package/plugins/access-policy/typescript-expression-transformer.js.map +0 -1
- package/plugins/access-policy/utils.d.ts +0 -5
- package/plugins/access-policy/utils.js +0 -14
- package/plugins/access-policy/utils.js.map +0 -1
- package/plugins/access-policy/zod-schema-generator.d.ts +0 -12
- package/plugins/access-policy/zod-schema-generator.js +0 -160
- package/plugins/access-policy/zod-schema-generator.js.map +0 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeValidationRefinements = exports.makeFieldSchema = void 0;
|
|
4
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
5
|
+
const ast_1 = require("@zenstackhq/sdk/ast");
|
|
6
|
+
const upper_case_first_1 = require("upper-case-first");
|
|
7
|
+
const __1 = require("..");
|
|
8
|
+
const typescript_expression_transformer_1 = require("../../../utils/typescript-expression-transformer");
|
|
9
|
+
function makeFieldSchema(field) {
|
|
10
|
+
var _a;
|
|
11
|
+
let schema = makeZodSchema(field);
|
|
12
|
+
const isDecimal = field.type.type === 'Decimal';
|
|
13
|
+
for (const attr of field.attributes) {
|
|
14
|
+
const message = getAttrLiteralArg(attr, 'message');
|
|
15
|
+
const messageArg = message ? `, { message: ${JSON.stringify(message)} }` : '';
|
|
16
|
+
const messageArgFirst = message ? `{ message: ${JSON.stringify(message)} }` : '';
|
|
17
|
+
switch ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) {
|
|
18
|
+
case '@length': {
|
|
19
|
+
const min = getAttrLiteralArg(attr, 'min');
|
|
20
|
+
if (min) {
|
|
21
|
+
schema += `.min(${min}${messageArg})`;
|
|
22
|
+
}
|
|
23
|
+
const max = getAttrLiteralArg(attr, 'max');
|
|
24
|
+
if (max) {
|
|
25
|
+
schema += `.max(${max}${messageArg})`;
|
|
26
|
+
}
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case '@contains': {
|
|
30
|
+
const expr = getAttrLiteralArg(attr, 'text');
|
|
31
|
+
if (expr) {
|
|
32
|
+
schema += `.includes(${JSON.stringify(expr)}${messageArg})`;
|
|
33
|
+
}
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case '@regex': {
|
|
37
|
+
const expr = getAttrLiteralArg(attr, 'regex');
|
|
38
|
+
if (expr) {
|
|
39
|
+
schema += `.regex(new RegExp(${JSON.stringify(expr)})${messageArg})`;
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
case '@startsWith': {
|
|
44
|
+
const text = getAttrLiteralArg(attr, 'text');
|
|
45
|
+
if (text) {
|
|
46
|
+
schema += `.startsWith(${JSON.stringify(text)}${messageArg})`;
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case '@endsWith': {
|
|
51
|
+
const text = getAttrLiteralArg(attr, 'text');
|
|
52
|
+
if (text) {
|
|
53
|
+
schema += `.endsWith(${JSON.stringify(text)}${messageArg})`;
|
|
54
|
+
}
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
case '@email': {
|
|
58
|
+
schema += `.email(${messageArgFirst})`;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case '@url': {
|
|
62
|
+
schema += `.url(${messageArgFirst})`;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case '@datetime': {
|
|
66
|
+
schema += `.datetime({ offset: true${message ? ', message: ' + JSON.stringify(message) : ''} })`;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case '@gt': {
|
|
70
|
+
const value = getAttrLiteralArg(attr, 'value');
|
|
71
|
+
if (value !== undefined) {
|
|
72
|
+
schema += isDecimal ? refineDecimal('gt', value, messageArg) : `.gt(${value}${messageArg})`;
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case '@gte': {
|
|
77
|
+
const value = getAttrLiteralArg(attr, 'value');
|
|
78
|
+
if (value !== undefined) {
|
|
79
|
+
schema += isDecimal ? refineDecimal('gte', value, messageArg) : `.gte(${value}${messageArg})`;
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case '@lt': {
|
|
84
|
+
const value = getAttrLiteralArg(attr, 'value');
|
|
85
|
+
if (value !== undefined) {
|
|
86
|
+
schema += isDecimal ? refineDecimal('lt', value, messageArg) : `.lt(${value}${messageArg})`;
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case '@lte': {
|
|
91
|
+
const value = getAttrLiteralArg(attr, 'value');
|
|
92
|
+
if (value !== undefined) {
|
|
93
|
+
schema += isDecimal ? refineDecimal('lte', value, messageArg) : `.lte(${value}${messageArg})`;
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (field.type.optional) {
|
|
100
|
+
schema += '.nullish()';
|
|
101
|
+
}
|
|
102
|
+
return schema;
|
|
103
|
+
}
|
|
104
|
+
exports.makeFieldSchema = makeFieldSchema;
|
|
105
|
+
function makeZodSchema(field) {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
let schema;
|
|
108
|
+
if (((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) && (0, ast_1.isEnum)((_b = field.type.reference) === null || _b === void 0 ? void 0 : _b.ref)) {
|
|
109
|
+
schema = `${(0, upper_case_first_1.upperCaseFirst)(field.type.reference.ref.name)}Schema`;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
switch (field.type.type) {
|
|
113
|
+
case 'Int':
|
|
114
|
+
case 'Float':
|
|
115
|
+
schema = 'z.number()';
|
|
116
|
+
break;
|
|
117
|
+
case 'Decimal':
|
|
118
|
+
schema = 'DecimalSchema';
|
|
119
|
+
break;
|
|
120
|
+
case 'BigInt':
|
|
121
|
+
schema = 'z.bigint()';
|
|
122
|
+
break;
|
|
123
|
+
case 'String':
|
|
124
|
+
schema = 'z.string()';
|
|
125
|
+
break;
|
|
126
|
+
case 'Boolean':
|
|
127
|
+
schema = 'z.boolean()';
|
|
128
|
+
break;
|
|
129
|
+
case 'DateTime':
|
|
130
|
+
schema = 'z.date()';
|
|
131
|
+
break;
|
|
132
|
+
case 'Bytes':
|
|
133
|
+
schema = 'z.union([z.string(), z.instanceof(Uint8Array)])';
|
|
134
|
+
break;
|
|
135
|
+
default:
|
|
136
|
+
schema = 'z.any()';
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (field.type.array) {
|
|
141
|
+
schema = `z.array(${schema})`;
|
|
142
|
+
}
|
|
143
|
+
return schema;
|
|
144
|
+
}
|
|
145
|
+
function makeValidationRefinements(model) {
|
|
146
|
+
const attrs = model.attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@validate'; });
|
|
147
|
+
const refinements = attrs
|
|
148
|
+
.map((attr) => {
|
|
149
|
+
const valueArg = (0, sdk_1.getAttributeArg)(attr, 'value');
|
|
150
|
+
if (!valueArg) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
const messageArg = (0, sdk_1.getAttributeArgLiteral)(attr, 'message');
|
|
154
|
+
const message = messageArg ? `, { message: ${JSON.stringify(messageArg)} }` : '';
|
|
155
|
+
try {
|
|
156
|
+
const expr = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
|
|
157
|
+
context: sdk_1.ExpressionContext.ValidationRule,
|
|
158
|
+
fieldReferenceContext: 'value',
|
|
159
|
+
}).transform(valueArg);
|
|
160
|
+
return `.refine((value: any) => ${expr}${message})`;
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
if (err instanceof typescript_expression_transformer_1.TypeScriptExpressionTransformerError) {
|
|
164
|
+
throw new sdk_1.PluginError(__1.name, err.message);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
throw err;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
.filter((r) => !!r);
|
|
172
|
+
return refinements;
|
|
173
|
+
}
|
|
174
|
+
exports.makeValidationRefinements = makeValidationRefinements;
|
|
175
|
+
function getAttrLiteralArg(attr, paramName) {
|
|
176
|
+
const arg = attr.args.find((arg) => { var _a; return ((_a = arg.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === paramName; });
|
|
177
|
+
return arg && (0, sdk_1.getLiteral)(arg.value);
|
|
178
|
+
}
|
|
179
|
+
function refineDecimal(op, value, messageArg) {
|
|
180
|
+
return `.refine(v => {
|
|
181
|
+
try {
|
|
182
|
+
return new Decimal(v.toString()).${op}(${value});
|
|
183
|
+
} catch {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}${messageArg})`;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=schema-gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-gen.js","sourceRoot":"","sources":["../../../../src/plugins/zod/utils/schema-gen.ts"],"names":[],"mappings":"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"}
|
package/res/stdlib.zmodel
CHANGED
|
@@ -49,6 +49,20 @@ enum AttributeTargetField {
|
|
|
49
49
|
ModelField
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Indicates the expression context a function can be used.
|
|
54
|
+
*/
|
|
55
|
+
enum ExpressionContext {
|
|
56
|
+
// used in @default
|
|
57
|
+
DefaultValue
|
|
58
|
+
|
|
59
|
+
// used in @@allow and @@deny
|
|
60
|
+
AccessPolicy
|
|
61
|
+
|
|
62
|
+
// used in @@validate
|
|
63
|
+
ValidationRule
|
|
64
|
+
}
|
|
65
|
+
|
|
52
66
|
/**
|
|
53
67
|
* Reads value from an environment variable.
|
|
54
68
|
*/
|
|
@@ -59,98 +73,108 @@ function env(name: String): String {
|
|
|
59
73
|
* Gets the current login user.
|
|
60
74
|
*/
|
|
61
75
|
function auth(): Any {
|
|
62
|
-
}
|
|
76
|
+
} @@@expressionContext([AccessPolicy])
|
|
63
77
|
|
|
64
78
|
/**
|
|
65
79
|
* Gets current date-time (as DateTime type).
|
|
66
80
|
*/
|
|
67
81
|
function now(): DateTime {
|
|
68
|
-
}
|
|
82
|
+
} @@@expressionContext([DefaultValue, AccessPolicy, ValidationRule])
|
|
69
83
|
|
|
70
84
|
/**
|
|
71
85
|
* Generates a globally unique identifier based on the UUID specs.
|
|
72
86
|
*/
|
|
73
87
|
function uuid(): String {
|
|
74
|
-
}
|
|
88
|
+
} @@@expressionContext([DefaultValue])
|
|
75
89
|
|
|
76
90
|
/**
|
|
77
91
|
* Generates a globally unique identifier based on the CUID spec.
|
|
78
92
|
*/
|
|
79
93
|
function cuid(): String {
|
|
80
|
-
}
|
|
94
|
+
} @@@expressionContext([DefaultValue])
|
|
81
95
|
|
|
82
96
|
/**
|
|
83
97
|
* Creates a sequence of integers in the underlying database and assign the incremented
|
|
84
98
|
* values to the ID values of the created records based on the sequence.
|
|
85
99
|
*/
|
|
86
100
|
function autoincrement(): Int {
|
|
87
|
-
}
|
|
101
|
+
} @@@expressionContext([DefaultValue])
|
|
88
102
|
|
|
89
103
|
/**
|
|
90
104
|
* Represents default values that cannot be expressed in the Prisma schema (such as random()).
|
|
91
105
|
*/
|
|
92
106
|
function dbgenerated(expr: String): Any {
|
|
93
|
-
}
|
|
107
|
+
} @@@expressionContext([DefaultValue])
|
|
94
108
|
|
|
95
109
|
/**
|
|
96
110
|
* Gets entities value before an update. Only valid when used in a "update" policy rule.
|
|
97
111
|
*/
|
|
98
112
|
function future(): Any {
|
|
99
|
-
}
|
|
113
|
+
} @@@expressionContext([AccessPolicy])
|
|
100
114
|
|
|
101
115
|
/**
|
|
102
116
|
* If the field value contains the search string. By default, the search is case-sensitive,
|
|
103
117
|
* but you can override the behavior with the "caseInSensitive" argument.
|
|
104
118
|
*/
|
|
105
119
|
function contains(field: String, search: String, caseInSensitive: Boolean?): Boolean {
|
|
106
|
-
}
|
|
120
|
+
} @@@expressionContext([AccessPolicy, ValidationRule])
|
|
107
121
|
|
|
108
122
|
/**
|
|
109
123
|
* If the field value matches the search condition with [full-text-search](https://www.prisma.io/docs/concepts/components/prisma-client/full-text-search). Need to enable "fullTextSearch" preview feature to use.
|
|
110
124
|
*/
|
|
111
125
|
function search(field: String, search: String): Boolean {
|
|
112
|
-
}
|
|
126
|
+
} @@@expressionContext([AccessPolicy])
|
|
113
127
|
|
|
114
128
|
/**
|
|
115
129
|
* If the field value starts with the search string
|
|
116
130
|
*/
|
|
117
131
|
function startsWith(field: String, search: String): Boolean {
|
|
118
|
-
}
|
|
132
|
+
} @@@expressionContext([AccessPolicy, ValidationRule])
|
|
119
133
|
|
|
120
134
|
/**
|
|
121
135
|
* If the field value ends with the search string
|
|
122
136
|
*/
|
|
123
137
|
function endsWith(field: String, search: String): Boolean {
|
|
124
|
-
}
|
|
138
|
+
} @@@expressionContext([AccessPolicy, ValidationRule])
|
|
125
139
|
|
|
126
140
|
/**
|
|
127
141
|
* If the field value (a list) has the given search value
|
|
128
142
|
*/
|
|
129
143
|
function has(field: Any[], search: Any): Boolean {
|
|
130
|
-
}
|
|
144
|
+
} @@@expressionContext([AccessPolicy, ValidationRule])
|
|
131
145
|
|
|
132
146
|
/**
|
|
133
147
|
* If the field value (a list) has every element of the search list
|
|
134
148
|
*/
|
|
135
149
|
function hasEvery(field: Any[], search: Any[]): Boolean {
|
|
136
|
-
}
|
|
150
|
+
} @@@expressionContext([AccessPolicy, ValidationRule])
|
|
137
151
|
|
|
138
152
|
/**
|
|
139
153
|
* If the field value (a list) has at least one element of the search list
|
|
140
154
|
*/
|
|
141
155
|
function hasSome(field: Any[], search: Any[]): Boolean {
|
|
142
|
-
}
|
|
156
|
+
} @@@expressionContext([AccessPolicy, ValidationRule])
|
|
143
157
|
|
|
144
158
|
/**
|
|
145
159
|
* If the field value (a list) is empty
|
|
146
160
|
*/
|
|
147
161
|
function isEmpty(field: Any[]): Boolean {
|
|
148
|
-
}
|
|
162
|
+
} @@@expressionContext([AccessPolicy, ValidationRule])
|
|
149
163
|
|
|
150
164
|
/**
|
|
151
165
|
* Marks an attribute to be only applicable to certain field types.
|
|
152
166
|
*/
|
|
153
|
-
attribute @@@targetField(targetField: AttributeTargetField[])
|
|
167
|
+
attribute @@@targetField(_ targetField: AttributeTargetField[])
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Marks an attribute to be used for data validation.
|
|
171
|
+
*/
|
|
172
|
+
attribute @@@validation()
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Indicates the expression context a function can be used.
|
|
176
|
+
*/
|
|
177
|
+
attribute @@@expressionContext(_ context: ExpressionContext[])
|
|
154
178
|
|
|
155
179
|
/**
|
|
156
180
|
* Indicates an attribute is directly supported by the Prisma schema.
|
|
@@ -215,12 +239,12 @@ attribute @map(_ name: String) @@@prisma
|
|
|
215
239
|
attribute @@map(_ name: String) @@@prisma
|
|
216
240
|
|
|
217
241
|
/**
|
|
218
|
-
* Exclude a field from the Prisma Client (for example, a field that you do not want Prisma users to update).
|
|
242
|
+
* Exclude a field from the Prisma Client (for example, a field that you do not want Prisma users to update).
|
|
219
243
|
*/
|
|
220
244
|
attribute @ignore() @@@prisma
|
|
221
245
|
|
|
222
246
|
/**
|
|
223
|
-
* Exclude a model from the Prisma Client (for example, a model that you do not want Prisma users to update).
|
|
247
|
+
* Exclude a model from the Prisma Client (for example, a model that you do not want Prisma users to update).
|
|
224
248
|
*/
|
|
225
249
|
attribute @@ignore() @@@prisma
|
|
226
250
|
|
|
@@ -229,6 +253,12 @@ attribute @@ignore() @@@prisma
|
|
|
229
253
|
*/
|
|
230
254
|
attribute @updatedAt() @@@targetField([DateTimeField]) @@@prisma
|
|
231
255
|
|
|
256
|
+
/**
|
|
257
|
+
* Add full text index (MySQL only).
|
|
258
|
+
*/
|
|
259
|
+
attribute @@fulltext(_ fields: FieldReference[]) @@@prisma
|
|
260
|
+
|
|
261
|
+
|
|
232
262
|
// String type modifiers
|
|
233
263
|
|
|
234
264
|
attribute @db.String(_ x: Int?) @@@targetField([StringField]) @@@prisma
|
|
@@ -327,11 +357,21 @@ attribute @@schema(_ name: String) @@@prisma
|
|
|
327
357
|
*/
|
|
328
358
|
attribute @@allow(_ operation: String, _ condition: Boolean)
|
|
329
359
|
|
|
360
|
+
/**
|
|
361
|
+
* Defines an access policy that allows the annotated field to be read or updated.
|
|
362
|
+
*/
|
|
363
|
+
attribute @allow(_ operation: String, _ condition: Boolean)
|
|
364
|
+
|
|
330
365
|
/**
|
|
331
366
|
* Defines an access policy that denies a set of operations when the given condition is true.
|
|
332
367
|
*/
|
|
333
368
|
attribute @@deny(_ operation: String, _ condition: Boolean)
|
|
334
369
|
|
|
370
|
+
/**
|
|
371
|
+
* Defines an access policy that denies the annotated field to be read or updated.
|
|
372
|
+
*/
|
|
373
|
+
attribute @deny(_ operation: String, _ condition: Boolean)
|
|
374
|
+
|
|
335
375
|
/**
|
|
336
376
|
* Indicates that the field is a password field and needs to be hashed before persistence.
|
|
337
377
|
*
|
|
@@ -351,60 +391,109 @@ attribute @password(saltLength: Int?, salt: String?) @@@targetField([StringField
|
|
|
351
391
|
*/
|
|
352
392
|
attribute @omit()
|
|
353
393
|
|
|
394
|
+
//////////////////////////////////////////////
|
|
395
|
+
// Begin validation attributes and functions
|
|
396
|
+
//////////////////////////////////////////////
|
|
397
|
+
|
|
354
398
|
/**
|
|
355
399
|
* Validates length of a string field.
|
|
356
400
|
*/
|
|
357
|
-
attribute @length(_ min: Int?, _ max: Int?) @@@targetField([StringField])
|
|
401
|
+
attribute @length(_ min: Int?, _ max: Int?, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
358
402
|
|
|
359
403
|
/**
|
|
360
|
-
* Validates a string field value
|
|
404
|
+
* Validates a string field value starts with the given text.
|
|
361
405
|
*/
|
|
362
|
-
attribute @
|
|
406
|
+
attribute @startsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
363
407
|
|
|
364
408
|
/**
|
|
365
|
-
* Validates a string field value
|
|
409
|
+
* Validates a string field value ends with the given text.
|
|
366
410
|
*/
|
|
367
|
-
attribute @
|
|
411
|
+
attribute @endsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
368
412
|
|
|
369
413
|
/**
|
|
370
|
-
* Validates a string field value
|
|
414
|
+
* Validates a string field value contains the given text.
|
|
415
|
+
*/
|
|
416
|
+
attribute @contains(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Validates a string field value matches a regex.
|
|
371
420
|
*/
|
|
372
|
-
attribute @
|
|
421
|
+
attribute @regex(_ regex: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
373
422
|
|
|
374
423
|
/**
|
|
375
424
|
* Validates a string field value is a valid email address.
|
|
376
425
|
*/
|
|
377
|
-
attribute @email() @@@targetField([StringField])
|
|
426
|
+
attribute @email(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
378
427
|
|
|
379
428
|
/**
|
|
380
429
|
* Validates a string field value is a valid ISO datetime.
|
|
381
430
|
*/
|
|
382
|
-
attribute @datetime() @@@targetField([StringField])
|
|
431
|
+
attribute @datetime(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
383
432
|
|
|
384
433
|
/**
|
|
385
434
|
* Validates a string field value is a valid url.
|
|
386
435
|
*/
|
|
387
|
-
attribute @url() @@@targetField([StringField])
|
|
436
|
+
attribute @url(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
388
437
|
|
|
389
438
|
/**
|
|
390
439
|
* Validates a number field is greater than the given value.
|
|
391
440
|
*/
|
|
392
|
-
attribute @gt(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
|
|
441
|
+
attribute @gt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
393
442
|
|
|
394
443
|
/**
|
|
395
444
|
* Validates a number field is greater than or equal to the given value.
|
|
396
445
|
*/
|
|
397
|
-
attribute @gte(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
|
|
446
|
+
attribute @gte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
398
447
|
|
|
399
448
|
/**
|
|
400
449
|
* Validates a number field is less than the given value.
|
|
401
450
|
*/
|
|
402
|
-
attribute @lt(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
|
|
451
|
+
attribute @lt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
403
452
|
|
|
404
453
|
/**
|
|
405
454
|
* Validates a number field is less than or equal to the given value.
|
|
406
455
|
*/
|
|
407
|
-
attribute @lte(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
|
|
456
|
+
attribute @lte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Validates the entity with a complex condition.
|
|
460
|
+
*/
|
|
461
|
+
attribute @@validate(_ value: Boolean, _ message: String?) @@@validation
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Validates length of a string field.
|
|
465
|
+
*/
|
|
466
|
+
function length(field: String, min: Int, max: Int?): Boolean {
|
|
467
|
+
} @@@expressionContext([ValidationRule])
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Validates a string field value matches a regex.
|
|
472
|
+
*/
|
|
473
|
+
function regex(field: String, regex: String): Boolean {
|
|
474
|
+
} @@@expressionContext([ValidationRule])
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Validates a string field value is a valid email address.
|
|
478
|
+
*/
|
|
479
|
+
function email(field: String): Boolean {
|
|
480
|
+
} @@@expressionContext([ValidationRule])
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Validates a string field value is a valid ISO datetime.
|
|
484
|
+
*/
|
|
485
|
+
function datetime(field: String): Boolean {
|
|
486
|
+
} @@@expressionContext([ValidationRule])
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Validates a string field value is a valid url.
|
|
490
|
+
*/
|
|
491
|
+
function url(field: String): Boolean {
|
|
492
|
+
} @@@expressionContext([ValidationRule])
|
|
493
|
+
|
|
494
|
+
//////////////////////////////////////////////
|
|
495
|
+
// End validation attributes and functions
|
|
496
|
+
//////////////////////////////////////////////
|
|
408
497
|
|
|
409
498
|
/**
|
|
410
499
|
* A utility attribute to allow passthrough of arbitrary attribute text to the generated Prisma schema.
|
package/telemetry.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class Telemetry {
|
|
|
11
11
|
private readonly sessionid;
|
|
12
12
|
private readonly _os;
|
|
13
13
|
private readonly version;
|
|
14
|
+
private readonly prismaVersion;
|
|
14
15
|
private exitWait;
|
|
15
16
|
constructor();
|
|
16
17
|
track(event: TelemetryEvents, properties?: Record<string, unknown>): void;
|
package/telemetry.js
CHANGED
|
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
exports.Telemetry = void 0;
|
|
39
39
|
const cuid2_1 = require("@paralleldrive/cuid2");
|
|
40
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
40
41
|
const async_exit_hook_1 = __importDefault(require("async-exit-hook"));
|
|
41
42
|
const commander_1 = require("commander");
|
|
42
43
|
const mixpanel_1 = require("mixpanel");
|
|
@@ -55,6 +56,7 @@ class Telemetry {
|
|
|
55
56
|
this.sessionid = (0, cuid2_1.createId)();
|
|
56
57
|
this._os = os.platform();
|
|
57
58
|
this.version = (0, version_utils_1.getVersion)();
|
|
59
|
+
this.prismaVersion = (0, sdk_1.getPrismaVersion)();
|
|
58
60
|
this.exitWait = 200;
|
|
59
61
|
if (process.env.DO_NOT_TRACK !== '1' && constants_1.TELEMETRY_TRACKING_TOKEN) {
|
|
60
62
|
this.mixpanel = (0, mixpanel_1.init)(constants_1.TELEMETRY_TRACKING_TOKEN, {
|
|
@@ -98,7 +100,7 @@ class Telemetry {
|
|
|
98
100
|
}
|
|
99
101
|
track(event, properties = {}) {
|
|
100
102
|
if (this.mixpanel) {
|
|
101
|
-
const payload = Object.assign({ distinct_id: this.hostId, session: this.sessionid, time: new Date(), $os: this._os, nodeVersion: process.version, version: this.version }, properties);
|
|
103
|
+
const payload = Object.assign({ distinct_id: this.hostId, session: this.sessionid, time: new Date(), $os: this._os, nodeVersion: process.version, version: this.version, prismaVersion: this.prismaVersion }, properties);
|
|
102
104
|
this.mixpanel.track(event, payload);
|
|
103
105
|
}
|
|
104
106
|
}
|
package/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAgD;AAChD,sEAAuC;AACvC,yCAA2C;AAC3C,uCAA0C;AAC1C,qDAAgD;AAChD,uCAAyB;AACzB,kEAAkC;AAClC,+CAA2C;AAC3C,2CAAuD;AACvD,yDAAmD;AAkBnD;;GAEG;AACH,MAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/utils/ast-utils.d.ts
CHANGED
|
@@ -1,23 +1,10 @@
|
|
|
1
|
-
import { DataModel,
|
|
1
|
+
import { DataModel, DataModelField, Expression, Model, ModelImport } from '@zenstackhq/language/ast';
|
|
2
2
|
import { AstNode, LangiumDocuments } from 'langium';
|
|
3
3
|
import { URI } from 'vscode-uri';
|
|
4
4
|
export declare function extractDataModelsWithAllowRules(model: Model): DataModel[];
|
|
5
|
-
export declare function analyzePolicies(dataModel: DataModel): {
|
|
6
|
-
allows: DataModelAttribute[];
|
|
7
|
-
denies: DataModelAttribute[];
|
|
8
|
-
create: boolean | undefined;
|
|
9
|
-
read: boolean | undefined;
|
|
10
|
-
update: boolean | undefined;
|
|
11
|
-
delete: boolean | undefined;
|
|
12
|
-
allowAll: boolean;
|
|
13
|
-
denyAll: boolean;
|
|
14
|
-
hasFieldValidation: boolean;
|
|
15
|
-
};
|
|
16
5
|
export declare function mergeBaseModel(model: Model): void;
|
|
17
|
-
export declare const VALIDATION_ATTRIBUTES: string[];
|
|
18
6
|
export declare function getIdFields(dataModel: DataModel): DataModelField[];
|
|
19
7
|
export declare function isAuthInvocation(node: AstNode): boolean;
|
|
20
|
-
export declare function isEnumFieldReference(expr: Expression): boolean;
|
|
21
8
|
export declare function getDataModelFieldReference(expr: Expression): DataModelField | undefined;
|
|
22
9
|
export declare function resolveImportUri(imp: ModelImport): URI | undefined;
|
|
23
10
|
export declare function resolveTransitiveImports(documents: LangiumDocuments, model: Model): Model[];
|