diff --git a/pkg/arvo/app/acme.hoon b/pkg/arvo/app/acme.hoon index 17ca28d3f5..eea66b1456 100644 --- a/pkg/arvo/app/acme.hoon +++ b/pkg/arvo/app/acme.hoon @@ -460,7 +460,7 @@ :- ~ ^- octs =; pro=json - (as-octt:mimes:html (en-json:html (sign:jws key.act pro bod))) + (as-octs:mimes:html (en:json:html (sign:jws key.act pro bod))) :- %o %- my :~ nonce+s+non url+s+(crip (en-purl:html url)) @@ -487,7 +487,7 @@ :: ?. =(400 p.rep) | ?~ r.rep | - =/ jon=(unit json) (de-json:html q.u.r.rep) + =/ jon=(unit json) (de:json:html q.u.r.rep) ?~ jon | =('urn:ietf:params:acme:error:badNonce' type:(error:grab u.jon)) :: +rate-limited: handle Acme service rate-limits @@ -496,7 +496,7 @@ |= [try=@ud act=@tas spur=wire bod=(unit octs)] ^+ this =/ jon=(unit json) - ?~(bod ~ (de-json:html q.u.bod)) + ?~(bod ~ (de:json:html q.u.bod)) ?~ jon :: no details, back way off :: XX specifically based on wire @@ -839,7 +839,7 @@ ?: (lth try 10) (retry:effect try %directory / (min ~m30 (backoff try))) (emil (notify (failure-message directory-base) [(sell !>(rep)) ~])) - =. dir (directory:grab (need (de-json:html q:(need r.rep)))) + =. dir (directory:grab (need (de:json:html q:(need r.rep)))) ?~(reg.act register:effect this) :: +nonce: accept new nonce and trigger next effect :: @@ -883,7 +883,7 @@ ?~ r.rep (scot %da now.bow) =/ bod=acct:body - (acct:grab (need (de-json:html q.u.r.rep))) + (acct:grab (need (de:json:html q.u.r.rep))) ?> ?=(%valid sas.bod) wen.bod =. reg.act `[wen loc] @@ -913,7 +913,7 @@ :: XX check status :: =/ bod=order:body - (order:grab (need (de-json:html q:(need r.rep)))) + (order:grab (need (de:json:html q:(need r.rep)))) =/ dom=(set turf) ~(key by dom.u.next-order) :: XX maybe generate key here? :: @@ -956,7 +956,7 @@ :: (emil (notify (failure-message ego.u.rod) [(sell !>(rep)) ~])) =/ bod=order:body - (order:grab (need (de-json:html q:(need r.rep)))) + (order:grab (need (de:json:html q:(need r.rep)))) ?+ sas.bod ~& [%check-order-status-unknown sas.bod] this @@ -1063,7 +1063,7 @@ :: (emil (notify (failure-message i.pending.aut.u.rod) [(sell !>(rep)) ~])) =/ bod=auth:body - (auth:grab (need (de-json:html q:(need r.rep)))) + (auth:grab (need (de:json:html q:(need r.rep)))) =/ cal=trial :: XX parse token to verify url-safe base64? :: @@ -1147,7 +1147,7 @@ :: XX get challenge, confirm urn:ietf:params:acme:error:connection :: :: =/ err=error:body - :: (error:grab (need (de-json:html q:(need r.rep)))) + :: (error:grab (need (de:json:html q:(need r.rep)))) :: ?: =('urn:ietf:params:acme:error:malformed' status.err) :: =< cancel-order:effect @@ -1155,7 +1155,7 @@ 'unable to finalize domain validation challenge' (emil (notify msg [(sell !>(rep)) ~])) =/ bod=challenge:body - (challenge:grab (need (de-json:html q:(need r.rep)))) + (challenge:grab (need (de:json:html q:(need r.rep)))) :: XX check for other possible values in 200 response :: note: may have already been validated :: diff --git a/pkg/arvo/app/claz.hoon b/pkg/arvo/app/claz.hoon index 64c20abccc..3564077026 100644 --- a/pkg/arvo/app/claz.hoon +++ b/pkg/arvo/app/claz.hoon @@ -269,7 +269,7 @@ |= reg=cord ^- (list [=ship rights]) ~| %registration-json-insane - =+ jon=(need (de-json:html reg)) + =+ jon=(need (de:json:html reg)) ~| %registration-json-invalid ?> ?=(%o -.jon) =. p.jon (~(del by p.jon) 'idCode') diff --git a/pkg/arvo/app/dojo.hoon b/pkg/arvo/app/dojo.hoon index 1f33dc1ce1..eafdfbccfa 100644 --- a/pkg/arvo/app/dojo.hoon +++ b/pkg/arvo/app/dojo.hoon @@ -115,7 +115,7 @@ :: |parser-at: parsers for dojo expressions using :dir as working directory :: ++ parser-at - |= [our=ship dir=beam] + |= [our=ship now=@da dir=beam] |% ++ default-app %hood ++ hoon-parser (vang | (en-beam dir)) @@ -129,7 +129,7 @@ =/ =desk ::TODO maybe should recognize if the user specified a desk explicitly. :: currently eats the :app|desk#gen case. - =+ gop=(en-beam dir(q q.gol, s /$)) + =+ gop=/(scot %p our)/[q.gol]/(scot %da now)/$ ?. .^(? %gu gop) q.dir .^(desk %gd gop) @@ -365,7 +365,7 @@ dir(r [%da now.hid]) :: ++ he-beak `beak`[p q r]:he-beam - ++ he-parser (parser-at our.hid he-beam) + ++ he-parser (parser-at our.hid now.hid he-beam) :: ++ dy :: project work |_ dojo-project :: @@ -846,7 +846,6 @@ :: kev: key-value named arguments :: kuv: default keyword arguments :: sam: fully populated sample - :: rog: default gat sample :: |. ^- vase =/ gat=vase (slot 3 q.cay) @@ -870,9 +869,11 @@ !(~(has by q.cig) %drum-session) == [[%drum-session !>(ses.id)] soz] ::TODO does the who matter? - ?: =(~ soz) + ?~ soz (fall kuv !>(~)) - ~| keyword-arg-failure+~(key by q.cig) + ~_ 'dojo: bad-keyword (supplied sample incorrect)' + ~_ 'dojo: keywords allowed' + ~_ (skol p:(fall kuv !>(~))) %+ slap (with-faces kuv+(need kuv) rep+(with-faces soz) ~) :+ %cncb [%kuv]~ @@ -882,13 +883,57 @@ [[var]~ [%wing var %rep ~]] :: =/ sam=vase :(slop ven poz kev) - ?. (~(nest ut p.som) | p.sam) - ~> %slog.1^leaf+"dojo: nest-need" - ~> %slog.0^(skol p.som) - ~> %slog.1^leaf+"dojo: nest-have" - ~> %slog.0^(skol p.sam) - !! - (slam gat sam) + ?: (~(nest ut p.som) | p.sam) + (slam gat sam) + :: something is wrong + :: + %- mean + ^- (list tank) + =/ cez=type [%cell %noun [%cell %noun %noun]] + ?. (~(nest ut cez) | p.som) + :: [ven poz kev] can't nest in som + :: + :~ 'dojo: nest-need' + (skol p.som) + 'dojo: nest-have' + (skol p.sam) + 'dojo: bad gate lost-argument (generator incorrect)' + == + :: + =/ hed=vase (slot 2 som) + ?. (~(nest ut p.hed) | p.ven) + :: ven can't nest in head + :: + :~ 'dojo: nest-need' + (skol p.hed) + 'dojo: nest-have' + (skol p.ven) + 'dojo: bad gate event-sample (generator incorrect)' + == + :: + =/ zop=vase (slot 6 som) + =/ lon=vase !>(*(lest)) + ?: ?& !(~(nest ut p.zop) | -:!>(~)) + !(~(nest ut p.lon) | p.zop) + !(~(nest ut p.zop) | -:!>((slop zop !>(~)))) + == + :: argument required, but nothing can nest + :: + :~ 'dojo: nest-need' + (skol p.zop) + 'dojo: nest-have' + (skol p.poz) + 'dojo: bad gate impossible-nest (generator incorrect)' + == + :: poz doesn't nest in zop + :: + ?< (~(nest ut p.zop) | p.poz) + :~ 'dojo: nest-need' + (skol p.zop) + 'dojo: nest-have' + (skol p.poz) + 'dojo: bad-argument (supplied sample incorrect)' + == :: ++ dy-made-dial :: dialog product |= cag=cage diff --git a/pkg/arvo/app/lens.hoon b/pkg/arvo/app/lens.hoon index 3969a65d47..36585793ea 100644 --- a/pkg/arvo/app/lens.hoon +++ b/pkg/arvo/app/lens.hoon @@ -70,7 +70,7 @@ ^- card:agent:gall [%pass /import-all %agent [our.bowl app] %poke %import !>(data)] =/ jon=json - (need (de-json:html body)) + (need (de:json:html body)) =/ com=command:lens (json:grab:lens-mark jon) :: diff --git a/pkg/arvo/app/spider.hoon b/pkg/arvo/app/spider.hoon index 69407972cd..09123c34b3 100644 --- a/pkg/arvo/app/spider.hoon +++ b/pkg/arvo/app/spider.hoon @@ -315,7 +315,7 @@ :: =/ tube (convert-tube %json input-mark desk bowl) ?> ?=(^ body.request.inbound-request) - =/ body=json (need (de-json:html q.u.body.request.inbound-request)) + =/ body=json (need (de:json:html q.u.body.request.inbound-request)) =/ input=vase (slop !>(~) (tube !>(body))) =/ boc bec =/ =start-args:spider [~ `tid boc(q desk, r da+now.bowl) thread input] diff --git a/pkg/arvo/lib/aqua-azimuth.hoon b/pkg/arvo/lib/aqua-azimuth.hoon index 75ff042ece..d7c22c82fe 100644 --- a/pkg/arvo/lib/aqua-azimuth.hoon +++ b/pkg/arvo/lib/aqua-azimuth.hoon @@ -57,7 +57,7 @@ ++ get-single-req |= req=@t =/ batch - ((ar:dejs:format same) (need (de-json:html req))) + ((ar:dejs:format same) (need (de:json:html req))) ?> ?=([* ~] batch) i.batch :: @@ -110,8 +110,7 @@ |= [req=@t result=json] ^- card:agent:gall =/ resp - %- crip - %- en-json:html + %- en:json:html :- %a :_ ~ %- pairs :~ id+s+(get-id req) diff --git a/pkg/arvo/lib/json/rpc.hoon b/pkg/arvo/lib/json/rpc.hoon index e2b3b3c068..1f538e8cb9 100644 --- a/pkg/arvo/lib/json/rpc.hoon +++ b/pkg/arvo/lib/json/rpc.hoon @@ -10,8 +10,8 @@ %- ~(gas in *math:eyre) ~['Content-Type'^['application/json']~] %- some - %- as-octt:mimes:html - (en-json:html (request-to-json req)) + %- as-octs:mimes:html + (en:json:html (request-to-json req)) :: ++ request-to-json |= request @@ -65,7 +65,7 @@ |= body=(unit octs) ^- (unit batch-request) ?~ body ~ - ?~ jon=(de-json:html q.u.body) ~ + ?~ jon=(de:json:html q.u.body) ~ =, dejs-soft:format =; reparser ?: ?=([%a *] u.jon) diff --git a/pkg/arvo/lib/vere.hoon b/pkg/arvo/lib/vere.hoon index 8ecbbe2486..089aba6134 100644 --- a/pkg/arvo/lib/vere.hoon +++ b/pkg/arvo/lib/vere.hoon @@ -49,8 +49,8 @@ :: ++ czar ^- octs - %- as-octt:mimes:html - %- en-json:html + %- as-octs:mimes:html + %- en:json:html :- %a %+ turn (gulf 0 255) |= gal=@ @@ -63,8 +63,8 @@ ++ point |= who=ship ^- octs - %- as-octt:mimes:html - %- en-json:html + %- as-octs:mimes:html + %- en:json:html %+ request-to-json ~. :- 'getPoint' @@ -73,8 +73,8 @@ :: ++ turf ^- octs - %- as-octt:mimes:html - %- en-json:html + %- as-octs:mimes:html + %- en:json:html %+ request-to-json 'turf' ['getDns' ~] @@ -106,7 +106,7 @@ ++ czar |= rep=octs ^- (unit (map ship [=rift =life =pass])) - =/ jon=(unit json) (de-json:html q.rep) + =/ jon=(unit json) (de:json:html q.rep) ?~ jon ~&([%czar-take-dawn %invalid-json] ~) =/ res=(unit (list [@t @ud @ud @])) @@ -142,7 +142,7 @@ |= [who=ship rep=octs] ^- (unit point:azimuth) ~! *point:azimuth - =/ jon=(unit json) (de-json:html q.rep) + =/ jon=(unit json) (de:json:html q.rep) ?~ jon ~&([%point-take-dawn %invalid-json] ~) =- ?~ res @@ -202,7 +202,7 @@ ++ turf |= rep=octs ^- (unit (list ^turf)) - =/ jon=(unit json) (de-json:html q.rep) + =/ jon=(unit json) (de:json:html q.rep) ?~ jon ~&([%turf-take-dawn %invalid-json] ~) =/ res=(unit (list @t)) diff --git a/pkg/arvo/sys/vane/eyre.hoon b/pkg/arvo/sys/vane/eyre.hoon index ce36f9aea0..4045c8f83b 100644 --- a/pkg/arvo/sys/vane/eyre.hoon +++ b/pkg/arvo/sys/vane/eyre.hoon @@ -197,7 +197,7 @@ ^- (each (list channel-request) @t) ?- mode %json - ?~ maybe-json=(de-json:html q.body) + ?~ maybe-json=(de:json:html q.body) |+'put body not json' ?~ maybe-requests=(parse-channel-request-json u.maybe-json) |+'invalid channel json' @@ -2676,7 +2676,7 @@ ^- (unit (quip move tape)) ?- mode.channel %json %+ bind (channel-event-to-json channel request-id channel-event) - |=((quip move json) [+<- (en-json:html +<+)]) + |=((quip move json) [+<- (trip (en:json:html +<+))]) %jam =- `[~ (scow %uw (jam -))] [request-id channel-event] == diff --git a/pkg/arvo/sys/zuse.hoon b/pkg/arvo/sys/zuse.hoon index 5d0703b703..629857d994 100644 --- a/pkg/arvo/sys/zuse.hoon +++ b/pkg/arvo/sys/zuse.hoon @@ -4332,7 +4332,7 @@ ~% %json ..part ~ |% :: :: ++en:json:html - ++ en :: encode JSON to tape + ++ en :: encode JSON to cord ~% %en +>+ ~ |^ |= jon=^json ^- cord @@ -4400,11 +4400,11 @@ |^ |= txt=cord ^- (unit ^json) (rush txt apex) - :: :: ++abox:de-json:html + :: :: ++abox:de:json:html ++ abox :: array %+ stag %a (ifix [sel (wish ser)] (more (wish com) apex)) - :: :: ++apex:de-json:html + :: :: ++apex:de:json:html ++ apex :: any value %+ knee *^json |. ~+ %+ ifix [spac spac] @@ -4416,13 +4416,13 @@ abox obox == - :: :: ++bool:de-json:html + :: :: ++bool:de:json:html ++ bool :: boolean ;~ pose (cold & (jest 'true')) (cold | (jest 'false')) == - :: :: ++esca:de-json:html + :: :: ++esca:de:json:html ++ esca :: escaped character ;~ pfix bas =* loo @@ -4436,23 +4436,23 @@ (sear ~(get by wow) low) ;~(pose doq fas bas loo unic) == - :: :: ++expo:de-json:html + :: :: ++expo:de:json:html ++ expo :: exponent ;~ (comp weld) (piec (mask "eE")) (mayb (piec (mask "+-"))) (plus nud) == - :: :: ++frac:de-json:html + :: :: ++frac:de:json:html ++ frac :: fraction ;~(plug dot (plus nud)) - :: :: ++jcha:de-json:html + :: :: ++jcha:de:json:html ++ jcha :: string character ;~(pose ;~(less doq bas (shim 32 255)) esca) - :: :: ++mayb:de-json:html + :: :: ++mayb:de:json:html ++ mayb :: optional |*(bus=rule ;~(pose bus (easy ~))) - :: :: ++numb:de-json:html + :: :: ++numb:de:json:html ++ numb :: number ;~ (comp weld) (mayb (piec hep)) @@ -4463,31 +4463,31 @@ (mayb frac) (mayb expo) == - :: :: ++obje:de-json:html + :: :: ++obje:de:json:html ++ obje :: object list %+ ifix [(wish kel) (wish ker)] (more (wish com) pear) - :: :: ++obox:de-json:html + :: :: ++obox:de:json:html ++ obox :: object (stag %o (cook malt obje)) - :: :: ++pear:de-json:html + :: :: ++pear:de:json:html ++ pear :: key-value ;~(plug ;~(sfix (wish stri) (wish col)) apex) - :: :: ++piec:de-json:html + :: :: ++piec:de:json:html ++ piec :: listify |* bus=rule (cook |=(a=@ [a ~]) bus) - :: :: ++stri:de-json:html + :: :: ++stri:de:json:html ++ stri :: string %+ sear |= a=cord ?. (sune a) ~ (some a) (cook crip (ifix [doq doq] (star jcha))) - :: :: ++spac:de-json:html + :: :: ++spac:de:json:html ++ spac :: whitespace (star (mask [`@`9 `@`10 `@`13 ' ' ~])) - :: :: ++unic:de-json:html + :: :: ++unic:de:json:html ++ unic :: escaped UTF16 =* lob 0x0 =* hsb 0xd800 @@ -4530,7 +4530,7 @@ == == -- - :: :: ++utfe:de-json:html + :: :: ++utfe:de:json:html ++ utfe :: UTF-8 sequence ;~ less doq bas =* qua @@ -4591,18 +4591,18 @@ == ;~(pose qua tre dos) == - :: :: ++wish:de-json:html + :: :: ++wish:de:json:html ++ wish :: with whitespace |*(sef=rule ;~(pfix spac sef)) :: XX: These gates should be moved to hoon.hoon - :: :: ++sune:de-json:html + :: :: ++sune:de:json:html ++ sune :: cord UTF-8 sanity |= b=@t ^- ? ?: =(0 b) & ?. (sung b) | $(b (rsh [3 (teff b)] b)) - :: :: ++sung:de-json:html + :: :: ++sung:de:json:html ++ sung :: char UTF-8 sanity |^ |= b=@t ^- ? @@ -4683,7 +4683,7 @@ &((gte a bot) (lte a top)) -- :: XX: This +teff should overwrite the existing +teff - :: :: ++teff:de-json:html + :: :: ++teff:de:json:html ++ teff :: UTF-8 length |= a=@t ^- @ diff --git a/pkg/arvo/ted/aqua/eyre-azimuth.hoon b/pkg/arvo/ted/aqua/eyre-azimuth.hoon index 4a098961b1..446ea83f1d 100644 --- a/pkg/arvo/ted/aqua/eyre-azimuth.hoon +++ b/pkg/arvo/ted/aqua/eyre-azimuth.hoon @@ -114,7 +114,7 @@ ++ get-single-req |= req=@t =/ batch - ((ar:dejs:format same) (need (de-json:html req))) + ((ar:dejs:format same) (need (de:json:html req))) ?> ?=([* ~] batch) i.batch :: @@ -167,8 +167,7 @@ |= [req=@t result=json] ^- card:agent:gall =/ resp - %- crip - %- en-json:html + %- en:json:html :- %a :_ ~ %- pairs :~ id+s+(get-id req) diff --git a/pkg/arvo/ted/roller/send.hoon b/pkg/arvo/ted/roller/send.hoon index eeadd7efbf..9da449ced8 100644 --- a/pkg/arvo/ted/roller/send.hoon +++ b/pkg/arvo/ted/roller/send.hoon @@ -137,7 +137,7 @@ =(chain-id 1) == fallback - ?~ jon=(de-json:html q.data.u.full-file.u.rep) + ?~ jon=(de:json:html q.data.u.full-file.u.rep) fallback =; res=(unit @ud) ?~ res fallback diff --git a/pkg/base-dev/lib/azimuthio.hoon b/pkg/base-dev/lib/azimuthio.hoon index 979c347049..772c3415cc 100644 --- a/pkg/base-dev/lib/azimuthio.hoon +++ b/pkg/base-dev/lib/azimuthio.hoon @@ -43,8 +43,8 @@ url=url header-list=['Content-Type'^'application/json' ~] ^= body - %- some %- as-octt:mimes:html - %- en-json:html + %- some %- as-octs:mimes:html + %- en:json:html (request-to-json:rpc:ethereum id req) == ;< ~ bind:m (send-request:strandio request) @@ -62,7 +62,7 @@ ?~ full-file.client-response (pure:m ~) =/ body=@t q.data.u.full-file.client-response - =/ jon=(unit json) (de-json:html body) + =/ jon=(unit json) (de:json:html body) ?~ jon (pure:m ~) =, dejs-soft:format diff --git a/pkg/base-dev/lib/ethereum.hoon b/pkg/base-dev/lib/ethereum.hoon index 4f53df6689..0c2c635cf3 100644 --- a/pkg/base-dev/lib/ethereum.hoon +++ b/pkg/base-dev/lib/ethereum.hoon @@ -652,7 +652,7 @@ :^ url %post %- ~(gas in *math) ~['Content-Type'^['application/json']~] - (some (as-octt (en-json:html jon))) + (some (as-octs (en:json:html jon))) :: +light-json-request: like json-request, but for %l :: :: TODO: Exorcising +purl from our system is a much longer term effort; @@ -665,7 +665,7 @@ :* %'POST' (crip (en-purl:html url)) ~[['content-type' 'application/json']] - (some (as-octt (en-json:html jon))) + (some (as-octs (en:json:html jon))) == :: ++ batch-read-request diff --git a/pkg/base-dev/lib/ethio.hoon b/pkg/base-dev/lib/ethio.hoon index 0e4c7793e1..f764b50a2c 100644 --- a/pkg/base-dev/lib/ethio.hoon +++ b/pkg/base-dev/lib/ethio.hoon @@ -76,8 +76,8 @@ header-list=['Content-Type'^'application/json' ~] :: ^= body - %- some %- as-octt:mimes:html - %- en-json:html + %- some %- as-octs:mimes:html + %- en:json:html a+(turn reqs request-to-json:rpc:ethereum) == ;< ~ bind:m @@ -96,7 +96,7 @@ ?~ full-file.client-response (pure:m ~) =/ body=@t q.data.u.full-file.client-response - =/ jon=(unit json) (de-json:html body) + =/ jon=(unit json) (de:json:html body) ?~ jon (pure:m ~) =/ array=(unit (list response:rpc)) diff --git a/pkg/base-dev/lib/noun-diff.hoon b/pkg/base-dev/lib/noun-diff.hoon new file mode 100644 index 0000000000..e58033ccde --- /dev/null +++ b/pkg/base-dev/lib/noun-diff.hoon @@ -0,0 +1,213 @@ +=< +|% +++ diff + |= [old=* new=*] + ^- patch + =/ del (extract-del (oracle old new) old) + =/ ins (extract-ins (oracle old new) new) + =/ allowed-holes (~(int in (find-del-holes del)) (find-ins-holes ins)) + =. del (filter-del-holes allowed-holes del) + =/ ins (filter-ins-holes allowed-holes ins) + =/ closed-patch (closure (gcp [del ins])) + ?> =(& +.closed-patch) + -.closed-patch +++ apply + |= [patch=_id noun=*] + ?- -.patch + %diff + =/ var-map (del del.patch noun) + (ins ins.patch var-map) + :: + %cell + ?> ?=(^ noun) + [$(patch lhs.patch, noun -.noun) $(patch rhs.patch, noun +.noun)] + == +++ id + ^- patch + [%diff [%hole ~] [%hole ~]] ++$ patch + $% [%cell lhs=patch rhs=patch] + [%diff ^diff] + == +-- +:: +|% ++$ del-diff + $% [%hole @] + [%cell lhs=del-diff rhs=del-diff] + [%ignore ~] + == ++$ ins-diff + $% [%hole @ original=*] + [%cell lhs=ins-diff rhs=ins-diff] + [%atom @] + == ++$ final-ins-diff + $% [%hole @] + [%cell lhs=final-ins-diff rhs=final-ins-diff] + [%atom @] + == ++$ diff [del=del-diff ins=final-ins-diff] ++$ patch + $% [%cell lhs=patch rhs=patch] + [%diff diff] + == +++ insify-noun + |= noun=* + ^- final-ins-diff + ?- noun + ^ [%cell $(noun -.noun) $(noun +.noun)] + @ [%atom noun] + == +++ empty-set (silt `(list @)`~) +++ find-del-holes + |= diff=del-diff + ~+ + ^- (set @) + ?- -.diff + %hole (silt ~[+.diff]) + %cell (~(uni in $(diff lhs.diff)) $(diff rhs.diff)) + %ignore empty-set + == +++ find-final-ins-holes + |= diff=final-ins-diff + ~+ + ^- (set @) + ?- -.diff + %hole (silt ~[+.diff]) + %cell (~(uni in $(diff lhs.diff)) $(diff rhs.diff)) + %atom empty-set + == +++ find-ins-holes + |= diff=ins-diff + ~+ + ^- (set @) + ?- -.diff + %hole (silt ~[+<.diff]) + %cell (~(uni in $(diff lhs.diff)) $(diff rhs.diff)) + %atom empty-set + == +++ filter-del-holes + |= [allowed-holes=(set @) diff=del-diff] + ^- del-diff + ?: ?=(%ignore -.diff) diff + ?- -.diff + %hole ?:((~(has in allowed-holes) +.diff) diff [%ignore ~]) + %cell [%cell $(diff +<.diff) $(diff +>.diff)] + == +++ filter-ins-holes + |= [allowed-holes=(set @) diff=ins-diff] + ^- final-ins-diff + ?- -.diff + %cell [%cell $(diff +<.diff) $(diff +>.diff)] + %atom diff + %hole + ?: (~(has in allowed-holes) +<.diff) [%hole +<.diff] + (insify-noun original:diff) + == +++ gcp + |= diff=diff + ^- patch + ?- -.ins.diff + %atom [%diff diff] + %hole [%diff diff] + %cell + ?. ?=(%cell -.del.diff) + [%diff diff] + [%cell $(diff [+<.del.diff +<.ins.diff]) $(diff [+>.del.diff +>.ins.diff])] + == +++ closure + |= =patch + ^- [^patch ?] + ?- -.patch + %diff + =/ del-holes (find-del-holes del:patch) + =/ ins-holes (find-final-ins-holes ins:patch) + =/ difference (~(dif in ins-holes) del-holes) + [patch =(difference empty-set)] + :: + %cell + =/ lhs $(patch lhs:patch) + =/ rhs $(patch rhs:patch) + ?: ?&(+.lhs +.rhs) [[%cell -.lhs -.rhs] &] + $(patch (pull-diff [%cell -.lhs -.rhs])) + == +++ pull-diff + |= =patch + ^- [%diff del=del-diff ins=final-ins-diff] + ?- -.patch + %diff patch + %cell + =/ pulled-lhs $(patch lhs:patch) + =/ pulled-rhs $(patch rhs:patch) + :+ %diff + [%cell del:pulled-lhs del:pulled-rhs] + [%cell ins:pulled-lhs ins:pulled-rhs] + == +++ is-subtree + |= [tree=* subtree=*] + ~+ + ^- ? + ?: =(tree subtree) & + ?@ tree | + ?| (is-subtree -.tree subtree) + (is-subtree +.tree subtree) + == +++ oracle + |= [a=* b=*] + |= subtree=* + ^- (unit @) + ?: ?& (is-subtree a subtree) + (is-subtree b subtree) + == + `(mug subtree) + ~ +++ extract-del + |= [oracle=$-(* (unit @)) subtree=*] + ~+ + ^- del-diff + =/ hash (oracle subtree) + ?^ hash [%hole +.hash] + ?@ subtree [%ignore ~] + [%cell (extract-del oracle -.subtree) (extract-del oracle +.subtree)] +++ extract-ins + |= [oracle=$-(* (unit @)) subtree=*] + ~+ + ^- ins-diff + =/ hash (oracle subtree) + ?^ hash [%hole +.hash subtree] + ?@ subtree [%atom subtree] + [%cell (extract-ins oracle -.subtree) (extract-ins oracle +.subtree)] +++ ins + |= [diff=final-ins-diff var-map=(map @ *)] + ^- * + ?- -.diff + %atom +.diff + %cell [$(diff +<.diff) $(diff +>.diff)] + %hole (~(got by var-map) +.diff) + == +++ del + |= [diff=del-diff noun=*] + ^- (map @ *) + |^ (go diff noun ((map @ *) ~)) + ++ go + |= [diff=del-diff noun=* var-map=(map @ *)] + ^- (map @ *) + ?- -.diff + %ignore + var-map + :: + %hole + =/ subtree (~(get by var-map) +.diff) + ?~ subtree (~(put by var-map) +.diff noun) + ?> =(+.subtree noun) + var-map + :: + %cell + ?> ?=(^ noun) + =/ lhs-var-map $(diff +<.diff, noun -.noun) + =/ rhs-var-map $(diff +>.diff, noun +.noun, var-map lhs-var-map) + rhs-var-map + == + -- +-- diff --git a/pkg/base-dev/lib/server.hoon b/pkg/base-dev/lib/server.hoon index e5bdd2d589..f5cf8f0c5f 100644 --- a/pkg/base-dev/lib/server.hoon +++ b/pkg/base-dev/lib/server.hoon @@ -19,7 +19,7 @@ ++ json-to-octs |= jon=json ^- octs - (as-octt:mimes:html (en-json:html jon)) + (as-octs:mimes:html (en:json:html jon)) :: ++ app |% diff --git a/pkg/base-dev/lib/sink.hoon b/pkg/base-dev/lib/sink.hoon new file mode 100644 index 0000000000..17f01a6423 --- /dev/null +++ b/pkg/base-dev/lib/sink.hoon @@ -0,0 +1,26 @@ +/+ noun-diff +|% +++ clog + |$ [stut] + $% + [%flush stut] + [%drain patch:noun-diff] + == +++ sink + |* pats=(list path) + |* stat=* + |@ + ++ sync + |= [stat=_stat] + ^- [card:agent:gall _..sync] + =/ dif + %+ diff:noun-diff ^stat stat + :- + [%give %fact pats %noun !>(^-((clog) [%drain dif]))] + ..sync(stat stat) + ++ paths pats + ++ flush + ^- card:agent:gall + [%give %fact pats %noun !>(^-((clog) [%flush stat]))] + -- +-- \ No newline at end of file diff --git a/pkg/base-dev/lib/strandio.hoon b/pkg/base-dev/lib/strandio.hoon index f49ee172eb..c2f2137194 100644 --- a/pkg/base-dev/lib/strandio.hoon +++ b/pkg/base-dev/lib/strandio.hoon @@ -470,7 +470,7 @@ =/ m (strand ,json) ^- form:m ;< =cord bind:m (fetch-cord url) - =/ json=(unit json) (de-json:html cord) + =/ json=(unit json) (de:json:html cord) ?~ json (strand-fail %json-parse-error ~) (pure:m u.json) diff --git a/pkg/base-dev/mar/noun-autodiff.hoon b/pkg/base-dev/mar/noun-autodiff.hoon new file mode 100644 index 0000000000..ea102a4589 --- /dev/null +++ b/pkg/base-dev/mar/noun-autodiff.hoon @@ -0,0 +1,32 @@ +:: +:::: /hoon/noun/mar + :: +/? 310 +/+ noun-diff +!: +|_ non=* +++ grab |% + ++ noun * + -- +++ grow |% + ++ mime [/application/x-urb-jam (as-octs:mimes:html (jam non))] + -- +++ grad + |% + ++ form %noun + ++ diff + |= new=* + ^- (list diff:noun-diff) + ~[(diff:noun-diff non new)] + ++ pact + |= patches=(list patch:noun-diff) + (roll patches |=([=patch:noun-diff n=_non] (apply:noun-diff patch n))) + :: A poor mans' version of merging patches. Just apply them in sequence. + ++ join + |= [old=(list patch:noun-diff) new=(list patch:noun-diff)] + `(weld new old) + ++ mash + |= [[ship desk old=(list patch:noun-diff)] [ship desk new=(list patch:noun-diff)]] + (weld new old) + -- +-- diff --git a/pkg/landscape/app/weather.hoon b/pkg/landscape/app/weather.hoon index d605cb4abe..f1f7fa9a10 100644 --- a/pkg/landscape/app/weather.hoon +++ b/pkg/landscape/app/weather.hoon @@ -120,7 +120,7 @@ ?~ data :: data is null [~ state] - =/ ujon=(unit json) (de-json:html q.data.u.data) + =/ ujon=(unit json) (de:json:html q.data.u.data) ?~ ujon [~ state] ?> ?=(%o -.u.ujon) diff --git a/pkg/landscape/ted/gcp/get-token.hoon b/pkg/landscape/ted/gcp/get-token.hoon index 73fbbf3b12..69916baabf 100644 --- a/pkg/landscape/ted/gcp/get-token.hoon +++ b/pkg/landscape/ted/gcp/get-token.hoon @@ -110,8 +110,8 @@ url=url header-list=['Content-Type'^'application/json' ~] ^= body - %- some %- as-octt:mimes:html - %- en-json:html + %- some %- as-octs:mimes:html + %- en:json:html %: pairs:enjs:format :- 'grant_type' s+'urn:ietf:params:oauth:grant-type:jwt-bearer' @@ -125,7 +125,7 @@ ?~ full-file.rep (strand-fail:strandio %gcp-no-response ~) =/ body=@t q.data.u.full-file.rep - =/ jon=(unit json) (de-json:html body) + =/ jon=(unit json) (de:json:html body) ?~ jon ~| body (strand-fail:strandio %gcp-bad-body ~)