@smartive/graphql-magic 23.6.0 → 23.6.1-next.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 +3 -3
- package/dist/bin/gqm.cjs +14 -12
- package/dist/cjs/index.cjs +34 -20
- package/dist/esm/db/generate.js +5 -5
- package/dist/esm/db/generate.js.map +1 -1
- package/dist/esm/migrations/generate.js +6 -8
- package/dist/esm/migrations/generate.js.map +1 -1
- package/dist/esm/models/utils.d.ts +4 -0
- package/dist/esm/models/utils.js +4 -0
- package/dist/esm/models/utils.js.map +1 -1
- package/dist/esm/permissions/check.js +4 -2
- package/dist/esm/permissions/check.js.map +1 -1
- package/dist/esm/resolvers/mutations.js +16 -6
- package/dist/esm/resolvers/mutations.js.map +1 -1
- package/dist/esm/schema/generate.js +3 -1
- package/dist/esm/schema/generate.js.map +1 -1
- package/package.json +2 -2
- package/src/db/generate.ts +15 -5
- package/src/migrations/generate.ts +6 -7
- package/src/models/utils.ts +6 -0
- package/src/permissions/check.ts +4 -4
- package/src/resolvers/mutations.ts +16 -6
- package/src/schema/generate.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
## [23.6.
|
|
1
|
+
## [23.6.1-next.1](https://github.com/smartive/graphql-magic/compare/v23.6.0...v23.6.1-next.1) (2026-02-24)
|
|
2
2
|
|
|
3
|
-
###
|
|
3
|
+
### Bug Fixes
|
|
4
4
|
|
|
5
|
-
*
|
|
5
|
+
* exclude expression from DB types and all generateAs from upserts ([adfa7fc](https://github.com/smartive/graphql-magic/commit/adfa7fc10b2fd84ae951840d1dc553d50f78bc3e))
|
package/dist/bin/gqm.cjs
CHANGED
|
@@ -568,6 +568,8 @@ var isInherited = (field) => !!field.inherited;
|
|
|
568
568
|
var isInTable = (field) => field.name === "id" || !field.inherited;
|
|
569
569
|
var isQueriableField = ({ queriable }) => queriable !== false;
|
|
570
570
|
var isCustomField = (field) => field.kind === "custom";
|
|
571
|
+
var isGenerateAsField = (field) => !!field.generateAs;
|
|
572
|
+
var isStoredInDatabase = (field) => field.generateAs?.type !== "expression";
|
|
571
573
|
var isSimpleField = and(not(isRelation), not(isCustomField));
|
|
572
574
|
var summonByName = (array, value2) => summonByKey(array, "name", value2);
|
|
573
575
|
var summonByKey = (array, key, value2) => summon(array, (element) => (0, import_get.default)(element, key) === value2, `No element found with ${key} ${value2}`);
|
|
@@ -694,12 +696,12 @@ var generateDBModels = (models, dateLibrary) => {
|
|
|
694
696
|
for (const model of models.entities) {
|
|
695
697
|
const fields2 = model.relations.some((relation) => relation.field.foreignKey === "id") ? model.fields.filter((field) => field.name !== "id") : model.fields;
|
|
696
698
|
writer.write(`export type ${model.name} = `).inlineBlock(() => {
|
|
697
|
-
for (const field of fields2.filter(not(isCustomField))) {
|
|
699
|
+
for (const field of fields2.filter(not(isCustomField)).filter(isStoredInDatabase)) {
|
|
698
700
|
writer.write(`'${getColumnName(field)}': ${getFieldType(field, dateLibrary)}${field.nonNull ? "" : " | null"};`).newLine();
|
|
699
701
|
}
|
|
700
702
|
}).blankLine();
|
|
701
703
|
writer.write(`export type ${model.name}Initializer = `).inlineBlock(() => {
|
|
702
|
-
for (const field of fields2.filter(not(isCustomField)).filter(isInTable)) {
|
|
704
|
+
for (const field of fields2.filter(not(isCustomField)).filter(isInTable).filter(not(isGenerateAsField))) {
|
|
703
705
|
writer.write(
|
|
704
706
|
`'${getColumnName(field)}'${field.nonNull && field.defaultValue === void 0 ? "" : "?"}: ${getFieldType(
|
|
705
707
|
field,
|
|
@@ -710,7 +712,7 @@ var generateDBModels = (models, dateLibrary) => {
|
|
|
710
712
|
}
|
|
711
713
|
}).blankLine();
|
|
712
714
|
writer.write(`export type ${model.name}Mutator = `).inlineBlock(() => {
|
|
713
|
-
for (const field of fields2.filter(not(isCustomField)).filter(isInTable)) {
|
|
715
|
+
for (const field of fields2.filter(not(isCustomField)).filter(isInTable).filter(not(isGenerateAsField))) {
|
|
714
716
|
writer.write(
|
|
715
717
|
`'${getColumnName(field)}'?: ${getFieldType(field, dateLibrary, true)}${field.list ? " | string" : ""}${field.nonNull ? "" : " | null"};`
|
|
716
718
|
).newLine();
|
|
@@ -718,7 +720,7 @@ var generateDBModels = (models, dateLibrary) => {
|
|
|
718
720
|
}).blankLine();
|
|
719
721
|
if (!isRootModel(model)) {
|
|
720
722
|
writer.write(`export type ${model.name}Seed = `).inlineBlock(() => {
|
|
721
|
-
for (const field of fields2.filter(not(isCustomField))) {
|
|
723
|
+
for (const field of fields2.filter(not(isCustomField)).filter(not(isGenerateAsField))) {
|
|
722
724
|
if (model.parent && field.name === "type") {
|
|
723
725
|
continue;
|
|
724
726
|
}
|
|
@@ -1213,7 +1215,7 @@ var MigrationGenerator = class {
|
|
|
1213
1215
|
writer.writeLine(`deleteRootType: row.deleteRootType,`);
|
|
1214
1216
|
writer.writeLine(`deleteRootId: row.deleteRootId,`);
|
|
1215
1217
|
}
|
|
1216
|
-
for (const { name: name2, kind } of model.fields.filter(isUpdatableField).filter((
|
|
1218
|
+
for (const { name: name2, kind } of model.fields.filter(isUpdatableField).filter(not(isGenerateAsField))) {
|
|
1217
1219
|
const col = kind === "relation" ? `${name2}Id` : name2;
|
|
1218
1220
|
writer.writeLine(`${col}: row.${col},`);
|
|
1219
1221
|
}
|
|
@@ -1233,8 +1235,8 @@ var MigrationGenerator = class {
|
|
|
1233
1235
|
up,
|
|
1234
1236
|
down
|
|
1235
1237
|
);
|
|
1236
|
-
const missingRevisionFields = model.fields.filter(isUpdatableField).filter(
|
|
1237
|
-
({ name: name2, ...field }) => field.kind !== "custom" && !
|
|
1238
|
+
const missingRevisionFields = model.fields.filter(isUpdatableField).filter(not(isGenerateAsField)).filter(
|
|
1239
|
+
({ name: name2, ...field }) => field.kind !== "custom" && !this.getColumn(revisionTable, field.kind === "relation" ? field.foreignKey || `${name2}Id` : name2)
|
|
1238
1240
|
);
|
|
1239
1241
|
this.createRevisionFields(model, missingRevisionFields, up, down);
|
|
1240
1242
|
const revisionFieldsToRemove = model.fields.filter(
|
|
@@ -1392,7 +1394,7 @@ var MigrationGenerator = class {
|
|
|
1392
1394
|
});
|
|
1393
1395
|
});
|
|
1394
1396
|
if (isUpdatableModel(model)) {
|
|
1395
|
-
const updatableFields = fields2.filter(isUpdatableField).filter((
|
|
1397
|
+
const updatableFields = fields2.filter(isUpdatableField).filter(not(isGenerateAsField));
|
|
1396
1398
|
if (!updatableFields.length) {
|
|
1397
1399
|
return;
|
|
1398
1400
|
}
|
|
@@ -1440,7 +1442,7 @@ var MigrationGenerator = class {
|
|
|
1440
1442
|
});
|
|
1441
1443
|
});
|
|
1442
1444
|
if (isUpdatableModel(model)) {
|
|
1443
|
-
const updatableFields = fields2.filter(isUpdatableField).filter((
|
|
1445
|
+
const updatableFields = fields2.filter(isUpdatableField).filter(not(isGenerateAsField));
|
|
1444
1446
|
if (!updatableFields.length) {
|
|
1445
1447
|
return;
|
|
1446
1448
|
}
|
|
@@ -1478,7 +1480,7 @@ var MigrationGenerator = class {
|
|
|
1478
1480
|
writer.writeLine(`table.uuid('deleteRootId');`);
|
|
1479
1481
|
}
|
|
1480
1482
|
}
|
|
1481
|
-
for (const field of model.fields.filter(and(isUpdatableField, not(isInherited))).filter((
|
|
1483
|
+
for (const field of model.fields.filter(and(isUpdatableField, not(isInherited))).filter(not(isGenerateAsField))) {
|
|
1482
1484
|
this.column(field, { setUnique: false, setDefault: false });
|
|
1483
1485
|
}
|
|
1484
1486
|
});
|
|
@@ -2253,7 +2255,7 @@ var generateDefinitions = ({
|
|
|
2253
2255
|
types.push(
|
|
2254
2256
|
input(
|
|
2255
2257
|
`Create${model.name}`,
|
|
2256
|
-
model.fields.filter(({ creatable }) => creatable).map(
|
|
2258
|
+
model.fields.filter(({ creatable }) => creatable).filter(not(isGenerateAsField)).map(
|
|
2257
2259
|
(field) => field.kind === "relation" ? { name: `${field.name}Id`, type: "ID", nonNull: field.nonNull } : {
|
|
2258
2260
|
name: field.name,
|
|
2259
2261
|
type: field.kind === "json" ? `Create${field.type}` : field.type,
|
|
@@ -2268,7 +2270,7 @@ var generateDefinitions = ({
|
|
|
2268
2270
|
types.push(
|
|
2269
2271
|
input(
|
|
2270
2272
|
`Update${model.name}`,
|
|
2271
|
-
model.fields.filter(({ updatable }) => updatable).map(
|
|
2273
|
+
model.fields.filter(({ updatable }) => updatable).filter(not(isGenerateAsField)).map(
|
|
2272
2274
|
(field) => field.kind === "relation" ? { name: `${field.name}Id`, type: "ID" } : {
|
|
2273
2275
|
name: field.name,
|
|
2274
2276
|
type: field.kind === "json" ? `Update${field.type}` : field.type,
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -138,6 +138,7 @@ __export(index_exports, {
|
|
|
138
138
|
isEnumModel: () => isEnumModel,
|
|
139
139
|
isFieldNode: () => isFieldNode,
|
|
140
140
|
isFragmentSpreadNode: () => isFragmentSpreadNode,
|
|
141
|
+
isGenerateAsField: () => isGenerateAsField,
|
|
141
142
|
isInTable: () => isInTable,
|
|
142
143
|
isInherited: () => isInherited,
|
|
143
144
|
isInlineFragmentNode: () => isInlineFragmentNode,
|
|
@@ -154,6 +155,7 @@ __export(index_exports, {
|
|
|
154
155
|
isRootModel: () => isRootModel,
|
|
155
156
|
isScalarModel: () => isScalarModel,
|
|
156
157
|
isSimpleField: () => isSimpleField,
|
|
158
|
+
isStoredInDatabase: () => isStoredInDatabase,
|
|
157
159
|
isToOneRelation: () => isToOneRelation,
|
|
158
160
|
isUpdatable: () => isUpdatable,
|
|
159
161
|
isUpdatableBy: () => isUpdatableBy,
|
|
@@ -845,6 +847,8 @@ var isInTable = (field) => field.name === "id" || !field.inherited;
|
|
|
845
847
|
var isToOneRelation = (field) => isRelation(field) && !!field.toOne;
|
|
846
848
|
var isQueriableField = ({ queriable }) => queriable !== false;
|
|
847
849
|
var isCustomField = (field) => field.kind === "custom";
|
|
850
|
+
var isGenerateAsField = (field) => !!field.generateAs;
|
|
851
|
+
var isStoredInDatabase = (field) => field.generateAs?.type !== "expression";
|
|
848
852
|
var isVisible = ({ hidden }) => hidden !== true;
|
|
849
853
|
var isSimpleField = and(not(isRelation), not(isCustomField));
|
|
850
854
|
var isUpdatable = ({ updatable }) => !!updatable;
|
|
@@ -1068,12 +1072,12 @@ var generateDBModels = (models, dateLibrary) => {
|
|
|
1068
1072
|
for (const model of models.entities) {
|
|
1069
1073
|
const fields2 = model.relations.some((relation) => relation.field.foreignKey === "id") ? model.fields.filter((field) => field.name !== "id") : model.fields;
|
|
1070
1074
|
writer.write(`export type ${model.name} = `).inlineBlock(() => {
|
|
1071
|
-
for (const field of fields2.filter(not(isCustomField))) {
|
|
1075
|
+
for (const field of fields2.filter(not(isCustomField)).filter(isStoredInDatabase)) {
|
|
1072
1076
|
writer.write(`'${getColumnName(field)}': ${getFieldType(field, dateLibrary)}${field.nonNull ? "" : " | null"};`).newLine();
|
|
1073
1077
|
}
|
|
1074
1078
|
}).blankLine();
|
|
1075
1079
|
writer.write(`export type ${model.name}Initializer = `).inlineBlock(() => {
|
|
1076
|
-
for (const field of fields2.filter(not(isCustomField)).filter(isInTable)) {
|
|
1080
|
+
for (const field of fields2.filter(not(isCustomField)).filter(isInTable).filter(not(isGenerateAsField))) {
|
|
1077
1081
|
writer.write(
|
|
1078
1082
|
`'${getColumnName(field)}'${field.nonNull && field.defaultValue === void 0 ? "" : "?"}: ${getFieldType(
|
|
1079
1083
|
field,
|
|
@@ -1084,7 +1088,7 @@ var generateDBModels = (models, dateLibrary) => {
|
|
|
1084
1088
|
}
|
|
1085
1089
|
}).blankLine();
|
|
1086
1090
|
writer.write(`export type ${model.name}Mutator = `).inlineBlock(() => {
|
|
1087
|
-
for (const field of fields2.filter(not(isCustomField)).filter(isInTable)) {
|
|
1091
|
+
for (const field of fields2.filter(not(isCustomField)).filter(isInTable).filter(not(isGenerateAsField))) {
|
|
1088
1092
|
writer.write(
|
|
1089
1093
|
`'${getColumnName(field)}'?: ${getFieldType(field, dateLibrary, true)}${field.list ? " | string" : ""}${field.nonNull ? "" : " | null"};`
|
|
1090
1094
|
).newLine();
|
|
@@ -1092,7 +1096,7 @@ var generateDBModels = (models, dateLibrary) => {
|
|
|
1092
1096
|
}).blankLine();
|
|
1093
1097
|
if (!isRootModel(model)) {
|
|
1094
1098
|
writer.write(`export type ${model.name}Seed = `).inlineBlock(() => {
|
|
1095
|
-
for (const field of fields2.filter(not(isCustomField))) {
|
|
1099
|
+
for (const field of fields2.filter(not(isCustomField)).filter(not(isGenerateAsField))) {
|
|
1096
1100
|
if (model.parent && field.name === "type") {
|
|
1097
1101
|
continue;
|
|
1098
1102
|
}
|
|
@@ -1786,9 +1790,7 @@ var checkCanWrite = async (ctx, model, data, action) => {
|
|
|
1786
1790
|
}
|
|
1787
1791
|
const query = ctx.knex.first();
|
|
1788
1792
|
let linked = false;
|
|
1789
|
-
for (const field of model.fields.filter(
|
|
1790
|
-
(field2) => field2.generated || (action === "CREATE" ? field2.creatable : field2.updatable)
|
|
1791
|
-
)) {
|
|
1793
|
+
for (const field of model.fields.filter(not(isGenerateAsField)).filter((field2) => field2.generated || (action === "CREATE" ? field2.creatable : field2.updatable))) {
|
|
1792
1794
|
const fieldPermissions = field[action === "CREATE" ? "creatable" : "updatable"];
|
|
1793
1795
|
const role2 = getRole(ctx);
|
|
1794
1796
|
if (getColumnName(field) in data && fieldPermissions && typeof fieldPermissions === "object" && !fieldPermissions.roles?.includes(role2)) {
|
|
@@ -2300,7 +2302,7 @@ var createEntity = async (modelName, input2, ctx, trigger = "direct-call") => wi
|
|
|
2300
2302
|
if (model.parent) {
|
|
2301
2303
|
const rootInput = {};
|
|
2302
2304
|
const childInput = { id };
|
|
2303
|
-
for (const field of model.fields) {
|
|
2305
|
+
for (const field of model.fields.filter(not(isGenerateAsField))) {
|
|
2304
2306
|
const columnName = field.kind === "relation" ? `${field.name}Id` : field.name;
|
|
2305
2307
|
if (columnName in normalizedInput) {
|
|
2306
2308
|
if (field.inherited) {
|
|
@@ -2313,7 +2315,12 @@ var createEntity = async (modelName, input2, ctx, trigger = "direct-call") => wi
|
|
|
2313
2315
|
await ctx2.knex(model.parent).insert(rootInput);
|
|
2314
2316
|
await ctx2.knex(model.name).insert(childInput);
|
|
2315
2317
|
} else {
|
|
2316
|
-
|
|
2318
|
+
const insertData = { ...normalizedInput };
|
|
2319
|
+
for (const field of model.fields.filter(isGenerateAsField)) {
|
|
2320
|
+
const columnName = field.kind === "relation" ? `${field.name}Id` : field.name;
|
|
2321
|
+
delete insertData[columnName];
|
|
2322
|
+
}
|
|
2323
|
+
await ctx2.knex(model.name).insert(insertData);
|
|
2317
2324
|
}
|
|
2318
2325
|
await createRevision(model, normalizedInput, ctx2);
|
|
2319
2326
|
await ctx2.mutationHook?.({
|
|
@@ -2675,7 +2682,7 @@ var createRevision = async (model, data, ctx) => {
|
|
|
2675
2682
|
rootRevisionData.deleted = data.deleted || false;
|
|
2676
2683
|
}
|
|
2677
2684
|
const childRevisionData = { id: revisionId };
|
|
2678
|
-
for (const field of model.fields.filter(({ updatable }) => updatable)) {
|
|
2685
|
+
for (const field of model.fields.filter(({ updatable }) => updatable).filter(not(isGenerateAsField))) {
|
|
2679
2686
|
const col = field.kind === "relation" ? `${field.name}Id` : field.name;
|
|
2680
2687
|
let value2;
|
|
2681
2688
|
if (field.nonNull && (!(col in data) || col === void 0 || col === null)) {
|
|
@@ -2739,7 +2746,7 @@ var doUpdate = async (model, currentEntity, update, ctx) => {
|
|
|
2739
2746
|
if (model.parent) {
|
|
2740
2747
|
const rootInput = {};
|
|
2741
2748
|
const childInput = {};
|
|
2742
|
-
for (const field of model.fields) {
|
|
2749
|
+
for (const field of model.fields.filter(not(isGenerateAsField))) {
|
|
2743
2750
|
const columnName = field.kind === "relation" ? `${field.name}Id` : field.name;
|
|
2744
2751
|
if (columnName in update) {
|
|
2745
2752
|
if (field.inherited) {
|
|
@@ -2756,7 +2763,12 @@ var doUpdate = async (model, currentEntity, update, ctx) => {
|
|
|
2756
2763
|
await ctx.knex(model.name).where({ id: currentEntity.id }).update(childInput);
|
|
2757
2764
|
}
|
|
2758
2765
|
} else {
|
|
2759
|
-
|
|
2766
|
+
const updateData = { ...update };
|
|
2767
|
+
for (const field of model.fields.filter(isGenerateAsField)) {
|
|
2768
|
+
const columnName = field.kind === "relation" ? `${field.name}Id` : field.name;
|
|
2769
|
+
delete updateData[columnName];
|
|
2770
|
+
}
|
|
2771
|
+
await ctx.knex(model.name).where({ id: currentEntity.id }).update(updateData);
|
|
2760
2772
|
}
|
|
2761
2773
|
await createRevision(model, { ...currentEntity, ...update }, ctx);
|
|
2762
2774
|
};
|
|
@@ -3219,7 +3231,7 @@ var MigrationGenerator = class {
|
|
|
3219
3231
|
writer.writeLine(`deleteRootType: row.deleteRootType,`);
|
|
3220
3232
|
writer.writeLine(`deleteRootId: row.deleteRootId,`);
|
|
3221
3233
|
}
|
|
3222
|
-
for (const { name: name2, kind } of model.fields.filter(isUpdatableField).filter((
|
|
3234
|
+
for (const { name: name2, kind } of model.fields.filter(isUpdatableField).filter(not(isGenerateAsField))) {
|
|
3223
3235
|
const col = kind === "relation" ? `${name2}Id` : name2;
|
|
3224
3236
|
writer.writeLine(`${col}: row.${col},`);
|
|
3225
3237
|
}
|
|
@@ -3239,8 +3251,8 @@ var MigrationGenerator = class {
|
|
|
3239
3251
|
up,
|
|
3240
3252
|
down
|
|
3241
3253
|
);
|
|
3242
|
-
const missingRevisionFields = model.fields.filter(isUpdatableField).filter(
|
|
3243
|
-
({ name: name2, ...field }) => field.kind !== "custom" && !
|
|
3254
|
+
const missingRevisionFields = model.fields.filter(isUpdatableField).filter(not(isGenerateAsField)).filter(
|
|
3255
|
+
({ name: name2, ...field }) => field.kind !== "custom" && !this.getColumn(revisionTable, field.kind === "relation" ? field.foreignKey || `${name2}Id` : name2)
|
|
3244
3256
|
);
|
|
3245
3257
|
this.createRevisionFields(model, missingRevisionFields, up, down);
|
|
3246
3258
|
const revisionFieldsToRemove = model.fields.filter(
|
|
@@ -3398,7 +3410,7 @@ var MigrationGenerator = class {
|
|
|
3398
3410
|
});
|
|
3399
3411
|
});
|
|
3400
3412
|
if (isUpdatableModel(model)) {
|
|
3401
|
-
const updatableFields = fields2.filter(isUpdatableField).filter((
|
|
3413
|
+
const updatableFields = fields2.filter(isUpdatableField).filter(not(isGenerateAsField));
|
|
3402
3414
|
if (!updatableFields.length) {
|
|
3403
3415
|
return;
|
|
3404
3416
|
}
|
|
@@ -3446,7 +3458,7 @@ var MigrationGenerator = class {
|
|
|
3446
3458
|
});
|
|
3447
3459
|
});
|
|
3448
3460
|
if (isUpdatableModel(model)) {
|
|
3449
|
-
const updatableFields = fields2.filter(isUpdatableField).filter((
|
|
3461
|
+
const updatableFields = fields2.filter(isUpdatableField).filter(not(isGenerateAsField));
|
|
3450
3462
|
if (!updatableFields.length) {
|
|
3451
3463
|
return;
|
|
3452
3464
|
}
|
|
@@ -3484,7 +3496,7 @@ var MigrationGenerator = class {
|
|
|
3484
3496
|
writer.writeLine(`table.uuid('deleteRootId');`);
|
|
3485
3497
|
}
|
|
3486
3498
|
}
|
|
3487
|
-
for (const field of model.fields.filter(and(isUpdatableField, not(isInherited))).filter((
|
|
3499
|
+
for (const field of model.fields.filter(and(isUpdatableField, not(isInherited))).filter(not(isGenerateAsField))) {
|
|
3488
3500
|
this.column(field, { setUnique: false, setDefault: false });
|
|
3489
3501
|
}
|
|
3490
3502
|
});
|
|
@@ -4352,7 +4364,7 @@ var generateDefinitions = ({
|
|
|
4352
4364
|
types.push(
|
|
4353
4365
|
input(
|
|
4354
4366
|
`Create${model.name}`,
|
|
4355
|
-
model.fields.filter(({ creatable }) => creatable).map(
|
|
4367
|
+
model.fields.filter(({ creatable }) => creatable).filter(not(isGenerateAsField)).map(
|
|
4356
4368
|
(field) => field.kind === "relation" ? { name: `${field.name}Id`, type: "ID", nonNull: field.nonNull } : {
|
|
4357
4369
|
name: field.name,
|
|
4358
4370
|
type: field.kind === "json" ? `Create${field.type}` : field.type,
|
|
@@ -4367,7 +4379,7 @@ var generateDefinitions = ({
|
|
|
4367
4379
|
types.push(
|
|
4368
4380
|
input(
|
|
4369
4381
|
`Update${model.name}`,
|
|
4370
|
-
model.fields.filter(({ updatable }) => updatable).map(
|
|
4382
|
+
model.fields.filter(({ updatable }) => updatable).filter(not(isGenerateAsField)).map(
|
|
4371
4383
|
(field) => field.kind === "relation" ? { name: `${field.name}Id`, type: "ID" } : {
|
|
4372
4384
|
name: field.name,
|
|
4373
4385
|
type: field.kind === "json" ? `Update${field.type}` : field.type,
|
|
@@ -4624,6 +4636,7 @@ var printSchemaFromModels = (models) => printSchema((0, import_graphql6.buildAST
|
|
|
4624
4636
|
isEnumModel,
|
|
4625
4637
|
isFieldNode,
|
|
4626
4638
|
isFragmentSpreadNode,
|
|
4639
|
+
isGenerateAsField,
|
|
4627
4640
|
isInTable,
|
|
4628
4641
|
isInherited,
|
|
4629
4642
|
isInlineFragmentNode,
|
|
@@ -4640,6 +4653,7 @@ var printSchemaFromModels = (models) => printSchema((0, import_graphql6.buildAST
|
|
|
4640
4653
|
isRootModel,
|
|
4641
4654
|
isScalarModel,
|
|
4642
4655
|
isSimpleField,
|
|
4656
|
+
isStoredInDatabase,
|
|
4643
4657
|
isToOneRelation,
|
|
4644
4658
|
isUpdatable,
|
|
4645
4659
|
isUpdatableBy,
|
package/dist/esm/db/generate.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import CodeBlockWriter from 'code-block-writer';
|
|
2
|
-
import { get, getColumnName, isCustomField, isInTable, isRootModel, not } from '..';
|
|
2
|
+
import { get, getColumnName, isCustomField, isGenerateAsField, isInTable, isRootModel, isStoredInDatabase, not, } from '..';
|
|
3
3
|
import { DATE_CLASS, DATE_CLASS_IMPORT } from '../utils/dates';
|
|
4
4
|
export const PRIMITIVE_TYPES = {
|
|
5
5
|
ID: 'string',
|
|
@@ -49,7 +49,7 @@ export const generateDBModels = (models, dateLibrary) => {
|
|
|
49
49
|
writer
|
|
50
50
|
.write(`export type ${model.name} = `)
|
|
51
51
|
.inlineBlock(() => {
|
|
52
|
-
for (const field of fields.filter(not(isCustomField))) {
|
|
52
|
+
for (const field of fields.filter(not(isCustomField)).filter(isStoredInDatabase)) {
|
|
53
53
|
writer
|
|
54
54
|
.write(`'${getColumnName(field)}': ${getFieldType(field, dateLibrary)}${field.nonNull ? '' : ' | null'};`)
|
|
55
55
|
.newLine();
|
|
@@ -59,7 +59,7 @@ export const generateDBModels = (models, dateLibrary) => {
|
|
|
59
59
|
writer
|
|
60
60
|
.write(`export type ${model.name}Initializer = `)
|
|
61
61
|
.inlineBlock(() => {
|
|
62
|
-
for (const field of fields.filter(not(isCustomField)).filter(isInTable)) {
|
|
62
|
+
for (const field of fields.filter(not(isCustomField)).filter(isInTable).filter(not(isGenerateAsField))) {
|
|
63
63
|
writer
|
|
64
64
|
.write(`'${getColumnName(field)}'${field.nonNull && field.defaultValue === undefined ? '' : '?'}: ${getFieldType(field, dateLibrary, true)}${field.list ? ' | string' : ''}${field.nonNull ? '' : ' | null'};`)
|
|
65
65
|
.newLine();
|
|
@@ -69,7 +69,7 @@ export const generateDBModels = (models, dateLibrary) => {
|
|
|
69
69
|
writer
|
|
70
70
|
.write(`export type ${model.name}Mutator = `)
|
|
71
71
|
.inlineBlock(() => {
|
|
72
|
-
for (const field of fields.filter(not(isCustomField)).filter(isInTable)) {
|
|
72
|
+
for (const field of fields.filter(not(isCustomField)).filter(isInTable).filter(not(isGenerateAsField))) {
|
|
73
73
|
writer
|
|
74
74
|
.write(`'${getColumnName(field)}'?: ${getFieldType(field, dateLibrary, true)}${field.list ? ' | string' : ''}${field.nonNull ? '' : ' | null'};`)
|
|
75
75
|
.newLine();
|
|
@@ -80,7 +80,7 @@ export const generateDBModels = (models, dateLibrary) => {
|
|
|
80
80
|
writer
|
|
81
81
|
.write(`export type ${model.name}Seed = `)
|
|
82
82
|
.inlineBlock(() => {
|
|
83
|
-
for (const field of fields.filter(not(isCustomField))) {
|
|
83
|
+
for (const field of fields.filter(not(isCustomField)).filter(not(isGenerateAsField))) {
|
|
84
84
|
if (model.parent && field.name === 'type') {
|
|
85
85
|
continue;
|
|
86
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/db/generate.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/db/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import CodeBlockWriter from 'code-block-writer';
|
|
2
2
|
import { SchemaInspector } from 'knex-schema-inspector';
|
|
3
3
|
import lowerFirst from 'lodash/lowerFirst';
|
|
4
|
-
import { and, get, isCreatableModel, isInherited, isUpdatableField, isUpdatableModel, modelNeedsTable, not, summonByName, typeToField, validateCheckConstraint, } from '../models/utils';
|
|
4
|
+
import { and, get, isCreatableModel, isGenerateAsField, isInherited, isUpdatableField, isUpdatableModel, modelNeedsTable, not, summonByName, typeToField, validateCheckConstraint, } from '../models/utils';
|
|
5
5
|
import { getColumnName } from '../resolvers';
|
|
6
6
|
import { getDatabaseFunctions, normalizeAggregateDefinition, normalizeFunctionBody, } from './update-functions';
|
|
7
7
|
export class MigrationGenerator {
|
|
@@ -230,7 +230,7 @@ export class MigrationGenerator {
|
|
|
230
230
|
}
|
|
231
231
|
for (const { name, kind } of model.fields
|
|
232
232
|
.filter(isUpdatableField)
|
|
233
|
-
.filter((
|
|
233
|
+
.filter(not(isGenerateAsField))) {
|
|
234
234
|
const col = kind === 'relation' ? `${name}Id` : name;
|
|
235
235
|
writer.writeLine(`${col}: row.${col},`);
|
|
236
236
|
}
|
|
@@ -254,8 +254,8 @@ export class MigrationGenerator {
|
|
|
254
254
|
.filter(({ oldName }) => oldName), up, down);
|
|
255
255
|
const missingRevisionFields = model.fields
|
|
256
256
|
.filter(isUpdatableField)
|
|
257
|
+
.filter(not(isGenerateAsField))
|
|
257
258
|
.filter(({ name, ...field }) => field.kind !== 'custom' &&
|
|
258
|
-
!(field.generateAs?.type === 'expression') &&
|
|
259
259
|
!this.getColumn(revisionTable, field.kind === 'relation' ? field.foreignKey || `${name}Id` : name));
|
|
260
260
|
this.createRevisionFields(model, missingRevisionFields, up, down);
|
|
261
261
|
const revisionFieldsToRemove = model.fields.filter(({ name, updatable, generated, ...field }) => !generated &&
|
|
@@ -407,7 +407,7 @@ export class MigrationGenerator {
|
|
|
407
407
|
});
|
|
408
408
|
});
|
|
409
409
|
if (isUpdatableModel(model)) {
|
|
410
|
-
const updatableFields = fields.filter(isUpdatableField).filter((
|
|
410
|
+
const updatableFields = fields.filter(isUpdatableField).filter(not(isGenerateAsField));
|
|
411
411
|
if (!updatableFields.length) {
|
|
412
412
|
return;
|
|
413
413
|
}
|
|
@@ -446,7 +446,7 @@ export class MigrationGenerator {
|
|
|
446
446
|
});
|
|
447
447
|
});
|
|
448
448
|
if (isUpdatableModel(model)) {
|
|
449
|
-
const updatableFields = fields.filter(isUpdatableField).filter((
|
|
449
|
+
const updatableFields = fields.filter(isUpdatableField).filter(not(isGenerateAsField));
|
|
450
450
|
if (!updatableFields.length) {
|
|
451
451
|
return;
|
|
452
452
|
}
|
|
@@ -481,9 +481,7 @@ export class MigrationGenerator {
|
|
|
481
481
|
writer.writeLine(`table.uuid('deleteRootId');`);
|
|
482
482
|
}
|
|
483
483
|
}
|
|
484
|
-
for (const field of model.fields
|
|
485
|
-
.filter(and(isUpdatableField, not(isInherited)))
|
|
486
|
-
.filter((f) => !(f.generateAs?.type === 'expression'))) {
|
|
484
|
+
for (const field of model.fields.filter(and(isUpdatableField, not(isInherited))).filter(not(isGenerateAsField))) {
|
|
487
485
|
this.column(field, { setUnique: false, setDefault: false });
|
|
488
486
|
}
|
|
489
487
|
});
|