@infinilabs/ai-chat 0.0.0 → 0.0.2
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 +310 -56
- package/dist/_baseUniq-BFn6cCm9.js +152 -0
- package/dist/_baseUniq-nfJyj2zU.cjs +151 -0
- package/dist/arc-BWSMkwk2.cjs +130 -0
- package/dist/arc-DODeX7B9.js +131 -0
- package/dist/architecture-U656AL7Q-B4C0nw6C.js +5 -0
- package/dist/architecture-U656AL7Q-CVURQXwt.cjs +5 -0
- package/dist/architectureDiagram-VXUJARFQ-2UbdzpNz.cjs +8681 -0
- package/dist/architectureDiagram-VXUJARFQ-NCVmzKuE.js +8681 -0
- package/dist/blockDiagram-VD42YOAC-B3yCPK1N.cjs +3606 -0
- package/dist/blockDiagram-VD42YOAC-C4FsmQfk.js +3606 -0
- package/dist/c4Diagram-YG6GDRKO-ATyoKzFV.js +2481 -0
- package/dist/c4Diagram-YG6GDRKO-COwVcHWj.cjs +2481 -0
- package/dist/channel-2Y73gsu9.cjs +6 -0
- package/dist/channel-oB8MffQV.js +7 -0
- package/dist/chunk-4BX2VUAB-C3diNHZw.cjs +15 -0
- package/dist/chunk-4BX2VUAB-sd2zFBFz.js +16 -0
- package/dist/chunk-55IACEB6-6ohTnYE3.js +13 -0
- package/dist/chunk-55IACEB6-T-CzlJke.cjs +12 -0
- package/dist/chunk-B4BG7PRW-B1zqG62l.cjs +1825 -0
- package/dist/chunk-B4BG7PRW-E1dti26Y.js +1826 -0
- package/dist/chunk-DI55MBZ5-Dk0kfYBV.cjs +1914 -0
- package/dist/chunk-DI55MBZ5-DpHw-vMw.js +1915 -0
- package/dist/chunk-FMBD7UC4-B1vXpasq.js +19 -0
- package/dist/chunk-FMBD7UC4-CShN9-qf.cjs +18 -0
- package/dist/chunk-QN33PNHL-Cw7FG91D.js +24 -0
- package/dist/chunk-QN33PNHL-DJi1fhak.cjs +23 -0
- package/dist/chunk-QZHKN3VN-BweiBR9P.js +17 -0
- package/dist/chunk-QZHKN3VN-DfUW_gDw.cjs +16 -0
- package/dist/chunk-TZMSLE5B-DY2Kbag4.cjs +107 -0
- package/dist/chunk-TZMSLE5B-ZQ2Esoix.js +108 -0
- package/dist/classDiagram-2ON5EDUG-D2tIbkjc.js +19 -0
- package/dist/classDiagram-2ON5EDUG-DRhRmkUb.cjs +19 -0
- package/dist/classDiagram-v2-WZHVMYZB-D2tIbkjc.js +19 -0
- package/dist/classDiagram-v2-WZHVMYZB-DRhRmkUb.cjs +19 -0
- package/dist/clone-BMkj3yun.cjs +7 -0
- package/dist/clone-ChHXIoR6.js +8 -0
- package/dist/cose-bilkent-S5V4N54A-BXnWH5Od.cjs +4942 -0
- package/dist/cose-bilkent-S5V4N54A-D15BmpCb.js +4942 -0
- package/dist/cytoscape.esm-BfvZ3QT_.js +30239 -0
- package/dist/cytoscape.esm-D8IBYQeQ.cjs +30238 -0
- package/dist/dagre-6UL2VRFP-DGQ6TW_g.cjs +693 -0
- package/dist/dagre-6UL2VRFP-WmhUYWg8.js +693 -0
- package/dist/defaultLocale-DVr69WTU.js +206 -0
- package/dist/defaultLocale-DwYGIg9G.cjs +203 -0
- package/dist/diagram-PSM6KHXK-DSfHBoUT.js +845 -0
- package/dist/diagram-PSM6KHXK-J4qyGeN7.cjs +845 -0
- package/dist/diagram-QEK2KX5R-D96wT5cH.cjs +300 -0
- package/dist/diagram-QEK2KX5R-I_nyexpY.js +300 -0
- package/dist/diagram-S2PKOQOG-BC_WyKEe.cjs +210 -0
- package/dist/diagram-S2PKOQOG-aooXSMNo.js +210 -0
- package/dist/erDiagram-Q2GNP2WA-DQ8Lquay.cjs +1158 -0
- package/dist/erDiagram-Q2GNP2WA-DWF8e6EL.js +1158 -0
- package/dist/flowDiagram-NV44I4VS-CM9c4F1o.js +2331 -0
- package/dist/flowDiagram-NV44I4VS-DpYNkyM2.cjs +2331 -0
- package/dist/ganttDiagram-JELNMOA3-CAsoD6rZ.js +3679 -0
- package/dist/ganttDiagram-JELNMOA3-DfKahpj4.cjs +3679 -0
- package/dist/gitGraph-F6HP7TQM-BX2fz4_i.js +5 -0
- package/dist/gitGraph-F6HP7TQM-DRkGg4T1.cjs +5 -0
- package/dist/gitGraphDiagram-NY62KEGX-PXpI94u6.js +1203 -0
- package/dist/gitGraphDiagram-NY62KEGX-YhnKpooH.cjs +1203 -0
- package/dist/graph-BvxpI7Xc.js +596 -0
- package/dist/graph-CI_TWBSn.cjs +595 -0
- package/dist/index-BctLGjTK.cjs +120500 -0
- package/dist/index-CjSgoo1P.js +120485 -0
- package/dist/index.cjs +19 -0
- package/dist/index.js +12 -19961
- package/dist/info-NVLQJR56-BGbTE7dw.cjs +5 -0
- package/dist/info-NVLQJR56-DRxIh-N8.js +5 -0
- package/dist/infoDiagram-WHAUD3N6-BB2Bnbnh.cjs +31 -0
- package/dist/infoDiagram-WHAUD3N6-D_RrgwxS.js +31 -0
- package/dist/init-DevvdK2U.cjs +15 -0
- package/dist/init-ZxktEp_H.js +16 -0
- package/dist/journeyDiagram-XKPGCS4Q-BJjXlMIj.js +1254 -0
- package/dist/journeyDiagram-XKPGCS4Q-BcBLsfI9.cjs +1254 -0
- package/dist/kanban-definition-3W4ZIXB7-0wwNBZ93.js +1047 -0
- package/dist/kanban-definition-3W4ZIXB7-CaY0q4j9.cjs +1047 -0
- package/dist/katex-BhpYeT3b.cjs +14523 -0
- package/dist/katex-ei8sH3Uy.js +14524 -0
- package/dist/layout-CcghncRv.js +2183 -0
- package/dist/layout-CvwzED_C.cjs +2182 -0
- package/dist/linear-CYow-mAK.cjs +339 -0
- package/dist/linear-D_gKQzVp.js +340 -0
- package/dist/mermaid-parser.core-CzmkR-3i.cjs +18703 -0
- package/dist/mermaid-parser.core-DCMDT-Cp.js +18704 -0
- package/dist/min-BBp7Smma.js +41 -0
- package/dist/min-Gu1I_bJ9.cjs +40 -0
- package/dist/mindmap-definition-VGOIOE7T-D16Pp1u5.cjs +1126 -0
- package/dist/mindmap-definition-VGOIOE7T-PjSLRtz4.js +1126 -0
- package/dist/ordinal-CxptdPJm.js +76 -0
- package/dist/ordinal-D7sQNqXZ.cjs +75 -0
- package/dist/packet-BFZMPI3H-BvdogPiS.js +5 -0
- package/dist/packet-BFZMPI3H-C7pOHUWY.cjs +5 -0
- package/dist/pie-7BOR55EZ-D-DxSHbP.cjs +5 -0
- package/dist/pie-7BOR55EZ-DEWJe4Xn.js +5 -0
- package/dist/pieDiagram-ADFJNKIX-CoDddKZl.js +237 -0
- package/dist/pieDiagram-ADFJNKIX-DjN4DU9l.cjs +237 -0
- package/dist/quadrantDiagram-AYHSOK5B-BZOg0JMm.js +1335 -0
- package/dist/quadrantDiagram-AYHSOK5B-DXjTSOL4.cjs +1335 -0
- package/dist/radar-NHE76QYJ-BrnDXy9q.cjs +5 -0
- package/dist/radar-NHE76QYJ-C2WmPmJ4.js +5 -0
- package/dist/requirementDiagram-UZGBJVZJ-CCW1O1xH.js +1161 -0
- package/dist/requirementDiagram-UZGBJVZJ-e5F3-dDI.cjs +1161 -0
- package/dist/sankeyDiagram-TZEHDZUN-BaGzCxTp.js +1193 -0
- package/dist/sankeyDiagram-TZEHDZUN-DtIvOvVI.cjs +1193 -0
- package/dist/sequenceDiagram-WL72ISMW-0vFhYnxn.cjs +3874 -0
- package/dist/sequenceDiagram-WL72ISMW-DL3B7U56.js +3874 -0
- package/dist/stateDiagram-FKZM4ZOC-CXW608BR.cjs +447 -0
- package/dist/stateDiagram-FKZM4ZOC-Ddw6HxPD.js +447 -0
- package/dist/stateDiagram-v2-4FDKWEC3-DZCkQKmp.js +19 -0
- package/dist/stateDiagram-v2-4FDKWEC3-DefWUbvq.cjs +19 -0
- package/dist/timeline-definition-IT6M3QCI-C3TfA9lE.cjs +1222 -0
- package/dist/timeline-definition-IT6M3QCI-DiS88lUo.js +1222 -0
- package/dist/treemap-KMMF4GRG-Bl-H6j2c.cjs +5 -0
- package/dist/treemap-KMMF4GRG-DGGr_R9A.js +5 -0
- package/dist/xychartDiagram-PRI3JC2R-BrOwRjfF.js +1886 -0
- package/dist/xychartDiagram-PRI3JC2R-CM06DttH.cjs +1886 -0
- package/package.json +22 -11
- package/dist/index.css +0 -1582
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
import { a$ as copyObject, b0 as keys, b1 as keysIn, b2 as getSymbols, b3 as stubArray, aQ as arrayPush, b4 as getPrototype, b5 as baseGetAllKeys, b6 as cloneArrayBuffer, aO as Symbol$1, b7 as cloneTypedArray, b8 as isObjectLike, b9 as getTag, ba as baseUnary, bb as nodeUtil, bc as isObject, bd as copyArray, be as isBuffer, bf as cloneBuffer, bg as initCloneObject, bh as Stack, bi as getAllKeys, aH as isArray, bj as assignValue, aF as arrayMap, bk as baseRest, bl as isArrayLikeObject, bm as constant, bn as isFunction, bo as isEmpty } from "./index-CjSgoo1P.js";
|
|
2
|
+
import { a as arrayEach, c as baseUniq, b as baseFlatten, f as filter, d as forEach, r as reduce } from "./_baseUniq-BFn6cCm9.js";
|
|
3
|
+
function baseAssign(object, source) {
|
|
4
|
+
return object && copyObject(source, keys(source), object);
|
|
5
|
+
}
|
|
6
|
+
function baseAssignIn(object, source) {
|
|
7
|
+
return object && copyObject(source, keysIn(source), object);
|
|
8
|
+
}
|
|
9
|
+
function copySymbols(source, object) {
|
|
10
|
+
return copyObject(source, getSymbols(source), object);
|
|
11
|
+
}
|
|
12
|
+
var nativeGetSymbols = Object.getOwnPropertySymbols;
|
|
13
|
+
var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
|
|
14
|
+
var result = [];
|
|
15
|
+
while (object) {
|
|
16
|
+
arrayPush(result, getSymbols(object));
|
|
17
|
+
object = getPrototype(object);
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
function copySymbolsIn(source, object) {
|
|
22
|
+
return copyObject(source, getSymbolsIn(source), object);
|
|
23
|
+
}
|
|
24
|
+
function getAllKeysIn(object) {
|
|
25
|
+
return baseGetAllKeys(object, keysIn, getSymbolsIn);
|
|
26
|
+
}
|
|
27
|
+
var objectProto = Object.prototype;
|
|
28
|
+
var hasOwnProperty = objectProto.hasOwnProperty;
|
|
29
|
+
function initCloneArray(array) {
|
|
30
|
+
var length = array.length, result = new array.constructor(length);
|
|
31
|
+
if (length && typeof array[0] == "string" && hasOwnProperty.call(array, "index")) {
|
|
32
|
+
result.index = array.index;
|
|
33
|
+
result.input = array.input;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
function cloneDataView(dataView, isDeep) {
|
|
38
|
+
var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
|
|
39
|
+
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
|
|
40
|
+
}
|
|
41
|
+
var reFlags = /\w*$/;
|
|
42
|
+
function cloneRegExp(regexp) {
|
|
43
|
+
var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
|
|
44
|
+
result.lastIndex = regexp.lastIndex;
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
|
|
48
|
+
function cloneSymbol(symbol) {
|
|
49
|
+
return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
|
|
50
|
+
}
|
|
51
|
+
var boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", regexpTag$1 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$1 = "[object String]", symbolTag$1 = "[object Symbol]";
|
|
52
|
+
var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]";
|
|
53
|
+
function initCloneByTag(object, tag, isDeep) {
|
|
54
|
+
var Ctor = object.constructor;
|
|
55
|
+
switch (tag) {
|
|
56
|
+
case arrayBufferTag$1:
|
|
57
|
+
return cloneArrayBuffer(object);
|
|
58
|
+
case boolTag$1:
|
|
59
|
+
case dateTag$1:
|
|
60
|
+
return new Ctor(+object);
|
|
61
|
+
case dataViewTag$1:
|
|
62
|
+
return cloneDataView(object, isDeep);
|
|
63
|
+
case float32Tag$1:
|
|
64
|
+
case float64Tag$1:
|
|
65
|
+
case int8Tag$1:
|
|
66
|
+
case int16Tag$1:
|
|
67
|
+
case int32Tag$1:
|
|
68
|
+
case uint8Tag$1:
|
|
69
|
+
case uint8ClampedTag$1:
|
|
70
|
+
case uint16Tag$1:
|
|
71
|
+
case uint32Tag$1:
|
|
72
|
+
return cloneTypedArray(object, isDeep);
|
|
73
|
+
case mapTag$2:
|
|
74
|
+
return new Ctor();
|
|
75
|
+
case numberTag$1:
|
|
76
|
+
case stringTag$1:
|
|
77
|
+
return new Ctor(object);
|
|
78
|
+
case regexpTag$1:
|
|
79
|
+
return cloneRegExp(object);
|
|
80
|
+
case setTag$2:
|
|
81
|
+
return new Ctor();
|
|
82
|
+
case symbolTag$1:
|
|
83
|
+
return cloneSymbol(object);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
var mapTag$1 = "[object Map]";
|
|
87
|
+
function baseIsMap(value) {
|
|
88
|
+
return isObjectLike(value) && getTag(value) == mapTag$1;
|
|
89
|
+
}
|
|
90
|
+
var nodeIsMap = nodeUtil && nodeUtil.isMap;
|
|
91
|
+
var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
|
|
92
|
+
var setTag$1 = "[object Set]";
|
|
93
|
+
function baseIsSet(value) {
|
|
94
|
+
return isObjectLike(value) && getTag(value) == setTag$1;
|
|
95
|
+
}
|
|
96
|
+
var nodeIsSet = nodeUtil && nodeUtil.isSet;
|
|
97
|
+
var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
|
|
98
|
+
var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
|
|
99
|
+
var argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", weakMapTag = "[object WeakMap]";
|
|
100
|
+
var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
|
|
101
|
+
var cloneableTags = {};
|
|
102
|
+
cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
|
|
103
|
+
cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
|
|
104
|
+
function baseClone(value, bitmask, customizer, key, object, stack) {
|
|
105
|
+
var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;
|
|
106
|
+
if (result !== void 0) {
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
if (!isObject(value)) {
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
var isArr = isArray(value);
|
|
113
|
+
if (isArr) {
|
|
114
|
+
result = initCloneArray(value);
|
|
115
|
+
if (!isDeep) {
|
|
116
|
+
return copyArray(value, result);
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
|
|
120
|
+
if (isBuffer(value)) {
|
|
121
|
+
return cloneBuffer(value, isDeep);
|
|
122
|
+
}
|
|
123
|
+
if (tag == objectTag || tag == argsTag || isFunc && !object) {
|
|
124
|
+
result = isFlat || isFunc ? {} : initCloneObject(value);
|
|
125
|
+
if (!isDeep) {
|
|
126
|
+
return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
if (!cloneableTags[tag]) {
|
|
130
|
+
return object ? value : {};
|
|
131
|
+
}
|
|
132
|
+
result = initCloneByTag(value, tag, isDeep);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
stack || (stack = new Stack());
|
|
136
|
+
var stacked = stack.get(value);
|
|
137
|
+
if (stacked) {
|
|
138
|
+
return stacked;
|
|
139
|
+
}
|
|
140
|
+
stack.set(value, result);
|
|
141
|
+
if (isSet(value)) {
|
|
142
|
+
value.forEach(function(subValue) {
|
|
143
|
+
result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
|
|
144
|
+
});
|
|
145
|
+
} else if (isMap(value)) {
|
|
146
|
+
value.forEach(function(subValue, key2) {
|
|
147
|
+
result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;
|
|
151
|
+
var props = isArr ? void 0 : keysFunc(value);
|
|
152
|
+
arrayEach(props || value, function(subValue, key2) {
|
|
153
|
+
if (props) {
|
|
154
|
+
key2 = subValue;
|
|
155
|
+
subValue = value[key2];
|
|
156
|
+
}
|
|
157
|
+
assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
|
|
158
|
+
});
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
function baseValues(object, props) {
|
|
162
|
+
return arrayMap(props, function(key) {
|
|
163
|
+
return object[key];
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
function values(object) {
|
|
167
|
+
return object == null ? [] : baseValues(object, keys(object));
|
|
168
|
+
}
|
|
169
|
+
function isUndefined(value) {
|
|
170
|
+
return value === void 0;
|
|
171
|
+
}
|
|
172
|
+
var union = baseRest(function(arrays) {
|
|
173
|
+
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
|
|
174
|
+
});
|
|
175
|
+
var DEFAULT_EDGE_NAME = "\0";
|
|
176
|
+
var GRAPH_NODE = "\0";
|
|
177
|
+
var EDGE_KEY_DELIM = "";
|
|
178
|
+
class Graph {
|
|
179
|
+
constructor(opts = {}) {
|
|
180
|
+
this._isDirected = Object.prototype.hasOwnProperty.call(opts, "directed") ? opts.directed : true;
|
|
181
|
+
this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, "multigraph") ? opts.multigraph : false;
|
|
182
|
+
this._isCompound = Object.prototype.hasOwnProperty.call(opts, "compound") ? opts.compound : false;
|
|
183
|
+
this._label = void 0;
|
|
184
|
+
this._defaultNodeLabelFn = constant(void 0);
|
|
185
|
+
this._defaultEdgeLabelFn = constant(void 0);
|
|
186
|
+
this._nodes = {};
|
|
187
|
+
if (this._isCompound) {
|
|
188
|
+
this._parent = {};
|
|
189
|
+
this._children = {};
|
|
190
|
+
this._children[GRAPH_NODE] = {};
|
|
191
|
+
}
|
|
192
|
+
this._in = {};
|
|
193
|
+
this._preds = {};
|
|
194
|
+
this._out = {};
|
|
195
|
+
this._sucs = {};
|
|
196
|
+
this._edgeObjs = {};
|
|
197
|
+
this._edgeLabels = {};
|
|
198
|
+
}
|
|
199
|
+
/* === Graph functions ========= */
|
|
200
|
+
isDirected() {
|
|
201
|
+
return this._isDirected;
|
|
202
|
+
}
|
|
203
|
+
isMultigraph() {
|
|
204
|
+
return this._isMultigraph;
|
|
205
|
+
}
|
|
206
|
+
isCompound() {
|
|
207
|
+
return this._isCompound;
|
|
208
|
+
}
|
|
209
|
+
setGraph(label) {
|
|
210
|
+
this._label = label;
|
|
211
|
+
return this;
|
|
212
|
+
}
|
|
213
|
+
graph() {
|
|
214
|
+
return this._label;
|
|
215
|
+
}
|
|
216
|
+
/* === Node functions ========== */
|
|
217
|
+
setDefaultNodeLabel(newDefault) {
|
|
218
|
+
if (!isFunction(newDefault)) {
|
|
219
|
+
newDefault = constant(newDefault);
|
|
220
|
+
}
|
|
221
|
+
this._defaultNodeLabelFn = newDefault;
|
|
222
|
+
return this;
|
|
223
|
+
}
|
|
224
|
+
nodeCount() {
|
|
225
|
+
return this._nodeCount;
|
|
226
|
+
}
|
|
227
|
+
nodes() {
|
|
228
|
+
return keys(this._nodes);
|
|
229
|
+
}
|
|
230
|
+
sources() {
|
|
231
|
+
var self = this;
|
|
232
|
+
return filter(this.nodes(), function(v) {
|
|
233
|
+
return isEmpty(self._in[v]);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
sinks() {
|
|
237
|
+
var self = this;
|
|
238
|
+
return filter(this.nodes(), function(v) {
|
|
239
|
+
return isEmpty(self._out[v]);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
setNodes(vs, value) {
|
|
243
|
+
var args = arguments;
|
|
244
|
+
var self = this;
|
|
245
|
+
forEach(vs, function(v) {
|
|
246
|
+
if (args.length > 1) {
|
|
247
|
+
self.setNode(v, value);
|
|
248
|
+
} else {
|
|
249
|
+
self.setNode(v);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
return this;
|
|
253
|
+
}
|
|
254
|
+
setNode(v, value) {
|
|
255
|
+
if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {
|
|
256
|
+
if (arguments.length > 1) {
|
|
257
|
+
this._nodes[v] = value;
|
|
258
|
+
}
|
|
259
|
+
return this;
|
|
260
|
+
}
|
|
261
|
+
this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);
|
|
262
|
+
if (this._isCompound) {
|
|
263
|
+
this._parent[v] = GRAPH_NODE;
|
|
264
|
+
this._children[v] = {};
|
|
265
|
+
this._children[GRAPH_NODE][v] = true;
|
|
266
|
+
}
|
|
267
|
+
this._in[v] = {};
|
|
268
|
+
this._preds[v] = {};
|
|
269
|
+
this._out[v] = {};
|
|
270
|
+
this._sucs[v] = {};
|
|
271
|
+
++this._nodeCount;
|
|
272
|
+
return this;
|
|
273
|
+
}
|
|
274
|
+
node(v) {
|
|
275
|
+
return this._nodes[v];
|
|
276
|
+
}
|
|
277
|
+
hasNode(v) {
|
|
278
|
+
return Object.prototype.hasOwnProperty.call(this._nodes, v);
|
|
279
|
+
}
|
|
280
|
+
removeNode(v) {
|
|
281
|
+
if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {
|
|
282
|
+
var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);
|
|
283
|
+
delete this._nodes[v];
|
|
284
|
+
if (this._isCompound) {
|
|
285
|
+
this._removeFromParentsChildList(v);
|
|
286
|
+
delete this._parent[v];
|
|
287
|
+
forEach(this.children(v), (child) => {
|
|
288
|
+
this.setParent(child);
|
|
289
|
+
});
|
|
290
|
+
delete this._children[v];
|
|
291
|
+
}
|
|
292
|
+
forEach(keys(this._in[v]), removeEdge);
|
|
293
|
+
delete this._in[v];
|
|
294
|
+
delete this._preds[v];
|
|
295
|
+
forEach(keys(this._out[v]), removeEdge);
|
|
296
|
+
delete this._out[v];
|
|
297
|
+
delete this._sucs[v];
|
|
298
|
+
--this._nodeCount;
|
|
299
|
+
}
|
|
300
|
+
return this;
|
|
301
|
+
}
|
|
302
|
+
setParent(v, parent) {
|
|
303
|
+
if (!this._isCompound) {
|
|
304
|
+
throw new Error("Cannot set parent in a non-compound graph");
|
|
305
|
+
}
|
|
306
|
+
if (isUndefined(parent)) {
|
|
307
|
+
parent = GRAPH_NODE;
|
|
308
|
+
} else {
|
|
309
|
+
parent += "";
|
|
310
|
+
for (var ancestor = parent; !isUndefined(ancestor); ancestor = this.parent(ancestor)) {
|
|
311
|
+
if (ancestor === v) {
|
|
312
|
+
throw new Error("Setting " + parent + " as parent of " + v + " would create a cycle");
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
this.setNode(parent);
|
|
316
|
+
}
|
|
317
|
+
this.setNode(v);
|
|
318
|
+
this._removeFromParentsChildList(v);
|
|
319
|
+
this._parent[v] = parent;
|
|
320
|
+
this._children[parent][v] = true;
|
|
321
|
+
return this;
|
|
322
|
+
}
|
|
323
|
+
_removeFromParentsChildList(v) {
|
|
324
|
+
delete this._children[this._parent[v]][v];
|
|
325
|
+
}
|
|
326
|
+
parent(v) {
|
|
327
|
+
if (this._isCompound) {
|
|
328
|
+
var parent = this._parent[v];
|
|
329
|
+
if (parent !== GRAPH_NODE) {
|
|
330
|
+
return parent;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
children(v) {
|
|
335
|
+
if (isUndefined(v)) {
|
|
336
|
+
v = GRAPH_NODE;
|
|
337
|
+
}
|
|
338
|
+
if (this._isCompound) {
|
|
339
|
+
var children = this._children[v];
|
|
340
|
+
if (children) {
|
|
341
|
+
return keys(children);
|
|
342
|
+
}
|
|
343
|
+
} else if (v === GRAPH_NODE) {
|
|
344
|
+
return this.nodes();
|
|
345
|
+
} else if (this.hasNode(v)) {
|
|
346
|
+
return [];
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
predecessors(v) {
|
|
350
|
+
var predsV = this._preds[v];
|
|
351
|
+
if (predsV) {
|
|
352
|
+
return keys(predsV);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
successors(v) {
|
|
356
|
+
var sucsV = this._sucs[v];
|
|
357
|
+
if (sucsV) {
|
|
358
|
+
return keys(sucsV);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
neighbors(v) {
|
|
362
|
+
var preds = this.predecessors(v);
|
|
363
|
+
if (preds) {
|
|
364
|
+
return union(preds, this.successors(v));
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
isLeaf(v) {
|
|
368
|
+
var neighbors;
|
|
369
|
+
if (this.isDirected()) {
|
|
370
|
+
neighbors = this.successors(v);
|
|
371
|
+
} else {
|
|
372
|
+
neighbors = this.neighbors(v);
|
|
373
|
+
}
|
|
374
|
+
return neighbors.length === 0;
|
|
375
|
+
}
|
|
376
|
+
filterNodes(filter2) {
|
|
377
|
+
var copy = new this.constructor({
|
|
378
|
+
directed: this._isDirected,
|
|
379
|
+
multigraph: this._isMultigraph,
|
|
380
|
+
compound: this._isCompound
|
|
381
|
+
});
|
|
382
|
+
copy.setGraph(this.graph());
|
|
383
|
+
var self = this;
|
|
384
|
+
forEach(this._nodes, function(value, v) {
|
|
385
|
+
if (filter2(v)) {
|
|
386
|
+
copy.setNode(v, value);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
forEach(this._edgeObjs, function(e) {
|
|
390
|
+
if (copy.hasNode(e.v) && copy.hasNode(e.w)) {
|
|
391
|
+
copy.setEdge(e, self.edge(e));
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
var parents = {};
|
|
395
|
+
function findParent(v) {
|
|
396
|
+
var parent = self.parent(v);
|
|
397
|
+
if (parent === void 0 || copy.hasNode(parent)) {
|
|
398
|
+
parents[v] = parent;
|
|
399
|
+
return parent;
|
|
400
|
+
} else if (parent in parents) {
|
|
401
|
+
return parents[parent];
|
|
402
|
+
} else {
|
|
403
|
+
return findParent(parent);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (this._isCompound) {
|
|
407
|
+
forEach(copy.nodes(), function(v) {
|
|
408
|
+
copy.setParent(v, findParent(v));
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
return copy;
|
|
412
|
+
}
|
|
413
|
+
/* === Edge functions ========== */
|
|
414
|
+
setDefaultEdgeLabel(newDefault) {
|
|
415
|
+
if (!isFunction(newDefault)) {
|
|
416
|
+
newDefault = constant(newDefault);
|
|
417
|
+
}
|
|
418
|
+
this._defaultEdgeLabelFn = newDefault;
|
|
419
|
+
return this;
|
|
420
|
+
}
|
|
421
|
+
edgeCount() {
|
|
422
|
+
return this._edgeCount;
|
|
423
|
+
}
|
|
424
|
+
edges() {
|
|
425
|
+
return values(this._edgeObjs);
|
|
426
|
+
}
|
|
427
|
+
setPath(vs, value) {
|
|
428
|
+
var self = this;
|
|
429
|
+
var args = arguments;
|
|
430
|
+
reduce(vs, function(v, w) {
|
|
431
|
+
if (args.length > 1) {
|
|
432
|
+
self.setEdge(v, w, value);
|
|
433
|
+
} else {
|
|
434
|
+
self.setEdge(v, w);
|
|
435
|
+
}
|
|
436
|
+
return w;
|
|
437
|
+
});
|
|
438
|
+
return this;
|
|
439
|
+
}
|
|
440
|
+
/*
|
|
441
|
+
* setEdge(v, w, [value, [name]])
|
|
442
|
+
* setEdge({ v, w, [name] }, [value])
|
|
443
|
+
*/
|
|
444
|
+
setEdge() {
|
|
445
|
+
var v, w, name, value;
|
|
446
|
+
var valueSpecified = false;
|
|
447
|
+
var arg0 = arguments[0];
|
|
448
|
+
if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) {
|
|
449
|
+
v = arg0.v;
|
|
450
|
+
w = arg0.w;
|
|
451
|
+
name = arg0.name;
|
|
452
|
+
if (arguments.length === 2) {
|
|
453
|
+
value = arguments[1];
|
|
454
|
+
valueSpecified = true;
|
|
455
|
+
}
|
|
456
|
+
} else {
|
|
457
|
+
v = arg0;
|
|
458
|
+
w = arguments[1];
|
|
459
|
+
name = arguments[3];
|
|
460
|
+
if (arguments.length > 2) {
|
|
461
|
+
value = arguments[2];
|
|
462
|
+
valueSpecified = true;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
v = "" + v;
|
|
466
|
+
w = "" + w;
|
|
467
|
+
if (!isUndefined(name)) {
|
|
468
|
+
name = "" + name;
|
|
469
|
+
}
|
|
470
|
+
var e = edgeArgsToId(this._isDirected, v, w, name);
|
|
471
|
+
if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {
|
|
472
|
+
if (valueSpecified) {
|
|
473
|
+
this._edgeLabels[e] = value;
|
|
474
|
+
}
|
|
475
|
+
return this;
|
|
476
|
+
}
|
|
477
|
+
if (!isUndefined(name) && !this._isMultigraph) {
|
|
478
|
+
throw new Error("Cannot set a named edge when isMultigraph = false");
|
|
479
|
+
}
|
|
480
|
+
this.setNode(v);
|
|
481
|
+
this.setNode(w);
|
|
482
|
+
this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);
|
|
483
|
+
var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);
|
|
484
|
+
v = edgeObj.v;
|
|
485
|
+
w = edgeObj.w;
|
|
486
|
+
Object.freeze(edgeObj);
|
|
487
|
+
this._edgeObjs[e] = edgeObj;
|
|
488
|
+
incrementOrInitEntry(this._preds[w], v);
|
|
489
|
+
incrementOrInitEntry(this._sucs[v], w);
|
|
490
|
+
this._in[w][e] = edgeObj;
|
|
491
|
+
this._out[v][e] = edgeObj;
|
|
492
|
+
this._edgeCount++;
|
|
493
|
+
return this;
|
|
494
|
+
}
|
|
495
|
+
edge(v, w, name) {
|
|
496
|
+
var e = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v, w, name);
|
|
497
|
+
return this._edgeLabels[e];
|
|
498
|
+
}
|
|
499
|
+
hasEdge(v, w, name) {
|
|
500
|
+
var e = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v, w, name);
|
|
501
|
+
return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);
|
|
502
|
+
}
|
|
503
|
+
removeEdge(v, w, name) {
|
|
504
|
+
var e = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v, w, name);
|
|
505
|
+
var edge = this._edgeObjs[e];
|
|
506
|
+
if (edge) {
|
|
507
|
+
v = edge.v;
|
|
508
|
+
w = edge.w;
|
|
509
|
+
delete this._edgeLabels[e];
|
|
510
|
+
delete this._edgeObjs[e];
|
|
511
|
+
decrementOrRemoveEntry(this._preds[w], v);
|
|
512
|
+
decrementOrRemoveEntry(this._sucs[v], w);
|
|
513
|
+
delete this._in[w][e];
|
|
514
|
+
delete this._out[v][e];
|
|
515
|
+
this._edgeCount--;
|
|
516
|
+
}
|
|
517
|
+
return this;
|
|
518
|
+
}
|
|
519
|
+
inEdges(v, u) {
|
|
520
|
+
var inV = this._in[v];
|
|
521
|
+
if (inV) {
|
|
522
|
+
var edges = values(inV);
|
|
523
|
+
if (!u) {
|
|
524
|
+
return edges;
|
|
525
|
+
}
|
|
526
|
+
return filter(edges, function(edge) {
|
|
527
|
+
return edge.v === u;
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
outEdges(v, w) {
|
|
532
|
+
var outV = this._out[v];
|
|
533
|
+
if (outV) {
|
|
534
|
+
var edges = values(outV);
|
|
535
|
+
if (!w) {
|
|
536
|
+
return edges;
|
|
537
|
+
}
|
|
538
|
+
return filter(edges, function(edge) {
|
|
539
|
+
return edge.w === w;
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
nodeEdges(v, w) {
|
|
544
|
+
var inEdges = this.inEdges(v, w);
|
|
545
|
+
if (inEdges) {
|
|
546
|
+
return inEdges.concat(this.outEdges(v, w));
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
Graph.prototype._nodeCount = 0;
|
|
551
|
+
Graph.prototype._edgeCount = 0;
|
|
552
|
+
function incrementOrInitEntry(map, k) {
|
|
553
|
+
if (map[k]) {
|
|
554
|
+
map[k]++;
|
|
555
|
+
} else {
|
|
556
|
+
map[k] = 1;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
function decrementOrRemoveEntry(map, k) {
|
|
560
|
+
if (!--map[k]) {
|
|
561
|
+
delete map[k];
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
function edgeArgsToId(isDirected, v_, w_, name) {
|
|
565
|
+
var v = "" + v_;
|
|
566
|
+
var w = "" + w_;
|
|
567
|
+
if (!isDirected && v > w) {
|
|
568
|
+
var tmp = v;
|
|
569
|
+
v = w;
|
|
570
|
+
w = tmp;
|
|
571
|
+
}
|
|
572
|
+
return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined(name) ? DEFAULT_EDGE_NAME : name);
|
|
573
|
+
}
|
|
574
|
+
function edgeArgsToObj(isDirected, v_, w_, name) {
|
|
575
|
+
var v = "" + v_;
|
|
576
|
+
var w = "" + w_;
|
|
577
|
+
if (!isDirected && v > w) {
|
|
578
|
+
var tmp = v;
|
|
579
|
+
v = w;
|
|
580
|
+
w = tmp;
|
|
581
|
+
}
|
|
582
|
+
var edgeObj = { v, w };
|
|
583
|
+
if (name) {
|
|
584
|
+
edgeObj.name = name;
|
|
585
|
+
}
|
|
586
|
+
return edgeObj;
|
|
587
|
+
}
|
|
588
|
+
function edgeObjToId(isDirected, edgeObj) {
|
|
589
|
+
return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);
|
|
590
|
+
}
|
|
591
|
+
export {
|
|
592
|
+
Graph as G,
|
|
593
|
+
baseClone as b,
|
|
594
|
+
isUndefined as i,
|
|
595
|
+
values as v
|
|
596
|
+
};
|