interaqt 0.1.0

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.
Files changed (214) hide show
  1. package/README.md +53 -0
  2. package/dist/index.d.ts +4 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +4 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/runtime/ActivityCall.d.ts +68 -0
  7. package/dist/runtime/ActivityCall.d.ts.map +1 -0
  8. package/dist/runtime/ActivityCall.js +379 -0
  9. package/dist/runtime/ActivityCall.js.map +1 -0
  10. package/dist/runtime/Controller.d.ts +60 -0
  11. package/dist/runtime/Controller.d.ts.map +1 -0
  12. package/dist/runtime/Controller.js +225 -0
  13. package/dist/runtime/Controller.js.map +1 -0
  14. package/dist/runtime/InteractionCall.d.ts +102 -0
  15. package/dist/runtime/InteractionCall.d.ts.map +1 -0
  16. package/dist/runtime/InteractionCall.js +385 -0
  17. package/dist/runtime/InteractionCall.js.map +1 -0
  18. package/dist/runtime/MonoSystem.d.ts +26 -0
  19. package/dist/runtime/MonoSystem.d.ts.map +1 -0
  20. package/dist/runtime/MonoSystem.js +331 -0
  21. package/dist/runtime/MonoSystem.js.map +1 -0
  22. package/dist/runtime/Mysql.d.ts +35 -0
  23. package/dist/runtime/Mysql.d.ts.map +1 -0
  24. package/dist/runtime/Mysql.js +171 -0
  25. package/dist/runtime/Mysql.js.map +1 -0
  26. package/dist/runtime/PostgreSQL.d.ts +36 -0
  27. package/dist/runtime/PostgreSQL.d.ts.map +1 -0
  28. package/dist/runtime/PostgreSQL.js +172 -0
  29. package/dist/runtime/PostgreSQL.js.map +1 -0
  30. package/dist/runtime/SQLite.d.ts +34 -0
  31. package/dist/runtime/SQLite.d.ts.map +1 -0
  32. package/dist/runtime/SQLite.js +146 -0
  33. package/dist/runtime/SQLite.js.map +1 -0
  34. package/dist/runtime/Scheduler.d.ts +81 -0
  35. package/dist/runtime/Scheduler.d.ts.map +1 -0
  36. package/dist/runtime/Scheduler.js +457 -0
  37. package/dist/runtime/Scheduler.js.map +1 -0
  38. package/dist/runtime/System.d.ts +312 -0
  39. package/dist/runtime/System.d.ts.map +1 -0
  40. package/dist/runtime/System.js +90 -0
  41. package/dist/runtime/System.js.map +1 -0
  42. package/dist/runtime/asyncInteractionContext.d.ts +3 -0
  43. package/dist/runtime/asyncInteractionContext.d.ts.map +1 -0
  44. package/dist/runtime/asyncInteractionContext.js +3 -0
  45. package/dist/runtime/asyncInteractionContext.js.map +1 -0
  46. package/dist/runtime/boolExpression.d.ts +23 -0
  47. package/dist/runtime/boolExpression.d.ts.map +1 -0
  48. package/dist/runtime/boolExpression.js +43 -0
  49. package/dist/runtime/boolExpression.js.map +1 -0
  50. package/dist/runtime/computedDataHandles/Any.d.ts +52 -0
  51. package/dist/runtime/computedDataHandles/Any.d.ts.map +1 -0
  52. package/dist/runtime/computedDataHandles/Any.js +152 -0
  53. package/dist/runtime/computedDataHandles/Any.js.map +1 -0
  54. package/dist/runtime/computedDataHandles/Computation.d.ts +108 -0
  55. package/dist/runtime/computedDataHandles/Computation.d.ts.map +1 -0
  56. package/dist/runtime/computedDataHandles/Computation.js +49 -0
  57. package/dist/runtime/computedDataHandles/Computation.js.map +1 -0
  58. package/dist/runtime/computedDataHandles/ComputedDataHandle.d.ts +42 -0
  59. package/dist/runtime/computedDataHandles/ComputedDataHandle.d.ts.map +1 -0
  60. package/dist/runtime/computedDataHandles/ComputedDataHandle.js +4 -0
  61. package/dist/runtime/computedDataHandles/ComputedDataHandle.js.map +1 -0
  62. package/dist/runtime/computedDataHandles/Count.d.ts +45 -0
  63. package/dist/runtime/computedDataHandles/Count.d.ts.map +1 -0
  64. package/dist/runtime/computedDataHandles/Count.js +85 -0
  65. package/dist/runtime/computedDataHandles/Count.js.map +1 -0
  66. package/dist/runtime/computedDataHandles/Every.d.ts +56 -0
  67. package/dist/runtime/computedDataHandles/Every.d.ts.map +1 -0
  68. package/dist/runtime/computedDataHandles/Every.js +178 -0
  69. package/dist/runtime/computedDataHandles/Every.js.map +1 -0
  70. package/dist/runtime/computedDataHandles/StateMachine.d.ts +74 -0
  71. package/dist/runtime/computedDataHandles/StateMachine.d.ts.map +1 -0
  72. package/dist/runtime/computedDataHandles/StateMachine.js +180 -0
  73. package/dist/runtime/computedDataHandles/StateMachine.js.map +1 -0
  74. package/dist/runtime/computedDataHandles/Transform.d.ts +26 -0
  75. package/dist/runtime/computedDataHandles/Transform.d.ts.map +1 -0
  76. package/dist/runtime/computedDataHandles/Transform.js +106 -0
  77. package/dist/runtime/computedDataHandles/Transform.js.map +1 -0
  78. package/dist/runtime/computedDataHandles/TransitionFinder.d.ts +57 -0
  79. package/dist/runtime/computedDataHandles/TransitionFinder.d.ts.map +1 -0
  80. package/dist/runtime/computedDataHandles/TransitionFinder.js +40 -0
  81. package/dist/runtime/computedDataHandles/TransitionFinder.js.map +1 -0
  82. package/dist/runtime/computedDataHandles/WeightedSummation.d.ts +57 -0
  83. package/dist/runtime/computedDataHandles/WeightedSummation.d.ts.map +1 -0
  84. package/dist/runtime/computedDataHandles/WeightedSummation.js +146 -0
  85. package/dist/runtime/computedDataHandles/WeightedSummation.js.map +1 -0
  86. package/dist/runtime/computedDataHandles/index.d.ts +7 -0
  87. package/dist/runtime/computedDataHandles/index.d.ts.map +1 -0
  88. package/dist/runtime/computedDataHandles/index.js +7 -0
  89. package/dist/runtime/computedDataHandles/index.js.map +1 -0
  90. package/dist/runtime/index.d.ts +15 -0
  91. package/dist/runtime/index.d.ts.map +1 -0
  92. package/dist/runtime/index.js +15 -0
  93. package/dist/runtime/index.js.map +1 -0
  94. package/dist/runtime/server.d.ts +35 -0
  95. package/dist/runtime/server.d.ts.map +1 -0
  96. package/dist/runtime/server.js +171 -0
  97. package/dist/runtime/server.js.map +1 -0
  98. package/dist/runtime/types/boolExpression.d.ts +22 -0
  99. package/dist/runtime/types/boolExpression.d.ts.map +1 -0
  100. package/dist/runtime/types/boolExpression.js +6 -0
  101. package/dist/runtime/types/boolExpression.js.map +1 -0
  102. package/dist/runtime/util.d.ts +10 -0
  103. package/dist/runtime/util.d.ts.map +1 -0
  104. package/dist/runtime/util.js +39 -0
  105. package/dist/runtime/util.js.map +1 -0
  106. package/dist/shared/BoolExp.d.ts +97 -0
  107. package/dist/shared/BoolExp.d.ts.map +1 -0
  108. package/dist/shared/BoolExp.js +252 -0
  109. package/dist/shared/BoolExp.js.map +1 -0
  110. package/dist/shared/activity/Activity.d.ts +465 -0
  111. package/dist/shared/activity/Activity.d.ts.map +1 -0
  112. package/dist/shared/activity/Activity.js +264 -0
  113. package/dist/shared/activity/Activity.js.map +1 -0
  114. package/dist/shared/activity/Condition.d.ts +75 -0
  115. package/dist/shared/activity/Condition.d.ts.map +1 -0
  116. package/dist/shared/activity/Condition.js +51 -0
  117. package/dist/shared/activity/Condition.js.map +1 -0
  118. package/dist/shared/activity/Data.d.ts +115 -0
  119. package/dist/shared/activity/Data.d.ts.map +1 -0
  120. package/dist/shared/activity/Data.js +89 -0
  121. package/dist/shared/activity/Data.js.map +1 -0
  122. package/dist/shared/attributive.d.ts +93 -0
  123. package/dist/shared/attributive.d.ts.map +1 -0
  124. package/dist/shared/attributive.js +59 -0
  125. package/dist/shared/attributive.js.map +1 -0
  126. package/dist/shared/computed.d.ts +607 -0
  127. package/dist/shared/computed.d.ts.map +1 -0
  128. package/dist/shared/computed.js +202 -0
  129. package/dist/shared/computed.js.map +1 -0
  130. package/dist/shared/createClass.d.ts +102 -0
  131. package/dist/shared/createClass.d.ts.map +1 -0
  132. package/dist/shared/createClass.js +276 -0
  133. package/dist/shared/createClass.js.map +1 -0
  134. package/dist/shared/dictionary/Dictionary.d.ts +40 -0
  135. package/dist/shared/dictionary/Dictionary.d.ts.map +1 -0
  136. package/dist/shared/dictionary/Dictionary.js +51 -0
  137. package/dist/shared/dictionary/Dictionary.js.map +1 -0
  138. package/dist/shared/entity/Entity.d.ts +149 -0
  139. package/dist/shared/entity/Entity.d.ts.map +1 -0
  140. package/dist/shared/entity/Entity.js +226 -0
  141. package/dist/shared/entity/Entity.js.map +1 -0
  142. package/dist/shared/index.d.ts +11 -0
  143. package/dist/shared/index.d.ts.map +1 -0
  144. package/dist/shared/index.js +11 -0
  145. package/dist/shared/index.js.map +1 -0
  146. package/dist/shared/user/User.d.ts +21 -0
  147. package/dist/shared/user/User.d.ts.map +1 -0
  148. package/dist/shared/user/User.js +11 -0
  149. package/dist/shared/user/User.js.map +1 -0
  150. package/dist/shared/utils.d.ts +11 -0
  151. package/dist/shared/utils.d.ts.map +1 -0
  152. package/dist/shared/utils.js +19 -0
  153. package/dist/shared/utils.js.map +1 -0
  154. package/dist/storage/erstorage/AttributeInfo.d.ts +40 -0
  155. package/dist/storage/erstorage/AttributeInfo.d.ts.map +1 -0
  156. package/dist/storage/erstorage/AttributeInfo.js +147 -0
  157. package/dist/storage/erstorage/AttributeInfo.js.map +1 -0
  158. package/dist/storage/erstorage/AttributeQuery.d.ts +33 -0
  159. package/dist/storage/erstorage/AttributeQuery.d.ts.map +1 -0
  160. package/dist/storage/erstorage/AttributeQuery.js +190 -0
  161. package/dist/storage/erstorage/AttributeQuery.js.map +1 -0
  162. package/dist/storage/erstorage/EntityQueryHandle.d.ts +29 -0
  163. package/dist/storage/erstorage/EntityQueryHandle.d.ts.map +1 -0
  164. package/dist/storage/erstorage/EntityQueryHandle.js +78 -0
  165. package/dist/storage/erstorage/EntityQueryHandle.js.map +1 -0
  166. package/dist/storage/erstorage/EntityToTableMap.d.ts +85 -0
  167. package/dist/storage/erstorage/EntityToTableMap.d.ts.map +1 -0
  168. package/dist/storage/erstorage/EntityToTableMap.js +262 -0
  169. package/dist/storage/erstorage/EntityToTableMap.js.map +1 -0
  170. package/dist/storage/erstorage/LinkInfo.d.ts +35 -0
  171. package/dist/storage/erstorage/LinkInfo.d.ts.map +1 -0
  172. package/dist/storage/erstorage/LinkInfo.js +89 -0
  173. package/dist/storage/erstorage/LinkInfo.js.map +1 -0
  174. package/dist/storage/erstorage/MatchExp.d.ts +37 -0
  175. package/dist/storage/erstorage/MatchExp.d.ts.map +1 -0
  176. package/dist/storage/erstorage/MatchExp.js +211 -0
  177. package/dist/storage/erstorage/MatchExp.js.map +1 -0
  178. package/dist/storage/erstorage/Modifier.d.ts +23 -0
  179. package/dist/storage/erstorage/Modifier.d.ts.map +1 -0
  180. package/dist/storage/erstorage/Modifier.js +24 -0
  181. package/dist/storage/erstorage/Modifier.js.map +1 -0
  182. package/dist/storage/erstorage/NewRecordData.d.ts +42 -0
  183. package/dist/storage/erstorage/NewRecordData.d.ts.map +1 -0
  184. package/dist/storage/erstorage/NewRecordData.js +178 -0
  185. package/dist/storage/erstorage/NewRecordData.js.map +1 -0
  186. package/dist/storage/erstorage/RecordInfo.d.ts +26 -0
  187. package/dist/storage/erstorage/RecordInfo.d.ts.map +1 -0
  188. package/dist/storage/erstorage/RecordInfo.js +111 -0
  189. package/dist/storage/erstorage/RecordInfo.js.map +1 -0
  190. package/dist/storage/erstorage/RecordQuery.d.ts +73 -0
  191. package/dist/storage/erstorage/RecordQuery.d.ts.map +1 -0
  192. package/dist/storage/erstorage/RecordQuery.js +158 -0
  193. package/dist/storage/erstorage/RecordQuery.js.map +1 -0
  194. package/dist/storage/erstorage/RecordQueryAgent.d.ts +84 -0
  195. package/dist/storage/erstorage/RecordQueryAgent.d.ts.map +1 -0
  196. package/dist/storage/erstorage/RecordQueryAgent.js +1130 -0
  197. package/dist/storage/erstorage/RecordQueryAgent.js.map +1 -0
  198. package/dist/storage/erstorage/Setup.d.ts +49 -0
  199. package/dist/storage/erstorage/Setup.d.ts.map +1 -0
  200. package/dist/storage/erstorage/Setup.js +400 -0
  201. package/dist/storage/erstorage/Setup.js.map +1 -0
  202. package/dist/storage/erstorage/util.d.ts +6 -0
  203. package/dist/storage/erstorage/util.d.ts.map +1 -0
  204. package/dist/storage/erstorage/util.js +25 -0
  205. package/dist/storage/erstorage/util.js.map +1 -0
  206. package/dist/storage/index.d.ts +13 -0
  207. package/dist/storage/index.d.ts.map +1 -0
  208. package/dist/storage/index.js +13 -0
  209. package/dist/storage/index.js.map +1 -0
  210. package/dist/storage/utils.d.ts +10 -0
  211. package/dist/storage/utils.d.ts.map +1 -0
  212. package/dist/storage/utils.js +48 -0
  213. package/dist/storage/utils.js.map +1 -0
  214. package/package.json +59 -0
