@zenstackhq/sdk 1.10.0 → 2.0.0-alpha.2
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/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/model-meta-generator.d.ts +15 -4
- package/model-meta-generator.js +203 -110
- package/model-meta-generator.js.map +1 -1
- package/package.json +5 -3
- package/prisma.d.ts +7 -4
- package/prisma.js +44 -43
- package/prisma.js.map +1 -1
- package/types.d.ts +37 -7
- package/types.js.map +1 -1
- package/typescript-expression-transformer.d.ts +56 -0
- package/typescript-expression-transformer.js +337 -0
- package/typescript-expression-transformer.js.map +1 -0
- package/utils.d.ts +19 -4
- package/utils.js +115 -8
- package/utils.js.map +1 -1
package/prisma.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.js","sourceRoot":"","sources":["../src/prisma.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGvD,
|
|
1
|
+
{"version":3,"file":"prisma.js","sourceRoot":"","sources":["../src/prisma.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGvD,gDAAwB;AACxB,+CAAiC;AACjC,2CAA8C;AAG9C;;GAEG;AACH,SAAgB,yBAAyB,CAAC,gBAAwB,EAAE,OAAsB;IACtF,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,KAAK,gBAAgB,EAAE,CAAC;QAC7E,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,2BAAe,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,gBAAgB,CAAC;IACpC,CAAC;IAED,IAAI,cAAI,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC5C,gBAAgB;QAChB,OAAO,OAAO,CAAC,gBAAgB,CAAC;IACpC,CAAC;IAED,0DAA0D;IAC1D,MAAM,0BAA0B,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5G,gEAAgE;IAChE,IAAI,MAAM,GAAG,cAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IAEzE,oEAAoE;IACpE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IAEzD,2EAA2E;IAC3E,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAzBD,8DAyBC;AAED,SAAS,aAAa,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAWD;;GAEG;AACH,SAAgB,OAAO,CAAC,OAAuB,EAAE,oBAA6B;;IAC1E,MAAM,aAAa,GAAG,MAAA,gBAAgB,EAAE,mCAAI,oBAAoB,CAAC;IACjE,IAAI,aAAa,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC;QACzD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACJ,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC;QACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;AACL,CAAC;AATD,0BASC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;QACpC,mBAAmB;QACnB,IAAI,CAAC;YACD,OAAO,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,CAAC,OAAO,CAAC;QACvF,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACD,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC;IAC1D,CAAC;IAAC,WAAM,CAAC;QACL,IAAI,CAAC;YACD,OAAO,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC;QAClD,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC;AAnBD,4CAmBC"}
|
package/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DMMF } from '@prisma/generator-helper';
|
|
2
2
|
import { Model } from '@zenstackhq/language/ast';
|
|
3
|
+
import type { Project } from 'ts-morph';
|
|
3
4
|
/**
|
|
4
5
|
* Plugin configuration option value type
|
|
5
6
|
*/
|
|
@@ -7,20 +8,25 @@ export type OptionValue = string | number | boolean;
|
|
|
7
8
|
/**
|
|
8
9
|
* Plugin configuration options
|
|
9
10
|
*/
|
|
10
|
-
export type
|
|
11
|
+
export type PluginDeclaredOptions = {
|
|
11
12
|
/***
|
|
12
13
|
* The provider package
|
|
13
14
|
*/
|
|
14
|
-
provider
|
|
15
|
+
provider: string;
|
|
16
|
+
} & Record<string, OptionValue | OptionValue[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Plugin configuration options for execution
|
|
19
|
+
*/
|
|
20
|
+
export type PluginOptions = {
|
|
15
21
|
/**
|
|
16
|
-
*
|
|
22
|
+
* ZModel schema absolute path
|
|
17
23
|
*/
|
|
18
24
|
schemaPath: string;
|
|
19
25
|
/**
|
|
20
|
-
*
|
|
26
|
+
* PrismaClient import path, either relative to `schemaPath` or absolute
|
|
21
27
|
*/
|
|
22
|
-
|
|
23
|
-
} &
|
|
28
|
+
prismaClientPath?: string;
|
|
29
|
+
} & PluginDeclaredOptions;
|
|
24
30
|
/**
|
|
25
31
|
* Global options that apply to all plugins
|
|
26
32
|
*/
|
|
@@ -33,11 +39,35 @@ export type PluginGlobalOptions = {
|
|
|
33
39
|
* Whether to compile the generated code
|
|
34
40
|
*/
|
|
35
41
|
compile: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* The `ts-morph` project used for code generation.
|
|
44
|
+
* @private
|
|
45
|
+
*/
|
|
46
|
+
tsProject: Project;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Plugin run results.
|
|
50
|
+
*/
|
|
51
|
+
export type PluginResult = {
|
|
52
|
+
/**
|
|
53
|
+
* Warnings
|
|
54
|
+
*/
|
|
55
|
+
warnings: string[];
|
|
56
|
+
/**
|
|
57
|
+
* PrismaClient path, either relative to zmodel path or absolute, if the plugin
|
|
58
|
+
* generated a PrismaClient
|
|
59
|
+
*/
|
|
60
|
+
prismaClientPath?: string;
|
|
61
|
+
/**
|
|
62
|
+
* An optional Prisma DMMF document that a plugin can generate
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
dmmf?: DMMF.Document;
|
|
36
66
|
};
|
|
37
67
|
/**
|
|
38
68
|
* Plugin entry point function definition
|
|
39
69
|
*/
|
|
40
|
-
export type PluginFunction = (model: Model, options: PluginOptions, dmmf
|
|
70
|
+
export type PluginFunction = (model: Model, options: PluginOptions, dmmf: DMMF.Document | undefined, globalOptions?: PluginGlobalOptions) => Promise<PluginResult> | PluginResult | Promise<void> | void;
|
|
41
71
|
/**
|
|
42
72
|
* Plugin error
|
|
43
73
|
*/
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAuFA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IAClC,YAAmB,MAAc,EAAE,OAAe;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QADA,WAAM,GAAN,MAAM,CAAQ;IAEjC,CAAC;CACJ;AAJD,kCAIC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Expression } from '@zenstackhq/language/ast';
|
|
2
|
+
import { ExpressionContext } from './constants';
|
|
3
|
+
export declare class TypeScriptExpressionTransformerError extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
type Options = {
|
|
7
|
+
isPostGuard?: boolean;
|
|
8
|
+
fieldReferenceContext?: string;
|
|
9
|
+
thisExprContext?: string;
|
|
10
|
+
context: ExpressionContext;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Transforms ZModel expression to plain TypeScript expression.
|
|
14
|
+
*/
|
|
15
|
+
export declare class TypeScriptExpressionTransformer {
|
|
16
|
+
private readonly options;
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new TypeScriptExpressionTransformer.
|
|
19
|
+
*
|
|
20
|
+
* @param isPostGuard indicates if we're writing for post-update conditions
|
|
21
|
+
*/
|
|
22
|
+
constructor(options: Options);
|
|
23
|
+
/**
|
|
24
|
+
* Transforms the given expression to a TypeScript expression.
|
|
25
|
+
* @param normalizeUndefined if undefined values should be normalized to null
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
transform(expr: Expression, normalizeUndefined?: boolean): string;
|
|
29
|
+
private this;
|
|
30
|
+
private memberAccess;
|
|
31
|
+
private invocation;
|
|
32
|
+
private _auth;
|
|
33
|
+
private _now;
|
|
34
|
+
private _length;
|
|
35
|
+
private _contains;
|
|
36
|
+
private _startsWith;
|
|
37
|
+
private _endsWith;
|
|
38
|
+
private _regex;
|
|
39
|
+
private _email;
|
|
40
|
+
private _datetime;
|
|
41
|
+
private _url;
|
|
42
|
+
private _has;
|
|
43
|
+
private _hasEvery;
|
|
44
|
+
private _hasSome;
|
|
45
|
+
private _isEmpty;
|
|
46
|
+
private ensureBoolean;
|
|
47
|
+
private reference;
|
|
48
|
+
private null;
|
|
49
|
+
private array;
|
|
50
|
+
private literal;
|
|
51
|
+
private unary;
|
|
52
|
+
private isModelType;
|
|
53
|
+
private binary;
|
|
54
|
+
private collectionPredicate;
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TypeScriptExpressionTransformer = exports.TypeScriptExpressionTransformerError = void 0;
|
|
10
|
+
const ast_1 = require("@zenstackhq/language/ast");
|
|
11
|
+
const ts_pattern_1 = require("ts-pattern");
|
|
12
|
+
const utils_1 = require("./utils");
|
|
13
|
+
class TypeScriptExpressionTransformerError extends Error {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.TypeScriptExpressionTransformerError = TypeScriptExpressionTransformerError;
|
|
19
|
+
// a registry of function handlers marked with @func
|
|
20
|
+
const functionHandlers = new Map();
|
|
21
|
+
// function handler decorator
|
|
22
|
+
function func(name) {
|
|
23
|
+
return function (target, propertyKey, descriptor) {
|
|
24
|
+
if (!functionHandlers.get(name)) {
|
|
25
|
+
functionHandlers.set(name, descriptor);
|
|
26
|
+
}
|
|
27
|
+
return descriptor;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Transforms ZModel expression to plain TypeScript expression.
|
|
32
|
+
*/
|
|
33
|
+
class TypeScriptExpressionTransformer {
|
|
34
|
+
/**
|
|
35
|
+
* Constructs a new TypeScriptExpressionTransformer.
|
|
36
|
+
*
|
|
37
|
+
* @param isPostGuard indicates if we're writing for post-update conditions
|
|
38
|
+
*/
|
|
39
|
+
constructor(options) {
|
|
40
|
+
this.options = options;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Transforms the given expression to a TypeScript expression.
|
|
44
|
+
* @param normalizeUndefined if undefined values should be normalized to null
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
transform(expr, normalizeUndefined = true) {
|
|
48
|
+
switch (expr.$type) {
|
|
49
|
+
case ast_1.StringLiteral:
|
|
50
|
+
case ast_1.NumberLiteral:
|
|
51
|
+
case ast_1.BooleanLiteral:
|
|
52
|
+
return this.literal(expr);
|
|
53
|
+
case ast_1.ArrayExpr:
|
|
54
|
+
return this.array(expr, normalizeUndefined);
|
|
55
|
+
case ast_1.NullExpr:
|
|
56
|
+
return this.null();
|
|
57
|
+
case ast_1.ThisExpr:
|
|
58
|
+
return this.this(expr);
|
|
59
|
+
case ast_1.ReferenceExpr:
|
|
60
|
+
return this.reference(expr);
|
|
61
|
+
case ast_1.InvocationExpr:
|
|
62
|
+
return this.invocation(expr, normalizeUndefined);
|
|
63
|
+
case ast_1.MemberAccessExpr:
|
|
64
|
+
return this.memberAccess(expr, normalizeUndefined);
|
|
65
|
+
case ast_1.UnaryExpr:
|
|
66
|
+
return this.unary(expr, normalizeUndefined);
|
|
67
|
+
case ast_1.BinaryExpr:
|
|
68
|
+
return this.binary(expr, normalizeUndefined);
|
|
69
|
+
default:
|
|
70
|
+
throw new TypeScriptExpressionTransformerError(`Unsupported expression type: ${expr.$type}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this(_expr) {
|
|
74
|
+
var _a;
|
|
75
|
+
// "this" is mapped to the input argument
|
|
76
|
+
return (_a = this.options.thisExprContext) !== null && _a !== void 0 ? _a : 'input';
|
|
77
|
+
}
|
|
78
|
+
memberAccess(expr, normalizeUndefined) {
|
|
79
|
+
var _a;
|
|
80
|
+
if (!expr.member.ref) {
|
|
81
|
+
throw new TypeScriptExpressionTransformerError(`Unresolved MemberAccessExpr`);
|
|
82
|
+
}
|
|
83
|
+
if ((0, ast_1.isThisExpr)(expr.operand)) {
|
|
84
|
+
return expr.member.ref.name;
|
|
85
|
+
}
|
|
86
|
+
else if ((0, utils_1.isFutureExpr)(expr.operand)) {
|
|
87
|
+
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.isPostGuard) !== true) {
|
|
88
|
+
throw new TypeScriptExpressionTransformerError(`future() is only supported in postUpdate rules`);
|
|
89
|
+
}
|
|
90
|
+
return expr.member.ref.name;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (normalizeUndefined) {
|
|
94
|
+
// normalize field access to null instead of undefined to avoid accidentally use undefined in filter
|
|
95
|
+
return `(${this.transform(expr.operand, normalizeUndefined)}?.${expr.member.ref.name} ?? null)`;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return `${this.transform(expr.operand, normalizeUndefined)}?.${expr.member.ref.name}`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
invocation(expr, normalizeUndefined) {
|
|
103
|
+
if (!expr.function.ref) {
|
|
104
|
+
throw new TypeScriptExpressionTransformerError(`Unresolved InvocationExpr`);
|
|
105
|
+
}
|
|
106
|
+
const funcName = expr.function.ref.name;
|
|
107
|
+
const isStdFunc = (0, utils_1.isFromStdlib)(expr.function.ref);
|
|
108
|
+
if (!isStdFunc) {
|
|
109
|
+
throw new TypeScriptExpressionTransformerError('User-defined functions are not supported yet');
|
|
110
|
+
}
|
|
111
|
+
const handler = functionHandlers.get(funcName);
|
|
112
|
+
if (!handler) {
|
|
113
|
+
throw new TypeScriptExpressionTransformerError(`Unsupported function: ${funcName}`);
|
|
114
|
+
}
|
|
115
|
+
const args = expr.args.map((arg) => arg.value);
|
|
116
|
+
return handler.value.call(this, args, normalizeUndefined);
|
|
117
|
+
}
|
|
118
|
+
// #region function invocation handlers
|
|
119
|
+
// arguments have been type-checked
|
|
120
|
+
_auth() {
|
|
121
|
+
return 'user';
|
|
122
|
+
}
|
|
123
|
+
_now() {
|
|
124
|
+
return `(new Date())`;
|
|
125
|
+
}
|
|
126
|
+
_length(args) {
|
|
127
|
+
const field = this.transform(args[0], false);
|
|
128
|
+
const min = (0, utils_1.getLiteral)(args[1]);
|
|
129
|
+
const max = (0, utils_1.getLiteral)(args[2]);
|
|
130
|
+
let result;
|
|
131
|
+
if (min === undefined) {
|
|
132
|
+
result = `(${field}?.length > 0)`;
|
|
133
|
+
}
|
|
134
|
+
else if (max === undefined) {
|
|
135
|
+
result = `(${field}?.length >= ${min})`;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
result = `(${field}?.length >= ${min} && ${field}?.length <= ${max})`;
|
|
139
|
+
}
|
|
140
|
+
return this.ensureBoolean(result);
|
|
141
|
+
}
|
|
142
|
+
_contains(args, normalizeUndefined) {
|
|
143
|
+
const field = this.transform(args[0], false);
|
|
144
|
+
const caseInsensitive = (0, utils_1.getLiteral)(args[2]) === true;
|
|
145
|
+
let result;
|
|
146
|
+
if (caseInsensitive) {
|
|
147
|
+
result = `${field}?.toLowerCase().includes(${this.transform(args[1], normalizeUndefined)}?.toLowerCase())`;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
result = `${field}?.includes(${this.transform(args[1], normalizeUndefined)})`;
|
|
151
|
+
}
|
|
152
|
+
return this.ensureBoolean(result);
|
|
153
|
+
}
|
|
154
|
+
_startsWith(args, normalizeUndefined) {
|
|
155
|
+
const field = this.transform(args[0], false);
|
|
156
|
+
const result = `${field}?.startsWith(${this.transform(args[1], normalizeUndefined)})`;
|
|
157
|
+
return this.ensureBoolean(result);
|
|
158
|
+
}
|
|
159
|
+
_endsWith(args, normalizeUndefined) {
|
|
160
|
+
const field = this.transform(args[0], false);
|
|
161
|
+
const result = `${field}?.endsWith(${this.transform(args[1], normalizeUndefined)})`;
|
|
162
|
+
return this.ensureBoolean(result);
|
|
163
|
+
}
|
|
164
|
+
_regex(args) {
|
|
165
|
+
const field = this.transform(args[0], false);
|
|
166
|
+
const pattern = (0, utils_1.getLiteral)(args[1]);
|
|
167
|
+
return `new RegExp(${JSON.stringify(pattern)}).test(${field})`;
|
|
168
|
+
}
|
|
169
|
+
_email(args) {
|
|
170
|
+
const field = this.transform(args[0], false);
|
|
171
|
+
return `z.string().email().safeParse(${field}).success`;
|
|
172
|
+
}
|
|
173
|
+
_datetime(args) {
|
|
174
|
+
const field = this.transform(args[0], false);
|
|
175
|
+
return `z.string().datetime({ offset: true }).safeParse(${field}).success`;
|
|
176
|
+
}
|
|
177
|
+
_url(args) {
|
|
178
|
+
const field = this.transform(args[0], false);
|
|
179
|
+
return `z.string().url().safeParse(${field}).success`;
|
|
180
|
+
}
|
|
181
|
+
_has(args, normalizeUndefined) {
|
|
182
|
+
const field = this.transform(args[0], false);
|
|
183
|
+
const result = `${field}?.includes(${this.transform(args[1], normalizeUndefined)})`;
|
|
184
|
+
return this.ensureBoolean(result);
|
|
185
|
+
}
|
|
186
|
+
_hasEvery(args, normalizeUndefined) {
|
|
187
|
+
const field = this.transform(args[0], false);
|
|
188
|
+
const result = `${this.transform(args[1], normalizeUndefined)}?.every((item) => ${field}?.includes(item))`;
|
|
189
|
+
return this.ensureBoolean(result);
|
|
190
|
+
}
|
|
191
|
+
_hasSome(args, normalizeUndefined) {
|
|
192
|
+
const field = this.transform(args[0], false);
|
|
193
|
+
const result = `${this.transform(args[1], normalizeUndefined)}?.some((item) => ${field}?.includes(item))`;
|
|
194
|
+
return this.ensureBoolean(result);
|
|
195
|
+
}
|
|
196
|
+
_isEmpty(args) {
|
|
197
|
+
const field = this.transform(args[0], false);
|
|
198
|
+
const result = `(!${field} || ${field}?.length === 0)`;
|
|
199
|
+
return this.ensureBoolean(result);
|
|
200
|
+
}
|
|
201
|
+
ensureBoolean(expr) {
|
|
202
|
+
return `(${expr} ?? false)`;
|
|
203
|
+
}
|
|
204
|
+
// #endregion
|
|
205
|
+
reference(expr) {
|
|
206
|
+
var _a, _b;
|
|
207
|
+
if (!expr.target.ref) {
|
|
208
|
+
throw new TypeScriptExpressionTransformerError(`Unresolved ReferenceExpr`);
|
|
209
|
+
}
|
|
210
|
+
if ((0, ast_1.isEnumField)(expr.target.ref)) {
|
|
211
|
+
return `${expr.target.ref.$container.name}.${expr.target.ref.name}`;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.isPostGuard) {
|
|
215
|
+
// if we're processing post-update, any direct field access should be
|
|
216
|
+
// treated as access to context.preValue, which is entity's value before
|
|
217
|
+
// the update
|
|
218
|
+
return `context.preValue?.${expr.target.ref.name}`;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
return ((_b = this.options) === null || _b === void 0 ? void 0 : _b.fieldReferenceContext)
|
|
222
|
+
? `${this.options.fieldReferenceContext}?.${expr.target.ref.name}`
|
|
223
|
+
: expr.target.ref.name;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
null() {
|
|
228
|
+
return 'null';
|
|
229
|
+
}
|
|
230
|
+
array(expr, normalizeUndefined) {
|
|
231
|
+
return `[${expr.items.map((item) => this.transform(item, normalizeUndefined)).join(', ')}]`;
|
|
232
|
+
}
|
|
233
|
+
literal(expr) {
|
|
234
|
+
if (expr.$type === ast_1.StringLiteral) {
|
|
235
|
+
return `'${expr.value}'`;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
return expr.value.toString();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
unary(expr, normalizeUndefined) {
|
|
242
|
+
return `(${expr.operator} ${this.transform(expr.operand, normalizeUndefined)})`;
|
|
243
|
+
}
|
|
244
|
+
isModelType(expr) {
|
|
245
|
+
var _a;
|
|
246
|
+
return (0, ast_1.isDataModel)((_a = expr.$resolvedType) === null || _a === void 0 ? void 0 : _a.decl);
|
|
247
|
+
}
|
|
248
|
+
binary(expr, normalizeUndefined) {
|
|
249
|
+
let left = this.transform(expr.left, normalizeUndefined);
|
|
250
|
+
let right = this.transform(expr.right, normalizeUndefined);
|
|
251
|
+
if (this.isModelType(expr.left) && this.isModelType(expr.right)) {
|
|
252
|
+
// comparison between model type values, map to id comparison
|
|
253
|
+
left = `(${left}?.id ?? null)`;
|
|
254
|
+
right = `(${right}?.id ?? null)`;
|
|
255
|
+
}
|
|
256
|
+
const _default = `(${left} ${expr.operator} ${right})`;
|
|
257
|
+
return (0, ts_pattern_1.match)(expr.operator)
|
|
258
|
+
.with('in', () => `(${this.transform(expr.right, false)}?.includes(${this.transform(expr.left, normalizeUndefined)}) ?? false)`)
|
|
259
|
+
.with(ts_pattern_1.P.union('==', '!='), () => {
|
|
260
|
+
var _a;
|
|
261
|
+
if ((0, ast_1.isThisExpr)(expr.left) || (0, ast_1.isThisExpr)(expr.right)) {
|
|
262
|
+
// map equality comparison with `this` to id comparison
|
|
263
|
+
const _this = (0, ast_1.isThisExpr)(expr.left) ? expr.left : expr.right;
|
|
264
|
+
const model = (_a = _this.$resolvedType) === null || _a === void 0 ? void 0 : _a.decl;
|
|
265
|
+
const idFields = (0, utils_1.getIdFields)(model);
|
|
266
|
+
if (!idFields || idFields.length === 0) {
|
|
267
|
+
throw new TypeScriptExpressionTransformerError(`model "${model.name}" does not have an id field`);
|
|
268
|
+
}
|
|
269
|
+
let result = `allFieldsEqual(${this.transform(expr.left, false)},
|
|
270
|
+
${this.transform(expr.right, false)}, [${idFields.map((f) => "'" + f.name + "'").join(', ')}])`;
|
|
271
|
+
if (expr.operator === '!=') {
|
|
272
|
+
result = `!${result}`;
|
|
273
|
+
}
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
return _default;
|
|
278
|
+
}
|
|
279
|
+
})
|
|
280
|
+
.with(ts_pattern_1.P.union('?', '!', '^'), (op) => this.collectionPredicate(expr, op, normalizeUndefined))
|
|
281
|
+
.otherwise(() => _default);
|
|
282
|
+
}
|
|
283
|
+
collectionPredicate(expr, operator, normalizeUndefined) {
|
|
284
|
+
const operand = this.transform(expr.left, normalizeUndefined);
|
|
285
|
+
const innerTransformer = new TypeScriptExpressionTransformer(Object.assign(Object.assign({}, this.options), { isPostGuard: false, fieldReferenceContext: '_item', thisExprContext: '_item' }));
|
|
286
|
+
const predicate = innerTransformer.transform(expr.right, normalizeUndefined);
|
|
287
|
+
return (0, ts_pattern_1.match)(operator)
|
|
288
|
+
.with('?', () => `!!((${operand})?.some((_item: any) => ${predicate}))`)
|
|
289
|
+
.with('!', () => `!!((${operand})?.every((_item: any) => ${predicate}))`)
|
|
290
|
+
.with('^', () => `!((${operand})?.some((_item: any) => ${predicate}))`)
|
|
291
|
+
.exhaustive();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
exports.TypeScriptExpressionTransformer = TypeScriptExpressionTransformer;
|
|
295
|
+
__decorate([
|
|
296
|
+
func('auth')
|
|
297
|
+
], TypeScriptExpressionTransformer.prototype, "_auth", null);
|
|
298
|
+
__decorate([
|
|
299
|
+
func('now')
|
|
300
|
+
], TypeScriptExpressionTransformer.prototype, "_now", null);
|
|
301
|
+
__decorate([
|
|
302
|
+
func('length')
|
|
303
|
+
], TypeScriptExpressionTransformer.prototype, "_length", null);
|
|
304
|
+
__decorate([
|
|
305
|
+
func('contains')
|
|
306
|
+
], TypeScriptExpressionTransformer.prototype, "_contains", null);
|
|
307
|
+
__decorate([
|
|
308
|
+
func('startsWith')
|
|
309
|
+
], TypeScriptExpressionTransformer.prototype, "_startsWith", null);
|
|
310
|
+
__decorate([
|
|
311
|
+
func('endsWith')
|
|
312
|
+
], TypeScriptExpressionTransformer.prototype, "_endsWith", null);
|
|
313
|
+
__decorate([
|
|
314
|
+
func('regex')
|
|
315
|
+
], TypeScriptExpressionTransformer.prototype, "_regex", null);
|
|
316
|
+
__decorate([
|
|
317
|
+
func('email')
|
|
318
|
+
], TypeScriptExpressionTransformer.prototype, "_email", null);
|
|
319
|
+
__decorate([
|
|
320
|
+
func('datetime')
|
|
321
|
+
], TypeScriptExpressionTransformer.prototype, "_datetime", null);
|
|
322
|
+
__decorate([
|
|
323
|
+
func('url')
|
|
324
|
+
], TypeScriptExpressionTransformer.prototype, "_url", null);
|
|
325
|
+
__decorate([
|
|
326
|
+
func('has')
|
|
327
|
+
], TypeScriptExpressionTransformer.prototype, "_has", null);
|
|
328
|
+
__decorate([
|
|
329
|
+
func('hasEvery')
|
|
330
|
+
], TypeScriptExpressionTransformer.prototype, "_hasEvery", null);
|
|
331
|
+
__decorate([
|
|
332
|
+
func('hasSome')
|
|
333
|
+
], TypeScriptExpressionTransformer.prototype, "_hasSome", null);
|
|
334
|
+
__decorate([
|
|
335
|
+
func('isEmpty')
|
|
336
|
+
], TypeScriptExpressionTransformer.prototype, "_isEmpty", null);
|
|
337
|
+
//# sourceMappingURL=typescript-expression-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-expression-transformer.js","sourceRoot":"","sources":["../src/typescript-expression-transformer.ts"],"names":[],"mappings":"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"}
|
package/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AstNode, Attribute, AttributeParam, ConfigExpr, DataModel, DataModelAttribute, DataModelField, DataModelFieldAttribute, Enum, EnumField, Expression, FunctionDecl, InternalAttribute, Model, Reference, ReferenceExpr } from '@zenstackhq/language/ast';
|
|
2
2
|
import { ExpressionContext } from './constants';
|
|
3
|
-
import { PluginOptions } from './types';
|
|
3
|
+
import { type PluginDeclaredOptions, type PluginOptions } from './types';
|
|
4
4
|
/**
|
|
5
5
|
* Gets data models that are not ignored
|
|
6
6
|
*/
|
|
@@ -12,7 +12,7 @@ export declare function getLiteralArray<T extends string | number | boolean | an
|
|
|
12
12
|
export declare function getObjectLiteral<T>(expr: Expression | ConfigExpr | undefined): T | undefined;
|
|
13
13
|
export declare function indentString(string: string, count?: number): string;
|
|
14
14
|
export declare function hasAttribute(decl: DataModel | DataModelField | Enum | EnumField | FunctionDecl | Attribute | AttributeParam, name: string): boolean;
|
|
15
|
-
export declare function getAttribute(decl: DataModel | DataModelField | Enum | EnumField | FunctionDecl | Attribute | AttributeParam, name: string):
|
|
15
|
+
export declare function getAttribute(decl: DataModel | DataModelField | Enum | EnumField | FunctionDecl | Attribute | AttributeParam, name: string): DataModelAttribute | DataModelFieldAttribute | undefined;
|
|
16
16
|
export declare function getAttributeArgs(attr: DataModelAttribute | DataModelFieldAttribute | InternalAttribute): Record<string, Expression>;
|
|
17
17
|
export declare function getAttributeArg(attr: DataModelAttribute | DataModelFieldAttribute | InternalAttribute, name: string): Expression | undefined;
|
|
18
18
|
export declare function getAttributeArgLiteral<T extends string | number | boolean>(attr: DataModelAttribute | DataModelFieldAttribute, name: string): T | undefined;
|
|
@@ -38,12 +38,27 @@ export declare function isRelationshipField(field: DataModelField): boolean;
|
|
|
38
38
|
* Returns if the given field is a relation foreign key field.
|
|
39
39
|
*/
|
|
40
40
|
export declare function isForeignKeyField(field: DataModelField): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Gets the foreign key fields of the given relation field.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getForeignKeyFields(relationField: DataModelField): DataModelField[];
|
|
45
|
+
/**
|
|
46
|
+
* Gets the relation field of the given foreign key field.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getRelationField(fkField: DataModelField): DataModelField | undefined;
|
|
41
49
|
export declare function resolvePath(_path: string, options: Pick<PluginOptions, 'schemaPath'>): string;
|
|
42
|
-
export declare function requireOption<T>(options:
|
|
43
|
-
export declare function parseOptionAsStrings(options:
|
|
50
|
+
export declare function requireOption<T>(options: PluginDeclaredOptions, name: string, pluginName: string): T;
|
|
51
|
+
export declare function parseOptionAsStrings(options: PluginDeclaredOptions, optionName: string, pluginName: string): string[] | undefined;
|
|
44
52
|
export declare function getFunctionExpressionContext(funcDecl: FunctionDecl): ExpressionContext[];
|
|
45
53
|
export declare function isFutureExpr(node: AstNode): boolean;
|
|
54
|
+
export declare function isAuthInvocation(node: AstNode): boolean;
|
|
46
55
|
export declare function isFromStdlib(node: AstNode): boolean;
|
|
47
56
|
export declare function getContainingModel(node: AstNode | undefined): Model | null;
|
|
48
57
|
export declare function getPreviewFeatures(model: Model): string[] | undefined;
|
|
49
58
|
export declare function getAuthModel(dataModels: DataModel[]): DataModel | undefined;
|
|
59
|
+
export declare function isDelegateModel(node: AstNode): boolean;
|
|
60
|
+
export declare function isDiscriminatorField(field: DataModelField): boolean;
|
|
61
|
+
export declare function getIdFields(dataModel: DataModel): DataModelField[];
|
|
62
|
+
export declare function getDataModelFieldReference(expr: Expression): DataModelField | undefined;
|
|
63
|
+
export declare function getModelFieldsWithBases(model: DataModel): DataModelField[];
|
|
64
|
+
export declare function getRecursiveBases(dataModel: DataModel): DataModel[];
|