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
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2022 zenstack-hq
3
+ Copyright (c) 2022 ZenStack
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1 +1,194 @@
1
- <h1>ZenStack</h1>
1
+ <div align="center">
2
+ <a href="https://zenstack.dev">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/zenstackhq/zenstack-docs/main/static/img/logo-dark.png">
5
+ <img src="https://raw.githubusercontent.com/zenstackhq/zenstack-docs/main/static/img/logo.png" height="128">
6
+ </picture>
7
+ </a>
8
+ <h1>ZenStack</h1>
9
+ <a href="https://www.npmjs.com/package/zenstack">
10
+ <img src="https://img.shields.io/npm/v/zenstack">
11
+ </a>
12
+ <img src="https://github.com/zenstackhq/zenstack/actions/workflows/build-test.yml/badge.svg">
13
+ <a href="https://twitter.com/zenstackhq">
14
+ <img src="https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Fgithub.com%2Fzenstackhq%2Fzenstack">
15
+ </a>
16
+ <a href="https://go.zenstack.dev/chat">
17
+ <img src="https://img.shields.io/discord/1035538056146595961">
18
+ </a>
19
+ <a href="https://github.com/zenstackhq/zenstack/blob/main/LICENSE">
20
+ <img src="https://img.shields.io/badge/license-MIT-green">
21
+ </a>
22
+ </div>
23
+
24
+ ## What it is
25
+
26
+ ZenStack is a Node.js/TypeScript toolkit that simplifies the development of a web app's backend. It supercharges [Prisma ORM](https://prisma.io) with a powerful access control layer and unleashes its full potential for full-stack development.
27
+
28
+ Our goal is to let you save time writing boilerplate code and focus on building real features!
29
+
30
+ ## How it works
31
+
32
+ > Read full documentation at 👉🏻 [zenstack.dev](https://zenstack.dev).
33
+
34
+ ZenStack incrementally extends Prisma's power with the following four layers:
35
+
36
+ ### 1. ZModel - an extended Prisma schema language
37
+
38
+ ZenStack introduces a data modeling language called "ZModel" - a superset of Prisma schema language. It extended Prisma schema with custom attributes and functions and, based on that, implemented a flexible access control layer around Prisma.
39
+
40
+ ```prisma
41
+ // schema.zmodel
42
+
43
+ model Post {
44
+ id String @id
45
+ title String
46
+ published Boolean @default(false)
47
+ author User @relation(fields: [authorId], references: [id])
48
+ authorId String
49
+
50
+ // 🔐 allow logged-in users to read published posts
51
+ @@allow('read', auth() != null && published)
52
+
53
+ // 🔐 allow full CRUD by author
54
+ @@allow('all', author == auth())
55
+ }
56
+ ```
57
+
58
+ The `zenstack` CLI transpiles the ZModel into a standard Prisma schema, which you can use with the regular Prisma workflows.
59
+
60
+ ### 2. Runtime enhancements to Prisma client
61
+
62
+ At runtime, transparent proxies are created around Prisma clients for intercepting queries and mutations to enforce access policies.
63
+
64
+ ```ts
65
+ import { enhance } from '@zenstackhq/runtime';
66
+
67
+ // a regular Prisma client
68
+ const prisma = new PrismaClient();
69
+
70
+ async function getPosts(userId: string) {
71
+ // create an enhanced Prisma client that has access control enabled
72
+ const enhanced = enhance(prisma, { user: userId });
73
+
74
+ // only posts that're visible to the user will be returned
75
+ return enhanced.post.findMany();
76
+ }
77
+ ```
78
+
79
+ ### 3. Automatic RESTful APIs through server adapters
80
+
81
+ Server adapter packages help you wrap an access-control-enabled Prisma client into backend CRUD APIs that can be safely called from the frontend. Here's an example for Next.js:
82
+
83
+ ```ts
84
+ // pages/api/model/[...path].ts
85
+
86
+ import { requestHandler } from '@zenstackhq/next';
87
+ import { enhance } from '@zenstackhq/runtime';
88
+ import { getSessionUser } from '@lib/auth';
89
+ import { prisma } from '@lib/db';
90
+
91
+ // Mount Prisma-style APIs: "/api/model/post/findMany", "/api/model/post/create", etc.
92
+ // Can be configured to provide standard RESTful APIs (using JSON:API) instead.
93
+ export default requestHandler({
94
+ getPrisma: (req, res) => enhance(prisma, { user: getSessionUser(req, res) }),
95
+ });
96
+ ```
97
+
98
+ ### 4. Generated client libraries (hooks) for data access
99
+
100
+ Plugins can generate strong-typed client libraries that talk to the aforementioned APIs. Here's an example for React:
101
+
102
+ ```tsx
103
+ // components/MyPosts.tsx
104
+
105
+ import { useFindManyPost } from '@lib/hooks';
106
+
107
+ const MyPosts = () => {
108
+ // list all posts that're visible to the current user, together with their authors
109
+ const { data: posts } = useFindManyPost({
110
+ include: { author: true },
111
+ orderBy: { createdAt: 'desc' },
112
+ });
113
+
114
+ return (
115
+ <ul>
116
+ {posts?.map((post) => (
117
+ <li key={post.id}>
118
+ {post.title} by {post.author.name}
119
+ </li>
120
+ ))}
121
+ </ul>
122
+ );
123
+ };
124
+ ```
125
+
126
+ ## Architecture
127
+
128
+ The following diagram gives a high-level architecture overview of ZenStack.
129
+
130
+ ![Architecture](https://zenstack.dev/img/architecture-light.png)
131
+
132
+ ## Links
133
+
134
+ - [Home](https://zenstack.dev)
135
+ - [Documentation](https://zenstack.dev/docs)
136
+ - [Community chat](https://go.zenstack.dev/chat)
137
+ - [Twitter](https://twitter.com/zenstackhq)
138
+ - [Blog](https://zenstack.dev/blog)
139
+
140
+ ## Features
141
+
142
+ - Access control and data validation rules right inside your Prisma schema
143
+ - Auto-generated OpenAPI (RESTful) specifications, services, and client libraries
144
+ - End-to-end type safety
145
+ - Extensible: custom attributes, functions, and a plugin system
146
+ - A framework-agnostic core with framework-specific adapters
147
+ - Uncompromised performance
148
+
149
+ ### Plugins
150
+
151
+ - Prisma schema generator
152
+ - Zod schema generator
153
+ - [SWR](https://github.com/vercel/swr) and [TanStack Query](https://github.com/TanStack/query) hooks generator
154
+ - OpenAPI specification generator
155
+ - [tRPC](https://trpc.io) router generator
156
+ - 🙋🏻 [Request for a plugin](https://go.zenstack.dev/chat)
157
+
158
+ ### Framework adapters
159
+
160
+ - [Next.js](https://zenstack.dev/docs/reference/server-adapters/next) (including support for the new "app directory" in Next.js 13)
161
+ - [SvelteKit](https://zenstack.dev/docs/reference/server-adapters/sveltekit)
162
+ - [Fastify](https://zenstack.dev/docs/reference/server-adapters/fastify)
163
+ - [ExpressJS](https://zenstack.dev/docs/reference/server-adapters/express)
164
+ - Nuxt.js (Future)
165
+ - 🙋🏻 [Request for an adapter](https://go.zenstack.dev/chat)
166
+
167
+ ### Prisma schema extensions
168
+
169
+ - [Custom attributes and functions](https://zenstack.dev/docs/reference/zmodel-language#custom-attributes-and-functions)
170
+ - [Multi-file schema and model inheritance](https://zenstack.dev/docs/guides/multiple-schema)
171
+ - Strong-typed JSON field (coming soon)
172
+ - Polymorphism (future)
173
+ - 🙋🏻 [Request for an extension](https://go.zenstack.dev/chat)
174
+
175
+ ## Examples
176
+
177
+ Check out the [Collaborative Todo App](https://zenstack-todo.vercel.app/) for a running example. You can find different implementations below:
178
+
179
+ - [Next.js + SWR hooks](https://github.com/zenstackhq/sample-todo-nextjs)
180
+ - [Next.js + TanStack Query](https://github.com/zenstackhq/sample-todo-nextjs-tanstack)
181
+ - [Next.js + tRPC](https://github.com/zenstackhq/sample-todo-trpc)
182
+ - [SvelteKit + TanStack Query](https://github.com/zenstackhq/sample-todo-sveltekit)
183
+
184
+ ## Community
185
+
186
+ Join our [discord server](https://discord.gg/Ykhr738dUe) for chat and updates!
187
+
188
+ ## Contributing
189
+
190
+ If you like ZenStack, join us to make it a better tool! Please use the [Contributing Guide](CONTRIBUTING.md) for details on how to get started, and don't hesitate to join [Discord](https://discord.gg/Ykhr738dUe) to share your thoughts.
191
+
192
+ ## License
193
+
194
+ [MIT](LICENSE)
package/bin/cli ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ require('../cli').default();
@@ -0,0 +1,24 @@
1
+ try {
2
+ if (process.env.DO_NOT_TRACK == '1') {
3
+ process.exit(0);
4
+ }
5
+
6
+ const Mixpanel = require('mixpanel');
7
+ const machineId = require('node-machine-id');
8
+ const os = require('os');
9
+
10
+ const mixpanel = Mixpanel.init('74944eb779d7d3b4ce185be843fde9fc', {
11
+ geolocate: true,
12
+ });
13
+
14
+ const version = require('../package.json').version;
15
+ const payload = {
16
+ distinct_id: machineId.machineIdSync(),
17
+ nodeVersion: process.version,
18
+ time: new Date(),
19
+ $os: os.platform(),
20
+ version,
21
+ };
22
+
23
+ mixpanel.track('npm:install', payload);
24
+ } catch {}
@@ -0,0 +1,13 @@
1
+ declare type Options = {
2
+ schema: string;
3
+ output?: string;
4
+ dependencyCheck: boolean;
5
+ versionCheck: boolean;
6
+ compile: boolean;
7
+ defaultPlugins: boolean;
8
+ };
9
+ /**
10
+ * CLI action for generating code from schema
11
+ */
12
+ export declare function generate(projectPath: string, options: Options): Promise<void>;
13
+ export {};
@@ -0,0 +1,71 @@
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
+ exports.generate = void 0;
16
+ const sdk_1 = require("@zenstackhq/sdk");
17
+ const colors_1 = __importDefault(require("colors"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const cli_error_1 = require("../cli-error");
20
+ const cli_util_1 = require("../cli-util");
21
+ const plugin_runner_1 = require("../plugin-runner");
22
+ /**
23
+ * CLI action for generating code from schema
24
+ */
25
+ function generate(projectPath, options) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ if (options.dependencyCheck) {
28
+ (0, cli_util_1.checkRequiredPackage)('prisma', cli_util_1.requiredPrismaVersion);
29
+ (0, cli_util_1.checkRequiredPackage)('@prisma/client', cli_util_1.requiredPrismaVersion);
30
+ }
31
+ // check for multiple versions of Zenstack packages
32
+ const packages = (0, cli_util_1.getZenStackPackages)(projectPath);
33
+ if (packages) {
34
+ const versions = new Set(packages.map((p) => p.version));
35
+ if (versions.size > 1) {
36
+ console.warn(colors_1.default.yellow('WARNING: Multiple versions of Zenstack packages detected. Run "zenstack info" to see details.'));
37
+ }
38
+ }
39
+ const tasks = [runPlugins(options)];
40
+ if (options.versionCheck) {
41
+ tasks.push((0, cli_util_1.checkNewVersion)());
42
+ }
43
+ yield Promise.all(tasks);
44
+ });
45
+ }
46
+ exports.generate = generate;
47
+ function runPlugins(options) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const model = yield (0, cli_util_1.loadDocument)(options.schema);
50
+ const runnerOpts = {
51
+ schema: model,
52
+ schemaPath: path_1.default.resolve(options.schema),
53
+ defaultPlugins: options.defaultPlugins,
54
+ output: options.output,
55
+ compile: options.compile,
56
+ };
57
+ try {
58
+ yield new plugin_runner_1.PluginRunner().run(runnerOpts);
59
+ }
60
+ catch (err) {
61
+ if (err instanceof sdk_1.PluginError) {
62
+ console.error(colors_1.default.red(`${err.plugin}: ${err.message}`));
63
+ throw new cli_error_1.CliError(err.message);
64
+ }
65
+ else {
66
+ throw err;
67
+ }
68
+ }
69
+ });
70
+ }
71
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/actions/generate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA8C;AAC9C,oDAA4B;AAC5B,gDAAwB;AACxB,4CAAwC;AACxC,0CAMqB;AACrB,oDAAqE;AAWrE;;GAEG;AACH,SAAsB,QAAQ,CAAC,WAAmB,EAAE,OAAgB;;QAChE,IAAI,OAAO,CAAC,eAAe,EAAE;YACzB,IAAA,+BAAoB,EAAC,QAAQ,EAAE,gCAAqB,CAAC,CAAC;YACtD,IAAA,+BAAoB,EAAC,gBAAgB,EAAE,gCAAqB,CAAC,CAAC;SACjE;QAED,mDAAmD;QACnD,MAAM,QAAQ,GAAG,IAAA,8BAAmB,EAAC,WAAW,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE;YACV,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACjE,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;gBACnB,OAAO,CAAC,IAAI,CACR,gBAAM,CAAC,MAAM,CACT,+FAA+F,CAClG,CACJ,CAAC;aACL;SACJ;QAED,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAEpC,IAAI,OAAO,CAAC,YAAY,EAAE;YACtB,KAAK,CAAC,IAAI,CAAC,IAAA,0BAAe,GAAE,CAAC,CAAC;SACjC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;CAAA;AA1BD,4BA0BC;AAED,SAAe,UAAU,CAAC,OAAgB;;QACtC,MAAM,KAAK,GAAG,MAAM,IAAA,uBAAY,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAwB;YACpC,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACxC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC;QAEF,IAAI;YACA,MAAM,IAAI,4BAAY,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC5C;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,YAAY,iBAAW,EAAE;gBAC5B,OAAO,CAAC,KAAK,CAAC,gBAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC3D,MAAM,IAAI,oBAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACnC;iBAAM;gBACH,MAAM,GAAG,CAAC;aACb;SACJ;IACL,CAAC;CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './generate';
2
+ export * from './info';
3
+ export * from './init';
@@ -0,0 +1,20 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./generate"), exports);
18
+ __exportStar(require("./info"), exports);
19
+ __exportStar(require("./init"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,yCAAuB;AACvB,yCAAuB"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * CLI action for getting information about installed ZenStack packages
3
+ */
4
+ export declare function info(projectPath: string): Promise<void>;
@@ -0,0 +1,63 @@
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
+ exports.info = void 0;
16
+ const colors_1 = __importDefault(require("colors"));
17
+ const get_latest_version_1 = __importDefault(require("get-latest-version"));
18
+ const ora_1 = __importDefault(require("ora"));
19
+ const semver_1 = __importDefault(require("semver"));
20
+ const cli_util_1 = require("../cli-util");
21
+ /**
22
+ * CLI action for getting information about installed ZenStack packages
23
+ */
24
+ function info(projectPath) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ const packages = (0, cli_util_1.getZenStackPackages)(projectPath);
27
+ if (!packages) {
28
+ console.error('Unable to locate package.json. Are you in a valid project directory?');
29
+ return;
30
+ }
31
+ console.log('Installed ZenStack Packages:');
32
+ const versions = new Set();
33
+ for (const { pkg, version } of packages) {
34
+ versions.add(version);
35
+ console.log(` ${colors_1.default.green(pkg.padEnd(20))}\t${version}`);
36
+ }
37
+ if (versions.size > 1) {
38
+ console.warn(colors_1.default.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));
39
+ }
40
+ else if (versions.size > 0) {
41
+ const spinner = (0, ora_1.default)('Checking npm registry').start();
42
+ const latest = yield (0, get_latest_version_1.default)('zenstack');
43
+ if (!latest) {
44
+ spinner.fail('unable to check for latest version');
45
+ }
46
+ else {
47
+ spinner.succeed();
48
+ const version = [...versions][0];
49
+ if (semver_1.default.gt(latest, version)) {
50
+ console.log(`A newer version of Zenstack is available: ${latest}.`);
51
+ }
52
+ else if (semver_1.default.gt(version, latest)) {
53
+ console.log('You are using a pre-release version of Zenstack.');
54
+ }
55
+ else {
56
+ console.log('You are using the latest version of Zenstack.');
57
+ }
58
+ }
59
+ }
60
+ });
61
+ }
62
+ exports.info = info;
63
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/actions/info.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,4EAAkD;AAClD,8CAAsB;AACtB,oDAA4B;AAC5B,0CAAkD;AAElD;;GAEG;AACH,SAAsB,IAAI,CAAC,WAAmB;;QAC1C,MAAM,QAAQ,GAAG,IAAA,8BAAmB,EAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACtF,OAAO;SACV;QAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE;YACrC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,OAAO,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;SAClE;QAED,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,gBAAM,CAAC,MAAM,CAAC,kFAAkF,CAAC,CAAC,CAAC;SACnH;aAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAgB,EAAC,UAAU,CAAC,CAAC;YAElD,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;aACtD;iBAAM;gBACH,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,gBAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;oBAC5B,OAAO,CAAC,GAAG,CAAC,6CAA6C,MAAM,GAAG,CAAC,CAAC;iBACvE;qBAAM,IAAI,gBAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;oBACnC,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;iBACnE;qBAAM;oBACH,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;iBAChE;aACJ;SACJ;IACL,CAAC;CAAA;AAlCD,oBAkCC"}
@@ -0,0 +1,12 @@
1
+ import { PackageManagers } from '../../utils/pkg-utils';
2
+ declare type Options = {
3
+ prisma: string | undefined;
4
+ packageManager: PackageManagers | undefined;
5
+ versionCheck: boolean;
6
+ tag?: string;
7
+ };
8
+ /**
9
+ * CLI action for initializing an existing project
10
+ */
11
+ export declare function init(projectPath: string, options: Options): Promise<void>;
12
+ export {};
@@ -0,0 +1,83 @@
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
+ exports.init = void 0;
16
+ const colors_1 = __importDefault(require("colors"));
17
+ const fs_1 = __importDefault(require("fs"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const pkg_utils_1 = require("../../utils/pkg-utils");
20
+ const version_utils_1 = require("../../utils/version-utils");
21
+ const cli_error_1 = require("../cli-error");
22
+ const cli_util_1 = require("../cli-util");
23
+ /**
24
+ * CLI action for initializing an existing project
25
+ */
26
+ function init(projectPath, options) {
27
+ var _a;
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ if (!fs_1.default.existsSync(projectPath)) {
30
+ console.error(`Path does not exist: ${projectPath}`);
31
+ throw new cli_error_1.CliError('project path does not exist');
32
+ }
33
+ const defaultPrismaSchemaLocation = './prisma/schema.prisma';
34
+ let prismaSchema = options.prisma;
35
+ if (prismaSchema) {
36
+ if (!fs_1.default.existsSync(prismaSchema)) {
37
+ console.error(`Prisma schema file does not exist: ${prismaSchema}`);
38
+ throw new cli_error_1.CliError('prisma schema does not exist');
39
+ }
40
+ }
41
+ else if (fs_1.default.existsSync(defaultPrismaSchemaLocation)) {
42
+ prismaSchema = defaultPrismaSchemaLocation;
43
+ }
44
+ const zmodelFile = path_1.default.join(projectPath, './schema.zmodel');
45
+ let sampleModelGenerated = false;
46
+ if (fs_1.default.existsSync(zmodelFile)) {
47
+ console.warn(`ZenStack model already exists at ${zmodelFile}, not generating a new one.`);
48
+ }
49
+ else {
50
+ if (prismaSchema) {
51
+ // copy over schema.prisma
52
+ fs_1.default.copyFileSync(prismaSchema, zmodelFile);
53
+ }
54
+ else {
55
+ // create a new model
56
+ const starterContent = fs_1.default.readFileSync(path_1.default.join(__dirname, '../../res/starter.zmodel'), 'utf-8');
57
+ fs_1.default.writeFileSync(zmodelFile, starterContent);
58
+ sampleModelGenerated = true;
59
+ }
60
+ }
61
+ (0, pkg_utils_1.ensurePackage)('prisma', true, options.packageManager, 'latest', projectPath);
62
+ (0, pkg_utils_1.ensurePackage)('@prisma/client', false, options.packageManager, 'latest', projectPath);
63
+ const tag = (_a = options.tag) !== null && _a !== void 0 ? _a : (0, version_utils_1.getVersion)();
64
+ (0, pkg_utils_1.installPackage)('zenstack', true, options.packageManager, tag, projectPath);
65
+ (0, pkg_utils_1.installPackage)('@zenstackhq/runtime', false, options.packageManager, tag, projectPath);
66
+ if (sampleModelGenerated) {
67
+ console.log(`Sample model generated at: ${colors_1.default.blue(zmodelFile)}
68
+
69
+ Please check the following guide on how to model your app:
70
+ https://zenstack.dev/#/modeling-your-app.`);
71
+ }
72
+ else if (prismaSchema) {
73
+ console.log(`Your current Prisma schema "${prismaSchema}" has been copied to "${zmodelFile}".
74
+ Moving forward please edit this file and run "zenstack generate" to regenerate Prisma schema.`);
75
+ }
76
+ console.log(colors_1.default.green('\nProject initialized successfully!'));
77
+ if (options.versionCheck) {
78
+ yield (0, cli_util_1.checkNewVersion)();
79
+ }
80
+ });
81
+ }
82
+ exports.init = init;
83
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/actions/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AACxB,qDAAuF;AACvF,6DAAuD;AACvD,4CAAwC;AACxC,0CAA8C;AAS9C;;GAEG;AACH,SAAsB,IAAI,CAAC,WAAmB,EAAE,OAAgB;;;QAC5D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YAC7B,OAAO,CAAC,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;YACrD,MAAM,IAAI,oBAAQ,CAAC,6BAA6B,CAAC,CAAC;SACrD;QAED,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;QAC7D,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBAC9B,OAAO,CAAC,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;gBACpE,MAAM,IAAI,oBAAQ,CAAC,8BAA8B,CAAC,CAAC;aACtD;SACJ;aAAM,IAAI,YAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAAE;YACnD,YAAY,GAAG,2BAA2B,CAAC;SAC9C;QAED,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC7D,IAAI,oBAAoB,GAAG,KAAK,CAAC;QAEjC,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,oCAAoC,UAAU,6BAA6B,CAAC,CAAC;SAC7F;aAAM;YACH,IAAI,YAAY,EAAE;gBACd,0BAA0B;gBAC1B,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;aAC7C;iBAAM;gBACH,qBAAqB;gBACrB,MAAM,cAAc,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,EAAE,OAAO,CAAC,CAAC;gBAClG,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBAC7C,oBAAoB,GAAG,IAAI,CAAC;aAC/B;SACJ;QAED,IAAA,yBAAa,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC7E,IAAA,yBAAa,EAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEtF,MAAM,GAAG,GAAG,MAAA,OAAO,CAAC,GAAG,mCAAI,IAAA,0BAAU,GAAE,CAAC;QACxC,IAAA,0BAAc,EAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAA,0BAAc,EAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QAEvF,IAAI,oBAAoB,EAAE;YACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,gBAAM,CAAC,IAAI,CAAC,UAAU,CAAC;;;8CAG3B,CAAC,CAAC;SAC3C;aAAM,IAAI,YAAY,EAAE;YACrB,OAAO,CAAC,GAAG,CACP,+BAA+B,YAAY,yBAAyB,UAAU;8FACI,CACrF,CAAC;SACL;QAED,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,YAAY,EAAE;YACtB,MAAM,IAAA,0BAAe,GAAE,CAAC;SAC3B;;CACJ;AA1DD,oBA0DC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Indicating an error during CLI execution
3
+ */
4
+ export declare class CliError extends Error {
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliError = void 0;
4
+ /**
5
+ * Indicating an error during CLI execution
6
+ */
7
+ class CliError extends Error {
8
+ }
9
+ exports.CliError = CliError;
10
+ //# sourceMappingURL=cli-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-error.js","sourceRoot":"","sources":["../../src/cli/cli-error.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;CAAG;AAAtC,4BAAsC"}
@@ -0,0 +1,21 @@
1
+ import { Model } from '@zenstackhq/language/ast';
2
+ import { LangiumDocument, LangiumDocuments } from 'langium';
3
+ import { URI } from 'vscode-uri';
4
+ import { ZModelServices } from '../language-server/zmodel-module';
5
+ export declare const requiredPrismaVersion = "4.8.0";
6
+ /**
7
+ * Loads a zmodel document from a file.
8
+ * @param fileName File name
9
+ * @param services Language services
10
+ * @returns Parsed and validated AST
11
+ */
12
+ export declare function loadDocument(fileName: string): Promise<Model>;
13
+ export declare function eagerLoadAllImports(document: LangiumDocument, documents: LangiumDocuments, uris?: Set<string>): URI[];
14
+ export declare function mergeImportsDeclarations(documents: LangiumDocuments, model: Model): void;
15
+ export declare function getPluginDocuments(services: ZModelServices, fileName: string): Promise<LangiumDocument[]>;
16
+ export declare function getZenStackPackages(projectPath: string): {
17
+ pkg: string;
18
+ version: any;
19
+ }[] | undefined;
20
+ export declare function checkRequiredPackage(packageName: string, minVersion?: string): void;
21
+ export declare function checkNewVersion(): Promise<void>;