zenstack 1.10.0 → 2.0.0-alpha.2

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 (100) hide show
  1. package/README.md +29 -1
  2. package/cli/cli-util.d.ts +1 -1
  3. package/cli/cli-util.js +20 -2
  4. package/cli/cli-util.js.map +1 -1
  5. package/cli/index.js +0 -3
  6. package/cli/index.js.map +1 -1
  7. package/cli/plugin-runner.d.ts +4 -2
  8. package/cli/plugin-runner.js +128 -90
  9. package/cli/plugin-runner.js.map +1 -1
  10. package/language-server/validator/datamodel-validator.js +26 -19
  11. package/language-server/validator/datamodel-validator.js.map +1 -1
  12. package/language-server/validator/datasource-validator.js +1 -1
  13. package/language-server/validator/datasource-validator.js.map +1 -1
  14. package/language-server/validator/enum-validator.js +1 -1
  15. package/language-server/validator/enum-validator.js.map +1 -1
  16. package/language-server/validator/expression-validator.js +12 -6
  17. package/language-server/validator/expression-validator.js.map +1 -1
  18. package/language-server/validator/function-invocation-validator.js +1 -2
  19. package/language-server/validator/function-invocation-validator.js.map +1 -1
  20. package/language-server/validator/schema-validator.js +1 -1
  21. package/language-server/validator/schema-validator.js.map +1 -1
  22. package/language-server/validator/utils.d.ts +1 -1
  23. package/language-server/validator/utils.js +3 -3
  24. package/language-server/validator/utils.js.map +1 -1
  25. package/language-server/zmodel-code-action.js +4 -3
  26. package/language-server/zmodel-code-action.js.map +1 -1
  27. package/language-server/zmodel-completion-provider.js +2 -2
  28. package/language-server/zmodel-completion-provider.js.map +1 -1
  29. package/language-server/zmodel-linker.d.ts +0 -1
  30. package/language-server/zmodel-linker.js +9 -67
  31. package/language-server/zmodel-linker.js.map +1 -1
  32. package/language-server/zmodel-scope.d.ts +5 -3
  33. package/language-server/zmodel-scope.js +117 -68
  34. package/language-server/zmodel-scope.js.map +1 -1
  35. package/package.json +6 -6
  36. package/plugins/enhancer/enhance/index.d.ts +7 -0
  37. package/plugins/enhancer/enhance/index.js +336 -0
  38. package/plugins/enhancer/enhance/index.js.map +1 -0
  39. package/plugins/enhancer/enhancer-utils.d.ts +5 -0
  40. package/plugins/enhancer/enhancer-utils.js +22 -0
  41. package/plugins/enhancer/enhancer-utils.js.map +1 -0
  42. package/plugins/enhancer/index.d.ts +5 -0
  43. package/plugins/enhancer/index.js +51 -0
  44. package/plugins/enhancer/index.js.map +1 -0
  45. package/plugins/enhancer/model-meta/index.d.ts +4 -0
  46. package/plugins/enhancer/model-meta/index.js +32 -0
  47. package/plugins/enhancer/model-meta/index.js.map +1 -0
  48. package/plugins/{access-policy → enhancer/policy}/expression-writer.d.ts +3 -0
  49. package/plugins/{access-policy → enhancer/policy}/expression-writer.js +97 -47
  50. package/plugins/enhancer/policy/expression-writer.js.map +1 -0
  51. package/plugins/enhancer/policy/index.d.ts +4 -0
  52. package/plugins/{access-policy → enhancer/policy}/index.js +8 -10
  53. package/plugins/enhancer/policy/index.js.map +1 -0
  54. package/plugins/{access-policy → enhancer/policy}/policy-guard-generator.d.ts +4 -4
  55. package/plugins/{access-policy → enhancer/policy}/policy-guard-generator.js +26 -66
  56. package/plugins/enhancer/policy/policy-guard-generator.js.map +1 -0
  57. package/plugins/plugin-utils.d.ts +8 -0
  58. package/plugins/plugin-utils.js +17 -9
  59. package/plugins/plugin-utils.js.map +1 -1
  60. package/plugins/prisma/index.d.ts +2 -0
  61. package/plugins/prisma/index.js +91 -3
  62. package/plugins/prisma/index.js.map +1 -1
  63. package/plugins/prisma/prisma-builder.d.ts +1 -1
  64. package/plugins/prisma/prisma-builder.js +7 -2
  65. package/plugins/prisma/prisma-builder.js.map +1 -1
  66. package/plugins/prisma/schema-generator.d.ts +10 -4
  67. package/plugins/prisma/schema-generator.js +178 -70
  68. package/plugins/prisma/schema-generator.js.map +1 -1
  69. package/plugins/zod/generator.d.ts +21 -1
  70. package/plugins/zod/generator.js +364 -352
  71. package/plugins/zod/generator.js.map +1 -1
  72. package/plugins/zod/index.d.ts +1 -0
  73. package/plugins/zod/index.js +4 -2
  74. package/plugins/zod/index.js.map +1 -1
  75. package/plugins/zod/transformer.d.ts +7 -5
  76. package/plugins/zod/transformer.js +18 -14
  77. package/plugins/zod/transformer.js.map +1 -1
  78. package/plugins/zod/types.d.ts +0 -2
  79. package/plugins/zod/utils/schema-gen.js +2 -3
  80. package/plugins/zod/utils/schema-gen.js.map +1 -1
  81. package/res/stdlib.zmodel +7 -2
  82. package/telemetry.d.ts +1 -1
  83. package/telemetry.js +1 -1
  84. package/telemetry.js.map +1 -1
  85. package/utils/ast-utils.d.ts +5 -2
  86. package/utils/ast-utils.js +63 -24
  87. package/utils/ast-utils.js.map +1 -1
  88. package/utils/exec-utils.d.ts +7 -3
  89. package/utils/exec-utils.js +18 -6
  90. package/utils/exec-utils.js.map +1 -1
  91. package/plugins/access-policy/expression-writer.js.map +0 -1
  92. package/plugins/access-policy/index.d.ts +0 -4
  93. package/plugins/access-policy/index.js.map +0 -1
  94. package/plugins/access-policy/policy-guard-generator.js.map +0 -1
  95. package/plugins/model-meta/index.d.ts +0 -4
  96. package/plugins/model-meta/index.js +0 -46
  97. package/plugins/model-meta/index.js.map +0 -1
  98. package/utils/typescript-expression-transformer.d.ts +0 -56
  99. package/utils/typescript-expression-transformer.js +0 -338
  100. package/utils/typescript-expression-transformer.js.map +0 -1
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.ExpressionWriter = exports.FALSE = exports.TRUE = void 0;
4
7
  const ast_1 = require("@zenstackhq/language/ast");
