mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-11-28 11:40:11 +03:00
Merge branch 'master' into research-merge; broken
This commit is contained in:
commit
07fd6faab9
2
.travis/.gitattributes
vendored
Normal file
2
.travis/.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Don't show in diffs or auto-merge
|
||||||
|
package-lock.json binary
|
@ -1,79 +1,58 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
# set -x
|
set -x
|
||||||
|
|
||||||
# XX use -s instead of hash pill
|
# XX use -s instead of hash pill
|
||||||
HASH=$(git -C .. log -1 HEAD --format=%H -- sys/)
|
HASH=$(git -C .. log -1 HEAD --format=%H -- sys/)
|
||||||
export PILL_NAME="git-${HASH:0:10}"
|
export PILL_NAME="git-${HASH:0:10}"
|
||||||
|
|
||||||
if [ ! ${PILL_FORCE:-} ]; then
|
if [ ! ${PILL_FORCE:-} ]; then
|
||||||
|
: Trying pill for commit
|
||||||
wget https://bootstrap.urbit.org/$PILL_NAME.pill -O urbit.pill && exit 0
|
wget https://bootstrap.urbit.org/$PILL_NAME.pill -O urbit.pill && exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# if wget failed
|
# if wget failed
|
||||||
|
|
||||||
if [ ${TRAVIS_COMMIT:-} ] && [ $TRAVIS_COMMIT != $HASH ]; then
|
if [ ${TRAVIS_COMMIT:-} ] && [ $TRAVIS_COMMIT != $HASH ]; then
|
||||||
echo Directory sys/ not modified in commit $TRAVIS_COMMIT
|
: Directory sys/ not modified in commit $TRAVIS_COMMIT
|
||||||
echo FIXME ignoring, as current sys/ commits are unlikely to contain the pill-build code
|
: FIXME ignoring, as current sys/ commits are unlikely to contain the pill-build code
|
||||||
echo
|
:
|
||||||
# echo For auto-build please tag and push $HASH
|
# : For auto-build please tag and push $HASH
|
||||||
# exit 1
|
# exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir prev
|
mkdir prev
|
||||||
{
|
{
|
||||||
echo Pilling: trying pinned fakezod
|
: Pilling: trying pinned fakezod
|
||||||
wget -i pin-parent-pill-pier.url -O - | tar xvz -C prev/ &&
|
wget -i pin-parent-pill-pier.url -O - | tar xvz -C prev/ &&
|
||||||
echo Downloaded prev/zod
|
: Downloaded prev/zod &&
|
||||||
|
lsc ./in-urbit.ls -FI zod prev/zod <<' .'
|
||||||
|
|autoload |
|
||||||
|
|mount %
|
||||||
|
.
|
||||||
|
[ $? = 0 ] && cp -r ../sys prev/zod/home/
|
||||||
} || {
|
} || {
|
||||||
echo Pilling: Parent-pill pier not available, trying preceding pill commit
|
: Pilling: Parent-pill pier not available, trying preceding pill commit
|
||||||
HASH2=$(git -C .. log -2 $HASH --format=%H -- sys/ | tail -1)
|
HASH2=$(git -C .. log -2 $HASH --format=%H -- sys/ | tail -1)
|
||||||
PILL_NAME2="git-${HASH2:0:10}"
|
PILL_NAME2="git-${HASH2:0:10}"
|
||||||
wget https://bootstrap.urbit.org/$PILL_NAME2.pill -O urbit.pill &&
|
wget https://bootstrap.urbit.org/$PILL_NAME2.pill -O prev/urbit.pill &&
|
||||||
echo FIXME running test script to create fakezod, this might be overkill &&
|
lsc ./in-urbit.ls -A .. -B prev/urbit.pill -cFI zod prev/zod <<' .'
|
||||||
lsc test.ls &&
|
%booted-prev-zod
|
||||||
mv urbit.pill prev/urbit.pill &&
|
.
|
||||||
mv zod prev/zod &&
|
|
||||||
export PIER_FRESH="y"
|
|
||||||
} || {
|
} || {
|
||||||
echo Pilling: Out of ideas
|
: Pilling: Out of ideas
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
lsc <<done
|
: Pier created, soliding actual pill
|
||||||
do
|
lsc ./in-urbit.ls -FI zod prev/zod <<.
|
||||||
require! <[ stream-snitch once recursive-copy wait-on ]>
|
|label %home %$PILL_NAME
|
||||||
pty = require \pty.js
|
.urbit/pill +solid /==/$PILL_NAME/sys, =dub &
|
||||||
|
.
|
||||||
urbit = pty.spawn 'urbit' <[-FI zod prev/zod]>
|
|
||||||
.on \data -> process.stdout.write it
|
|
||||||
|
|
||||||
on-next = (re,cb)->
|
|
||||||
urbit.pipe (new stream-snitch re).on \match once cb
|
|
||||||
|
|
||||||
on-next /\n(\/~|ford: )/ ->
|
|
||||||
console.log "\n\n---\nnode: detected error\n---\n\n"
|
|
||||||
set-timeout (-> process.exit 1), 1000
|
|
||||||
|
|
||||||
<- on-next /dojo> /
|
|
||||||
{PILL_NAME} = process.env
|
|
||||||
do-pill = ->
|
|
||||||
urbit.write "|label %home %#PILL_NAME\r"
|
|
||||||
urbit.write ".urbit/pill +solid /==/#PILL_NAME/sys, =dub &\r"
|
|
||||||
<- wait-on resources: <[ prev/zod/.urb/put/urbit.pill ]>
|
|
||||||
urbit.write "\04"
|
|
||||||
process.exit 0
|
|
||||||
#
|
|
||||||
if process.env.PIER_FRESH then do-pill!
|
|
||||||
urbit.write "|autoload |\r"
|
|
||||||
urbit.write "|mount %\r"
|
|
||||||
<- wait-on resources: <[ prev/zod/home ]>
|
|
||||||
<- recursive-copy '../sys/' 'prev/zod/home/sys/' {+overwrite} .then
|
|
||||||
on-next /sync/ do-pill
|
|
||||||
done
|
|
||||||
cp prev/zod/.urb/put/urbit.pill urbit.pill
|
cp prev/zod/.urb/put/urbit.pill urbit.pill
|
||||||
mkdir built-pill; cp urbit.pill built-pill/$PILL_NAME.pill
|
mkdir built-pill; cp urbit.pill built-pill/$PILL_NAME.pill
|
||||||
|
|
||||||
echo
|
:
|
||||||
echo Created $PILL_NAME.pill, to be uploaded if tests pass
|
: Created $PILL_NAME.pill, to be uploaded if tests pass
|
||||||
echo
|
:
|
||||||
|
15
.travis/in-urbit.ls
Normal file
15
.travis/in-urbit.ls
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
require! <[ split ]>
|
||||||
|
{through} = require 'promise-streams'
|
||||||
|
{Urbit,ERROR} = require './runner.ls'
|
||||||
|
|
||||||
|
urbit = new Urbit process.argv[2 to]
|
||||||
|
|
||||||
|
urbit.expect ERROR .then -> process.exit 1
|
||||||
|
|
||||||
|
<- urbit.expect /dojo> / .then
|
||||||
|
|
||||||
|
process.stdin.pipe split!
|
||||||
|
.pipe through ->
|
||||||
|
urbit.line it.trim!replace /\$[a-zA-Z0-9_]+/g ->
|
||||||
|
process.env[it.slice 1] ? '__unknown-var__'
|
||||||
|
.wait!then -> urbit.exit 0
|
851
.travis/package-lock.json
generated
Normal file
851
.travis/package-lock.json
generated
Normal file
@ -0,0 +1,851 @@
|
|||||||
|
{
|
||||||
|
"name": "arvo-tests",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"bluebird": {
|
||||||
|
"version": "2.11.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
|
||||||
|
"integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
|
||||||
|
},
|
||||||
|
"colors": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
|
||||||
|
},
|
||||||
|
"escape-string-regexp": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||||
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||||
|
},
|
||||||
|
"livescript": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/livescript/-/livescript-1.5.0.tgz",
|
||||||
|
"integrity": "sha1-T+cSHEEhfkYI4zTrnL4XYuY+VWY=",
|
||||||
|
"requires": {
|
||||||
|
"optionator": "0.8.2",
|
||||||
|
"prelude-ls": "1.1.2",
|
||||||
|
"source-map": "0.5.7"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"deep-is": {
|
||||||
|
"version": "0.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
||||||
|
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
|
||||||
|
},
|
||||||
|
"fast-levenshtein": {
|
||||||
|
"version": "2.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||||
|
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
|
||||||
|
},
|
||||||
|
"levn": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
|
||||||
|
"requires": {
|
||||||
|
"prelude-ls": "1.1.2",
|
||||||
|
"type-check": "0.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optionator": {
|
||||||
|
"version": "0.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
|
||||||
|
"integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
|
||||||
|
"requires": {
|
||||||
|
"deep-is": "0.1.3",
|
||||||
|
"fast-levenshtein": "2.0.6",
|
||||||
|
"levn": "0.3.0",
|
||||||
|
"prelude-ls": "1.1.2",
|
||||||
|
"type-check": "0.3.2",
|
||||||
|
"wordwrap": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"prelude-ls": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.5.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
|
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
|
||||||
|
},
|
||||||
|
"type-check": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||||
|
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
|
||||||
|
"requires": {
|
||||||
|
"prelude-ls": "1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wordwrap": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"promise-streams": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/promise-streams/-/promise-streams-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-cwnx02mDMOp/rasZIvE5iSKayFo=",
|
||||||
|
"requires": {
|
||||||
|
"bluebird": "2.11.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pty.js": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/pty.js/-/pty.js-0.3.1.tgz",
|
||||||
|
"integrity": "sha1-gfW+0zLW5eeraFaI0boDc0ENUbU=",
|
||||||
|
"requires": {
|
||||||
|
"extend": "1.2.1",
|
||||||
|
"nan": "2.3.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"extend": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz",
|
||||||
|
"integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w="
|
||||||
|
},
|
||||||
|
"nan": {
|
||||||
|
"version": "2.3.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.3.5.tgz",
|
||||||
|
"integrity": "sha1-gioNwmYpDOTNOhIoLKPn42Rmigg="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"recursive-copy": {
|
||||||
|
"version": "2.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.9.tgz",
|
||||||
|
"integrity": "sha512-0AkHV+QtfS/1jW01z3m2t/TRTW56Fpc+xYbsoa/bqn8BCYPwmsaNjlYmUU/dyGg9w8MmGoUWihU5W+s+qjxvBQ==",
|
||||||
|
"requires": {
|
||||||
|
"del": "2.2.2",
|
||||||
|
"emitter-mixin": "0.0.3",
|
||||||
|
"errno": "0.1.7",
|
||||||
|
"graceful-fs": "4.1.11",
|
||||||
|
"junk": "1.0.3",
|
||||||
|
"maximatch": "0.1.0",
|
||||||
|
"mkdirp": "0.5.1",
|
||||||
|
"pify": "2.3.0",
|
||||||
|
"promise": "7.3.1",
|
||||||
|
"slash": "1.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"array-differ": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE="
|
||||||
|
},
|
||||||
|
"array-union": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
|
||||||
|
"requires": {
|
||||||
|
"array-uniq": "1.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"array-uniq": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
|
||||||
|
},
|
||||||
|
"arrify": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
|
||||||
|
},
|
||||||
|
"asap": {
|
||||||
|
"version": "2.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
|
||||||
|
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
|
||||||
|
},
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||||
|
},
|
||||||
|
"del": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
|
||||||
|
"integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
|
||||||
|
"requires": {
|
||||||
|
"globby": "5.0.0",
|
||||||
|
"is-path-cwd": "1.0.0",
|
||||||
|
"is-path-in-cwd": "1.0.0",
|
||||||
|
"object-assign": "4.1.1",
|
||||||
|
"pify": "2.3.0",
|
||||||
|
"pinkie-promise": "2.0.1",
|
||||||
|
"rimraf": "2.6.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emitter-mixin": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/emitter-mixin/-/emitter-mixin-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-WUjLKG8uSO3DslGnz8H3iDOW1lw="
|
||||||
|
},
|
||||||
|
"errno": {
|
||||||
|
"version": "0.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
|
||||||
|
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
|
||||||
|
"requires": {
|
||||||
|
"prr": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
||||||
|
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "1.0.0",
|
||||||
|
"inflight": "1.0.6",
|
||||||
|
"inherits": "2.0.3",
|
||||||
|
"minimatch": "3.0.4",
|
||||||
|
"once": "1.4.0",
|
||||||
|
"path-is-absolute": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"globby": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
|
||||||
|
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
|
||||||
|
"requires": {
|
||||||
|
"array-union": "1.0.2",
|
||||||
|
"arrify": "1.0.1",
|
||||||
|
"glob": "7.1.2",
|
||||||
|
"object-assign": "4.1.1",
|
||||||
|
"pify": "2.3.0",
|
||||||
|
"pinkie-promise": "2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"graceful-fs": {
|
||||||
|
"version": "4.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
|
||||||
|
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
|
||||||
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"requires": {
|
||||||
|
"once": "1.4.0",
|
||||||
|
"wrappy": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||||
|
},
|
||||||
|
"is-path-cwd": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
|
||||||
|
},
|
||||||
|
"is-path-in-cwd": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
|
||||||
|
"requires": {
|
||||||
|
"is-path-inside": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-path-inside": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
|
||||||
|
"requires": {
|
||||||
|
"path-is-inside": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"junk": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI="
|
||||||
|
},
|
||||||
|
"maximatch": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=",
|
||||||
|
"requires": {
|
||||||
|
"array-differ": "1.0.0",
|
||||||
|
"array-union": "1.0.2",
|
||||||
|
"arrify": "1.0.1",
|
||||||
|
"minimatch": "3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "1.1.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "0.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||||
|
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
|
||||||
|
},
|
||||||
|
"mkdirp": {
|
||||||
|
"version": "0.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||||
|
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||||
|
"requires": {
|
||||||
|
"minimist": "0.0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"object-assign": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||||
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
||||||
|
},
|
||||||
|
"path-is-inside": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
|
||||||
|
},
|
||||||
|
"pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
|
||||||
|
},
|
||||||
|
"pinkie": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
|
||||||
|
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
|
||||||
|
},
|
||||||
|
"pinkie-promise": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
|
||||||
|
"requires": {
|
||||||
|
"pinkie": "2.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"promise": {
|
||||||
|
"version": "7.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
|
||||||
|
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
|
||||||
|
"requires": {
|
||||||
|
"asap": "2.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"prr": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
|
||||||
|
},
|
||||||
|
"rimraf": {
|
||||||
|
"version": "2.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
|
||||||
|
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
|
||||||
|
"requires": {
|
||||||
|
"glob": "7.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"slash": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"split": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
|
||||||
|
"requires": {
|
||||||
|
"through": "2.3.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stream-snitch": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/stream-snitch/-/stream-snitch-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-iXp48TonFPqESqd74VR3qJbYUqk="
|
||||||
|
},
|
||||||
|
"through": {
|
||||||
|
"version": "2.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||||
|
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
|
||||||
|
},
|
||||||
|
"wait-on": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wait-on/-/wait-on-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-hDwJ674+7dfiiK/cxtYCwPxlnjXDjto/pCz1PF02sXUhqCqCWsgvxZln0699PReWqXXgkxqkF6DDo5Rj9sjNvw==",
|
||||||
|
"requires": {
|
||||||
|
"core-js": "2.5.3",
|
||||||
|
"joi": "9.2.0",
|
||||||
|
"minimist": "1.2.0",
|
||||||
|
"request": "2.83.0",
|
||||||
|
"rx": "4.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ajv": {
|
||||||
|
"version": "5.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
|
||||||
|
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
|
||||||
|
"requires": {
|
||||||
|
"co": "4.6.0",
|
||||||
|
"fast-deep-equal": "1.1.0",
|
||||||
|
"fast-json-stable-stringify": "2.0.0",
|
||||||
|
"json-schema-traverse": "0.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"asn1": {
|
||||||
|
"version": "0.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
|
||||||
|
"integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
|
||||||
|
},
|
||||||
|
"assert-plus": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
|
||||||
|
},
|
||||||
|
"asynckit": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
|
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||||
|
},
|
||||||
|
"aws-sign2": {
|
||||||
|
"version": "0.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||||
|
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
|
||||||
|
},
|
||||||
|
"aws4": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
|
||||||
|
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
|
||||||
|
},
|
||||||
|
"bcrypt-pbkdf": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"tweetnacl": "0.14.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"boom": {
|
||||||
|
"version": "4.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
|
||||||
|
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
|
||||||
|
"requires": {
|
||||||
|
"hoek": "4.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"caseless": {
|
||||||
|
"version": "0.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||||
|
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||||
|
},
|
||||||
|
"co": {
|
||||||
|
"version": "4.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
||||||
|
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
|
||||||
|
},
|
||||||
|
"combined-stream": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
|
||||||
|
"requires": {
|
||||||
|
"delayed-stream": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"core-js": {
|
||||||
|
"version": "2.5.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
|
||||||
|
"integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4="
|
||||||
|
},
|
||||||
|
"core-util-is": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||||
|
},
|
||||||
|
"cryptiles": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
|
||||||
|
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
|
||||||
|
"requires": {
|
||||||
|
"boom": "5.2.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"boom": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
|
||||||
|
"requires": {
|
||||||
|
"hoek": "4.2.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dashdash": {
|
||||||
|
"version": "1.14.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||||
|
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
|
||||||
|
"requires": {
|
||||||
|
"assert-plus": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||||
|
},
|
||||||
|
"ecc-jsbn": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"jsbn": "0.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extend": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
|
||||||
|
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
|
||||||
|
},
|
||||||
|
"extsprintf": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
|
||||||
|
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
|
||||||
|
},
|
||||||
|
"fast-deep-equal": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
|
||||||
|
},
|
||||||
|
"fast-json-stable-stringify": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
|
||||||
|
},
|
||||||
|
"forever-agent": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||||
|
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
|
||||||
|
},
|
||||||
|
"form-data": {
|
||||||
|
"version": "2.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
|
||||||
|
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
|
||||||
|
"requires": {
|
||||||
|
"asynckit": "0.4.0",
|
||||||
|
"combined-stream": "1.0.6",
|
||||||
|
"mime-types": "2.1.18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"getpass": {
|
||||||
|
"version": "0.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
|
||||||
|
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
|
||||||
|
"requires": {
|
||||||
|
"assert-plus": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"har-schema": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
|
||||||
|
},
|
||||||
|
"har-validator": {
|
||||||
|
"version": "5.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
|
||||||
|
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
|
||||||
|
"requires": {
|
||||||
|
"ajv": "5.5.2",
|
||||||
|
"har-schema": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hawk": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
|
||||||
|
"requires": {
|
||||||
|
"boom": "4.3.1",
|
||||||
|
"cryptiles": "3.1.2",
|
||||||
|
"hoek": "4.2.1",
|
||||||
|
"sntp": "2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hoek": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
|
||||||
|
},
|
||||||
|
"http-signature": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
|
||||||
|
"requires": {
|
||||||
|
"assert-plus": "1.0.0",
|
||||||
|
"jsprim": "1.4.1",
|
||||||
|
"sshpk": "1.13.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-typedarray": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
||||||
|
},
|
||||||
|
"isemail": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz",
|
||||||
|
"integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY="
|
||||||
|
},
|
||||||
|
"isstream": {
|
||||||
|
"version": "0.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
|
||||||
|
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg="
|
||||||
|
},
|
||||||
|
"joi": {
|
||||||
|
"version": "9.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/joi/-/joi-9.2.0.tgz",
|
||||||
|
"integrity": "sha1-M4WseQGSEwy+Iw6ALsAskhW7/to=",
|
||||||
|
"requires": {
|
||||||
|
"hoek": "4.2.1",
|
||||||
|
"isemail": "2.2.1",
|
||||||
|
"items": "2.1.1",
|
||||||
|
"moment": "2.21.0",
|
||||||
|
"topo": "2.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"jsbn": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"json-schema": {
|
||||||
|
"version": "0.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||||
|
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
|
||||||
|
},
|
||||||
|
"json-schema-traverse": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
|
||||||
|
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
|
||||||
|
},
|
||||||
|
"json-stringify-safe": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
|
||||||
|
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
|
||||||
|
},
|
||||||
|
"jsprim": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
|
||||||
|
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
|
||||||
|
"requires": {
|
||||||
|
"assert-plus": "1.0.0",
|
||||||
|
"extsprintf": "1.3.0",
|
||||||
|
"json-schema": "0.2.3",
|
||||||
|
"verror": "1.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mime-db": {
|
||||||
|
"version": "1.33.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
|
||||||
|
"integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
|
||||||
|
},
|
||||||
|
"mime-types": {
|
||||||
|
"version": "2.1.18",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
|
||||||
|
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
|
||||||
|
"requires": {
|
||||||
|
"mime-db": "1.33.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||||
|
},
|
||||||
|
"moment": {
|
||||||
|
"version": "2.21.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz",
|
||||||
|
"integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ=="
|
||||||
|
},
|
||||||
|
"oauth-sign": {
|
||||||
|
"version": "0.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
|
||||||
|
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
|
||||||
|
},
|
||||||
|
"performance-now": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||||
|
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
||||||
|
},
|
||||||
|
"punycode": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
|
||||||
|
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
|
||||||
|
},
|
||||||
|
"qs": {
|
||||||
|
"version": "6.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
|
||||||
|
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
|
||||||
|
},
|
||||||
|
"request": {
|
||||||
|
"version": "2.83.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
|
||||||
|
"integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
|
||||||
|
"requires": {
|
||||||
|
"aws-sign2": "0.7.0",
|
||||||
|
"aws4": "1.6.0",
|
||||||
|
"caseless": "0.12.0",
|
||||||
|
"combined-stream": "1.0.6",
|
||||||
|
"extend": "3.0.1",
|
||||||
|
"forever-agent": "0.6.1",
|
||||||
|
"form-data": "2.3.2",
|
||||||
|
"har-validator": "5.0.3",
|
||||||
|
"hawk": "6.0.2",
|
||||||
|
"http-signature": "1.2.0",
|
||||||
|
"is-typedarray": "1.0.0",
|
||||||
|
"isstream": "0.1.2",
|
||||||
|
"json-stringify-safe": "5.0.1",
|
||||||
|
"mime-types": "2.1.18",
|
||||||
|
"oauth-sign": "0.8.2",
|
||||||
|
"performance-now": "2.1.0",
|
||||||
|
"qs": "6.5.1",
|
||||||
|
"safe-buffer": "5.1.1",
|
||||||
|
"stringstream": "0.0.5",
|
||||||
|
"tough-cookie": "2.3.4",
|
||||||
|
"tunnel-agent": "0.6.0",
|
||||||
|
"uuid": "3.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rx": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
|
||||||
|
"integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
|
||||||
|
},
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
||||||
|
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
|
||||||
|
},
|
||||||
|
"sntp": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
|
||||||
|
"requires": {
|
||||||
|
"hoek": "4.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sshpk": {
|
||||||
|
"version": "1.13.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
|
||||||
|
"integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
|
||||||
|
"requires": {
|
||||||
|
"asn1": "0.2.3",
|
||||||
|
"assert-plus": "1.0.0",
|
||||||
|
"bcrypt-pbkdf": "1.0.1",
|
||||||
|
"dashdash": "1.14.1",
|
||||||
|
"ecc-jsbn": "0.1.1",
|
||||||
|
"getpass": "0.1.7",
|
||||||
|
"jsbn": "0.1.1",
|
||||||
|
"tweetnacl": "0.14.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stringstream": {
|
||||||
|
"version": "0.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
|
||||||
|
"integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
|
||||||
|
},
|
||||||
|
"topo": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz",
|
||||||
|
"integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=",
|
||||||
|
"requires": {
|
||||||
|
"hoek": "4.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tough-cookie": {
|
||||||
|
"version": "2.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
|
||||||
|
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
|
||||||
|
"requires": {
|
||||||
|
"punycode": "1.4.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tunnel-agent": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||||
|
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "5.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tweetnacl": {
|
||||||
|
"version": "0.14.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||||
|
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
|
||||||
|
},
|
||||||
|
"verror": {
|
||||||
|
"version": "1.10.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
|
||||||
|
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
|
||||||
|
"requires": {
|
||||||
|
"assert-plus": "1.0.0",
|
||||||
|
"core-util-is": "1.0.2",
|
||||||
|
"extsprintf": "1.3.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,10 +9,14 @@
|
|||||||
"author": "~fyr",
|
"author": "~fyr",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"colors": "^1.1.2",
|
||||||
|
"escape-string-regexp": "^1.0.5",
|
||||||
"livescript": "^1.5.0",
|
"livescript": "^1.5.0",
|
||||||
"once": "^1.4.0",
|
"once": "^1.4.0",
|
||||||
|
"promise-streams": "^2.1.1",
|
||||||
"pty.js": "^0.3.1",
|
"pty.js": "^0.3.1",
|
||||||
"recursive-copy": "^2.0.7",
|
"recursive-copy": "^2.0.7",
|
||||||
|
"split": "^1.0.1",
|
||||||
"stream-snitch": "0.0.3",
|
"stream-snitch": "0.0.3",
|
||||||
"wait-on": "^2.0.2"
|
"wait-on": "^2.0.2"
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
https://ci-piers.urbit.org/zod-ccaffc55e6cd2f244e6fd1710479c05e1019c167.tgz
|
https://ci-piers.urbit.org/zod-b5aeee11e463f9338909ede5cee13d30883ea807.tgz
|
||||||
|
62
.travis/runner.ls
Normal file
62
.travis/runner.ls
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
require! <[ stream stream-snitch colors escape-string-regexp ]>
|
||||||
|
pty = require \pty.js
|
||||||
|
|
||||||
|
export ERROR = /((ford|warn): |\r\x1b\[K\/~)/
|
||||||
|
export class Urbit
|
||||||
|
(args)->
|
||||||
|
@stdout = process.stdout # overridable
|
||||||
|
@pty = pty.spawn \urbit args
|
||||||
|
@pty.on \data ~> @stdout.write it # TODO pipe?
|
||||||
|
console.log "FIXME Running Ubuntu 14.04, which causes a libtinfo version info warning. Should update to 16.04."
|
||||||
|
#
|
||||||
|
@last-output = Date.now()
|
||||||
|
@pty.on \data ~> @last-output = Date.now()
|
||||||
|
#
|
||||||
|
@reset-listeners!
|
||||||
|
process.on \exit ~> @pty.write '\04' # send EOF to gracefully checkpoint
|
||||||
|
@pty.on \exit (code,signal)~>
|
||||||
|
| code => process.exit code
|
||||||
|
| signal => process.exit 128 + signal # repack exit code
|
||||||
|
| _ => #TODO report if unexpected?
|
||||||
|
#
|
||||||
|
note: (...args)-> console.log "\n#{'_'*40}\nnode:".blue, ...args
|
||||||
|
warn: (...args)-> console.log "\n#{'!'*40}\nnode:".red, ...args
|
||||||
|
wait-silent: ~> # this feels hacky
|
||||||
|
new Promise (resolve)~>
|
||||||
|
a = set-interval ~>
|
||||||
|
if Date.now! > @last-output + 1000
|
||||||
|
clear-interval a
|
||||||
|
resolve @last-output
|
||||||
|
, 200
|
||||||
|
#
|
||||||
|
reset-listeners: ~>
|
||||||
|
@pty.socket.unpipe @listeners
|
||||||
|
@pty.socket.pipe (@listeners = new stream.PassThrough)
|
||||||
|
@
|
||||||
|
every: (re, cb)~>
|
||||||
|
@listeners.pipe (new stream-snitch re).on "match" cb
|
||||||
|
expect: (re)~>
|
||||||
|
new Promise (resolve)~>
|
||||||
|
@listeners.pipe (new stream-snitch re).once "match" resolve
|
||||||
|
expect-immediate: (re)->
|
||||||
|
Promise.race [
|
||||||
|
@expect re
|
||||||
|
@wait-silent!then -> throw Error "Expected #re during event"
|
||||||
|
]
|
||||||
|
#
|
||||||
|
line: (s)->
|
||||||
|
@pty.write s
|
||||||
|
<~ @wait-silent!then
|
||||||
|
@stdout.write "\n"
|
||||||
|
@pty.write "\r"
|
||||||
|
#
|
||||||
|
expect-echo: (s)-> #ALT send-and-expect
|
||||||
|
<~ @line s .then
|
||||||
|
@expect new RegExp escape-string-regexp s
|
||||||
|
#
|
||||||
|
exit: (code)->
|
||||||
|
@pty.on \exit -> process.exit code #REVIEW just return promise?
|
||||||
|
# @pty.write "\03" # ^C running event
|
||||||
|
@pty.write "\05\25" # ^E^U to clear prompt
|
||||||
|
@pty.write "\04" # ^D to checkpoint
|
||||||
|
# set-timeout # hard exit
|
@ -1,32 +1,62 @@
|
|||||||
require! \stream-snitch
|
{Urbit,ERROR} = require './runner.ls'
|
||||||
pty = require \pty.js
|
|
||||||
|
|
||||||
urbit =
|
urbit = new Urbit <[-B urbit.pill -A .. -cFI zod zod]>
|
||||||
# TODO abort on failure
|
Promise.resolve urbit
|
||||||
pty.spawn 'urbit' <[-B urbit.pill -A .. -cFI zod zod]>
|
.then (urb)->
|
||||||
.on \data -> process.stdout.write it
|
urb.note "Booting urbit"
|
||||||
|
Promise.race [
|
||||||
urbit.on \exit (code)->
|
urb.expect ERROR .then ->
|
||||||
console.log "\nnode: urbit exited with code #code\n"
|
urb.warn "Boot error detected"
|
||||||
process.exit code
|
throw Error "Stack trace while booting"
|
||||||
|
, do
|
||||||
console.log "FIXME Running Ubuntu 14.04, which causes a libtinfo version info warning. Should update to 16.04.\n"
|
<- urb.expect /dojo> / .then
|
||||||
|
<- urb.expect-echo "%dojo-booted" .then
|
||||||
fin = no
|
urb.reset-listeners!
|
||||||
urbit.pipe (new stream-snitch /dojo> /g).on \match ->
|
]
|
||||||
return if fin
|
.then (urb)->
|
||||||
fin := yes
|
urb.note "Testing compilation"
|
||||||
console.log "\n\n---\nnode: got dojo!\n---\n\n"
|
errs = {} #REVIEW stream reduce?
|
||||||
set-timeout (-> process.exit 0), 1000 # should probably test further
|
cur = "init"
|
||||||
|
urb.every />> (\/[ -~]+)/ ([_,path])-> cur := path
|
||||||
urbit.pipe (new stream-snitch /\n(\/~|ford: )/g).on \match ->
|
urb.every ERROR, ->
|
||||||
return if fin
|
unless errs[cur]
|
||||||
fin := yes
|
errs[cur] = true
|
||||||
console.log "\n\n---\nnode: detected error\n---\n\n"
|
urb.warn "Compile error detected"
|
||||||
set-timeout (-> process.exit 1), 1000
|
#
|
||||||
|
<- urb.line "|start %test" .then
|
||||||
set-timeout ...
|
<- urb.line ":test [%cores /]" .then
|
||||||
-> console.log "\n\n---\nnode: timed out after 5 min\n---"
|
<- urb.expect-echo "%compilation-tested" .then
|
||||||
5*60000
|
errs := Object.keys errs
|
||||||
|
if errs.length => throw Error "in #errs"
|
||||||
process.on \exit -> urbit.write '\04' # send EOF to gracefully checkpoint
|
urb.reset-listeners!
|
||||||
|
.then (urb)->
|
||||||
|
urb.note "Testing renderers"
|
||||||
|
errs = {} #REVIEW stream reduce?
|
||||||
|
cur = "init"
|
||||||
|
urb.every />> (\[[ -~]+)/ ([_,ren])-> cur := ren
|
||||||
|
urb.every ERROR, ->
|
||||||
|
unless errs[cur]
|
||||||
|
errs[cur] = true
|
||||||
|
urb.warn "Renderer error detected"
|
||||||
|
#
|
||||||
|
<- urb.line ":test [%renders /]" .then
|
||||||
|
<- urb.expect-echo "%renderers-tested" .then
|
||||||
|
errs := Object.keys errs
|
||||||
|
if errs.length => throw Error "in #errs"
|
||||||
|
urb.reset-listeners!
|
||||||
|
.then (urb)->
|
||||||
|
urb.note "Running /===/tests"
|
||||||
|
errs = "" #REVIEW stream reduce?
|
||||||
|
urb.every /(\/[ -~]* (FAILED|CRASHED))/, ([_,result])->
|
||||||
|
if !errs => urb.warn "First error"
|
||||||
|
errs += "\n #result"
|
||||||
|
<- urb.line "+test, =defer |, =seed `@uvI`(shaz %reproducible)" .then
|
||||||
|
<- urb.expect-echo "%ran-tests" .then
|
||||||
|
if errs => throw Error errs
|
||||||
|
urb.reset-listeners!
|
||||||
|
.then ->
|
||||||
|
urbit.exit 0
|
||||||
|
.catch (err)->
|
||||||
|
<- urbit.wait-silent!then # assumptions?
|
||||||
|
urbit.warn "Test aborted:" err
|
||||||
|
urbit.exit 1
|
||||||
|
@ -561,7 +561,7 @@
|
|||||||
$tang ;;(tang q.q.cay)
|
$tang ;;(tang q.q.cay)
|
||||||
$httr
|
$httr
|
||||||
=+ hit=;;(httr:eyre q.q.cay)
|
=+ hit=;;(httr:eyre q.q.cay)
|
||||||
=- (flop (turn `wall`- |=(a/tape leaf+(dash:us a ''))))
|
=- (flop (turn `wall`- |=(a/tape leaf+(dash:us a '' ~))))
|
||||||
:- "HTTP {<p.hit>}"
|
:- "HTTP {<p.hit>}"
|
||||||
%+ weld
|
%+ weld
|
||||||
(turn q.hit |=({a/@t b/@t} "{(trip a)}: {(trip b)}"))
|
(turn q.hit |=({a/@t b/@t} "{(trip a)}: {(trip b)}"))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
:: Three ways we interactg with this app
|
:: Three ways we interact with this app
|
||||||
:: 1. .^(%gx /=gh=/endpoint)
|
:: 1. .^(%gx /=gh=/endpoint)
|
||||||
:: 2. [%peer [our %gh] /endpoint]
|
:: 2. [%peer [our %gh] /endpoint]
|
||||||
:: 3. :gh &gh-poke %post /gists json-data
|
:: 3. :gh &gh-poke %post /gists json-data
|
||||||
|
356
app/hall.hoon
356
app/hall.hoon
@ -117,7 +117,7 @@
|
|||||||
:> #
|
:> #
|
||||||
:> functional cores and arms.
|
:> functional cores and arms.
|
||||||
::
|
::
|
||||||
|_ {bol/bowl:gall state}
|
|_ {bol/bowl:gall $1 state}
|
||||||
::
|
::
|
||||||
:> # %transition
|
:> # %transition
|
||||||
:> prep transition
|
:> prep transition
|
||||||
@ -125,12 +125,110 @@
|
|||||||
++ prep
|
++ prep
|
||||||
:> adapts state.
|
:> adapts state.
|
||||||
::
|
::
|
||||||
|= old/(unit state)
|
=> |%
|
||||||
|
++ states
|
||||||
|
$%({$1 s/state} {$0 s/state-0})
|
||||||
|
::
|
||||||
|
++ state-0
|
||||||
|
(cork state |=(a/state a(stories (~(run by stories.a) story-0))))
|
||||||
|
++ story-0
|
||||||
|
%+ cork story
|
||||||
|
|= a/story
|
||||||
|
%= a
|
||||||
|
shape *config-0
|
||||||
|
mirrors (~(run by mirrors.a) config-0)
|
||||||
|
peers (~(run by peers.a) |=(a/(list query) (turn a query-0)))
|
||||||
|
==
|
||||||
|
++ query-0
|
||||||
|
$? $: $circle
|
||||||
|
nom/name
|
||||||
|
wer/(unit circle)
|
||||||
|
wat/(set circle-data)
|
||||||
|
ran/range-0
|
||||||
|
==
|
||||||
|
query
|
||||||
|
==
|
||||||
|
++ config-0
|
||||||
|
{src/(set source-0) cap/cord tag/tags fit/filter con/control}
|
||||||
|
++ source-0
|
||||||
|
{cir/circle ran/range-0}
|
||||||
|
++ range-0
|
||||||
|
%- unit
|
||||||
|
$: hed/place-0
|
||||||
|
tal/(unit place-0)
|
||||||
|
==
|
||||||
|
++ place-0
|
||||||
|
$% {$da @da}
|
||||||
|
{$ud @ud}
|
||||||
|
{$sd @sd}
|
||||||
|
==
|
||||||
|
--
|
||||||
|
=| mos/(list move)
|
||||||
|
|= old/(unit states)
|
||||||
^- (quip move _..prep)
|
^- (quip move _..prep)
|
||||||
?~ old
|
?~ old
|
||||||
%- pre-bake
|
%- pre-bake
|
||||||
ta-done:ta-init:ta
|
ta-done:ta-init:ta
|
||||||
[~ ..prep(+<+ u.old)]
|
?- -.u.old
|
||||||
|
$1
|
||||||
|
[mos ..prep(+<+ u.old)]
|
||||||
|
::
|
||||||
|
$0
|
||||||
|
=- $(old `[%1 s.u.old(stories -)])
|
||||||
|
|^ %- ~(run by stories.s.u.old)
|
||||||
|
|= soy/story-0
|
||||||
|
^- story
|
||||||
|
%= soy
|
||||||
|
shape (prep-config shape.soy)
|
||||||
|
mirrors (~(run by mirrors.soy) prep-config)
|
||||||
|
peers %- ~(run by peers.soy)
|
||||||
|
|= a/(list query-0)
|
||||||
|
^- (list query)
|
||||||
|
(murn a prep-query)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ prep-config
|
||||||
|
|= cof/config-0
|
||||||
|
^- config
|
||||||
|
%= cof
|
||||||
|
src
|
||||||
|
%- ~(gas in *(set source))
|
||||||
|
(murn ~(tap in src.cof) prep-source)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ prep-source
|
||||||
|
|= src/source-0
|
||||||
|
^- (unit source)
|
||||||
|
=+ nan=(prep-range ran.src)
|
||||||
|
?~ nan
|
||||||
|
~& [%forgetting-source src]
|
||||||
|
~
|
||||||
|
`src(ran u.nan)
|
||||||
|
::
|
||||||
|
++ prep-query
|
||||||
|
|= que/query-0
|
||||||
|
^- (unit query)
|
||||||
|
?. ?=($circle -.que) `que
|
||||||
|
=+ nan=(prep-range ran.que)
|
||||||
|
?~ nan
|
||||||
|
~& [%forgetting-query que]
|
||||||
|
~
|
||||||
|
`que(ran u.nan)
|
||||||
|
::
|
||||||
|
++ prep-range
|
||||||
|
|= ran/range-0
|
||||||
|
^- (unit range)
|
||||||
|
?~ ran `ran
|
||||||
|
:: ranges with a relative end aren't stored because they end
|
||||||
|
:: immediately, so if we find one we can safely discard it.
|
||||||
|
?: ?=({$~ {$sd @sd}} tal.u.ran) ~
|
||||||
|
:: we replace relative range starts with the current date.
|
||||||
|
:: this is practically correct.
|
||||||
|
?: ?=({$sd @sd} hed.u.ran)
|
||||||
|
`ran(hed.u [%da now.bol])
|
||||||
|
`ran
|
||||||
|
--
|
||||||
|
==
|
||||||
::
|
::
|
||||||
:> # %engines
|
:> # %engines
|
||||||
:> main cores.
|
:> main cores.
|
||||||
@ -316,11 +414,13 @@
|
|||||||
?- -.act
|
?- -.act
|
||||||
:: circle configuration
|
:: circle configuration
|
||||||
$create (action-create +.act)
|
$create (action-create +.act)
|
||||||
|
$design (action-design +.act)
|
||||||
$source (action-source +.act)
|
$source (action-source +.act)
|
||||||
$depict (action-depict +.act)
|
$depict (action-depict +.act)
|
||||||
$filter (action-filter +.act)
|
$filter (action-filter +.act)
|
||||||
$permit (action-permit +.act)
|
$permit (action-permit +.act)
|
||||||
$delete (action-delete +.act)
|
$delete (action-delete +.act)
|
||||||
|
$usage (action-usage +.act)
|
||||||
:: messaging
|
:: messaging
|
||||||
$convey (action-convey +.act)
|
$convey (action-convey +.act)
|
||||||
$phrase (action-phrase +.act)
|
$phrase (action-phrase +.act)
|
||||||
@ -384,6 +484,7 @@
|
|||||||
%^ impact nom %new
|
%^ impact nom %new
|
||||||
:* [[[our.bol nom] ~] ~ ~]
|
:* [[[our.bol nom] ~] ~ ~]
|
||||||
des
|
des
|
||||||
|
~
|
||||||
*filter
|
*filter
|
||||||
:- typ
|
:- typ
|
||||||
?. ?=(?($village $journal) typ) ~
|
?. ?=(?($village $journal) typ) ~
|
||||||
@ -391,6 +492,14 @@
|
|||||||
==
|
==
|
||||||
(ta-evil (crip "{(trip nom)}: already exists"))
|
(ta-evil (crip "{(trip nom)}: already exists"))
|
||||||
::
|
::
|
||||||
|
++ action-design
|
||||||
|
:> creates a story with the specified config.
|
||||||
|
::
|
||||||
|
|= {nom/name cof/config}
|
||||||
|
?. (~(has in stories) nom)
|
||||||
|
(impact nom %new cof)
|
||||||
|
(ta-evil (crip "{(trip nom)}: already exists"))
|
||||||
|
::
|
||||||
++ action-delete
|
++ action-delete
|
||||||
:> delete + announce
|
:> delete + announce
|
||||||
:>
|
:>
|
||||||
@ -438,6 +547,15 @@
|
|||||||
(ta-evil (crip "no story {(trip nom)}"))
|
(ta-evil (crip "no story {(trip nom)}"))
|
||||||
so-done:(~(so-sources so nom ~ u.soy) sub srs)
|
so-done:(~(so-sources so nom ~ u.soy) sub srs)
|
||||||
::
|
::
|
||||||
|
++ action-usage
|
||||||
|
:> add or remove usage tags.
|
||||||
|
::
|
||||||
|
|= {nom/name add/? tas/tags}
|
||||||
|
=+ soy=(~(get by stories) nom)
|
||||||
|
?~ soy
|
||||||
|
(ta-evil (crip "no story {(trip nom)}"))
|
||||||
|
so-done:(~(so-usage so nom ~ u.soy) add tas)
|
||||||
|
::
|
||||||
:> # %messaging
|
:> # %messaging
|
||||||
+|
|
+|
|
||||||
++ action-convey
|
++ action-convey
|
||||||
@ -868,7 +986,8 @@
|
|||||||
$bear (so-bear bur.rum)
|
$bear (so-bear bur.rum)
|
||||||
$peer (so-delta-our rum)
|
$peer (so-delta-our rum)
|
||||||
$gram (so-open src nev.rum)
|
$gram (so-open src nev.rum)
|
||||||
$remove (so-delta-our %config src %remove ~)
|
$remove ::TODO should also remove from {remotes}?
|
||||||
|
(so-delta-our %config src %remove ~)
|
||||||
::
|
::
|
||||||
$new
|
$new
|
||||||
?: =(src so-cir)
|
?: =(src so-cir)
|
||||||
@ -919,88 +1038,88 @@
|
|||||||
:> state. in case of conflict, existing data is
|
:> state. in case of conflict, existing data is
|
||||||
:> overwritten.
|
:> overwritten.
|
||||||
::
|
::
|
||||||
|
::NOTE we don't use ++roll here because of urbit/arvo#447.
|
||||||
|
::
|
||||||
|= {gaz/(list telegram) cos/lobby pes/crowd}
|
|= {gaz/(list telegram) cos/lobby pes/crowd}
|
||||||
^+ +>
|
^+ +>
|
||||||
~? (gth (lent gaz) 2.000)
|
|
||||||
[%unexpected-scrollback-length nom (lent gaz)]
|
|
||||||
=* self +>
|
=* self +>
|
||||||
|
::
|
||||||
:: local config
|
:: local config
|
||||||
=. self
|
=. self
|
||||||
(so-config-full `shape loc.cos)
|
(so-config-full `shape loc.cos)
|
||||||
|
::
|
||||||
:: remote config
|
:: remote config
|
||||||
=. self
|
=. self
|
||||||
=+ rem=~(tap by rem.cos)
|
=+ rem=~(tap by rem.cos)
|
||||||
|- ^+ self
|
|- ^+ self
|
||||||
?~ rem self
|
?~ rem self
|
||||||
=. self
|
=* wer p.i.rem
|
||||||
(so-delta-our %config p.i.rem %full q.i.rem)
|
=* cof q.i.rem
|
||||||
|
:: only make a delta if it actually changed.
|
||||||
|
=? self !=(`cof (~(get by mirrors) wer))
|
||||||
|
(so-delta-our %config wer %full cof)
|
||||||
$(rem t.rem)
|
$(rem t.rem)
|
||||||
::TODO eats previous change?
|
::
|
||||||
::%+ roll ~(tap by rem.cos)
|
|
||||||
::|= {{r/circle c/config} _self}
|
|
||||||
::(so-delta-our %config r %full c)
|
|
||||||
:: local status
|
:: local status
|
||||||
=. self
|
=. self
|
||||||
=+ sas=~(tap by loc.pes)
|
=+ sas=~(tap by loc.pes)
|
||||||
|- ^+ self
|
|- ^+ self
|
||||||
?~ sas self
|
?~ sas self
|
||||||
=. deltas
|
=* who p.i.sas
|
||||||
|
=* sat q.i.sas
|
||||||
|
:: only make a delta if it actually changed.
|
||||||
|
=? deltas !=(`sat (~(get by locals) who))
|
||||||
:_ deltas
|
:_ deltas
|
||||||
:^ %story nom %status
|
:^ %story nom %status
|
||||||
[[our.bol nom] p.i.sas %full q.i.sas]
|
[[our.bol nom] who %full sat]
|
||||||
$(sas t.sas)
|
$(sas t.sas)
|
||||||
::TODO ideally do below, but runtime error at so-delta-our
|
::
|
||||||
::%+ roll ~(tap by loc.pes)
|
|
||||||
::|= {{w/ship s/status} _self}
|
|
||||||
::(so-delta-our %status so-cir w %full s)
|
|
||||||
:: remote status
|
:: remote status
|
||||||
=. self
|
=. self
|
||||||
=+ rem=~(tap by rem.pes)
|
=+ rem=~(tap by rem.pes)
|
||||||
|- ^+ self
|
|- ^+ self
|
||||||
?~ rem self
|
?~ rem self
|
||||||
=. deltas
|
=* wer p.i.rem
|
||||||
|
=* gou q.i.rem
|
||||||
|
:: only make deltas if it actually changed.
|
||||||
|
=? deltas !=(`gou (~(get by remotes) wer))
|
||||||
%+ welp deltas
|
%+ welp deltas
|
||||||
=+ gop=~(tap by q.i.rem)
|
=+ gop=~(tap by gou)
|
||||||
|
=+ hav=(fall (~(get by remotes) wer) *group)
|
||||||
=| l/(list delta)
|
=| l/(list delta)
|
||||||
|- ^+ l
|
|- ^+ l
|
||||||
?~ gop l
|
?~ gop l
|
||||||
=. l [[%story nom %status p.i.rem p.i.gop %full q.i.gop] l]
|
=* who p.i.gop
|
||||||
|
=* sat q.i.gop
|
||||||
|
:: only make a delta if it actually changed.
|
||||||
|
=? l !=(`sat (~(get by hav) who))
|
||||||
|
[[%story nom %status wer who %full sat] l]
|
||||||
$(gop t.gop)
|
$(gop t.gop)
|
||||||
$(rem t.rem)
|
$(rem t.rem)
|
||||||
::TODO below eats state?
|
::
|
||||||
::%+ roll ~(tap by rem.pes)
|
|
||||||
::|= {{c/circle g/group} _self}
|
|
||||||
::%+ roll ~(tap by g)
|
|
||||||
::|= {{w/ship s/status} _self}
|
|
||||||
::(so-delta-our %status c w %full s)
|
|
||||||
:: telegrams
|
:: telegrams
|
||||||
=. self
|
=. self
|
||||||
%_ self
|
%_ self
|
||||||
deltas
|
deltas
|
||||||
%+ welp deltas
|
%+ welp deltas
|
||||||
%- flop
|
%- flop
|
||||||
%+ turn gaz
|
^- (list delta)
|
||||||
|
%+ murn gaz
|
||||||
|= t/telegram
|
|= t/telegram
|
||||||
^- delta
|
^- (unit delta)
|
||||||
:+ %story nom
|
:: in audience, replace above with us.
|
||||||
|
::TODO this really should be done by the sender.
|
||||||
|
=. aud.t
|
||||||
|
=+ dem=[(above our.bol) nom]
|
||||||
|
?. (~(has in aud.t) dem) aud.t
|
||||||
|
=+ (~(del in aud.t) dem)
|
||||||
|
(~(put in -) so-cir)
|
||||||
|
=+ num=(~(get by known) uid.t)
|
||||||
|
?: &(?=(^ num) =(t (snag u.num grams))) ~
|
||||||
::TODO this really should have sent us the message
|
::TODO this really should have sent us the message
|
||||||
:: src as well but that's not an easy fix.
|
:: src as well but that's not an easy fix.
|
||||||
:+ %gram [(above our.bol) nom]
|
`[%story nom %gram [(above our.bol) nom] t]
|
||||||
:: in audience, replace above with us.
|
|
||||||
=- t(aud -)
|
|
||||||
=+ (~(del in aud.t) [(above our.bol) nom])
|
|
||||||
(~(put in -) so-cir)
|
|
||||||
==
|
==
|
||||||
::TODO ideally do below, but runtime error
|
|
||||||
::%- so-deltas-our
|
|
||||||
::%+ turn gaz
|
|
||||||
::|= t/telegram
|
|
||||||
::^- delta-story
|
|
||||||
:::- %gram
|
|
||||||
:::: in audience, replace above with us.
|
|
||||||
::=- t(aud -)
|
|
||||||
::=+ (~(del in aud.t) [(above our.bol) nom])
|
|
||||||
::(~(put in -) so-cir)
|
|
||||||
:: inherited flag
|
:: inherited flag
|
||||||
%_(self deltas [[%story nom %inherited &] deltas])
|
%_(self deltas [[%story nom %inherited &] deltas])
|
||||||
::TODO runtime error
|
::TODO runtime error
|
||||||
@ -1046,23 +1165,49 @@
|
|||||||
~? &(?=(^ old) !=(src.u.old src.cof))
|
~? &(?=(^ old) !=(src.u.old src.cof))
|
||||||
%maybe-missing-src-changes
|
%maybe-missing-src-changes
|
||||||
%- so-deltas
|
%- so-deltas
|
||||||
%+ turn
|
=- %+ turn -
|
||||||
%+ weld
|
|= d/diff-config
|
||||||
^- (list delta-story)
|
[%story nom [%config so-cir d]]
|
||||||
?~ old ~
|
^- (list diff-config)
|
||||||
::TODO? what to do about src?
|
::TODO figure out how to deal with src changes here.
|
||||||
:~ ::[%follow | src.u.old]
|
:: %follow will probably behave a bit iffy in some cases.
|
||||||
[%config so-cir %permit | sis.con.u.old]
|
?~ old
|
||||||
==
|
:: if we have no previous config, all diffs apply.
|
||||||
^- (list delta-story)
|
:~ [%caption cap.cof]
|
||||||
:~ ::[%follow & src.cof]
|
[%usage & tag.cof]
|
||||||
[%config so-cir %caption cap.cof]
|
[%filter fit.cof]
|
||||||
[%config so-cir %filter fit.cof]
|
[%secure sec.con.cof]
|
||||||
[%config so-cir %secure sec.con.cof]
|
[%permit & sis.con.cof]
|
||||||
[%config so-cir %permit & sis.con.cof]
|
|
||||||
==
|
==
|
||||||
|= d/delta-story
|
=- (murn - same)
|
||||||
[%story nom d]
|
^- (list (unit diff-config))
|
||||||
|
=* col u.old
|
||||||
|
:: if we have previous config, figure out the changes.
|
||||||
|
:~ ?: =(cap.col cap.cof) ~
|
||||||
|
`[%caption cap.cof]
|
||||||
|
::
|
||||||
|
=+ gon=(~(dif in tag.col) tag.cof)
|
||||||
|
?~ gon ~
|
||||||
|
`[%usage | gon]
|
||||||
|
::
|
||||||
|
=+ new=(~(dif in tag.cof) tag.col)
|
||||||
|
?~ new ~
|
||||||
|
`[%usage & new]
|
||||||
|
::
|
||||||
|
?: =(fit.col fit.cof) ~
|
||||||
|
`[%filter fit.cof]
|
||||||
|
::
|
||||||
|
?: =(sec.con.col sec.con.cof) ~
|
||||||
|
`[%secure sec.con.cof]
|
||||||
|
::
|
||||||
|
=+ gon=(~(dif in sis.con.col) sis.con.cof)
|
||||||
|
?~ gon ~
|
||||||
|
`[%permit | gon]
|
||||||
|
::
|
||||||
|
=+ new=(~(dif in sis.con.cof) sis.con.col)
|
||||||
|
?~ new ~
|
||||||
|
`[%permit & new]
|
||||||
|
==
|
||||||
::
|
::
|
||||||
++ so-sources
|
++ so-sources
|
||||||
:> change source
|
:> change source
|
||||||
@ -1102,6 +1247,17 @@
|
|||||||
?: =(cap cap.shape) +>
|
?: =(cap cap.shape) +>
|
||||||
(so-delta-our %config so-cir %caption cap)
|
(so-delta-our %config so-cir %caption cap)
|
||||||
::
|
::
|
||||||
|
++ so-usage
|
||||||
|
:> add or remove usage tags.
|
||||||
|
::
|
||||||
|
|= {add/? tas/tags}
|
||||||
|
^+ +>
|
||||||
|
=/ sas/tags
|
||||||
|
%. tag.shape
|
||||||
|
?:(add ~(dif in tas) ~(int in tas))
|
||||||
|
?~ sas +>.$
|
||||||
|
(so-delta-our %config so-cir %usage add sas)
|
||||||
|
::
|
||||||
++ so-filter
|
++ so-filter
|
||||||
:> change message rules
|
:> change message rules
|
||||||
:>
|
:>
|
||||||
@ -1187,29 +1343,34 @@
|
|||||||
|= ran/range
|
|= ran/range
|
||||||
^- (list telegram)
|
^- (list telegram)
|
||||||
=+ [num=0 gaz=grams zeg=*(list telegram)]
|
=+ [num=0 gaz=grams zeg=*(list telegram)]
|
||||||
:: fill in empty ranges to select all grams.
|
:: fill in empty ranges to select all grams,
|
||||||
|
:: and calculate absolutes for relative places.
|
||||||
=. ran
|
=. ran
|
||||||
?~ ran `[[%ud 0] `[%ud count]]
|
?~ ran `[[%ud 0] `[%ud count]]
|
||||||
?~ tal.u.ran `[hed.u.ran `[%ud count]]
|
=* hed hed.u.ran
|
||||||
|
?~ tal.u.ran `[hed `[%ud count]]
|
||||||
|
=* tal u.tal.u.ran
|
||||||
ran
|
ran
|
||||||
:: never fails, but compiler needs it.
|
:: never fails, but compiler needs it.
|
||||||
?> &(?=(^ ran) ?=(^ tal.u.ran))
|
?> &(?=(^ ran) ?=(^ tal.u.ran))
|
||||||
|
=* hed hed.u.ran
|
||||||
|
=* tal u.tal.u.ran
|
||||||
%- flop
|
%- flop
|
||||||
|- ^- (list telegram)
|
|- ^- (list telegram)
|
||||||
?~ gaz zeg
|
?~ gaz zeg
|
||||||
?: ?- -.u.tal.u.ran :: after the end
|
?: ?- -.tal :: after the end
|
||||||
$ud (lth +.u.tal.u.ran num)
|
$ud (lth +.tal num)
|
||||||
$da (lth +.u.tal.u.ran wen.i.gaz)
|
$da (lth +.tal wen.i.gaz)
|
||||||
==
|
==
|
||||||
:: if past the river, we're done searching.
|
:: if past the range, we're done searching.
|
||||||
zeg
|
zeg
|
||||||
?: ?- -.hed.u.ran :: before the start
|
?: ?- -.hed :: before the start
|
||||||
$ud (lth num +.hed.u.ran)
|
$ud (lth num +.hed)
|
||||||
$da (lth wen.i.gaz +.hed.u.ran)
|
$da (lth wen.i.gaz +.hed)
|
||||||
==
|
==
|
||||||
:: if before the river, continue onward.
|
:: if before the range, continue onward.
|
||||||
$(num +(num), gaz t.gaz)
|
$(num +(num), gaz t.gaz)
|
||||||
:: if in the river, add this gram and continue.
|
:: if in the range, add this gram and continue.
|
||||||
$(num +(num), gaz t.gaz, zeg [i.gaz zeg])
|
$(num +(num), gaz t.gaz, zeg [i.gaz zeg])
|
||||||
::
|
::
|
||||||
++ so-in-range
|
++ so-in-range
|
||||||
@ -1225,16 +1386,18 @@
|
|||||||
^- {in/? done/?}
|
^- {in/? done/?}
|
||||||
?~ ran [& |]
|
?~ ran [& |]
|
||||||
=/ min
|
=/ min
|
||||||
?- -.hed.u.ran
|
=* hed hed.u.ran
|
||||||
$ud (gth count +.hed.u.ran)
|
?- -.hed
|
||||||
$da (gth now.bol +.hed.u.ran)
|
$ud (gth count +.hed)
|
||||||
|
$da (gth now.bol +.hed)
|
||||||
==
|
==
|
||||||
?~ tal.u.ran
|
?~ tal.u.ran
|
||||||
[min |]
|
[min |]
|
||||||
=- [&(min -) !-]
|
=- [&(min -) !-]
|
||||||
?- -.u.tal.u.ran
|
=* tal u.tal.u.ran
|
||||||
$ud (gte +(+.u.tal.u.ran) count)
|
?- -.tal
|
||||||
$da (gte +.u.tal.u.ran now.bol)
|
$ud (gte +(+.tal) count)
|
||||||
|
$da (gte +.tal now.bol)
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
:> #
|
:> #
|
||||||
@ -1361,14 +1524,6 @@
|
|||||||
=/ sus/(set ship)
|
=/ sus/(set ship)
|
||||||
%. sis.con.shape
|
%. sis.con.shape
|
||||||
?:(add ~(dif in sis) ~(int in sis))
|
?:(add ~(dif in sis) ~(int in sis))
|
||||||
=. +>.$
|
|
||||||
:: if banishing: notify only those affected.
|
|
||||||
:: if inviting: notify all targets.
|
|
||||||
=? sis !inv sus
|
|
||||||
=- (so-act [%phrase - [%inv inv so-cir]~])
|
|
||||||
%- ~(rep in `(set ship)`sis)
|
|
||||||
|= {s/ship a/audience}
|
|
||||||
(~(put in a) [s %inbox])
|
|
||||||
?~ sus +>.$
|
?~ sus +>.$
|
||||||
:: if banished, remove their presences.
|
:: if banished, remove their presences.
|
||||||
=? +>.$ !inv
|
=? +>.$ !inv
|
||||||
@ -2173,9 +2328,9 @@
|
|||||||
:: only auto-federate channels for now.
|
:: only auto-federate channels for now.
|
||||||
?. ?=($channel sec.con.shape.s) ~
|
?. ?=($channel sec.con.shape.s) ~
|
||||||
:+ ~ n
|
:+ ~ n
|
||||||
:: share no more than 2k messages at once, for performance reasons.
|
:: share no more than the last 100, for performance reasons.
|
||||||
:+ ?: (lte count.s 2.000) grams.s
|
:+ ?: (lte count.s 100) grams.s
|
||||||
(slag (sub count.s 2.000) grams.s)
|
(slag (sub count.s 100) grams.s)
|
||||||
[shape.s mirrors.s]
|
[shape.s mirrors.s]
|
||||||
[locals.s remotes.s]
|
[locals.s remotes.s]
|
||||||
::
|
::
|
||||||
@ -2290,6 +2445,7 @@
|
|||||||
?+ -.det %hasnot
|
?+ -.det %hasnot
|
||||||
$gram %grams
|
$gram %grams
|
||||||
$new %config-l
|
$new %config-l
|
||||||
|
$remove %config-l
|
||||||
$config ?: =(cir.det [our.bol nom])
|
$config ?: =(cir.det [our.bol nom])
|
||||||
%config-l %config-r
|
%config-l %config-r
|
||||||
$status ?: =(cir.det [our.bol nom])
|
$status ?: =(cir.det [our.bol nom])
|
||||||
@ -2361,9 +2517,9 @@
|
|||||||
$report
|
$report
|
||||||
:: only send changes we didn't get from above.
|
:: only send changes we didn't get from above.
|
||||||
?: =(src.bol (above our.bol)) ~
|
?: =(src.bol (above our.bol)) ~
|
||||||
:: only send story reports about grams, status and peers.
|
:: only send story reports about grams and status.
|
||||||
?. ?=($story -.det) ~
|
?. ?=($story -.det) ~
|
||||||
?. ?=(?($gram $status $peer) -.det.det) ~
|
?. ?=(?($gram $status) -.det.det) ~
|
||||||
=+ soy=(~(got by stories) nom.det)
|
=+ soy=(~(got by stories) nom.det)
|
||||||
:: and only if the story is inherited.
|
:: and only if the story is inherited.
|
||||||
?. inherited.soy ~
|
?. inherited.soy ~
|
||||||
@ -2382,10 +2538,15 @@
|
|||||||
?. =(nom.qer nom.det) ~
|
?. =(nom.qer nom.det) ~
|
||||||
?. %- circle-feel-story
|
?. %- circle-feel-story
|
||||||
[wer.qer wat.qer nom.det det.det] ~
|
[wer.qer wat.qer nom.det det.det] ~
|
||||||
=/ sor (~(got by stories) nom.qer)
|
?. ?| ?=($remove -.det.det)
|
||||||
?. =< in %. ran.qer
|
::
|
||||||
~(so-in-range so:ta nom.qer ~ sor) ~
|
=< in %. ran.qer
|
||||||
?. ?=(?($gram $new $config $status) -.det.det) ~
|
=+ soy=(~(got by stories) nom.qer)
|
||||||
|
~(so-in-range so:ta nom.qer ~ soy)
|
||||||
|
==
|
||||||
|
~
|
||||||
|
=+ out=?($gram $new $config $status $remove)
|
||||||
|
?. ?=(out -.det.det) ~
|
||||||
:+ ~ %circle
|
:+ ~ %circle
|
||||||
?+ det.det det.det
|
?+ det.det det.det
|
||||||
{$gram *}
|
{$gram *}
|
||||||
@ -2639,11 +2800,10 @@
|
|||||||
|= pax/path
|
|= pax/path
|
||||||
^- (quip move _+>)
|
^- (quip move _+>)
|
||||||
%- pre-bake
|
%- pre-bake
|
||||||
:_ ~
|
|
||||||
=+ qer=(path-to-query %circle pax)
|
=+ qer=(path-to-query %circle pax)
|
||||||
?> ?=($circle -.qer)
|
?> ?=($circle -.qer)
|
||||||
:+ %story nom.qer
|
?. (~(has by stories) nom.qer) ~
|
||||||
[%peer | src.bol qer]
|
[%story nom.qer %peer | src.bol qer]~
|
||||||
::
|
::
|
||||||
++ reap
|
++ reap
|
||||||
:> subscription n/ack
|
:> subscription n/ack
|
||||||
|
@ -115,16 +115,12 @@
|
|||||||
::
|
::
|
||||||
::
|
::
|
||||||
++ from-module :: create wrapper
|
++ from-module :: create wrapper
|
||||||
=+ [%module ..$ _abet]:(hood-module)
|
|* _[identity=%module start=..$ finish=_abet]:(hood-module)
|
||||||
|% +- $
|
=- [wrap=- *start] :: usage (wrap handle-arm):from-foo
|
||||||
=> .(+< [identity start finish]=+<)
|
|* handle/_finish
|
||||||
=- [wrap=- $:start] :: usage (wrap handle-arm):from-foo
|
|= a=_+<.handle
|
||||||
=+ handle=finish
|
=. +>.handle (start hid (able identity))
|
||||||
|% +- $
|
(ably (handle a))
|
||||||
|: +<.handle
|
|
||||||
=. +>.handle (start hid (able identity))
|
|
||||||
(ably (handle +<))
|
|
||||||
-- --
|
|
||||||
::
|
::
|
||||||
:: per-module interface wrappers
|
:: per-module interface wrappers
|
||||||
++ from-drum (from-module %drum [..$ _se-abet]:(hood-drum))
|
++ from-drum (from-module %drum [..$ _se-abet]:(hood-drum))
|
||||||
@ -144,6 +140,7 @@
|
|||||||
++ coup-kiln-spam (wrap take-coup-spam):from-kiln
|
++ coup-kiln-spam (wrap take-coup-spam):from-kiln
|
||||||
++ diff-sole-effect-drum-phat (wrap diff-sole-effect-phat):from-drum
|
++ diff-sole-effect-drum-phat (wrap diff-sole-effect-phat):from-drum
|
||||||
++ init-helm |=({way/wire *} [~ +>])
|
++ init-helm |=({way/wire *} [~ +>])
|
||||||
|
++ mack-kiln (wrap mack):from-kiln
|
||||||
++ made-write (wrap made):from-write
|
++ made-write (wrap made):from-write
|
||||||
++ made-kiln (wrap take-made):from-kiln
|
++ made-kiln (wrap take-made):from-kiln
|
||||||
++ mere-kiln (wrap take-mere):from-kiln
|
++ mere-kiln (wrap take-mere):from-kiln
|
||||||
@ -197,6 +194,7 @@
|
|||||||
++ poke-kiln-overload (wrap poke-overload):from-kiln
|
++ poke-kiln-overload (wrap poke-overload):from-kiln
|
||||||
++ poke-kiln-unmount (wrap poke-unmount):from-kiln
|
++ poke-kiln-unmount (wrap poke-unmount):from-kiln
|
||||||
++ poke-kiln-unsync (wrap poke-unsync):from-kiln
|
++ poke-kiln-unsync (wrap poke-unsync):from-kiln
|
||||||
|
++ poke-kiln-permission (wrap poke-permission):from-kiln
|
||||||
++ poke-womb-invite (wrap poke-invite):from-womb
|
++ poke-womb-invite (wrap poke-invite):from-womb
|
||||||
++ poke-womb-save (wrap poke-save):from-womb
|
++ poke-womb-save (wrap poke-save):from-womb
|
||||||
++ poke-womb-obey (wrap poke-obey):from-womb
|
++ poke-womb-obey (wrap poke-obey):from-womb
|
||||||
|
108
app/talk.hoon
108
app/talk.hoon
@ -29,9 +29,10 @@
|
|||||||
|%
|
|%
|
||||||
++ state :> application state
|
++ state :> application state
|
||||||
$: :: messaging state ::
|
$: :: messaging state ::
|
||||||
count/@ud :< (lent grams)
|
|
||||||
grams/(list telegram) :< all history
|
grams/(list telegram) :< all history
|
||||||
known/(map serial @ud) :< messages heard
|
known/(map serial @ud) :< messages heard
|
||||||
|
last/@ud :< last heard
|
||||||
|
count/@ud :< (lent grams)
|
||||||
sources/(set circle) :< our subscriptions
|
sources/(set circle) :< our subscriptions
|
||||||
:: circle details ::
|
:: circle details ::
|
||||||
remotes/(map circle group) :< remote presences
|
remotes/(map circle group) :< remote presences
|
||||||
@ -112,7 +113,7 @@
|
|||||||
:> #
|
:> #
|
||||||
:> functional cores and arms.
|
:> functional cores and arms.
|
||||||
::
|
::
|
||||||
|_ {bol/bowl:gall state}
|
|_ {bol/bowl:gall $1 state}
|
||||||
::
|
::
|
||||||
:> # %transition
|
:> # %transition
|
||||||
:> prep transition
|
:> prep transition
|
||||||
@ -121,11 +122,74 @@
|
|||||||
++ prep
|
++ prep
|
||||||
:> adapts state
|
:> adapts state
|
||||||
::
|
::
|
||||||
|= old/(unit state)
|
=> |%
|
||||||
|
++ states
|
||||||
|
$%({$1 s/state} {$0 s/state-0})
|
||||||
|
::
|
||||||
|
++ state-0
|
||||||
|
(cork state |=(a/state a(mirrors (~(run by mirrors.a) config-0))))
|
||||||
|
++ config-0
|
||||||
|
{src/(set source-0) cap/cord tag/tags fit/filter con/control}
|
||||||
|
++ source-0
|
||||||
|
{cir/circle ran/range-0}
|
||||||
|
++ range-0
|
||||||
|
%- unit
|
||||||
|
$: hed/place-0
|
||||||
|
tal/(unit place-0)
|
||||||
|
==
|
||||||
|
++ place-0
|
||||||
|
$% {$da @da}
|
||||||
|
{$ud @ud}
|
||||||
|
{$sd @sd}
|
||||||
|
==
|
||||||
|
--
|
||||||
|
=| mos/(list move)
|
||||||
|
|= old/(unit states)
|
||||||
^- (quip move _..prep)
|
^- (quip move _..prep)
|
||||||
?~ old
|
?~ old
|
||||||
ta-done:ta-init:ta
|
ta-done:ta-init:ta
|
||||||
[~ ..prep(+<+ u.old)]
|
?- -.u.old
|
||||||
|
$1
|
||||||
|
[mos ..prep(+<+ u.old)]
|
||||||
|
::
|
||||||
|
$0
|
||||||
|
=. mos [[ost.bol %pull /server/inbox server ~] peer-inbox mos]
|
||||||
|
=- $(old `[%1 s.u.old(mirrors -)])
|
||||||
|
|^
|
||||||
|
(~(run by mirrors.s.u.old) prep-config)
|
||||||
|
::
|
||||||
|
++ prep-config
|
||||||
|
|= cof/config-0
|
||||||
|
^- config
|
||||||
|
%= cof
|
||||||
|
src
|
||||||
|
%- ~(gas in *(set source))
|
||||||
|
(murn ~(tap in src.cof) prep-source)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ prep-source
|
||||||
|
|= src/source-0
|
||||||
|
^- (unit source)
|
||||||
|
=+ nan=(prep-range ran.src)
|
||||||
|
?~ nan
|
||||||
|
~& [%forgetting-source src]
|
||||||
|
~
|
||||||
|
`src(ran u.nan)
|
||||||
|
::
|
||||||
|
++ prep-range
|
||||||
|
|= ran/range-0
|
||||||
|
^- (unit range)
|
||||||
|
?~ ran `ran
|
||||||
|
:: ranges with a relative end aren't stored because they end
|
||||||
|
:: immediately, so if we find one we can safely discard it.
|
||||||
|
?: ?=({$~ {$sd @sd}} tal.u.ran) ~
|
||||||
|
:: we replace relative range starts with the current date.
|
||||||
|
:: this is practically correct.
|
||||||
|
?: ?=({$sd @sd} hed.u.ran)
|
||||||
|
`ran(hed.u [%da now.bol])
|
||||||
|
`ran
|
||||||
|
--
|
||||||
|
==
|
||||||
::
|
::
|
||||||
:> #
|
:> #
|
||||||
:> # %utility
|
:> # %utility
|
||||||
@ -218,7 +282,10 @@
|
|||||||
server
|
server
|
||||||
::
|
::
|
||||||
%+ welp /circle/[inbox]/grams/config/group
|
%+ welp /circle/[inbox]/grams/config/group
|
||||||
?:(=(0 count) ~ [(scot %ud count) ~])
|
?. =(0 count)
|
||||||
|
[(scot %ud last) ~]
|
||||||
|
=+ history-days=~d5
|
||||||
|
[(scot %da (sub now.bol history-days)) ~]
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
:> #
|
:> #
|
||||||
@ -359,7 +426,7 @@
|
|||||||
~&([%unexpected-circle-rumor -.rum] +>)
|
~&([%unexpected-circle-rumor -.rum] +>)
|
||||||
::
|
::
|
||||||
$gram
|
$gram
|
||||||
(ta-learn gam.nev.rum)
|
(ta-open nev.rum)
|
||||||
::
|
::
|
||||||
$config
|
$config
|
||||||
=+ cur=(fall (~(get by mirrors) cir.rum) *config)
|
=+ cur=(fall (~(get by mirrors) cir.rum) *config)
|
||||||
@ -445,15 +512,16 @@
|
|||||||
::
|
::
|
||||||
|= nes/(list envelope)
|
|= nes/(list envelope)
|
||||||
^+ +>
|
^+ +>
|
||||||
(ta-lesson (turn nes tail))
|
?~ nes +>
|
||||||
|
$(nes t.nes, +> (ta-open i.nes))
|
||||||
::
|
::
|
||||||
++ ta-lesson
|
++ ta-open
|
||||||
:> learn all telegrams in a list.
|
:> learn message from an envelope.
|
||||||
::
|
::
|
||||||
|= gaz/(list telegram)
|
|= nev/envelope
|
||||||
^+ +>
|
^+ +>
|
||||||
?~ gaz +>
|
=? last (gth num.nev last) num.nev
|
||||||
$(gaz t.gaz, +> (ta-learn i.gaz))
|
(ta-learn gam.nev)
|
||||||
::
|
::
|
||||||
++ ta-learn
|
++ ta-learn
|
||||||
:> save/update message
|
:> save/update message
|
||||||
@ -687,7 +755,7 @@
|
|||||||
;~ pose
|
;~ pose
|
||||||
(cold [%da now.bol] (jest 'now'))
|
(cold [%da now.bol] (jest 'now'))
|
||||||
(stag %da (drat hed))
|
(stag %da (drat hed))
|
||||||
(stag %ud dem:ag)
|
placer
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ rang :< subscription range
|
++ rang :< subscription range
|
||||||
@ -1180,7 +1248,11 @@
|
|||||||
::
|
::
|
||||||
|= {inv/? nom/name sis/(set ship)}
|
|= {inv/? nom/name sis/(set ship)}
|
||||||
^+ ..sh-work
|
^+ ..sh-work
|
||||||
(sh-act %permit nom inv sis)
|
=. ..sh-work (sh-act %permit nom inv sis)
|
||||||
|
=- (sh-act %phrase - [%inv inv [self nom]]~)
|
||||||
|
%- ~(rep in sis)
|
||||||
|
|= {s/ship a/audience}
|
||||||
|
(~(put in a) [s %inbox])
|
||||||
::
|
::
|
||||||
++ filter
|
++ filter
|
||||||
|= {nom/name cus/? utf/?}
|
|= {nom/name cus/? utf/?}
|
||||||
@ -1828,6 +1900,7 @@
|
|||||||
$(dif [%filter fit.cof.dif])
|
$(dif [%filter fit.cof.dif])
|
||||||
?: ?=($remove -.dif)
|
?: ?=($remove -.dif)
|
||||||
(sh-note (weld "rip " (~(cr-show cr cir) ~)))
|
(sh-note (weld "rip " (~(cr-show cr cir) ~)))
|
||||||
|
?: ?=($usage -.dif) +>
|
||||||
%- sh-note
|
%- sh-note
|
||||||
%+ weld
|
%+ weld
|
||||||
(weld ~(cr-phat cr cir) ": ")
|
(weld ~(cr-phat cr cir) ": ")
|
||||||
@ -2339,9 +2412,8 @@
|
|||||||
?: pat.sep " "
|
?: pat.sep " "
|
||||||
=- (weld - q:(fall pre [p=| q=" "]))
|
=- (weld - q:(fall pre [p=| q=" "]))
|
||||||
%~ ar-glyf ar
|
%~ ar-glyf ar
|
||||||
?: =(who self) aud
|
?: =(who self) aud
|
||||||
(~(del in aud) [who %inbox])
|
(~(del in aud) [who %inbox])
|
||||||
==
|
|
||||||
=/ lis/(list tape)
|
=/ lis/(list tape)
|
||||||
%+ simple-wrap
|
%+ simple-wrap
|
||||||
`tape``(list @)`(tuba (trip msg.sep))
|
`tape``(list @)`(tuba (trip msg.sep))
|
||||||
@ -2445,7 +2517,7 @@
|
|||||||
==
|
==
|
||||||
?: =(a 'reset')
|
?: =(a 'reset')
|
||||||
~& 'full reset incoming, hold on to your cli...'
|
~& 'full reset incoming, hold on to your cli...'
|
||||||
:_ +>(grams ~, known ~, count 0)
|
:_ +>(grams ~, known ~, count 0, last 0)
|
||||||
:~ [ost.bol %pull /server/client server ~]
|
:~ [ost.bol %pull /server/client server ~]
|
||||||
[ost.bol %pull /server/inbox server ~]
|
[ost.bol %pull /server/inbox server ~]
|
||||||
peer-client
|
peer-client
|
||||||
|
162
app/test.hoon
Normal file
162
app/test.hoon
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
::
|
||||||
|
|%
|
||||||
|
++ test
|
||||||
|
$% [%arvo ~] ::UNIMPLEMENTED
|
||||||
|
[%marks ~] ::UNIMPLEMENTED
|
||||||
|
[%cores p=path]
|
||||||
|
[%hoons p=path]
|
||||||
|
[%names p=path]
|
||||||
|
[%renders p=path]
|
||||||
|
==
|
||||||
|
--
|
||||||
|
::
|
||||||
|
|%
|
||||||
|
++ join
|
||||||
|
|= {a/cord b/(list cord)}
|
||||||
|
?~ b ''
|
||||||
|
(rap 3 |-([i.b ?~(t.b ~ [a $(b t.b)])]))
|
||||||
|
::
|
||||||
|
++ fake-fcgi [%many [%blob *cred:eyre] $+[%n ~] ~]
|
||||||
|
--
|
||||||
|
::
|
||||||
|
=, gall
|
||||||
|
=, ford
|
||||||
|
=, format
|
||||||
|
|_ {bowl $~}
|
||||||
|
++ peek _~
|
||||||
|
++ report-error
|
||||||
|
|= [a=spur b=(each cage tang)] ^- tang
|
||||||
|
=/ should-fail (~(get by failing) (flop a))
|
||||||
|
?- -.b
|
||||||
|
%&
|
||||||
|
?~ should-fail ~
|
||||||
|
:~ leaf+"warn: expected failure, {<`tape`u.should-fail>}"
|
||||||
|
leaf+"warn: built succesfully"
|
||||||
|
(sell q.p.b)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?^ should-fail
|
||||||
|
~[>[%failed-known `tape`(weld "TODO: " u.should-fail)]<]
|
||||||
|
(flop p.b)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ made-a-core
|
||||||
|
|= {a/spur @uvH b/gage}
|
||||||
|
:_ +>.$
|
||||||
|
?> ?=([%tabl [(each) (each)] ~] b)
|
||||||
|
%- (slog (report-error a p.i.p.b))
|
||||||
|
=/ nex/(list spur)
|
||||||
|
=<(p ;;(,[%& %cont * p=(list spur)] q.i.p.b))
|
||||||
|
?~ nex ~&(%cores-tested ~)
|
||||||
|
[ost (build-core nex)]~
|
||||||
|
::
|
||||||
|
++ build-core
|
||||||
|
|= [a=spur b=(list spur)]
|
||||||
|
~& >> (flop a)
|
||||||
|
:^ %exec a-core+a our
|
||||||
|
%- some
|
||||||
|
^- bilk
|
||||||
|
:- now-beak
|
||||||
|
:~ %tabl
|
||||||
|
[[%core now-beak a] [%$ %cont !>(b)]]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ made-a-rend
|
||||||
|
|= {a/wire @uvH b/gage}
|
||||||
|
?> ?=([ren=mark ~] a)
|
||||||
|
=+ `[ren=term pax=path]`?~(a !! a)
|
||||||
|
:_ +>.$
|
||||||
|
?> ?=([%tabl [(each) (each)] ~] b)
|
||||||
|
%- (slog (report-error /[ren.i.a]/ren p.i.p.b))
|
||||||
|
=/ nex/(list term)
|
||||||
|
=<(p ;;(,[%& %cont * p=(list term)] q.i.p.b))
|
||||||
|
?~ nex ~&(%rens-tested ~)
|
||||||
|
[ost (build-rend nex)]~
|
||||||
|
::
|
||||||
|
++ build-rend
|
||||||
|
|= [a=term b=(list term)]
|
||||||
|
~& >> [%ren a]
|
||||||
|
=/ bem/beam (need (de-beam %/example))
|
||||||
|
=. -.bem now-beak
|
||||||
|
:^ %exec a-rend+/[a] our
|
||||||
|
%- some
|
||||||
|
^- bilk
|
||||||
|
:- -.bem
|
||||||
|
:~ %tabl
|
||||||
|
[`silk`[%bake a fake-fcgi bem] [%$ %cont !>(b)]]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ poke-noun
|
||||||
|
|= a=test
|
||||||
|
:_ +>
|
||||||
|
?- -.a
|
||||||
|
%arvo ~|(%stub !!) ::basically double solid?
|
||||||
|
%hoons ~&((list-hoons p.a ~) ~)
|
||||||
|
%cores [ost (build-core [- +]:(list-hoons p.a skip=(sy /sys /ren ~)))]~
|
||||||
|
%names ~&((list-names p.a) ~)
|
||||||
|
%marks ~|(%stub !!) ::TODO restore historical handler
|
||||||
|
%renders [ost (build-rend [- +]:(list-names (weld /ren p.a)))]~
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ list-names
|
||||||
|
|= a/path ^- (list term)
|
||||||
|
=/ hon (list-hoons a ~)
|
||||||
|
%+ turn hon
|
||||||
|
|= b=spur
|
||||||
|
(join '-' (slag 1 (flop b)))
|
||||||
|
::
|
||||||
|
++ list-hoons
|
||||||
|
|= [under=path skipping=(set spur)] ^- (list spur)
|
||||||
|
=/ sup (flop under)
|
||||||
|
~& [%findining-hoons under=under]
|
||||||
|
|- ^- (list spur)
|
||||||
|
%- zing
|
||||||
|
%+ turn
|
||||||
|
=- (sort ~(tap by -) aor)
|
||||||
|
dir:.^(arch %cy (en-beam now-beak sup))
|
||||||
|
|= [a=knot ~] ^- (list spur)
|
||||||
|
=. sup [a sup]
|
||||||
|
?: (~(has in skipping) (flop sup))
|
||||||
|
~&(> [(flop sup) %out-of-scope] ~)
|
||||||
|
=/ ded (~(get by skip-completely) (flop sup))
|
||||||
|
?^ ded
|
||||||
|
~&(> [(flop sup) %skipped `tape`u.ded] ~)
|
||||||
|
?~ [fil:.^(arch %cy (en-beam now-beak [%hoon sup]))]
|
||||||
|
^$
|
||||||
|
~& (flop sup)
|
||||||
|
[sup ^$]
|
||||||
|
::
|
||||||
|
++ now-beak %_(byk r [%da now])
|
||||||
|
++ skip-completely
|
||||||
|
^~ ^- (map path tape)
|
||||||
|
%- my :~ ::TODO don't hardcode
|
||||||
|
:- /ren/css "not meant to be called outside /web/pack"
|
||||||
|
:- /ren/js "not meant to be called outside /web/pack"
|
||||||
|
:- /ren/run "not meant to be called except on a (different) hoon file"
|
||||||
|
::
|
||||||
|
:- /app/gh "hangs for some reason"
|
||||||
|
:- /mar/gh "hangs for some reason"
|
||||||
|
:- /app/twit "slow and/or crash"
|
||||||
|
:- /gen/twit "slow and/or crash"
|
||||||
|
:- /mar/twit "slow and/or crash"
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ failing
|
||||||
|
^~ ^- (map path tape)
|
||||||
|
%- my :~ ::TODO don't hardcode
|
||||||
|
::
|
||||||
|
:- /app/pipe "wants 'flavor:hall' to exist"
|
||||||
|
:- /gen/capitalize "wants unicode-data/txt"
|
||||||
|
::
|
||||||
|
:- /lib/down-jet/parse "// nonsense"
|
||||||
|
:- /lib/down-jet/rend "// nonsense"
|
||||||
|
:- /lib/hood/kiln "ford can't handle surs from libs"
|
||||||
|
:- /lib/sole "ford can't handle surs from libs"
|
||||||
|
:- /lib/hall "ford can't handle surs from libs"
|
||||||
|
:- /lib/twitter "ford can't handle surs from libs"
|
||||||
|
:- /sys/arvo "BROKEN"
|
||||||
|
:- /sys/vane/jael "expects our"
|
||||||
|
:- /sys/vane/xmas "expects our"
|
||||||
|
==
|
||||||
|
--
|
9
app/test/example.md
Normal file
9
app/test/example.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
comments: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Static
|
||||||
|
|
||||||
|
You can put static files in here to serve them to the web. Actually, you can put static files anywhere in `/web` and see them in a browser.
|
||||||
|
|
||||||
|
Docs on static publishing with urbit are forthcoming — but feel free to drop markdown files in `/web` to try it out.
|
@ -195,11 +195,11 @@
|
|||||||
|= {usr/(unit user:eyre) req/(unit user:eyre)}
|
|= {usr/(unit user:eyre) req/(unit user:eyre)}
|
||||||
?~(req & =(usr req))
|
?~(req & =(usr req))
|
||||||
::
|
::
|
||||||
:: .^(twit-feed %gx /=twit=/~/home/urbit_test)
|
:: /+ twitter
|
||||||
:: .^(twit-stat %gx /=twit=/~./post/0vv0old.0post.hash0.0000)
|
:: .^((list post:twitter) %gx /=twit=/home/urbit_test/twit-feed)
|
||||||
++ peek
|
:: .^(post:twitter %gx /=twit=/post/0vv0old.0post.hash0.0000/twit-feed)
|
||||||
|= {ren/care:clay pax/path} ^- (unit (unit gilt))
|
++ peek-x
|
||||||
?> ?=($x ren) :: others unsupported
|
|= pax/path ^- (unit (unit gilt))
|
||||||
=+ usr=`~. :: =^ usr pax (user-from-path pax)
|
=+ usr=`~. :: =^ usr pax (user-from-path pax)
|
||||||
?. ?=(twit-path pax)
|
?. ?=(twit-path pax)
|
||||||
~|([%missed-path pax] !!)
|
~|([%missed-path pax] !!)
|
||||||
@ -213,7 +213,7 @@
|
|||||||
++ peer-scry-x
|
++ peer-scry-x
|
||||||
|= pax/path ^+ done
|
|= pax/path ^+ done
|
||||||
:_ +>
|
:_ +>
|
||||||
=+ pek=(peek %x pax)
|
=+ pek=(peek-x pax)
|
||||||
?^ pek
|
?^ pek
|
||||||
?~ u.pek ~|(bad-scry+x+pax !!)
|
?~ u.pek ~|(bad-scry+x+pax !!)
|
||||||
~[[ost %diff u.u.pek] [ost %quit ~]]
|
~[[ost %diff u.u.pek] [ost %quit ~]]
|
||||||
|
@ -17,9 +17,21 @@
|
|||||||
~| plural-stub+a ::TODO expand
|
~| plural-stub+a ::TODO expand
|
||||||
%- trip
|
%- trip
|
||||||
%+ snag a ^~
|
%+ snag a ^~
|
||||||
%+ weld
|
;: weld
|
||||||
/no/''/two/three/four/five/six/seven/eight/nine/ten/elven/twelve
|
/no/''/two/three/four/five/six/seven/eight/nine/ten
|
||||||
/thirteen/fourteen/fifteen/sixteen/seventeen/eighteen/nineteen/twenty
|
/eleven/twelve/thirteen/fourteen/fifteen/sixteen
|
||||||
|
/seventeen/eighteen/nineteen/twenty/twenty-one
|
||||||
|
/twenty-two/twenty-three/twenty-four/twenty-five
|
||||||
|
/twenty-six/twenty-seven/twenty-eight/twenty-nine
|
||||||
|
/thirty/thirty-one/thirty-two/thirty-three
|
||||||
|
/thirty-four/thirty-five/thirty-six/thirty-seven
|
||||||
|
/thirty-eight/thirty-nine/forty/forty-one/forty-two
|
||||||
|
/forty-three/forty-four/forty-five/forty-six
|
||||||
|
/forty-seven/forty-eight/forty-nine/fifty/fifty-one
|
||||||
|
/fifty-two/fifty-three/fifty-four/fifty-five
|
||||||
|
/fifty-six/fifty-seven/fifty-eight/fifty-nine/sixty
|
||||||
|
/sixty-one/sixty-two/sixty-three/sixty-four
|
||||||
|
==
|
||||||
::
|
::
|
||||||
++ type $%({$planets planets/@u} {$stars stars/@u})
|
++ type $%({$planets planets/@u} {$stars stars/@u})
|
||||||
--
|
--
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
::
|
::
|
||||||
:- %say
|
:- %say
|
||||||
|= $: {now/@da eny/@uvJ bec/beak}
|
|= $: {now/@da eny/@uvJ bec/beak}
|
||||||
{arg/$@(~ {tym/@dr ~}) ~}
|
{{recur/@dr start/@da ~} ~}
|
||||||
==
|
==
|
||||||
?~ arg $(arg [~h4 ~])
|
[%kiln-overload recur start]
|
||||||
[%kiln-overload tym.arg]
|
|
||||||
|
10
gen/hood/private.hoon
Normal file
10
gen/hood/private.hoon
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
:: Kiln: make (subtree in) desk privately readable.
|
||||||
|
::
|
||||||
|
:::: /gen/hood/private/hoon
|
||||||
|
::
|
||||||
|
:- %say
|
||||||
|
|= $: {now/@da eny/@uvJ bec/beak}
|
||||||
|
{arg/{des/desk may/?($~ {pax/path $~})} $~}
|
||||||
|
==
|
||||||
|
:- %kiln-permission
|
||||||
|
[des ?~(may / pax.may) |]:arg
|
10
gen/hood/public.hoon
Normal file
10
gen/hood/public.hoon
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
:: Kiln: make (subtree in) desk publicly readable.
|
||||||
|
::
|
||||||
|
:::: /gen/hood/public/hoon
|
||||||
|
::
|
||||||
|
:- %say
|
||||||
|
|= $: {now/@da eny/@uvJ bec/beak}
|
||||||
|
{arg/{des/desk may/?($~ {pax/path $~})} $~}
|
||||||
|
==
|
||||||
|
:- %kiln-permission
|
||||||
|
[des ?~(may / pax.may) &]:arg
|
@ -22,18 +22,4 @@
|
|||||||
leaf+"can't create a moon from a {?:(?=($earl ran) "moon" "comet")}"
|
leaf+"can't create a moon from a {?:(?=($earl ran) "moon" "comet")}"
|
||||||
=/ mon (mix (lsh 5 1 (end 5 1 eny)) p.bec)
|
=/ mon (mix (lsh 5 1 (end 5 1 eny)) p.bec)
|
||||||
=/ tic .^(@ /a/(scot %p p.bec)/tick/(scot %da now)/(scot %p mon))
|
=/ tic .^(@ /a/(scot %p p.bec)/tick/(scot %da now)/(scot %p mon))
|
||||||
%+ sole-yo
|
(sole-so [%tang leaf+"ticket: {<`@p`tic>}" leaf+"moon: {<`@p`mon>}" ~])
|
||||||
leaf+"(see https://github.com/urbit/arvo/issues/327 for details)"
|
|
||||||
%+ sole-yo
|
|
||||||
:- %leaf
|
|
||||||
;: weld
|
|
||||||
"WARNING: linking a moon to your "
|
|
||||||
?-(ran $czar "galaxy", $king "star", $duke "planet")
|
|
||||||
" can cause networking bugs"
|
|
||||||
==
|
|
||||||
%+ sole-lo
|
|
||||||
[& %$ "enter y/yes to continue: "]
|
|
||||||
|= inp/tape
|
|
||||||
?. |(=("y" inp) =("yes" inp))
|
|
||||||
(sole-so [%tang leaf+"canceled" ~])
|
|
||||||
(sole-so [%tang leaf+"moon: {<`@p`mon>}; ticket: {<`@p`tic>}" leaf+"" ~])
|
|
||||||
|
@ -10,42 +10,50 @@
|
|||||||
++ test-runner
|
++ test-runner
|
||||||
:> run all tests in {a} with a filter.
|
:> run all tests in {a} with a filter.
|
||||||
=| pax=path
|
=| pax=path
|
||||||
|= [filter=path eny=@uvJ a=tests:tester]
|
|= [filter=path [defer=? eny=@uvJ] a=tests:tester]
|
||||||
^- tang
|
^- tang
|
||||||
%- concat:ls
|
%- concat:ls
|
||||||
%+ turn a
|
%+ turn a
|
||||||
|= b=instance:tester
|
|= b=instance:tester
|
||||||
^- tang
|
^- tang
|
||||||
|
=; tan/tang
|
||||||
|
?: defer tan
|
||||||
|
((slog (flop tan)) ~)
|
||||||
=^ matches filter (match-filter filter p.b)
|
=^ matches filter (match-filter filter p.b)
|
||||||
?. matches
|
?. matches
|
||||||
~
|
~
|
||||||
?- -.q.b
|
?- -.q.b
|
||||||
%& (run-test [p.b pax] eny p.q.b)
|
%&
|
||||||
%| ^$(pax [p.b pax], a p.q.b)
|
(run-test [p.b pax] eny p.q.b)
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
^$(pax [p.b pax], a p.q.b)
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ run-test
|
++ run-test
|
||||||
:> executes an individual test.
|
:> executes an individual test.
|
||||||
|= [pax=path eny=@uvJ test=$-(@uvJ (list tape))]
|
|= [pax=path eny=@uvJ test=$-(@uvJ (list tank))]
|
||||||
^- tang
|
^- tang
|
||||||
=+ name=(spud (flop pax))
|
=+ name=(spud (flop pax))
|
||||||
=+ run=(mule |.((test eny)))
|
=+ run=(mule |.((test eny)))
|
||||||
?- -.run
|
?- -.run
|
||||||
%| :: the stack is already flopped for output?
|
%| :: the stack is already flopped for output?
|
||||||
;: weld
|
;: weld
|
||||||
p:run
|
p.run
|
||||||
`tang`[[%leaf (weld name " CRASHED")] ~]
|
`tang`[[%leaf (weld name " CRASHED")] ~]
|
||||||
==
|
==
|
||||||
%& ?: =(~ p:run)
|
%& ?: =(~ p.run)
|
||||||
[[%leaf (weld name " OK")] ~]
|
[[%leaf (weld name " OK")] ~]
|
||||||
:: Create a welded list of all failures indented.
|
:: Create a welded list of all failures indented.
|
||||||
%- flop
|
%- flop
|
||||||
;: weld
|
;: weld
|
||||||
`tang`[[%leaf (weld name " FAILED")] ~]
|
`tang`[[%leaf (weld name " FAILED")] ~]
|
||||||
%+ turn p:run
|
::TODO indent
|
||||||
|= {i/tape}
|
:: %+ turn p:run
|
||||||
^- tank
|
:: |= {i/tape}
|
||||||
[%leaf (weld " " i)]
|
:: ^- tank
|
||||||
|
:: [%leaf (weld " " i)]
|
||||||
|
p.run
|
||||||
==
|
==
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
@ -62,10 +70,11 @@
|
|||||||
:- %say
|
:- %say
|
||||||
|= $: [now=@da eny=@uvJ bec=beak]
|
|= $: [now=@da eny=@uvJ bec=beak]
|
||||||
[filter=$?(~ [pax=path ~])]
|
[filter=$?(~ [pax=path ~])]
|
||||||
~
|
[defer=_& seed=?(~ @uvJ)]
|
||||||
==
|
==
|
||||||
|
~? !defer %test-compiled
|
||||||
:- %tang
|
:- %tang
|
||||||
%^ test-runner
|
%^ test-runner
|
||||||
?~ filter ~ pax.filter
|
?~(filter ~ pax.filter)
|
||||||
eny
|
[defer ?~(seed eny seed)]
|
||||||
(test-map-to-test-list:tester all-tests)
|
(test-map-to-test-list:tester all-tests)
|
||||||
|
@ -11,4 +11,4 @@
|
|||||||
|= $: {now/@da eny/@uvJ bec/beak}
|
|= $: {now/@da eny/@uvJ bec/beak}
|
||||||
{{who/knot msg/cord ~} ~}
|
{{who/knot msg/cord ~} ~}
|
||||||
==
|
==
|
||||||
[%twit-do [who %post eny msg]]
|
[%twit-do [who %post `@uvI`(rsh 8 1 eny) msg]]
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|= $: {now/@da eny/@uvJ bek/beak}
|
|= $: {now/@da eny/@uvJ bek/beak}
|
||||||
{{who/iden ~} typ/?($user $home)}
|
{{who/iden ~} typ/?($user $home)}
|
||||||
==
|
==
|
||||||
=+ pax=/(scot %p p.bek)/twit/(scot %da now)/[typ]/[who]
|
=+ pax=/(scot %p p.bek)/twit/(scot %da now)/[typ]/[who]/twit-feed
|
||||||
:- %tang
|
:- %tang
|
||||||
%+ turn (flop .^((list post:twitter) %gx pax))
|
%+ turn (flop .^((list post:twitter) %gx pax))
|
||||||
|= post:twitter ^- tank
|
|= post:twitter ^- tank
|
||||||
|
@ -178,6 +178,7 @@
|
|||||||
$full (conf cof.a)
|
$full (conf cof.a)
|
||||||
$source (pairs add+b+add.a src+(sorc src.a) ~)
|
$source (pairs add+b+add.a src+(sorc src.a) ~)
|
||||||
$caption s+cap.a
|
$caption s+cap.a
|
||||||
|
$usage (pairs add+b+add.a tas+(sa tas.a cord) ~)
|
||||||
$filter (filt fit.a)
|
$filter (filt fit.a)
|
||||||
$secure s+sec.a
|
$secure s+sec.a
|
||||||
$permit (pairs add+b+add.a sis+(sa sis.a ship) ~)
|
$permit (pairs add+b+add.a sis+(sa sis.a ship) ~)
|
||||||
@ -229,6 +230,7 @@
|
|||||||
%- pairs :~
|
%- pairs :~
|
||||||
src+(sa src.a sorc)
|
src+(sa src.a sorc)
|
||||||
cap+s+cap.a
|
cap+s+cap.a
|
||||||
|
tag+(sa tag.a cord)
|
||||||
fit+(filt fit.a)
|
fit+(filt fit.a)
|
||||||
con+(cont con.a)
|
con+(cont con.a)
|
||||||
==
|
==
|
||||||
@ -425,6 +427,7 @@
|
|||||||
%- of :~
|
%- of :~
|
||||||
full+conf
|
full+conf
|
||||||
source+(ot add+bo src+sorc ~)
|
source+(ot add+bo src+sorc ~)
|
||||||
|
usage+(ot add+bo tas+(as so) ~)
|
||||||
caption+so
|
caption+so
|
||||||
filter+filt
|
filter+filt
|
||||||
secure+secu
|
secure+secu
|
||||||
@ -469,6 +472,7 @@
|
|||||||
%- ot :~
|
%- ot :~
|
||||||
src+(as sorc)
|
src+(as sorc)
|
||||||
cap+so
|
cap+so
|
||||||
|
tag+(as so)
|
||||||
fit+filt
|
fit+filt
|
||||||
con+cont
|
con+cont
|
||||||
==
|
==
|
||||||
|
@ -66,10 +66,19 @@
|
|||||||
|= ran/range
|
|= ran/range
|
||||||
^- path
|
^- path
|
||||||
?~ ran ~
|
?~ ran ~
|
||||||
%+ welp
|
:- (place-to-knot hed.u.ran)
|
||||||
/(scot -.hed.u.ran +.hed.u.ran)
|
|
||||||
?~ tal.u.ran ~
|
?~ tal.u.ran ~
|
||||||
/(scot -.u.tal.u.ran +.u.tal.u.ran)
|
[(place-to-knot u.tal.u.ran) ~]
|
||||||
|
::
|
||||||
|
++ place-to-knot
|
||||||
|
:> msg pointer to path component
|
||||||
|
:>
|
||||||
|
:> turns a place structure into a knot for use in
|
||||||
|
:> subscription paths.
|
||||||
|
::
|
||||||
|
|= pla/place
|
||||||
|
^- knot
|
||||||
|
(scot -.pla +.pla)
|
||||||
::
|
::
|
||||||
++ path-to-range
|
++ path-to-range
|
||||||
:> path to msg range
|
:> path to msg range
|
||||||
@ -80,18 +89,23 @@
|
|||||||
|= pax/path
|
|= pax/path
|
||||||
^- range
|
^- range
|
||||||
?~ pax ~
|
?~ pax ~
|
||||||
|
=/ hes/(unit place) (rush i.pax placer)
|
||||||
:: skip past non-number parts of path.
|
:: skip past non-number parts of path.
|
||||||
?: ?=({~ ~} [(slaw %da i.pax) (slaw %ud i.pax)])
|
?~ hes $(pax t.pax)
|
||||||
$(pax t.pax)
|
:+ ~ u.hes
|
||||||
:+ ~
|
|
||||||
=+ hed=(slaw %da i.pax)
|
|
||||||
?^ hed [%da u.hed]
|
|
||||||
[%ud (slav %ud i.pax)]
|
|
||||||
?~ t.pax ~
|
?~ t.pax ~
|
||||||
:- ~
|
(rush i.t.pax placer)
|
||||||
=+ tal=(slaw %da i.t.pax)
|
::
|
||||||
?^ tal [%da u.tal]
|
++ placer
|
||||||
[%ud (slav %ud i.t.pax)]
|
:> parse a range place
|
||||||
|
;~ pose
|
||||||
|
(stag %ud dem:ag)
|
||||||
|
::
|
||||||
|
=- (stag %da (sear - ;~(pfix sig crub:so)))
|
||||||
|
|= a/dime
|
||||||
|
^- (unit @da)
|
||||||
|
?:(?=($da p.a) `q.a ~)
|
||||||
|
==
|
||||||
::
|
::
|
||||||
++ change-glyphs :< ...
|
++ change-glyphs :< ...
|
||||||
::
|
::
|
||||||
@ -126,6 +140,15 @@
|
|||||||
$caption cof(cap cap.dif)
|
$caption cof(cap cap.dif)
|
||||||
$filter cof(fit fit.dif)
|
$filter cof(fit fit.dif)
|
||||||
$remove cof
|
$remove cof
|
||||||
|
::
|
||||||
|
$usage
|
||||||
|
%= cof
|
||||||
|
tag
|
||||||
|
%. tas.dif
|
||||||
|
?: add.dif
|
||||||
|
~(uni in tag.cof)
|
||||||
|
~(dif in tag.cof)
|
||||||
|
==
|
||||||
::
|
::
|
||||||
$source
|
$source
|
||||||
%= cof
|
%= cof
|
||||||
|
@ -392,8 +392,9 @@
|
|||||||
++ se-show :: show buffer, raw
|
++ se-show :: show buffer, raw
|
||||||
|= lin/(pair @ud stub)
|
|= lin/(pair @ud stub)
|
||||||
^+ +>
|
^+ +>
|
||||||
|
=. p.lin (add p.lin (lent-stye:klr q.lin))
|
||||||
?: =(mir lin) +>
|
?: =(mir lin) +>
|
||||||
=. +> ?:(=(p.mir p.lin) +> (se-blit %hop (add p.lin (lent-stye:klr q.lin))))
|
=. +> ?:(=(p.mir p.lin) +> (se-blit %hop p.lin))
|
||||||
=. +> ?:(=(q.mir q.lin) +> (se-blit %pom q.lin))
|
=. +> ?:(=(q.mir q.lin) +> (se-blit %pom q.lin))
|
||||||
+>(mir lin)
|
+>(mir lin)
|
||||||
::
|
::
|
||||||
@ -401,13 +402,13 @@
|
|||||||
|= {pom/stub lin/(pair @ud (list @c))}
|
|= {pom/stub lin/(pair @ud (list @c))}
|
||||||
^+ +>
|
^+ +>
|
||||||
=/ pol (lent-char:klr pom)
|
=/ pol (lent-char:klr pom)
|
||||||
=/ end (sub edg pol)
|
|
||||||
=/ pos (add pol p.lin)
|
=/ pos (add pol p.lin)
|
||||||
?: (gte (div (mul pol 100) edg) 35) :: old style (long prompt)
|
?: (gte (div (mul pol 100) edg) 35) :: old style (long prompt)
|
||||||
=/ off ?:((lte p.lin end) 0 (sub p.lin end))
|
=/ off ?:((lte pos edg) 0 (sub pos edg))
|
||||||
%+ se-show
|
%+ se-show
|
||||||
(sub pos off)
|
(sub pos off)
|
||||||
(swag:klr [off edg] (welp pom [*stye q.lin]~))
|
(swag:klr [off edg] (welp pom [*stye q.lin]~))
|
||||||
|
=/ end (sub edg pol)
|
||||||
=. off ?: (gth p.lin (add end off))
|
=. off ?: (gth p.lin (add end off))
|
||||||
(sub p.lin end)
|
(sub p.lin end)
|
||||||
?: (lth p.lin off)
|
?: (lth p.lin off)
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
{$dirk wire @tas} ::
|
{$dirk wire @tas} ::
|
||||||
{$ogre wire $@(@tas beam)} ::
|
{$ogre wire $@(@tas beam)} ::
|
||||||
{$merg wire @p @tas @p @tas case germ} ::
|
{$merg wire @p @tas @p @tas case germ} ::
|
||||||
|
{$perm wire ship desk path rite} ::
|
||||||
{$poke wire dock pear} ::
|
{$poke wire dock pear} ::
|
||||||
{$wipe wire @p ~} ::
|
{$wipe wire @p ~} ::
|
||||||
{$wait wire @da} ::
|
{$wait wire @da} ::
|
||||||
@ -185,6 +186,12 @@
|
|||||||
=+ old=;;((map @da cord) (fall (file where) ~))
|
=+ old=;;((map @da cord) (fall (file where) ~))
|
||||||
`(foal where %sched !>((~(put by old) tym eve)))
|
`(foal where %sched !>((~(put by old) tym eve)))
|
||||||
::
|
::
|
||||||
|
++ poke-permission
|
||||||
|
|= {syd/desk pax/path pub/?}
|
||||||
|
=< abet
|
||||||
|
%^ emit %perm /kiln/permission
|
||||||
|
[our syd pax %r ~ ?:(pub %black %white) ~]
|
||||||
|
::
|
||||||
++ poke-autoload |=(lod/(unit ?) abet:(poke:autoload lod))
|
++ poke-autoload |=(lod/(unit ?) abet:(poke:autoload lod))
|
||||||
++ poke-start-autoload |=(~ abet:start:autoload)
|
++ poke-start-autoload |=(~ abet:start:autoload)
|
||||||
::
|
::
|
||||||
@ -262,11 +269,18 @@
|
|||||||
--
|
--
|
||||||
::
|
::
|
||||||
++ poke-overload
|
++ poke-overload
|
||||||
|= tym/@dr
|
:> +poke-overload: wipes ford cache at {start}, and then every {recur}.
|
||||||
abet:(emit %wait /kiln/overload/(scot %dr tym) (add ~s10 now))
|
|= [recur=@dr start=@da]
|
||||||
|
?> (gte start now)
|
||||||
|
abet:(emit %wait /kiln/overload/(scot %dr recur) start)
|
||||||
::
|
::
|
||||||
++ poke-wipe-ford |=(~ abet:(emit %wipe /kiln our ~))
|
++ poke-wipe-ford |=(~ abet:(emit %wipe /kiln our ~))
|
||||||
::
|
::
|
||||||
|
++ mack
|
||||||
|
|= {way/wire saw/(unit tang)}
|
||||||
|
~? ?=(^ saw) [%kiln-nack u.saw]
|
||||||
|
abet
|
||||||
|
::
|
||||||
++ take |=(way/wire ?>(?=({@ ~} way) (work i.way))) :: general handler
|
++ take |=(way/wire ?>(?=({@ ~} way) (work i.way))) :: general handler
|
||||||
++ take-mere ::
|
++ take-mere ::
|
||||||
|= {way/wire are/(each (set path) (pair term tang))}
|
|= {way/wire are/(each (set path) (pair term tang))}
|
||||||
@ -274,6 +288,14 @@
|
|||||||
::
|
::
|
||||||
++ take-made ::
|
++ take-made ::
|
||||||
|= {way/wire dep/@uvH reg/gage:ford}
|
|= {way/wire dep/@uvH reg/gage:ford}
|
||||||
|
:: hack for |overload
|
||||||
|
::
|
||||||
|
:: We might have gotten an ignorable response back for our cache priming
|
||||||
|
:: ford call. If it matches our magic wire, ignore it.
|
||||||
|
::
|
||||||
|
?: =(/prime/cache way)
|
||||||
|
~& %cache-primed
|
||||||
|
abet
|
||||||
abet:abet:(made:(take way) dep reg)
|
abet:abet:(made:(take way) dep reg)
|
||||||
::
|
::
|
||||||
++ take-coup-fancy ::
|
++ take-coup-fancy ::
|
||||||
@ -319,6 +341,19 @@
|
|||||||
|= {way/wire ~}
|
|= {way/wire ~}
|
||||||
?> ?=({@ ~} way)
|
?> ?=({@ ~} way)
|
||||||
=+ tym=(slav %dr i.way)
|
=+ tym=(slav %dr i.way)
|
||||||
|
:: this builds up a ford build for the front page to prime the cache.
|
||||||
|
=. +>.$
|
||||||
|
=/ request-data :~
|
||||||
|
[0 [0 8.080] 0 'localhost' ~]
|
||||||
|
:: associate 0 as the anonymous ship, which is the ++add result.
|
||||||
|
[[0 (scot %p (add our ^~((bex 64))))] ~ ~]
|
||||||
|
'not-yet-implemented'
|
||||||
|
`'en-US,en;q=0.9'
|
||||||
|
`.127.0.0.1
|
||||||
|
==
|
||||||
|
=/ monies/coin [%many ~[[%blob request-data] [%$ ~.n 0]]]
|
||||||
|
=/ request/silk:ford [%bake %urb monies [our %home [%da now]] /web]
|
||||||
|
(emit `card`[%exec /kiln/prime/cache our `[[our %home [%da now]] request]])
|
||||||
=. +>.$
|
=. +>.$
|
||||||
(emit %wipe /kiln/overload/[i.way] our ~)
|
(emit %wipe /kiln/overload/[i.way] our ~)
|
||||||
=. +>.$
|
=. +>.$
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
|= {a/purl b/quay} ^- hiss
|
|= {a/purl b/quay} ^- hiss
|
||||||
=. b (quay:hep-to-cab b)
|
=. b (quay:hep-to-cab b)
|
||||||
=- [a %post - ?~(b ~ (some (as-octt +:(tail:en-purl:html b))))]
|
=- [a %post - ?~(b ~ (some (as-octt +:(tail:en-purl:html b))))]
|
||||||
(my content-type+['application/x-www-form-en-urlt:htmlncoded']~ ~)
|
(my content-type+['application/x-www-form-urlencoded']~ ~)
|
||||||
::
|
::
|
||||||
::
|
::
|
||||||
++ mean-wall !.
|
++ mean-wall !.
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
::
|
::
|
||||||
+= instance
|
+= instance
|
||||||
:> a mapping between a term and part of a test tree.
|
:> a mapping between a term and part of a test tree.
|
||||||
(pair term (each $-(@uvJ (list tape)) tests))
|
(pair term (each $-(@uvJ (list tank)) tests))
|
||||||
::
|
::
|
||||||
:> # %generate
|
:> # %generate
|
||||||
:> utilities for generating ++tests from files and directories.
|
:> utilities for generating ++tests from files and directories.
|
||||||
@ -22,7 +22,7 @@
|
|||||||
:> combine the current file and subdirectory.
|
:> combine the current file and subdirectory.
|
||||||
:>
|
:>
|
||||||
:> this merges the file {base} with its child files {recur}.
|
:> this merges the file {base} with its child files {recur}.
|
||||||
|= [base=vase recur=(map @ta tests:tester)]
|
|= [base=vase recur=(map @ta tests)]
|
||||||
^- tests
|
^- tests
|
||||||
=+ a=(gen-tests base)
|
=+ a=(gen-tests base)
|
||||||
=+ b=(test-map-to-test-list recur)
|
=+ b=(test-map-to-test-list recur)
|
||||||
@ -33,43 +33,47 @@
|
|||||||
++ test-map-to-test-list
|
++ test-map-to-test-list
|
||||||
:> translates ford output to something we can work with.
|
:> translates ford output to something we can work with.
|
||||||
:>
|
:>
|
||||||
:> ford gives us a `(map @ta tests:tester)`, but we actually
|
:> ford gives us a `(map @ta tests)`, but we actually
|
||||||
:> want something like ++tests.
|
:> want something like ++tests.
|
||||||
|= a=(map @ta tests:tester)
|
|= a=(map @ta tests)
|
||||||
:: todo: i'd like to sort this, but ++sort has -find.a problems much like
|
:: todo: i'd like to sort this, but ++sort has -find.a problems much like
|
||||||
:: ++weld does above!?
|
:: ++weld does above!?
|
||||||
^- tests
|
^- tests
|
||||||
%+ turn
|
%+ turn
|
||||||
(to-list:dct:new-hoon a)
|
(to-list:dct:new-hoon a)
|
||||||
|= {key/@ta value/tests:tester}
|
|= {key/@ta value/tests}
|
||||||
[key [%| value]]
|
[key [%| value]]
|
||||||
::
|
::
|
||||||
|
++ has-test-prefix
|
||||||
|
|= a=term ^- ?
|
||||||
|
?| =((end 3 5 a) 'test-')
|
||||||
|
=((end 3 6 a) 'check-')
|
||||||
|
==
|
||||||
|
::
|
||||||
++ gen-tests
|
++ gen-tests
|
||||||
:> creates a {tests} list out of a vase of a test suite
|
:> creates a {tests} list out of a vase of a test suite
|
||||||
|= v=vase
|
|= v=vase
|
||||||
^- tests
|
^- tests
|
||||||
=+ arms=(sort (sloe p.v) aor)
|
=+ arms=(sort (sloe p.v) aor)
|
||||||
%+ turn arms
|
%+ turn (skim arms has-test-prefix)
|
||||||
|= arm/term
|
|= arm/term
|
||||||
|
::REVIEW fewer asserts? recouple the nock and eat the runtime compile cost?
|
||||||
|
?> (~(nest ut (~(peek ut p.v) %free 6)) & p:!>((init-test)))
|
||||||
|
=/ call (~(mint ut p.v) p:!>(*tang) [%limb arm])
|
||||||
|
?> (~(nest ut p:!>(*tang)) & p.call)
|
||||||
|
::
|
||||||
:- arm
|
:- arm
|
||||||
:- %&
|
:- %&
|
||||||
|= eny=@uvJ
|
|= eny=@uvJ ^- tang
|
||||||
=+ context=(slop !>((init-test eny)) v)
|
((hard tang) .*(q.v(+6 (init-test eny)) q.call))
|
||||||
=/ r (slap context [%cnsg [arm ~] [%$ 3] [[%$ 2] ~]])
|
|
||||||
((hard (list tape)) q:(slap r [%limb %results]))
|
|
||||||
::
|
::
|
||||||
:> # %per-test
|
:> # %per-test
|
||||||
:> data initialized on a per-test basis.
|
:> data initialized on a per-test basis.
|
||||||
::
|
::
|
||||||
++ init-test
|
++ init-test |=({eny/@uvJ} %*(. tester eny eny, check-iterations 10))
|
||||||
|= {cookie/@uvJ}
|
|
||||||
~(. tester `(list tape)`~ cookie 10 0)
|
|
||||||
::
|
|
||||||
++ tester-type _(init-test `@uvJ`0)
|
|
||||||
::
|
::
|
||||||
++ tester
|
++ tester
|
||||||
|_ $: error-lines=(list tape) :< output messages
|
|_ $: eny=@uvJ :< entropy
|
||||||
eny=@uvJ :< entropy
|
|
||||||
check-iterations=@u :< # of check trials
|
check-iterations=@u :< # of check trials
|
||||||
current-iteration=@u :< current iteration
|
current-iteration=@u :< current iteration
|
||||||
==
|
==
|
||||||
@ -80,27 +84,21 @@
|
|||||||
+|
|
+|
|
||||||
+- check
|
+- check
|
||||||
|* [generator=$-(@uvJ *) test=$-(* ?)]
|
|* [generator=$-(@uvJ *) test=$-(* ?)]
|
||||||
|-
|
|- ^- tang
|
||||||
^+ +>.$
|
|
||||||
?: (gth current-iteration check-iterations)
|
?: (gth current-iteration check-iterations)
|
||||||
+>.$
|
~
|
||||||
:: todo: wrap generator in mule so it can crash.
|
:: todo: wrap generator in mule so it can crash.
|
||||||
=+ sample=(generator eny)
|
=+ sample=(generator eny)
|
||||||
:: todo: wrap test in mule so it can crash.
|
:: todo: wrap test in mule so it can crash.
|
||||||
=+ ret=(test sample)
|
?: (test sample)
|
||||||
?: ret
|
|
||||||
%= $
|
%= $
|
||||||
eny (shaf %huh eny) :: xxx: better random?
|
eny (shaf %huh eny) :: xxx: better random?
|
||||||
current-iteration (add current-iteration 1)
|
current-iteration (add current-iteration 1)
|
||||||
==
|
==
|
||||||
=+ case=(add 1 current-iteration)
|
=/ case +(current-iteration)
|
||||||
=+ case-plural=?:(=(case 1) "case" "cases")
|
=/ pl ?+(case "" %1 "s")
|
||||||
%= +>.$
|
::XXX sample is a noun
|
||||||
error-lines :*
|
[leaf+"falsified after {<case>} case{pl} by '{<`*`sample>}', seed {<eny>}"]~
|
||||||
"falsified after {(noah !>(case))} {case-plural} by '{(noah !>(sample))}'"
|
|
||||||
error-lines
|
|
||||||
==
|
|
||||||
==
|
|
||||||
::
|
::
|
||||||
:: todo: a generate function that takes an arbitrary span.
|
:: todo: a generate function that takes an arbitrary span.
|
||||||
::
|
::
|
||||||
@ -139,27 +137,23 @@
|
|||||||
+|
|
+|
|
||||||
:: todo: unit testing libraries have a lot more to them than just eq.
|
:: todo: unit testing libraries have a lot more to them than just eq.
|
||||||
++ expect-eq
|
++ expect-eq
|
||||||
|* [a=* b=* c=tape]
|
|= a=vase
|
||||||
^+ +>
|
^- tang
|
||||||
?: =(a b)
|
?@ q.a [palm+[": " ~ ~ ~]^~[>%ex-expected-pair< (sell a)]]~
|
||||||
+>.$
|
?: =(-.q.a +.q.a)
|
||||||
%= +>.$
|
~
|
||||||
error-lines :*
|
:~ palm+[": " ~ ~ ~]^~[leaf+"expected" (sell (slot 2 a))]
|
||||||
"failure: '{c}'"
|
palm+[": " ~ ~ ~]^~[leaf+"actual" (sell (slot 3 a))]
|
||||||
" actual: '{(noah !>(a))}'"
|
|
||||||
" expected: '{(noah !>(b))}'"
|
|
||||||
error-lines
|
|
||||||
==
|
|
||||||
==
|
==
|
||||||
::
|
|
||||||
:> #
|
:> #
|
||||||
:> # %output
|
:> # %formatting
|
||||||
:> #
|
:> #
|
||||||
:> called by the test harness
|
:> test result presentation
|
||||||
::
|
+|
|
||||||
++ results
|
++ category
|
||||||
:> returns results.
|
|= [a=tape b=tang] ^- tang
|
||||||
^- (list tape)
|
?: =(~ b) ~ :: test OK
|
||||||
error-lines
|
:- leaf+"in: '{a}'"
|
||||||
|
(turn b |=(c=tank rose+[~ " " ~]^~[c]))
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|= {a/char b/(list @t)} ^- @t
|
|= {a/char b/(list @t)} ^- @t
|
||||||
%+ rap 3
|
%+ rap 3
|
||||||
?~ b ~
|
?~ b ~
|
||||||
|-(?~(t.b b [i.b a $(b t.b)]))
|
|-(?~(t.b b [i.b a $(b t.b)]))
|
||||||
::
|
::
|
||||||
++ valve :: produce request
|
++ valve :: produce request
|
||||||
|= {med/?($get $post) pax/path quy/quay}
|
|= {med/?($get $post) pax/path quy/quay}
|
||||||
@ -87,9 +87,10 @@
|
|||||||
:~ id+ni
|
:~ id+ni
|
||||||
user+(ot (fasp screen-name+(su user)) ~)
|
user+(ot (fasp screen-name+(su user)) ~)
|
||||||
(fasp created-at+(cu year (ci stud so)))
|
(fasp created-at+(cu year (ci stud so)))
|
||||||
text+(cu crip (su (star escp:de-xml))) :: parse html escapes
|
:: parse html escapes and newlines
|
||||||
|
text+(cu crip (su (star ;~(pose (just `@`10) escp:de-xml))))
|
||||||
==
|
==
|
||||||
++ usel
|
++ usel
|
||||||
=, ^?(dejs)
|
=, ^?(dejs)
|
||||||
%+ ce (list who/@ta)
|
%+ ce (list who/@ta)
|
||||||
=- (ot users+(ar -) ~)
|
=- (ot users+(ar -) ~)
|
||||||
@ -119,12 +120,12 @@
|
|||||||
(valve med (cowl pax +.a b))
|
(valve med (cowl pax +.a b))
|
||||||
::
|
::
|
||||||
++ lutt |=(@u `@t`(rsh 3 2 (scot %ui +<)))
|
++ lutt |=(@u `@t`(rsh 3 2 (scot %ui +<)))
|
||||||
++ llsc
|
++ llsc
|
||||||
:: => args:reqs
|
:: => args:reqs
|
||||||
|: a=$:$@(scr (list scr)) ^- @t
|
|: a=$:$@(scr (list scr)) ^- @t
|
||||||
?@(a `@t`a (join ',' a))
|
?@(a `@t`a (join ',' a))
|
||||||
::
|
::
|
||||||
++ llst
|
++ llst
|
||||||
|= a/$@(@t (list @t)) ^- @t
|
|= a/$@(@t (list @t)) ^- @t
|
||||||
?@(a `@t`a (join ',' a))
|
?@(a `@t`a (join ',' a))
|
||||||
::
|
::
|
||||||
@ -135,9 +136,9 @@
|
|||||||
?@(a (lutt a) (join ',' (turn `(list tid)`a lutt)))
|
?@(a (lutt a) (join ',' (turn `(list tid)`a lutt)))
|
||||||
::
|
::
|
||||||
++ cowl :: handle parameters
|
++ cowl :: handle parameters
|
||||||
|: :* pax=*path
|
|= $: pax/path
|
||||||
ban=((list param))
|
ban/(list param)
|
||||||
quy=*quay
|
quy/quay
|
||||||
==
|
==
|
||||||
^- {path quay}
|
^- {path quay}
|
||||||
%+ into-path-partial:interpolate
|
%+ into-path-partial:interpolate
|
||||||
|
@ -16,11 +16,13 @@
|
|||||||
^- action:hall
|
^- action:hall
|
||||||
=- (need ((of -) a))
|
=- (need ((of -) a))
|
||||||
:~ create+(ot nom+so des+so sec+secu ~)
|
:~ create+(ot nom+so des+so sec+secu ~)
|
||||||
|
design+(ot nom+so cof+conf ~)
|
||||||
delete+(ot nom+so why+(mu so) ~)
|
delete+(ot nom+so why+(mu so) ~)
|
||||||
depict+(ot nom+so des+so ~)
|
depict+(ot nom+so des+so ~)
|
||||||
filter+(ot nom+so fit+filt ~)
|
filter+(ot nom+so fit+filt ~)
|
||||||
permit+(ot nom+so inv+bo sis+(as (su fed:ag)) ~)
|
permit+(ot nom+so inv+bo sis+(as (su fed:ag)) ~)
|
||||||
source+(ot nom+so sub+bo srs+(as sorc) ~)
|
source+(ot nom+so sub+bo srs+(as sorc) ~)
|
||||||
|
usage+(ot nom+so add+bo tas+(as so) ~)
|
||||||
::
|
::
|
||||||
convey+(ar thot)
|
convey+(ar thot)
|
||||||
phrase+(ot aud+audi ses+(ar spec:dejs:hall-json) ~)
|
phrase+(ot aud+audi ses+(ar spec:dejs:hall-json) ~)
|
||||||
@ -46,11 +48,13 @@
|
|||||||
%- pairs
|
%- pairs
|
||||||
?- -.act
|
?- -.act
|
||||||
$create ~[nom+s+nom.act des+s+des.act sec+s+sec.act]
|
$create ~[nom+s+nom.act des+s+des.act sec+s+sec.act]
|
||||||
|
$design ~[nom+s+nom.act cof+(conf cof.act)]
|
||||||
$delete ~[nom+s+nom.act why+(mabe why.act cord:enjs)]
|
$delete ~[nom+s+nom.act why+(mabe why.act cord:enjs)]
|
||||||
$depict ~[nom+s+nom.act des+s+des.act]
|
$depict ~[nom+s+nom.act des+s+des.act]
|
||||||
$filter ~[nom+s+nom.act fit+(filt fit.act)]
|
$filter ~[nom+s+nom.act fit+(filt fit.act)]
|
||||||
$permit ~[nom+s+nom.act inv+b+inv.act sis+(sa sis.act ship)]
|
$permit ~[nom+s+nom.act inv+b+inv.act sis+(sa sis.act ship)]
|
||||||
$source ~[nom+s+nom.act sub+b+sub.act srs+(sa srs.act sorc)]
|
$source ~[nom+s+nom.act sub+b+sub.act srs+(sa srs.act sorc)]
|
||||||
|
$usage ~[nom+s+nom.act add+b+add.act tas+(sa tas.act cord:enjs)]
|
||||||
::
|
::
|
||||||
$phrase ~[aud+(audi aud.act) ses+a+(turn ses.act spec:enjs)]
|
$phrase ~[aud+(audi aud.act) ses+a+(turn ses.act spec:enjs)]
|
||||||
::
|
::
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
:::: /hoon/run/ren
|
:::: /hoon/run/ren
|
||||||
::
|
::
|
||||||
/? 310
|
/? 310
|
||||||
/% /!noun/
|
/, /ren/run /~ ~|(%loop !!)
|
||||||
|
/ /% /!noun/
|
||||||
|
==
|
||||||
~& run+-.-
|
~& run+-.-
|
||||||
~
|
~
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
::TODO rename
|
::TODO rename
|
||||||
++ name term :< circle name
|
++ name term :< circle name
|
||||||
++ nick cord :< local nickname
|
++ nick cord :< local nickname
|
||||||
|
++ tags (set knot) :< usage tags
|
||||||
::
|
::
|
||||||
:> #
|
:> #
|
||||||
:> # %query-models
|
:> # %query-models
|
||||||
@ -110,6 +111,7 @@
|
|||||||
$% {$full cof/config} :< set w/o side-effects
|
$% {$full cof/config} :< set w/o side-effects
|
||||||
{$source add/? src/source} :< add/rem sources
|
{$source add/? src/source} :< add/rem sources
|
||||||
{$caption cap/cord} :< changed description
|
{$caption cap/cord} :< changed description
|
||||||
|
{$usage add/? tas/tags} :< add/rem usage tags
|
||||||
{$filter fit/filter} :< changed filter
|
{$filter fit/filter} :< changed filter
|
||||||
{$secure sec/security} :< changed security
|
{$secure sec/security} :< changed security
|
||||||
{$permit add/? sis/(set ship)} :< add/rem to b/w-list
|
{$permit add/? sis/(set ship)} :< add/rem to b/w-list
|
||||||
@ -136,11 +138,13 @@
|
|||||||
++ action :> user action
|
++ action :> user action
|
||||||
$% :: circle configuration ::
|
$% :: circle configuration ::
|
||||||
{$create nom/name des/cord sec/security} :< create circle
|
{$create nom/name des/cord sec/security} :< create circle
|
||||||
|
{$design nom/name cof/config} :< create with config
|
||||||
{$delete nom/name why/(unit cord)} :< delete + announce
|
{$delete nom/name why/(unit cord)} :< delete + announce
|
||||||
{$depict nom/name des/cord} :< change description
|
{$depict nom/name des/cord} :< change description
|
||||||
{$filter nom/name fit/filter} :< change message rules
|
{$filter nom/name fit/filter} :< change message rules
|
||||||
{$permit nom/name inv/? sis/(set ship)} :< invite/banish
|
{$permit nom/name inv/? sis/(set ship)} :< invite/banish
|
||||||
{$source nom/name sub/? srs/(set source)} :< un/sub to/from src
|
{$source nom/name sub/? srs/(set source)} :< un/sub to/from src
|
||||||
|
{$usage nom/name add/? tas/tags} :< add/rem usage tags
|
||||||
:: messaging ::
|
:: messaging ::
|
||||||
{$convey tos/(list thought)} :< post exact
|
{$convey tos/(list thought)} :< post exact
|
||||||
{$phrase aud/audience ses/(list speech)} :< post easy
|
{$phrase aud/audience ses/(list speech)} :< post easy
|
||||||
@ -178,6 +182,7 @@
|
|||||||
++ config :> circle config
|
++ config :> circle config
|
||||||
$: src/(set source) :< active sources
|
$: src/(set source) :< active sources
|
||||||
cap/cord :< description
|
cap/cord :< description
|
||||||
|
tag/tags :< usage tags
|
||||||
fit/filter :< message rules
|
fit/filter :< message rules
|
||||||
con/control :< restrictions
|
con/control :< restrictions
|
||||||
== ::
|
== ::
|
||||||
|
141
sys/hoon.hoon
141
sys/hoon.hoon
@ -319,6 +319,13 @@
|
|||||||
:>
|
:>
|
||||||
p=item
|
p=item
|
||||||
::
|
::
|
||||||
|
+* lest [item]
|
||||||
|
:> null-terminated non-empty list
|
||||||
|
:>
|
||||||
|
:> mold generator: produces a mold of a null-terminated list of the
|
||||||
|
:> homogeneous type {a} with at least one element.
|
||||||
|
[i/item t/(list item)]
|
||||||
|
::
|
||||||
++ mold
|
++ mold
|
||||||
:> normalizing gate
|
:> normalizing gate
|
||||||
:>
|
:>
|
||||||
@ -326,7 +333,7 @@
|
|||||||
:> input if it fits or a default value if it doesn't.
|
:> input if it fits or a default value if it doesn't.
|
||||||
:>
|
:>
|
||||||
:> examples: * @ud ,[p=time q=?(%a %b)]
|
:> examples: * @ud ,[p=time q=?(%a %b)]
|
||||||
_|=(* +<)
|
_|~(* +<)
|
||||||
::
|
::
|
||||||
+* pair [head tail]
|
+* pair [head tail]
|
||||||
:> dual tuple
|
:> dual tuple
|
||||||
@ -528,7 +535,7 @@
|
|||||||
(b u.a)
|
(b u.a)
|
||||||
::
|
::
|
||||||
++ bind :: argue
|
++ bind :: argue
|
||||||
|* {a/(unit) b/$-(* *)}
|
|* {a/(unit) b/gate}
|
||||||
?~ a ~
|
?~ a ~
|
||||||
[~ u=(b u.a)]
|
[~ u=(b u.a)]
|
||||||
::
|
::
|
||||||
@ -778,23 +785,30 @@
|
|||||||
^+ t.a
|
^+ t.a
|
||||||
[i.a $(a (skim t.a |:(c=i.a !(b c i.a))))]
|
[i.a $(a (skim t.a |:(c=i.a !(b c i.a))))]
|
||||||
::
|
::
|
||||||
++ spin
|
++ spin :> stateful turn
|
||||||
|* {a/(list) b/_=>(~ |=({* *} [** +<+])) c/*}
|
:>
|
||||||
:: ?< ?=($-([_?<(?=(~ a) i.a) _c] [* _c]) b)
|
:> a: list
|
||||||
|-
|
:> b: state
|
||||||
|
:> c: gate from list-item and state to product and new state
|
||||||
|
~/ %spin
|
||||||
|
|* [a=(list) b=* c=_|=(^ [** +<+])]
|
||||||
|
=> .(c `$-([_?>(?=(^ a) i.a) _b] [* _b])`c)
|
||||||
|
=/ acc=(list _-:(c)) ~
|
||||||
|
:> transformed list and updated state
|
||||||
|
|- ^- (pair _acc _b)
|
||||||
?~ a
|
?~ a
|
||||||
~
|
[(flop acc) b]
|
||||||
=+ v=(b i.a c)
|
=^ res b (c i.a b)
|
||||||
[i=-.v t=$(a t.a, c +.v)]
|
$(acc [res acc], a t.a)
|
||||||
::
|
::
|
||||||
++ spun
|
++ spun :> internal spin
|
||||||
|* {a/(list) b/_=>(~ |=({* *} [** +<+]))}
|
:>
|
||||||
=| c/_+<+.b
|
:> a: list
|
||||||
|-
|
:> b: gate from list-item and state to product and new state
|
||||||
?~ a
|
~/ %spun
|
||||||
~
|
|* [a=(list) b=_|=(^ [** +<+])]
|
||||||
=+ v=(b i.a c)
|
:> transformed list
|
||||||
[i=-.v t=$(a t.a, c +.v)]
|
p:(spin a +<+.b b)
|
||||||
::
|
::
|
||||||
++ swag :: slice
|
++ swag :: slice
|
||||||
|* {{a/@ b/@} c/(list)}
|
|* {{a/@ b/@} c/(list)}
|
||||||
@ -802,7 +816,7 @@
|
|||||||
::
|
::
|
||||||
++ turn :: transform
|
++ turn :: transform
|
||||||
~/ %turn
|
~/ %turn
|
||||||
|* {a/(list) b/$-(* *)}
|
|* {a/(list) b/gate}
|
||||||
|-
|
|-
|
||||||
?~ a ~
|
?~ a ~
|
||||||
[i=(b i.a) t=$(a t.a)]
|
[i=(b i.a) t=$(a t.a)]
|
||||||
@ -1610,7 +1624,7 @@
|
|||||||
$(a r.a, +<+.b $(a l.a, +<+.b (b n.a +<+.b)))
|
$(a r.a, +<+.b $(a l.a, +<+.b (b n.a +<+.b)))
|
||||||
::
|
::
|
||||||
+- rib :: transform + product
|
+- rib :: transform + product
|
||||||
|* {b/* c/$-(* *)}
|
|* {b/* c/gate}
|
||||||
|- ^+ [b a]
|
|- ^+ [b a]
|
||||||
?~ a [b ~]
|
?~ a [b ~]
|
||||||
=+ d=(c n.a b)
|
=+ d=(c n.a b)
|
||||||
@ -1620,7 +1634,7 @@
|
|||||||
[-.f [n.a +.e +.f]]
|
[-.f [n.a +.e +.f]]
|
||||||
::
|
::
|
||||||
+- run :: apply gate to values
|
+- run :: apply gate to values
|
||||||
|* b/$-(* *)
|
|* b/gate
|
||||||
|-
|
|-
|
||||||
?~ a a
|
?~ a a
|
||||||
[n=[p=p.n.a q=(b q.n.a)] l=$(a l.a) r=$(a r.a)]
|
[n=[p=p.n.a q=(b q.n.a)] l=$(a l.a) r=$(a r.a)]
|
||||||
@ -2274,7 +2288,7 @@
|
|||||||
=+ ^= q %+ max
|
=+ ^= q %+ max
|
||||||
?: (gth m prc) (^sub m prc) 0 :: reduce precision
|
?: (gth m prc) (^sub m prc) 0 :: reduce precision
|
||||||
%- abs:si ?: =(den %i) --0 :: enforce min. exp
|
%- abs:si ?: =(den %i) --0 :: enforce min. exp
|
||||||
?: =((cmp:si e.a emn) -1) (dif:si emn e.a) --0
|
?: =((cmp:si e.a emn) -1) (dif:si emn e.a) --0
|
||||||
=^ b a :- (end 0 q a.a)
|
=^ b a :- (end 0 q a.a)
|
||||||
a(e (sum:si e.a (sun:si q)), a (rsh 0 q a.a))
|
a(e (sum:si e.a (sun:si q)), a (rsh 0 q a.a))
|
||||||
::
|
::
|
||||||
@ -4165,8 +4179,42 @@
|
|||||||
(weld ram(tac i.q.tac) ?~(t.q.tac voz (weld p.p.tac voz)))
|
(weld ram(tac i.q.tac) ?~(t.q.tac voz (weld p.p.tac voz)))
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
|
++ ug :: horrible hack
|
||||||
|
|%
|
||||||
|
++ ace :: strip ctrl chars
|
||||||
|
|= a=tape
|
||||||
|
^- tape
|
||||||
|
?~ a ~
|
||||||
|
?: |((lth i.a 32) =(127 `@`i.a))
|
||||||
|
$(a t.a)
|
||||||
|
[i.a $(a t.a)]
|
||||||
|
::
|
||||||
|
++ act :: pretend tapes
|
||||||
|
|= tac=tank
|
||||||
|
^- tank
|
||||||
|
?- -.tac
|
||||||
|
%leaf [%leaf (hew p.tac)]
|
||||||
|
%palm :+ %palm
|
||||||
|
[(hew p.p.tac) (hew q.p.tac) (hew r.p.tac) (hew s.p.tac)]
|
||||||
|
(turn q.tac act)
|
||||||
|
%rose :+ %rose
|
||||||
|
[(hew p.p.tac) (hew q.p.tac) (hew r.p.tac)]
|
||||||
|
(turn q.tac act)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ fix :: restore tapes
|
||||||
|
|= wol=wall
|
||||||
|
%+ turn wol
|
||||||
|
|=(a=tape (tufa `(list @c)``(list @)`a))
|
||||||
|
::
|
||||||
|
++ hew :: pretend tape
|
||||||
|
|=(a=tape `tape``(list @)`(tuba (ace a)))
|
||||||
|
--
|
||||||
|
::
|
||||||
++ win
|
++ win
|
||||||
|= {tab/@ edg/@}
|
|= {tab/@ edg/@}
|
||||||
|
=. tac (act:ug tac)
|
||||||
|
%- fix:ug
|
||||||
=+ lug=`wall`~
|
=+ lug=`wall`~
|
||||||
|^ |- ^- wall
|
|^ |- ^- wall
|
||||||
?- -.tac
|
?- -.tac
|
||||||
@ -4476,7 +4524,7 @@
|
|||||||
::
|
::
|
||||||
++ cook :: apply gate
|
++ cook :: apply gate
|
||||||
~/ %cook
|
~/ %cook
|
||||||
|* {poq/$-(* *) sef/rule}
|
|* {poq/gate sef/rule}
|
||||||
~/ %fun
|
~/ %fun
|
||||||
|= tub/nail
|
|= tub/nail
|
||||||
=+ vex=(sef tub)
|
=+ vex=(sef tub)
|
||||||
@ -10166,7 +10214,7 @@
|
|||||||
{$cell *} |
|
{$cell *} |
|
||||||
{$core *} dext(ref repo(sut ref))
|
{$core *} dext(ref repo(sut ref))
|
||||||
{$face *} dext(ref q.ref)
|
{$face *} dext(ref q.ref)
|
||||||
{$fork *} (levy ~(tap in p.ref) |=(type sint(ref +<)))
|
{$fork *} (levy ~(tap in p.ref) |=(type dext(ref +<)))
|
||||||
{$hint *} dext(ref q.ref)
|
{$hint *} dext(ref q.ref)
|
||||||
{$hold *} ?: (~(has in reg) ref) &
|
{$hold *} ?: (~(has in reg) ref) &
|
||||||
?: (~(has in gil) [sut ref]) &
|
?: (~(has in gil) [sut ref]) &
|
||||||
@ -10515,9 +10563,8 @@
|
|||||||
=> .(fan (~(gas in fan) leg))
|
=> .(fan (~(gas in fan) leg))
|
||||||
%- fork
|
%- fork
|
||||||
%~ tap in
|
%~ tap in
|
||||||
%- ~(gas in *(set type))
|
%- ~(gas in *(set type))
|
||||||
(turn leg |=({p/type q/hoon} (play(sut p) q)))
|
(turn leg |=({p/type q/hoon} (play(sut p) q)))
|
||||||
==
|
|
||||||
::
|
::
|
||||||
++ take
|
++ take
|
||||||
|= {vit/vein duz/$-(type type)}
|
|= {vit/vein duz/$-(type type)}
|
||||||
@ -10622,14 +10669,20 @@
|
|||||||
--
|
--
|
||||||
|_ sut/type
|
|_ sut/type
|
||||||
++ dash
|
++ dash
|
||||||
|= {mil/tape lim/char} ^- tape
|
|= {mil/tape lim/char lam/tape}
|
||||||
:- lim
|
^- tape
|
||||||
|- ^- tape
|
=/ esc (~(gas in *(set @tD)) lam)
|
||||||
?~ mil [lim ~]
|
:- lim
|
||||||
?: =(lim i.mil) ['\\' i.mil $(mil t.mil)]
|
|- ^- tape
|
||||||
?: =('\\' i.mil) ['\\' i.mil $(mil t.mil)]
|
?~ mil [lim ~]
|
||||||
?: (lte ' ' i.mil) [i.mil $(mil t.mil)]
|
?: ?| =(lim i.mil)
|
||||||
['\\' ~(x ne (rsh 2 1 i.mil)) ~(x ne (end 2 1 i.mil)) $(mil t.mil)]
|
=('\\' i.mil)
|
||||||
|
(~(has in esc) i.mil)
|
||||||
|
==
|
||||||
|
['\\' i.mil $(mil t.mil)]
|
||||||
|
?: (lte ' ' i.mil)
|
||||||
|
[i.mil $(mil t.mil)]
|
||||||
|
['\\' ~(x ne (rsh 2 1 i.mil)) ~(x ne (end 2 1 i.mil)) $(mil t.mil)]
|
||||||
::
|
::
|
||||||
++ deal |=(lum/* (dish dole lum))
|
++ deal |=(lum/* (dish dole lum))
|
||||||
++ dial
|
++ dial
|
||||||
@ -10761,7 +10814,7 @@
|
|||||||
[(need ^$(q.ham %yarn, lum -.lum)) $(lum +.lum)]
|
[(need ^$(q.ham %yarn, lum -.lum)) $(lum +.lum)]
|
||||||
::
|
::
|
||||||
$yarn
|
$yarn
|
||||||
[~ %leaf (dash (tape lum) '"')]
|
[~ %leaf (dash (tape lum) '"' "\{")]
|
||||||
::
|
::
|
||||||
$void
|
$void
|
||||||
~
|
~
|
||||||
@ -10774,7 +10827,7 @@
|
|||||||
?+ (rash p.q.ham ;~(sfix (cook crip (star low)) (star hig)))
|
?+ (rash p.q.ham ;~(sfix (cook crip (star low)) (star hig)))
|
||||||
~(rend co [%$ p.q.ham lum])
|
~(rend co [%$ p.q.ham lum])
|
||||||
$$ ~(rend co [%$ %ud lum])
|
$$ ~(rend co [%$ %ud lum])
|
||||||
$t (dash (rip 3 lum) '\'')
|
$t (dash (rip 3 lum) '\'' ~)
|
||||||
$tas ['%' ?.(=(0 lum) (rip 3 lum) ['$' ~])]
|
$tas ['%' ?.(=(0 lum) (rip 3 lum) ['$' ~])]
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
@ -10980,10 +11033,9 @@
|
|||||||
:_ p.doy
|
:_ p.doy
|
||||||
%^ cat 3
|
%^ cat 3
|
||||||
%~ rent co
|
%~ rent co
|
||||||
:+ %$ %ud
|
:+ %$ %ud
|
||||||
%- ~(rep by (~(run by q.s.q.sut) |=(tomb ~(wyt by q))))
|
%- ~(rep by (~(run by q.s.q.sut) |=(tomb ~(wyt by q))))
|
||||||
|=([[@ a=@u] b=@u] (add a b))
|
|=([[@ a=@u] b=@u] (add a b))
|
||||||
==
|
|
||||||
%^ cat 3
|
%^ cat 3
|
||||||
?-(p.q.sut $gold '.', $iron '|', $lead '?', $zinc '&')
|
?-(p.q.sut $gold '.', $iron '|', $lead '?', $zinc '&')
|
||||||
=+ gum=(mug q.s.q.sut)
|
=+ gum=(mug q.s.q.sut)
|
||||||
@ -13069,7 +13121,6 @@
|
|||||||
++ expr |.(;~(gunk loaf wisp)) :: hoon and core tail
|
++ expr |.(;~(gunk loaf wisp)) :: hoon and core tail
|
||||||
++ exps |.((butt hank)) :: closed gapped hoons
|
++ exps |.((butt hank)) :: closed gapped hoons
|
||||||
++ expt |.(;~(gunk wise rope loaf loaf)) :: =^
|
++ expt |.(;~(gunk wise rope loaf loaf)) :: =^
|
||||||
++ expu |.(;~(gunk rope loaf (butt hank))) :: wing, hoon, hoons
|
|
||||||
++ expv |.((butt rick)) :: just changes
|
++ expv |.((butt rick)) :: just changes
|
||||||
++ expw |.(;~(gunk rope loaf loaf loaf)) :: wing and three hoons
|
++ expw |.(;~(gunk rope loaf loaf loaf)) :: wing and three hoons
|
||||||
++ expx |. ;~ gunk loaf :: hoon and core tail
|
++ expx |. ;~ gunk loaf :: hoon and core tail
|
||||||
@ -13488,7 +13539,7 @@
|
|||||||
== ::
|
== ::
|
||||||
++ desk @tas :: ship desk case spur
|
++ desk @tas :: ship desk case spur
|
||||||
++ cage (cask vase) :: global metadata
|
++ cage (cask vase) :: global metadata
|
||||||
++ cask |*(a/$-(* *) (pair mark a)) :: global data
|
++ cask |*(a/mold (pair mark a)) :: global data
|
||||||
++ cuff :: permissions
|
++ cuff :: permissions
|
||||||
$: p/(unit (set monk)) :: can be read by
|
$: p/(unit (set monk)) :: can be read by
|
||||||
q/(set monk) :: caused or created by
|
q/(set monk) :: caused or created by
|
||||||
@ -13496,8 +13547,8 @@
|
|||||||
++ curd {p/@tas q/*} :: typeless card
|
++ curd {p/@tas q/*} :: typeless card
|
||||||
++ dock (pair @p term) :: message target
|
++ dock (pair @p term) :: message target
|
||||||
++ duct (list wire) :: causal history
|
++ duct (list wire) :: causal history
|
||||||
++ hypo |*(a/$-(* *) (pair type a)) :: type associated
|
++ hypo |*(a/mold (pair type a)) :: type associated
|
||||||
++ hobo |* a/$-(* *) :: task wrapper
|
++ hobo |* a/gate :: task wrapper
|
||||||
$? $% {$soft p/*} ::
|
$? $% {$soft p/*} ::
|
||||||
== ::
|
== ::
|
||||||
a ::
|
a ::
|
||||||
@ -13548,7 +13599,7 @@
|
|||||||
mev/type :: -:!>([%meta *vase])
|
mev/type :: -:!>([%meta *vase])
|
||||||
== ::
|
== ::
|
||||||
++ wind :: new kernel action
|
++ wind :: new kernel action
|
||||||
|* {a/$-(* *) b/$-(* *)} :: forward+reverse
|
|* {a/gate b/gate} :: forward+reverse
|
||||||
$% {$pass p/path q/a} :: advance
|
$% {$pass p/path q/a} :: advance
|
||||||
{$slip p/a} :: lateral
|
{$slip p/a} :: lateral
|
||||||
{$give p/b} :: retreat
|
{$give p/b} :: retreat
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
:: :: ames (4a), networking
|
:: :: ames (4a), networking
|
||||||
::
|
::
|
||||||
|= pit=vase
|
|= pit=vase
|
||||||
=> =~
|
=> =~
|
||||||
:: structures
|
:: structures
|
||||||
=, ames
|
=, ames
|
||||||
|
=+ protocol-version=0
|
||||||
|%
|
|%
|
||||||
+= move [p=duct q=(wind note:able gift:able)] :: local move
|
+= move [p=duct q=(wind note:able gift:able)] :: local move
|
||||||
--
|
--
|
||||||
@ -160,7 +161,7 @@
|
|||||||
0w0 :: 42, ~tul, Curtis Yarvin
|
0w0 :: 42, ~tul, Curtis Yarvin
|
||||||
0w0 :: 43, ~met, Curtis Yarvin
|
0w0 :: 43, ~met, Curtis Yarvin
|
||||||
0w0 :: 44, ~wen, Curtis Yarvin
|
0w0 :: 44, ~wen, Curtis Yarvin
|
||||||
0w0 :: 45, ~byn, Curtis Yarvin
|
0w0 :: 45, ~byn, Curtis Yarvin
|
||||||
0w0 :: 46, ~hex, James Torre
|
0w0 :: 46, ~hex, James Torre
|
||||||
0w0 :: 47, ~feb, urbit.org
|
0w0 :: 47, ~feb, urbit.org
|
||||||
0wK.GoKEY.rMjfn.ZcvFQ.n4BmX :: 48, ~pyl, Michael Hartl (oldkey)
|
0wK.GoKEY.rMjfn.ZcvFQ.n4BmX :: 48, ~pyl, Michael Hartl (oldkey)
|
||||||
@ -172,7 +173,7 @@
|
|||||||
0w0 :: 54, ~wyd, Curtis Yarvin
|
0w0 :: 54, ~wyd, Curtis Yarvin
|
||||||
0w0 :: 55, ~tep, Curtis Yarvin
|
0w0 :: 55, ~tep, Curtis Yarvin
|
||||||
0w0 :: 56, ~bes, Curtis Yarvin
|
0w0 :: 56, ~bes, Curtis Yarvin
|
||||||
0w0 :: 57, ~dex, Jared Hance
|
0w0 :: 57, ~dex, Jared Hance
|
||||||
0w0 :: 58, ~sef, Owen Rescher
|
0w0 :: 58, ~sef, Owen Rescher
|
||||||
0w0 :: 59, ~wyc, Galen Wolfe-Pauly
|
0w0 :: 59, ~wyc, Galen Wolfe-Pauly
|
||||||
0w0 :: 60, ~bur, Galen Wolfe-Pauly
|
0w0 :: 60, ~bur, Galen Wolfe-Pauly
|
||||||
@ -260,7 +261,7 @@
|
|||||||
0w0 :: 142, ~ted, urbit.org
|
0w0 :: 142, ~ted, urbit.org
|
||||||
0w2d.GLlYg.-MwtO.ZCPBE.OqGB9 :: 143, ~rus, Stephen Burnham (oldkey)
|
0w2d.GLlYg.-MwtO.ZCPBE.OqGB9 :: 143, ~rus, Stephen Burnham (oldkey)
|
||||||
0w0 :: 144, ~bex, urbit.org
|
0w0 :: 144, ~bex, urbit.org
|
||||||
0w0 :: 145, ~leb, Justin LeBlanc
|
0w1M.E6dLP.eXY5V.Mh5TT.-u9KN :: 145, ~leb, Justin LeBlanc
|
||||||
0w0 :: 146, ~dux, urbit.org
|
0w0 :: 146, ~dux, urbit.org
|
||||||
0w0 :: 147, ~ryn, urbit.org
|
0w0 :: 147, ~ryn, urbit.org
|
||||||
0w0 :: 148, ~num, Tlon
|
0w0 :: 148, ~num, Tlon
|
||||||
@ -362,7 +363,7 @@
|
|||||||
0w0 :: 244, ~byr, Tlon
|
0w0 :: 244, ~byr, Tlon
|
||||||
0w0 :: 245, ~sen, Tlon
|
0w0 :: 245, ~sen, Tlon
|
||||||
0w0 :: 246, ~weg, Tlon
|
0w0 :: 246, ~weg, Tlon
|
||||||
0w28.bRVMq.Oi3tM.zOCNV.j00Yq :: 247, ~fyr, Anton Dyudin (oldkey)
|
0w3j.imkco.mBXNt.xFbvS.ohabN :: 247, ~fyr, Anton Dyudin
|
||||||
0w0 :: 248, ~mur, Tlon
|
0w0 :: 248, ~mur, Tlon
|
||||||
0w0 :: 249, ~tel, Tlon
|
0w0 :: 249, ~tel, Tlon
|
||||||
0w3w.V54nF.e9eNv.1fLkl.PiUo- :: 250, ~rep, Raymond Pasco
|
0w3w.V54nF.e9eNv.1fLkl.PiUo- :: 250, ~rep, Raymond Pasco
|
||||||
@ -386,7 +387,7 @@
|
|||||||
vix=(bex +((cut 0 [25 2] mag))) :: width of sender
|
vix=(bex +((cut 0 [25 2] mag))) :: width of sender
|
||||||
tay=(cut 0 [27 5] mag) :: message type
|
tay=(cut 0 [27 5] mag) :: message type
|
||||||
==
|
==
|
||||||
?> =(7 vez)
|
?> =(protocol-version vez)
|
||||||
?> =(chk (end 0 20 (mug bod)))
|
?> =(chk (end 0 20 (mug bod)))
|
||||||
:+ [(end 3 wix bod) (cut 3 [wix vix] bod)]
|
:+ [(end 3 wix bod) (cut 3 [wix vix] bod)]
|
||||||
(kins tay)
|
(kins tay)
|
||||||
@ -406,7 +407,7 @@
|
|||||||
=+ tay=(ksin q.kec)
|
=+ tay=(ksin q.kec)
|
||||||
%+ mix
|
%+ mix
|
||||||
%+ can 0
|
%+ can 0
|
||||||
:~ [3 7]
|
:~ [3 protocol-version]
|
||||||
[20 (mug bod)]
|
[20 (mug bod)]
|
||||||
[2 yax]
|
[2 yax]
|
||||||
[2 qax]
|
[2 qax]
|
||||||
@ -976,10 +977,10 @@
|
|||||||
|= [our=ship ger=@uw fak=?] :: instantiate emperor
|
|= [our=ship ger=@uw fak=?] :: instantiate emperor
|
||||||
^- [p=(list boon) q=fort]
|
^- [p=(list boon) q=fort]
|
||||||
=+ ^= loy
|
=+ ^= loy
|
||||||
?: fak
|
?: fak
|
||||||
:: fake uses carrier number as seed
|
:: fake uses carrier number as seed
|
||||||
::
|
::
|
||||||
(pit:nu:crub:crypto 512 our)
|
(pit:nu:crub:crypto 512 our)
|
||||||
(pit:nu:crub:crypto 512 ger)
|
(pit:nu:crub:crypto 512 ger)
|
||||||
=+ fim==(fig:ex:loy (zeno our))
|
=+ fim==(fig:ex:loy (zeno our))
|
||||||
?: &(!fak !fim) !! :: not fake & bad fig
|
?: &(!fak !fim) !! :: not fake & bad fig
|
||||||
@ -996,7 +997,7 @@
|
|||||||
++ gnaw :: gnaw:am
|
++ gnaw :: gnaw:am
|
||||||
|= [kay=cape ryn=lane pac=rock] :: process packet
|
|= [kay=cape ryn=lane pac=rock] :: process packet
|
||||||
^- [p=(list boon) q=fort]
|
^- [p=(list boon) q=fort]
|
||||||
?. =(7 (end 0 3 pac)) [~ fox]
|
?. =(protocol-version (end 0 3 pac)) [~ fox]
|
||||||
=+ kec=(bite pac)
|
=+ kec=(bite pac)
|
||||||
?: (goop p.p.kec) [~ fox]
|
?: (goop p.p.kec) [~ fox]
|
||||||
?. (~(has by urb.ton.fox) q.p.kec)
|
?. (~(has by urb.ton.fox) q.p.kec)
|
||||||
@ -1115,7 +1116,7 @@
|
|||||||
:: it now, since it obviously won't be processed.
|
:: it now, since it obviously won't be processed.
|
||||||
::
|
::
|
||||||
~& [%fail-ack did.rum]
|
~& [%fail-ack did.rum]
|
||||||
=^ gud +>.$
|
=^ gud +>.$
|
||||||
(cook ``[%dead-message ~] cha `[q.u.cun r.u.cun])
|
(cook ``[%dead-message ~] cha `[q.u.cun r.u.cun])
|
||||||
?. gud +>.$
|
?. gud +>.$
|
||||||
%= +>.$
|
%= +>.$
|
||||||
@ -1276,15 +1277,15 @@
|
|||||||
:: or negative ack if this ship is blocked
|
:: or negative ack if this ship is blocked
|
||||||
::
|
::
|
||||||
=* cop ^- coop
|
=* cop ^- coop
|
||||||
%+ fall
|
%+ fall
|
||||||
(~(get by bum.rum) num)
|
(~(get by bum.rum) num)
|
||||||
?:(bad ~ ``[%blocked ~])
|
?:(bad ~ ``[%blocked ~])
|
||||||
con:(cook (~(get by bum.rum) num) cha `[ryn dam])
|
con:(cook (~(get by bum.rum) num) cha `[ryn dam])
|
||||||
::
|
::
|
||||||
:: insert this message in unprocessed set
|
:: insert this message in unprocessed set
|
||||||
::
|
::
|
||||||
=. mis.rum (~(put by mis.rum) num [kay ryn dam dut])
|
=. mis.rum (~(put by mis.rum) num [kay ryn dam dut])
|
||||||
::
|
::
|
||||||
:: if ship is blocked, advance pointer to latest message
|
:: if ship is blocked, advance pointer to latest message
|
||||||
::
|
::
|
||||||
=. did.rum ?.(bad did.rum num)
|
=. did.rum ?.(bad did.rum num)
|
||||||
@ -1553,7 +1554,7 @@
|
|||||||
(hunt lth doz rtn.sop.bah)
|
(hunt lth doz rtn.sop.bah)
|
||||||
::
|
::
|
||||||
++ load
|
++ load
|
||||||
|= old=fort
|
|= old=fort
|
||||||
~& %ames-reload
|
~& %ames-reload
|
||||||
..^$(fox old)
|
..^$(fox old)
|
||||||
::
|
::
|
||||||
@ -1614,7 +1615,7 @@
|
|||||||
:_ fox [hen %pass pax i.q.q.bon %west p.bon t.q.q.bon r.bon]~
|
:_ fox [hen %pass pax i.q.q.bon %west p.bon t.q.q.bon r.bon]~
|
||||||
::
|
::
|
||||||
%ouzo
|
%ouzo
|
||||||
:: ~& [%send now p.bon `@p`(mug (shaf %flap q.bon))]
|
:: ~& [%send now p.bon `@p`(mug (shaf %flap q.bon))]
|
||||||
:_ fox
|
:_ fox
|
||||||
[[gad.fox [%give %send p.bon q.bon]] ~]
|
[[gad.fox [%give %send p.bon q.bon]] ~]
|
||||||
::
|
::
|
||||||
@ -1684,7 +1685,7 @@
|
|||||||
?: ?=(%wegh -.kyz)
|
?: ?=(%wegh -.kyz)
|
||||||
~& %ames-weighing
|
~& %ames-weighing
|
||||||
[[hen %give %mass wegh]~ +>]
|
[[hen %give %mass wegh]~ +>]
|
||||||
=+ ^= fuy
|
=+ ^= fuy
|
||||||
^- [p=(list boon) q=fort]
|
^- [p=(list boon) q=fort]
|
||||||
?- -.kyz
|
?- -.kyz
|
||||||
%barn
|
%barn
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@
|
|||||||
-- ::
|
-- ::
|
||||||
=> |% :: console protocol
|
=> |% :: console protocol
|
||||||
++ axle ::
|
++ axle ::
|
||||||
$: $3 ::
|
$: $0 ::
|
||||||
ore/(unit ship) :: identity once set
|
ore/(unit ship) :: identity once set
|
||||||
hey/(unit duct) :: default duct
|
hey/(unit duct) :: default duct
|
||||||
dug/(map duct axon) :: conversations
|
dug/(map duct axon) :: conversations
|
||||||
@ -45,7 +45,11 @@
|
|||||||
++ note-clay ::
|
++ note-clay ::
|
||||||
$% {$merg p/@p q/@tas r/@p s/@tas t/case u/germ:clay}:: merge desks
|
$% {$merg p/@p q/@tas r/@p s/@tas t/case u/germ:clay}:: merge desks
|
||||||
{$warp p/sock q/riff:clay} :: wait for clay hack
|
{$warp p/sock q/riff:clay} :: wait for clay hack
|
||||||
|
<<<<<<< HEAD
|
||||||
{$wegh $~} ::
|
{$wegh $~} ::
|
||||||
|
=======
|
||||||
|
{$perm p/ship q/desk r/path s/rite:clay} :: change permissions
|
||||||
|
>>>>>>> master
|
||||||
== ::
|
== ::
|
||||||
++ note-dill :: note to self, odd
|
++ note-dill :: note to self, odd
|
||||||
$% {$crud p/@tas q/(list tank)} ::
|
$% {$crud p/@tas q/(list tank)} ::
|
||||||
@ -90,7 +94,11 @@
|
|||||||
$% {$mere p/(each (set path) (pair term tang))} ::
|
$% {$mere p/(each (set path) (pair term tang))} ::
|
||||||
{$note p/@tD q/tank} ::
|
{$note p/@tD q/tank} ::
|
||||||
{$writ p/riot:clay} ::
|
{$writ p/riot:clay} ::
|
||||||
|
<<<<<<< HEAD
|
||||||
{$mass p/mass} ::
|
{$mass p/mass} ::
|
||||||
|
=======
|
||||||
|
{$mack p/(unit tang)} ::
|
||||||
|
>>>>>>> master
|
||||||
== ::
|
== ::
|
||||||
++ sign-dill ::
|
++ sign-dill ::
|
||||||
$% {$blit p/(list blit)} ::
|
$% {$blit p/(list blit)} ::
|
||||||
@ -301,7 +309,8 @@
|
|||||||
(sync %home our %base)
|
(sync %home our %base)
|
||||||
(init-sync %home our %base)
|
(init-sync %home our %base)
|
||||||
=. +> ?. ?=(?($duke $king $czar) can) +>
|
=. +> ?. ?=(?($duke $king $czar) can) +>
|
||||||
(sync %kids our %base)
|
:: make kids desk publicly readable, so syncs work.
|
||||||
|
(show %kids):(sync %kids our %base)
|
||||||
=. +> autoload
|
=. +> autoload
|
||||||
=. +> peer
|
=. +> peer
|
||||||
|- ^+ +>+
|
|- ^+ +>+
|
||||||
@ -337,6 +346,16 @@
|
|||||||
:_(moz [hen %pass ~ %g %deal [our our] ram %peer /drum])
|
:_(moz [hen %pass ~ %g %deal [our our] ram %peer /drum])
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
|
++ show :: permit reads on desk
|
||||||
|
|= des/desk
|
||||||
|
%_ +>.$
|
||||||
|
moz
|
||||||
|
:_ moz
|
||||||
|
:* hen %pass /show %c %perm our
|
||||||
|
des / r+`[%black ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
++ sync
|
++ sync
|
||||||
|= syn/{desk ship desk}
|
|= syn/{desk ship desk}
|
||||||
%_ +>.$
|
%_ +>.$
|
||||||
@ -417,6 +436,10 @@
|
|||||||
::
|
::
|
||||||
{$c $writ *}
|
{$c $writ *}
|
||||||
init
|
init
|
||||||
|
::
|
||||||
|
{$c $mack *}
|
||||||
|
?~ p.sih +>.$
|
||||||
|
(mean >%dill-clay-nack< u.p.sih)
|
||||||
::
|
::
|
||||||
{$d $blit *}
|
{$d $blit *}
|
||||||
(done +.sih)
|
(done +.sih)
|
||||||
@ -465,13 +488,13 @@
|
|||||||
%- some
|
%- some
|
||||||
%. q.kyz
|
%. q.kyz
|
||||||
%~ into as
|
%~ into as
|
||||||
:- [~ hen u.ore.all]
|
:- [~ hen u.ore.all]
|
||||||
:* p.kyz
|
:* p.kyz
|
||||||
[~ ~]
|
[~ ~]
|
||||||
80
|
80
|
||||||
0
|
0
|
||||||
(tuba "<awaiting {(trip p.kyz)}, this may take a few minutes>")
|
(tuba "<awaiting {(trip p.kyz)}, this may take a few minutes>")
|
||||||
== ==
|
==
|
||||||
--
|
--
|
||||||
|% :: poke+peek pattern
|
|% :: poke+peek pattern
|
||||||
++ call :: handle request
|
++ call :: handle request
|
||||||
|
@ -84,7 +84,7 @@
|
|||||||
-- ::
|
-- ::
|
||||||
|% :: models
|
|% :: models
|
||||||
++ bolo :: eyre state
|
++ bolo :: eyre state
|
||||||
$: $6 :: version
|
$: $0 :: version
|
||||||
gub/@t :: random identity
|
gub/@t :: random identity
|
||||||
hov/(unit ship) :: master for remote
|
hov/(unit ship) :: master for remote
|
||||||
top/beam :: ford serve prefix
|
top/beam :: ford serve prefix
|
||||||
@ -756,7 +756,7 @@
|
|||||||
(give-thou q.u.mez)
|
(give-thou q.u.mez)
|
||||||
::
|
::
|
||||||
$lon
|
$lon
|
||||||
~& ses-ask+[p.u.mez sop (~(run by wup) ,~)]
|
:: ~& ses-ask+[p.u.mez sop (~(run by wup) ,~)]
|
||||||
?: (ses-authed p.u.mez)
|
?: (ses-authed p.u.mez)
|
||||||
(ames-gram q.p.kyz aut+~ p.u.mez)
|
(ames-gram q.p.kyz aut+~ p.u.mez)
|
||||||
=. sop (~(put by sop) p.u.mez q.p.kyz |)
|
=. sop (~(put by sop) p.u.mez q.p.kyz |)
|
||||||
|
@ -32,9 +32,9 @@
|
|||||||
== == == ::
|
== == == ::
|
||||||
-- ::
|
-- ::
|
||||||
|% :: structures
|
|% :: structures
|
||||||
+= axle :: all %ford state
|
++ axle :: all %ford state
|
||||||
$: %3 :: version for update
|
$: $0 :: version for update
|
||||||
pol=(map ship baby) ::
|
pol/(map ship baby) ::
|
||||||
== ::
|
== ::
|
||||||
+= baby :: state by ship
|
+= baby :: state by ship
|
||||||
$: tad=[p=@ud q=(map @ud task)] :: tasks by number
|
$: tad=[p=@ud q=(map @ud task)] :: tasks by number
|
||||||
@ -1948,9 +1948,9 @@
|
|||||||
|= {cof/cafe dir/knot}
|
|= {cof/cafe dir/knot}
|
||||||
=+ nod=(chap(s.how [dir s.how]) cof bax hon)
|
=+ nod=(chap(s.how [dir s.how]) cof bax hon)
|
||||||
?: ?=($2 -.q.nod)
|
?: ?=($2 -.q.nod)
|
||||||
(new:bo cof ~)
|
(flue p.nod)
|
||||||
(tug:bo nod (with:bo some))
|
(cope nod (flux some))
|
||||||
%- with:bo
|
%- flux
|
||||||
|= doy/(map @ cage) ^- vase
|
|= doy/(map @ cage) ^- vase
|
||||||
?~ doy [[%atom %n `0] 0]
|
?~ doy [[%atom %n `0] 0]
|
||||||
%+ slop
|
%+ slop
|
||||||
@ -2291,7 +2291,7 @@
|
|||||||
?~(buy *baby u.buy)
|
?~(buy *baby u.buy)
|
||||||
=^ mos bay
|
=^ mos bay
|
||||||
?- -.kis
|
?- -.kis
|
||||||
$wipe ~&(%ford-cache-wiped [~ bay(jav ~)])
|
$wipe ~&(ford-cache-wiped/at=now [~ bay(jav ~)])
|
||||||
$wasp
|
$wasp
|
||||||
(~(wasp za [our hen [now eny ski] ~] bay) q.kis)
|
(~(wasp za [our hen [now eny ski] ~] bay) q.kis)
|
||||||
$exec
|
$exec
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %gall state
|
|% :::::::::::::::::::::::::::::::::::::::::::::::::::::: %gall state
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
++ axle :: all state
|
++ axle :: all state
|
||||||
$: $4 :: state version
|
$: $0 :: state version
|
||||||
pol/(map ship mast) :: apps by ship
|
pol/(map ship mast) :: apps by ship
|
||||||
== ::
|
== ::
|
||||||
++ gest :: subscriber data
|
++ gest :: subscriber data
|
||||||
@ -1206,6 +1206,9 @@
|
|||||||
~
|
~
|
||||||
$cash `%a
|
$cash `%a
|
||||||
$conf `%g
|
$conf `%g
|
||||||
|
$cred `%c
|
||||||
|
$crew `%c
|
||||||
|
$crow `%c
|
||||||
$deal `%g
|
$deal `%g
|
||||||
$exec `%f
|
$exec `%f
|
||||||
$flog `%d
|
$flog `%d
|
||||||
@ -1215,6 +1218,7 @@
|
|||||||
$mont `%c
|
$mont `%c
|
||||||
$nuke `%a
|
$nuke `%a
|
||||||
$ogre `%c
|
$ogre `%c
|
||||||
|
$perm `%c
|
||||||
$serv `%e
|
$serv `%e
|
||||||
$them `%e
|
$them `%e
|
||||||
$wait `%b
|
$wait `%b
|
||||||
|
365
sys/zuse.hoon
365
sys/zuse.hoon
@ -339,7 +339,9 @@
|
|||||||
++ able ^?
|
++ able ^?
|
||||||
|%
|
|%
|
||||||
++ gift :: out result <-$
|
++ gift :: out result <-$
|
||||||
$% {$dirk p/@tas} :: mark mount dirty
|
$% {$croz rus/(map desk {r/regs w/regs})} :: rules for group
|
||||||
|
{$cruz cez/(map @ta crew)} :: permission groups
|
||||||
|
{$dirk p/@tas} :: mark mount dirty
|
||||||
{$ergo p/@tas q/mode} :: version update
|
{$ergo p/@tas q/mode} :: version update
|
||||||
{$hill p/(list @tas)} :: mount points
|
{$hill p/(list @tas)} :: mount points
|
||||||
{$mack p/(unit tang)} :: ack
|
{$mack p/(unit tang)} :: ack
|
||||||
@ -347,24 +349,34 @@
|
|||||||
{$mere p/(each (set path) (pair term tang))} :: merge result
|
{$mere p/(each (set path) (pair term tang))} :: merge result
|
||||||
{$note p/@tD q/tank} :: debug message
|
{$note p/@tD q/tank} :: debug message
|
||||||
{$ogre p/@tas} :: delete mount point
|
{$ogre p/@tas} :: delete mount point
|
||||||
|
{$rule red/dict wit/dict} :: node r+w permissions
|
||||||
{$send p/lane:ames q/@} :: transmit packet
|
{$send p/lane:ames q/@} :: transmit packet
|
||||||
{$writ p/riot} :: response
|
{$writ p/riot} :: response
|
||||||
{$wris p/case p/(set (pair care path))} :: many changes
|
{$wris p/case p/(set (pair care path))} :: many changes
|
||||||
== ::
|
== ::
|
||||||
++ task :: in request ->$
|
++ task :: in request ->$
|
||||||
$% {$boat $~} :: pier rebooted
|
$% {$boat $~} :: pier rebooted
|
||||||
{$drop p/@p q/desk} :: cancel pending merge
|
{$cred our/ship nom/@ta cew/crew} :: set permission group
|
||||||
{$info p/@p q/desk r/nori} :: internal edit
|
{$crew our/ship} :: permission groups
|
||||||
{$init p/@p} :: report install
|
{$crow our/ship nom/@ta} :: group usage
|
||||||
{$into p/desk q/? r/mode} :: external edit
|
{$drop our/@p des/desk} :: cancel pending merge
|
||||||
{$merg p/@p q/desk r/@p s/desk t/case u/germ} :: merge desks
|
{$info our/@p des/desk dit/nori} :: internal edit
|
||||||
{$mont p/desk q/beam} :: mount to unix
|
{$init our/@p} :: report install
|
||||||
{$dirk p/desk} :: mark mount dirty
|
{$into des/desk all/? fis/mode} :: external edit
|
||||||
{$ogre p/$@(desk beam)} :: delete mount point
|
$: $merg :: merge desks
|
||||||
{$warp p/sock q/riff} :: file request
|
our/@p des/desk :: target
|
||||||
|
her/@p dem/desk cas/case :: source
|
||||||
|
how/germ :: method
|
||||||
|
== ::
|
||||||
|
{$mont des/desk bem/beam} :: mount to unix
|
||||||
|
{$dirk des/desk} :: mark mount dirty
|
||||||
|
{$ogre pot/$@(desk beam)} :: delete mount point
|
||||||
|
{$perm our/ship des/desk pax/path rit/rite} :: change permissions
|
||||||
|
{$warp wer/sock rif/riff} :: internal file req
|
||||||
|
{$werp who/ship wer/sock rif/riff} :: external file req
|
||||||
{$wegh $~} :: report memory
|
{$wegh $~} :: report memory
|
||||||
{$went p/sack q/path r/@ud s/coop} :: response confirm
|
{$went wer/sack pax/path num/@ud ack/coop} :: response confirm
|
||||||
{$west p/sack q/path r/*} :: network request
|
{$west wer/sack pax/path res/*} :: network request
|
||||||
== ::
|
== ::
|
||||||
-- ::able
|
-- ::able
|
||||||
::
|
::
|
||||||
@ -382,13 +394,15 @@
|
|||||||
$% {$delta p/lobe q/{p/mark q/lobe} r/page} :: delta on q
|
$% {$delta p/lobe q/{p/mark q/lobe} r/page} :: delta on q
|
||||||
{$direct p/lobe q/page} :: immediate
|
{$direct p/lobe q/page} :: immediate
|
||||||
== ::
|
== ::
|
||||||
++ care ?($d $u $v $w $x $y $z) :: clay submode
|
++ care ?($d $p $u $v $w $x $y $z) :: clay submode
|
||||||
++ case :: ship desk case spur
|
++ case :: ship desk case spur
|
||||||
$% {$da p/@da} :: date
|
$% {$da p/@da} :: date
|
||||||
{$tas p/@tas} :: label
|
{$tas p/@tas} :: label
|
||||||
{$ud p/@ud} :: number
|
{$ud p/@ud} :: number
|
||||||
== ::
|
== ::
|
||||||
++ coop (unit ares) :: e2e ack
|
++ coop (unit ares) :: e2e ack
|
||||||
|
++ crew (set ship) :: permissions group
|
||||||
|
++ dict {src/path rul/rule} :: effective permission
|
||||||
++ dome :: project state
|
++ dome :: project state
|
||||||
$: ank/ankh :: state
|
$: ank/ankh :: state
|
||||||
let/@ud :: top id
|
let/@ud :: top id
|
||||||
@ -453,8 +467,15 @@
|
|||||||
{$mult p/mool} :: next version of any
|
{$mult p/mool} :: next version of any
|
||||||
{$many p/? q/moat} :: track range
|
{$many p/? q/moat} :: track range
|
||||||
== ::
|
== ::
|
||||||
|
++ regs (map path rule) :: rules for paths
|
||||||
++ riff {p/desk q/(unit rave)} :: request+desist
|
++ riff {p/desk q/(unit rave)} :: request+desist
|
||||||
|
++ rite :: new permissions
|
||||||
|
$% {$r red/(unit rule)} :: for read
|
||||||
|
{$w wit/(unit rule)} :: for write
|
||||||
|
{$rw red/(unit rule) wit/(unit rule)} :: for read and write
|
||||||
|
== ::
|
||||||
++ riot (unit rant) :: response+complete
|
++ riot (unit rant) :: response+complete
|
||||||
|
++ rule {mod/?($black $white) who/(set whom)} :: node permission
|
||||||
++ rump {p/care q/case r/@tas s/path} :: relative path
|
++ rump {p/care q/case r/@tas s/path} :: relative path
|
||||||
++ saba {p/ship q/@tas r/moar s/dome} :: patch+merge
|
++ saba {p/ship q/@tas r/moar s/dome} :: patch+merge
|
||||||
++ soba (list {p/path q/miso}) :: delta
|
++ soba (list {p/path q/miso}) :: delta
|
||||||
@ -467,6 +488,7 @@
|
|||||||
{%| p/(list a) q/(list a)} :: p -> q[chunk]
|
{%| p/(list a) q/(list a)} :: p -> q[chunk]
|
||||||
== ::
|
== ::
|
||||||
++ urge |*(a/mold (list (unce a))) :: list change
|
++ urge |*(a/mold (list (unce a))) :: list change
|
||||||
|
++ whom (each ship @ta) :: ship or named crew
|
||||||
++ yaki :: commit
|
++ yaki :: commit
|
||||||
$: p/(list tako) :: parents
|
$: p/(list tako) :: parents
|
||||||
q/(map path lobe) :: namespace
|
q/(map path lobe) :: namespace
|
||||||
@ -2895,6 +2917,315 @@
|
|||||||
:: alice decrypts with same key
|
:: alice decrypts with same key
|
||||||
`@t`(dy.ali secret-key crypted-msg)
|
`@t`(dy.ali secret-key crypted-msg)
|
||||||
-- ::test
|
-- ::test
|
||||||
|
:: ::
|
||||||
|
:::: ++keccak:crypto :: (2b7) keccak family
|
||||||
|
:: ::::
|
||||||
|
++ keccak
|
||||||
|
|%
|
||||||
|
::
|
||||||
|
:: keccak
|
||||||
|
::
|
||||||
|
++ keccak-224 |=(a=octs (keccak 1.152 448 224 a))
|
||||||
|
++ keccak-256 |=(a=octs (keccak 1.088 512 256 a))
|
||||||
|
++ keccak-384 |=(a=octs (keccak 832 768 384 a))
|
||||||
|
++ keccak-512 |=(a=octs (keccak 576 1.024 512 a))
|
||||||
|
::
|
||||||
|
++ keccak (cury (cury hash keccak-f) padding-keccak)
|
||||||
|
::
|
||||||
|
++ padding-keccak (multirate-padding 0x1)
|
||||||
|
::
|
||||||
|
:: sha3
|
||||||
|
::
|
||||||
|
++ sha3-224 |=(a=octs (sha3 1.152 448 224 a))
|
||||||
|
++ sha3-256 |=(a=octs (sha3 1.088 512 256 a))
|
||||||
|
++ sha3-384 |=(a=octs (sha3 832 768 384 a))
|
||||||
|
++ sha3-512 |=(a=octs (sha3 576 1.024 512 a))
|
||||||
|
::
|
||||||
|
++ sha3 (cury (cury hash keccak-f) padding-sha3)
|
||||||
|
::
|
||||||
|
++ padding-sha3 (multirate-padding 0x6)
|
||||||
|
::
|
||||||
|
:: shake
|
||||||
|
::
|
||||||
|
++ shake-128 |=([o=@ud i=octs] (shake 1.344 256 o i))
|
||||||
|
++ shake-256 |=([o=@ud i=octs] (shake 1.088 512 o i))
|
||||||
|
::
|
||||||
|
++ shake (cury (cury hash keccak-f) padding-shake)
|
||||||
|
::
|
||||||
|
++ padding-shake (multirate-padding 0x1f)
|
||||||
|
::
|
||||||
|
:: rawshake
|
||||||
|
::
|
||||||
|
++ rawshake-128 |=([o=@ud i=octs] (rawshake 1.344 256 o i))
|
||||||
|
++ rawshake-256 |=([o=@ud i=octs] (rawshake 1.088 512 o i))
|
||||||
|
::
|
||||||
|
++ rawshake (cury (cury hash keccak-f) padding-rawshake)
|
||||||
|
::
|
||||||
|
++ padding-rawshake (multirate-padding 0x7)
|
||||||
|
::
|
||||||
|
:: core
|
||||||
|
::
|
||||||
|
++ hash
|
||||||
|
:> per: permutation function with configurable width.
|
||||||
|
:> pad: padding function.
|
||||||
|
:> rat: bitrate, size in bits of blocks to operate on.
|
||||||
|
:> cap: capacity, bits of sponge padding.
|
||||||
|
:> out: length of desired output, in bits.
|
||||||
|
:> inp: input to hash.
|
||||||
|
|= $: per=$-(@ud $-(@ @))
|
||||||
|
pad=$-([octs @ud] octs)
|
||||||
|
rat=@ud
|
||||||
|
cap=@ud
|
||||||
|
out=@ud
|
||||||
|
inp=octs
|
||||||
|
==
|
||||||
|
^- @
|
||||||
|
:: urbit's little-endian to keccak's big-endian.
|
||||||
|
=. q.inp
|
||||||
|
=+ (swp 3 q.inp)
|
||||||
|
(lsh 3 (sub p.inp (met 3 q.inp)) -)
|
||||||
|
%. [inp out]
|
||||||
|
(sponge per pad rat cap)
|
||||||
|
::
|
||||||
|
::NOTE if ++keccak ever needs to be made to operate
|
||||||
|
:: on bits rather than bytes, all that needs to
|
||||||
|
:: be done is updating the way this padding
|
||||||
|
:: function works. (and also "octs" -> "bits")
|
||||||
|
++ multirate-padding
|
||||||
|
:> dsb: domain separation byte, reverse bit order.
|
||||||
|
|= dsb=@ux
|
||||||
|
?> (lte dsb 0xff)
|
||||||
|
|= [inp=octs mut=@ud]
|
||||||
|
^- octs
|
||||||
|
=. mut (div mut 8)
|
||||||
|
=+ pal=(sub mut (mod p.inp mut))
|
||||||
|
=? pal =(pal 0) mut
|
||||||
|
=. pal (dec pal)
|
||||||
|
:- (add p.inp +(pal))
|
||||||
|
:: padding is provided in lane bit ordering,
|
||||||
|
:: ie, LSB = left.
|
||||||
|
(cat 3 (con (lsh 3 pal dsb) 0x80) q.inp)
|
||||||
|
::
|
||||||
|
++ sponge
|
||||||
|
:> sponge construction
|
||||||
|
::
|
||||||
|
:> preperm: permutation function with configurable width.
|
||||||
|
:> padding: padding function.
|
||||||
|
:> bitrate: size of blocks to operate on.
|
||||||
|
:> capacity: sponge padding.
|
||||||
|
|= $: preperm=$-(@ud $-(@ @))
|
||||||
|
padding=$-([octs @ud] octs)
|
||||||
|
bitrate=@ud
|
||||||
|
capacity=@ud
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: preparing
|
||||||
|
=+ bitrate-bytes=(div bitrate 8)
|
||||||
|
=+ blockwidth=(add bitrate capacity)
|
||||||
|
=+ permute=(preperm blockwidth)
|
||||||
|
::
|
||||||
|
|= [input=octs output=@ud]
|
||||||
|
|^ ^- @
|
||||||
|
::
|
||||||
|
:: padding
|
||||||
|
=. input (padding input bitrate)
|
||||||
|
::
|
||||||
|
:: absorbing
|
||||||
|
=/ pieces=(list @)
|
||||||
|
:: amount of bitrate-sized blocks.
|
||||||
|
?> =(0 (mod p.input bitrate-bytes))
|
||||||
|
=+ i=(div p.input bitrate-bytes)
|
||||||
|
|-
|
||||||
|
?: =(i 0) ~
|
||||||
|
:_ $(i (dec i))
|
||||||
|
:: get the bitrate-sized block of bytes
|
||||||
|
:: that ends with the byte at -.
|
||||||
|
=- (cut 3 [- bitrate-bytes] q.input)
|
||||||
|
(mul (dec i) bitrate-bytes)
|
||||||
|
=/ state=@
|
||||||
|
:: for every piece,
|
||||||
|
%+ roll pieces
|
||||||
|
|= [p=@ s=@]
|
||||||
|
:: pad with capacity,
|
||||||
|
=. p (lsh 0 capacity p)
|
||||||
|
:: xor it into the state and permute it.
|
||||||
|
(permute (mix s (bytes-to-lanes p)))
|
||||||
|
::
|
||||||
|
:: squeezing
|
||||||
|
=| res=@
|
||||||
|
=| len=@ud
|
||||||
|
|-
|
||||||
|
:: append a bitrate-sized head of state to the
|
||||||
|
:: result.
|
||||||
|
=. res
|
||||||
|
%+ con (lsh 0 bitrate res)
|
||||||
|
(rsh 0 capacity (lanes-to-bytes state))
|
||||||
|
=. len (add len bitrate)
|
||||||
|
?: (gte len output)
|
||||||
|
:: produce the requested bits of output.
|
||||||
|
(rsh 0 (sub len output) res)
|
||||||
|
$(res res, state (permute state))
|
||||||
|
::
|
||||||
|
++ bytes-to-lanes
|
||||||
|
:> flip byte order in blocks of 8 bytes.
|
||||||
|
|= a=@
|
||||||
|
%+ can 6
|
||||||
|
%+ turn (rip 6 a)
|
||||||
|
|= b=@
|
||||||
|
:- 1
|
||||||
|
(lsh 3 (sub 8 (met 3 b)) (swp 3 b))
|
||||||
|
::
|
||||||
|
++ lanes-to-bytes
|
||||||
|
:> unflip byte order in blocks of 8 bytes.
|
||||||
|
|= a=@
|
||||||
|
%+ can 6
|
||||||
|
%+ turn
|
||||||
|
=+ (rip 6 a)
|
||||||
|
(weld - (reap (sub 25 (lent -)) 0x0))
|
||||||
|
|= a=@
|
||||||
|
:- 1
|
||||||
|
%+ can 3
|
||||||
|
=- (turn - |=(a=@ [1 a]))
|
||||||
|
=+ (flop (rip 3 a))
|
||||||
|
(weld (reap (sub 8 (lent -)) 0x0) -)
|
||||||
|
--
|
||||||
|
::
|
||||||
|
++ keccak-f
|
||||||
|
:> keccak permutation function
|
||||||
|
|= [width=@ud]
|
||||||
|
:: assert valid blockwidth.
|
||||||
|
?> =- (~(has in -) width)
|
||||||
|
(sy 25 50 100 200 400 800 1.600 ~)
|
||||||
|
:: assumes 5x5 lanes state, as is the keccak
|
||||||
|
:: standard.
|
||||||
|
=+ size=5
|
||||||
|
=+ lanes=(mul size size)
|
||||||
|
=+ lane-bloq=(dec (xeb (div width lanes)))
|
||||||
|
=+ lane-size=(bex lane-bloq)
|
||||||
|
=+ rounds=(add 12 (mul 2 lane-bloq))
|
||||||
|
|= [input=@]
|
||||||
|
^- @
|
||||||
|
=* a input
|
||||||
|
=+ round=0
|
||||||
|
|^
|
||||||
|
?: =(round rounds) a
|
||||||
|
::
|
||||||
|
:: theta
|
||||||
|
=/ c=@
|
||||||
|
%+ roll (gulf 0 (dec size))
|
||||||
|
|= [x=@ud c=@]
|
||||||
|
%+ con (lsh lane-bloq 1 c)
|
||||||
|
%+ roll (gulf 0 (dec size))
|
||||||
|
|= [y=@ud c=@]
|
||||||
|
(mix c (get-lane x y a))
|
||||||
|
=/ d=@
|
||||||
|
%+ roll (gulf 0 (dec size))
|
||||||
|
|= [x=@ud d=@]
|
||||||
|
%+ con (lsh lane-bloq 1 d)
|
||||||
|
%+ mix
|
||||||
|
=- (get-word - size c)
|
||||||
|
?:(=(x 0) (dec size) (dec x))
|
||||||
|
%^ ~(rol fe lane-bloq) 0 1
|
||||||
|
(get-word (mod +(x) size) size c)
|
||||||
|
=. a
|
||||||
|
%+ roll (gulf 0 (dec lanes))
|
||||||
|
|= [i=@ud a=_a]
|
||||||
|
%+ mix a
|
||||||
|
%^ lsh lane-bloq
|
||||||
|
(sub lanes +(i))
|
||||||
|
(get-word i size d)
|
||||||
|
::
|
||||||
|
:: rho and pi
|
||||||
|
=/ b=@
|
||||||
|
%+ roll (gulf 0 (dec lanes))
|
||||||
|
|= [i=@ b=@]
|
||||||
|
=+ x=(mod i 5)
|
||||||
|
=+ y=(div i 5)
|
||||||
|
%+ con b
|
||||||
|
%^ lsh lane-bloq
|
||||||
|
%+ sub lanes
|
||||||
|
%+ add +(y)
|
||||||
|
%+ mul size
|
||||||
|
(mod (add (mul 2 x) (mul 3 y)) size)
|
||||||
|
%^ ~(rol fe lane-bloq) 0
|
||||||
|
(rotation-offset i)
|
||||||
|
(get-word i lanes a)
|
||||||
|
::
|
||||||
|
:: chi
|
||||||
|
=. a
|
||||||
|
%+ roll (gulf 0 (dec lanes))
|
||||||
|
|= [i=@ud a=@]
|
||||||
|
%+ con (lsh lane-bloq 1 a)
|
||||||
|
=+ x=(mod i 5)
|
||||||
|
=+ y=(div i 5)
|
||||||
|
%+ mix (get-lane x y b)
|
||||||
|
%+ dis
|
||||||
|
=- (get-lane - y b)
|
||||||
|
(mod (add x 2) size)
|
||||||
|
%^ not lane-bloq 1
|
||||||
|
(get-lane (mod +(x) size) y b)
|
||||||
|
::
|
||||||
|
:: iota
|
||||||
|
=. a
|
||||||
|
=+ (round-constant round)
|
||||||
|
(mix a (lsh lane-bloq (dec lanes) -))
|
||||||
|
::
|
||||||
|
:: next round
|
||||||
|
$(round +(round))
|
||||||
|
::
|
||||||
|
++ get-lane
|
||||||
|
:> get the lane with coordinates
|
||||||
|
|= [x=@ud y=@ud a=@]
|
||||||
|
=+ i=(add x (mul size y))
|
||||||
|
(get-word i lanes a)
|
||||||
|
::
|
||||||
|
++ get-word
|
||||||
|
:> get word {n} from atom {a} of {m} words.
|
||||||
|
|= [n=@ud m=@ud a=@]
|
||||||
|
(cut lane-bloq [(sub m +((mod n m))) 1] a)
|
||||||
|
::
|
||||||
|
++ round-constant
|
||||||
|
|= c=@ud
|
||||||
|
=- (snag (mod c 24) -)
|
||||||
|
^- (list @ux)
|
||||||
|
:~ 0x1
|
||||||
|
0x8082
|
||||||
|
0x8000.0000.0000.808a
|
||||||
|
0x8000.0000.8000.8000
|
||||||
|
0x808b
|
||||||
|
0x8000.0001
|
||||||
|
0x8000.0000.8000.8081
|
||||||
|
0x8000.0000.0000.8009
|
||||||
|
0x8a
|
||||||
|
0x88
|
||||||
|
0x8000.8009
|
||||||
|
0x8000.000a
|
||||||
|
0x8000.808b
|
||||||
|
0x8000.0000.0000.008b
|
||||||
|
0x8000.0000.0000.8089
|
||||||
|
0x8000.0000.0000.8003
|
||||||
|
0x8000.0000.0000.8002
|
||||||
|
0x8000.0000.0000.0080
|
||||||
|
0x800a
|
||||||
|
0x8000.0000.8000.000a
|
||||||
|
0x8000.0000.8000.8081
|
||||||
|
0x8000.0000.0000.8080
|
||||||
|
0x8000.0001
|
||||||
|
0x8000.0000.8000.8008
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ rotation-offset
|
||||||
|
|= x=@ud
|
||||||
|
=- (snag x -)
|
||||||
|
^- (list @ud)
|
||||||
|
:~ 0 1 62 28 27
|
||||||
|
36 44 6 55 20
|
||||||
|
3 10 43 25 39
|
||||||
|
41 45 15 21 8
|
||||||
|
18 2 61 56 14
|
||||||
|
==
|
||||||
|
--
|
||||||
|
-- ::keccak
|
||||||
-- ::crypto
|
-- ::crypto
|
||||||
:: ::::
|
:: ::::
|
||||||
:::: ++unity :: (2c) unit promotion
|
:::: ++unity :: (2c) unit promotion
|
||||||
@ -3803,10 +4134,10 @@
|
|||||||
:: :: ++clot:en-xml:html
|
:: :: ++clot:en-xml:html
|
||||||
++ clot ~+ :: self-closing tags
|
++ clot ~+ :: self-closing tags
|
||||||
%~ has in
|
%~ has in
|
||||||
%- silt ^- (list term) :~
|
%- silt ^- (list term) :~
|
||||||
%area %base %br %col %command %embed %hr %img %inputt
|
%area %base %br %col %command %embed %hr %img %inputt
|
||||||
%keygen %link %meta %param %source %track %wbr
|
%keygen %link %meta %param %source %track %wbr
|
||||||
== ==
|
==
|
||||||
-- ::en-xml
|
-- ::en-xml
|
||||||
:: :: ++de-xml:html
|
:: :: ++de-xml:html
|
||||||
++ de-xml :: xml parser
|
++ de-xml :: xml parser
|
||||||
|
@ -1,280 +1,242 @@
|
|||||||
/+ new-hoon, tester
|
/+ new-hoon, tester
|
||||||
=, ls:new-hoon
|
=, ls:new-hoon
|
||||||
|_ tester-type:tester
|
|_ _tester:tester
|
||||||
++ test-head
|
++ test-head
|
||||||
(expect-eq (head [1 ~]) 1 "head")
|
(expect-eq !>([1 (head [1 ~])]))
|
||||||
::
|
::
|
||||||
++ test-last
|
++ test-last
|
||||||
(expect-eq (last:ls [1 2 ~]) 2 "last")
|
(expect-eq !>([2 (last:ls [1 2 ~])]))
|
||||||
::
|
::
|
||||||
++ test-tail
|
++ test-tail
|
||||||
(expect-eq (tail [1 2 3 ~]) [2 3 ~] "tail")
|
(expect-eq !>([[2 3 ~] (tail [1 2 3 ~])]))
|
||||||
::
|
::
|
||||||
++ test-init
|
++ test-init
|
||||||
(expect-eq (init [1 2 3 ~]) [1 2 ~] "init")
|
(expect-eq !>([[1 2 ~] (init [1 2 3 ~])]))
|
||||||
::
|
::
|
||||||
++ test-size
|
++ test-size
|
||||||
(expect-eq (size ['a' 'b' 'c' ~]) 3 "size")
|
(expect-eq !>([3 (size ['a' 'b' 'c' ~])]))
|
||||||
::
|
::
|
||||||
++ test-map
|
++ test-map
|
||||||
(expect-eq (map:ls [1 2 ~] |=(a/@ (add 1 a))) [2 3 ~] "map")
|
(expect-eq !>([[2 3 ~] (map:ls [1 2 ~] |=(a/@ (add 1 a)))]))
|
||||||
::
|
::
|
||||||
++ test-reverse
|
++ test-reverse
|
||||||
(expect-eq (reverse [1 2 3 ~]) [3 2 1 ~] "reverse")
|
(expect-eq !>([[3 2 1 ~] (reverse [1 2 3 ~])]))
|
||||||
::
|
::
|
||||||
++ test-intersperse
|
++ test-intersperse
|
||||||
(expect-eq (intersperse 1 [5 5 5 ~]) [5 1 5 1 5 ~] "intersperse")
|
(expect-eq !>([[5 1 5 1 5 ~] (intersperse 1 [5 5 5 ~])]))
|
||||||
::
|
::
|
||||||
++ test-intercalate
|
++ test-intercalate
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ["one,two,three"]
|
||||||
(intercalate "," ["one" "two" "three" ~])
|
(intercalate "," ["one" "two" "three" ~])
|
||||||
["one,two,three"]
|
|
||||||
"intercalate"
|
|
||||||
::
|
::
|
||||||
++ test-transpose
|
++ test-transpose
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ~[~[1 4] ~[2 5] ~[3 6]]
|
||||||
(transpose ~[~[1 2 3] ~[4 5 6]])
|
(transpose ~[~[1 2 3] ~[4 5 6]])
|
||||||
~[~[1 4] ~[2 5] ~[3 6]]
|
|
||||||
"transpose"
|
|
||||||
::
|
::
|
||||||
++ test-foldl
|
++ test-foldl
|
||||||
(expect-eq (foldl [1 2 3 ~] 3 |=({a/@ b/@} (add a b))) 9 "foldl")
|
(expect-eq !>([9 (foldl [1 2 3 ~] 3 |=({a/@ b/@} (add a b)))]))
|
||||||
::
|
::
|
||||||
++ test-foldr
|
++ test-foldr
|
||||||
(expect-eq (foldr [1 2 3 ~] 1 |=({a/@ b/@} (add a b))) 7 "foldr")
|
(expect-eq !>([7 (foldr [1 2 3 ~] 1 |=({a/@ b/@} (add a b)))]))
|
||||||
::
|
::
|
||||||
++ test-concat
|
++ test-concat
|
||||||
(expect-eq (concat ~[~[1 2] ~[3 4]]) ~[1 2 3 4] "concat")
|
(expect-eq !>([~[1 2 3 4] (concat ~[~[1 2] ~[3 4]])]))
|
||||||
::
|
::
|
||||||
++ test-weld
|
++ test-weld
|
||||||
(expect-eq (weld:ls ~[1 2 3] ~["one" "two"]) ~[1 2 3 "one" "two"] "weld")
|
(expect-eq !>([~[1 2 3 "one" "two"] (weld:ls ~[1 2 3] ~["one" "two"])]))
|
||||||
::
|
::
|
||||||
++ test-any-true
|
++ test-any-true
|
||||||
(expect-eq (any [1 2 3 ~] |=(a/@ =(a 2))) %.y "any true")
|
(expect-eq !>([%.y (any [1 2 3 ~] |=(a/@ =(a 2)))]))
|
||||||
::
|
::
|
||||||
++ test-any-false
|
++ test-any-false
|
||||||
(expect-eq (any [1 2 3 ~] |=(a/@ =(a 8))) %.n "any false")
|
(expect-eq !>([%.n (any [1 2 3 ~] |=(a/@ =(a 8)))]))
|
||||||
::
|
::
|
||||||
++ test-all-true
|
++ test-all-true
|
||||||
(expect-eq (all [1 1 1 ~] |=(a/@ =(a 1))) %.y "all true")
|
(expect-eq !>([%.y (all [1 1 1 ~] |=(a/@ =(a 1)))]))
|
||||||
::
|
::
|
||||||
++ test-all-false
|
++ test-all-false
|
||||||
(expect-eq (all [1 3 1 ~] |=(a/@ =(a 1))) %.n "all false")
|
(expect-eq !>([%.n (all [1 3 1 ~] |=(a/@ =(a 1)))]))
|
||||||
::
|
::
|
||||||
++ test-scanl
|
++ test-scanl
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ~[0 1 3 6]
|
||||||
(scanl ~[1 2 3] 0 |=({a/@ b/@} (add a b)))
|
(scanl ~[1 2 3] 0 |=({a/@ b/@} (add a b)))
|
||||||
~[0 1 3 6]
|
|
||||||
"scanl"
|
|
||||||
::
|
::
|
||||||
++ test-scanl1
|
++ test-scanl1
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ~[1 3 6]
|
||||||
(scanl1 ~[1 2 3] |=({a/@ b/@} (add a b)))
|
(scanl1 ~[1 2 3] |=({a/@ b/@} (add a b)))
|
||||||
~[1 3 6]
|
|
||||||
"scanl1"
|
|
||||||
::
|
::
|
||||||
++ test-scanr
|
++ test-scanr
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ~[6 5 3 0]
|
||||||
(scanr ~[1 2 3] 0 |=({a/@ b/@} (add a b)))
|
(scanr ~[1 2 3] 0 |=({a/@ b/@} (add a b)))
|
||||||
~[6 5 3 0]
|
|
||||||
"scanr"
|
|
||||||
::
|
::
|
||||||
++ test-scanr1
|
++ test-scanr1
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ~[6 5 3]
|
||||||
(scanr1 ~[1 2 3] |=({a/@ b/@} (add a b)))
|
(scanr1 ~[1 2 3] |=({a/@ b/@} (add a b)))
|
||||||
~[6 5 3]
|
|
||||||
"scanr1"
|
|
||||||
::
|
::
|
||||||
++ test-map-foldl
|
++ test-map-foldl
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [7 ~[2 3 5]]
|
||||||
(map-foldl ~[1 2 3] 1 |=({a/@ b/@} [(add a b) (add 1 a)]))
|
(map-foldl ~[1 2 3] 1 |=({a/@ b/@} [(add a b) (add 1 a)]))
|
||||||
[7 ~[2 3 5]]
|
|
||||||
"map-foldl"
|
|
||||||
::
|
::
|
||||||
++ test-map-foldr
|
++ test-map-foldr
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [7 ~[7 5 2]]
|
||||||
(map-foldr ~[1 2 3] 1 |=({a/@ b/@} [(add a b) (add 1 a)]))
|
(map-foldr ~[1 2 3] 1 |=({a/@ b/@} [(add a b) (add 1 a)]))
|
||||||
[7 ~[7 5 2]]
|
|
||||||
"map-foldr"
|
|
||||||
::
|
::
|
||||||
++ test-unfoldr
|
++ test-unfoldr
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [5 4 3 2 1 ~]
|
||||||
(unfoldr 5 |=(a/@ ?:(=(a 0) ~ `[a (dec a)])))
|
(unfoldr 5 |=(a/@ ?:(=(a 0) ~ `[a (dec a)])))
|
||||||
[5 4 3 2 1 ~]
|
|
||||||
"unfoldr"
|
|
||||||
::
|
::
|
||||||
++ test-take
|
++ test-take
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 2 3 ~]
|
||||||
(take 3 ~[1 2 3 4 5])
|
(take 3 ~[1 2 3 4 5])
|
||||||
[1 2 3 ~]
|
|
||||||
"take"
|
|
||||||
::
|
::
|
||||||
++ test-drop
|
++ test-drop
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [4 5 ~]
|
||||||
(drop:ls 3 ~[1 2 3 4 5])
|
(drop:ls 3 ~[1 2 3 4 5])
|
||||||
[4 5 ~]
|
|
||||||
"drop"
|
|
||||||
::
|
::
|
||||||
++ test-split-at
|
++ test-split-at
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [[1 2 3 ~] [4 5 ~]]
|
||||||
(split-at 3 ~[1 2 3 4 5])
|
(split-at 3 ~[1 2 3 4 5])
|
||||||
[[1 2 3 ~] [4 5 ~]]
|
|
||||||
"split-at"
|
|
||||||
::
|
::
|
||||||
++ test-take-while
|
++ test-take-while
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 2 ~]
|
||||||
(take-while ~[1 2 3 4 5] |=(a/@ (lth a 3)))
|
(take-while ~[1 2 3 4 5] |=(a/@ (lth a 3)))
|
||||||
[1 2 ~]
|
|
||||||
"take-while"
|
|
||||||
::
|
::
|
||||||
++ test-drop-while
|
++ test-drop-while
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [3 4 5 ~]
|
||||||
(drop-while ~[1 2 3 4 5] |=(a/@ (lth a 3)))
|
(drop-while ~[1 2 3 4 5] |=(a/@ (lth a 3)))
|
||||||
[3 4 5 ~]
|
|
||||||
"drop-while"
|
|
||||||
::
|
::
|
||||||
++ test-drop-while-end
|
++ test-drop-while-end
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [5 5 1 ~]
|
||||||
(drop-while-end ~[5 5 1 5 5] |=(a/@ =(a 5)))
|
(drop-while-end ~[5 5 1 5 5] |=(a/@ =(a 5)))
|
||||||
[5 5 1 ~]
|
|
||||||
"drop-while-end"
|
|
||||||
::
|
::
|
||||||
++ test-split-on
|
++ test-split-on
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [[1 2 ~] [3 4 1 2 3 4 ~]]
|
||||||
(split-on ~[1 2 3 4 1 2 3 4] |=(a/@ (lth a 3)))
|
(split-on ~[1 2 3 4 1 2 3 4] |=(a/@ (lth a 3)))
|
||||||
[[1 2 ~] [3 4 1 2 3 4 ~]]
|
|
||||||
"split-on"
|
|
||||||
::
|
::
|
||||||
++ test-break
|
++ test-break
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [[1 2 3 ~] [4 1 2 3 4 ~]]
|
||||||
(break ~[1 2 3 4 1 2 3 4] |=(a/@ (gth a 3)))
|
(break ~[1 2 3 4 1 2 3 4] |=(a/@ (gth a 3)))
|
||||||
[[1 2 3 ~] [4 1 2 3 4 ~]]
|
|
||||||
"break"
|
|
||||||
::
|
::
|
||||||
++ test-strip-prefix
|
++ test-strip-prefix
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [~ "bar"]
|
||||||
(strip-prefix "foo" "foobar")
|
(strip-prefix "foo" "foobar")
|
||||||
[~ "bar"]
|
|
||||||
"break"
|
|
||||||
::
|
::
|
||||||
++ test-inits
|
++ test-inits
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ["a" "ab" "abc" ~]
|
||||||
(inits "abc")
|
(inits "abc")
|
||||||
["a" "ab" "abc" ~]
|
|
||||||
"inits"
|
|
||||||
::
|
::
|
||||||
++ test-tails
|
++ test-tails
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ["abc" "bc" "c" ~]
|
||||||
(tails "abc")
|
(tails "abc")
|
||||||
["abc" "bc" "c" ~]
|
|
||||||
"tails"
|
|
||||||
::
|
::
|
||||||
++ test-is-prefix-of
|
++ test-is-prefix-of
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- %.y
|
||||||
(is-prefix-of "foo" "foobar")
|
(is-prefix-of "foo" "foobar")
|
||||||
%.y
|
|
||||||
"is-prefix-of"
|
|
||||||
::
|
::
|
||||||
++ test-is-suffix-of
|
++ test-is-suffix-of
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- %.y
|
||||||
(is-suffix-of "bar" "foobar")
|
(is-suffix-of "bar" "foobar")
|
||||||
%.y
|
|
||||||
"is-suffix-of"
|
|
||||||
::
|
::
|
||||||
++ test-is-infix-of
|
++ test-is-infix-of
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- %.y
|
||||||
(is-infix-of "ob" "foobar")
|
(is-infix-of "ob" "foobar")
|
||||||
%.y
|
|
||||||
"is-infix-of"
|
|
||||||
::
|
::
|
||||||
++ test-elem
|
++ test-elem
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- %.y
|
||||||
(elem 5 [1 2 3 4 5 ~])
|
(elem 5 [1 2 3 4 5 ~])
|
||||||
%.y
|
|
||||||
"elem"
|
|
||||||
::
|
::
|
||||||
++ test-lookup
|
++ test-lookup
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [~ 2]
|
||||||
(lookup "two" [["one" 1] ["two" 2] ["three" 3] ~])
|
(lookup "two" [["one" 1] ["two" 2] ["three" 3] ~])
|
||||||
[~ 2]
|
|
||||||
"lookup"
|
|
||||||
::
|
::
|
||||||
++ test-find
|
++ test-find
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [~ 5]
|
||||||
(find:ls [3 2 1 5 1 2 3 ~] |=(a/@ (gth a 3)))
|
(find:ls [3 2 1 5 1 2 3 ~] |=(a/@ (gth a 3)))
|
||||||
[~ 5]
|
|
||||||
"find"
|
|
||||||
::
|
::
|
||||||
++ test-filter
|
++ test-filter
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 1 1 ~]
|
||||||
(filter [1 2 1 2 1 ~] |=(a/@ =(a 2)))
|
(filter [1 2 1 2 1 ~] |=(a/@ =(a 2)))
|
||||||
[1 1 1 ~]
|
|
||||||
"filter"
|
|
||||||
::
|
::
|
||||||
++ test-partition
|
++ test-partition
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [[2 2 ~] [1 1 1 ~]]
|
||||||
(partition [1 2 1 2 1 ~] |=(a/@ =(a 2)))
|
(partition [1 2 1 2 1 ~] |=(a/@ =(a 2)))
|
||||||
[[2 2 ~] [1 1 1 ~]]
|
|
||||||
"partition"
|
|
||||||
::
|
::
|
||||||
++ test-elem-index
|
++ test-elem-index
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- `1
|
||||||
(elem-index 2 [1 2 3 4 ~])
|
(elem-index 2 [1 2 3 4 ~])
|
||||||
`1
|
|
||||||
"elem-index"
|
|
||||||
::
|
::
|
||||||
++ test-elem-indices
|
++ test-elem-indices
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 3 ~]
|
||||||
(elem-indices 2 [1 2 1 2 ~])
|
(elem-indices 2 [1 2 1 2 ~])
|
||||||
[1 3 ~]
|
|
||||||
"elem-indices"
|
|
||||||
::
|
::
|
||||||
++ test-find-index
|
++ test-find-index
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- `1
|
||||||
(find-index [1 2 3 ~] |=(a/@ =(a 2)))
|
(find-index [1 2 3 ~] |=(a/@ =(a 2)))
|
||||||
`1
|
|
||||||
"find-index"
|
|
||||||
::
|
::
|
||||||
++ test-find-indices
|
++ test-find-indices
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 3 ~]
|
||||||
(find-indices [1 2 1 2 ~] |=(a/@ =(a 2)))
|
(find-indices [1 2 1 2 ~] |=(a/@ =(a 2)))
|
||||||
[1 3 ~]
|
|
||||||
"find-indices"
|
|
||||||
::
|
::
|
||||||
++ test-zip
|
++ test-zip
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [[1 4 7 ~] [2 5 8 ~] [3 6 9 ~] ~]
|
||||||
(zip [[1 2 3 ~] [4 5 6 ~] [7 8 9 ~] ~])
|
(zip [[1 2 3 ~] [4 5 6 ~] [7 8 9 ~] ~])
|
||||||
[[1 4 7 ~] [2 5 8 ~] [3 6 9 ~] ~]
|
|
||||||
"zip"
|
|
||||||
::
|
::
|
||||||
++ test-unique
|
++ test-unique
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 2 3 ~]
|
||||||
(unique [1 2 3 1 2 3 ~])
|
(unique [1 2 3 1 2 3 ~])
|
||||||
[1 2 3 ~]
|
|
||||||
"unique"
|
|
||||||
::
|
::
|
||||||
++ test-delete
|
++ test-delete
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 3 2 ~]
|
||||||
(delete 2 [1 2 3 2 ~])
|
(delete 2 [1 2 3 2 ~])
|
||||||
[1 3 2 ~]
|
|
||||||
"delete"
|
|
||||||
::
|
::
|
||||||
++ test-delete-firsts
|
++ test-delete-firsts
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 2 3 4 ~]
|
||||||
(delete-firsts [1 2 2 2 3 4 5 ~] [2 2 5 ~])
|
(delete-firsts [1 2 2 2 3 4 5 ~] [2 2 5 ~])
|
||||||
[1 2 3 4 ~]
|
|
||||||
"delete-firsts"
|
|
||||||
::
|
::
|
||||||
++ test-union
|
++ test-union
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 2 3 4 5 ~]
|
||||||
(union [1 2 3 ~] [4 2 5 ~])
|
(union [1 2 3 ~] [4 2 5 ~])
|
||||||
[1 2 3 4 5 ~]
|
|
||||||
"union"
|
|
||||||
::
|
::
|
||||||
++ test-intersect
|
++ test-intersect
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [6 6 8 ~]
|
||||||
(intersect [5 6 6 7 8 ~] [9 8 8 6 ~])
|
(intersect [5 6 6 7 8 ~] [9 8 8 6 ~])
|
||||||
[6 6 8 ~]
|
|
||||||
"intersect"
|
|
||||||
--
|
--
|
||||||
|
|
||||||
|
@ -2,108 +2,88 @@
|
|||||||
=, dct:new-hoon
|
=, dct:new-hoon
|
||||||
=+ four=(from-list [[1 "one"] [2 "two"] [3 "three"] [4 "four"] ~])
|
=+ four=(from-list [[1 "one"] [2 "two"] [3 "three"] [4 "four"] ~])
|
||||||
=+ three=(from-list [[1 "one"] [2 "two"] [3 "three"] ~])
|
=+ three=(from-list [[1 "one"] [2 "two"] [3 "three"] ~])
|
||||||
|_ tester-type:tester
|
|_ _tester:tester
|
||||||
++ test-empty
|
++ test-empty
|
||||||
(expect-eq (empty four) %.n "empty")
|
(expect-eq !>([%.n (empty four)]))
|
||||||
::
|
::
|
||||||
++ test-size
|
++ test-size
|
||||||
(expect-eq (size four) 4 "size")
|
(expect-eq !>([4 (size four)]))
|
||||||
::
|
::
|
||||||
++ test-member
|
++ test-member
|
||||||
(expect-eq (member four 4) %.y "member")
|
(expect-eq !>([%.y (member four 4)]))
|
||||||
::
|
::
|
||||||
++ test-put-with
|
++ test-put-with
|
||||||
=+ ints=(from-list [["one" 1] ["two" 2] ["three" 3] ["four" 4] ~])
|
%- expect-eq !>
|
||||||
%^ expect-eq
|
:- (from-list [["one" 1] ["two" 2] ["three" 5] ["four" 4] ~])
|
||||||
|
=/ ints (from-list [["one" 1] ["two" 2] ["three" 3] ["four" 4] ~])
|
||||||
(put-with ints "three" 2 add)
|
(put-with ints "three" 2 add)
|
||||||
(from-list [["one" 1] ["two" 2] ["three" 5] ["four" 4] ~])
|
|
||||||
"put-with"
|
|
||||||
::
|
::
|
||||||
++ test-put-with-key
|
++ test-put-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- (from-list [[1 "one"] [2 "two"] [3 "three"] [4 "4four"] ~])
|
||||||
(put-with-key four 4 "four" |=({a/@ud b/tape c/tape} (weld (scow %ud a) b)))
|
(put-with-key four 4 "four" |=({a/@ud b/tape c/tape} (weld (scow %ud a) b)))
|
||||||
(from-list [[1 "one"] [2 "two"] [3 "three"] [4 "4four"] ~])
|
|
||||||
"put-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-put-lookup-with-key
|
++ test-put-lookup-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%- put-lookup-with-key :^
|
:- [`"four" (from-list [[1 "one"] [2 "two"] [3 "three"] [4 "five"] ~])]
|
||||||
four
|
%^ put-lookup-with-key four
|
||||||
4
|
4
|
||||||
"five"
|
:- "five"
|
||||||
|=({key/@ud old/tape new/tape} new)
|
|=({key/@ud old/tape new/tape} new)
|
||||||
:- `"four"
|
|
||||||
(from-list [[1 "one"] [2 "two"] [3 "three"] [4 "five"] ~])
|
|
||||||
"put-lookup-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-delete
|
++ test-delete
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- three
|
||||||
(delete four 4)
|
(delete four 4)
|
||||||
three
|
|
||||||
"delete"
|
|
||||||
::
|
::
|
||||||
++ test-adjust
|
++ test-adjust
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ adjust
|
:- (from-list [[1 "one"] [2 "two"] [3 "thisthree"] [4 "four"] ~])
|
||||||
four
|
%^ adjust four
|
||||||
3
|
3
|
||||||
|=(a/tape (weld "this" a))
|
|=(a/tape (weld "this" a))
|
||||||
(from-list [[1 "one"] [2 "two"] [3 "thisthree"] [4 "four"] ~])
|
|
||||||
"adjust"
|
|
||||||
::
|
::
|
||||||
++ test-adjust-with-key
|
++ test-adjust-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ adjust-with-key
|
:- (from-list [[1 "one"] [2 "two"] [3 "3three"] [4 "four"] ~])
|
||||||
four
|
%^ adjust-with-key four
|
||||||
3
|
3
|
||||||
|=({a/@ud b/tape} (weld (scow %ud a) b))
|
|=({a/@ud b/tape} (weld (scow %ud a) b))
|
||||||
(from-list [[1 "one"] [2 "two"] [3 "3three"] [4 "four"] ~])
|
|
||||||
"adjust-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-update
|
++ test-update
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ update
|
:- (from-list [[1 "one"] [2 "two"] [4 "four"] ~])
|
||||||
four
|
%^ update four
|
||||||
3
|
3
|
||||||
|=(a/tape `(maybe tape)`~)
|
|=(a/tape `(maybe tape)`~)
|
||||||
(from-list [[1 "one"] [2 "two"] [4 "four"] ~])
|
|
||||||
"update"
|
|
||||||
::
|
::
|
||||||
++ test-update-with-key
|
++ test-update-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ update-with-key
|
:- (from-list [[1 "one"] [2 "two"] [3 "3three"] [4 "four"] ~])
|
||||||
four
|
%^ update-with-key four
|
||||||
3
|
3
|
||||||
|=({a/@u b/tape} `(maybe tape)`[~ (weld (scow %ud a) b)])
|
|=({a/@u b/tape} `(maybe tape)`[~ (weld (scow %ud a) b)])
|
||||||
(from-list [[1 "one"] [2 "two"] [3 "3three"] [4 "four"] ~])
|
|
||||||
"update-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-alter-as-add
|
++ test-alter-as-add
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ alter
|
:- (from-list [[1 "one"] [2 "two"] [3 "three"] [4 "four"] [5 "five"] ~])
|
||||||
four
|
%^ alter four
|
||||||
5
|
5
|
||||||
|=(a/(maybe tape) `(maybe tape)`[~ "five"])
|
|=(a/(maybe tape) `(maybe tape)`[~ "five"])
|
||||||
(from-list [[1 "one"] [2 "two"] [3 "three"] [4 "four"] [5 "five"] ~])
|
|
||||||
"alter (as add)"
|
|
||||||
::
|
::
|
||||||
++ test-alter-as-delete
|
++ test-alter-as-delete
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ alter
|
:- (from-list [[1 "one"] [3 "three"] [4 "four"] ~])
|
||||||
four
|
%^ alter four
|
||||||
2
|
2
|
||||||
|=(a/(maybe tape) `(maybe tape)`~)
|
|=(a/(maybe tape) `(maybe tape)`~)
|
||||||
(from-list [[1 "one"] [3 "three"] [4 "four"] ~])
|
|
||||||
"alter (as delete)"
|
|
||||||
::
|
::
|
||||||
++ test-alter-as-change
|
++ test-alter-as-change
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ alter
|
:- (from-list [[1 "one"] [2 "dos"] [3 "three"] [4 "four"] ~])
|
||||||
four
|
%^ alter four
|
||||||
2
|
2
|
||||||
|=(a/(maybe tape) `(maybe tape)`[~ "dos"])
|
|=(a/(maybe tape) `(maybe tape)`[~ "dos"])
|
||||||
(from-list [[1 "one"] [2 "dos"] [3 "three"] [4 "four"] ~])
|
|
||||||
"alter (as change)"
|
|
||||||
::
|
::
|
||||||
++ check-alter
|
++ check-alter
|
||||||
:: check random dicts of 50 items with 40 random operations done on them
|
:: check random dicts of 50 items with 40 random operations done on them
|
||||||
@ -133,228 +113,192 @@
|
|||||||
$(i +(i))
|
$(i +(i))
|
||||||
::
|
::
|
||||||
++ test-union
|
++ test-union
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ union
|
:- (from-list [[1 "left"] [2 "left"] [3 "right"] ~])
|
||||||
|
%+ union
|
||||||
(from-list [[1 "left"] [2 "left"] ~])
|
(from-list [[1 "left"] [2 "left"] ~])
|
||||||
(from-list [[2 "right"] [3 "right"] ~])
|
(from-list [[2 "right"] [3 "right"] ~])
|
||||||
(from-list [[1 "left"] [2 "left"] [3 "right"] ~])
|
|
||||||
"union"
|
|
||||||
::
|
::
|
||||||
++ test-union-with
|
++ test-union-with
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ union-with
|
:- (from-list [[1 "left"] [2 "leftright"] [3 "right"] ~])
|
||||||
(from-list [[1 "left"] [2 "left"] ~])
|
%^ union-with
|
||||||
|
(from-list [[1 "left"] [2 "left"] ~])
|
||||||
(from-list [[2 "right"] [3 "right"] ~])
|
(from-list [[2 "right"] [3 "right"] ~])
|
||||||
|=({a/tape b/tape} (weld a b))
|
|=({a/tape b/tape} (weld a b))
|
||||||
(from-list [[1 "left"] [2 "leftright"] [3 "right"] ~])
|
|
||||||
"union-with"
|
|
||||||
::
|
::
|
||||||
++ test-union-with-key
|
++ test-union-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ union-with-key
|
:- (from-list [[1 "left"] [2 "2leftright"] [3 "right"] ~])
|
||||||
(from-list [[1 "left"] [2 "left"] ~])
|
%^ union-with-key
|
||||||
|
(from-list [[1 "left"] [2 "left"] ~])
|
||||||
(from-list [[2 "right"] [3 "right"] ~])
|
(from-list [[2 "right"] [3 "right"] ~])
|
||||||
|=({a/@ud b/tape c/tape} :(weld `tape`(scow %ud a) b c))
|
|=({a/@ud b/tape c/tape} :(weld `tape`(scow %ud a) b c))
|
||||||
(from-list [[1 "left"] [2 "2leftright"] [3 "right"] ~])
|
|
||||||
"union-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-map
|
++ test-map
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ map:dct
|
:- (from-list [[1 'one'] [2 'two'] [3 'three'] ~])
|
||||||
three
|
(map:dct three crip)
|
||||||
crip
|
|
||||||
(from-list [[1 'one'] [2 'two'] [3 'three'] ~])
|
|
||||||
"map"
|
|
||||||
::
|
::
|
||||||
++ test-map-with-key
|
++ test-map-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ map-with-key
|
:- (from-list [[1 "1one"] [2 "2two"] [3 "3three"] ~])
|
||||||
three
|
%+ map-with-key three
|
||||||
|=({a/@u b/tape} (weld (scow %ud a) b))
|
|=({a/@u b/tape} (weld (scow %ud a) b))
|
||||||
(from-list [[1 "1one"] [2 "2two"] [3 "3three"] ~])
|
|
||||||
"map-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-map-fold
|
++ test-map-fold
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ map-fold
|
:- :- "Everything: two one three"
|
||||||
three
|
(from-list [[1 "oneX"] [2 "twoX"] [3 "threeX"] ~])
|
||||||
"Everything: "
|
%^ map-fold three
|
||||||
|= {accumulator/tape value/tape}
|
"Everything:"
|
||||||
[(weld accumulator value) (weld value "X")]
|
|= {accumulator/tape value/tape}
|
||||||
:- "Everything: twoonethree"
|
[:(weld accumulator " " value) (weld value "X")]
|
||||||
(from-list [[1 "oneX"] [2 "twoX"] [3 "threeX"] ~])
|
|
||||||
"map-fold"
|
|
||||||
::
|
::
|
||||||
++ test-map-keys
|
++ test-map-keys
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ map-keys
|
:- (from-list [[11 "one"] [12 "two"] [13 "three"] ~])
|
||||||
three
|
%+ map-keys three
|
||||||
|= a/@u
|
|=(a/@u (add a 10))
|
||||||
(add a 10)
|
|
||||||
(from-list [[11 "one"] [12 "two"] [13 "three"] ~])
|
|
||||||
"map-keys"
|
|
||||||
::
|
::
|
||||||
++ test-map-keys-with
|
++ test-map-keys-with
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ map-keys-with
|
:- (from-list [[42 "twothreeone"] ~])
|
||||||
three
|
%^ map-keys-with three
|
||||||
|=(a/@u 42)
|
|=(a/@u 42)
|
||||||
weld
|
weld
|
||||||
(from-list [[42 "twothreeone"] ~])
|
|
||||||
"map-keys-with"
|
|
||||||
::
|
::
|
||||||
++ test-fold
|
++ test-fold
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ fold
|
:- "Everything: twoonethree"
|
||||||
three
|
%^ fold three
|
||||||
"Everything: "
|
"Everything: "
|
||||||
:: todo: this works but replacing with just ++weld causes an out of loom.
|
:: todo: this works but replacing with just ++weld causes an out of loom.
|
||||||
|= {accumulator/tape value/tape}
|
|= {accumulator/tape value/tape}
|
||||||
^- tape
|
^- tape
|
||||||
(weld accumulator value)
|
(weld accumulator value)
|
||||||
"Everything: twoonethree"
|
|
||||||
"map-fold"
|
|
||||||
::
|
::
|
||||||
++ test-fold-with-keys
|
++ test-fold-with-keys
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ fold-with-keys
|
:- "Everything: 2two1one3three"
|
||||||
three
|
%^ fold-with-keys three
|
||||||
"Everything: "
|
"Everything: "
|
||||||
|= {accumulator/tape key/@u value/tape}
|
|= {accumulator/tape key/@u value/tape}
|
||||||
^- tape
|
^- tape
|
||||||
:(weld accumulator (scow %ud key) value)
|
:(weld accumulator (scow %ud key) value)
|
||||||
"Everything: 2two1one3three"
|
|
||||||
"map-fold-with-keys"
|
|
||||||
::
|
::
|
||||||
++ test-elems
|
++ test-elems
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ["two" "three" "one" ~]
|
||||||
(elems three)
|
(elems three)
|
||||||
["two" "three" "one" ~]
|
|
||||||
"elems"
|
|
||||||
::
|
::
|
||||||
++ test-keys
|
++ test-keys
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [2 3 1 ~]
|
||||||
(keys three)
|
(keys three)
|
||||||
[2 3 1 ~]
|
|
||||||
"keys"
|
|
||||||
::
|
::
|
||||||
++ test-keys-set
|
++ test-keys-set
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- (si:nl [2 3 1 ~])
|
||||||
(keys-set three)
|
(keys-set three)
|
||||||
(si:nl [2 3 1 ~])
|
|
||||||
"keys-set"
|
|
||||||
::
|
::
|
||||||
++ test-from-set
|
++ test-from-set
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ from-set
|
:- (from-list [[1 "1"] [2 "2"] [3 "3"] ~])
|
||||||
|
%+ from-set
|
||||||
(si:nl [1 2 3 ~])
|
(si:nl [1 2 3 ~])
|
||||||
|= a/@u
|
|=(a/@u (scow %ud a))
|
||||||
(scow %ud a)
|
|
||||||
(from-list [[1 "1"] [2 "2"] [3 "3"] ~])
|
|
||||||
"from-set"
|
|
||||||
::
|
::
|
||||||
++ test-from-list-with
|
++ test-from-list-with
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ from-list-with
|
:- (from-list [[1 1] [2 2] [3 3] ~])
|
||||||
|
%+ from-list-with
|
||||||
[[1 1] [2 1] [2 1] [3 3] ~]
|
[[1 1] [2 1] [2 1] [3 3] ~]
|
||||||
add
|
add
|
||||||
(from-list [[1 1] [2 2] [3 3] ~])
|
|
||||||
"from-list-with"
|
|
||||||
::
|
::
|
||||||
++ test-filter
|
++ test-filter
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ filter
|
:- (from-list [[1 1] [2 1] [4 1] ~])
|
||||||
|
%+ filter
|
||||||
(from-list [[1 1] [2 1] [3 2] [4 1] ~])
|
(from-list [[1 1] [2 1] [3 2] [4 1] ~])
|
||||||
|=(a/@u !=(a 1))
|
|=(a/@u !=(a 1))
|
||||||
(from-list [[1 1] [2 1] [4 1] ~])
|
|
||||||
"filter"
|
|
||||||
::
|
::
|
||||||
++ test-filter-with-key
|
++ test-filter-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ filter-with-key
|
:- (from-list [[1 1] [3 2] [4 1] ~])
|
||||||
|
%+ filter-with-key
|
||||||
(from-list [[1 1] [2 1] [3 2] [4 1] ~])
|
(from-list [[1 1] [2 1] [3 2] [4 1] ~])
|
||||||
|=({a/@u b/@u} =(a 2))
|
|=({a/@u b/@u} =(a 2))
|
||||||
(from-list [[1 1] [3 2] [4 1] ~])
|
|
||||||
"filter-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-restrict-keys
|
++ test-restrict-keys
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ restrict-keys
|
:- (from-list [[1 1] [3 3] [5 5] ~])
|
||||||
|
%+ restrict-keys
|
||||||
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
||||||
(si:nl [1 3 5 ~])
|
(si:nl [1 3 5 ~])
|
||||||
(from-list [[1 1] [3 3] [5 5] ~])
|
|
||||||
"restrict-keys"
|
|
||||||
::
|
::
|
||||||
++ test-without-keys
|
++ test-without-keys
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ without-keys
|
:- (from-list [[2 2] [4 4] ~])
|
||||||
|
%+ without-keys
|
||||||
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
||||||
(si:nl [1 3 5 ~])
|
(si:nl [1 3 5 ~])
|
||||||
(from-list [[2 2] [4 4] ~])
|
|
||||||
"restrict-keys"
|
|
||||||
::
|
::
|
||||||
++ test-partition
|
++ test-partition
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ partition
|
:- :- (from-list [[1 1] [3 3] ~])
|
||||||
|
(from-list [[2 2] [4 4] [5 5] ~])
|
||||||
|
%+ partition
|
||||||
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
||||||
|=(a/@u |(=(a 1) =(a 3)))
|
|=(a/@u |(=(a 1) =(a 3)))
|
||||||
:- (from-list [[1 1] [3 3] ~])
|
|
||||||
(from-list [[2 2] [4 4] [5 5] ~])
|
|
||||||
"partition"
|
|
||||||
::
|
::
|
||||||
++ test-map-maybe
|
++ test-map-maybe
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ map-maybe
|
:- (from-list [[1 1] [2 2] [4 4] [5 5] ~])
|
||||||
|
%+ map-maybe
|
||||||
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
||||||
|=(a/@u ?:(=(a 3) ~ `a))
|
|=(a/@u ?:(=(a 3) ~ `a))
|
||||||
(from-list [[1 1] [2 2] [4 4] [5 5] ~])
|
|
||||||
"map-maybe"
|
|
||||||
::
|
::
|
||||||
++ test-map-maybe-with-key
|
++ test-map-maybe-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ map-maybe-with-key
|
:- (from-list [[1 2] [2 3] [4 5] [5 6] ~])
|
||||||
|
%+ map-maybe-with-key
|
||||||
(from-list [[1 2] [2 3] [3 4] [4 5] [5 6] ~])
|
(from-list [[1 2] [2 3] [3 4] [4 5] [5 6] ~])
|
||||||
|=({k/@u v/@u} ?:(=(k 3) ~ `v))
|
|=({k/@u v/@u} ?:(=(k 3) ~ `v))
|
||||||
(from-list [[1 2] [2 3] [4 5] [5 6] ~])
|
|
||||||
"map-maybe-with-key"
|
|
||||||
::
|
::
|
||||||
++ test-map-either
|
++ test-map-either
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- :- (from-list [[2 "even"] [4 "even"] ~])
|
||||||
|
(from-list [[1 1] [3 1] [5 1] ~])
|
||||||
%+ map-either
|
%+ map-either
|
||||||
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
||||||
|= value/@u
|
|= value/@u
|
||||||
?: =(0 (mod value 2))
|
?: =(0 (mod value 2))
|
||||||
[%& "even"]
|
[%& "even"]
|
||||||
[%| 1]
|
[%| 1]
|
||||||
:- (from-list [[2 "even"] [4 "even"] ~])
|
|
||||||
(from-list [[1 1] [3 1] [5 1] ~])
|
|
||||||
"map-either"
|
|
||||||
::
|
::
|
||||||
++ test-map-either-with-key
|
++ test-map-either-with-key
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- :- (from-list [[2 "even"] [4 "even"] ~])
|
||||||
|
(from-list [[1 1] [3 1] [5 1] ~])
|
||||||
%+ map-either-with-key
|
%+ map-either-with-key
|
||||||
(from-list [[1 1] [2 1] [3 1] [4 1] [5 1] ~])
|
(from-list [[1 1] [2 1] [3 1] [4 1] [5 1] ~])
|
||||||
|= {key/@u value/@u}
|
|= {key/@u value/@u}
|
||||||
?: =(0 (mod key 2))
|
?: =(0 (mod key 2))
|
||||||
[%& "even"]
|
[%& "even"]
|
||||||
[%| 1]
|
[%| 1]
|
||||||
:- (from-list [[2 "even"] [4 "even"] ~])
|
|
||||||
(from-list [[1 1] [3 1] [5 1] ~])
|
|
||||||
"map-either"
|
|
||||||
::
|
::
|
||||||
++ test-is-subdict
|
++ test-is-subdict
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ is-subdict-by
|
:- &
|
||||||
(from-list [[1 1] [4 4] ~])
|
%^ is-subdict-by
|
||||||
|
(from-list [[1 1] [4 4] ~])
|
||||||
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
(from-list [[1 1] [2 2] [3 3] [4 4] [5 5] ~])
|
||||||
|=({a/* b/*} =(a b))
|
|=({a/* b/*} =(a b))
|
||||||
%.y
|
|
||||||
"is-subdict"
|
|
||||||
::
|
::
|
||||||
++ test-valid
|
++ test-valid
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- &
|
||||||
(valid (from-list [[1 1] [2 2] [3 3] [4 4] [5 5] [6 6] [7 7] [8 8] [9 9] ~]))
|
(valid (from-list [[1 1] [2 2] [3 3] [4 4] [5 5] [6 6] [7 7] [8 8] [9 9] ~]))
|
||||||
%.y
|
|
||||||
"valid"
|
|
||||||
--
|
--
|
||||||
|
|
||||||
|
@ -1,32 +1,31 @@
|
|||||||
/+ new-hoon, tester
|
/+ new-hoon, tester
|
||||||
=, myb:new-hoon
|
=, myb:new-hoon
|
||||||
|_ tester-type:tester
|
|_ _tester:tester
|
||||||
++ test-from-list-null
|
++ test-from-list-null
|
||||||
(expect-eq (from-list ~) ~ "from-list")
|
(expect-eq !>([~ (from-list ~)]))
|
||||||
::
|
::
|
||||||
++ test-from-list-real
|
++ test-from-list-real
|
||||||
(expect-eq (from-list [5 ~]) [~ 5] "from-list")
|
(expect-eq !>([[~ 5] (from-list [5 ~])]))
|
||||||
::
|
::
|
||||||
++ test-to-list-null
|
++ test-to-list-null
|
||||||
(expect-eq (to-list ~) ~ "to-list")
|
(expect-eq !>([~ (to-list ~)]))
|
||||||
::
|
::
|
||||||
++ test-to-list-real
|
++ test-to-list-real
|
||||||
(expect-eq (to-list [~ 5]) [5 ~] "to-list")
|
(expect-eq !>([[5 ~] (to-list [~ 5])]))
|
||||||
::
|
::
|
||||||
++ test-concat-null
|
++ test-concat-null
|
||||||
(expect-eq (concat ~) ~ "concat")
|
(expect-eq !>([~ (concat ~)]))
|
||||||
::
|
::
|
||||||
++ test-concat-real
|
++ test-concat-real
|
||||||
:: wait, if i pull the cast out from below, the concat implementation
|
:: wait, if i pull the cast out from below, the concat implementation
|
||||||
:: doesn't compile anymore?
|
:: doesn't compile anymore?
|
||||||
(expect-eq (concat `(list (maybe @ud))`[~ [~ 1] ~ [~ 2] ~]) [1 2 ~] "concat")
|
(expect-eq !>([[1 2 ~] (concat `(list (maybe @ud))`[~ [~ 1] ~ [~ 2] ~])]))
|
||||||
::
|
::
|
||||||
++ test-map
|
++ test-map
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%+ map:myb
|
:- [2 2 ~]
|
||||||
|
%+ map:myb
|
||||||
[1 2 3 2 ~]
|
[1 2 3 2 ~]
|
||||||
|=(a/@u ?:(=(2 a) [~ 2] ~))
|
|=(a/@u ?:(=(2 a) [~ 2] ~))
|
||||||
[2 2 ~]
|
|
||||||
"map"
|
|
||||||
--
|
--
|
||||||
|
|
||||||
|
@ -2,31 +2,26 @@
|
|||||||
/+ new-hoon, tester
|
/+ new-hoon, tester
|
||||||
=, thr:new-hoon
|
=, thr:new-hoon
|
||||||
=/ data/(list (either @u tape)) [[%& 1] [%| "one"] [%& 2] [%| "two"] ~]
|
=/ data/(list (either @u tape)) [[%& 1] [%| "one"] [%& 2] [%| "two"] ~]
|
||||||
|_ tester-type:tester
|
|_ _tester:tester
|
||||||
++ test-apply
|
++ test-apply
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
%^ apply
|
:- "right"
|
||||||
`(either @u tape)`[%| "one"]
|
%^ apply `(either @u tape)`[%| "one"]
|
||||||
|=(a/@u "left")
|
|=(a/@u "left")
|
||||||
|=(b/tape "right")
|
|=(b/tape "right")
|
||||||
"right"
|
|
||||||
"apply"
|
|
||||||
::
|
::
|
||||||
++ test-firsts
|
++ test-firsts
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [1 2 ~]
|
||||||
(firsts data)
|
(firsts data)
|
||||||
[1 2 ~]
|
|
||||||
"firsts"
|
|
||||||
::
|
::
|
||||||
++ test-seconds
|
++ test-seconds
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- ["one" "two" ~]
|
||||||
(seconds data)
|
(seconds data)
|
||||||
["one" "two" ~]
|
|
||||||
"seconds"
|
|
||||||
::
|
::
|
||||||
++ test-partition
|
++ test-partition
|
||||||
%^ expect-eq
|
%- expect-eq !>
|
||||||
|
:- [[1 2 ~] ["one" "two" ~]]
|
||||||
(partition data)
|
(partition data)
|
||||||
[[1 2 ~] ["one" "two" ~]]
|
|
||||||
"partition"
|
|
||||||
--
|
--
|
||||||
|
303
tests/zuse/crypto/keccak.hoon
Normal file
303
tests/zuse/crypto/keccak.hoon
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
:: tests for the keccak hashing algorithms
|
||||||
|
::
|
||||||
|
:: answers for keccak from the keccak team:
|
||||||
|
:: https://keccak.team/archives.html
|
||||||
|
:: (we swp the inputs because ++keccak wants to work with @t's, which are in
|
||||||
|
:: reverse byte order)
|
||||||
|
::
|
||||||
|
:: since all other hashing algorithms are implemented as keccak, their only
|
||||||
|
:: difference a single padding byte, we can safely test just one input.
|
||||||
|
:: answers for those pulled from the nist website:
|
||||||
|
:: https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values
|
||||||
|
::
|
||||||
|
:: answer for rawshake-256 was found here:
|
||||||
|
:: https://github.com/maandree/libkeccak/blob/master/test.c
|
||||||
|
:: for rawshake-128, the implementation was assumed to be correct at the time
|
||||||
|
:: these tests were written.
|
||||||
|
::
|
||||||
|
::
|
||||||
|
/+ tester
|
||||||
|
=, keccak:crypto
|
||||||
|
::
|
||||||
|
:: per bytelength, an example input.
|
||||||
|
=/ keccak-inputs=(map @ud @)
|
||||||
|
=- (~(run by -) (cury swp 3))
|
||||||
|
%- ~(gas by *(map @ud @))
|
||||||
|
^- (list (pair @ud @))
|
||||||
|
:~
|
||||||
|
:- 0
|
||||||
|
0x0
|
||||||
|
::
|
||||||
|
:- 1
|
||||||
|
0xcc
|
||||||
|
::
|
||||||
|
:- 4
|
||||||
|
0xc1ec.fdfc
|
||||||
|
::
|
||||||
|
:- 8
|
||||||
|
0x4a4f.2024.8451.2526
|
||||||
|
::
|
||||||
|
:- 64
|
||||||
|
0xe926.ae8b.0af6.e531.76db.ffcc.2a6b.88c6.
|
||||||
|
bd76.5f93.9d3d.178a.9bde.9ef3.aa13.1c61.
|
||||||
|
e31c.1e42.cdfa.f4b4.dcde.579a.37e1.50ef.
|
||||||
|
bef5.555b.4c1c.b404.39d8.35a7.24e2.fae7
|
||||||
|
::
|
||||||
|
:- 128
|
||||||
|
0x2b6d.b7ce.d866.5ebe.9deb.0802.9521.8426.
|
||||||
|
bdaa.7c6d.a9ad.d208.8932.cdff.baa1.c141.
|
||||||
|
29bc.cdd7.0f36.9efb.1492.8585.8d2b.1d15.
|
||||||
|
5d14.de2f.db68.0a8b.0272.8405.5182.a0ca.
|
||||||
|
e275.234c.c9c9.2863.c1b4.ab66.f304.cf06.
|
||||||
|
21cd.5456.5f5b.ff46.1d3b.461b.d40d.f281.
|
||||||
|
98e3.7325.01b4.860e.add5.03d2.6d6e.6933.
|
||||||
|
8f4e.0456.e9e9.baf3.d827.ae68.5fb1.d817
|
||||||
|
::
|
||||||
|
:- 255
|
||||||
|
0x3a.3a81.9c48.efde.2ad9.14fb.f00e.18ab.
|
||||||
|
6bc4.f145.13ab.27d0.c178.a188.b614.31e7.
|
||||||
|
f562.3cb6.6b23.3467.75d3.86b5.0e98.2c49.
|
||||||
|
3adb.bfc5.4b9a.3cd3.8338.2336.a1a0.b215.
|
||||||
|
0a15.358f.336d.03ae.18f6.66c7.573d.55c4.
|
||||||
|
fd18.1c29.e6cc.fde6.3ea3.5f0a.df58.85cf.
|
||||||
|
c0a3.d84a.2b2e.4dd2.4496.db78.9e66.3170.
|
||||||
|
cef7.4798.aa1b.bcd4.574e.a0bb.a404.89d7.
|
||||||
|
64b2.f83a.adc6.6b14.8b4a.0cd9.5246.c127.
|
||||||
|
d587.1c4f.1141.8690.a5dd.f012.46a0.c80a.
|
||||||
|
43c7.0088.b618.3639.dcfd.a412.5bd1.13a8.
|
||||||
|
f49e.e23e.d306.faac.576c.3fb0.c1e2.5667.
|
||||||
|
1d81.7fc2.534a.52f5.b439.f72e.424d.e376.
|
||||||
|
f4c5.65cc.a823.07dd.9ef7.6da5.b7c4.eb7e.
|
||||||
|
0851.72e3.2880.7c02.d011.ffbf.3378.5378.
|
||||||
|
d79d.c266.f6a5.be6b.b0e4.a92e.ceeb.aeb1
|
||||||
|
==
|
||||||
|
::
|
||||||
|
|_ tst=_tester:tester
|
||||||
|
::
|
||||||
|
:: check a list of bytelength-answer pairs to see if
|
||||||
|
:: they match the output given by {hash} for the
|
||||||
|
:: corresponding example input from {keccak-inputs}.
|
||||||
|
++ verify-known-answers
|
||||||
|
|= $: hash=$-(octs @)
|
||||||
|
name=tape
|
||||||
|
answers=(list (pair @ud @))
|
||||||
|
==
|
||||||
|
^- tang
|
||||||
|
?~ answers ~
|
||||||
|
%+ weld $(answers t.answers)
|
||||||
|
=+ `[bytes=@ud answer=@]`i.answers
|
||||||
|
%+ category.tst name
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- answer
|
||||||
|
(hash bytes (~(got by keccak-inputs) bytes))
|
||||||
|
::
|
||||||
|
:: keccak
|
||||||
|
::
|
||||||
|
++ test-keccak-224
|
||||||
|
%^ verify-known-answers keccak-224 "keccak-224"
|
||||||
|
:~ :- 0
|
||||||
|
0xf718.3750.2ba8.e108.37bd.d8d3.65ad.b855.
|
||||||
|
9189.5602.fc55.2b48.b739.0abd
|
||||||
|
::
|
||||||
|
:- 1
|
||||||
|
0xa9ca.b59e.b40a.10b2.4629.0f2d.6086.e32e.
|
||||||
|
3689.faf1.d26b.470c.899f.2802
|
||||||
|
::
|
||||||
|
:- 4
|
||||||
|
0xe405.869d.a146.4a70.5700.a3cb.ce13.1aab.
|
||||||
|
eeba.9c8d.2fe6.576b.21bc.be16
|
||||||
|
::
|
||||||
|
:- 8
|
||||||
|
0x7a5c.2cb3.f999.dd00.eff7.3999.6331.4ca6.
|
||||||
|
47dd.0e5a.e1bd.dec6.11f8.338d
|
||||||
|
::
|
||||||
|
:- 64
|
||||||
|
0xc533.dcf8.8cd1.a5df.f22b.914d.3875.bd57.
|
||||||
|
fc17.b2e1.f474.ae36.0c38.77d2
|
||||||
|
::
|
||||||
|
:- 128
|
||||||
|
0xaf3e.0cc6.e645.01f1.0fd3.9722.e852.355f.
|
||||||
|
d6d8.0d32.1906.31e2.f06c.22ad
|
||||||
|
::
|
||||||
|
:- 255
|
||||||
|
0x5af5.6987.ea9c.f11f.cd0e.ac5e.bc14.b037.
|
||||||
|
365e.9b11.23e3.1cb2.dfc7.929a
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ test-keccak-256
|
||||||
|
%^ verify-known-answers keccak-256 "keccak-256"
|
||||||
|
:~ :- 0
|
||||||
|
0xc5d2.4601.86f7.233c.927e.7db2.dcc7.03c0.
|
||||||
|
e500.b653.ca82.273b.7bfa.d804.5d85.a470
|
||||||
|
::
|
||||||
|
:- 1
|
||||||
|
0xeead.6dbf.c734.0a56.caed.c044.696a.1688.
|
||||||
|
7054.9a6a.7f6f.5696.1e84.a54b.d997.0b8a
|
||||||
|
::
|
||||||
|
:- 4
|
||||||
|
0xb149.e766.d761.2eaf.7d55.f74e.1a4f.dd63.
|
||||||
|
709a.8115.b14f.61fc.d22a.a4ab.c8b8.e122
|
||||||
|
::
|
||||||
|
:- 8
|
||||||
|
0xe620.d8f2.982b.24fe.daaa.3baa.9b46.c3f9.
|
||||||
|
ce20.4ee3.5666.6553.ecb3.5e15.c3ff.9bf9
|
||||||
|
::
|
||||||
|
:- 64
|
||||||
|
0x5742.71cd.1395.9e8d.deae.5bfb.db02.a3fd.
|
||||||
|
f54f.2bab.fd0c.beb8.9308.2a97.4957.d0c1
|
||||||
|
::
|
||||||
|
:- 128
|
||||||
|
0xd82e.257d.000d.c9fa.279a.00e2.961e.3286.
|
||||||
|
d2fe.1c02.ef59.833a.b8a6.a710.1bc2.5054
|
||||||
|
::
|
||||||
|
:- 255
|
||||||
|
0x348f.b774.adc9.70a1.6b11.0566.9442.625e.
|
||||||
|
6ada.a825.7a89.effd.b5a8.02f1.61b8.62ea
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ test-keccak-384
|
||||||
|
%^ verify-known-answers keccak-384 "keccak-384"
|
||||||
|
:~ :- 0
|
||||||
|
0x2c23.146a.63a2.9acf.99e7.3b88.f8c2.4eaa.
|
||||||
|
7dc6.0aa7.7178.0ccc.006a.fbfa.8fe2.479b.
|
||||||
|
2dd2.b213.6233.7441.ac12.b515.9119.57ff
|
||||||
|
::
|
||||||
|
:- 1
|
||||||
|
0x1b84.e62a.46e5.a201.8617.54af.5dc9.5c4a.
|
||||||
|
1a69.caf4.a796.ae40.5680.161e.2957.2641.
|
||||||
|
f5fa.1e86.41d7.9583.36ee.7b11.c58f.73e9
|
||||||
|
::
|
||||||
|
:- 4
|
||||||
|
0xf185.0b2a.bb24.f3fd.683c.7015.8278.9d9e.
|
||||||
|
92b6.a45f.9c34.5f9d.ae7f.7997.c8c9.10e8.
|
||||||
|
8003.e592.e592.81cf.92c9.2d6b.51a1.afd1
|
||||||
|
::
|
||||||
|
:- 8
|
||||||
|
0x638e.6575.8a29.7cb0.9ded.1ac5.b9e8.f779.
|
||||||
|
8020.00ab.791f.67f3.3c60.be36.4437.93ad.
|
||||||
|
cc8a.4a58.e986.8815.7a41.784f.02a4.bcb2
|
||||||
|
::
|
||||||
|
:- 64
|
||||||
|
0x14aa.679b.0c11.f9c3.63f5.4933.0261.b45e.
|
||||||
|
1e90.ce31.f4a1.b0ce.5cb9.eb81.bd60.79a3.
|
||||||
|
742d.8602.356c.5098.5d0d.3e54.0fdf.dcfb
|
||||||
|
::
|
||||||
|
:- 128
|
||||||
|
0x3ade.b7ee.ecf9.069f.143a.1015.1fd4.506a.
|
||||||
|
eef3.a0ef.94ca.65d4.448a.cf1e.892b.8ebb.
|
||||||
|
0887.6318.04dd.64e1.53ad.41fa.e012.7a85
|
||||||
|
::
|
||||||
|
:- 255
|
||||||
|
0x6bff.1c84.05a3.fe59.4e36.0e3b.ccea.1ebc.
|
||||||
|
d509.310d.c79b.9e45.c263.783d.7a5d.d662.
|
||||||
|
c678.9b18.bd56.7dbd.da15.54f5.bee6.a860
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ test-keccak-512
|
||||||
|
%^ verify-known-answers keccak-512 "keccak-512"
|
||||||
|
:~ :- 0
|
||||||
|
0xeab.42de.4c3c.eb92.35fc.91ac.ffe7.46b2.
|
||||||
|
9c29.a8c3.66b7.c60e.4e67.c466.f36a.4304.
|
||||||
|
c00f.a9ca.f9d8.7976.ba46.9bcb.e067.13b4.
|
||||||
|
35f0.91ef.2769.fb16.0cda.b33d.3670.680e
|
||||||
|
::
|
||||||
|
:- 1
|
||||||
|
0x8630.c13c.bd06.6ea7.4bbe.7fe4.68fe.c1de.
|
||||||
|
e10e.dc12.54fb.4c1b.7c5f.d69b.646e.4416.
|
||||||
|
0b8c.e01d.05a0.908c.a790.dfb0.80f4.b513.
|
||||||
|
bc3b.6225.ece7.a810.3714.41a5.ac66.6eb9
|
||||||
|
::
|
||||||
|
:- 4
|
||||||
|
0x952d.4c0a.6f0e.f5ce.438c.52e3.edd3.45ea.
|
||||||
|
00f9.1cf5.da80.97c1.168a.1606.9e95.8fc0.
|
||||||
|
5bad.90a0.c5fb.4dd9.ec28.e84b.226b.94a8.
|
||||||
|
47d6.bb89.2356.92ef.4c97.12f0.c703.0fae
|
||||||
|
::
|
||||||
|
:- 8
|
||||||
|
0xf326.c7c1.26dd.c277.9227.60fe.ef77.c9ba.
|
||||||
|
b6fb.5d34.30f6.5259.3703.d7c5.e301.35cd.
|
||||||
|
0b05.7525.7509.a624.1843.30d6.ab1f.508a.
|
||||||
|
6663.91b5.d469.0426.b4e0.5301.891d.f897
|
||||||
|
::
|
||||||
|
:- 64
|
||||||
|
0xc0a4.d8dc.a967.772d.bf6e.5508.c913.e7be.
|
||||||
|
ba1b.749a.2b1a.c963.d067.6e6f.1dcd.4eba.
|
||||||
|
a3f9.09ef.87dd.8498.82dc.8253.347a.5f65.
|
||||||
|
20b5.b9f5.1097.3f44.3976.455f.923c.fcb9
|
||||||
|
::
|
||||||
|
:- 128
|
||||||
|
0xaebb.a57c.8ed5.af6e.c93f.4aa4.5772.ff51.
|
||||||
|
67b7.ea88.dfa7.1364.f37d.8fc5.fdb7.dc3b.
|
||||||
|
2c83.31a0.8023.f21d.110b.7d82.1e2d.c7e8.
|
||||||
|
6082.6235.e7e6.2919.12ac.5213.8474.7354
|
||||||
|
::
|
||||||
|
:- 255
|
||||||
|
0x8195.0e70.96d3.1d4f.22e3.db71.cac7.25bf.
|
||||||
|
59e8.1af5.4c7c.a9e6.aeee.71c0.10fc.5467.
|
||||||
|
4663.12a0.1aa5.c137.cfb1.4064.6941.5567.
|
||||||
|
96f6.12c9.3512.6873.7c7e.9a2b.9631.d1fa
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: sha3
|
||||||
|
::
|
||||||
|
++ test-sha3-224
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0x6b4e.0342.3667.dbb7.3b6e.1545.4f0e.b1ab.
|
||||||
|
d459.7f9a.1b07.8e3f.5b5a.6bc7
|
||||||
|
(sha3-224 0 `@`0)
|
||||||
|
::
|
||||||
|
++ test-sha3-256
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0xa7ff.c6f8.bf1e.d766.51c1.4756.a061.d662.
|
||||||
|
f580.ff4d.e43b.49fa.82d8.0a4b.80f8.434a
|
||||||
|
(sha3-256 0 `@`0)
|
||||||
|
::
|
||||||
|
++ test-sha3-384
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0xc63.a75b.845e.4f7d.0110.7d85.2e4c.2485.
|
||||||
|
c51a.50aa.aa94.fc61.995e.71bb.ee98.3a2a.
|
||||||
|
c371.3831.264a.db47.fb6b.d1e0.58d5.f004
|
||||||
|
(sha3-384 0 `@`0)
|
||||||
|
::
|
||||||
|
++ test-sha3-512
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0xa69f.73cc.a23a.9ac5.c8b5.67dc.185a.756e.
|
||||||
|
97c9.8216.4fe2.5859.e0d1.dcc1.475c.80a6.
|
||||||
|
15b2.123a.f1f5.f94c.11e3.e940.2c3a.c558.
|
||||||
|
f500.199d.95b6.d3e3.0175.8586.281d.cd26
|
||||||
|
(sha3-512 0 `@`0)
|
||||||
|
::
|
||||||
|
:: shake
|
||||||
|
::
|
||||||
|
++ test-shake-128
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0x7f9c.2ba4.e88f.827d.6160.4550.7605.853e.
|
||||||
|
d73b.8093.f6ef.bc88.eb1a.6eac.fa66.ef26.
|
||||||
|
3cb1.eea9.8800.4b93.103c.fb0a.eefd.2a68.
|
||||||
|
6e01.fa4a.58e8.a363.9ca8.a1e3.f9ae.57e2
|
||||||
|
(shake-128 512 0 `@`0)
|
||||||
|
::
|
||||||
|
++ test-shake-256
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0x46b9.dd2b.0ba8.8d13.233b.3feb.743e.eb24.
|
||||||
|
3fcd.52ea.62b8.1b82.b50c.2764.6ed5.762f.
|
||||||
|
d75d.c4dd.d8c0.f200.cb05.019d.67b5.92f6.
|
||||||
|
fc82.1c49.479a.b486.4029.2eac.b3b7.c4be
|
||||||
|
(shake-256 512 0 `@`0)
|
||||||
|
::
|
||||||
|
++ test-rawshake-128
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0xfa01.9a3b.1763.0df6.0148.53b5.4707.73f1.
|
||||||
|
3c3a.b704.4782.11d7.a658.6751.5dea.1cc7.
|
||||||
|
926b.2147.e396.076b.22cb.7263.3af5.0647.
|
||||||
|
c7f2.3d0d.8f00.1d6d.8daf.0f6f.2e92.fc0e
|
||||||
|
(rawshake-128 512 0 `@`0)
|
||||||
|
::
|
||||||
|
++ test-rawshake-256
|
||||||
|
%- expect-eq.tst !>
|
||||||
|
:- 0x3a11.08d4.a90a.31b8.5a10.bdce.77f4.bfbd.
|
||||||
|
cc5b.1d70.dd40.5686.f8bb.de83.4aa1.a410.
|
||||||
|
db8c.9e1c.166c.3e23.9cd7.6a55.f6a6.92aa.
|
||||||
|
2d17.49f2.ec79.cd0b.a3b1.7bb6.5995.9b6e
|
||||||
|
(rawshake-256 512 0 `@`0)
|
||||||
|
--
|
@ -1,9 +0,0 @@
|
|||||||
::
|
|
||||||
:::: /hoon/mark-dashboard/web
|
|
||||||
::
|
|
||||||
/? 310
|
|
||||||
;div.mini-module
|
|
||||||
;script@"/~/at/lib/js/urb.js";
|
|
||||||
;mark-dashboard;
|
|
||||||
;script@"main.js";
|
|
||||||
==
|
|
@ -1,29 +0,0 @@
|
|||||||
TreeActions = window.tree.actions
|
|
||||||
d = React.DOM
|
|
||||||
|
|
||||||
TreeActions.registerComponent("mark-dashboard", React.createClass({
|
|
||||||
render: function(){
|
|
||||||
return d.ul({},
|
|
||||||
!this.state.data ? "loading..." :
|
|
||||||
_(this.state.data)
|
|
||||||
.map(function(result,mark){return {result:result, mark:mark}})
|
|
||||||
.sortBy('mark')
|
|
||||||
.map(function(x){
|
|
||||||
return d.li({key:x.mark},"%"+x.mark, " ",
|
|
||||||
(!/\n/.test(x.result) ? d.code({},x.result) : d.pre({},d.code({},x.result)))
|
|
||||||
)})
|
|
||||||
.value()
|
|
||||||
)},
|
|
||||||
getInitialState: function(){ return {data:null}},
|
|
||||||
componentDidMount: function(){
|
|
||||||
$this = this
|
|
||||||
|
|
||||||
urb.bind("/scry/x/main",
|
|
||||||
{appl:"mark-dashboard"},
|
|
||||||
function(err, dat){
|
|
||||||
urb.drop("/scry/x/main", {appl:"mark-dashboard"})
|
|
||||||
$this.setState({data:dat.data})
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}))
|
|
@ -1041,7 +1041,7 @@ Member = require('./MemberComponent.coffee');
|
|||||||
|
|
||||||
SHIPSHAPE = /^~?([a-z]{3}|[a-z]{6}(-[a-z]{6}){0,3}|[a-z]{6}(-[a-z]{6}){3}(--[a-z]{6}(-[a-z]{6}){3})+)$/;
|
SHIPSHAPE = /^~?([a-z]{3}|[a-z]{6}(-[a-z]{6}){0,3}|[a-z]{6}(-[a-z]{6}){3}(--[a-z]{6}(-[a-z]{6}){3})+)$/;
|
||||||
|
|
||||||
PO = 'dozmarbinwansamlitsighidfidlissogdirwacsabwissib\nrigsoldopmodfoglidhopdardorlorhodfolrintogsilmir\nholpaslacrovlivdalsatlibtabhanticpidtorbolfosdot\nlosdilforpilramtirwintadbicdifrocwidbisdasmidlop\nrilnardapmolsanlocnovsitnidtipsicropwitnatpanmin\nritpodmottamtolsavposnapnopsomfinfonbanporworsip\nronnorbotwicsocwatdolmagpicdavbidbaltimtasmallig\nsivtagpadsaldivdactansidfabtarmonranniswolmispal\nlasdismaprabtobrollatlonnodnavfignomnibpagsopral\nbilhaddocridmocpacravripfaltodtiltinhapmicfanpat\ntaclabmogsimsonpinlomrictapfirhasbosbatpochactid\nhavsaplindibhosdabbitbarracparloddosbortochilmac\ntomdigfilfasmithobharmighinradmashalraglagfadtop\nmophabnilnosmilfopfamdatnoldinhatnacrisfotribhoc\nnimlarfitwalrapsarnalmoslandondanladdovrivbacpol\nlaptalpitnambonrostonfodponsovnocsorlavmatmipfap\n\nzodnecbudwessevpersutletfulpensytdurwepserwylsun\nrypsyxdyrnuphebpeglupdepdysputlughecryttyvsydnex\nlunmeplutseppesdelsulpedtemledtulmetwenbynhexfeb\npyldulhetmevruttylwydtepbesdexsefwycburderneppur\nrysrebdennutsubpetrulsynregtydsupsemwynrecmegnet\nsecmulnymtevwebsummutnyxrextebfushepbenmuswyxsym\nselrucdecwexsyrwetdylmynmesdetbetbeltuxtugmyrpel\nsyptermebsetdutdegtexsurfeltudnuxruxrenwytnubmed\nlytdusnebrumtynseglyxpunresredfunrevrefmectedrus\nbexlebduxrynnumpyxrygryxfeptyrtustyclegnemfermer\ntenlusnussyltecmexpubrymtucfyllepdebbermughuttun\nbylsudpemdevlurdefbusbeprunmelpexdytbyttyplevmyl\nwedducfurfexnulluclennerlexrupnedlecrydlydfenwel\nnydhusrelrudneshesfetdesretdunlernyrsebhulryllud\nremlysfynwerrycsugnysnyllyndyndemluxfedsedbecmun\nlyrtesmudnytbyrsenwegfyrmurtelreptegpecnelnevfes';
|
PO = 'dozmarbinwansamlitsighidfidlissogdirwacsabwissib\nrigsoldopmodfoglidhopdardorlorhodfolrintogsilmir\nholpaslacrovlivdalsatlibtabhanticpidtorbolfosdot\nlosdilforpilramtirwintadbicdifrocwidbisdasmidlop\nrilnardapmolsanlocnovsitnidtipsicropwitnatpanmin\nritpodmottamtolsavposnapnopsomfinfonbanmorworsip\nronnorbotwicsocwatdolmagpicdavbidbaltimtasmallig\nsivtagpadsaldivdactansidfabtarmonranniswolmispal\nlasdismaprabtobrollatlonnodnavfignomnibpagsopral\nbilhaddocridmocpacravripfaltodtiltinhapmicfanpat\ntaclabmogsimsonpinlomrictapfirhasbosbatpochactid\nhavsaplindibhosdabbitbarracparloddosbortochilmac\ntomdigfilfasmithobharmighinradmashalraglagfadtop\nmophabnilnosmilfopfamdatnoldinhatnacrisfotribhoc\nnimlarfitwalrapsarnalmoslandondanladdovrivbacpol\nlaptalpitnambonrostonfodponsovnocsorlavmatmipfip\n\nzodnecbudwessevpersutletfulpensytdurwepserwylsun\nrypsyxdyrnuphebpeglupdepdysputlughecryttyvsydnex\nlunmeplutseppesdelsulpedtemledtulmetwenbynhexfeb\npyldulhetmevruttylwydtepbesdexsefwycburderneppur\nrysrebdennutsubpetrulsynregtydsupsemwynrecmegnet\nsecmulnymtevwebsummutnyxrextebfushepbenmuswyxsym\nselrucdecwexsyrwetdylmynmesdetbetbeltuxtugmyrpel\nsyptermebsetdutdegtexsurfeltudnuxruxrenwytnubmed\nlytdusnebrumtynseglyxpunresredfunrevrefmectedrus\nbexlebduxrynnumpyxrygryxfeptyrtustyclegnemfermer\ntenlusnussyltecmexpubrymtucfyllepdebbermughuttun\nbylsudpemdevlurdefbusbeprunmelpexdytbyttyplevmyl\nwedducfurfexnulluclennerlexrupnedlecrydlydfenwel\nnydhusrelrudneshesfetdesretdunlernyrsebhulryllud\nremlysfynwerrycsugnysnyllyndyndemluxfedsedbecmun\nlyrtesmudnytbyrsenwegfyrmurtelreptegpecnelnevfes';
|
||||||
|
|
||||||
textToHTML = function(txt) {
|
textToHTML = function(txt) {
|
||||||
return {
|
return {
|
||||||
|
@ -9,28 +9,34 @@ shape can go in `%/tests` and then are exposed to a system wide test runner.
|
|||||||
|
|
||||||
Say you put a test suite in `%/tests/new-hoon/thr.hoon`:
|
Say you put a test suite in `%/tests/new-hoon/thr.hoon`:
|
||||||
|
|
||||||
> +ls %/tests
|
```
|
||||||
new-hoon/
|
> +ls %/tests
|
||||||
> +ls %/tests/new-hoon
|
new-hoon/
|
||||||
ls/hoon mp/hoon myb/hoon thr/hoon
|
> +ls %/tests/new-hoon
|
||||||
|
ls/hoon mp/hoon myb/hoon thr/hoon
|
||||||
|
```
|
||||||
|
|
||||||
You can then just run that individual test suite (and not the ones that are beside it in the `%/tests/new-hoon` directory) with:
|
You can then just run that individual test suite (and not the ones that are beside it in the `%/tests/new-hoon` directory) with:
|
||||||
|
|
||||||
> +tests /new-hoon/thr
|
```
|
||||||
/new-hoon/thr/test-seconds OK
|
> +tests /new-hoon/thr
|
||||||
/new-hoon/thr/test-partition OK
|
/new-hoon/thr/test-seconds OK
|
||||||
/new-hoon/thr/test-firsts OK
|
/new-hoon/thr/test-partition OK
|
||||||
/new-hoon/thr/test-apply OK
|
/new-hoon/thr/test-firsts OK
|
||||||
|
/new-hoon/thr/test-apply OK
|
||||||
|
```
|
||||||
|
|
||||||
## The test file
|
## The test file
|
||||||
|
|
||||||
So what is the structure of these test files? They contain a door, with arms starting with `++test-` or `++check-`. At minimum:
|
So what is the structure of these test files? They contain a door, with arms starting with `++test-` or `++check-`. At minimum:
|
||||||
|
|
||||||
/+ tester
|
```
|
||||||
|_ tester-type:tester
|
/+ tester
|
||||||
++ test-some-test
|
|_ tester-type:tester
|
||||||
(expect-eq 4 4 "trivial")
|
++ test-some-test
|
||||||
--
|
(expect-eq 4 4 "trivial")
|
||||||
|
--
|
||||||
|
```
|
||||||
|
|
||||||
All of the utilities you need to write tests are in the tester library. Also, like other hoon files, you can stack cores for models and utility functions with only the final core being inspected for test arms.
|
All of the utilities you need to write tests are in the tester library. Also, like other hoon files, you can stack cores for models and utility functions with only the final core being inspected for test arms.
|
||||||
|
|
||||||
|
@ -423,13 +423,6 @@ div.logo.inverse:before {
|
|||||||
margin-left: .05rem;
|
margin-left: .05rem;
|
||||||
font-size: 1rem; } }
|
font-size: 1rem; } }
|
||||||
|
|
||||||
[data-path^='/docs/system/hoon/runes'] .nav-link {
|
|
||||||
font-family: 'scp'; }
|
|
||||||
|
|
||||||
[data-path^='/docs/system/hoon/runes'] .nav-link,
|
|
||||||
[data-path^='/docs/system/hoon/runes'] .ctrl .selected a.nav-link {
|
|
||||||
font-weight: 600; }
|
|
||||||
|
|
||||||
.app {
|
.app {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
@ -649,21 +642,38 @@ ol > li:before {
|
|||||||
margin-right: 1rem;
|
margin-right: 1rem;
|
||||||
margin-left: -2rem; }
|
margin-left: -2rem; }
|
||||||
|
|
||||||
.body[data-path*='/docs'] h1,
|
|
||||||
.body[data-path^='/work'] h1 {
|
|
||||||
color: #000; }
|
|
||||||
|
|
||||||
.body[data-path*='/docs'] h1 code,
|
.body[data-path*='/docs'] h1 code,
|
||||||
.body[data-path^='/work'] h1 code {
|
.body[data-path^='/work'] h1 code {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: #000;
|
color: #000;
|
||||||
padding: 0; }
|
padding: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: 500; }
|
||||||
|
|
||||||
.body[data-path*='/docs'] .head,
|
.body[data-path*='/docs'] .head,
|
||||||
.body[data-path^='/work'] .head {
|
.body[data-path^='/work'] .head {
|
||||||
margin-bottom: 4rem;
|
margin-bottom: 4rem;
|
||||||
padding-left: 0; }
|
padding-left: 0; }
|
||||||
|
|
||||||
|
.body[data-path*='/docs'] p.label,
|
||||||
|
.body[data-path^='/work'] p.label {
|
||||||
|
font-size: .8rem;
|
||||||
|
padding: 0;
|
||||||
|
display: block;
|
||||||
|
text-align: left;
|
||||||
|
margin-bottom: .6rem; }
|
||||||
|
.body[data-path*='/docs'] p.label .type,
|
||||||
|
.body[data-path^='/work'] p.label .type {
|
||||||
|
background-color: #B1B7BD;
|
||||||
|
color: #fff;
|
||||||
|
padding: .4rem;
|
||||||
|
margin-right: .3rem; }
|
||||||
|
.body[data-path*='/docs'] p.label code,
|
||||||
|
.body[data-path^='/work'] p.label code {
|
||||||
|
background-color: transparent;
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: 400; }
|
||||||
|
|
||||||
.body[data-path*='/docs'] .book h2,
|
.body[data-path*='/docs'] .book h2,
|
||||||
.body[data-path^='/work'] .book h2 {
|
.body[data-path^='/work'] .book h2 {
|
||||||
color: #B1B7BD; }
|
color: #B1B7BD; }
|
||||||
@ -681,24 +691,21 @@ ol > li:before {
|
|||||||
.body[data-path^='/work'] .book hr {
|
.body[data-path^='/work'] .book hr {
|
||||||
margin-bottom: 3rem; }
|
margin-bottom: 3rem; }
|
||||||
|
|
||||||
|
.body[data-path*='/docs'] .book img,
|
||||||
|
.body[data-path^='/work'] .book img {
|
||||||
|
max-width: 100%; }
|
||||||
|
|
||||||
.body[data-path^='/work'] h2 {
|
.body[data-path^='/work'] h2 {
|
||||||
color: #000; }
|
color: #000; }
|
||||||
|
|
||||||
.body[data-path^='/docs/system/hoon/runes/'] h1 {
|
.more {
|
||||||
color: #B1B7BD; }
|
border-bottom: 0.1rem solid #000; }
|
||||||
|
|
||||||
.body[data-path^='/docs/system/hoon/runes/basic'] h1 {
|
.more::after {
|
||||||
color: #000; }
|
content: "→";
|
||||||
|
font-family: "scp";
|
||||||
.body[data-path^='/docs/system/hoon/library/'] h3 {
|
font-weight: 600;
|
||||||
font-size: 1.5rem; }
|
padding-left: .3rem; }
|
||||||
|
|
||||||
.body[data-path^='/docs/system/hoon/library/'] h2 {
|
|
||||||
font-size: 1rem; }
|
|
||||||
|
|
||||||
.body[data-path^='/docs/system/hoon/library/'] .toc h3 {
|
|
||||||
padding-top: 0;
|
|
||||||
margin-bottom: 0; }
|
|
||||||
|
|
||||||
.body .urbit {
|
.body .urbit {
|
||||||
padding-bottom: 9rem; }
|
padding-bottom: 9rem; }
|
||||||
@ -1161,6 +1168,9 @@ ol > li:before {
|
|||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
font-weight: 500; }
|
font-weight: 500; }
|
||||||
|
|
||||||
|
.list.spaced li {
|
||||||
|
margin-bottom: 2rem; }
|
||||||
|
|
||||||
.list.children h1 {
|
.list.children h1 {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 1.4rem; }
|
font-size: 1.4rem; }
|
||||||
@ -1178,6 +1188,9 @@ ol > li:before {
|
|||||||
content: "—";
|
content: "—";
|
||||||
margin-right: .6rem; }
|
margin-right: .6rem; }
|
||||||
|
|
||||||
|
.list.p.code {
|
||||||
|
background-color: transparent; }
|
||||||
|
|
||||||
.body[data-path*='/docs'] .list,
|
.body[data-path*='/docs'] .list,
|
||||||
.body[data-path^='/work'] .list {
|
.body[data-path^='/work'] .list {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
@ -1186,11 +1199,15 @@ ol > li:before {
|
|||||||
.body[data-path*='/docs'] .list h1,
|
.body[data-path*='/docs'] .list h1,
|
||||||
.body[data-path^='/work'] .list a,
|
.body[data-path^='/work'] .list a,
|
||||||
.body[data-path^='/work'] .list h1 {
|
.body[data-path^='/work'] .list h1 {
|
||||||
color: #55595c;
|
color: #000;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
display: inline;
|
display: inline;
|
||||||
text-decoration: none; }
|
text-decoration: none; }
|
||||||
|
.body[data-path*='/docs'] .list p a,
|
||||||
|
.body[data-path^='/work'] .list p a {
|
||||||
|
font-weight: 400;
|
||||||
|
text-decoration: underline; }
|
||||||
.body[data-path*='/docs'] .list h1,
|
.body[data-path*='/docs'] .list h1,
|
||||||
.body[data-path^='/work'] .list h1 {
|
.body[data-path^='/work'] .list h1 {
|
||||||
border-bottom: 2px solid #000; }
|
border-bottom: 2px solid #000; }
|
||||||
@ -1367,8 +1384,7 @@ ol > li:before {
|
|||||||
display: none; }
|
display: none; }
|
||||||
|
|
||||||
.sections h1 {
|
.sections h1 {
|
||||||
font-size: 2rem;
|
font-size: 2rem; }
|
||||||
color: #0500F0; }
|
|
||||||
|
|
||||||
.sections h1:first-of-type {
|
.sections h1:first-of-type {
|
||||||
padding-bottom: 1rem; }
|
padding-bottom: 1rem; }
|
||||||
|
Loading…
Reference in New Issue
Block a user