zenstack 0.1.41 → 1.0.0

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 (215) hide show
  1. package/.vscode/extensions.json +7 -0
  2. package/.vscode/launch.json +49 -0
  3. package/.vscode/settings.json +4 -0
  4. package/README.md +1 -0
  5. package/package.json +8 -90
  6. package/packages/internal/jest.config.ts +32 -0
  7. package/packages/internal/package.json +42 -0
  8. package/packages/internal/src/constants.ts +1 -0
  9. package/packages/internal/src/handler/data/guard-utils.ts +7 -0
  10. package/packages/internal/src/handler/data/handler.ts +415 -0
  11. package/packages/internal/src/handler/data/query-processor.ts +504 -0
  12. package/packages/internal/src/handler/index.ts +1 -0
  13. package/packages/internal/src/handler/types.ts +20 -0
  14. package/packages/internal/src/index.ts +3 -0
  15. package/packages/internal/src/request-handler.ts +27 -0
  16. package/packages/internal/src/request.ts +101 -0
  17. package/packages/internal/src/types.ts +40 -0
  18. package/packages/internal/tests/query-processor.test.ts +172 -0
  19. package/{out/cli/tsconfig.template.json → packages/internal/tsconfig.json} +7 -3
  20. package/packages/runtime/auth.d.ts +1 -0
  21. package/packages/runtime/auth.js +3 -0
  22. package/packages/runtime/hooks.d.ts +10 -0
  23. package/packages/runtime/hooks.js +3 -0
  24. package/packages/runtime/index.d.ts +3 -0
  25. package/packages/runtime/index.js +1 -0
  26. package/packages/runtime/package-lock.json +512 -0
  27. package/packages/runtime/package.json +16 -0
  28. package/packages/runtime/server.d.ts +1 -0
  29. package/packages/runtime/server.js +3 -0
  30. package/packages/runtime/types.d.ts +1 -0
  31. package/packages/runtime/types.js +3 -0
  32. package/packages/schema/.eslintrc.json +13 -0
  33. package/packages/schema/.vscodeignore +4 -0
  34. package/packages/schema/asset/logo-dark.png +0 -0
  35. package/packages/schema/asset/logo-light.png +0 -0
  36. package/{bin → packages/schema/bin}/cli +0 -0
  37. package/packages/schema/jest.config.ts +32 -0
  38. package/packages/schema/langium-config.json +14 -0
  39. package/packages/schema/langium-quickstart.md +41 -0
  40. package/packages/schema/language-configuration.json +30 -0
  41. package/packages/schema/package.json +96 -0
  42. package/packages/schema/src/cli/cli-util.ts +80 -0
  43. package/packages/schema/src/cli/index.ts +64 -0
  44. package/packages/schema/src/extension.ts +76 -0
  45. package/packages/schema/src/generator/constants.ts +5 -0
  46. package/packages/schema/src/generator/index.ts +92 -0
  47. package/{out/generator/next-auth/index.js → packages/schema/src/generator/next-auth/index.ts} +46 -58
  48. package/{out → packages/schema/src}/generator/package.template.json +0 -0
  49. package/packages/schema/src/generator/prisma/expression-writer.ts +352 -0
  50. package/packages/schema/src/generator/prisma/index.ts +32 -0
  51. package/packages/schema/src/generator/prisma/plain-expression-builder.ts +91 -0
  52. package/packages/schema/src/generator/prisma/prisma-builder.ts +366 -0
  53. package/packages/schema/src/generator/prisma/query-gard-generator.ts +208 -0
  54. package/packages/schema/src/generator/prisma/schema-generator.ts +300 -0
  55. package/packages/schema/src/generator/react-hooks/index.ts +181 -0
  56. package/packages/schema/src/generator/service/index.ts +107 -0
  57. package/{out → packages/schema/src}/generator/tsconfig.template.json +0 -0
  58. package/packages/schema/src/generator/types.ts +17 -0
  59. package/packages/schema/src/generator/utils.ts +9 -0
  60. package/packages/schema/src/language-server/generated/ast.ts +603 -0
  61. package/{out/language-server/generated/grammar.js → packages/schema/src/language-server/generated/grammar.ts} +5 -8
  62. package/packages/schema/src/language-server/generated/module.ts +24 -0
  63. package/packages/schema/src/language-server/main.ts +12 -0
  64. package/{out → packages/schema/src}/language-server/stdlib.zmodel +0 -0
  65. package/packages/schema/src/language-server/types.ts +9 -0
  66. package/packages/schema/src/language-server/zmodel-index.ts +33 -0
  67. package/packages/schema/src/language-server/zmodel-linker.ts +409 -0
  68. package/packages/schema/src/language-server/zmodel-module.ts +90 -0
  69. package/packages/schema/src/language-server/zmodel-scope.ts +21 -0
  70. package/packages/schema/src/language-server/zmodel-validator.ts +35 -0
  71. package/packages/schema/src/language-server/zmodel.langium +186 -0
  72. package/packages/schema/src/utils/exec-utils.ts +5 -0
  73. package/packages/schema/src/utils/indent-string.ts +6 -0
  74. package/packages/schema/syntaxes/zmodel.json +57 -0
  75. package/packages/schema/syntaxes/zmodel.tmLanguage.json +57 -0
  76. package/packages/schema/tests/generator/expression-writer.test.ts +676 -0
  77. package/packages/schema/tests/generator/prisma-builder.test.ts +138 -0
  78. package/packages/schema/tests/schema/parser.test.ts +423 -0
  79. package/packages/schema/tests/schema/sample-todo.test.ts +14 -0
  80. package/packages/schema/tests/utils.ts +38 -0
  81. package/packages/schema/tsconfig.json +23 -0
  82. package/pnpm-workspace.yaml +3 -0
  83. package/samples/todo/.env +2 -0
  84. package/samples/todo/.eslintrc.json +3 -0
  85. package/samples/todo/.vscode/launch.json +11 -0
  86. package/samples/todo/README.md +34 -0
  87. package/samples/todo/components/AuthGuard.tsx +17 -0
  88. package/samples/todo/components/Avatar.tsx +22 -0
  89. package/samples/todo/components/BreadCrumb.tsx +44 -0
  90. package/samples/todo/components/ManageMembers.tsx +134 -0
  91. package/samples/todo/components/NavBar.tsx +57 -0
  92. package/samples/todo/components/SpaceMembers.tsx +76 -0
  93. package/samples/todo/components/Spaces.tsx +28 -0
  94. package/samples/todo/components/TimeInfo.tsx +17 -0
  95. package/samples/todo/components/Todo.tsx +72 -0
  96. package/samples/todo/components/TodoList.tsx +77 -0
  97. package/samples/todo/lib/context.ts +31 -0
  98. package/samples/todo/next.config.js +10 -0
  99. package/samples/todo/package-lock.json +7527 -0
  100. package/samples/todo/package.json +45 -0
  101. package/samples/todo/pages/_app.tsx +50 -0
  102. package/samples/todo/pages/api/auth/[...nextauth].ts +83 -0
  103. package/samples/todo/pages/api/zenstack/[...path].ts +16 -0
  104. package/samples/todo/pages/create-space.tsx +114 -0
  105. package/samples/todo/pages/index.tsx +32 -0
  106. package/samples/todo/pages/space/[slug]/[listId]/index.tsx +88 -0
  107. package/samples/todo/pages/space/[slug]/index.tsx +169 -0
  108. package/samples/todo/postcss.config.js +6 -0
  109. package/samples/todo/public/avatar.jpg +0 -0
  110. package/samples/todo/public/favicon.ico +0 -0
  111. package/samples/todo/public/logo.png +0 -0
  112. package/samples/todo/public/vercel.svg +4 -0
  113. package/samples/todo/styles/globals.css +7 -0
  114. package/samples/todo/tailwind.config.js +11 -0
  115. package/samples/todo/tsconfig.json +28 -0
  116. package/samples/todo/types/next-auth.d.ts +14 -0
  117. package/samples/todo/types/next.d.ts +16 -0
  118. package/samples/todo/zenstack/migrations/20221014084317_init/migration.sql +153 -0
  119. package/samples/todo/zenstack/migrations/20221020094651_upate_cli/migration.sql +23 -0
  120. package/samples/todo/zenstack/migrations/migration_lock.toml +3 -0
  121. package/samples/todo/zenstack/schema.prisma +126 -0
  122. package/samples/todo/zenstack/schema.zmodel +161 -0
  123. package/tests/integration/jest.config.ts +16 -0
  124. package/tests/integration/package-lock.json +1081 -0
  125. package/tests/integration/package.json +27 -0
  126. package/tests/integration/tests/operation-coverate.test.ts +563 -0
  127. package/tests/integration/tests/operations.zmodel +69 -0
  128. package/tests/integration/tests/todo-e2e.test.ts +577 -0
  129. package/tests/integration/tests/todo.zmodel +123 -0
  130. package/tests/integration/tests/tsconfig.template.json +10 -0
  131. package/tests/integration/tests/utils.ts +133 -0
  132. package/tests/integration/tsconfig.json +10 -0
  133. package/out/cli/cli-util.js +0 -64
  134. package/out/cli/cli-util.js.map +0 -1
  135. package/out/cli/generator.js +0 -1
  136. package/out/cli/generator.js.map +0 -1
  137. package/out/cli/index.js +0 -46
  138. package/out/cli/index.js.map +0 -1
  139. package/out/cli/package.template.json +0 -10
  140. package/out/extension.js +0 -81
  141. package/out/extension.js.map +0 -1
  142. package/out/generator/constants.js +0 -9
  143. package/out/generator/constants.js.map +0 -1
  144. package/out/generator/data-server/index.js +0 -1
  145. package/out/generator/data-server/index.js.map +0 -1
  146. package/out/generator/index.js +0 -98
  147. package/out/generator/index.js.map +0 -1
  148. package/out/generator/next-auth/index.js.map +0 -1
  149. package/out/generator/prisma/expression-writer.js +0 -287
  150. package/out/generator/prisma/expression-writer.js.map +0 -1
  151. package/out/generator/prisma/index.js +0 -38
  152. package/out/generator/prisma/index.js.map +0 -1
  153. package/out/generator/prisma/plain-expression-builder.js +0 -69
  154. package/out/generator/prisma/plain-expression-builder.js.map +0 -1
  155. package/out/generator/prisma/prisma-builder.js +0 -307
  156. package/out/generator/prisma/prisma-builder.js.map +0 -1
  157. package/out/generator/prisma/query-gard-generator.js +0 -159
  158. package/out/generator/prisma/query-gard-generator.js.map +0 -1
  159. package/out/generator/prisma/schema-generator.js +0 -201
  160. package/out/generator/prisma/schema-generator.js.map +0 -1
  161. package/out/generator/query-guard/index.js +0 -2
  162. package/out/generator/query-guard/index.js.map +0 -1
  163. package/out/generator/react-hooks/index.js +0 -179
  164. package/out/generator/react-hooks/index.js.map +0 -1
  165. package/out/generator/server/data/data-generator.js +0 -376
  166. package/out/generator/server/data/data-generator.js.map +0 -1
  167. package/out/generator/server/data/expression-writer.js +0 -287
  168. package/out/generator/server/data/expression-writer.js.map +0 -1
  169. package/out/generator/server/data/plain-expression-builder.js +0 -69
  170. package/out/generator/server/data/plain-expression-builder.js.map +0 -1
  171. package/out/generator/server/data-generator.js +0 -82
  172. package/out/generator/server/data-generator.js.map +0 -1
  173. package/out/generator/server/expression-writer.js +0 -1
  174. package/out/generator/server/expression-writer.js.map +0 -1
  175. package/out/generator/server/function/function-generator.js +0 -50
  176. package/out/generator/server/function/function-generator.js.map +0 -1
  177. package/out/generator/server/function-generator.js +0 -13
  178. package/out/generator/server/function-generator.js.map +0 -1
  179. package/out/generator/server/index.js +0 -88
  180. package/out/generator/server/index.js.map +0 -1
  181. package/out/generator/server/js-expression-builder.js +0 -1
  182. package/out/generator/server/js-expression-builder.js.map +0 -1
  183. package/out/generator/server/plain-expression-builder.js +0 -1
  184. package/out/generator/server/plain-expression-builder.js.map +0 -1
  185. package/out/generator/server/server-code-generator.js +0 -3
  186. package/out/generator/server/server-code-generator.js.map +0 -1
  187. package/out/generator/server/server-code-writer.js +0 -1
  188. package/out/generator/server/server-code-writer.js.map +0 -1
  189. package/out/generator/service/index.js +0 -133
  190. package/out/generator/service/index.js.map +0 -1
  191. package/out/generator/types.js +0 -10
  192. package/out/generator/types.js.map +0 -1
  193. package/out/generator/utils.js +0 -10
  194. package/out/generator/utils.js.map +0 -1
  195. package/out/language-server/generated/ast.js +0 -386
  196. package/out/language-server/generated/ast.js.map +0 -1
  197. package/out/language-server/generated/grammar.js.map +0 -1
  198. package/out/language-server/generated/module.js +0 -23
  199. package/out/language-server/generated/module.js.map +0 -1
  200. package/out/language-server/main.js +0 -12
  201. package/out/language-server/main.js.map +0 -1
  202. package/out/language-server/types.js +0 -3
  203. package/out/language-server/types.js.map +0 -1
  204. package/out/language-server/zmodel-index.js +0 -38
  205. package/out/language-server/zmodel-index.js.map +0 -1
  206. package/out/language-server/zmodel-linker.js +0 -241
  207. package/out/language-server/zmodel-linker.js.map +0 -1
  208. package/out/language-server/zmodel-module.js +0 -51
  209. package/out/language-server/zmodel-module.js.map +0 -1
  210. package/out/language-server/zmodel-scope.js +0 -30
  211. package/out/language-server/zmodel-scope.js.map +0 -1
  212. package/out/language-server/zmodel-validator.js +0 -25
  213. package/out/language-server/zmodel-validator.js.map +0 -1
  214. package/out/utils/indent-string.js +0 -9
  215. package/out/utils/indent-string.js.map +0 -1
