zenstack 2.3.0 → 2.3.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.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publisher": "zenstack",
4
4
  "displayName": "ZenStack Language Tools",
5
5
  "description": "Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema that closer to the database",
6
- "version": "2.3.0",
6
+ "version": "2.3.2",
7
7
  "author": {
8
8
  "name": "ZenStack Team"
9
9
  },
@@ -103,8 +103,8 @@
103
103
  "vscode-uri": "^3.0.6",
104
104
  "zod": "^3.22.4",
105
105
  "zod-validation-error": "^1.5.0",
106
- "@zenstackhq/language": "2.3.0",
107
- "@zenstackhq/sdk": "2.3.0"
106
+ "@zenstackhq/language": "2.3.2",
107
+ "@zenstackhq/sdk": "2.3.2"
108
108
  },
109
109
  "peerDependencies": {
110
110
  "prisma": "5.0.0 - 5.16.x"
@@ -126,7 +126,7 @@
126
126
  "tmp": "^0.2.1",
127
127
  "tsc-alias": "^1.7.0",
128
128
  "vitest": "^0.29.7",
129
- "@zenstackhq/runtime": "2.3.0"
129
+ "@zenstackhq/runtime": "2.3.2"
130
130
  },
131
131
  "scripts": {
132
132
  "vscode:publish": "vsce publish --no-dependencies",
@@ -11,30 +11,20 @@ const ast_utils_1 = require("../../../utils/ast-utils");
11
11
  */
12
12
  function generateAuthType(model, authModel) {
13
13
  const types = new Map();
14
- types.set(authModel.name, { pickFields: (0, sdk_1.getIdFields)(authModel).map((f) => f.name), addFields: [] });
14
+ types.set(authModel.name, { requiredRelations: [] });
15
15
  const ensureType = (model) => {
16
16
  if (!types.has(model)) {
17
- types.set(model, { pickFields: [], addFields: [] });
18
- }
19
- };
20
- const addPickField = (model, field) => {
21
- let fields = types.get(model);
22
- if (!fields) {
23
- fields = { pickFields: [], addFields: [] };
24
- types.set(model, fields);
25
- }
26
- if (!fields.pickFields.includes(field)) {
27
- fields.pickFields.push(field);
17
+ types.set(model, { requiredRelations: [] });
28
18
  }
29
19
  };
30
20
  const addAddField = (model, name, type, array) => {
31
21
  let fields = types.get(model);
32
22
  if (!fields) {
33
- fields = { pickFields: [], addFields: [] };
23
+ fields = { requiredRelations: [] };
34
24
  types.set(model, fields);
35
25
  }
36
- if (!fields.addFields.find((f) => f.name === name)) {
37
- fields.addFields.push({ name, type: array ? `${type}[]` : type });
26
+ if (!fields.requiredRelations.find((f) => f.name === name)) {
27
+ fields.requiredRelations.push({ name, type: array ? `${type}[]` : type });
38
28
  }
39
29
  };
40
30
  // get all policy expressions involving `auth()`
@@ -53,12 +43,6 @@ function generateAuthType(model, authModel) {
53
43
  ensureType(fieldType);
54
44
  addAddField(exprType.name, memberDecl.name, fieldType, memberDecl.type.array);
55
45
  }
56
- else {
57
- // member is a scalar
58
- if (!isIgnoredField(node.member.ref)) {
59
- addPickField(exprType.name, node.member.$refText);
60
- }
61
- }
62
46
  }
63
47
  }
64
48
  if ((0, sdk_1.isDataModelFieldReference)(node)) {
@@ -70,12 +54,6 @@ function generateAuthType(model, authModel) {
70
54
  ensureType(fieldType.name);
71
55
  addAddField(fieldDecl.$container.name, node.target.$refText, fieldType.name, fieldDecl.type.array);
72
56
  }
73
- else {
74
- if (!isIgnoredField(fieldDecl)) {
75
- // field is a scalar
76
- addPickField(fieldDecl.$container.name, node.target.$refText);
77
- }
78
- }
79
57
  }
80
58
  });
81
59
  });
@@ -91,14 +69,18 @@ function generateAuthType(model, authModel) {
91
69
  ${Array.from(types.entries())
92
70
  .map(([model, fields]) => {
93
71
  let result = `Partial<_P.${model}>`;
94
- if (fields.pickFields.length > 0) {
95
- result = `WithRequired<${result}, ${fields.pickFields
96
- .map((f) => `'${f}'`)
97
- .join('|')}> & Record<string, unknown>`;
72
+ if (model === authModel.name) {
73
+ // auth model's id fields are always required
74
+ const idFields = (0, sdk_1.getIdFields)(authModel).map((f) => f.name);
75
+ if (idFields.length > 0) {
76
+ result = `WithRequired<${result}, ${idFields.map((f) => `'${f}'`).join('|')}>`;
77
+ }
98
78
  }
99
- if (fields.addFields.length > 0) {
100
- result = `${result} & { ${fields.addFields.map(({ name, type }) => `${name}: ${type}`).join('; ')} }`;
79
+ if (fields.requiredRelations.length > 0) {
80
+ // merge required relation fields
81
+ result = `${result} & { ${fields.requiredRelations.map((f) => `${f.name}: ${f.type}`).join('; ')} }`;
101
82
  }
83
+ result = `${result} & Record<string, unknown>`;
102
84
  return ` export type ${model} = ${result};`;
103
85
  })
104
86
  .join('\n')}
@@ -118,7 +100,4 @@ function isAuthAccess(node) {
118
100
  }
119
101
  return false;
120
102
  }
121
- function isIgnoredField(field) {
122
- return !!(field && (0, sdk_1.hasAttribute)(field, '@ignore'));
123
- }
124
103
  //# sourceMappingURL=auth-type-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-type-generator.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/enhance/auth-type-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-type-generator.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/enhance/auth-type-generator.ts"],"names":[],"mappings":"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"}