@smartive/graphql-magic 19.1.0-next.3 → 19.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.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
- # [19.1.0-next.3](https://github.com/smartive/graphql-magic/compare/v19.1.0-next.2...v19.1.0-next.3) (2025-06-04)
1
+ # [19.1.0](https://github.com/smartive/graphql-magic/compare/v19.0.0...v19.1.0) (2025-06-04)
2
2
 
3
3
 
4
- ### Bug Fixes
4
+ ### Features
5
5
 
6
- * Actually... ([5f0914a](https://github.com/smartive/graphql-magic/commit/5f0914aa86b9705e2af7379d07cda91f5a493065))
6
+ * Permissions Typing ([#303](https://github.com/smartive/graphql-magic/issues/303)) ([2be1899](https://github.com/smartive/graphql-magic/commit/2be189913e0fa91cadf805fd715e25c9351e13dd))
package/dist/bin/gqm.cjs CHANGED
@@ -1278,9 +1278,7 @@ var generatePermissionTypes = (models) => {
1278
1278
  }
1279
1279
  })
1280
1280
  );
1281
- for (const enm2 of models.enums) {
1282
- sourceFile.addStatements((writer) => writer.write(`type ${enm2.name} = ${enm2.values.map((v) => `'${v}'`).join(" | ")};`));
1283
- }
1281
+ const usedEnums = /* @__PURE__ */ new Set(["Role"]);
1284
1282
  for (const model of models.entities) {
1285
1283
  sourceFile.addStatements(
1286
1284
  (writer) => writer.write(`export type ${model.name}Where = `).inlineBlock(() => {
@@ -1290,6 +1288,9 @@ var generatePermissionTypes = (models) => {
1290
1288
  } else if (!field.kind || field.kind === "primitive") {
1291
1289
  writer.writeLine(`${field.name}?: ${PRIMITIVE_TYPES[field.type]} | ${PRIMITIVE_TYPES[field.type]}[],`);
1292
1290
  } else {
1291
+ if (field.kind === "enum") {
1292
+ usedEnums.add(field.type);
1293
+ }
1293
1294
  writer.writeLine(`${field.name}?: ${field.type} | ${field.type}[],`);
1294
1295
  }
1295
1296
  }
@@ -1312,6 +1313,13 @@ var generatePermissionTypes = (models) => {
1312
1313
  })
1313
1314
  );
1314
1315
  }
1316
+ for (const name2 of usedEnums) {
1317
+ sourceFile.addStatements(
1318
+ (writer) => writer.write(
1319
+ `type ${name2} = ${models.getModel(name2, "enum").values.map((v) => `'${v}'`).join(" | ")};`
1320
+ )
1321
+ );
1322
+ }
1315
1323
  return sourceFile.getFullText();
1316
1324
  };
1317
1325
 
@@ -2092,9 +2092,7 @@ var generatePermissionTypes = (models) => {
2092
2092
  }
2093
2093
  })
2094
2094
  );
2095
- for (const enm2 of models.enums) {
2096
- sourceFile.addStatements((writer) => writer.write(`type ${enm2.name} = ${enm2.values.map((v) => `'${v}'`).join(" | ")};`));
2097
- }
2095
+ const usedEnums = /* @__PURE__ */ new Set(["Role"]);
2098
2096
  for (const model of models.entities) {
2099
2097
  sourceFile.addStatements(
2100
2098
  (writer) => writer.write(`export type ${model.name}Where = `).inlineBlock(() => {
@@ -2104,6 +2102,9 @@ var generatePermissionTypes = (models) => {
2104
2102
  } else if (!field.kind || field.kind === "primitive") {
2105
2103
  writer.writeLine(`${field.name}?: ${PRIMITIVE_TYPES[field.type]} | ${PRIMITIVE_TYPES[field.type]}[],`);
2106
2104
  } else {
2105
+ if (field.kind === "enum") {
2106
+ usedEnums.add(field.type);
2107
+ }
2107
2108
  writer.writeLine(`${field.name}?: ${field.type} | ${field.type}[],`);
2108
2109
  }
2109
2110
  }
@@ -2126,6 +2127,13 @@ var generatePermissionTypes = (models) => {
2126
2127
  })
2127
2128
  );
2128
2129
  }
