mythix-orm 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -900,7 +900,7 @@ class ConnectionBase extends EventEmitter {
900
900
  if (batchModels) {
901
901
  for (let i = 0, il = batchModels.length; i < il; i++) {
902
902
  let batchModel = batchModels[i];
903
- batchModel.clearDirty();
903
+ // batchModel.clearDirty();
904
904
  finalResults.push(batchModel);
905
905
  }
906
906
  }
@@ -922,6 +922,7 @@ class ConnectionBase extends EventEmitter {
922
922
  let groupedModelMap = this.prepareAllModelsAndSubModelsForOperation(Model, models, options);
923
923
  let alreadyStored = {};
924
924
  let allDirtyModels = new Set();
925
+ let allStoredModels = new Set();
925
926
  let primaryResult;
926
927
 
927
928
  for (let [ modelName, models ] of groupedModelMap) {
@@ -941,6 +942,8 @@ class ConnectionBase extends EventEmitter {
941
942
  primaryResult = results;
942
943
 
943
944
  for (let storedModel of results) {
945
+ allStoredModels.add(storedModel);
946
+
944
947
  for (let [ groupModelName, groupModels ] of groupedModelMap) {
945
948
  if (groupModelName === modelName)
946
949
  continue;
@@ -953,9 +956,8 @@ class ConnectionBase extends EventEmitter {
953
956
  continue;
954
957
 
955
958
  for (let targetModel of groupModels) {
956
- Utils.setRelationalValues(this, TargetModel, targetModel, GroupModel, storedModel);
957
-
958
- if (targetModel.isDirty())
959
+ let hasChanges = Utils.setRelationalValues(this, TargetModel, targetModel, GroupModel, storedModel);
960
+ if (hasChanges)
959
961
  allDirtyModels.add(targetModel);
960
962
  }
961
963
  }
@@ -968,6 +970,12 @@ class ConnectionBase extends EventEmitter {
968
970
  if (allDirtyModels.size > 0 && typeof afterOperationCallback === 'function')
969
971
  await afterOperationCallback.call(this, Model, allDirtyModels, options, queryGenerator);
970
972
 
973
+ // Now mark all models as clean and persisted
974
+ for (let storedModel of allStoredModels) {
975
+ storedModel.clearDirty();
976
+ storedModel._persisted = true;
977
+ }
978
+
971
979
  return (inputIsArray || !primaryResult) ? primaryResult : primaryResult[0];
972
980
  }
973
981
 
@@ -996,27 +1004,43 @@ class ConnectionBase extends EventEmitter {
996
1004
  this.removeAllListeners();
997
1005
  }
998
1006
 
999
- async runSaveHooks(Model, models, operationHookName, saveHookName, options) {
1007
+ async runSaveHooks(Model, models, operationHookName, saveHookName, _options) {
1000
1008
  const throwError = (error) => {
1001
1009
  throw error;
1002
1010
  };
1003
1011
 
1012
+ let options = _options || {};
1004
1013
  let promises = [];
1005
1014
  let context = { connection: this, Model, options, self: null };
1015
+ let skipHooks = options.skipHooks;
1006
1016
 
1007
- for (let i = 0, il = models.length; i < il; i++) {
1008
- let model = models[i];
1017
+ const shouldSkipHook = (hookName) => {
1018
+ if (!skipHooks)
1019
+ return false;
1009
1020
 
1010
- context.self = model;
1021
+ if (skipHooks === true)
1022
+ return true;
1011
1023
 
1012
- let promise = model[operationHookName](context);
1013
- if (!Nife.instanceOf(promise, 'promise'))
1014
- promise = Promise.resolve(promise);
1024
+ if (skipHooks[hookName] === true)
1025
+ return true;
1026
+
1027
+ return false;
1028
+ };
1015
1029
 
1016
- promise = promise.then(async () => await model[saveHookName](context), throwError);
1030
+ for (let i = 0, il = models.length; i < il; i++) {
1031
+ let model = models[i];
1032
+ let modelContext = { ...context, self: model };
1033
+
1034
+ let promise = (shouldSkipHook(operationHookName)) ? undefined : model[operationHookName](modelContext);
1017
1035
  if (!Nife.instanceOf(promise, 'promise'))
1018
1036
  promise = Promise.resolve(promise);
1019
1037
 
1038
+ if (!shouldSkipHook(saveHookName)) {
1039
+ promise = promise.then(async () => await model[saveHookName](modelContext), throwError);
1040
+ if (!Nife.instanceOf(promise, 'promise'))
1041
+ promise = Promise.resolve(promise);
1042
+ }
1043
+
1020
1044
  promises.push(promise);
1021
1045
  }
1022
1046
 
@@ -18,7 +18,7 @@ export declare interface RelationStatus {
18
18
  }
19
19
 
20
20
  export declare interface ModelsRelationStatuses {
21
- [ key: string ]: RelationStatus
21
+ [key: string]: RelationStatus
22
22
  }
23
23
 
24
24
  export declare function isUUID(value: any): boolean;
@@ -70,7 +70,7 @@ export declare function setRelationalValues<T extends Model = Model>(
70
70
  targetModelInstance: T,
71
71
  SourceModel: ModelClass,
72
72
  sourceModelInstance: Model,
73
- ): T;
73
+ ): boolean;
74
74
 
75
75
  export declare function assignRelatedModels(model: Model, relatedModels: Model | Array<Model>): void;
76
76
  export declare function getPrimaryKeysForModels(
@@ -81,7 +81,7 @@ export declare function getPrimaryKeysForModels(
81
81
  includeRelations?: boolean | Array<string>,
82
82
  skipRelations?: Array<string>,
83
83
  },
84
- ): Array<any> | { [ key: string ]: Array<any> };
84
+ ): Array<any> | { [key: string]: Array<any> };
85
85
 
86
86
  export declare function buildQueryFromModelsAttributes(
87
87
  connection: ConnectionBase,
@@ -531,9 +531,10 @@ function setRelationalValues(connection, TargetModel, targetModelInstance, Sourc
531
531
  let sourceModelName = SourceModel.getModelName();
532
532
 
533
533
  if (targetModelName === sourceModelName)
534
- return targetModelInstance;
534
+ return false;
535
535
 
536
- let fieldSets = TargetModel.getForeignKeysTargetFieldNames(connection, sourceModelName);
536
+ let fieldSets = TargetModel.getForeignKeysTargetFieldNames(connection, sourceModelName);
537
+ let hasChanges = false;
537
538
 
538
539
  // Update fields to related model
539
540
  for (let i = 0, il = fieldSets.length; i < il; i++) {
@@ -548,10 +549,13 @@ function setRelationalValues(connection, TargetModel, targetModelInstance, Sourc
548
549
  let sourceFieldName = fieldSet.targetFieldName;
549
550
  let sourceModelValue = (sourceModelInstance) ? sourceModelInstance[sourceFieldName] : null;
550
551
 
551
- targetModelInstance[targetFieldName] = sourceModelValue;
552
+ if (targetModelInstance[targetFieldName] !== sourceModelValue) {
553
+ targetModelInstance[targetFieldName] = sourceModelValue;
554
+ hasChanges = true;
555
+ }
552
556
  }
553
557
 
554
- return targetModelInstance;
558
+ return hasChanges;
555
559
  }
556
560
 
557
561
  function assignRelatedModels(model, _relatedModels) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mythix-orm",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "ORM for Mythix framework",
5
5
  "main": "lib/index",
6
6
  "type": "commonjs",