zenstack 1.0.0-alpha.23 → 1.0.0-alpha.24

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 (84) hide show
  1. package/README.md +79 -9
  2. package/cli/cli-error.js +3 -5
  3. package/cli/cli-error.js.map +1 -1
  4. package/cli/cli-util.js +123 -105
  5. package/cli/cli-util.js.map +1 -1
  6. package/cli/index.js +105 -63
  7. package/cli/index.js.map +1 -1
  8. package/cli/plugin-runner.js +130 -127
  9. package/cli/plugin-runner.js.map +1 -1
  10. package/language-server/constants.js +5 -13
  11. package/language-server/constants.js.map +1 -1
  12. package/language-server/main.js +8 -15
  13. package/language-server/main.js.map +1 -1
  14. package/language-server/types.js +3 -1
  15. package/language-server/types.js.map +1 -1
  16. package/language-server/utils.js +13 -16
  17. package/language-server/utils.js.map +1 -1
  18. package/language-server/validator/attribute-validator.js +3 -7
  19. package/language-server/validator/attribute-validator.js.map +1 -1
  20. package/language-server/validator/datamodel-validator.js +293 -347
  21. package/language-server/validator/datamodel-validator.js.map +1 -1
  22. package/language-server/validator/datasource-validator.js +61 -71
  23. package/language-server/validator/datasource-validator.js.map +1 -1
  24. package/language-server/validator/enum-validator.js +6 -10
  25. package/language-server/validator/enum-validator.js.map +1 -1
  26. package/language-server/validator/expression-validator.js +25 -31
  27. package/language-server/validator/expression-validator.js.map +1 -1
  28. package/language-server/validator/schema-validator.js +18 -25
  29. package/language-server/validator/schema-validator.js.map +1 -1
  30. package/language-server/validator/utils.js +86 -85
  31. package/language-server/validator/utils.js.map +1 -1
  32. package/language-server/validator/zmodel-validator.js +55 -58
  33. package/language-server/validator/zmodel-validator.js.map +1 -1
  34. package/language-server/zmodel-formatter.js +40 -21
  35. package/language-server/zmodel-formatter.js.map +1 -1
  36. package/language-server/zmodel-linker.js +328 -331
  37. package/language-server/zmodel-linker.js.map +1 -1
  38. package/language-server/zmodel-module.js +50 -59
  39. package/language-server/zmodel-module.js.map +1 -1
  40. package/language-server/zmodel-scope.js +35 -25
  41. package/language-server/zmodel-scope.js.map +1 -1
  42. package/language-server/zmodel-workspace-manager.js +30 -18
  43. package/language-server/zmodel-workspace-manager.js.map +1 -1
  44. package/package.json +8 -12
  45. package/plugins/access-policy/expression-writer.js +301 -292
  46. package/plugins/access-policy/expression-writer.js.map +1 -1
  47. package/plugins/access-policy/index.js +20 -11
  48. package/plugins/access-policy/index.js.map +1 -1
  49. package/plugins/access-policy/policy-guard-generator.js +327 -321
  50. package/plugins/access-policy/policy-guard-generator.js.map +1 -1
  51. package/plugins/access-policy/typescript-expression-transformer.js +94 -95
  52. package/plugins/access-policy/typescript-expression-transformer.js.map +1 -1
  53. package/plugins/access-policy/utils.js +7 -9
  54. package/plugins/access-policy/utils.js.map +1 -1
  55. package/plugins/access-policy/zod-schema-generator.js +143 -159
  56. package/plugins/access-policy/zod-schema-generator.js.map +1 -1
  57. package/plugins/model-meta/index.js +97 -102
  58. package/plugins/model-meta/index.js.map +1 -1
  59. package/plugins/plugin-utils.js +34 -40
  60. package/plugins/plugin-utils.js.map +1 -1
  61. package/plugins/prisma/indent-string.js +4 -8
  62. package/plugins/prisma/indent-string.js.map +1 -1
  63. package/plugins/prisma/index.js +20 -11
  64. package/plugins/prisma/index.js.map +1 -1
  65. package/plugins/prisma/prisma-builder.js +235 -213
  66. package/plugins/prisma/prisma-builder.js.map +1 -1
  67. package/plugins/prisma/schema-generator.js +205 -192
  68. package/plugins/prisma/schema-generator.js.map +1 -1
  69. package/plugins/prisma/zmodel-code-generator.js +109 -114
  70. package/plugins/prisma/zmodel-code-generator.js.map +1 -1
  71. package/telemetry.js +107 -90
  72. package/telemetry.js.map +1 -1
  73. package/types.js +3 -1
  74. package/types.js.map +1 -1
  75. package/utils/ast-utils.js +67 -67
  76. package/utils/ast-utils.js.map +1 -1
  77. package/utils/exec-utils.js +6 -15
  78. package/utils/exec-utils.js.map +1 -1
  79. package/utils/pkg-utils.js +38 -35
  80. package/utils/pkg-utils.js.map +1 -1
  81. package/utils/version-utils.js +9 -10
  82. package/utils/version-utils.js.map +1 -1
  83. package/global.d.js +0 -1
  84. package/global.d.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"policy-guard-generator.js","names":["UNKNOWN_USER_ID","PolicyGenerator","generate","model","options","output","getDefaultOutputFolder","console","error","name","project","Project","sf","createSourceFile","path","join","undefined","overwrite","addImportDeclaration","namedImports","moduleSpecifier","RUNTIME_PACKAGE","isTypeOnly","e","declarations","filter","d","isEnum","models","isDataModel","policyMap","generateQueryGuardForModel","zodGenerator","ZodSchemaGenerator","addVariableStatement","declarationKind","VariableDeclarationKind","Const","initializer","writer","block","write","inlineBlock","map","Object","entries","camelCase","op","func","JSON","stringify","writeLine","addStatements","formatText","save","emit","getPolicyExpressions","kind","operation","attrs","attributes","attr","decl","ref","checkOperation","result","opsValue","getLiteral","args","value","ops","split","s","trim","includes","processUpdatePolicies","expressions","postUpdate","expr","visitPolicyExpression","isBinaryExpr","operator","left","right","isUnaryExpr","operand","hasFutureReference","node","streamAllContents","isInvocationExpr","function","isFromStdlib","sourceFile","policies","analyzePolicies","ALL_OPERATION_KINDS","denies","allows","length","generateQueryGuardFunction","getName","preValueSelect","generatePreValueSelect","addPath","curr","forEach","seg","i","select","visit","isReferenceExpr","target","resolved","isDataModelField","isMemberAccessExpr","isFutureExpr","inner","member","$refText","rule","isExpression","$container","$type","MemberAccessExpr","$resolvedType","push","keys","addFunction","returnType","parameters","type","addBody","hasAuthRef","child","userModel","find","PluginError","userIdField","getIdField","exprWriter","ExpressionWriter","writeDenies","conditionalWrite","writeAllows","GUARD_FIELD_NAME"],"sources":["../../../src/plugins/access-policy/policy-guard-generator.ts"],"sourcesContent":["import {\n DataModel,\n Expression,\n MemberAccessExpr,\n Model,\n isBinaryExpr,\n isDataModel,\n isDataModelField,\n isEnum,\n isExpression,\n isInvocationExpr,\n isMemberAccessExpr,\n isReferenceExpr,\n isUnaryExpr,\n} from '@zenstackhq/language/ast';\nimport { PolicyKind, PolicyOperationKind } from '@zenstackhq/runtime';\nimport { GUARD_FIELD_NAME, PluginError, PluginOptions, getLiteral, resolved } from '@zenstackhq/sdk';\nimport { camelCase } from 'change-case';\nimport { streamAllContents } from 'langium';\nimport path from 'path';\nimport { FunctionDeclaration, Project, SourceFile, VariableDeclarationKind } from 'ts-morph';\nimport { name } from '.';\nimport { isFromStdlib } from '../../language-server/utils';\nimport { analyzePolicies, getIdField } from '../../utils/ast-utils';\nimport { ALL_OPERATION_KINDS, RUNTIME_PACKAGE, getDefaultOutputFolder } from '../plugin-utils';\nimport { ExpressionWriter } from './expression-writer';\nimport { isFutureExpr } from './utils';\nimport { ZodSchemaGenerator } from './zod-schema-generator';\n\nconst UNKNOWN_USER_ID = 'zenstack_unknown_user';\n\n/**\n * Generates source file that contains Prisma query guard objects used for injecting database queries\n */\nexport default class PolicyGenerator {\n async generate(model: Model, options: PluginOptions) {\n const output = options.output ? (options.output as string) : getDefaultOutputFolder();\n if (!output) {\n console.error(`Unable to determine output path, not running plugin ${name}`);\n return;\n }\n\n const project = new Project();\n const sf = project.createSourceFile(path.join(output, 'policy.ts'), undefined, { overwrite: true });\n\n sf.addImportDeclaration({\n namedImports: [{ name: 'QueryContext' }],\n moduleSpecifier: `${RUNTIME_PACKAGE}`,\n isTypeOnly: true,\n });\n\n sf.addImportDeclaration({\n namedImports: [{ name: 'z' }],\n moduleSpecifier: 'zod',\n });\n\n // import enums\n for (const e of model.declarations.filter((d) => isEnum(d))) {\n sf.addImportDeclaration({\n namedImports: [{ name: e.name }],\n moduleSpecifier: '@prisma/client',\n });\n }\n\n const models = model.declarations.filter((d) => isDataModel(d)) as DataModel[];\n\n const policyMap: Record<string, Record<string, string | boolean | object>> = {};\n for (const model of models) {\n policyMap[model.name] = await this.generateQueryGuardForModel(model, sf);\n }\n\n const zodGenerator = new ZodSchemaGenerator();\n\n sf.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: 'policy',\n initializer: (writer) => {\n writer.block(() => {\n writer.write('guard:');\n writer.inlineBlock(() => {\n for (const [model, map] of Object.entries(policyMap)) {\n writer.write(`${camelCase(model)}:`);\n writer.inlineBlock(() => {\n for (const [op, func] of Object.entries(map)) {\n if (typeof func === 'object') {\n writer.write(`${op}: ${JSON.stringify(func)},`);\n } else {\n writer.write(`${op}: ${func},`);\n }\n }\n });\n writer.write(',');\n }\n });\n\n writer.writeLine(',');\n\n writer.write('schema:');\n zodGenerator.generate(writer, models);\n });\n },\n },\n ],\n });\n\n sf.addStatements('export default policy');\n\n sf.formatText();\n await project.save();\n await project.emit();\n }\n\n private getPolicyExpressions(model: DataModel, kind: PolicyKind, operation: PolicyOperationKind) {\n const attrs = model.attributes.filter((attr) => attr.decl.ref?.name === `@@${kind}`);\n\n const checkOperation = operation === 'postUpdate' ? 'update' : operation;\n\n let result = attrs\n .filter((attr) => {\n const opsValue = getLiteral<string>(attr.args[0].value);\n if (!opsValue) {\n return false;\n }\n const ops = opsValue.split(',').map((s) => s.trim());\n return ops.includes(checkOperation) || ops.includes('all');\n })\n .map((attr) => attr.args[1].value);\n\n if (operation === 'update') {\n result = this.processUpdatePolicies(result, false);\n } else if (operation === 'postUpdate') {\n result = this.processUpdatePolicies(result, true);\n }\n\n return result;\n }\n\n private processUpdatePolicies(expressions: Expression[], postUpdate: boolean) {\n return expressions\n .map((expr) => this.visitPolicyExpression(expr, postUpdate))\n .filter((e): e is Expression => !!e);\n }\n\n private visitPolicyExpression(expr: Expression, postUpdate: boolean): Expression | undefined {\n if (isBinaryExpr(expr) && (expr.operator === '&&' || expr.operator === '||')) {\n const left = this.visitPolicyExpression(expr.left, postUpdate);\n const right = this.visitPolicyExpression(expr.right, postUpdate);\n if (!left) return right;\n if (!right) return left;\n return { ...expr, left, right };\n }\n\n if (isUnaryExpr(expr) && expr.operator === '!') {\n const operand = this.visitPolicyExpression(expr.operand, postUpdate);\n if (!operand) return undefined;\n return { ...expr, operand };\n }\n\n if (postUpdate && !this.hasFutureReference(expr)) {\n return undefined;\n } else if (!postUpdate && this.hasFutureReference(expr)) {\n return undefined;\n }\n\n return expr;\n }\n\n private hasFutureReference(expr: Expression) {\n for (const node of streamAllContents(expr)) {\n if (isInvocationExpr(node) && node.function.ref?.name === 'future' && isFromStdlib(node.function.ref)) {\n return true;\n }\n }\n return false;\n }\n\n private async generateQueryGuardForModel(model: DataModel, sourceFile: SourceFile) {\n const result: Record<string, string | boolean | object> = {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const policies: any = analyzePolicies(model);\n\n for (const kind of ALL_OPERATION_KINDS) {\n if (policies[kind] === true || policies[kind] === false) {\n result[kind] = policies[kind];\n continue;\n }\n\n const denies = this.getPolicyExpressions(model, 'deny', kind);\n const allows = this.getPolicyExpressions(model, 'allow', kind);\n\n if (kind === 'update' && allows.length === 0) {\n // no allow rule for 'update', policy is constant based on if there's\n // post-update counterpart\n if (this.getPolicyExpressions(model, 'allow', 'postUpdate').length === 0) {\n result[kind] = false;\n continue;\n } else {\n result[kind] = true;\n continue;\n }\n }\n\n if (kind === 'postUpdate' && allows.length === 0 && denies.length === 0) {\n // no rule 'postUpdate', always allow\n result[kind] = true;\n continue;\n }\n\n const func = this.generateQueryGuardFunction(sourceFile, model, kind, allows, denies);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n result[kind] = func.getName()!;\n\n if (kind === 'postUpdate') {\n const preValueSelect = this.generatePreValueSelect(model, allows, denies);\n if (preValueSelect) {\n result['preValueSelect'] = preValueSelect;\n }\n }\n }\n return result;\n }\n\n // generates an object that can be used as the 'select' argument when fetching pre-update\n // entity value\n private generatePreValueSelect(model: DataModel, allows: Expression[], denies: Expression[]): object {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result: any = {};\n const addPath = (path: string[]) => {\n let curr = result;\n path.forEach((seg, i) => {\n if (i === path.length - 1) {\n curr[seg] = true;\n } else {\n if (!curr[seg]) {\n curr[seg] = { select: {} };\n }\n curr = curr[seg].select;\n }\n });\n };\n\n const visit = (node: Expression): string[] | undefined => {\n if (isReferenceExpr(node)) {\n const target = resolved(node.target);\n if (isDataModelField(target)) {\n // a field selection, it's a terminal\n return [target.name];\n }\n } else if (isMemberAccessExpr(node)) {\n if (isFutureExpr(node.operand)) {\n // future().field is not subject to pre-update select\n return undefined;\n }\n\n // build a selection path inside-out for chained member access\n const inner = visit(node.operand);\n if (inner) {\n return [...inner, node.member.$refText];\n }\n }\n return undefined;\n };\n\n for (const rule of [...allows, ...denies]) {\n for (const expr of streamAllContents(rule).filter((node): node is Expression => isExpression(node))) {\n // only care about member access and reference expressions\n if (!isMemberAccessExpr(expr) && !isReferenceExpr(expr)) {\n continue;\n }\n\n if (expr.$container.$type === MemberAccessExpr) {\n // only visit top-level member access\n continue;\n }\n\n const path = visit(expr);\n if (path) {\n if (isDataModel(expr.$resolvedType?.decl)) {\n // member selection ended at a data model field, include its 'id'\n path.push('id');\n }\n addPath(path);\n }\n }\n }\n\n return Object.keys(result).length === 0 ? null : result;\n }\n\n private generateQueryGuardFunction(\n sourceFile: SourceFile,\n model: DataModel,\n kind: PolicyOperationKind,\n allows: Expression[],\n denies: Expression[]\n ): FunctionDeclaration {\n const func = sourceFile\n .addFunction({\n name: model.name + '_' + kind,\n returnType: 'any',\n parameters: [\n {\n name: 'context',\n type: 'QueryContext',\n },\n ],\n })\n .addBody();\n\n // check if any allow or deny rule contains 'auth()' invocation\n let hasAuthRef = false;\n for (const node of [...denies, ...allows]) {\n for (const child of streamAllContents(node)) {\n if (isInvocationExpr(child) && resolved(child.function).name === 'auth') {\n hasAuthRef = true;\n break;\n }\n }\n if (hasAuthRef) {\n break;\n }\n }\n\n if (hasAuthRef) {\n const userModel = model.$container.declarations.find(\n (decl): decl is DataModel => isDataModel(decl) && decl.name === 'User'\n );\n if (!userModel) {\n throw new PluginError('User model not found');\n }\n const userIdField = getIdField(userModel);\n if (!userIdField) {\n throw new PluginError('User model does not have an id field');\n }\n func.addStatements(\n // make sure user id is always available\n `const user = context.user?.${userIdField.name} ? context.user : { ...context.user, ${userIdField.name}: '${UNKNOWN_USER_ID}' };`\n );\n }\n\n // r = <guard object>;\n func.addStatements((writer) => {\n writer.write('return ');\n const exprWriter = new ExpressionWriter(writer, kind === 'postUpdate');\n const writeDenies = () => {\n writer.conditionalWrite(denies.length > 1, '{ AND: [');\n denies.forEach((expr, i) => {\n writer.inlineBlock(() => {\n writer.write('NOT: ');\n exprWriter.write(expr);\n });\n writer.conditionalWrite(i !== denies.length - 1, ',');\n });\n writer.conditionalWrite(denies.length > 1, ']}');\n };\n\n const writeAllows = () => {\n writer.conditionalWrite(allows.length > 1, '{ OR: [');\n allows.forEach((expr, i) => {\n exprWriter.write(expr);\n writer.conditionalWrite(i !== allows.length - 1, ',');\n });\n writer.conditionalWrite(allows.length > 1, ']}');\n };\n\n if (allows.length > 0 && denies.length > 0) {\n writer.write('{ AND: [');\n writeDenies();\n writer.write(',');\n writeAllows();\n writer.write(']}');\n } else if (denies.length > 0) {\n writeDenies();\n } else if (allows.length > 0) {\n writeAllows();\n } else {\n // disallow any operation\n writer.write(`{ ${GUARD_FIELD_NAME}: false }`);\n }\n writer.write(';');\n });\n return func;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"policy-guard-generator.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/policy-guard-generator.ts"],"names":[],"mappings":"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"}
@@ -1,110 +1,109 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _ast = require("@zenstackhq/language/ast");
8
- var _sdk = require("@zenstackhq/sdk");
9
- var _utils = require("./utils");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ast_1 = require("@zenstackhq/language/ast");
4
+ const sdk_1 = require("@zenstackhq/sdk");
5
+ const utils_1 = require("./utils");
10
6
  /**
11
7
  * Transforms ZModel expression to plain TypeScript expression.
12
8
  */
13
9
  class TypeScriptExpressionTransformer {
14
- /**
15
- * Constructs a new TypeScriptExpressionTransformer.
16
- *
17
- * @param isPostGuard indicates if we're writing for post-update conditions
18
- */
19
- constructor(isPostGuard = false) {
20
- this.isPostGuard = isPostGuard;
21
- }
22
-
23
- /**
24
- *
25
- * @param expr
26
- * @returns
27
- */
28
- transform(expr) {
29
- switch (expr.$type) {
30
- case _ast.LiteralExpr:
31
- return this.literal(expr);
32
- case _ast.ArrayExpr:
33
- return this.array(expr);
34
- case _ast.NullExpr:
35
- return this.null();
36
- case _ast.ThisExpr:
37
- return this.this(expr);
38
- case _ast.ReferenceExpr:
39
- return this.reference(expr);
40
- case _ast.InvocationExpr:
41
- return this.invocation(expr);
42
- case _ast.MemberAccessExpr:
43
- return this.memberAccess(expr);
44
- default:
45
- throw new _sdk.PluginError(`Unsupported expression type: ${expr.$type}`);
10
+ /**
11
+ * Constructs a new TypeScriptExpressionTransformer.
12
+ *
13
+ * @param isPostGuard indicates if we're writing for post-update conditions
14
+ */
15
+ constructor(isPostGuard = false) {
16
+ this.isPostGuard = isPostGuard;
46
17
  }
47
- }
48
-
49
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
50
- this(expr) {
51
- // "this" is mapped to id comparison
52
- return 'id';
53
- }
54
- memberAccess(expr) {
55
- if (!expr.member.ref) {
56
- throw new _sdk.PluginError(`Unresolved MemberAccessExpr`);
18
+ /**
19
+ *
20
+ * @param expr
21
+ * @returns
22
+ */
23
+ transform(expr) {
24
+ switch (expr.$type) {
25
+ case ast_1.LiteralExpr:
26
+ return this.literal(expr);
27
+ case ast_1.ArrayExpr:
28
+ return this.array(expr);
29
+ case ast_1.NullExpr:
30
+ return this.null();
31
+ case ast_1.ThisExpr:
32
+ return this.this(expr);
33
+ case ast_1.ReferenceExpr:
34
+ return this.reference(expr);
35
+ case ast_1.InvocationExpr:
36
+ return this.invocation(expr);
37
+ case ast_1.MemberAccessExpr:
38
+ return this.memberAccess(expr);
39
+ default:
40
+ throw new sdk_1.PluginError(`Unsupported expression type: ${expr.$type}`);
41
+ }
57
42
  }
58
- if ((0, _ast.isThisExpr)(expr.operand)) {
59
- return expr.member.ref.name;
60
- } else if ((0, _utils.isFutureExpr)(expr.operand)) {
61
- if (!this.isPostGuard) {
62
- throw new _sdk.PluginError(`future() is only supported in postUpdate rules`);
63
- }
64
- return expr.member.ref.name;
65
- } else {
66
- return `${this.transform(expr.operand)}?.${expr.member.ref.name}`;
43
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
44
+ this(expr) {
45
+ // "this" is mapped to id comparison
46
+ return 'id';
67
47
  }
68
- }
69
- invocation(expr) {
70
- var _expr$function$ref;
71
- if (((_expr$function$ref = expr.function.ref) === null || _expr$function$ref === void 0 ? void 0 : _expr$function$ref.name) === 'auth') {
72
- return 'user';
73
- } else {
74
- var _expr$function$ref2;
75
- throw new _sdk.PluginError(`Function invocation is not supported: ${(_expr$function$ref2 = expr.function.ref) === null || _expr$function$ref2 === void 0 ? void 0 : _expr$function$ref2.name}`);
48
+ memberAccess(expr) {
49
+ if (!expr.member.ref) {
50
+ throw new sdk_1.PluginError(`Unresolved MemberAccessExpr`);
51
+ }
52
+ if ((0, ast_1.isThisExpr)(expr.operand)) {
53
+ return expr.member.ref.name;
54
+ }
55
+ else if ((0, utils_1.isFutureExpr)(expr.operand)) {
56
+ if (!this.isPostGuard) {
57
+ throw new sdk_1.PluginError(`future() is only supported in postUpdate rules`);
58
+ }
59
+ return expr.member.ref.name;
60
+ }
61
+ else {
62
+ return `${this.transform(expr.operand)}?.${expr.member.ref.name}`;
63
+ }
76
64
  }
77
- }
78
- reference(expr) {
79
- if (!expr.target.ref) {
80
- throw new _sdk.PluginError(`Unresolved ReferenceExpr`);
65
+ invocation(expr) {
66
+ var _a, _b;
67
+ if (((_a = expr.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'auth') {
68
+ return 'user';
69
+ }
70
+ else {
71
+ throw new sdk_1.PluginError(`Function invocation is not supported: ${(_b = expr.function.ref) === null || _b === void 0 ? void 0 : _b.name}`);
72
+ }
81
73
  }
82
- if ((0, _ast.isEnumField)(expr.target.ref)) {
83
- return `${expr.target.ref.$container.name}.${expr.target.ref.name}`;
84
- } else {
85
- if (this.isPostGuard) {
86
- // if we're processing post-update, any direct field access should be
87
- // treated as access to context.preValue, which is entity's value before
88
- // the update
89
- return `context.preValue?.${expr.target.ref.name}`;
90
- } else {
91
- return expr.target.ref.name;
92
- }
74
+ reference(expr) {
75
+ if (!expr.target.ref) {
76
+ throw new sdk_1.PluginError(`Unresolved ReferenceExpr`);
77
+ }
78
+ if ((0, ast_1.isEnumField)(expr.target.ref)) {
79
+ return `${expr.target.ref.$container.name}.${expr.target.ref.name}`;
80
+ }
81
+ else {
82
+ if (this.isPostGuard) {
83
+ // if we're processing post-update, any direct field access should be
84
+ // treated as access to context.preValue, which is entity's value before
85
+ // the update
86
+ return `context.preValue?.${expr.target.ref.name}`;
87
+ }
88
+ else {
89
+ return expr.target.ref.name;
90
+ }
91
+ }
93
92
  }
94
- }
95
- null() {
96
- return 'null';
97
- }
98
- array(expr) {
99
- return `[${expr.items.map(item => this.transform(item)).join(', ')}]`;
100
- }
101
- literal(expr) {
102
- if (typeof expr.value === 'string') {
103
- return `'${expr.value}'`;
104
- } else {
105
- return expr.value.toString();
93
+ null() {
94
+ return 'null';
95
+ }
96
+ array(expr) {
97
+ return `[${expr.items.map((item) => this.transform(item)).join(', ')}]`;
98
+ }
99
+ literal(expr) {
100
+ if (typeof expr.value === 'string') {
101
+ return `'${expr.value}'`;
102
+ }
103
+ else {
104
+ return expr.value.toString();
105
+ }
106
106
  }
107
- }
108
107
  }
109
108
  exports.default = TypeScriptExpressionTransformer;
110
109
  //# sourceMappingURL=typescript-expression-transformer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-expression-transformer.js","names":["TypeScriptExpressionTransformer","constructor","isPostGuard","transform","expr","$type","LiteralExpr","literal","ArrayExpr","array","NullExpr","null","ThisExpr","this","ReferenceExpr","reference","InvocationExpr","invocation","MemberAccessExpr","memberAccess","PluginError","member","ref","isThisExpr","operand","name","isFutureExpr","function","target","isEnumField","$container","items","map","item","join","value","toString"],"sources":["../../../src/plugins/access-policy/typescript-expression-transformer.ts"],"sourcesContent":["import {\n ArrayExpr,\n Expression,\n InvocationExpr,\n LiteralExpr,\n MemberAccessExpr,\n NullExpr,\n ReferenceExpr,\n ThisExpr,\n isEnumField,\n isThisExpr,\n} from '@zenstackhq/language/ast';\nimport { PluginError } from '@zenstackhq/sdk';\nimport { isFutureExpr } from './utils';\n\n/**\n * Transforms ZModel expression to plain TypeScript expression.\n */\nexport default class TypeScriptExpressionTransformer {\n /**\n * Constructs a new TypeScriptExpressionTransformer.\n *\n * @param isPostGuard indicates if we're writing for post-update conditions\n */\n constructor(private readonly isPostGuard = false) {}\n\n /**\n *\n * @param expr\n * @returns\n */\n transform(expr: Expression): string {\n switch (expr.$type) {\n case LiteralExpr:\n return this.literal(expr as LiteralExpr);\n\n case ArrayExpr:\n return this.array(expr as ArrayExpr);\n\n case NullExpr:\n return this.null();\n\n case ThisExpr:\n return this.this(expr as ThisExpr);\n\n case ReferenceExpr:\n return this.reference(expr as ReferenceExpr);\n\n case InvocationExpr:\n return this.invocation(expr as InvocationExpr);\n\n case MemberAccessExpr:\n return this.memberAccess(expr as MemberAccessExpr);\n\n default:\n throw new PluginError(`Unsupported expression type: ${expr.$type}`);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private this(expr: ThisExpr) {\n // \"this\" is mapped to id comparison\n return 'id';\n }\n\n private memberAccess(expr: MemberAccessExpr) {\n if (!expr.member.ref) {\n throw new PluginError(`Unresolved MemberAccessExpr`);\n }\n\n if (isThisExpr(expr.operand)) {\n return expr.member.ref.name;\n } else if (isFutureExpr(expr.operand)) {\n if (!this.isPostGuard) {\n throw new PluginError(`future() is only supported in postUpdate rules`);\n }\n return expr.member.ref.name;\n } else {\n return `${this.transform(expr.operand)}?.${expr.member.ref.name}`;\n }\n }\n\n private invocation(expr: InvocationExpr) {\n if (expr.function.ref?.name === 'auth') {\n return 'user';\n } else {\n throw new PluginError(`Function invocation is not supported: ${expr.function.ref?.name}`);\n }\n }\n\n private reference(expr: ReferenceExpr) {\n if (!expr.target.ref) {\n throw new PluginError(`Unresolved ReferenceExpr`);\n }\n\n if (isEnumField(expr.target.ref)) {\n return `${expr.target.ref.$container.name}.${expr.target.ref.name}`;\n } else {\n if (this.isPostGuard) {\n // if we're processing post-update, any direct field access should be\n // treated as access to context.preValue, which is entity's value before\n // the update\n return `context.preValue?.${expr.target.ref.name}`;\n } else {\n return expr.target.ref.name;\n }\n }\n }\n\n private null() {\n return 'null';\n }\n\n private array(expr: ArrayExpr) {\n return `[${expr.items.map((item) => this.transform(item)).join(', ')}]`;\n }\n\n private literal(expr: LiteralExpr) {\n if (typeof expr.value === 'string') {\n return `'${expr.value}'`;\n } else {\n return expr.value.toString();\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"typescript-expression-transformer.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/typescript-expression-transformer.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.isFutureExpr = isFutureExpr;
7
- var _ast = require("@zenstackhq/language/ast");
8
- var _utils = require("../../language-server/utils");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isFutureExpr = void 0;
4
+ const ast_1 = require("@zenstackhq/language/ast");
5
+ const utils_1 = require("../../language-server/utils");
9
6
  /**
10
7
  * Returns if the given expression is a "future()" method call.
11
8
  */
12
9
  function isFutureExpr(expr) {
13
- var _expr$function$ref;
14
- return !!((0, _ast.isInvocationExpr)(expr) && ((_expr$function$ref = expr.function.ref) === null || _expr$function$ref === void 0 ? void 0 : _expr$function$ref.name) === 'future' && (0, _utils.isFromStdlib)(expr.function.ref));
10
+ var _a;
11
+ return !!((0, ast_1.isInvocationExpr)(expr) && ((_a = expr.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'future' && (0, utils_1.isFromStdlib)(expr.function.ref));
15
12
  }
13
+ exports.isFutureExpr = isFutureExpr;
16
14
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["isFutureExpr","expr","isInvocationExpr","function","ref","name","isFromStdlib"],"sources":["../../../src/plugins/access-policy/utils.ts"],"sourcesContent":["import { Expression, isInvocationExpr } from '@zenstackhq/language/ast';\nimport { isFromStdlib } from '../../language-server/utils';\n\n/**\n * Returns if the given expression is a \"future()\" method call.\n */\nexport function isFutureExpr(expr: Expression) {\n return !!(isInvocationExpr(expr) && expr.function.ref?.name === 'future' && isFromStdlib(expr.function.ref));\n}\n"],"mappings":";;;;;;AAAA;AACA;AAEA;AACA;AACA;AACO,SAASA,YAAY,CAACC,IAAgB,EAAE;EAAA;EAC3C,OAAO,CAAC,EAAE,IAAAC,qBAAgB,EAACD,IAAI,CAAC,IAAI,uBAAAA,IAAI,CAACE,QAAQ,CAACC,GAAG,uDAAjB,mBAAmBC,IAAI,MAAK,QAAQ,IAAI,IAAAC,mBAAY,EAACL,IAAI,CAACE,QAAQ,CAACC,GAAG,CAAC,CAAC;AAChH"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/utils.ts"],"names":[],"mappings":";;;AAAA,kDAAwE;AACxE,uDAA2D;AAE3D;;GAEG;AACH,SAAgB,YAAY,CAAC,IAAgB;;IACzC,OAAO,CAAC,CAAC,CAAC,IAAA,sBAAgB,EAAC,IAAI,CAAC,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,0CAAE,IAAI,MAAK,QAAQ,IAAI,IAAA,oBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACjH,CAAC;AAFD,oCAEC"}