zenstack 1.0.16 → 1.1.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.
- package/README.md +93 -24
- package/bin/post-install.js +1 -1
- package/cli/actions/generate.d.ts +13 -0
- package/cli/actions/generate.js +71 -0
- package/cli/actions/generate.js.map +1 -0
- package/cli/actions/index.d.ts +3 -0
- package/cli/actions/index.js +20 -0
- package/cli/actions/index.js.map +1 -0
- package/cli/actions/info.d.ts +4 -0
- package/cli/actions/info.js +63 -0
- package/cli/actions/info.js.map +1 -0
- package/cli/actions/init.d.ts +12 -0
- package/cli/actions/init.js +83 -0
- package/cli/actions/init.js.map +1 -0
- package/cli/cli-util.d.ts +14 -11
- package/cli/cli-util.js +150 -82
- package/cli/cli-util.js.map +1 -1
- package/cli/config.d.ts +10 -0
- package/cli/config.js +62 -0
- package/cli/config.js.map +1 -0
- package/cli/index.d.ts +4 -12
- package/cli/index.js +36 -29
- package/cli/index.js.map +1 -1
- package/cli/plugin-runner.d.ts +13 -3
- package/cli/plugin-runner.js +165 -59
- package/cli/plugin-runner.js.map +1 -1
- package/constants.js +1 -1
- package/language-server/constants.d.ts +7 -0
- package/language-server/constants.js +8 -1
- package/language-server/constants.js.map +1 -1
- package/language-server/utils.d.ts +1 -14
- package/language-server/utils.js +2 -38
- package/language-server/utils.js.map +1 -1
- package/language-server/validator/attribute-application-validator.d.ts +15 -0
- package/language-server/validator/attribute-application-validator.js +246 -0
- package/language-server/validator/attribute-application-validator.js.map +1 -0
- package/language-server/validator/attribute-validator.d.ts +1 -1
- package/language-server/validator/attribute-validator.js +4 -1
- package/language-server/validator/attribute-validator.js.map +1 -1
- package/language-server/validator/datamodel-validator.d.ts +7 -0
- package/language-server/validator/datamodel-validator.js +84 -33
- package/language-server/validator/datamodel-validator.js.map +1 -1
- package/language-server/validator/enum-validator.js +3 -6
- package/language-server/validator/enum-validator.js.map +1 -1
- package/language-server/validator/expression-validator.d.ts +1 -1
- package/language-server/validator/expression-validator.js +108 -3
- package/language-server/validator/expression-validator.js.map +1 -1
- package/language-server/validator/function-decl-validator.d.ts +9 -0
- package/language-server/validator/function-decl-validator.js +13 -0
- package/language-server/validator/function-decl-validator.js.map +1 -0
- package/language-server/validator/function-invocation-validator.d.ts +11 -0
- package/language-server/validator/function-invocation-validator.js +135 -0
- package/language-server/validator/function-invocation-validator.js.map +1 -0
- package/language-server/validator/schema-validator.d.ts +4 -1
- package/language-server/validator/schema-validator.js +28 -7
- package/language-server/validator/schema-validator.js.map +1 -1
- package/language-server/validator/utils.d.ts +3 -4
- package/language-server/validator/utils.js +20 -123
- package/language-server/validator/utils.js.map +1 -1
- package/language-server/validator/zmodel-validator.d.ts +5 -1
- package/language-server/validator/zmodel-validator.js +18 -4
- package/language-server/validator/zmodel-validator.js.map +1 -1
- package/language-server/zmodel-code-action.d.ts +2 -1
- package/language-server/zmodel-code-action.js +46 -21
- package/language-server/zmodel-code-action.js.map +1 -1
- package/language-server/zmodel-definition.d.ts +7 -0
- package/language-server/zmodel-definition.js +31 -0
- package/language-server/zmodel-definition.js.map +1 -0
- package/language-server/zmodel-formatter.js +2 -2
- package/language-server/zmodel-formatter.js.map +1 -1
- package/language-server/zmodel-linker.d.ts +3 -0
- package/language-server/zmodel-linker.js +122 -41
- package/language-server/zmodel-linker.js.map +1 -1
- package/language-server/zmodel-module.js +4 -1
- package/language-server/zmodel-module.js.map +1 -1
- package/language-server/zmodel-scope.d.ts +7 -1
- package/language-server/zmodel-scope.js +57 -1
- package/language-server/zmodel-scope.js.map +1 -1
- package/language-server/zmodel-workspace-manager.d.ts +5 -1
- package/language-server/zmodel-workspace-manager.js +101 -0
- package/language-server/zmodel-workspace-manager.js.map +1 -1
- package/package.json +27 -20
- package/plugins/access-policy/expression-writer.d.ts +7 -0
- package/plugins/access-policy/expression-writer.js +325 -106
- package/plugins/access-policy/expression-writer.js.map +1 -1
- package/plugins/access-policy/index.d.ts +3 -3
- package/plugins/access-policy/index.js +3 -5
- package/plugins/access-policy/index.js.map +1 -1
- package/plugins/access-policy/policy-guard-generator.d.ts +10 -3
- package/plugins/access-policy/policy-guard-generator.js +406 -121
- package/plugins/access-policy/policy-guard-generator.js.map +1 -1
- package/plugins/model-meta/index.d.ts +3 -3
- package/plugins/model-meta/index.js +110 -46
- package/plugins/model-meta/index.js.map +1 -1
- package/plugins/plugin-utils.d.ts +8 -7
- package/plugins/plugin-utils.js +55 -21
- package/plugins/plugin-utils.js.map +1 -1
- package/plugins/prisma/index.d.ts +3 -3
- package/plugins/prisma/index.js +3 -5
- package/plugins/prisma/index.js.map +1 -1
- package/plugins/prisma/prisma-builder.d.ts +7 -14
- package/plugins/prisma/prisma-builder.js +29 -34
- package/plugins/prisma/prisma-builder.js.map +1 -1
- package/plugins/prisma/schema-generator.d.ts +7 -3
- package/plugins/prisma/schema-generator.js +146 -102
- package/plugins/prisma/schema-generator.js.map +1 -1
- package/plugins/prisma/zmodel-code-generator.d.ts +3 -1
- package/plugins/prisma/zmodel-code-generator.js +12 -2
- package/plugins/prisma/zmodel-code-generator.js.map +1 -1
- package/plugins/zod/generator.d.ts +4 -0
- package/plugins/zod/generator.js +298 -0
- package/plugins/zod/generator.js.map +1 -0
- package/plugins/zod/index.d.ts +4 -0
- package/plugins/zod/index.js +24 -0
- package/plugins/zod/index.js.map +1 -0
- package/plugins/zod/transformer.d.ts +68 -0
- package/plugins/zod/transformer.js +554 -0
- package/plugins/zod/transformer.js.map +1 -0
- package/plugins/zod/types.d.ts +25 -0
- package/plugins/zod/types.js.map +1 -0
- package/plugins/zod/utils/removeDir.d.ts +1 -0
- package/plugins/zod/utils/removeDir.js +30 -0
- package/plugins/zod/utils/removeDir.js.map +1 -0
- package/plugins/zod/utils/schema-gen.d.ts +3 -0
- package/plugins/zod/utils/schema-gen.js +188 -0
- package/plugins/zod/utils/schema-gen.js.map +1 -0
- package/res/starter.zmodel +6 -8
- package/res/stdlib.zmodel +238 -74
- package/telemetry.d.ts +2 -1
- package/telemetry.js +21 -11
- package/telemetry.js.map +1 -1
- package/utils/ast-utils.d.ts +12 -15
- package/utils/ast-utils.js +117 -66
- package/utils/ast-utils.js.map +1 -1
- package/utils/pkg-utils.d.ts +2 -2
- package/utils/pkg-utils.js +34 -16
- package/utils/pkg-utils.js.map +1 -1
- package/utils/typescript-expression-transformer.d.ts +54 -0
- package/utils/typescript-expression-transformer.js +326 -0
- package/utils/typescript-expression-transformer.js.map +1 -0
- package/utils/version-utils.js +7 -1
- package/utils/version-utils.js.map +1 -1
- package/plugins/access-policy/typescript-expression-transformer.d.ts +0 -26
- package/plugins/access-policy/typescript-expression-transformer.js +0 -111
- package/plugins/access-policy/typescript-expression-transformer.js.map +0 -1
- package/plugins/access-policy/utils.d.ts +0 -5
- package/plugins/access-policy/utils.js +0 -14
- package/plugins/access-policy/utils.js.map +0 -1
- package/plugins/access-policy/zod-schema-generator.d.ts +0 -12
- package/plugins/access-policy/zod-schema-generator.js +0 -158
- package/plugins/access-policy/zod-schema-generator.js.map +0 -1
- package/types.d.ts +0 -12
- package/types.js.map +0 -1
- /package/{types.js → plugins/zod/types.js} +0 -0
package/cli/cli-util.js
CHANGED
|
@@ -12,81 +12,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.
|
|
15
|
+
exports.checkNewVersion = exports.checkRequiredPackage = exports.getZenStackPackages = exports.getPluginDocuments = exports.mergeImportsDeclarations = exports.eagerLoadAllImports = exports.loadDocument = exports.requiredPrismaVersion = void 0;
|
|
16
|
+
const ast_1 = require("@zenstackhq/language/ast");
|
|
16
17
|
const sdk_1 = require("@zenstackhq/sdk");
|
|
17
18
|
const colors_1 = __importDefault(require("colors"));
|
|
18
19
|
const fs_1 = __importDefault(require("fs"));
|
|
20
|
+
const get_latest_version_1 = __importDefault(require("get-latest-version"));
|
|
21
|
+
const langium_1 = require("langium");
|
|
19
22
|
const node_1 = require("langium/node");
|
|
20
23
|
const path_1 = __importDefault(require("path"));
|
|
24
|
+
const semver_1 = __importDefault(require("semver"));
|
|
21
25
|
const vscode_uri_1 = require("vscode-uri");
|
|
22
26
|
const constants_1 = require("../language-server/constants");
|
|
23
27
|
const zmodel_module_1 = require("../language-server/zmodel-module");
|
|
24
|
-
const
|
|
28
|
+
const ast_utils_1 = require("../utils/ast-utils");
|
|
29
|
+
const version_utils_1 = require("../utils/version-utils");
|
|
25
30
|
const cli_error_1 = require("./cli-error");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
* Initializes an existing project for ZenStack
|
|
29
|
-
*/
|
|
30
|
-
function initProject(projectPath, prismaSchema, packageManager, tag) {
|
|
31
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
if (!fs_1.default.existsSync(projectPath)) {
|
|
33
|
-
console.error(`Path does not exist: ${projectPath}`);
|
|
34
|
-
throw new cli_error_1.CliError('project path does not exist');
|
|
35
|
-
}
|
|
36
|
-
const defaultPrismaSchemaLocation = './prisma/schema.prisma';
|
|
37
|
-
if (prismaSchema) {
|
|
38
|
-
if (!fs_1.default.existsSync(prismaSchema)) {
|
|
39
|
-
console.error(`Prisma schema file does not exist: ${prismaSchema}`);
|
|
40
|
-
throw new cli_error_1.CliError('prisma schema does not exist');
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else if (fs_1.default.existsSync(defaultPrismaSchemaLocation)) {
|
|
44
|
-
prismaSchema = defaultPrismaSchemaLocation;
|
|
45
|
-
}
|
|
46
|
-
const zmodelFile = path_1.default.join(projectPath, './schema.zmodel');
|
|
47
|
-
let sampleModelGenerated = false;
|
|
48
|
-
if (fs_1.default.existsSync(zmodelFile)) {
|
|
49
|
-
console.warn(`ZenStack model already exists at ${zmodelFile}, not generating a new one.`);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
if (prismaSchema) {
|
|
53
|
-
// copy over schema.prisma
|
|
54
|
-
fs_1.default.copyFileSync(prismaSchema, zmodelFile);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
// create a new model
|
|
58
|
-
const starterContent = fs_1.default.readFileSync(path_1.default.join(__dirname, '../res/starter.zmodel'), 'utf-8');
|
|
59
|
-
fs_1.default.writeFileSync(zmodelFile, starterContent);
|
|
60
|
-
sampleModelGenerated = true;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
(0, pkg_utils_1.ensurePackage)('prisma', true, packageManager, 'latest', projectPath);
|
|
64
|
-
(0, pkg_utils_1.ensurePackage)('@prisma/client', false, packageManager, 'latest', projectPath);
|
|
65
|
-
(0, pkg_utils_1.installPackage)('zenstack', true, packageManager, tag, projectPath);
|
|
66
|
-
(0, pkg_utils_1.installPackage)('@zenstackhq/runtime', false, packageManager, tag, projectPath);
|
|
67
|
-
if (sampleModelGenerated) {
|
|
68
|
-
console.log(`Sample model generated at: ${colors_1.default.blue(zmodelFile)}
|
|
69
|
-
|
|
70
|
-
Please check the following guide on how to model your app:
|
|
71
|
-
https://zenstack.dev/#/modeling-your-app.`);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
console.log(`Your current Prisma schema "${prismaSchema}" has been copied to "${zmodelFile}".
|
|
75
|
-
Moving forward please edit this file and run "zenstack generate" to regenerate Prisma schema.`);
|
|
76
|
-
}
|
|
77
|
-
console.log(colors_1.default.green('\nProject initialized successfully!'));
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
exports.initProject = initProject;
|
|
31
|
+
// required minimal version of Prisma
|
|
32
|
+
exports.requiredPrismaVersion = '4.8.0';
|
|
81
33
|
/**
|
|
82
34
|
* Loads a zmodel document from a file.
|
|
83
35
|
* @param fileName File name
|
|
84
36
|
* @param services Language services
|
|
85
37
|
* @returns Parsed and validated AST
|
|
86
38
|
*/
|
|
87
|
-
function loadDocument(fileName
|
|
88
|
-
var _a;
|
|
39
|
+
function loadDocument(fileName) {
|
|
89
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const services = (0, zmodel_module_1.createZModelServices)(node_1.NodeFileSystem).ZModel;
|
|
90
42
|
const extensions = services.LanguageMetaData.fileExtensions;
|
|
91
43
|
if (!extensions.includes(path_1.default.extname(fileName))) {
|
|
92
44
|
console.error(colors_1.default.yellow(`Please choose a file with extension: ${extensions}.`));
|
|
@@ -98,13 +50,22 @@ function loadDocument(fileName, services) {
|
|
|
98
50
|
}
|
|
99
51
|
// load standard library
|
|
100
52
|
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))));
|
|
53
|
+
// load documents provided by plugins
|
|
54
|
+
const pluginDocuments = yield getPluginDocuments(services, fileName);
|
|
55
|
+
const langiumDocuments = services.shared.workspace.LangiumDocuments;
|
|
101
56
|
// load the document
|
|
102
|
-
const document =
|
|
103
|
-
//
|
|
104
|
-
|
|
57
|
+
const document = langiumDocuments.getOrCreateDocument(vscode_uri_1.URI.file(path_1.default.resolve(fileName)));
|
|
58
|
+
// load all imports
|
|
59
|
+
const importedURIs = eagerLoadAllImports(document, langiumDocuments);
|
|
60
|
+
const importedDocuments = importedURIs.map((uri) => langiumDocuments.getOrCreateDocument(uri));
|
|
61
|
+
// build the document together with standard library and plugin modules
|
|
62
|
+
yield services.shared.workspace.DocumentBuilder.build([stdLib, ...pluginDocuments, document, ...importedDocuments], {
|
|
105
63
|
validationChecks: 'all',
|
|
106
64
|
});
|
|
107
|
-
const validationErrors =
|
|
65
|
+
const validationErrors = langiumDocuments.all
|
|
66
|
+
.flatMap((d) => { var _a; return (_a = d.diagnostics) !== null && _a !== void 0 ? _a : []; })
|
|
67
|
+
.filter((e) => e.severity === 1)
|
|
68
|
+
.toArray();
|
|
108
69
|
if (validationErrors.length > 0) {
|
|
109
70
|
console.error(colors_1.default.red('Validation errors:'));
|
|
110
71
|
for (const validationError of validationErrors) {
|
|
@@ -112,32 +73,139 @@ function loadDocument(fileName, services) {
|
|
|
112
73
|
}
|
|
113
74
|
throw new cli_error_1.CliError('schema validation errors');
|
|
114
75
|
}
|
|
115
|
-
|
|
76
|
+
const model = document.parseResult.value;
|
|
77
|
+
mergeImportsDeclarations(langiumDocuments, model);
|
|
78
|
+
validationAfterMerge(model);
|
|
79
|
+
(0, ast_utils_1.mergeBaseModel)(model);
|
|
80
|
+
return model;
|
|
116
81
|
});
|
|
117
82
|
}
|
|
118
83
|
exports.loadDocument = loadDocument;
|
|
119
|
-
|
|
84
|
+
// check global unique thing after merge imports
|
|
85
|
+
function validationAfterMerge(model) {
|
|
86
|
+
const dataSources = model.declarations.filter((d) => (0, ast_1.isDataSource)(d));
|
|
87
|
+
if (dataSources.length == 0) {
|
|
88
|
+
console.error(colors_1.default.red('Validation errors: Model must define a datasource'));
|
|
89
|
+
throw new cli_error_1.CliError('schema validation errors');
|
|
90
|
+
}
|
|
91
|
+
else if (dataSources.length > 1) {
|
|
92
|
+
console.error(colors_1.default.red('Validation errors: Multiple datasource declarations are not allowed'));
|
|
93
|
+
throw new cli_error_1.CliError('schema validation errors');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function eagerLoadAllImports(document, documents, uris = new Set()) {
|
|
97
|
+
const uriString = document.uri.toString();
|
|
98
|
+
if (!uris.has(uriString)) {
|
|
99
|
+
uris.add(uriString);
|
|
100
|
+
const model = document.parseResult.value;
|
|
101
|
+
for (const imp of model.imports) {
|
|
102
|
+
const importedModel = (0, ast_utils_1.resolveImport)(documents, imp);
|
|
103
|
+
if (importedModel) {
|
|
104
|
+
const importedDoc = (0, langium_1.getDocument)(importedModel);
|
|
105
|
+
eagerLoadAllImports(importedDoc, documents, uris);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return Array.from(uris)
|
|
110
|
+
.filter((x) => uriString != x)
|
|
111
|
+
.map((e) => vscode_uri_1.URI.parse(e));
|
|
112
|
+
}
|
|
113
|
+
exports.eagerLoadAllImports = eagerLoadAllImports;
|
|
114
|
+
function mergeImportsDeclarations(documents, model) {
|
|
115
|
+
const importedModels = (0, ast_utils_1.resolveTransitiveImports)(documents, model);
|
|
116
|
+
const importedDeclarations = importedModels.flatMap((m) => m.declarations);
|
|
117
|
+
importedDeclarations.forEach((d) => {
|
|
118
|
+
const mutable = d;
|
|
119
|
+
// The plugin might use $container to access the model
|
|
120
|
+
// need to make sure it is always resolved to the main model
|
|
121
|
+
mutable.$container = model;
|
|
122
|
+
});
|
|
123
|
+
model.declarations.push(...importedDeclarations);
|
|
124
|
+
}
|
|
125
|
+
exports.mergeImportsDeclarations = mergeImportsDeclarations;
|
|
126
|
+
function getPluginDocuments(services, fileName) {
|
|
120
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
// parse the user document (without validation)
|
|
129
|
+
const parseResult = services.parser.LangiumParser.parse(fs_1.default.readFileSync(fileName, { encoding: 'utf-8' }));
|
|
130
|
+
const parsed = parseResult.value;
|
|
131
|
+
// traverse plugins and collect "plugin.zmodel" documents
|
|
132
|
+
const result = [];
|
|
133
|
+
parsed.declarations.forEach((decl) => {
|
|
134
|
+
if ((0, ast_1.isPlugin)(decl)) {
|
|
135
|
+
const providerField = decl.fields.find((f) => f.name === 'provider');
|
|
136
|
+
if (providerField) {
|
|
137
|
+
const provider = (0, sdk_1.getLiteral)(providerField.value);
|
|
138
|
+
if (provider) {
|
|
139
|
+
try {
|
|
140
|
+
const pluginEntrance = require.resolve(`${provider}`);
|
|
141
|
+
const pluginModelFile = path_1.default.join(path_1.default.dirname(pluginEntrance), constants_1.PLUGIN_MODULE_NAME);
|
|
142
|
+
if (fs_1.default.existsSync(pluginModelFile)) {
|
|
143
|
+
result.push(services.shared.workspace.LangiumDocuments.getOrCreateDocument(vscode_uri_1.URI.file(pluginModelFile)));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (_a) {
|
|
147
|
+
// noop
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return result;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
exports.getPluginDocuments = getPluginDocuments;
|
|
157
|
+
function getZenStackPackages(projectPath) {
|
|
158
|
+
var _a, _b;
|
|
159
|
+
let pkgJson;
|
|
160
|
+
const resolvedPath = path_1.default.resolve(projectPath);
|
|
161
|
+
try {
|
|
162
|
+
pkgJson = require(path_1.default.join(resolvedPath, 'package.json'));
|
|
163
|
+
}
|
|
164
|
+
catch (_c) {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
const packages = [
|
|
168
|
+
...Object.keys((_a = pkgJson.dependencies) !== null && _a !== void 0 ? _a : {}).filter((p) => p.startsWith('@zenstackhq/')),
|
|
169
|
+
...Object.keys((_b = pkgJson.devDependencies) !== null && _b !== void 0 ? _b : {}).filter((p) => p.startsWith('@zenstackhq/')),
|
|
170
|
+
];
|
|
171
|
+
const result = packages.map((pkg) => {
|
|
128
172
|
try {
|
|
129
|
-
|
|
173
|
+
const resolved = require.resolve(`${pkg}/package.json`, { paths: [resolvedPath] });
|
|
174
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
175
|
+
return { pkg, version: require(resolved).version };
|
|
130
176
|
}
|
|
131
|
-
catch (
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
177
|
+
catch (_a) {
|
|
178
|
+
return { pkg, version: undefined };
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
result.splice(0, 0, { pkg: 'zenstack', version: (0, version_utils_1.getVersion)() });
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
exports.getZenStackPackages = getZenStackPackages;
|
|
185
|
+
function checkRequiredPackage(packageName, minVersion) {
|
|
186
|
+
let packageVersion;
|
|
187
|
+
try {
|
|
188
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
189
|
+
packageVersion = require(`${packageName}/package.json`).version;
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
console.error(colors_1.default.red(`${packageName} not found, please install it`));
|
|
193
|
+
throw new cli_error_1.CliError(`${packageName} not found`);
|
|
194
|
+
}
|
|
195
|
+
if (minVersion && semver_1.default.lt(packageVersion, minVersion)) {
|
|
196
|
+
console.error(colors_1.default.red(`${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`));
|
|
197
|
+
throw new cli_error_1.CliError(`${packageName} version is too low`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.checkRequiredPackage = checkRequiredPackage;
|
|
201
|
+
function checkNewVersion() {
|
|
202
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
203
|
+
const currVersion = (0, version_utils_1.getVersion)();
|
|
204
|
+
const latestVersion = yield (0, get_latest_version_1.default)('zenstack');
|
|
205
|
+
if (latestVersion && semver_1.default.gt(latestVersion, currVersion)) {
|
|
206
|
+
console.log(`A newer version ${colors_1.default.cyan(latestVersion)} is available.`);
|
|
139
207
|
}
|
|
140
208
|
});
|
|
141
209
|
}
|
|
142
|
-
exports.
|
|
210
|
+
exports.checkNewVersion = checkNewVersion;
|
|
143
211
|
//# sourceMappingURL=cli-util.js.map
|
package/cli/cli-util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-util.js","sourceRoot":"","sources":["../../src/cli/cli-util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"cli-util.js","sourceRoot":"","sources":["../../src/cli/cli-util.ts"],"names":[],"mappings":"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"}
|
package/cli/config.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
declare const schema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
3
|
+
export declare type ConfigType = z.infer<typeof schema>;
|
|
4
|
+
export declare let config: ConfigType;
|
|
5
|
+
/**
|
|
6
|
+
* Loads and validates CLI configuration file.
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadConfig(filename: string): void;
|
|
10
|
+
export {};
|
package/cli/config.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.loadConfig = exports.config = void 0;
|
|
30
|
+
const fs_1 = __importDefault(require("fs"));
|
|
31
|
+
const zod_1 = __importStar(require("zod"));
|
|
32
|
+
const zod_validation_error_1 = require("zod-validation-error");
|
|
33
|
+
const cli_error_1 = require("./cli-error");
|
|
34
|
+
// TODO: future use
|
|
35
|
+
const schema = zod_1.default.object({});
|
|
36
|
+
exports.config = schema.parse({});
|
|
37
|
+
/**
|
|
38
|
+
* Loads and validates CLI configuration file.
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
41
|
+
function loadConfig(filename) {
|
|
42
|
+
try {
|
|
43
|
+
const fileData = fs_1.default.readFileSync(filename, `utf-8`);
|
|
44
|
+
const content = JSON.parse(fileData);
|
|
45
|
+
exports.config = schema.parse(content);
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if ((err === null || err === void 0 ? void 0 : err.code) === `ENOENT`) {
|
|
50
|
+
throw new cli_error_1.CliError(`Config file could not be found: ${filename}`);
|
|
51
|
+
}
|
|
52
|
+
if (err instanceof SyntaxError) {
|
|
53
|
+
throw new cli_error_1.CliError(`Config is not a valid JSON file: ${filename}`);
|
|
54
|
+
}
|
|
55
|
+
if (err instanceof zod_1.ZodError) {
|
|
56
|
+
throw new cli_error_1.CliError(`Config file ${filename} is not valid: ${(0, zod_validation_error_1.fromZodError)(err)}`);
|
|
57
|
+
}
|
|
58
|
+
throw new cli_error_1.CliError(`Error loading config: ${filename}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.loadConfig = loadConfig;
|
|
62
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,2CAAkC;AAClC,+DAAoD;AACpD,2CAAuC;AAEvC,mBAAmB;AACnB,MAAM,MAAM,GAAG,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAIjB,QAAA,MAAM,GAAe,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEjD;;;GAGG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACvC,IAAI;QACA,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrC,cAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,8DAA8D;KACjE;IAAC,OAAO,GAAQ,EAAE;QACf,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,MAAK,QAAQ,EAAE;YACxB,MAAM,IAAI,oBAAQ,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;SACrE;QACD,IAAI,GAAG,YAAY,WAAW,EAAE;YAC5B,MAAM,IAAI,oBAAQ,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;SACtE;QACD,IAAI,GAAG,YAAY,cAAQ,EAAE;YACzB,MAAM,IAAI,oBAAQ,CAAC,eAAe,QAAQ,kBAAkB,IAAA,mCAAY,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACpF;QACD,MAAM,IAAI,oBAAQ,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;KAC3D;AACL,CAAC;AAlBD,gCAkBC"}
|
package/cli/index.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
5
|
-
|
|
6
|
-
packageManager: PackageManagers | undefined;
|
|
7
|
-
tag: string;
|
|
8
|
-
}) => Promise<void>;
|
|
9
|
-
export declare const generateAction: (options: {
|
|
10
|
-
schema: string;
|
|
11
|
-
packageManager: PackageManagers | undefined;
|
|
12
|
-
dependencyCheck: boolean;
|
|
13
|
-
}) => Promise<void>;
|
|
2
|
+
import * as actions from './actions';
|
|
3
|
+
export declare const initAction: (projectPath: string, options: Parameters<typeof actions.init>[1]) => Promise<void>;
|
|
4
|
+
export declare const infoAction: (projectPath: string) => Promise<void>;
|
|
5
|
+
export declare const generateAction: (options: Parameters<typeof actions.generate>[1]) => Promise<void>;
|
|
14
6
|
export declare function createProgram(): Command;
|
|
15
7
|
export default function (): Promise<void>;
|
package/cli/index.js
CHANGED
|
@@ -35,45 +35,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.createProgram = exports.generateAction = exports.
|
|
38
|
+
exports.createProgram = exports.generateAction = exports.infoAction = exports.initAction = void 0;
|
|
39
39
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
40
40
|
const module_1 = require("@zenstackhq/language/module");
|
|
41
41
|
const colors_1 = __importDefault(require("colors"));
|
|
42
42
|
const commander_1 = require("commander");
|
|
43
|
-
const
|
|
43
|
+
const fs_1 = __importDefault(require("fs"));
|
|
44
44
|
const telemetry_1 = __importDefault(require("../telemetry"));
|
|
45
45
|
const version_utils_1 = require("../utils/version-utils");
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
exports.requiredPrismaVersion = '4.0.0';
|
|
46
|
+
const actions = __importStar(require("./actions"));
|
|
47
|
+
const config_1 = require("./config");
|
|
48
|
+
const DEFAULT_CONFIG_FILE = 'zenstack.config.json';
|
|
50
49
|
const initAction = (projectPath, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
51
|
-
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'init' }, () =>
|
|
50
|
+
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'init' }, () => actions.init(projectPath, options));
|
|
52
51
|
});
|
|
53
52
|
exports.initAction = initAction;
|
|
53
|
+
const infoAction = (projectPath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'info' }, () => actions.info(projectPath));
|
|
55
|
+
});
|
|
56
|
+
exports.infoAction = infoAction;
|
|
54
57
|
const generateAction = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
55
|
-
|
|
56
|
-
checkRequiredPackage('prisma', exports.requiredPrismaVersion);
|
|
57
|
-
checkRequiredPackage('@prisma/client', exports.requiredPrismaVersion);
|
|
58
|
-
}
|
|
59
|
-
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'generate' }, () => (0, cli_util_1.runPlugins)(options));
|
|
58
|
+
yield telemetry_1.default.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command: 'generate' }, () => actions.generate(process.cwd(), options));
|
|
60
59
|
});
|
|
61
60
|
exports.generateAction = generateAction;
|
|
62
|
-
const checkRequiredPackage = (packageName, minVersion) => {
|
|
63
|
-
let packageVersion;
|
|
64
|
-
try {
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
66
|
-
packageVersion = require(`${packageName}/package.json`).version;
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
console.error(colors_1.default.red(`${packageName} not found, please install it`));
|
|
70
|
-
throw new cli_error_1.CliError(`${packageName} not found`);
|
|
71
|
-
}
|
|
72
|
-
if (minVersion && semver.lt(packageVersion, minVersion)) {
|
|
73
|
-
console.error(colors_1.default.red(`${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`));
|
|
74
|
-
throw new cli_error_1.CliError(`${packageName} version is too low`);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
61
|
function createProgram() {
|
|
78
62
|
const program = new commander_1.Command('zenstack');
|
|
79
63
|
program.version((0, version_utils_1.getVersion)(), '-v --version', 'display CLI version');
|
|
@@ -83,27 +67,50 @@ function createProgram() {
|
|
|
83
67
|
.showHelpAfterError()
|
|
84
68
|
.showSuggestionAfterError();
|
|
85
69
|
const schemaOption = new commander_1.Option('--schema <file>', `schema file (with extension ${schemaExtensions})`).default('./schema.zmodel');
|
|
70
|
+
const configOption = new commander_1.Option('-c, --config [file]', 'config file');
|
|
86
71
|
const pmOption = new commander_1.Option('-p, --package-manager <pm>', 'package manager to use').choices([
|
|
87
72
|
'npm',
|
|
88
73
|
'yarn',
|
|
89
74
|
'pnpm',
|
|
90
75
|
]);
|
|
76
|
+
const noVersionCheckOption = new commander_1.Option('--no-version-check', 'do not check for new version');
|
|
91
77
|
const noDependencyCheck = new commander_1.Option('--no-dependency-check', 'do not check if dependencies are installed');
|
|
78
|
+
program
|
|
79
|
+
.command('info')
|
|
80
|
+
.description('Get information of installed ZenStack and related packages.')
|
|
81
|
+
.argument('[path]', 'project path', '.')
|
|
82
|
+
.action(exports.infoAction);
|
|
92
83
|
program
|
|
93
84
|
.command('init')
|
|
94
85
|
.description('Initialize an existing project for ZenStack.')
|
|
86
|
+
.addOption(configOption)
|
|
95
87
|
.addOption(pmOption)
|
|
96
88
|
.addOption(new commander_1.Option('--prisma <file>', 'location of Prisma schema file to bootstrap from'))
|
|
97
|
-
.addOption(new commander_1.Option('--tag <tag>', 'the NPM package tag to use when installing dependencies')
|
|
89
|
+
.addOption(new commander_1.Option('--tag <tag>', 'the NPM package tag to use when installing dependencies'))
|
|
90
|
+
.addOption(noVersionCheckOption)
|
|
98
91
|
.argument('[path]', 'project path', '.')
|
|
99
92
|
.action(exports.initAction);
|
|
100
93
|
program
|
|
101
94
|
.command('generate')
|
|
102
95
|
.description('Run code generation.')
|
|
103
96
|
.addOption(schemaOption)
|
|
104
|
-
.addOption(
|
|
97
|
+
.addOption(new commander_1.Option('-o, --output <path>', 'default output directory for built-in plugins'))
|
|
98
|
+
.addOption(configOption)
|
|
99
|
+
.addOption(new commander_1.Option('--no-default-plugins', 'do not run default plugins'))
|
|
100
|
+
.addOption(new commander_1.Option('--no-compile', 'do not compile the output of built-in plugins'))
|
|
101
|
+
.addOption(noVersionCheckOption)
|
|
105
102
|
.addOption(noDependencyCheck)
|
|
106
103
|
.action(exports.generateAction);
|
|
104
|
+
// make sure config is loaded before actions run
|
|
105
|
+
program.hook('preAction', (_, actionCommand) => __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
let configFile = actionCommand.opts().config;
|
|
107
|
+
if (!configFile && fs_1.default.existsSync(DEFAULT_CONFIG_FILE)) {
|
|
108
|
+
configFile = DEFAULT_CONFIG_FILE;
|
|
109
|
+
}
|
|
110
|
+
if (configFile) {
|
|
111
|
+
(0, config_1.loadConfig)(configFile);
|
|
112
|
+
}
|
|
113
|
+
}));
|
|
107
114
|
return program;
|
|
108
115
|
}
|
|
109
116
|
exports.createProgram = createProgram;
|
package/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,wDAAqE;AACrE,oDAA4B;AAC5B,yCAA4C;AAC5C
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/cli/plugin-runner.d.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Model } from '@zenstackhq/language/ast';
|
|
2
|
+
export declare type PluginRunnerOptions = {
|
|
3
|
+
schema: Model;
|
|
4
|
+
schemaPath: string;
|
|
5
|
+
output?: string;
|
|
6
|
+
defaultPlugins: boolean;
|
|
7
|
+
compile: boolean;
|
|
8
|
+
};
|
|
2
9
|
/**
|
|
3
|
-
* ZenStack
|
|
10
|
+
* ZenStack plugin runner
|
|
4
11
|
*/
|
|
5
12
|
export declare class PluginRunner {
|
|
6
13
|
/**
|
|
7
14
|
* Runs a series of nested generators
|
|
8
15
|
*/
|
|
9
|
-
run(
|
|
16
|
+
run(options: PluginRunnerOptions): Promise<void>;
|
|
17
|
+
private calculateCorePlugins;
|
|
18
|
+
private hasValidation;
|
|
10
19
|
private getPluginName;
|
|
20
|
+
private getPluginDependencies;
|
|
11
21
|
private getPluginProvider;
|
|
12
22
|
private runPlugin;
|
|
13
23
|
private getPluginModulePath;
|