chrono-forge
Advanced tools
Comparing version 0.5.0 to 0.5.1
@@ -211,34 +211,35 @@ "use strict"; | ||
this.log.debug(`[StatefulWorkflow]:${this.constructor.name}:processState`); | ||
const previousState = this.state; | ||
let newState; | ||
while (this.pendingChanges.length > 0) { | ||
const change = this.pendingChanges.shift(); | ||
const previousState = this.state; | ||
const newState = (0, entities_1.reducer)(this.state, { | ||
newState = (0, entities_1.reducer)(newState || this.state, { | ||
type: change?.deletions ? entities_1.DELETE_ENTITIES : entities_1.UPDATE_ENTITIES, | ||
entities: change?.deletions || change?.updates | ||
}); | ||
if (newState) { | ||
const differences = (0, deep_object_diff_1.detailedDiff)(previousState, newState); | ||
if (!(0, lodash_isempty_1.default)(differences.added) || !(0, lodash_isempty_1.default)(differences.updated) || !(0, lodash_isempty_1.default)(differences.deleted)) { | ||
const created = (0, dottie_1.get)(differences.added, `${this.entityName}.${this.id}`, false); | ||
const updated = (0, dottie_1.get)(differences.updated, `${this.entityName}.${this.id}`, false); | ||
const deleted = (0, dottie_1.get)(differences.deleted, `${this.entityName}.${this.id}`, false); | ||
if (created) { | ||
await this.emit('created', created, newState, previousState); | ||
} | ||
if (newState) { | ||
const differences = (0, deep_object_diff_1.detailedDiff)(previousState, newState); | ||
if (!(0, lodash_isempty_1.default)(differences.added) || !(0, lodash_isempty_1.default)(differences.updated) || !(0, lodash_isempty_1.default)(differences.deleted)) { | ||
const created = (0, dottie_1.get)(differences.added, `${this.entityName}.${this.id}`, false); | ||
const updated = (0, dottie_1.get)(differences.updated, `${this.entityName}.${this.id}`, false); | ||
const deleted = (0, dottie_1.get)(differences.deleted, `${this.entityName}.${this.id}`, false); | ||
if (created) { | ||
await this.emit('created', created, newState, previousState); | ||
} | ||
else if (updated) { | ||
await this.emit('updated', updated, newState, previousState); | ||
} | ||
else if (deleted) { | ||
if (!(await this.emit('deleted', deleted, newState, previousState))) { | ||
return await this.cancel(); | ||
} | ||
else if (updated) { | ||
await this.emit('updated', updated, newState, previousState); | ||
} | ||
else if (deleted) { | ||
if (!(await this.emit('deleted', deleted, newState, previousState))) { | ||
return await this.cancel(); | ||
} | ||
} | ||
await this.processChildState(newState, differences, previousState || {}); | ||
if (this.iteration !== 0) { | ||
await this.processSubscriptions(newState, differences, previousState || {}); | ||
} | ||
this.state = newState; | ||
this.pendingUpdate = false; | ||
this.emit('ready'); | ||
} | ||
await this.processChildState(newState, differences, previousState || {}); | ||
if (this.iteration !== 0) { | ||
await this.processSubscriptions(newState, differences, previousState || {}); | ||
} | ||
this.state = newState; | ||
this.pendingUpdate = false; | ||
this.emit('ready'); | ||
} | ||
@@ -245,0 +246,0 @@ } |
{ | ||
"name": "chrono-forge", | ||
"version": "0.5.0", | ||
"version": "0.5.1", | ||
"description": "A powerful framework for temporal workflows, state management, and streaming activities, designed for seamless developer experience.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Sorry, the diff of this file is not supported yet
2748
233950