2130
+ for (const name2 of usedEnums) {
2131
+ sourceFile.addStatements(
2132
+ (writer) => writer.write(
2133
+ `type ${name2} = ${models.getModel(name2, "enum").values.map((v) => `'${v}'`).join(" | ")};`
2134
+ )
2135
+ );
2136
+ }
2129
2137
  return sourceFile.getFullText();
2130
2138
  };
2131
2139
 
@@ -17,9 +17,7 @@ export const generatePermissionTypes = (models) => {
17
17
  writer.writeLine(`${model.name}?: ${model.name}Permissions,`);
18
18
  }
19
19
  }));
20
- for (const enm of models.enums) {
21
- sourceFile.addStatements((writer) => writer.write(`type ${enm.name} = ${enm.values.map((v) => `'${v}'`).join(' | ')};`));
22
- }
20
+ const usedEnums = new Set(['Role']);
23
21
  for (const model of models.entities) {
24
22
  sourceFile.addStatements((writer) => writer.write(`export type ${model.name}Where = `).inlineBlock(() => {
25
23
  for (const field of model.fields.filter((field) => field.filterable)) {
@@ -30,6 +28,9 @@ export const generatePermissionTypes = (models) => {
30
28
  writer.writeLine(`${field.name}?: ${PRIMITIVE_TYPES[field.type]} | ${PRIMITIVE_TYPES[field.type]}[],`);
31
29
  }
32
30
  else {
31
+ if (field.kind === 'enum') {
32
+ usedEnums.add(field.type);
33
+ }
33
34
  writer.writeLine(`${field.name}?: ${field.type} | ${field.type}[],`);
34
35
  }
35
36
  }
@@ -49,6 +50,12 @@ export const generatePermissionTypes = (models) => {
49
50
  }
50
51
  }));
51
52
  }
53
+ for (const name of usedEnums) {
54
+ sourceFile.addStatements((writer) => writer.write(`type ${name} = ${models
55
+ .getModel(name, 'enum')
56
+ .values.map((v) => `'${v}'`)
57
+ .join(' | ')};`));
58
+ }
52
59
  return sourceFile.getFullText();
53
60
  };
54
61
  //# sourceMappingURL=generate-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../../../src/permissions/generate-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../../../src/permissions/generate-types.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,18 @@ import { Knex } from 'knex';
