@visactor/vrender-core 1.1.0-alpha.16 → 1.1.0-alpha.17
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/cjs/core/stage.d.ts +4 -1
- package/cjs/core/stage.js +23 -11
- package/cjs/core/stage.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.d.ts +4 -0
- package/cjs/graphic/graphic-service/graphic-service.js +6 -5
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.d.ts +41 -8
- package/cjs/graphic/graphic.js +383 -146
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.d.ts +5 -1
- package/cjs/graphic/group.js +37 -18
- package/cjs/graphic/group.js.map +1 -1
- package/cjs/graphic/state/shared-state-refresh.js +3 -3
- package/cjs/graphic/state/shared-state-refresh.js.map +1 -1
- package/cjs/graphic/state/shared-state-scope.js +1 -1
- package/cjs/graphic/state/shared-state-scope.js.map +1 -1
- package/cjs/graphic/state/state-engine.js +2 -2
- package/cjs/graphic/state/state-engine.js.map +1 -1
- package/cjs/graphic/state/state-perf-monitor.d.ts +1 -0
- package/cjs/graphic/state/state-perf-monitor.js +9 -2
- package/cjs/graphic/state/state-perf-monitor.js.map +1 -1
- package/cjs/graphic/state/state-style-resolver.d.ts +0 -9
- package/cjs/graphic/state/state-style-resolver.js +0 -23
- package/cjs/graphic/state/state-style-resolver.js.map +1 -1
- package/cjs/interface/graphic.d.ts +2 -0
- package/cjs/interface/graphic.js.map +1 -1
- package/cjs/interface/node-tree.js.map +1 -1
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.d.ts +4 -1
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js +20 -10
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +3 -2
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/cjs/render/contributions/render/base-render.js +8 -7
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/dist/index.es.js +806 -263
- package/es/core/stage.d.ts +4 -1
- package/es/core/stage.js +21 -10
- package/es/core/stage.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.d.ts +4 -0
- package/es/graphic/graphic-service/graphic-service.js +6 -5
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.d.ts +41 -8
- package/es/graphic/graphic.js +379 -139
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.d.ts +5 -1
- package/es/graphic/group.js +36 -18
- package/es/graphic/group.js.map +1 -1
- package/es/graphic/state/shared-state-refresh.js +4 -4
- package/es/graphic/state/shared-state-refresh.js.map +1 -1
- package/es/graphic/state/shared-state-scope.js +2 -2
- package/es/graphic/state/shared-state-scope.js.map +1 -1
- package/es/graphic/state/state-engine.js +3 -3
- package/es/graphic/state/state-engine.js.map +1 -1
- package/es/graphic/state/state-perf-monitor.d.ts +1 -0
- package/es/graphic/state/state-perf-monitor.js +7 -0
- package/es/graphic/state/state-perf-monitor.js.map +1 -1
- package/es/graphic/state/state-style-resolver.d.ts +0 -9
- package/es/graphic/state/state-style-resolver.js +0 -23
- package/es/graphic/state/state-style-resolver.js.map +1 -1
- package/es/interface/graphic.d.ts +2 -0
- package/es/interface/graphic.js.map +1 -1
- package/es/interface/node-tree.js.map +1 -1
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.d.ts +4 -1
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js +20 -10
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/flex-layout-plugin.js +3 -2
- package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/es/render/contributions/render/base-render.js +8 -6
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/package.json +3 -3
package/es/graphic/group.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare class Group extends Graphic<IGroupGraphicAttribute> implements IG
|
|
|
17
17
|
_childUpdateTag: number;
|
|
18
18
|
theme?: ITheme;
|
|
19
19
|
protected _sharedStateDefinitions?: StateDefinitionsInput<Record<string, any>>;
|
|
20
|
+
protected _hasSharedStateDefinitions: boolean;
|
|
20
21
|
sharedStateScope?: SharedStateScope<Record<string, any>>;
|
|
21
22
|
deferredStateConfig?: IDeferredStateOwnerConfig;
|
|
22
23
|
static NOWORK_ANIMATE_ATTR: {
|
|
@@ -78,7 +79,7 @@ export declare class Group extends Graphic<IGroupGraphicAttribute> implements IG
|
|
|
78
79
|
insertBefore(newNode: INode, referenceNode: INode): INode | null;
|
|
79
80
|
insertAfter(newNode: INode, referenceNode: INode): INode | null;
|
|
80
81
|
insertInto(newNode: INode, idx: number): INode | null;
|
|
81
|
-
removeChild(child: IGraphic): IGraphic;
|
|
82
|
+
removeChild(child: IGraphic, highPerformance?: boolean): IGraphic;
|
|
82
83
|
removeAllChild(deep?: boolean): void;
|
|
83
84
|
setStage(stage?: IStage, layer?: ILayer): void;
|
|
84
85
|
addUpdatePositionTag(): void;
|
|
@@ -90,7 +91,10 @@ export declare class Group extends Graphic<IGroupGraphicAttribute> implements IG
|
|
|
90
91
|
clone(): Group;
|
|
91
92
|
getNoWorkAnimateAttr(): Record<string, number>;
|
|
92
93
|
release(all?: boolean): void;
|
|
94
|
+
detachStageForRelease(): void;
|
|
93
95
|
protected ensureSharedStateScopeBound(): void;
|
|
96
|
+
protected hasSharedStateDefinitions(): boolean;
|
|
97
|
+
protected notifyChildrenSharedStateTreeChanged(): void;
|
|
94
98
|
onParentSharedStateTreeChanged(stage?: IStage, layer?: ILayer): void;
|
|
95
99
|
}
|
|
96
100
|
export declare function createGroup(attributes: IGroupGraphicAttribute): IGroup;
|
package/es/graphic/group.js
CHANGED
|
@@ -25,16 +25,18 @@ export var GroupUpdateAABBBoundsMode;
|
|
|
25
25
|
|
|
26
26
|
export class Group extends Graphic {
|
|
27
27
|
constructor(params) {
|
|
28
|
-
super(params), this.type = "group", this.parent = null, this.isContainer = !0, this.
|
|
29
|
-
this._childUpdateTag = UpdateTag.UPDATE_BOUNDS;
|
|
28
|
+
super(params), this.type = "group", this.parent = null, this.isContainer = !0, this._hasSharedStateDefinitions = !1,
|
|
29
|
+
this.numberType = GROUP_NUMBER_TYPE, this._childUpdateTag = UpdateTag.UPDATE_BOUNDS;
|
|
30
30
|
}
|
|
31
31
|
get sharedStateDefinitions() {
|
|
32
32
|
return this._sharedStateDefinitions;
|
|
33
33
|
}
|
|
34
34
|
set sharedStateDefinitions(value) {
|
|
35
|
-
|
|
35
|
+
if (this._sharedStateDefinitions === value) return;
|
|
36
|
+
const previousScope = this.sharedStateScope;
|
|
37
|
+
this._sharedStateDefinitions = value, this._hasSharedStateDefinitions = !!value && Object.keys(value).length > 0,
|
|
36
38
|
this.ensureSharedStateScopeBound(), this.sharedStateScope && (setSharedStateScopeLocalDefinitions(this.sharedStateScope, value),
|
|
37
|
-
markScopeActiveDescendantsDirty(this.sharedStateScope, this.stage)));
|
|
39
|
+
markScopeActiveDescendantsDirty(this.sharedStateScope, this.stage)), previousScope !== this.sharedStateScope && this.notifyChildrenSharedStateTreeChanged();
|
|
38
40
|
}
|
|
39
41
|
setMode(mode) {
|
|
40
42
|
"3d" === mode ? this.set3dMode() : this.set2dMode();
|
|
@@ -151,10 +153,12 @@ export class Group extends Graphic {
|
|
|
151
153
|
insertInto(newNode, idx) {
|
|
152
154
|
return this._updateChildToStage(super.insertInto(newNode, idx));
|
|
153
155
|
}
|
|
154
|
-
removeChild(child) {
|
|
156
|
+
removeChild(child, highPerformance = !1) {
|
|
157
|
+
var _a;
|
|
155
158
|
const data = super.removeChild(child);
|
|
156
|
-
return
|
|
157
|
-
data
|
|
159
|
+
return data ? highPerformance ? (null === (_a = child.detachStageForRelease) || void 0 === _a || _a.call(child),
|
|
160
|
+
data) : (this.getGraphicService().onRemove(child), child.setStage(null, null), this.addUpdateBoundTag(),
|
|
161
|
+
data) : data;
|
|
158
162
|
}
|
|
159
163
|
removeAllChild(deep = !1) {
|
|
160
164
|
const children = this.children.slice();
|
|
@@ -166,17 +170,16 @@ export class Group extends Graphic {
|
|
|
166
170
|
}
|
|
167
171
|
setStage(stage, layer) {
|
|
168
172
|
var _a, _b, _c, _d, _e, _f;
|
|
169
|
-
const graphicService = null !== (_c = null !== (_a = null == stage ? void 0 : stage.graphicService) && void 0 !== _a ? _a : null === (_b = this.stage) || void 0 === _b ? void 0 : _b.graphicService) && void 0 !== _c ? _c : application.graphicService;
|
|
170
|
-
if (this.stage !== stage) return this.stage = stage, this.layer = layer, this.ensureSharedStateScopeBound(),
|
|
171
|
-
this.
|
|
172
|
-
this.
|
|
173
|
-
null === (_e = null == graphicService ? void 0 : graphicService.onSetStage) || void 0 === _e || _e.call(graphicService, this, stage),
|
|
173
|
+
const graphicService = null !== (_c = null !== (_a = null == stage ? void 0 : stage.graphicService) && void 0 !== _a ? _a : null === (_b = this.stage) || void 0 === _b ? void 0 : _b.graphicService) && void 0 !== _c ? _c : application.graphicService, needsSharedStateTreeSync = this._hasSharedStateDefinitions || this.sharedStateScope || (null === (_d = this.currentStates) || void 0 === _d ? void 0 : _d.length) || this.boundSharedStateScope || (null === (_e = this.registeredActiveScopes) || void 0 === _e ? void 0 : _e.size) || this.sharedStateDirty;
|
|
174
|
+
if (this.stage !== stage) return this.stage = stage, this.layer = layer, needsSharedStateTreeSync && (this.ensureSharedStateScopeBound(),
|
|
175
|
+
this.syncSharedStateScopeBindingOnTreeChange(!0)), this.setStageToShadowRoot(stage, layer),
|
|
176
|
+
this._onSetStage && this._onSetStage(this, stage, layer), null === (_f = null == graphicService ? void 0 : graphicService.onSetStage) || void 0 === _f || _f.call(graphicService, this, stage),
|
|
174
177
|
void this.forEachChildren((item => {
|
|
175
178
|
item.setStage(stage, this.layer);
|
|
176
179
|
}));
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
this.forEachChildren((item => {
|
|
180
|
+
const layerChanged = this.layer !== layer;
|
|
181
|
+
layerChanged && (this.layer = layer), needsSharedStateTreeSync ? (this.ensureSharedStateScopeBound(),
|
|
182
|
+
this.syncSharedStateScopeBindingOnTreeChange(!0), this.notifyChildrenSharedStateTreeChanged()) : layerChanged && this.forEachChildren((item => {
|
|
180
183
|
item.onParentSharedStateTreeChanged && item.onParentSharedStateTreeChanged(stage, this.layer);
|
|
181
184
|
}));
|
|
182
185
|
}
|
|
@@ -224,17 +227,32 @@ export class Group extends Graphic {
|
|
|
224
227
|
g.release(all);
|
|
225
228
|
})), super.release();
|
|
226
229
|
}
|
|
230
|
+
detachStageForRelease() {
|
|
231
|
+
super.detachStageForRelease(), this.sharedStateScope = void 0, this.forEachChildren((item => {
|
|
232
|
+
var _a;
|
|
233
|
+
null === (_a = item.detachStageForRelease) || void 0 === _a || _a.call(item);
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
227
236
|
ensureSharedStateScopeBound() {
|
|
228
237
|
var _a, _b, _c;
|
|
238
|
+
if (!this.hasSharedStateDefinitions()) return void (this.sharedStateScope = void 0);
|
|
229
239
|
const parentScope = null !== (_b = null === (_a = this.parent) || void 0 === _a ? void 0 : _a.sharedStateScope) && void 0 !== _b ? _b : null === (_c = this.stage) || void 0 === _c ? void 0 : _c.rootSharedStateScope;
|
|
230
240
|
this.sharedStateScope ? (this.sharedStateScope.ownerGroup = this, this.sharedStateScope.ownerStage = this.stage,
|
|
231
241
|
setSharedStateScopeParent(this.sharedStateScope, parentScope), this.sharedStateScope.localStateDefinitions !== this._sharedStateDefinitions && setSharedStateScopeLocalDefinitions(this.sharedStateScope, this._sharedStateDefinitions)) : this.sharedStateScope = createGroupSharedStateScope(this, parentScope, this._sharedStateDefinitions);
|
|
232
242
|
}
|
|
243
|
+
hasSharedStateDefinitions() {
|
|
244
|
+
return this._hasSharedStateDefinitions;
|
|
245
|
+
}
|
|
246
|
+
notifyChildrenSharedStateTreeChanged() {
|
|
247
|
+
this.forEachChildren((item => {
|
|
248
|
+
item.onParentSharedStateTreeChanged && item.onParentSharedStateTreeChanged(this.stage, this.layer);
|
|
249
|
+
}));
|
|
250
|
+
}
|
|
233
251
|
onParentSharedStateTreeChanged(stage, layer) {
|
|
252
|
+
var _a;
|
|
234
253
|
this.stage === stage && this.layer === layer ? (this.ensureSharedStateScopeBound(),
|
|
235
|
-
this.
|
|
236
|
-
|
|
237
|
-
}))) : this.setStage(stage, layer);
|
|
254
|
+
this.syncSharedStateScopeBindingOnTreeChange(!!(null === (_a = this.currentStates) || void 0 === _a ? void 0 : _a.length)),
|
|
255
|
+
this.notifyChildrenSharedStateTreeChanged()) : this.setStage(stage, layer);
|
|
238
256
|
}
|
|
239
257
|
}
|
|
240
258
|
|
package/es/graphic/group.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/group.ts"],"names":[],"mappings":"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","file":"group.js","sourcesContent":["import { Point, type IAABBBounds, type Matrix } from '@visactor/vutils';\nimport { application } from '../application';\nimport type {\n IStage,\n GraphicAttributeMap,\n INode,\n IGraphic,\n ITheme,\n IThemeSpec,\n ILayer,\n GraphicType\n} from '../interface';\nimport type { IGroup, IGroupGraphicAttribute } from '../interface/graphic/group';\nimport type { IDeferredStateOwnerConfig } from './state/state-perf-monitor';\nimport { Graphic, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme, Theme } from './theme';\nimport { UpdateTag, IContainPointMode } from '../common/enums';\nimport { GROUP_NUMBER_TYPE } from './constants';\nimport { DefaultTransform } from './config';\nimport type { StateDefinitionsInput } from './state/state-definition';\nimport {\n type SharedStateScope,\n createGroupSharedStateScope,\n setSharedStateScopeLocalDefinitions,\n setSharedStateScopeParent\n} from './state/shared-state-scope';\nimport { markScopeActiveDescendantsDirty } from './state/shared-state-refresh';\n\n// Group更新AABBBounds的策略\nexport enum GroupUpdateAABBBoundsMode {\n // Group较少的情况,不会批量设置所有父层的tag,而是每次都查找\n LESS_GROUP = 0,\n // Group较多的情况,每次都会设置tag到最顶层\n MORE_GROUP = 1\n}\n\nexport class Group extends Graphic<IGroupGraphicAttribute> implements IGroup {\n type: GraphicType = 'group';\n parent: any = null;\n isContainer: boolean = true;\n // 子元素的更新标记\n declare _childUpdateTag: number;\n\n declare theme?: ITheme;\n protected _sharedStateDefinitions?: StateDefinitionsInput<Record<string, any>>;\n declare sharedStateScope?: SharedStateScope<Record<string, any>>;\n declare deferredStateConfig?: IDeferredStateOwnerConfig;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IGroupGraphicAttribute) {\n super(params);\n this.numberType = GROUP_NUMBER_TYPE;\n this._childUpdateTag = UpdateTag.UPDATE_BOUNDS;\n // this.theme = new Theme();\n }\n\n get sharedStateDefinitions(): StateDefinitionsInput<Record<string, any>> | undefined {\n return this._sharedStateDefinitions;\n }\n\n set sharedStateDefinitions(value: StateDefinitionsInput<Record<string, any>> | undefined) {\n if (this._sharedStateDefinitions === value) {\n return;\n }\n\n this._sharedStateDefinitions = value;\n this.ensureSharedStateScopeBound();\n if (this.sharedStateScope) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, value);\n markScopeActiveDescendantsDirty(this.sharedStateScope, this.stage);\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('3d');\n // });\n }\n set2dMode() {\n this.in3dMode = false;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('2d');\n // });\n }\n\n setTheme(t: IThemeSpec) {\n if (!this.theme) {\n this.theme = new Theme();\n }\n return this.theme.setTheme(t, this);\n }\n\n createTheme() {\n if (!this.theme) {\n this.theme = new Theme();\n }\n }\n\n visibleAll(visible: boolean) {\n this.setAttribute('visible', visible);\n this.forEachChildren((item: IGraphic) => {\n if (item.isContainer && (item as any).visibleAll) {\n (item as any).visibleAll(visible);\n } else {\n item.setAttribute('visible', visible);\n }\n });\n }\n\n hideAll() {\n this.visibleAll(false);\n }\n\n showAll() {\n this.visibleAll(true);\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * group containsPoint 只需要判断bounds\n * TODO: group的shape判断\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode): boolean {\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n return this.AABBBounds.contains(point.x, point.y);\n }\n return this.AABBBounds.contains(x, y);\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 检索自己是否需要更新\n if (super.shouldUpdateAABBBounds()) {\n return true;\n }\n // 检索叶子节点是否有更新(如果children是叶子节点的话)\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return true;\n }\n return false;\n // // 检索是否子group需要更新\n // let needUpdate = false;\n // this.forEachChildren((node: IGraphic) => {\n // // 只查找group层级\n // if (node.isContainer && (node as Group).shouldUpdateAABBBounds()) {\n // needUpdate = true;\n // return true;\n // }\n // return false;\n // });\n // return needUpdate;\n }\n\n protected tryUpdateAABBBounds(): IAABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n this.getGraphicService().beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const selfChange = this.shouldSelfChangeUpdateAABBBounds();\n const bounds = this.doUpdateAABBBounds();\n this.addUpdateLayoutTag();\n this.getGraphicService().afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, selfChange);\n // 直接返回空Bounds,但是前面的流程还是要走\n if (this.attribute.boundsMode === 'empty') {\n bounds.clear();\n }\n return bounds;\n }\n\n /**\n * 大部分group不需要更新matrix,这里特殊优化一下\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n dx = DefaultTransform.dx,\n dy = DefaultTransform.dy,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n postMatrix\n } = this.attribute;\n if (x === 0 && y === 0 && dx === 0 && dy === 0 && scaleX === 1 && scaleY === 1 && angle === 0 && !postMatrix) {\n this._transMatrix.reset();\n return;\n }\n return super.doUpdateLocalMatrix();\n }\n\n getGraphicTheme(): Required<IGroupGraphicAttribute> {\n return getTheme(this).group;\n }\n\n protected updateAABBBounds(\n attribute: IGroupGraphicAttribute,\n groupTheme: Required<IGroupGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n const originalAABBBounds = aabbBounds; // fix aabbbounds update error in flex layout\n aabbBounds = aabbBounds.clone();\n\n const { width, height, path, clip = groupTheme.clip } = attribute;\n // 添加自身的fill或者clip\n if (path && path.length) {\n path.forEach(g => {\n aabbBounds.union(g.AABBBounds);\n });\n } else if (width != null && height != null) {\n aabbBounds.set(0, 0, Math.max(0, width), Math.max(0, height)); // fix bounds set when auto size in vtable\n }\n if (!clip) {\n // 添加子节点\n this.forEachChildren((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n // 如果没有clip的话,还需要加一下scroll\n const { scrollX = 0, scrollY = 0 } = attribute;\n aabbBounds.translate(scrollX, scrollY);\n }\n application.graphicService.updateTempAABBBounds(aabbBounds);\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, groupTheme, false, this);\n\n originalAABBBounds.copy(aabbBounds);\n return originalAABBBounds;\n }\n\n protected doUpdateAABBBounds(): IAABBBounds {\n this.updateAABBBoundsStamp++;\n const bounds = super.doUpdateAABBBounds();\n\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this._emitCustomEvent('AAABBBoundsChange');\n\n return bounds;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n this._childUpdateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n }\n\n addChildUpdateBoundTag() {\n // 如果已经设置过updateTag,那就不需要设置了\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return;\n }\n // 如果没有设置过,那么继续向上设置\n this._childUpdateTag |= UpdateTag.UPDATE_BOUNDS;\n this.parent && this.parent.addChildUpdateBoundTag();\n }\n\n getTheme() {\n return this.theme.getTheme(this);\n }\n\n /* 场景树结构 */\n incrementalAppendChild(node: INode): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n this.getGraphicService().onAddIncremental(node as unknown as IGraphic, this, this.stage);\n return data;\n }\n incrementalClearChild(): void {\n super.removeAllChild();\n this.addUpdateBoundTag();\n this.getGraphicService().onClearIncremental(this, this.stage);\n return;\n }\n\n protected _updateChildToStage(child: IGraphic) {\n if (child) {\n if (this.stage && (child.stage !== this.stage || child.layer !== this.layer)) {\n child.setStage(this.stage, this.layer);\n } else if ((child as any).onParentSharedStateTreeChanged) {\n (child as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return child;\n }\n // TODO 代码优化\n appendChild(node: INode, addStage: boolean = true): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n addStage &&\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return data;\n }\n insertBefore(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertBefore(newNode, referenceNode) as undefined as IGraphic);\n }\n insertAfter(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertAfter(newNode, referenceNode) as undefined as IGraphic);\n }\n insertInto(newNode: INode, idx: number): INode | null {\n return this._updateChildToStage(super.insertInto(newNode, idx) as undefined as IGraphic);\n }\n\n removeChild(child: IGraphic): IGraphic {\n const data = super.removeChild(child);\n this.getGraphicService().onRemove(child);\n child.setStage(null as any, null as any);\n this.addUpdateBoundTag();\n return data as IGraphic;\n }\n\n removeAllChild(deep: boolean = false): void {\n const children = this.children.slice() as IGraphic[];\n this.forEachChildren((child: IGraphic) => {\n this.getGraphicService().onRemove(child);\n if (deep && child.isContainer) {\n child.removeAllChild(deep);\n }\n });\n super.removeAllChild();\n children.forEach(child => {\n child.setStage(null as any, null as any);\n });\n this.addUpdateBoundTag();\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n const graphicService = stage?.graphicService ?? this.stage?.graphicService ?? application.graphicService;\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingFromTree(!!this.currentStates?.length);\n this.setStageToShadowRoot(stage, layer);\n this._onSetStage && this._onSetStage(this, stage, layer);\n graphicService?.onSetStage?.(this, stage);\n this.forEachChildren(item => {\n (item as any).setStage(stage, this.layer);\n });\n return;\n }\n\n if (this.layer !== layer) {\n this.layer = layer;\n }\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingFromTree(!!this.currentStates?.length);\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(stage, this.layer);\n }\n });\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n super.addUpdatePositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n super.addUpdateGlobalPositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * group更新全局的transMatrix\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (this.shouldUpdateGlobalMatrix()) {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n this.doUpdateGlobalMatrix();\n clearTag && this.clearUpdateGlobalPositionTag();\n }\n return this._globalTransMatrix;\n }\n /**\n * 查找自身更新global的tag,如果存在,就更新\n * @returns\n */\n shouldUpdateGlobalMatrix(): boolean {\n const shouldUpdate = !!(this._updateTag & UpdateTag.UPDATE_GLOBAL_MATRIX);\n return shouldUpdate;\n }\n\n private _getChildByName<T extends INode = INode>(name: string, deep?: boolean): T | null {\n return this.find(node => node.name === name, deep);\n }\n\n /**\n * if graphic exist then update attributes, otherwise create a new instance\n * @param graphicName the name of graphic\n * @param attributes the attributes of graphic\n * @param graphicType the type of graphic\n * @returns the graphic instance\n */\n createOrUpdateChild<T extends keyof GraphicAttributeMap>(\n graphicName: string,\n attributes: GraphicAttributeMap[T],\n graphicType: T\n ): INode {\n let graphic = this._getChildByName(graphicName) as IGraphic;\n if (graphic) {\n graphic.setAttributes(attributes);\n } else {\n graphic = application.graphicService.creator[graphicType](attributes as any);\n graphic.name = graphicName;\n this.add(graphic);\n }\n\n return graphic;\n }\n\n clone() {\n return new Group({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Group.NOWORK_ANIMATE_ATTR;\n }\n\n release(all?: boolean) {\n if (all) {\n this.forEachChildren((g: IGraphic) => {\n g.release(all);\n });\n }\n super.release();\n }\n\n protected ensureSharedStateScopeBound(): void {\n const parentScope = (this.parent as any)?.sharedStateScope ?? this.stage?.rootSharedStateScope;\n if (!this.sharedStateScope) {\n this.sharedStateScope = createGroupSharedStateScope(this, parentScope, this._sharedStateDefinitions);\n return;\n }\n\n this.sharedStateScope.ownerGroup = this;\n this.sharedStateScope.ownerStage = this.stage;\n setSharedStateScopeParent(this.sharedStateScope, parentScope);\n\n if (this.sharedStateScope.localStateDefinitions !== this._sharedStateDefinitions) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, this._sharedStateDefinitions);\n }\n }\n\n onParentSharedStateTreeChanged(stage?: IStage, layer?: ILayer): void {\n if (this.stage !== stage || this.layer !== layer) {\n this.setStage(stage, layer);\n return;\n }\n\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingFromTree();\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(stage, this.layer);\n }\n });\n }\n}\n\nexport function createGroup(attributes: IGroupGraphicAttribute): IGroup {\n return new Group(attributes);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/group.ts"],"names":[],"mappings":"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","file":"group.js","sourcesContent":["import { Point, type IAABBBounds, type Matrix } from '@visactor/vutils';\nimport { application } from '../application';\nimport type {\n IStage,\n GraphicAttributeMap,\n INode,\n IGraphic,\n ITheme,\n IThemeSpec,\n ILayer,\n GraphicType\n} from '../interface';\nimport type { IGroup, IGroupGraphicAttribute } from '../interface/graphic/group';\nimport type { IDeferredStateOwnerConfig } from './state/state-perf-monitor';\nimport { Graphic, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme, Theme } from './theme';\nimport { UpdateTag, IContainPointMode } from '../common/enums';\nimport { GROUP_NUMBER_TYPE } from './constants';\nimport { DefaultTransform } from './config';\nimport type { StateDefinitionsInput } from './state/state-definition';\nimport {\n type SharedStateScope,\n createGroupSharedStateScope,\n setSharedStateScopeLocalDefinitions,\n setSharedStateScopeParent\n} from './state/shared-state-scope';\nimport { markScopeActiveDescendantsDirty } from './state/shared-state-refresh';\n\n// Group更新AABBBounds的策略\nexport enum GroupUpdateAABBBoundsMode {\n // Group较少的情况,不会批量设置所有父层的tag,而是每次都查找\n LESS_GROUP = 0,\n // Group较多的情况,每次都会设置tag到最顶层\n MORE_GROUP = 1\n}\n\nexport class Group extends Graphic<IGroupGraphicAttribute> implements IGroup {\n type: GraphicType = 'group';\n parent: any = null;\n isContainer: boolean = true;\n // 子元素的更新标记\n declare _childUpdateTag: number;\n\n declare theme?: ITheme;\n protected _sharedStateDefinitions?: StateDefinitionsInput<Record<string, any>>;\n protected _hasSharedStateDefinitions: boolean = false;\n declare sharedStateScope?: SharedStateScope<Record<string, any>>;\n declare deferredStateConfig?: IDeferredStateOwnerConfig;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IGroupGraphicAttribute) {\n super(params);\n this.numberType = GROUP_NUMBER_TYPE;\n this._childUpdateTag = UpdateTag.UPDATE_BOUNDS;\n // this.theme = new Theme();\n }\n\n get sharedStateDefinitions(): StateDefinitionsInput<Record<string, any>> | undefined {\n return this._sharedStateDefinitions;\n }\n\n set sharedStateDefinitions(value: StateDefinitionsInput<Record<string, any>> | undefined) {\n if (this._sharedStateDefinitions === value) {\n return;\n }\n\n const previousScope = this.sharedStateScope;\n this._sharedStateDefinitions = value;\n this._hasSharedStateDefinitions = !!value && Object.keys(value).length > 0;\n this.ensureSharedStateScopeBound();\n if (this.sharedStateScope) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, value);\n markScopeActiveDescendantsDirty(this.sharedStateScope, this.stage);\n }\n if (previousScope !== this.sharedStateScope) {\n this.notifyChildrenSharedStateTreeChanged();\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('3d');\n // });\n }\n set2dMode() {\n this.in3dMode = false;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('2d');\n // });\n }\n\n setTheme(t: IThemeSpec) {\n if (!this.theme) {\n this.theme = new Theme();\n }\n return this.theme.setTheme(t, this);\n }\n\n createTheme() {\n if (!this.theme) {\n this.theme = new Theme();\n }\n }\n\n visibleAll(visible: boolean) {\n this.setAttribute('visible', visible);\n this.forEachChildren((item: IGraphic) => {\n if (item.isContainer && (item as any).visibleAll) {\n (item as any).visibleAll(visible);\n } else {\n item.setAttribute('visible', visible);\n }\n });\n }\n\n hideAll() {\n this.visibleAll(false);\n }\n\n showAll() {\n this.visibleAll(true);\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * group containsPoint 只需要判断bounds\n * TODO: group的shape判断\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode): boolean {\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n return this.AABBBounds.contains(point.x, point.y);\n }\n return this.AABBBounds.contains(x, y);\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 检索自己是否需要更新\n if (super.shouldUpdateAABBBounds()) {\n return true;\n }\n // 检索叶子节点是否有更新(如果children是叶子节点的话)\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return true;\n }\n return false;\n // // 检索是否子group需要更新\n // let needUpdate = false;\n // this.forEachChildren((node: IGraphic) => {\n // // 只查找group层级\n // if (node.isContainer && (node as Group).shouldUpdateAABBBounds()) {\n // needUpdate = true;\n // return true;\n // }\n // return false;\n // });\n // return needUpdate;\n }\n\n protected tryUpdateAABBBounds(): IAABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n this.getGraphicService().beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const selfChange = this.shouldSelfChangeUpdateAABBBounds();\n const bounds = this.doUpdateAABBBounds();\n this.addUpdateLayoutTag();\n this.getGraphicService().afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, selfChange);\n // 直接返回空Bounds,但是前面的流程还是要走\n if (this.attribute.boundsMode === 'empty') {\n bounds.clear();\n }\n return bounds;\n }\n\n /**\n * 大部分group不需要更新matrix,这里特殊优化一下\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n dx = DefaultTransform.dx,\n dy = DefaultTransform.dy,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n postMatrix\n } = this.attribute;\n if (x === 0 && y === 0 && dx === 0 && dy === 0 && scaleX === 1 && scaleY === 1 && angle === 0 && !postMatrix) {\n this._transMatrix.reset();\n return;\n }\n return super.doUpdateLocalMatrix();\n }\n\n getGraphicTheme(): Required<IGroupGraphicAttribute> {\n return getTheme(this).group;\n }\n\n protected updateAABBBounds(\n attribute: IGroupGraphicAttribute,\n groupTheme: Required<IGroupGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n const originalAABBBounds = aabbBounds; // fix aabbbounds update error in flex layout\n aabbBounds = aabbBounds.clone();\n\n const { width, height, path, clip = groupTheme.clip } = attribute;\n // 添加自身的fill或者clip\n if (path && path.length) {\n path.forEach(g => {\n aabbBounds.union(g.AABBBounds);\n });\n } else if (width != null && height != null) {\n aabbBounds.set(0, 0, Math.max(0, width), Math.max(0, height)); // fix bounds set when auto size in vtable\n }\n if (!clip) {\n // 添加子节点\n this.forEachChildren((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n // 如果没有clip的话,还需要加一下scroll\n const { scrollX = 0, scrollY = 0 } = attribute;\n aabbBounds.translate(scrollX, scrollY);\n }\n application.graphicService.updateTempAABBBounds(aabbBounds);\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, groupTheme, false, this);\n\n originalAABBBounds.copy(aabbBounds);\n return originalAABBBounds;\n }\n\n protected doUpdateAABBBounds(): IAABBBounds {\n this.updateAABBBoundsStamp++;\n const bounds = super.doUpdateAABBBounds();\n\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this._emitCustomEvent('AAABBBoundsChange');\n\n return bounds;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n this._childUpdateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n }\n\n addChildUpdateBoundTag() {\n // 如果已经设置过updateTag,那就不需要设置了\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return;\n }\n // 如果没有设置过,那么继续向上设置\n this._childUpdateTag |= UpdateTag.UPDATE_BOUNDS;\n this.parent && this.parent.addChildUpdateBoundTag();\n }\n\n getTheme() {\n return this.theme.getTheme(this);\n }\n\n /* 场景树结构 */\n incrementalAppendChild(node: INode): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n this.getGraphicService().onAddIncremental(node as unknown as IGraphic, this, this.stage);\n return data;\n }\n incrementalClearChild(): void {\n super.removeAllChild();\n this.addUpdateBoundTag();\n this.getGraphicService().onClearIncremental(this, this.stage);\n return;\n }\n\n protected _updateChildToStage(child: IGraphic) {\n if (child) {\n if (this.stage && (child.stage !== this.stage || child.layer !== this.layer)) {\n child.setStage(this.stage, this.layer);\n } else if ((child as any).onParentSharedStateTreeChanged) {\n (child as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return child;\n }\n // TODO 代码优化\n appendChild(node: INode, addStage: boolean = true): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n addStage &&\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return data;\n }\n insertBefore(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertBefore(newNode, referenceNode) as undefined as IGraphic);\n }\n insertAfter(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertAfter(newNode, referenceNode) as undefined as IGraphic);\n }\n insertInto(newNode: INode, idx: number): INode | null {\n return this._updateChildToStage(super.insertInto(newNode, idx) as undefined as IGraphic);\n }\n\n removeChild(child: IGraphic, highPerformance: boolean = false): IGraphic {\n const data = super.removeChild(child);\n if (!data) {\n return data as IGraphic;\n }\n if (highPerformance) {\n child.detachStageForRelease?.();\n return data as IGraphic;\n }\n this.getGraphicService().onRemove(child);\n child.setStage(null as any, null as any);\n this.addUpdateBoundTag();\n return data as IGraphic;\n }\n\n removeAllChild(deep: boolean = false): void {\n const children = this.children.slice() as IGraphic[];\n this.forEachChildren((child: IGraphic) => {\n this.getGraphicService().onRemove(child);\n if (deep && child.isContainer) {\n child.removeAllChild(deep);\n }\n });\n super.removeAllChild();\n children.forEach(child => {\n child.setStage(null as any, null as any);\n });\n this.addUpdateBoundTag();\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n const graphicService = stage?.graphicService ?? this.stage?.graphicService ?? application.graphicService;\n const needsSharedStateTreeSync =\n this._hasSharedStateDefinitions ||\n this.sharedStateScope ||\n this.currentStates?.length ||\n this.boundSharedStateScope ||\n this.registeredActiveScopes?.size ||\n this.sharedStateDirty;\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n if (needsSharedStateTreeSync) {\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingOnTreeChange(true);\n }\n this.setStageToShadowRoot(stage, layer);\n this._onSetStage && this._onSetStage(this, stage, layer);\n graphicService?.onSetStage?.(this, stage);\n this.forEachChildren(item => {\n (item as any).setStage(stage, this.layer);\n });\n return;\n }\n\n const layerChanged = this.layer !== layer;\n if (layerChanged) {\n this.layer = layer;\n }\n if (needsSharedStateTreeSync) {\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingOnTreeChange(true);\n this.notifyChildrenSharedStateTreeChanged();\n } else if (layerChanged) {\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(stage, this.layer);\n }\n });\n }\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n super.addUpdatePositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n super.addUpdateGlobalPositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * group更新全局的transMatrix\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (this.shouldUpdateGlobalMatrix()) {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n this.doUpdateGlobalMatrix();\n clearTag && this.clearUpdateGlobalPositionTag();\n }\n return this._globalTransMatrix;\n }\n /**\n * 查找自身更新global的tag,如果存在,就更新\n * @returns\n */\n shouldUpdateGlobalMatrix(): boolean {\n const shouldUpdate = !!(this._updateTag & UpdateTag.UPDATE_GLOBAL_MATRIX);\n return shouldUpdate;\n }\n\n private _getChildByName<T extends INode = INode>(name: string, deep?: boolean): T | null {\n return this.find(node => node.name === name, deep);\n }\n\n /**\n * if graphic exist then update attributes, otherwise create a new instance\n * @param graphicName the name of graphic\n * @param attributes the attributes of graphic\n * @param graphicType the type of graphic\n * @returns the graphic instance\n */\n createOrUpdateChild<T extends keyof GraphicAttributeMap>(\n graphicName: string,\n attributes: GraphicAttributeMap[T],\n graphicType: T\n ): INode {\n let graphic = this._getChildByName(graphicName) as IGraphic;\n if (graphic) {\n graphic.setAttributes(attributes);\n } else {\n graphic = application.graphicService.creator[graphicType](attributes as any);\n graphic.name = graphicName;\n this.add(graphic);\n }\n\n return graphic;\n }\n\n clone() {\n return new Group({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Group.NOWORK_ANIMATE_ATTR;\n }\n\n release(all?: boolean) {\n if (all) {\n this.forEachChildren((g: IGraphic) => {\n g.release(all);\n });\n }\n super.release();\n }\n\n detachStageForRelease() {\n super.detachStageForRelease();\n this.sharedStateScope = undefined;\n this.forEachChildren((item: IGraphic) => {\n item.detachStageForRelease?.();\n });\n }\n\n protected ensureSharedStateScopeBound(): void {\n if (!this.hasSharedStateDefinitions()) {\n this.sharedStateScope = undefined;\n return;\n }\n\n const parentScope = (this.parent as any)?.sharedStateScope ?? this.stage?.rootSharedStateScope;\n if (!this.sharedStateScope) {\n this.sharedStateScope = createGroupSharedStateScope(this, parentScope, this._sharedStateDefinitions);\n return;\n }\n\n this.sharedStateScope.ownerGroup = this;\n this.sharedStateScope.ownerStage = this.stage;\n setSharedStateScopeParent(this.sharedStateScope, parentScope);\n\n if (this.sharedStateScope.localStateDefinitions !== this._sharedStateDefinitions) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, this._sharedStateDefinitions);\n }\n }\n\n protected hasSharedStateDefinitions(): boolean {\n return this._hasSharedStateDefinitions;\n }\n\n protected notifyChildrenSharedStateTreeChanged(): void {\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n });\n }\n\n onParentSharedStateTreeChanged(stage?: IStage, layer?: ILayer): void {\n if (this.stage !== stage || this.layer !== layer) {\n this.setStage(stage, layer);\n return;\n }\n\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingOnTreeChange(!!this.currentStates?.length);\n this.notifyChildrenSharedStateTreeChanged();\n }\n}\n\nexport function createGroup(attributes: IGroupGraphicAttribute): IGroup {\n return new Group(attributes);\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getActiveStageStatePerfMonitor } from "./state-perf-monitor";
|
|
2
2
|
|
|
3
3
|
export function scheduleStageSharedStateRefresh(stage) {
|
|
4
4
|
var _a;
|
|
5
|
-
stage && "released" !== stage.releaseStatus && (null === (_a =
|
|
5
|
+
stage && "released" !== stage.releaseStatus && (null === (_a = getActiveStageStatePerfMonitor(stage)) || void 0 === _a || _a.recordRefresh("renderScheduled"),
|
|
6
6
|
stage.renderNextFrame());
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -12,7 +12,7 @@ export function enqueueGraphicSharedStateRefresh(stage, graphic) {
|
|
|
12
12
|
const pending = null !== (_a = stage._pendingSharedStateRefreshGraphics) && void 0 !== _a ? _a : stage._pendingSharedStateRefreshGraphics = new Set;
|
|
13
13
|
if (!pending.has(graphic)) {
|
|
14
14
|
pending.add(graphic);
|
|
15
|
-
const perfMonitor =
|
|
15
|
+
const perfMonitor = getActiveStageStatePerfMonitor(stage);
|
|
16
16
|
null == perfMonitor || perfMonitor.recordRefresh("queuedGraphics"), null == perfMonitor || perfMonitor.recordAllocation("refreshQueuePushes");
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -30,7 +30,7 @@ export function markScopeActiveDescendantsDirty(scope, stage) {
|
|
|
30
30
|
export function flushStageSharedStateRefresh(stage) {
|
|
31
31
|
const pending = stage._pendingSharedStateRefreshGraphics;
|
|
32
32
|
if (!pending || !pending.size) return;
|
|
33
|
-
const perfMonitor =
|
|
33
|
+
const perfMonitor = getActiveStageStatePerfMonitor(stage), start = perfMonitor ? performance.now() : 0, graphics = Array.from(pending.values());
|
|
34
34
|
pending.clear(), null == perfMonitor || perfMonitor.recordRefresh("flushedGraphics", graphics.length),
|
|
35
35
|
graphics.forEach((graphic => {
|
|
36
36
|
if ("released" === graphic.releaseStatus) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/state/shared-state-refresh.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../src/graphic/state/shared-state-refresh.ts"],"names":[],"mappings":"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","file":"shared-state-refresh.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport type { SharedStateScope } from './shared-state-scope';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nexport function scheduleStageSharedStateRefresh(stage: IStage | undefined): void {\n if (!stage || (stage as any).releaseStatus === 'released') {\n return;\n }\n\n getActiveStageStatePerfMonitor(stage)?.recordRefresh('renderScheduled');\n stage.renderNextFrame();\n}\n\nexport function enqueueGraphicSharedStateRefresh(stage: IStage | undefined, graphic: IGraphic): void {\n if (!stage) {\n return;\n }\n\n const pending =\n ((stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined) ??\n (((stage as any)._pendingSharedStateRefreshGraphics = new Set<IGraphic>()) as Set<IGraphic>);\n\n if (!pending.has(graphic)) {\n pending.add(graphic);\n const perfMonitor = getActiveStageStatePerfMonitor(stage);\n perfMonitor?.recordRefresh('queuedGraphics');\n perfMonitor?.recordAllocation('refreshQueuePushes');\n }\n}\n\nexport function markScopeActiveDescendantsDirty<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n stage?: IStage\n): void {\n let marked = false;\n scope.subtreeActiveDescendants.forEach(graphic => {\n (graphic as any).sharedStateDirty = true;\n const ownerStage = stage ?? graphic.stage ?? scope.ownerStage;\n enqueueGraphicSharedStateRefresh(ownerStage, graphic);\n marked = true;\n });\n\n if (marked) {\n scheduleStageSharedStateRefresh(stage ?? scope.ownerStage);\n }\n}\n\nexport function flushStageSharedStateRefresh(stage: IStage): void {\n const pending = (stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined;\n if (!pending || !pending.size) {\n return;\n }\n\n const perfMonitor = getActiveStageStatePerfMonitor(stage);\n const start = perfMonitor ? performance.now() : 0;\n const graphics = Array.from(pending.values());\n pending.clear();\n perfMonitor?.recordRefresh('flushedGraphics', graphics.length);\n\n graphics.forEach(graphic => {\n if ((graphic as any).releaseStatus === 'released') {\n return;\n }\n if (graphic.stage !== stage) {\n return;\n }\n\n const refresh = (graphic as any).refreshSharedStateBeforeRender;\n if (typeof refresh === 'function') {\n refresh.call(graphic);\n perfMonitor?.incrementCounter('sharedRefreshCommits');\n }\n });\n\n if (perfMonitor) {\n perfMonitor.recordCost('sharedRefresh', performance.now() - start);\n perfMonitor.recordEvent('shared-refresh-flush', {\n stageId: (stage as any)._uid,\n flushedGraphics: graphics.length\n });\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StateDefinitionCompiler } from "./state-definition-compiler";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { getActiveStageStatePerfMonitor } from "./state-perf-monitor";
|
|
4
4
|
|
|
5
5
|
const compiler = new StateDefinitionCompiler;
|
|
6
6
|
|
|
@@ -76,7 +76,7 @@ export function rebuildSharedStateScope(scope) {
|
|
|
76
76
|
|
|
77
77
|
export function ensureSharedStateScopeFresh(scope) {
|
|
78
78
|
var _a;
|
|
79
|
-
if (scope) return null === (_a =
|
|
79
|
+
if (scope) return null === (_a = getActiveStageStatePerfMonitor(scope.ownerStage)) || void 0 === _a || _a.recordRefresh("ensureFreshCalls"),
|
|
80
80
|
scope.parentScope && ensureSharedStateScopeFresh(scope.parentScope), (scope.dirty || scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision) && rebuildSharedStateScope(scope),
|
|
81
81
|
scope;
|
|
82
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/state/shared-state-scope.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../src/graphic/state/shared-state-scope.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAiBtE,MAAM,QAAQ,GAAG,IAAI,uBAAuB,EAAO,CAAC;AAEpD,SAAS,eAAe,CACtB,WAAsC;IAEtC,OAAO,WAAW,CAAC,CAAC,CAAE,kBAAK,WAAW,CAA+B,CAAC,CAAC,CAAE,EAA+B,CAAC;AAC3G,CAAC;AAED,SAAS,+BAA+B,CACtC,WAAiC,EACjC,qBAAgD,EAChD,qBAAgD;IAEhD,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,0BAA0B,CAAC;QACzD,CAAC,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAE3C,IAAI,qBAAqB,EAAE;QACzB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACrD,MAAM,CAAC,SAAS,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,KAA0B,EAC1B,WAAmB,CAAC;;IAEpB,MAAM,0BAA0B,GAAG,+BAA+B,CAChE,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,qBAAqB,CAC5B,CAAC;IAEF,KAAK,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;IAC9D,KAAK,CAAC,4BAA4B,GAAG,QAAQ,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAClF,KAAK,CAAC,qBAAqB,GAAG,MAAA,KAAK,CAAC,WAAW,0CAAE,QAAQ,CAAC;IAC1D,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAEpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAa,EACb,qBAAgD;IAEhD,OAAO,eAAe,CACpB;QACE,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,KAAK;QACjB,qBAAqB;QACrB,0BAA0B,EAAE,EAA8B;QAC1D,4BAA4B,EAAE,IAAI,GAAG,EAAE;QACvC,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,KAAK;QACZ,wBAAwB,EAAE,IAAI,GAAG,EAAE;KACpC,EACD,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAAa,EACb,WAAiC,EACjC,qBAAgD;IAEhD,OAAO,eAAe,CACpB;QACE,SAAS,EAAE,OAAO;QAClB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,WAAW;QACX,qBAAqB;QACrB,0BAA0B,EAAE,EAA8B;QAC1D,4BAA4B,EAAE,IAAI,GAAG,EAAE;QACvC,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,KAAK;QACZ,wBAAwB,EAAE,IAAI,GAAG,EAAE;KACpC,EACD,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAA0B,EAC1B,WAAiC;IAEjC,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,EAAE;QACrC,OAAO,KAAK,CAAC;KACd;IAED,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,KAA0B,EAC1B,qBAAgD;IAEhD,IAAI,KAAK,CAAC,qBAAqB,KAAK,qBAAqB,EAAE;QACzD,OAAO,KAAK,CAAC;KACd;IAED,KAAK,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACpD,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,KAA0B,EAC1B,qBAAgD;IAEhD,IAAI,KAAK,CAAC,qBAAqB,KAAK,qBAAqB,EAAE;QACzD,OAAO,KAAK,CAAC;KACd;IAED,KAAK,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACpD,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAA0B;;IAE1B,MAAM,0BAA0B,GAAG,+BAA+B,CAChE,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,qBAAqB,CAC5B,CAAC;IAEF,KAAK,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;IAC9D,KAAK,CAAC,4BAA4B,GAAG,QAAQ,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAClF,KAAK,CAAC,qBAAqB,GAAG,MAAA,KAAK,CAAC,WAAW,0CAAE,QAAQ,CAAC;IAC1D,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAEpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAA2B;;IAE3B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;IAED,MAAA,8BAA8B,CAAC,KAAK,CAAC,UAAU,CAAC,0CAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAEpF,IAAI,KAAK,CAAC,WAAW,EAAE;QACrB,2BAA2B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;KAChD;IAED,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,qBAAqB,KAAK,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;QACpG,uBAAuB,CAAC,KAAK,CAAC,CAAC;KAChC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAA2B;IAE3B,MAAM,KAAK,GAA0B,EAAE,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO,OAAO,EAAE;QACd,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;KAC/B;IAED,OAAO,KAAK,CAAC;AACf,CAAC","file":"shared-state-scope.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport type { IGroup } from '../../interface/graphic/group';\nimport { StateDefinitionCompiler } from './state-definition-compiler';\nimport type { CompiledStateDefinition, StateDefinitionsInput } from './state-definition';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nexport interface SharedStateScope<T extends Record<string, any> = Record<string, any>> {\n ownerKind: 'group' | 'root';\n ownerGroup?: IGroup;\n ownerStage?: IStage;\n parentScope?: SharedStateScope<T>;\n themeStateDefinitions?: StateDefinitionsInput<T>;\n localStateDefinitions?: StateDefinitionsInput<T>;\n effectiveSourceDefinitions: StateDefinitionsInput<T>;\n effectiveCompiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n revision: number;\n parentRevisionAtBuild?: number;\n dirty: boolean;\n subtreeActiveDescendants: Set<IGraphic>;\n}\n\nconst compiler = new StateDefinitionCompiler<any>();\n\nfunction copyDefinitions<T extends Record<string, any>>(\n definitions?: StateDefinitionsInput<T>\n): StateDefinitionsInput<T> {\n return definitions ? ({ ...definitions } as StateDefinitionsInput<T>) : ({} as StateDefinitionsInput<T>);\n}\n\nfunction buildEffectiveSourceDefinitions<T extends Record<string, any>>(\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): StateDefinitionsInput<T> {\n const merged = parentScope\n ? copyDefinitions(parentScope.effectiveSourceDefinitions)\n : copyDefinitions(themeStateDefinitions);\n\n if (localStateDefinitions) {\n Object.keys(localStateDefinitions).forEach(stateName => {\n merged[stateName] = localStateDefinitions[stateName];\n });\n }\n\n return merged;\n}\n\nfunction initializeScope<T extends Record<string, any>>(\n scope: SharedStateScope<T>,\n revision: number = 0\n): SharedStateScope<T> {\n const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(\n scope.parentScope,\n scope.localStateDefinitions,\n scope.themeStateDefinitions\n );\n\n scope.effectiveSourceDefinitions = effectiveSourceDefinitions;\n scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions);\n scope.parentRevisionAtBuild = scope.parentScope?.revision;\n scope.revision = revision;\n scope.dirty = false;\n\n return scope;\n}\n\nexport function createRootSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n stage: IStage,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return initializeScope(\n {\n ownerKind: 'root',\n ownerStage: stage,\n themeStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function createGroupSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n group: IGroup,\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return initializeScope(\n {\n ownerKind: 'group',\n ownerGroup: group,\n ownerStage: group.stage,\n parentScope,\n localStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function setSharedStateScopeParent<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n parentScope?: SharedStateScope<T>\n): boolean {\n if (scope.parentScope === parentScope) {\n return false;\n }\n\n scope.parentScope = parentScope;\n scope.dirty = true;\n return true;\n}\n\nexport function setSharedStateScopeLocalDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.localStateDefinitions === localStateDefinitions) {\n return false;\n }\n\n scope.localStateDefinitions = localStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function setRootSharedStateScopeThemeDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.themeStateDefinitions === themeStateDefinitions) {\n return false;\n }\n\n scope.themeStateDefinitions = themeStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function rebuildSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>\n): SharedStateScope<T> {\n const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(\n scope.parentScope,\n scope.localStateDefinitions,\n scope.themeStateDefinitions\n );\n\n scope.effectiveSourceDefinitions = effectiveSourceDefinitions;\n scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions);\n scope.parentRevisionAtBuild = scope.parentScope?.revision;\n scope.revision += 1;\n scope.dirty = false;\n\n return scope;\n}\n\nexport function ensureSharedStateScopeFresh<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T> | undefined {\n if (!scope) {\n return undefined;\n }\n\n getActiveStageStatePerfMonitor(scope.ownerStage)?.recordRefresh('ensureFreshCalls');\n\n if (scope.parentScope) {\n ensureSharedStateScopeFresh(scope.parentScope);\n }\n\n if (scope.dirty || (scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision)) {\n rebuildSharedStateScope(scope);\n }\n\n return scope;\n}\n\nexport function collectSharedStateScopeChain<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T>[] {\n const chain: SharedStateScope<T>[] = [];\n let current = scope;\n\n while (current) {\n chain.push(current);\n current = current.parentScope;\n }\n\n return chain;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getActiveStageStatePerfMonitor } from "./state-perf-monitor";
|
|
2
2
|
|
|
3
3
|
function isPlainObject(value) {
|
|
4
4
|
return null != value && "object" == typeof value && !Array.isArray(value);
|
|
@@ -100,7 +100,7 @@ export class StateEngine {
|
|
|
100
100
|
invalidateResolverCache() {
|
|
101
101
|
var _a, _b;
|
|
102
102
|
this.resolverPatchCache.clear(), this.resolverCacheKey = "", this.resolverCacheValid = !1,
|
|
103
|
-
null === (_b =
|
|
103
|
+
null === (_b = getActiveStageStatePerfMonitor(null === (_a = this.graphic) || void 0 === _a ? void 0 : _a.stage)) || void 0 === _b || _b.recordResolver("invalidations");
|
|
104
104
|
}
|
|
105
105
|
hasState(stateName) {
|
|
106
106
|
return !!this._activeStates.length && (null == stateName || this._activeStates.includes(stateName));
|
|
@@ -142,7 +142,7 @@ export class StateEngine {
|
|
|
142
142
|
}
|
|
143
143
|
recomputePatch(effectiveStates) {
|
|
144
144
|
var _a;
|
|
145
|
-
const perfMonitor =
|
|
145
|
+
const perfMonitor = getActiveStageStatePerfMonitor(null === (_a = this.graphic) || void 0 === _a ? void 0 : _a.stage), patchStart = perfMonitor ? performance.now() : 0;
|
|
146
146
|
let resolverCost = 0;
|
|
147
147
|
const cacheKey = effectiveStates.join(","), nextPatch = {};
|
|
148
148
|
if (null == perfMonitor || perfMonitor.recordAllocation("patchObjectsCreated"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/state/state-engine.ts"],"names":[],"mappings":"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","file":"state-engine.js","sourcesContent":["import type {\n CompiledStateDefinition,\n IStateEngineOptions,\n StateDefinitionsInput,\n StateTransitionResult\n} from './state-definition';\nimport { getStageStatePerfMonitor } from './state-perf-monitor';\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction cloneValue<T>(value: T): T {\n if (!isPlainObject(value)) {\n return value;\n }\n\n const clone: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n clone[key] = cloneValue((value as Record<string, any>)[key]);\n });\n return clone as T;\n}\n\nfunction deepMerge(base: Record<string, any>, value: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = cloneValue(base) ?? {};\n\n Object.keys(value).forEach(key => {\n const nextValue = value[key];\n const previousValue = result[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n result[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n result[key] = cloneValue(nextValue);\n });\n\n return result;\n}\n\nconst FULL_DEFINITION_KEYS = new Set([\n 'name',\n 'patch',\n 'priority',\n 'exclude',\n 'suppress',\n 'resolver',\n 'declaredAffectedKeys'\n]);\n\nexport class StateEngine<T extends Record<string, any> = Record<string, any>> {\n private readonly compiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n private readonly stateSort?: (a: string, b: string) => number;\n private readonly stateProxy?: (stateName: string, targetStates?: string[]) => Partial<T> | undefined;\n private readonly stateProxyEligibility?: (stateName: string) => boolean;\n private readonly states?: StateDefinitionsInput<T>;\n private readonly mergeMode: 'shallow' | 'deep';\n\n private _activeStates: string[] = [];\n private _effectiveStates: string[] = [];\n private _suppressed: string[] = [];\n private _resolvedPatch: Partial<T> = {};\n private resolverPatchCache = new Map<string, Partial<T>>();\n private resolverCacheKey = '';\n private resolverCacheValid = false;\n private graphic: any;\n private baseAttributes: Partial<T> = {};\n\n constructor(options: IStateEngineOptions<T>) {\n this.compiledDefinitions = options.compiledDefinitions;\n this.stateSort = options.stateSort;\n this.stateProxy = options.stateProxy;\n this.stateProxyEligibility = options.stateProxyEligibility;\n this.states = options.states;\n this.mergeMode = options.mergeMode ?? 'shallow';\n }\n\n get activeStates(): ReadonlyArray<string> {\n return this._activeStates;\n }\n\n get effectiveStates(): ReadonlyArray<string> {\n return this._effectiveStates;\n }\n\n get resolvedPatch(): Partial<T> {\n return this._resolvedPatch;\n }\n\n get suppressed(): ReadonlyArray<string> {\n return this._suppressed;\n }\n\n setResolveContext(graphic: any, baseAttributes: Partial<T>): void {\n this.graphic = graphic;\n this.baseAttributes = baseAttributes;\n }\n\n applyStates(stateNames: string[]): StateTransitionResult {\n const uniqueStates = Array.from(new Set(stateNames));\n const sortedStates = this.sortStates(uniqueStates);\n const adjudicated = this.adjudicate(sortedStates);\n const activeStates = adjudicated.active;\n const effectiveStates = activeStates.filter(stateName => !adjudicated.suppressedSet.has(stateName));\n const suppressed = activeStates.filter(stateName => adjudicated.suppressedSet.has(stateName));\n\n const changed =\n !this.sameArray(this._activeStates, activeStates) ||\n !this.sameArray(this._effectiveStates, effectiveStates) ||\n !this.sameArray(this._suppressed, suppressed);\n\n this._activeStates = activeStates;\n this._effectiveStates = effectiveStates;\n this._suppressed = suppressed;\n\n if (changed || !this.resolverCacheValid) {\n this.recomputePatch(effectiveStates);\n }\n\n return {\n changed,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n addState(stateName: string, keepCurrentStates?: boolean): StateTransitionResult {\n if (this._activeStates.includes(stateName) && (keepCurrentStates || this._activeStates.length === 1)) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n const nextStates =\n keepCurrentStates && this._activeStates.length ? this._activeStates.concat([stateName]) : [stateName];\n\n return this.applyStates(nextStates);\n }\n\n removeState(stateNames: string | string[]): StateTransitionResult {\n if (!this._activeStates.length) {\n return {\n changed: false,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n const filteredNames = Array.isArray(stateNames)\n ? this._activeStates.filter(stateName => !stateNames.includes(stateName))\n : this._activeStates.filter(stateName => stateName !== stateNames);\n\n if (filteredNames.length === this._activeStates.length) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n return this.applyStates(filteredNames);\n }\n\n toggleState(stateName: string): StateTransitionResult {\n if (this.hasState(stateName)) {\n return this.removeState(stateName);\n }\n\n return this.applyStates(this._activeStates.concat([stateName]));\n }\n\n clearStates(): StateTransitionResult {\n const changed = this._activeStates.length > 0 || this._effectiveStates.length > 0 || this._suppressed.length > 0;\n this._activeStates = [];\n this._effectiveStates = [];\n this._suppressed = [];\n this._resolvedPatch = {};\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n\n return {\n changed,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n invalidateResolverCache(): void {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n getStageStatePerfMonitor(this.graphic?.stage)?.recordResolver('invalidations');\n }\n\n hasState(stateName?: string): boolean {\n if (!this._activeStates.length) {\n return false;\n }\n\n if (stateName == null) {\n return true;\n }\n\n return this._activeStates.includes(stateName);\n }\n\n getCompatPatch(stateName: string): Partial<T> | undefined {\n const targetStates = this._activeStates.length ? this._activeStates : this._effectiveStates;\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, targetStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n return proxyPatch ?? undefined;\n }\n\n const value = this.states?.[stateName];\n if (value == null) {\n return undefined;\n }\n\n if (!isPlainObject(value)) {\n return value as Partial<T>;\n }\n\n const keys = Object.keys(value);\n const hasFullKey = keys.some(key => FULL_DEFINITION_KEYS.has(key));\n if (!hasFullKey) {\n return value as Partial<T>;\n }\n\n return cloneValue(((value as Record<string, any>).patch ?? undefined) as Partial<T> | undefined);\n }\n\n private sortStates(states: string[]): string[] {\n const withDefinition: string[] = [];\n const withoutDefinition: string[] = [];\n\n states.forEach(stateName => {\n if (this.compiledDefinitions.has(stateName)) {\n withDefinition.push(stateName);\n } else {\n withoutDefinition.push(stateName);\n }\n });\n\n withDefinition.sort((left, right) => {\n const leftDefinition = this.compiledDefinitions.get(left);\n const rightDefinition = this.compiledDefinitions.get(right);\n if (!leftDefinition || !rightDefinition) {\n return 0;\n }\n if (leftDefinition.priority !== rightDefinition.priority) {\n return leftDefinition.priority - rightDefinition.priority;\n }\n return leftDefinition.rank - rightDefinition.rank;\n });\n\n if (this.stateSort && withoutDefinition.length > 1) {\n withoutDefinition.sort(this.stateSort);\n }\n\n return withDefinition.concat(withoutDefinition);\n }\n\n private adjudicate(sortedStates: string[]): { active: string[]; suppressedSet: Set<string> } {\n const candidate = sortedStates.slice();\n const suppressedSet = new Set<string>();\n\n for (let index = candidate.length - 1; index >= 0; index--) {\n const stateName = candidate[index];\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n continue;\n }\n\n definition.exclude.forEach(excludedState => {\n const excludedIndex = candidate.indexOf(excludedState);\n if (excludedIndex === -1) {\n return;\n }\n\n candidate.splice(excludedIndex, 1);\n if (excludedIndex < index) {\n index -= 1;\n }\n });\n\n definition.suppress.forEach(suppressedState => {\n suppressedSet.add(suppressedState);\n });\n }\n\n return {\n active: candidate,\n suppressedSet\n };\n }\n\n private recomputePatch(effectiveStates: string[]): void {\n const perfMonitor = getStageStatePerfMonitor(this.graphic?.stage);\n const patchStart = perfMonitor ? performance.now() : 0;\n let resolverCost = 0;\n const cacheKey = effectiveStates.join(',');\n const nextPatch: Partial<T> = {};\n perfMonitor?.recordAllocation('patchObjectsCreated');\n\n if (this.resolverCacheValid && this.resolverCacheKey === cacheKey) {\n effectiveStates.forEach(stateName => {\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, effectiveStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n if (proxyPatch != null) {\n this.mergeInto(nextPatch, proxyPatch);\n }\n return;\n }\n\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n const compatPatch = this.getCompatPatch(stateName);\n if (compatPatch) {\n this.mergeInto(nextPatch, compatPatch);\n }\n return;\n }\n\n if (definition.patch) {\n this.mergeInto(nextPatch, definition.patch);\n }\n\n if (definition.hasResolver) {\n const cachedPatch = this.resolverPatchCache.get(stateName);\n if (cachedPatch) {\n perfMonitor?.recordResolver('cacheHits');\n this.mergeInto(nextPatch, cachedPatch);\n }\n }\n });\n } else {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = cacheKey;\n\n effectiveStates.forEach(stateName => {\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, effectiveStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n if (proxyPatch != null) {\n this.mergeInto(nextPatch, proxyPatch);\n }\n return;\n }\n\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n const compatPatch = this.getCompatPatch(stateName);\n if (compatPatch) {\n this.mergeInto(nextPatch, compatPatch);\n }\n return;\n }\n\n if (definition.patch) {\n this.mergeInto(nextPatch, definition.patch);\n }\n\n if (definition.hasResolver && definition.resolver) {\n perfMonitor?.recordResolver('cacheMisses');\n const resolverStart = perfMonitor ? performance.now() : 0;\n const resolverPatch = definition.resolver({\n graphic: this.graphic,\n activeStates: this._activeStates,\n effectiveStates: this._effectiveStates,\n baseAttributes: this.baseAttributes,\n resolvedPatch: nextPatch\n });\n if (perfMonitor) {\n const duration = performance.now() - resolverStart;\n resolverCost += duration;\n perfMonitor.recordCost('resolver', duration);\n }\n if (resolverPatch) {\n this.resolverPatchCache.set(stateName, resolverPatch);\n this.mergeInto(nextPatch, resolverPatch);\n }\n }\n });\n\n this.resolverCacheValid = true;\n }\n\n this._resolvedPatch = nextPatch;\n if (perfMonitor) {\n const totalCost = performance.now() - patchStart;\n perfMonitor.recordCost('patch', Math.max(0, totalCost - resolverCost));\n }\n }\n\n private mergeInto(target: Partial<T>, patch: Partial<T>): void {\n if (this.mergeMode === 'deep') {\n Object.keys(patch).forEach(key => {\n const nextValue = (patch as Record<string, any>)[key];\n const previousValue = (target as Record<string, any>)[key];\n const baseValue = (this.baseAttributes as Record<string, any>)?.[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n if (!isPlainObject(previousValue) && isPlainObject(baseValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(baseValue, nextValue);\n return;\n }\n\n (target as Record<string, any>)[key] = cloneValue(nextValue);\n });\n return;\n }\n\n Object.keys(patch).forEach(key => {\n (target as Record<string, any>)[key] = cloneValue((patch as Record<string, any>)[key]);\n });\n }\n\n private sameArray(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false;\n }\n\n for (let index = 0; index < left.length; index++) {\n if (left[index] !== right[index]) {\n return false;\n }\n }\n\n return true;\n }\n\n private canUseStateProxy(stateName: string): boolean {\n if (!this.stateProxy) {\n return false;\n }\n\n return this.stateProxyEligibility ? this.stateProxyEligibility(stateName) : true;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/state/state-engine.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,UAAU,CAAI,KAAQ;IAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC/B,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAE,KAA6B,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,IAAyB,EAAE,KAA0B;;IACtE,MAAM,MAAM,GAAwB,MAAA,UAAU,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAC;IAE3D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE;YAC5D,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAClD,OAAO;SACR;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,MAAM;IACN,OAAO;IACP,UAAU;IACV,SAAS;IACT,UAAU;IACV,UAAU;IACV,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,OAAO,WAAW;IAkBtB,YAAY,OAA+B;;QAVnC,kBAAa,GAAa,EAAE,CAAC;QAC7B,qBAAgB,GAAa,EAAE,CAAC;QAChC,gBAAW,GAAa,EAAE,CAAC;QAC3B,mBAAc,GAAe,EAAE,CAAC;QAChC,uBAAkB,GAAG,IAAI,GAAG,EAAsB,CAAC;QACnD,qBAAgB,GAAG,EAAE,CAAC;QACtB,uBAAkB,GAAG,KAAK,CAAC;QAE3B,mBAAc,GAAe,EAAE,CAAC;QAGtC,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAA,OAAO,CAAC,SAAS,mCAAI,SAAS,CAAC;IAClD,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,iBAAiB,CAAC,OAAY,EAAE,cAA0B;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,WAAW,CAAC,UAAoB;QAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;QACxC,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACpG,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAE9F,MAAM,OAAO,GACX,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC;YACjD,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC;YACvD,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEhD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAE9B,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACvC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;SACtC;QAED,OAAO;YACL,OAAO;YACP,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YACrC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC3C,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;SAClC,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,iBAA2B;QACrD,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;YACpG,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;gBACrC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC3C,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;aAClC,CAAC;SACH;QAED,MAAM,UAAU,GACd,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAExG,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,WAAW,CAAC,UAA6B;QACvC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC9B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,EAAE;gBAChB,eAAe,EAAE,EAAE;gBACnB,UAAU,EAAE,EAAE;aACf,CAAC;SACH;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAC7C,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC;QAErE,IAAI,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACtD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;gBACrC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC3C,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;aAClC,CAAC;SACH;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACpC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,WAAW;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACjH,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAEhC,OAAO;YACL,OAAO;YACP,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;IAED,uBAAuB;;QACrB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,MAAA,8BAA8B,CAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAC,0CAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACvF,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC9B,OAAO,KAAK,CAAC;SACd;QAED,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,cAAc,CAAC,SAAiB;;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC5F,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,UAAU,qDAAG,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,IAAI,IAAI,CAAC,UAAU,IAAI,gBAAgB,EAAE;YACvC,OAAO,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,SAAS,CAAC;SAChC;QAED,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAG,SAAS,CAAC,CAAC;QACvC,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,KAAmB,CAAC;SAC5B;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,KAAmB,CAAC;SAC5B;QAED,OAAO,UAAU,CAAC,CAAC,MAAC,KAA6B,CAAC,KAAK,mCAAI,SAAS,CAA2B,CAAC,CAAC;IACnG,CAAC;IAEO,UAAU,CAAC,MAAgB;QACjC,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,iBAAiB,GAAa,EAAE,CAAC;QAEvC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACzB,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBAC3C,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAChC;iBAAM;gBACL,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACnC;QACH,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE;gBACvC,OAAO,CAAC,CAAC;aACV;YACD,IAAI,cAAc,CAAC,QAAQ,KAAK,eAAe,CAAC,QAAQ,EAAE;gBACxD,OAAO,cAAc,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC;aAC3D;YACD,OAAO,cAAc,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAClD,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxC;QAED,OAAO,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC;IAEO,UAAU,CAAC,YAAsB;QACvC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,KAAK,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,CAAC,UAAU,EAAE;gBACf,SAAS;aACV;YAED,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;gBACzC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBACvD,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;oBACxB,OAAO;iBACR;gBAED,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gBACnC,IAAI,aAAa,GAAG,KAAK,EAAE;oBACzB,KAAK,IAAI,CAAC,CAAC;iBACZ;YACH,CAAC,CAAC,CAAC;YAEH,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAC5C,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;SACJ;QAED,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,aAAa;SACd,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,eAAyB;;QAC9C,MAAM,WAAW,GAAG,8BAA8B,CAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;YACjE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;;gBAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,UAAU,qDAAG,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChG,IAAI,IAAI,CAAC,UAAU,IAAI,gBAAgB,EAAE;oBACvC,IAAI,UAAU,IAAI,IAAI,EAAE;wBACtB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;qBACvC;oBACD,OAAO;iBACR;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC3D,IAAI,CAAC,UAAU,EAAE;oBACf,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,WAAW,EAAE;wBACf,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;qBACxC;oBACD,OAAO;iBACR;gBAED,IAAI,UAAU,CAAC,KAAK,EAAE;oBACpB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC7C;gBAED,IAAI,UAAU,CAAC,WAAW,EAAE;oBAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3D,IAAI,WAAW,EAAE;wBACf,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,CAAC,WAAW,CAAC,CAAC;wBACzC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;qBACxC;iBACF;YACH,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;YAEjC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;;gBAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,UAAU,qDAAG,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChG,IAAI,IAAI,CAAC,UAAU,IAAI,gBAAgB,EAAE;oBACvC,IAAI,UAAU,IAAI,IAAI,EAAE;wBACtB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;qBACvC;oBACD,OAAO;iBACR;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC3D,IAAI,CAAC,UAAU,EAAE;oBACf,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,WAAW,EAAE;wBACf,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;qBACxC;oBACD,OAAO;iBACR;gBAED,IAAI,UAAU,CAAC,KAAK,EAAE;oBACpB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC7C;gBAED,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,QAAQ,EAAE;oBACjD,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,CAAC,aAAa,CAAC,CAAC;oBAC3C,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC;wBACxC,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,YAAY,EAAE,IAAI,CAAC,aAAa;wBAChC,eAAe,EAAE,IAAI,CAAC,gBAAgB;wBACtC,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,aAAa,EAAE,SAAS;qBACzB,CAAC,CAAC;oBACH,IAAI,WAAW,EAAE;wBACf,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;wBACnD,YAAY,IAAI,QAAQ,CAAC;wBACzB,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;qBAC9C;oBACD,IAAI,aAAa,EAAE;wBACjB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;wBACtD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;qBAC1C;iBACF;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChC;QAED,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,WAAW,EAAE;YACf,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;YACjD,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;SACxE;IACH,CAAC;IAEO,SAAS,CAAC,MAAkB,EAAE,KAAiB;QACrD,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;;gBAC/B,MAAM,SAAS,GAAI,KAA6B,CAAC,GAAG,CAAC,CAAC;gBACtD,MAAM,aAAa,GAAI,MAA8B,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM,SAAS,GAAG,MAAC,IAAI,CAAC,cAAsC,0CAAG,GAAG,CAAC,CAAC;gBAEtE,IAAI,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE;oBAC3D,MAA8B,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;oBAC3E,OAAO;iBACR;gBAED,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE;oBACxF,MAA8B,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBACvE,OAAO;iBACR;gBAEA,MAA8B,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YACH,OAAO;SACR;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC9B,MAA8B,CAAC,GAAG,CAAC,GAAG,UAAU,CAAE,KAA6B,CAAC,GAAG,CAAC,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,IAAuB,EAAE,KAAwB;QACjE,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;YAChC,OAAO,KAAK,CAAC;SACd;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE;gBAChC,OAAO,KAAK,CAAC;aACd;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,gBAAgB,CAAC,SAAiB;QACxC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,CAAC;CACF","file":"state-engine.js","sourcesContent":["import type {\n CompiledStateDefinition,\n IStateEngineOptions,\n StateDefinitionsInput,\n StateTransitionResult\n} from './state-definition';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction cloneValue<T>(value: T): T {\n if (!isPlainObject(value)) {\n return value;\n }\n\n const clone: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n clone[key] = cloneValue((value as Record<string, any>)[key]);\n });\n return clone as T;\n}\n\nfunction deepMerge(base: Record<string, any>, value: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = cloneValue(base) ?? {};\n\n Object.keys(value).forEach(key => {\n const nextValue = value[key];\n const previousValue = result[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n result[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n result[key] = cloneValue(nextValue);\n });\n\n return result;\n}\n\nconst FULL_DEFINITION_KEYS = new Set([\n 'name',\n 'patch',\n 'priority',\n 'exclude',\n 'suppress',\n 'resolver',\n 'declaredAffectedKeys'\n]);\n\nexport class StateEngine<T extends Record<string, any> = Record<string, any>> {\n private readonly compiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n private readonly stateSort?: (a: string, b: string) => number;\n private readonly stateProxy?: (stateName: string, targetStates?: string[]) => Partial<T> | undefined;\n private readonly stateProxyEligibility?: (stateName: string) => boolean;\n private readonly states?: StateDefinitionsInput<T>;\n private readonly mergeMode: 'shallow' | 'deep';\n\n private _activeStates: string[] = [];\n private _effectiveStates: string[] = [];\n private _suppressed: string[] = [];\n private _resolvedPatch: Partial<T> = {};\n private resolverPatchCache = new Map<string, Partial<T>>();\n private resolverCacheKey = '';\n private resolverCacheValid = false;\n private graphic: any;\n private baseAttributes: Partial<T> = {};\n\n constructor(options: IStateEngineOptions<T>) {\n this.compiledDefinitions = options.compiledDefinitions;\n this.stateSort = options.stateSort;\n this.stateProxy = options.stateProxy;\n this.stateProxyEligibility = options.stateProxyEligibility;\n this.states = options.states;\n this.mergeMode = options.mergeMode ?? 'shallow';\n }\n\n get activeStates(): ReadonlyArray<string> {\n return this._activeStates;\n }\n\n get effectiveStates(): ReadonlyArray<string> {\n return this._effectiveStates;\n }\n\n get resolvedPatch(): Partial<T> {\n return this._resolvedPatch;\n }\n\n get suppressed(): ReadonlyArray<string> {\n return this._suppressed;\n }\n\n setResolveContext(graphic: any, baseAttributes: Partial<T>): void {\n this.graphic = graphic;\n this.baseAttributes = baseAttributes;\n }\n\n applyStates(stateNames: string[]): StateTransitionResult {\n const uniqueStates = Array.from(new Set(stateNames));\n const sortedStates = this.sortStates(uniqueStates);\n const adjudicated = this.adjudicate(sortedStates);\n const activeStates = adjudicated.active;\n const effectiveStates = activeStates.filter(stateName => !adjudicated.suppressedSet.has(stateName));\n const suppressed = activeStates.filter(stateName => adjudicated.suppressedSet.has(stateName));\n\n const changed =\n !this.sameArray(this._activeStates, activeStates) ||\n !this.sameArray(this._effectiveStates, effectiveStates) ||\n !this.sameArray(this._suppressed, suppressed);\n\n this._activeStates = activeStates;\n this._effectiveStates = effectiveStates;\n this._suppressed = suppressed;\n\n if (changed || !this.resolverCacheValid) {\n this.recomputePatch(effectiveStates);\n }\n\n return {\n changed,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n addState(stateName: string, keepCurrentStates?: boolean): StateTransitionResult {\n if (this._activeStates.includes(stateName) && (keepCurrentStates || this._activeStates.length === 1)) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n const nextStates =\n keepCurrentStates && this._activeStates.length ? this._activeStates.concat([stateName]) : [stateName];\n\n return this.applyStates(nextStates);\n }\n\n removeState(stateNames: string | string[]): StateTransitionResult {\n if (!this._activeStates.length) {\n return {\n changed: false,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n const filteredNames = Array.isArray(stateNames)\n ? this._activeStates.filter(stateName => !stateNames.includes(stateName))\n : this._activeStates.filter(stateName => stateName !== stateNames);\n\n if (filteredNames.length === this._activeStates.length) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n return this.applyStates(filteredNames);\n }\n\n toggleState(stateName: string): StateTransitionResult {\n if (this.hasState(stateName)) {\n return this.removeState(stateName);\n }\n\n return this.applyStates(this._activeStates.concat([stateName]));\n }\n\n clearStates(): StateTransitionResult {\n const changed = this._activeStates.length > 0 || this._effectiveStates.length > 0 || this._suppressed.length > 0;\n this._activeStates = [];\n this._effectiveStates = [];\n this._suppressed = [];\n this._resolvedPatch = {};\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n\n return {\n changed,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n invalidateResolverCache(): void {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n getActiveStageStatePerfMonitor(this.graphic?.stage)?.recordResolver('invalidations');\n }\n\n hasState(stateName?: string): boolean {\n if (!this._activeStates.length) {\n return false;\n }\n\n if (stateName == null) {\n return true;\n }\n\n return this._activeStates.includes(stateName);\n }\n\n getCompatPatch(stateName: string): Partial<T> | undefined {\n const targetStates = this._activeStates.length ? this._activeStates : this._effectiveStates;\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, targetStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n return proxyPatch ?? undefined;\n }\n\n const value = this.states?.[stateName];\n if (value == null) {\n return undefined;\n }\n\n if (!isPlainObject(value)) {\n return value as Partial<T>;\n }\n\n const keys = Object.keys(value);\n const hasFullKey = keys.some(key => FULL_DEFINITION_KEYS.has(key));\n if (!hasFullKey) {\n return value as Partial<T>;\n }\n\n return cloneValue(((value as Record<string, any>).patch ?? undefined) as Partial<T> | undefined);\n }\n\n private sortStates(states: string[]): string[] {\n const withDefinition: string[] = [];\n const withoutDefinition: string[] = [];\n\n states.forEach(stateName => {\n if (this.compiledDefinitions.has(stateName)) {\n withDefinition.push(stateName);\n } else {\n withoutDefinition.push(stateName);\n }\n });\n\n withDefinition.sort((left, right) => {\n const leftDefinition = this.compiledDefinitions.get(left);\n const rightDefinition = this.compiledDefinitions.get(right);\n if (!leftDefinition || !rightDefinition) {\n return 0;\n }\n if (leftDefinition.priority !== rightDefinition.priority) {\n return leftDefinition.priority - rightDefinition.priority;\n }\n return leftDefinition.rank - rightDefinition.rank;\n });\n\n if (this.stateSort && withoutDefinition.length > 1) {\n withoutDefinition.sort(this.stateSort);\n }\n\n return withDefinition.concat(withoutDefinition);\n }\n\n private adjudicate(sortedStates: string[]): { active: string[]; suppressedSet: Set<string> } {\n const candidate = sortedStates.slice();\n const suppressedSet = new Set<string>();\n\n for (let index = candidate.length - 1; index >= 0; index--) {\n const stateName = candidate[index];\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n continue;\n }\n\n definition.exclude.forEach(excludedState => {\n const excludedIndex = candidate.indexOf(excludedState);\n if (excludedIndex === -1) {\n return;\n }\n\n candidate.splice(excludedIndex, 1);\n if (excludedIndex < index) {\n index -= 1;\n }\n });\n\n definition.suppress.forEach(suppressedState => {\n suppressedSet.add(suppressedState);\n });\n }\n\n return {\n active: candidate,\n suppressedSet\n };\n }\n\n private recomputePatch(effectiveStates: string[]): void {\n const perfMonitor = getActiveStageStatePerfMonitor(this.graphic?.stage);\n const patchStart = perfMonitor ? performance.now() : 0;\n let resolverCost = 0;\n const cacheKey = effectiveStates.join(',');\n const nextPatch: Partial<T> = {};\n perfMonitor?.recordAllocation('patchObjectsCreated');\n\n if (this.resolverCacheValid && this.resolverCacheKey === cacheKey) {\n effectiveStates.forEach(stateName => {\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, effectiveStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n if (proxyPatch != null) {\n this.mergeInto(nextPatch, proxyPatch);\n }\n return;\n }\n\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n const compatPatch = this.getCompatPatch(stateName);\n if (compatPatch) {\n this.mergeInto(nextPatch, compatPatch);\n }\n return;\n }\n\n if (definition.patch) {\n this.mergeInto(nextPatch, definition.patch);\n }\n\n if (definition.hasResolver) {\n const cachedPatch = this.resolverPatchCache.get(stateName);\n if (cachedPatch) {\n perfMonitor?.recordResolver('cacheHits');\n this.mergeInto(nextPatch, cachedPatch);\n }\n }\n });\n } else {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = cacheKey;\n\n effectiveStates.forEach(stateName => {\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, effectiveStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n if (proxyPatch != null) {\n this.mergeInto(nextPatch, proxyPatch);\n }\n return;\n }\n\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n const compatPatch = this.getCompatPatch(stateName);\n if (compatPatch) {\n this.mergeInto(nextPatch, compatPatch);\n }\n return;\n }\n\n if (definition.patch) {\n this.mergeInto(nextPatch, definition.patch);\n }\n\n if (definition.hasResolver && definition.resolver) {\n perfMonitor?.recordResolver('cacheMisses');\n const resolverStart = perfMonitor ? performance.now() : 0;\n const resolverPatch = definition.resolver({\n graphic: this.graphic,\n activeStates: this._activeStates,\n effectiveStates: this._effectiveStates,\n baseAttributes: this.baseAttributes,\n resolvedPatch: nextPatch\n });\n if (perfMonitor) {\n const duration = performance.now() - resolverStart;\n resolverCost += duration;\n perfMonitor.recordCost('resolver', duration);\n }\n if (resolverPatch) {\n this.resolverPatchCache.set(stateName, resolverPatch);\n this.mergeInto(nextPatch, resolverPatch);\n }\n }\n });\n\n this.resolverCacheValid = true;\n }\n\n this._resolvedPatch = nextPatch;\n if (perfMonitor) {\n const totalCost = performance.now() - patchStart;\n perfMonitor.recordCost('patch', Math.max(0, totalCost - resolverCost));\n }\n }\n\n private mergeInto(target: Partial<T>, patch: Partial<T>): void {\n if (this.mergeMode === 'deep') {\n Object.keys(patch).forEach(key => {\n const nextValue = (patch as Record<string, any>)[key];\n const previousValue = (target as Record<string, any>)[key];\n const baseValue = (this.baseAttributes as Record<string, any>)?.[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n if (!isPlainObject(previousValue) && isPlainObject(baseValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(baseValue, nextValue);\n return;\n }\n\n (target as Record<string, any>)[key] = cloneValue(nextValue);\n });\n return;\n }\n\n Object.keys(patch).forEach(key => {\n (target as Record<string, any>)[key] = cloneValue((patch as Record<string, any>)[key]);\n });\n }\n\n private sameArray(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false;\n }\n\n for (let index = 0; index < left.length; index++) {\n if (left[index] !== right[index]) {\n return false;\n }\n }\n\n return true;\n }\n\n private canUseStateProxy(stateName: string): boolean {\n if (!this.stateProxy) {\n return false;\n }\n\n return this.stateProxyEligibility ? this.stateProxyEligibility(stateName) : true;\n }\n}\n"]}
|
|
@@ -116,4 +116,5 @@ export declare class StatePerfMonitor {
|
|
|
116
116
|
}
|
|
117
117
|
export declare function ensureStageStatePerfMonitor(stage: IStage): StatePerfMonitor;
|
|
118
118
|
export declare function getStageStatePerfMonitor(stage?: IStage): StatePerfMonitor | undefined;
|
|
119
|
+
export declare function getActiveStageStatePerfMonitor(stage?: IStage): StatePerfMonitor | undefined;
|
|
119
120
|
export {};
|
|
@@ -204,4 +204,11 @@ export function ensureStageStatePerfMonitor(stage) {
|
|
|
204
204
|
export function getStageStatePerfMonitor(stage) {
|
|
205
205
|
if (stage) return stage[STAGE_PERF_MONITOR];
|
|
206
206
|
}
|
|
207
|
+
|
|
208
|
+
export function getActiveStageStatePerfMonitor(stage) {
|
|
209
|
+
var _a;
|
|
210
|
+
if (!stage) return;
|
|
211
|
+
const current = getStageStatePerfMonitor(stage);
|
|
212
|
+
return current || (!0 === (null === (_a = stage.statePerfConfig) || void 0 === _a ? void 0 : _a.enabled) ? ensureStageStatePerfMonitor(stage) : void 0);
|
|
213
|
+
}
|
|
207
214
|
//# sourceMappingURL=state-perf-monitor.js.map
|