zenstack 1.0.0 → 1.0.16

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.
Files changed (264) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +126 -1
  3. package/bin/cli +3 -0
  4. package/bin/post-install.js +24 -0
  5. package/cli/cli-error.d.ts +5 -0
  6. package/cli/cli-error.js +10 -0
  7. package/cli/cli-error.js.map +1 -0
  8. package/cli/cli-util.d.ts +18 -0
  9. package/cli/cli-util.js +143 -0
  10. package/cli/cli-util.js.map +1 -0
  11. package/cli/index.d.ts +15 -0
  12. package/cli/index.js +121 -0
  13. package/cli/index.js.map +1 -0
  14. package/cli/plugin-runner.d.ts +14 -0
  15. package/cli/plugin-runner.js +145 -0
  16. package/cli/plugin-runner.js.map +1 -0
  17. package/constants.d.ts +1 -0
  18. package/constants.js +6 -0
  19. package/constants.js.map +1 -0
  20. package/language-server/constants.d.ts +15 -0
  21. package/language-server/constants.js +20 -0
  22. package/language-server/constants.js.map +1 -0
  23. package/language-server/main.d.ts +1 -0
  24. package/language-server/main.js +13 -0
  25. package/language-server/main.js.map +1 -0
  26. package/language-server/types.d.ts +10 -0
  27. package/language-server/types.js +3 -0
  28. package/language-server/types.js.map +1 -0
  29. package/language-server/utils.d.ts +18 -0
  30. package/language-server/utils.js +58 -0
  31. package/language-server/utils.js.map +1 -0
  32. package/language-server/validator/attribute-validator.d.ts +9 -0
  33. package/language-server/validator/attribute-validator.js +11 -0
  34. package/language-server/validator/attribute-validator.js.map +1 -0
  35. package/language-server/validator/datamodel-validator.d.ts +15 -0
  36. package/language-server/validator/datamodel-validator.js +278 -0
  37. package/language-server/validator/datamodel-validator.js.map +1 -0
  38. package/language-server/validator/datasource-validator.d.ts +12 -0
  39. package/language-server/validator/datasource-validator.js +66 -0
  40. package/language-server/validator/datasource-validator.js.map +1 -0
  41. package/language-server/validator/enum-validator.d.ts +11 -0
  42. package/language-server/validator/enum-validator.js +28 -0
  43. package/language-server/validator/enum-validator.js.map +1 -0
  44. package/language-server/validator/expression-validator.d.ts +10 -0
  45. package/language-server/validator/expression-validator.js +30 -0
  46. package/language-server/validator/expression-validator.js.map +1 -0
  47. package/language-server/validator/schema-validator.d.ts +10 -0
  48. package/language-server/validator/schema-validator.js +28 -0
  49. package/language-server/validator/schema-validator.js.map +1 -0
  50. package/language-server/validator/utils.d.ts +25 -0
  51. package/language-server/validator/utils.js +257 -0
  52. package/language-server/validator/utils.js.map +1 -0
  53. package/language-server/validator/zmodel-validator.d.ts +21 -0
  54. package/language-server/validator/zmodel-validator.js +69 -0
  55. package/language-server/validator/zmodel-validator.js.map +1 -0
  56. package/language-server/zmodel-code-action.d.ts +14 -0
  57. package/language-server/zmodel-code-action.js +93 -0
  58. package/language-server/zmodel-code-action.js.map +1 -0
  59. package/language-server/zmodel-formatter.d.ts +9 -0
  60. package/language-server/zmodel-formatter.js +76 -0
  61. package/language-server/zmodel-formatter.js.map +1 -0
  62. package/language-server/zmodel-linker.d.ts +29 -0
  63. package/language-server/zmodel-linker.js +366 -0
  64. package/language-server/zmodel-linker.js.map +1 -0
  65. package/language-server/zmodel-module.d.ts +41 -0
  66. package/language-server/zmodel-module.js +80 -0
  67. package/language-server/zmodel-module.js.map +1 -0
  68. package/language-server/zmodel-scope.d.ts +10 -0
  69. package/language-server/zmodel-scope.js +44 -0
  70. package/language-server/zmodel-scope.js.map +1 -0
  71. package/language-server/zmodel-workspace-manager.d.ts +8 -0
  72. package/language-server/zmodel-workspace-manager.js +37 -0
  73. package/language-server/zmodel-workspace-manager.js.map +1 -0
  74. package/package.json +133 -8
  75. package/plugins/access-policy/expression-writer.d.ts +39 -0
  76. package/plugins/access-policy/expression-writer.js +361 -0
  77. package/plugins/access-policy/expression-writer.js.map +1 -0
  78. package/plugins/access-policy/index.d.ts +4 -0
  79. package/plugins/access-policy/index.js +24 -0
  80. package/plugins/access-policy/index.js.map +1 -0
  81. package/plugins/access-policy/policy-guard-generator.d.ts +15 -0
  82. package/plugins/access-policy/policy-guard-generator.js +349 -0
  83. package/plugins/access-policy/policy-guard-generator.js.map +1 -0
  84. package/plugins/access-policy/typescript-expression-transformer.d.ts +26 -0
  85. package/plugins/access-policy/typescript-expression-transformer.js +111 -0
  86. package/plugins/access-policy/typescript-expression-transformer.js.map +1 -0
  87. package/plugins/access-policy/utils.d.ts +5 -0
  88. package/plugins/access-policy/utils.js +14 -0
  89. package/plugins/access-policy/utils.js.map +1 -0
  90. package/plugins/access-policy/zod-schema-generator.d.ts +12 -0
  91. package/plugins/access-policy/zod-schema-generator.js +158 -0
  92. package/plugins/access-policy/zod-schema-generator.js.map +1 -0
  93. package/plugins/model-meta/index.d.ts +4 -0
  94. package/plugins/model-meta/index.js +168 -0
  95. package/plugins/model-meta/index.js.map +1 -0
  96. package/plugins/plugin-utils.d.ts +16 -0
  97. package/plugins/plugin-utils.js +54 -0
  98. package/plugins/plugin-utils.js.map +1 -0
  99. package/plugins/prisma/indent-string.d.ts +4 -0
  100. package/plugins/prisma/indent-string.js +12 -0
  101. package/plugins/prisma/indent-string.js.map +1 -0
  102. package/plugins/prisma/index.d.ts +4 -0
  103. package/plugins/prisma/index.js +24 -0
  104. package/plugins/prisma/index.js.map +1 -0
  105. package/plugins/prisma/prisma-builder.d.ts +152 -0
  106. package/plugins/prisma/prisma-builder.js +363 -0
  107. package/plugins/prisma/prisma-builder.js.map +1 -0
  108. package/plugins/prisma/schema-generator.d.ts +25 -0
  109. package/plugins/prisma/schema-generator.js +292 -0
  110. package/plugins/prisma/schema-generator.js.map +1 -0
  111. package/plugins/prisma/zmodel-code-generator.d.ts +28 -0
  112. package/plugins/prisma/zmodel-code-generator.js +114 -0
  113. package/plugins/prisma/zmodel-code-generator.js.map +1 -0
  114. package/res/prism-zmodel.js +20 -0
  115. package/res/starter.zmodel +51 -0
  116. package/res/stdlib.zmodel +346 -0
  117. package/telemetry.d.ts +20 -0
  118. package/telemetry.js +119 -0
  119. package/telemetry.js.map +1 -0
  120. package/types.d.ts +12 -0
  121. package/types.js +3 -0
  122. package/types.js.map +1 -0
  123. package/utils/ast-utils.d.ts +16 -0
  124. package/utils/ast-utils.js +85 -0
  125. package/utils/ast-utils.js.map +1 -0
  126. package/utils/exec-utils.d.ts +6 -0
  127. package/utils/exec-utils.js +13 -0
  128. package/utils/exec-utils.js.map +1 -0
  129. package/utils/pkg-utils.d.ts +3 -0
  130. package/utils/pkg-utils.js +46 -0
  131. package/utils/pkg-utils.js.map +1 -0
  132. package/utils/version-utils.d.ts +1 -0
  133. package/utils/version-utils.js +14 -0
  134. package/utils/version-utils.js.map +1 -0
  135. package/.vscode/extensions.json +0 -7
  136. package/.vscode/launch.json +0 -49
  137. package/.vscode/settings.json +0 -4
  138. package/packages/internal/jest.config.ts +0 -32
  139. package/packages/internal/package.json +0 -42
  140. package/packages/internal/src/constants.ts +0 -1
  141. package/packages/internal/src/handler/data/guard-utils.ts +0 -7
  142. package/packages/internal/src/handler/data/handler.ts +0 -415
  143. package/packages/internal/src/handler/data/query-processor.ts +0 -504
  144. package/packages/internal/src/handler/index.ts +0 -1
  145. package/packages/internal/src/handler/types.ts +0 -20
  146. package/packages/internal/src/index.ts +0 -3
  147. package/packages/internal/src/request-handler.ts +0 -27
  148. package/packages/internal/src/request.ts +0 -101
  149. package/packages/internal/src/types.ts +0 -40
  150. package/packages/internal/tests/query-processor.test.ts +0 -172
  151. package/packages/internal/tsconfig.json +0 -21
  152. package/packages/runtime/auth.d.ts +0 -1
  153. package/packages/runtime/auth.js +0 -3
  154. package/packages/runtime/hooks.d.ts +0 -10
  155. package/packages/runtime/hooks.js +0 -3
  156. package/packages/runtime/index.d.ts +0 -3
  157. package/packages/runtime/index.js +0 -1
  158. package/packages/runtime/package-lock.json +0 -512
  159. package/packages/runtime/package.json +0 -16
  160. package/packages/runtime/server.d.ts +0 -1
  161. package/packages/runtime/server.js +0 -3
  162. package/packages/runtime/types.d.ts +0 -1
  163. package/packages/runtime/types.js +0 -3
  164. package/packages/schema/.eslintrc.json +0 -13
  165. package/packages/schema/.vscodeignore +0 -4
  166. package/packages/schema/asset/logo-dark.png +0 -0
  167. package/packages/schema/asset/logo-light.png +0 -0
  168. package/packages/schema/bin/cli +0 -3
  169. package/packages/schema/jest.config.ts +0 -32
  170. package/packages/schema/langium-config.json +0 -14
  171. package/packages/schema/langium-quickstart.md +0 -41
  172. package/packages/schema/language-configuration.json +0 -30
  173. package/packages/schema/package.json +0 -96
  174. package/packages/schema/src/cli/cli-util.ts +0 -80
  175. package/packages/schema/src/cli/index.ts +0 -64
  176. package/packages/schema/src/extension.ts +0 -76
  177. package/packages/schema/src/generator/constants.ts +0 -5
  178. package/packages/schema/src/generator/index.ts +0 -92
  179. package/packages/schema/src/generator/next-auth/index.ts +0 -197
  180. package/packages/schema/src/generator/package.template.json +0 -9
  181. package/packages/schema/src/generator/prisma/expression-writer.ts +0 -352
  182. package/packages/schema/src/generator/prisma/index.ts +0 -32
  183. package/packages/schema/src/generator/prisma/plain-expression-builder.ts +0 -91
  184. package/packages/schema/src/generator/prisma/prisma-builder.ts +0 -366
  185. package/packages/schema/src/generator/prisma/query-gard-generator.ts +0 -208
  186. package/packages/schema/src/generator/prisma/schema-generator.ts +0 -300
  187. package/packages/schema/src/generator/react-hooks/index.ts +0 -181
  188. package/packages/schema/src/generator/service/index.ts +0 -107
  189. package/packages/schema/src/generator/tsconfig.template.json +0 -17
  190. package/packages/schema/src/generator/types.ts +0 -17
  191. package/packages/schema/src/generator/utils.ts +0 -9
  192. package/packages/schema/src/language-server/generated/ast.ts +0 -603
  193. package/packages/schema/src/language-server/generated/grammar.ts +0 -2190
  194. package/packages/schema/src/language-server/generated/module.ts +0 -24
  195. package/packages/schema/src/language-server/main.ts +0 -12
  196. package/packages/schema/src/language-server/stdlib.zmodel +0 -22
  197. package/packages/schema/src/language-server/types.ts +0 -9
  198. package/packages/schema/src/language-server/zmodel-index.ts +0 -33
  199. package/packages/schema/src/language-server/zmodel-linker.ts +0 -409
  200. package/packages/schema/src/language-server/zmodel-module.ts +0 -90
  201. package/packages/schema/src/language-server/zmodel-scope.ts +0 -21
  202. package/packages/schema/src/language-server/zmodel-validator.ts +0 -35
  203. package/packages/schema/src/language-server/zmodel.langium +0 -186
  204. package/packages/schema/src/utils/exec-utils.ts +0 -5
  205. package/packages/schema/src/utils/indent-string.ts +0 -6
  206. package/packages/schema/syntaxes/zmodel.json +0 -57
  207. package/packages/schema/syntaxes/zmodel.tmLanguage.json +0 -57
  208. package/packages/schema/tests/generator/expression-writer.test.ts +0 -676
  209. package/packages/schema/tests/generator/prisma-builder.test.ts +0 -138
  210. package/packages/schema/tests/schema/parser.test.ts +0 -423
  211. package/packages/schema/tests/schema/sample-todo.test.ts +0 -14
  212. package/packages/schema/tests/utils.ts +0 -38
  213. package/packages/schema/tsconfig.json +0 -23
  214. package/pnpm-workspace.yaml +0 -3
  215. package/samples/todo/.env +0 -2
  216. package/samples/todo/.eslintrc.json +0 -3
  217. package/samples/todo/.vscode/launch.json +0 -11
  218. package/samples/todo/README.md +0 -34
  219. package/samples/todo/components/AuthGuard.tsx +0 -17
  220. package/samples/todo/components/Avatar.tsx +0 -22
  221. package/samples/todo/components/BreadCrumb.tsx +0 -44
  222. package/samples/todo/components/ManageMembers.tsx +0 -134
  223. package/samples/todo/components/NavBar.tsx +0 -57
  224. package/samples/todo/components/SpaceMembers.tsx +0 -76
  225. package/samples/todo/components/Spaces.tsx +0 -28
  226. package/samples/todo/components/TimeInfo.tsx +0 -17
  227. package/samples/todo/components/Todo.tsx +0 -72
  228. package/samples/todo/components/TodoList.tsx +0 -77
  229. package/samples/todo/lib/context.ts +0 -31
  230. package/samples/todo/next.config.js +0 -10
  231. package/samples/todo/package-lock.json +0 -7527
  232. package/samples/todo/package.json +0 -45
  233. package/samples/todo/pages/_app.tsx +0 -50
  234. package/samples/todo/pages/api/auth/[...nextauth].ts +0 -83
  235. package/samples/todo/pages/api/zenstack/[...path].ts +0 -16
  236. package/samples/todo/pages/create-space.tsx +0 -114
  237. package/samples/todo/pages/index.tsx +0 -32
  238. package/samples/todo/pages/space/[slug]/[listId]/index.tsx +0 -88
  239. package/samples/todo/pages/space/[slug]/index.tsx +0 -169
  240. package/samples/todo/postcss.config.js +0 -6
  241. package/samples/todo/public/avatar.jpg +0 -0
  242. package/samples/todo/public/favicon.ico +0 -0
  243. package/samples/todo/public/logo.png +0 -0
  244. package/samples/todo/public/vercel.svg +0 -4
  245. package/samples/todo/styles/globals.css +0 -7
  246. package/samples/todo/tailwind.config.js +0 -11
  247. package/samples/todo/tsconfig.json +0 -28
  248. package/samples/todo/types/next-auth.d.ts +0 -14
  249. package/samples/todo/types/next.d.ts +0 -16
  250. package/samples/todo/zenstack/migrations/20221014084317_init/migration.sql +0 -153
  251. package/samples/todo/zenstack/migrations/20221020094651_upate_cli/migration.sql +0 -23
  252. package/samples/todo/zenstack/migrations/migration_lock.toml +0 -3
  253. package/samples/todo/zenstack/schema.prisma +0 -126
  254. package/samples/todo/zenstack/schema.zmodel +0 -161
  255. package/tests/integration/jest.config.ts +0 -16
  256. package/tests/integration/package-lock.json +0 -1081
  257. package/tests/integration/package.json +0 -27
  258. package/tests/integration/tests/operation-coverate.test.ts +0 -563
  259. package/tests/integration/tests/operations.zmodel +0 -69
  260. package/tests/integration/tests/todo-e2e.test.ts +0 -577
  261. package/tests/integration/tests/todo.zmodel +0 -123
  262. package/tests/integration/tests/tsconfig.template.json +0 -10
  263. package/tests/integration/tests/utils.ts +0 -133
  264. package/tests/integration/tsconfig.json +0 -10
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateAttributeApplication = exports.assignableToAttributeParam = exports.mapBuiltinTypeToExpressionType = exports.typeAssignable = exports.getStringLiteral = exports.validateDuplicatedDeclarations = void 0;
7
+ const ast_1 = require("@zenstackhq/language/ast");
8
+ const sdk_1 = require("@zenstackhq/sdk");
9
+ const pluralize_1 = __importDefault(require("pluralize"));
10
+ /**
11
+ * Checks if the given declarations have duplicated names
12
+ */
13
+ function validateDuplicatedDeclarations(decls, accept) {
14
+ const groupByName = decls.reduce((group, decl) => {
15
+ var _a;
16
+ group[decl.name] = (_a = group[decl.name]) !== null && _a !== void 0 ? _a : [];
17
+ group[decl.name].push(decl);
18
+ return group;
19
+ }, {});
20
+ for (const [name, decls] of Object.entries(groupByName)) {
21
+ if (decls.length > 1) {
22
+ accept('error', `Duplicated declaration name "${name}"`, {
23
+ node: decls[1],
24
+ });
25
+ }
26
+ }
27
+ }
28
+ exports.validateDuplicatedDeclarations = validateDuplicatedDeclarations;
29
+ /**
30
+ * Try getting string value from a potential string literal expression
31
+ */
32
+ function getStringLiteral(node) {
33
+ if ((0, ast_1.isLiteralExpr)(node) && typeof node.value === 'string') {
34
+ return node.value;
35
+ }
36
+ else {
37
+ return undefined;
38
+ }
39
+ }
40
+ exports.getStringLiteral = getStringLiteral;
41
+ const isoDateTimeRegex = /^\d{4}(-\d\d(-\d\d(T\d\d:\d\d(:\d\d)?(\.\d+)?(([+-]\d\d:\d\d)|Z)?)?)?)?$/i;
42
+ /**
43
+ * Determines if the given sourceType is assignable to a destination of destType
44
+ */
45
+ function typeAssignable(destType, sourceType, sourceExpr) {
46
+ // implicit conversion from ISO datetime string to datetime
47
+ if (destType === 'DateTime' && sourceType === 'String' && sourceExpr && (0, ast_1.isLiteralExpr)(sourceExpr)) {
48
+ const literal = getStringLiteral(sourceExpr);
49
+ if (literal && isoDateTimeRegex.test(literal)) {
50
+ // implicitly convert to DateTime
51
+ sourceType = 'DateTime';
52
+ }
53
+ }
54
+ switch (destType) {
55
+ case 'Any':
56
+ return true;
57
+ case 'Float':
58
+ return sourceType === 'Any' || sourceType === 'Int' || sourceType === 'Float';
59
+ default:
60
+ return sourceType === 'Any' || sourceType === destType;
61
+ }
62
+ }
63
+ exports.typeAssignable = typeAssignable;
64
+ /**
65
+ * Maps a ZModel builtin type to expression type
66
+ */
67
+ function mapBuiltinTypeToExpressionType(type) {
68
+ switch (type) {
69
+ case 'Any':
70
+ case 'Boolean':
71
+ case 'String':
72
+ case 'DateTime':
73
+ case 'Int':
74
+ case 'Float':
75
+ case 'Null':
76
+ return type;
77
+ case 'BigInt':
78
+ return 'Int';
79
+ case 'Decimal':
80
+ return 'Float';
81
+ case 'Json':
82
+ case 'Bytes':
83
+ return 'Any';
84
+ }
85
+ }
86
+ exports.mapBuiltinTypeToExpressionType = mapBuiltinTypeToExpressionType;
87
+ /**
88
+ * Determines if the given attribute argument is assignable to the given attribute parameter
89
+ */
90
+ function assignableToAttributeParam(arg, param, attr) {
91
+ var _a, _b, _c, _d;
92
+ const argResolvedType = arg.$resolvedType;
93
+ if (!argResolvedType) {
94
+ return false;
95
+ }
96
+ let dstType = param.type.type;
97
+ let dstIsArray = param.type.array;
98
+ const dstRef = param.type.reference;
99
+ // destination is field reference or transitive field reference, check if
100
+ // argument is reference or array or reference
101
+ if (dstType === 'FieldReference' || dstType === 'TransitiveFieldReference') {
102
+ if (dstIsArray) {
103
+ return ((0, ast_1.isArrayExpr)(arg.value) &&
104
+ !arg.value.items.find((item) => !(0, ast_1.isReferenceExpr)(item) || !(0, ast_1.isDataModelField)(item.target.ref)));
105
+ }
106
+ else {
107
+ return (0, ast_1.isReferenceExpr)(arg.value) && (0, ast_1.isDataModelField)(arg.value.target.ref);
108
+ }
109
+ }
110
+ if ((0, ast_1.isEnum)(argResolvedType.decl)) {
111
+ // enum type
112
+ let attrArgDeclType = dstRef === null || dstRef === void 0 ? void 0 : dstRef.ref;
113
+ if (dstType === 'ContextType' && (0, ast_1.isDataModelField)(attr.$container) && ((_b = (_a = attr.$container) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.reference)) {
114
+ // attribute parameter type is ContextType, need to infer type from
115
+ // the attribute's container
116
+ attrArgDeclType = (0, sdk_1.resolved)(attr.$container.type.reference);
117
+ dstIsArray = attr.$container.type.array;
118
+ }
119
+ return attrArgDeclType === argResolvedType.decl && dstIsArray === argResolvedType.array;
120
+ }
121
+ else if (dstType) {
122
+ // scalar type
123
+ if (typeof (argResolvedType === null || argResolvedType === void 0 ? void 0 : argResolvedType.decl) !== 'string') {
124
+ // destination type is not a reference, so argument type must be a plain expression
125
+ return false;
126
+ }
127
+ if (dstType === 'ContextType') {
128
+ // attribute parameter type is ContextType, need to infer type from
129
+ // the attribute's container
130
+ if ((0, ast_1.isDataModelField)(attr.$container)) {
131
+ if (!((_d = (_c = attr.$container) === null || _c === void 0 ? void 0 : _c.type) === null || _d === void 0 ? void 0 : _d.type)) {
132
+ return false;
133
+ }
134
+ dstType = mapBuiltinTypeToExpressionType(attr.$container.type.type);
135
+ dstIsArray = attr.$container.type.array;
136
+ }
137
+ else {
138
+ dstType = 'Any';
139
+ }
140
+ }
141
+ return (typeAssignable(dstType, argResolvedType.decl, arg.value) &&
142
+ (dstType === 'Any' || dstIsArray === argResolvedType.array));
143
+ }
144
+ else {
145
+ // reference type
146
+ return (dstRef === null || dstRef === void 0 ? void 0 : dstRef.ref) === argResolvedType.decl && dstIsArray === argResolvedType.array;
147
+ }
148
+ }
149
+ exports.assignableToAttributeParam = assignableToAttributeParam;
150
+ function validateAttributeApplication(attr, accept) {
151
+ const decl = attr.decl.ref;
152
+ if (!decl) {
153
+ return;
154
+ }
155
+ const targetDecl = attr.$container;
156
+ if (decl.name === '@@@targetField' && !(0, ast_1.isAttribute)(targetDecl)) {
157
+ accept('error', `attribute "${decl.name}" can only be used on attribute declarations`, { node: attr });
158
+ return;
159
+ }
160
+ if ((0, ast_1.isDataModelField)(targetDecl) && !isValidAttributeTarget(decl, targetDecl)) {
161
+ accept('error', `attribute "${decl.name}" cannot be used on this type of field`, { node: attr });
162
+ }
163
+ const filledParams = new Set();
164
+ for (const arg of attr.args) {
165
+ let paramDecl;
166
+ if (!arg.name) {
167
+ paramDecl = decl.params.find((p) => p.default && !filledParams.has(p));
168
+ if (!paramDecl) {
169
+ accept('error', `Unexpected unnamed argument`, {
170
+ node: arg,
171
+ });
172
+ return false;
173
+ }
174
+ }
175
+ else {
176
+ paramDecl = decl.params.find((p) => p.name === arg.name);
177
+ if (!paramDecl) {
178
+ accept('error', `Attribute "${decl.name}" doesn't have a parameter named "${arg.name}"`, {
179
+ node: arg,
180
+ });
181
+ return false;
182
+ }
183
+ }
184
+ if (!assignableToAttributeParam(arg, paramDecl, attr)) {
185
+ accept('error', `Value is not assignable to parameter`, {
186
+ node: arg,
187
+ });
188
+ return false;
189
+ }
190
+ if (filledParams.has(paramDecl)) {
191
+ accept('error', `Parameter "${paramDecl.name}" is already provided`, { node: arg });
192
+ return false;
193
+ }
194
+ filledParams.add(paramDecl);
195
+ arg.$resolvedParam = paramDecl;
196
+ }
197
+ const missingParams = decl.params.filter((p) => !p.type.optional && !filledParams.has(p));
198
+ if (missingParams.length > 0) {
199
+ accept('error', `Required ${(0, pluralize_1.default)('parameter', missingParams.length)} not provided: ${missingParams
200
+ .map((p) => p.name)
201
+ .join(', ')}`, { node: attr });
202
+ return false;
203
+ }
204
+ return true;
205
+ }
206
+ exports.validateAttributeApplication = validateAttributeApplication;
207
+ function isValidAttributeTarget(attrDecl, targetDecl) {
208
+ var _a;
209
+ const targetField = attrDecl.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@@targetField'; });
210
+ if (!targetField) {
211
+ // no field type constraint
212
+ return true;
213
+ }
214
+ const fieldTypes = targetField.args[0].value.items.map((item) => { var _a; return (_a = item.target.ref) === null || _a === void 0 ? void 0 : _a.name; });
215
+ let allowed = false;
216
+ for (const allowedType of fieldTypes) {
217
+ switch (allowedType) {
218
+ case 'StringField':
219
+ allowed = allowed || targetDecl.type.type === 'String';
220
+ break;
221
+ case 'IntField':
222
+ allowed = allowed || targetDecl.type.type === 'Int';
223
+ break;
224
+ case 'BigIntField':
225
+ allowed = allowed || targetDecl.type.type === 'BigInt';
226
+ break;
227
+ case 'FloatField':
228
+ allowed = allowed || targetDecl.type.type === 'Float';
229
+ break;
230
+ case 'DecimalField':
231
+ allowed = allowed || targetDecl.type.type === 'Decimal';
232
+ break;
233
+ case 'BooleanField':
234
+ allowed = allowed || targetDecl.type.type === 'Boolean';
235
+ break;
236
+ case 'DateTimeField':
237
+ allowed = allowed || targetDecl.type.type === 'DateTime';
238
+ break;
239
+ case 'JsonField':
240
+ allowed = allowed || targetDecl.type.type === 'Json';
241
+ break;
242
+ case 'BytesField':
243
+ allowed = allowed || targetDecl.type.type === 'Bytes';
244
+ break;
245
+ case 'ModelField':
246
+ allowed = allowed || (0, ast_1.isDataModel)((_a = targetDecl.type.reference) === null || _a === void 0 ? void 0 : _a.ref);
247
+ break;
248
+ default:
249
+ break;
250
+ }
251
+ if (allowed) {
252
+ break;
253
+ }
254
+ }
255
+ return allowed;
256
+ }
257
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/language-server/validator/utils.ts"],"names":[],"mappings":";;;;;;AAAA,kDAmBkC;AAClC,yCAA2C;AAE3C,0DAAkC;AAElC;;GAEG;AACH,SAAgB,8BAA8B,CAC1C,KAAwC,EACxC,MAA0B;IAE1B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAoD,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;;QAChG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAY,WAAW,CAAC,EAAE;QAChE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,MAAM,CAAC,OAAO,EAAE,gCAAgC,IAAI,GAAG,EAAE;gBACrD,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aACjB,CAAC,CAAC;SACN;KACJ;AACL,CAAC;AAjBD,wEAiBC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,IAAyB;IACtD,IAAI,IAAA,mBAAa,EAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAND,4CAMC;AAED,MAAM,gBAAgB,GAAG,2EAA2E,CAAC;AAErG;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAwB,EAAE,UAA0B,EAAE,UAAuB;IACxG,2DAA2D;IAC3D,IAAI,QAAQ,KAAK,UAAU,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAA,mBAAa,EAAC,UAAU,CAAC,EAAE;QAC/F,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC3C,iCAAiC;YACjC,UAAU,GAAG,UAAU,CAAC;SAC3B;KACJ;IAED,QAAQ,QAAQ,EAAE;QACd,KAAK,KAAK;YACN,OAAO,IAAI,CAAC;QAChB,KAAK,OAAO;YACR,OAAO,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,OAAO,CAAC;QAClF;YACI,OAAO,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,QAAQ,CAAC;KAC9D;AACL,CAAC;AAlBD,wCAkBC;AAED;;GAEG;AACH,SAAgB,8BAA8B,CAAC,IAAkC;IAC7E,QAAQ,IAAI,EAAE;QACV,KAAK,KAAK,CAAC;QACX,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACP,OAAO,IAAI,CAAC;QAChB,KAAK,QAAQ;YACT,OAAO,KAAK,CAAC;QACjB,KAAK,SAAS;YACV,OAAO,OAAO,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACR,OAAO,KAAK,CAAC;KACpB;AACL,CAAC;AAlBD,wEAkBC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CACtC,GAAiB,EACjB,KAAqB,EACrB,IAAkD;;IAElD,MAAM,eAAe,GAAG,GAAG,CAAC,aAAa,CAAC;IAC1C,IAAI,CAAC,eAAe,EAAE;QAClB,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IAEpC,yEAAyE;IACzE,8CAA8C;IAC9C,IAAI,OAAO,KAAK,gBAAgB,IAAI,OAAO,KAAK,0BAA0B,EAAE;QACxE,IAAI,UAAU,EAAE;YACZ,OAAO,CACH,IAAA,iBAAW,EAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,qBAAe,EAAC,IAAI,CAAC,IAAI,CAAC,IAAA,sBAAgB,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAChG,CAAC;SACL;aAAM;YACH,OAAO,IAAA,qBAAe,EAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAA,sBAAgB,EAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC/E;KACJ;IAED,IAAI,IAAA,YAAM,EAAC,eAAe,CAAC,IAAI,CAAC,EAAE;QAC9B,YAAY;QAEZ,IAAI,eAAe,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC;QAClC,IAAI,OAAO,KAAK,aAAa,IAAI,IAAA,sBAAgB,EAAC,IAAI,CAAC,UAAU,CAAC,KAAI,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,0CAAE,SAAS,CAAA,EAAE;YACpG,mEAAmE;YACnE,4BAA4B;YAC5B,eAAe,GAAG,IAAA,cAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3D,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3C;QACD,OAAO,eAAe,KAAK,eAAe,CAAC,IAAI,IAAI,UAAU,KAAK,eAAe,CAAC,KAAK,CAAC;KAC3F;SAAM,IAAI,OAAO,EAAE;QAChB,cAAc;QAEd,IAAI,OAAO,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,CAAA,KAAK,QAAQ,EAAE;YAC3C,mFAAmF;YACnF,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,OAAO,KAAK,aAAa,EAAE;YAC3B,mEAAmE;YACnE,4BAA4B;YAC5B,IAAI,IAAA,sBAAgB,EAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACnC,IAAI,CAAC,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,0CAAE,IAAI,CAAA,EAAE;oBAC9B,OAAO,KAAK,CAAC;iBAChB;gBACD,OAAO,GAAG,8BAA8B,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpE,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;aAC3C;iBAAM;gBACH,OAAO,GAAG,KAAK,CAAC;aACnB;SACJ;QAED,OAAO,CACH,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;YACxD,CAAC,OAAO,KAAK,KAAK,IAAI,UAAU,KAAK,eAAe,CAAC,KAAK,CAAC,CAC9D,CAAC;KACL;SAAM;QACH,iBAAiB;QACjB,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,MAAK,eAAe,CAAC,IAAI,IAAI,UAAU,KAAK,eAAe,CAAC,KAAK,CAAC;KACvF;AACL,CAAC;AApED,gEAoEC;AAED,SAAgB,4BAA4B,CACxC,IAAkD,EAClD,MAA0B;IAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE;QACP,OAAO;KACV;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,IAAA,iBAAW,EAAC,UAAU,CAAC,EAAE;QAC5D,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,IAAI,8CAA8C,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvG,OAAO;KACV;IAED,IAAI,IAAA,sBAAgB,EAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;QAC3E,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,IAAI,wCAAwC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KACpG;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE/C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;QACzB,IAAI,SAAqC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACX,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,CAAC,OAAO,EAAE,6BAA6B,EAAE;oBAC3C,IAAI,EAAE,GAAG;iBACZ,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;aAChB;SACJ;aAAM;YACH,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,IAAI,qCAAqC,GAAG,CAAC,IAAI,GAAG,EAAE;oBACrF,IAAI,EAAE,GAAG;iBACZ,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;aAChB;SACJ;QAED,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;YACnD,MAAM,CAAC,OAAO,EAAE,sCAAsC,EAAE;gBACpD,IAAI,EAAE,GAAG;aACZ,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,CAAC,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,uBAAuB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACpF,OAAO,KAAK,CAAC;SAChB;QACD,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5B,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;KAClC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,MAAM,CACF,OAAO,EACP,YAAY,IAAA,mBAAS,EAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,kBAAkB,aAAa;aAClF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,EAAE,EACjB,EAAE,IAAI,EAAE,IAAI,EAAE,CACjB,CAAC;QACF,OAAO,KAAK,CAAC;KAChB;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AArED,oEAqEC;AAED,SAAS,sBAAsB,CAAC,QAAmB,EAAE,UAA0B;;IAC3E,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,IAAI,MAAK,gBAAgB,CAAA,EAAA,CAAC,CAAC;IACjG,IAAI,CAAC,WAAW,EAAE;QACd,2BAA2B;QAC3B,OAAO,IAAI,CAAC;KACf;IAED,MAAM,UAAU,GAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,KAAK,CAAC,GAAG,CACjE,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,MAAC,IAAsB,CAAC,MAAM,CAAC,GAAG,0CAAE,IAAI,CAAA,EAAA,CACrD,CAAC;IAEF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE;QAClC,QAAQ,WAAW,EAAE;YACjB,KAAK,aAAa;gBACd,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACvD,MAAM;YACV,KAAK,UAAU;gBACX,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;gBACpD,MAAM;YACV,KAAK,aAAa;gBACd,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACvD,MAAM;YACV,KAAK,YAAY;gBACb,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;gBACtD,MAAM;YACV,KAAK,cAAc;gBACf,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACxD,MAAM;YACV,KAAK,cAAc;gBACf,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;gBACxD,MAAM;YACV,KAAK,eAAe;gBAChB,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;gBACzD,MAAM;YACV,KAAK,WAAW;gBACZ,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;gBACrD,MAAM;YACV,KAAK,YAAY;gBACb,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;gBACtD,MAAM;YACV,KAAK,YAAY;gBACb,OAAO,GAAG,OAAO,IAAI,IAAA,iBAAW,EAAC,MAAA,UAAU,CAAC,IAAI,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC;gBACjE,MAAM;YACV;gBACI,MAAM;SACb;QACD,IAAI,OAAO,EAAE;YACT,MAAM;SACT;KACJ;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { ValidationAcceptor, ValidationRegistry } from 'langium';
2
+ import { Attribute, DataModel, DataSource, Enum, Expression, Model } from '@zenstackhq/language/ast';
3
+ import type { ZModelServices } from '../zmodel-module';
4
+ /**
5
+ * Registry for validation checks.
6
+ */
7
+ export declare class ZModelValidationRegistry extends ValidationRegistry {
8
+ constructor(services: ZModelServices);
9
+ }
10
+ /**
11
+ * Implementation of custom validations.
12
+ */
13
+ export declare class ZModelValidator {
14
+ private shouldCheck;
15
+ checkModel(node: Model, accept: ValidationAcceptor): void;
16
+ checkDataSource(node: DataSource, accept: ValidationAcceptor): void;
17
+ checkDataModel(node: DataModel, accept: ValidationAcceptor): void;
18
+ checkEnum(node: Enum, accept: ValidationAcceptor): void;
19
+ checkAttribute(node: Attribute, accept: ValidationAcceptor): void;
20
+ checkExpression(node: Expression, accept: ValidationAcceptor): void;
21
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ZModelValidator = exports.ZModelValidationRegistry = void 0;
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
+ const attribute_validator_1 = __importDefault(require("./attribute-validator"));
12
+ const enum_validator_1 = __importDefault(require("./enum-validator"));
13
+ const expression_validator_1 = __importDefault(require("./expression-validator"));
14
+ /**
15
+ * Registry for validation checks.
16
+ */
17
+ class ZModelValidationRegistry extends langium_1.ValidationRegistry {
18
+ constructor(services) {
19
+ super(services);
20
+ const validator = services.validation.ZModelValidator;
21
+ const checks = {
22
+ Model: validator.checkModel,
23
+ DataSource: validator.checkDataSource,
24
+ DataModel: validator.checkDataModel,
25
+ Enum: validator.checkEnum,
26
+ Attribute: validator.checkAttribute,
27
+ Expression: validator.checkExpression,
28
+ };
29
+ this.register(checks, validator);
30
+ }
31
+ }
32
+ exports.ZModelValidationRegistry = ZModelValidationRegistry;
33
+ /**
34
+ * Implementation of custom validations.
35
+ */
36
+ class ZModelValidator {
37
+ shouldCheck(node) {
38
+ let doc;
39
+ let currNode = node;
40
+ while (currNode) {
41
+ if (currNode.$document) {
42
+ doc = currNode.$document;
43
+ break;
44
+ }
45
+ currNode = currNode.$container;
46
+ }
47
+ return (doc === null || doc === void 0 ? void 0 : doc.parseResult.lexerErrors.length) === 0 && (doc === null || doc === void 0 ? void 0 : doc.parseResult.parserErrors.length) === 0;
48
+ }
49
+ checkModel(node, accept) {
50
+ this.shouldCheck(node) && new schema_validator_1.default().validate(node, accept);
51
+ }
52
+ checkDataSource(node, accept) {
53
+ this.shouldCheck(node) && new datasource_validator_1.default().validate(node, accept);
54
+ }
55
+ checkDataModel(node, accept) {
56
+ this.shouldCheck(node) && new datamodel_validator_1.default().validate(node, accept);
57
+ }
58
+ checkEnum(node, accept) {
59
+ this.shouldCheck(node) && new enum_validator_1.default().validate(node, accept);
60
+ }
61
+ checkAttribute(node, accept) {
62
+ this.shouldCheck(node) && new attribute_validator_1.default().validate(node, accept);
63
+ }
64
+ checkExpression(node, accept) {
65
+ this.shouldCheck(node) && new expression_validator_1.default().validate(node, accept);
66
+ }
67
+ }
68
+ exports.ZModelValidator = ZModelValidator;
69
+ //# sourceMappingURL=zmodel-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zmodel-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/zmodel-validator.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA6G;AAG7G,0EAAiD;AACjD,kFAAyD;AACzD,gFAAuD;AACvD,gFAAuD;AACvD,sEAA6C;AAC7C,kFAAyD;AAEzD;;GAEG;AACH,MAAa,wBAAyB,SAAQ,4BAAkB;IAC5D,YAAY,QAAwB;QAChC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC;QACtD,MAAM,MAAM,GAAoC;YAC5C,KAAK,EAAE,SAAS,CAAC,UAAU;YAC3B,UAAU,EAAE,SAAS,CAAC,eAAe;YACrC,SAAS,EAAE,SAAS,CAAC,cAAc;YACnC,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,SAAS,EAAE,SAAS,CAAC,cAAc;YACnC,UAAU,EAAE,SAAS,CAAC,eAAe;SACxC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;CACJ;AAdD,4DAcC;AAED;;GAEG;AACH,MAAa,eAAe;IAChB,WAAW,CAAC,IAAa;QAC7B,IAAI,GAAgC,CAAC;QACrC,IAAI,QAAQ,GAAwB,IAAI,CAAC;QACzC,OAAO,QAAQ,EAAE;YACb,IAAI,QAAQ,CAAC,SAAS,EAAE;gBACpB,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;gBACzB,MAAM;aACT;YACD,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;SAClC;QAED,OAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAC,WAAW,CAAC,MAAM,MAAK,CAAC,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAC,YAAY,CAAC,MAAM,MAAK,CAAC,CAAC;IACnG,CAAC;IAED,UAAU,CAAC,IAAW,EAAE,MAA0B;QAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,0BAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,eAAe,CAAC,IAAgB,EAAE,MAA0B;QACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,8BAAmB,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,cAAc,CAAC,IAAe,EAAE,MAA0B;QACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,6BAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED,SAAS,CAAC,IAAU,EAAE,MAA0B;QAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,wBAAa,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAED,cAAc,CAAC,IAAe,EAAE,MAA0B;QACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,6BAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED,eAAe,CAAC,IAAgB,EAAE,MAA0B;QACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,8BAAmB,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;CACJ;AAtCD,0CAsCC"}
@@ -0,0 +1,14 @@
1
+ import { AstReflection, CodeActionProvider, IndexManager, LangiumDocument, LangiumServices, MaybePromise } from 'langium';
2
+ import { CodeAction, CodeActionParams, Command } from 'vscode-languageserver';
3
+ import { ZModelFormatter } from './zmodel-formatter';
4
+ export declare class ZModelCodeActionProvider implements CodeActionProvider {
5
+ protected readonly reflection: AstReflection;
6
+ protected readonly indexManager: IndexManager;
7
+ protected readonly formatter: ZModelFormatter;
8
+ constructor(services: LangiumServices);
9
+ getCodeActions(document: LangiumDocument, params: CodeActionParams): MaybePromise<Array<Command | CodeAction> | undefined>;
10
+ private createCodeActions;
11
+ private fixMissingOppositeRelation;
12
+ private lowerCaseFirstLetter;
13
+ private upperCaseFirstLetter;
14
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZModelCodeActionProvider = void 0;
4
+ const ast_1 = require("@zenstackhq/language/ast");
5
+ const langium_1 = require("langium");
6
+ const vscode_languageserver_1 = require("vscode-languageserver");
7
+ const constants_1 = require("./constants");
8
+ class ZModelCodeActionProvider {
9
+ constructor(services) {
10
+ this.reflection = services.shared.AstReflection;
11
+ this.indexManager = services.shared.workspace.IndexManager;
12
+ this.formatter = services.lsp.Formatter;
13
+ }
14
+ getCodeActions(document, params) {
15
+ const result = [];
16
+ const acceptor = (ca) => ca && result.push(ca);
17
+ for (const diagnostic of params.context.diagnostics) {
18
+ this.createCodeActions(diagnostic, document, acceptor);
19
+ }
20
+ return result;
21
+ }
22
+ createCodeActions(diagnostic, document, accept) {
23
+ switch (diagnostic.code) {
24
+ case constants_1.IssueCodes.MissingOppositeRelation:
25
+ accept(this.fixMissingOppositeRelation(diagnostic, document));
26
+ }
27
+ return undefined;
28
+ }
29
+ fixMissingOppositeRelation(diagnostic, document) {
30
+ const offset = document.textDocument.offsetAt(diagnostic.range.start);
31
+ const rootCst = document.parseResult.value.$cstNode;
32
+ if (rootCst) {
33
+ const cstNode = (0, langium_1.findDeclarationNodeAtOffset)(rootCst, offset);
34
+ const astNode = cstNode === null || cstNode === void 0 ? void 0 : cstNode.element;
35
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
36
+ const oppositeModel = astNode.type.reference.ref;
37
+ const lastField = oppositeModel.fields[oppositeModel.fields.length - 1];
38
+ const container = (0, langium_1.getContainerOfType)(cstNode === null || cstNode === void 0 ? void 0 : cstNode.element, ast_1.isDataModel);
39
+ const idField = container.fields.find((f) => f.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@id'; }));
40
+ if (container && container.$cstNode && idField) {
41
+ // indent
42
+ let indent = '\t';
43
+ const formatOptions = this.formatter.getFormatOptions();
44
+ if (formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.insertSpaces) {
45
+ indent = ' '.repeat(formatOptions.tabSize);
46
+ }
47
+ indent = indent.repeat(this.formatter.getIndent());
48
+ const typeName = container.name;
49
+ const fieldName = this.lowerCaseFirstLetter(typeName);
50
+ // might already exist
51
+ let referenceField = '';
52
+ const idFieldName = idField.name;
53
+ const referenceIdFieldName = fieldName + this.upperCaseFirstLetter(idFieldName);
54
+ if (!oppositeModel.fields.find((f) => f.name === referenceIdFieldName)) {
55
+ referenceField = '\n' + indent + `${referenceIdFieldName} ${idField.type.type}`;
56
+ }
57
+ return {
58
+ title: `Add opposite relation fields on ${oppositeModel.name}`,
59
+ kind: vscode_languageserver_1.CodeActionKind.QuickFix,
60
+ diagnostics: [diagnostic],
61
+ isPreferred: false,
62
+ edit: {
63
+ changes: {
64
+ [document.textDocument.uri]: [
65
+ {
66
+ range: {
67
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
68
+ start: lastField.$cstNode.range.end,
69
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
70
+ end: lastField.$cstNode.range.end,
71
+ },
72
+ newText: '\n' +
73
+ indent +
74
+ `${fieldName} ${typeName} @relation(fields: [${referenceIdFieldName}], references: [${idFieldName}])` +
75
+ referenceField,
76
+ },
77
+ ],
78
+ },
79
+ },
80
+ };
81
+ }
82
+ }
83
+ return undefined;
84
+ }
85
+ lowerCaseFirstLetter(str) {
86
+ return str.charAt(0).toLowerCase() + str.slice(1);
87
+ }
88
+ upperCaseFirstLetter(str) {
89
+ return str.charAt(0).toUpperCase() + str.slice(1);
90
+ }
91
+ }
92
+ exports.ZModelCodeActionProvider = ZModelCodeActionProvider;
93
+ //# sourceMappingURL=zmodel-code-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zmodel-code-action.js","sourceRoot":"","sources":["../../src/language-server/zmodel-code-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { AbstractFormatter, AstNode, LangiumDocument } from 'langium';
2
+ import { FormattingOptions, Range, TextEdit } from 'vscode-languageserver';
3
+ export declare class ZModelFormatter extends AbstractFormatter {
4
+ private formatOptions?;
5
+ protected format(node: AstNode): void;
6
+ protected doDocumentFormat(document: LangiumDocument<AstNode>, options: FormattingOptions, range?: Range | undefined): TextEdit[];
7
+ getFormatOptions(): FormattingOptions | undefined;
8
+ getIndent(): number;
9
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ZModelFormatter = void 0;
27
+ const langium_1 = require("langium");
28
+ const ast = __importStar(require("@zenstackhq/language/ast"));
29
+ class ZModelFormatter extends langium_1.AbstractFormatter {
30
+ format(node) {
31
+ const formatter = this.getNodeFormatter(node);
32
+ if (ast.isDataModelField(node)) {
33
+ formatter.property('type').prepend(langium_1.Formatting.oneSpace());
34
+ if (node.attributes.length > 0) {
35
+ formatter.properties('attributes').prepend(langium_1.Formatting.oneSpace());
36
+ }
37
+ }
38
+ else if (ast.isDataModelFieldAttribute(node)) {
39
+ formatter.keyword('(').surround(langium_1.Formatting.noSpace());
40
+ formatter.keyword(')').prepend(langium_1.Formatting.noSpace());
41
+ formatter.keyword(',').append(langium_1.Formatting.oneSpace());
42
+ if (node.args.length > 1) {
43
+ formatter.nodes(...node.args.slice(1)).prepend(langium_1.Formatting.oneSpace());
44
+ }
45
+ }
46
+ else if (ast.isAttributeArg(node)) {
47
+ formatter.keyword(':').prepend(langium_1.Formatting.noSpace());
48
+ formatter.keyword(':').append(langium_1.Formatting.oneSpace());
49
+ }
50
+ else if (ast.isAbstractDeclaration(node)) {
51
+ const bracesOpen = formatter.keyword('{');
52
+ const bracesClose = formatter.keyword('}');
53
+ // this line decide the indent count return by this.getIndent()
54
+ formatter.interior(bracesOpen, bracesClose).prepend(langium_1.Formatting.indent());
55
+ bracesOpen.prepend(langium_1.Formatting.oneSpace());
56
+ bracesClose.prepend(langium_1.Formatting.newLine());
57
+ }
58
+ else if (ast.isModel(node)) {
59
+ const model = node;
60
+ const nodes = formatter.nodes(...model.declarations);
61
+ nodes.prepend(langium_1.Formatting.noIndent());
62
+ }
63
+ }
64
+ doDocumentFormat(document, options, range) {
65
+ this.formatOptions = options;
66
+ return super.doDocumentFormat(document, options, range);
67
+ }
68
+ getFormatOptions() {
69
+ return this.formatOptions;
70
+ }
71
+ getIndent() {
72
+ return 1;
73
+ }
74
+ }
75
+ exports.ZModelFormatter = ZModelFormatter;
76
+ //# sourceMappingURL=zmodel-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zmodel-formatter.js","sourceRoot":"","sources":["../../src/language-server/zmodel-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { DefaultLinker, LangiumDocument, LangiumServices } from 'langium';
2
+ import { CancellationToken } from 'vscode-jsonrpc';
3
+ /**
4
+ * Langium linker implementation which links references and resolves expression types
5
+ */
6
+ export declare class ZModelLinker extends DefaultLinker {
7
+ private readonly descriptions;
8
+ constructor(services: LangiumServices);
9
+ link(document: LangiumDocument, cancelToken?: CancellationToken): Promise<void>;
10
+ private linkReference;
11
+ private resolveFromScopeProviders;
12
+ private resolve;
13
+ private resolveBinary;
14
+ private resolveUnary;
15
+ private resolveReference;
16
+ private resolveArray;
17
+ private resolveInvocation;
18
+ private getContainingDataModel;
19
+ private resolveLiteral;
20
+ private resolveMemberAccess;
21
+ private resolveCollectionPredicate;
22
+ private resolveThis;
23
+ private resolveNull;
24
+ private resolveAttributeArg;
25
+ private findAttrParamForArg;
26
+ private resolveDefault;
27
+ private resolveToDeclaredType;
28
+ private resolveToBuiltinTypeOrDecl;
29
+ }