urbit/pkg/arvo/lib/graph-store.hoon

354 lines
7.6 KiB
Plaintext
Raw Normal View History

2020-06-10 21:45:00 +03:00
/- sur=graph-store, pos=post
2020-06-10 23:47:18 +03:00
/+ res=resource, *or-map
=< [sur .]
=< [pos .]
=, sur
=, pos
|%
2020-06-11 22:30:19 +03:00
:: NOTE: move these functions to zuse
++ nu :: parse number as hex
|= jon/json
?> ?=({$s *} jon)
(rash p.jon hex)
::
2020-06-11 22:30:19 +03:00
++ re :: recursive reparsers
|* {gar/* sef/_|.(fist:dejs-soft:format)}
|= jon/json
^- (unit _gar)
=- ~! gar ~! (need -) -
((sef) jon)
::
++ dank :: tank
^- $-(json (unit tank))
=, ^? dejs-soft:format
%+ re *tank |. ~+
%- of :~
leaf+sa
palm+(ot style+(ot mid+sa cap+sa open+sa close+sa ~) lines+(ar dank) ~)
rose+(ot style+(ot mid+sa open+sa close+sa ~) lines+(ar dank) ~)
==
::
2020-06-10 23:47:18 +03:00
++ orm ((or-map atom node) lth)
++ orm-log ((or-map time action) lth)
::
++ enjs
=, enjs:format
|%
++ update
|= upd=^update
^- json
2020-06-10 21:45:00 +03:00
?> ?=(%0 -.upd)
|^ (frond %graph-update (pairs ~[(encode +.upd)]))
::
++ encode
2020-06-10 21:45:00 +03:00
|= upd=update-0
^- [cord json]
2020-06-10 21:45:00 +03:00
?- -.upd
%keys
[%keys [%a (turn ~(tap in resources.upd) enjs:res)]]
::
2020-06-11 22:30:19 +03:00
:: %add-graph
:: :- %add-graph
:: %- pairs
:: :~ [%resource (enjs:res resource.upd)]
:: [%graph (graph graph.upd)]
:: ==
2020-06-10 21:45:00 +03:00
::
%remove-graph
[%remove-graph (enjs:res resource.upd)]
::
2020-06-11 22:30:19 +03:00
:: %add-nodes
:: :- %add-nodes
:: %- pairs
:: :~ [%resource (enjs:res resource.upd)]
:: [%nodes (nodes nodes.upd)]
:: ==
2020-06-10 21:45:00 +03:00
::
2020-06-11 22:30:19 +03:00
:: %remove-nodes
:: :- %remove-nodes
:: %- pairs
:: :~ [%resource (enjs:res resource.upd)]
:: [%indices (indices indices.upd)]
:: ==
:: ::
2020-06-10 21:45:00 +03:00
%add-signatures
:- %add-signatures
%- pairs
:~ [%uid (uid uid.upd)]
[%signatures (signatures signatures.upd)]
==
::
%remove-signatures
:- %remove-signatures
%- pairs
:~ [%uid (uid uid.upd)]
[%signatures (signatures signatures.upd)]
==
::
%add-tag
:- %add-tag
%- pairs
:~ [%term s+term.upd]
[%resource (enjs:res resource.upd)]
==
::
%remove-tag
:- %remove-tag
%- pairs
:~ [%term s+term.upd]
[%resource (enjs:res resource.upd)]
==
==
::
++ graph
|= g=^graph
^- json
2020-06-10 23:47:18 +03:00
:- %a
%+ turn (tap:orm g)
|= [a=atom n=^node]
^- json
%- pairs
:~ [%key (numb a)]
[%node (node n)]
==
2020-06-10 21:45:00 +03:00
::
++ index
|= i=^index
^- json
2020-06-10 23:47:18 +03:00
=/ j=^tape ""
|-
?~ i
[%s (crip j)]
=/ k=json (numb i.i)
?> ?=(%n -.k)
%_ $
i t.i
j (weld j (weld "/" (trip +.k)))
==
::
++ node
|= n=^node
^- json
%- pairs
:~ [%post (post post.n)]
:- %children
?- -.children.n
%empty ~
%graph (graph +.children.n)
==
==
::
++ post
|= p=^post
^- json
%- pairs
:~ [%author (ship author.p)]
[%index (index index.p)]
[%time-sent (time time-sent.p)]
[%contents [%a (turn contents.p content)]]
[%hash ?~(hash.p ~ s+(scot %ux u.hash.p))]
[%signatures (signatures signatures.p)]
==
::
++ content
|= c=^content
^- json
?- -.c
%text (frond %text s+text.c)
%url (frond %url s+url.c)
%reference (frond %reference (uid uid.c))
%code
%+ frond %code
%- pairs
:- [%expression s+expression.c]
:_ ~
:- %output
:: virtualize output rendering, +tank:enjs:format might crash
::
=/ result=(each (list json) tang)
(mule |.((turn output.c tank)))
?- -.result
%& a+p.result
%| a+[a+[%s '[[output rendering error]]']~]~
==
==
2020-06-10 21:45:00 +03:00
::
++ nodes
2020-06-10 23:47:18 +03:00
|= m=(map ^index ^node)
^- json
:- %a
%+ turn ~(tap by m)
|= [n=^index o=^node]
2020-06-10 21:45:00 +03:00
^- json
2020-06-10 23:47:18 +03:00
%- pairs
:~ [%index (index n)]
[%node (node o)]
==
2020-06-10 21:45:00 +03:00
::
++ indices
|= i=(set ^index)
^- json
2020-06-10 23:47:18 +03:00
[%a (turn ~(tap in i) index)]
2020-06-10 21:45:00 +03:00
::
++ uid
|= u=^uid
^- json
2020-06-10 23:47:18 +03:00
%- pairs
:~ [%resource (enjs:res resource.u)]
[%index (index index.u)]
==
2020-06-10 21:45:00 +03:00
::
++ signatures
|= s=^signatures
^- json
2020-06-10 23:47:18 +03:00
[%a (turn ~(tap in s) signature)]
::
++ signature
|= s=^signature
^- json
%- pairs
:~ [%signature s+(scot %ux p.s)]
[%ship (ship q.s)]
[%life (numb r.s)]
==
--
--
::
++ dejs
=, dejs:format
|%
++ action
2020-06-11 22:30:19 +03:00
|= jon=json
^- ^action
:- %0
^- action-0
2020-06-11 22:30:19 +03:00
=< (decode jon)
|%
++ decode
%- of
2020-06-11 22:30:19 +03:00
:~
:: [%add-graph add-graph]
[%remove-graph remove-graph]
2020-06-11 22:30:19 +03:00
:: [%add-nodes add-nodes]
:: [%remove-nodes remove-nodes]
:: [%add-signatures add-signatures]
[%remove-signatures remove-signatures]
2020-06-11 22:30:19 +03:00
[%add-tag add-tag]
[%remove-tag remove-tag]
==
::
2020-06-11 22:30:19 +03:00
:: ++ add-graph
:: %- ot
:: :~ [%resource dejs:res]
:: [%graph !!]
:: ==
::
2020-06-11 22:30:19 +03:00
++ remove-graph (ot [%resource dejs:res]~)
::
2020-06-11 22:30:19 +03:00
:: ++ add-nodes
:: %- ot
:: :~ [%resource dejs:res]
:: [%nodes nodes]
:: ==
::
2020-06-11 22:30:19 +03:00
:: ++ nodes (op index node)
::
2020-06-11 22:30:19 +03:00
:: ++ node
:: %- ot
:: :~ [%post post]
:: [%children (ot [%empty ul]~)]
:: ==
:: ::
:: ++ post
:: %- ot
:: :~ [%author (su ;~(pfix sig fed:ag))]
:: [%index index]
:: [%time-sent di]
:: [%contents (ar content)]
:: [%hash (mu nu)]
:: [%signatures (as signature)]
:: ==
:: ::
:: ++ content
:: %- of
:: :~ [%text so]
:: [%url so]
:: [%reference uid]
:: [%code eval]
:: ==
:: ::
:: ++ eval
:: |= a=^json
:: ^- [cord (list tank)]
:: =, ^? dejs-soft:format
:: =+ exp=((ot expression+so ~) a)
:: %- need
:: ?~ exp [~ '' ~]
:: :+ ~ u.exp
:: :: NOTE: when sending, if output is an empty list,
:: :: graph-store will evaluate
:: (fall ((ot output+(ar dank) ~) a) ~)
::
2020-06-11 22:30:19 +03:00
:: ++ remove-nodes
:: %- ot
:: :~ [%resource dejs:res]
:: [%indices (as index)]
:: ==
:: ::
++ add-signatures
%- ot
:~ [%uid uid]
[%signatures (as signature)]
==
::
++ remove-signatures
%- ot
:~ [%uid uid]
[%signatures (as signature)]
==
::
++ signature
%- ot
:~ [%hash nu]
[%ship (su ;~(pfix sig fed:ag))]
[%life ni]
==
::
++ uid
%- ot
:~ [%resource dejs:res]
[%index index]
==
::
++ index (su ;~(pfix net (more net dem)))
::
2020-06-11 22:30:19 +03:00
++ add-tag
%- ot
2020-06-11 22:30:19 +03:00
:~ [%term so]
[%resource dejs:res]
==
::
2020-06-11 22:30:19 +03:00
++ remove-tag
%- ot
2020-06-11 22:30:19 +03:00
:~ [%term so]
[%resource dejs:res]
==
--
--
2020-06-10 19:17:55 +03:00
::
2020-06-11 22:30:19 +03:00
::++ create
:: |_ [our=ship now=time]
:: ++ post
:: |= [=index contents=(list content)]
:: ^- ^post
:: :* our
:: index
:: now
:: contents
:: ~
:: *signatures
:: ==
:: --
::
--