@@ -0,0 +1,919 @@
1+/- sur=graph-store, pos=post, pull-hook, hark=hark-store
2+/+ res=resource, migrate
13+ %mention ship+ship.content
14+ %url text+url.content
15+ %code text+'A code excerpt'
16+ %reference text+'A reference'
21+ (turn cs hark-content)
22+:: NOTE: move these functions to zuse
23+++ nu :: parse number as hex
28+++ re :: recursive reparsers
29+ |* [gar=* sef=_|.(fist:dejs-soft:format)]
32+ =- ~! gar ~! (need -) -
36+ ^- $-(json (unit tank))
37+ =, ^? dejs-soft:format
41+ palm+(ot style+(ot mid+sa cap+sa open+sa close+sa ~) lines+(ar dank) ~)
42+ rose+(ot style+(ot mid+sa open+sa close+sa ~) lines+(ar dank) ~)
45+++ orm ((on atom node) gth)
46+++ orm-log ((on time logged-update) gth)
55+ [%a (turn ~(tap in s) signature)]
61+ :~ [%signature s+(scot %ux p.s)]
77+ (rap 3 acc '/' p.num ~)
83+ :~ [%resource (enjs:res resource.u)]
84+ [%index (index index.u)]
91+ %mention (frond %mention (ship ship.c))
92+ %text (frond %text s+text.c)
93+ %url (frond %url s+url.c)
94+ %reference (frond %reference (reference +.c))
98+ :- [%expression s+expression.c]
101+ :: virtualize output rendering, +tank:enjs:format might crash
103+ =/ result=(each (list json) tang)
104+ (mule |.((turn output.c tank)))
107+ %| a+[a+[%s '[[output rendering error]]']~]~
116+ %graph (graph +.ref)
117+ %group (group +.ref)
122+ |= [grp=res gra=res idx=^index]
124+ :~ graph+s+(enjs-path:res gra)
125+ group+s+(enjs-path:res grp)
131+ s+(enjs-path:res grp)
134+ |= [=^ship =desk p=^path]
136+ :~ ship+s+(scot %p ship)
146+ %| s+(scot %ux p.mp)
154+ :~ [%author (ship author.p)]
155+ [%index (index index.p)]
156+ [%time-sent (time time-sent.p)]
157+ [%contents [%a (turn contents.p content)]]
158+ [%hash ?~(hash.p ~ s+(scot %ux u.hash.p))]
159+ [%signatures (signatures signatures.p)]
165+ |^ (frond %graph-update (pairs ~[(encode q.upd)]))
174+ :~ [%resource (enjs:res resource.upd)]
175+ [%graph (graph graph.upd)]
176+ [%mark ?~(mark.upd ~ s+u.mark.upd)]
177+ [%overwrite b+overwrite.upd]
181+ [%remove-graph (enjs:res resource.upd)]
186+ :~ [%resource (enjs:res resource.upd)]
187+ [%nodes (nodes nodes.upd)]
193+ :~ [%resource (enjs:res resource.upd)]
194+ [%indices (indices indices.upd)]
200+ :~ [%uid (uid uid.upd)]
201+ [%signatures (signatures signatures.upd)]
205+ :- %remove-signatures
207+ :~ [%uid (uid uid.upd)]
208+ [%signatures (signatures signatures.upd)]
214+ :~ [%term s+term.upd]
215+ [%uid (uid uid.upd)]
221+ :~ [%term s+term.upd]
222+ [%uid (uid uid.upd)]
226+ [%archive-graph (enjs:res resource.upd)]
229+ [%unarchive-graph (enjs:res resource.upd)]
232+ [%keys [%a (turn ~(tap in resources.upd) enjs:res)]]
235+ [%tags [%a (turn ~(tap in tags.upd) |=(=term s+term))]]
243+ %+ turn ~(tap by tag-queries.upd)
244+ |= [=term uids=(set ^uid)]
246+ [term [%a (turn ~(tap in uids) uid)]]
266+ :~ [%post (maybe-post post.n)]
270+ %graph (graph +.children.n)
275+ |= m=(map ^index ^node)
279+ |= [n=^index o=^node]
289+ [%a (turn ~(tap in i) index)]
306+ :~ [%add-nodes add-nodes]
307+ [%remove-posts remove-posts]
308+ [%add-signatures add-signatures]
309+ [%remove-signatures remove-signatures]
311+ [%add-graph add-graph]
312+ [%remove-graph remove-graph]
315+ [%remove-tag remove-tag]
317+ [%archive-graph archive-graph]
318+ [%unarchive-graph unarchive-graph]
319+ [%run-updates run-updates]
323+ [%tag-queries tag-queries]
328+ :~ [%resource dejs:res]
337+ =/ or-mp ((on atom ^node) gth)
339+ %+ turn ~(tap by ((om node) a))
345+ ++ remove-graph (ot [%resource dejs:res]~)
346+ ++ archive-graph (ot [%resource dejs:res]~)
347+ ++ unarchive-graph (ot [%resource dejs:res]~)
351+ :~ [%resource dejs:res]
355+ ++ nodes (op ;~(pfix fas (more fas dem)) node)
359+ :~ [%post maybe-post]
360+ [%children internal-graph]
368+ [%graph (graph jon)]
381+ :~ [%author (su ;~(pfix sig fed:ag))]
384+ [%contents (ar content)]
386+ [%signatures (as signature)]
391+ :~ [%mention (su ;~(pfix sig fed:ag))]
394+ [%reference reference]
408+ :~ group+dejs-path:res
415+ :~ ship+(su ;~(pfix sig fed:ag))
446+ :~ [%resource dejs:res]
447+ [%indices (as index)]
453+ [%signatures (as signature)]
456+ ++ remove-signatures
459+ [%signatures (as signature)]
465+ [%ship (su ;~(pfix sig fed:ag))]
471+ :~ [%resource dejs:res]
475+ ++ index (su ;~(pfix fas (more fas dem)))
503+ ^- [resource update-log]
504+ [*resource *update-log]
516+ |_ [our=ship now=time]
518+ |= [=index contents=(list content)]
534+ ++ marked-graph-to-two
535+ |= [=graph:one m=(unit mark)]
536+ [(graph-to-two graph) m]
540+ (graph:(upgrade ,post:one ,maybe-post:two) graph post-to-two)
550+ ++ update-log-to-one
553+ %+ gas:orm-log:one *update-log:one
554+ %+ turn (tap:orm-log:zero update-log)
555+ |= [=time =logged-update:zero]
556+ ^- [^time logged-update:one]
559+ (logged-update-to-one q.logged-update)
561+ ++ logged-update-to-one
562+ |= upd=logged-update-0:zero
563+ ^- logged-action:one
565+ %add-graph upd(graph (graph-to-one graph.upd))
566+ %add-nodes upd(nodes (~(run by nodes.upd) node-to-one))
571+ (node:(upgrade ,post:zero ,post:one) node post-to-one)
575+ (graph:(upgrade ,post:zero ,post:one) graph post-to-one)
577+ ++ marked-graph-to-one
578+ |= [=graph:zero m=(unit mark)]
579+ [(graph-to-one graph) m]
584+ p(contents (contents-to-one contents.p))
587+ |= cs=(list content:zero)
588+ ^- (list content:one)
591+ ^- (unit content:one)
592+ ?: ?=(%reference -.content) ~
596+ |* [in-pst=mold out-pst=mold]
600+ ((on atom in-node) gth)
602+ [post=in-pst children=in-internal-graph]
604+ ((mop atom in-node) gth)
605+ +$ in-internal-graph
607+ $% [%graph p=in-graph]
612+ ((on atom out-node) gth)
614+ [post=out-pst children=out-internal-graph]
616+ ((mop atom out-node) gth)
617+ +$ out-internal-graph
619+ $% [%graph p=out-graph]
627+ fn=$-(in-pst out-pst)
630+ %+ gas:out-orm *out-graph
631+ ^- (list [atom out-node])
632+ %+ turn (tap:in-orm gra)
633+ |= [a=atom n=in-node]
638+ |= [nod=in-node fn=$-(in-pst out-pst)]
641+ ^- out-internal-graph
642+ ?: ?=(%empty -.children.nod)
644+ [%graph (graph p.children.nod fn)]
648+ :: =* infinitely recurses
651+ =, orm-log=orm-log:zero
653+ ++ change-revision-graph
654+ |= [=graph:store q=(unit mark)]
655+ ^- [graph:store (unit mark)]
659+ [~ %graph-validator-link] convert-links
660+ [~ %graph-validator-publish] convert-publish
664+ %+ gas:orm *graph:store
665+ %+ turn (tap:orm graph)
666+ |= [=atom =node:store]
667+ ^- [^atom node:store]
671+ ?: ?=(%empty -.children.node)
674+ %+ gas:orm *graph:store
675+ %+ turn (tap:orm p.children.node)
676+ |= [=^atom =node:store]
677+ ^- [^^atom node:store]
678+ :: existing comments get turned into containers for revisions
681+ post.node(contents ~, hash ~)
683+ %+ gas:orm *graph:store
686+ post.node(index (snoc index.post.node atom), hash ~)
689+ %+ gas:orm *graph:store
690+ %+ turn (tap:orm graph)
691+ |= [=atom =node:store]
692+ ^- [^atom node:store]
696+ ?: ?=(%empty -.children.node)
699+ %+ gas:orm *graph:store
700+ %+ turn (tap:orm p.children.node)
701+ |= [=^atom =node:store]
702+ ^- [^^atom node:store]
703+ :: existing container for publish note revisions
709+ ?: ?=(%empty -.children.node)
712+ %+ gas:orm *graph:store
713+ %+ turn (tap:orm p.children.node)
714+ |= [=^^atom =node:store]
715+ ^- [^^^atom node:store]
716+ :+ atom post.node(contents ~, hash ~)
718+ %+ gas:orm *graph:store
721+ post.node(index (snoc index.post.node atom), hash ~)
728+ :: (bex 127) is roughly 226AD
729+ ?. (lte atom (bex 127))
731+ (add ~1970.1.1 (div (mul ~s1 atom) 1.000))
733+ ++ convert-unix-timestamped-node
737+ (convert-unix-timestamped-index index.post.node)
738+ ?. ?=(%graph -.children.node)
742+ (convert-unix-timestamped-graph p.children.node)
744+ ++ convert-unix-timestamped-index
746+ (turn index maybe-unix-to-da)
748+ ++ convert-unix-timestamped-graph
750+ %+ gas:orm *graph:store
753+ |= [=atom =node:store]
754+ ^- [^atom node:store]
755+ :- (maybe-unix-to-da atom)
756+ (convert-unix-timestamped-node node)
761+ ^- (quip card:agent:gall [%6 network])
763+ =/ sty [%6 (remake-network ;;(tree-network +.arc))]
765+ %+ turn ~(tap by graphs.sty)
766+ |= [rid=resource =marked-graph]
768+ ?: =(our entity.rid)
769+ =/ =cage [%push-hook-action !>([%add rid])]
770+ [%pass / %agent [our %graph-push-hook] %poke cage]
774+ $: graphs=tree-graphs
775+ tag-queries=(tree [term (tree uid)])
776+ update-logs=tree-update-logs
780+ +$ tree-graphs (tree [resource tree-marked-graph])
781+ +$ tree-marked-graph [p=tree-graph q=(unit ^mark)]
782+ +$ tree-graph (tree [atom tree-node])
783+ +$ tree-node [post=tree-maybe-post children=tree-internal-graph]
784+ +$ tree-internal-graph
786+ $% [%graph p=tree-graph]
789+ +$ tree-update-logs (tree [resource tree-update-log])
790+ +$ tree-update-log (tree [time tree-logged-update])
791+ +$ tree-logged-update
794+ $% [%add-graph =resource =tree-graph mark=(unit ^mark) ow=?]
795+ [%add-nodes =resource nodes=(tree [index tree-node])]
796+ [%remove-posts =resource indices=(tree index)]
797+ [%add-signatures =uid signatures=tree-signatures]
798+ [%remove-signatures =uid signatures=tree-signatures]
801+ +$ tree-signatures (tree signature)
802+ +$ tree-maybe-post (each tree-post hash)
807+ contents=(list content)
809+ signatures=tree-signatures
815+ :* (remake-graphs graphs.t)
816+ (remake-jug:migrate tag-queries.t)
817+ (remake-update-logs update-logs.t)
818+ (remake-graphs archive.t)
825+ %- remake-map:migrate
826+ (~(run by t) remake-marked-graph)
828+ ++ remake-marked-graph
829+ |= t=tree-marked-graph
831+ [(remake-graph p.t) q.t]
838+ |= [a=atom tn=tree-node]
840+ [a (remake-node tn)]
842+ ++ remake-internal-graph
843+ |= t=tree-internal-graph
847+ [%graph (remake-graph p.t)]
852+ :- (remake-post post.t)
853+ (remake-internal-graph children.t)
855+ ++ remake-update-logs
856+ |= t=tree-update-logs
858+ %- remake-map:migrate
859+ (~(run by t) remake-update-log)
861+ ++ remake-update-log
862+ |= t=tree-update-log
864+ =/ ulm ((on time logged-update) gth)
865+ %+ gas:ulm *update-log
867+ |= [=time tlu=tree-logged-update]
868+ ^- [^time logged-update]
869+ [time (remake-logged-update tlu)]
871+ ++ remake-logged-update
872+ |= t=tree-logged-update
879+ (remake-graph tree-graph.q.t)
887+ %- remake-map:migrate
888+ (~(run by nodes.q.t) remake-node)
891+ [%remove-posts resource.q.t (remake-set:migrate indices.q.t)]
894+ [%add-signatures uid.q.t (remake-set:migrate signatures.q.t)]
897+ [%remove-signatures uid.q.t (remake-set:migrate signatures.q.t)]
901+ |= t=tree-maybe-post
905+ %& t(signatures.p (remake-set:migrate signatures.p.t))
909+ |= [rid=resource nack-count=@]
911+ =/ res-path (en-path:res rid)
912+ =/ wire [%try-rejoin (scot %ud nack-count) res-path]
914+ :- %pull-hook-action
915+ !> ^- action:pull-hook
916+ [%add [entity .]:rid]
917+ [%pass wire %agent [our %graph-pull-hook] %poke cage]