3
3
  export const up = async (knex: Knex) => {
4
4
  await knex.raw(`CREATE TYPE "someEnum" AS ENUM ('A','B','C')`);
5
5
 
6
+ await knex.raw(`CREATE TYPE "role" AS ENUM ('ADMIN','USER')`);
7
+
6
8
  await knex.raw(`CREATE TYPE "reactionType" AS ENUM ('Review','Question','Answer')`);
7
9
 
8
- await knex.schema.alterTable('User', (table) => {
9
- table.string('username', undefined);
10
+ await knex.schema.createTable('User', (table) => {
11
+ table.uuid('id').notNullable().primary();
12
+ table.string('username', undefined).nullable();
13
+ table.enum('role', null, {
14
+ useNative: true,
15
+ existingType: true,
16
+ enumName: 'role',
17
+ }).notNullable();
10
18
  });
11
19
 
12
20
  await knex.schema.createTable('AnotherObject', (table) => {
@@ -115,29 +123,9 @@ export const up = async (knex: Knex) => {
115
123
  table.decimal('rating', undefined, undefined).nullable();
116
124
  });
117
125
 
118
- await knex.schema.alterTable('User', (table) => {
119
- table.dropColumn('createdAt');
120
- table.dropColumn('updatedAt');
121
- });
122
-
123
126
  };
124
127
 
125
128
  export const down = async (knex: Knex) => {
126
- await knex.schema.alterTable('User', (table) => {
127
- table.timestamp('createdAt');
128
- table.timestamp('updatedAt');
129
- });
130
-
131
- await knex('User').update({
132
- createdAt: 'TODO',
133
- updatedAt: 'TODO',
134
- });
135
-
136
- await knex.schema.alterTable('User', (table) => {
137
- table.timestamp('createdAt').notNullable().alter();
138
- table.timestamp('updatedAt').notNullable().alter();
139
- });
140
-
141
129
  await knex.schema.dropTable('ReviewRevision');
142
130
 
143
131
  await knex.schema.dropTable('Review');
@@ -152,11 +140,10 @@ export const down = async (knex: Knex) => {
152
140
 
153
141
  await knex.schema.dropTable('AnotherObject');
154
142
 
155
- await knex.schema.alterTable('User', (table) => {
156
- table.dropColumn('username');
157
- });
143
+ await knex.schema.dropTable('User');
158
144
 
159
145
  await knex.raw('DROP TYPE "reactionType"');
146
+ await knex.raw('DROP TYPE "role"');
160
147
  await knex.raw('DROP TYPE "someEnum"');
161
148
  };
162
149
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartive/graphql-magic",
3
- "version": "19.1.0-next.3",
3
+ "version": "19.1.0",
4
4
  "description": "",
5
5
  "source": "src/index.ts",
6
6
  "type": "module",
@@ -25,9 +25,7 @@ export const generatePermissionTypes = (models: Models) => {
25
25
  }),
26
26
  );
27
27
 
28
- for (const enm of models.enums) {
29
- sourceFile.addStatements((writer) => writer.write(`type ${enm.name} = ${enm.values.map((v) => `'${v}'`).join(' | ')};`));
30
- }
28
+ const usedEnums = new Set<string>(['Role']);
31
29
 
32
30
  for (const model of models.entities) {
33
31
  sourceFile.addStatements((writer) =>
@@ -38,6 +36,9 @@ export const generatePermissionTypes = (models: Models) => {
38
36
  } else if (!field.kind || field.kind === 'primitive') {
39
37
  writer.writeLine(`${field.name}?: ${PRIMITIVE_TYPES[field.type]} | ${PRIMITIVE_TYPES[field.type]}[],`);
40
38
  } else {
39
+ if (field.kind === 'enum') {
40
+ usedEnums.add(field.type);
41
+ }
41
42
  writer.writeLine(`${field.name}?: ${field.type} | ${field.type}[],`);
42
43
  }
43
44
  }
@@ -62,5 +63,16 @@ export const generatePermissionTypes = (models: Models) => {
62
63
  );
63
64
  }
64
65
 
66
+ for (const name of usedEnums) {
67
+ sourceFile.addStatements((writer) =>
68
+ writer.write(
69
+ `type ${name} = ${models
70
+ .getModel(name, 'enum')
71
+ .values.map((v) => `'${v}'`)
72
+ .join(' | ')};`,
73
+ ),
74
+ );
75
+ }
76
+
65
77
  return sourceFile.getFullText();
66
78
  };
@@ -9,9 +9,6 @@ export type PermissionsBlock = true | {
9
9
  Question?: QuestionPermissions,
10
10
  Answer?: AnswerPermissions,
11
11
  }
12
- type SomeEnum = 'A' | 'B' | 'C';
13
- type Role = 'ADMIN' | 'USER';
14
- type ReactionType = 'Review' | 'Question' | 'Answer';
15
12
  export type UserWhere = {
16
13
  }
17
14
  export type UserPermissions = {
@@ -169,3 +166,4 @@ export type AnswerPermissions = {
169
166
  childAnswers?: AnswerPermissions,
170
167
  }
171
168
  }
169
+ type Role = 'ADMIN' | 'USER';