zenstack 1.0.16 → 1.1.0

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 (154) hide show
  1. package/README.md +93 -24
  2. package/bin/post-install.js +1 -1
  3. package/cli/actions/generate.d.ts +13 -0
  4. package/cli/actions/generate.js +71 -0
  5. package/cli/actions/generate.js.map +1 -0
  6. package/cli/actions/index.d.ts +3 -0
  7. package/cli/actions/index.js +20 -0
  8. package/cli/actions/index.js.map +1 -0
  9. package/cli/actions/info.d.ts +4 -0
  10. package/cli/actions/info.js +63 -0
  11. package/cli/actions/info.js.map +1 -0
  12. package/cli/actions/init.d.ts +12 -0
  13. package/cli/actions/init.js +83 -0
  14. package/cli/actions/init.js.map +1 -0
  15. package/cli/cli-util.d.ts +14 -11
  16. package/cli/cli-util.js +150 -82
  17. package/cli/cli-util.js.map +1 -1
  18. package/cli/config.d.ts +10 -0
  19. package/cli/config.js +62 -0
  20. package/cli/config.js.map +1 -0
  21. package/cli/index.d.ts +4 -12
  22. package/cli/index.js +36 -29
  23. package/cli/index.js.map +1 -1
  24. package/cli/plugin-runner.d.ts +13 -3
  25. package/cli/plugin-runner.js +165 -59
  26. package/cli/plugin-runner.js.map +1 -1
  27. package/constants.js +1 -1
  28. package/language-server/constants.d.ts +7 -0
  29. package/language-server/constants.js +8 -1
  30. package/language-server/constants.js.map +1 -1
  31. package/language-server/utils.d.ts +1 -14
  32. package/language-server/utils.js +2 -38
  33. package/language-server/utils.js.map +1 -1
  34. package/language-server/validator/attribute-application-validator.d.ts +15 -0
  35. package/language-server/validator/attribute-application-validator.js +246 -0
  36. package/language-server/validator/attribute-application-validator.js.map +1 -0
  37. package/language-server/validator/attribute-validator.d.ts +1 -1
  38. package/language-server/validator/attribute-validator.js +4 -1
  39. package/language-server/validator/attribute-validator.js.map +1 -1
  40. package/language-server/validator/datamodel-validator.d.ts +7 -0
  41. package/language-server/validator/datamodel-validator.js +84 -33
  42. package/language-server/validator/datamodel-validator.js.map +1 -1
  43. package/language-server/validator/enum-validator.js +3 -6
  44. package/language-server/validator/enum-validator.js.map +1 -1
  45. package/language-server/validator/expression-validator.d.ts +1 -1
  46. package/language-server/validator/expression-validator.js +108 -3
  47. package/language-server/validator/expression-validator.js.map +1 -1
  48. package/language-server/validator/function-decl-validator.d.ts +9 -0
  49. package/language-server/validator/function-decl-validator.js +13 -0
  50. package/language-server/validator/function-decl-validator.js.map +1 -0
  51. package/language-server/validator/function-invocation-validator.d.ts +11 -0
  52. package/language-server/validator/function-invocation-validator.js +135 -0
  53. package/language-server/validator/function-invocation-validator.js.map +1 -0
  54. package/language-server/validator/schema-validator.d.ts +4 -1
  55. package/language-server/validator/schema-validator.js +28 -7
  56. package/language-server/validator/schema-validator.js.map +1 -1
  57. package/language-server/validator/utils.d.ts +3 -4
  58. package/language-server/validator/utils.js +20 -123
  59. package/language-server/validator/utils.js.map +1 -1
  60. package/language-server/validator/zmodel-validator.d.ts +5 -1
  61. package/language-server/validator/zmodel-validator.js +18 -4
  62. package/language-server/validator/zmodel-validator.js.map +1 -1
  63. package/language-server/zmodel-code-action.d.ts +2 -1
  64. package/language-server/zmodel-code-action.js +46 -21
  65. package/language-server/zmodel-code-action.js.map +1 -1
  66. package/language-server/zmodel-definition.d.ts +7 -0
  67. package/language-server/zmodel-definition.js +31 -0
  68. package/language-server/zmodel-definition.js.map +1 -0
  69. package/language-server/zmodel-formatter.js +2 -2
  70. package/language-server/zmodel-formatter.js.map +1 -1
  71. package/language-server/zmodel-linker.d.ts +3 -0
  72. package/language-server/zmodel-linker.js +122 -41
  73. package/language-server/zmodel-linker.js.map +1 -1
  74. package/language-server/zmodel-module.js +4 -1
  75. package/language-server/zmodel-module.js.map +1 -1
  76. package/language-server/zmodel-scope.d.ts +7 -1
  77. package/language-server/zmodel-scope.js +57 -1
  78. package/language-server/zmodel-scope.js.map +1 -1
  79. package/language-server/zmodel-workspace-manager.d.ts +5 -1
  80. package/language-server/zmodel-workspace-manager.js +101 -0
  81. package/language-server/zmodel-workspace-manager.js.map +1 -1
  82. package/package.json +27 -20
  83. package/plugins/access-policy/expression-writer.d.ts +7 -0
  84. package/plugins/access-policy/expression-writer.js +325 -106
  85. package/plugins/access-policy/expression-writer.js.map +1 -1
  86. package/plugins/access-policy/index.d.ts +3 -3
  87. package/plugins/access-policy/index.js +3 -5
  88. package/plugins/access-policy/index.js.map +1 -1
  89. package/plugins/access-policy/policy-guard-generator.d.ts +10 -3
  90. package/plugins/access-policy/policy-guard-generator.js +406 -121
  91. package/plugins/access-policy/policy-guard-generator.js.map +1 -1
  92. package/plugins/model-meta/index.d.ts +3 -3
  93. package/plugins/model-meta/index.js +110 -46
  94. package/plugins/model-meta/index.js.map +1 -1
  95. package/plugins/plugin-utils.d.ts +8 -7
  96. package/plugins/plugin-utils.js +55 -21
  97. package/plugins/plugin-utils.js.map +1 -1
  98. package/plugins/prisma/index.d.ts +3 -3
  99. package/plugins/prisma/index.js +3 -5
  100. package/plugins/prisma/index.js.map +1 -1
  101. package/plugins/prisma/prisma-builder.d.ts +7 -14
  102. package/plugins/prisma/prisma-builder.js +29 -34
  103. package/plugins/prisma/prisma-builder.js.map +1 -1
  104. package/plugins/prisma/schema-generator.d.ts +7 -3
  105. package/plugins/prisma/schema-generator.js +146 -102
  106. package/plugins/prisma/schema-generator.js.map +1 -1
  107. package/plugins/prisma/zmodel-code-generator.d.ts +3 -1
  108. package/plugins/prisma/zmodel-code-generator.js +12 -2
  109. package/plugins/prisma/zmodel-code-generator.js.map +1 -1
  110. package/plugins/zod/generator.d.ts +4 -0
  111. package/plugins/zod/generator.js +298 -0
  112. package/plugins/zod/generator.js.map +1 -0
  113. package/plugins/zod/index.d.ts +4 -0
  114. package/plugins/zod/index.js +24 -0
  115. package/plugins/zod/index.js.map +1 -0
  116. package/plugins/zod/transformer.d.ts +68 -0
  117. package/plugins/zod/transformer.js +554 -0
  118. package/plugins/zod/transformer.js.map +1 -0
  119. package/plugins/zod/types.d.ts +25 -0
  120. package/plugins/zod/types.js.map +1 -0
  121. package/plugins/zod/utils/removeDir.d.ts +1 -0
  122. package/plugins/zod/utils/removeDir.js +30 -0
  123. package/plugins/zod/utils/removeDir.js.map +1 -0
  124. package/plugins/zod/utils/schema-gen.d.ts +3 -0
  125. package/plugins/zod/utils/schema-gen.js +188 -0
  126. package/plugins/zod/utils/schema-gen.js.map +1 -0
  127. package/res/starter.zmodel +6 -8
  128. package/res/stdlib.zmodel +238 -74
  129. package/telemetry.d.ts +2 -1
  130. package/telemetry.js +21 -11
  131. package/telemetry.js.map +1 -1
  132. package/utils/ast-utils.d.ts +12 -15
  133. package/utils/ast-utils.js +117 -66
  134. package/utils/ast-utils.js.map +1 -1
  135. package/utils/pkg-utils.d.ts +2 -2
  136. package/utils/pkg-utils.js +34 -16
  137. package/utils/pkg-utils.js.map +1 -1
  138. package/utils/typescript-expression-transformer.d.ts +54 -0
  139. package/utils/typescript-expression-transformer.js +326 -0
  140. package/utils/typescript-expression-transformer.js.map +1 -0
  141. package/utils/version-utils.js +7 -1
  142. package/utils/version-utils.js.map +1 -1
  143. package/plugins/access-policy/typescript-expression-transformer.d.ts +0 -26
  144. package/plugins/access-policy/typescript-expression-transformer.js +0 -111
  145. package/plugins/access-policy/typescript-expression-transformer.js.map +0 -1
  146. package/plugins/access-policy/utils.d.ts +0 -5
  147. package/plugins/access-policy/utils.js +0 -14
  148. package/plugins/access-policy/utils.js.map +0 -1
  149. package/plugins/access-policy/zod-schema-generator.d.ts +0 -12
  150. package/plugins/access-policy/zod-schema-generator.js +0 -158
  151. package/plugins/access-policy/zod-schema-generator.js.map +0 -1
  152. package/types.d.ts +0 -12
  153. package/types.js.map +0 -1
  154. /package/{types.js → plugins/zod/types.js} +0 -0