8
+ const runtime_1 = require("@zenstackhq/runtime");
5
9
  const sdk_1 = require("@zenstackhq/sdk");
6
10
  const lower_case_first_1 = require("lower-case-first");
7
- const _1 = require(".");
8
- const ast_utils_1 = require("../../utils/ast-utils");
9
- const typescript_expression_transformer_1 = require("../../utils/typescript-expression-transformer");
11
+ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
12
+ const __1 = require("..");
10
13
  // { OR: [] } filters to nothing, { AND: [] } includes everything
11
14
  // https://www.prisma.io/docs/concepts/components/prisma-client/null-and-undefined#the-effect-of-null-and-undefined-on-conditionals
12
15
  exports.TRUE = '{ AND: [] }';
@@ -23,7 +26,7 @@ class ExpressionWriter {
23
26
  constructor(writer, isPostGuard = false) {
24
27
  this.writer = writer;
25
28
  this.isPostGuard = isPostGuard;
26
- this.plainExprBuilder = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
29
+ this.plainExprBuilder = new sdk_1.TypeScriptExpressionTransformer({
27
30
  context: sdk_1.ExpressionContext.AccessPolicy,
28
31
  isPostGuard: this.isPostGuard,
29
32
  });
@@ -63,11 +66,40 @@ class ExpressionWriter {
63
66
  }
64
67
  else {
65
68
  this.block(() => {
66
- var _a;
67
- this.writer.write(`${(_a = expr.target.ref) === null || _a === void 0 ? void 0 : _a.name}: true`);
69
+ const ref = expr.target.ref;
70
+ (0, tiny_invariant_1.default)(ref);
71
+ if (this.isFieldReferenceToDelegateModel(ref)) {
72
+ const thisModel = ref.$container;
73
+ const targetBase = ref.$inheritedFrom;
74
+ this.writeBaseHierarchy(thisModel, targetBase, () => this.writer.write(`${ref.name}: true`));
75
+ }
76
+ else {
77
+ this.writer.write(`${ref.name}: true`);
78
+ }
68
79
  });
69
80
  }
70
81
  }
82
+ writeBaseHierarchy(thisModel, targetBase, conditionWriter) {
83
+ if (!targetBase || thisModel === targetBase) {
84
+ conditionWriter();
85
+ return;
86
+ }
87
+ const base = this.getDelegateBase(thisModel);
88
+ if (!base) {
89
+ throw new sdk_1.PluginError(__1.name, `Failed to resolve delegate base model for "${thisModel.name}"`);
90
+ }
91
+ this.writer.write(`${`${runtime_1.DELEGATE_AUX_RELATION_PREFIX}_${(0, lower_case_first_1.lowerCaseFirst)(base.name)}`}: `);
92
+ this.writer.block(() => {
93
+ this.writeBaseHierarchy(base, targetBase, conditionWriter);
94
+ });
95
+ }
96
+ getDelegateBase(model) {
97
+ var _a;
98
+ return (_a = model.superTypes.map((t) => t.ref).filter((t) => t && (0, sdk_1.isDelegateModel)(t))) === null || _a === void 0 ? void 0 : _a[0];
99
+ }
100
+ isFieldReferenceToDelegateModel(ref) {
101
+ return (0, ast_1.isDataModelField)(ref) && !!ref.$inheritedFrom && (0, sdk_1.isDelegateModel)(ref.$inheritedFrom);
102
+ }
71
103
  writeMemberAccess(expr) {
72
104
  if (this.isAuthOrAuthMemberAccess(expr)) {
73
105
  // member access of `auth()`, generate plain expression
@@ -151,7 +183,7 @@ class ExpressionWriter {
151
183
  }, 'in');
152
184
  }
153
185
  else {
154
- throw new sdk_1.PluginError(_1.name, '"in" operator cannot be used with field references on both sides');
186
+ throw new sdk_1.PluginError(__1.name, '"in" operator cannot be used with field references on both sides');
155
187
  }
156
188
  });
