@smartive/graphql-magic 2.1.0 → 2.1.1

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
- # [2.1.0](https://github.com/smartive/graphql-magic/compare/v2.0.1...v2.1.0) (2023-07-19)
1
+ ## [2.1.1](https://github.com/smartive/graphql-magic/compare/v2.1.0...v2.1.1) (2023-07-20)
2
2
 
3
3
 
4
- ### Features
4
+ ### Bug Fixes
5
5
 
6
- * Generate db models ([8b4d0fb](https://github.com/smartive/graphql-magic/commit/8b4d0fb51987d59ac53545b4d298f6e6d4cb391b))
6
+ * Generate db models correctly, including seed models ([e92c34a](https://github.com/smartive/graphql-magic/commit/e92c34aba934de0c9a9d66c3a483e144b8788cda))
@@ -491,8 +491,10 @@ var PRIMITIVE_TYPES = {
491
491
  Upload: "string",
492
492
  Int: "number",
493
493
  Float: "number",
494
- String: "string"
494
+ String: "string",
495
+ DateTime: "DateTime | string"
495
496
  };
497
+ var OPTIONAL_SEED_FIELDS = ["createdAt", "createdById", "updatedAt", "updatedById", "deletedAt", "deletedById"];
496
498
  var generateDBModels = (rawModels) => {
497
499
  const writer = new import_code_block_writer.default["default"]({
498
500
  useSingleQuote: true,
@@ -504,30 +506,64 @@ var generateDBModels = (rawModels) => {
504
506
  }
505
507
  const models = getModels(rawModels);
506
508
  for (const model of models) {
509
+ const fields2 = model.fields.some((field) => field.foreignKey === "id") ? model.fields.filter((field) => field.name !== "id") : model.fields;
507
510
  writer.write(`export type ${model.name} = `).inlineBlock(() => {
508
- for (const { name: name2, type, nonNull: nonNull2, relation } of model.fields.filter(({ raw }) => !raw)) {
509
- writer.write(
510
- `'${name2}${relation ? "Id" : ""}': ${relation ? "string" : PRIMITIVE_TYPES[type] || type}${nonNull2 ? "" : " | null"},`
511
- ).newLine();
511
+ for (const field of fields2.filter(({ raw }) => !raw)) {
512
+ writer.write(`'${getFieldName(field)}': ${getFieldOutputType(field)}${field.nonNull ? "" : " | null"},`).newLine();
512
513
  }
513
514
  }).blankLine();
514
515
  writer.write(`export type ${model.name}Initializer = `).inlineBlock(() => {
515
- for (const { name: name2, type, nonNull: nonNull2, default: def, relation } of model.fields.filter(({ raw }) => !raw)) {
516
+ for (const field of fields2.filter(({ raw }) => !raw)) {
516
517
  writer.write(
517
- `'${name2}${relation ? "Id" : ""}'${nonNull2 && def === void 0 ? "" : "?"}: ${relation ? "string" : PRIMITIVE_TYPES[type] || type}${nonNull2 ? "" : " | null"},`
518
+ `'${getFieldName(field)}'${field.nonNull && field.default === void 0 ? "" : "?"}: ${getFieldInputType(
519
+ field
520
+ )}${field.nonNull ? "" : " | null"},`
518
521
  ).newLine();
519
522
  }
520
523
  }).blankLine();
521
524
  writer.write(`export type ${model.name}Mutator = `).inlineBlock(() => {
522
- for (const { name: name2, type, nonNull: nonNull2, relation } of model.fields.filter(({ raw }) => !raw)) {
525
+ for (const field of fields2.filter(({ raw }) => !raw)) {
526
+ writer.write(`'${getFieldName(field)}'?: ${getFieldInputType(field)}${field.nonNull ? "" : " | null"},`).newLine();
527
+ }
528
+ }).blankLine();
529
+ writer.write(`export type ${model.name}Seed = `).inlineBlock(() => {
530
+ for (const field of fields2.filter(({ raw }) => !raw)) {
531
+ const fieldName = getFieldName(field);
523
532
  writer.write(
524
- `'${name2}${relation ? "Id" : ""}'?: ${relation ? "string" : PRIMITIVE_TYPES[type] || type}${nonNull2 ? "" : " | null"},`
533
+ `'${getFieldName(field)}'${field.nonNull && field.default === void 0 && !OPTIONAL_SEED_FIELDS.includes(fieldName) ? "" : "?"}: ${getFieldInputType(
534
+ field,
535
+ rawModels.filter(isEnumModel).map(({ name: name2 }) => name2)
536
+ )}${field.list ? " | string" : ""}${field.nonNull ? "" : " | null"},`
525
537
  ).newLine();
526
538
  }
527
539
  }).blankLine();
528
540
  }
541
+ writer.write(`export type SeedData = `).inlineBlock(() => {
542
+ for (const model of models) {
543
+ writer.write(`${model.name}: ${model.name}Seed[],`).newLine();
544
+ }
545
+ });
529
546
  return writer.toString();
530
547
  };
548
+ var getFieldName = ({ relation, name: name2, foreignKey }) => {
549
+ return foreignKey || `${name2}${relation ? "Id" : ""}`;
550
+ };
551
+ var getFieldOutputType = ({ relation, type, list: list2, json }) => {
552
+ if (json || relation) {
553
+ return "string";
554
+ }
555
+ return (PRIMITIVE_TYPES[type] || type) + (list2 ? "[]" : "");
556
+ };
557
+ var getFieldInputType = (field, stringTypes = []) => {
558
+ let outputType = getFieldOutputType(field);
559
+ if (field.list || stringTypes.includes(field.type)) {
560
+ outputType += " | string";
561
+ if (field.list && stringTypes.includes(field.type)) {
562
+ outputType += " | string[]";
563
+ }
564
+ }
565
+ return outputType;
566
+ };
531
567
  var generateKnexTables = (rawModels) => {
532
568
  const writer = new import_code_block_writer.default["default"]({
533
569
  useSingleQuote: true,
@@ -7,7 +7,9 @@ const PRIMITIVE_TYPES = {
7
7
  Int: 'number',
8
8
  Float: 'number',
9
9
  String: 'string',
10
+ DateTime: 'DateTime | string',
10
11
  };
12
+ const OPTIONAL_SEED_FIELDS = ['createdAt', 'createdById', 'updatedAt', 'updatedById', 'deletedAt', 'deletedById'];
11
13
  export const generateDBModels = (rawModels) => {
12
14
  const writer = new CodeBlockWriter['default']({
13
15
  useSingleQuote: true,
@@ -19,22 +21,24 @@ export const generateDBModels = (rawModels) => {
19
21
  }
20
22
  const models = getModels(rawModels);
21
23
  for (const model of models) {
24
+ // TODO: deprecate allowing to define foreignKey
25
+ const fields = model.fields.some((field) => field.foreignKey === 'id')
26
+ ? model.fields.filter((field) => field.name !== 'id')
27
+ : model.fields;
22
28
  writer
23
29
  .write(`export type ${model.name} = `)
24
30
  .inlineBlock(() => {
25
- for (const { name, type, nonNull, relation } of model.fields.filter(({ raw }) => !raw)) {
26
- writer
27
- .write(`'${name}${relation ? 'Id' : ''}': ${relation ? 'string' : PRIMITIVE_TYPES[type] || type}${nonNull ? '' : ' | null'},`)
28
- .newLine();
31
+ for (const field of fields.filter(({ raw }) => !raw)) {
32
+ writer.write(`'${getFieldName(field)}': ${getFieldOutputType(field)}${field.nonNull ? '' : ' | null'},`).newLine();
29
33
  }
30
34
  })
31
35
  .blankLine();
32
36
  writer
33
37
  .write(`export type ${model.name}Initializer = `)
34
38
  .inlineBlock(() => {
35
- for (const { name, type, nonNull, default: def, relation } of model.fields.filter(({ raw }) => !raw)) {
39
+ for (const field of fields.filter(({ raw }) => !raw)) {
36
40
  writer
37
- .write(`'${name}${relation ? 'Id' : ''}'${nonNull && def === undefined ? '' : '?'}: ${relation ? 'string' : PRIMITIVE_TYPES[type] || type}${nonNull ? '' : ' | null'},`)
41
+ .write(`'${getFieldName(field)}'${field.nonNull && field.default === undefined ? '' : '?'}: ${getFieldInputType(field)}${field.nonNull ? '' : ' | null'},`)
38
42
  .newLine();
39
43
  }
40
44
  })
@@ -42,16 +46,49 @@ export const generateDBModels = (rawModels) => {
42
46
  writer
43
47
  .write(`export type ${model.name}Mutator = `)
44
48
  .inlineBlock(() => {
45
- for (const { name, type, nonNull, relation } of model.fields.filter(({ raw }) => !raw)) {
49
+ for (const field of fields.filter(({ raw }) => !raw)) {
50
+ writer.write(`'${getFieldName(field)}'?: ${getFieldInputType(field)}${field.nonNull ? '' : ' | null'},`).newLine();
51
+ }
52
+ })
53
+ .blankLine();
54
+ writer
55
+ .write(`export type ${model.name}Seed = `)
56
+ .inlineBlock(() => {
57
+ for (const field of fields.filter(({ raw }) => !raw)) {
58
+ const fieldName = getFieldName(field);
46
59
  writer
47
- .write(`'${name}${relation ? 'Id' : ''}'?: ${relation ? 'string' : PRIMITIVE_TYPES[type] || type}${nonNull ? '' : ' | null'},`)
60
+ .write(`'${getFieldName(field)}'${field.nonNull && field.default === undefined && !OPTIONAL_SEED_FIELDS.includes(fieldName) ? '' : '?'}: ${getFieldInputType(field, rawModels.filter(isEnumModel).map(({ name }) => name))}${field.list ? ' | string' : ''}${field.nonNull ? '' : ' | null'},`)
48
61
  .newLine();
49
62
  }
50
63
  })
51
64
  .blankLine();
52
65
  }
66
+ writer.write(`export type SeedData = `).inlineBlock(() => {
67
+ for (const model of models) {
68
+ writer.write(`${model.name}: ${model.name}Seed[],`).newLine();
69
+ }
70
+ });
53
71
  return writer.toString();
54
72
  };
73
+ const getFieldName = ({ relation, name, foreignKey }) => {
74
+ return foreignKey || `${name}${relation ? 'Id' : ''}`;
75
+ };
76
+ const getFieldOutputType = ({ relation, type, list, json }) => {
77
+ if (json || relation) {
78
+ return 'string';
79
+ }
80
+ return (PRIMITIVE_TYPES[type] || type) + (list ? '[]' : '');
81
+ };
82
+ const getFieldInputType = (field, stringTypes = []) => {
83
+ let outputType = getFieldOutputType(field);
84
+ if (field.list || stringTypes.includes(field.type)) {
85
+ outputType += ' | string';
86
+ if (field.list && stringTypes.includes(field.type)) {
87
+ outputType += ' | string[]';
88
+ }
89
+ }
90
+ return outputType;
91
+ };
55
92
  export const generateKnexTables = (rawModels) => {
56
93
  const writer = new CodeBlockWriter['default']({
57
94
  useSingleQuote: true,
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/db/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/db/generate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartive/graphql-magic",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "description": "",
5
5
  "source": "src/index.ts",
6
6
  "type": "module",
@@ -1,5 +1,5 @@
1
1
  import CodeBlockWriter from 'code-block-writer';
2
- import { RawModels, getModels, isEnumModel } from '..';
2
+ import { ModelField, RawModels, getModels, isEnumModel } from '..';
3
3
 
4
4
  const PRIMITIVE_TYPES = {
5
5
  ID: 'string',
@@ -8,8 +8,11 @@ const PRIMITIVE_TYPES = {
8
8
  Int: 'number',
9
9
  Float: 'number',
10
10
  String: 'string',
11
+ DateTime: 'DateTime | string',
11
12
  };
12
13
 
14
+ const OPTIONAL_SEED_FIELDS = ['createdAt', 'createdById', 'updatedAt', 'updatedById', 'deletedAt', 'deletedById'];
15
+
13
16
  export const generateDBModels = (rawModels: RawModels) => {
14
17
  const writer: CodeBlockWriter = new CodeBlockWriter['default']({
15
18
  useSingleQuote: true,
@@ -25,17 +28,16 @@ export const generateDBModels = (rawModels: RawModels) => {
25
28
  const models = getModels(rawModels);
26
29
 
27
30
  for (const model of models) {
31
+ // TODO: deprecate allowing to define foreignKey
32
+ const fields = model.fields.some((field) => field.foreignKey === 'id')
33
+ ? model.fields.filter((field) => field.name !== 'id')
34
+ : model.fields;
35
+
28
36
  writer
29
37
  .write(`export type ${model.name} = `)
30
38
  .inlineBlock(() => {
31
- for (const { name, type, nonNull, relation } of model.fields.filter(({ raw }) => !raw)) {
32
- writer
33
- .write(
34
- `'${name}${relation ? 'Id' : ''}': ${relation ? 'string' : PRIMITIVE_TYPES[type] || type}${
35
- nonNull ? '' : ' | null'
36
- },`
37
- )
38
- .newLine();
39
+ for (const field of fields.filter(({ raw }) => !raw)) {
40
+ writer.write(`'${getFieldName(field)}': ${getFieldOutputType(field)}${field.nonNull ? '' : ' | null'},`).newLine();
39
41
  }
40
42
  })
41
43
  .blankLine();
@@ -43,12 +45,12 @@ export const generateDBModels = (rawModels: RawModels) => {
43
45
  writer
44
46
  .write(`export type ${model.name}Initializer = `)
45
47
  .inlineBlock(() => {
46
- for (const { name, type, nonNull, default: def, relation } of model.fields.filter(({ raw }) => !raw)) {
48
+ for (const field of fields.filter(({ raw }) => !raw)) {
47
49
  writer
48
50
  .write(
49
- `'${name}${relation ? 'Id' : ''}'${nonNull && def === undefined ? '' : '?'}: ${
50
- relation ? 'string' : PRIMITIVE_TYPES[type] || type
51
- }${nonNull ? '' : ' | null'},`
51
+ `'${getFieldName(field)}'${field.nonNull && field.default === undefined ? '' : '?'}: ${getFieldInputType(
52
+ field
53
+ )}${field.nonNull ? '' : ' | null'},`
52
54
  )
53
55
  .newLine();
54
56
  }
@@ -58,12 +60,25 @@ export const generateDBModels = (rawModels: RawModels) => {
58
60
  writer
59
61
  .write(`export type ${model.name}Mutator = `)
60
62
  .inlineBlock(() => {
61
- for (const { name, type, nonNull, relation } of model.fields.filter(({ raw }) => !raw)) {
63
+ for (const field of fields.filter(({ raw }) => !raw)) {
64
+ writer.write(`'${getFieldName(field)}'?: ${getFieldInputType(field)}${field.nonNull ? '' : ' | null'},`).newLine();
65
+ }
66
+ })
67
+ .blankLine();
68
+
69
+ writer
70
+ .write(`export type ${model.name}Seed = `)
71
+ .inlineBlock(() => {
72
+ for (const field of fields.filter(({ raw }) => !raw)) {
73
+ const fieldName = getFieldName(field);
62
74
  writer
63
75
  .write(
64
- `'${name}${relation ? 'Id' : ''}'?: ${relation ? 'string' : PRIMITIVE_TYPES[type] || type}${
65
- nonNull ? '' : ' | null'
66
- },`
76
+ `'${getFieldName(field)}'${
77
+ field.nonNull && field.default === undefined && !OPTIONAL_SEED_FIELDS.includes(fieldName) ? '' : '?'
78
+ }: ${getFieldInputType(
79
+ field,
80
+ rawModels.filter(isEnumModel).map(({ name }) => name)
81
+ )}${field.list ? ' | string' : ''}${field.nonNull ? '' : ' | null'},`
67
82
  )
68
83
  .newLine();
69
84
  }
@@ -71,9 +86,40 @@ export const generateDBModels = (rawModels: RawModels) => {
71
86
  .blankLine();
72
87
  }
73
88
 
89
+ writer.write(`export type SeedData = `).inlineBlock(() => {
90
+ for (const model of models) {
91
+ writer.write(`${model.name}: ${model.name}Seed[],`).newLine();
92
+ }
93
+ });
94
+
74
95
  return writer.toString();
75
96
  };
76
97
 
98
+ const getFieldName = ({ relation, name, foreignKey }: ModelField) => {
99
+ return foreignKey || `${name}${relation ? 'Id' : ''}`;
100
+ };
101
+
102
+ const getFieldOutputType = ({ relation, type, list, json }: ModelField) => {
103
+ if (json || relation) {
104
+ return 'string';
105
+ }
106
+
107
+ return (PRIMITIVE_TYPES[type] || type) + (list ? '[]' : '');
108
+ };
109
+
110
+ const getFieldInputType = (field: ModelField, stringTypes: string[] = []) => {
111
+ let outputType = getFieldOutputType(field);
112
+
113
+ if (field.list || stringTypes.includes(field.type)) {
114
+ outputType += ' | string';
115
+ if (field.list && stringTypes.includes(field.type)) {
116
+ outputType += ' | string[]';
117
+ }
118
+ }
119
+
120
+ return outputType;
121
+ };
122
+
77
123
  export const generateKnexTables = (rawModels: RawModels) => {
78
124
  const writer: CodeBlockWriter = new CodeBlockWriter['default']({
79
125
  useSingleQuote: true,