@visactor/vgrammar-core 0.11.0-alpha.1 → 0.11.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.
Files changed (131) hide show
  1. package/cjs/component/label.js.map +1 -1
  2. package/cjs/graph/attributes/line.d.ts +2 -0
  3. package/cjs/graph/attributes/line.js +38 -5
  4. package/cjs/graph/attributes/line.js.map +1 -1
  5. package/cjs/graph/element.js +15 -6
  6. package/cjs/graph/element.js.map +1 -1
  7. package/cjs/graph/enums.d.ts +2 -1
  8. package/cjs/graph/enums.js +1 -1
  9. package/cjs/graph/enums.js.map +1 -1
  10. package/cjs/index.d.ts +1 -1
  11. package/cjs/index.js +1 -1
  12. package/cjs/index.js.map +1 -1
  13. package/cjs/interactions/element-highlight.d.ts +5 -2
  14. package/cjs/interactions/element-highlight.js +8 -23
  15. package/cjs/interactions/element-highlight.js.map +1 -1
  16. package/cjs/interactions/element-select.d.ts +6 -3
  17. package/cjs/interactions/element-select.js +20 -28
  18. package/cjs/interactions/element-select.js.map +1 -1
  19. package/cjs/interactions/filter.js +1 -1
  20. package/cjs/interactions/filter.js.map +1 -1
  21. package/cjs/interactions/fish-eye.js +1 -1
  22. package/cjs/interactions/fish-eye.js.map +1 -1
  23. package/cjs/interactions/index.js +4 -0
  24. package/cjs/interactions/index.js.map +1 -1
  25. package/cjs/interactions/toggle-state-mixin.d.ts +8 -0
  26. package/cjs/interactions/toggle-state-mixin.js +30 -0
  27. package/cjs/interactions/toggle-state-mixin.js.map +1 -0
  28. package/cjs/interactions/utils.d.ts +2 -1
  29. package/cjs/interactions/utils.js +15 -2
  30. package/cjs/interactions/utils.js.map +1 -1
  31. package/cjs/interactions/view-navigation-base.js +1 -1
  32. package/cjs/interactions/view-navigation-base.js.map +1 -1
  33. package/cjs/transforms/data/sampling.js.map +1 -1
  34. package/cjs/types/dataflow.d.ts +1 -2
  35. package/cjs/types/dataflow.js.map +1 -1
  36. package/cjs/types/grammar.d.ts +1 -1
  37. package/cjs/types/grammar.js.map +1 -1
  38. package/cjs/types/interaction.d.ts +4 -0
  39. package/cjs/types/interaction.js.map +1 -1
  40. package/cjs/types/mark.d.ts +1 -1
  41. package/cjs/types/mark.js.map +1 -1
  42. package/cjs/types/plot.d.ts +0 -1
  43. package/cjs/types/plot.js.map +1 -1
  44. package/cjs/types/transform.d.ts +1 -1
  45. package/cjs/types/transform.js.map +1 -1
  46. package/cjs/types/view.d.ts +2 -5
  47. package/cjs/types/view.js.map +1 -1
  48. package/cjs/util/data.d.ts +0 -1
  49. package/cjs/util/data.js +1 -37
  50. package/cjs/util/data.js.map +1 -1
  51. package/cjs/view/View.d.ts +2 -10
  52. package/cjs/view/View.js +15 -99
  53. package/cjs/view/View.js.map +1 -1
  54. package/cjs/view/data.d.ts +1 -2
  55. package/cjs/view/data.js +7 -49
  56. package/cjs/view/data.js.map +1 -1
  57. package/cjs/view/dataflow.d.ts +1 -6
  58. package/cjs/view/dataflow.js +7 -72
  59. package/cjs/view/dataflow.js.map +1 -1
  60. package/cjs/view/grammar-base.d.ts +3 -6
  61. package/cjs/view/grammar-base.js +0 -46
  62. package/cjs/view/grammar-base.js.map +1 -1
  63. package/cjs/view/mark.d.ts +1 -2
  64. package/cjs/view/mark.js +9 -38
  65. package/cjs/view/mark.js.map +1 -1
  66. package/es/component/label.js.map +1 -1
  67. package/es/graph/attributes/line.d.ts +2 -0
  68. package/es/graph/attributes/line.js +34 -5
  69. package/es/graph/attributes/line.js.map +1 -1
  70. package/es/graph/element.js +17 -8
  71. package/es/graph/element.js.map +1 -1
  72. package/es/graph/enums.d.ts +2 -1
  73. package/es/graph/enums.js +1 -1
  74. package/es/graph/enums.js.map +1 -1
  75. package/es/index.d.ts +1 -1
  76. package/es/index.js +1 -1
  77. package/es/index.js.map +1 -1
  78. package/es/interactions/element-highlight.d.ts +5 -2
  79. package/es/interactions/element-highlight.js +9 -22
  80. package/es/interactions/element-highlight.js.map +1 -1
  81. package/es/interactions/element-select.d.ts +6 -3
  82. package/es/interactions/element-select.js +21 -27
  83. package/es/interactions/element-select.js.map +1 -1
  84. package/es/interactions/filter.js +1 -1
  85. package/es/interactions/filter.js.map +1 -1
  86. package/es/interactions/fish-eye.js +1 -1
  87. package/es/interactions/fish-eye.js.map +1 -1
  88. package/es/interactions/index.js +4 -2
  89. package/es/interactions/index.js.map +1 -1
  90. package/es/interactions/toggle-state-mixin.d.ts +8 -0
  91. package/es/interactions/toggle-state-mixin.js +22 -0
  92. package/es/interactions/toggle-state-mixin.js.map +1 -0
  93. package/es/interactions/utils.d.ts +2 -1
  94. package/es/interactions/utils.js +11 -0
  95. package/es/interactions/utils.js.map +1 -1
  96. package/es/interactions/view-navigation-base.js +1 -1
  97. package/es/interactions/view-navigation-base.js.map +1 -1
  98. package/es/transforms/data/sampling.js.map +1 -1
  99. package/es/types/dataflow.d.ts +1 -2
  100. package/es/types/dataflow.js.map +1 -1
  101. package/es/types/grammar.d.ts +1 -1
  102. package/es/types/grammar.js.map +1 -1
  103. package/es/types/interaction.d.ts +4 -0
  104. package/es/types/interaction.js.map +1 -1
  105. package/es/types/mark.d.ts +1 -1
  106. package/es/types/mark.js.map +1 -1
  107. package/es/types/plot.d.ts +0 -1
  108. package/es/types/plot.js.map +1 -1
  109. package/es/types/transform.d.ts +1 -1
  110. package/es/types/transform.js.map +1 -1
  111. package/es/types/view.d.ts +2 -5
  112. package/es/types/view.js.map +1 -1
  113. package/es/util/data.d.ts +0 -1
  114. package/es/util/data.js +0 -34
  115. package/es/util/data.js.map +1 -1
  116. package/es/view/View.d.ts +2 -10
  117. package/es/view/View.js +14 -99
  118. package/es/view/View.js.map +1 -1
  119. package/es/view/data.d.ts +1 -2
  120. package/es/view/data.js +8 -49
  121. package/es/view/data.js.map +1 -1
  122. package/es/view/dataflow.d.ts +1 -6
  123. package/es/view/dataflow.js +7 -72
  124. package/es/view/dataflow.js.map +1 -1
  125. package/es/view/grammar-base.d.ts +3 -6
  126. package/es/view/grammar-base.js +0 -45
  127. package/es/view/grammar-base.js.map +1 -1
  128. package/es/view/mark.d.ts +1 -2
  129. package/es/view/mark.js +8 -39
  130. package/es/view/mark.js.map +1 -1
  131. package/package.json +8 -8
