@foblex/flow 18.3.0 → 18.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI.md +69 -0
- package/README.md +40 -3
- package/STYLING.md +35 -0
- package/domain/f-connection/index.d.ts +1 -0
- package/domain/f-connection/providers.d.ts +2 -1
- package/domain/f-connection/redraw-connections/redraw-connections.d.ts +1 -0
- package/domain/f-connection/resolve-connection-endpoint-rotation-context/index.d.ts +2 -0
- package/domain/f-connection/resolve-connection-endpoint-rotation-context/resolve-connection-endpoint-rotation-context-request.d.ts +8 -0
- package/domain/f-connection/resolve-connection-endpoint-rotation-context/resolve-connection-endpoint-rotation-context.d.ts +10 -0
- package/domain/f-draggable/on-pointer-move/on-pointer-move-request.d.ts +1 -1
- package/domain/f-draggable/on-pointer-move/on-pointer-move.d.ts +1 -0
- package/domain/get-normalized-connector-rect/get-normalized-connector-rect.d.ts +8 -0
- package/domain/providers.d.ts +1 -1
- package/esm2022/domain/f-connection/index.mjs +2 -1
- package/esm2022/domain/f-connection/providers.mjs +3 -1
- package/esm2022/domain/f-connection/redraw-connections/redraw-connections.mjs +6 -2
- package/esm2022/domain/f-connection/resolve-connection-endpoint-rotation-context/index.mjs +3 -0
- package/esm2022/domain/f-connection/resolve-connection-endpoint-rotation-context/resolve-connection-endpoint-rotation-context-request.mjs +8 -0
- package/esm2022/domain/f-connection/resolve-connection-endpoint-rotation-context/resolve-connection-endpoint-rotation-context.mjs +35 -0
- package/esm2022/domain/f-draggable/on-pointer-move/on-pointer-move-request.mjs +1 -1
- package/esm2022/domain/f-draggable/on-pointer-move/on-pointer-move.mjs +6 -2
- package/esm2022/domain/get-normalized-connector-rect/get-normalized-connector-rect.mjs +33 -3
- package/esm2022/f-auto-pan/f-auto-pan-base.mjs +11 -0
- package/esm2022/f-auto-pan/f-auto-pan.mjs +38 -0
- package/esm2022/f-auto-pan/index.mjs +4 -0
- package/esm2022/f-auto-pan/providers.mjs +3 -0
- package/esm2022/f-canvas/f-canvas.component.mjs +2 -2
- package/esm2022/f-connection-v2/components/connection-content/f-connection-content.mjs +18 -4
- package/esm2022/f-connection-v2/utils/connection-behaviour/connection-behaviour-builder-request.mjs +6 -2
- package/esm2022/f-connection-v2/utils/connection-behaviour/connection-behaviour-builder.mjs +3 -1
- package/esm2022/f-connection-v2/utils/connection-behaviour/models/i-calculate-behavior-request.mjs +1 -1
- package/esm2022/f-connection-v2/utils/connection-behaviour/utils/floating-behavior.mjs +8 -8
- package/esm2022/f-connection-v2/utils/connection-behaviour/utils/get-rotated-rounded-rect-intersection.mjs +35 -0
- package/esm2022/f-connection-worker/features/calculate-connection-worker-payload-item/calculate-connection-worker-payload-item.mjs +13 -1
- package/esm2022/f-connection-worker/model/i-f-connection-worker-rect.mjs +1 -1
- package/esm2022/f-connection-worker/model/i-f-connection-worker-request-item.mjs +1 -1
- package/esm2022/f-connection-worker/worker/connection-worker-runtime.mjs +13 -1
- package/esm2022/f-draggable/auto-pan/auto-pan.utils.mjs +58 -0
- package/esm2022/f-draggable/auto-pan/index.mjs +7 -0
- package/esm2022/f-draggable/auto-pan/providers.mjs +5 -0
- package/esm2022/f-draggable/auto-pan/run-auto-pan-frame/index.mjs +3 -0
- package/esm2022/f-draggable/auto-pan/run-auto-pan-frame/run-auto-pan-frame-request.mjs +4 -0
- package/esm2022/f-draggable/auto-pan/run-auto-pan-frame/run-auto-pan-frame.mjs +97 -0
- package/esm2022/f-draggable/auto-pan/stop-auto-pan/index.mjs +3 -0
- package/esm2022/f-draggable/auto-pan/stop-auto-pan/stop-auto-pan-request.mjs +4 -0
- package/esm2022/f-draggable/auto-pan/stop-auto-pan/stop-auto-pan.mjs +32 -0
- package/esm2022/f-draggable/auto-pan/stored-pointer-event.mjs +25 -0
- package/esm2022/f-draggable/auto-pan/sync-auto-pan/index.mjs +3 -0
- package/esm2022/f-draggable/auto-pan/sync-auto-pan/sync-auto-pan-request.mjs +4 -0
- package/esm2022/f-draggable/auto-pan/sync-auto-pan/sync-auto-pan.mjs +75 -0
- package/esm2022/f-draggable/connection/create-connection/create-connection-handler/create-connection-handler.mjs +7 -4
- package/esm2022/f-draggable/connection/reassign-connection/reassign-connection-handler/reassign-connection-source-handler.mjs +7 -4
- package/esm2022/f-draggable/connection/reassign-connection/reassign-connection-handler/reassign-connection-target-handler.mjs +7 -4
- package/esm2022/f-draggable/drag-canvas/drag-canvas-handler/drag-canvas-handler.mjs +6 -3
- package/esm2022/f-draggable/drag-node/drag-node-dependent-connection-handlers/drag-node-connection-handler-base.mjs +6 -3
- package/esm2022/f-draggable/f-draggable-data-context.mjs +14 -1
- package/esm2022/f-draggable/f-draggable.directive.mjs +4 -1
- package/esm2022/f-draggable/index.mjs +2 -1
- package/esm2022/f-draggable/providers.mjs +3 -1
- package/esm2022/f-draggable/resize-node/resize-node-handler/resize-node-dependent-connection-handlers/resize-node-connection-handler-base.mjs +6 -3
- package/esm2022/f-flow/f-flow.component.mjs +2 -2
- package/esm2022/f-flow.module.mjs +20 -16
- package/esm2022/f-storage/f-components-store.mjs +3 -1
- package/esm2022/f-zoom/f-zoom.directive.mjs +9 -11
- package/esm2022/f-zoom/wheel-zoom.utils.mjs +34 -0
- package/esm2022/public-api.mjs +2 -1
- package/f-auto-pan/f-auto-pan-base.d.ts +11 -0
- package/f-auto-pan/f-auto-pan.d.ts +13 -0
- package/f-auto-pan/index.d.ts +3 -0
- package/f-auto-pan/providers.d.ts +2 -0
- package/f-connection-v2/utils/connection-behaviour/connection-behaviour-builder-request.d.ts +4 -1
- package/f-connection-v2/utils/connection-behaviour/models/i-calculate-behavior-request.d.ts +7 -1
- package/f-connection-v2/utils/connection-behaviour/utils/floating-behavior.d.ts +1 -1
- package/f-connection-v2/utils/connection-behaviour/utils/get-rotated-rounded-rect-intersection.d.ts +3 -0
- package/f-connection-worker/features/calculate-connection-worker-payload-item/calculate-connection-worker-payload-item.d.ts +1 -0
- package/f-connection-worker/model/i-f-connection-worker-rect.d.ts +4 -0
- package/f-connection-worker/model/i-f-connection-worker-request-item.d.ts +2 -0
- package/f-draggable/auto-pan/auto-pan.utils.d.ts +6 -0
- package/f-draggable/auto-pan/index.d.ts +6 -0
- package/f-draggable/auto-pan/providers.d.ts +4 -0
- package/f-draggable/auto-pan/run-auto-pan-frame/index.d.ts +2 -0
- package/f-draggable/auto-pan/run-auto-pan-frame/run-auto-pan-frame-request.d.ts +3 -0
- package/f-draggable/auto-pan/run-auto-pan-frame/run-auto-pan-frame.d.ts +21 -0
- package/f-draggable/auto-pan/stop-auto-pan/index.d.ts +2 -0
- package/f-draggable/auto-pan/stop-auto-pan/stop-auto-pan-request.d.ts +3 -0
- package/f-draggable/auto-pan/stop-auto-pan/stop-auto-pan.d.ts +10 -0
- package/f-draggable/auto-pan/stored-pointer-event.d.ts +12 -0
- package/f-draggable/auto-pan/sync-auto-pan/index.d.ts +2 -0
- package/f-draggable/auto-pan/sync-auto-pan/sync-auto-pan-request.d.ts +3 -0
- package/f-draggable/auto-pan/sync-auto-pan/sync-auto-pan.d.ts +19 -0
- package/f-draggable/connection/create-connection/create-connection-handler/create-connection-handler.d.ts +1 -0
- package/f-draggable/connection/reassign-connection/reassign-connection-handler/reassign-connection-source-handler.d.ts +1 -0
- package/f-draggable/connection/reassign-connection/reassign-connection-handler/reassign-connection-target-handler.d.ts +1 -0
- package/f-draggable/drag-node/drag-node-dependent-connection-handlers/drag-node-connection-handler-base.d.ts +1 -0
- package/f-draggable/f-draggable-data-context.d.ts +7 -1
- package/f-draggable/index.d.ts +1 -0
- package/f-draggable/providers.d.ts +1 -1
- package/f-draggable/resize-node/resize-node-handler/resize-node-dependent-connection-handlers/resize-node-connection-handler-base.d.ts +1 -0
- package/f-flow.module.d.ts +17 -16
- package/f-storage/f-components-store.d.ts +2 -0
- package/f-zoom/f-zoom.directive.d.ts +0 -1
- package/f-zoom/wheel-zoom.utils.d.ts +3 -0
- package/fesm2022/foblex-flow.mjs +7648 -7120
- package/fesm2022/foblex-flow.mjs.map +1 -1
- package/package.json +7 -7
- package/public-api.d.ts +1 -0
- package/schematics/ng-add/index.js +63 -2
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/shared/foblex-dependencies.js +1 -1
- package/styles/_index.scss +31 -0
- package/styles/default.scss +4 -0
- package/styles/domains/_connection.scss +175 -0
- package/styles/domains/_connector.scss +150 -0
- package/styles/domains/_external-item.scss +44 -0
- package/styles/domains/_flow-canvas.scss +41 -0
- package/styles/domains/_node-group.scss +230 -0
- package/styles/domains/_plugins.scss +100 -0
- package/styles/tokens/_ff-aliases.scss +117 -0
- package/styles/tokens/_primitive.scss +86 -0
- package/styles/tokens/_semantic.scss +131 -0
package/AI.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# AI Guide for `@foblex/flow`
|
|
2
|
+
|
|
3
|
+
Use this file as a strict control layer for code generation. Prefer verified package API and examples over assumptions.
|
|
4
|
+
|
|
5
|
+
## What This Library Is
|
|
6
|
+
|
|
7
|
+
`@foblex/flow` is an Angular-native library for building node-based editors, workflow builders, and interactive graph UIs.
|
|
8
|
+
It provides rendering, connectors, interactions, selection, zoom, and connection drawing. Your app still owns the graph data.
|
|
9
|
+
|
|
10
|
+
## Core Mental Model
|
|
11
|
+
|
|
12
|
+
- The library does **not** own your graph state.
|
|
13
|
+
- Your app owns nodes, groups, connections, ids, validation, and persistence.
|
|
14
|
+
- Angular templates render the current state.
|
|
15
|
+
- User actions emit events from `fDraggable` or model outputs.
|
|
16
|
+
- Your app updates state.
|
|
17
|
+
- Angular rerenders.
|
|
18
|
+
|
|
19
|
+
## Verified Building Blocks
|
|
20
|
+
|
|
21
|
+
- `<f-flow>`: root flow host.
|
|
22
|
+
- `<f-canvas>`: canvas/viewport container.
|
|
23
|
+
- `[fNode]` and `[fGroup]`: place nodes and groups in the template.
|
|
24
|
+
- `[fNodeOutput]` with `fOutputId`: output connector.
|
|
25
|
+
- `[fNodeInput]` with `fInputId`: input connector.
|
|
26
|
+
- `[fNodeOutlet]`: outlet-style connector surface for advanced connection creation patterns.
|
|
27
|
+
- `<f-connection>`: render an existing connection between connectors.
|
|
28
|
+
- `<f-connection-for-create>`: optional preview connection used during drag-to-connect UX.
|
|
29
|
+
- `fDraggable` on `<f-flow>`: enables pointer interactions and emits interaction events.
|
|
30
|
+
|
|
31
|
+
## Hard Rules
|
|
32
|
+
|
|
33
|
+
- Never invent Inputs, Outputs, methods, directives, or selectors.
|
|
34
|
+
- Do **not** assume React Flow style APIs such as `[nodes]`, `[edges]`, `setNodes()`, `addEdge()`, `useNodesState()`, or similar patterns.
|
|
35
|
+
- Do **not** assume a built-in graph store. The app owns state.
|
|
36
|
+
- Connections are connector-to-connector, not generic node-to-node edges.
|
|
37
|
+
- Template connections use `fOutputId -> fInputId`.
|
|
38
|
+
- Do **not** interpret `[fNodes]` or `[fConnections]` as graph-state inputs. In this package they are content-projection markers used with `ngProjectAs` in some examples.
|
|
39
|
+
- Examples may include app-specific state, layout logic, persistence, undo/redo, toolbars, or validation. Those are example implementations, not built-in package features.
|
|
40
|
+
- Some exports are low-level, compatibility-oriented, or testing-oriented. Do not treat every export from `@foblex/flow` as the recommended app-facing API.
|
|
41
|
+
- If a symbol, selector, event, or behavior is not confirmed in the installed package, say: `not found in @foblex/flow`.
|
|
42
|
+
|
|
43
|
+
## Correct Usage Pattern
|
|
44
|
+
|
|
45
|
+
- Render nodes and groups from your Angular state using normal Angular templates.
|
|
46
|
+
- Put connectors on the node element itself or on child elements with `fNodeOutput` / `fNodeInput`.
|
|
47
|
+
- Render persisted connections explicitly with `<f-connection>`.
|
|
48
|
+
- Add `fDraggable` to `<f-flow>` when you want drag, selection, connect, reassign, or drop interactions.
|
|
49
|
+
- Handle events such as `fCreateConnection`, `fReassignConnection`, `fMoveNodes`, `fSelectionChange`, `fCreateNode`, `fDropToGroup`, and `fConnectionWaypointsChanged`.
|
|
50
|
+
- Update your own state in those handlers, then let Angular rerender.
|
|
51
|
+
- Use node/group position bindings and change outputs to keep positions in app state when needed.
|
|
52
|
+
|
|
53
|
+
## Naming Distinction
|
|
54
|
+
|
|
55
|
+
- In templates, connector ids are `fOutputId` and `fInputId`.
|
|
56
|
+
- In `FCreateConnectionEvent`, prefer `sourceId`, `targetId`, and `dropPosition`.
|
|
57
|
+
- `FCreateConnectionEvent` still exposes legacy aliases `fOutputId`, `fInputId`, and `fDropPosition`.
|
|
58
|
+
- In `FReassignConnectionEvent`, prefer `connectionId`, `endpoint`, `previousSourceId`, `nextSourceId`, `previousTargetId`, `nextTargetId`, and `dropPosition`.
|
|
59
|
+
- `FReassignConnectionEvent` still exposes legacy aliases such as `oldSourceId`, `newSourceId`, `oldTargetId`, `newTargetId`, and `dropPoint`.
|
|
60
|
+
- Other current event classes also prefer non-`f*` names when both versions exist, for example `nodeIds` over `fNodeIds` and `nodes` over `fNodes`.
|
|
61
|
+
- Examples may still show compatibility names in handlers. Prefer the current non-deprecated event property names when generating new code.
|
|
62
|
+
|
|
63
|
+
## Styling
|
|
64
|
+
|
|
65
|
+
See [STYLING.md](./STYLING.md).
|
|
66
|
+
|
|
67
|
+
## Fallback Rule
|
|
68
|
+
|
|
69
|
+
If something cannot be verified from the installed package, answer with: `not found in @foblex/flow`.
|
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Foblex Flow gives Angular teams a simple way to start building graph-based produ
|
|
|
23
23
|
|
|
24
24
|
Use it to create workflow builders, AI low-code tools, call-flow editors, UML diagrams, internal back-office tools, and other node-based interfaces while keeping your own state, validation, persistence, and domain logic.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Current `18.x` releases target Angular `17.3+`. If your app is on Angular 12-17.2, check the [Angular Version Compatibility](https://flow.foblex.com/docs/angular-version-compatibility) guide first and pin the matching Foblex Flow line before installing.
|
|
27
27
|
|
|
28
28
|
## Why Foblex Flow
|
|
29
29
|
|
|
@@ -53,16 +53,52 @@ It works with Angular 15+, SSR, standalone components, and zoneless-friendly app
|
|
|
53
53
|
|
|
54
54
|
## Install
|
|
55
55
|
|
|
56
|
+
These install commands are for the current `18.x` line. For Angular 12-17.2 apps, use the [Angular Version Compatibility](https://flow.foblex.com/docs/angular-version-compatibility) guide first so you do not accidentally install a newer incompatible line.
|
|
57
|
+
|
|
56
58
|
```bash
|
|
57
59
|
ng add @foblex/flow
|
|
58
60
|
```
|
|
59
61
|
|
|
60
|
-
|
|
62
|
+
For Nx workspaces:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
nx g @foblex/flow:add
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
`ng add` installs the required companion packages automatically. If you prefer manual installation, install them explicitly:
|
|
61
69
|
|
|
62
70
|
```bash
|
|
63
|
-
npm install @foblex/flow
|
|
71
|
+
npm install @foblex/flow @foblex/platform@^1.0.4 @foblex/mediator@^1.1.3 @foblex/2d@^1.2.2 @foblex/utils@^1.1.1
|
|
64
72
|
```
|
|
65
73
|
|
|
74
|
+
`ng add` also wires the shipped default theme into application styles by adding `node_modules/@foblex/flow/styles/default.scss` when the entry is missing.
|
|
75
|
+
|
|
76
|
+
## Default Theme
|
|
77
|
+
|
|
78
|
+
Use the default theme when you want styled nodes, connectors, connections, minimap, selection area, and helper plugins immediately.
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
"styles": [
|
|
82
|
+
"src/styles.scss",
|
|
83
|
+
"node_modules/@foblex/flow/styles/default.scss"
|
|
84
|
+
]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
If you prefer selective SCSS mixins instead of one full entrypoint:
|
|
88
|
+
|
|
89
|
+
```scss
|
|
90
|
+
@use '@foblex/flow/styles' as flow-theme;
|
|
91
|
+
|
|
92
|
+
@include flow-theme.theme-tokens();
|
|
93
|
+
@include flow-theme.flow-canvas();
|
|
94
|
+
@include flow-theme.node-group();
|
|
95
|
+
@include flow-theme.connector();
|
|
96
|
+
@include flow-theme.connection-all();
|
|
97
|
+
@include flow-theme.plugins();
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Full guide: [Default Theme and Styling](https://flow.foblex.com/docs/default-theme-and-styling)
|
|
101
|
+
|
|
66
102
|
## Minimal Example
|
|
67
103
|
|
|
68
104
|
```html
|
|
@@ -104,6 +140,7 @@ npm install @foblex/flow
|
|
|
104
140
|
## Resources
|
|
105
141
|
|
|
106
142
|
- [Get Started](https://flow.foblex.com/docs/get-started)
|
|
143
|
+
- [Angular Version Compatibility](https://flow.foblex.com/docs/angular-version-compatibility)
|
|
107
144
|
- [Documentation](https://flow.foblex.com/docs/intro)
|
|
108
145
|
- [Examples](https://flow.foblex.com/examples/overview)
|
|
109
146
|
- [Articles](https://flow.foblex.com/blog/overview)
|
package/STYLING.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Styling Guide for `@foblex/flow`
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
|
|
5
|
+
Styling in `@foblex/flow` depends partly on CSS classes applied by the library at runtime.
|
|
6
|
+
Observed host/base classes in source include `.f-flow`, `.f-canvas`, `.f-node`, `.f-group`, `.f-connection`, `.f-node-input`, `.f-node-output`, and `.f-node-outlet`.
|
|
7
|
+
|
|
8
|
+
## Observed Runtime Classes
|
|
9
|
+
|
|
10
|
+
- Observed in source and examples: `.f-selected` for selected nodes, groups, connections, and minimap items.
|
|
11
|
+
- Observed in source: `.f-dragging` is applied during drag sequences. It is used on dragged items and also on the flow host during an active drag sequence.
|
|
12
|
+
- Observed in source and examples: `.f-connections-dragging` is applied while connection creation/reassignment is looking for valid targets.
|
|
13
|
+
- Observed in source and examples: `.f-connector-connectable` marks connectors that are currently valid connection targets.
|
|
14
|
+
- Observed in source: `.f-node-output-connected` and `.f-node-input-connected` mark connectors that are currently connected.
|
|
15
|
+
- Observed in source: `.f-node-output-not-connectable` and `.f-node-input-not-connectable` mark connectors that are present but currently not connectable.
|
|
16
|
+
- Observed in source: `.f-grouping-drop-active` and `.f-grouping-over-boundary` are applied during drop-to-group interactions.
|
|
17
|
+
- Observed in source: `.f-node-dragging-disabled`, `.f-node-selection-disabled`, `.f-group-dragging-disabled`, `.f-group-selection-disabled`, `.f-connection-reassign-disabled`, and `.f-connection-selection-disabled` are host modifier classes for disabled interaction states.
|
|
18
|
+
- Observed in source: `.f-node-input-disabled`, `.f-node-output-disabled`, and `.f-node-outlet-disabled` are connector/outlet disabled-state classes.
|
|
19
|
+
- Observed in source: `.f-node-input-multiple`, `.f-node-output-multiple`, and `.f-node-output-self-connectable` are connector capability/modifier classes.
|
|
20
|
+
|
|
21
|
+
## Safe Styling Approach
|
|
22
|
+
|
|
23
|
+
- Prefer styling your own semantic classes first, then combine them with high-level Foblex host classes.
|
|
24
|
+
- Safe selectors usually start from host elements such as `.f-node`, `.f-group`, `.f-connection`, `.f-node-input`, `.f-node-output`, and `.f-node-outlet`.
|
|
25
|
+
- For state styling, prefer selectors like `.my-node.f-selected`, `.my-connector.f-node-input-connected`, or `f-flow.f-connections-dragging .f-node-input`.
|
|
26
|
+
- Avoid depending on deep internal DOM structure for connections, markers, or helper overlays unless you inspect the runtime DOM in the installed version.
|
|
27
|
+
- If you need a very specific selector, inspect the rendered DOM first instead of assuming structure from examples.
|
|
28
|
+
|
|
29
|
+
## Warnings
|
|
30
|
+
|
|
31
|
+
- Not every runtime class should be treated as stable public styling API.
|
|
32
|
+
- Some classes are clearly internal interaction/animation helpers, for example `.f-canvas-dragging`, `.f-scaled-animate`, `.f-external-item-preview`, and `.f-external-item-placeholder`.
|
|
33
|
+
- `.canvas-dragging` is a deprecated compatibility alias. Prefer `.f-canvas-dragging`.
|
|
34
|
+
- Example styles prove that a class exists, not that it is guaranteed stable across versions.
|
|
35
|
+
- If a class is not verified in source or shipped examples, do not invent it. Say: `not found in @foblex/flow`.
|
|
@@ -4,6 +4,7 @@ export * from './add-connection-to-store';
|
|
|
4
4
|
export * from './add-snap-connection-to-store';
|
|
5
5
|
export * from './create-connection-markers';
|
|
6
6
|
export * from './redraw-connections';
|
|
7
|
+
export * from './resolve-connection-endpoint-rotation-context';
|
|
7
8
|
export * from './remove-connection-for-create-from-store';
|
|
8
9
|
export * from './remove-connection-from-store';
|
|
9
10
|
export * from './remove-connection-marker-from-store';
|
|
@@ -8,8 +8,9 @@ import { RemoveSnapConnectionFromStore } from './remove-snap-connection-from-sto
|
|
|
8
8
|
import { AddConnectionMarkerToStore } from './add-connection-marker-to-store';
|
|
9
9
|
import { RemoveConnectionMarkerFromStore } from './remove-connection-marker-from-store';
|
|
10
10
|
import { RedrawConnections } from './redraw-connections';
|
|
11
|
+
import { ResolveConnectionEndpointRotationContext } from './resolve-connection-endpoint-rotation-context';
|
|
11
12
|
import { RemoveConnectionWaypoint } from './remove-connection-waypoint';
|
|
12
13
|
/**
|
|
13
14
|
* This file exports all the connection-related features for the F-Flow domain.
|
|
14
15
|
*/
|
|
15
|
-
export declare const F_CONNECTION_FEATURES: (typeof AddConnectionForCreateToStore | typeof AddConnectionMarkerToStore | typeof AddConnectionToStore | typeof AddSnapConnectionToStore | typeof CreateConnectionMarkers | typeof RedrawConnections | typeof RemoveConnectionForCreateFromStore | typeof RemoveConnectionFromStore | typeof RemoveConnectionMarkerFromStore | typeof RemoveSnapConnectionFromStore | typeof RemoveConnectionWaypoint)[];
|
|
16
|
+
export declare const F_CONNECTION_FEATURES: (typeof AddConnectionForCreateToStore | typeof AddConnectionMarkerToStore | typeof AddConnectionToStore | typeof AddSnapConnectionToStore | typeof CreateConnectionMarkers | typeof RedrawConnections | typeof ResolveConnectionEndpointRotationContext | typeof RemoveConnectionForCreateFromStore | typeof RemoveConnectionFromStore | typeof RemoveConnectionMarkerFromStore | typeof RemoveSnapConnectionFromStore | typeof RemoveConnectionWaypoint)[];
|
|
@@ -19,6 +19,7 @@ export declare class RedrawConnections implements IExecution<RedrawConnectionsRe
|
|
|
19
19
|
private _setupConnection;
|
|
20
20
|
private _setupConnectionWithLine;
|
|
21
21
|
private _calculateConnectionLine;
|
|
22
|
+
private _resolveRotationContext;
|
|
22
23
|
private _resolveConnectionConnectors;
|
|
23
24
|
private _resolveConnectionContext;
|
|
24
25
|
private _createMarkers;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FConnectorBase } from '../../../f-connectors';
|
|
2
|
+
import { IConnectionEndpointRotationContext } from '../../../f-connection-v2';
|
|
3
|
+
export declare class ResolveConnectionEndpointRotationContextRequest {
|
|
4
|
+
readonly connector?: FConnectorBase | undefined;
|
|
5
|
+
static readonly fToken: unique symbol;
|
|
6
|
+
constructor(connector?: FConnectorBase | undefined);
|
|
7
|
+
}
|
|
8
|
+
export type TResolveConnectionEndpointRotationContextResponse = IConnectionEndpointRotationContext | undefined;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IExecution } from '@foblex/mediator';
|
|
2
|
+
import { ResolveConnectionEndpointRotationContextRequest, TResolveConnectionEndpointRotationContextResponse } from './resolve-connection-endpoint-rotation-context-request';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ResolveConnectionEndpointRotationContext implements IExecution<ResolveConnectionEndpointRotationContextRequest, TResolveConnectionEndpointRotationContextResponse> {
|
|
5
|
+
private readonly _store;
|
|
6
|
+
private readonly _mediator;
|
|
7
|
+
handle({ connector, }: ResolveConnectionEndpointRotationContextRequest): TResolveConnectionEndpointRotationContextResponse;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ResolveConnectionEndpointRotationContext, never>;
|
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ResolveConnectionEndpointRotationContext>;
|
|
10
|
+
}
|
|
@@ -7,6 +7,7 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
* when the drag started, and updates the draggable items accordingly.
|
|
8
8
|
*/
|
|
9
9
|
export declare class OnPointerMove implements IExecution<OnPointerMoveRequest, void> {
|
|
10
|
+
private readonly _mediator;
|
|
10
11
|
private readonly _store;
|
|
11
12
|
private get _hostElement();
|
|
12
13
|
private readonly _dragContext;
|
|
@@ -17,9 +17,17 @@ export declare class GetNormalizedConnectorRect implements IExecution<GetNormali
|
|
|
17
17
|
private _getRoundedRect;
|
|
18
18
|
private _getComputedStyle;
|
|
19
19
|
private _toPixels;
|
|
20
|
+
private _getSystemRadius;
|
|
21
|
+
/**
|
|
22
|
+
* Mirrors CSS border-radius normalization so oversized values like `999px`
|
|
23
|
+
* collapse to the largest valid circular radii for the current rect.
|
|
24
|
+
*/
|
|
25
|
+
private _normalizeCircularBorderRadii;
|
|
26
|
+
private _getRadiusScaleFactor;
|
|
20
27
|
private _normalizePosition;
|
|
21
28
|
private _unscaleSize;
|
|
22
29
|
private _getUnscaledRect;
|
|
30
|
+
private _unscaleRadius;
|
|
23
31
|
private _getOffsetSize;
|
|
24
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<GetNormalizedConnectorRect, never>;
|
|
25
33
|
static ɵprov: i0.ɵɵInjectableDeclaration<GetNormalizedConnectorRect>;
|
package/domain/providers.d.ts
CHANGED
|
@@ -10,4 +10,4 @@ import { GetNormalizedConnectorRect } from './get-normalized-connector-rect';
|
|
|
10
10
|
* draggable elements, flow, line alignment, nodes, selection, zoom,
|
|
11
11
|
* and various utility executions.
|
|
12
12
|
*/
|
|
13
|
-
export declare const COMMON_PROVIDERS: (typeof import("../f-cache").FCache | typeof import("../f-cache").InvalidateFCacheNode | typeof import("../f-cache").RegisterFCacheNode | typeof import("../f-cache").UnregisterFCacheNode | typeof import("../f-cache").RegisterFCacheConnector | typeof import("../f-cache").UnregisterFCacheConnector | typeof import("../f-cache").GetCachedFCacheRect | typeof import("../f-cache").SetFCacheConnectorRect | typeof import("../f-cache").SetFCacheNodeRect | typeof import("../f-cache").UpdateFCacheRectByElement | typeof import("./f-canvas").AddCanvasToStore | typeof import("./f-canvas").CenterGroupOrNode | typeof import("./f-canvas").FitToFlow | typeof import("./f-canvas").InputCanvasPosition | typeof import("./f-canvas").InputCanvasScale | typeof import("./f-canvas").RedrawCanvasWithAnimation | typeof import("./f-canvas").ResetScaleAndCenter | typeof import("./f-canvas").UpdateScale | typeof import("./f-connection").AddConnectionForCreateToStore | typeof import("./f-connection").AddConnectionMarkerToStore | typeof import("./f-connection").AddConnectionToStore | typeof import("./f-connection").AddSnapConnectionToStore | typeof import("./f-connection").CreateConnectionMarkers | typeof import("./f-connection").RemoveConnectionFromStore | typeof import("./f-connection").RemoveConnectionMarkerFromStore | typeof import("./f-connection").RemoveConnectionWaypoint | typeof import("./f-background").AddPatternToBackground | typeof import("./f-background").SetBackgroundTransform | typeof import("./f-connectors").AddConnectorToStore | typeof import("./f-connectors").RemoveConnectorFromStore | typeof import("./f-connectors").CalculateClosestConnector | typeof import("./f-connectors").FindConnectableConnectorUsingPriorityAndPosition | typeof import("./f-connectors").CalculateSourceConnectorsToConnect | typeof import("./f-connectors").CalculateTargetConnectorsToConnect | typeof import("./f-connectors").GetConnectorRectReference | typeof import("./f-connectors").MarkConnectableConnectors | typeof import("./f-connectors").UnmarkConnectableConnectors | typeof import("./f-draggable").AddDndToStore | typeof import("./f-draggable").OnPointerMove | typeof import("./f-flow").AddFlowToStore | typeof import("./f-flow").CalculateNodesState | typeof import("./f-node").AddNodeToStore | typeof import("./f-node").CalculateConnectableSideByConnectedPositions | typeof import("./f-node").CalculateConnectableSideByInternalPosition | typeof import("./f-node").CalculateInputConnections | typeof import("./f-node").CalculateConnectorsConnectableSides | typeof import("./f-node").CalculateNodesBoundingBoxNormalizedPosition | typeof import("./f-node").CalculateOutputConnections | typeof import("./f-node").FitToChildNodesAndGroups | typeof import("./f-node").GetChildNodeIds | typeof import("./f-node").GetNodePadding | typeof import("./f-node").GetParentNodes | typeof import("./f-node").UpdateNodeWhenStateOrSizeChanged | typeof import("./f-node").RemoveNodeFromStore | typeof import("./f-selection").Select | typeof import("./f-selection").SelectAndUpdateNodeLayer | typeof import("./f-zoom").SetZoom | typeof import("./minimap").MinimapCalculateViewport | typeof GetDeepChildrenNodesAndGroups | typeof GetNormalizedConnectorRect | typeof GetNormalizedElementRect | typeof GetNormalizedPoint | typeof SortItemsByParent | typeof UpdateItemAndChildrenLayers | typeof MoveFrontElementsBeforeTargetElement)[];
|
|
13
|
+
export declare const COMMON_PROVIDERS: (typeof import("../f-cache").FCache | typeof import("../f-cache").InvalidateFCacheNode | typeof import("../f-cache").RegisterFCacheNode | typeof import("../f-cache").UnregisterFCacheNode | typeof import("../f-cache").RegisterFCacheConnector | typeof import("../f-cache").UnregisterFCacheConnector | typeof import("../f-cache").GetCachedFCacheRect | typeof import("../f-cache").SetFCacheConnectorRect | typeof import("../f-cache").SetFCacheNodeRect | typeof import("../f-cache").UpdateFCacheRectByElement | typeof import("./f-canvas").AddCanvasToStore | typeof import("./f-canvas").CenterGroupOrNode | typeof import("./f-canvas").FitToFlow | typeof import("./f-canvas").InputCanvasPosition | typeof import("./f-canvas").InputCanvasScale | typeof import("./f-canvas").RedrawCanvasWithAnimation | typeof import("./f-canvas").ResetScaleAndCenter | typeof import("./f-canvas").UpdateScale | typeof import("./f-connection").AddConnectionForCreateToStore | typeof import("./f-connection").AddConnectionMarkerToStore | typeof import("./f-connection").AddConnectionToStore | typeof import("./f-connection").AddSnapConnectionToStore | typeof import("./f-connection").CreateConnectionMarkers | typeof import("./f-connection").ResolveConnectionEndpointRotationContext | typeof import("./f-connection").RemoveConnectionFromStore | typeof import("./f-connection").RemoveConnectionMarkerFromStore | typeof import("./f-connection").RemoveConnectionWaypoint | typeof import("./f-background").AddPatternToBackground | typeof import("./f-background").SetBackgroundTransform | typeof import("./f-connectors").AddConnectorToStore | typeof import("./f-connectors").RemoveConnectorFromStore | typeof import("./f-connectors").CalculateClosestConnector | typeof import("./f-connectors").FindConnectableConnectorUsingPriorityAndPosition | typeof import("./f-connectors").CalculateSourceConnectorsToConnect | typeof import("./f-connectors").CalculateTargetConnectorsToConnect | typeof import("./f-connectors").GetConnectorRectReference | typeof import("./f-connectors").MarkConnectableConnectors | typeof import("./f-connectors").UnmarkConnectableConnectors | typeof import("./f-draggable").AddDndToStore | typeof import("./f-draggable").OnPointerMove | typeof import("./f-flow").AddFlowToStore | typeof import("./f-flow").CalculateNodesState | typeof import("./f-node").AddNodeToStore | typeof import("./f-node").CalculateConnectableSideByConnectedPositions | typeof import("./f-node").CalculateConnectableSideByInternalPosition | typeof import("./f-node").CalculateInputConnections | typeof import("./f-node").CalculateConnectorsConnectableSides | typeof import("./f-node").CalculateNodesBoundingBoxNormalizedPosition | typeof import("./f-node").CalculateOutputConnections | typeof import("./f-node").FitToChildNodesAndGroups | typeof import("./f-node").GetChildNodeIds | typeof import("./f-node").GetNodePadding | typeof import("./f-node").GetParentNodes | typeof import("./f-node").UpdateNodeWhenStateOrSizeChanged | typeof import("./f-node").RemoveNodeFromStore | typeof import("./f-selection").Select | typeof import("./f-selection").SelectAndUpdateNodeLayer | typeof import("./f-zoom").SetZoom | typeof import("./minimap").MinimapCalculateViewport | typeof GetDeepChildrenNodesAndGroups | typeof GetNormalizedConnectorRect | typeof GetNormalizedElementRect | typeof GetNormalizedPoint | typeof SortItemsByParent | typeof UpdateItemAndChildrenLayers | typeof MoveFrontElementsBeforeTargetElement)[];
|
|
@@ -4,10 +4,11 @@ export * from './add-connection-to-store';
|
|
|
4
4
|
export * from './add-snap-connection-to-store';
|
|
5
5
|
export * from './create-connection-markers';
|
|
6
6
|
export * from './redraw-connections';
|
|
7
|
+
export * from './resolve-connection-endpoint-rotation-context';
|
|
7
8
|
export * from './remove-connection-for-create-from-store';
|
|
8
9
|
export * from './remove-connection-from-store';
|
|
9
10
|
export * from './remove-connection-marker-from-store';
|
|
10
11
|
export * from './remove-connection-waypoint';
|
|
11
12
|
export * from './remove-snap-connection-from-store';
|
|
12
13
|
export * from './providers';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLWNvbm5lY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQ0FBc0MsQ0FBQztBQUVyRCxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUUvQyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLGNBQWMsc0JBQXNCLENBQUM7QUFFckMsY0FBYyxnREFBZ0QsQ0FBQztBQUUvRCxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MsY0FBYyx1Q0FBdUMsQ0FBQztBQUV0RCxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLGNBQWMscUNBQXFDLENBQUM7QUFFcEQsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FkZC1jb25uZWN0aW9uLWZvci1jcmVhdGUtdG8tc3RvcmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2FkZC1jb25uZWN0aW9uLW1hcmtlci10by1zdG9yZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYWRkLWNvbm5lY3Rpb24tdG8tc3RvcmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2FkZC1zbmFwLWNvbm5lY3Rpb24tdG8tc3RvcmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZS1jb25uZWN0aW9uLW1hcmtlcnMnO1xuXG5leHBvcnQgKiBmcm9tICcuL3JlZHJhdy1jb25uZWN0aW9ucyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQnO1xuXG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZS1jb25uZWN0aW9uLWZvci1jcmVhdGUtZnJvbS1zdG9yZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmVtb3ZlLWNvbm5lY3Rpb24tZnJvbS1zdG9yZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmVtb3ZlLWNvbm5lY3Rpb24tbWFya2VyLWZyb20tc3RvcmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3JlbW92ZS1jb25uZWN0aW9uLXdheXBvaW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9yZW1vdmUtc25hcC1jb25uZWN0aW9uLWZyb20tc3RvcmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG4iXX0=
|
|
@@ -8,6 +8,7 @@ import { RemoveSnapConnectionFromStore } from './remove-snap-connection-from-sto
|
|
|
8
8
|
import { AddConnectionMarkerToStore } from './add-connection-marker-to-store';
|
|
9
9
|
import { RemoveConnectionMarkerFromStore } from './remove-connection-marker-from-store';
|
|
10
10
|
import { RedrawConnections } from './redraw-connections';
|
|
11
|
+
import { ResolveConnectionEndpointRotationContext } from './resolve-connection-endpoint-rotation-context';
|
|
11
12
|
import { RemoveConnectionWaypoint } from './remove-connection-waypoint';
|
|
12
13
|
/**
|
|
13
14
|
* This file exports all the connection-related features for the F-Flow domain.
|
|
@@ -19,10 +20,11 @@ export const F_CONNECTION_FEATURES = [
|
|
|
19
20
|
AddSnapConnectionToStore,
|
|
20
21
|
CreateConnectionMarkers,
|
|
21
22
|
RedrawConnections,
|
|
23
|
+
ResolveConnectionEndpointRotationContext,
|
|
22
24
|
RemoveConnectionForCreateFromStore,
|
|
23
25
|
RemoveConnectionFromStore,
|
|
24
26
|
RemoveConnectionMarkerFromStore,
|
|
25
27
|
RemoveSnapConnectionFromStore,
|
|
26
28
|
RemoveConnectionWaypoint,
|
|
27
29
|
];
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9kb21haW4vZi1jb25uZWN0aW9uL3Byb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMxRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLDZCQUE2QjtJQUU3QiwwQkFBMEI7SUFFMUIsb0JBQW9CO0lBRXBCLHdCQUF3QjtJQUV4Qix1QkFBdUI7SUFFdkIsaUJBQWlCO0lBRWpCLHdDQUF3QztJQUV4QyxrQ0FBa0M7SUFFbEMseUJBQXlCO0lBRXpCLCtCQUErQjtJQUUvQiw2QkFBNkI7SUFFN0Isd0JBQXdCO0NBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcmVhdGVDb25uZWN0aW9uTWFya2VycyB9IGZyb20gJy4vY3JlYXRlLWNvbm5lY3Rpb24tbWFya2Vycyc7XG5pbXBvcnQgeyBBZGRDb25uZWN0aW9uRm9yQ3JlYXRlVG9TdG9yZSB9IGZyb20gJy4vYWRkLWNvbm5lY3Rpb24tZm9yLWNyZWF0ZS10by1zdG9yZSc7XG5pbXBvcnQgeyBBZGRDb25uZWN0aW9uVG9TdG9yZSB9IGZyb20gJy4vYWRkLWNvbm5lY3Rpb24tdG8tc3RvcmUnO1xuaW1wb3J0IHsgQWRkU25hcENvbm5lY3Rpb25Ub1N0b3JlIH0gZnJvbSAnLi9hZGQtc25hcC1jb25uZWN0aW9uLXRvLXN0b3JlJztcbmltcG9ydCB7IFJlbW92ZUNvbm5lY3Rpb25Gb3JDcmVhdGVGcm9tU3RvcmUgfSBmcm9tICcuL3JlbW92ZS1jb25uZWN0aW9uLWZvci1jcmVhdGUtZnJvbS1zdG9yZSc7XG5pbXBvcnQgeyBSZW1vdmVDb25uZWN0aW9uRnJvbVN0b3JlIH0gZnJvbSAnLi9yZW1vdmUtY29ubmVjdGlvbi1mcm9tLXN0b3JlJztcbmltcG9ydCB7IFJlbW92ZVNuYXBDb25uZWN0aW9uRnJvbVN0b3JlIH0gZnJvbSAnLi9yZW1vdmUtc25hcC1jb25uZWN0aW9uLWZyb20tc3RvcmUnO1xuaW1wb3J0IHsgQWRkQ29ubmVjdGlvbk1hcmtlclRvU3RvcmUgfSBmcm9tICcuL2FkZC1jb25uZWN0aW9uLW1hcmtlci10by1zdG9yZSc7XG5pbXBvcnQgeyBSZW1vdmVDb25uZWN0aW9uTWFya2VyRnJvbVN0b3JlIH0gZnJvbSAnLi9yZW1vdmUtY29ubmVjdGlvbi1tYXJrZXItZnJvbS1zdG9yZSc7XG5pbXBvcnQgeyBSZWRyYXdDb25uZWN0aW9ucyB9IGZyb20gJy4vcmVkcmF3LWNvbm5lY3Rpb25zJztcbmltcG9ydCB7IFJlc29sdmVDb25uZWN0aW9uRW5kcG9pbnRSb3RhdGlvbkNvbnRleHQgfSBmcm9tICcuL3Jlc29sdmUtY29ubmVjdGlvbi1lbmRwb2ludC1yb3RhdGlvbi1jb250ZXh0JztcbmltcG9ydCB7IFJlbW92ZUNvbm5lY3Rpb25XYXlwb2ludCB9IGZyb20gJy4vcmVtb3ZlLWNvbm5lY3Rpb24td2F5cG9pbnQnO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBleHBvcnRzIGFsbCB0aGUgY29ubmVjdGlvbi1yZWxhdGVkIGZlYXR1cmVzIGZvciB0aGUgRi1GbG93IGRvbWFpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEZfQ09OTkVDVElPTl9GRUFUVVJFUyA9IFtcbiAgQWRkQ29ubmVjdGlvbkZvckNyZWF0ZVRvU3RvcmUsXG5cbiAgQWRkQ29ubmVjdGlvbk1hcmtlclRvU3RvcmUsXG5cbiAgQWRkQ29ubmVjdGlvblRvU3RvcmUsXG5cbiAgQWRkU25hcENvbm5lY3Rpb25Ub1N0b3JlLFxuXG4gIENyZWF0ZUNvbm5lY3Rpb25NYXJrZXJzLFxuXG4gIFJlZHJhd0Nvbm5lY3Rpb25zLFxuXG4gIFJlc29sdmVDb25uZWN0aW9uRW5kcG9pbnRSb3RhdGlvbkNvbnRleHQsXG5cbiAgUmVtb3ZlQ29ubmVjdGlvbkZvckNyZWF0ZUZyb21TdG9yZSxcblxuICBSZW1vdmVDb25uZWN0aW9uRnJvbVN0b3JlLFxuXG4gIFJlbW92ZUNvbm5lY3Rpb25NYXJrZXJGcm9tU3RvcmUsXG5cbiAgUmVtb3ZlU25hcENvbm5lY3Rpb25Gcm9tU3RvcmUsXG5cbiAgUmVtb3ZlQ29ubmVjdGlvbldheXBvaW50LFxuXTtcbiJdfQ==
|
|
@@ -7,6 +7,7 @@ import { CreateConnectionMarkersRequest } from '../create-connection-markers';
|
|
|
7
7
|
import { ConnectionBehaviourBuilder, ConnectionBehaviourBuilderRequest, } from '../../../f-connection-v2';
|
|
8
8
|
import { BrowserService } from '@foblex/platform';
|
|
9
9
|
import { CalculateConnectionsUsingConnectionWorkerRequest, ResolveConnectionWorkerConnectorsRequest, ResolveConnectionWorkerContextRequest, ShouldUseConnectionWorkerRequest, } from '../../../f-connection-worker';
|
|
10
|
+
import { ResolveConnectionEndpointRotationContextRequest, } from '../resolve-connection-endpoint-rotation-context';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
const CONNECTIONS_PER_SLICE_LIMIT = 500;
|
|
12
13
|
const SLICE_BUDGET_MS = 6;
|
|
@@ -74,7 +75,10 @@ let RedrawConnections = class RedrawConnections {
|
|
|
74
75
|
connection.isSelected() ? connection.markAsSelected() : null;
|
|
75
76
|
}
|
|
76
77
|
_calculateConnectionLine(connection, context) {
|
|
77
|
-
return this._connectionBehaviour.handle(new ConnectionBehaviourBuilderRequest(context.sourceRect, context.targetRect, connection, context.source.fConnectableSide, context.target.fConnectableSide));
|
|
78
|
+
return this._connectionBehaviour.handle(new ConnectionBehaviourBuilderRequest(context.sourceRect, context.targetRect, connection, context.source.fConnectableSide, context.target.fConnectableSide, this._resolveRotationContext(context.source), this._resolveRotationContext(context.target)));
|
|
79
|
+
}
|
|
80
|
+
_resolveRotationContext(connector) {
|
|
81
|
+
return this._mediator.execute(new ResolveConnectionEndpointRotationContextRequest(connector));
|
|
78
82
|
}
|
|
79
83
|
_resolveConnectionConnectors(connection) {
|
|
80
84
|
return this._mediator.execute(new ResolveConnectionWorkerConnectorsRequest(connection));
|
|
@@ -262,4 +266,4 @@ function serializeContents(contents) {
|
|
|
262
266
|
})
|
|
263
267
|
.join(';');
|
|
264
268
|
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcmF3LWNvbm5lY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9kb21haW4vZi1jb25uZWN0aW9uL3JlZHJhdy1jb25uZWN0aW9ucy9yZWRyYXctY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGlDQUFpQyxHQUlsQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsZ0RBQWdELEVBSWhELHdDQUF3QyxFQUN4QyxxQ0FBcUMsRUFDckMsZ0NBQWdDLEdBQ2pDLE1BQU0sOEJBQThCLENBQUM7O0FBRXRDLE1BQU0sMkJBQTJCLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUUxQjs7OztHQUlHO0FBR0ksSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBaUI7SUFDWCxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMxRCxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FB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RUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDL0QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBc0I7SUFDNUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFNBQXFDO0lBQy9ELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsUUFBMkM7SUFDcEUsT0FBTyxRQUFRO1NBQ1osR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElMaW5lLCBJUm91bmRlZFJlY3QgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVkcmF3Q29ubmVjdGlvbnNSZXF1ZXN0IH0gZnJvbSAnLi9yZWRyYXctY29ubmVjdGlvbnMtcmVxdWVzdCc7XG5pbXBvcnQgeyBGQ29tcG9uZW50c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IEZDb25uZWN0b3JCYXNlIH0gZnJvbSAnLi4vLi4vLi4vZi1jb25uZWN0b3JzJztcbmltcG9ydCB7IEZFeGVjdXRpb25SZWdpc3RlciwgRk1lZGlhdG9yLCBJRXhlY3V0aW9uIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBDcmVhdGVDb25uZWN0aW9uTWFya2Vyc1JlcXVlc3QgfSBmcm9tICcuLi9jcmVhdGUtY29ubmVjdGlvbi1tYXJrZXJzJztcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25CZWhhdmlvdXJCdWlsZGVyLFxuICBDb25uZWN0aW9uQmVoYXZpb3VyQnVpbGRlclJlcXVlc3QsXG4gIEVGQ29ubmVjdGFibGVTaWRlLFxuICBGQ29ubmVjdGlvbkJhc2UsXG4gIEZDb25uZWN0aW9uQ29udGVudEJhc2UsXG59IGZyb20gJy4uLy4uLy4uL2YtY29ubmVjdGlvbi12Mic7XG5pbXBvcnQgeyBCcm93c2VyU2VydmljZSB9IGZyb20gJ0Bmb2JsZXgvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgQ2FsY3VsYXRlQ29ubmVjdGlvbnNVc2luZ0Nvbm5lY3Rpb25Xb3JrZXJSZXF1ZXN0LFxuICBJRkNvbm5lY3Rpb25Xb3JrZXJDb25uZWN0b3JzLFxuICBJRkNvbm5lY3Rpb25Xb3JrZXJDb250ZXh0LFxuICBJRkNvbm5lY3Rpb25Xb3JrZXJSZXN1bHRJdGVtLFxuICBSZXNvbHZlQ29ubmVjdGlvbldvcmtlckNvbm5lY3RvcnNSZXF1ZXN0LFxuICBSZXNvbHZlQ29ubmVjdGlvbldvcmtlckNvbnRleHRSZXF1ZXN0LFxuICBTaG91bGRVc2VDb25uZWN0aW9uV29ya2VyUmVxdWVzdCxcbn0gZnJvbSAnLi4vLi4vLi4vZi1jb25uZWN0aW9uLXdvcmtlcic7XG5cbmNvbnN0IENPTk5FQ1RJT05TX1BFUl9TTElDRV9MSU1JVCA9IDUwMDtcbmNvbnN0IFNMSUNFX0JVREdFVF9NUyA9IDY7XG5cbi8qKlxuICogRXhlY3V0aW9uIHRoYXQgcmVkcmF3cyBjb25uZWN0aW9ucyBpbiB0aGUgRkNvbXBvbmVudHNTdG9yZS5cbiAqIEl0IHJlc2V0cyBjb25uZWN0b3JzLCBzZXRzIG1hcmtlcnMgZm9yIHRlbXBvcmFyeSBhbmQgc25hcCBjb25uZWN0aW9ucyxcbiAqIGFuZCBzZXRzIHVwIGNvbm5lY3Rpb25zIGJhc2VkIG9uIHRoZSBzdG9yZWQgb3V0cHV0cyBhbmQgaW5wdXRzLlxuICovXG5ASW5qZWN0YWJsZSgpXG5ARkV4ZWN1dGlvblJlZ2lzdGVyKFJlZHJhd0Nvbm5lY3Rpb25zUmVxdWVzdClcbmV4cG9ydCBjbGFzcyBSZWRyYXdDb25uZWN0aW9ucyBpbXBsZW1lbnRzIElFeGVjdXRpb248UmVkcmF3Q29ubmVjdGlvbnNSZXF1ZXN0LCB2b2lkPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lZGlhdG9yID0gaW5qZWN0KEZNZWRpYXRvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0b3JlID0gaW5qZWN0KEZDb21wb25lbnRzU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25uZWN0aW9uQmVoYXZpb3VyID0gaW5qZWN0KENvbm5lY3Rpb25CZWhhdmlvdXJCdWlsZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnJvd3NlciA9IGluamVjdChCcm93c2VyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfcmVuZGVyVGlja2V0ID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29ubmVjdGVkSW5QcmV2aW91c1JlbmRlciA9IG5ldyBTZXQ8RkNvbm5lY3RvckJhc2U+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25SZW5kZXJDYWNoZSA9IG5ldyBXZWFrTWFwPFxuICAgIEZDb25uZWN0aW9uQmFzZSxcbiAgICB7IHNpZ25hdHVyZTogc3RyaW5nOyBwYXRoRWxlbWVudDogU1ZHRWxlbWVudCB9XG4gID4oKTtcblxuICBwdWJsaWMgaGFuZGxlKF9yZXF1ZXN0OiBSZWRyYXdDb25uZWN0aW9uc1JlcXVlc3QpOiB2b2lkIHtcbiAgICBjb25zdCByZW5kZXJUaWNrZXQgPSArK3RoaXMuX3JlbmRlclRpY2tldDtcbiAgICBjb25zdCBub2Rlc1JldmlzaW9uID0gdGhpcy5fc3RvcmUubm9kZXNSZXZpc2lvbjtcbiAgICB0aGlzLl9yZXNldENvbm5lY3RlZENvbm5lY3RvcnMoKTtcblxuICAgIGNvbnN0IGluc3RhbmNlRm9yQ3JlYXRlID0gdGhpcy5fc3RvcmUuY29ubmVjdGlvbnMuZ2V0Rm9yQ3JlYXRlKCk7XG4gICAgaWYgKGluc3RhbmNlRm9yQ3JlYXRlKSB7XG4gICAgICB0aGlzLl9jcmVhdGVNYXJrZXJzKGluc3RhbmNlRm9yQ3JlYXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZUZvclNuYXAgPSB0aGlzLl9zdG9yZS5jb25uZWN0aW9ucy5nZXRGb3JTbmFwKCk7XG4gICAgaWYgKGluc3RhbmNlRm9yU25hcCkge1xuICAgICAgdGhpcy5fY3JlYXRlTWFya2VycyhpbnN0YW5jZUZvclNuYXApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gWy4uLnRoaXMuX3N0b3JlLmNvbm5lY3Rpb25zLmdldEFsbCgpXTtcbiAgICBjb25zdCBjb25uZWN0b3JSZWN0Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgSVJvdW5kZWRSZWN0PigpO1xuXG4gICAgaWYgKHRoaXMuX3Nob3VsZFVzZVdvcmtlcihjb25uZWN0aW9ucy5sZW5ndGgpKSB7XG4gICAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb25zVXNpbmdXb3JrZXIoXG4gICAgICAgIGNvbm5lY3Rpb25zLFxuICAgICAgICBjb25uZWN0b3JSZWN0Q2FjaGUsXG4gICAgICAgIHJlbmRlclRpY2tldCxcbiAgICAgICAgbm9kZXNSZXZpc2lvbixcbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2V0dXBDb25uZWN0aW9uc0NodW5rZWQoY29ubmVjdGlvbnMsIGNvbm5lY3RvclJlY3RDYWNoZSwgMCwgcmVuZGVyVGlja2V0LCBub2Rlc1JldmlzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q29ubmVjdGVkQ29ubmVjdG9ycygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZEluUHJldmlvdXNSZW5kZXIuc2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29ubmVjdG9yIG9mIHRoaXMuX2Nvbm5lY3RlZEluUHJldmlvdXNSZW5kZXIpIHtcbiAgICAgIGNvbm5lY3Rvci5yZXNldENvbm5lY3RlZCgpO1xuICAgIH1cblxuICAgIHRoaXMuX2Nvbm5lY3RlZEluUHJldmlvdXNSZW5kZXIuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQ29ubmVjdGlvbihjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UsIGNhY2hlOiBNYXA8c3RyaW5nLCBJUm91bmRlZFJlY3Q+KTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX3Jlc29sdmVDb25uZWN0aW9uQ29udGV4dChjb25uZWN0aW9uLCBjYWNoZSk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IHRoaXMuX2NhbGN1bGF0ZUNvbm5lY3Rpb25MaW5lKGNvbm5lY3Rpb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc2V0dXBDb25uZWN0aW9uV2l0aExpbmUoY29ubmVjdGlvbiwgY29udGV4dC5zb3VyY2UsIGNvbnRleHQudGFyZ2V0LCBsaW5lKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQ29ubmVjdGlvbldpdGhMaW5lKFxuICAgIGNvbm5lY3Rpb246IEZDb25uZWN0aW9uQmFzZSxcbiAgICBzb3VyY2U6IEZDb25uZWN0b3JCYXNlLFxuICAgIHRhcmdldDogRkNvbm5lY3RvckJhc2UsXG4gICAgbGluZTogSUxpbmUsXG4gICk6IHZvaWQge1xuICAgIHNvdXJjZS5zZXRDb25uZWN0ZWQodGFyZ2V0KTtcbiAgICB0YXJnZXQuc2V0Q29ubmVjdGVkKHNvdXJjZSk7XG4gICAgdGhpcy5fY29ubmVjdGVkSW5QcmV2aW91c1JlbmRlci5hZGQoc291cmNlKTtcbiAgICB0aGlzLl9jb25uZWN0ZWRJblByZXZpb3VzUmVuZGVyLmFkZCh0YXJnZXQpO1xuXG4gICAgY29uc3QgbWFya2Vyc0NoYW5nZWQgPSB0aGlzLl9jcmVhdGVNYXJrZXJzKGNvbm5lY3Rpb24pO1xuICAgIGlmICghbWFya2Vyc0NoYW5nZWQgJiYgIXRoaXMuX3Nob3VsZFJlZHJhd0Nvbm5lY3Rpb24oY29ubmVjdGlvbiwgbGluZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25uZWN0aW9uLnNldExpbmUobGluZSk7XG4gICAgY29ubmVjdGlvbi5pbml0aWFsaXplKCk7XG4gICAgY29ubmVjdGlvbi5pc1NlbGVjdGVkKCkgPyBjb25uZWN0aW9uLm1hcmtBc1NlbGVjdGVkKCkgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlQ29ubmVjdGlvbkxpbmUoXG4gICAgY29ubmVjdGlvbjogRkNvbm5lY3Rpb25CYXNlLFxuICAgIGNvbnRleHQ6IElGQ29ubmVjdGlvbldvcmtlckNvbnRleHQsXG4gICk6IElMaW5lIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbkJlaGF2aW91ci5oYW5kbGUoXG4gICAgICBuZXcgQ29ubmVjdGlvbkJlaGF2aW91ckJ1aWxkZXJSZXF1ZXN0KFxuICAgICAgICBjb250ZXh0LnNvdXJjZVJlY3QsXG4gICAgICAgIGNvbnRleHQudGFyZ2V0UmVjdCxcbiAgICAgICAgY29ubmVjdGlvbixcbiAgICAgICAgY29udGV4dC5zb3VyY2UuZkNvbm5lY3RhYmxlU2lkZSxcbiAgICAgICAgY29udGV4dC50YXJnZXQuZkNvbm5lY3RhYmxlU2lkZSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc29sdmVDb25uZWN0aW9uQ29ubmVjdG9ycyhcbiAgICBjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UsXG4gICk6IElGQ29ubmVjdGlvbldvcmtlckNvbm5lY3RvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTxJRkNvbm5lY3Rpb25Xb3JrZXJDb25uZWN0b3JzIHwgbnVsbD4oXG4gICAgICBuZXcgUmVzb2x2ZUNvbm5lY3Rpb25Xb3JrZXJDb25uZWN0b3JzUmVxdWVzdChjb25uZWN0aW9uKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzb2x2ZUNvbm5lY3Rpb25Db250ZXh0KFxuICAgIGNvbm5lY3Rpb246IEZDb25uZWN0aW9uQmFzZSxcbiAgICBjYWNoZTogTWFwPHN0cmluZywgSVJvdW5kZWRSZWN0PixcbiAgKTogSUZDb25uZWN0aW9uV29ya2VyQ29udGV4dCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlPElGQ29ubmVjdGlvbldvcmtlckNvbnRleHQgfCBudWxsPihcbiAgICAgIG5ldyBSZXNvbHZlQ29ubmVjdGlvbldvcmtlckNvbnRleHRSZXF1ZXN0KGNvbm5lY3Rpb24sIGNhY2hlKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTWFya2Vycyhjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTxib29sZWFuPihuZXcgQ3JlYXRlQ29ubmVjdGlvbk1hcmtlcnNSZXF1ZXN0KGNvbm5lY3Rpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Nob3VsZFJlZHJhd0Nvbm5lY3Rpb24oY29ubmVjdGlvbjogRkNvbm5lY3Rpb25CYXNlLCBsaW5lOiBJTGluZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGhFbGVtZW50ID0gY29ubmVjdGlvbi5mUGF0aCgpLmhvc3RFbGVtZW50O1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyZWF0ZUNvbm5lY3Rpb25SZW5kZXJTaWduYXR1cmUoY29ubmVjdGlvbiwgbGluZSk7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5fY29ubmVjdGlvblJlbmRlckNhY2hlLmdldChjb25uZWN0aW9uKTtcbiAgICBpZiAoY2FjaGVkPy5zaWduYXR1cmUgPT09IHNpZ25hdHVyZSAmJiBjYWNoZWQucGF0aEVsZW1lbnQgPT09IHBhdGhFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdGlvblJlbmRlckNhY2hlLnNldChjb25uZWN0aW9uLCB7IHNpZ25hdHVyZSwgcGF0aEVsZW1lbnQgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQ29ubmVjdGlvbnNVc2luZ1dvcmtlcihcbiAgICBjb25uZWN0aW9uczogcmVhZG9ubHkgRkNvbm5lY3Rpb25CYXNlW10sXG4gICAgY29ubmVjdG9yUmVjdENhY2hlOiBNYXA8c3RyaW5nLCBJUm91bmRlZFJlY3Q+LFxuICAgIHJlbmRlclRpY2tldDogbnVtYmVyLFxuICAgIG5vZGVzUmV2aXNpb246IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fbWVkaWF0b3JcbiAgICAgIC5leGVjdXRlPFByb21pc2U8cmVhZG9ubHkgSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbVtdIHwgbnVsbD4+KFxuICAgICAgICBuZXcgQ2FsY3VsYXRlQ29ubmVjdGlvbnNVc2luZ0Nvbm5lY3Rpb25Xb3JrZXJSZXF1ZXN0KGNvbm5lY3Rpb25zLCBjb25uZWN0b3JSZWN0Q2FjaGUpLFxuICAgICAgKVxuICAgICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0N1cnJlbnRSZW5kZXJDb250ZXh0KHJlbmRlclRpY2tldCwgbm9kZXNSZXZpc2lvbikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3VsdHMpIHtcbiAgICAgICAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb25zQ2h1bmtlZChcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zLFxuICAgICAgICAgICAgY29ubmVjdG9yUmVjdENhY2hlLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHJlbmRlclRpY2tldCxcbiAgICAgICAgICAgIG5vZGVzUmV2aXNpb24sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvcmtlclJlc3VsdHMgPSB0aGlzLl9hbGlnbldvcmtlclJlc3VsdHNUb0Nvbm5lY3Rpb25JbmRleGVzKFxuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgY29ubmVjdGlvbnMubGVuZ3RoLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2FwcGx5V29ya2VyUmVzdWx0c0NodW5rZWQoXG4gICAgICAgICAgY29ubmVjdGlvbnMsXG4gICAgICAgICAgd29ya2VyUmVzdWx0cyxcbiAgICAgICAgICBjb25uZWN0b3JSZWN0Q2FjaGUsXG4gICAgICAgICAgMCxcbiAgICAgICAgICByZW5kZXJUaWNrZXQsXG4gICAgICAgICAgbm9kZXNSZXZpc2lvbixcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2lzQ3VycmVudFJlbmRlckNvbnRleHQocmVuZGVyVGlja2V0LCBub2Rlc1JldmlzaW9uKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldHVwQ29ubmVjdGlvbnNDaHVua2VkKFxuICAgICAgICAgIGNvbm5lY3Rpb25zLFxuICAgICAgICAgIGNvbm5lY3RvclJlY3RDYWNoZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIHJlbmRlclRpY2tldCxcbiAgICAgICAgICBub2Rlc1JldmlzaW9uLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVdvcmtlclJlc3VsdHNDaHVua2VkKFxuICAgIGNvbm5lY3Rpb25zOiByZWFkb25seSBGQ29ubmVjdGlvbkJhc2VbXSxcbiAgICB3b3JrZXJSZXN1bHRzOiByZWFkb25seSAoSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbSB8IHVuZGVmaW5lZClbXSxcbiAgICBjb25uZWN0b3JSZWN0Q2FjaGU6IE1hcDxzdHJpbmcsIElSb3VuZGVkUmVjdD4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHJlbmRlclRpY2tldDogbnVtYmVyLFxuICAgIG5vZGVzUmV2aXNpb246IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc0N1cnJlbnRSZW5kZXJDb250ZXh0KHJlbmRlclRpY2tldCwgbm9kZXNSZXZpc2lvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzbGljZVN0YXJ0ID0gdGhpcy5fbm93KCk7XG4gICAgbGV0IGVuZEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICBsZXQgcHJvY2Vzc2VkID0gMDtcblxuICAgIHdoaWxlIChcbiAgICAgIGVuZEluZGV4IDwgY29ubmVjdGlvbnMubGVuZ3RoICYmXG4gICAgICBwcm9jZXNzZWQgPCBDT05ORUNUSU9OU19QRVJfU0xJQ0VfTElNSVQgJiZcbiAgICAgIHRoaXMuX2lzV2l0aGluU2xpY2VCdWRnZXQoc2xpY2VTdGFydClcbiAgICApIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0aW9uc1tlbmRJbmRleF07XG4gICAgICBjb25zdCByZXN1bHQgPSB3b3JrZXJSZXN1bHRzW2VuZEluZGV4XTtcblxuICAgICAgaWYgKHRoaXMuX2lzV29ya2VyUmVzdWx0U3VwcG9ydGVkKHJlc3VsdCkpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdG9ycyA9IHRoaXMuX3Jlc29sdmVDb25uZWN0aW9uQ29ubmVjdG9ycyhjb25uZWN0aW9uKTtcbiAgICAgICAgaWYgKCFjb25uZWN0b3JzKSB7XG4gICAgICAgICAgZW5kSW5kZXgrKztcbiAgICAgICAgICBwcm9jZXNzZWQrKztcblxuICAgICAgICAgIGlmICghdGhpcy5faXNDdXJyZW50UmVuZGVyQ29udGV4dChyZW5kZXJUaWNrZXQsIG5vZGVzUmV2aXNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25uZWN0aW9uLl9hcHBseVJlc29sdmVkU2lkZXNUb0Nvbm5lY3Rpb24oXG4gICAgICAgICAgICByZXN1bHQuc291cmNlU2lkZSBhcyBFRkNvbm5lY3RhYmxlU2lkZSxcbiAgICAgICAgICAgIHJlc3VsdC50YXJnZXRTaWRlIGFzIEVGQ29ubmVjdGFibGVTaWRlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5fc2V0dXBDb25uZWN0aW9uV2l0aExpbmUoXG4gICAgICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICAgICAgY29ubmVjdG9ycy5zb3VyY2UsXG4gICAgICAgICAgICBjb25uZWN0b3JzLnRhcmdldCxcbiAgICAgICAgICAgIHJlc3VsdC5saW5lLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRoaXMuX3NldHVwQ29ubmVjdGlvbihjb25uZWN0aW9uLCBjb25uZWN0b3JSZWN0Q2FjaGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb24oY29ubmVjdGlvbiwgY29ubmVjdG9yUmVjdENhY2hlKTtcbiAgICAgIH1cblxuICAgICAgZW5kSW5kZXgrKztcbiAgICAgIHByb2Nlc3NlZCsrO1xuXG4gICAgICBpZiAoIXRoaXMuX2lzQ3VycmVudFJlbmRlckNvbnRleHQocmVuZGVyVGlja2V0LCBub2Rlc1JldmlzaW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZEluZGV4ID49IGNvbm5lY3Rpb25zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PlxuICAgICAgdGhpcy5fYXBwbHlXb3JrZXJSZXN1bHRzQ2h1bmtlZChcbiAgICAgICAgY29ubmVjdGlvbnMsXG4gICAgICAgIHdvcmtlclJlc3VsdHMsXG4gICAgICAgIGNvbm5lY3RvclJlY3RDYWNoZSxcbiAgICAgICAgZW5kSW5kZXgsXG4gICAgICAgIHJlbmRlclRpY2tldCxcbiAgICAgICAgbm9kZXNSZXZpc2lvbixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FsaWduV29ya2VyUmVzdWx0c1RvQ29ubmVjdGlvbkluZGV4ZXMoXG4gICAgcmVzdWx0czogcmVhZG9ubHkgSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbVtdLFxuICAgIGNvbm5lY3Rpb25Db3VudDogbnVtYmVyLFxuICApOiAoSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbSB8IHVuZGVmaW5lZClbXSB7XG4gICAgY29uc3QgYWxpZ25lZDogKElGQ29ubmVjdGlvbldvcmtlclJlc3VsdEl0ZW0gfCB1bmRlZmluZWQpW10gPSBuZXcgQXJyYXkoY29ubmVjdGlvbkNvdW50KTtcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVzdWx0Lm9yaWdpbmFsSW5kZXg7XG4gICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjb25uZWN0aW9uQ291bnQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFsaWduZWRbaW5kZXhdID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiBhbGlnbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNXb3JrZXJSZXN1bHRTdXBwb3J0ZWQoXG4gICAgcmVzdWx0OiBJRkNvbm5lY3Rpb25Xb3JrZXJSZXN1bHRJdGVtIHwgdW5kZWZpbmVkLFxuICApOiByZXN1bHQgaXMgSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbSAmIHtcbiAgICBzb3VyY2VTaWRlOiBzdHJpbmc7XG4gICAgdGFyZ2V0U2lkZTogc3RyaW5nO1xuICAgIGxpbmU6IElMaW5lO1xuICB9IHtcbiAgICByZXR1cm4gISEocmVzdWx0Py5zdXBwb3J0ZWQgJiYgcmVzdWx0LnNvdXJjZVNpZGUgJiYgcmVzdWx0LnRhcmdldFNpZGUgJiYgcmVzdWx0LmxpbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBDb25uZWN0aW9uc0NodW5rZWQoXG4gICAgY29ubmVjdGlvbnM6IHJlYWRvbmx5IEZDb25uZWN0aW9uQmFzZVtdLFxuICAgIGNvbm5lY3RvclJlY3RDYWNoZTogTWFwPHN0cmluZywgSVJvdW5kZWRSZWN0PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgcmVuZGVyVGlja2V0OiBudW1iZXIsXG4gICAgbm9kZXNSZXZpc2lvbjogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ3VycmVudFJlbmRlckNvbnRleHQocmVuZGVyVGlja2V0LCBub2Rlc1JldmlzaW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaWNlU3RhcnQgPSB0aGlzLl9ub3coKTtcbiAgICBsZXQgZW5kSW5kZXggPSBzdGFydEluZGV4O1xuICAgIGxldCBwcm9jZXNzZWQgPSAwO1xuXG4gICAgd2hpbGUgKFxuICAgICAgZW5kSW5kZXggPCBjb25uZWN0aW9ucy5sZW5ndGggJiZcbiAgICAgIHByb2Nlc3NlZCA8IENPTk5FQ1RJT05TX1BFUl9TTElDRV9MSU1JVCAmJlxuICAgICAgdGhpcy5faXNXaXRoaW5TbGljZUJ1ZGdldChzbGljZVN0YXJ0KVxuICAgICkge1xuICAgICAgdGhpcy5fc2V0dXBDb25uZWN0aW9uKGNvbm5lY3Rpb25zW2VuZEluZGV4XSwgY29ubmVjdG9yUmVjdENhY2hlKTtcbiAgICAgIGVuZEluZGV4Kys7XG4gICAgICBwcm9jZXNzZWQrKztcblxuICAgICAgaWYgKCF0aGlzLl9pc0N1cnJlbnRSZW5kZXJDb250ZXh0KHJlbmRlclRpY2tldCwgbm9kZXNSZXZpc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbmRJbmRleCA+PSBjb25uZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT5cbiAgICAgIHRoaXMuX3NldHVwQ29ubmVjdGlvbnNDaHVua2VkKFxuICAgICAgICBjb25uZWN0aW9ucyxcbiAgICAgICAgY29ubmVjdG9yUmVjdENhY2hlLFxuICAgICAgICBlbmRJbmRleCxcbiAgICAgICAgcmVuZGVyVGlja2V0LFxuICAgICAgICBub2Rlc1JldmlzaW9uLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2hvdWxkVXNlV29ya2VyKGNvbm5lY3Rpb25Db3VudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGU8Ym9vbGVhbj4obmV3IFNob3VsZFVzZUNvbm5lY3Rpb25Xb3JrZXJSZXF1ZXN0KGNvbm5lY3Rpb25Db3VudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNDdXJyZW50UmVuZGVyQ29udGV4dChyZW5kZXJUaWNrZXQ6IG51bWJlciwgbm9kZXNSZXZpc2lvbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlbmRlclRpY2tldCA9PT0gdGhpcy5fcmVuZGVyVGlja2V0ICYmIG5vZGVzUmV2aXNpb24gPT09IHRoaXMuX3N0b3JlLm5vZGVzUmV2aXNpb247XG4gIH1cblxuICBwcml2YXRlIF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSB0aGlzLl9icm93c2VyLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIGlmICghd2luZG93UmVmKSB7XG4gICAgICBjYWxsYmFjaygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2luZG93UmVmLnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gIH1cblxuICBwcml2YXRlIF9ub3coKTogbnVtYmVyIHtcbiAgICBjb25zdCBwZXJmb3JtYW5jZVJlZiA9IHRoaXMuX2Jyb3dzZXIuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LnBlcmZvcm1hbmNlO1xuXG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlUmVmID8gcGVyZm9ybWFuY2VSZWYubm93KCkgOiBEYXRlLm5vdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNXaXRoaW5TbGljZUJ1ZGdldChzbGljZVN0YXJ0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX2Jyb3dzZXIuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9ub3coKSAtIHNsaWNlU3RhcnQgPCBTTElDRV9CVURHRVRfTVM7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvblJlbmRlclNpZ25hdHVyZShjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UsIGxpbmU6IElMaW5lKTogc3RyaW5nIHtcbiAgY29uc3QgeyBzb3VyY2VTaWRlLCB0YXJnZXRTaWRlIH0gPSBjb25uZWN0aW9uLmdldFJlc29sdmVkU2lkZXMoKTtcblxuICByZXR1cm4gW1xuICAgIGNvbm5lY3Rpb24uZkJlaGF2aW9yLFxuICAgIGNvbm5lY3Rpb24uZlR5cGUsXG4gICAgY29ubmVjdGlvbi5mUmFkaXVzLFxuICAgIGNvbm5lY3Rpb24uZk9mZnNldCxcbiAgICBjb25uZWN0aW9uLmZSZWFzc2lnbmFibGVTdGFydCgpLFxuICAgIHNlcmlhbGl6ZUNvbnRlbnRzKGNvbm5lY3Rpb24uZkNvbnRlbnRzKCkgfHwgW10pLFxuICAgIHNvdXJjZVNpZGUsXG4gICAgdGFyZ2V0U2lkZSxcbiAgICBzZXJpYWxpemVQb2ludChsaW5lLnBvaW50MSksXG4gICAgc2VyaWFsaXplUG9pbnQobGluZS5wb2ludDIpLFxuICAgIHNlcmlhbGl6ZVdheXBvaW50cyhjb25uZWN0aW9uLmZXYXlwb2ludHMoKT8ud2F5cG9pbnRzKCkgfHwgW10pLFxuICBdLmpvaW4oJ3wnKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplUG9pbnQocG9pbnQ6IElMaW5lWydwb2ludDEnXSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtwb2ludC54fToke3BvaW50Lnl9YDtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplV2F5cG9pbnRzKHdheXBvaW50czogcmVhZG9ubHkgSUxpbmVbJ3BvaW50MSddW10pOiBzdHJpbmcge1xuICByZXR1cm4gd2F5cG9pbnRzLm1hcChzZXJpYWxpemVQb2ludCkuam9pbignOycpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVDb250ZW50cyhjb250ZW50czogcmVhZG9ubHkgRkNvbm5lY3Rpb25Db250ZW50QmFzZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbnRlbnRzXG4gICAgLm1hcCgoY29udGVudCkgPT4ge1xuICAgICAgcmV0dXJuIFtjb250ZW50LnBvc2l0aW9uKCksIGNvbnRlbnQub2Zmc2V0KCksIGNvbnRlbnQuYWxpZ24oKV0uam9pbignOicpO1xuICAgIH0pXG4gICAgLmpvaW4oJzsnKTtcbn1cbiJdfQ==
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcmF3LWNvbm5lY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9kb21haW4vZi1jb25uZWN0aW9uL3JlZHJhdy1jb25uZWN0aW9ucy9yZWRyYXctY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGlDQUFpQyxHQUlsQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsZ0RBQWdELEVBSWhELHdDQUF3QyxFQUN4QyxxQ0FBcUMsRUFDckMsZ0NBQWdDLEdBQ2pDLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNMLCtDQUErQyxHQUVoRCxNQUFNLGlEQUFpRCxDQUFDOztBQUV6RCxNQUFNLDJCQUEyQixHQUFHLEdBQUcsQ0FBQztBQUN4QyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFFMUI7Ozs7R0FJRztBQUdJLElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWlCO0lBQ1gsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLDBCQUEw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QUs7UUFDaEIsVUFBVSxDQUFDLE9BQU87UUFDbEIsVUFBVSxDQUFDLE9BQU87UUFDbEIsVUFBVSxDQUFDLGtCQUFrQixFQUFFO1FBQy9CLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0MsVUFBVTtRQUNWLFVBQVU7UUFDVixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixrQkFBa0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0tBQy9ELENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQXNCO0lBQzVDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxTQUFxQztJQUMvRCxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFFBQTJDO0lBQ3BFLE9BQU8sUUFBUTtTQUNaLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTGluZSwgSVJvdW5kZWRSZWN0IH0gZnJvbSAnQGZvYmxleC8yZCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlZHJhd0Nvbm5lY3Rpb25zUmVxdWVzdCB9IGZyb20gJy4vcmVkcmF3LWNvbm5lY3Rpb25zLXJlcXVlc3QnO1xuaW1wb3J0IHsgRkNvbXBvbmVudHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2Ytc3RvcmFnZSc7XG5pbXBvcnQgeyBGQ29ubmVjdG9yQmFzZSB9IGZyb20gJy4uLy4uLy4uL2YtY29ubmVjdG9ycyc7XG5pbXBvcnQgeyBGRXhlY3V0aW9uUmVnaXN0ZXIsIEZNZWRpYXRvciwgSUV4ZWN1dGlvbiB9IGZyb20gJ0Bmb2JsZXgvbWVkaWF0b3InO1xuaW1wb3J0IHsgQ3JlYXRlQ29ubmVjdGlvbk1hcmtlcnNSZXF1ZXN0IH0gZnJvbSAnLi4vY3JlYXRlLWNvbm5lY3Rpb24tbWFya2Vycyc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uQmVoYXZpb3VyQnVpbGRlcixcbiAgQ29ubmVjdGlvbkJlaGF2aW91ckJ1aWxkZXJSZXF1ZXN0LFxuICBFRkNvbm5lY3RhYmxlU2lkZSxcbiAgRkNvbm5lY3Rpb25CYXNlLFxuICBGQ29ubmVjdGlvbkNvbnRlbnRCYXNlLFxufSBmcm9tICcuLi8uLi8uLi9mLWNvbm5lY3Rpb24tdjInO1xuaW1wb3J0IHsgQnJvd3NlclNlcnZpY2UgfSBmcm9tICdAZm9ibGV4L3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENhbGN1bGF0ZUNvbm5lY3Rpb25zVXNpbmdDb25uZWN0aW9uV29ya2VyUmVxdWVzdCxcbiAgSUZDb25uZWN0aW9uV29ya2VyQ29ubmVjdG9ycyxcbiAgSUZDb25uZWN0aW9uV29ya2VyQ29udGV4dCxcbiAgSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbSxcbiAgUmVzb2x2ZUNvbm5lY3Rpb25Xb3JrZXJDb25uZWN0b3JzUmVxdWVzdCxcbiAgUmVzb2x2ZUNvbm5lY3Rpb25Xb3JrZXJDb250ZXh0UmVxdWVzdCxcbiAgU2hvdWxkVXNlQ29ubmVjdGlvbldvcmtlclJlcXVlc3QsXG59IGZyb20gJy4uLy4uLy4uL2YtY29ubmVjdGlvbi13b3JrZXInO1xuaW1wb3J0IHtcbiAgUmVzb2x2ZUNvbm5lY3Rpb25FbmRwb2ludFJvdGF0aW9uQ29udGV4dFJlcXVlc3QsXG4gIFRSZXNvbHZlQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0UmVzcG9uc2UsXG59IGZyb20gJy4uL3Jlc29sdmUtY29ubmVjdGlvbi1lbmRwb2ludC1yb3RhdGlvbi1jb250ZXh0JztcblxuY29uc3QgQ09OTkVDVElPTlNfUEVSX1NMSUNFX0xJTUlUID0gNTAwO1xuY29uc3QgU0xJQ0VfQlVER0VUX01TID0gNjtcblxuLyoqXG4gKiBFeGVjdXRpb24gdGhhdCByZWRyYXdzIGNvbm5lY3Rpb25zIGluIHRoZSBGQ29tcG9uZW50c1N0b3JlLlxuICogSXQgcmVzZXRzIGNvbm5lY3RvcnMsIHNldHMgbWFya2VycyBmb3IgdGVtcG9yYXJ5IGFuZCBzbmFwIGNvbm5lY3Rpb25zLFxuICogYW5kIHNldHMgdXAgY29ubmVjdGlvbnMgYmFzZWQgb24gdGhlIHN0b3JlZCBvdXRwdXRzIGFuZCBpbnB1dHMuXG4gKi9cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoUmVkcmF3Q29ubmVjdGlvbnNSZXF1ZXN0KVxuZXhwb3J0IGNsYXNzIFJlZHJhd0Nvbm5lY3Rpb25zIGltcGxlbWVudHMgSUV4ZWN1dGlvbjxSZWRyYXdDb25uZWN0aW9uc1JlcXVlc3QsIHZvaWQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVkaWF0b3IgPSBpbmplY3QoRk1lZGlhdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmUgPSBpbmplY3QoRkNvbXBvbmVudHNTdG9yZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25CZWhhdmlvdXIgPSBpbmplY3QoQ29ubmVjdGlvbkJlaGF2aW91ckJ1aWxkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9icm93c2VyID0gaW5qZWN0KEJyb3dzZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIF9yZW5kZXJUaWNrZXQgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25uZWN0ZWRJblByZXZpb3VzUmVuZGVyID0gbmV3IFNldDxGQ29ubmVjdG9yQmFzZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29ubmVjdGlvblJlbmRlckNhY2hlID0gbmV3IFdlYWtNYXA8XG4gICAgRkNvbm5lY3Rpb25CYXNlLFxuICAgIHsgc2lnbmF0dXJlOiBzdHJpbmc7IHBhdGhFbGVtZW50OiBTVkdFbGVtZW50IH1cbiAgPigpO1xuXG4gIHB1YmxpYyBoYW5kbGUoX3JlcXVlc3Q6IFJlZHJhd0Nvbm5lY3Rpb25zUmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbmRlclRpY2tldCA9ICsrdGhpcy5fcmVuZGVyVGlja2V0O1xuICAgIGNvbnN0IG5vZGVzUmV2aXNpb24gPSB0aGlzLl9zdG9yZS5ub2Rlc1JldmlzaW9uO1xuICAgIHRoaXMuX3Jlc2V0Q29ubmVjdGVkQ29ubmVjdG9ycygpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VGb3JDcmVhdGUgPSB0aGlzLl9zdG9yZS5jb25uZWN0aW9ucy5nZXRGb3JDcmVhdGUoKTtcbiAgICBpZiAoaW5zdGFuY2VGb3JDcmVhdGUpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZU1hcmtlcnMoaW5zdGFuY2VGb3JDcmVhdGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlRm9yU25hcCA9IHRoaXMuX3N0b3JlLmNvbm5lY3Rpb25zLmdldEZvclNuYXAoKTtcbiAgICBpZiAoaW5zdGFuY2VGb3JTbmFwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVNYXJrZXJzKGluc3RhbmNlRm9yU25hcCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSBbLi4udGhpcy5fc3RvcmUuY29ubmVjdGlvbnMuZ2V0QWxsKCldO1xuICAgIGNvbnN0IGNvbm5lY3RvclJlY3RDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBJUm91bmRlZFJlY3Q+KCk7XG5cbiAgICBpZiAodGhpcy5fc2hvdWxkVXNlV29ya2VyKGNvbm5lY3Rpb25zLmxlbmd0aCkpIHtcbiAgICAgIHRoaXMuX3NldHVwQ29ubmVjdGlvbnNVc2luZ1dvcmtlcihcbiAgICAgICAgY29ubmVjdGlvbnMsXG4gICAgICAgIGNvbm5lY3RvclJlY3RDYWNoZSxcbiAgICAgICAgcmVuZGVyVGlja2V0LFxuICAgICAgICBub2Rlc1JldmlzaW9uLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb25zQ2h1bmtlZChjb25uZWN0aW9ucywgY29ubmVjdG9yUmVjdENhY2hlLCAwLCByZW5kZXJUaWNrZXQsIG5vZGVzUmV2aXNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRDb25uZWN0ZWRDb25uZWN0b3JzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGVkSW5QcmV2aW91c1JlbmRlci5zaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25uZWN0b3Igb2YgdGhpcy5fY29ubmVjdGVkSW5QcmV2aW91c1JlbmRlcikge1xuICAgICAgY29ubmVjdG9yLnJlc2V0Q29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdGVkSW5QcmV2aW91c1JlbmRlci5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBDb25uZWN0aW9uKGNvbm5lY3Rpb246IEZDb25uZWN0aW9uQmFzZSwgY2FjaGU6IE1hcDxzdHJpbmcsIElSb3VuZGVkUmVjdD4pOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fcmVzb2x2ZUNvbm5lY3Rpb25Db250ZXh0KGNvbm5lY3Rpb24sIGNhY2hlKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lID0gdGhpcy5fY2FsY3VsYXRlQ29ubmVjdGlvbkxpbmUoY29ubmVjdGlvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb25XaXRoTGluZShjb25uZWN0aW9uLCBjb250ZXh0LnNvdXJjZSwgY29udGV4dC50YXJnZXQsIGxpbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBDb25uZWN0aW9uV2l0aExpbmUoXG4gICAgY29ubmVjdGlvbjogRkNvbm5lY3Rpb25CYXNlLFxuICAgIHNvdXJjZTogRkNvbm5lY3RvckJhc2UsXG4gICAgdGFyZ2V0OiBGQ29ubmVjdG9yQmFzZSxcbiAgICBsaW5lOiBJTGluZSxcbiAgKTogdm9pZCB7XG4gICAgc291cmNlLnNldENvbm5lY3RlZCh0YXJnZXQpO1xuICAgIHRhcmdldC5zZXRDb25uZWN0ZWQoc291cmNlKTtcbiAgICB0aGlzLl9jb25uZWN0ZWRJblByZXZpb3VzUmVuZGVyLmFkZChzb3VyY2UpO1xuICAgIHRoaXMuX2Nvbm5lY3RlZEluUHJldmlvdXNSZW5kZXIuYWRkKHRhcmdldCk7XG5cbiAgICBjb25zdCBtYXJrZXJzQ2hhbmdlZCA9IHRoaXMuX2NyZWF0ZU1hcmtlcnMoY29ubmVjdGlvbik7XG4gICAgaWYgKCFtYXJrZXJzQ2hhbmdlZCAmJiAhdGhpcy5fc2hvdWxkUmVkcmF3Q29ubmVjdGlvbihjb25uZWN0aW9uLCBsaW5lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbm5lY3Rpb24uc2V0TGluZShsaW5lKTtcbiAgICBjb25uZWN0aW9uLmluaXRpYWxpemUoKTtcbiAgICBjb25uZWN0aW9uLmlzU2VsZWN0ZWQoKSA/IGNvbm5lY3Rpb24ubWFya0FzU2VsZWN0ZWQoKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9jYWxjdWxhdGVDb25uZWN0aW9uTGluZShcbiAgICBjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UsXG4gICAgY29udGV4dDogSUZDb25uZWN0aW9uV29ya2VyQ29udGV4dCxcbiAgKTogSUxpbmUge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uQmVoYXZpb3VyLmhhbmRsZShcbiAgICAgIG5ldyBDb25uZWN0aW9uQmVoYXZpb3VyQnVpbGRlclJlcXVlc3QoXG4gICAgICAgIGNvbnRleHQuc291cmNlUmVjdCxcbiAgICAgICAgY29udGV4dC50YXJnZXRSZWN0LFxuICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICBjb250ZXh0LnNvdXJjZS5mQ29ubmVjdGFibGVTaWRlLFxuICAgICAgICBjb250ZXh0LnRhcmdldC5mQ29ubmVjdGFibGVTaWRlLFxuICAgICAgICB0aGlzLl9yZXNvbHZlUm90YXRpb25Db250ZXh0KGNvbnRleHQuc291cmNlKSxcbiAgICAgICAgdGhpcy5fcmVzb2x2ZVJvdGF0aW9uQ29udGV4dChjb250ZXh0LnRhcmdldCksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNvbHZlUm90YXRpb25Db250ZXh0KFxuICAgIGNvbm5lY3RvcjogSUZDb25uZWN0aW9uV29ya2VyQ29udGV4dFsnc291cmNlJ10sXG4gICk6IFRSZXNvbHZlQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0UmVzcG9uc2Uge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlPFRSZXNvbHZlQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0UmVzcG9uc2U+KFxuICAgICAgbmV3IFJlc29sdmVDb25uZWN0aW9uRW5kcG9pbnRSb3RhdGlvbkNvbnRleHRSZXF1ZXN0KGNvbm5lY3RvciksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc29sdmVDb25uZWN0aW9uQ29ubmVjdG9ycyhcbiAgICBjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UsXG4gICk6IElGQ29ubmVjdGlvbldvcmtlckNvbm5lY3RvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTxJRkNvbm5lY3Rpb25Xb3JrZXJDb25uZWN0b3JzIHwgbnVsbD4oXG4gICAgICBuZXcgUmVzb2x2ZUNvbm5lY3Rpb25Xb3JrZXJDb25uZWN0b3JzUmVxdWVzdChjb25uZWN0aW9uKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzb2x2ZUNvbm5lY3Rpb25Db250ZXh0KFxuICAgIGNvbm5lY3Rpb246IEZDb25uZWN0aW9uQmFzZSxcbiAgICBjYWNoZTogTWFwPHN0cmluZywgSVJvdW5kZWRSZWN0PixcbiAgKTogSUZDb25uZWN0aW9uV29ya2VyQ29udGV4dCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYXRvci5leGVjdXRlPElGQ29ubmVjdGlvbldvcmtlckNvbnRleHQgfCBudWxsPihcbiAgICAgIG5ldyBSZXNvbHZlQ29ubmVjdGlvbldvcmtlckNvbnRleHRSZXF1ZXN0KGNvbm5lY3Rpb24sIGNhY2hlKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTWFya2Vycyhjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTxib29sZWFuPihuZXcgQ3JlYXRlQ29ubmVjdGlvbk1hcmtlcnNSZXF1ZXN0KGNvbm5lY3Rpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Nob3VsZFJlZHJhd0Nvbm5lY3Rpb24oY29ubmVjdGlvbjogRkNvbm5lY3Rpb25CYXNlLCBsaW5lOiBJTGluZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGhFbGVtZW50ID0gY29ubmVjdGlvbi5mUGF0aCgpLmhvc3RFbGVtZW50O1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyZWF0ZUNvbm5lY3Rpb25SZW5kZXJTaWduYXR1cmUoY29ubmVjdGlvbiwgbGluZSk7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5fY29ubmVjdGlvblJlbmRlckNhY2hlLmdldChjb25uZWN0aW9uKTtcbiAgICBpZiAoY2FjaGVkPy5zaWduYXR1cmUgPT09IHNpZ25hdHVyZSAmJiBjYWNoZWQucGF0aEVsZW1lbnQgPT09IHBhdGhFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdGlvblJlbmRlckNhY2hlLnNldChjb25uZWN0aW9uLCB7IHNpZ25hdHVyZSwgcGF0aEVsZW1lbnQgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQ29ubmVjdGlvbnNVc2luZ1dvcmtlcihcbiAgICBjb25uZWN0aW9uczogcmVhZG9ubHkgRkNvbm5lY3Rpb25CYXNlW10sXG4gICAgY29ubmVjdG9yUmVjdENhY2hlOiBNYXA8c3RyaW5nLCBJUm91bmRlZFJlY3Q+LFxuICAgIHJlbmRlclRpY2tldDogbnVtYmVyLFxuICAgIG5vZGVzUmV2aXNpb246IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fbWVkaWF0b3JcbiAgICAgIC5leGVjdXRlPFByb21pc2U8cmVhZG9ubHkgSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbVtdIHwgbnVsbD4+KFxuICAgICAgICBuZXcgQ2FsY3VsYXRlQ29ubmVjdGlvbnNVc2luZ0Nvbm5lY3Rpb25Xb3JrZXJSZXF1ZXN0KGNvbm5lY3Rpb25zLCBjb25uZWN0b3JSZWN0Q2FjaGUpLFxuICAgICAgKVxuICAgICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0N1cnJlbnRSZW5kZXJDb250ZXh0KHJlbmRlclRpY2tldCwgbm9kZXNSZXZpc2lvbikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3VsdHMpIHtcbiAgICAgICAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb25zQ2h1bmtlZChcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zLFxuICAgICAgICAgICAgY29ubmVjdG9yUmVjdENhY2hlLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHJlbmRlclRpY2tldCxcbiAgICAgICAgICAgIG5vZGVzUmV2aXNpb24sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvcmtlclJlc3VsdHMgPSB0aGlzLl9hbGlnbldvcmtlclJlc3VsdHNUb0Nvbm5lY3Rpb25JbmRleGVzKFxuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgY29ubmVjdGlvbnMubGVuZ3RoLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2FwcGx5V29ya2VyUmVzdWx0c0NodW5rZWQoXG4gICAgICAgICAgY29ubmVjdGlvbnMsXG4gICAgICAgICAgd29ya2VyUmVzdWx0cyxcbiAgICAgICAgICBjb25uZWN0b3JSZWN0Q2FjaGUsXG4gICAgICAgICAgMCxcbiAgICAgICAgICByZW5kZXJUaWNrZXQsXG4gICAgICAgICAgbm9kZXNSZXZpc2lvbixcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2lzQ3VycmVudFJlbmRlckNvbnRleHQocmVuZGVyVGlja2V0LCBub2Rlc1JldmlzaW9uKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldHVwQ29ubmVjdGlvbnNDaHVua2VkKFxuICAgICAgICAgIGNvbm5lY3Rpb25zLFxuICAgICAgICAgIGNvbm5lY3RvclJlY3RDYWNoZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIHJlbmRlclRpY2tldCxcbiAgICAgICAgICBub2Rlc1JldmlzaW9uLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVdvcmtlclJlc3VsdHNDaHVua2VkKFxuICAgIGNvbm5lY3Rpb25zOiByZWFkb25seSBGQ29ubmVjdGlvbkJhc2VbXSxcbiAgICB3b3JrZXJSZXN1bHRzOiByZWFkb25seSAoSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbSB8IHVuZGVmaW5lZClbXSxcbiAgICBjb25uZWN0b3JSZWN0Q2FjaGU6IE1hcDxzdHJpbmcsIElSb3VuZGVkUmVjdD4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHJlbmRlclRpY2tldDogbnVtYmVyLFxuICAgIG5vZGVzUmV2aXNpb246IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc0N1cnJlbnRSZW5kZXJDb250ZXh0KHJlbmRlclRpY2tldCwgbm9kZXNSZXZpc2lvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzbGljZVN0YXJ0ID0gdGhpcy5fbm93KCk7XG4gICAgbGV0IGVuZEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICBsZXQgcHJvY2Vzc2VkID0gMDtcblxuICAgIHdoaWxlIChcbiAgICAgIGVuZEluZGV4IDwgY29ubmVjdGlvbnMubGVuZ3RoICYmXG4gICAgICBwcm9jZXNzZWQgPCBDT05ORUNUSU9OU19QRVJfU0xJQ0VfTElNSVQgJiZcbiAgICAgIHRoaXMuX2lzV2l0aGluU2xpY2VCdWRnZXQoc2xpY2VTdGFydClcbiAgICApIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0aW9uc1tlbmRJbmRleF07XG4gICAgICBjb25zdCByZXN1bHQgPSB3b3JrZXJSZXN1bHRzW2VuZEluZGV4XTtcblxuICAgICAgaWYgKHRoaXMuX2lzV29ya2VyUmVzdWx0U3VwcG9ydGVkKHJlc3VsdCkpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdG9ycyA9IHRoaXMuX3Jlc29sdmVDb25uZWN0aW9uQ29ubmVjdG9ycyhjb25uZWN0aW9uKTtcbiAgICAgICAgaWYgKCFjb25uZWN0b3JzKSB7XG4gICAgICAgICAgZW5kSW5kZXgrKztcbiAgICAgICAgICBwcm9jZXNzZWQrKztcblxuICAgICAgICAgIGlmICghdGhpcy5faXNDdXJyZW50UmVuZGVyQ29udGV4dChyZW5kZXJUaWNrZXQsIG5vZGVzUmV2aXNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25uZWN0aW9uLl9hcHBseVJlc29sdmVkU2lkZXNUb0Nvbm5lY3Rpb24oXG4gICAgICAgICAgICByZXN1bHQuc291cmNlU2lkZSBhcyBFRkNvbm5lY3RhYmxlU2lkZSxcbiAgICAgICAgICAgIHJlc3VsdC50YXJnZXRTaWRlIGFzIEVGQ29ubmVjdGFibGVTaWRlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5fc2V0dXBDb25uZWN0aW9uV2l0aExpbmUoXG4gICAgICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICAgICAgY29ubmVjdG9ycy5zb3VyY2UsXG4gICAgICAgICAgICBjb25uZWN0b3JzLnRhcmdldCxcbiAgICAgICAgICAgIHJlc3VsdC5saW5lLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRoaXMuX3NldHVwQ29ubmVjdGlvbihjb25uZWN0aW9uLCBjb25uZWN0b3JSZWN0Q2FjaGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb24oY29ubmVjdGlvbiwgY29ubmVjdG9yUmVjdENhY2hlKTtcbiAgICAgIH1cblxuICAgICAgZW5kSW5kZXgrKztcbiAgICAgIHByb2Nlc3NlZCsrO1xuXG4gICAgICBpZiAoIXRoaXMuX2lzQ3VycmVudFJlbmRlckNvbnRleHQocmVuZGVyVGlja2V0LCBub2Rlc1JldmlzaW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZEluZGV4ID49IGNvbm5lY3Rpb25zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PlxuICAgICAgdGhpcy5fYXBwbHlXb3JrZXJSZXN1bHRzQ2h1bmtlZChcbiAgICAgICAgY29ubmVjdGlvbnMsXG4gICAgICAgIHdvcmtlclJlc3VsdHMsXG4gICAgICAgIGNvbm5lY3RvclJlY3RDYWNoZSxcbiAgICAgICAgZW5kSW5kZXgsXG4gICAgICAgIHJlbmRlclRpY2tldCxcbiAgICAgICAgbm9kZXNSZXZpc2lvbixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FsaWduV29ya2VyUmVzdWx0c1RvQ29ubmVjdGlvbkluZGV4ZXMoXG4gICAgcmVzdWx0czogcmVhZG9ubHkgSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbVtdLFxuICAgIGNvbm5lY3Rpb25Db3VudDogbnVtYmVyLFxuICApOiAoSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbSB8IHVuZGVmaW5lZClbXSB7XG4gICAgY29uc3QgYWxpZ25lZDogKElGQ29ubmVjdGlvbldvcmtlclJlc3VsdEl0ZW0gfCB1bmRlZmluZWQpW10gPSBuZXcgQXJyYXkoY29ubmVjdGlvbkNvdW50KTtcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVzdWx0Lm9yaWdpbmFsSW5kZXg7XG4gICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjb25uZWN0aW9uQ291bnQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFsaWduZWRbaW5kZXhdID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiBhbGlnbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNXb3JrZXJSZXN1bHRTdXBwb3J0ZWQoXG4gICAgcmVzdWx0OiBJRkNvbm5lY3Rpb25Xb3JrZXJSZXN1bHRJdGVtIHwgdW5kZWZpbmVkLFxuICApOiByZXN1bHQgaXMgSUZDb25uZWN0aW9uV29ya2VyUmVzdWx0SXRlbSAmIHtcbiAgICBzb3VyY2VTaWRlOiBzdHJpbmc7XG4gICAgdGFyZ2V0U2lkZTogc3RyaW5nO1xuICAgIGxpbmU6IElMaW5lO1xuICB9IHtcbiAgICByZXR1cm4gISEocmVzdWx0Py5zdXBwb3J0ZWQgJiYgcmVzdWx0LnNvdXJjZVNpZGUgJiYgcmVzdWx0LnRhcmdldFNpZGUgJiYgcmVzdWx0LmxpbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBDb25uZWN0aW9uc0NodW5rZWQoXG4gICAgY29ubmVjdGlvbnM6IHJlYWRvbmx5IEZDb25uZWN0aW9uQmFzZVtdLFxuICAgIGNvbm5lY3RvclJlY3RDYWNoZTogTWFwPHN0cmluZywgSVJvdW5kZWRSZWN0PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgcmVuZGVyVGlja2V0OiBudW1iZXIsXG4gICAgbm9kZXNSZXZpc2lvbjogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ3VycmVudFJlbmRlckNvbnRleHQocmVuZGVyVGlja2V0LCBub2Rlc1JldmlzaW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaWNlU3RhcnQgPSB0aGlzLl9ub3coKTtcbiAgICBsZXQgZW5kSW5kZXggPSBzdGFydEluZGV4O1xuICAgIGxldCBwcm9jZXNzZWQgPSAwO1xuXG4gICAgd2hpbGUgKFxuICAgICAgZW5kSW5kZXggPCBjb25uZWN0aW9ucy5sZW5ndGggJiZcbiAgICAgIHByb2Nlc3NlZCA8IENPTk5FQ1RJT05TX1BFUl9TTElDRV9MSU1JVCAmJlxuICAgICAgdGhpcy5faXNXaXRoaW5TbGljZUJ1ZGdldChzbGljZVN0YXJ0KVxuICAgICkge1xuICAgICAgdGhpcy5fc2V0dXBDb25uZWN0aW9uKGNvbm5lY3Rpb25zW2VuZEluZGV4XSwgY29ubmVjdG9yUmVjdENhY2hlKTtcbiAgICAgIGVuZEluZGV4Kys7XG4gICAgICBwcm9jZXNzZWQrKztcblxuICAgICAgaWYgKCF0aGlzLl9pc0N1cnJlbnRSZW5kZXJDb250ZXh0KHJlbmRlclRpY2tldCwgbm9kZXNSZXZpc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbmRJbmRleCA+PSBjb25uZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT5cbiAgICAgIHRoaXMuX3NldHVwQ29ubmVjdGlvbnNDaHVua2VkKFxuICAgICAgICBjb25uZWN0aW9ucyxcbiAgICAgICAgY29ubmVjdG9yUmVjdENhY2hlLFxuICAgICAgICBlbmRJbmRleCxcbiAgICAgICAgcmVuZGVyVGlja2V0LFxuICAgICAgICBub2Rlc1JldmlzaW9uLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2hvdWxkVXNlV29ya2VyKGNvbm5lY3Rpb25Db3VudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGU8Ym9vbGVhbj4obmV3IFNob3VsZFVzZUNvbm5lY3Rpb25Xb3JrZXJSZXF1ZXN0KGNvbm5lY3Rpb25Db3VudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNDdXJyZW50UmVuZGVyQ29udGV4dChyZW5kZXJUaWNrZXQ6IG51bWJlciwgbm9kZXNSZXZpc2lvbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlbmRlclRpY2tldCA9PT0gdGhpcy5fcmVuZGVyVGlja2V0ICYmIG5vZGVzUmV2aXNpb24gPT09IHRoaXMuX3N0b3JlLm5vZGVzUmV2aXNpb247XG4gIH1cblxuICBwcml2YXRlIF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSB0aGlzLl9icm93c2VyLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIGlmICghd2luZG93UmVmKSB7XG4gICAgICBjYWxsYmFjaygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2luZG93UmVmLnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gIH1cblxuICBwcml2YXRlIF9ub3coKTogbnVtYmVyIHtcbiAgICBjb25zdCBwZXJmb3JtYW5jZVJlZiA9IHRoaXMuX2Jyb3dzZXIuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LnBlcmZvcm1hbmNlO1xuXG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlUmVmID8gcGVyZm9ybWFuY2VSZWYubm93KCkgOiBEYXRlLm5vdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNXaXRoaW5TbGljZUJ1ZGdldChzbGljZVN0YXJ0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX2Jyb3dzZXIuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9ub3coKSAtIHNsaWNlU3RhcnQgPCBTTElDRV9CVURHRVRfTVM7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvblJlbmRlclNpZ25hdHVyZShjb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UsIGxpbmU6IElMaW5lKTogc3RyaW5nIHtcbiAgY29uc3QgeyBzb3VyY2VTaWRlLCB0YXJnZXRTaWRlIH0gPSBjb25uZWN0aW9uLmdldFJlc29sdmVkU2lkZXMoKTtcblxuICByZXR1cm4gW1xuICAgIGNvbm5lY3Rpb24uZkJlaGF2aW9yLFxuICAgIGNvbm5lY3Rpb24uZlR5cGUsXG4gICAgY29ubmVjdGlvbi5mUmFkaXVzLFxuICAgIGNvbm5lY3Rpb24uZk9mZnNldCxcbiAgICBjb25uZWN0aW9uLmZSZWFzc2lnbmFibGVTdGFydCgpLFxuICAgIHNlcmlhbGl6ZUNvbnRlbnRzKGNvbm5lY3Rpb24uZkNvbnRlbnRzKCkgfHwgW10pLFxuICAgIHNvdXJjZVNpZGUsXG4gICAgdGFyZ2V0U2lkZSxcbiAgICBzZXJpYWxpemVQb2ludChsaW5lLnBvaW50MSksXG4gICAgc2VyaWFsaXplUG9pbnQobGluZS5wb2ludDIpLFxuICAgIHNlcmlhbGl6ZVdheXBvaW50cyhjb25uZWN0aW9uLmZXYXlwb2ludHMoKT8ud2F5cG9pbnRzKCkgfHwgW10pLFxuICBdLmpvaW4oJ3wnKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplUG9pbnQocG9pbnQ6IElMaW5lWydwb2ludDEnXSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtwb2ludC54fToke3BvaW50Lnl9YDtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplV2F5cG9pbnRzKHdheXBvaW50czogcmVhZG9ubHkgSUxpbmVbJ3BvaW50MSddW10pOiBzdHJpbmcge1xuICByZXR1cm4gd2F5cG9pbnRzLm1hcChzZXJpYWxpemVQb2ludCkuam9pbignOycpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVDb250ZW50cyhjb250ZW50czogcmVhZG9ubHkgRkNvbm5lY3Rpb25Db250ZW50QmFzZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbnRlbnRzXG4gICAgLm1hcCgoY29udGVudCkgPT4ge1xuICAgICAgcmV0dXJuIFtjb250ZW50LnBvc2l0aW9uKCksIGNvbnRlbnQub2Zmc2V0KCksIGNvbnRlbnQuYWxpZ24oKV0uam9pbignOicpO1xuICAgIH0pXG4gICAgLmpvaW4oJzsnKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './resolve-connection-endpoint-rotation-context';
|
|
2
|
+
export * from './resolve-connection-endpoint-rotation-context-request';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLWNvbm5lY3Rpb24vcmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnREFBZ0QsQ0FBQztBQUUvRCxjQUFjLHdEQUF3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXNvbHZlLWNvbm5lY3Rpb24tZW5kcG9pbnQtcm90YXRpb24tY29udGV4dCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQtcmVxdWVzdCc7XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export class ResolveConnectionEndpointRotationContextRequest {
|
|
2
|
+
connector;
|
|
3
|
+
static fToken = Symbol('ResolveConnectionEndpointRotationContextRequest');
|
|
4
|
+
constructor(connector) {
|
|
5
|
+
this.connector = connector;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQtcmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZG9tYWluL2YtY29ubmVjdGlvbi9yZXNvbHZlLWNvbm5lY3Rpb24tZW5kcG9pbnQtcm90YXRpb24tY29udGV4dC9yZXNvbHZlLWNvbm5lY3Rpb24tZW5kcG9pbnQtcm90YXRpb24tY29udGV4dC1yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTywrQ0FBK0M7SUFHOUI7SUFGNUIsTUFBTSxDQUFVLE1BQU0sR0FBRyxNQUFNLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUVuRixZQUE0QixTQUEwQjtRQUExQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtJQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGQ29ubmVjdG9yQmFzZSB9IGZyb20gJy4uLy4uLy4uL2YtY29ubmVjdG9ycyc7XG5pbXBvcnQgeyBJQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vZi1jb25uZWN0aW9uLXYyJztcblxuZXhwb3J0IGNsYXNzIFJlc29sdmVDb25uZWN0aW9uRW5kcG9pbnRSb3RhdGlvbkNvbnRleHRSZXF1ZXN0IHtcbiAgc3RhdGljIHJlYWRvbmx5IGZUb2tlbiA9IFN5bWJvbCgnUmVzb2x2ZUNvbm5lY3Rpb25FbmRwb2ludFJvdGF0aW9uQ29udGV4dFJlcXVlc3QnKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY29ubmVjdG9yPzogRkNvbm5lY3RvckJhc2UpIHt9XG59XG5cbmV4cG9ydCB0eXBlIFRSZXNvbHZlQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0UmVzcG9uc2UgPVxuICB8IElDb25uZWN0aW9uRW5kcG9pbnRSb3RhdGlvbkNvbnRleHRcbiAgfCB1bmRlZmluZWQ7XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import { FExecutionRegister, FMediator } from '@foblex/mediator';
|
|
4
|
+
import { FComponentsStore } from '../../../f-storage';
|
|
5
|
+
import { GetNormalizedElementRectRequest } from '../../get-normalized-element-rect';
|
|
6
|
+
import { ResolveConnectionEndpointRotationContextRequest, } from './resolve-connection-endpoint-rotation-context-request';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
let ResolveConnectionEndpointRotationContext = class ResolveConnectionEndpointRotationContext {
|
|
9
|
+
_store = inject(FComponentsStore);
|
|
10
|
+
_mediator = inject(FMediator);
|
|
11
|
+
handle({ connector, }) {
|
|
12
|
+
if (!connector) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const node = this._store.nodes.get(connector.fNodeId);
|
|
16
|
+
if (!node || !node._rotate) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const nodeRect = this._mediator.execute(new GetNormalizedElementRectRequest(node.hostElement));
|
|
20
|
+
return {
|
|
21
|
+
rotationDeg: node._rotate,
|
|
22
|
+
pivot: nodeRect.gravityCenter,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResolveConnectionEndpointRotationContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
26
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResolveConnectionEndpointRotationContext });
|
|
27
|
+
};
|
|
28
|
+
ResolveConnectionEndpointRotationContext = __decorate([
|
|
29
|
+
FExecutionRegister(ResolveConnectionEndpointRotationContextRequest)
|
|
30
|
+
], ResolveConnectionEndpointRotationContext);
|
|
31
|
+
export { ResolveConnectionEndpointRotationContext };
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResolveConnectionEndpointRotationContext, decorators: [{
|
|
33
|
+
type: Injectable
|
|
34
|
+
}] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLWNvbm5lY3Rpb24vcmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQvcmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQ0wsK0NBQStDLEdBRWhELE1BQU0sd0RBQXdELENBQUM7O0FBSXpELElBQU0sd0NBQXdDLEdBQTlDLE1BQU0sd0NBQXdDO0lBT2xDLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sQ0FBQyxFQUNaLFNBQVMsR0FDdUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3JDLElBQUksK0JBQStCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUN0RCxDQUFDO1FBRUYsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN6QixLQUFLLEVBQUUsUUFBUSxDQUFDLGFBQWE7U0FDOUIsQ0FBQztJQUNKLENBQUM7d0dBOUJVLHdDQUF3Qzs0R0FBeEMsd0NBQXdDOztBQUF4Qyx3Q0FBd0M7SUFEcEQsa0JBQWtCLENBQUMsK0NBQStDLENBQUM7R0FDdkQsd0NBQXdDLENBK0JwRDs7NEZBL0JZLHdDQUF3QztrQkFGcEQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZWN0IH0gZnJvbSAnQGZvYmxleC8yZCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZFeGVjdXRpb25SZWdpc3RlciwgRk1lZGlhdG9yLCBJRXhlY3V0aW9uIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBGQ29tcG9uZW50c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IEdldE5vcm1hbGl6ZWRFbGVtZW50UmVjdFJlcXVlc3QgfSBmcm9tICcuLi8uLi9nZXQtbm9ybWFsaXplZC1lbGVtZW50LXJlY3QnO1xuaW1wb3J0IHtcbiAgUmVzb2x2ZUNvbm5lY3Rpb25FbmRwb2ludFJvdGF0aW9uQ29udGV4dFJlcXVlc3QsXG4gIFRSZXNvbHZlQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0UmVzcG9uc2UsXG59IGZyb20gJy4vcmVzb2x2ZS1jb25uZWN0aW9uLWVuZHBvaW50LXJvdGF0aW9uLWNvbnRleHQtcmVxdWVzdCc7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoUmVzb2x2ZUNvbm5lY3Rpb25FbmRwb2ludFJvdGF0aW9uQ29udGV4dFJlcXVlc3QpXG5leHBvcnQgY2xhc3MgUmVzb2x2ZUNvbm5lY3Rpb25FbmRwb2ludFJvdGF0aW9uQ29udGV4dFxuICBpbXBsZW1lbnRzXG4gICAgSUV4ZWN1dGlvbjxcbiAgICAgIFJlc29sdmVDb25uZWN0aW9uRW5kcG9pbnRSb3RhdGlvbkNvbnRleHRSZXF1ZXN0LFxuICAgICAgVFJlc29sdmVDb25uZWN0aW9uRW5kcG9pbnRSb3RhdGlvbkNvbnRleHRSZXNwb25zZVxuICAgID5cbntcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmUgPSBpbmplY3QoRkNvbXBvbmVudHNTdG9yZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lZGlhdG9yID0gaW5qZWN0KEZNZWRpYXRvcik7XG5cbiAgcHVibGljIGhhbmRsZSh7XG4gICAgY29ubmVjdG9yLFxuICB9OiBSZXNvbHZlQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0UmVxdWVzdCk6IFRSZXNvbHZlQ29ubmVjdGlvbkVuZHBvaW50Um90YXRpb25Db250ZXh0UmVzcG9uc2Uge1xuICAgIGlmICghY29ubmVjdG9yKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9zdG9yZS5ub2Rlcy5nZXQoY29ubmVjdG9yLmZOb2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCAhbm9kZS5fcm90YXRlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVSZWN0ID0gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZTxJUmVjdD4oXG4gICAgICBuZXcgR2V0Tm9ybWFsaXplZEVsZW1lbnRSZWN0UmVxdWVzdChub2RlLmhvc3RFbGVtZW50KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdGF0aW9uRGVnOiBub2RlLl9yb3RhdGUsXG4gICAgICBwaXZvdDogbm9kZVJlY3QuZ3Jhdml0eUNlbnRlcixcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -5,4 +5,4 @@ export class OnPointerMoveRequest {
|
|
|
5
5
|
this.event = event;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tcG9pbnRlci1tb3ZlLXJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLWRyYWdnYWJsZS9vbi1wb2ludGVyLW1vdmUvb24tcG9pbnRlci1tb3ZlLXJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLG9CQUFvQjtJQUdaO0lBRm5CLE1BQU0sQ0FBVSxNQUFNLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFeEQsWUFBbUIsS0FBb0I7UUFBcEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtJQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZHJhZy10b29sa2l0JztcblxuZXhwb3J0IGNsYXNzIE9uUG9pbnRlck1vdmVSZXF1ZXN0IHtcbiAgc3RhdGljIHJlYWRvbmx5IGZUb2tlbiA9IFN5bWJvbCgnT25Qb2ludGVyTW92ZVJlcXVlc3QnKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IElQb2ludGVyRXZlbnQpIHt9XG59XG4iXX0=
|