-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.js
More file actions
72 lines (69 loc) · 2.48 KB
/
test.js
File metadata and controls
72 lines (69 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
const pattern = require("./pattern.js")
const rewriter = require("./rewriter.js")
const {DFSSide, Graph, renderQueriedGraph} = require("./store")
const layout = require("./layout.js")
const db = new Graph("./people")
db.writer()
// .add({
// name: "Hamid",
// age: 21,
// favColors: [
// [0, 128, 0],
// [165, 42, 42],
// "Yellow"
// ]
// })
// .add({
// name: "John",
// age: 26,
// favColors: [
// [255, 165, 0],
// [255, 192, 203],
// "Violet",
// "Taupe"
// ]
// })
// .add({
// name: "Laura",
// age: 12,
// favColors: [
// [255, 255, 255],
// "Silver",
// ]
// })
// .add({
// name: "Victoria",
// age: 32,
// favColors: [
// [128, 0, 128],
// [0, 157, 196],
// ]
// })
.rewrite(pattern.Pattern({
name: pattern.Str(),
age: pattern.Num(i => i >= 18),
favColors: pattern.Arr(pattern.Or(pattern.Tup([pattern.Num(), pattern.Num(), pattern.Num()]), pattern.Str()))
}), rewriter.Rewriter({
age: rewriter.Fun(i => i+1),
favColors: rewriter.Arr(rewriter.Cond(pattern.Arr(pattern.Pattern({})), rewriter.Arr(rewriter.Fun(a => a+1)), rewriter.Id()))
}))
.linkAll(pattern.Pattern({name: "Hamid"}), "follows", pattern.Pattern({name: "Laura"}))
.linkAll(pattern.Pattern({name: "Hamid"}), "follows", pattern.Pattern({name: "Victoria"}))
.linkAll(pattern.Pattern({name: "Laura"}), "follows", pattern.Pattern({name: "Victoria"}))
.linkAll(pattern.Pattern({name: "Victoria"}), "follows", pattern.Pattern({name: "Laura"}))
.linkAll(pattern.Pattern({name: "Victoria"}), "follows", pattern.Pattern({name: "John"}))
.execute()
const query = db.query()
.vs(pattern.Pattern({}))
.derivedTag(({name: name}) => {return {text: {text: name}}})
.layout(layout.simplisticRandomLayout)
.vs(pattern.Pattern({name: pattern.RegEx(/Ham.*/)}))
.outs("follows")
.derivedTag(({name: name}) => {return {immediateFriend: name}})
.ins("follows")
.intersect(db.query().vs(pattern.Pattern({age: pattern.Num(i => i > 18)})))
.relatesTo("follows", pattern.Pattern({name: "John"}), DFSSide.OUTGONG)
.hasTag(pattern.Pattern({immediateFriend: pattern.Str()}))
.unique()
for(const unit of query.execute()) console.log(unit)
// renderQueriedGraph(query, "follows")