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/utils/ast-utils.js
CHANGED
|
@@ -1,85 +1,136 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isCollectionPredicate = exports.getAllDeclarationsFromImports = exports.resolveImport = exports.resolveTransitiveImports = exports.resolveImportUri = exports.getDataModelFieldReference = exports.isAuthInvocation = exports.getIdFields = exports.mergeBaseModel = exports.extractDataModelsWithAllowRules = void 0;
|
|
4
4
|
const ast_1 = require("@zenstackhq/language/ast");
|
|
5
5
|
const sdk_1 = require("@zenstackhq/sdk");
|
|
6
|
-
const
|
|
6
|
+
const langium_1 = require("langium");
|
|
7
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
7
8
|
function extractDataModelsWithAllowRules(model) {
|
|
8
9
|
return model.declarations.filter((d) => (0, ast_1.isDataModel)(d) && d.attributes.some((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@allow'; }));
|
|
9
10
|
}
|
|
10
11
|
exports.extractDataModelsWithAllowRules = extractDataModelsWithAllowRules;
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
12
|
+
function mergeBaseModel(model) {
|
|
13
|
+
model.declarations
|
|
14
|
+
.filter((x) => x.$type === 'DataModel')
|
|
15
|
+
.forEach((decl) => {
|
|
16
|
+
const dataModel = decl;
|
|
17
|
+
dataModel.fields = dataModel.superTypes
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
19
|
+
.flatMap((superType) => updateContainer(superType.ref.fields, dataModel))
|
|
20
|
+
.concat(dataModel.fields);
|
|
21
|
+
dataModel.attributes = dataModel.superTypes
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
23
|
+
.flatMap((superType) => updateContainer(superType.ref.attributes, dataModel))
|
|
24
|
+
.concat(dataModel.attributes);
|
|
25
|
+
});
|
|
26
|
+
// remove abstract models
|
|
27
|
+
model.declarations = model.declarations.filter((x) => !(x.$type == 'DataModel' && x.isAbstract));
|
|
28
|
+
}
|
|
29
|
+
exports.mergeBaseModel = mergeBaseModel;
|
|
30
|
+
function updateContainer(nodes, container) {
|
|
31
|
+
return nodes.map((node) => {
|
|
32
|
+
const cloneField = Object.assign({}, node);
|
|
33
|
+
const mutable = cloneField;
|
|
34
|
+
// update container
|
|
35
|
+
mutable.$container = container;
|
|
36
|
+
return mutable;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function getIdFields(dataModel) {
|
|
40
|
+
const fieldLevelId = dataModel.$resolvedFields.find((f) => f.attributes.some((attr) => attr.decl.$refText === '@id'));
|
|
41
|
+
if (fieldLevelId) {
|
|
42
|
+
return [fieldLevelId];
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// get model level @@id attribute
|
|
46
|
+
const modelIdAttr = dataModel.attributes.find((attr) => { var _a, _b; return ((_b = (_a = attr.decl) === null || _a === void 0 ? void 0 : _a.ref) === null || _b === void 0 ? void 0 : _b.name) === '@@id'; });
|
|
47
|
+
if (modelIdAttr) {
|
|
48
|
+
// get fields referenced in the attribute: @@id([field1, field2]])
|
|
49
|
+
if (!(0, ast_1.isArrayExpr)(modelIdAttr.args[0].value)) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
const argValue = modelIdAttr.args[0].value;
|
|
53
|
+
return argValue.items
|
|
54
|
+
.filter((expr) => (0, ast_1.isReferenceExpr)(expr) && !!getDataModelFieldReference(expr))
|
|
55
|
+
.map((expr) => expr.target.ref);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
exports.getIdFields = getIdFields;
|
|
61
|
+
function isAuthInvocation(node) {
|
|
62
|
+
var _a;
|
|
63
|
+
return (0, ast_1.isInvocationExpr)(node) && ((_a = node.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'auth' && (0, sdk_1.isFromStdlib)(node.function.ref);
|
|
30
64
|
}
|
|
31
|
-
exports.
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// any constant true deny rule
|
|
36
|
-
return false;
|
|
65
|
+
exports.isAuthInvocation = isAuthInvocation;
|
|
66
|
+
function getDataModelFieldReference(expr) {
|
|
67
|
+
if ((0, ast_1.isReferenceExpr)(expr) && (0, ast_1.isDataModelField)(expr.target.ref)) {
|
|
68
|
+
return expr.target.ref;
|
|
37
69
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// no allow rule
|
|
41
|
-
return false;
|
|
70
|
+
else if ((0, ast_1.isMemberAccessExpr)(expr) && (0, ast_1.isDataModelField)(expr.member.ref)) {
|
|
71
|
+
return expr.member.ref;
|
|
42
72
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// any constant true allow rule
|
|
46
|
-
return true;
|
|
73
|
+
else {
|
|
74
|
+
return undefined;
|
|
47
75
|
}
|
|
48
|
-
return undefined;
|
|
49
76
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
exports.getDataModelFieldReference = getDataModelFieldReference;
|
|
78
|
+
function resolveImportUri(imp) {
|
|
79
|
+
if (imp.path === undefined || imp.path.length === 0) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const dirUri = vscode_uri_1.Utils.dirname((0, langium_1.getDocument)(imp).uri);
|
|
83
|
+
let grammarPath = imp.path;
|
|
84
|
+
if (!grammarPath.endsWith('.zmodel')) {
|
|
85
|
+
grammarPath += '.zmodel';
|
|
86
|
+
}
|
|
87
|
+
return vscode_uri_1.Utils.resolvePath(dirUri, grammarPath);
|
|
88
|
+
}
|
|
89
|
+
exports.resolveImportUri = resolveImportUri;
|
|
90
|
+
function resolveTransitiveImports(documents, model) {
|
|
91
|
+
return resolveTransitiveImportsInternal(documents, model);
|
|
92
|
+
}
|
|
93
|
+
exports.resolveTransitiveImports = resolveTransitiveImports;
|
|
94
|
+
function resolveTransitiveImportsInternal(documents, model, initialModel = model, visited = new Set(), models = new Set()) {
|
|
95
|
+
const doc = (0, langium_1.getDocument)(model);
|
|
96
|
+
if (initialModel !== model) {
|
|
97
|
+
models.add(model);
|
|
98
|
+
}
|
|
99
|
+
if (!visited.has(doc.uri)) {
|
|
100
|
+
visited.add(doc.uri);
|
|
101
|
+
for (const imp of model.imports) {
|
|
102
|
+
const importedModel = resolveImport(documents, imp);
|
|
103
|
+
if (importedModel) {
|
|
104
|
+
resolveTransitiveImportsInternal(documents, importedModel, initialModel, visited, models);
|
|
105
|
+
}
|
|
55
106
|
}
|
|
56
|
-
|
|
57
|
-
|
|
107
|
+
}
|
|
108
|
+
return Array.from(models);
|
|
109
|
+
}
|
|
110
|
+
function resolveImport(documents, imp) {
|
|
111
|
+
const resolvedUri = resolveImportUri(imp);
|
|
112
|
+
try {
|
|
113
|
+
if (resolvedUri) {
|
|
114
|
+
const resolvedDocument = documents.getOrCreateDocument(resolvedUri);
|
|
115
|
+
const node = resolvedDocument.parseResult.value;
|
|
116
|
+
if ((0, ast_1.isModel)(node)) {
|
|
117
|
+
return node;
|
|
118
|
+
}
|
|
58
119
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
120
|
+
}
|
|
121
|
+
catch (_a) {
|
|
122
|
+
// NOOP
|
|
123
|
+
}
|
|
124
|
+
return undefined;
|
|
62
125
|
}
|
|
63
|
-
exports.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
'@endsWith',
|
|
68
|
-
'@email',
|
|
69
|
-
'@url',
|
|
70
|
-
'@datetime',
|
|
71
|
-
'@gt',
|
|
72
|
-
'@gte',
|
|
73
|
-
'@lt',
|
|
74
|
-
'@lte',
|
|
75
|
-
];
|
|
76
|
-
function getIdField(dataModel) {
|
|
77
|
-
return dataModel.fields.find((f) => f.attributes.some((attr) => attr.decl.$refText === '@id'));
|
|
126
|
+
exports.resolveImport = resolveImport;
|
|
127
|
+
function getAllDeclarationsFromImports(documents, model) {
|
|
128
|
+
const imports = resolveTransitiveImports(documents, model);
|
|
129
|
+
return model.declarations.concat(...imports.map((imp) => imp.declarations));
|
|
78
130
|
}
|
|
79
|
-
exports.
|
|
80
|
-
function
|
|
81
|
-
|
|
82
|
-
return (0, ast_1.isInvocationExpr)(expr) && ((_a = expr.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'auth' && (0, utils_1.isFromStdlib)(expr.function.ref);
|
|
131
|
+
exports.getAllDeclarationsFromImports = getAllDeclarationsFromImports;
|
|
132
|
+
function isCollectionPredicate(expr) {
|
|
133
|
+
return (0, ast_1.isBinaryExpr)(expr) && ['?', '!', '^'].includes(expr.operator);
|
|
83
134
|
}
|
|
84
|
-
exports.
|
|
135
|
+
exports.isCollectionPredicate = isCollectionPredicate;
|
|
85
136
|
//# sourceMappingURL=ast-utils.js.map
|
package/utils/ast-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../src/utils/ast-utils.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../src/utils/ast-utils.ts"],"names":[],"mappings":"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"}
|
package/utils/pkg-utils.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare type PackageManagers = 'npm' | 'yarn' | 'pnpm';
|
|
2
|
-
export declare function installPackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, tag?: string, projectPath?: string): void;
|
|
3
|
-
export declare function ensurePackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, tag?: string, projectPath?: string): void;
|
|
2
|
+
export declare function installPackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, tag?: string, projectPath?: string, exactVersion?: boolean): void;
|
|
3
|
+
export declare function ensurePackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, tag?: string, projectPath?: string, exactVersion?: boolean): void;
|
package/utils/pkg-utils.js
CHANGED
|
@@ -7,39 +7,57 @@ exports.ensurePackage = exports.installPackage = void 0;
|
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const exec_utils_1 = require("./exec-utils");
|
|
10
|
-
function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
function findUp(names, cwd) {
|
|
11
|
+
let dir = cwd;
|
|
12
|
+
// eslint-disable-next-line no-constant-condition
|
|
13
|
+
while (true) {
|
|
14
|
+
const target = names.find((name) => fs_1.default.existsSync(path_1.default.join(dir, name)));
|
|
15
|
+
if (target)
|
|
16
|
+
return target;
|
|
17
|
+
const up = path_1.default.resolve(dir, '..');
|
|
18
|
+
if (up === dir)
|
|
19
|
+
return undefined; // it'll fail anyway
|
|
20
|
+
dir = up;
|
|
16
21
|
}
|
|
17
|
-
|
|
22
|
+
}
|
|
23
|
+
function getPackageManager(projectPath = '.') {
|
|
24
|
+
const lockFile = findUp(['yarn.lock', 'pnpm-lock.yaml', 'package-lock.json'], projectPath);
|
|
25
|
+
if (!lockFile) {
|
|
26
|
+
// default use npm
|
|
18
27
|
return 'npm';
|
|
19
28
|
}
|
|
29
|
+
switch (path_1.default.basename(lockFile)) {
|
|
30
|
+
case 'yarn.lock':
|
|
31
|
+
return 'yarn';
|
|
32
|
+
case 'pnpm-lock.yaml':
|
|
33
|
+
return 'pnpm';
|
|
34
|
+
default:
|
|
35
|
+
return 'npm';
|
|
36
|
+
}
|
|
20
37
|
}
|
|
21
|
-
function installPackage(pkg, dev, pkgManager = undefined, tag = 'latest', projectPath = '.') {
|
|
38
|
+
function installPackage(pkg, dev, pkgManager = undefined, tag = 'latest', projectPath = '.', exactVersion = true) {
|
|
22
39
|
const manager = pkgManager !== null && pkgManager !== void 0 ? pkgManager : getPackageManager(projectPath);
|
|
23
|
-
console.log(`Installing package "${pkg}" with ${manager}`);
|
|
40
|
+
console.log(`Installing package "${pkg}@${tag}" with ${manager}`);
|
|
24
41
|
switch (manager) {
|
|
25
42
|
case 'yarn':
|
|
26
|
-
(0, exec_utils_1.execSync)(`yarn --cwd "${projectPath}" add ${pkg}@${tag} ${dev ? ' --dev' : ''}
|
|
43
|
+
(0, exec_utils_1.execSync)(`yarn --cwd "${projectPath}" add ${exactVersion ? '--exact' : ''} ${pkg}@${tag} ${dev ? ' --dev' : ''}`);
|
|
27
44
|
break;
|
|
28
45
|
case 'pnpm':
|
|
29
|
-
(0, exec_utils_1.execSync)(`pnpm add -C "${projectPath}" ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);
|
|
46
|
+
(0, exec_utils_1.execSync)(`pnpm add -C "${projectPath}" ${exactVersion ? '--save-exact' : ''} ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);
|
|
30
47
|
break;
|
|
31
48
|
default:
|
|
32
|
-
(0, exec_utils_1.execSync)(`npm install --prefix "${projectPath}" ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);
|
|
49
|
+
(0, exec_utils_1.execSync)(`npm install --prefix "${projectPath}" ${exactVersion ? '--save-exact' : ''} ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);
|
|
33
50
|
break;
|
|
34
51
|
}
|
|
35
52
|
}
|
|
36
53
|
exports.installPackage = installPackage;
|
|
37
|
-
function ensurePackage(pkg, dev, pkgManager = undefined, tag = 'latest', projectPath = '.') {
|
|
54
|
+
function ensurePackage(pkg, dev, pkgManager = undefined, tag = 'latest', projectPath = '.', exactVersion = false) {
|
|
55
|
+
const resolvePath = path_1.default.resolve(projectPath);
|
|
38
56
|
try {
|
|
39
|
-
require(pkg);
|
|
57
|
+
require.resolve(pkg, { paths: [resolvePath] });
|
|
40
58
|
}
|
|
41
|
-
catch (
|
|
42
|
-
installPackage(pkg, dev, pkgManager, tag,
|
|
59
|
+
catch (err) {
|
|
60
|
+
installPackage(pkg, dev, pkgManager, tag, resolvePath, exactVersion);
|
|
43
61
|
}
|
|
44
62
|
}
|
|
45
63
|
exports.ensurePackage = ensurePackage;
|
package/utils/pkg-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkg-utils.js","sourceRoot":"","sources":["../../src/utils/pkg-utils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,6CAAwC;AAIxC,SAAS,
|
|
1
|
+
{"version":3,"file":"pkg-utils.js","sourceRoot":"","sources":["../../src/utils/pkg-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Expression } from '@zenstackhq/language/ast';
|
|
2
|
+
import { ExpressionContext } from '@zenstackhq/sdk';
|
|
3
|
+
export declare class TypeScriptExpressionTransformerError extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
declare type Options = {
|
|
7
|
+
isPostGuard?: boolean;
|
|
8
|
+
fieldReferenceContext?: string;
|
|
9
|
+
context: ExpressionContext;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Transforms ZModel expression to plain TypeScript expression.
|
|
13
|
+
*/
|
|
14
|
+
export declare class TypeScriptExpressionTransformer {
|
|
15
|
+
private readonly options;
|
|
16
|
+
/**
|
|
17
|
+
* Constructs a new TypeScriptExpressionTransformer.
|
|
18
|
+
*
|
|
19
|
+
* @param isPostGuard indicates if we're writing for post-update conditions
|
|
20
|
+
*/
|
|
21
|
+
constructor(options: Options);
|
|
22
|
+
/**
|
|
23
|
+
* Transforms the given expression to a TypeScript expression.
|
|
24
|
+
* @param normalizeUndefined if undefined values should be normalized to null
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
transform(expr: Expression, normalizeUndefined?: boolean): string;
|
|
28
|
+
private this;
|
|
29
|
+
private memberAccess;
|
|
30
|
+
private invocation;
|
|
31
|
+
private _auth;
|
|
32
|
+
private _now;
|
|
33
|
+
private _length;
|
|
34
|
+
private _contains;
|
|
35
|
+
private _startsWith;
|
|
36
|
+
private _endsWith;
|
|
37
|
+
private _regex;
|
|
38
|
+
private _email;
|
|
39
|
+
private _datetime;
|
|
40
|
+
private _url;
|
|
41
|
+
private _has;
|
|
42
|
+
private _hasEvery;
|
|
43
|
+
private _hasSome;
|
|
44
|
+
private _isEmpty;
|
|
45
|
+
private ensureBoolean;
|
|
46
|
+
private reference;
|
|
47
|
+
private null;
|
|
48
|
+
private array;
|
|
49
|
+
private literal;
|
|
50
|
+
private unary;
|
|
51
|
+
private binary;
|
|
52
|
+
private collectionPredicate;
|
|
53
|
+
}
|
|
54
|
+
export {};
|