@@ -0,0 +1,512 @@
1
+ {
2
+ "name": "@zenstackhq/runtime",
3
+ "version": "0.1.19",
4
+ "lockfileVersion": 2,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "@zenstackhq/runtime",
9
+ "version": "0.1.19",
10
+ "license": "MIT",
11
+ "dependencies": {
12
+ "@zenstackhq/internal": "latest"
13
+ },
14
+ "peerDependencies": {
15
+ "@types/bcryptjs": "^2.4.2",
16
+ "bcryptjs": "^2.4.3"
17
+ }
18
+ },
19
+ "node_modules/@next/env": {
20
+ "version": "12.3.1",
21
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz",
22
+ "integrity": "sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==",
23
+ "peer": true
24
+ },
25
+ "node_modules/@next/swc-darwin-arm64": {
26
+ "version": "12.3.1",
27
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz",
28
+ "integrity": "sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==",
29
+ "cpu": [
30
+ "arm64"
31
+ ],
32
+ "optional": true,
33
+ "os": [
34
+ "darwin"
35
+ ],
36
+ "peer": true,
37
+ "engines": {
38
+ "node": ">= 10"
39
+ }
40
+ },
41
+ "node_modules/@swc/helpers": {
42
+ "version": "0.4.11",
43
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz",
44
+ "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==",
45
+ "peer": true,
46
+ "dependencies": {
47
+ "tslib": "^2.4.0"
48
+ }
49
+ },
50
+ "node_modules/@types/bcryptjs": {
51
+ "version": "2.4.2",
52
+ "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
53
+ "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==",
54
+ "peer": true
55
+ },
56
+ "node_modules/@zenstackhq/internal": {
57
+ "version": "0.1.21",
58
+ "resolved": "https://registry.npmjs.org/@zenstackhq/internal/-/internal-0.1.21.tgz",
59
+ "integrity": "sha512-N+7450WUFSOTS1ZU5ySJ/U+4CMZ8thg5ZFzy1FAMIFT67k08/7D4Cw1sbA1yqaH6v5Ynirj36VWf9LFmi90qQw==",
60
+ "dependencies": {
61
+ "bcryptjs": "^2.4.3",
62
+ "deepcopy": "^2.1.0",
63
+ "swr": "^1.3.0",
64
+ "uuid": "^9.0.0"
65
+ },
66
+ "peerDependencies": {
67
+ "next": "12.3.1",
68
+ "react": "^17.0.2 || ^18",
69
+ "react-dom": "^17.0.2 || ^18"
70
+ }
71
+ },
72
+ "node_modules/bcryptjs": {
73
+ "version": "2.4.3",
74
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
75
+ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="
76
+ },
77
+ "node_modules/caniuse-lite": {
78
+ "version": "1.0.30001418",
79
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz",
80
+ "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==",
81
+ "funding": [
82
+ {
83
+ "type": "opencollective",
84
+ "url": "https://opencollective.com/browserslist"
85
+ },
86
+ {
87
+ "type": "tidelift",
88
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
89
+ }
90
+ ],
91
+ "peer": true
92
+ },
93
+ "node_modules/deepcopy": {
94
+ "version": "2.1.0",
95
+ "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz",
96
+ "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==",
97
+ "dependencies": {
98
+ "type-detect": "^4.0.8"
99
+ }
100
+ },
101
+ "node_modules/js-tokens": {
102
+ "version": "4.0.0",
103
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
104
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
105
+ "peer": true
106
+ },
107
+ "node_modules/loose-envify": {
108
+ "version": "1.4.0",
109
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
110
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
111
+ "peer": true,
112
+ "dependencies": {
113
+ "js-tokens": "^3.0.0 || ^4.0.0"
114
+ },
115
+ "bin": {
116
+ "loose-envify": "cli.js"
117
+ }
118
+ },
119
+ "node_modules/nanoid": {
120
+ "version": "3.3.4",
121
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
122
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
123
+ "peer": true,
124
+ "bin": {
125
+ "nanoid": "bin/nanoid.cjs"
126
+ },
127
+ "engines": {
128
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
129
+ }
130
+ },
131
+ "node_modules/next": {
132
+ "version": "12.3.1",
133
+ "resolved": "https://registry.npmjs.org/next/-/next-12.3.1.tgz",
134
+ "integrity": "sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==",
135
+ "peer": true,
136
+ "dependencies": {
137
+ "@next/env": "12.3.1",
138
+ "@swc/helpers": "0.4.11",
139
+ "caniuse-lite": "^1.0.30001406",
140
+ "postcss": "8.4.14",
141
+ "styled-jsx": "5.0.7",
142
+ "use-sync-external-store": "1.2.0"
143
+ },
144
+ "bin": {
145
+ "next": "dist/bin/next"
146
+ },
147
+ "engines": {
148
+ "node": ">=12.22.0"
149
+ },
150
+ "optionalDependencies": {
151
+ "@next/swc-android-arm-eabi": "12.3.1",
152
+ "@next/swc-android-arm64": "12.3.1",
153
+ "@next/swc-darwin-arm64": "12.3.1",
154
+ "@next/swc-darwin-x64": "12.3.1",
155
+ "@next/swc-freebsd-x64": "12.3.1",
156
+ "@next/swc-linux-arm-gnueabihf": "12.3.1",
157
+ "@next/swc-linux-arm64-gnu": "12.3.1",
158
+ "@next/swc-linux-arm64-musl": "12.3.1",
159
+ "@next/swc-linux-x64-gnu": "12.3.1",
160
+ "@next/swc-linux-x64-musl": "12.3.1",
161
+ "@next/swc-win32-arm64-msvc": "12.3.1",
162
+ "@next/swc-win32-ia32-msvc": "12.3.1",
163
+ "@next/swc-win32-x64-msvc": "12.3.1"
164
+ },
165
+ "peerDependencies": {
166
+ "fibers": ">= 3.1.0",
167
+ "node-sass": "^6.0.0 || ^7.0.0",
168
+ "react": "^17.0.2 || ^18.0.0-0",
169
+ "react-dom": "^17.0.2 || ^18.0.0-0",
170
+ "sass": "^1.3.0"
171
+ },
172
+ "peerDependenciesMeta": {
173
+ "fibers": {
174
+ "optional": true
175
+ },
176
+ "node-sass": {
177
+ "optional": true
178
+ },
179
+ "sass": {
180
+ "optional": true
181
+ }
182
+ }
183
+ },
184
+ "node_modules/picocolors": {
185
+ "version": "1.0.0",
186
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
187
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
188
+ "peer": true
189
+ },
190
+ "node_modules/postcss": {
191
+ "version": "8.4.14",
192
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
193
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
194
+ "funding": [
195
+ {
196
+ "type": "opencollective",
197
+ "url": "https://opencollective.com/postcss/"
198
+ },
199
+ {
200
+ "type": "tidelift",
201
+ "url": "https://tidelift.com/funding/github/npm/postcss"
202
+ }
203
+ ],
204
+ "peer": true,
205
+ "dependencies": {
206
+ "nanoid": "^3.3.4",
207
+ "picocolors": "^1.0.0",
208
+ "source-map-js": "^1.0.2"
209
+ },
210
+ "engines": {
211
+ "node": "^10 || ^12 || >=14"
212
+ }
213
+ },
214
+ "node_modules/react": {
215
+ "version": "18.2.0",
216
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
217
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
218
+ "peer": true,
219
+ "dependencies": {
220
+ "loose-envify": "^1.1.0"
221
+ },
222
+ "engines": {
223
+ "node": ">=0.10.0"
224
+ }
225
+ },
226
+ "node_modules/react-dom": {
227
+ "version": "18.2.0",
228
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
229
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
230
+ "peer": true,
231
+ "dependencies": {
232
+ "loose-envify": "^1.1.0",
233
+ "scheduler": "^0.23.0"
234
+ },
235
+ "peerDependencies": {
236
+ "react": "^18.2.0"
237
+ }
238
+ },
239
+ "node_modules/scheduler": {
240
+ "version": "0.23.0",
241
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
242
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
243
+ "peer": true,
244
+ "dependencies": {
245
+ "loose-envify": "^1.1.0"
246
+ }
247
+ },
248
+ "node_modules/source-map-js": {
249
+ "version": "1.0.2",
250
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
251
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
252
+ "peer": true,
253
+ "engines": {
254
+ "node": ">=0.10.0"
255
+ }
256
+ },
257
+ "node_modules/styled-jsx": {
258
+ "version": "5.0.7",
259
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz",
260
+ "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==",
261
+ "peer": true,
262
+ "engines": {
263
+ "node": ">= 12.0.0"
264
+ },
265
+ "peerDependencies": {
266
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
267
+ },
268
+ "peerDependenciesMeta": {
269
+ "@babel/core": {
270
+ "optional": true
271
+ },
272
+ "babel-plugin-macros": {
273
+ "optional": true
274
+ }
275
+ }
276
+ },
277
+ "node_modules/swr": {
278
+ "version": "1.3.0",
279
+ "resolved": "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz",
280
+ "integrity": "sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==",
281
+ "peerDependencies": {
282
+ "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
283
+ }
284
+ },
285
+ "node_modules/tslib": {
286
+ "version": "2.4.0",
287
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
288
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
289
+ "peer": true
290
+ },
291
+ "node_modules/type-detect": {
292
+ "version": "4.0.8",
293
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
294
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
295
+ "engines": {
296
+ "node": ">=4"
297
+ }
298
+ },
299
+ "node_modules/use-sync-external-store": {
300
+ "version": "1.2.0",
301
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
302
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
303
+ "peer": true,
304
+ "peerDependencies": {
305
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
306
+ }
307
+ },
308
+ "node_modules/uuid": {
309
+ "version": "9.0.0",
310
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
311
+ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
312
+ "bin": {
313
+ "uuid": "dist/bin/uuid"
314
+ }
315
+ }
316
+ },
317
+ "dependencies": {
318
+ "@next/env": {
319
+ "version": "12.3.1",
320
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz",
321
+ "integrity": "sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==",
322
+ "peer": true
323
+ },
324
+ "@next/swc-darwin-arm64": {
325
+ "version": "12.3.1",
326
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz",
327
+ "integrity": "sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==",
328
+ "optional": true,
329
+ "peer": true
330
+ },
331
+ "@swc/helpers": {
332
+ "version": "0.4.11",
333
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz",
334
+ "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==",
335
+ "peer": true,
336
+ "requires": {
337
+ "tslib": "^2.4.0"
338
+ }
339
+ },
340
+ "@types/bcryptjs": {
341
+ "version": "2.4.2",
342
+ "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
343
+ "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==",
344
+ "peer": true
345
+ },
346
+ "@zenstackhq/internal": {
347
+ "version": "0.1.21",
348
+ "resolved": "https://registry.npmjs.org/@zenstackhq/internal/-/internal-0.1.21.tgz",
349
+ "integrity": "sha512-N+7450WUFSOTS1ZU5ySJ/U+4CMZ8thg5ZFzy1FAMIFT67k08/7D4Cw1sbA1yqaH6v5Ynirj36VWf9LFmi90qQw==",
350
+ "requires": {
351
+ "bcryptjs": "^2.4.3",
352
+ "deepcopy": "^2.1.0",
353
+ "swr": "^1.3.0",
354
+ "uuid": "^9.0.0"
355
+ }
356
+ },
357
+ "bcryptjs": {
358
+ "version": "2.4.3",
359
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
360
+ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="
361
+ },
362
+ "caniuse-lite": {
363
+ "version": "1.0.30001418",
364
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz",
365
+ "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==",
366
+ "peer": true
367
+ },
368
+ "deepcopy": {
369
+ "version": "2.1.0",
370
+ "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz",
371
+ "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==",
372
+ "requires": {
373
+ "type-detect": "^4.0.8"
374
+ }
375
+ },
376
+ "js-tokens": {
377
+ "version": "4.0.0",
378
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
379
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
380
+ "peer": true
381
+ },
382
+ "loose-envify": {
383
+ "version": "1.4.0",
384
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
385
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
386
+ "peer": true,
387
+ "requires": {
388
+ "js-tokens": "^3.0.0 || ^4.0.0"
389
+ }
390
+ },
391
+ "nanoid": {
392
+ "version": "3.3.4",
393
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
394
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
395
+ "peer": true
396
+ },
397
+ "next": {
398
+ "version": "12.3.1",
399
+ "resolved": "https://registry.npmjs.org/next/-/next-12.3.1.tgz",
400
+ "integrity": "sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==",
401
+ "peer": true,
402
+ "requires": {
403
+ "@next/env": "12.3.1",
404
+ "@next/swc-android-arm-eabi": "12.3.1",
405
+ "@next/swc-android-arm64": "12.3.1",
406
+ "@next/swc-darwin-arm64": "12.3.1",
407
+ "@next/swc-darwin-x64": "12.3.1",
408
+ "@next/swc-freebsd-x64": "12.3.1",
409
+ "@next/swc-linux-arm-gnueabihf": "12.3.1",
410
+ "@next/swc-linux-arm64-gnu": "12.3.1",
411
+ "@next/swc-linux-arm64-musl": "12.3.1",
412
+ "@next/swc-linux-x64-gnu": "12.3.1",
413
+ "@next/swc-linux-x64-musl": "12.3.1",
414
+ "@next/swc-win32-arm64-msvc": "12.3.1",
415
+ "@next/swc-win32-ia32-msvc": "12.3.1",
416
+ "@next/swc-win32-x64-msvc": "12.3.1",
417
+ "@swc/helpers": "0.4.11",
418
+ "caniuse-lite": "^1.0.30001406",
419
+ "postcss": "8.4.14",
420
+ "styled-jsx": "5.0.7",
421
+ "use-sync-external-store": "1.2.0"
422
+ }
423
+ },
424
+ "picocolors": {
425
+ "version": "1.0.0",
426
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
427
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
428
+ "peer": true
429
+ },
430
+ "postcss": {
431
+ "version": "8.4.14",
432
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
433
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
434
+ "peer": true,
435
+ "requires": {
436
+ "nanoid": "^3.3.4",
437
+ "picocolors": "^1.0.0",
438
+ "source-map-js": "^1.0.2"
439
+ }
440
+ },
441
+ "react": {
442
+ "version": "18.2.0",
443
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
444
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
445
+ "peer": true,
446
+ "requires": {
447
+ "loose-envify": "^1.1.0"
448
+ }
449
+ },
450
+ "react-dom": {
451
+ "version": "18.2.0",
452
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
453
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
454
+ "peer": true,
455
+ "requires": {
456
+ "loose-envify": "^1.1.0",
457
+ "scheduler": "^0.23.0"
458
+ }
459
+ },
460
+ "scheduler": {
461
+ "version": "0.23.0",
462
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
463
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
464
+ "peer": true,
465
+ "requires": {
466
+ "loose-envify": "^1.1.0"
467
+ }
468
+ },
469
+ "source-map-js": {
470
+ "version": "1.0.2",
471
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
472
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
473
+ "peer": true
474
+ },
475
+ "styled-jsx": {
476
+ "version": "5.0.7",
477
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz",
478
+ "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==",
479
+ "peer": true,
480
+ "requires": {}
481
+ },
482
+ "swr": {
483
+ "version": "1.3.0",
484
+ "resolved": "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz",
485
+ "integrity": "sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==",
486
+ "requires": {}
487
+ },
488
+ "tslib": {
489
+ "version": "2.4.0",
490
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
491
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
492
+ "peer": true
493
+ },
494
+ "type-detect": {
495
+ "version": "4.0.8",
496
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
497
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
498
+ },
499
+ "use-sync-external-store": {
500
+ "version": "1.2.0",
501
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
502
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
503
+ "peer": true,
504
+ "requires": {}
505
+ },
506
+ "uuid": {
507
+ "version": "9.0.0",
508
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
509
+ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
510
+ }
511
+ }
512
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@zenstackhq/runtime",
3
+ "version": "0.1.19",
4
+ "description": "ZenStack generated runtime code",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "dependencies": {
8
+ "@zenstackhq/internal": "latest"
9
+ },
10
+ "peerDependencies": {
11
+ "@types/bcryptjs": "^2.4.2",
12
+ "bcryptjs": "^2.4.3"
13
+ },
14
+ "author": "ZenStack",
15
+ "license": "MIT"
16
+ }
@@ -0,0 +1 @@
1
+ export * from '@zenstackhq/internal';
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ ...require('@zenstackhq/internal'),
3
+ };
@@ -0,0 +1 @@
1
+ export * from '.zenstack/.prisma';
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ ...require('.zenstack/.prisma'),
3
+ };
@@ -0,0 +1,13 @@
1
+ {
2
+ "root": true,
3
+ "parser": "@typescript-eslint/parser",
4
+ "parserOptions": {
5
+ "ecmaVersion": 6,
6
+ "sourceType": "module"
7
+ },
8
+ "plugins": [
9
+ "@typescript-eslint"
10
+ ],
11
+ "rules": {
12
+ }
13
+ }
@@ -0,0 +1,4 @@
1
+ .vscode/**
2
+ .vscode-test/**
3
+ .gitignore
4
+ langium-quickstart.md
File without changes
@@ -0,0 +1,32 @@
1
+ /*
2
+ * For a detailed explanation regarding each configuration property and type check, visit:
3
+ * https://jestjs.io/docs/configuration
4
+ */
5
+
6
+ import tsconfig from './tsconfig.json';
7
+ const moduleNameMapper = require('tsconfig-paths-jest')(tsconfig);
8
+
9
+ export default {
10
+ // Automatically clear mock calls, instances, contexts and results before every test
11
+ clearMocks: true,
12
+
13
+ // Indicates whether the coverage information should be collected while executing the test
14
+ collectCoverage: true,
15
+
16
+ // The directory where Jest should output its coverage files
17
+ coverageDirectory: 'tests/coverage',
18
+
19
+ // An array of regexp pattern strings used to skip coverage collection
20
+ coveragePathIgnorePatterns: ['/node_modules/', '/tests/'],
21
+
22
+ // Indicates which provider should be used to instrument code for coverage
23
+ coverageProvider: 'v8',
24
+
25
+ // A list of reporter names that Jest uses when writing coverage reports
26
+ coverageReporters: ['json', 'text', 'lcov', 'clover'],
27
+
28
+ // A map from regular expressions to paths to transformers
29
+ transform: { '^.+\\.tsx?$': 'ts-jest' },
30
+
31
+ moduleNameMapper,
32
+ };
@@ -0,0 +1,14 @@
1
+ {
2
+ "projectName": "ZModel",
3
+ "languages": [
4
+ {
5
+ "id": "zmodel",
6
+ "grammar": "src/language-server/zmodel.langium",
7
+ "fileExtensions": [".zmodel"],
8
+ "textMate": {
9
+ "out": "syntaxes/zmodel.tmLanguage.json"
10
+ }
11
+ }
12
+ ],
13
+ "out": "src/language-server/generated"
14
+ }
@@ -0,0 +1,41 @@
1
+ # Welcome to your Langium VS Code Extension
2
+
3
+ ## What's in the folder
4
+
5
+ This folder contains all necessary files for your language extension.
6
+
7
+ - `package.json` - the manifest file in which you declare your language support.
8
+ - `language-configuration.json` - the language configuration used in the VS Code editor, defining the tokens that are used for comments and brackets.
9
+ - `src/extension.ts` - the main code of the extension, which is responsible for launching a language server and client.
10
+ - `src/language-server/zmodel.langium` - the grammar definition of your language.
11
+ - `src/language-server/main.ts` - the entry point of the language server process.
12
+ - `src/language-server/zmodel-module.ts` - the dependency injection module of your language implementation. Use this to register overridden and added services.
13
+ - `src/language-server/zmodel-validator.ts` - an example validator. You should change it to reflect the semantics of your language.
14
+ - `src/cli/index.ts` - the entry point of the command line interface (CLI) of your language.
15
+ - `src/cli/generator.ts` - the code generator used by the CLI to write output files from DSL documents.
16
+ - `src/cli/cli-util.ts` - utility code for the CLI.
17
+
18
+ ## Get up and running straight away
19
+
20
+ - Run `npm run langium:generate` to generate TypeScript code from the grammar definition.
21
+ - Run `npm run build` to compile all TypeScript code.
22
+ - Press `F5` to open a new window with your extension loaded.
23
+ - Create a new file with a file name suffix matching your language.
24
+ - Verify that syntax highlighting, validation, completion etc. are working as expected.
25
+ - Run `./bin/cli` to see options for the CLI; `./bin/cli generate <file>` generates code for a given DSL file.
26
+
27
+ ## Make changes
28
+
29
+ - Run `npm run watch` to have the TypeScript compiler run automatically after every change of the source files.
30
+ - Run `npm run langium:watch` to have the Langium generator run automatically afer every change of the grammar declaration.
31
+ - You can relaunch the extension from the debug toolbar after making changes to the files listed above.
32
+ - You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
33
+
34
+ ## Install your extension
35
+
36
+ - To start using your extension with VS Code, copy it into the `<user home>/.vscode/extensions` folder and restart Code.
37
+ - To share your extension with the world, read the [VS Code documentation](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) about publishing an extension.
38
+
39
+ ## To Go Further
40
+
41
+ Documentation about the Langium framework is available at https://langium.org