@@ -1,31 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
4
- return new (P || (P = Promise))((function(resolve, reject) {
5
- function fulfilled(value) {
6
- try {
7
- step(generator.next(value));
8
- } catch (e) {
9
- reject(e);
10
- }
11
- }
12
- function rejected(value) {
13
- try {
14
- step(generator.throw(value));
15
- } catch (e) {
16
- reject(e);
17
- }
18
- }
19
- function step(result) {
20
- var value;
21
- result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) {
22
- resolve(value);
23
- }))).then(fulfilled, rejected);
24
- }
25
- step((generator = generator.apply(thisArg, _arguments || [])).next());
26
- }));
27
- };
28
-
29
3
  Object.defineProperty(exports, "__esModule", {
30
4
  value: !0
31
5
  });
@@ -36,17 +10,7 @@ class Dataflow {
36
10
  constructor() {
37
11
  this.grammars = [], this.logger = vutils_1.Logger.getInstance(), this._curRank = 0,
38
12
  this._committed = new unique_list_1.UniqueList((grammar => grammar.uid)), this._heap = new grammar_heap_1.Heap(((a, b) => (null == a ? void 0 : a.qrank) - (null == b ? void 0 : b.qrank))),
39
- this._beforeRunner = null, this._afterRunner = null, this._isRunning = !1, this._updateCounter = 0,
40
- this._finishFirstRender = !1;
41
- }
42
- asyncCallback(callback) {
43
- return __awaiter(this, void 0, void 0, (function*() {
44
- try {
45
- yield callback(this);
46
- } catch (err) {
47
- this.logger.error(err);
48
- }
49
- }));
13
+ this._beforeRunner = null, this._afterRunner = null, this._updateCounter = 0, this._finishFirstRender = !1;
50
14
  }
51
15
  add(grammar) {
52
16
  if (grammar) return this._setRankOfGrammar(grammar), this.commit(grammar), !this.grammars.includes(grammar) && (this.grammars.push(grammar),
@@ -88,8 +52,7 @@ class Dataflow {
88
52
  return !!this._committed.length;
89
53
  }
90
54
  commit(grammar) {
91
- return this._isRunning ? this._enqueue(grammar) : this._committed.add(grammar),
92
- this;
55
+ return this._committed.add(grammar), this;
93
56
  }
94
57
  _beforeEvaluate() {
95
58
  this.grammars.forEach((grammar => {
@@ -100,42 +63,15 @@ class Dataflow {
100
63
  grammar.targets && grammar.targets.length && this._finishFirstRender && grammar.targets.forEach((target => this._enqueue(target)));
101
64
  }
102
65
  evaluate() {
103
- return __awaiter(this, void 0, void 0, (function*() {
104
- if (this._isReleased) return;
105
- if (this._beforeRunner && (yield this.asyncCallback(this._beforeRunner)), !this._committed.length) return this.logger.info("Dataflow invoked, but nothing to do."),
106
- !1;
107
- this._isRunning = !0, this._updateCounter += 1;
108
- let grammar, next, dt, error, count = 0;
109
- this.logger.canLogInfo() && (dt = Date.now(), this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`)),
110
- this._beforeEvaluate();
111
- try {
112
- for (;this._heap.size() > 0 && !this._isReleased; ) if (grammar = this._heap.pop(),
113
- grammar) if (grammar.rank === grammar.qrank) {
114
- if (next = grammar.run(), next && next.then && (next = yield next), !this._isRunning) return !1;
115
- this._logGrammarRunInfo(grammar), this._enqueueTargets(grammar), count += 1;
116
- } else this._enqueue(grammar);
117
- } catch (err) {
118
- this._heap.clear(), error = err;
119
- }
120
- return !this._isReleased && (this._isRunning = !1, this.logger.canLogInfo() && (dt = Date.now() - dt,
121
- this.logger.info(`> ${count} grammars; ${dt} ms`)), error ? this.logger.error(error) : this._afterRunner && (yield this.asyncCallback(this._afterRunner)),
122
- this._finishFirstRender = !0, !0);
123
- }));
124
- }
125
- evaluateSync() {
126
66
  if (this._beforeRunner && this._beforeRunner(this), !this._committed.length) return this.logger.info("Dataflow invoked, but nothing to do."),
127
67
  !1;
128
- this._isRunning = !0, this._updateCounter += 1;
68
+ this._updateCounter += 1;
129
69
  let grammar, dt, count = 0;
130
70
  for (this.logger.canLogInfo() && (dt = Date.now(), this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`)),
131
- this._beforeEvaluate(); this._heap.size() > 0; ) grammar = this._heap.pop(), grammar && (grammar.rank === grammar.qrank ? (grammar.runSync(),
71
+ this._beforeEvaluate(); this._heap.size() > 0; ) grammar = this._heap.pop(), grammar && (grammar.rank === grammar.qrank ? (grammar.run(),
132
72
  this._logGrammarRunInfo(grammar), this._enqueueTargets(grammar), count += 1) : this._enqueue(grammar));
133
- return this._isRunning = !1, this.logger.canLogInfo() && (dt = Date.now() - dt,
134
- this.logger.info(`> ${count} grammars updated; ${dt} ms`)), this._afterRunner && this._afterRunner(this),
135
- this._finishFirstRender = !0, !0;
136
- }
137
- stop() {
138
- this._isRunning && (this._isRunning = !1);
73
+ return this.logger.canLogInfo() && (dt = Date.now() - dt, this.logger.info(`> ${count} grammars updated; ${dt} ms`)),
74
+ this._afterRunner && this._afterRunner(this), this._finishFirstRender = !0, !0;
139
75
  }
140
76
  runBefore(callback) {
141
77
  this._beforeRunner = callback;
@@ -144,8 +80,7 @@ class Dataflow {
144
80
  this._afterRunner = callback;
145
81
  }
146
82
  release() {
147
- this.stop(), this._isReleased = !0, this._heap && (this._heap.clear(), this._heap = null),
148
- this.logger = null, this._committed = null;
83
+ this._heap && (this._heap.clear(), this._heap = null), this.logger = null, this._committed = null;
149
84
  }
150
85
  }
151
86
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/view/dataflow.ts"],"names":[],"mappings":"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","file":"dataflow.js","sourcesContent":["import type { ILogger } from '@visactor/vutils';\nimport type { IDataflow } from '../types/dataflow';\nimport { isNil, Logger } from '@visactor/vutils';\nimport { Heap } from '../util/grammar-heap';\nimport { UniqueList } from '../util/unique-list';\nimport type { IDataflowCallback, IGrammarBase } from '../types';\n\n/**\n * A dataflow to run all the grammar elements\n */\nexport default class Dataflow implements IDataflow {\n logger: ILogger;\n private grammars: IGrammarBase[] = [];\n /** 当前排序 */\n private _curRank: number;\n /** 发生了变更的元素 */\n private _committed?: UniqueList<IGrammarBase>;\n private _heap?: Heap;\n private _beforeRunner?: IDataflowCallback;\n private _afterRunner?: IDataflowCallback;\n /** 正在运行dataflow */\n private _isRunning?: boolean;\n private _updateCounter: number;\n /** 是否完成初次渲染 */\n private _finishFirstRender?: boolean;\n private _isReleased: boolean;\n\n constructor() {\n this.logger = Logger.getInstance();\n\n this._curRank = 0;\n\n this._committed = new UniqueList(grammar => grammar.uid);\n\n this._heap = new Heap((a, b) => a?.qrank - b?.qrank);\n this._beforeRunner = null;\n this._afterRunner = null;\n this._isRunning = false;\n this._updateCounter = 0;\n this._finishFirstRender = false;\n }\n\n async asyncCallback(callback: (context: IDataflow) => any) {\n try {\n await callback(this);\n } catch (err) {\n this.logger.error(err);\n }\n }\n\n add(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n this._setRankOfGrammar(grammar);\n this.commit(grammar);\n if (!this.grammars.includes(grammar)) {\n this.grammars.push(grammar);\n\n return true;\n }\n\n return false;\n }\n\n remove(grammar: IGrammarBase) {\n if (grammar) {\n this._committed.remove(grammar);\n this._heap.remove(grammar);\n this.grammars = this.grammars.filter(storedGrammar => storedGrammar !== grammar);\n }\n }\n\n private _setRankOfGrammar(grammar?: IGrammarBase) {\n if (!grammar) {\n return;\n }\n grammar.rank = ++this._curRank;\n }\n\n private _reRank(grammar?: IGrammarBase) {\n const queue = [grammar];\n\n while (queue.length) {\n const cur = queue.pop();\n this._setRankOfGrammar(cur);\n const list = cur.targets;\n\n if (list) {\n list.forEach((entry: IGrammarBase) => {\n queue.push(entry);\n if (entry === grammar) {\n this.logger.error('Cycle detected in dataflow graph.');\n }\n });\n }\n }\n }\n\n private _enqueue(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n\n (grammar as any).qrank = grammar.rank;\n // push and reRank in the heap\n this._heap.push(grammar);\n }\n\n private _logGrammarRunInfo(grammar: IGrammarBase) {\n if (this.logger.canLogError()) {\n const debugInfos = [\n { key: 'id', value: grammar.id() },\n { key: 'name', value: grammar.name() }\n ];\n const debugStr = debugInfos.reduce((str, entry, index) => {\n if (!isNil(entry.value)) {\n return `${str}${index ? ' , ' : ''}${entry.key}: ${entry.value}`;\n }\n\n return str;\n }, '');\n\n this.logger.debug('Run Operator: ', grammar, debugStr);\n }\n }\n\n hasCommitted() {\n return !!this._committed.length;\n }\n\n // OPERATOR UPDATES\n commit(grammar: IGrammarBase) {\n if (this._isRunning) {\n // this may lead to a problem, the same op may be added to the queue multiple times\n // if in midst of propagation, add to priority queue\n this._enqueue(grammar);\n } else {\n // otherwise, queue for next propagation\n this._committed.add(grammar);\n }\n\n return this;\n }\n\n private _beforeEvaluate() {\n // reRank grammar element which has higher rank than its targets\n this.grammars.forEach(grammar => {\n if (grammar.targets.some(target => target?.rank < grammar?.rank)) {\n this._reRank(grammar);\n }\n });\n // initialize priority queue, reset committed grammars\n this._committed.forEach(grammar => this._enqueue(grammar));\n this._committed = new UniqueList(grammar => grammar.uid);\n }\n\n private _enqueueTargets(grammar: IGrammarBase) {\n if (grammar.targets && grammar.targets.length && this._finishFirstRender) {\n grammar.targets.forEach((target: IGrammarBase) => this._enqueue(target));\n }\n }\n\n async evaluate() {\n if (this._isReleased) {\n return;\n }\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n await this.asyncCallback(this._beforeRunner);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let next;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n try {\n while (this._heap.size() > 0) {\n if (this._isReleased) {\n break;\n }\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n next = grammar.run();\n\n // await if grammar returned a promise\n if (next && next.then) {\n next = await next;\n }\n\n // finish evaluation if dataflow is stopped during asynchronous process\n if (!this._isRunning) {\n return false;\n }\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n } catch (err) {\n this._heap.clear();\n error = err;\n }\n if (this._isReleased) {\n return false;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n // invoke callbacks queued via runAfter\n await this.asyncCallback(this._afterRunner);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n evaluateSync() {\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n this._beforeRunner(this);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n while (this._heap.size() > 0) {\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n grammar.runSync();\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars updated; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n this._afterRunner(this);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n private stop() {\n if (!this._isRunning) {\n return;\n }\n this._isRunning = false;\n }\n\n runBefore(callback?: IDataflowCallback) {\n this._beforeRunner = callback;\n }\n\n runAfter(callback?: IDataflowCallback) {\n this._afterRunner = callback;\n }\n\n release() {\n // stop asynchronous evaluation\n this.stop();\n this._isReleased = true;\n\n if (this._heap) {\n this._heap.clear();\n this._heap = null;\n }\n\n this.logger = null;\n this._committed = null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/view/dataflow.ts"],"names":[],"mappings":"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","file":"dataflow.js","sourcesContent":["import type { ILogger } from '@visactor/vutils';\nimport type { IDataflow } from '../types/dataflow';\nimport { isNil, Logger } from '@visactor/vutils';\nimport { Heap } from '../util/grammar-heap';\nimport { UniqueList } from '../util/unique-list';\nimport type { IDataflowCallback, IGrammarBase } from '../types';\n\n/**\n * A dataflow to run all the grammar elements\n */\nexport default class Dataflow implements IDataflow {\n logger: ILogger;\n private grammars: IGrammarBase[] = [];\n /** 当前排序 */\n private _curRank: number;\n /** 发生了变更的元素 */\n private _committed?: UniqueList<IGrammarBase>;\n private _heap?: Heap;\n private _beforeRunner?: IDataflowCallback;\n private _afterRunner?: IDataflowCallback;\n private _updateCounter: number;\n /** 是否完成初次渲染 */\n private _finishFirstRender?: boolean;\n\n constructor() {\n this.logger = Logger.getInstance();\n\n this._curRank = 0;\n\n this._committed = new UniqueList(grammar => grammar.uid);\n\n this._heap = new Heap((a, b) => a?.qrank - b?.qrank);\n this._beforeRunner = null;\n this._afterRunner = null;\n this._updateCounter = 0;\n this._finishFirstRender = false;\n }\n\n add(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n this._setRankOfGrammar(grammar);\n this.commit(grammar);\n if (!this.grammars.includes(grammar)) {\n this.grammars.push(grammar);\n\n return true;\n }\n\n return false;\n }\n\n remove(grammar: IGrammarBase) {\n if (grammar) {\n this._committed.remove(grammar);\n this._heap.remove(grammar);\n this.grammars = this.grammars.filter(storedGrammar => storedGrammar !== grammar);\n }\n }\n\n private _setRankOfGrammar(grammar?: IGrammarBase) {\n if (!grammar) {\n return;\n }\n grammar.rank = ++this._curRank;\n }\n\n private _reRank(grammar?: IGrammarBase) {\n const queue = [grammar];\n\n while (queue.length) {\n const cur = queue.pop();\n this._setRankOfGrammar(cur);\n const list = cur.targets;\n\n if (list) {\n list.forEach((entry: IGrammarBase) => {\n queue.push(entry);\n if (entry === grammar) {\n this.logger.error('Cycle detected in dataflow graph.');\n }\n });\n }\n }\n }\n\n private _enqueue(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n\n (grammar as any).qrank = grammar.rank;\n // push and reRank in the heap\n this._heap.push(grammar);\n }\n\n private _logGrammarRunInfo(grammar: IGrammarBase) {\n if (this.logger.canLogError()) {\n const debugInfos = [\n { key: 'id', value: grammar.id() },\n { key: 'name', value: grammar.name() }\n ];\n const debugStr = debugInfos.reduce((str, entry, index) => {\n if (!isNil(entry.value)) {\n return `${str}${index ? ' , ' : ''}${entry.key}: ${entry.value}`;\n }\n\n return str;\n }, '');\n\n this.logger.debug('Run Operator: ', grammar, debugStr);\n }\n }\n\n hasCommitted() {\n return !!this._committed.length;\n }\n\n // OPERATOR UPDATES\n commit(grammar: IGrammarBase) {\n // otherwise, queue for next propagation\n this._committed.add(grammar);\n\n return this;\n }\n\n private _beforeEvaluate() {\n // reRank grammar element which has higher rank than its targets\n this.grammars.forEach(grammar => {\n if (grammar.targets.some(target => target?.rank < grammar?.rank)) {\n this._reRank(grammar);\n }\n });\n // initialize priority queue, reset committed grammars\n this._committed.forEach(grammar => this._enqueue(grammar));\n this._committed = new UniqueList(grammar => grammar.uid);\n }\n\n private _enqueueTargets(grammar: IGrammarBase) {\n if (grammar.targets && grammar.targets.length && this._finishFirstRender) {\n grammar.targets.forEach((target: IGrammarBase) => this._enqueue(target));\n }\n }\n\n evaluate() {\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n this._beforeRunner(this);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n while (this._heap.size() > 0) {\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n grammar.run();\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars updated; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n this._afterRunner(this);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n runBefore(callback?: IDataflowCallback) {\n this._beforeRunner = callback;\n }\n\n runAfter(callback?: IDataflowCallback) {\n this._afterRunner = callback;\n }\n\n release() {\n if (this._heap) {\n this._heap.clear();\n this._heap = null;\n }\n\n this.logger = null;\n this._committed = null;\n }\n}\n"]}
@@ -20,11 +20,9 @@ export declare abstract class GrammarBase extends EventEmitter implements IGramm
20
20
  removeEventListener(type: string, handler?: BaseEventHandler): this;
21
21
  emit<T extends EventEmitter.EventNames<string | symbol>>(event: T, ...args: EventEmitter.EventArgs<string | symbol, T>): boolean;
22
22
  emitGrammarEvent<T extends EventEmitter.EventNames<string | symbol>>(event: T, ...args: EventEmitter.EventArgs<string | symbol, T>): boolean;
23
- abstract evaluate(upstream: any, parameters: any): this | Promise<this>;
23
+ abstract evaluate(upstream: any, parameters: any): this;
24
24
  abstract output(): any;
25
- evaluateSync?: (upstream: any, parameters: any) => this;
26
- evaluateTransform(transforms: IGrammarTask[], upstream: any, parameters: any): Promise<any>;
27
- evaluateTransformSync(transforms: IGrammarTask[], upstream: any, parameters: any): any;
25
+ evaluateTransform(transforms: IGrammarTask[], upstream: any, parameters: any): any;
28
26
  set(value: any): boolean;
29
27
  id(): string;
30
28
  id(id: string): this;
@@ -34,8 +32,7 @@ export declare abstract class GrammarBase extends EventEmitter implements IGramm
34
32
  detach(reference: IGrammarBase | IGrammarBase[], count?: number): this;
35
33
  detachAll(): void;
36
34
  link(source: IGrammarBase): void;
37
- run(): this | Promise<this>;
38
- runSync(): this | Promise<this>;
35
+ run(): this;
39
36
  commit(): void;
40
37
  parameters(): any;
41
38
  getSpec(): any;
@@ -1,31 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
4
- return new (P || (P = Promise))((function(resolve, reject) {
5
- function fulfilled(value) {
6
- try {
7
- step(generator.next(value));
8
- } catch (e) {
9
- reject(e);
10
- }
11
- }
12
- function rejected(value) {
13
- try {
14
- step(generator.throw(value));
15
- } catch (e) {
16
- reject(e);
17
- }
18
- }
19
- function step(result) {
20
- var value;
21
- result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) {
22
- resolve(value);
23
- }))).then(fulfilled, rejected);
24
- }
25
- step((generator = generator.apply(thisArg, _arguments || [])).next());
26
- }));
27
- };
28
-
29
3
  Object.defineProperty(exports, "__esModule", {
30
4
  value: !0
31
5
  }), exports.GrammarBase = void 0;
@@ -71,21 +45,6 @@ class GrammarBase extends vutils_1.EventEmitter {
71
45
  return super.emit(event, ...args);
72
46
  }
73
47
  evaluateTransform(transforms, upstream, parameters) {
74
- return __awaiter(this, void 0, void 0, (function*() {
75
- if (!transforms || !transforms.length) return upstream;
76
- let currentUpstreamData = upstream, i = 0;
77
- const n = transforms.length;
78
- for (;i < n; ) {
79
- const task = transforms[i];
80
- this.emit(enums_1.HOOK_EVENT.BEFORE_TRANSFORM, task.type), currentUpstreamData = task.transform(task.isRawOptions ? task.options : (0,
81
- option_1.parseOptions)(task.options, parameters), currentUpstreamData, parameters, this.view),
82
- (null == currentUpstreamData ? void 0 : currentUpstreamData.then) && (currentUpstreamData = yield currentUpstreamData),
83
- i++, this.emit(enums_1.HOOK_EVENT.AFTER_TRANSFORM, task.type);
84
- }
85
- return currentUpstreamData;
86
- }));
87
- }
88
- evaluateTransformSync(transforms, upstream, parameters) {
89
48
  if (!transforms || !transforms.length) return upstream;
90
49
  let currentUpstreamData = upstream, i = 0;
91
50
  const n = transforms.length;
@@ -134,11 +93,6 @@ class GrammarBase extends vutils_1.EventEmitter {
134
93
  const upstream = null === (_a = this.grammarSource) || void 0 === _a ? void 0 : _a.output(), parameters = this.parameters();
135
94
  return this.evaluate(upstream, parameters);
136
95
  }
137
- runSync() {
138
- var _a;
139
- const upstream = null === (_a = this.grammarSource) || void 0 === _a ? void 0 : _a.output(), parameters = this.parameters();
140
- return this.evaluateSync ? this.evaluateSync(upstream, parameters) : this.evaluate(upstream, parameters);
141
- }
142
96
  commit() {
143
97
  this.view.commit(this);
144
98
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/view/grammar-base.ts"],"names":[],"mappings":"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","file":"grammar-base.js","sourcesContent":["import { array, EventEmitter, isNil, isString, isValid } from '@visactor/vutils';\nimport type { GrammarType, IGrammarBase, IView, IGrammarTask, BaseEventHandler } from '../types';\nimport { parseOptions } from '../parse/option';\nimport { parseFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\n\nlet grammarBaseId = -1;\n\nexport abstract class GrammarBase extends EventEmitter implements IGrammarBase {\n readonly grammarType: GrammarType;\n\n readonly uid: number;\n protected _id: string;\n protected _name: string;\n\n protected spec: any = {};\n\n view: IView;\n rank: number;\n\n // FIXME: adapt current implementation of dataflow, refactor after dataflow design is finished\n grammarSource: IGrammarBase;\n references: Map<IGrammarBase, number> = new Map();\n targets: IGrammarBase[] = [];\n transforms: IGrammarTask[] = [];\n\n constructor(view: IView) {\n super();\n this.view = view;\n this.uid = ++grammarBaseId;\n }\n\n parse(spec: any): this {\n this.id(spec.id);\n this.name(spec.name);\n this.depend(spec.dependency);\n return this;\n }\n\n depend(grammars: IGrammarBase[] | IGrammarBase | string[] | string) {\n if (this.spec?.dependency) {\n const lastGrammars = array(this.spec.dependency).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.detach(lastGrammars);\n }\n this.spec.dependency = grammars;\n const currentGrammars = array(grammars).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.attach(currentGrammars);\n\n this.commit();\n return this;\n }\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n emit<T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ): boolean {\n this.view?.emit?.(event, ...args);\n return super.emit(event, ...args);\n }\n\n emitGrammarEvent<T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ): boolean {\n return super.emit(event, ...args);\n }\n\n abstract evaluate(upstream: any, parameters: any): this | Promise<this>;\n abstract output(): any;\n evaluateSync?: (upstream: any, parameters: any) => this;\n\n async evaluateTransform(transforms: IGrammarTask[], upstream: any, parameters: any) {\n if (!transforms || !transforms.length) {\n return upstream;\n }\n let currentUpstreamData = upstream;\n let i = 0;\n const n = transforms.length;\n\n while (i < n) {\n const task = transforms[i];\n\n this.emit(HOOK_EVENT.BEFORE_TRANSFORM, task.type);\n currentUpstreamData = task.transform(\n task.isRawOptions ? task.options : parseOptions(task.options, parameters),\n currentUpstreamData,\n parameters,\n this.view\n );\n if ((currentUpstreamData as any)?.then) {\n currentUpstreamData = await currentUpstreamData;\n }\n i++;\n this.emit(HOOK_EVENT.AFTER_TRANSFORM, task.type);\n }\n\n return currentUpstreamData;\n }\n\n evaluateTransformSync(transforms: IGrammarTask[], upstream: any, parameters: any) {\n if (!transforms || !transforms.length) {\n return upstream;\n }\n let currentUpstreamData = upstream;\n let i = 0;\n const n = transforms.length;\n\n while (i < n) {\n const task = transforms[i];\n\n this.emit(HOOK_EVENT.BEFORE_TRANSFORM, task.type);\n currentUpstreamData = task.transform(\n task.isRawOptions ? task.options : parseOptions(task.options, parameters),\n currentUpstreamData,\n parameters,\n this.view\n );\n i++;\n this.emit(HOOK_EVENT.AFTER_TRANSFORM, task.type);\n }\n\n return currentUpstreamData;\n }\n\n set(value: any): boolean {\n // do nothing\n return false;\n }\n\n id(): string;\n id(id: string): this;\n id(id?: string) {\n if (arguments.length) {\n this.view.grammars.unrecord(this);\n this._id = id;\n this.view.grammars.record(this);\n return this;\n }\n return this._id;\n }\n\n name(): string;\n name(name: string): this;\n name(name?: string) {\n if (arguments.length) {\n this._name = name;\n return this;\n }\n return this._name;\n }\n\n attach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n if (isNil(reference)) {\n return;\n }\n if (!ref.targets.includes(this)) {\n ref.targets.push(this);\n }\n this.references.set(ref, (this.references.get(ref) ?? 0) + count);\n });\n return this;\n }\n\n detach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n const refCount = this.references.get(ref) - count;\n if (refCount > 0) {\n this.references.set(ref, refCount - 1);\n } else {\n this.references.delete(ref);\n if (ref.targets.includes(this)) {\n ref.targets = ref.targets.filter(target => target !== this);\n }\n }\n });\n return this;\n }\n\n detachAll() {\n this.references.forEach((count, ref) => {\n this.detach(ref, count);\n });\n }\n\n link(source: IGrammarBase) {\n this.grammarSource = source;\n }\n\n run() {\n const upstream = this.grammarSource?.output();\n const parameters = this.parameters();\n return this.evaluate(upstream, parameters);\n }\n\n runSync() {\n const upstream = this.grammarSource?.output();\n const parameters = this.parameters();\n\n if (this.evaluateSync) {\n return this.evaluateSync(upstream, parameters);\n }\n return this.evaluate(upstream, parameters);\n }\n\n commit() {\n this.view.commit(this);\n }\n\n parameters() {\n const params: any = {};\n this.references.forEach((count, ref) => {\n // upstream reference with no valid id will not be recorded in parameters\n if (isValid(ref.id())) {\n params[ref.id() as string] = ref.output();\n }\n });\n return params;\n }\n\n getSpec() {\n return this.spec;\n }\n\n reuse(grammar: IGrammarBase) {\n return this;\n }\n\n clear() {\n this.spec = null;\n this.view = null;\n }\n\n release() {\n this.clear();\n }\n\n protected setFunctionSpec<T>(spec: T | Nil, specField: string) {\n if (!isNil(this.spec[specField])) {\n this.detach(parseFunctionType(this.spec[specField], this.view));\n }\n this.spec[specField] = spec;\n this.attach(parseFunctionType(spec, this.view));\n this.commit();\n return this;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/view/grammar-base.ts"],"names":[],"mappings":"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","file":"grammar-base.js","sourcesContent":["import { array, EventEmitter, isNil, isString, isValid } from '@visactor/vutils';\nimport type { GrammarType, IGrammarBase, IView, IGrammarTask, BaseEventHandler } from '../types';\nimport { parseOptions } from '../parse/option';\nimport { parseFunctionType } from '../parse/util';\nimport type { Nil } from '../types/base';\nimport { HOOK_EVENT } from '../graph/enums';\n\nlet grammarBaseId = -1;\n\nexport abstract class GrammarBase extends EventEmitter implements IGrammarBase {\n readonly grammarType: GrammarType;\n\n readonly uid: number;\n protected _id: string;\n protected _name: string;\n\n protected spec: any = {};\n\n view: IView;\n rank: number;\n\n // FIXME: adapt current implementation of dataflow, refactor after dataflow design is finished\n grammarSource: IGrammarBase;\n references: Map<IGrammarBase, number> = new Map();\n targets: IGrammarBase[] = [];\n transforms: IGrammarTask[] = [];\n\n constructor(view: IView) {\n super();\n this.view = view;\n this.uid = ++grammarBaseId;\n }\n\n parse(spec: any): this {\n this.id(spec.id);\n this.name(spec.name);\n this.depend(spec.dependency);\n return this;\n }\n\n depend(grammars: IGrammarBase[] | IGrammarBase | string[] | string) {\n if (this.spec?.dependency) {\n const lastGrammars = array(this.spec.dependency).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.detach(lastGrammars);\n }\n this.spec.dependency = grammars;\n const currentGrammars = array(grammars).map(grammar => {\n return isString(grammar) ? this.view.getGrammarById(grammar) : grammar;\n });\n this.attach(currentGrammars);\n\n this.commit();\n return this;\n }\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n emit<T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ): boolean {\n this.view?.emit?.(event, ...args);\n return super.emit(event, ...args);\n }\n\n emitGrammarEvent<T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ): boolean {\n return super.emit(event, ...args);\n }\n\n abstract evaluate(upstream: any, parameters: any): this;\n abstract output(): any;\n\n evaluateTransform(transforms: IGrammarTask[], upstream: any, parameters: any) {\n if (!transforms || !transforms.length) {\n return upstream;\n }\n let currentUpstreamData = upstream;\n let i = 0;\n const n = transforms.length;\n\n while (i < n) {\n const task = transforms[i];\n\n this.emit(HOOK_EVENT.BEFORE_TRANSFORM, task.type);\n currentUpstreamData = task.transform(\n task.isRawOptions ? task.options : parseOptions(task.options, parameters),\n currentUpstreamData,\n parameters,\n this.view\n );\n i++;\n this.emit(HOOK_EVENT.AFTER_TRANSFORM, task.type);\n }\n\n return currentUpstreamData;\n }\n\n set(value: any): boolean {\n // do nothing\n return false;\n }\n\n id(): string;\n id(id: string): this;\n id(id?: string) {\n if (arguments.length) {\n this.view.grammars.unrecord(this);\n this._id = id;\n this.view.grammars.record(this);\n return this;\n }\n return this._id;\n }\n\n name(): string;\n name(name: string): this;\n name(name?: string) {\n if (arguments.length) {\n this._name = name;\n return this;\n }\n return this._name;\n }\n\n attach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n if (isNil(reference)) {\n return;\n }\n if (!ref.targets.includes(this)) {\n ref.targets.push(this);\n }\n this.references.set(ref, (this.references.get(ref) ?? 0) + count);\n });\n return this;\n }\n\n detach(reference: IGrammarBase | IGrammarBase[], count: number = 1) {\n array(reference)\n .filter(ref => !isNil(ref))\n .forEach(ref => {\n const refCount = this.references.get(ref) - count;\n if (refCount > 0) {\n this.references.set(ref, refCount - 1);\n } else {\n this.references.delete(ref);\n if (ref.targets.includes(this)) {\n ref.targets = ref.targets.filter(target => target !== this);\n }\n }\n });\n return this;\n }\n\n detachAll() {\n this.references.forEach((count, ref) => {\n this.detach(ref, count);\n });\n }\n\n link(source: IGrammarBase) {\n this.grammarSource = source;\n }\n\n run() {\n const upstream = this.grammarSource?.output();\n const parameters = this.parameters();\n return this.evaluate(upstream, parameters);\n }\n\n commit() {\n this.view.commit(this);\n }\n\n parameters() {\n const params: any = {};\n this.references.forEach((count, ref) => {\n // upstream reference with no valid id will not be recorded in parameters\n if (isValid(ref.id())) {\n params[ref.id() as string] = ref.output();\n }\n });\n return params;\n }\n\n getSpec() {\n return this.spec;\n }\n\n reuse(grammar: IGrammarBase) {\n return this;\n }\n\n clear() {\n this.spec = null;\n this.view = null;\n }\n\n release() {\n this.clear();\n }\n\n protected setFunctionSpec<T>(spec: T | Nil, specField: string) {\n if (!isNil(this.spec[specField])) {\n this.detach(parseFunctionType(this.spec[specField], this.view));\n }\n this.spec[specField] = spec;\n this.attach(parseFunctionType(spec, this.view));\n this.commit();\n return this;\n }\n}\n"]}
@@ -38,8 +38,7 @@ export declare class Mark extends GrammarBase implements IMark {
38
38
  private _getTransformsAfterEncodeItems;
39
39
  private _getTransformsAfterEncode;
40
40
  private _getTransformsBeforeJoin;
41
- evaluate(data: any[], parameters: any): Promise<this>;
42
- evaluateSync: (data: any[], parameters: any) => this;
41
+ evaluate(data: any[], parameters: any): this;
43
42
  output(): this;
44
43
  join(data: IData | string | Nil, key?: MarkKeySpec, sort?: MarkSortSpec, groupBy?: MarkKeySpec, groupSort?: MarkSortSpec): this;
45
44
  coordinate(coordinate: ICoordinate | string | Nil): this;
package/cjs/view/mark.js CHANGED
@@ -1,30 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
4
- return new (P || (P = Promise))((function(resolve, reject) {
5
- function fulfilled(value) {
6
- try {
7
- step(generator.next(value));
8
- } catch (e) {
9
- reject(e);
10
- }
11
- }
12
- function rejected(value) {
13
- try {
14
- step(generator.throw(value));
15
- } catch (e) {
16
- reject(e);
17
- }
18
- }
19
- function step(result) {
20
- var value;
21
- result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) {
22
- resolve(value);
23
- }))).then(fulfilled, rejected);
24
- }
25
- step((generator = generator.apply(thisArg, _arguments || [])).next());
26
- }));
27
- }, __importDefault = this && this.__importDefault || function(mod) {
3
+ var __importDefault = this && this.__importDefault || function(mod) {
28
4
  return mod && mod.__esModule ? mod : {
29
5
  default: mod
30
6
  };
@@ -40,11 +16,8 @@ class Mark extends grammar_base_1.GrammarBase {
40
16
  constructor(view, markType, group) {
41
17
  super(view), this.grammarType = "mark", this.elements = [], this.elementMap = new Map,
42
18
  this.isUpdated = !0, this._isReentered = !1, this.animate = new animate_1.Animate(this, {}),
43
- this.differ = new differ_1.Differ([]), this.evaluateSync = (data, parameters) => {
44
- var _a;
45
- return this.evaluateMainTasks(data, parameters), (null === (_a = this.renderContext) || void 0 === _a ? void 0 : _a.progressive) || this.evaluateTransformSync(this._getTransformsAfterEncode(), this.elements, parameters),
46
- this;
47
- }, this.markType = markType, this.spec.type = markType, this.spec.encode = {
19
+ this.differ = new differ_1.Differ([]), this.markType = markType, this.spec.type = markType,
20
+ this.spec.encode = {
48
21
  update: {}
49
22
  }, this.spec.group = group, group && (this.group = group, this.attach(group), group.appendChild(this));
50
23
  }
@@ -96,7 +69,7 @@ class Mark extends grammar_base_1.GrammarBase {
96
69
  if (this.needSkipBeforeLayout() && this.view.getLayoutState() === enums_1.LayoutState.before) return this;
97
70
  const stage = null === (_a = this.view.renderer) || void 0 === _a ? void 0 : _a.stage();
98
71
  this.init(stage, parameters);
99
- const transformData = this.evaluateTransformSync(this._getTransformsBeforeJoin(), null != data ? data : constants_1.DefaultMarkData, parameters);
72
+ const transformData = this.evaluateTransform(this._getTransformsBeforeJoin(), null != data ? data : constants_1.DefaultMarkData, parameters);
100
73
  let inputData = (null == transformData ? void 0 : transformData.progressive) ? data : transformData;
101
74
  return this.evaluateGroup(inputData), this.renderContext = this.parseRenderContext(inputData, parameters),
102
75
  this.renderContext.progressive ? (this.differ.reset(), this.elementMap.clear(),
@@ -126,10 +99,8 @@ class Mark extends grammar_base_1.GrammarBase {
126
99
  }
127
100
  evaluate(data, parameters) {
128
101
  var _a;
129
- return __awaiter(this, void 0, void 0, (function*() {
130
- return this.evaluateMainTasks(data, parameters), (null === (_a = this.renderContext) || void 0 === _a ? void 0 : _a.progressive) || (yield this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters)),
131
- this;
132
- }));
102
+ return this.evaluateMainTasks(data, parameters), (null === (_a = this.renderContext) || void 0 === _a ? void 0 : _a.progressive) || this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters),
103
+ this;
133
104
  }
134
105
  output() {
135
106
  return this;
@@ -366,7 +337,7 @@ class Mark extends grammar_base_1.GrammarBase {
366
337
  })) : (null == groupEncodeAttrs ? void 0 : groupEncodeAttrs[element.groupKey]) && !this.isCollectionMark() && element.items.forEach((item => {
367
338
  item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);
368
339
  })), element.encodeItems(element.items, encoders, this._isReentered, parameters);
369
- })), this._isReentered = !1, this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters),
340
+ })), this._isReentered = !1, this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters),
370
341
  elements.forEach((element => {
371
342
  element.encodeGraphic(this.isCollectionMark() ? null == groupEncodeAttrs ? void 0 : groupEncodeAttrs[element.groupKey] : null);
372
343
  })), this.emit(enums_1.HOOK_EVENT.AFTER_ELEMENT_ENCODE, {
@@ -474,7 +445,7 @@ class Mark extends grammar_base_1.GrammarBase {
474
445
  !onlyPos && (null == groupEncodeAttrs ? void 0 : groupEncodeAttrs[element.groupKey]) && element.items.forEach((item => {
475
446
  item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);
476
447
  })), element.encodeItems(element.items, onlyPos ? positionEncoders : encoders, this._isReentered, parameters);
477
- })), this._isReentered = !1, this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters),
448
+ })), this._isReentered = !1, this.evaluateTransform(this._getTransformsAfterEncodeItems(), elements, parameters),
478
449
  elements.forEach((element => {
479
450
  element.encodeGraphic();
480
451
  })), this.emit(enums_1.HOOK_EVENT.AFTER_ELEMENT_ENCODE, {
@@ -526,7 +497,7 @@ class Mark extends grammar_base_1.GrammarBase {
526
497
  }
527
498
  this.emit(enums_1.HOOK_EVENT.AFTER_MARK_ENCODE);
528
499
  const progressiveTransforms = null === (_c = this._getTransformsAfterEncode()) || void 0 === _c ? void 0 : _c.filter((entry => !0 === entry.canProgressive));
529
- (null == progressiveTransforms ? void 0 : progressiveTransforms.length) && this.evaluateTransformSync(progressiveTransforms, this.elements, parameters),
500
+ (null == progressiveTransforms ? void 0 : progressiveTransforms.length) && this.evaluateTransform(progressiveTransforms, this.elements, parameters),
530
501
  this.renderContext.progressive.currentIndex += 1;
531
502
  }
532
503
  isLargeMode() {