zenstack 1.0.0 → 1.0.1

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 (300) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +194 -1
  3. package/bin/cli +3 -0
  4. package/bin/post-install.js +24 -0
  5. package/cli/actions/generate.d.ts +13 -0
  6. package/cli/actions/generate.js +71 -0
  7. package/cli/actions/generate.js.map +1 -0
  8. package/cli/actions/index.d.ts +3 -0
  9. package/cli/actions/index.js +20 -0
  10. package/cli/actions/index.js.map +1 -0
  11. package/cli/actions/info.d.ts +4 -0
  12. package/cli/actions/info.js +63 -0
  13. package/cli/actions/info.js.map +1 -0
  14. package/cli/actions/init.d.ts +12 -0
  15. package/cli/actions/init.js +83 -0
  16. package/cli/actions/init.js.map +1 -0
  17. package/cli/cli-error.d.ts +5 -0
  18. package/cli/cli-error.js +10 -0
  19. package/cli/cli-error.js.map +1 -0
  20. package/cli/cli-util.d.ts +21 -0
  21. package/cli/cli-util.js +211 -0
  22. package/cli/cli-util.js.map +1 -0
  23. package/cli/config.d.ts +10 -0
  24. package/cli/config.js +62 -0
  25. package/cli/config.js.map +1 -0
  26. package/cli/index.d.ts +7 -0
  27. package/cli/index.js +128 -0
  28. package/cli/index.js.map +1 -0
  29. package/cli/plugin-runner.d.ts +24 -0
  30. package/cli/plugin-runner.js +229 -0
  31. package/cli/plugin-runner.js.map +1 -0
  32. package/constants.d.ts +1 -0
  33. package/constants.js +6 -0
  34. package/constants.js.map +1 -0
  35. package/language-server/constants.d.ts +22 -0
  36. package/language-server/constants.js +27 -0
  37. package/language-server/constants.js.map +1 -0
  38. package/language-server/main.d.ts +1 -0
  39. package/language-server/main.js +13 -0
  40. package/language-server/main.js.map +1 -0
  41. package/language-server/types.d.ts +10 -0
  42. package/language-server/types.js +3 -0
  43. package/language-server/types.js.map +1 -0
  44. package/language-server/utils.d.ts +5 -0
  45. package/language-server/utils.js +22 -0
  46. package/language-server/utils.js.map +1 -0
  47. package/language-server/validator/attribute-application-validator.d.ts +15 -0
  48. package/language-server/validator/attribute-application-validator.js +246 -0
  49. package/language-server/validator/attribute-application-validator.js.map +1 -0
  50. package/language-server/validator/attribute-validator.d.ts +9 -0
  51. package/language-server/validator/attribute-validator.js +14 -0
  52. package/language-server/validator/attribute-validator.js.map +1 -0
  53. package/language-server/validator/datamodel-validator.d.ts +22 -0
  54. package/language-server/validator/datamodel-validator.js +329 -0
  55. package/language-server/validator/datamodel-validator.js.map +1 -0
  56. package/language-server/validator/datasource-validator.d.ts +12 -0
  57. package/language-server/validator/datasource-validator.js +66 -0
  58. package/language-server/validator/datasource-validator.js.map +1 -0
  59. package/language-server/validator/enum-validator.d.ts +11 -0
  60. package/language-server/validator/enum-validator.js +25 -0
  61. package/language-server/validator/enum-validator.js.map +1 -0
  62. package/language-server/validator/expression-validator.d.ts +10 -0
  63. package/language-server/validator/expression-validator.js +135 -0
  64. package/language-server/validator/expression-validator.js.map +1 -0
  65. package/language-server/validator/function-decl-validator.d.ts +9 -0
  66. package/language-server/validator/function-decl-validator.js +13 -0
  67. package/language-server/validator/function-decl-validator.js.map +1 -0
  68. package/language-server/validator/function-invocation-validator.d.ts +11 -0
  69. package/language-server/validator/function-invocation-validator.js +135 -0
  70. package/language-server/validator/function-invocation-validator.js.map +1 -0
  71. package/language-server/validator/schema-validator.d.ts +13 -0
  72. package/language-server/validator/schema-validator.js +49 -0
  73. package/language-server/validator/schema-validator.js.map +1 -0
  74. package/language-server/validator/utils.d.ts +24 -0
  75. package/language-server/validator/utils.js +154 -0
  76. package/language-server/validator/utils.js.map +1 -0
  77. package/language-server/validator/zmodel-validator.d.ts +25 -0
  78. package/language-server/validator/zmodel-validator.js +83 -0
  79. package/language-server/validator/zmodel-validator.js.map +1 -0
  80. package/language-server/zmodel-code-action.d.ts +15 -0
  81. package/language-server/zmodel-code-action.js +118 -0
  82. package/language-server/zmodel-code-action.js.map +1 -0
  83. package/language-server/zmodel-definition.d.ts +7 -0
  84. package/language-server/zmodel-definition.js +31 -0
  85. package/language-server/zmodel-definition.js.map +1 -0
  86. package/language-server/zmodel-formatter.d.ts +9 -0
  87. package/language-server/zmodel-formatter.js +76 -0
  88. package/language-server/zmodel-formatter.js.map +1 -0
  89. package/language-server/zmodel-linker.d.ts +32 -0
  90. package/language-server/zmodel-linker.js +447 -0
  91. package/language-server/zmodel-linker.js.map +1 -0
  92. package/language-server/zmodel-module.d.ts +41 -0
  93. package/language-server/zmodel-module.js +83 -0
  94. package/language-server/zmodel-module.js.map +1 -0
  95. package/language-server/zmodel-scope.d.ts +16 -0
  96. package/language-server/zmodel-scope.js +100 -0
  97. package/language-server/zmodel-scope.js.map +1 -0
  98. package/language-server/zmodel-workspace-manager.d.ts +12 -0
  99. package/language-server/zmodel-workspace-manager.js +138 -0
  100. package/language-server/zmodel-workspace-manager.js.map +1 -0
  101. package/package.json +140 -8
  102. package/plugins/access-policy/expression-writer.d.ts +46 -0
  103. package/plugins/access-policy/expression-writer.js +580 -0
  104. package/plugins/access-policy/expression-writer.js.map +1 -0
  105. package/plugins/access-policy/index.d.ts +4 -0
  106. package/plugins/access-policy/index.js +22 -0
  107. package/plugins/access-policy/index.js.map +1 -0
  108. package/plugins/access-policy/policy-guard-generator.d.ts +22 -0
  109. package/plugins/access-policy/policy-guard-generator.js +634 -0
  110. package/plugins/access-policy/policy-guard-generator.js.map +1 -0
  111. package/plugins/model-meta/index.d.ts +4 -0
  112. package/plugins/model-meta/index.js +232 -0
  113. package/plugins/model-meta/index.js.map +1 -0
  114. package/plugins/plugin-utils.d.ts +17 -0
  115. package/plugins/plugin-utils.js +80 -0
  116. package/plugins/plugin-utils.js.map +1 -0
  117. package/plugins/prisma/indent-string.d.ts +4 -0
  118. package/plugins/prisma/indent-string.js +12 -0
  119. package/plugins/prisma/indent-string.js.map +1 -0
  120. package/plugins/prisma/index.d.ts +4 -0
  121. package/plugins/prisma/index.js +22 -0
  122. package/plugins/prisma/index.js.map +1 -0
  123. package/plugins/prisma/prisma-builder.d.ts +145 -0
  124. package/plugins/prisma/prisma-builder.js +358 -0
  125. package/plugins/prisma/prisma-builder.js.map +1 -0
  126. package/plugins/prisma/schema-generator.d.ts +29 -0
  127. package/plugins/prisma/schema-generator.js +336 -0
  128. package/plugins/prisma/schema-generator.js.map +1 -0
  129. package/plugins/prisma/zmodel-code-generator.d.ts +30 -0
  130. package/plugins/prisma/zmodel-code-generator.js +124 -0
  131. package/plugins/prisma/zmodel-code-generator.js.map +1 -0
  132. package/plugins/zod/generator.d.ts +4 -0
  133. package/plugins/zod/generator.js +254 -0
  134. package/plugins/zod/generator.js.map +1 -0
  135. package/plugins/zod/index.d.ts +4 -0
  136. package/plugins/zod/index.js +24 -0
  137. package/plugins/zod/index.js.map +1 -0
  138. package/plugins/zod/transformer.d.ts +68 -0
  139. package/plugins/zod/transformer.js +554 -0
  140. package/plugins/zod/transformer.js.map +1 -0
  141. package/plugins/zod/types.d.ts +25 -0
  142. package/plugins/zod/types.js +3 -0
  143. package/plugins/zod/types.js.map +1 -0
  144. package/plugins/zod/utils/removeDir.d.ts +1 -0
  145. package/plugins/zod/utils/removeDir.js +30 -0
  146. package/plugins/zod/utils/removeDir.js.map +1 -0
  147. package/plugins/zod/utils/schema-gen.d.ts +3 -0
  148. package/plugins/zod/utils/schema-gen.js +188 -0
  149. package/plugins/zod/utils/schema-gen.js.map +1 -0
  150. package/res/prism-zmodel.js +20 -0
  151. package/res/starter.zmodel +51 -0
  152. package/res/stdlib.zmodel +506 -0
  153. package/telemetry.d.ts +21 -0
  154. package/telemetry.js +129 -0
  155. package/telemetry.js.map +1 -0
  156. package/utils/ast-utils.d.ts +13 -0
  157. package/utils/ast-utils.js +136 -0
  158. package/utils/ast-utils.js.map +1 -0
  159. package/utils/exec-utils.d.ts +6 -0
  160. package/utils/exec-utils.js +13 -0
  161. package/utils/exec-utils.js.map +1 -0
  162. package/utils/pkg-utils.d.ts +3 -0
  163. package/utils/pkg-utils.js +64 -0
  164. package/utils/pkg-utils.js.map +1 -0
  165. package/utils/typescript-expression-transformer.d.ts +54 -0
  166. package/utils/typescript-expression-transformer.js +326 -0
  167. package/utils/typescript-expression-transformer.js.map +1 -0
  168. package/utils/version-utils.d.ts +1 -0
  169. package/utils/version-utils.js +20 -0
  170. package/utils/version-utils.js.map +1 -0
  171. package/.vscode/extensions.json +0 -7
  172. package/.vscode/launch.json +0 -49
  173. package/.vscode/settings.json +0 -4
  174. package/packages/internal/jest.config.ts +0 -32
  175. package/packages/internal/package.json +0 -42
  176. package/packages/internal/src/constants.ts +0 -1
  177. package/packages/internal/src/handler/data/guard-utils.ts +0 -7
  178. package/packages/internal/src/handler/data/handler.ts +0 -415
  179. package/packages/internal/src/handler/data/query-processor.ts +0 -504
  180. package/packages/internal/src/handler/index.ts +0 -1
  181. package/packages/internal/src/handler/types.ts +0 -20
  182. package/packages/internal/src/index.ts +0 -3
  183. package/packages/internal/src/request-handler.ts +0 -27
  184. package/packages/internal/src/request.ts +0 -101
  185. package/packages/internal/src/types.ts +0 -40
  186. package/packages/internal/tests/query-processor.test.ts +0 -172
  187. package/packages/internal/tsconfig.json +0 -21
  188. package/packages/runtime/auth.d.ts +0 -1
  189. package/packages/runtime/auth.js +0 -3
  190. package/packages/runtime/hooks.d.ts +0 -10
  191. package/packages/runtime/hooks.js +0 -3
  192. package/packages/runtime/index.d.ts +0 -3
  193. package/packages/runtime/index.js +0 -1
  194. package/packages/runtime/package-lock.json +0 -512
  195. package/packages/runtime/package.json +0 -16
  196. package/packages/runtime/server.d.ts +0 -1
  197. package/packages/runtime/server.js +0 -3
  198. package/packages/runtime/types.d.ts +0 -1
  199. package/packages/runtime/types.js +0 -3
  200. package/packages/schema/.eslintrc.json +0 -13
  201. package/packages/schema/.vscodeignore +0 -4
  202. package/packages/schema/asset/logo-dark.png +0 -0
  203. package/packages/schema/asset/logo-light.png +0 -0
  204. package/packages/schema/bin/cli +0 -3
  205. package/packages/schema/jest.config.ts +0 -32
  206. package/packages/schema/langium-config.json +0 -14
  207. package/packages/schema/langium-quickstart.md +0 -41
  208. package/packages/schema/language-configuration.json +0 -30
  209. package/packages/schema/package.json +0 -96
  210. package/packages/schema/src/cli/cli-util.ts +0 -80
  211. package/packages/schema/src/cli/index.ts +0 -64
  212. package/packages/schema/src/extension.ts +0 -76
  213. package/packages/schema/src/generator/constants.ts +0 -5
  214. package/packages/schema/src/generator/index.ts +0 -92
  215. package/packages/schema/src/generator/next-auth/index.ts +0 -197
  216. package/packages/schema/src/generator/package.template.json +0 -9
  217. package/packages/schema/src/generator/prisma/expression-writer.ts +0 -352
  218. package/packages/schema/src/generator/prisma/index.ts +0 -32
  219. package/packages/schema/src/generator/prisma/plain-expression-builder.ts +0 -91
  220. package/packages/schema/src/generator/prisma/prisma-builder.ts +0 -366
  221. package/packages/schema/src/generator/prisma/query-gard-generator.ts +0 -208
  222. package/packages/schema/src/generator/prisma/schema-generator.ts +0 -300
  223. package/packages/schema/src/generator/react-hooks/index.ts +0 -181
  224. package/packages/schema/src/generator/service/index.ts +0 -107
  225. package/packages/schema/src/generator/tsconfig.template.json +0 -17
  226. package/packages/schema/src/generator/types.ts +0 -17
  227. package/packages/schema/src/generator/utils.ts +0 -9
  228. package/packages/schema/src/language-server/generated/ast.ts +0 -603
  229. package/packages/schema/src/language-server/generated/grammar.ts +0 -2190
  230. package/packages/schema/src/language-server/generated/module.ts +0 -24
  231. package/packages/schema/src/language-server/main.ts +0 -12
  232. package/packages/schema/src/language-server/stdlib.zmodel +0 -22
  233. package/packages/schema/src/language-server/types.ts +0 -9
  234. package/packages/schema/src/language-server/zmodel-index.ts +0 -33
  235. package/packages/schema/src/language-server/zmodel-linker.ts +0 -409
  236. package/packages/schema/src/language-server/zmodel-module.ts +0 -90
  237. package/packages/schema/src/language-server/zmodel-scope.ts +0 -21
  238. package/packages/schema/src/language-server/zmodel-validator.ts +0 -35
  239. package/packages/schema/src/language-server/zmodel.langium +0 -186
  240. package/packages/schema/src/utils/exec-utils.ts +0 -5
  241. package/packages/schema/src/utils/indent-string.ts +0 -6
  242. package/packages/schema/syntaxes/zmodel.json +0 -57
  243. package/packages/schema/syntaxes/zmodel.tmLanguage.json +0 -57
  244. package/packages/schema/tests/generator/expression-writer.test.ts +0 -676
  245. package/packages/schema/tests/generator/prisma-builder.test.ts +0 -138
  246. package/packages/schema/tests/schema/parser.test.ts +0 -423
  247. package/packages/schema/tests/schema/sample-todo.test.ts +0 -14
  248. package/packages/schema/tests/utils.ts +0 -38
  249. package/packages/schema/tsconfig.json +0 -23
  250. package/pnpm-workspace.yaml +0 -3
  251. package/samples/todo/.env +0 -2
  252. package/samples/todo/.eslintrc.json +0 -3
  253. package/samples/todo/.vscode/launch.json +0 -11
  254. package/samples/todo/README.md +0 -34
  255. package/samples/todo/components/AuthGuard.tsx +0 -17
  256. package/samples/todo/components/Avatar.tsx +0 -22
  257. package/samples/todo/components/BreadCrumb.tsx +0 -44
  258. package/samples/todo/components/ManageMembers.tsx +0 -134
  259. package/samples/todo/components/NavBar.tsx +0 -57
  260. package/samples/todo/components/SpaceMembers.tsx +0 -76
  261. package/samples/todo/components/Spaces.tsx +0 -28
  262. package/samples/todo/components/TimeInfo.tsx +0 -17
  263. package/samples/todo/components/Todo.tsx +0 -72
  264. package/samples/todo/components/TodoList.tsx +0 -77
  265. package/samples/todo/lib/context.ts +0 -31
  266. package/samples/todo/next.config.js +0 -10
  267. package/samples/todo/package-lock.json +0 -7527
  268. package/samples/todo/package.json +0 -45
  269. package/samples/todo/pages/_app.tsx +0 -50
  270. package/samples/todo/pages/api/auth/[...nextauth].ts +0 -83
  271. package/samples/todo/pages/api/zenstack/[...path].ts +0 -16
  272. package/samples/todo/pages/create-space.tsx +0 -114
  273. package/samples/todo/pages/index.tsx +0 -32
  274. package/samples/todo/pages/space/[slug]/[listId]/index.tsx +0 -88
  275. package/samples/todo/pages/space/[slug]/index.tsx +0 -169
  276. package/samples/todo/postcss.config.js +0 -6
  277. package/samples/todo/public/avatar.jpg +0 -0
  278. package/samples/todo/public/favicon.ico +0 -0
  279. package/samples/todo/public/logo.png +0 -0
  280. package/samples/todo/public/vercel.svg +0 -4
  281. package/samples/todo/styles/globals.css +0 -7
  282. package/samples/todo/tailwind.config.js +0 -11
  283. package/samples/todo/tsconfig.json +0 -28
  284. package/samples/todo/types/next-auth.d.ts +0 -14
  285. package/samples/todo/types/next.d.ts +0 -16
  286. package/samples/todo/zenstack/migrations/20221014084317_init/migration.sql +0 -153
  287. package/samples/todo/zenstack/migrations/20221020094651_upate_cli/migration.sql +0 -23
  288. package/samples/todo/zenstack/migrations/migration_lock.toml +0 -3
  289. package/samples/todo/zenstack/schema.prisma +0 -126
  290. package/samples/todo/zenstack/schema.zmodel +0 -161
  291. package/tests/integration/jest.config.ts +0 -16
  292. package/tests/integration/package-lock.json +0 -1081
  293. package/tests/integration/package.json +0 -27
  294. package/tests/integration/tests/operation-coverate.test.ts +0 -563
  295. package/tests/integration/tests/operations.zmodel +0 -69
  296. package/tests/integration/tests/todo-e2e.test.ts +0 -577
  297. package/tests/integration/tests/todo.zmodel +0 -123
  298. package/tests/integration/tests/tsconfig.template.json +0 -10
  299. package/tests/integration/tests/utils.ts +0 -133
  300. package/tests/integration/tsconfig.json +0 -10
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ZModelScopeProvider = exports.ZModelScopeComputation = void 0;
13
+ const ast_1 = require("@zenstackhq/language/ast");
14
+ const langium_1 = require("langium");
15
+ const ast_utils_1 = require("../utils/ast-utils");
16
+ const constants_1 = require("./constants");
17
+ /**
18
+ * Custom Langium ScopeComputation implementation which adds enum fields into global scope
19
+ */
20
+ class ZModelScopeComputation extends langium_1.DefaultScopeComputation {
21
+ constructor(services) {
22
+ super(services);
23
+ this.services = services;
24
+ }
25
+ computeExports(document, cancelToken) {
26
+ const _super = Object.create(null, {
27
+ computeExports: { get: () => super.computeExports }
28
+ });
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const result = yield _super.computeExports.call(this, document, cancelToken);
31
+ // add enum fields so they can be globally resolved across modules
32
+ for (const node of (0, langium_1.streamAllContents)(document.parseResult.value)) {
33
+ if (cancelToken) {
34
+ yield (0, langium_1.interruptAndCheck)(cancelToken);
35
+ }
36
+ if ((0, ast_1.isEnumField)(node)) {
37
+ const desc = this.services.workspace.AstNodeDescriptionProvider.createDescription(node, node.name, document);
38
+ result.push(desc);
39
+ }
40
+ }
41
+ return result;
42
+ });
43
+ }
44
+ computeLocalScopes(document, cancelToken) {
45
+ const result = super.computeLocalScopes(document, cancelToken);
46
+ //the $resolvedFields would be used in Linking stage for all the documents
47
+ //so we need to set it at the end of the scope computation
48
+ this.resolveBaseModels(document);
49
+ return result;
50
+ }
51
+ resolveBaseModels(document) {
52
+ const model = document.parseResult.value;
53
+ model.declarations.forEach((decl) => {
54
+ if (decl.$type === 'DataModel') {
55
+ const dataModel = decl;
56
+ dataModel.$resolvedFields = [...dataModel.fields];
57
+ dataModel.superTypes.forEach((superType) => {
58
+ const superTypeDecl = superType.ref;
59
+ if (superTypeDecl) {
60
+ superTypeDecl.fields.forEach((field) => {
61
+ const cloneField = Object.assign({}, field);
62
+ cloneField.$isInherited = true;
63
+ const mutable = cloneField;
64
+ // update container
65
+ mutable.$container = dataModel;
66
+ dataModel.$resolvedFields.push(cloneField);
67
+ });
68
+ }
69
+ });
70
+ }
71
+ });
72
+ }
73
+ }
74
+ exports.ZModelScopeComputation = ZModelScopeComputation;
75
+ class ZModelScopeProvider extends langium_1.DefaultScopeProvider {
76
+ constructor(services) {
77
+ super(services);
78
+ }
79
+ getGlobalScope(referenceType, context) {
80
+ const model = (0, langium_1.getContainerOfType)(context.container, ast_1.isModel);
81
+ if (!model) {
82
+ return langium_1.EMPTY_SCOPE;
83
+ }
84
+ const importedUris = (0, langium_1.stream)(model.imports).map(ast_utils_1.resolveImportUri).nonNullable();
85
+ const importedElements = this.indexManager.allElements(referenceType).filter((des) => {
86
+ var _a;
87
+ // allow current document
88
+ return (0, langium_1.equalURI)(des.documentUri, (_a = model.$document) === null || _a === void 0 ? void 0 : _a.uri) ||
89
+ // allow stdlib
90
+ des.documentUri.path.endsWith(constants_1.STD_LIB_MODULE_NAME) ||
91
+ // allow plugin models
92
+ des.documentUri.path.endsWith(constants_1.PLUGIN_MODULE_NAME) ||
93
+ // allow imported documents
94
+ importedUris.some((importedUri) => (des.documentUri, importedUri));
95
+ });
96
+ return new langium_1.StreamScope(importedElements);
97
+ }
98
+ }
99
+ exports.ZModelScopeProvider = ZModelScopeProvider;
100
+ //# sourceMappingURL=zmodel-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zmodel-scope.js","sourceRoot":"","sources":["../../src/language-server/zmodel-scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { DefaultWorkspaceManager, LangiumDocument } from 'langium';
2
+ import { CancellationToken, WorkspaceFolder } from 'vscode-languageserver';
3
+ import { URI } from 'vscode-uri';
4
+ /**
5
+ * Custom Langium WorkspaceManager implementation which automatically loads stdlib.zmodel
6
+ */
7
+ export default class ZModelWorkspaceManager extends DefaultWorkspaceManager {
8
+ pluginModels: Set<string>;
9
+ protected loadAdditionalDocuments(_folders: WorkspaceFolder[], _collector: (document: LangiumDocument) => void): Promise<void>;
10
+ initializeWorkspace(folders: WorkspaceFolder[], cancelToken?: CancellationToken): Promise<void>;
11
+ protected loadPluginModels(workspaceFolder: WorkspaceFolder, folderPath: URI, pluginModels: Set<string>, collector: (document: LangiumDocument) => void): Promise<void>;
12
+ }
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const ast_1 = require("@zenstackhq/language/ast");
16
+ const sdk_1 = require("@zenstackhq/sdk");
17
+ const langium_1 = require("langium");
18
+ const path_1 = __importDefault(require("path"));
19
+ const vscode_languageserver_1 = require("vscode-languageserver");
20
+ const vscode_uri_1 = require("vscode-uri");
21
+ const constants_1 = require("./constants");
22
+ /**
23
+ * Custom Langium WorkspaceManager implementation which automatically loads stdlib.zmodel
24
+ */
25
+ class ZModelWorkspaceManager extends langium_1.DefaultWorkspaceManager {
26
+ constructor() {
27
+ super(...arguments);
28
+ this.pluginModels = new Set();
29
+ }
30
+ loadAdditionalDocuments(_folders, _collector) {
31
+ const _super = Object.create(null, {
32
+ loadAdditionalDocuments: { get: () => super.loadAdditionalDocuments }
33
+ });
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ yield _super.loadAdditionalDocuments.call(this, _folders, _collector);
36
+ const stdLibUri = vscode_uri_1.URI.file(path_1.default.join(__dirname, '../res', constants_1.STD_LIB_MODULE_NAME));
37
+ console.log(`Adding stdlib document from ${stdLibUri}`);
38
+ const stdlib = this.langiumDocuments.getOrCreateDocument(stdLibUri);
39
+ _collector(stdlib);
40
+ });
41
+ }
42
+ initializeWorkspace(folders, cancelToken = vscode_languageserver_1.CancellationToken.None) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ const fileExtensions = this.serviceRegistry.all.flatMap((e) => e.LanguageMetaData.fileExtensions);
45
+ const documents = [];
46
+ const collector = (document) => {
47
+ documents.push(document);
48
+ if (!this.langiumDocuments.hasDocument(document.uri)) {
49
+ this.langiumDocuments.addDocument(document);
50
+ }
51
+ };
52
+ yield this.loadAdditionalDocuments(folders, collector);
53
+ yield Promise.all(folders
54
+ .map((wf) => [wf, this.getRootFolder(wf)])
55
+ .map((entry) => __awaiter(this, void 0, void 0, function* () { return this.traverseFolder(...entry, fileExtensions, collector); })));
56
+ // find plugin models
57
+ documents.forEach((doc) => {
58
+ const parsed = doc.parseResult.value;
59
+ parsed.declarations.forEach((decl) => {
60
+ if ((0, ast_1.isPlugin)(decl)) {
61
+ const providerField = decl.fields.find((f) => f.name === 'provider');
62
+ if (providerField) {
63
+ const provider = (0, sdk_1.getLiteral)(providerField.value);
64
+ if (provider) {
65
+ this.pluginModels.add(provider);
66
+ }
67
+ }
68
+ }
69
+ });
70
+ });
71
+ if (this.pluginModels.size > 0) {
72
+ console.log(`Used plugin documents: ${Array.from(this.pluginModels)}`);
73
+ // the loaded plugin models would be removed from the set
74
+ const unLoadedPluginModels = new Set(this.pluginModels);
75
+ yield Promise.all(folders
76
+ .map((wf) => [wf, this.getRootFolder(wf)])
77
+ .map((entry) => __awaiter(this, void 0, void 0, function* () { return this.loadPluginModels(...entry, unLoadedPluginModels, collector); })));
78
+ if (unLoadedPluginModels.size > 0) {
79
+ console.warn(`The following plugin documents could not be loaded: ${Array.from(unLoadedPluginModels)}`);
80
+ }
81
+ }
82
+ // Only after creating all documents do we check whether we need to cancel the initialization
83
+ // The document builder will later pick up on all unprocessed documents
84
+ yield (0, langium_1.interruptAndCheck)(cancelToken);
85
+ yield this.documentBuilder.build(documents, undefined, cancelToken);
86
+ });
87
+ }
88
+ loadPluginModels(workspaceFolder, folderPath, pluginModels, collector) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const content = yield (yield this.fileSystemProvider.readDirectory(folderPath)).sort((a, b) => {
91
+ // make sure the node_moudules folder is always the first one to be checked
92
+ // so it could be early exited if the plugin is found
93
+ if (a.isDirectory && b.isDirectory) {
94
+ const aName = vscode_uri_1.Utils.basename(a.uri);
95
+ if (aName === 'node_modules') {
96
+ return -1;
97
+ }
98
+ else {
99
+ return 1;
100
+ }
101
+ }
102
+ else {
103
+ return 0;
104
+ }
105
+ });
106
+ for (const entry of content) {
107
+ if (entry.isDirectory) {
108
+ const name = vscode_uri_1.Utils.basename(entry.uri);
109
+ if (name === 'node_modules') {
110
+ for (const plugin of Array.from(pluginModels)) {
111
+ const path = vscode_uri_1.Utils.joinPath(entry.uri, plugin, constants_1.PLUGIN_MODULE_NAME);
112
+ try {
113
+ this.fileSystemProvider.readFileSync(path);
114
+ const document = this.langiumDocuments.getOrCreateDocument(path);
115
+ collector(document);
116
+ console.log(`Adding plugin document from ${path.path}`);
117
+ pluginModels.delete(plugin);
118
+ // early exit if all plugins are loaded
119
+ if (pluginModels.size === 0) {
120
+ return;
121
+ }
122
+ }
123
+ catch (_a) {
124
+ // no-op. The module might be found in another node_modules folder
125
+ // will show the warning message eventually if not found
126
+ }
127
+ }
128
+ }
129
+ else {
130
+ yield this.loadPluginModels(workspaceFolder, entry.uri, pluginModels, collector);
131
+ }
132
+ }
133
+ }
134
+ });
135
+ }
136
+ }
137
+ exports.default = ZModelWorkspaceManager;
138
+ //# sourceMappingURL=zmodel-workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zmodel-workspace-manager.js","sourceRoot":"","sources":["../../src/language-server/zmodel-workspace-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,145 @@
1
1
  {
2
2
  "name": "zenstack",
3
- "version": "1.0.0",
4
- "description": "",
5
- "main": "index.js",
6
- "keywords": [],
7
- "author": "",
8
- "license": "ISC",
3
+ "publisher": "zenstack",
4
+ "displayName": "ZenStack Language Tools",
5
+ "description": "A toolkit for building secure CRUD apps with Next.js + Typescript",
6
+ "version": "1.0.1",
7
+ "author": {
8
+ "name": "ZenStack Team"
9
+ },
10
+ "homepage": "https://zenstack.dev",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "fullstack",
14
+ "react",
15
+ "typescript",
16
+ "data modeling"
17
+ ],
18
+ "preview": false,
19
+ "icon": "asset/logo-256-bg.png",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/zenstackhq/zenstack"
23
+ },
24
+ "publishConfig": {
25
+ "directory": "dist",
26
+ "linkDirectory": true
27
+ },
28
+ "engines": {
29
+ "vscode": "^1.56.0"
30
+ },
31
+ "categories": [
32
+ "Programming Languages"
33
+ ],
34
+ "contributes": {
35
+ "languages": [
36
+ {
37
+ "id": "zmodel",
38
+ "aliases": [
39
+ "ZenStack Model",
40
+ "zmodel"
41
+ ],
42
+ "extensions": [
43
+ ".zmodel"
44
+ ],
45
+ "configuration": "./language-configuration.json",
46
+ "icon": {
47
+ "light": "./asset/logo-light-256.png",
48
+ "dark": "./asset/logo-dark-256.png"
49
+ }
50
+ }
51
+ ],
52
+ "grammars": [
53
+ {
54
+ "language": "zmodel",
55
+ "scopeName": "source.zmodel",
56
+ "path": "./syntaxes/zmodel.tmLanguage.json"
57
+ }
58
+ ]
59
+ },
60
+ "activationEvents": [
61
+ "onLanguage:zmodel"
62
+ ],
63
+ "bin": {
64
+ "zenstack": "bin/cli"
65
+ },
66
+ "main": "./bundle/extension.js",
67
+ "dependencies": {
68
+ "@paralleldrive/cuid2": "^2.2.0",
69
+ "@prisma/generator-helper": "^5.0.0",
70
+ "async-exit-hook": "^2.0.1",
71
+ "change-case": "^4.1.2",
72
+ "colors": "1.4.0",
73
+ "commander": "^8.3.0",
74
+ "get-latest-version": "^5.0.1",
75
+ "langium": "1.2.0",
76
+ "lower-case-first": "^2.0.2",
77
+ "mixpanel": "^0.17.0",
78
+ "node-machine-id": "^1.1.12",
79
+ "ora": "^5.4.1",
80
+ "pluralize": "^8.0.0",
81
+ "promisify": "^0.0.3",
82
+ "semver": "^7.3.8",
83
+ "sleep-promise": "^9.1.0",
84
+ "strip-color": "^0.1.0",
85
+ "tiny-invariant": "^1.3.1",
86
+ "ts-morph": "^16.0.0",
87
+ "ts-pattern": "^4.3.0",
88
+ "upper-case-first": "^2.0.2",
89
+ "uuid": "^9.0.0",
90
+ "vscode-jsonrpc": "^8.0.2",
91
+ "vscode-languageclient": "^8.0.2",
92
+ "vscode-languageserver": "^8.0.2",
93
+ "vscode-languageserver-textdocument": "^1.0.7",
94
+ "vscode-uri": "^3.0.6",
95
+ "zod": "3.21.1",
96
+ "zod-validation-error": "^0.2.1",
97
+ "@zenstackhq/language": "1.0.0",
98
+ "@zenstackhq/sdk": "1.0.0"
99
+ },
100
+ "devDependencies": {
101
+ "@prisma/client": "^4.8.0",
102
+ "@types/async-exit-hook": "^2.0.0",
103
+ "@types/jest": "^29.5.0",
104
+ "@types/node": "^18.0.0",
105
+ "@types/pluralize": "^0.0.29",
106
+ "@types/semver": "^7.3.13",
107
+ "@types/strip-color": "^0.1.0",
108
+ "@types/tmp": "^0.2.3",
109
+ "@types/uuid": "^8.3.4",
110
+ "@types/vscode": "^1.56.0",
111
+ "@typescript-eslint/eslint-plugin": "^5.42.0",
112
+ "@typescript-eslint/parser": "^5.42.0",
113
+ "@vscode/vsce": "^2.19.0",
114
+ "concurrently": "^7.4.0",
115
+ "copyfiles": "^2.4.1",
116
+ "dotenv": "^16.0.3",
117
+ "esbuild": "^0.15.12",
118
+ "eslint": "^8.27.0",
119
+ "eslint-plugin-jest": "^27.1.7",
120
+ "jest": "^29.5.0",
121
+ "prisma": "^4.8.0",
122
+ "renamer": "^4.0.0",
123
+ "rimraf": "^3.0.2",
124
+ "tmp": "^0.2.1",
125
+ "ts-jest": "^29.0.3",
126
+ "ts-node": "^10.9.1",
127
+ "tsc-alias": "^1.7.0",
128
+ "typescript": "^4.8.4",
129
+ "vitest": "^0.29.7",
130
+ "@zenstackhq/runtime": "1.0.0"
131
+ },
9
132
  "scripts": {
10
- "build": "pnpm -r build",
11
- "test": "pnpm -r test"
133
+ "vscode:publish": "vsce publish --no-dependencies",
134
+ "vscode:prepublish": "pnpm bundle",
135
+ "vscode:package": "vsce package --no-dependencies",
136
+ "clean": "rimraf bundle dist",
137
+ "build": "pnpm clean && pnpm lint && tsc && copyfiles -F \"bin/*\" dist && copyfiles ./README-global.md ./LICENSE ./package.json dist && renamer --replace \"README.md\" dist/README-global.md && copyfiles -u 1 \"src/res/*\" dist && node build/post-build.js && pnpm pack dist --pack-destination '../../../.build'",
138
+ "bundle": "pnpm clean && pnpm lint && node build/bundle.js --minify",
139
+ "watch": "tsc --watch",
140
+ "lint": "eslint src tests --ext ts",
141
+ "test": "ZENSTACK_TEST=1 jest",
142
+ "publish-dev": "pnpm publish --registry http://localhost:4873",
143
+ "postinstall": "node bin/post-install.js"
12
144
  }
