@smartive/graphql-magic 19.1.3-next.2 → 19.2.0-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 CHANGED
@@ -1,6 +1,6 @@
1
- ## [19.1.3-next.2](https://github.com/smartive/graphql-magic/compare/v19.1.3-next.1...v19.1.3-next.2) (2025-06-11)
1
+ # [19.2.0-next.1](https://github.com/smartive/graphql-magic/compare/v19.1.3-next.2...v19.2.0-next.1) (2025-06-18)
2
2
 
3
3
 
4
- ### Bug Fixes
4
+ ### Features
5
5
 
6
- * Heuristics ([2193bf7](https://github.com/smartive/graphql-magic/commit/2193bf7eb53d5d24babc60c98b26f843e28d27b8))
6
+ * mutation helpers ([3183ea6](https://github.com/smartive/graphql-magic/commit/3183ea6365f3bbf0e3d2dafe92f958e1ad8483d3))
@@ -67,7 +67,10 @@ __export(index_exports, {
67
67
  args: () => args,
68
68
  as: () => as,
69
69
  checkCanWrite: () => checkCanWrite,
70
+ createEntity: () => createEntity,
70
71
  createRevision: () => createRevision,
72
+ deleteEntities: () => deleteEntities,
73
+ deleteEntity: () => deleteEntity,
71
74
  directive: () => directive,
72
75
  directives: () => directives,
73
76
  displayField: () => displayField,
@@ -182,6 +185,8 @@ __export(index_exports, {
182
185
  summonByKey: () => summonByKey,
183
186
  summonByName: () => summonByName,
184
187
  typeToField: () => typeToField,
188
+ updateEntities: () => updateEntities,
189
+ updateEntity: () => updateEntity,
185
190
  value: () => value
186
191
  });
187
192
  module.exports = __toCommonJS(index_exports);
@@ -2665,22 +2670,37 @@ var mutationResolver = async (_parent, args2, partialCtx, info) => {
2665
2670
  const ctx = { ...partialCtx, knex, info, aliases: new AliasGenerator() };
2666
2671
  const model = ctx.models.getModel(modelName, "entity");
2667
2672
  switch (mutation) {
2668
- case "create":
2669
- return await create(model, args2, ctx);
2670
- case "update":
2671
- return await update(model, args2, ctx);
2672
- case "delete":
2673
- return await del(model, args2, ctx);
2673
+ case "create": {
2674
+ const id = await createEntity(model, args2.data, ctx);
2675
+ return await resolve(ctx, id);
2676
+ }
2677
+ case "update": {
2678
+ const id = args2.where.id;
2679
+ await updateEntity(model, id, args2.data, ctx);
2680
+ return await resolve(ctx, id);
2681
+ }
2682
+ case "delete": {
2683
+ const id = args2.where.id;
2684
+ await deleteEntity(model, id, args2.dryRun, model.rootModel.name, id, ctx);
2685
+ return await resolve(ctx, id);
2686
+ }
2674
2687
  case "restore":
2675
- return await restore(model, args2, ctx);
2688
+ return await restoreEntity(model, args2.where.id, ctx);
2676
2689
  }
2677
2690
  });
2678
2691
  };
2679
- var create = async (model, { data: input2 }, ctx) => {
2692
+ var createEntity = async (model, input2, ctx) => {
2680
2693
  const normalizedInput = { ...input2 };
2681
- normalizedInput.id = (0, import_uuid.v4)();
2682
- normalizedInput.createdAt = ctx.now;
2683
- normalizedInput.createdById = ctx.user?.id;
2694
+ if (!normalizedInput.id) {
2695
+ normalizedInput.id = (0, import_uuid.v4)();
2696
+ }
2697
+ const id = normalizedInput.id;
2698
+ if (!normalizedInput.createdAt) {
2699
+ normalizedInput.createdAt = ctx.now;
2700
+ }
2701
+ if (!normalizedInput.createdById) {
2702
+ normalizedInput.createdById = ctx.user?.id;
2703
+ }
2684
2704
  if (model.parent) {
2685
2705
  normalizedInput.type = model.name;
2686
2706
  }
@@ -2689,35 +2709,39 @@ var create = async (model, { data: input2 }, ctx) => {
2689
2709
  await ctx.handleUploads?.(normalizedInput);
2690
2710
  const data = { prev: {}, input: input2, normalizedInput, next: normalizedInput };
2691
2711
  await ctx.mutationHook?.({ model, action: "create", trigger: "mutation", when: "before", data, ctx });
2712
+ await createEntity(model, normalizedInput, ctx);
2692
2713
  if (model.parent) {
2693
2714
  const rootInput = {};
2694
- const childInput = { id: normalizedInput.id };
2715
+ const childInput = { id };
2695
2716
  for (const field of model.fields) {
2696
2717
  const columnName = field.kind === "relation" ? `${field.name}Id` : field.name;
2697
- if (columnName in normalizedInput) {
2718
+ if (columnName in data) {
2698
2719
  if (field.inherited) {
2699
- rootInput[columnName] = normalizedInput[columnName];
2720
+ rootInput[columnName] = data[columnName];
2700
2721
  } else {
2701
- childInput[columnName] = normalizedInput[columnName];
2722
+ childInput[columnName] = data[columnName];
2702
2723
  }
2703
2724
  }
2704
2725
  }
2705
2726
  await ctx.knex(model.parent).insert(rootInput);
2706
2727
  await ctx.knex(model.name).insert(childInput);
2707
2728
  } else {
2708
- await ctx.knex(model.name).insert(normalizedInput);
2729
+ await ctx.knex(model.name).insert(data);
2709
2730
  }
2710
- await createRevision(model, normalizedInput, ctx);
2731
+ await createRevision(model, data, ctx);
2711
2732
  await ctx.mutationHook?.({ model, action: "create", trigger: "mutation", when: "after", data, ctx });
2712
- return await resolve(ctx, normalizedInput.id);
2733
+ return normalizedInput.id;
2713
2734
  };
2714
- var update = async (model, { where, data: input2 }, ctx) => {
2715
- if (Object.keys(where).length === 0) {
2716
- throw new Error(`No ${model.name} specified.`);
2735
+ var updateEntities = async (model, where, updateFields, ctx) => {
2736
+ const entities = await ctx.knex(model.name).where(where).select("id");
2737
+ for (const entity of entities) {
2738
+ await updateEntity(model, entity.id, updateFields, ctx);
2717
2739
  }
2740
+ };
2741
+ var updateEntity = async (model, id, input2, ctx) => {
2718
2742
  const normalizedInput = { ...input2 };
2719
2743
  sanitize(ctx, model, normalizedInput);
2720
- const prev = await getEntityToMutate(ctx, model, where, "UPDATE");
2744
+ const prev = await getEntityToMutate(ctx, model, { id }, "UPDATE");
2721
2745
  for (const key of Object.keys(normalizedInput)) {
2722
2746
  if (normalizedInput[key] === prev[key]) {
2723
2747
  delete normalizedInput[key];
@@ -2729,39 +2753,19 @@ var update = async (model, { where, data: input2 }, ctx) => {
2729
2753
  const next = { ...prev, ...normalizedInput };
2730
2754
  const data = { prev, input: input2, normalizedInput, next };
2731
2755
  await ctx.mutationHook?.({ model, action: "update", trigger: "mutation", when: "before", data, ctx });
2732
- if (model.parent) {
2733
- const rootInput = {};
2734
- const childInput = {};
2735
- for (const field of model.fields) {
2736
- const columnName = field.kind === "relation" ? `${field.name}Id` : field.name;
2737
- if (columnName in normalizedInput) {
2738
- if (field.inherited) {
2739
- rootInput[columnName] = normalizedInput[columnName];
2740
- } else {
2741
- childInput[columnName] = normalizedInput[columnName];
2742
- }
2743
- }
2744
- }
2745
- if (Object.keys(rootInput).length) {
2746
- await ctx.knex(model.parent).where({ id: prev.id }).update(rootInput);
2747
- }
2748
- if (Object.keys(childInput).length) {
2749
- await ctx.knex(model.name).where({ id: prev.id }).update(childInput);
2750
- }
2751
- } else {
2752
- await ctx.knex(model.name).where({ id: prev.id }).update(normalizedInput);
2753
- }
2754
- await createRevision(model, next, ctx);
2756
+ await doUpdate(model, normalizedInput, next, ctx);
2755
2757
  await ctx.mutationHook?.({ model, action: "update", trigger: "mutation", when: "after", data, ctx });
2756
2758
  }
2757
- return await resolve(ctx);
2758
2759
  };
2759
- var del = async (model, { where, dryRun }, ctx) => {
2760
- if (Object.keys(where).length === 0) {
2761
- throw new Error(`No ${model.name} specified.`);
2760
+ var deleteEntities = async (model, where, deleteRootType, deleteRootId, ctx) => {
2761
+ const entities = await ctx.knex(model.name).where(where).select("id");
2762
+ for (const entity of entities) {
2763
+ await deleteEntity(model, entity.id, false, deleteRootType, deleteRootId, ctx);
2762
2764
  }
2765
+ };
2766
+ var deleteEntity = async (model, id, dryRun, deleteRootType, deleteRootId, ctx) => {
2763
2767
  const rootModel = model.rootModel;
2764
- const entity = await getEntityToMutate(ctx, rootModel, where, "DELETE");
2768
+ const entity = await getEntityToMutate(ctx, rootModel, { id }, "DELETE");
2765
2769
  if (entity.deleted) {
2766
2770
  throw new ForbiddenError(`${getTechnicalDisplay(model, entity)} is already deleted.`);
2767
2771
  }
@@ -2786,8 +2790,8 @@ var del = async (model, { where, dryRun }, ctx) => {
2786
2790
  deleted: true,
2787
2791
  deletedAt: ctx.now,
2788
2792
  deletedById: ctx.user?.id,
2789
- deleteRootType: rootModel.name,
2790
- deleteRootId: entity.id
2793
+ deleteRootType,
2794
+ deleteRootId
2791
2795
  };
2792
2796
  const next = { ...currentEntity, ...normalizedInput };
2793
2797
  const data = { prev: currentEntity, input: {}, normalizedInput, next };
@@ -2804,8 +2808,7 @@ var del = async (model, { where, dryRun }, ctx) => {
2804
2808
  });
2805
2809
  }
2806
2810
  mutations.push(async () => {
2807
- await ctx.knex(currentModel.name).where({ id: currentEntity.id }).update(normalizedInput);
2808
- await createRevision(currentModel, next, ctx);
2811
+ await doUpdate(currentModel, normalizedInput, next, ctx);
2809
2812
  });
2810
2813
  if (mutationHook) {
2811
2814
  afterHooks.push(async () => {
@@ -2858,8 +2861,7 @@ var del = async (model, { where, dryRun }, ctx) => {
2858
2861
  });
2859
2862
  }
2860
2863
  mutations.push(async () => {
2861
- await ctx.knex(descendantModel.name).where({ id: descendant.id }).update(normalizedInput);
2862
- await createRevision(descendantModel, next, ctx);
2864
+ await doUpdate(descendantModel, normalizedInput, next, ctx);
2863
2865
  });
2864
2866
  if (mutationHook) {
2865
2867
  afterHooks.push(async () => {
@@ -2936,12 +2938,9 @@ var del = async (model, { where, dryRun }, ctx) => {
2936
2938
  }
2937
2939
  return entity.id;
2938
2940
  };
2939
- var restore = async (model, { where }, ctx) => {
2940
- if (Object.keys(where).length === 0) {
2941
- throw new Error(`No ${model.name} specified.`);
2942
- }
2941
+ var restoreEntity = async (model, id, ctx) => {
2943
2942
  const rootModel = model.rootModel;
2944
- const entity = await getEntityToMutate(ctx, rootModel, where, "RESTORE");
2943
+ const entity = await getEntityToMutate(ctx, rootModel, { id }, "RESTORE");
2945
2944
  if (!entity.deleted) {
2946
2945
  throw new ForbiddenError(`${getTechnicalDisplay(model, entity)} is not deleted.`);
2947
2946
  }
@@ -2958,7 +2957,7 @@ var restore = async (model, { where }, ctx) => {
2958
2957
  const afterHooks = [];
2959
2958
  const restoreCascade = async (currentModel, currentEntity) => {
2960
2959
  if (entity.deleteRootId) {
2961
- if (!(currentEntity.deleteRootType === currentModel.name && currentEntity.deleteRootId === entity.id)) {
2960
+ if (!(currentEntity.deleteRootType === model.name && currentEntity.deleteRootId === entity.id)) {
2962
2961
  return;
2963
2962
  }
2964
2963
  } else if (!anyDateToLuxon(currentEntity.deletedAt, ctx.timeZone).equals(anyDateToLuxon(entity.deletedAt, ctx.timeZone))) {
@@ -2969,7 +2968,7 @@ var restore = async (model, { where }, ctx) => {
2969
2968
  }
2970
2969
  toRestore[currentModel.name].add(currentEntity.id);
2971
2970
  for (const relation of currentModel.relations) {
2972
- const parentId = entity[relation.field.foreignKey];
2971
+ const parentId = currentEntity[relation.field.foreignKey];
2973
2972
  if (!parentId) {
2974
2973
  continue;
2975
2974
  }
@@ -2997,8 +2996,7 @@ var restore = async (model, { where }, ctx) => {
2997
2996
  });
2998
2997
  }
2999
2998
  mutations.push(async () => {
3000
- await ctx.knex(currentModel.name).where({ id: currentEntity.id }).update(normalizedInput);
3001
- await createRevision(currentModel, { ...currentEntity, deleted: false }, ctx);
2999
+ await doUpdate(currentModel, normalizedInput, data.next, ctx);
3002
3000
  });
3003
3001
  if (ctx.mutationHook) {
3004
3002
  afterHooks.push(async () => {
@@ -3030,7 +3028,7 @@ var restore = async (model, { where }, ctx) => {
3030
3028
  for (const callback of [...beforeHooks, ...mutations, ...afterHooks]) {
3031
3029
  await callback();
3032
3030
  }
3033
- return entity.id;
3031
+ return id;
3034
3032
  };
3035
3033
  var createRevision = async (model, data, ctx) => {
3036
3034
  if (model.updatable) {
@@ -3069,8 +3067,12 @@ var createRevision = async (model, data, ctx) => {
3069
3067
  };
3070
3068
  var sanitize = (ctx, model, data) => {
3071
3069
  if (model.updatable) {
3072
- data.updatedAt = ctx.now;
3073
- data.updatedById = ctx.user?.id;
3070
+ if (!data.updatedAt) {
3071
+ data.updatedAt = ctx.now;
3072
+ }
3073
+ if (!data.updatedById) {
3074
+ data.updatedById = ctx.user?.id;
3075
+ }
3074
3076
  }
3075
3077
  for (const key of Object.keys(data)) {
3076
3078
  const field = model.fields.find(({ name: name2 }) => name2 === key);
@@ -3093,6 +3095,39 @@ var sanitize = (ctx, model, data) => {
3093
3095
  };
3094
3096
  var isEndOfDay = (field) => isPrimitive(field) && field.type === "DateTime" && field?.endOfDay === true && field?.dateTimeType === "date";
3095
3097
  var isEndOfMonth = (field) => isPrimitive(field) && field.type === "DateTime" && field?.endOfMonth === true && field?.dateTimeType === "year_and_month";
3098
+ var doUpdate = async (model, updateFields, allFields, ctx) => {
3099
+ if (model.updatable) {
3100
+ if (!updateFields.updatedAt) {
3101
+ updateFields.updatedAt = ctx.now;
3102
+ }
3103
+ if (!updateFields.updatedById) {
3104
+ updateFields.updatedById = ctx.user?.id;
3105
+ }
3106
+ }
3107
+ if (model.parent) {
3108
+ const rootInput = {};
3109
+ const childInput = {};
3110
+ for (const field of model.fields) {
3111
+ const columnName = field.kind === "relation" ? `${field.name}Id` : field.name;
3112
+ if (columnName in updateFields) {
3113
+ if (field.inherited) {
3114
+ rootInput[columnName] = updateFields[columnName];
3115
+ } else {
3116
+ childInput[columnName] = updateFields[columnName];
3117
+ }
3118
+ }
3119
+ }
3120
+ if (Object.keys(rootInput).length) {
3121
+ await ctx.knex(model.parent).where({ id: allFields.id }).update(rootInput);
3122
+ }
3123
+ if (Object.keys(childInput).length) {
3124
+ await ctx.knex(model.name).where({ id: allFields.id }).update(childInput);
3125
+ }
3126
+ } else {
3127
+ await ctx.knex(model.name).where({ id: allFields.id }).update(updateFields);
3128
+ }
3129
+ await createRevision(model, allFields, ctx);
3130
+ };
3096
3131
 
3097
3132
  // src/resolvers/resolvers.ts
3098
3133
  var getResolvers = (models) => {
@@ -3587,7 +3622,10 @@ var printSchemaFromModels = (models) => printSchema((0, import_graphql6.buildAST
3587
3622
  args,
3588
3623
  as,
3589
3624
  checkCanWrite,
3625
+ createEntity,
3590
3626
  createRevision,
3627
+ deleteEntities,
3628
+ deleteEntity,
3591
3629
  directive,
3592
3630
  directives,
3593
3631
  displayField,
@@ -3702,5 +3740,7 @@ var printSchemaFromModels = (models) => printSchema((0, import_graphql6.buildAST
3702
3740
  summonByKey,
3703
3741
  summonByName,
3704
3742
  typeToField,
3743
+ updateEntities,
3744
+ updateEntity,
3705
3745
  value
3706
3746
  });
@@ -2,6 +2,7 @@ import { AnyDateType, Context } from '..';
2
2
  import { EntityModel } from './models';
3
3
  export type Entity = Record<string, unknown>;
4
4
  export type Action = 'create' | 'update' | 'delete' | 'restore';
5
+ export type MutationContext<DateType extends AnyDateType = AnyDateType> = Pick<Context<DateType>, 'knex' | 'now' | 'user' | 'timeZone' | 'mutationHook' | 'handleUploads' | 'models' | 'permissions'>;
5
6
  export type MutationHook<DateType extends AnyDateType = AnyDateType> = (args: {
6
7
  model: EntityModel;
7
8
  action: Action;
@@ -13,5 +14,5 @@ export type MutationHook<DateType extends AnyDateType = AnyDateType> = (args: {
13
14
  normalizedInput: Entity;
14
15
  next: Entity;
15
16
  };
16
- ctx: Context<DateType>;
17
+ ctx: MutationContext<DateType>;
17
18
  }) => Promise<void> | void;
@@ -1,6 +1,11 @@
1
1
  import { GraphQLResolveInfo } from 'graphql';
2
2
  import { Context } from '../context';
3
3
  import { EntityModel } from '../models/models';
4
- import { Entity } from '../models/mutation-hook';
5
- export declare const mutationResolver: (_parent: any, args: any, partialCtx: Context, info: GraphQLResolveInfo) => Promise<any>;
6
- export declare const createRevision: (model: EntityModel, data: Entity, ctx: Pick<Context, "knex" | "now" | "user">) => Promise<void>;
4
+ import { Entity, MutationContext } from '../models/mutation-hook';
5
+ export declare const mutationResolver: (_parent: any, args: any, partialCtx: Context, info: GraphQLResolveInfo) => Promise<string | import("./utils").Entry | import("./utils").Entry[] | undefined>;
6
+ export declare const createEntity: (model: EntityModel, input: Entity, ctx: MutationContext) => Promise<string>;
7
+ export declare const updateEntities: (model: EntityModel, where: Record<string, unknown>, updateFields: Entity, ctx: MutationContext) => Promise<void>;
8
+ export declare const updateEntity: (model: EntityModel, id: string, input: Entity, ctx: MutationContext) => Promise<void>;
9
+ export declare const deleteEntities: (model: EntityModel, where: Record<string, unknown>, deleteRootType: string, deleteRootId: string, ctx: MutationContext) => Promise<void>;
10
+ export declare const deleteEntity: (model: EntityModel, id: string, dryRun: boolean, deleteRootType: string, deleteRootId: string, ctx: MutationContext) => Promise<any>;
11
+ export declare const createRevision: (model: EntityModel, data: Entity, ctx: MutationContext) => Promise<void>;
@@ -11,22 +11,37 @@ export const mutationResolver = async (_parent, args, partialCtx, info) => {
11
11
  const ctx = { ...partialCtx, knex, info, aliases: new AliasGenerator() };
12
12
  const model = ctx.models.getModel(modelName, 'entity');
13
13
  switch (mutation) {
14
- case 'create':
15
- return await create(model, args, ctx);
16
- case 'update':
17
- return await update(model, args, ctx);
18
- case 'delete':
19
- return await del(model, args, ctx);
14
+ case 'create': {
15
+ const id = await createEntity(model, args.data, ctx);
16
+ return await resolve(ctx, id);
17
+ }
18
+ case 'update': {
19
+ const id = args.where.id;
20
+ await updateEntity(model, id, args.data, ctx);
21
+ return await resolve(ctx, id);
22
+ }
23
+ case 'delete': {
24
+ const id = args.where.id;
25
+ await deleteEntity(model, id, args.dryRun, model.rootModel.name, id, ctx);
26
+ return await resolve(ctx, id);
27
+ }
20
28
  case 'restore':
21
- return await restore(model, args, ctx);
29
+ return await restoreEntity(model, args.where.id, ctx);
22
30
  }
23
31
  });
24
32
  };
25
- const create = async (model, { data: input }, ctx) => {
33
+ export const createEntity = async (model, input, ctx) => {
26
34
  const normalizedInput = { ...input };
27
- normalizedInput.id = uuid();
28
- normalizedInput.createdAt = ctx.now;
29
- normalizedInput.createdById = ctx.user?.id;
35
+ if (!normalizedInput.id) {
36
+ normalizedInput.id = uuid();
37
+ }
38
+ const id = normalizedInput.id;
39
+ if (!normalizedInput.createdAt) {
40
+ normalizedInput.createdAt = ctx.now;
41
+ }
42
+ if (!normalizedInput.createdById) {
43
+ normalizedInput.createdById = ctx.user?.id;
44
+ }
30
45
  if (model.parent) {
31
46
  normalizedInput.type = model.name;
32
47
  }
@@ -35,17 +50,18 @@ const create = async (model, { data: input }, ctx) => {
35
50
  await ctx.handleUploads?.(normalizedInput);
36
51
  const data = { prev: {}, input, normalizedInput, next: normalizedInput };
37
52
  await ctx.mutationHook?.({ model, action: 'create', trigger: 'mutation', when: 'before', data, ctx });
53
+ await createEntity(model, normalizedInput, ctx);
38
54
  if (model.parent) {
39
55
  const rootInput = {};
40
- const childInput = { id: normalizedInput.id };
56
+ const childInput = { id };
41
57
  for (const field of model.fields) {
42
58
  const columnName = field.kind === 'relation' ? `${field.name}Id` : field.name;
43
- if (columnName in normalizedInput) {
59
+ if (columnName in data) {
44
60
  if (field.inherited) {
45
- rootInput[columnName] = normalizedInput[columnName];
61
+ rootInput[columnName] = data[columnName];
46
62
  }
47
63
  else {
48
- childInput[columnName] = normalizedInput[columnName];
64
+ childInput[columnName] = data[columnName];
49
65
  }
50
66
  }
51
67
  }
@@ -53,19 +69,22 @@ const create = async (model, { data: input }, ctx) => {
53
69
  await ctx.knex(model.name).insert(childInput);
54
70
  }
55
71
  else {
56
- await ctx.knex(model.name).insert(normalizedInput);
72
+ await ctx.knex(model.name).insert(data);
57
73
  }
58
- await createRevision(model, normalizedInput, ctx);
74
+ await createRevision(model, data, ctx);
59
75
  await ctx.mutationHook?.({ model, action: 'create', trigger: 'mutation', when: 'after', data, ctx });
60
- return await resolve(ctx, normalizedInput.id);
76
+ return normalizedInput.id;
61
77
  };
62
- const update = async (model, { where, data: input }, ctx) => {
63
- if (Object.keys(where).length === 0) {
64
- throw new Error(`No ${model.name} specified.`);
78
+ export const updateEntities = async (model, where, updateFields, ctx) => {
79
+ const entities = await ctx.knex(model.name).where(where).select('id');
80
+ for (const entity of entities) {
81
+ await updateEntity(model, entity.id, updateFields, ctx);
65
82
  }
83
+ };
84
+ export const updateEntity = async (model, id, input, ctx) => {
66
85
  const normalizedInput = { ...input };
67
86
  sanitize(ctx, model, normalizedInput);
68
- const prev = await getEntityToMutate(ctx, model, where, 'UPDATE');
87
+ const prev = await getEntityToMutate(ctx, model, { id }, 'UPDATE');
69
88
  // Remove data that wouldn't mutate given that it's irrelevant for permissions
70
89
  for (const key of Object.keys(normalizedInput)) {
71
90
  if (normalizedInput[key] === prev[key]) {
@@ -78,41 +97,19 @@ const update = async (model, { where, data: input }, ctx) => {
78
97
  const next = { ...prev, ...normalizedInput };
79
98
  const data = { prev, input, normalizedInput, next };
80
99
  await ctx.mutationHook?.({ model, action: 'update', trigger: 'mutation', when: 'before', data, ctx });
81
- if (model.parent) {
82
- const rootInput = {};
83
- const childInput = {};
84
- for (const field of model.fields) {
85
- const columnName = field.kind === 'relation' ? `${field.name}Id` : field.name;
86
- if (columnName in normalizedInput) {
87
- if (field.inherited) {
88
- rootInput[columnName] = normalizedInput[columnName];
89
- }
90
- else {
91
- childInput[columnName] = normalizedInput[columnName];
92
- }
93
- }
94
- }
95
- if (Object.keys(rootInput).length) {
96
- await ctx.knex(model.parent).where({ id: prev.id }).update(rootInput);
97
- }
98
- if (Object.keys(childInput).length) {
99
- await ctx.knex(model.name).where({ id: prev.id }).update(childInput);
100
- }
101
- }
102
- else {
103
- await ctx.knex(model.name).where({ id: prev.id }).update(normalizedInput);
104
- }
105
- await createRevision(model, next, ctx);
100
+ await doUpdate(model, normalizedInput, next, ctx);
106
101
  await ctx.mutationHook?.({ model, action: 'update', trigger: 'mutation', when: 'after', data, ctx });
107
102
  }
108
- return await resolve(ctx);
109
103
  };
110
- const del = async (model, { where, dryRun }, ctx) => {
111
- if (Object.keys(where).length === 0) {
112
- throw new Error(`No ${model.name} specified.`);
104
+ export const deleteEntities = async (model, where, deleteRootType, deleteRootId, ctx) => {
105
+ const entities = await ctx.knex(model.name).where(where).select('id');
106
+ for (const entity of entities) {
107
+ await deleteEntity(model, entity.id, false, deleteRootType, deleteRootId, ctx);
113
108
  }
109
+ };
110
+ export const deleteEntity = async (model, id, dryRun, deleteRootType, deleteRootId, ctx) => {
114
111
  const rootModel = model.rootModel;
115
- const entity = await getEntityToMutate(ctx, rootModel, where, 'DELETE');
112
+ const entity = await getEntityToMutate(ctx, rootModel, { id }, 'DELETE');
116
113
  if (entity.deleted) {
117
114
  throw new ForbiddenError(`${getTechnicalDisplay(model, entity)} is already deleted.`);
118
115
  }
@@ -137,8 +134,8 @@ const del = async (model, { where, dryRun }, ctx) => {
137
134
  deleted: true,
138
135
  deletedAt: ctx.now,
139
136
  deletedById: ctx.user?.id,
140
- deleteRootType: rootModel.name,
141
- deleteRootId: entity.id,
137
+ deleteRootType,
138
+ deleteRootId,
142
139
  };
143
140
  const next = { ...currentEntity, ...normalizedInput };
144
141
  const data = { prev: currentEntity, input: {}, normalizedInput, next };
@@ -155,8 +152,7 @@ const del = async (model, { where, dryRun }, ctx) => {
155
152
  });
156
153
  }
157
154
  mutations.push(async () => {
158
- await ctx.knex(currentModel.name).where({ id: currentEntity.id }).update(normalizedInput);
159
- await createRevision(currentModel, next, ctx);
155
+ await doUpdate(currentModel, normalizedInput, next, ctx);
160
156
  });
161
157
  if (mutationHook) {
162
158
  afterHooks.push(async () => {
@@ -207,8 +203,7 @@ const del = async (model, { where, dryRun }, ctx) => {
207
203
  });
208
204
  }
209
205
  mutations.push(async () => {
210
- await ctx.knex(descendantModel.name).where({ id: descendant.id }).update(normalizedInput);
211
- await createRevision(descendantModel, next, ctx);
206
+ await doUpdate(descendantModel, normalizedInput, next, ctx);
212
207
  });
213
208
  if (mutationHook) {
214
209
  afterHooks.push(async () => {
@@ -278,12 +273,9 @@ const del = async (model, { where, dryRun }, ctx) => {
278
273
  }
279
274
  return entity.id;
280
275
  };
281
- const restore = async (model, { where }, ctx) => {
282
- if (Object.keys(where).length === 0) {
283
- throw new Error(`No ${model.name} specified.`);
284
- }
276
+ const restoreEntity = async (model, id, ctx) => {
285
277
  const rootModel = model.rootModel;
286
- const entity = await getEntityToMutate(ctx, rootModel, where, 'RESTORE');
278
+ const entity = await getEntityToMutate(ctx, rootModel, { id }, 'RESTORE');
287
279
  if (!entity.deleted) {
288
280
  throw new ForbiddenError(`${getTechnicalDisplay(model, entity)} is not deleted.`);
289
281
  }
@@ -298,7 +290,7 @@ const restore = async (model, { where }, ctx) => {
298
290
  const afterHooks = [];
299
291
  const restoreCascade = async (currentModel, currentEntity) => {
300
292
  if (entity.deleteRootId) {
301
- if (!(currentEntity.deleteRootType === currentModel.name && currentEntity.deleteRootId === entity.id)) {
293
+ if (!(currentEntity.deleteRootType === model.name && currentEntity.deleteRootId === entity.id)) {
302
294
  return;
303
295
  }
304
296
  // Legacy heuristic
@@ -311,7 +303,7 @@ const restore = async (model, { where }, ctx) => {
311
303
  }
312
304
  toRestore[currentModel.name].add(currentEntity.id);
313
305
  for (const relation of currentModel.relations) {
314
- const parentId = entity[relation.field.foreignKey];
306
+ const parentId = currentEntity[relation.field.foreignKey];
315
307
  if (!parentId) {
316
308
  continue;
317
309
  }
@@ -337,8 +329,7 @@ const restore = async (model, { where }, ctx) => {
337
329
  });
338
330
  }
339
331
  mutations.push(async () => {
340
- await ctx.knex(currentModel.name).where({ id: currentEntity.id }).update(normalizedInput);
341
- await createRevision(currentModel, { ...currentEntity, deleted: false }, ctx);
332
+ await doUpdate(currentModel, normalizedInput, data.next, ctx);
342
333
  });
343
334
  if (ctx.mutationHook) {
344
335
  afterHooks.push(async () => {
@@ -365,7 +356,7 @@ const restore = async (model, { where }, ctx) => {
365
356
  for (const callback of [...beforeHooks, ...mutations, ...afterHooks]) {
366
357
  await callback();
367
358
  }
368
- return entity.id;
359
+ return id;
369
360
  };
370
361
  export const createRevision = async (model, data, ctx) => {
371
362
  if (model.updatable) {
@@ -407,8 +398,12 @@ export const createRevision = async (model, data, ctx) => {
407
398
  };
408
399
  const sanitize = (ctx, model, data) => {
409
400
  if (model.updatable) {
410
- data.updatedAt = ctx.now;
411
- data.updatedById = ctx.user?.id;
401
+ if (!data.updatedAt) {
402
+ data.updatedAt = ctx.now;
403
+ }
404
+ if (!data.updatedById) {
405
+ data.updatedById = ctx.user?.id;
406
+ }
412
407
  }
413
408
  for (const key of Object.keys(data)) {
414
409
  const field = model.fields.find(({ name }) => name === key);
@@ -431,4 +426,39 @@ const sanitize = (ctx, model, data) => {
431
426
  };
432
427
  const isEndOfDay = (field) => isPrimitive(field) && field.type === 'DateTime' && field?.endOfDay === true && field?.dateTimeType === 'date';
433
428
  const isEndOfMonth = (field) => isPrimitive(field) && field.type === 'DateTime' && field?.endOfMonth === true && field?.dateTimeType === 'year_and_month';
429
+ const doUpdate = async (model, updateFields, allFields, ctx) => {
430
+ if (model.updatable) {
431
+ if (!updateFields.updatedAt) {
432
+ updateFields.updatedAt = ctx.now;
433
+ }
434
+ if (!updateFields.updatedById) {
435
+ updateFields.updatedById = ctx.user?.id;
436
+ }
437
+ }
438
+ if (model.parent) {
439
+ const rootInput = {};
440
+ const childInput = {};
441
+ for (const field of model.fields) {
442
+ const columnName = field.kind === 'relation' ? `${field.name}Id` : field.name;
443
+ if (columnName in updateFields) {
444
+ if (field.inherited) {
445
+ rootInput[columnName] = updateFields[columnName];
446
+ }
447
+ else {
448
+ childInput[columnName] = updateFields[columnName];
449
+ }
450
+ }
451
+ }
452
+ if (Object.keys(rootInput).length) {
453
+ await ctx.knex(model.parent).where({ id: allFields.id }).update(rootInput);
454
+ }
455
+ if (Object.keys(childInput).length) {
456
+ await ctx.knex(model.name).where({ id: allFields.id }).update(childInput);
457
+ }
458
+ }
459
+ else {
460
+ await ctx.knex(model.name).where({ id: allFields.id }).update(updateFields);
461
+ }
462
+ await createRevision(model, allFields, ctx);
463
+ };
434
464
  //# sourceMappingURL=mutations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../../src/resolvers/mutations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../../src/resolvers/mutations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAY,EAAE,IAAS,EAAE,UAAmB,EAAE,IAAwB,EAAE,EAAE;IAC/G,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACjG,MAAM,GAAG,GAAG,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,cAAc,EAAE,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAErD,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAEzB,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAE9C,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAEzB,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAE1E,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,SAAS;gBACZ,OAAO,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,KAAkB,EAAE,KAAa,EAAE,GAAoB,EAAE,EAAE;IAC5F,MAAM,eAAe,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IACrC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAY,CAAC;IACxC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;QAC/B,eAAe,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QACjC,eAAe,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,eAAe,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACpC,CAAC;IACD,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAEtC,MAAM,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACzE,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtG,MAAM,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;IAEhD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC9E,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAErG,OAAO,eAAe,CAAC,EAAY,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,KAAkB,EAClB,KAA8B,EAC9B,YAAoB,EACpB,GAAoB,EACpB,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAU,EAAE,KAAa,EAAE,GAAoB,EAAE,EAAE;IACxG,MAAM,eAAe,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAErC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEnE,8EAA8E;IAC9E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/C,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,eAAe,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAEtG,MAAM,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACvG,CAAC;AACH,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,KAAkB,EAClB,KAA8B,EAC9B,cAAsB,EACtB,YAAoB,EACpB,GAAoB,EACpB,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IACjF,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,KAAkB,EAClB,EAAU,EACV,MAAe,EACf,cAAsB,EACtB,YAAoB,EACpB,GAAoB,EACpB,EAAE;IACF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,cAAc,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,QAAQ,GAA2C,EAAE,CAAC;IAC5D,MAAM,QAAQ,GASV,EAAE,CAAC;IACP,MAAM,UAAU,GASZ,EAAE,CAAC;IAEP,MAAM,WAAW,GAAc,EAAE,CAAC;IAClC,MAAM,SAAS,GAAc,EAAE,CAAC;IAChC,MAAM,UAAU,GAAc,EAAE,CAAC;IAEjC,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;IACtC,MAAM,aAAa,GAAG,KAAK,EAAE,YAAyB,EAAE,aAAqB,EAAE,EAAE;QAC/E,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,CAAC;QACD,IAAK,aAAa,CAAC,EAAa,IAAI,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,EAAY,CAAC,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QACpH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAEhH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,eAAe,GAAG;gBACtB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,GAAG,CAAC,GAAG;gBAClB,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE;gBACzB,cAAc;gBACd,YAAY;aACb,CAAC;YACF,MAAM,IAAI,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,eAAe,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;YACvE,IAAI,YAAY,EAAE,CAAC;gBACjB,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;oBAC1B,MAAM,YAAY,CAAC;wBACjB,KAAK,EAAE,YAAY;wBACnB,MAAM,EAAE,QAAQ;wBAChB,OAAO;wBACP,IAAI,EAAE,QAAQ;wBACd,IAAI;wBACJ,GAAG;qBACJ,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACxB,MAAM,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YACH,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;oBACzB,MAAM,YAAY,CAAC;wBACjB,KAAK,EAAE,YAAY;wBACnB,MAAM,EAAE,QAAQ;wBAChB,OAAO;wBACP,IAAI,EAAE,OAAO;wBACb,IAAI;wBACJ,GAAG;qBACJ,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,MAAM,EACT,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GACtC,IAAI,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACjG,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACvG,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;YAChC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvB,QAAQ,QAAQ,EAAE,CAAC;oBACjB,KAAK,UAAU;wBACb,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;4BACrC,IAAI,MAAM,EAAE,CAAC;gCACX,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oCACpC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gCACtC,CAAC;gCACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;oCACnD,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG;wCAC9C,OAAO,EAAE,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,CAAC;wCAClE,MAAM,EAAE,EAAE;qCACX,CAAC;gCACJ,CAAC;gCACD,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAClE,CAAC;iCAAM,CAAC;gCACN,MAAM,eAAe,GAAG,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;gCAChD,MAAM,IAAI,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,eAAe,EAAE,CAAC;gCACnD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;gCACpE,IAAI,YAAY,EAAE,CAAC;oCACjB,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wCAC1B,MAAM,YAAY,CAAC;4CACjB,KAAK,EAAE,eAAe;4CACtB,MAAM,EAAE,QAAQ;4CAChB,OAAO,EAAE,UAAU;4CACnB,IAAI,EAAE,QAAQ;4CACd,IAAI;4CACJ,GAAG;yCACJ,CAAC,CAAC;oCACL,CAAC,CAAC,CAAC;gCACL,CAAC;gCACD,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;oCACxB,MAAM,QAAQ,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gCAC9D,CAAC,CAAC,CAAC;gCACH,IAAI,YAAY,EAAE,CAAC;oCACjB,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wCACzB,MAAM,YAAY,CAAC;4CACjB,KAAK,EAAE,eAAe;4CACtB,MAAM,EAAE,QAAQ;4CAChB,OAAO,EAAE,UAAU;4CACnB,IAAI,EAAE,OAAO;4CACb,IAAI;4CACJ,GAAG;yCACJ,CAAC,CAAC;oCACL,CAAC,CAAC,CAAC;gCACL,CAAC;4BACH,CAAC;wBACH,CAAC;wBACD,MAAM;oBACR,KAAK,UAAU;wBACb,IAAI,MAAM,EAAE,CAAC;4BACX,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gCACtC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACxC,CAAC;4BACD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gCACrC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;oCACrD,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG;wCAChD,OAAO,EAAE,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,CAAC;wCAClE,MAAM,EAAE,CAAC,IAAI,CAAC;qCACf,CAAC;gCACJ,CAAC;gCACD,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACpE,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,MAAM,IAAI,cAAc,CACtB,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,qCAAqC,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,CACpL,CAAC;wBACJ,CAAC;wBACD,MAAM;oBACR,KAAK,SAAS,CAAC;oBACf,OAAO,CAAC,CAAC,CAAC;wBACR,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;4BAC/B,MAAM,IAAI,cAAc,CACtB,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,2BAA2B,CACtL,CAAC;wBACJ,CAAC;wBACD,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;wBACnF,MAAM,oBAAoB,GAAG,MAAM,KAAK,CAAC;wBACzC,MAAM,uBAAuB,GAAG,WAAW,CAAC,MAAM,CAChD,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAC1E,CAAC;wBACF,IAAI,uBAAuB,CAAC,MAAM,EAAE,CAAC;4BACnC,MAAM,IAAI,cAAc,CACtB,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,eAAe,CAAC,WAAW,2CAA2C,CAC3H,CAAC;wBACJ,CAAC;wBACD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;4BACrC,MAAM,aAAa,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;wBACnD,CAAC;wBACD,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE;YACxC,IAAI,EAAE,gBAAgB;YACtB,QAAQ;YACR,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAU,EAAE,GAAoB,EAAE,EAAE;IACnF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAE1E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,cAAc,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACrF,MAAM,IAAI,cAAc,CACtB,iBAAiB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,qCAAqC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,GAAG,CACxI,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAgC,EAAE,CAAC;IAElD,MAAM,WAAW,GAAc,EAAE,CAAC;IAClC,MAAM,SAAS,GAAc,EAAE,CAAC;IAChC,MAAM,UAAU,GAAc,EAAE,CAAC;IAEjC,MAAM,cAAc,GAAG,KAAK,EAAE,YAAyB,EAAE,aAAqB,EAAE,EAAE;QAChF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,aAAa,CAAC,cAAc,KAAK,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC,YAAY,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/F,OAAO;YACT,CAAC;YAED,mBAAmB;QACrB,CAAC;aAAM,IACL,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAE,CAAC,EAC/G,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;YACtC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3C,CAAC;QACD,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAY,CAAC,CAAC;QAE7D,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAuB,CAAC;YAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YACD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxD,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YACzF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,cAAc,CACtB,iBAAiB,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,kCAAkC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,QAAQ,GAAG,CAC5I,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAW;YAC9B,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;YACjB,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;SACnB,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,eAAe,EAAE,EAAE,CAAC;QACjH,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,GAAG,CAAC,YAAa,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACtH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACxB,MAAM,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACzB,MAAM,GAAG,CAAC,YAAa,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACrH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,EACT,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,GACtB,IAAI,YAAY,CAAC,gBAAgB;aAC/B,MAAM,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC;aAC7D,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACtG,MAAM,kBAAkB,GAAG,MAAM,KAAK,CAAC;YACvC,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACpF,MAAM,qBAAqB,GAAG,MAAM,KAAK,CAAC;YAC1C,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,MAAM,CACxD,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAC3E,CAAC;YACF,IAAI,wBAAwB,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,IAAI,cAAc,CACtB,GAAG,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,eAAe,CAAC,WAAW,4CAA4C,CAC1I,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;gBAC5C,MAAM,cAAc,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAExC,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,KAAkB,EAAE,IAAY,EAAE,GAAoB,EAAE,EAAE;IAC7F,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAW;YAC/B,EAAE,EAAE,UAAU;YACd,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;YACzD,SAAS,EAAE,GAAG,CAAC,GAAG;YAClB,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE;SAC1B,CAAC;QAEF,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;QACnD,CAAC;QACD,MAAM,iBAAiB,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;QAE7C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACtE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACvE,IAAI,KAAK,CAAC;YACV,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC3E,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACnE,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,GAAoB,EAAE,KAAkB,EAAE,IAAY,EAAE,EAAE;IAC1E,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpE,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAK,IAAI,CAAC,GAAG,CAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACrD,SAAS;QACX,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAkB,EAAE,EAAE,CACxC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,EAAE,QAAQ,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC;AAEhH,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAE,EAAE,CAC1C,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,EAAE,UAAU,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY,KAAK,gBAAgB,CAAC;AAE5H,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAkB,EAAE,YAAoB,EAAE,SAAiB,EAAE,GAAoB,EAAE,EAAE;IAC3G,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5B,YAAY,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAC9B,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC9E,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;gBAC/B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,SAAS,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartive/graphql-magic",
3
- "version": "19.1.3-next.2",
3
+ "version": "19.2.0-next.1",
4
4
  "description": "",
5
5
  "source": "src/index.ts",
6
6
  "type": "module",
@@ -5,11 +5,16 @@ export type Entity = Record<string, unknown>;
5
5
 
6
6
  export type Action = 'create' | 'update' | 'delete' | 'restore';
7
7
 
8
+ export type MutationContext<DateType extends AnyDateType = AnyDateType> = Pick<
9
+ Context<DateType>,
10
+ 'knex' | 'now' | 'user' | 'timeZone' | 'mutationHook' | 'handleUploads' | 'models' | 'permissions'
11
+ >;
12
+
8
13
  export type MutationHook<DateType extends AnyDateType = AnyDateType> = (args: {
9
14
  model: EntityModel;
10
15
  action: Action;
11
16
  trigger: 'mutation' | 'cascade' | 'set-null';
12
17
  when: 'before' | 'after';
13
18
  data: { prev: Entity; input: Entity; normalizedInput: Entity; next: Entity };
14
- ctx: Context<DateType>;
19
+ ctx: MutationContext<DateType>;
15
20
  }) => Promise<void> | void;
@@ -1,9 +1,9 @@
1
1
  import { GraphQLResolveInfo } from 'graphql';
2
2
  import { v4 as uuid } from 'uuid';
3
- import { Context, FullContext } from '../context';
3
+ import { Context } from '../context';
4
4
  import { ForbiddenError, GraphQLError } from '../errors';
5
5
  import { EntityField, EntityModel } from '../models/models';
6
- import { Entity } from '../models/mutation-hook';
6
+ import { Entity, MutationContext } from '../models/mutation-hook';
7
7
  import { get, isPrimitive, it, typeToField } from '../models/utils';
8
8
  import { applyPermissions, checkCanWrite, getEntityToMutate } from '../permissions/check';
9
9
  import { anyDateToLuxon } from '../utils';
@@ -16,23 +16,43 @@ export const mutationResolver = async (_parent: any, args: any, partialCtx: Cont
16
16
  const ctx = { ...partialCtx, knex, info, aliases: new AliasGenerator() };
17
17
  const model = ctx.models.getModel(modelName, 'entity');
18
18
  switch (mutation) {
19
- case 'create':
20
- return await create(model, args, ctx);
21
- case 'update':
22
- return await update(model, args, ctx);
23
- case 'delete':
24
- return await del(model, args, ctx);
19
+ case 'create': {
20
+ const id = await createEntity(model, args.data, ctx);
21
+
22
+ return await resolve(ctx, id);
23
+ }
24
+ case 'update': {
25
+ const id = args.where.id;
26
+
27
+ await updateEntity(model, id, args.data, ctx);
28
+
29
+ return await resolve(ctx, id);
30
+ }
31
+ case 'delete': {
32
+ const id = args.where.id;
33
+
34
+ await deleteEntity(model, id, args.dryRun, model.rootModel.name, id, ctx);
35
+
36
+ return await resolve(ctx, id);
37
+ }
25
38
  case 'restore':
26
- return await restore(model, args, ctx);
39
+ return await restoreEntity(model, args.where.id, ctx);
27
40
  }
28
41
  });
29
42
  };
30
43
 
31
- const create = async (model: EntityModel, { data: input }: { data: any }, ctx: FullContext) => {
44
+ export const createEntity = async (model: EntityModel, input: Entity, ctx: MutationContext) => {
32
45
  const normalizedInput = { ...input };
33
- normalizedInput.id = uuid();
34
- normalizedInput.createdAt = ctx.now;
35
- normalizedInput.createdById = ctx.user?.id;
46
+ if (!normalizedInput.id) {
47
+ normalizedInput.id = uuid();
48
+ }
49
+ const id = normalizedInput.id as string;
50
+ if (!normalizedInput.createdAt) {
51
+ normalizedInput.createdAt = ctx.now;
52
+ }
53
+ if (!normalizedInput.createdById) {
54
+ normalizedInput.createdById = ctx.user?.id;
55
+ }
36
56
  if (model.parent) {
37
57
  normalizedInput.type = model.name;
38
58
  }
@@ -43,40 +63,51 @@ const create = async (model: EntityModel, { data: input }: { data: any }, ctx: F
43
63
 
44
64
  const data = { prev: {}, input, normalizedInput, next: normalizedInput };
45
65
  await ctx.mutationHook?.({ model, action: 'create', trigger: 'mutation', when: 'before', data, ctx });
66
+
67
+ await createEntity(model, normalizedInput, ctx);
68
+
46
69
  if (model.parent) {
47
70
  const rootInput = {};
48
- const childInput = { id: normalizedInput.id };
71
+ const childInput = { id };
49
72
  for (const field of model.fields) {
50
73
  const columnName = field.kind === 'relation' ? `${field.name}Id` : field.name;
51
- if (columnName in normalizedInput) {
74
+ if (columnName in data) {
52
75
  if (field.inherited) {
53
- rootInput[columnName] = normalizedInput[columnName];
76
+ rootInput[columnName] = data[columnName];
54
77
  } else {
55
- childInput[columnName] = normalizedInput[columnName];
78
+ childInput[columnName] = data[columnName];
56
79
  }
57
80
  }
58
81
  }
59
82
  await ctx.knex(model.parent).insert(rootInput);
60
83
  await ctx.knex(model.name).insert(childInput);
61
84
  } else {
62
- await ctx.knex(model.name).insert(normalizedInput);
85
+ await ctx.knex(model.name).insert(data);
63
86
  }
64
- await createRevision(model, normalizedInput, ctx);
87
+ await createRevision(model, data, ctx);
65
88
  await ctx.mutationHook?.({ model, action: 'create', trigger: 'mutation', when: 'after', data, ctx });
66
89
 
67
- return await resolve(ctx, normalizedInput.id);
90
+ return normalizedInput.id as string;
68
91
  };
69
92
 
70
- const update = async (model: EntityModel, { where, data: input }: { where: any; data: any }, ctx: FullContext) => {
71
- if (Object.keys(where).length === 0) {
72
- throw new Error(`No ${model.name} specified.`);
93
+ export const updateEntities = async (
94
+ model: EntityModel,
95
+ where: Record<string, unknown>,
96
+ updateFields: Entity,
97
+ ctx: MutationContext,
98
+ ) => {
99
+ const entities = await ctx.knex(model.name).where(where).select('id');
100
+ for (const entity of entities) {
101
+ await updateEntity(model, entity.id, updateFields, ctx);
73
102
  }
103
+ };
74
104
 
105
+ export const updateEntity = async (model: EntityModel, id: string, input: Entity, ctx: MutationContext) => {
75
106
  const normalizedInput = { ...input };
76
107
 
77
108
  sanitize(ctx, model, normalizedInput);
78
109
 
79
- const prev = await getEntityToMutate(ctx, model, where, 'UPDATE');
110
+ const prev = await getEntityToMutate(ctx, model, { id }, 'UPDATE');
80
111
 
81
112
  // Remove data that wouldn't mutate given that it's irrelevant for permissions
82
113
  for (const key of Object.keys(normalizedInput)) {
@@ -93,45 +124,36 @@ const update = async (model: EntityModel, { where, data: input }: { where: any;
93
124
  const data = { prev, input, normalizedInput, next };
94
125
  await ctx.mutationHook?.({ model, action: 'update', trigger: 'mutation', when: 'before', data, ctx });
95
126
 
96
- if (model.parent) {
97
- const rootInput = {};
98
- const childInput = {};
99
- for (const field of model.fields) {
100
- const columnName = field.kind === 'relation' ? `${field.name}Id` : field.name;
101
- if (columnName in normalizedInput) {
102
- if (field.inherited) {
103
- rootInput[columnName] = normalizedInput[columnName];
104
- } else {
105
- childInput[columnName] = normalizedInput[columnName];
106
- }
107
- }
108
- }
109
- if (Object.keys(rootInput).length) {
110
- await ctx.knex(model.parent).where({ id: prev.id }).update(rootInput);
111
- }
112
- if (Object.keys(childInput).length) {
113
- await ctx.knex(model.name).where({ id: prev.id }).update(childInput);
114
- }
115
- } else {
116
- await ctx.knex(model.name).where({ id: prev.id }).update(normalizedInput);
117
- }
118
-
119
- await createRevision(model, next, ctx);
127
+ await doUpdate(model, normalizedInput, next, ctx);
120
128
  await ctx.mutationHook?.({ model, action: 'update', trigger: 'mutation', when: 'after', data, ctx });
121
129
  }
122
-
123
- return await resolve(ctx);
124
130
  };
125
131
 
126
132
  type Callbacks = (() => Promise<void>)[];
127
133
 
128
- const del = async (model: EntityModel, { where, dryRun }: { where: any; dryRun: boolean }, ctx: FullContext) => {
129
- if (Object.keys(where).length === 0) {
130
- throw new Error(`No ${model.name} specified.`);
134
+ export const deleteEntities = async (
135
+ model: EntityModel,
136
+ where: Record<string, unknown>,
137
+ deleteRootType: string,
138
+ deleteRootId: string,
139
+ ctx: MutationContext,
140
+ ) => {
141
+ const entities = await ctx.knex(model.name).where(where).select('id');
142
+ for (const entity of entities) {
143
+ await deleteEntity(model, entity.id, false, deleteRootType, deleteRootId, ctx);
131
144
  }
145
+ };
132
146
 
147
+ export const deleteEntity = async (
148
+ model: EntityModel,
149
+ id: string,
150
+ dryRun: boolean,
151
+ deleteRootType: string,
152
+ deleteRootId: string,
153
+ ctx: MutationContext,
154
+ ) => {
133
155
  const rootModel = model.rootModel;
134
- const entity = await getEntityToMutate(ctx, rootModel, where, 'DELETE');
156
+ const entity = await getEntityToMutate(ctx, rootModel, { id }, 'DELETE');
135
157
 
136
158
  if (entity.deleted) {
137
159
  throw new ForbiddenError(`${getTechnicalDisplay(model, entity)} is already deleted.`);
@@ -179,8 +201,8 @@ const del = async (model: EntityModel, { where, dryRun }: { where: any; dryRun:
179
201
  deleted: true,
180
202
  deletedAt: ctx.now,
181
203
  deletedById: ctx.user?.id,
182
- deleteRootType: rootModel.name,
183
- deleteRootId: entity.id,
204
+ deleteRootType,
205
+ deleteRootId,
184
206
  };
185
207
  const next = { ...currentEntity, ...normalizedInput };
186
208
  const data = { prev: currentEntity, input: {}, normalizedInput, next };
@@ -197,8 +219,7 @@ const del = async (model: EntityModel, { where, dryRun }: { where: any; dryRun:
197
219
  });
198
220
  }
199
221
  mutations.push(async () => {
200
- await ctx.knex(currentModel.name).where({ id: currentEntity.id }).update(normalizedInput);
201
- await createRevision(currentModel, next, ctx);
222
+ await doUpdate(currentModel, normalizedInput, next, ctx);
202
223
  });
203
224
  if (mutationHook) {
204
225
  afterHooks.push(async () => {
@@ -252,8 +273,7 @@ const del = async (model: EntityModel, { where, dryRun }: { where: any; dryRun:
252
273
  });
253
274
  }
254
275
  mutations.push(async () => {
255
- await ctx.knex(descendantModel.name).where({ id: descendant.id }).update(normalizedInput);
256
- await createRevision(descendantModel, next, ctx);
276
+ await doUpdate(descendantModel, normalizedInput, next, ctx);
257
277
  });
258
278
  if (mutationHook) {
259
279
  afterHooks.push(async () => {
@@ -335,14 +355,10 @@ const del = async (model: EntityModel, { where, dryRun }: { where: any; dryRun:
335
355
  return entity.id;
336
356
  };
337
357
 
338
- const restore = async (model: EntityModel, { where }: { where: any }, ctx: FullContext) => {
339
- if (Object.keys(where).length === 0) {
340
- throw new Error(`No ${model.name} specified.`);
341
- }
342
-
358
+ const restoreEntity = async (model: EntityModel, id: string, ctx: MutationContext) => {
343
359
  const rootModel = model.rootModel;
344
360
 
345
- const entity = await getEntityToMutate(ctx, rootModel, where, 'RESTORE');
361
+ const entity = await getEntityToMutate(ctx, rootModel, { id }, 'RESTORE');
346
362
 
347
363
  if (!entity.deleted) {
348
364
  throw new ForbiddenError(`${getTechnicalDisplay(model, entity)} is not deleted.`);
@@ -364,7 +380,7 @@ const restore = async (model: EntityModel, { where }: { where: any }, ctx: FullC
364
380
 
365
381
  const restoreCascade = async (currentModel: EntityModel, currentEntity: Entity) => {
366
382
  if (entity.deleteRootId) {
367
- if (!(currentEntity.deleteRootType === currentModel.name && currentEntity.deleteRootId === entity.id)) {
383
+ if (!(currentEntity.deleteRootType === model.name && currentEntity.deleteRootId === entity.id)) {
368
384
  return;
369
385
  }
370
386
 
@@ -381,7 +397,7 @@ const restore = async (model: EntityModel, { where }: { where: any }, ctx: FullC
381
397
  toRestore[currentModel.name].add(currentEntity.id as string);
382
398
 
383
399
  for (const relation of currentModel.relations) {
384
- const parentId = entity[relation.field.foreignKey];
400
+ const parentId = currentEntity[relation.field.foreignKey] as string | undefined;
385
401
  if (!parentId) {
386
402
  continue;
387
403
  }
@@ -410,8 +426,7 @@ const restore = async (model: EntityModel, { where }: { where: any }, ctx: FullC
410
426
  });
411
427
  }
412
428
  mutations.push(async () => {
413
- await ctx.knex(currentModel.name).where({ id: currentEntity.id }).update(normalizedInput);
414
- await createRevision(currentModel, { ...currentEntity, deleted: false }, ctx);
429
+ await doUpdate(currentModel, normalizedInput, data.next, ctx);
415
430
  });
416
431
  if (ctx.mutationHook) {
417
432
  afterHooks.push(async () => {
@@ -449,10 +464,10 @@ const restore = async (model: EntityModel, { where }: { where: any }, ctx: FullC
449
464
  await callback();
450
465
  }
451
466
 
452
- return entity.id;
467
+ return id;
453
468
  };
454
469
 
455
- export const createRevision = async (model: EntityModel, data: Entity, ctx: Pick<Context, 'knex' | 'now' | 'user'>) => {
470
+ export const createRevision = async (model: EntityModel, data: Entity, ctx: MutationContext) => {
456
471
  if (model.updatable) {
457
472
  const revisionId = uuid();
458
473
  const rootRevisionData: Entity = {
@@ -491,10 +506,14 @@ export const createRevision = async (model: EntityModel, data: Entity, ctx: Pick
491
506
  }
492
507
  };
493
508
 
494
- const sanitize = (ctx: FullContext, model: EntityModel, data: Entity) => {
509
+ const sanitize = (ctx: MutationContext, model: EntityModel, data: Entity) => {
495
510
  if (model.updatable) {
496
- data.updatedAt = ctx.now;
497
- data.updatedById = ctx.user?.id;
511
+ if (!data.updatedAt) {
512
+ data.updatedAt = ctx.now;
513
+ }
514
+ if (!data.updatedById) {
515
+ data.updatedById = ctx.user?.id;
516
+ }
498
517
  }
499
518
 
500
519
  for (const key of Object.keys(data)) {
@@ -526,3 +545,37 @@ const isEndOfDay = (field: EntityField) =>
526
545
 
527
546
  const isEndOfMonth = (field: EntityField) =>
528
547
  isPrimitive(field) && field.type === 'DateTime' && field?.endOfMonth === true && field?.dateTimeType === 'year_and_month';
548
+
549
+ const doUpdate = async (model: EntityModel, updateFields: Entity, allFields: Entity, ctx: MutationContext) => {
550
+ if (model.updatable) {
551
+ if (!updateFields.updatedAt) {
552
+ updateFields.updatedAt = ctx.now;
553
+ }
554
+ if (!updateFields.updatedById) {
555
+ updateFields.updatedById = ctx.user?.id;
556
+ }
557
+ }
558
+ if (model.parent) {
559
+ const rootInput = {};
560
+ const childInput = {};
561
+ for (const field of model.fields) {
562
+ const columnName = field.kind === 'relation' ? `${field.name}Id` : field.name;
563
+ if (columnName in updateFields) {
564
+ if (field.inherited) {
565
+ rootInput[columnName] = updateFields[columnName];
566
+ } else {
567
+ childInput[columnName] = updateFields[columnName];
568
+ }
569
+ }
570
+ }
571
+ if (Object.keys(rootInput).length) {
572
+ await ctx.knex(model.parent).where({ id: allFields.id }).update(rootInput);
573
+ }
574
+ if (Object.keys(childInput).length) {
575
+ await ctx.knex(model.name).where({ id: allFields.id }).update(childInput);
576
+ }
577
+ } else {
578
+ await ctx.knex(model.name).where({ id: allFields.id }).update(updateFields);
579
+ }
580
+ await createRevision(model, allFields, ctx);
581
+ };