@likec4/diagram 1.29.1 → 1.31.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/README.md +324 -5
- package/bundle/chunk-BBzMXzCg.js +21383 -0
- package/bundle/custom.js +62 -0
- package/bundle/index.js +17459 -38163
- package/dist/LikeC4CustomColors.js +2 -2
- package/dist/LikeC4Diagram.d.ts +1 -1
- package/dist/LikeC4Diagram.js +4 -2
- package/dist/LikeC4Diagram.props.d.ts +6 -1
- package/dist/LikeC4ModelProvider.d.ts +3 -3
- package/dist/LikeC4ModelProvider.js +0 -1
- package/dist/StaticLikeC4Diagram.d.ts +1 -1
- package/dist/base/BaseXYFlow.js +3 -3
- package/dist/base/primitives/compound/CompoundActionButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +7 -3
- package/dist/base/primitives/compound/CompoundNodeContainer.js +3 -2
- package/dist/base/primitives/customEdge.d.ts +2 -35
- package/dist/base/primitives/customEdge.js +2 -2
- package/dist/base/primitives/customNode.d.ts +2 -2
- package/dist/base/primitives/customNode.js +9 -2
- package/dist/base/primitives/edge/EdgeContainer.js +0 -1
- package/dist/base/primitives/edge/EdgeLabel.js +0 -1
- package/dist/base/primitives/edge/EdgeLabelContainer.js +0 -2
- package/dist/base/primitives/edge/EdgePath.js +2 -2
- package/dist/base/primitives/element/ElementNodeContainer.d.ts +24 -22
- package/dist/base/primitives/element/ElementNodeContainer.js +66 -68
- package/dist/base/primitives/element/ElementShape.d.ts +8 -4
- package/dist/base/primitives/element/ElementShape.js +4 -3
- package/dist/base/primitives/element/ElementTitle.css.d.ts +1 -1
- package/dist/base/primitives/element/ElementTitle.js +0 -1
- package/dist/base/types.d.ts +5 -5
- package/dist/bundle/LikeC4View.js +6 -3
- package/dist/bundle/LikeC4View.props.d.ts +5 -1
- package/dist/bundle/ReactLikeC4.js +1 -2
- package/dist/bundle/ShadowRoot.js +3 -3
- package/dist/bundle/custom.d.ts +1 -0
- package/dist/bundle/index.d.ts +3 -1
- package/dist/bundle/index.js +9 -0
- package/dist/bundle/styles.css.js +5 -5
- package/dist/components/SearchControl.js +2 -2
- package/dist/context/ControlsCustomLayout.js +0 -1
- package/dist/context/DiagramEventHandlers.js +5 -5
- package/dist/context/DiagramFeatures.d.ts +2 -4
- package/dist/context/DiagramFeatures.js +15 -16
- package/dist/context/EnsureMantine.js +9 -4
- package/dist/context/FramerMotionConfig.js +0 -1
- package/dist/context/IconRenderer.js +7 -7
- package/dist/context/ReduceGraphics.js +6 -6
- package/dist/context/RootContainer.js +5 -5
- package/dist/context/index.d.ts +1 -1
- package/dist/custom/components.d.ts +5 -0
- package/dist/custom/customNodes.d.ts +218 -0
- package/dist/custom/hooks.d.ts +10 -0
- package/dist/custom/index.d.ts +4 -0
- package/dist/hooks/safeContext.js +3 -3
- package/dist/hooks/useCurrentViewId.d.ts +5 -1
- package/dist/hooks/useCurrentViewId.js +1 -2
- package/dist/hooks/useDiagram.d.ts +14 -12544
- package/dist/hooks/useDiagram.js +3 -5
- package/dist/hooks/useMantinePortalProps.js +2 -2
- package/dist/hooks/useSetState.js +3 -3
- package/dist/hooks/useUpdateEffect.js +0 -1
- package/dist/hooks/useXYFlow.d.ts +64 -64
- package/dist/hooks/useXYFlow.js +2 -2
- package/dist/index.d.ts +2 -4
- package/dist/index.js +8 -3
- package/dist/likec4diagram/DiagramUI.js +2 -2
- package/dist/likec4diagram/DiagramXYFlow.d.ts +1 -1
- package/dist/likec4diagram/DiagramXYFlow.js +25 -7
- package/dist/likec4diagram/custom/edges/NotePopover.js +2 -2
- package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +9 -13
- package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -8
- package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +14 -12
- package/dist/likec4diagram/custom/index.d.ts +15 -19
- package/dist/likec4diagram/custom/index.js +3 -3
- package/dist/likec4diagram/custom/nodes/CompoundActions.js +2 -2
- package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +27 -4
- package/dist/likec4diagram/custom/nodes/ElementActions.js +67 -53
- package/dist/likec4diagram/custom/nodes/index.d.ts +8 -0
- package/dist/likec4diagram/custom/nodes/nodes.d.ts +10 -0
- package/dist/likec4diagram/custom/nodes/{nodeTypes.js → nodes.js} +39 -39
- package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +6 -7
- package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +3 -3
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +3 -2
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
- package/dist/likec4diagram/types.d.ts +15 -7
- package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +4 -4
- package/dist/likec4diagram/ui/controls/Controls.js +2 -2
- package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +2 -2
- package/dist/likec4diagram/ui/notation/NotationPanel.js +6 -8
- package/dist/likec4diagram/ui/search/ElementsColumn.js +6 -7
- package/dist/likec4diagram/ui/search/LikeC4Search.js +3 -3
- package/dist/likec4diagram/ui/search/SearchInput.js +0 -1
- package/dist/likec4diagram/ui/search/_shared.css.d.ts +1 -1
- package/dist/likec4diagram/ui/search/state.js +3 -4
- package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
- package/dist/likec4diagram/useLayoutConstraints.js +3 -4
- package/dist/likec4diagram/useViewToNodesEdges.js +2 -0
- package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
- package/dist/likec4model/LikeC4ModelContext.js +2 -2
- package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -1
- package/dist/likec4model/useLikeC4ElementsTree.js +3 -3
- package/dist/likec4model/useLikeC4Model.d.ts +1 -1
- package/dist/likec4model/useLikeC4Model.js +2 -2
- package/dist/overlays/Overlays.d.ts +2 -3
- package/dist/overlays/Overlays.js +5 -6
- package/dist/overlays/element-details/ElementDetailsCard.css.js +13 -9
- package/dist/overlays/element-details/ElementDetailsCard.js +98 -105
- package/dist/overlays/element-details/TabPanelDeployments.js +4 -4
- package/dist/overlays/element-details/TabPanelRelationships.js +2 -2
- package/dist/overlays/element-details/TabPanelStructure.js +3 -3
- package/dist/overlays/element-details/actor.d.ts +6905 -19690
- package/dist/overlays/element-details/actor.js +0 -2
- package/dist/overlays/element-details/actorContext.js +3 -3
- package/dist/overlays/overlay/Overlay.d.ts +11 -1
- package/dist/overlays/overlay/Overlay.js +8 -8
- package/dist/overlays/overlaysActor.d.ts +4 -2
- package/dist/overlays/overlaysActor.js +2 -1
- package/dist/overlays/relationship-details/RelationshipDetails.d.ts +4 -8
- package/dist/overlays/relationship-details/RelationshipDetails.js +12 -12
- package/dist/overlays/relationship-details/SelectEdge.js +2 -3
- package/dist/overlays/relationship-details/_types.d.ts +6 -5
- package/dist/overlays/relationship-details/actor.d.ts +3 -3
- package/dist/overlays/relationship-details/compute.js +3 -3
- package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +4 -8
- package/dist/overlays/relationship-details/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +3 -31
- package/dist/overlays/relationship-details/hooks.d.ts +27 -27
- package/dist/overlays/relationship-details/hooks.js +4 -4
- package/dist/overlays/relationship-details/layout.js +2 -3
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +4 -8
- package/dist/overlays/relationships-browser/RelationshipsBrowser.js +8 -8
- package/dist/overlays/relationships-browser/SelectElement.js +5 -5
- package/dist/overlays/relationships-browser/_types.d.ts +6 -5
- package/dist/overlays/relationships-browser/actor.d.ts +63 -428
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +4 -8
- package/dist/overlays/relationships-browser/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +10 -14
- package/dist/overlays/relationships-browser/custom/nodeTypes.js +1 -2
- package/dist/overlays/relationships-browser/hooks.d.ts +4 -61
- package/dist/overlays/relationships-browser/hooks.js +4 -4
- package/dist/overlays/relationships-browser/layout.js +3 -4
- package/dist/state/DiagramActorProvider.js +3 -3
- package/dist/state/diagram-machine.d.ts +186 -10369
- package/dist/state/diagram-machine.js +2 -1
- package/dist/state/hotkeyActor.d.ts +4 -2
- package/dist/state/syncManualLayoutActor.d.ts +14 -3
- package/dist/state/syncManualLayoutActor.js +2 -1
- package/dist/state/types.d.ts +5 -4
- package/dist/state/utils.d.ts +1 -1
- package/dist/styles-font.css +1 -0
- package/dist/styles-min.css +1 -0
- package/dist/styles-xyflow.css +1 -0
- package/dist/styles.css +1 -0
- package/dist/styles.css2.js +3 -0
- package/package.json +46 -21
- package/panda.buildinfo.json +979 -0
- package/src/LikeC4Diagram.props.ts +7 -1
- package/src/LikeC4Diagram.tsx +2 -0
- package/src/LikeC4ModelProvider.tsx +3 -3
- package/src/StaticLikeC4Diagram.tsx +1 -0
- package/src/base/Background.tsx +0 -4
- package/src/base/primitives/compound/CompoundActionButton.tsx +7 -4
- package/src/base/primitives/compound/CompoundDetailsButton.tsx +7 -4
- package/src/base/primitives/compound/CompoundNodeContainer.tsx +8 -7
- package/src/base/primitives/customEdge.ts +1 -1
- package/src/base/primitives/{customNode.ts → customNode.tsx} +11 -3
- package/src/base/primitives/element/ElementNodeContainer.tsx +87 -80
- package/src/base/primitives/element/ElementShape.tsx +11 -10
- package/src/base/types.ts +28 -33
- package/src/bundle/LikeC4View.props.ts +6 -1
- package/src/bundle/LikeC4View.tsx +3 -0
- package/src/bundle/ReactLikeC4.tsx +1 -1
- package/src/bundle/custom.ts +1 -0
- package/src/bundle/index.ts +20 -1
- package/src/bundle/styles.css.ts +1 -1
- package/src/components/SearchControl.tsx +1 -1
- package/src/context/DiagramFeatures.tsx +12 -8
- package/src/context/EnsureMantine.tsx +13 -3
- package/src/context/IconRenderer.tsx +4 -2
- package/src/context/ReduceGraphics.tsx +6 -6
- package/src/context/index.ts +0 -1
- package/src/custom/components.ts +47 -0
- package/src/custom/customNodes.tsx +244 -0
- package/src/custom/hooks.ts +35 -0
- package/src/custom/index.ts +5 -0
- package/src/hooks/useCurrentViewId.ts +9 -1
- package/src/hooks/useDiagram.ts +30 -9
- package/src/index.ts +4 -8
- package/src/likec4diagram/DiagramXYFlow.tsx +28 -5
- package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +1 -1
- package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +9 -7
- package/src/likec4diagram/custom/{index.tsx → index.ts} +2 -2
- package/src/likec4diagram/custom/nodes/CompoundActions.tsx +2 -2
- package/src/likec4diagram/custom/nodes/ElementActions.tsx +100 -57
- package/src/likec4diagram/custom/nodes/index.ts +17 -0
- package/src/likec4diagram/custom/nodes/{nodeTypes.tsx → nodes.tsx} +52 -36
- package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +3 -4
- package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +3 -3
- package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +5 -4
- package/src/likec4diagram/types.ts +19 -9
- package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +1 -2
- package/src/likec4diagram/ui/search/ElementsColumn.tsx +2 -4
- package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +1 -1
- package/src/likec4diagram/useViewToNodesEdges.ts +2 -0
- package/src/likec4model/LikeC4ModelContext.ts +2 -2
- package/src/likec4model/useLikeC4ElementsTree.ts +3 -1
- package/src/likec4model/useLikeC4Model.ts +1 -1
- package/src/overlays/Overlays.tsx +2 -3
- package/src/overlays/element-details/ElementDetailsCard.css.ts +14 -22
- package/src/overlays/element-details/ElementDetailsCard.tsx +18 -16
- package/src/overlays/overlay/Overlay.tsx +3 -4
- package/src/overlays/overlaysActor.ts +4 -3
- package/src/overlays/relationship-details/RelationshipDetails.tsx +1 -1
- package/src/overlays/relationship-details/SelectEdge.tsx +0 -2
- package/src/overlays/relationship-details/_types.ts +16 -13
- package/src/overlays/relationship-details/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationships-browser/_types.ts +18 -15
- package/src/overlays/relationships-browser/actor.ts +2 -2
- package/src/overlays/relationships-browser/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationships-browser/custom/nodeTypes.tsx +1 -2
- package/src/state/DiagramActorProvider.tsx +2 -2
- package/src/state/diagram-machine.ts +13 -8
- package/src/state/hotkeyActor.ts +4 -2
- package/src/state/syncManualLayoutActor.ts +9 -3
- package/src/state/types.ts +9 -3
- package/src/state/utils.ts +3 -3
- package/src/styles-min.css +2 -0
- package/src/styles-xyflow.css +1 -0
- package/dist/_virtual/_commonjsHelpers.js +0 -5
- package/dist/_virtual/default-map.js +0 -7
- package/dist/_virtual/index.js +0 -5
- package/dist/_virtual/index2.js +0 -3
- package/dist/_virtual/react.production.js +0 -3
- package/dist/_virtual/set.js +0 -5
- package/dist/_virtual/set2.js +0 -3
- package/dist/base/xyflowMachine.d.ts +0 -212
- package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +0 -8
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +0 -172
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +0 -369
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js +0 -556
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/index.js +0 -15
- package/dist/packages/core/src/compute-view/relationships-view/compute.js +0 -123
- package/dist/packages/core/src/compute-view/relationships-view/utils.js +0 -68
- package/dist/packages/core/src/errors/index.js +0 -15
- package/dist/packages/core/src/model/connection/model/ConnectionModel.js +0 -121
- package/dist/packages/core/src/model/connection/model/find.js +0 -39
- package/dist/packages/core/src/model/connection/ops.js +0 -7
- package/dist/packages/core/src/utils/const.js +0 -3
- package/dist/packages/core/src/utils/fqn.js +0 -51
- package/dist/packages/core/src/utils/guards.js +0 -7
- package/dist/packages/core/src/utils/iterable/filter.js +0 -21
- package/dist/packages/core/src/utils/iterable/find.js +0 -21
- package/dist/packages/core/src/utils/iterable/map.js +0 -18
- package/dist/packages/core/src/utils/iterable/some.js +0 -21
- package/dist/packages/core/src/utils/iterable/to.js +0 -14
- package/dist/packages/core/src/utils/set.js +0 -48
- package/dist/packages/core/src/utils/string-hash.js +0 -13
- package/dist/styles.css.js +0 -3
- package/src/base/xyflowMachine.ts +0 -75
- /package/dist/{bundle/font.css.js → styles-font.css2.js} +0 -0
- /package/src/{bundle/font.css → styles-font.css} +0 -0
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { nonNullable } from '../../errors/index.js';
|
|
2
|
-
import { sortParentsFirst, isDescendantOf, isAncestor } from '../../utils/fqn.js';
|
|
3
|
-
import DefaultMap from '../../../../../_virtual/default-map.js';
|
|
4
|
-
|
|
5
|
-
function treeFromElements(elements) {
|
|
6
|
-
const sorted = sortParentsFirst([...elements]);
|
|
7
|
-
const root = new Set(sorted);
|
|
8
|
-
const map = new Map(sorted.map((e) => [e._literalId, e]));
|
|
9
|
-
const parents = new DefaultMap(() => null);
|
|
10
|
-
const children = sorted.reduce((acc, parent, index, all) => {
|
|
11
|
-
acc.set(
|
|
12
|
-
parent,
|
|
13
|
-
all.slice(index + 1).filter(isDescendantOf(parent)).map((e) => {
|
|
14
|
-
root.delete(e);
|
|
15
|
-
return e;
|
|
16
|
-
}).reduce((acc2, el) => {
|
|
17
|
-
if (!acc2.some(isAncestor(el))) {
|
|
18
|
-
acc2.push(el);
|
|
19
|
-
parents.set(el, parent);
|
|
20
|
-
}
|
|
21
|
-
return acc2;
|
|
22
|
-
}, [])
|
|
23
|
-
);
|
|
24
|
-
return acc;
|
|
25
|
-
}, new DefaultMap(() => []));
|
|
26
|
-
return {
|
|
27
|
-
sorted,
|
|
28
|
-
byId: (id) => nonNullable(map.get(id), `Element not found by id: ${id}`),
|
|
29
|
-
root,
|
|
30
|
-
parent: (el) => parents.get(el),
|
|
31
|
-
children: (el) => children.get(el),
|
|
32
|
-
/**
|
|
33
|
-
* Flattens the tree structure by removing redundant hierarchy levels.
|
|
34
|
-
* @example
|
|
35
|
-
* A
|
|
36
|
-
* └── B
|
|
37
|
-
* ├── C
|
|
38
|
-
* │ └── D
|
|
39
|
-
* │ └── E
|
|
40
|
-
* └── F
|
|
41
|
-
* └── G
|
|
42
|
-
* becomes
|
|
43
|
-
* A
|
|
44
|
-
* ├── C
|
|
45
|
-
* │ └── E
|
|
46
|
-
* └── F
|
|
47
|
-
* └── G
|
|
48
|
-
*/
|
|
49
|
-
flatten: () => {
|
|
50
|
-
return /* @__PURE__ */ new Set([
|
|
51
|
-
...root,
|
|
52
|
-
...sorted.reduce((acc, el) => {
|
|
53
|
-
const _children = children.get(el);
|
|
54
|
-
if (_children.length === 0) {
|
|
55
|
-
acc.push(el);
|
|
56
|
-
return acc;
|
|
57
|
-
}
|
|
58
|
-
if (_children.length > 1) {
|
|
59
|
-
acc.push(..._children);
|
|
60
|
-
}
|
|
61
|
-
return acc;
|
|
62
|
-
}, [])
|
|
63
|
-
]);
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export { treeFromElements };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
function nonNullable(value, message) {
|
|
2
|
-
if (typeof value === "undefined" || value == null) {
|
|
3
|
-
const msg = typeof message === "function" ? message() : message;
|
|
4
|
-
throw new Error(msg ?? `Expected defined value, but received ${value}`);
|
|
5
|
-
}
|
|
6
|
-
return value;
|
|
7
|
-
}
|
|
8
|
-
function invariant(condition, message) {
|
|
9
|
-
if (condition) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
throw new Error(message ?? "Invariant failed");
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export { invariant, nonNullable };
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { isNot } from 'remeda';
|
|
2
|
-
import { invariant } from '../../../errors/index.js';
|
|
3
|
-
import { customInspectSymbol } from '../../../utils/const.js';
|
|
4
|
-
import { union, difference, intersection, equals } from '../../../utils/set.js';
|
|
5
|
-
import { stringHash } from '../../../utils/string-hash.js';
|
|
6
|
-
import { hasSameSourceTarget } from '../ops.js';
|
|
7
|
-
import { findConnection } from './find.js';
|
|
8
|
-
import { isome } from '../../../utils/iterable/some.js';
|
|
9
|
-
import { ifilter } from '../../../utils/iterable/filter.js';
|
|
10
|
-
|
|
11
|
-
class ConnectionModel {
|
|
12
|
-
constructor(source, target, relations = /* @__PURE__ */ new Set()) {
|
|
13
|
-
this.source = source;
|
|
14
|
-
this.target = target;
|
|
15
|
-
this.relations = relations;
|
|
16
|
-
this.id = stringHash(`model:${source.id}:${target.id}`);
|
|
17
|
-
}
|
|
18
|
-
id;
|
|
19
|
-
_boundary;
|
|
20
|
-
/**
|
|
21
|
-
* Common ancestor of the source and target elements.
|
|
22
|
-
* Represents the boundary of the connection.
|
|
23
|
-
*/
|
|
24
|
-
get boundary() {
|
|
25
|
-
return this._boundary ??= this.source.commonAncestor(this.target);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Human readable expression of the connection
|
|
29
|
-
* Mostly used for testing and debugging
|
|
30
|
-
*/
|
|
31
|
-
get expression() {
|
|
32
|
-
return `${this.source.id} -> ${this.target.id}`;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Returns true if only includes relations between the source and target elements.
|
|
36
|
-
*/
|
|
37
|
-
get isDirect() {
|
|
38
|
-
return this.nonEmpty() && !this.isImplicit;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Returns true if includes relations between nested elements of the source and target elements.
|
|
42
|
-
*/
|
|
43
|
-
get isImplicit() {
|
|
44
|
-
return this.nonEmpty() && isome(this.relations, isNot(hasSameSourceTarget(this)));
|
|
45
|
-
}
|
|
46
|
-
get directRelations() {
|
|
47
|
-
return new Set(ifilter(this.relations, hasSameSourceTarget(this)));
|
|
48
|
-
}
|
|
49
|
-
nonEmpty() {
|
|
50
|
-
return this.relations.size > 0;
|
|
51
|
-
}
|
|
52
|
-
mergeWith(other) {
|
|
53
|
-
invariant(this.source.id === other.source.id, "Cannot merge connections with different sources");
|
|
54
|
-
invariant(this.target.id === other.target.id, "Cannot merge connections with different targets");
|
|
55
|
-
return new ConnectionModel(
|
|
56
|
-
this.source,
|
|
57
|
-
this.target,
|
|
58
|
-
union(this.relations, other.relations)
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
difference(other) {
|
|
62
|
-
return new ConnectionModel(
|
|
63
|
-
this.source,
|
|
64
|
-
this.target,
|
|
65
|
-
difference(this.relations, other.relations)
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
intersect(other) {
|
|
69
|
-
invariant(other instanceof ConnectionModel, "Cannot intersect connection with different type");
|
|
70
|
-
return new ConnectionModel(
|
|
71
|
-
this.source,
|
|
72
|
-
this.target,
|
|
73
|
-
intersection(this.relations, other.relations)
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
equals(other) {
|
|
77
|
-
invariant(other instanceof ConnectionModel, "Cannot merge connection with different type");
|
|
78
|
-
return this.id === other.id && this.source.id === other.source.id && this.target.id === other.target.id && equals(this.relations, other.relations);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Returns a new instance with the updated relations.
|
|
82
|
-
*
|
|
83
|
-
* @param relations - A readonly set of `RelationshipModel` instances representing the new relations.
|
|
84
|
-
* @returns A new `ConnectionModel` instance with the updated relations.
|
|
85
|
-
*/
|
|
86
|
-
update(relations) {
|
|
87
|
-
return new ConnectionModel(
|
|
88
|
-
this.source,
|
|
89
|
-
this.target,
|
|
90
|
-
relations
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
[customInspectSymbol](depth, inspectOptions, inspect) {
|
|
94
|
-
const asString = this.toString();
|
|
95
|
-
Object.defineProperty(asString, "constructor", {
|
|
96
|
-
value: ConnectionModel,
|
|
97
|
-
enumerable: false
|
|
98
|
-
});
|
|
99
|
-
return asString;
|
|
100
|
-
}
|
|
101
|
-
toString() {
|
|
102
|
-
return [
|
|
103
|
-
this.expression,
|
|
104
|
-
this.relations.size ? " relations:" : " relations: [ ]",
|
|
105
|
-
...[...this.relations].map((c) => " " + c.expression)
|
|
106
|
-
].join("\n");
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Creates a new connection with reversed direction (target becomes source and vice versa)
|
|
110
|
-
* @param search - When true, attempts to find an existing connection between the reversed nodes
|
|
111
|
-
*/
|
|
112
|
-
reversed(search = false) {
|
|
113
|
-
if (!search) {
|
|
114
|
-
return new ConnectionModel(this.target, this.source);
|
|
115
|
-
}
|
|
116
|
-
const [found] = findConnection(this.target, this.source, "directed");
|
|
117
|
-
return found ?? new ConnectionModel(this.target, this.source, /* @__PURE__ */ new Set());
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export { ConnectionModel };
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { isSameHierarchy } from '../../../utils/fqn.js';
|
|
2
|
-
import { intersection } from '../../../utils/set.js';
|
|
3
|
-
import { ConnectionModel } from './ConnectionModel.js';
|
|
4
|
-
|
|
5
|
-
function findConnection(source, target, direction = "directed") {
|
|
6
|
-
if (source === target) {
|
|
7
|
-
return [];
|
|
8
|
-
}
|
|
9
|
-
if (isSameHierarchy(source, target)) {
|
|
10
|
-
return [];
|
|
11
|
-
}
|
|
12
|
-
const directedIntersection = intersection(source.allOutgoing, target.allIncoming);
|
|
13
|
-
const directed = directedIntersection.size > 0 ? new ConnectionModel(
|
|
14
|
-
source,
|
|
15
|
-
target,
|
|
16
|
-
directedIntersection
|
|
17
|
-
) : null;
|
|
18
|
-
if (direction === "directed") {
|
|
19
|
-
return directed ? [directed] : [];
|
|
20
|
-
}
|
|
21
|
-
const reverseIntersection = intersection(source.allIncoming, target.allOutgoing);
|
|
22
|
-
const reverse = reverseIntersection.size > 0 ? new ConnectionModel(
|
|
23
|
-
target,
|
|
24
|
-
source,
|
|
25
|
-
reverseIntersection
|
|
26
|
-
) : null;
|
|
27
|
-
if (directed && reverse) {
|
|
28
|
-
return [directed, reverse];
|
|
29
|
-
}
|
|
30
|
-
if (directed) {
|
|
31
|
-
return [directed];
|
|
32
|
-
}
|
|
33
|
-
if (reverse) {
|
|
34
|
-
return [reverse];
|
|
35
|
-
}
|
|
36
|
-
return [];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { findConnection };
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { isString } from './guards.js';
|
|
2
|
-
|
|
3
|
-
const asString = (e) => isString(e) ? e : e.id;
|
|
4
|
-
function isAncestor(arg1, arg2) {
|
|
5
|
-
const arg1Id = asString(arg1);
|
|
6
|
-
if (arg2) {
|
|
7
|
-
const arg2Id = asString(arg2);
|
|
8
|
-
return arg2Id.startsWith(arg1Id + ".");
|
|
9
|
-
}
|
|
10
|
-
return (ancestor) => {
|
|
11
|
-
const ancestorId = asString(ancestor);
|
|
12
|
-
return arg1Id.startsWith(ancestorId + ".");
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function isSameHierarchy(one, another) {
|
|
16
|
-
if (!another) {
|
|
17
|
-
return (b) => isSameHierarchy(one, b);
|
|
18
|
-
}
|
|
19
|
-
const first = asString(one);
|
|
20
|
-
const second = asString(another);
|
|
21
|
-
return first === second || second.startsWith(first + ".") || first.startsWith(second + ".");
|
|
22
|
-
}
|
|
23
|
-
function isDescendantOf(descedant, ancestor) {
|
|
24
|
-
{
|
|
25
|
-
return (d) => isAncestor(descedant, d);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function findTopAncestor(items, item) {
|
|
29
|
-
let parent = item;
|
|
30
|
-
for (const e of items) {
|
|
31
|
-
if (isAncestor(e, parent)) {
|
|
32
|
-
parent = e;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return parent !== item ? parent : null;
|
|
36
|
-
}
|
|
37
|
-
function sortParentsFirst(array) {
|
|
38
|
-
const result = [];
|
|
39
|
-
const items = [...array];
|
|
40
|
-
let item;
|
|
41
|
-
while (item = items.shift()) {
|
|
42
|
-
let parent;
|
|
43
|
-
while (parent = findTopAncestor(items, item)) {
|
|
44
|
-
result.push(items.splice(items.indexOf(parent), 1)[0]);
|
|
45
|
-
}
|
|
46
|
-
result.push(item);
|
|
47
|
-
}
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export { isAncestor, isDescendantOf, isSameHierarchy, sortParentsFirst };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { isFunction } from 'remeda';
|
|
2
|
-
import { invariant } from '../../errors/index.js';
|
|
3
|
-
|
|
4
|
-
function ifilter(arg1, arg2) {
|
|
5
|
-
const pred = arg2 ?? arg1;
|
|
6
|
-
invariant(isFunction(pred));
|
|
7
|
-
function* _filter(iter) {
|
|
8
|
-
for (const value of iter) {
|
|
9
|
-
if (pred(value)) {
|
|
10
|
-
yield value;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (!arg2) {
|
|
16
|
-
return _filter;
|
|
17
|
-
}
|
|
18
|
-
return _filter(arg1);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { ifilter };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { isFunction } from 'remeda';
|
|
2
|
-
import { invariant } from '../../errors/index.js';
|
|
3
|
-
|
|
4
|
-
function ifind(arg1, arg2) {
|
|
5
|
-
const pred = arg2 ?? arg1;
|
|
6
|
-
invariant(isFunction(pred));
|
|
7
|
-
function _find(iter) {
|
|
8
|
-
for (const value of iter) {
|
|
9
|
-
if (pred(value)) {
|
|
10
|
-
return value;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (!arg2) {
|
|
16
|
-
return _find;
|
|
17
|
-
}
|
|
18
|
-
return _find(arg1);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { ifind };
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { isFunction } from 'remeda';
|
|
2
|
-
import { invariant } from '../../errors/index.js';
|
|
3
|
-
|
|
4
|
-
function imap(arg1, arg2) {
|
|
5
|
-
const mapper = arg1;
|
|
6
|
-
invariant(isFunction(mapper));
|
|
7
|
-
function* _map(iter) {
|
|
8
|
-
for (const value of iter) {
|
|
9
|
-
yield mapper(value);
|
|
10
|
-
}
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
{
|
|
14
|
-
return _map;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export { imap };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { isFunction } from 'remeda';
|
|
2
|
-
import { invariant } from '../../errors/index.js';
|
|
3
|
-
|
|
4
|
-
function isome(arg1, arg2) {
|
|
5
|
-
const pred = arg2 ?? arg1;
|
|
6
|
-
invariant(isFunction(pred));
|
|
7
|
-
function _some(iter) {
|
|
8
|
-
for (const value of iter) {
|
|
9
|
-
if (pred(value)) {
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
if (!arg2) {
|
|
16
|
-
return _some;
|
|
17
|
-
}
|
|
18
|
-
return _some(arg1);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { isome };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
function toArray(iterable) {
|
|
2
|
-
if (iterable) {
|
|
3
|
-
return Array.from(iterable);
|
|
4
|
-
}
|
|
5
|
-
return (it) => Array.from(it);
|
|
6
|
-
}
|
|
7
|
-
function toSet(iterable) {
|
|
8
|
-
if (iterable) {
|
|
9
|
-
return new Set(iterable);
|
|
10
|
-
}
|
|
11
|
-
return (it) => new Set(it);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export { toArray, toSet };
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { hasAtLeast } from 'remeda';
|
|
2
|
-
import { s as setExports } from '../../../../_virtual/set.js';
|
|
3
|
-
|
|
4
|
-
function union(...sets) {
|
|
5
|
-
let result = /* @__PURE__ */ new Set();
|
|
6
|
-
for (const set of sets) {
|
|
7
|
-
for (const value of set) {
|
|
8
|
-
result.add(value);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
return result;
|
|
12
|
-
}
|
|
13
|
-
function intersection(first, ...sets) {
|
|
14
|
-
let result = /* @__PURE__ */ new Set();
|
|
15
|
-
if (first.size === 0) {
|
|
16
|
-
return result;
|
|
17
|
-
}
|
|
18
|
-
let other = hasAtLeast(sets, 2) ? setExports.intersection(...sets) : sets[0];
|
|
19
|
-
if (other.size === 0) {
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
for (const value of first) {
|
|
23
|
-
if (other.has(value)) {
|
|
24
|
-
result.add(value);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return result;
|
|
28
|
-
}
|
|
29
|
-
function difference(a, b) {
|
|
30
|
-
if (a.size === 0) {
|
|
31
|
-
return /* @__PURE__ */ new Set();
|
|
32
|
-
}
|
|
33
|
-
if (b.size === 0) {
|
|
34
|
-
return new Set(a);
|
|
35
|
-
}
|
|
36
|
-
let result = /* @__PURE__ */ new Set();
|
|
37
|
-
for (const value of a) {
|
|
38
|
-
if (!b.has(value)) {
|
|
39
|
-
result.add(value);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return result;
|
|
43
|
-
}
|
|
44
|
-
function equals(a, b) {
|
|
45
|
-
return a.size === b.size && [...a].every((value) => b.has(value));
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export { difference, equals, intersection, union };
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { invariant } from '../errors/index.js';
|
|
2
|
-
|
|
3
|
-
function stringHash(str) {
|
|
4
|
-
let hash = 5381;
|
|
5
|
-
const len = str.length;
|
|
6
|
-
invariant(len > 0, "stringHash: empty string");
|
|
7
|
-
for (let i = 0; i < len; i++) {
|
|
8
|
-
hash = hash * 33 ^ str.charCodeAt(i);
|
|
9
|
-
}
|
|
10
|
-
return (hash >>> 0).toString(36);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export { stringHash };
|