157
189
  }
@@ -213,8 +245,8 @@ class ExpressionWriter {
213
245
  this.writer.write(this.plainExprBuilder.transform(expr));
214
246
  }
215
247
  catch (err) {
216
- if (err instanceof typescript_expression_transformer_1.TypeScriptExpressionTransformerError) {
217
- throw new sdk_1.PluginError(_1.name, err.message);
248
+ if (err instanceof sdk_1.TypeScriptExpressionTransformerError) {
249
+ throw new sdk_1.PluginError(__1.name, err.message);
218
250
  }
219
251
  else {
220
252
  throw err;
@@ -275,8 +307,8 @@ class ExpressionWriter {
275
307
  operator === '!=' ? exports.TRUE : exports.FALSE} : `);
276
308
  }
277
309
  catch (err) {
278
- if (err instanceof typescript_expression_transformer_1.TypeScriptExpressionTransformerError) {
279
- throw new sdk_1.PluginError(_1.name, err.message);
310
+ if (err instanceof sdk_1.TypeScriptExpressionTransformerError) {
311
+ throw new sdk_1.PluginError(__1.name, err.message);
280
312
  }
281
313
  else {
282
314
  throw err;
@@ -288,11 +320,11 @@ class ExpressionWriter {
288
320
  this.block(() => {
289
321
  var _a;
290
322
  const dataModel = this.isModelTyped(fieldAccess);
291
- if (dataModel && (0, ast_utils_1.isAuthInvocation)(operand)) {
323
+ if (dataModel && (0, sdk_1.isAuthInvocation)(operand)) {
292
324
  // right now this branch only serves comparison with `auth`, like
293
325
  // @@allow('all', owner == auth())
294
326
  if (operator !== '==' && operator !== '!=') {
295
- throw new sdk_1.PluginError(_1.name, 'Only == and != operators are allowed');
327
+ throw new sdk_1.PluginError(__1.name, 'Only == and != operators are allowed');
296
328
  }
297
329
  if (!(0, ast_1.isThisExpr)(fieldAccess)) {
298
330
  this.writer.writeLine(operator === '==' ? 'is:' : 'isNot:');
@@ -350,9 +382,9 @@ class ExpressionWriter {
350
382
  return (0, ast_1.isMemberAccessExpr)(expr) && (0, sdk_1.isFutureExpr)(expr.operand);
351
383
  }
352
384
  requireIdFields(dataModel) {
353
- const idFields = (0, ast_utils_1.getIdFields)(dataModel);
385
+ const idFields = (0, sdk_1.getIdFields)(dataModel);
354
386
  if (!idFields || idFields.length === 0) {
355
- throw new sdk_1.PluginError(_1.name, `Data model ${dataModel.name} does not have an id field`);
387
+ throw new sdk_1.PluginError(__1.name, `Data model ${dataModel.name} does not have an id field`);
356
388
  }
357
389
  return idFields;
358
390
  }
@@ -373,14 +405,14 @@ class ExpressionWriter {
373
405
  // https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#compare-columns-in-the-same-table
374
406
  writeFieldReference(expr) {
375
407
  if (!expr.target.ref) {
376
- throw new sdk_1.PluginError(_1.name, `Unresolved reference "${expr.target.$refText}"`);
408
+ throw new sdk_1.PluginError(__1.name, `Unresolved reference "${expr.target.$refText}"`);
377
409
  }
378
410
  const containingModel = expr.target.ref.$container;
379
411
  this.writer.write(`db.${(0, lower_case_first_1.lowerCaseFirst)(containingModel.name)}.fields.${expr.target.ref.name}`);
380
412
  }
381
413
  isAuthOrAuthMemberAccess(expr) {
382
414
  // recursive check for auth().x.y.z
383
- return (0, ast_utils_1.isAuthInvocation)(expr) || ((0, ast_1.isMemberAccessExpr)(expr) && this.isAuthOrAuthMemberAccess(expr.operand));
415
+ return (0, sdk_1.isAuthInvocation)(expr) || ((0, ast_1.isMemberAccessExpr)(expr) && this.isAuthOrAuthMemberAccess(expr.operand));
384
416
  }
385
417
  writeOperator(operator, fieldAccess, writeOperand) {
386
418
  var _a;
@@ -392,7 +424,7 @@ class ExpressionWriter {
392
424
  this.writer.write('isNot: ');
393
425
  }
394
426
  else {
395
- throw new sdk_1.PluginError(_1.name, 'Only == and != operators are allowed for data model comparison');
427
+ throw new sdk_1.PluginError(__1.name, 'Only == and != operators are allowed for data model comparison');
396
428
  }
397
429
  writeOperand();
398
430
  }
@@ -412,50 +444,68 @@ class ExpressionWriter {
412
444
  }
413
445
  }
414
446
  writeFieldCondition(fieldAccess, writeCondition, filterOp, extraArgs) {
415
- var _a, _b, _c;
416
- let selector;
447
+ // let selector: string | undefined;
417
448
  let operand;
449
+ let fieldWriter;
418
450
  if ((0, ast_1.isThisExpr)(fieldAccess)) {
419
451
  // pass on
420
452
  writeCondition();
421
453
  return;
422
454
  }
423
455
  else if ((0, ast_1.isReferenceExpr)(fieldAccess)) {
424
- selector = (_a = fieldAccess.target.ref) === null || _a === void 0 ? void 0 : _a.name;
456
+ const ref = fieldAccess.target.ref;
457
+ (0, tiny_invariant_1.default)(ref);
458
+ if (this.isFieldReferenceToDelegateModel(ref)) {
459
+ const thisModel = ref.$container;
460
+ const targetBase = ref.$inheritedFrom;
461
+ fieldWriter = (conditionWriter) => this.writeBaseHierarchy(thisModel, targetBase, () => {
462
+ this.writer.write(`${ref.name}: `);
463
+ conditionWriter();
464
+ });
465
+ }
466
+ else {
467
+ fieldWriter = (conditionWriter) => {
468
+ this.writer.write(`${ref.name}: `);
469
+ conditionWriter();
470
+ };
471
+ }
425
472
  }
426
473
  else if ((0, ast_1.isMemberAccessExpr)(fieldAccess)) {
427
- if ((0, sdk_1.isFutureExpr)(fieldAccess.operand)) {
474
+ if (!(0, sdk_1.isFutureExpr)(fieldAccess.operand)) {
428
475
  // future().field should be treated as the "field"
429
- selector = (_b = fieldAccess.member.ref) === null || _b === void 0 ? void 0 : _b.name;
430
- }
431
- else {
432
- selector = (_c = fieldAccess.member.ref) === null || _c === void 0 ? void 0 : _c.name;
433
476
  operand = fieldAccess.operand;
434
477
  }
478
+ fieldWriter = (conditionWriter) => {
479
+ var _a;
480
+ this.writer.write(`${(_a = fieldAccess.member.ref) === null || _a === void 0 ? void 0 : _a.name}: `);
481
+ conditionWriter();
482
+ };
435
483
  }
436
484
  else {
437
- throw new sdk_1.PluginError(_1.name, `Unsupported expression type: ${fieldAccess.$type}`);
485
+ throw new sdk_1.PluginError(__1.name, `Unsupported expression type: ${fieldAccess.$type}`);
438
486
  }
439
- if (!selector) {
440
- throw new sdk_1.PluginError(_1.name, `Failed to write FieldAccess expression`);
487
+ if (!fieldWriter) {
488
+ throw new sdk_1.PluginError(__1.name, `Failed to write FieldAccess expression`);
441
489
  }
442
490
  const writerFilterOutput = () => {
443
- this.writer.write(selector + ': ');
444
- if (filterOp) {
445
- this.block(() => {
446
- this.writer.write(`${filterOp}: `);
447
- writeCondition();
448
- if (extraArgs) {
449
- for (const [k, v] of Object.entries(extraArgs)) {
450
- this.writer.write(`,\n${k}: `);
451
- this.plain(v);
491
+ // this.writer.write(selector + ': ');
492
+ fieldWriter(() => {
493
+ if (filterOp) {
494
+ this.block(() => {
495
+ this.writer.write(`${filterOp}: `);
496
+ writeCondition();
497
+ if (extraArgs) {
498
+ for (const [k, v] of Object.entries(extraArgs)) {
499
+ this.writer.write(`,\n${k}: `);
500
+ this.plain(v);
501
+ }
452
502
  }
453
- }
454
- });
455
- }
456
- else {
457
- writeCondition();
458
- }
503
+ });
504
+ }
505
+ else {
506
+ writeCondition();
507
+ }
508
+ });
459
509
  };
460
510
  if (operand) {
461
511
  // member access expression
@@ -547,7 +597,7 @@ class ExpressionWriter {
547
597
  }
548
598
  writeUnary(expr) {
549
599
  if (expr.operator !== '!') {
550
- throw new sdk_1.PluginError(_1.name, `Unary operator "${expr.operator}" is not supported`);
600
+ throw new sdk_1.PluginError(__1.name, `Unary operator "${expr.operator}" is not supported`);
551
601
  }
552
602
  this.block(() => {
553
603
  this.writer.write('NOT: ');
@@ -571,7 +621,7 @@ class ExpressionWriter {
571
621
  var _a, _b;
572
622
  const funcDecl = expr.function.ref;
573
623
  if (!funcDecl) {
574
- throw new sdk_1.PluginError(_1.name, `Failed to resolve function declaration`);
624
+ throw new sdk_1.PluginError(__1.name, `Failed to resolve function declaration`);
575
625
  }
576
626
  const functionAllowedContext = (0, sdk_1.getFunctionExpressionContext)(funcDecl);
577
627
  if (functionAllowedContext.includes(sdk_1.ExpressionContext.AccessPolicy) ||
@@ -600,7 +650,7 @@ class ExpressionWriter {
600
650
  });
601
651
  }
602
652
  else {
603
- throw new sdk_1.PluginError(_1.name, `Unsupported function ${funcDecl.name}`);
653
+ throw new sdk_1.PluginError(__1.name, `Unsupported function ${funcDecl.name}`);
604
654
  }
605
655
  }
606
656
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-writer.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/policy/expression-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PluginOptions } from '@zenstackhq/sdk';
2
+ import type { Model } from '@zenstackhq/sdk/ast';
3
+ import type { Project } from 'ts-morph';
4
+ export declare function generate(model: Model, options: PluginOptions, project: Project, outDir: string): Promise<void>;
@@ -8,15 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.name = void 0;
16
- const policy_guard_generator_1 = __importDefault(require("./policy-guard-generator"));
17
- exports.name = 'Access Policy';
18
- const run = (model, options, _dmmf, globalOptions) => __awaiter(void 0, void 0, void 0, function* () {
19
- return new policy_guard_generator_1.default().generate(model, options, globalOptions);
20
- });
21
- exports.default = run;
12
+ exports.generate = void 0;
13
+ const policy_guard_generator_1 = require("./policy-guard-generator");
14
+ function generate(model, options, project, outDir) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ return new policy_guard_generator_1.PolicyGenerator().generate(project, model, options, outDir);
17
+ });
18
+ }
19
+ exports.generate = generate;
22
20
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/policy/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,qEAA2D;AAE3D,SAAsB,QAAQ,CAAC,KAAY,EAAE,OAAsB,EAAE,OAAgB,EAAE,MAAc;;QACjG,OAAO,IAAI,wCAAe,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;CAAA;AAFD,4BAEC"}
@@ -1,15 +1,15 @@
1
1
  import { Model } from '@zenstackhq/language/ast';
2
- import { PluginGlobalOptions, PluginOptions } from '@zenstackhq/sdk';
2
+ import { PluginOptions } from '@zenstackhq/sdk';
3
+ import { Project } from 'ts-morph';
3
4
  /**
4
5
  * Generates source file that contains Prisma query guard objects used for injecting database queries
5
6
  */
6
- export default class PolicyGenerator {
7
- generate(model: Model, options: PluginOptions, globalOptions?: PluginGlobalOptions): Promise<void>;
7
+ export declare class PolicyGenerator {
8
+ generate(project: Project, model: Model, options: PluginOptions, output: string): Promise<void>;
8
9
  private generateAuthSelector;
9
10
  private isEnumReferenced;
10
11
  private getPolicyExpressions;
11
12
  private processUpdatePolicies;
12
- private visitPolicyExpression;
13
13
  private hasFutureReference;
14
14
  private generateQueryGuardForModel;
15
15
  private generateReadFieldsCheckers;
@@ -12,6 +12,7 @@ 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.PolicyGenerator = void 0;
15
16
  const ast_1 = require("@zenstackhq/language/ast");
16
17
  const runtime_1 = require("@zenstackhq/runtime");
17
18
  const sdk_1 = require("@zenstackhq/sdk");
@@ -19,36 +20,29 @@ const langium_1 = require("langium");
19
20
  const lower_case_first_1 = require("lower-case-first");
20
21
  const path_1 = __importDefault(require("path"));
21
22
  const ts_morph_1 = require("ts-morph");
22
- const _1 = require(".");
23
- const ast_utils_1 = require("../../utils/ast-utils");
24
- const typescript_expression_transformer_1 = require("../../utils/typescript-expression-transformer");
25
- const plugin_utils_1 = require("../plugin-utils");
23
+ const __1 = require("..");
24
+ const ast_utils_1 = require("../../../utils/ast-utils");
25
+ const plugin_utils_1 = require("../../plugin-utils");
26
26
  const expression_writer_1 = require("./expression-writer");
27
27
  /**
28
28
  * Generates source file that contains Prisma query guard objects used for injecting database queries
29
29
  */
30
30
  class PolicyGenerator {
31
- generate(model, options, globalOptions) {
31
+ generate(project, model, options, output) {
32
32
  return __awaiter(this, void 0, void 0, function* () {
33
- let output = options.output ? options.output : (0, plugin_utils_1.getDefaultOutputFolder)(globalOptions);
34
- if (!output) {
35
- throw new sdk_1.PluginError(options.name, `Unable to determine output path, not running plugin`);
36
- }
37
- output = (0, sdk_1.resolvePath)(output, options);
38
- const project = (0, sdk_1.createProject)();
39
33
  const sf = project.createSourceFile(path_1.default.join(output, 'policy.ts'), undefined, { overwrite: true });
40
34
  sf.addStatements('/* eslint-disable */');
41
35
  sf.addImportDeclaration({
42
36
  namedImports: [
43
37
  { name: 'type QueryContext' },
44
- { name: 'type DbOperations' },
38
+ { name: 'type CrudContract' },
45
39
  { name: 'allFieldsEqual' },
46
40
  { name: 'type PolicyDef' },
47
41
  ],
48
42
  moduleSpecifier: `${sdk_1.RUNTIME_PACKAGE}`,
49
43
  });
50
44
  // import enums
51
- const prismaImport = (0, sdk_1.getPrismaClientImportSpec)(model, output);
45
+ const prismaImport = (0, sdk_1.getPrismaClientImportSpec)(output, options);
52
46
  for (const e of model.declarations.filter((d) => (0, ast_1.isEnum)(d) && this.isEnumReferenced(model, d))) {
53
47
  sf.addImportDeclaration({
54
48
  namedImports: [{ name: e.name }],
@@ -107,20 +101,10 @@ class PolicyGenerator {
107
101
  ],
108
102
  });
109
103
  sf.addStatements('export default policy');
110
- let shouldCompile = true;
111
- if (typeof options.compile === 'boolean') {
112
- // explicit override
113
- shouldCompile = options.compile;
114
- }
115
- else if (globalOptions) {
116
- shouldCompile = globalOptions.compile;
117
- }
118
- if (!shouldCompile || options.preserveTsFiles === true) {
119
- // save ts files
120
- yield (0, sdk_1.saveProject)(project);
121
- }
122
- if (shouldCompile) {
123
- yield (0, sdk_1.emitProject)(project);
104
+ // save ts files if requested explicitly or the user provided
105
+ const preserveTsFiles = options.preserveTsFiles === true || !!options.output;
106
+ if (preserveTsFiles) {
107
+ yield sf.save();
124
108
  }
125
109
  });
126
110
  }
@@ -141,7 +125,7 @@ class PolicyGenerator {
141
125
  // collect `auth()` member access
142
126
  allExpressions.forEach((rule) => {
143
127
  (0, langium_1.streamAst)(rule).forEach((node) => {
144
- if ((0, ast_1.isMemberAccessExpr)(node) && (0, ast_utils_1.isAuthInvocation)(node.operand)) {
128
+ if ((0, ast_1.isMemberAccessExpr)(node) && (0, sdk_1.isAuthInvocation)(node.operand)) {
145
129
  authRules.push(node);
146
130
  }
147
131
  });
@@ -216,30 +200,6 @@ class PolicyGenerator {
216
200
  return hasFutureReference ? [] : expressions;
217
201
  }
218
202
  }
219
- visitPolicyExpression(expr, postUpdate) {
220
- if ((0, ast_1.isBinaryExpr)(expr) && (expr.operator === '&&' || expr.operator === '||')) {
221
- const left = this.visitPolicyExpression(expr.left, postUpdate);
222
- const right = this.visitPolicyExpression(expr.right, postUpdate);
223
- if (!left)
224
- return right;
225
- if (!right)
226
- return left;
227
- return Object.assign(Object.assign({}, expr), { left, right });
228
- }
229
- if ((0, ast_1.isUnaryExpr)(expr) && expr.operator === '!') {
230
- const operand = this.visitPolicyExpression(expr.operand, postUpdate);
231
- if (!operand)
232
- return undefined;
233
- return Object.assign(Object.assign({}, expr), { operand });
234
- }
235
- if (postUpdate && !this.hasFutureReference(expr)) {
236
- return undefined;
237
- }
238
- else if (!postUpdate && this.hasFutureReference(expr)) {
239
- return undefined;
240
- }
241
- return expr;
242
- }
243
203
  hasFutureReference(expr) {
244
204
  var _a;
245
205
  for (const node of (0, langium_1.streamAst)(expr)) {
@@ -333,7 +293,7 @@ class PolicyGenerator {
333
293
  this.generateNormalizedAuthRef(field.$container, allows, denies, statements);
334
294
  // compile rules down to typescript expressions
335
295
  statements.push((writer) => {
336
- const transformer = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
296
+ const transformer = new sdk_1.TypeScriptExpressionTransformer({
337
297
  context: sdk_1.ExpressionContext.AccessPolicy,
338
298
  fieldReferenceContext: 'input',
339
299
  });
@@ -475,7 +435,7 @@ class PolicyGenerator {
475
435
  }
476
436
  }
477
437
  else if ((0, ast_1.isMemberAccessExpr)(node)) {
478
- if (forAuthContext && (0, ast_utils_1.isAuthInvocation)(node.operand)) {
438
+ if (forAuthContext && (0, sdk_1.isAuthInvocation)(node.operand)) {
479
439
  return [node.member.$refText];
480
440
  }
481
441
  if ((0, sdk_1.isFutureExpr)(node.operand)) {
@@ -496,7 +456,7 @@ class PolicyGenerator {
496
456
  if ((0, ast_1.isThisExpr)(expr) && !(0, ast_1.isMemberAccessExpr)(expr.$container)) {
497
457
  // a standalone `this` expression, include all id fields
498
458
  const model = (_a = expr.$resolvedType) === null || _a === void 0 ? void 0 : _a.decl;
499
- const idFields = (0, ast_utils_1.getIdFields)(model);
459
+ const idFields = (0, sdk_1.getIdFields)(model);
500
460
  return idFields.map((field) => [field.name]);
501
461
  }
502
462
  if ((0, ast_1.isMemberAccessExpr)(expr) || (0, ast_1.isReferenceExpr)(expr)) {
@@ -504,7 +464,7 @@ class PolicyGenerator {
504
464
  if (path) {
505
465
  if ((0, ast_1.isDataModel)((_b = expr.$resolvedType) === null || _b === void 0 ? void 0 : _b.decl)) {
506
466
  // member selection ended at a data model field, include its id fields
507
- const idFields = (0, ast_utils_1.getIdFields)((_c = expr.$resolvedType) === null || _c === void 0 ? void 0 : _c.decl);
467
+ const idFields = (0, sdk_1.getIdFields)((_c = expr.$resolvedType) === null || _c === void 0 ? void 0 : _c.decl);
508
468
  return idFields.map((field) => [...path, field.name]);
509
469
  }
510
470
  else {
@@ -559,7 +519,7 @@ class PolicyGenerator {
559
519
  // none of the rules reference model fields, we can compile down to a plain boolean
560
520
  // function in this case (so we can skip doing SQL queries when validating)
561
521
  statements.push((writer) => {
562
- const transformer = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
522
+ const transformer = new sdk_1.TypeScriptExpressionTransformer({
563
523
  context: sdk_1.ExpressionContext.AccessPolicy,
564
524
  isPostGuard: kind === 'postUpdate',
565
525
  });
@@ -572,8 +532,8 @@ class PolicyGenerator {
572
532
  });
573
533
  }
574
534
  catch (err) {
575
- if (err instanceof typescript_expression_transformer_1.TypeScriptExpressionTransformerError) {
576
- throw new sdk_1.PluginError(_1.name, err.message);
535
+ if (err instanceof sdk_1.TypeScriptExpressionTransformerError) {
536
+ throw new sdk_1.PluginError(__1.name, err.message);
577
537
  }
578
538
  else {
579
539
  throw err;
@@ -652,7 +612,7 @@ class PolicyGenerator {
652
612
  {
653
613
  // for generating field references used by field comparison in the same model
654
614
  name: 'db',
655
- type: 'Record<string, DbOperations>',
615
+ type: 'CrudContract',
656
616
  },
657
617
  ],
658
618
  statements,
@@ -667,7 +627,7 @@ class PolicyGenerator {
667
627
  writer.write('return false;');
668
628
  return;
669
629
  }
670
- const transformer = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
630
+ const transformer = new sdk_1.TypeScriptExpressionTransformer({
671
631
  context: sdk_1.ExpressionContext.AccessPolicy,
672
632
  fieldReferenceContext: 'input',
673
633
  });
@@ -707,20 +667,20 @@ class PolicyGenerator {
707
667
  }
708
668
  generateNormalizedAuthRef(model, allows, denies, statements) {
709
669
  // check if any allow or deny rule contains 'auth()' invocation
710
- const hasAuthRef = [...allows, ...denies].some((rule) => (0, langium_1.streamAst)(rule).some((child) => (0, ast_utils_1.isAuthInvocation)(child)));
670
+ const hasAuthRef = [...allows, ...denies].some((rule) => (0, langium_1.streamAst)(rule).some((child) => (0, sdk_1.isAuthInvocation)(child)));
711
671
  if (hasAuthRef) {
712
672
  const authModel = (0, sdk_1.getAuthModel)((0, sdk_1.getDataModels)(model.$container, true));
713
673
  if (!authModel) {
714
- throw new sdk_1.PluginError(_1.name, 'Auth model not found');
674
+ throw new sdk_1.PluginError(__1.name, 'Auth model not found');
715
675
  }
716
- const userIdFields = (0, ast_utils_1.getIdFields)(authModel);
676
+ const userIdFields = (0, sdk_1.getIdFields)(authModel);
717
677
  if (!userIdFields || userIdFields.length === 0) {
718
- throw new sdk_1.PluginError(_1.name, 'User model does not have an id field');
678
+ throw new sdk_1.PluginError(__1.name, 'User model does not have an id field');
719
679
  }
720
680
  // normalize user to null to avoid accidentally use undefined in filter
721
681
  statements.push(`const user: any = context.user ?? null;`);
722
682
  }
723
683
  }
724
684
  }
725
- exports.default = PolicyGenerator;
685
+ exports.PolicyGenerator = PolicyGenerator;
726
686
  //# sourceMappingURL=policy-guard-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-guard-generator.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/policy/policy-guard-generator.ts"],"names":[],"mappings":"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"}