zenstack 0.6.0-pre.8 → 1.0.0-alpha.100

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 (161) hide show
  1. package/README.md +111 -10
  2. package/cli/cli-error.d.ts +5 -0
  3. package/cli/cli-error.js +10 -0
  4. package/cli/cli-error.js.map +1 -0
  5. package/cli/cli-util.d.ts +21 -0
  6. package/cli/cli-util.js +239 -0
  7. package/cli/cli-util.js.map +1 -0
  8. package/cli/config.d.ts +19 -0
  9. package/cli/config.js +41 -0
  10. package/cli/config.js.map +1 -0
  11. package/cli/index.d.ts +16 -0
  12. package/cli/index.js +143 -6524
  13. package/cli/index.js.map +1 -0
  14. package/cli/plugin-runner.d.ts +14 -0
  15. package/cli/plugin-runner.js +146 -0
  16. package/cli/plugin-runner.js.map +1 -0
  17. package/constants.d.ts +1 -0
  18. package/constants.js +6 -0
  19. package/constants.js.map +1 -0
  20. package/language-server/constants.d.ts +26 -0
  21. package/language-server/constants.js +40 -0
  22. package/language-server/constants.js.map +1 -0
  23. package/language-server/main.d.ts +1 -0
  24. package/language-server/main.js +13 -6436
  25. package/language-server/main.js.map +1 -0
  26. package/language-server/types.d.ts +10 -0
  27. package/language-server/types.js +3 -0
  28. package/language-server/types.js.map +1 -0
  29. package/language-server/utils.d.ts +18 -0
  30. package/language-server/utils.js +58 -0
  31. package/language-server/utils.js.map +1 -0
  32. package/language-server/validator/attribute-validator.d.ts +9 -0
  33. package/language-server/validator/attribute-validator.js +11 -0
  34. package/language-server/validator/attribute-validator.js.map +1 -0
  35. package/language-server/validator/datamodel-validator.d.ts +15 -0
  36. package/language-server/validator/datamodel-validator.js +280 -0
  37. package/language-server/validator/datamodel-validator.js.map +1 -0
  38. package/language-server/validator/datasource-validator.d.ts +12 -0
  39. package/language-server/validator/datasource-validator.js +66 -0
  40. package/language-server/validator/datasource-validator.js.map +1 -0
  41. package/language-server/validator/enum-validator.d.ts +11 -0
  42. package/language-server/validator/enum-validator.js +28 -0
  43. package/language-server/validator/enum-validator.js.map +1 -0
  44. package/language-server/validator/expression-validator.d.ts +11 -0
  45. package/language-server/validator/expression-validator.js +57 -0
  46. package/language-server/validator/expression-validator.js.map +1 -0
  47. package/language-server/validator/function-invocation-validator.d.ts +11 -0
  48. package/language-server/validator/function-invocation-validator.js +110 -0
  49. package/language-server/validator/function-invocation-validator.js.map +1 -0
  50. package/language-server/validator/schema-validator.d.ts +10 -0
  51. package/language-server/validator/schema-validator.js +29 -0
  52. package/language-server/validator/schema-validator.js.map +1 -0
  53. package/language-server/validator/utils.d.ts +25 -0
  54. package/language-server/validator/utils.js +261 -0
  55. package/language-server/validator/utils.js.map +1 -0
  56. package/language-server/validator/zmodel-validator.d.ts +22 -0
  57. package/language-server/validator/zmodel-validator.js +74 -0
  58. package/language-server/validator/zmodel-validator.js.map +1 -0
  59. package/language-server/zmodel-code-action.d.ts +14 -0
  60. package/language-server/zmodel-code-action.js +109 -0
  61. package/language-server/zmodel-code-action.js.map +1 -0
  62. package/language-server/zmodel-formatter.d.ts +9 -0
  63. package/language-server/zmodel-formatter.js +76 -0
  64. package/language-server/zmodel-formatter.js.map +1 -0
  65. package/language-server/zmodel-linker.d.ts +30 -0
  66. package/language-server/zmodel-linker.js +375 -0
  67. package/language-server/zmodel-linker.js.map +1 -0
  68. package/language-server/zmodel-module.d.ts +41 -0
  69. package/language-server/zmodel-module.js +80 -0
  70. package/language-server/zmodel-module.js.map +1 -0
  71. package/language-server/zmodel-scope.d.ts +10 -0
  72. package/language-server/zmodel-scope.js +44 -0
  73. package/language-server/zmodel-scope.js.map +1 -0
  74. package/language-server/zmodel-workspace-manager.d.ts +12 -0
  75. package/language-server/zmodel-workspace-manager.js +138 -0
  76. package/language-server/zmodel-workspace-manager.js.map +1 -0
  77. package/package.json +31 -23
  78. package/plugins/access-policy/expression-writer.d.ts +41 -0
  79. package/plugins/access-policy/expression-writer.js +475 -0
  80. package/plugins/access-policy/expression-writer.js.map +1 -0
  81. package/plugins/access-policy/index.d.ts +4 -0
  82. package/plugins/access-policy/index.js +24 -0
  83. package/plugins/access-policy/index.js.map +1 -0
  84. package/plugins/access-policy/policy-guard-generator.d.ts +15 -0
  85. package/plugins/access-policy/policy-guard-generator.js +350 -0
  86. package/plugins/access-policy/policy-guard-generator.js.map +1 -0
  87. package/plugins/access-policy/typescript-expression-transformer.d.ts +28 -0
  88. package/plugins/access-policy/typescript-expression-transformer.js +121 -0
  89. package/plugins/access-policy/typescript-expression-transformer.js.map +1 -0
  90. package/plugins/access-policy/utils.d.ts +5 -0
  91. package/plugins/access-policy/utils.js +14 -0
  92. package/plugins/access-policy/utils.js.map +1 -0
  93. package/plugins/access-policy/zod-schema-generator.d.ts +12 -0
  94. package/plugins/access-policy/zod-schema-generator.js +157 -0
  95. package/plugins/access-policy/zod-schema-generator.js.map +1 -0
  96. package/plugins/model-meta/index.d.ts +4 -0
  97. package/plugins/model-meta/index.js +172 -0
  98. package/plugins/model-meta/index.js.map +1 -0
  99. package/plugins/plugin-utils.d.ts +15 -0
  100. package/plugins/plugin-utils.js +53 -0
  101. package/plugins/plugin-utils.js.map +1 -0
  102. package/plugins/prisma/indent-string.d.ts +4 -0
  103. package/plugins/prisma/indent-string.js +12 -0
  104. package/plugins/prisma/indent-string.js.map +1 -0
  105. package/plugins/prisma/index.d.ts +5 -0
  106. package/plugins/prisma/index.js +24 -3740
  107. package/plugins/prisma/index.js.map +1 -0
  108. package/plugins/prisma/prisma-builder.d.ts +152 -0
  109. package/plugins/prisma/prisma-builder.js +363 -0
  110. package/plugins/prisma/prisma-builder.js.map +1 -0
  111. package/plugins/prisma/schema-generator.d.ts +25 -0
  112. package/plugins/prisma/schema-generator.js +306 -0
  113. package/plugins/prisma/schema-generator.js.map +1 -0
  114. package/plugins/prisma/zmodel-code-generator.d.ts +30 -0
  115. package/plugins/prisma/zmodel-code-generator.js +122 -0
  116. package/plugins/prisma/zmodel-code-generator.js.map +1 -0
  117. package/plugins/zod/generator.d.ts +4 -0
  118. package/plugins/zod/generator.js +102 -0
  119. package/plugins/zod/generator.js.map +1 -0
  120. package/plugins/zod/index.d.ts +5 -0
  121. package/plugins/zod/index.js +21 -4808
  122. package/plugins/zod/index.js.map +1 -0
  123. package/plugins/zod/transformer.d.ts +67 -0
  124. package/plugins/zod/transformer.js +452 -0
  125. package/plugins/zod/transformer.js.map +1 -0
  126. package/plugins/zod/types.d.ts +22 -0
  127. package/plugins/zod/types.js +3 -0
  128. package/plugins/zod/types.js.map +1 -0
  129. package/plugins/zod/utils/removeDir.d.ts +1 -0
  130. package/plugins/zod/utils/removeDir.js +30 -0
  131. package/plugins/zod/utils/removeDir.js.map +1 -0
  132. package/res/prism-zmodel.js +2 -4
  133. package/res/starter.zmodel +51 -0
  134. package/res/stdlib.zmodel +194 -8
  135. package/telemetry.d.ts +20 -0
  136. package/telemetry.js +127 -0
  137. package/telemetry.js.map +1 -0
  138. package/types.d.ts +12 -0
  139. package/types.js +3 -0
  140. package/types.js.map +1 -0
  141. package/utils/ast-utils.d.ts +5 -0
  142. package/utils/ast-utils.js +49 -0
  143. package/utils/ast-utils.js.map +1 -0
  144. package/utils/exec-utils.d.ts +6 -0
  145. package/utils/exec-utils.js +13 -0
  146. package/utils/exec-utils.js.map +1 -0
  147. package/utils/pkg-utils.d.ts +3 -0
  148. package/utils/pkg-utils.js +64 -0
  149. package/utils/pkg-utils.js.map +1 -0
  150. package/utils/version-utils.d.ts +1 -0
  151. package/utils/version-utils.js +14 -0
  152. package/utils/version-utils.js.map +1 -0
  153. package/asset/logo-256-bg.png +0 -0
  154. package/asset/logo-dark-256.png +0 -0
  155. package/asset/logo-light-256.png +0 -0
  156. package/extension.js +0 -39
  157. package/plugins/policy-guard/index.js +0 -4289
  158. package/plugins/react-hooks/index.js +0 -4318
  159. package/plugins/trpc/index.js +0 -5386
  160. package/res/package.template.json +0 -9
  161. package/res/tsconfig.template.json +0 -17
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  <div align="center">
2
- <img src="https://user-images.githubusercontent.com/104139426/204459273-35c65630-9faf-42bb-bd2c-07c1580a0772.png" style="max-width: 512px; width: 100%; height: auto; margin-bottom: 1rem;"
2
+ <a href="https://zenstack.dev">
3
+ <img src="https://user-images.githubusercontent.com/104139426/214809937-4ed30485-a683-4fea-b737-928c48e86fd7.png" style="max-width: 512px; width: 100%; height: auto; margin-bottom: 1rem;"
3
4
  >
