@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/prisma.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../src/prisma.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGvD,iDAAuD;AACvD,gDAAwB;AACxB,+CAAiC;AACjC,+BAAgF;AAChF,mCAAqC;AAErC,WAAW;AACX,+CAAuD;AAA9C,2GAAA,gBAAgB,OAAA;AAEzB;;GAEG;AACH,SAAgB,yBAAyB,CAAC,KAAY,EAAE,gBAAwB;;IAC5E,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CACF,IAAA,qBAAe,EAAC,CAAC,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAC,CAC/E,CAAC;IAEnB,MAAM,iBAAiB,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,IAAA,kBAAU,EAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,CAAC,CAAC;IAE1D,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,iDAAiD;QACjD,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,IAAI,cAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,gBAAgB;QAChB,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,oEAAoE;IACpE,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5D,6CAA6C;IAC7C,IAAI,qBAAqB,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,cAAQ,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,CACpG,CAAC;IACZ,IAAI,YAAY,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,MAAA,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,0CAAE,KAAK,CAAC,CAAC;QACvF,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,cAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,qCAAqC;gBACrC,qBAAqB,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACJ,qBAAqB,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC;IACL,CAAC;IAED,gFAAgF;IAChF,MAAM,0BAA0B,GAAG,cAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;IAErF,SAAS;IACT,6DAA6D;IAC7D,kEAAkE;IAClE,oDAAoD;IAEpD,2EAA2E;IAC3E,OAAO,aAAa,CAAC,cAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC,CAAC;AACtF,CAAC;AAlDD,8DAkDC;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,IAAA,0BAAgB,GAAE,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"}
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 PluginOptions = {
11
+ export type PluginDeclaredOptions = {
11
12
  /***
12
13
  * The provider package
13
14
  */
14
- provider?: string;
15
+ provider: string;
16
+ } & Record<string, OptionValue | OptionValue[]>;
17
+ /**
18
+ * Plugin configuration options for execution
19
+ */
20
+ export type PluginOptions = {
15
21
  /**
16
- * The path of the ZModel schema
22
+ * ZModel schema absolute path
17
23
  */
18
24
  schemaPath: string;
19
25
  /**
20
- * The name of the plugin
26
+ * PrismaClient import path, either relative to `schemaPath` or absolute
21
27
  */
22
- name: string;
23
- } & Record<string, OptionValue | OptionValue[]>;
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?: DMMF.Document, globalOptions?: PluginGlobalOptions) => Promise<string[]> | string[] | Promise<void> | void;
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":";;;AAqDA;;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"}
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":";;;;;;;;;AAAA,kDAkBkC;AAClC,2CAAsC;AAEtC,mCAA8E;AAE9E,MAAa,oCAAqC,SAAQ,KAAK;IAC3D,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;CACJ;AAJD,oFAIC;AASD,oDAAoD;AACpD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA8B,CAAC;AAE/D,6BAA6B;AAC7B,SAAS,IAAI,CAAC,IAAY;IACtB,OAAO,UAAU,MAAe,EAAE,WAAmB,EAAE,UAA8B;QACjF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,UAAU,CAAC;IACtB,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAa,+BAA+B;IACxC;;;;OAIG;IACH,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAEjD;;;;OAIG;IACH,SAAS,CAAC,IAAgB,EAAE,kBAAkB,GAAG,IAAI;QACjD,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,mBAAa,CAAC;YACnB,KAAK,mBAAa,CAAC;YACnB,KAAK,oBAAc;gBACf,OAAO,IAAI,CAAC,OAAO,CAAC,IAAmB,CAAC,CAAC;YAE7C,KAAK,eAAS;gBACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAiB,EAAE,kBAAkB,CAAC,CAAC;YAE7D,KAAK,cAAQ;gBACT,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YAEvB,KAAK,cAAQ;gBACT,OAAO,IAAI,CAAC,IAAI,CAAC,IAAgB,CAAC,CAAC;YAEvC,KAAK,mBAAa;gBACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAqB,CAAC,CAAC;YAEjD,KAAK,oBAAc;gBACf,OAAO,IAAI,CAAC,UAAU,CAAC,IAAsB,EAAE,kBAAkB,CAAC,CAAC;YAEvE,KAAK,sBAAgB;gBACjB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAwB,EAAE,kBAAkB,CAAC,CAAC;YAE3E,KAAK,eAAS;gBACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAiB,EAAE,kBAAkB,CAAC,CAAC;YAE7D,KAAK,gBAAU;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAkB,EAAE,kBAAkB,CAAC,CAAC;YAE/D;gBACI,MAAM,IAAI,oCAAoC,CAAC,gCAAgC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrG,CAAC;IACL,CAAC;IAEO,IAAI,CAAC,KAAe;;QACxB,yCAAyC;QACzC,OAAO,MAAA,IAAI,CAAC,OAAO,CAAC,eAAe,mCAAI,OAAO,CAAC;IACnD,CAAC;IAEO,YAAY,CAAC,IAAsB,EAAE,kBAA2B;;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,oCAAoC,CAAC,6BAA6B,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,IAAA,gBAAU,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAChC,CAAC;aAAM,IAAI,IAAA,oBAAY,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,MAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,IAAI,oCAAoC,CAAC,gDAAgD,CAAC,CAAC;YACrG,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,IAAI,kBAAkB,EAAE,CAAC;gBACrB,oGAAoG;gBACpG,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACJ,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1F,CAAC;QACL,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,IAAoB,EAAE,kBAA2B;QAChE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,oCAAoC,CAAC,2BAA2B,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACxC,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAElD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,oCAAoC,CAAC,8CAA8C,CAAC,CAAC;QACnG,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,oCAAoC,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAC9D,CAAC;IAED,uCAAuC;IAEvC,mCAAmC;IAG3B,KAAK;QACT,OAAO,MAAM,CAAC;IAClB,CAAC;IAGO,IAAI;QACR,OAAO,cAAc,CAAC;IAC1B,CAAC;IAGO,OAAO,CAAC,IAAkB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,MAAc,CAAC;QACnB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,KAAK,eAAe,CAAC;QACtC,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,GAAG,IAAI,KAAK,eAAe,GAAG,GAAG,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,IAAI,KAAK,eAAe,GAAG,OAAO,KAAK,eAAe,GAAG,GAAG,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGO,SAAS,CAAC,IAAkB,EAAE,kBAA2B;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,IAAA,kBAAU,EAAU,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAC9D,IAAI,MAAc,CAAC;QACnB,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,4BAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC;QAC/G,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,GAAG,KAAK,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGO,WAAW,CAAC,IAAkB,EAAE,kBAA2B;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,KAAK,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC;QACtF,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGO,SAAS,CAAC,IAAkB,EAAE,kBAA2B;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,KAAK,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC;QACpF,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGO,MAAM,CAAC,IAAkB;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,KAAK,GAAG,CAAC;IACnE,CAAC;IAGO,MAAM,CAAC,IAAkB;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,gCAAgC,KAAK,WAAW,CAAC;IAC5D,CAAC;IAGO,SAAS,CAAC,IAAkB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,mDAAmD,KAAK,WAAW,CAAC;IAC/E,CAAC;IAGO,IAAI,CAAC,IAAkB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,8BAA8B,KAAK,WAAW,CAAC;IAC1D,CAAC;IAGO,IAAI,CAAC,IAAkB,EAAE,kBAA2B;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,KAAK,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC;QACpF,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGO,SAAS,CAAC,IAAkB,EAAE,kBAA2B;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,KAAK,mBAAmB,CAAC;QAC3G,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGO,QAAQ,CAAC,IAAkB,EAAE,kBAA2B;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,oBAAoB,KAAK,mBAAmB,CAAC;QAC1G,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAGO,QAAQ,CAAC,IAAkB;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,KAAK,iBAAiB,CAAC;QACvD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEO,aAAa,CAAC,IAAY;QAC9B,OAAO,IAAI,IAAI,YAAY,CAAC;IAChC,CAAC;IAED,aAAa;IAEL,SAAS,CAAC,IAAmB;;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,oCAAoC,CAAC,0BAA0B,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,IAAA,iBAAW,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,IAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,EAAE,CAAC;gBAC5B,qEAAqE;gBACrE,wEAAwE;gBACxE,aAAa;gBACb,OAAO,qBAAqB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,qBAAqB;oBACtC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;oBAClE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B,CAAC;QACL,CAAC;IACL,CAAC;IAEO,IAAI;QACR,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,IAAe,EAAE,kBAA2B;QACtD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAChG,CAAC;IAEO,OAAO,CAAC,IAAiB;QAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAa,EAAE,CAAC;YAC/B,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,IAAe,EAAE,kBAA2B;QACtD,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC;IACpF,CAAC;IAEO,WAAW,CAAC,IAAgB;;QAChC,OAAO,IAAA,iBAAW,EAAC,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAEO,MAAM,CAAC,IAAgB,EAAE,kBAA2B;QACxD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACzD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,6DAA6D;YAC7D,IAAI,GAAG,IAAI,IAAI,eAAe,CAAC;YAC/B,KAAK,GAAG,IAAI,KAAK,eAAe,CAAC;QACrC,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC;QAEvD,OAAO,IAAA,kBAAK,EAAC,IAAI,CAAC,QAAQ,CAAC;aACtB,IAAI,CACD,IAAI,EACJ,GAAG,EAAE,CACD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAC7D,IAAI,CAAC,IAAI,EACT,kBAAkB,CACrB,aAAa,CACrB;aACA,IAAI,CAAC,cAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE;;YAC5B,IAAI,IAAA,gBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAA,gBAAU,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,uDAAuD;gBACvD,MAAM,KAAK,GAAG,IAAA,gBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7D,MAAM,KAAK,GAAG,MAAA,KAAK,CAAC,aAAa,0CAAE,IAAiB,CAAC;gBACrD,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,oCAAoC,CAC1C,UAAU,KAAK,CAAC,IAAI,6BAA6B,CACpD,CAAC;gBACN,CAAC;gBACD,IAAI,MAAM,GAAG,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;kBACjE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5F,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC1B,CAAC;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,OAAO,QAAQ,CAAC;YACpB,CAAC;QACL,CAAC,CAAC;aACD,IAAI,CAAC,cAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;aAC5F,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAEO,mBAAmB,CAAC,IAAgB,EAAE,QAAyB,EAAE,kBAA2B;QAChG,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAC9D,MAAM,gBAAgB,GAAG,IAAI,+BAA+B,iCACrD,IAAI,CAAC,OAAO,KACf,WAAW,EAAE,KAAK,EAClB,qBAAqB,EAAE,OAAO,EAC9B,eAAe,EAAE,OAAO,IAC1B,CAAC;QACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAE7E,OAAO,IAAA,kBAAK,EAAC,QAAQ,CAAC;aACjB,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,OAAO,2BAA2B,SAAS,IAAI,CAAC;aACvE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,OAAO,4BAA4B,SAAS,IAAI,CAAC;aACxE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,OAAO,2BAA2B,SAAS,IAAI,CAAC;aACtE,UAAU,EAAE,CAAC;IACtB,CAAC;CACJ;AA9TD,0EA8TC;AAxNW;IADP,IAAI,CAAC,MAAM,CAAC;4DAGZ;AAGO;IADP,IAAI,CAAC,KAAK,CAAC;2DAGX;AAGO;IADP,IAAI,CAAC,QAAQ,CAAC;8DAcd;AAGO;IADP,IAAI,CAAC,UAAU,CAAC;gEAWhB;AAGO;IADP,IAAI,CAAC,YAAY,CAAC;kEAKlB;AAGO;IADP,IAAI,CAAC,UAAU,CAAC;gEAKhB;AAGO;IADP,IAAI,CAAC,OAAO,CAAC;6DAKb;AAGO;IADP,IAAI,CAAC,OAAO,CAAC;6DAIb;AAGO;IADP,IAAI,CAAC,UAAU,CAAC;gEAIhB;AAGO;IADP,IAAI,CAAC,KAAK,CAAC;2DAIX;AAGO;IADP,IAAI,CAAC,KAAK,CAAC;2DAKX;AAGO;IADP,IAAI,CAAC,UAAU,CAAC;gEAKhB;AAGO;IADP,IAAI,CAAC,SAAS,CAAC;+DAKf;AAGO;IADP,IAAI,CAAC,SAAS,CAAC;+DAKf"}
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): DataModelFieldAttribute | DataModelAttribute | undefined;
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: PluginOptions, name: string, pluginName: string): T;
43
- export declare function parseOptionAsStrings(options: PluginOptions, optionaName: string, pluginName: string): string[] | undefined;
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[];