@contember/engine-actions 2.0.2 → 2.0.3
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/dist/development/src/triggers/TriggerHandler.cjs +9 -9
- package/dist/development/src/triggers/TriggerHandler.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerHandler.js +9 -9
- package/dist/development/src/triggers/TriggerHandler.js.map +1 -1
- package/dist/production/src/triggers/TriggerHandler.cjs +9 -9
- package/dist/production/src/triggers/TriggerHandler.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerHandler.js +9 -9
- package/dist/production/src/triggers/TriggerHandler.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -15
- package/src/triggers/TriggerHandler.ts +10 -10
|
@@ -49,27 +49,27 @@ class TriggerHandler {
|
|
|
49
49
|
}
|
|
50
50
|
async directUpdateHandler(event) {
|
|
51
51
|
const updateListeners = this.listenersStore.getUpdateListeners(event.entity.name);
|
|
52
|
-
updateListeners.map((listener) => {
|
|
52
|
+
await Promise.all(updateListeners.map((listener) => {
|
|
53
53
|
if (event.data.some((it) => listener.fields.has(it.fieldName) && it.value !== it.old)) {
|
|
54
|
-
this.payloadManager.add({
|
|
54
|
+
return this.payloadManager.add({
|
|
55
55
|
listener,
|
|
56
56
|
entity: event.entity,
|
|
57
57
|
primary: event.id,
|
|
58
58
|
cause: event
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
|
-
});
|
|
61
|
+
}));
|
|
62
62
|
}
|
|
63
63
|
async directCreateHandler(event) {
|
|
64
64
|
const createListeners = this.listenersStore.getCreateListener(event.entity.name);
|
|
65
|
-
createListeners.map((listener) => {
|
|
66
|
-
this.payloadManager.add({
|
|
65
|
+
await Promise.all(createListeners.map((listener) => {
|
|
66
|
+
return this.payloadManager.add({
|
|
67
67
|
listener,
|
|
68
68
|
entity: event.entity,
|
|
69
69
|
primary: event.id,
|
|
70
70
|
cause: event
|
|
71
71
|
});
|
|
72
|
-
});
|
|
72
|
+
}));
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* Collect affected triggers after entity was created or before it was deleted.
|
|
@@ -112,14 +112,14 @@ class TriggerHandler {
|
|
|
112
112
|
}
|
|
113
113
|
async collectDeepChanges(cause, listener, where) {
|
|
114
114
|
const result = await this.changesFetcher.fetch(listener, where);
|
|
115
|
-
|
|
116
|
-
this.payloadManager.add({
|
|
115
|
+
await Promise.all(result.map((row) => {
|
|
116
|
+
return this.payloadManager.add({
|
|
117
117
|
listener,
|
|
118
118
|
entity: listener.rootEntity,
|
|
119
119
|
primary: row,
|
|
120
120
|
cause
|
|
121
121
|
});
|
|
122
|
-
}
|
|
122
|
+
}));
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
exports.TriggerHandler = TriggerHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerHandler.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\
|
|
1
|
+
{"version":3,"file":"TriggerHandler.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\tawait Promise.all(updateListeners.map(listener => {\n\t\t\tif (event.data.some(it => listener.fields.has(it.fieldName) && it.value !== it.old)) {\n\t\t\t\treturn this.payloadManager.add({\n\t\t\t\t\tlistener,\n\t\t\t\t\tentity: event.entity,\n\t\t\t\t\tprimary: event.id,\n\t\t\t\t\tcause: event,\n\t\t\t\t})\n\t\t\t}\n\t\t}))\n\t}\n\n\tprivate async directCreateHandler(event: AfterInsertEvent) {\n\t\tconst createListeners = this.listenersStore.getCreateListener(event.entity.name)\n\t\tawait Promise.all(createListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\n\t/**\n\t * Collect affected triggers after entity was created or before it was deleted.\n\t * todo: after insert, it should probably check only owning relations, because other relations are connected later, so it would be always empty\n\t */\n\tprivate async indirectChangesEntityHandler(event: BeforeDeleteEvent | AfterInsertEvent) {\n\t\t//\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => this.collectDeepChanges(event, listener, {\n\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t}))\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async indirectChangesRelationHandler(event: BeforeUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'relations')\n\t}\n\n\tprivate async indirectChangesUpdatesHandler(event: AfterUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'fields')\n\t}\n\tprivate async indirectChangesUpdatesHandlerInner(event: AfterUpdateEvent | BeforeUpdateEvent, type: 'fields' | 'relations') {\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => {\n\t\t\tif (event.data.some(val => listener[type].has(val.fieldName) && (!('old' in val) || val.value !== val.old))) {\n\t\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async junctionHandler(event: AfterJunctionUpdateEvent) {\n\t\tconst listeners = this.listenersStore.getJunctionListeners(event.owningEntity.name, event.owningRelation.name)\n\t\tconst promises = listeners.map(listener => {\n\t\t\tconst primary = listener.context.type === 'owning'\n\t\t\t\t? event.owningId\n\t\t\t\t: event.inverseId\n\t\t\tconst entity = listener.context.entity\n\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t[entity.primary]: { eq: primary },\n\t\t\t})\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\n\tprivate async collectDeepChanges(\n\t\tcause: EventCause,\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t) {\n\t\tconst result = await this.changesFetcher.fetch(listener, where)\n\t\tawait Promise.all(result.map(row => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: listener.rootEntity,\n\t\t\t\tprimary: row,\n\t\t\t\tcause,\n\t\t\t})\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -47,27 +47,27 @@ class TriggerHandler {
|
|
|
47
47
|
}
|
|
48
48
|
async directUpdateHandler(event) {
|
|
49
49
|
const updateListeners = this.listenersStore.getUpdateListeners(event.entity.name);
|
|
50
|
-
updateListeners.map((listener) => {
|
|
50
|
+
await Promise.all(updateListeners.map((listener) => {
|
|
51
51
|
if (event.data.some((it) => listener.fields.has(it.fieldName) && it.value !== it.old)) {
|
|
52
|
-
this.payloadManager.add({
|
|
52
|
+
return this.payloadManager.add({
|
|
53
53
|
listener,
|
|
54
54
|
entity: event.entity,
|
|
55
55
|
primary: event.id,
|
|
56
56
|
cause: event
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
});
|
|
59
|
+
}));
|
|
60
60
|
}
|
|
61
61
|
async directCreateHandler(event) {
|
|
62
62
|
const createListeners = this.listenersStore.getCreateListener(event.entity.name);
|
|
63
|
-
createListeners.map((listener) => {
|
|
64
|
-
this.payloadManager.add({
|
|
63
|
+
await Promise.all(createListeners.map((listener) => {
|
|
64
|
+
return this.payloadManager.add({
|
|
65
65
|
listener,
|
|
66
66
|
entity: event.entity,
|
|
67
67
|
primary: event.id,
|
|
68
68
|
cause: event
|
|
69
69
|
});
|
|
70
|
-
});
|
|
70
|
+
}));
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
73
|
* Collect affected triggers after entity was created or before it was deleted.
|
|
@@ -110,14 +110,14 @@ class TriggerHandler {
|
|
|
110
110
|
}
|
|
111
111
|
async collectDeepChanges(cause, listener, where) {
|
|
112
112
|
const result = await this.changesFetcher.fetch(listener, where);
|
|
113
|
-
|
|
114
|
-
this.payloadManager.add({
|
|
113
|
+
await Promise.all(result.map((row) => {
|
|
114
|
+
return this.payloadManager.add({
|
|
115
115
|
listener,
|
|
116
116
|
entity: listener.rootEntity,
|
|
117
117
|
primary: row,
|
|
118
118
|
cause
|
|
119
119
|
});
|
|
120
|
-
}
|
|
120
|
+
}));
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerHandler.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\
|
|
1
|
+
{"version":3,"file":"TriggerHandler.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\tawait Promise.all(updateListeners.map(listener => {\n\t\t\tif (event.data.some(it => listener.fields.has(it.fieldName) && it.value !== it.old)) {\n\t\t\t\treturn this.payloadManager.add({\n\t\t\t\t\tlistener,\n\t\t\t\t\tentity: event.entity,\n\t\t\t\t\tprimary: event.id,\n\t\t\t\t\tcause: event,\n\t\t\t\t})\n\t\t\t}\n\t\t}))\n\t}\n\n\tprivate async directCreateHandler(event: AfterInsertEvent) {\n\t\tconst createListeners = this.listenersStore.getCreateListener(event.entity.name)\n\t\tawait Promise.all(createListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\n\t/**\n\t * Collect affected triggers after entity was created or before it was deleted.\n\t * todo: after insert, it should probably check only owning relations, because other relations are connected later, so it would be always empty\n\t */\n\tprivate async indirectChangesEntityHandler(event: BeforeDeleteEvent | AfterInsertEvent) {\n\t\t//\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => this.collectDeepChanges(event, listener, {\n\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t}))\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async indirectChangesRelationHandler(event: BeforeUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'relations')\n\t}\n\n\tprivate async indirectChangesUpdatesHandler(event: AfterUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'fields')\n\t}\n\tprivate async indirectChangesUpdatesHandlerInner(event: AfterUpdateEvent | BeforeUpdateEvent, type: 'fields' | 'relations') {\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => {\n\t\t\tif (event.data.some(val => listener[type].has(val.fieldName) && (!('old' in val) || val.value !== val.old))) {\n\t\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async junctionHandler(event: AfterJunctionUpdateEvent) {\n\t\tconst listeners = this.listenersStore.getJunctionListeners(event.owningEntity.name, event.owningRelation.name)\n\t\tconst promises = listeners.map(listener => {\n\t\t\tconst primary = listener.context.type === 'owning'\n\t\t\t\t? event.owningId\n\t\t\t\t: event.inverseId\n\t\t\tconst entity = listener.context.entity\n\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t[entity.primary]: { eq: primary },\n\t\t\t})\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\n\tprivate async collectDeepChanges(\n\t\tcause: EventCause,\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t) {\n\t\tconst result = await this.changesFetcher.fetch(listener, where)\n\t\tawait Promise.all(result.map(row => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: listener.rootEntity,\n\t\t\t\tprimary: row,\n\t\t\t\tcause,\n\t\t\t})\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -49,27 +49,27 @@ class TriggerHandler {
|
|
|
49
49
|
}
|
|
50
50
|
async directUpdateHandler(event) {
|
|
51
51
|
const updateListeners = this.listenersStore.getUpdateListeners(event.entity.name);
|
|
52
|
-
updateListeners.map((listener) => {
|
|
52
|
+
await Promise.all(updateListeners.map((listener) => {
|
|
53
53
|
if (event.data.some((it) => listener.fields.has(it.fieldName) && it.value !== it.old)) {
|
|
54
|
-
this.payloadManager.add({
|
|
54
|
+
return this.payloadManager.add({
|
|
55
55
|
listener,
|
|
56
56
|
entity: event.entity,
|
|
57
57
|
primary: event.id,
|
|
58
58
|
cause: event
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
|
-
});
|
|
61
|
+
}));
|
|
62
62
|
}
|
|
63
63
|
async directCreateHandler(event) {
|
|
64
64
|
const createListeners = this.listenersStore.getCreateListener(event.entity.name);
|
|
65
|
-
createListeners.map((listener) => {
|
|
66
|
-
this.payloadManager.add({
|
|
65
|
+
await Promise.all(createListeners.map((listener) => {
|
|
66
|
+
return this.payloadManager.add({
|
|
67
67
|
listener,
|
|
68
68
|
entity: event.entity,
|
|
69
69
|
primary: event.id,
|
|
70
70
|
cause: event
|
|
71
71
|
});
|
|
72
|
-
});
|
|
72
|
+
}));
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* Collect affected triggers after entity was created or before it was deleted.
|
|
@@ -112,14 +112,14 @@ class TriggerHandler {
|
|
|
112
112
|
}
|
|
113
113
|
async collectDeepChanges(cause, listener, where) {
|
|
114
114
|
const result = await this.changesFetcher.fetch(listener, where);
|
|
115
|
-
|
|
116
|
-
this.payloadManager.add({
|
|
115
|
+
await Promise.all(result.map((row) => {
|
|
116
|
+
return this.payloadManager.add({
|
|
117
117
|
listener,
|
|
118
118
|
entity: listener.rootEntity,
|
|
119
119
|
primary: row,
|
|
120
120
|
cause
|
|
121
121
|
});
|
|
122
|
-
}
|
|
122
|
+
}));
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
exports.TriggerHandler = TriggerHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerHandler.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\
|
|
1
|
+
{"version":3,"file":"TriggerHandler.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\tawait Promise.all(updateListeners.map(listener => {\n\t\t\tif (event.data.some(it => listener.fields.has(it.fieldName) && it.value !== it.old)) {\n\t\t\t\treturn this.payloadManager.add({\n\t\t\t\t\tlistener,\n\t\t\t\t\tentity: event.entity,\n\t\t\t\t\tprimary: event.id,\n\t\t\t\t\tcause: event,\n\t\t\t\t})\n\t\t\t}\n\t\t}))\n\t}\n\n\tprivate async directCreateHandler(event: AfterInsertEvent) {\n\t\tconst createListeners = this.listenersStore.getCreateListener(event.entity.name)\n\t\tawait Promise.all(createListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\n\t/**\n\t * Collect affected triggers after entity was created or before it was deleted.\n\t * todo: after insert, it should probably check only owning relations, because other relations are connected later, so it would be always empty\n\t */\n\tprivate async indirectChangesEntityHandler(event: BeforeDeleteEvent | AfterInsertEvent) {\n\t\t//\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => this.collectDeepChanges(event, listener, {\n\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t}))\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async indirectChangesRelationHandler(event: BeforeUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'relations')\n\t}\n\n\tprivate async indirectChangesUpdatesHandler(event: AfterUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'fields')\n\t}\n\tprivate async indirectChangesUpdatesHandlerInner(event: AfterUpdateEvent | BeforeUpdateEvent, type: 'fields' | 'relations') {\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => {\n\t\t\tif (event.data.some(val => listener[type].has(val.fieldName) && (!('old' in val) || val.value !== val.old))) {\n\t\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async junctionHandler(event: AfterJunctionUpdateEvent) {\n\t\tconst listeners = this.listenersStore.getJunctionListeners(event.owningEntity.name, event.owningRelation.name)\n\t\tconst promises = listeners.map(listener => {\n\t\t\tconst primary = listener.context.type === 'owning'\n\t\t\t\t? event.owningId\n\t\t\t\t: event.inverseId\n\t\t\tconst entity = listener.context.entity\n\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t[entity.primary]: { eq: primary },\n\t\t\t})\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\n\tprivate async collectDeepChanges(\n\t\tcause: EventCause,\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t) {\n\t\tconst result = await this.changesFetcher.fetch(listener, where)\n\t\tawait Promise.all(result.map(row => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: listener.rootEntity,\n\t\t\t\tprimary: row,\n\t\t\t\tcause,\n\t\t\t})\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -47,27 +47,27 @@ class TriggerHandler {
|
|
|
47
47
|
}
|
|
48
48
|
async directUpdateHandler(event) {
|
|
49
49
|
const updateListeners = this.listenersStore.getUpdateListeners(event.entity.name);
|
|
50
|
-
updateListeners.map((listener) => {
|
|
50
|
+
await Promise.all(updateListeners.map((listener) => {
|
|
51
51
|
if (event.data.some((it) => listener.fields.has(it.fieldName) && it.value !== it.old)) {
|
|
52
|
-
this.payloadManager.add({
|
|
52
|
+
return this.payloadManager.add({
|
|
53
53
|
listener,
|
|
54
54
|
entity: event.entity,
|
|
55
55
|
primary: event.id,
|
|
56
56
|
cause: event
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
});
|
|
59
|
+
}));
|
|
60
60
|
}
|
|
61
61
|
async directCreateHandler(event) {
|
|
62
62
|
const createListeners = this.listenersStore.getCreateListener(event.entity.name);
|
|
63
|
-
createListeners.map((listener) => {
|
|
64
|
-
this.payloadManager.add({
|
|
63
|
+
await Promise.all(createListeners.map((listener) => {
|
|
64
|
+
return this.payloadManager.add({
|
|
65
65
|
listener,
|
|
66
66
|
entity: event.entity,
|
|
67
67
|
primary: event.id,
|
|
68
68
|
cause: event
|
|
69
69
|
});
|
|
70
|
-
});
|
|
70
|
+
}));
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
73
|
* Collect affected triggers after entity was created or before it was deleted.
|
|
@@ -110,14 +110,14 @@ class TriggerHandler {
|
|
|
110
110
|
}
|
|
111
111
|
async collectDeepChanges(cause, listener, where) {
|
|
112
112
|
const result = await this.changesFetcher.fetch(listener, where);
|
|
113
|
-
|
|
114
|
-
this.payloadManager.add({
|
|
113
|
+
await Promise.all(result.map((row) => {
|
|
114
|
+
return this.payloadManager.add({
|
|
115
115
|
listener,
|
|
116
116
|
entity: listener.rootEntity,
|
|
117
117
|
primary: row,
|
|
118
118
|
cause
|
|
119
119
|
});
|
|
120
|
-
}
|
|
120
|
+
}));
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerHandler.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\
|
|
1
|
+
{"version":3,"file":"TriggerHandler.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerHandler.ts"],"sourcesContent":["import {\n\tAfterInsertEvent,\n\tAfterJunctionUpdateEvent,\n\tAfterUpdateEvent,\n\tBeforeDeleteEvent,\n\tBeforeUpdateEvent,\n\tEventManager,\n} from '@contember/engine-content-api'\nimport { Input } from '@contember/schema'\nimport { IndirectListener, JunctionListener, TriggerListenersStore } from './TriggerListenersStore'\nimport { TriggerPayloadManager } from './TriggerPayloadManager'\nimport { TriggerIndirectChangesFetcher } from './TriggerIndirectChangesFetcher'\n\nexport type EventCause =\n\t| BeforeUpdateEvent\n\t| AfterUpdateEvent\n\t| BeforeDeleteEvent\n\t| AfterInsertEvent\n\t| AfterJunctionUpdateEvent\n\nexport class TriggerHandler {\n\tconstructor(\n\t\tprivate readonly payloadManager: TriggerPayloadManager,\n\t\tprivate readonly listenersStore: TriggerListenersStore,\n\t\tprivate readonly changesFetcher: TriggerIndirectChangesFetcher,\n\t) {\n\t}\n\n\tattach(evm: EventManager) {\n\t\tevm.listen('BeforeDeleteEvent', async event => {\n\t\t\tawait this.directDeleteHandler(event)\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t})\n\t\tevm.listen('AfterInsertEvent', async event => {\n\t\t\tawait this.indirectChangesEntityHandler(event)\n\t\t\tawait this.directCreateHandler(event)\n\t\t})\n\t\tevm.listen('BeforeUpdateEvent', async event => {\n\t\t\tawait this.indirectChangesRelationHandler(event)\n\t\t})\n\t\tevm.listen('AfterUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.indirectChangesUpdatesHandler(event)\n\t\t\t\tawait this.directUpdateHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('AfterJunctionUpdateEvent', async event => {\n\t\t\tif (event.hasChanges) {\n\t\t\t\tawait this.junctionHandler(event)\n\t\t\t}\n\t\t})\n\t\tevm.listen('BeforeCommitEvent', async event => {\n\t\t\tawait this.payloadManager.persist()\n\t\t})\n\t}\n\n\tprivate async directDeleteHandler(event: BeforeDeleteEvent) {\n\t\tconst deleteListeners = this.listenersStore.getDeleteListener(event.entity.name)\n\t\tif (!deleteListeners) {\n\t\t\treturn\n\t\t}\n\t\tawait Promise.all(deleteListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\tprivate async directUpdateHandler(event: AfterUpdateEvent) {\n\t\tconst updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)\n\t\tawait Promise.all(updateListeners.map(listener => {\n\t\t\tif (event.data.some(it => listener.fields.has(it.fieldName) && it.value !== it.old)) {\n\t\t\t\treturn this.payloadManager.add({\n\t\t\t\t\tlistener,\n\t\t\t\t\tentity: event.entity,\n\t\t\t\t\tprimary: event.id,\n\t\t\t\t\tcause: event,\n\t\t\t\t})\n\t\t\t}\n\t\t}))\n\t}\n\n\tprivate async directCreateHandler(event: AfterInsertEvent) {\n\t\tconst createListeners = this.listenersStore.getCreateListener(event.entity.name)\n\t\tawait Promise.all(createListeners.map(listener => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: event.entity,\n\t\t\t\tprimary: event.id,\n\t\t\t\tcause: event,\n\t\t\t})\n\t\t}))\n\t}\n\n\n\t/**\n\t * Collect affected triggers after entity was created or before it was deleted.\n\t * todo: after insert, it should probably check only owning relations, because other relations are connected later, so it would be always empty\n\t */\n\tprivate async indirectChangesEntityHandler(event: BeforeDeleteEvent | AfterInsertEvent) {\n\t\t//\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => this.collectDeepChanges(event, listener, {\n\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t}))\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async indirectChangesRelationHandler(event: BeforeUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'relations')\n\t}\n\n\tprivate async indirectChangesUpdatesHandler(event: AfterUpdateEvent) {\n\t\tawait this.indirectChangesUpdatesHandlerInner(event, 'fields')\n\t}\n\tprivate async indirectChangesUpdatesHandlerInner(event: AfterUpdateEvent | BeforeUpdateEvent, type: 'fields' | 'relations') {\n\t\tconst indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)\n\t\tconst promises = indirectEntityListeners.map(listener => {\n\t\t\tif (event.data.some(val => listener[type].has(val.fieldName) && (!('old' in val) || val.value !== val.old))) {\n\t\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t\t[event.entity.primary]: { eq: event.id },\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\tprivate async junctionHandler(event: AfterJunctionUpdateEvent) {\n\t\tconst listeners = this.listenersStore.getJunctionListeners(event.owningEntity.name, event.owningRelation.name)\n\t\tconst promises = listeners.map(listener => {\n\t\t\tconst primary = listener.context.type === 'owning'\n\t\t\t\t? event.owningId\n\t\t\t\t: event.inverseId\n\t\t\tconst entity = listener.context.entity\n\t\t\treturn this.collectDeepChanges(event, listener, {\n\t\t\t\t[entity.primary]: { eq: primary },\n\t\t\t})\n\t\t})\n\t\tawait Promise.all(promises)\n\t}\n\n\n\tprivate async collectDeepChanges(\n\t\tcause: EventCause,\n\t\tlistener: IndirectListener | JunctionListener,\n\t\twhere: Input.Where,\n\t) {\n\t\tconst result = await this.changesFetcher.fetch(listener, where)\n\t\tawait Promise.all(result.map(row => {\n\t\t\treturn this.payloadManager.add({\n\t\t\t\tlistener,\n\t\t\t\tentity: listener.rootEntity,\n\t\t\t\tprimary: row,\n\t\t\t\tcause,\n\t\t\t})\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":"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"}
|