5
+ </a>
4
6
  <div></div>
5
7
  <a href="https://www.npmjs.com/package/zenstack">
6
8
  <img src="https://img.shields.io/npm/v/zenstack">
@@ -19,29 +21,128 @@
19
21
 
20
22
  ## What it is
21
23
 
22
- ZenStack is a toolkit for building secure CRUD apps with Next.js + Typescript. It lets you define data models, relations and access policies all in one place, and generates database schema, backend CRUD services and frontend React hooks for you automatically.
24
+ ZenStack is a 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 web development.
23
25
 
24
26
  Our goal is to let you save time writing boilerplate code and focus on building real features!
25
27
 
28
+ ## How it works
29
+
30
+ ZenStack extended Prisma schema language for supporting custom attributes and functions and, based on that, implemented a flexible access control layer around Prisma.
31
+
32
+ ```prisma
33
+ // schema.zmodel
34
+
35
+ model Post {
36
+ id String @id
37
+ title String
38
+ published Boolean @default(false)
39
+ author User @relation(fields: [authorId], references: [id])
40
+ authorId String
41
+
42
+ // 🔐 allow logged-in users to read published posts
43
+ @@allow('read', auth() != null && published)
44
+
45
+ // 🔐 allow full CRUD by author
46
+ @@allow('all', author == auth())
47
+ }
48
+ ```
49
+
50
+ At runtime, transparent proxies are created around Prisma clients for intercepting queries and mutations to enforce access policies. Moreover, framework integration packages help you wrap an access-control-enabled Prisma client into backend APIs that can be safely called from the frontend.
51
+
52
+ ```ts
53
+ // Next.js example: pages/api/model/[...path].ts
54
+
55
+ import { requestHandler } from '@zenstackhq/next';
56
+ import { withPolicy } from '@zenstackhq/runtime';
57
+ import { getSessionUser } from '@lib/auth';
58
+ import { prisma } from '@lib/db';
59
+
60
+ export default requestHandler({
61
+ getPrisma: (req, res) => withPolicy(prisma, { user: getSessionUser(req, res) }),
62
+ });
63
+ ```
64
+
65
+ Plugins can generate strong-typed client libraries that talk to the APIs:
66
+
67
+ ```tsx
68
+ // React example: components/MyPosts.tsx
69
+
70
+ import { usePost } from '@lib/hooks';
71
+
72
+ const MyPosts = () => {
73
+ // Post CRUD hooks
74
+ const { findMany } = usePost();
75
+
76
+ // list all posts that're visible to the current user, together with their authors
77
+ const { data: posts } = findMany({
78
+ include: { author: true },
79
+ orderBy: { createdAt: 'desc' },
80
+ });
81
+
82
+ return (
83
+ <ul>
84
+ {posts?.map((post) => (
85
+ <li key={post.id}>
86
+ {post.title} by {post.author.name}
87
+ </li>
88
+ ))}
89
+ </ul>
90
+ );
91
+ };
92
+ ```
93
+
94
+ The following diagram gives a high-level overview of how it works.
95
+
96
+ ![Architecture](https://zenstack.dev/img/architecture-light.png)
97
+
26
98
  ## Links
27
99
 
28
- - [Documentation](https://zenstack.dev)
100
+ - [Home](https://zenstack.dev)
101
+ - [Documentation](https://zenstack.dev/docs)
29
102
  - [Community chat](https://go.zenstack.dev/chat)
30
103
  - [Twitter](https://twitter.com/zenstackhq)
31
- - [Blog](https://dev.to/zenstack)
104
+ - [Blog](https://zenstack.dev/blog)
32
105
 
33
106
  ## Features
34
107
 
35
- - Intuitive data & authorization modeling language
36
- - Generating RESTful CRUD services and React hooks
108
+ - Access control and data validation rules right inside your Prisma schema
109
+ - Auto-generated OpenAPI (RESTful) specifications, services, and client libraries
37
110
  - End-to-end type safety
38
- - Support for all major relational databases
39
- - Integration with authentication libraries (like [NextAuth](https://next-auth.js.org/) and [iron-session](https://www.npmjs.com/package/iron-session))
40
- - [VSCode extension](https://marketplace.visualstudio.com/items?itemName=zenstack.zenstack) for model authoring
111
+ - Extensible: custom attributes, functions, and a plugin system
112
+ - A framework-agnostic core with framework-specific adapters
113
+ - Uncompromised performance
114
+
115
+ ### Plugins
116
+
117
+ - Prisma schema generator
118
+ - Zod schema generator
119
+ - React hooks generator
120
+ - OpenAPI specification generator
121
+ - [tRPC](https://trpc.io) router generator
122
+ - 🙋🏻 [Request for a plugin](https://go.zenstack.dev/chat)
123
+
124
+ ### Framework adapters
125
+
126
+ - [Next.js](https://zenstack.dev/docs/reference/server-adapters/next)
127
+ - [Fastify](https://zenstack.dev/docs/reference/server-adapters/fastify)
128
+ - [ExpressJS](https://zenstack.dev/docs/reference/server-adapters/express)
129
+ - Nuxt.js (Future)
130
+ - SvelteKit (Future)
131
+ - 🙋🏻 [Request for an adapter](https://go.zenstack.dev/chat)
132
+
133
+ ### Prisma schema extensions
134
+
135
+ - [Custom attributes and functions](https://zenstack.dev/docs/reference/zmodel-language#custom-attributes-and-functions)
136
+ - Multi-file schema (coming soon)
137
+ - String-typed JSON field (coming soon)
138
+ - 🙋🏻 [Request for an extension](https://go.zenstack.dev/chat)
41
139
 
42
140
  ## Examples
43
141
 
44
- Check out the [Collaborative Todo App](https://zenstack-todo.vercel.app/) for a running example. You can find the source code [here](https://github.com/zenstackhq/zenstack/tree/main/samples/todo).
142
+ Check out the [Collaborative Todo App](https://zenstack-todo.vercel.app/) for a running example. You can find the source code below:
143
+
144
+ - [Next.js + React hooks implementation](https://github.com/zenstackhq/sample-todo-nextjs)
145
+ - [Next.js + tRPC implementation](https://github.com/zenstackhq/sample-todo-trpc)
45
146
 
46
147
  ## Community
47
148
 
@@ -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 } from 'langium';
3
+ import { ZModelServices } from '../language-server/zmodel-module';
4
+ import { PackageManagers } from '../utils/pkg-utils';
5
+ /**
6
+ * Initializes an existing project for ZenStack
7
+ */
8
+ export declare function initProject(projectPath: string, prismaSchema: string | undefined, packageManager: PackageManagers | undefined, tag?: string): Promise<void>;
9
+ /**
10
+ * Loads a zmodel document from a file.
11
+ * @param fileName File name
12
+ * @param services Language services
13
+ * @returns Parsed and validated AST
14
+ */
15
+ export declare function loadDocument(fileName: string): Promise<Model>;
16
+ export declare function getPluginDocuments(services: ZModelServices, fileName: string): Promise<LangiumDocument[]>;
17
+ export declare function runPlugins(options: {
18
+ schema: string;
19
+ packageManager: PackageManagers | undefined;
20
+ }): Promise<void>;
21
+ export declare function dumpInfo(projectPath: string): Promise<void>;
@@ -0,0 +1,239 @@
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.dumpInfo = exports.runPlugins = exports.getPluginDocuments = exports.loadDocument = exports.initProject = void 0;
16
+ const ast_1 = require("@zenstackhq/language/ast");
17
+ const sdk_1 = require("@zenstackhq/sdk");
18
+ const colors_1 = __importDefault(require("colors"));
19
+ const fs_1 = __importDefault(require("fs"));
20
+ const get_latest_version_1 = __importDefault(require("get-latest-version"));
21
+ const node_1 = require("langium/node");
22
+ const ora_1 = __importDefault(require("ora"));
23
+ const path_1 = __importDefault(require("path"));
24
+ const semver_1 = __importDefault(require("semver"));
25
+ const vscode_uri_1 = require("vscode-uri");
26
+ const constants_1 = require("../language-server/constants");
27
+ const zmodel_module_1 = require("../language-server/zmodel-module");
28
+ const pkg_utils_1 = require("../utils/pkg-utils");
29
+ const version_utils_1 = require("../utils/version-utils");
30
+ const cli_error_1 = require("./cli-error");
31
+ const plugin_runner_1 = require("./plugin-runner");
32
+ /**
33
+ * Initializes an existing project for ZenStack
34
+ */
35
+ function initProject(projectPath, prismaSchema, packageManager, tag) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ if (!fs_1.default.existsSync(projectPath)) {
38
+ console.error(`Path does not exist: ${projectPath}`);
39
+ throw new cli_error_1.CliError('project path does not exist');
40
+ }
41
+ const defaultPrismaSchemaLocation = './prisma/schema.prisma';
42
+ if (prismaSchema) {
43
+ if (!fs_1.default.existsSync(prismaSchema)) {
44
+ console.error(`Prisma schema file does not exist: ${prismaSchema}`);
45
+ throw new cli_error_1.CliError('prisma schema does not exist');
46
+ }
47
+ }
48
+ else if (fs_1.default.existsSync(defaultPrismaSchemaLocation)) {
49
+ prismaSchema = defaultPrismaSchemaLocation;
50
+ }
51
+ const zmodelFile = path_1.default.join(projectPath, './schema.zmodel');
52
+ let sampleModelGenerated = false;
53
+ if (fs_1.default.existsSync(zmodelFile)) {
54
+ console.warn(`ZenStack model already exists at ${zmodelFile}, not generating a new one.`);
55
+ }
56
+ else {
57
+ if (prismaSchema) {
58
+ // copy over schema.prisma
59
+ fs_1.default.copyFileSync(prismaSchema, zmodelFile);
60
+ }
61
+ else {
62
+ // create a new model
63
+ const starterContent = fs_1.default.readFileSync(path_1.default.join(__dirname, '../res/starter.zmodel'), 'utf-8');
64
+ fs_1.default.writeFileSync(zmodelFile, starterContent);
65
+ sampleModelGenerated = true;
66
+ }
67
+ }
68
+ (0, pkg_utils_1.ensurePackage)('prisma', true, packageManager, 'latest', projectPath);
69
+ (0, pkg_utils_1.ensurePackage)('@prisma/client', false, packageManager, 'latest', projectPath);
70
+ tag = tag !== null && tag !== void 0 ? tag : (0, version_utils_1.getVersion)();
71
+ (0, pkg_utils_1.installPackage)('zenstack', true, packageManager, tag, projectPath);
72
+ (0, pkg_utils_1.installPackage)('@zenstackhq/runtime', false, packageManager, tag, projectPath);
73
+ if (sampleModelGenerated) {
74
+ console.log(`Sample model generated at: ${colors_1.default.blue(zmodelFile)}
75
+
76
+ Please check the following guide on how to model your app:
77
+ https://zenstack.dev/#/modeling-your-app.`);
78
+ }
79
+ else {
80
+ console.log(`Your current Prisma schema "${prismaSchema}" has been copied to "${zmodelFile}".
81
+ Moving forward please edit this file and run "zenstack generate" to regenerate Prisma schema.`);
82
+ }
83
+ console.log(colors_1.default.green('\nProject initialized successfully!'));
84
+ });
85
+ }
86
+ exports.initProject = initProject;
87
+ /**
88
+ * Loads a zmodel document from a file.
89
+ * @param fileName File name
90
+ * @param services Language services
91
+ * @returns Parsed and validated AST
92
+ */
93
+ function loadDocument(fileName) {
94
+ var _a;
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ const services = (0, zmodel_module_1.createZModelServices)(node_1.NodeFileSystem).ZModel;
97
+ const extensions = services.LanguageMetaData.fileExtensions;
98
+ if (!extensions.includes(path_1.default.extname(fileName))) {
99
+ console.error(colors_1.default.yellow(`Please choose a file with extension: ${extensions}.`));
100
+ throw new cli_error_1.CliError('invalid schema file');
101
+ }
102
+ if (!fs_1.default.existsSync(fileName)) {
103
+ console.error(colors_1.default.red(`File ${fileName} does not exist.`));
104
+ throw new cli_error_1.CliError('schema file does not exist');
105
+ }
106
+ // load standard library
107
+ const stdLib = services.shared.workspace.LangiumDocuments.getOrCreateDocument(vscode_uri_1.URI.file(path_1.default.resolve(path_1.default.join(__dirname, '../res', constants_1.STD_LIB_MODULE_NAME))));
108
+ // load documents provided by plugins
109
+ const pluginDocuments = yield getPluginDocuments(services, fileName);
110
+ // load the document
111
+ const document = services.shared.workspace.LangiumDocuments.getOrCreateDocument(vscode_uri_1.URI.file(path_1.default.resolve(fileName)));
112
+ // build the document together with standard library and plugin modules
113
+ yield services.shared.workspace.DocumentBuilder.build([stdLib, ...pluginDocuments, document], {
114
+ validationChecks: 'all',
115
+ });
116
+ const validationErrors = ((_a = document.diagnostics) !== null && _a !== void 0 ? _a : []).filter((e) => e.severity === 1);
117
+ if (validationErrors.length > 0) {
118
+ console.error(colors_1.default.red('Validation errors:'));
119
+ for (const validationError of validationErrors) {
120
+ console.error(colors_1.default.red(`line ${validationError.range.start.line + 1}: ${validationError.message} [${document.textDocument.getText(validationError.range)}]`));
121
+ }
122
+ throw new cli_error_1.CliError('schema validation errors');
123
+ }
124
+ return document.parseResult.value;
125
+ });
126
+ }
127
+ exports.loadDocument = loadDocument;
128
+ function getPluginDocuments(services, fileName) {
129
+ return __awaiter(this, void 0, void 0, function* () {
130
+ // parse the user document (without validation)
131
+ const parseResult = services.parser.LangiumParser.parse(fs_1.default.readFileSync(fileName, { encoding: 'utf-8' }));
132
+ const parsed = parseResult.value;
133
+ // traverse plugins and collect "plugin.zmodel" documents
134
+ const result = [];
135
+ parsed.declarations.forEach((decl) => {
136
+ if ((0, ast_1.isPlugin)(decl)) {
137
+ const providerField = decl.fields.find((f) => f.name === 'provider');
138
+ if (providerField) {
139
+ const provider = (0, sdk_1.getLiteral)(providerField.value);
140
+ if (provider) {
141
+ try {
142
+ const pluginEntrance = require.resolve(`${provider}`);
143
+ const pluginModelFile = path_1.default.join(path_1.default.dirname(pluginEntrance), constants_1.PLUGIN_MODULE_NAME);
144
+ if (fs_1.default.existsSync(pluginModelFile)) {
145
+ result.push(services.shared.workspace.LangiumDocuments.getOrCreateDocument(vscode_uri_1.URI.file(pluginModelFile)));
146
+ }
147
+ }
148
+ catch (_a) {
149
+ console.warn(`Unable to load plugin from ${provider}, skipping`);
150
+ }
151
+ }
152
+ }
153
+ }
154
+ });
155
+ return result;
156
+ });
157
+ }
158
+ exports.getPluginDocuments = getPluginDocuments;
159
+ function runPlugins(options) {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ const model = yield loadDocument(options.schema);
162
+ const context = {
163
+ schema: model,
164
+ schemaPath: path_1.default.resolve(options.schema),
165
+ outDir: path_1.default.dirname(options.schema),
166
+ };
167
+ try {
168
+ yield new plugin_runner_1.PluginRunner().run(context);
169
+ }
170
+ catch (err) {
171
+ if (err instanceof sdk_1.PluginError) {
172
+ console.error(colors_1.default.red(err.message));
173
+ throw new cli_error_1.CliError(err.message);
174
+ }
175
+ else {
176
+ throw err;
177
+ }
178
+ }
179
+ });
180
+ }
181
+ exports.runPlugins = runPlugins;
182
+ function dumpInfo(projectPath) {
183
+ var _a, _b;
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
186
+ let pkgJson;
187
+ const resolvedPath = path_1.default.resolve(projectPath);
188
+ try {
189
+ pkgJson = require(path_1.default.join(resolvedPath, 'package.json'));
190
+ }
191
+ catch (_c) {
192
+ console.error('Unable to locate package.json. Are you in a valid project directory?');
193
+ return;
194
+ }
195
+ const packages = [
196
+ 'zenstack',
197
+ ...Object.keys((_a = pkgJson.dependencies) !== null && _a !== void 0 ? _a : {}).filter((p) => p.startsWith('@zenstackhq/')),
198
+ ...Object.keys((_b = pkgJson.devDependencies) !== null && _b !== void 0 ? _b : {}).filter((p) => p.startsWith('@zenstackhq/')),
199
+ ];
200
+ const versions = new Set();
201
+ for (const pkg of packages) {
202
+ try {
203
+ const resolved = require.resolve(`${pkg}/package.json`, { paths: [resolvedPath] });
204
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
205
+ const version = require(resolved).version;
206
+ versions.add(version);
207
+ console.log(` ${colors_1.default.green(pkg.padEnd(20))}\t${version}`);
208
+ }
209
+ catch (_d) {
210
+ // noop
211
+ }
212
+ }
213
+ if (versions.size > 1) {
214
+ console.warn(colors_1.default.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));
215
+ }
216
+ else if (versions.size > 0) {
217
+ const spinner = (0, ora_1.default)('Checking npm registry').start();
218
+ const latest = yield (0, get_latest_version_1.default)('zenstack');
219
+ if (!latest) {
220
+ spinner.fail('unable to check for latest version');
221
+ }
222
+ else {
223
+ spinner.succeed();
224
+ const version = [...versions][0];
225
+ if (semver_1.default.gt(latest, version)) {
226
+ console.log(`A newer version of Zenstack is available: ${latest}.`);
227
+ }
228
+ else if (semver_1.default.gt(version, latest)) {
229
+ console.log('You are using a pre-release version of Zenstack.');
230
+ }
231
+ else {
232
+ console.log('You are using the latest version of Zenstack.');
233
+ }
234
+ }
235
+ }
236
+ });
237
+ }
238
+ exports.dumpInfo = dumpInfo;
239
+ //# sourceMappingURL=cli-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-util.js","sourceRoot":"","sources":["../../src/cli/cli-util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import z from 'zod';
2
+ declare const schema: z.ZodObject<{
3
+ guardFieldName: z.ZodDefault<z.ZodString>;
4
+ transactionFieldName: z.ZodDefault<z.ZodString>;
5
+ }, "strict", z.ZodTypeAny, {
6
+ guardFieldName: string;
7
+ transactionFieldName: string;
8
+ }, {
9
+ guardFieldName?: string | undefined;
10
+ transactionFieldName?: string | undefined;
11
+ }>;
12
+ export declare type ConfigType = z.infer<typeof schema>;
13
+ export declare let config: ConfigType;
14
+ /**
15
+ * Loads and validates CLI configuration file.
16
+ * @returns
17
+ */
18
+ export declare function loadConfig(filename: string): void;
19
+ export {};
package/cli/config.js ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadConfig = exports.config = void 0;
7
+ const sdk_1 = require("@zenstackhq/sdk");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const zod_1 = __importDefault(require("zod"));
10
+ const zod_validation_error_1 = require("zod-validation-error");
11
+ const cli_error_1 = require("./cli-error");
12
+ const schema = zod_1.default
13
+ .object({
14
+ guardFieldName: zod_1.default.string().default(sdk_1.GUARD_FIELD_NAME),
15
+ transactionFieldName: zod_1.default.string().default(sdk_1.TRANSACTION_FIELD_NAME),
16
+ })
17
+ .strict();
18
+ exports.config = schema.parse({});
19
+ /**
20
+ * Loads and validates CLI configuration file.
21
+ * @returns
22
+ */
23
+ function loadConfig(filename) {
24
+ if (!fs_1.default.existsSync(filename)) {
25
+ return;
26
+ }
27
+ let content;
28
+ try {
29
+ content = JSON.parse(fs_1.default.readFileSync(filename, 'utf-8'));
30
+ }
31
+ catch (_a) {
32
+ throw new cli_error_1.CliError(`Config is not a valid JSON file: ${filename}`);
33
+ }
34
+ const parsed = schema.safeParse(content);
35
+ if (!parsed.success) {
36
+ throw new cli_error_1.CliError(`Config file ${filename} is not valid: ${(0, zod_validation_error_1.fromZodError)(parsed.error)}`);
37
+ }
38
+ exports.config = parsed.data;
39
+ }
40
+ exports.loadConfig = loadConfig;
41
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":";;;;;;AAAA,yCAA2E;AAC3E,4CAAoB;AACpB,8CAAoB;AACpB,+DAAoD;AACpD,2CAAuC;AAEvC,MAAM,MAAM,GAAG,aAAC;KACX,MAAM,CAAC;IACJ,cAAc,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAgB,CAAC;IACpD,oBAAoB,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,4BAAsB,CAAC;CACnE,CAAC;KACD,MAAM,EAAE,CAAC;AAIH,QAAA,MAAM,GAAe,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEjD;;;GAGG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACvC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC1B,OAAO;KACV;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI;QACA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;KAC5D;IAAC,WAAM;QACJ,MAAM,IAAI,oBAAQ,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;KACtE;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACjB,MAAM,IAAI,oBAAQ,CAAC,eAAe,QAAQ,kBAAkB,IAAA,mCAAY,EAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KAC7F;IAED,cAAM,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,CAAC;AAlBD,gCAkBC"}
package/cli/index.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { Command } from 'commander';
2
+ import { PackageManagers } from '../utils/pkg-utils';
3
+ export declare const requiredPrismaVersion = "4.0.0";
4
+ export declare const initAction: (projectPath: string, options: {
5
+ prisma: string | undefined;
6
+ packageManager: PackageManagers | undefined;
7
+ tag?: string;
8
+ }) => Promise<void>;
9
+ export declare const infoAction: (projectPath: string) => Promise<void>;
10
+ export declare const generateAction: (options: {
11
+ schema: string;
12
+ packageManager: PackageManagers | undefined;
13
+ dependencyCheck: boolean;
14
+ }) => Promise<void>;
15
+ export declare function createProgram(): Command;
16
+ export default function (): Promise<void>;