zenstack 1.0.0-beta.2 → 1.0.0-beta.4
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 +12 -4
- package/cli/plugin-runner.d.ts +2 -1
- package/cli/plugin-runner.js +88 -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/validator/function-decl-validator.d.ts +9 -0
- package/language-server/validator/function-decl-validator.js +15 -0
- package/language-server/validator/function-decl-validator.js.map +1 -0
- package/language-server/validator/function-invocation-validator.js +31 -5
- package/language-server/validator/function-invocation-validator.js.map +1 -1
- package/language-server/validator/utils.d.ts +3 -3
- 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 +36 -0
- package/language-server/zmodel-linker.js.map +1 -1
- package/package.json +8 -7
- package/plugins/access-policy/expression-writer.js +33 -12
- package/plugins/access-policy/expression-writer.js.map +1 -1
- package/plugins/access-policy/policy-guard-generator.js +33 -22
- package/plugins/access-policy/policy-guard-generator.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/schema-generator.js +8 -1
- package/plugins/prisma/schema-generator.js.map +1 -1
- package/plugins/zod/generator.js +115 -8
- package/plugins/zod/generator.js.map +1 -1
- package/plugins/zod/transformer.d.ts +2 -4
- package/plugins/zod/transformer.js +34 -60
- package/plugins/zod/transformer.js.map +1 -1
- package/plugins/zod/types.d.ts +2 -0
- package/plugins/zod/utils/schema-gen.d.ts +3 -0
- package/plugins/zod/utils/schema-gen.js +176 -0
- package/plugins/zod/utils/schema-gen.js.map +1 -0
- package/res/stdlib.zmodel +102 -29
- package/utils/ast-utils.d.ts +1 -14
- package/utils/ast-utils.js +1 -71
- package/utils/ast-utils.js.map +1 -1
- package/utils/typescript-expression-transformer.d.ts +53 -0
- package/utils/typescript-expression-transformer.js +295 -0
- package/utils/typescript-expression-transformer.js.map +1 -0
- 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/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
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<a href="https://zenstack.dev">
|
|
3
|
-
<
|
|
4
|
-
>
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/zenstackhq/zenstack-docs/main/static/img/logo-dark.png">
|
|
5
|
+
<img src="https://raw.githubusercontent.com/zenstackhq/zenstack-docs/main/static/img/logo.png" height="128">
|
|
6
|
+
</picture>
|
|
5
7
|
</a>
|
|
6
|
-
<
|
|
8
|
+
<h1>ZenStack</h1>
|
|
7
9
|
<a href="https://www.npmjs.com/package/zenstack">
|
|
8
10
|
<img src="https://img.shields.io/npm/v/zenstack">
|
|
9
11
|
</a>
|
|
@@ -27,6 +29,8 @@ Our goal is to let you save time writing boilerplate code and focus on building
|
|
|
27
29
|
|
|
28
30
|
## How it works
|
|
29
31
|
|
|
32
|
+
> Read full documentation at 👉🏻 [zenstack.dev](https://zenstack.dev).
|
|
33
|
+
|
|
30
34
|
ZenStack incrementally extends Prisma's power with the following four layers:
|
|
31
35
|
|
|
32
36
|
### 1. ZModel - an extended Prisma schema language
|
|
@@ -179,7 +183,11 @@ Check out the [Collaborative Todo App](https://zenstack-todo.vercel.app/) for a
|
|
|
179
183
|
|
|
180
184
|
## Community
|
|
181
185
|
|
|
182
|
-
Join our [discord server](https://
|
|
186
|
+
Join our [discord server](https://discord.gg/Ykhr738dUe) for chat and updates!
|
|
187
|
+
|
|
188
|
+
## Contributing
|
|
189
|
+
|
|
190
|
+
If you like ZenStack, join us to make it a better tool! Please use the [Contributing Guide](CONTRIBUTING.md) for details on how to get started, and don't hesitate to join [Discord](https://discord.gg/Ykhr738dUe) to share your thoughts.
|
|
183
191
|
|
|
184
192
|
## License
|
|
185
193
|
|
package/cli/plugin-runner.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Context } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
* ZenStack
|
|
3
|
+
* ZenStack plugin runner
|
|
4
4
|
*/
|
|
5
5
|
export declare class PluginRunner {
|
|
6
6
|
/**
|
|
@@ -8,6 +8,7 @@ export declare class PluginRunner {
|
|
|
8
8
|
*/
|
|
9
9
|
run(context: Context): Promise<void>;
|
|
10
10
|
private getPluginName;
|
|
11
|
+
private getPluginDependencies;
|
|
11
12
|
private getPluginProvider;
|
|
12
13
|
private runPlugin;
|
|
13
14
|
private getPluginModulePath;
|
package/cli/plugin-runner.js
CHANGED
|
@@ -20,11 +20,12 @@ const colors_1 = __importDefault(require("colors"));
|
|
|
20
20
|
const fs_1 = __importDefault(require("fs"));
|
|
21
21
|
const ora_1 = __importDefault(require("ora"));
|
|
22
22
|
const path_1 = __importDefault(require("path"));
|
|
23
|
+
const plugin_utils_1 = require("../plugins/plugin-utils");
|
|
23
24
|
const telemetry_1 = __importDefault(require("../telemetry"));
|
|
24
25
|
const version_utils_1 = require("../utils/version-utils");
|
|
25
26
|
const config_1 = require("./config");
|
|
26
27
|
/**
|
|
27
|
-
* ZenStack
|
|
28
|
+
* ZenStack plugin runner
|
|
28
29
|
*/
|
|
29
30
|
class PluginRunner {
|
|
30
31
|
/**
|
|
@@ -34,63 +35,99 @@ class PluginRunner {
|
|
|
34
35
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
36
|
const version = (0, version_utils_1.getVersion)();
|
|
36
37
|
console.log(colors_1.default.bold(`⌛️ ZenStack CLI v${version}, running plugins`));
|
|
38
|
+
(0, plugin_utils_1.ensureDefaultOutputFolder)();
|
|
37
39
|
const plugins = [];
|
|
38
40
|
const pluginDecls = context.schema.declarations.filter((d) => (0, ast_1.isPlugin)(d));
|
|
39
|
-
const prereqPlugins = ['@core/prisma', '@core/model-meta', '@core/access-policy'];
|
|
40
|
-
const allPluginProviders = prereqPlugins.concat(pluginDecls
|
|
41
|
-
.map((p) => this.getPluginProvider(p))
|
|
42
|
-
.filter((p) => !!p && !prereqPlugins.includes(p)));
|
|
43
41
|
let prismaOutput = (0, sdk_1.resolvePath)('./prisma/schema.prisma', { schemaPath: context.schemaPath, name: '' });
|
|
44
|
-
for (const
|
|
45
|
-
const
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
name: pluginName,
|
|
73
|
-
provider: pluginProvider,
|
|
74
|
-
run: pluginModule.default,
|
|
75
|
-
options,
|
|
76
|
-
});
|
|
77
|
-
if (pluginProvider === '@core/prisma' && typeof options.output === 'string') {
|
|
78
|
-
// record custom prisma output path
|
|
79
|
-
prismaOutput = (0, sdk_1.resolvePath)(options.output, options);
|
|
42
|
+
for (const pluginDecl of pluginDecls) {
|
|
43
|
+
const pluginProvider = this.getPluginProvider(pluginDecl);
|
|
44
|
+
if (!pluginProvider) {
|
|
45
|
+
console.error(`Plugin ${pluginDecl.name} has invalid provider option`);
|
|
46
|
+
throw new sdk_1.PluginError('', `Plugin ${pluginDecl.name} has invalid provider option`);
|
|
47
|
+
}
|
|
48
|
+
const pluginModulePath = this.getPluginModulePath(pluginProvider);
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
let pluginModule;
|
|
51
|
+
try {
|
|
52
|
+
pluginModule = require(pluginModulePath);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.error(`Unable to load plugin module ${pluginProvider}: ${pluginModulePath}, ${err}`);
|
|
56
|
+
throw new sdk_1.PluginError('', `Unable to load plugin module ${pluginProvider}`);
|
|
57
|
+
}
|
|
58
|
+
if (!pluginModule.default || typeof pluginModule.default !== 'function') {
|
|
59
|
+
console.error(`Plugin provider ${pluginProvider} is missing a default function export`);
|
|
60
|
+
throw new sdk_1.PluginError('', `Plugin provider ${pluginProvider} is missing a default function export`);
|
|
61
|
+
}
|
|
62
|
+
const dependencies = this.getPluginDependencies(pluginModule);
|
|
63
|
+
const pluginName = this.getPluginName(pluginModule, pluginProvider);
|
|
64
|
+
const options = { schemaPath: context.schemaPath, name: pluginName };
|
|
65
|
+
pluginDecl.fields.forEach((f) => {
|
|
66
|
+
var _a;
|
|
67
|
+
const value = (_a = (0, sdk_1.getLiteral)(f.value)) !== null && _a !== void 0 ? _a : (0, sdk_1.getLiteralArray)(f.value);
|
|
68
|
+
if (value === undefined) {
|
|
69
|
+
throw new sdk_1.PluginError(pluginName, `Invalid option value for ${f.name}`);
|
|
80
70
|
}
|
|
71
|
+
options[f.name] = value;
|
|
72
|
+
});
|
|
73
|
+
plugins.push({
|
|
74
|
+
name: pluginName,
|
|
75
|
+
provider: pluginProvider,
|
|
76
|
+
dependencies,
|
|
77
|
+
options,
|
|
78
|
+
run: pluginModule.default,
|
|
79
|
+
module: pluginModule,
|
|
80
|
+
});
|
|
81
|
+
if (pluginProvider === '@core/prisma' && typeof options.output === 'string') {
|
|
82
|
+
// record custom prisma output path
|
|
83
|
+
prismaOutput = (0, sdk_1.resolvePath)(options.output, options);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// make sure prerequisites are included
|
|
87
|
+
const corePlugins = ['@core/prisma', '@core/model-meta', '@core/access-policy'];
|
|
88
|
+
if ((0, sdk_1.getDataModels)(context.schema).some((model) => (0, sdk_1.hasValidationAttributes)(model))) {
|
|
89
|
+
// '@core/zod' plugin is auto-enabled if there're validation rules
|
|
90
|
+
corePlugins.push('@core/zod');
|
|
91
|
+
}
|
|
92
|
+
// core dependencies introduced by dependencies
|
|
93
|
+
plugins
|
|
94
|
+
.flatMap((p) => p.dependencies)
|
|
95
|
+
.forEach((dep) => {
|
|
96
|
+
if (dep.startsWith('@core/') && !corePlugins.includes(dep)) {
|
|
97
|
+
corePlugins.push(dep);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
for (const corePlugin of corePlugins.reverse()) {
|
|
101
|
+
const existingIdx = plugins.findIndex((p) => p.provider === corePlugin);
|
|
102
|
+
if (existingIdx >= 0) {
|
|
103
|
+
// shift the plugin to the front
|
|
104
|
+
const existing = plugins[existingIdx];
|
|
105
|
+
plugins.splice(existingIdx, 1);
|
|
106
|
+
plugins.unshift(existing);
|
|
81
107
|
}
|
|
82
108
|
else {
|
|
83
|
-
// synthesize a plugin
|
|
84
|
-
const pluginModule = require(this.getPluginModulePath(
|
|
85
|
-
const pluginName = this.getPluginName(pluginModule,
|
|
86
|
-
plugins.
|
|
109
|
+
// synthesize a plugin and insert front
|
|
110
|
+
const pluginModule = require(this.getPluginModulePath(corePlugin));
|
|
111
|
+
const pluginName = this.getPluginName(pluginModule, corePlugin);
|
|
112
|
+
plugins.unshift({
|
|
87
113
|
name: pluginName,
|
|
88
|
-
provider:
|
|
89
|
-
|
|
114
|
+
provider: corePlugin,
|
|
115
|
+
dependencies: [],
|
|
90
116
|
options: { schemaPath: context.schemaPath, name: pluginName },
|
|
117
|
+
run: pluginModule.default,
|
|
118
|
+
module: pluginModule,
|
|
91
119
|
});
|
|
92
120
|
}
|
|
93
121
|
}
|
|
122
|
+
// check dependencies
|
|
123
|
+
for (const plugin of plugins) {
|
|
124
|
+
for (const dep of plugin.dependencies) {
|
|
125
|
+
if (!plugins.find((p) => p.provider === dep)) {
|
|
126
|
+
console.error(`Plugin ${plugin.provider} depends on "${dep}" but it's not declared`);
|
|
127
|
+
throw new sdk_1.PluginError(plugin.name, `Plugin ${plugin.provider} depends on "${dep}" but it's not declared`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
94
131
|
const warnings = [];
|
|
95
132
|
let dmmf = undefined;
|
|
96
133
|
for (const { name, provider, run, options } of plugins) {
|
|
@@ -104,12 +141,16 @@ class PluginRunner {
|
|
|
104
141
|
}
|
|
105
142
|
console.log(colors_1.default.green(colors_1.default.bold('\n👻 All plugins completed successfully!')));
|
|
106
143
|
warnings.forEach((w) => console.warn(colors_1.default.yellow(w)));
|
|
144
|
+
console.log(`Don't forget to restart your dev server to let the changes take effect.`);
|
|
107
145
|
});
|
|
108
146
|
}
|
|
109
147
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
110
148
|
getPluginName(pluginModule, pluginProvider) {
|
|
111
149
|
return typeof pluginModule.name === 'string' ? pluginModule.name : pluginProvider;
|
|
112
150
|
}
|
|
151
|
+
getPluginDependencies(pluginModule) {
|
|
152
|
+
return Array.isArray(pluginModule.dependencies) ? pluginModule.dependencies : [];
|
|
153
|
+
}
|
|
113
154
|
getPluginProvider(plugin) {
|
|
114
155
|
const providerField = plugin.fields.find((f) => f.name === 'provider');
|
|
115
156
|
return (0, sdk_1.getLiteral)(providerField === null || providerField === void 0 ? void 0 : providerField.value);
|
package/cli/plugin-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-runner.js","sourceRoot":"","sources":["../../src/cli/plugin-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"plugin-runner.js","sourceRoot":"","sources":["../../src/cli/plugin-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,iDAA4C;AAC5C,kDAA4D;AAC5D,yCASyB;AACzB,oDAA4B;AAC5B,4CAAoB;AACpB,8CAAsB;AACtB,gDAAwB;AACxB,0DAAoE;AACpE,6DAAqC;AAErC,0DAAoD;AACpD,qCAAkC;AAWlC;;GAEG;AACH,MAAa,YAAY;IACrB;;OAEG;IACG,GAAG,CAAC,OAAgB;;YACtB,MAAM,OAAO,GAAG,IAAA,0BAAU,GAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,IAAI,CAAC,oBAAoB,OAAO,mBAAmB,CAAC,CAAC,CAAC;YAEzE,IAAA,wCAAyB,GAAE,CAAC;YAE5B,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,IAAA,cAAQ,EAAC,CAAC,CAAC,CAAC,CAAC;YAExF,IAAI,YAAY,GAAG,IAAA,iBAAW,EAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAEvG,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;gBAClC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC1D,IAAI,CAAC,cAAc,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,IAAI,8BAA8B,CAAC,CAAC;oBACvE,MAAM,IAAI,iBAAW,CAAC,EAAE,EAAE,UAAU,UAAU,CAAC,IAAI,8BAA8B,CAAC,CAAC;iBACtF;gBACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;gBAClE,8DAA8D;gBAC9D,IAAI,YAAiB,CAAC;gBACtB,IAAI;oBACA,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;iBAC5C;gBAAC,OAAO,GAAG,EAAE;oBACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,cAAc,KAAK,gBAAgB,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC7F,MAAM,IAAI,iBAAW,CAAC,EAAE,EAAE,gCAAgC,cAAc,EAAE,CAAC,CAAC;iBAC/E;gBAED,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE;oBACrE,OAAO,CAAC,KAAK,CAAC,mBAAmB,cAAc,uCAAuC,CAAC,CAAC;oBACxF,MAAM,IAAI,iBAAW,CAAC,EAAE,EAAE,mBAAmB,cAAc,uCAAuC,CAAC,CAAC;iBACvG;gBAED,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBACpE,MAAM,OAAO,GAAkB,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBAEpF,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;oBAC5B,MAAM,KAAK,GAAG,MAAA,IAAA,gBAAU,EAAC,CAAC,CAAC,KAAK,CAAC,mCAAI,IAAA,qBAAe,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC9D,IAAI,KAAK,KAAK,SAAS,EAAE;wBACrB,MAAM,IAAI,iBAAW,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;qBAC3E;oBACD,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,cAAc;oBACxB,YAAY;oBACZ,OAAO;oBACP,GAAG,EAAE,YAAY,CAAC,OAAyB;oBAC3C,MAAM,EAAE,YAAY;iBACvB,CAAC,CAAC;gBAEH,IAAI,cAAc,KAAK,cAAc,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;oBACzE,mCAAmC;oBACnC,YAAY,GAAG,IAAA,iBAAW,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;iBACvD;aACJ;YAED,uCAAuC;YACvC,MAAM,WAAW,GAAG,CAAC,cAAc,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;YAEhF,IAAI,IAAA,mBAAa,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,6BAAuB,EAAC,KAAK,CAAC,CAAC,EAAE;gBAC/E,kEAAkE;gBAClE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACjC;YAED,+CAA+C;YAC/C,OAAO;iBACF,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;iBAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACxD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC,CAAC;YAEP,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE;gBAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;gBACxE,IAAI,WAAW,IAAI,CAAC,EAAE;oBAClB,gCAAgC;oBAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;oBACtC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAC/B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;iBAC7B;qBAAM;oBACH,uCAAuC;oBACvC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;oBACnE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;oBAChE,OAAO,CAAC,OAAO,CAAC;wBACZ,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,UAAU;wBACpB,YAAY,EAAE,EAAE;wBAChB,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;wBAC7D,GAAG,EAAE,YAAY,CAAC,OAAO;wBACzB,MAAM,EAAE,YAAY;qBACvB,CAAC,CAAC;iBACN;aACJ;YAED,qBAAqB;YACrB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE;oBACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE;wBAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,QAAQ,gBAAgB,GAAG,yBAAyB,CAAC,CAAC;wBACrF,MAAM,IAAI,iBAAW,CACjB,MAAM,CAAC,IAAI,EACX,UAAU,MAAM,CAAC,QAAQ,gBAAgB,GAAG,yBAAyB,CACxE,CAAC;qBACL;iBACJ;aACJ;YAED,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,IAAI,IAAI,GAA8B,SAAS,CAAC;YAChD,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE;gBACpD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAClE,IAAI,QAAQ,KAAK,cAAc,EAAE;oBAC7B,mBAAmB;oBACnB,IAAI,GAAG,MAAM,IAAA,mBAAO,EAAC;wBACjB,SAAS,EAAE,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;qBAClE,CAAC,CAAC;iBACN;aACJ;YAED,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,KAAK,CAAC,gBAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC;YAEnF,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExD,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QAC3F,CAAC;KAAA;IAED,8DAA8D;IACtD,aAAa,CAAC,YAAiB,EAAE,cAAsB;QAC3D,OAAO,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,YAAY,CAAC,IAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IAClG,CAAC;IAEO,qBAAqB,CAAC,YAAiB;QAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,YAAY,CAAC,YAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnG,CAAC;IAEO,iBAAiB,CAAC,MAAc;QACpC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QACvE,OAAO,IAAA,gBAAU,EAAS,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEa,SAAS,CACnB,IAAY,EACZ,GAAmB,EACnB,OAAgB,EAChB,OAAsB,EACtB,IAA+B,EAC/B,QAAkB;;YAElB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,kBAAkB,gBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YACnE,IAAI;gBACA,MAAM,mBAAS,CAAC,SAAS,CACrB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB;oBACI,MAAM,EAAE,IAAI;oBACZ,OAAO;iBACV,EACD,GAAS,EAAE;oBACP,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAM,CAAC,CAAC;oBACxD,IAAI,MAAM,YAAY,OAAO,EAAE;wBAC3B,MAAM,GAAG,MAAM,MAAM,CAAC;qBACzB;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;qBAC5B;gBACL,CAAC,CAAA,CACJ,CAAC;gBACF,OAAO,CAAC,OAAO,EAAE,CAAC;aACrB;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,GAAG,CAAC;aACb;QACL,CAAC;KAAA;IAEO,mBAAmB,CAAC,QAAgB;QACxC,IAAI,gBAAgB,GAAG,QAAQ,CAAC;QAChC,IAAI,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACvC,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;SAC7F;QACD,OAAO,gBAAgB,CAAC;IAC5B,CAAC;CACJ;AA/LD,oCA+LC"}
|
|
@@ -20,7 +20,3 @@ export declare const PLUGIN_MODULE_NAME = "plugin.zmodel";
|
|
|
20
20
|
export declare enum IssueCodes {
|
|
21
21
|
MissingOppositeRelation = "miss-opposite-relation"
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Filter operation function names (mapped to Prisma filter operators)
|
|
25
|
-
*/
|
|
26
|
-
export declare const FILTER_OPERATOR_FUNCTIONS: string[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.IssueCodes = exports.PLUGIN_MODULE_NAME = exports.STD_LIB_MODULE_NAME = exports.SCALAR_TYPES = exports.SUPPORTED_PROVIDERS = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Supported Prisma db providers
|
|
6
6
|
*/
|
|
@@ -24,17 +24,4 @@ var IssueCodes;
|
|
|
24
24
|
(function (IssueCodes) {
|
|
25
25
|
IssueCodes["MissingOppositeRelation"] = "miss-opposite-relation";
|
|
26
26
|
})(IssueCodes = exports.IssueCodes || (exports.IssueCodes = {}));
|
|
27
|
-
/**
|
|
28
|
-
* Filter operation function names (mapped to Prisma filter operators)
|
|
29
|
-
*/
|
|
30
|
-
exports.FILTER_OPERATOR_FUNCTIONS = [
|
|
31
|
-
'contains',
|
|
32
|
-
'search',
|
|
33
|
-
'startsWith',
|
|
34
|
-
'endsWith',
|
|
35
|
-
'has',
|
|
36
|
-
'hasEvery',
|
|
37
|
-
'hasSome',
|
|
38
|
-
'isEmpty',
|
|
39
|
-
];
|
|
40
27
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/language-server/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,mBAAmB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AAEjG;;GAEG;AACU,QAAA,YAAY,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAE5G;;GAEG;AACU,QAAA,mBAAmB,GAAG,eAAe,CAAC;AAEnD;;GAEG;AACU,QAAA,kBAAkB,GAAG,eAAe,CAAC;AAElD;;GAEG;AACH,IAAY,UAEX;AAFD,WAAY,UAAU;IAClB,gEAAkD,CAAA;AACtD,CAAC,EAFW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAErB
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/language-server/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,mBAAmB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AAEjG;;GAEG;AACU,QAAA,YAAY,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAE5G;;GAEG;AACU,QAAA,mBAAmB,GAAG,eAAe,CAAC;AAEnD;;GAEG;AACU,QAAA,kBAAkB,GAAG,eAAe,CAAC;AAElD;;GAEG;AACH,IAAY,UAEX;AAFD,WAAY,UAAU;IAClB,gEAAkD,CAAA;AACtD,CAAC,EAFW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAErB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FunctionDecl } from '@zenstackhq/language/ast';
|
|
2
|
+
import { ValidationAcceptor } from 'langium';
|
|
3
|
+
import { AstValidator } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Validates function declarations.
|
|
6
|
+
*/
|
|
7
|
+
export default class FunctionDeclValidator implements AstValidator<FunctionDecl> {
|
|
8
|
+
validate(funcDecl: FunctionDecl, accept: ValidationAcceptor): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("./utils");
|
|
4
|
+
/**
|
|
5
|
+
* Validates function declarations.
|
|
6
|
+
*/
|
|
7
|
+
class FunctionDeclValidator {
|
|
8
|
+
validate(funcDecl, accept) {
|
|
9
|
+
funcDecl.attributes.forEach((attr) => {
|
|
10
|
+
(0, utils_1.validateAttributeApplication)(attr, accept);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.default = FunctionDeclValidator;
|
|
15
|
+
//# sourceMappingURL=function-decl-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-decl-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/function-decl-validator.ts"],"names":[],"mappings":";;AAGA,mCAAuD;AAEvD;;GAEG;AACH,MAAqB,qBAAqB;IACtC,QAAQ,CAAC,QAAsB,EAAE,MAA0B;QACvD,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjC,IAAA,oCAA4B,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAND,wCAMC"}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const ast_1 = require("@zenstackhq/language/ast");
|
|
4
4
|
const ast_utils_1 = require("../../utils/ast-utils");
|
|
5
|
-
const constants_1 = require("../constants");
|
|
6
5
|
const utils_1 = require("../utils");
|
|
7
6
|
const utils_2 = require("./utils");
|
|
7
|
+
const ts_pattern_1 = require("ts-pattern");
|
|
8
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
8
9
|
/**
|
|
9
10
|
* InvocationExpr validation
|
|
10
11
|
*/
|
|
@@ -21,8 +22,33 @@ class FunctionInvocationValidator {
|
|
|
21
22
|
}
|
|
22
23
|
if ((0, utils_1.isFromStdlib)(funcDecl)) {
|
|
23
24
|
// validate standard library functions
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
// find the containing attribute context for the invocation
|
|
26
|
+
let curr = expr.$container;
|
|
27
|
+
let containerAttribute;
|
|
28
|
+
while (curr) {
|
|
29
|
+
if ((0, ast_1.isDataModelAttribute)(curr) || (0, ast_1.isDataModelFieldAttribute)(curr)) {
|
|
30
|
+
containerAttribute = curr;
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
curr = curr.$container;
|
|
34
|
+
}
|
|
35
|
+
// validate the context allowed for the function
|
|
36
|
+
const exprContext = (0, ts_pattern_1.match)(containerAttribute === null || containerAttribute === void 0 ? void 0 : containerAttribute.decl.$refText)
|
|
37
|
+
.with('@default', () => sdk_1.ExpressionContext.DefaultValue)
|
|
38
|
+
.with(ts_pattern_1.P.union('@@allow', '@@deny'), () => sdk_1.ExpressionContext.AccessPolicy)
|
|
39
|
+
.with('@@validate', () => sdk_1.ExpressionContext.ValidationRule)
|
|
40
|
+
.otherwise(() => undefined);
|
|
41
|
+
// get the context allowed for the function
|
|
42
|
+
const funcAllowedContext = (0, sdk_1.getFunctionExpressionContext)(funcDecl);
|
|
43
|
+
if (exprContext && !funcAllowedContext.includes(exprContext)) {
|
|
44
|
+
accept('error', `function "${funcDecl.name}" is not allowed in the current context: ${exprContext}`, {
|
|
45
|
+
node: expr,
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (funcAllowedContext.includes(sdk_1.ExpressionContext.AccessPolicy) ||
|
|
50
|
+
funcAllowedContext.includes(sdk_1.ExpressionContext.ValidationRule)) {
|
|
51
|
+
// filter operation functions validation
|
|
26
52
|
// first argument must refer to a model field
|
|
27
53
|
const firstArg = (_b = (_a = expr.args) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.value;
|
|
28
54
|
if (firstArg) {
|
|
@@ -36,10 +62,10 @@ class FunctionInvocationValidator {
|
|
|
36
62
|
// literal
|
|
37
63
|
!(0, ast_1.isLiteralExpr)(secondArg) &&
|
|
38
64
|
// enum field
|
|
39
|
-
!(0,
|
|
65
|
+
!(0, sdk_1.isEnumFieldReference)(secondArg) &&
|
|
40
66
|
// array of literal/enum
|
|
41
67
|
!((0, ast_1.isArrayExpr)(secondArg) &&
|
|
42
|
-
secondArg.items.every((item) => (0, ast_1.isLiteralExpr)(item) || (0,
|
|
68
|
+
secondArg.items.every((item) => (0, ast_1.isLiteralExpr)(item) || (0, sdk_1.isEnumFieldReference)(item)))) {
|
|
43
69
|
accept('error', 'second argument must be a literal, an enum, or an array of them', {
|
|
44
70
|
node: secondArg,
|
|
45
71
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-invocation-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/function-invocation-validator.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"function-invocation-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/function-invocation-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AttributeArg, AttributeParam, BuiltinType, DataModelAttribute, DataModelFieldAttribute, Expression, ExpressionType } from '@zenstackhq/language/ast';
|
|
1
|
+
import { AttributeArg, AttributeParam, BuiltinType, DataModelAttribute, DataModelFieldAttribute, Expression, ExpressionType, InternalAttribute } from '@zenstackhq/language/ast';
|
|
2
2
|
import { AstNode, ValidationAcceptor } from 'langium';
|
|
3
3
|
/**
|
|
4
4
|
* Checks if the given declarations have duplicated names
|
|
@@ -21,5 +21,5 @@ export declare function mapBuiltinTypeToExpressionType(type: BuiltinType | 'Any'
|
|
|
21
21
|
/**
|
|
22
22
|
* Determines if the given attribute argument is assignable to the given attribute parameter
|
|
23
23
|
*/
|
|
24
|
-
export declare function assignableToAttributeParam(arg: AttributeArg, param: AttributeParam, attr: DataModelAttribute | DataModelFieldAttribute): boolean;
|
|
25
|
-
export declare function validateAttributeApplication(attr: DataModelAttribute | DataModelFieldAttribute, accept: ValidationAcceptor): boolean | undefined;
|
|
24
|
+
export declare function assignableToAttributeParam(arg: AttributeArg, param: AttributeParam, attr: DataModelAttribute | DataModelFieldAttribute | InternalAttribute): boolean;
|
|
25
|
+
export declare function validateAttributeApplication(attr: DataModelAttribute | DataModelFieldAttribute | InternalAttribute, accept: ValidationAcceptor): boolean | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/language-server/validator/utils.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/language-server/validator/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { Attribute, DataModel, DataSource, Enum, Expression, FunctionDecl, InvocationExpr, Model } from '@zenstackhq/language/ast';
|
|
1
2
|
import { ValidationAcceptor, ValidationRegistry } from 'langium';
|
|
2
|
-
import { Attribute, DataModel, DataSource, Enum, Expression, InvocationExpr, Model } from '@zenstackhq/language/ast';
|
|
3
3
|
import type { ZModelServices } from '../zmodel-module';
|
|
4
4
|
/**
|
|
5
5
|
* Registry for validation checks.
|
|
@@ -21,4 +21,5 @@ export declare class ZModelValidator {
|
|
|
21
21
|
checkAttribute(node: Attribute, accept: ValidationAcceptor): void;
|
|
22
22
|
checkExpression(node: Expression, accept: ValidationAcceptor): void;
|
|
23
23
|
checkFunctionInvocation(node: InvocationExpr, accept: ValidationAcceptor): void;
|
|
24
|
+
checkFunctionDecl(node: FunctionDecl, accept: ValidationAcceptor): void;
|
|
24
25
|
}
|
|
@@ -5,13 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ZModelValidator = exports.ZModelValidationRegistry = void 0;
|
|
7
7
|
const langium_1 = require("langium");
|
|
8
|
-
const schema_validator_1 = __importDefault(require("./schema-validator"));
|
|
9
|
-
const datasource_validator_1 = __importDefault(require("./datasource-validator"));
|
|
10
|
-
const datamodel_validator_1 = __importDefault(require("./datamodel-validator"));
|
|
11
8
|
const attribute_validator_1 = __importDefault(require("./attribute-validator"));
|
|
9
|
+
const datamodel_validator_1 = __importDefault(require("./datamodel-validator"));
|
|
10
|
+
const datasource_validator_1 = __importDefault(require("./datasource-validator"));
|
|
12
11
|
const enum_validator_1 = __importDefault(require("./enum-validator"));
|
|
13
12
|
const expression_validator_1 = __importDefault(require("./expression-validator"));
|
|
13
|
+
const function_decl_validator_1 = __importDefault(require("./function-decl-validator"));
|
|
14
14
|
const function_invocation_validator_1 = __importDefault(require("./function-invocation-validator"));
|
|
15
|
+
const schema_validator_1 = __importDefault(require("./schema-validator"));
|
|
15
16
|
/**
|
|
16
17
|
* Registry for validation checks.
|
|
17
18
|
*/
|
|
@@ -27,6 +28,7 @@ class ZModelValidationRegistry extends langium_1.ValidationRegistry {
|
|
|
27
28
|
Attribute: validator.checkAttribute,
|
|
28
29
|
Expression: validator.checkExpression,
|
|
29
30
|
InvocationExpr: validator.checkFunctionInvocation,
|
|
31
|
+
FunctionDecl: validator.checkFunctionDecl,
|
|
30
32
|
};
|
|
31
33
|
this.register(checks, validator);
|
|
32
34
|
}
|
|
@@ -73,6 +75,9 @@ class ZModelValidator {
|
|
|
73
75
|
checkFunctionInvocation(node, accept) {
|
|
74
76
|
this.shouldCheck(node) && new function_invocation_validator_1.default().validate(node, accept);
|
|
75
77
|
}
|
|
78
|
+
checkFunctionDecl(node, accept) {
|
|
79
|
+
this.shouldCheck(node) && new function_decl_validator_1.default().validate(node, accept);
|
|
80
|
+
}
|
|
76
81
|
}
|
|
77
82
|
exports.ZModelValidator = ZModelValidator;
|
|
78
83
|
//# sourceMappingURL=zmodel-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zmodel-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/zmodel-validator.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"zmodel-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/zmodel-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ export declare class ZModelLinker extends DefaultLinker {
|
|
|
25
25
|
private resolveAttributeArg;
|
|
26
26
|
private findAttrParamForArg;
|
|
27
27
|
private resolveDataModel;
|
|
28
|
+
private resolveDataModelField;
|
|
28
29
|
private resolveDefault;
|
|
29
30
|
private resolveToDeclaredType;
|
|
30
31
|
private resolveToBuiltinTypeOrDecl;
|
|
@@ -98,6 +98,9 @@ class ZModelLinker extends langium_1.DefaultLinker {
|
|
|
98
98
|
case ast_1.DataModel:
|
|
99
99
|
this.resolveDataModel(node, document, extraScopes);
|
|
100
100
|
break;
|
|
101
|
+
case ast_1.DataModelField:
|
|
102
|
+
this.resolveDataModelField(node, document, extraScopes);
|
|
103
|
+
break;
|
|
101
104
|
default:
|
|
102
105
|
this.resolveDefault(node, document, extraScopes);
|
|
103
106
|
break;
|
|
@@ -353,6 +356,39 @@ class ZModelLinker extends langium_1.DefaultLinker {
|
|
|
353
356
|
}
|
|
354
357
|
return this.resolveDefault(node, document, extraScopes);
|
|
355
358
|
}
|
|
359
|
+
resolveDataModelField(node, document, extraScopes) {
|
|
360
|
+
// Field declaration may contain enum references, and enum fields are pushed to the global
|
|
361
|
+
// scope, so if there're enums with fields with the same name, an arbitrary one will be
|
|
362
|
+
// used as resolution target. The correct behavior is to resolve to the enum that's used
|
|
363
|
+
// as the declaration type of the field:
|
|
364
|
+
//
|
|
365
|
+
// enum FirstEnum {
|
|
366
|
+
// E1
|
|
367
|
+
// E2
|
|
368
|
+
// }
|
|
369
|
+
var _a;
|
|
370
|
+
// enum SecondEnum {
|
|
371
|
+
// E1
|
|
372
|
+
// E3
|
|
373
|
+
// E4
|
|
374
|
+
// }
|
|
375
|
+
// model M {
|
|
376
|
+
// id Int @id
|
|
377
|
+
// first SecondEnum @default(E1) <- should resolve to SecondEnum
|
|
378
|
+
// second FirstEnum @default(E1) <- should resolve to FirstEnum
|
|
379
|
+
// }
|
|
380
|
+
//
|
|
381
|
+
// make sure type is resolved first
|
|
382
|
+
this.resolve(node.type, document, extraScopes);
|
|
383
|
+
let scopes = extraScopes;
|
|
384
|
+
// if the field has enum declaration type, resolve the rest with that enum's fields on top of the scopes
|
|
385
|
+
if (((_a = node.type.reference) === null || _a === void 0 ? void 0 : _a.ref) && (0, ast_1.isEnum)(node.type.reference.ref)) {
|
|
386
|
+
const contextEnum = node.type.reference.ref;
|
|
387
|
+
const enumScope = (name) => contextEnum.fields.find((f) => f.name === name);
|
|
388
|
+
scopes = [enumScope, ...scopes];
|
|
389
|
+
}
|
|
390
|
+
this.resolveDefault(node, document, scopes);
|
|
391
|
+
}
|
|
356
392
|
resolveDefault(node, document, extraScopes) {
|
|
357
393
|
for (const [property, value] of Object.entries(node)) {
|
|
358
394
|
if (!property.startsWith('$')) {
|