@vope/utils 1.4.19 → 1.4.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.js +144 -0
- package/lib/index.js +4 -2
- package/lib/neo4j.js +147 -0
- package/package.json +2 -1
- package/types/index.d.ts +1 -0
- package/types/neo4j.d.ts +62 -0
package/cjs/index.js
CHANGED
|
@@ -25,6 +25,7 @@ __export(src_exports, {
|
|
|
25
25
|
MemoryList: () => MemoryList,
|
|
26
26
|
MemoryPower: () => MemoryPower,
|
|
27
27
|
MemorySimple: () => MemorySimple,
|
|
28
|
+
Neo4j: () => Neo4j,
|
|
28
29
|
Subscriber: () => Subscriber,
|
|
29
30
|
Union: () => Union,
|
|
30
31
|
clamp: () => clamp,
|
|
@@ -590,6 +591,149 @@ var MemorySimple = class {
|
|
|
590
591
|
}
|
|
591
592
|
};
|
|
592
593
|
|
|
594
|
+
// src/neo4j.ts
|
|
595
|
+
var Neo4j = class {
|
|
596
|
+
#nid;
|
|
597
|
+
#sourceKey;
|
|
598
|
+
#targetKey;
|
|
599
|
+
#nodes;
|
|
600
|
+
#edges;
|
|
601
|
+
#sources;
|
|
602
|
+
#targets;
|
|
603
|
+
#dirs;
|
|
604
|
+
/**
|
|
605
|
+
* 点视图
|
|
606
|
+
*/
|
|
607
|
+
nodes;
|
|
608
|
+
/**
|
|
609
|
+
* 边视图
|
|
610
|
+
*/
|
|
611
|
+
edges;
|
|
612
|
+
/**
|
|
613
|
+
* (边)出点视图
|
|
614
|
+
*/
|
|
615
|
+
sources;
|
|
616
|
+
/**
|
|
617
|
+
* (边)入点视图
|
|
618
|
+
*/
|
|
619
|
+
targets;
|
|
620
|
+
/**
|
|
621
|
+
* (边)方向视图
|
|
622
|
+
*/
|
|
623
|
+
dirs;
|
|
624
|
+
constructor(nodeList, edgeList, {
|
|
625
|
+
nid,
|
|
626
|
+
eid,
|
|
627
|
+
sourceKey,
|
|
628
|
+
targetKey,
|
|
629
|
+
dir
|
|
630
|
+
}) {
|
|
631
|
+
shield(this, "nodes", this.#nodes = new MemorySimple(this.#nid = nid));
|
|
632
|
+
shield(this, "edges", this.#edges = new MemorySimple(eid));
|
|
633
|
+
shield(this, "sources", this.#sources = new MemoryList(this.#sourceKey = sourceKey));
|
|
634
|
+
shield(this, "targets", this.#targets = new MemoryList(this.#targetKey = targetKey));
|
|
635
|
+
shield(this, "dirs", this.#dirs = new MemoryList(dir));
|
|
636
|
+
nodeList.forEach((node) => this.node("add", node));
|
|
637
|
+
edgeList.forEach((edge) => this.edge("add", edge));
|
|
638
|
+
}
|
|
639
|
+
node(type, value) {
|
|
640
|
+
const nodes = this.#nodes;
|
|
641
|
+
if (type === "add") {
|
|
642
|
+
nodes.push(value);
|
|
643
|
+
} else if (type === "delete") {
|
|
644
|
+
const node = nodes.get(value);
|
|
645
|
+
if (!node)
|
|
646
|
+
return [];
|
|
647
|
+
nodes.delete(node);
|
|
648
|
+
const id = node[this.#nid];
|
|
649
|
+
const sourceKey = this.#sourceKey;
|
|
650
|
+
const targetKey = this.#targetKey;
|
|
651
|
+
const edges = this.#edges;
|
|
652
|
+
const sources = this.#sources;
|
|
653
|
+
const targets = this.#targets;
|
|
654
|
+
const dirs = this.#dirs;
|
|
655
|
+
const list = [];
|
|
656
|
+
sources.get(id)?.reduce((_, edge) => {
|
|
657
|
+
edges.delete(edge);
|
|
658
|
+
targets.delete(edge);
|
|
659
|
+
edge[sourceKey] === edge[targetKey] || dirs.delete(edge);
|
|
660
|
+
list.push(edge);
|
|
661
|
+
return true;
|
|
662
|
+
}, false) && sources.deleteType(id);
|
|
663
|
+
targets.get(id)?.reduce((_, edge) => {
|
|
664
|
+
edges.delete(edge);
|
|
665
|
+
sources.delete(edge);
|
|
666
|
+
edge[sourceKey] === edge[targetKey] || dirs.delete(edge);
|
|
667
|
+
list.push(edge);
|
|
668
|
+
return true;
|
|
669
|
+
}, false) && targets.deleteType(id);
|
|
670
|
+
return list;
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
edge(type, value) {
|
|
674
|
+
const sourceKey = this.#sourceKey;
|
|
675
|
+
const targetKey = this.#targetKey;
|
|
676
|
+
const edges = this.#edges;
|
|
677
|
+
const sources = this.#sources;
|
|
678
|
+
const targets = this.#targets;
|
|
679
|
+
const dirs = this.#dirs;
|
|
680
|
+
if (type === "add") {
|
|
681
|
+
const edge = value;
|
|
682
|
+
edges.push(edge);
|
|
683
|
+
sources.push(edge);
|
|
684
|
+
targets.push(edge);
|
|
685
|
+
edge[sourceKey] === edge[targetKey] || dirs.push(edge);
|
|
686
|
+
} else if (type === "delete") {
|
|
687
|
+
const edge = edges.get(value);
|
|
688
|
+
if (!edge)
|
|
689
|
+
return false;
|
|
690
|
+
edges.delete(edge);
|
|
691
|
+
sources.delete(edge);
|
|
692
|
+
targets.delete(edge);
|
|
693
|
+
edge[sourceKey] === edge[targetKey] || dirs.delete(edge);
|
|
694
|
+
return true;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* 清理图管理数据
|
|
699
|
+
*/
|
|
700
|
+
clear() {
|
|
701
|
+
this.#nodes.clear();
|
|
702
|
+
this.#edges.clear();
|
|
703
|
+
this.#sources.clear();
|
|
704
|
+
this.#targets.clear();
|
|
705
|
+
this.#dirs.clear();
|
|
706
|
+
}
|
|
707
|
+
};
|
|
708
|
+
var shield_keys = hash8strings([
|
|
709
|
+
"push",
|
|
710
|
+
"delete",
|
|
711
|
+
"deleteType",
|
|
712
|
+
"clear"
|
|
713
|
+
]);
|
|
714
|
+
var shield = (obj, key, origin) => {
|
|
715
|
+
const proxy = new Proxy({}, {
|
|
716
|
+
get(target, p) {
|
|
717
|
+
if (p in shield_keys)
|
|
718
|
+
return;
|
|
719
|
+
const value = origin[p];
|
|
720
|
+
if (typeof value === "function") {
|
|
721
|
+
return function(...args) {
|
|
722
|
+
const result = origin[p](...args);
|
|
723
|
+
return result === origin ? proxy : result;
|
|
724
|
+
};
|
|
725
|
+
} else {
|
|
726
|
+
return value;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
});
|
|
730
|
+
Object.defineProperty(obj, key, {
|
|
731
|
+
get() {
|
|
732
|
+
return proxy;
|
|
733
|
+
}
|
|
734
|
+
});
|
|
735
|
+
};
|
|
736
|
+
|
|
593
737
|
// src/once.ts
|
|
594
738
|
var once = (func, thisArg) => {
|
|
595
739
|
let local;
|
package/lib/index.js
CHANGED
|
@@ -17,13 +17,14 @@ import { MemoryBasic } from "./memory/basic";
|
|
|
17
17
|
import { MemoryList } from "./memory/list";
|
|
18
18
|
import { MemoryPower } from "./memory/power";
|
|
19
19
|
import { MemorySimple } from "./memory/simple";
|
|
20
|
+
import { default as default2 } from "./neo4j";
|
|
20
21
|
import { once } from "./once";
|
|
21
22
|
import { parseNum } from "./parse/num";
|
|
22
23
|
import { deconPowersSum } from "./power/decon";
|
|
23
24
|
import { rotateAngle } from "./rotate/angle";
|
|
24
25
|
import { rotateRad } from "./rotate/rad";
|
|
25
26
|
import { css } from "./style/css";
|
|
26
|
-
import { default as
|
|
27
|
+
import { default as default3 } from "./subscriber";
|
|
27
28
|
import { FlexTable } from "./table/flex";
|
|
28
29
|
import { Union } from "./union";
|
|
29
30
|
import { joinPaths } from "./url/join";
|
|
@@ -35,7 +36,8 @@ export {
|
|
|
35
36
|
MemoryList,
|
|
36
37
|
MemoryPower,
|
|
37
38
|
MemorySimple,
|
|
38
|
-
default2 as
|
|
39
|
+
default2 as Neo4j,
|
|
40
|
+
default3 as Subscriber,
|
|
39
41
|
Union,
|
|
40
42
|
clamp,
|
|
41
43
|
classnames,
|
package/lib/neo4j.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { hash8strings } from "./convert/strings";
|
|
2
|
+
import { MemoryList } from "./memory/list";
|
|
3
|
+
import { MemorySimple } from "./memory/simple";
|
|
4
|
+
class Neo4j {
|
|
5
|
+
#nid;
|
|
6
|
+
#sourceKey;
|
|
7
|
+
#targetKey;
|
|
8
|
+
#nodes;
|
|
9
|
+
#edges;
|
|
10
|
+
#sources;
|
|
11
|
+
#targets;
|
|
12
|
+
#dirs;
|
|
13
|
+
/**
|
|
14
|
+
* 点视图
|
|
15
|
+
*/
|
|
16
|
+
nodes;
|
|
17
|
+
/**
|
|
18
|
+
* 边视图
|
|
19
|
+
*/
|
|
20
|
+
edges;
|
|
21
|
+
/**
|
|
22
|
+
* (边)出点视图
|
|
23
|
+
*/
|
|
24
|
+
sources;
|
|
25
|
+
/**
|
|
26
|
+
* (边)入点视图
|
|
27
|
+
*/
|
|
28
|
+
targets;
|
|
29
|
+
/**
|
|
30
|
+
* (边)方向视图
|
|
31
|
+
*/
|
|
32
|
+
dirs;
|
|
33
|
+
constructor(nodeList, edgeList, {
|
|
34
|
+
nid,
|
|
35
|
+
eid,
|
|
36
|
+
sourceKey,
|
|
37
|
+
targetKey,
|
|
38
|
+
dir
|
|
39
|
+
}) {
|
|
40
|
+
shield(this, "nodes", this.#nodes = new MemorySimple(this.#nid = nid));
|
|
41
|
+
shield(this, "edges", this.#edges = new MemorySimple(eid));
|
|
42
|
+
shield(this, "sources", this.#sources = new MemoryList(this.#sourceKey = sourceKey));
|
|
43
|
+
shield(this, "targets", this.#targets = new MemoryList(this.#targetKey = targetKey));
|
|
44
|
+
shield(this, "dirs", this.#dirs = new MemoryList(dir));
|
|
45
|
+
nodeList.forEach((node) => this.node("add", node));
|
|
46
|
+
edgeList.forEach((edge) => this.edge("add", edge));
|
|
47
|
+
}
|
|
48
|
+
node(type, value) {
|
|
49
|
+
const nodes = this.#nodes;
|
|
50
|
+
if (type === "add") {
|
|
51
|
+
nodes.push(value);
|
|
52
|
+
} else if (type === "delete") {
|
|
53
|
+
const node = nodes.get(value);
|
|
54
|
+
if (!node)
|
|
55
|
+
return [];
|
|
56
|
+
nodes.delete(node);
|
|
57
|
+
const id = node[this.#nid];
|
|
58
|
+
const sourceKey = this.#sourceKey;
|
|
59
|
+
const targetKey = this.#targetKey;
|
|
60
|
+
const edges = this.#edges;
|
|
61
|
+
const sources = this.#sources;
|
|
62
|
+
const targets = this.#targets;
|
|
63
|
+
const dirs = this.#dirs;
|
|
64
|
+
const list = [];
|
|
65
|
+
sources.get(id)?.reduce((_, edge) => {
|
|
66
|
+
edges.delete(edge);
|
|
67
|
+
targets.delete(edge);
|
|
68
|
+
edge[sourceKey] === edge[targetKey] || dirs.delete(edge);
|
|
69
|
+
list.push(edge);
|
|
70
|
+
return true;
|
|
71
|
+
}, false) && sources.deleteType(id);
|
|
72
|
+
targets.get(id)?.reduce((_, edge) => {
|
|
73
|
+
edges.delete(edge);
|
|
74
|
+
sources.delete(edge);
|
|
75
|
+
edge[sourceKey] === edge[targetKey] || dirs.delete(edge);
|
|
76
|
+
list.push(edge);
|
|
77
|
+
return true;
|
|
78
|
+
}, false) && targets.deleteType(id);
|
|
79
|
+
return list;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
edge(type, value) {
|
|
83
|
+
const sourceKey = this.#sourceKey;
|
|
84
|
+
const targetKey = this.#targetKey;
|
|
85
|
+
const edges = this.#edges;
|
|
86
|
+
const sources = this.#sources;
|
|
87
|
+
const targets = this.#targets;
|
|
88
|
+
const dirs = this.#dirs;
|
|
89
|
+
if (type === "add") {
|
|
90
|
+
const edge = value;
|
|
91
|
+
edges.push(edge);
|
|
92
|
+
sources.push(edge);
|
|
93
|
+
targets.push(edge);
|
|
94
|
+
edge[sourceKey] === edge[targetKey] || dirs.push(edge);
|
|
95
|
+
} else if (type === "delete") {
|
|
96
|
+
const edge = edges.get(value);
|
|
97
|
+
if (!edge)
|
|
98
|
+
return false;
|
|
99
|
+
edges.delete(edge);
|
|
100
|
+
sources.delete(edge);
|
|
101
|
+
targets.delete(edge);
|
|
102
|
+
edge[sourceKey] === edge[targetKey] || dirs.delete(edge);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 清理图管理数据
|
|
108
|
+
*/
|
|
109
|
+
clear() {
|
|
110
|
+
this.#nodes.clear();
|
|
111
|
+
this.#edges.clear();
|
|
112
|
+
this.#sources.clear();
|
|
113
|
+
this.#targets.clear();
|
|
114
|
+
this.#dirs.clear();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const shield_keys = hash8strings([
|
|
118
|
+
"push",
|
|
119
|
+
"delete",
|
|
120
|
+
"deleteType",
|
|
121
|
+
"clear"
|
|
122
|
+
]);
|
|
123
|
+
const shield = (obj, key, origin) => {
|
|
124
|
+
const proxy = new Proxy({}, {
|
|
125
|
+
get(target, p) {
|
|
126
|
+
if (p in shield_keys)
|
|
127
|
+
return;
|
|
128
|
+
const value = origin[p];
|
|
129
|
+
if (typeof value === "function") {
|
|
130
|
+
return function(...args) {
|
|
131
|
+
const result = origin[p](...args);
|
|
132
|
+
return result === origin ? proxy : result;
|
|
133
|
+
};
|
|
134
|
+
} else {
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
Object.defineProperty(obj, key, {
|
|
140
|
+
get() {
|
|
141
|
+
return proxy;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
export {
|
|
146
|
+
Neo4j as default
|
|
147
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vope/utils",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.20",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"typescript": "^5.3.3"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
+
"@type-challenges/utils": "^0.1.1",
|
|
52
53
|
"@types/lodash-es": "^4.17.9",
|
|
53
54
|
"@vope/types": "^1.0.12",
|
|
54
55
|
"csstype": "^3.1.3",
|
package/types/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { MemoryBasic } from './memory/basic';
|
|
|
17
17
|
export { MemoryList } from './memory/list';
|
|
18
18
|
export { MemoryPower } from './memory/power';
|
|
19
19
|
export { MemorySimple } from './memory/simple';
|
|
20
|
+
export { default as Neo4j } from './neo4j';
|
|
20
21
|
export { once } from './once';
|
|
21
22
|
export { parseNum } from './parse/num';
|
|
22
23
|
export { deconPowersSum } from './power/decon';
|
package/types/neo4j.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Equal } from '@type-challenges/utils';
|
|
2
|
+
import { GetGivenProps } from '@vope/types';
|
|
3
|
+
import { MemoryList } from './memory/list';
|
|
4
|
+
import { MemorySimple } from './memory/simple';
|
|
5
|
+
interface Config<INode extends object, IEdge extends object> {
|
|
6
|
+
nid: GetGivenProps<INode, string> & string;
|
|
7
|
+
eid: GetGivenProps<IEdge, string> & string;
|
|
8
|
+
sourceKey: GetGivenProps<IEdge, string> & string;
|
|
9
|
+
targetKey: GetGivenProps<IEdge, string> & string;
|
|
10
|
+
dir(edge: IEdge): string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 图管理
|
|
14
|
+
*/
|
|
15
|
+
export default class Neo4j<INode extends object, IEdge extends object> {
|
|
16
|
+
#private;
|
|
17
|
+
/**
|
|
18
|
+
* 点视图
|
|
19
|
+
*/
|
|
20
|
+
nodes: Shield<MemorySimple<INode, string>>;
|
|
21
|
+
/**
|
|
22
|
+
* 边视图
|
|
23
|
+
*/
|
|
24
|
+
edges: Shield<MemorySimple<IEdge, string>>;
|
|
25
|
+
/**
|
|
26
|
+
* (边)出点视图
|
|
27
|
+
*/
|
|
28
|
+
sources: Shield<MemoryList<IEdge, string>>;
|
|
29
|
+
/**
|
|
30
|
+
* (边)入点视图
|
|
31
|
+
*/
|
|
32
|
+
targets: Shield<MemoryList<IEdge, string>>;
|
|
33
|
+
/**
|
|
34
|
+
* (边)方向视图
|
|
35
|
+
*/
|
|
36
|
+
dirs: Shield<MemoryList<IEdge, string>>;
|
|
37
|
+
constructor(nodeList: INode[], edgeList: IEdge[], { nid, eid, sourceKey, targetKey, dir, }: Config<INode, IEdge>);
|
|
38
|
+
/**
|
|
39
|
+
* 点操作
|
|
40
|
+
*/
|
|
41
|
+
node(type: 'add', value: INode): void;
|
|
42
|
+
node(type: 'delete', value: string): IEdge[];
|
|
43
|
+
/**
|
|
44
|
+
* 边操作
|
|
45
|
+
*/
|
|
46
|
+
edge(type: 'add', value: IEdge): void;
|
|
47
|
+
edge(type: 'delete', value: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* 清理图管理数据
|
|
50
|
+
*/
|
|
51
|
+
clear(): void;
|
|
52
|
+
}
|
|
53
|
+
declare const shield_keys: {
|
|
54
|
+
push: number;
|
|
55
|
+
clear: number;
|
|
56
|
+
delete: number;
|
|
57
|
+
deleteType: number;
|
|
58
|
+
};
|
|
59
|
+
type Shield<T> = {
|
|
60
|
+
[P in Exclude<keyof T, keyof typeof shield_keys>]: T[P] extends (...args: infer A) => infer B ? Equal<B, T> extends true ? (...args: A) => Shield<T> : T[P] : T[P];
|
|
61
|
+
};
|
|
62
|
+
export {};
|