zenstack 0.6.0-pre.10 → 0.6.0-pre.12
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.
- package/cli/cli-error.d.ts +5 -0
- package/cli/cli-error.js +12 -0
- package/cli/cli-error.js.map +1 -0
- package/cli/cli-util.d.ts +18 -0
- package/cli/cli-util.js +168 -0
- package/cli/cli-util.js.map +1 -0
- package/cli/index.d.ts +10 -0
- package/cli/index.js +78 -6531
- package/cli/index.js.map +1 -0
- package/cli/plugin-runner.d.ts +14 -0
- package/cli/plugin-runner.js +133 -0
- package/cli/plugin-runner.js.map +1 -0
- package/global.d.js +1 -0
- package/global.d.js.map +1 -0
- package/language-server/constants.d.ts +12 -0
- package/language-server/constants.js +24 -0
- package/language-server/constants.js.map +1 -0
- package/language-server/main.d.ts +1 -0
- package/language-server/main.js +20 -6436
- package/language-server/main.js.map +1 -0
- package/language-server/types.d.ts +10 -0
- package/language-server/types.js +1 -0
- package/language-server/types.js.map +1 -0
- package/language-server/utils.d.ts +10 -0
- package/language-server/utils.js +28 -0
- package/language-server/utils.js.map +1 -0
- package/language-server/validator/attribute-validator.d.ts +9 -0
- package/language-server/validator/attribute-validator.js +15 -0
- package/language-server/validator/attribute-validator.js.map +1 -0
- package/language-server/validator/datamodel-validator.d.ts +16 -0
- package/language-server/validator/datamodel-validator.js +365 -0
- package/language-server/validator/datamodel-validator.js.map +1 -0
- package/language-server/validator/datasource-validator.d.ts +13 -0
- package/language-server/validator/datasource-validator.js +85 -0
- package/language-server/validator/datasource-validator.js.map +1 -0
- package/language-server/validator/enum-validator.d.ts +9 -0
- package/language-server/validator/enum-validator.js +18 -0
- package/language-server/validator/enum-validator.js.map +1 -0
- package/language-server/validator/expression-validator.d.ts +11 -0
- package/language-server/validator/expression-validator.js +40 -0
- package/language-server/validator/expression-validator.js.map +1 -0
- package/language-server/validator/schema-validator.d.ts +10 -0
- package/language-server/validator/schema-validator.js +35 -0
- package/language-server/validator/schema-validator.js.map +1 -0
- package/language-server/validator/utils.d.ts +24 -0
- package/language-server/validator/utils.js +116 -0
- package/language-server/validator/utils.js.map +1 -0
- package/language-server/validator/zmodel-validator.d.ts +21 -0
- package/language-server/validator/zmodel-validator.js +72 -0
- package/language-server/validator/zmodel-validator.js.map +1 -0
- package/language-server/zmodel-linker.d.ts +29 -0
- package/language-server/zmodel-linker.js +364 -0
- package/language-server/zmodel-linker.js.map +1 -0
- package/language-server/zmodel-module.d.ts +41 -0
- package/language-server/zmodel-module.js +84 -0
- package/language-server/zmodel-module.js.map +1 -0
- package/language-server/zmodel-scope.d.ts +10 -0
- package/language-server/zmodel-scope.js +34 -0
- package/language-server/zmodel-scope.js.map +1 -0
- package/language-server/zmodel-workspace-manager.d.ts +8 -0
- package/language-server/zmodel-workspace-manager.js +25 -0
- package/language-server/zmodel-workspace-manager.js.map +1 -0
- package/package.json +20 -15
- package/plugins/access-policy/expression-writer.d.ts +38 -0
- package/plugins/access-policy/expression-writer.js +323 -0
- package/plugins/access-policy/expression-writer.js.map +1 -0
- package/plugins/access-policy/index.d.ts +4 -0
- package/plugins/access-policy/index.js +15 -4289
- package/plugins/access-policy/index.js.map +1 -0
- package/plugins/access-policy/policy-guard-generator.d.ts +15 -0
- package/plugins/access-policy/policy-guard-generator.js +345 -0
- package/plugins/access-policy/policy-guard-generator.js.map +1 -0
- package/plugins/access-policy/typescript-expression-transformer.d.ts +26 -0
- package/plugins/access-policy/typescript-expression-transformer.js +110 -0
- package/plugins/access-policy/typescript-expression-transformer.js.map +1 -0
- package/plugins/access-policy/utils.d.ts +5 -0
- package/plugins/access-policy/utils.js +16 -0
- package/plugins/access-policy/utils.js.map +1 -0
- package/plugins/access-policy/zod-schema-generator.d.ts +12 -0
- package/plugins/access-policy/zod-schema-generator.js +174 -0
- package/plugins/access-policy/zod-schema-generator.js.map +1 -0
- package/plugins/model-meta/index.d.ts +4 -0
- package/plugins/model-meta/index.js +130 -0
- package/plugins/model-meta/index.js.map +1 -0
- package/plugins/plugin-utils.d.ts +16 -0
- package/plugins/plugin-utils.js +58 -0
- package/plugins/plugin-utils.js.map +1 -0
- package/plugins/prisma/indent-string.d.ts +4 -0
- package/plugins/prisma/indent-string.js +16 -0
- package/plugins/prisma/indent-string.js.map +1 -0
- package/plugins/prisma/index.d.ts +4 -0
- package/plugins/prisma/index.js +15 -3740
- package/plugins/prisma/index.js.map +1 -0
- package/plugins/prisma/prisma-builder.d.ts +123 -0
- package/plugins/prisma/prisma-builder.js +256 -0
- package/plugins/prisma/prisma-builder.js.map +1 -0
- package/plugins/prisma/schema-generator.d.ts +22 -0
- package/plugins/prisma/schema-generator.js +201 -0
- package/plugins/prisma/schema-generator.js.map +1 -0
- package/plugins/react-hooks/index.d.ts +4 -0
- package/plugins/react-hooks/index.js +14 -4318
- package/plugins/react-hooks/index.js.map +1 -0
- package/plugins/react-hooks/react-hooks-generator.d.ts +3 -0
- package/plugins/react-hooks/react-hooks-generator.js +333 -0
- package/plugins/react-hooks/react-hooks-generator.js.map +1 -0
- package/plugins/trpc/config.d.ts +9 -0
- package/plugins/trpc/config.js +12 -0
- package/plugins/trpc/config.js.map +1 -0
- package/plugins/trpc/generator.d.ts +4 -0
- package/plugins/trpc/generator.js +132 -0
- package/plugins/trpc/generator.js.map +1 -0
- package/plugins/trpc/helpers.d.ts +9 -0
- package/plugins/trpc/helpers.js +144 -0
- package/plugins/trpc/helpers.js.map +1 -0
- package/plugins/trpc/index.d.ts +5 -0
- package/plugins/trpc/index.js +14 -5386
- package/plugins/trpc/index.js.map +1 -0
- package/plugins/trpc/project.d.ts +2 -0
- package/plugins/trpc/project.js +21 -0
- package/plugins/trpc/project.js.map +1 -0
- package/plugins/trpc/types.d.ts +0 -0
- package/plugins/trpc/types.js +1 -0
- package/plugins/trpc/types.js.map +1 -0
- package/plugins/trpc/utils/removeDir.d.ts +1 -0
- package/plugins/trpc/utils/removeDir.js +22 -0
- package/plugins/trpc/utils/removeDir.js.map +1 -0
- package/plugins/trpc/utils/uncapitalizeFirstLetter.d.ts +1 -0
- package/plugins/trpc/utils/uncapitalizeFirstLetter.js +11 -0
- package/plugins/trpc/utils/uncapitalizeFirstLetter.js.map +1 -0
- package/plugins/zod/generator.d.ts +4 -0
- package/plugins/zod/generator.js +78 -0
- package/plugins/zod/generator.js.map +1 -0
- package/plugins/zod/helpers/aggregate-helpers.d.ts +5 -0
- package/plugins/zod/helpers/aggregate-helpers.js +77 -0
- package/plugins/zod/helpers/aggregate-helpers.js.map +1 -0
- package/plugins/zod/helpers/comments-helpers.d.ts +6 -0
- package/plugins/zod/helpers/comments-helpers.js +91 -0
- package/plugins/zod/helpers/comments-helpers.js.map +1 -0
- package/plugins/zod/helpers/helpers.d.ts +8 -0
- package/plugins/zod/helpers/helpers.js +39 -0
- package/plugins/zod/helpers/helpers.js.map +1 -0
- package/plugins/zod/helpers/include-helpers.d.ts +2 -0
- package/plugins/zod/helpers/include-helpers.js +94 -0
- package/plugins/zod/helpers/include-helpers.js.map +1 -0
- package/plugins/zod/helpers/index.d.ts +4 -0
- package/plugins/zod/helpers/index.js +50 -0
- package/plugins/zod/helpers/index.js.map +1 -0
- package/plugins/zod/helpers/model-helpers.d.ts +6 -0
- package/plugins/zod/helpers/model-helpers.js +50 -0
- package/plugins/zod/helpers/model-helpers.js.map +1 -0
- package/plugins/zod/helpers/modelArgs-helpers.d.ts +2 -0
- package/plugins/zod/helpers/modelArgs-helpers.js +62 -0
- package/plugins/zod/helpers/modelArgs-helpers.js.map +1 -0
- package/plugins/zod/helpers/mongodb-helpers.d.ts +3 -0
- package/plugins/zod/helpers/mongodb-helpers.js +63 -0
- package/plugins/zod/helpers/mongodb-helpers.js.map +1 -0
- package/plugins/zod/helpers/select-helpers.d.ts +2 -0
- package/plugins/zod/helpers/select-helpers.js +150 -0
- package/plugins/zod/helpers/select-helpers.js.map +1 -0
- package/plugins/zod/index.d.ts +5 -0
- package/plugins/zod/index.js +14 -4808
- package/plugins/zod/index.js.map +1 -0
- package/plugins/zod/transformer.d.ts +70 -0
- package/plugins/zod/transformer.js +464 -0
- package/plugins/zod/transformer.js.map +1 -0
- package/plugins/zod/types.d.ts +20 -0
- package/plugins/zod/types.js +1 -0
- package/plugins/zod/types.js.map +1 -0
- package/plugins/zod/utils/formatFile.d.ts +1 -0
- package/plugins/zod/utils/formatFile.js +35 -0
- package/plugins/zod/utils/formatFile.js.map +1 -0
- package/plugins/zod/utils/removeDir.d.ts +1 -0
- package/plugins/zod/utils/removeDir.js +22 -0
- package/plugins/zod/utils/removeDir.js.map +1 -0
- package/plugins/zod/utils/writeFileSafely.d.ts +1 -0
- package/plugins/zod/utils/writeFileSafely.js +18 -0
- package/plugins/zod/utils/writeFileSafely.js.map +1 -0
- package/res/prism-zmodel.js +2 -4
- package/res/stdlib.zmodel +12 -1
- package/telemetry.d.ts +21 -0
- package/telemetry.js +102 -0
- package/telemetry.js.map +1 -0
- package/types.d.ts +11 -0
- package/types.js +1 -0
- package/types.js.map +1 -0
- package/utils/ast-utils.d.ts +15 -0
- package/utils/ast-utils.js +79 -0
- package/utils/ast-utils.js.map +1 -0
- package/utils/exec-utils.d.ts +6 -0
- package/utils/exec-utils.js +17 -0
- package/utils/exec-utils.js.map +1 -0
- package/utils/indent-string.d.ts +4 -0
- package/utils/indent-string.js +16 -0
- package/utils/indent-string.js.map +1 -0
- package/utils/pkg-utils.d.ts +3 -0
- package/utils/pkg-utils.js +43 -0
- package/utils/pkg-utils.js.map +1 -0
- package/asset/logo-256-bg.png +0 -0
- package/asset/logo-dark-256.png +0 -0
- package/asset/logo-light-256.png +0 -0
- package/extension.js +0 -39
- package/res/package.template.json +0 -9
- package/res/tsconfig.template.json +0 -17
package/cli/cli-error.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CliError = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Indicating an error during CLI execution
|
|
9
|
+
*/
|
|
10
|
+
class CliError extends Error {}
|
|
11
|
+
exports.CliError = CliError;
|
|
12
|
+
//# sourceMappingURL=cli-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-error.js","names":["CliError","Error"],"sources":["../../src/cli/cli-error.ts"],"sourcesContent":["/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACO,MAAMA,QAAQ,SAASC,KAAK,CAAC;AAAE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Model } from '@zenstackhq/language/ast';
|
|
2
|
+
import { LangiumServices } from 'langium';
|
|
3
|
+
import { PackageManagers } from '../utils/pkg-utils';
|
|
4
|
+
/**
|
|
5
|
+
* Initializes an existing project for ZenStack
|
|
6
|
+
*/
|
|
7
|
+
export declare function initProject(projectPath: string, packageManager: PackageManagers | undefined): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Loads a zmodel document from a file.
|
|
10
|
+
* @param fileName File name
|
|
11
|
+
* @param services Language services
|
|
12
|
+
* @returns Parsed and validated AST
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadDocument(fileName: string, services: LangiumServices): Promise<Model>;
|
|
15
|
+
export declare function runPlugins(options: {
|
|
16
|
+
schema: string;
|
|
17
|
+
packageManager: PackageManagers | undefined;
|
|
18
|
+
}): Promise<void>;
|
package/cli/cli-util.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.initProject = initProject;
|
|
7
|
+
exports.loadDocument = loadDocument;
|
|
8
|
+
exports.runPlugins = runPlugins;
|
|
9
|
+
var _sdk = require("@zenstackhq/sdk");
|
|
10
|
+
var _colors = _interopRequireDefault(require("colors"));
|
|
11
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
12
|
+
var _node = require("langium/node");
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
14
|
+
var _vscodeUri = require("vscode-uri");
|
|
15
|
+
var _constants = require("../language-server/constants");
|
|
16
|
+
var _zmodelModule = require("../language-server/zmodel-module");
|
|
17
|
+
var _pkgUtils = require("../utils/pkg-utils");
|
|
18
|
+
var _cliError = require("./cli-error");
|
|
19
|
+
var _pluginRunner = require("./plugin-runner");
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
/**
|
|
22
|
+
* Initializes an existing project for ZenStack
|
|
23
|
+
*/
|
|
24
|
+
async function initProject(projectPath, packageManager) {
|
|
25
|
+
if (!_fs.default.existsSync(projectPath)) {
|
|
26
|
+
console.error(`Path does not exist: ${projectPath}`);
|
|
27
|
+
throw new _cliError.CliError('project path does not exist');
|
|
28
|
+
}
|
|
29
|
+
const schema = _path.default.join(projectPath, 'zenstack', 'schema.zmodel');
|
|
30
|
+
let schemaGenerated = false;
|
|
31
|
+
if (_fs.default.existsSync(schema)) {
|
|
32
|
+
console.warn(_colors.default.yellow(`Model already exists: ${schema}`));
|
|
33
|
+
} else {
|
|
34
|
+
// create a default model
|
|
35
|
+
if (!_fs.default.existsSync(_path.default.join(projectPath, 'zenstack'))) {
|
|
36
|
+
_fs.default.mkdirSync(_path.default.join(projectPath, 'zenstack'));
|
|
37
|
+
}
|
|
38
|
+
_fs.default.writeFileSync(schema, `// This is a sample model to get you started.
|
|
39
|
+
// Learn how to model you app: https://zenstack.dev/#/modeling-your-app.
|
|
40
|
+
|
|
41
|
+
/*
|
|
42
|
+
* A sample data source using local sqlite db.
|
|
43
|
+
* See how to use a different db: https://zenstack.dev/#/zmodel-data-source.
|
|
44
|
+
*/
|
|
45
|
+
datasource db {
|
|
46
|
+
provider = 'sqlite'
|
|
47
|
+
url = 'file:./todo.db'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* User model
|
|
52
|
+
*/
|
|
53
|
+
model User {
|
|
54
|
+
id String @id @default(cuid())
|
|
55
|
+
email String @unique @email
|
|
56
|
+
password String @password @omit @length(8, 16)
|
|
57
|
+
posts Post[]
|
|
58
|
+
|
|
59
|
+
// everybody can signup
|
|
60
|
+
@@allow('create', true)
|
|
61
|
+
|
|
62
|
+
// full access by self
|
|
63
|
+
@@allow('all', auth() == this)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/*
|
|
67
|
+
* Post model
|
|
68
|
+
*/
|
|
69
|
+
model Post {
|
|
70
|
+
id String @id @default(cuid())
|
|
71
|
+
createdAt DateTime @default(now())
|
|
72
|
+
updatedAt DateTime @updatedAt
|
|
73
|
+
title String @length(1, 256)
|
|
74
|
+
content String
|
|
75
|
+
published Boolean @default(false)
|
|
76
|
+
author User? @relation(fields: [authorId], references: [id])
|
|
77
|
+
authorId String?
|
|
78
|
+
|
|
79
|
+
// allow read for all signin users
|
|
80
|
+
@@allow('read', auth() != null && published)
|
|
81
|
+
|
|
82
|
+
// full access by author
|
|
83
|
+
@@allow('all', author == auth())
|
|
84
|
+
}
|
|
85
|
+
`);
|
|
86
|
+
|
|
87
|
+
// add zenstack/schema.prisma to .gitignore
|
|
88
|
+
const gitIgnorePath = _path.default.join(projectPath, '.gitignore');
|
|
89
|
+
let gitIgnoreContent = '';
|
|
90
|
+
if (_fs.default.existsSync(gitIgnorePath)) {
|
|
91
|
+
gitIgnoreContent = _fs.default.readFileSync(gitIgnorePath, {
|
|
92
|
+
encoding: 'utf-8'
|
|
93
|
+
}) + '\n';
|
|
94
|
+
}
|
|
95
|
+
if (!gitIgnoreContent.includes('zenstack/schema.prisma')) {
|
|
96
|
+
gitIgnoreContent += 'zenstack/schema.prisma\n';
|
|
97
|
+
_fs.default.writeFileSync(gitIgnorePath, gitIgnoreContent);
|
|
98
|
+
}
|
|
99
|
+
schemaGenerated = true;
|
|
100
|
+
}
|
|
101
|
+
(0, _pkgUtils.installPackage)('zenstack', true, packageManager, projectPath);
|
|
102
|
+
(0, _pkgUtils.installPackage)('@zenstackhq/runtime', false, packageManager, projectPath);
|
|
103
|
+
if (schemaGenerated) {
|
|
104
|
+
console.log(`Sample model generated at: ${_colors.default.blue(schema)}
|
|
105
|
+
|
|
106
|
+
Please check the following guide on how to model your app:
|
|
107
|
+
https://zenstack.dev/#/modeling-your-app.
|
|
108
|
+
`);
|
|
109
|
+
}
|
|
110
|
+
console.log(_colors.default.green('\nProject initialized successfully!'));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Loads a zmodel document from a file.
|
|
115
|
+
* @param fileName File name
|
|
116
|
+
* @param services Language services
|
|
117
|
+
* @returns Parsed and validated AST
|
|
118
|
+
*/
|
|
119
|
+
async function loadDocument(fileName, services) {
|
|
120
|
+
const extensions = services.LanguageMetaData.fileExtensions;
|
|
121
|
+
if (!extensions.includes(_path.default.extname(fileName))) {
|
|
122
|
+
console.error(_colors.default.yellow(`Please choose a file with extension: ${extensions}.`));
|
|
123
|
+
throw new _cliError.CliError('invalid schema file');
|
|
124
|
+
}
|
|
125
|
+
if (!_fs.default.existsSync(fileName)) {
|
|
126
|
+
console.error(_colors.default.red(`File ${fileName} does not exist.`));
|
|
127
|
+
throw new _cliError.CliError('schema file does not exist');
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// load standard library
|
|
131
|
+
const stdLib = services.shared.workspace.LangiumDocuments.getOrCreateDocument(_vscodeUri.URI.file(_path.default.resolve(_path.default.join(__dirname, '../res', _constants.STD_LIB_MODULE_NAME))));
|
|
132
|
+
|
|
133
|
+
// load the document
|
|
134
|
+
const document = services.shared.workspace.LangiumDocuments.getOrCreateDocument(_vscodeUri.URI.file(_path.default.resolve(fileName)));
|
|
135
|
+
|
|
136
|
+
// build the document together with standard library
|
|
137
|
+
await services.shared.workspace.DocumentBuilder.build([stdLib, document], {
|
|
138
|
+
validationChecks: 'all'
|
|
139
|
+
});
|
|
140
|
+
const validationErrors = (document.diagnostics ?? []).filter(e => e.severity === 1);
|
|
141
|
+
if (validationErrors.length > 0) {
|
|
142
|
+
console.error(_colors.default.red('Validation errors:'));
|
|
143
|
+
for (const validationError of validationErrors) {
|
|
144
|
+
console.error(_colors.default.red(`line ${validationError.range.start.line + 1}: ${validationError.message} [${document.textDocument.getText(validationError.range)}]`));
|
|
145
|
+
}
|
|
146
|
+
throw new _cliError.CliError('schema validation errors');
|
|
147
|
+
}
|
|
148
|
+
return document.parseResult.value;
|
|
149
|
+
}
|
|
150
|
+
async function runPlugins(options) {
|
|
151
|
+
const services = (0, _zmodelModule.createZModelServices)(_node.NodeFileSystem).ZModel;
|
|
152
|
+
const model = await loadDocument(options.schema, services);
|
|
153
|
+
const context = {
|
|
154
|
+
schema: model,
|
|
155
|
+
outDir: _path.default.dirname(options.schema)
|
|
156
|
+
};
|
|
157
|
+
try {
|
|
158
|
+
await new _pluginRunner.PluginRunner().run(context);
|
|
159
|
+
} catch (err) {
|
|
160
|
+
if (err instanceof _sdk.PluginError) {
|
|
161
|
+
console.error(_colors.default.red(err.message));
|
|
162
|
+
throw new _cliError.CliError(err.message);
|
|
163
|
+
} else {
|
|
164
|
+
throw err;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=cli-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-util.js","names":["initProject","projectPath","packageManager","fs","existsSync","console","error","CliError","schema","path","join","schemaGenerated","warn","colors","yellow","mkdirSync","writeFileSync","gitIgnorePath","gitIgnoreContent","readFileSync","encoding","includes","installPackage","log","blue","green","loadDocument","fileName","services","extensions","LanguageMetaData","fileExtensions","extname","red","stdLib","shared","workspace","LangiumDocuments","getOrCreateDocument","URI","file","resolve","__dirname","STD_LIB_MODULE_NAME","document","DocumentBuilder","build","validationChecks","validationErrors","diagnostics","filter","e","severity","length","validationError","range","start","line","message","textDocument","getText","parseResult","value","runPlugins","options","createZModelServices","NodeFileSystem","ZModel","model","context","outDir","dirname","PluginRunner","run","err","PluginError"],"sources":["../../src/cli/cli-util.ts"],"sourcesContent":["import { Model } from '@zenstackhq/language/ast';\nimport { PluginError } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'fs';\nimport { LangiumServices } from 'langium';\nimport { NodeFileSystem } from 'langium/node';\nimport path from 'path';\nimport { URI } from 'vscode-uri';\nimport { STD_LIB_MODULE_NAME } from '../language-server/constants';\nimport { createZModelServices } from '../language-server/zmodel-module';\nimport { Context } from '../types';\nimport { installPackage, PackageManagers } from '../utils/pkg-utils';\nimport { CliError } from './cli-error';\nimport { PluginRunner } from './plugin-runner';\n\n/**\n * Initializes an existing project for ZenStack\n */\nexport async function initProject(projectPath: string, packageManager: PackageManagers | undefined) {\n if (!fs.existsSync(projectPath)) {\n console.error(`Path does not exist: ${projectPath}`);\n throw new CliError('project path does not exist');\n }\n\n const schema = path.join(projectPath, 'zenstack', 'schema.zmodel');\n let schemaGenerated = false;\n\n if (fs.existsSync(schema)) {\n console.warn(colors.yellow(`Model already exists: ${schema}`));\n } else {\n // create a default model\n if (!fs.existsSync(path.join(projectPath, 'zenstack'))) {\n fs.mkdirSync(path.join(projectPath, 'zenstack'));\n }\n\n fs.writeFileSync(\n schema,\n `// This is a sample model to get you started.\n// Learn how to model you app: https://zenstack.dev/#/modeling-your-app.\n\n/*\n * A sample data source using local sqlite db.\n * See how to use a different db: https://zenstack.dev/#/zmodel-data-source.\n */\ndatasource db {\n provider = 'sqlite'\n url = 'file:./todo.db'\n}\n\n/*\n * User model\n */\nmodel User {\n id String @id @default(cuid())\n email String @unique @email\n password String @password @omit @length(8, 16)\n posts Post[]\n\n // everybody can signup\n @@allow('create', true)\n\n // full access by self\n @@allow('all', auth() == this)\n}\n\n/*\n * Post model\n */\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User? @relation(fields: [authorId], references: [id])\n authorId String?\n\n // allow read for all signin users\n @@allow('read', auth() != null && published)\n\n // full access by author\n @@allow('all', author == auth())\n}\n`\n );\n\n // add zenstack/schema.prisma to .gitignore\n const gitIgnorePath = path.join(projectPath, '.gitignore');\n let gitIgnoreContent = '';\n if (fs.existsSync(gitIgnorePath)) {\n gitIgnoreContent = fs.readFileSync(gitIgnorePath, { encoding: 'utf-8' }) + '\\n';\n }\n\n if (!gitIgnoreContent.includes('zenstack/schema.prisma')) {\n gitIgnoreContent += 'zenstack/schema.prisma\\n';\n fs.writeFileSync(gitIgnorePath, gitIgnoreContent);\n }\n\n schemaGenerated = true;\n }\n\n installPackage('zenstack', true, packageManager, projectPath);\n installPackage('@zenstackhq/runtime', false, packageManager, projectPath);\n\n if (schemaGenerated) {\n console.log(`Sample model generated at: ${colors.blue(schema)}\n\n Please check the following guide on how to model your app:\n https://zenstack.dev/#/modeling-your-app.\n `);\n }\n\n console.log(colors.green('\\nProject initialized successfully!'));\n}\n\n/**\n * Loads a zmodel document from a file.\n * @param fileName File name\n * @param services Language services\n * @returns Parsed and validated AST\n */\nexport async function loadDocument(fileName: string, services: LangiumServices): Promise<Model> {\n const extensions = services.LanguageMetaData.fileExtensions;\n if (!extensions.includes(path.extname(fileName))) {\n console.error(colors.yellow(`Please choose a file with extension: ${extensions}.`));\n throw new CliError('invalid schema file');\n }\n\n if (!fs.existsSync(fileName)) {\n console.error(colors.red(`File ${fileName} does not exist.`));\n throw new CliError('schema file does not exist');\n }\n\n // load standard library\n const stdLib = services.shared.workspace.LangiumDocuments.getOrCreateDocument(\n URI.file(path.resolve(path.join(__dirname, '../res', STD_LIB_MODULE_NAME)))\n );\n\n // load the document\n const document = services.shared.workspace.LangiumDocuments.getOrCreateDocument(URI.file(path.resolve(fileName)));\n\n // build the document together with standard library\n await services.shared.workspace.DocumentBuilder.build([stdLib, document], {\n validationChecks: 'all',\n });\n\n const validationErrors = (document.diagnostics ?? []).filter((e) => e.severity === 1);\n if (validationErrors.length > 0) {\n console.error(colors.red('Validation errors:'));\n for (const validationError of validationErrors) {\n console.error(\n colors.red(\n `line ${validationError.range.start.line + 1}: ${\n validationError.message\n } [${document.textDocument.getText(validationError.range)}]`\n )\n );\n }\n throw new CliError('schema validation errors');\n }\n\n return document.parseResult.value as Model;\n}\n\nexport async function runPlugins(options: { schema: string; packageManager: PackageManagers | undefined }) {\n const services = createZModelServices(NodeFileSystem).ZModel;\n const model = await loadDocument(options.schema, services);\n\n const context: Context = {\n schema: model,\n outDir: path.dirname(options.schema),\n };\n\n try {\n await new PluginRunner().run(context);\n } catch (err) {\n if (err instanceof PluginError) {\n console.error(colors.red(err.message));\n throw new CliError(err.message);\n } else {\n throw err;\n }\n }\n}\n"],"mappings":"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"}
|
package/cli/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PackageManagers } from '../utils/pkg-utils';
|
|
2
|
+
export declare const requiredPrismaVersion = "4.0.0";
|
|
3
|
+
export declare const initAction: (projectPath: string, options: {
|
|
4
|
+
packageManager: PackageManagers | undefined;
|
|
5
|
+
}) => Promise<void>;
|
|
6
|
+
export declare const generateAction: (options: {
|
|
7
|
+
schema: string;
|
|
8
|
+
packageManager: PackageManagers | undefined;
|
|
9
|
+
}) => Promise<void>;
|
|
10
|
+
export default function (): Promise<void>;
|