13
145
  }
@@ -0,0 +1,46 @@
1
+ import { Expression } from '@zenstackhq/language/ast';
2
+ import { CodeBlockWriter } from 'ts-morph';
3
+ export declare const TRUE = "{ AND: [] }";
4
+ export declare const FALSE = "{ OR: [] }";
5
+ /**
6
+ * Utility for writing ZModel expression as Prisma query argument objects into a ts-morph writer
7
+ */
8
+ export declare class ExpressionWriter {
9
+ private readonly writer;
10
+ private readonly isPostGuard;
11
+ private readonly plainExprBuilder;
12
+ /**
13
+ * Constructs a new ExpressionWriter
14
+ *
15
+ * @param isPostGuard indicates if we're writing for post-update conditions
16
+ */
17
+ constructor(writer: CodeBlockWriter, isPostGuard?: boolean);
18
+ /**
19
+ * Writes the given ZModel expression.
20
+ */
21
+ write(expr: Expression): void;
22
+ private writeReference;
23
+ private writeMemberAccess;
24
+ private writeExprList;
25
+ private writeBinary;
26
+ private writeIn;
27
+ private writeCollectionPredicate;
28
+ private isFieldAccess;
29
+ private guard;
30
+ private plain;
31
+ private writeComparison;
32
+ private requireIdFields;
33
+ private equivalentRefs;
34
+ private writeFieldReference;
35
+ private isAuthOrAuthMemberAccess;
36
+ private writeOperator;
37
+ private writeFieldCondition;
38
+ private block;
39
+ private isModelTyped;
40
+ private mapOperator;
41
+ private negateOperator;
42
+ private writeLogical;
43
+ private writeUnary;
44
+ private writeLiteral;
45
+ private writeInvocation;
46
+ }