@@ -1,85 +1,136 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isAuthInvocation = exports.getIdField = exports.VALIDATION_ATTRIBUTES = exports.analyzePolicies = exports.extractDataModelsWithAllowRules = void 0;
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 utils_1 = require("../language-server/utils");
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 analyzePolicies(dataModel) {
12
- const allows = dataModel.attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@allow'; });
13
- const denies = dataModel.attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@deny'; });
14
- const create = toStaticPolicy('create', allows, denies);
15
- const read = toStaticPolicy('read', allows, denies);
16
- const update = toStaticPolicy('update', allows, denies);
17
- const del = toStaticPolicy('delete', allows, denies);
18
- const hasFieldValidation = dataModel.fields.some((field) => field.attributes.some((attr) => exports.VALIDATION_ATTRIBUTES.includes(attr.decl.$refText)));
19
- return {
20
- allows,
21
- denies,
22
- create,
23
- read,
24
- update,
25
- delete: del,
26
- allowAll: create === true && read === true && update === true && del === true,
27
- denyAll: create === false && read === false && update === false && del === false,
28
- hasFieldValidation,
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.analyzePolicies = analyzePolicies;
32
- function toStaticPolicy(operation, allows, denies) {
33
- const filteredDenies = forOperation(operation, denies);
34
- if (filteredDenies.some((rule) => (0, sdk_1.getLiteral)(rule.args[1].value) === true)) {
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
- const filteredAllows = forOperation(operation, allows);
39
- if (filteredAllows.length === 0) {
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
- if (filteredDenies.length === 0 &&
44
- filteredAllows.some((rule) => (0, sdk_1.getLiteral)(rule.args[1].value) === true)) {
45
- // any constant true allow rule
46
- return true;
73
+ else {
74
+ return undefined;
47
75
  }
48
- return undefined;
49
76
  }
50
- function forOperation(operation, rules) {
51
- return rules.filter((rule) => {
52
- const ops = (0, sdk_1.getLiteral)(rule.args[0].value);
53
- if (!ops) {
54
- return false;
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
- if (ops === 'all') {
57
- return true;
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
- const splitOps = ops.split(',').map((p) => p.trim());
60
- return splitOps.includes(operation);
61
- });
120
+ }
121
+ catch (_a) {
122
+ // NOOP
123
+ }
124
+ return undefined;
62
125
  }
63
- exports.VALIDATION_ATTRIBUTES = [
64
- '@length',
65
- '@regex',
66
- '@startsWith',
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.getIdField = getIdField;
80
- function isAuthInvocation(expr) {
81
- var _a;
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.isAuthInvocation = isAuthInvocation;
135
+ exports.isCollectionPredicate = isCollectionPredicate;
85
136
  //# sourceMappingURL=ast-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../src/utils/ast-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../src/utils/ast-utils.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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 getPackageManager(projectPath = '.') {
11
- if (fs_1.default.existsSync(path_1.default.join(projectPath, 'yarn.lock'))) {
12
- return 'yarn';
13
- }
14
- else if (fs_1.default.existsSync(path_1.default.join(projectPath, 'pnpm-lock.yaml'))) {
15
- return 'pnpm';
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
- else {
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' : ''} --ignore-engines`);
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 (_a) {
42
- installPackage(pkg, dev, pkgManager, tag, projectPath);
59
+ catch (err) {
60
+ installPackage(pkg, dev, pkgManager, tag, resolvePath, exactVersion);
43
61
  }
44
62
  }
45
63
  exports.ensurePackage = ensurePackage;
@@ -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,iBAAiB,CAAC,WAAW,GAAG,GAAG;IACxC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE;QACpD,OAAO,MAAM,CAAC;KACjB;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE;QAChE,OAAO,MAAM,CAAC;KACjB;SAAM;QACH,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAED,SAAgB,cAAc,CAC1B,GAAW,EACX,GAAY,EACZ,aAA0C,SAAS,EACnD,GAAG,GAAG,QAAQ,EACd,WAAW,GAAG,GAAG;IAEjB,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,UAAU,OAAO,EAAE,CAAC,CAAC;IAC3D,QAAQ,OAAO,EAAE;QACb,KAAK,MAAM;YACP,IAAA,qBAAQ,EAAC,eAAe,WAAW,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAClG,MAAM;QAEV,KAAK,MAAM;YACP,IAAA,qBAAQ,EAAC,gBAAgB,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;YACnF,MAAM;QAEV;YACI,IAAA,qBAAQ,EAAC,yBAAyB,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;YAC5F,MAAM;KACb;AACL,CAAC;AAtBD,wCAsBC;AAED,SAAgB,aAAa,CACzB,GAAW,EACX,GAAY,EACZ,aAA0C,SAAS,EACnD,GAAG,GAAG,QAAQ,EACd,WAAW,GAAG,GAAG;IAEjB,IAAI;QACA,OAAO,CAAC,GAAG,CAAC,CAAC;KAChB;IAAC,WAAM;QACJ,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;KAC1D;AACL,CAAC;AAZD,sCAYC"}
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 {};