@@ -0,0 +1,457 @@
1
+ import { ComputedDataHandle } from "./computedDataHandles/ComputedDataHandle.js";
2
+ import { assert } from "./util.js";
3
+ import { GlobalBoundState, RecordBoundState } from "./computedDataHandles/Computation.js";
4
+ import { InteractionEventEntity } from "./System.js";
5
+ import { MatchExp } from "@storage";
6
+ export const SKIP_RESULT = Symbol('skip_result');
7
+ export class Scheduler {
8
+ constructor(controller, entities, relations, dict) {
9
+ this.controller = controller;
10
+ this.computations = new Set();
11
+ this.erMutationEventSources = [];
12
+ this.dataSourceMapTree = {};
13
+ const computationInputs = [];
14
+ entities.forEach(entity => {
15
+ if (entity.computedData) {
16
+ computationInputs.push({ dataContext: { type: 'entity', id: entity }, args: entity.computedData });
17
+ }
18
+ // property 的
19
+ entity.properties?.forEach(property => {
20
+ if (property.computedData) {
21
+ computationInputs.push({ dataContext: { type: 'property', host: entity, id: property.name }, args: property.computedData });
22
+ }
23
+ });
24
+ });
25
+ // relation 的
26
+ relations.forEach(relation => {
27
+ const relationAny = relation;
28
+ if (relationAny.computedData) {
29
+ computationInputs.push({ dataContext: { type: 'relation', id: relation }, args: relationAny.computedData });
30
+ }
31
+ if (relationAny.properties) {
32
+ relationAny.properties.forEach((property) => {
33
+ if (property.computedData) {
34
+ computationInputs.push({ dataContext: { type: 'property', host: relation, id: property.name }, args: property.computedData });
35
+ }
36
+ });
37
+ }
38
+ });
39
+ dict.forEach(dictItem => {
40
+ if (dictItem.computedData) {
41
+ computationInputs.push({ dataContext: { type: 'global', id: dictItem.name }, args: dictItem.computedData });
42
+ }
43
+ });
44
+ for (const computation of computationInputs) {
45
+ const dataContext = computation.dataContext;
46
+ const args = computation.args;
47
+ const handles = ComputedDataHandle.Handles;
48
+ const ComputationCtor = handles.get(args.constructor)[dataContext.type];
49
+ assert(!!ComputationCtor, `cannot find Computation handle for ${args.constructor.displayName || args.constructor.name}`);
50
+ this.computations.add(new ComputationCtor(this.controller, args, dataContext));
51
+ }
52
+ }
53
+ createStates() {
54
+ const states = [];
55
+ for (const computation of this.computations) {
56
+ const computationHandle = computation;
57
+ if (computationHandle.createState) {
58
+ const state = computationHandle.createState();
59
+ states.push({ dataContext: computationHandle.dataContext, state });
60
+ computationHandle.state = state;
61
+ for (let stateItem of Object.values(state)) {
62
+ stateItem.controller = this.controller;
63
+ stateItem.controller = this.controller;
64
+ if (stateItem instanceof RecordBoundState) {
65
+ if (computationHandle.dataContext.type === 'property') {
66
+ stateItem.record = computationHandle.dataContext.host.name;
67
+ }
68
+ else {
69
+ stateItem.record = computationHandle.dataContext.id.name;
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
75
+ return states;
76
+ }
77
+ async setupDefaultValues() {
78
+ for (const computation of this.computations) {
79
+ const computationHandle = computation;
80
+ // 0. 创建 defaultValue
81
+ // property 的默认值在 setup 的时候已经创建了。
82
+ if (computationHandle.getDefaultValue) {
83
+ if (computationHandle.dataContext.type !== 'property') {
84
+ const defaultValue = await computationHandle.getDefaultValue();
85
+ await this.controller.applyResult(computationHandle.dataContext, defaultValue);
86
+ }
87
+ else {
88
+ // property computation 也能提供 defaultValue 的能力?
89
+ const property = computationHandle.dataContext.host.properties?.find(property => property.name === computationHandle.dataContext.id);
90
+ if (!property.defaultValue) {
91
+ // FIXME 这里没有支持 getDefaultValue 的 async 模式。会不会有问题???
92
+ property.defaultValue = computationHandle.getDefaultValue();
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ async setupStateDefaultValues() {
99
+ for (const computation of this.computations) {
100
+ const computationHandle = computation;
101
+ // TODO 这里 createState 要放到 setup 前面,因为可能会修改 entity、relation ???
102
+ // 1. 创建计算所需要的 state
103
+ if (computationHandle.state) {
104
+ for (const [stateName, state] of Object.entries(computationHandle.state)) {
105
+ if (state instanceof GlobalBoundState) {
106
+ state.controller = this.controller;
107
+ state.key = `${computationHandle.dataContext.id}_${stateName}`;
108
+ if (typeof state.defaultValue !== undefined) {
109
+ await this.controller.system.storage.set('state', state.key, state.defaultValue);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ async setupMutationListeners() {
117
+ const ERMutationEventSources = [];
118
+ for (const computation of this.computations) {
119
+ // 1. 根据 data deps 计算出 mutation events
120
+ if (this.isDataBasedComputation(computation)) {
121
+ const dataBasedComputation = computation;
122
+ if (dataBasedComputation.dataDeps) {
123
+ ERMutationEventSources.push(...Object.entries(dataBasedComputation.dataDeps).map(([dataDepName, dataDep]) => this.convertDataDepToERMutationEventsSourceMap(dataDepName, dataDep, computation)).flat());
124
+ }
125
+ }
126
+ else {
127
+ // 2. EventBasedComputation 等同于监听
128
+ // - EventEntity 的 create 事件
129
+ // - erMutationEvent 的 create 事件
130
+ // - Action 的 create 事件
131
+ // - Activity 的 create 事件
132
+ // FIXME 增加 ERMutationEvents 的 create 事件
133
+ ERMutationEventSources.push({
134
+ dataDep: {
135
+ type: 'records',
136
+ source: InteractionEventEntity,
137
+ attributeQuery: ['*']
138
+ },
139
+ type: 'create',
140
+ recordName: InteractionEventEntity.name,
141
+ sourceRecordName: InteractionEventEntity.name,
142
+ computation
143
+ });
144
+ }
145
+ }
146
+ // 根据 sourcemap 来执行真正的监听
147
+ this.erMutationEventSources = ERMutationEventSources;
148
+ this.dataSourceMapTree = this.buildDataSourceMapTree(this.erMutationEventSources);
149
+ this.controller.system.storage.listen(async (mutationEvents) => {
150
+ for (let mutationEvent of mutationEvents) {
151
+ const sources = this.dataSourceMapTree[mutationEvent.recordName]?.[mutationEvent.type];
152
+ if (sources) {
153
+ for (const source of sources) {
154
+ if (source.type === 'update') {
155
+ const propAttrs = source.attributes.filter(attr => attr !== 'id');
156
+ if (propAttrs.every(attr => !mutationEvent.record.hasOwnProperty(attr) || (mutationEvent.record[attr] === mutationEvent.oldRecord[attr]))) {
157
+ continue;
158
+ }
159
+ }
160
+ await this.runDirtyRecordsComputation(source, mutationEvent);
161
+ }
162
+ }
163
+ }
164
+ });
165
+ }
166
+ async computeDirtyRecords(source, mutationEvent) {
167
+ if (!source.targetPath?.length) {
168
+ return [mutationEvent.oldRecord ?? mutationEvent.record];
169
+ }
170
+ let dataDepRecords = [];
171
+ if (!source.isRelation) {
172
+ assert(source.type === 'update', 'only support update event for entity');
173
+ dataDepRecords = await this.controller.system.storage.find(source.sourceRecordName, MatchExp.atom({
174
+ key: source.targetPath.concat('id').join('.'),
175
+ value: ['=', mutationEvent.oldRecord?.id ?? mutationEvent.record?.id]
176
+ }));
177
+ }
178
+ else {
179
+ // 2.3. 关联关系的 create/delete 事件,计算出关联关系的增删改最终影响了哪些当前 dataDep
180
+ assert(source.type === 'create' || source.type === 'delete', 'only support create/delete event for relation');
181
+ const relation = this.controller.relations.find(relation => relation.name === source.recordName);
182
+ // FIXME 没考虑 bidirectional 的情况,双向关系死循环了
183
+ const isSource = relation?.sourceProperty === source.targetPath.at(-1);
184
+ const dataDep = source.dataDep;
185
+ if (source.type === 'create') {
186
+ dataDepRecords = await this.controller.system.storage.find(source.sourceRecordName, MatchExp.atom({
187
+ key: source.targetPath.concat('id').join('.'),
188
+ value: ['=', mutationEvent.record[isSource ? 'target' : 'source'].id]
189
+ }), undefined, dataDep.attributeQuery);
190
+ }
191
+ else {
192
+ dataDepRecords = await this.controller.system.storage.find(source.sourceRecordName, MatchExp.atom({
193
+ key: source.targetPath.slice(0, -1).concat('id').join('.'),
194
+ value: ['=', mutationEvent.record[isSource ? 'source' : 'target'].id]
195
+ }), undefined, dataDep.attributeQuery);
196
+ }
197
+ }
198
+ return dataDepRecords;
199
+ }
200
+ computeOldRecord(newRecord, sourceMap, mutationEvent) {
201
+ if (!sourceMap.targetPath?.length) {
202
+ return mutationEvent.oldRecord;
203
+ }
204
+ const result = { ...newRecord };
205
+ const path = [...sourceMap.targetPath];
206
+ const lastAttr = path.pop();
207
+ let pointer = result;
208
+ // 一路浅拷贝
209
+ for (const attr of path) {
210
+ // fIXME Computation 不能跨越 x:n 的集合,所以路径上应该都是对象。
211
+ pointer[attr] = { ...pointer[attr] };
212
+ pointer = pointer[attr];
213
+ }
214
+ if (Array.isArray(pointer[lastAttr])) {
215
+ // 集合
216
+ if (mutationEvent.type === 'delete') {
217
+ pointer[lastAttr] = pointer[lastAttr].concat(mutationEvent.record);
218
+ }
219
+ else if (mutationEvent.type === 'create') {
220
+ pointer[lastAttr] = pointer[lastAttr].filter(item => item.id !== mutationEvent.record.id);
221
+ }
222
+ else if (mutationEvent.type === 'update') {
223
+ pointer[lastAttr] = pointer[lastAttr].map(item => item.id === mutationEvent.oldRecord.id ? { ...item, ...mutationEvent.oldRecord } : item);
224
+ }
225
+ }
226
+ else {
227
+ if (mutationEvent.type === 'delete') {
228
+ pointer[lastAttr] = mutationEvent.record;
229
+ }
230
+ else if (mutationEvent.type === 'create') {
231
+ pointer[lastAttr] = undefined;
232
+ }
233
+ else if (mutationEvent.type === 'update') {
234
+ pointer[lastAttr] = { ...pointer[lastAttr], ...mutationEvent.oldRecord };
235
+ }
236
+ }
237
+ return result;
238
+ }
239
+ async computeDataBasedDirtyRecordsAndEvents(source, mutationEvent) {
240
+ let dirtyRecordsAndEvents = [];
241
+ if (!source.targetPath?.length) {
242
+ dirtyRecordsAndEvents = [[mutationEvent.record, {
243
+ dataDep: source.dataDep,
244
+ ...mutationEvent
245
+ }]];
246
+ }
247
+ else {
248
+ const dataDepRecords = await this.computeDirtyRecords(source, mutationEvent);
249
+ dirtyRecordsAndEvents = dataDepRecords.map(record => [record, {
250
+ dataDep: source.dataDep,
251
+ type: 'update',
252
+ recordName: record.name,
253
+ record: record,
254
+ oldRecord: this.computeOldRecord(record, source, mutationEvent),
255
+ relatedAttribute: source.targetPath,
256
+ relatedMutationEvent: mutationEvent
257
+ }]);
258
+ }
259
+ return dirtyRecordsAndEvents;
260
+ }
261
+ async computeEventBasedDirtyRecordsAndEvents(source, mutationEvent) {
262
+ const eventBasedComputation = source.computation;
263
+ if (eventBasedComputation.computeDirtyRecords) {
264
+ let dirtyRecords = (await eventBasedComputation.computeDirtyRecords(mutationEvent)) || [];
265
+ dirtyRecords = Array.isArray(dirtyRecords) ? dirtyRecords : [dirtyRecords];
266
+ return dirtyRecords.map(record => [record, {
267
+ dataDep: source.dataDep,
268
+ ...mutationEvent
269
+ }]);
270
+ }
271
+ else {
272
+ return [[null, {
273
+ dataDep: source.dataDep,
274
+ ...mutationEvent
275
+ }]];
276
+ }
277
+ }
278
+ isDataBasedComputation(computation) {
279
+ return computation.compute !== undefined;
280
+ }
281
+ async runDirtyRecordsComputation(source, mutationEvent) {
282
+ let dirtyRecordsAndEvents = [];
283
+ if (this.isDataBasedComputation(source.computation)) {
284
+ dirtyRecordsAndEvents = await this.computeDataBasedDirtyRecordsAndEvents(source, mutationEvent);
285
+ }
286
+ else {
287
+ dirtyRecordsAndEvents = await this.computeEventBasedDirtyRecordsAndEvents(source, mutationEvent);
288
+ }
289
+ for (const [record, erRecordMutationEvent] of dirtyRecordsAndEvents) {
290
+ await this.runComputation(source.computation, erRecordMutationEvent, record);
291
+ }
292
+ }
293
+ async runComputation(computation, erRecordMutationEvent, record) {
294
+ if (computation.incrementalCompute) {
295
+ let lastValue = undefined;
296
+ if (computation.useLastValue) {
297
+ lastValue = await this.controller.retrieveLastValue(computation.dataContext, record);
298
+ }
299
+ const result = await computation.incrementalCompute(lastValue, erRecordMutationEvent, record);
300
+ // TODO 应用 result
301
+ await this.controller.applyResult(computation.dataContext, result, record);
302
+ }
303
+ else if (computation.incrementalPatchCompute) {
304
+ let lastValue = undefined;
305
+ if (computation.useLastValue) {
306
+ lastValue = await this.controller.retrieveLastValue(computation.dataContext, record);
307
+ }
308
+ const patch = await computation.incrementalPatchCompute(lastValue, erRecordMutationEvent, record);
309
+ if (patch) {
310
+ await this.controller.applyResultPatch(computation.dataContext, patch, record);
311
+ }
312
+ }
313
+ else {
314
+ const databasedComputation = computation;
315
+ // FIXME 需要注入 dataDeps
316
+ const result = await databasedComputation.compute();
317
+ // TODO 应用 result
318
+ await this.controller.applyResult(databasedComputation.dataContext, result, record);
319
+ }
320
+ }
321
+ buildDataSourceMapTree(sourceMaps) {
322
+ // 两层结构,第一层是 recordName,第二层是 type
323
+ const sourceMapTree = {};
324
+ sourceMaps.forEach(source => {
325
+ if (!sourceMapTree[source.recordName]) {
326
+ sourceMapTree[source.recordName] = {};
327
+ }
328
+ if (!sourceMapTree[source.recordName][source.type]) {
329
+ sourceMapTree[source.recordName][source.type] = [];
330
+ }
331
+ sourceMapTree[source.recordName][source.type].push(source);
332
+ });
333
+ return sourceMapTree;
334
+ }
335
+ convertDataDepToERMutationEventsSourceMap(dataDepName, dataDep, computation, eventType) {
336
+ const ERMutationEventsSource = [];
337
+ if (dataDep.type === 'records') {
338
+ if (!eventType || eventType === 'create') {
339
+ ERMutationEventsSource.push({
340
+ dataDep: dataDep,
341
+ type: 'create',
342
+ recordName: dataDep.source.name,
343
+ sourceRecordName: dataDep.source.name,
344
+ computation
345
+ });
346
+ }
347
+ if (!eventType || eventType === 'delete') {
348
+ ERMutationEventsSource.push({
349
+ dataDep: dataDep,
350
+ type: 'delete',
351
+ recordName: dataDep.source.name,
352
+ sourceRecordName: dataDep.source.name,
353
+ computation
354
+ });
355
+ }
356
+ if (!eventType || eventType === 'update') {
357
+ // 监听 update
358
+ if (dataDep.attributeQuery) {
359
+ ERMutationEventsSource.push(...this.convertAttrsToERMutationEventsSourceMap(dataDep, dataDep.source.name, dataDep.attributeQuery, [], computation));
360
+ }
361
+ }
362
+ }
363
+ else if (dataDep.type === 'property') {
364
+ // 只能监听 update eventType。
365
+ const dataContext = computation.dataContext;
366
+ if (dataDep.attributeQuery) {
367
+ // 注意这里的 recordName 应该是当前数据 entity 的 name,因为依赖的是 property 所在的自身 entity
368
+ ERMutationEventsSource.push(...this.convertAttrsToERMutationEventsSourceMap(dataDep, dataContext.host.name, dataDep.attributeQuery, [], computation));
369
+ }
370
+ }
371
+ else if (dataDep.type === 'global') {
372
+ // TODO global 怎么监听啊
373
+ // 只能监听 update eventType
374
+ }
375
+ return ERMutationEventsSource;
376
+ }
377
+ convertAttrsToERMutationEventsSourceMap(dataDep, baseRecordName, attributes, context, computation) {
378
+ const ERMutationEventsSource = [];
379
+ const primitiveAttr = [];
380
+ const relationQueryAttr = [];
381
+ attributes.forEach(attr => {
382
+ if (typeof attr === 'string' && attr !== '*') {
383
+ primitiveAttr.push(attr);
384
+ }
385
+ else if (attr === '*') {
386
+ // TODO 要读定义
387
+ }
388
+ else if (Array.isArray(attr)) {
389
+ relationQueryAttr.push(attr);
390
+ }
391
+ else {
392
+ throw new Error(`unknown attribute type: ${attr}`);
393
+ }
394
+ });
395
+ // 自身的 attribute update
396
+ if (primitiveAttr.length > 0) {
397
+ let recordName = baseRecordName;
398
+ if (context.length > 0) {
399
+ if (context.at(-1) === '&') {
400
+ recordName = this.controller.system.storage.getRelationName(baseRecordName, context.slice(0, -1).join('.'));
401
+ }
402
+ else {
403
+ recordName = this.controller.system.storage.getEntityName(baseRecordName, context.join('.'));
404
+ }
405
+ }
406
+ ERMutationEventsSource.push({
407
+ dataDep,
408
+ type: 'update',
409
+ recordName,
410
+ sourceRecordName: baseRecordName,
411
+ targetPath: context,
412
+ attributes: primitiveAttr,
413
+ computation
414
+ });
415
+ }
416
+ // 关联 record 字段的更新
417
+ relationQueryAttr.forEach(([attrName, subQuery]) => {
418
+ ERMutationEventsSource.push(...this.convertRelationAttrToERMutationEventsSourceMap(dataDep, baseRecordName, subQuery.attributeQuery, context.concat(attrName), computation));
419
+ });
420
+ return ERMutationEventsSource;
421
+ }
422
+ convertRelationAttrToERMutationEventsSourceMap(dataDep, baseRecordName, subAttrs, context, computation) {
423
+ const ERMutationEventsSource = [];
424
+ if (context.at(-1) !== '&') {
425
+ // 1. 先监听"关联实体关系"的 create/delete
426
+ const realtionRecordName = this.controller.system.storage.getRelationName(baseRecordName, context.join('.'));
427
+ ERMutationEventsSource.push({
428
+ dataDep,
429
+ type: 'create',
430
+ recordName: realtionRecordName,
431
+ sourceRecordName: baseRecordName,
432
+ isRelation: true,
433
+ targetPath: context,
434
+ computation
435
+ }, {
436
+ dataDep,
437
+ type: 'delete',
438
+ recordName: realtionRecordName,
439
+ sourceRecordName: baseRecordName,
440
+ isRelation: true,
441
+ targetPath: context,
442
+ computation
443
+ });
444
+ }
445
+ // 2. 监听关联实体的属性 update
446
+ if (subAttrs.length > 0) {
447
+ ERMutationEventsSource.push(...this.convertAttrsToERMutationEventsSourceMap(dataDep, baseRecordName, subAttrs, context, computation));
448
+ }
449
+ return ERMutationEventsSource;
450
+ }
451
+ async setup() {
452
+ await this.setupDefaultValues();
453
+ await this.setupStateDefaultValues();
454
+ await this.setupMutationListeners();
455
+ }
456
+ }
457
+ //# sourceMappingURL=Scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../src/runtime/Scheduler.ts"],"names":[],"mappings":"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"}