Compare commits

..

No commits in common. "main" and "c36b760a43c005730aaf444e1be93af1e6abbefb" have entirely different histories.

57 changed files with 958 additions and 2959 deletions

View File

@ -1,11 +0,0 @@
all:
yarn run build
clean:
yarn run clean
pull-protocols:
git subtree pull -P protocols \
-m 'Merge latest changes from the syndicate-protocols repository' \
git@git.syndicate-lang.org:syndicate-lang/syndicate-protocols \
main

111
README.md
View File

@ -1,111 +0,0 @@
# novy-syndicate
A follow-on from Syndicate-2017, incorporating object-capability-based
securability and other ideas from E.
You can view this as Syndicate plus locations and capabilities, or as
E plus Syndicate-style shared state and fault-tolerance.
The capabilities offer *securability* of Syndicate-style
point-to-point and multiparty communications, a necessary precondition
for wider use of Syndicate-like ideas.
The locations offer abstraction over *distribution* of Syndicate
systems, a necessary precondition for modular reasoning about and
reuse of Syndicate subsystems.
## Take it for a spin
git clone https://git.syndicate-lang.org/syndicate-lang/novy-syndicate
cd novy-syndicate
yarn install
yarn build
Start a server containing a single dataspace:
node -r esm lib/distributed/server.js
It will print out a "root" capability giving full control of the
contents of the dataspace:
$ node -r esm lib/distributed/server.js
<ref "syndicate" [] #"\xa6H\x0d\xf50f\x11\xdd\xd0\xd3\x88+Tn\x19w">
b4b303726566b10973796e646963617465b584b210a6480df5306611ddd0d3882b546e197784
Next, try running the `simple-chat` example in a separate terminal:
node -r esm lib/distributed/sandbox.js ../examples/simple-chat.js \
b4b303726566b10973796e646963617465b584b210a6480df5306611ddd0d3882b546e197784
Note that the second command-line argument is the capability to use to
gain access to the server.
Run the same command again in another separate terminal. Typing into
one terminal will be relayed to the other; the command `/nick
<newnick>` will change nickname.
Next, generate an *attenuated* capability which will only allow
interaction via the nickname `tonyg`:
node -r esm lib/tools/attenuate.js \
b4b303726566b10973796e646963617465b584b210a6480df5306611ddd0d3882b546e197784 \
'[<or [
<rewrite <bind p <compound <rec Present 1> {0: <lit "tonyg">}>> <ref p>>
<rewrite <bind p <compound <rec Says 2> {0: <lit "tonyg"> 1: String}>> <ref p>>
]>]'
The result is the following data structure:
<ref "syndicate" [[<or [
<rewrite <bind p <compound <rec Present 1> {0: <lit "tonyg">}>> <ref p>>,
<rewrite <bind p <compound <rec Says 2> {
0: <lit "tonyg">,
1: String
}>> <ref p>>
]>]] #[oHFy7B4NPVqhD6zJmNPbhg==]>
It is a
[Macaroon](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41892.pdf),
based on the "root" capability, but with additional restrictions added
to it.
To try it out, terminate one of the chat clients, and restart it using
the hex form of the attenuated capability:
node -r esm lib/distributed/sandbox.js ../examples/simple-chat.js \
b4b303726566b10973796e646963617465b5b5b4b3026f72b5b4b30772657772697465b4b30462696e64b30170b4b308636f6d706f756e64b4b303726563b30750726573656e749184b790b4b3036c6974b105746f6e796784848484b4b303726566b301708484b4b30772657772697465b4b30462696e64b30170b4b308636f6d706f756e64b4b303726563b304536179739284b790b4b3036c6974b105746f6e79678491b306537472696e67848484b4b303726566b30170848484848484b210a07172ec1e0d3d5aa10facc998d3db8684
Notice that (a) this new client can't hear anything from its peers and
(b) can't send anything either -- *until* it changes its nickname to
`tonyg` (via `/nick tonyg`). Then, its peers can hear it. But to allow
it to hear its peers, we need to add another option when we attenuate
the root capability:
node -r esm lib/tools/attenuate.js \
b4b303726566b10973796e646963617465b584b210a6480df5306611ddd0d3882b546e197784 \
'[<or [
<rewrite <bind p <compound <rec Present 1> {0: <lit "tonyg">}>> <ref p>>
<rewrite <bind p <compound <rec Says 2> {0: <lit "tonyg"> 1: String}>> <ref p>>
<rewrite <bind p <compound <rec Observe 2> {}>> <ref p>>
]>]'
The result,
<ref "syndicate" [[<or [
<rewrite <bind p <compound <rec Present 1> {0: <lit "tonyg">}>> <ref p>>,
<rewrite <bind p <compound <rec Says 2> {
0: <lit "tonyg">,
1: String
}>> <ref p>>,
<rewrite <bind p <compound <rec Observe 2> {}>> <ref p>>
]>]] #[FqMH2fgbrM29dQedmuFclg==]>
allows assertion of `<Present "tonyg">`, transmission of `<Says
"tonyg" _>`, and observation of anything at all in the dataspace, with
assertion of `<Observe _ _>`.
Rerunning the chat client with the hex form of the capability shows
off the new behaviour:
node -r esm lib/distributed/sandbox.js ../examples/simple-chat.js \
b4b303726566b10973796e646963617465b5b5b4b3026f72b5b4b30772657772697465b4b30462696e64b30170b4b308636f6d706f756e64b4b303726563b30750726573656e749184b790b4b3036c6974b105746f6e796784848484b4b303726566b301708484b4b30772657772697465b4b30462696e64b30170b4b308636f6d706f756e64b4b303726563b304536179739284b790b4b3036c6974b105746f6e79678491b306537472696e67848484b4b303726566b301708484b4b30772657772697465b4b30462696e64b30170b4b308636f6d706f756e64b4b303726563b3074f6273657276659284b7848484b4b303726566b30170848484848484b21016a307d9f81baccdbd75079d9ae15c9684

View File

@ -6,17 +6,18 @@
"typescript": "^4.2.3"
},
"dependencies": {
"@preserves/core": "^0.17.0",
"@preserves/schema": "^0.16.0"
"@preserves/core": "^0.14.0",
"@preserves/schema": "^0.7.0"
},
"scripts": {
"regenerate": "rm -rf ./src/gen && preserves-schema-ts --module EntityRef=./src/runtime/actor.ts --output ./src/gen './protocols/schemas/**/*.prs'",
"regenerate": "rm -rf ./src/gen && preserves-schema-ts --module Actor=./src/runtime/actor.ts --output ./src/gen './schemas/**/*.prs'",
"regenerate:watch": "yarn regenerate --watch",
"regenerate:bundle": "preserves-schemac './schemas/**/*.prs' > novy-syndicate.schema.bundle.bin",
"compile": "tsc",
"compile:watch": "tsc -w",
"rollup": "rollup -c",
"rollup:watch": "rollup -c -w",
"clean": "rm -rf lib index.js",
"build": "yarn regenerate && yarn compile && yarn rollup"
"build": "yarn regenerate && yarn regenerate:bundle && yarn compile && yarn rollup"
}
}

View File

@ -1,8 +0,0 @@
all: schema-bundle.bin
clean:
rm -f schema-bundle.bin
schema-bundle.bin: schemas/*.prs
preserves-schemac schemas/*.prs > $@.tmp
mv $@.tmp $@

View File

@ -1,16 +0,0 @@
´³bundle·µ³tcp„´³schema·³version³ definitions·³TcpLocal´³rec´³lit³ tcp-local„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³ SignedInteger„„„„„³ TcpRemote´³rec´³lit³
tcp-remote„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³ SignedInteger„„„„„³ TcpPeerInfo´³rec´³lit³tcp-peer„´³tupleµ´³named³handle´³embedded³any„„´³named³local´³refµ„³TcpLocal„„´³named³remote´³refµ„³ TcpRemote„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³timer„´³schema·³version³ definitions·³SetTimer´³rec´³lit³ set-timer„´³tupleµ´³named³label³any„´³named³msecs´³atom³Double„„´³named³kind´³refµ„³ TimerKind„„„„„³ LaterThan´³rec´³lit³
later-than„´³tupleµ´³named³msecs´³atom³Double„„„„„³ TimerKind´³orµµ±relative´³lit³relative„„µ±absolute´³lit³absolute„„µ±clear´³lit³clear„„„„³ TimerExpired´³rec´³lit³ timer-expired„´³tupleµ´³named³label³any„´³named³msecs´³atom³Double„„„„„„³ embeddedType€„„µ³stream„´³schema·³version³ definitions·³Mode´³orµµ±bytes´³lit³bytes„„µ±lines´³refµ„³LineMode„„µ±packet´³rec´³lit³packet„´³tupleµ´³named³size´³atom³ SignedInteger„„„„„„µ±object´³rec´³lit³object„´³tupleµ´³named³ description³any„„„„„„„³Sink´³orµµ±source´³rec´³lit³source„´³tupleµ´³named³
controller´³embedded´³refµ„³Source„„„„„„„µ± StreamError´³refµ„³ StreamError„„µ±data´³rec´³lit³data„´³tupleµ´³named³payload³any„´³named³mode´³refµ„³Mode„„„„„„µ±eof´³rec´³lit³eof„´³tupleµ„„„„„„³Source´³orµµ±sink´³rec´³lit³sink„´³tupleµ´³named³
controller´³embedded´³refµ„³Sink„„„„„„„µ± StreamError´³refµ„³ StreamError„„µ±credit´³rec´³lit³credit„´³tupleµ´³named³amount´³refµ„³ CreditAmount„„´³named³mode´³refµ„³Mode„„„„„„„„³LineMode´³orµµ±lf´³lit³lf„„µ±crlf´³lit³crlf„„„„³ StreamError´³rec´³lit³error„´³tupleµ´³named³message´³atom³String„„„„„³ CreditAmount´³orµµ±count´³atom³ SignedInteger„„µ± unbounded´³lit³ unbounded„„„„³StreamConnection´³rec´³lit³stream-connection„´³tupleµ´³named³source´³embedded´³refµ„³Source„„„´³named³sink´³embedded´³refµ„³Sink„„„´³named³spec³any„„„„³StreamListenerError´³rec´³lit³stream-listener-error„´³tupleµ´³named³spec³any„´³named³message´³atom³String„„„„„³StreamListenerReady´³rec´³lit³stream-listener-ready„´³tupleµ´³named³spec³any„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³sturdy„´³schema·³version³ definitions·³Lit´³rec´³lit³lit„´³tupleµ´³named³value³any„„„„³Oid´³atom³ SignedInteger„³Alts´³rec´³lit³or„´³tupleµ´³named³ alternatives´³seqof´³refµ„³Rewrite„„„„„„³CArr´³rec´³lit³arr„´³tupleµ´³named³arity´³atom³ SignedInteger„„„„„³CRec´³rec´³lit³rec„´³tupleµ´³named³label³any„´³named³arity´³atom³ SignedInteger„„„„„³PAnd´³rec´³lit³and„´³tupleµ´³named³patterns´³seqof´³refµ„³Pattern„„„„„„³PNot´³rec´³lit³not„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³TRef´³rec´³lit³ref„´³tupleµ´³named³binding´³atom³ SignedInteger„„„„„³CDict´³rec´³lit³dict„´³tupleµ„„„³PAtom´³orµµ±Boolean´³lit³Boolean„„µ±Float´³lit³Float„„µ±Double´³lit³Double„„µ± SignedInteger´³lit³ SignedInteger„„µ±String´³lit³String„„µ±
ByteString´³lit³
ByteString„„µ±Symbol´³lit³Symbol„„„„³PBind´³rec´³lit³bind„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³Caveat´³orµµ±Rewrite´³refµ„³Rewrite„„µ±Alts´³refµ„³Alts„„„„³Pattern´³orµµ±PDiscard´³refµ„³PDiscard„„µ±PAtom´³refµ„³PAtom„„µ± PEmbedded´³refµ„³ PEmbedded„„µ±PBind´³refµ„³PBind„„µ±PAnd´³refµ„³PAnd„„µ±PNot´³refµ„³PNot„„µ±Lit´³refµ„³Lit„„µ± PCompound´³refµ„³ PCompound„„„„³Rewrite´³rec´³lit³rewrite„´³tupleµ´³named³pattern´³refµ„³Pattern„„´³named³template´³refµ„³Template„„„„„³WireRef´³orµµ±mine´³tupleµ´³lit<69>´³named³oid´³refµ„³Oid„„„„„µ±yours´³ tuplePrefixµ´³lit´³named³oid´³refµ„³Oid„„„´³named³ attenuation´³seqof´³refµ„³Caveat„„„„„„„³PDiscard´³rec´³lit³_„´³tupleµ„„„³Template´³orµµ±
TAttenuate´³refµ„³
TAttenuate„„µ±TRef´³refµ„³TRef„„µ±Lit´³refµ„³Lit„„µ± TCompound´³refµ„³ TCompound„„„„³ PCompound´³rec´³lit³compound„´³tupleµ´³named³ctor´³refµ„³ConstructorSpec„„´³named³members´³refµ„³PCompoundMembers„„„„„³ PEmbedded´³lit³Embedded„³ SturdyRef´³rec´³lit³ref„´³tupleµ´³named³oid³any„´³named³ caveatChain´³seqof´³refµ„³ Attenuation„„„´³named³sig´³atom³
ByteString„„„„„³ TCompound´³rec´³lit³compound„´³tupleµ´³named³ctor´³refµ„³ConstructorSpec„„´³named³members´³refµ„³TCompoundMembers„„„„„³
TAttenuate´³rec´³lit³ attenuate„´³tupleµ´³named³template´³refµ„³Template„„´³named³ attenuation´³refµ„³ Attenuation„„„„„³ Attenuation´³seqof´³refµ„³Caveat„„³ConstructorSpec´³orµµ±CRec´³refµ„³CRec„„µ±CArr´³refµ„³CArr„„µ±CDict´³refµ„³CDict„„„„³PCompoundMembers´³dictof³any´³refµ„³Pattern„„³TCompoundMembers´³dictof³any´³refµ„³Template„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³worker„´³schema·³version³ definitions·³Instance´³rec´³lit³Instance„´³tupleµ´³named³name´³atom³String„„´³named³argument³any„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³service„´³schema·³version³ definitions·³State´³orµµ±started´³lit³started„„µ±ready´³lit³ready„„µ±failed´³lit³failed„„µ±complete´³lit³complete„„„„³
RunService´³rec´³lit³ run-service„´³tupleµ´³named³ serviceName³any„„„„³ CoreService´³rec´³lit³ core-service„´³tupleµ´³named³ serviceName³any„„„„³ ServiceState´³rec´³lit³ service-state„´³tupleµ´³named³ serviceName³any„´³named³state´³refµ„³State„„„„„³ ServiceObject´³rec´³lit³service-object„´³tupleµ´³named³ serviceName³any„´³named³object³any„„„„³RequireService´³rec´³lit³require-service„´³tupleµ´³named³ serviceName³any„„„„³ServiceDependency´³rec´³lit³
depends-on„´³tupleµ´³named³depender³any„´³named³dependee´³refµ„³ ServiceState„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³protocol„´³schema·³version³ definitions·³Oid´³atom³ SignedInteger„³Sync´³rec´³lit³sync„´³tupleµ´³named³peer´³embedded´³lit<69>„„„„„„³Turn´³seqof´³refµ„³ TurnEvent„„³Error´³rec´³lit³error„´³tupleµ´³named³message´³atom³String„„´³named³detail³any„„„„³Event´³orµµ±Assert´³refµ„³Assert„„µ±Retract´³refµ„³Retract„„µ±Message´³refµ„³Message„„µ±Sync´³refµ„³Sync„„„„³Assert´³rec´³lit³assert„´³tupleµ´³named³ assertion´³refµ„³ Assertion„„´³named³handle´³refµ„³Handle„„„„„³Handle´³atom³ SignedInteger„³Packet´³orµµ±Turn´³refµ„³Turn„„µ±Error´³refµ„³Error„„„„³Message´³rec´³lit³message„´³tupleµ´³named³body´³refµ„³ Assertion„„„„„³Retract´³rec´³lit³retract„´³tupleµ´³named³handle´³refµ„³Handle„„„„„³ Assertion³any³ TurnEvent´³tupleµ´³named³oid´³refµ„³Oid„„´³named³event´³refµ„³Event„„„„„³ embeddedType€„„µ³ dataspace„´³schema·³version³ definitions·³Observe´³rec´³lit³Observe„´³tupleµ´³named³pattern´³refµ³dataspacePatterns„³Pattern„„´³named³observer´³embedded³any„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³
gatekeeper„´³schema·³version³ definitions·³Bind´³rec´³lit³bind„´³tupleµ´³named³oid³any„´³named³key´³atom³
ByteString„„´³named³target´³embedded³any„„„„„³Resolve´³rec´³lit³resolve„´³tupleµ´³named³ sturdyref´³refµ³sturdy„³ SturdyRef„„´³named³observer´³embedded´³embedded³any„„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³ racketEvent„´³schema·³version³ definitions·³ RacketEvent´³rec´³lit³ racket-event„´³tupleµ´³named³source´³embedded³any„„´³named³event´³embedded³any„„„„„„³ embeddedType€„„µ³transportAddress„´³schema·³version³ definitions·³Tcp´³rec´³lit³tcp„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³ SignedInteger„„„„„³Unix´³rec´³lit³unix„´³tupleµ´³named³path´³atom³String„„„„„³Stdio´³rec´³lit³stdio„´³tupleµ„„„³ WebSocket´³rec´³lit³ws„´³tupleµ´³named³url´³atom³String„„„„„„³ embeddedType€„„µ³dataspacePatterns„´³schema·³version³ definitions·³CArr´³rec´³lit³arr„´³tupleµ´³named³arity´³atom³ SignedInteger„„„„„³CRec´³rec´³lit³rec„´³tupleµ´³named³label³any„´³named³arity´³atom³ SignedInteger„„„„„³DLit´³rec´³lit³lit„´³tupleµ´³named³value³any„„„„³CDict´³rec´³lit³dict„´³tupleµ„„„³DBind´³rec´³lit³bind„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³Pattern´³orµµ±DDiscard´³refµ„³DDiscard„„µ±DBind´³refµ„³DBind„„µ±DLit´³refµ„³DLit„„µ± DCompound´³refµ„³ DCompound„„„„³DDiscard´³rec´³lit³_„´³tupleµ„„„³ DCompound´³orµµ±rec´³rec´³lit³compound„´³tupleµ´³named³ctor´³refµ„³CRec„„´³named³members´³dictof´³atom³ SignedInteger„´³refµ„³Pattern„„„„„„„µ±arr´³rec´³lit³compound„´³tupleµ´³named³ctor´³refµ„³CArr„„´³named³members´³dictof´³atom³ SignedInteger„´³refµ„³Pattern„„„„„„„µ±dict´³rec´³lit³compound„´³tupleµ´³named³ctor´³refµ„³CDict„„´³named³members´³dictof³any´³refµ„³Pattern„„„„„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³secureChatProtocol„´³schema·³version³ definitions·³Join´³rec´³lit³
joinedUser„´³tupleµ´³named³uid´³refµ„³UserId„„´³named³handle´³embedded´³refµ„³Session„„„„„„³Says´³rec´³lit³says„´³tupleµ´³named³who´³refµ„³UserId„„´³named³what´³atom³String„„„„„³UserId´³atom³ SignedInteger„³Session´³orµµ± observeUsers´³rec´³lit³Observe„´³tupleµ´³lit³user„´³named³observer´³embedded´³refµ„³UserInfo„„„„„„„µ± observeSpeech´³rec´³lit³Observe„´³tupleµ´³lit³says„´³named³observer´³embedded´³refµ„³Says„„„„„„„µ± NickClaim´³refµ„³ NickClaim„„µ±Says´³refµ„³Says„„„„³UserInfo´³rec´³lit³user„´³tupleµ´³named³uid´³refµ„³UserId„„´³named³name´³atom³String„„„„„³ NickClaim´³rec´³lit³ claimNick„´³tupleµ´³named³uid´³refµ„³UserId„„´³named³name´³atom³String„„´³named³k´³embedded´³refµ„³NickClaimResponse„„„„„„³ NickConflict´³rec´³lit³ nickConflict„´³tupleµ„„„³NickClaimResponse´³orµµ±true´³lit<69>„„µ± NickConflict´³refµ„³ NickConflict„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³simpleChatProtocol„´³schema·³version³ definitions·³Says´³rec´³lit³Says„´³tupleµ´³named³who´³atom³String„„´³named³what´³atom³String„„„„„³Present´³rec´³lit³Present„´³tupleµ´³named³username´³atom³String„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„„„

View File

@ -1,4 +0,0 @@
version 1 .
embeddedType EntityRef.Cap .
Observe = <Observe @pattern dataspacePatterns.Pattern @observer #!any>.

View File

@ -1,16 +0,0 @@
version 1 .
embeddedType EntityRef.Cap .
; Dataspace patterns: a sublanguage of attenuation patterns.
Pattern = DDiscard / DBind / DLit / DCompound .
DDiscard = <_>.
DBind = <bind @pattern Pattern>.
DLit = <lit @value any>.
DCompound = @rec <compound @ctor CRec @members { int: Pattern ...:... }>
/ @arr <compound @ctor CArr @members { int: Pattern ...:... }>
/ @dict <compound @ctor CDict @members { any: Pattern ...:... }> .
CRec = <rec @label any @arity int>.
CArr = <arr @arity int>.
CDict = <dict>.

View File

@ -1,9 +0,0 @@
version 1 .
embeddedType EntityRef.Ref .
BoxState = <BoxState @value int>.
SetBox = <SetBox @value int>.
; BoxCap = BoxState / <Observe =SetBox @observer embedded>.
; ClientCap = SetBox / <Observe =BoxState @observer embedded>.
.

View File

@ -1,5 +0,0 @@
version 1 .
embeddedType EntityRef.Cap .
Resolve = <resolve @sturdyref sturdy.SturdyRef @observer #!#!any>.
Bind = <bind @oid any @key bytes @target #!any>.

View File

@ -1,3 +0,0 @@
version 1 .
RacketEvent = <racket-event @source #!any @event #!any>.

View File

@ -1,21 +0,0 @@
version 1 .
embeddedType EntityRef.Cap .
UserId = int .
Join = <joinedUser @uid UserId @handle #!Session>.
Session = @observeUsers <Observe =user @observer #!UserInfo>
/ @observeSpeech <Observe =says @observer #!Says>
/ NickClaim
/ Says
.
NickClaim = <claimNick @uid UserId @name string @k #!NickClaimResponse>.
NickClaimResponse = #t / NickConflict .
UserInfo = <user @uid UserId @name string>.
Says = <says @who UserId @what string>.
NickConflict = <nickConflict>.

View File

@ -1,51 +0,0 @@
version 1 .
embeddedType EntityRef.Cap .
; Asserts that a service should begin (and stay) running after waiting
; for its dependencies and considering reverse-dependencies, blocks,
; and so on.
RequireService = <require-service @serviceName any>.
; Asserts that a service should begin (and stay) running RIGHT NOW,
; without considering its dependencies.
RunService = <run-service @serviceName any>.
; Asserts one or more current states of service `serviceName`. The
; overall state of the service is the union of asserted `state`s.
;
; Only a few combinations make sense:
; - `started`
; - `started` + `ready`
; - `failed`
; - `complete`
;
ServiceState = <service-state @serviceName any @state State>.
; A running service publishes zero or more of these. The details of
; the object vary by service.
;
ServiceObject = <service-object @serviceName any @object any>.
; Possible service states.
State =
/ ; The service has begun its startup routine, and may or may not be
; ready to take requests from other parties.
=started
/ ; The service is ready to take requests from other parties.
; (This state is special in that it is asserted *in addition* to `started`.)
=ready
/ ; The service has failed.
=failed
/ ; The service has completed execution.
=complete
.
; Asserts that, when `depender` is `require-service`d, it should not
; be started until `dependee` has been asserted.
ServiceDependency = <depends-on @depender any @dependee ServiceState>.
; Asserts that the service is a "core" service. If *not* specified for
; a service X, where X is not `<milestone Y>` for some Y, the system
; acts as if `<depends-on X <service-state <milestone core> ready>>`
; were asserted.
CoreService = <core-service @serviceName any>.

View File

@ -1,38 +0,0 @@
version 1 .
embeddedType EntityRef.Cap .
; Assertion:
StreamConnection = <stream-connection @source #!Source @sink #!Sink @spec any>.
; Assertions:
StreamListenerReady = <stream-listener-ready @spec any>.
StreamListenerError = <stream-listener-error @spec any @message string>.
; Assertion:
StreamError = <error @message string>.
Source =
; Assertions:
/ <sink @controller #!Sink>
/ StreamError
; Messages:
/ <credit @amount CreditAmount @mode Mode>
.
Sink =
; Assertions:
/ <source @controller #!Source>
/ StreamError
; Messages:
/ <data @payload any @mode Mode>
/ <eof>
.
; Value:
CreditAmount = @count int / @unbounded =unbounded .
; Value:
Mode = =bytes / @lines LineMode / <packet @size int> / <object @description any>.
LineMode = =lf / =crlf .

View File

@ -1,7 +0,0 @@
version 1 .
embeddedType EntityRef.Cap .
TcpRemote = <tcp-remote @host string @port int>.
TcpLocal = <tcp-local @host string @port int>.
TcpPeerInfo = <tcp-peer @handle #!any @local TcpLocal @remote TcpRemote>.

View File

@ -1,7 +0,0 @@
version 1 .
SetTimer = <set-timer @label any @msecs double @kind TimerKind>.
TimerExpired = <timer-expired @label any @msecs double>.
TimerKind = =relative / =absolute / =clear .
LaterThan = <later-than @msecs double>.

View File

@ -1,6 +0,0 @@
version 1 .
Tcp = <tcp @host string @port int>.
Unix = <unix @path string>.
WebSocket = <ws @url string>.
Stdio = <stdio>.

9
schemas/box-protocol.prs Normal file
View File

@ -0,0 +1,9 @@
version 1 .
pointer Actor.Ref .
BoxState = <BoxState @value int>.
SetBox = <SetBox @value int>.
; BoxCap = BoxState / <Observe =SetBox @observer ref>.
; ClientCap = SetBox / <Observe =BoxState @observer ref>.
.

9
schemas/dataspace.prs Normal file
View File

@ -0,0 +1,9 @@
version 1 .
pointer Actor.Ref .
;As implemented
Observe = <Observe @label symbol @observer ref>.
; ;As will be implemented soon
; Observe = <Observe @pattern Pattern @observer ref>.
.

5
schemas/gatekeeper.prs Normal file
View File

@ -0,0 +1,5 @@
version 1 .
pointer Actor.Ref .
Resolve = <resolve @sturdyref sturdy.SturdyRef @observer ref>.
Bind = <bind @oid any @key bytes @target ref>.

View File

@ -1,8 +1,5 @@
version 1 .
Packet = Turn / Error .
Error = <error @message string @detail any>.
pointer sturdy.WireRef .
Assertion = any .
Handle = int .
@ -14,4 +11,4 @@ TurnEvent = [@oid Oid @event Event].
Assert = <assert @assertion Assertion @handle Handle>.
Retract = <retract @handle Handle>.
Message = <message @body Assertion>.
Sync = <sync @peer #!#t>.
Sync = <sync @peer ref>.

View File

@ -0,0 +1,14 @@
version 1 .
pointer Actor.Ref .
UserId = int .
Join = <joinedUser @uid UserId @handle ref>.
NickClaim = <claimNick @uid UserId @name string @k ref>.
UserInfo = <user @uid UserId @name string>.
Says = <says @who UserId @what string>.
NickConflict = <nickConflict>.

View File

@ -1,5 +1,5 @@
version 1 .
embeddedType EntityRef.Cap .
pointer Actor.Ref .
Present = <Present @username string>.
Says = <Says @who string @what string>.

View File

@ -1,9 +1,8 @@
version 1 .
embeddedType EntityRef.Cap .
; Each Attenuation is a stage. The sequence of Attenuations is run RIGHT-TO-LEFT.
; That is, the newest Attenuations are at the right.
SturdyRef = <ref @oid any @caveatChain [Attenuation ...] @sig bytes>.
SturdyRef = <ref @oid any [@caveatChain Attenuation ...] @sig bytes>.
; An individual Attenuation is run RIGHT-TO-LEFT.
; That is, the newest Caveats are at the right.
@ -13,7 +12,7 @@ Attenuation = [Caveat ...].
; can add 3rd-party caveats and richer predicates later
Caveat = Rewrite / Alts .
Rewrite = <rewrite @pattern Pattern @template Template>.
Alts = <or @alternatives [Rewrite ...]>.
Alts = <or [@alternatives Rewrite ...]>.
Oid = int .
WireRef = @mine [0 @oid Oid] / @yours [1 @oid Oid @attenuation Caveat ...].
@ -27,18 +26,18 @@ CDict = <dict>.
Lit = <lit @value any>.
Pattern = PDiscard / PAtom / PEmbedded / PBind / PAnd / PNot / Lit / PCompound .
Pattern = PDiscard / PAtom / PPointer / PBind / PAnd / PNot / Lit / PCompound .
PDiscard = <_>.
PAtom = =Boolean / =Float / =Double / =SignedInteger / =String / =ByteString / =Symbol .
PEmbedded = =Embedded .
PBind = <bind @pattern Pattern>.
PAnd = <and @patterns [Pattern ...]>.
PPointer = =Pointer .
PBind = <bind @name symbol @pattern Pattern>.
PAnd = <and [@patterns Pattern ...]>.
PNot = <not @pattern Pattern>.
PCompound = <compound @ctor ConstructorSpec @members PCompoundMembers>.
PCompoundMembers = { any: Pattern ...:... }.
Template = TAttenuate / TRef / Lit / TCompound .
TAttenuate = <attenuate @template Template @attenuation Attenuation>.
TRef = <ref @binding int>.
Template = TRef / Lit / TCompound .
TRef = <ref @name symbol>.
TCompound = <compound @ctor ConstructorSpec @members TCompoundMembers>.
TCompoundMembers = { any: Template ...:... }.

View File

@ -1,4 +1,4 @@
version 1 .
embeddedType EntityRef.Cap .
pointer Actor.Ref .
Instance = <Instance @name string @argument any>.

View File

@ -1,14 +1,14 @@
import { Actor, Handle, Ref, Turn } from '../runtime/actor.js';
import { Dataspace, during, observe, P } from '../runtime/dataspace.js';
import { Actor, Handle, Turn } from '../runtime/actor.js';
import { Dataspace, during, observe } from '../runtime/dataspace.js';
import { Relay, spawnRelay } from '../transport/relay.js';
import * as net from 'net';
import { mint, sturdyEncode, validate } from '../transport/sturdy.js';
import { KEY_LENGTH } from '../transport/cryptography.js';
import { attenuate } from '../runtime/rewrite.js';
import { Bytes, embed, Embedded } from '@preserves/core';
import { Attenuation, fromSturdyRef } from '../gen/sturdy.js';
import { $bind, Bind, fromBind, toResolve } from '../gen/gatekeeper.js';
import { Bytes, embed, is } from '@preserves/core';
import { Attenuation, fromSturdyRef, _val } from '../gen/sturdy.js';
import { $bind, Bind, fromBind, toBind, toResolve } from '../gen/gatekeeper.js';
new Actor(t => {
t.activeFacet.preventInertCheck();
@ -44,18 +44,18 @@ new Actor(t => {
if (a === void 0) return null;
const r = a.sturdyref;
let facet = t.facet(t => {
observe(t, ds, P.rec($bind, P.lit(r.oid), P.bind(), P.bind()),
during(async (t, bindings) => {
const [key, embeddedTarget] = bindings as [Bytes, Embedded<Ref>];
const target = embeddedTarget.embeddedValue;
if (!await validate(r, key)) return null;
const cavs: Attenuation = [];
r.caveatChain.forEach(cs => cavs.push(... cs));
const attenuated_ds = attenuate(target, ... cavs);
let replyHandle: Handle | undefined;
t.freshen(t => replyHandle = t.assert(a.observer, embed(attenuated_ds)));
return t => t.retract(replyHandle);
}));
observe(t, ds, $bind, during(async (t, b0) => {
const b = toBind(b0);
if (b === void 0) return null;
if (!is(r.oid, b.oid)) return null;
if (!await validate(r, b.key)) return null;
const cavs: Attenuation = [];
r.caveatChain.forEach(cs => cavs.push(... cs));
const attenuated_ds = attenuate(b.target, ... cavs);
let replyHandle: Handle | undefined;
t.freshen(t => replyHandle = t.assert(a.observer, embed(attenuated_ds)));
return t => t.retract(replyHandle);
}));
});
return t => t.stop(facet);
})),

View File

@ -1,13 +1,13 @@
import { Embedded } from "@preserves/core";
import { BoxState, $SetBox, fromBoxState } from "../gen/examples/boxProtocol.js";
import { fromObserve, Observe, P } from "../runtime/dataspace.js";
import { Pointer } from "@preserves/core";
import { BoxState, $SetBox, fromBoxState } from "../gen/box-protocol.js";
import { fromObserve, Observe } from "../gen/dataspace.js";
import { Assertion, Handle, Ref, Turn } from "../runtime/actor.js";
let startTime = Date.now();
let prevValue = 0;
export default function (t: Turn, arg: Assertion) {
const [ds_p, LIMIT, REPORT_EVERY]: [Embedded<Ref>, number, number] = Array.isArray(arg) && arg.length === 3
const [ds_p, LIMIT, REPORT_EVERY]: [Pointer<Ref>, number, number] = Array.isArray(arg) && arg.length === 3
? arg as any
: [arg, 50000, 2500];
const ds = ds_p.embeddedValue;
@ -18,7 +18,7 @@ export default function (t: Turn, arg: Assertion) {
}
setValue(t, 0);
t.assert(ds, fromObserve(Observe({
pattern: P.rec($SetBox, P.bind()),
label: $SetBox,
observer: t.ref({
message(t: Turn, [newValue]: [number]): void {
// console.log(`Box ${t.actor.id}: got ${newValue}`);

View File

@ -1,14 +1,14 @@
import { Embedded } from "@preserves/core";
import { $BoxState, fromSetBox, SetBox } from "../gen/examples/boxProtocol.js";
import { fromObserve, Observe, P } from "../runtime/dataspace.js";
import { Pointer } from "@preserves/core";
import { $BoxState, fromSetBox, SetBox } from "../gen/box-protocol.js";
import { fromObserve, Observe } from "../gen/dataspace.js";
import { Assertion, Ref, Turn } from "../runtime/actor.js";
export default function (t: Turn, ds_p: Embedded<Ref>) {
export default function (t: Turn, ds_p: Pointer<Ref>) {
const ds = ds_p.embeddedValue;
console.log('Spawning Client');
let count = 0;
t.assert(ds, fromObserve(Observe({
pattern: P.rec($BoxState, P.bind()),
label: $BoxState,
observer: t.ref({
assert(t: Turn, [currentValue]: [number]): void {
// console.log(`Client ${t.actor.id}: got ${currentValue}`);
@ -17,7 +17,7 @@ export default function (t: Turn, ds_p: Embedded<Ref>) {
})
})));
t.assert(ds, fromObserve(Observe({
pattern: P.rec($BoxState, P.discard()),
label: $BoxState,
observer: t.ref({
assert(_t: Turn, _assertion: Assertion): void {
count++;

View File

@ -1,8 +1,8 @@
import { Actor, Assertion, Turn } from '../runtime/actor.js';
import { Dictionary, embed } from '@preserves/core';
import { Dataspace } from '../runtime/dataspace.js';
import { _embedded, attenuate, CRec, Lit, Pattern, PCompound, rfilter, ConstructorSpec } from '../runtime/rewrite.js';
import { $BoxState, $SetBox } from '../gen/examples/boxProtocol.js';
import { _ptr, attenuate, CRec, Lit, Pattern, PCompound, rfilter, ConstructorSpec } from '../runtime/rewrite.js';
import { $BoxState, $SetBox } from '../gen/box-protocol.js';
import { $Observe } from '../gen/dataspace.js';
import { spawnWorker } from '../worker/index.js';
import path from 'path';
@ -38,7 +38,7 @@ new Actor(async (t: Turn) => {
})),
Pattern.PCompound(PCompound({
ctor: ConstructorSpec.CRec(CRec({ label: $Observe, arity: 2 })),
members: new Dictionary<_embedded, Pattern>([
members: new Dictionary<_ptr, Pattern>([
[0, Pattern.Lit(Lit($SetBox))]])
}))));
@ -51,15 +51,13 @@ new Actor(async (t: Turn) => {
})),
Pattern.PCompound(PCompound({
ctor: ConstructorSpec.CRec(CRec({ label: $Observe, arity: 2 })),
members: new Dictionary<_embedded, Pattern>([
members: new Dictionary<_ptr, Pattern>([
[0, Pattern.Lit(Lit($BoxState))]])
}))));
const boxpath = path.join(__dirname, 'box.js');
const clientpath = path.join(__dirname, 'client.js');
t.activeFacet.preventInertCheck();
// spawnModule(t, boxpath, [embed(ds_for_box), 500000, 25000]);
spawnWorker(t, boxpath, [embed(ds_for_box), 50000, 2500]);

View File

@ -1,17 +1,16 @@
import { $joinedUser, $says, $user, fromNickClaim, fromSays, NickClaim, Says, UserId } from "../gen/secureChatProtocol.js";
import { during, observe, P } from "../runtime/dataspace.js";
import { $joinedUser, $says, $user, asJoin, asSays, asUserInfo, fromNickClaim, fromSays, NickClaim, Says, UserId } from "../gen/secure-chat-protocol.js";
import { during, observe } from "../runtime/dataspace.js";
import { Assertion, Ref, Turn } from "../runtime/actor.js";
import { attachReadline } from './readline.js';
import { Embedded } from "@preserves/core";
import { Pointer } from "@preserves/core";
export default function (t: Turn, ds_ptr: Embedded<Ref>) {
export default function (t: Turn, ds_ptr: Pointer<Ref>) {
const ds = ds_ptr.embeddedValue;
observe(t, ds, P.rec($joinedUser, P.bind(), P.bind()),
during(async (t, bindings) => {
let [uid, handle] = bindings as [UserId, Ref];
const facet = t.facet(t => runSession(t, uid, handle));
return t => t.stop(facet);
}));
observe(t, ds, $joinedUser, during(async (t, j0) => {
const j = asJoin(j0);
const facet = t.facet(t => runSession(t, j.uid, j.handle));
return t => t.stop(facet);
}));
}
function runSession(t: Turn, uid: UserId, session: Ref) {
@ -40,26 +39,25 @@ function runSession(t: Turn, uid: UserId, session: Ref) {
updateUsername(t, 'user' + process.pid);
const users = new Map<UserId, string>();
observe(t, session, P.rec($user, P.bind(), P.bind()),
during(async (_t, bindings) => {
let [uid, name] = bindings as [UserId, string];
const oldName = users.get(uid);
console.log(oldName === void 0
? `${name} arrived`
: `${oldName} changed name to ${name}`);
users.set(uid, name);
return (_t) => {
if (users.get(uid) === name) {
console.log(`${name} departed`);
users.delete(uid);
}
};
}));
observe(t, session, $user, during(async (_t, ui0) => {
const ui = asUserInfo(ui0);
const oldName = users.get(ui.uid);
console.log(oldName === void 0
? `${ui.name} arrived`
: `${oldName} changed name to ${ui.name}`);
users.set(ui.uid, ui.name);
return (_t) => {
if (users.get(ui.uid) === ui.name) {
console.log(`${ui.name} departed`);
users.delete(ui.uid);
}
};
}));
observe(t, session, P.rec($says, P.bind(), P.bind()), {
message(_t: Turn, bindings: Assertion): void {
let [who, what] = bindings as [UserId, string];
console.log(`${users.get(who) ?? `<unknown ${who}>`}: ${what}`);
observe(t, session, $says, {
message(_t: Turn, u0: Assertion): void {
const u = asSays(u0);
console.log(`${users.get(u.who) ?? `<unknown ${u.who}>`}: ${u.what}`);
},
});

View File

@ -7,18 +7,19 @@ import {
NickConflict,
UserId,
UserInfo,
asNickClaim,
fromJoin,
fromNickConflict,
fromUserInfo,
} from "../gen/secureChatProtocol.js";
} from "../gen/secure-chat-protocol.js";
import { Assertion, Handle, Ref, Turn } from "../runtime/actor.js";
import { observe, during, $Observe, Dataspace, P, $rec, $compound } from "../runtime/dataspace.js";
import { attenuate, rfilter, pRec, pEmbedded, pString, pLit, pDiscard } from "../runtime/rewrite.js";
import { observe, during, $Observe, asObserve, Dataspace } from "../runtime/dataspace.js";
import { attenuate, rfilter, pRec, pPointer, pString, pLit } from "../runtime/rewrite.js";
import { attenuate as sturdyAttenuate, KEY_LENGTH, sturdyEncode, fromSturdyRef, mint } from "../transport/sturdy.js";
import { Bind, fromBind } from "../gen/gatekeeper.js";
import { Bytes, Embedded } from "@preserves/core";
import { Bytes, Pointer } from "@preserves/core";
export default function (t: Turn, gatekeeperDs_ptr: Embedded<Ref>) {
export default function (t: Turn, gatekeeperDs_ptr: Pointer<Ref>) {
const gatekeeperDs = gatekeeperDs_ptr.embeddedValue;
const ds = t.ref(new Dataspace());
@ -27,11 +28,7 @@ export default function (t: Turn, gatekeeperDs_ptr: Embedded<Ref>) {
const chatKey = new Bytes(KEY_LENGTH);
t.assert(gatekeeperDs, fromBind(Bind({ oid: chatOid, key: chatKey, target: ds })));
mint(chatOid, chatKey).then(async r => {
r = await sturdyAttenuate(r, rfilter(pRec($Observe,
pRec($compound,
pRec($rec, pLit($joinedUser), pLit(2)),
pDiscard()),
pEmbedded())));
r = await sturdyAttenuate(r, rfilter(pRec($Observe, pLit($joinedUser), pPointer())));
console.log(fromSturdyRef(r).asPreservesText());
console.log(sturdyEncode(fromSturdyRef(r)).toHex());
});
@ -39,45 +36,39 @@ export default function (t: Turn, gatekeeperDs_ptr: Embedded<Ref>) {
const nicks = new Map<string, UserId>();
let nextUserId: UserId = 0;
observe(t, ds, P.rec($Observe,
P.rec($compound,
P.rec($rec, P.lit($joinedUser), P.lit(2)),
P.discard()),
P.bind()),
during(async (t, bindings) => {
const [embeddedObserver] = bindings as [Embedded<Ref>];
const observer = embeddedObserver.embeddedValue;
observe(t, ds, $Observe, during(async (t, o0) => {
const o = asObserve(o0);
if (o.label !== $joinedUser) return null;
const uid: UserId = nextUserId++;
const f = t.facet(t => {
t.assert(observer, fromJoin(Join({
uid,
handle: attenuate(ds, rfilter(
pRec($Observe, pLit($user), pEmbedded()),
pRec($Observe, pLit($says), pEmbedded()),
pRec($claimNick, pLit(uid), pString(), pEmbedded()),
pRec($says, pLit(uid), pString()))),
})));
let infoHandle: Handle | undefined;
let nick: string | undefined;
observe(t, ds, P.rec($claimNick, P.lit(uid), P.bind(), P.bind()), {
assert(t: Turn, bindings: Assertion): void {
const [name, embeddedK] = bindings as [string, Embedded<Ref>];
const k = embeddedK.embeddedValue;
if (nicks.has(name)) {
t.message(k, fromNickConflict(NickConflict()));
} else {
t.message(k, true);
if (nick !== void 0) nicks.delete(nick);
infoHandle = t.replace(ds, infoHandle,
fromUserInfo(UserInfo({ uid, name })));
nick = name;
nicks.set(nick, uid);
}
}
});
});
const uid: UserId = nextUserId++;
const f = t.facet(t => {
t.assert(o.observer, fromJoin(Join({
uid,
handle: attenuate(ds, rfilter(
pRec($Observe, pLit($user), pPointer()),
pRec($Observe, pLit($says), pPointer()),
pRec($claimNick, pLit(uid), pString(), pPointer()),
pRec($says, pLit(uid), pString()))),
})));
let infoHandle: Handle | undefined;
let nick: string | undefined;
observe(t, ds, $claimNick, {
assert(t: Turn, c0: Assertion): void {
const c = asNickClaim(c0);
if (c.uid !== uid) return;
if (nicks.has(c.name)) {
t.message(c.k, fromNickConflict(NickConflict()));
} else {
t.message(c.k, true);
if (nick !== void 0) nicks.delete(nick);
infoHandle = t.replace(ds, infoHandle, fromUserInfo(UserInfo(c)));
nick = c.name;
nicks.set(nick, uid);
}
}
});
});
return t => t.stop(f);
}));
return t => t.stop(f);
}));
}

View File

@ -1,10 +1,10 @@
import { $Present, $Says, fromPresent, fromSays, Present, Says } from "../gen/simpleChatProtocol.js";
import { during, observe, P } from "../runtime/dataspace.js";
import { $Present, $Says, asPresent, asSays, fromPresent, fromSays, Present, Says } from "../gen/simple-chat-protocol.js";
import { during, observe } from "../runtime/dataspace.js";
import { Assertion, Handle, Ref, Turn } from "../runtime/actor.js";
import { attachReadline } from './readline.js';
import { Embedded } from "@preserves/core";
import { Pointer } from "@preserves/core";
export default function (t: Turn, ds_ptr: Embedded<Ref>) {
export default function (t: Turn, ds_ptr: Pointer<Ref>) {
const ds = ds_ptr.embeddedValue;
let username = '';
@ -16,16 +16,16 @@ export default function (t: Turn, ds_ptr: Embedded<Ref>) {
}
updateUsername(t, 'user' + process.pid);
observe(t, ds, P.rec($Present, P.bind()), during(async (_t, bindings) => {
const [username] = bindings as [string];
console.log(`${username} arrived`);
return (_t) => console.log(`${username} departed`);
observe(t, ds, $Present, during(async (_t, e0) => {
const e = asPresent(e0);
console.log(`${e.username} arrived`);
return (_t) => console.log(`${e.username} departed`);
}));
observe(t, ds, P.rec($Says, P.bind(), P.bind()), {
message(_t: Turn, bindings: Assertion): void {
const [who, what] = bindings as [string, string];
console.log(`${who}: ${what}`);
observe(t, ds, $Says, {
message(_t: Turn, u0: Assertion): void {
const u = asSays(u0);
console.log(`${u.who}: ${u.what}`);
},
});

View File

@ -7,15 +7,18 @@ async function main() {
const m1 = await mint('hello world', new Bytes(KEY_LENGTH));
console.log(m1);
const m2 = await attenuate(m1, Caveat.Rewrite(Rewrite({
pattern: RW.Pattern.PBind(RW.PBind(RW.Pattern.PCompound(RW.PCompound({
ctor: RW.ConstructorSpec.CRec(RW.CRec({
label: Symbol.for('says'),
arity: 2
})),
members: new Dictionary<RW._embedded, RW.Pattern>([
[0, RW.Pattern.Lit(RW.Lit('Tony'))]])
})))),
template: RW.Template.TRef(RW.TRef(0))
pattern: RW.Pattern.PBind(RW.PBind({
name: Symbol.for('a'),
pattern: RW.Pattern.PCompound(RW.PCompound({
ctor: RW.ConstructorSpec.CRec(RW.CRec({
label: Symbol.for('says'),
arity: 2
})),
members: new Dictionary<RW._ptr, RW.Pattern>([
[0, RW.Pattern.Lit(RW.Lit('Tony'))]])
}))
})),
template: RW.Template.TRef(RW.TRef(Symbol.for('a')))
})));
console.log(m2);
console.log('should be true:', await validate(m1, new Bytes(KEY_LENGTH)));

View File

@ -1,10 +1,12 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../../runtime/actor";
import * as _i_Actor from "../runtime/actor";
export const $BoxState = Symbol.for("BoxState");
export const $SetBox = Symbol.for("SetBox");
export type _embedded = _i_EntityRef.Ref;
export type _ptr = _i_Actor.Ref;
export type _val = _.Value<_ptr>;
export type BoxState = {"value": number};
@ -15,15 +17,15 @@ export function BoxState(value: number): BoxState {return {"value": value};}
export function SetBox(value: number): SetBox {return {"value": value};}
export function asBoxState<_embedded = _i_EntityRef.Ref>(v: _.Value<_embedded>): BoxState {
export function asBoxState(v: _val): BoxState {
let result = toBoxState(v);
if (result === void 0) throw new TypeError(`Invalid BoxState: ${_.stringify(v)}`);
return result;
}
export function toBoxState<_embedded = _i_EntityRef.Ref>(v: _.Value<_embedded>): undefined | BoxState {
export function toBoxState(v: _val): undefined | BoxState {
let result: undefined | BoxState;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $BoxState) ? null : void 0;
if (_tmp0 !== void 0) {
@ -35,17 +37,17 @@ export function toBoxState<_embedded = _i_EntityRef.Ref>(v: _.Value<_embedded>):
return result;
}
export function fromBoxState<_embedded = _i_EntityRef.Ref>(_v: BoxState): _.Value<_embedded> {return _.Record($BoxState, [_v["value"]]);}
export function fromBoxState(_v: BoxState): _val {return _.Record($BoxState, [_v["value"]]);}
export function asSetBox<_embedded = _i_EntityRef.Ref>(v: _.Value<_embedded>): SetBox {
export function asSetBox(v: _val): SetBox {
let result = toSetBox(v);
if (result === void 0) throw new TypeError(`Invalid SetBox: ${_.stringify(v)}`);
return result;
}
export function toSetBox<_embedded = _i_EntityRef.Ref>(v: _.Value<_embedded>): undefined | SetBox {
export function toSetBox(v: _val): undefined | SetBox {
let result: undefined | SetBox;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $SetBox) ? null : void 0;
if (_tmp0 !== void 0) {
@ -57,5 +59,5 @@ export function toSetBox<_embedded = _i_EntityRef.Ref>(v: _.Value<_embedded>): u
return result;
}
export function fromSetBox<_embedded = _i_EntityRef.Ref>(_v: SetBox): _.Value<_embedded> {return _.Record($SetBox, [_v["value"]]);}
export function fromSetBox(_v: SetBox): _val {return _.Record($SetBox, [_v["value"]]);}

View File

@ -1,49 +1,40 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
import * as _i_dataspacePatterns from "./dataspacePatterns";
import * as _i_Actor from "../runtime/actor";
export const $Observe = Symbol.for("Observe");
export type _embedded = _i_EntityRef.Cap;
export type _ptr = _i_Actor.Ref;
export type Observe<_embedded = _i_EntityRef.Cap> = {"pattern": _i_dataspacePatterns.Pattern<_embedded>, "observer": _embedded};
export type _val = _.Value<_ptr>;
export type Observe = {"label": symbol, "observer": _ptr};
export function Observe<_embedded = _i_EntityRef.Cap>(
{pattern, observer}: {pattern: _i_dataspacePatterns.Pattern<_embedded>, observer: _embedded}
): Observe<_embedded> {return {"pattern": pattern, "observer": observer};}
export function Observe({label, observer}: {label: symbol, observer: _ptr}): Observe {return {"label": label, "observer": observer};}
export function asObserve<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Observe<_embedded> {
export function asObserve(v: _val): Observe {
let result = toObserve(v);
if (result === void 0) throw new TypeError(`Invalid Observe: ${_.stringify(v)}`);
return result;
}
export function toObserve<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Observe<_embedded> {
let result: undefined | Observe<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
export function toObserve(v: _val): undefined | Observe {
let result: undefined | Observe;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $Observe) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_i_dataspacePatterns.Pattern<_embedded>) | undefined;
_tmp1 = _i_dataspacePatterns.toPattern(v[0]);
let _tmp1: (symbol) | undefined;
_tmp1 = typeof v[0] === 'symbol' ? v[0] : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (_embedded) | undefined;
_tmp2 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {result = {"pattern": _tmp1, "observer": _tmp2};};
let _tmp2: (_ptr) | undefined;
_tmp2 = _.isPointer<_ptr>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {result = {"label": _tmp1, "observer": _tmp2};};
};
};
};
return result;
}
export function fromObserve<_embedded = _i_EntityRef.Cap>(_v: Observe<_embedded>): _.Value<_embedded> {
return _.Record(
$Observe,
[
_i_dataspacePatterns.fromPattern<_embedded>(_v["pattern"]),
_.embed(_v["observer"])
]
);
}
export function fromObserve(_v: Observe): _val {return _.Record($Observe, [_v["label"], _.embed(_v["observer"])]);}

View File

@ -1,388 +0,0 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
export const $_ = Symbol.for("_");
export const $arr = Symbol.for("arr");
export const $bind = Symbol.for("bind");
export const $compound = Symbol.for("compound");
export const $dict = Symbol.for("dict");
export const $lit = Symbol.for("lit");
export const $rec = Symbol.for("rec");
export type _embedded = _i_EntityRef.Cap;
export type Pattern<_embedded = _i_EntityRef.Cap> = (
{"_variant": "DDiscard", "value": DDiscard} |
{"_variant": "DBind", "value": DBind<_embedded>} |
{"_variant": "DLit", "value": DLit<_embedded>} |
{"_variant": "DCompound", "value": DCompound<_embedded>}
);
export type DDiscard = null;
export type DBind<_embedded = _i_EntityRef.Cap> = {"pattern": Pattern<_embedded>};
export type DLit<_embedded = _i_EntityRef.Cap> = {"value": _.Value<_embedded>};
export type DCompound<_embedded = _i_EntityRef.Cap> = (
{
"_variant": "rec",
"ctor": CRec<_embedded>,
"members": _.KeyedDictionary<number, Pattern<_embedded>, _embedded>
} |
{
"_variant": "arr",
"ctor": CArr,
"members": _.KeyedDictionary<number, Pattern<_embedded>, _embedded>
} |
{
"_variant": "dict",
"ctor": CDict,
"members": _.KeyedDictionary<_.Value<_embedded>, Pattern<_embedded>, _embedded>
}
);
export type CRec<_embedded = _i_EntityRef.Cap> = {"label": _.Value<_embedded>, "arity": number};
export type CArr = {"arity": number};
export type CDict = null;
export namespace Pattern {
export function DDiscard<_embedded = _i_EntityRef.Cap>(value: DDiscard): Pattern<_embedded> {return {"_variant": "DDiscard", "value": value};};
export function DBind<_embedded = _i_EntityRef.Cap>(value: DBind<_embedded>): Pattern<_embedded> {return {"_variant": "DBind", "value": value};};
export function DLit<_embedded = _i_EntityRef.Cap>(value: DLit<_embedded>): Pattern<_embedded> {return {"_variant": "DLit", "value": value};};
export function DCompound<_embedded = _i_EntityRef.Cap>(value: DCompound<_embedded>): Pattern<_embedded> {return {"_variant": "DCompound", "value": value};};
}
export function DDiscard(): DDiscard {return null;}
export function DBind<_embedded = _i_EntityRef.Cap>(pattern: Pattern<_embedded>): DBind<_embedded> {return {"pattern": pattern};}
export function DLit<_embedded = _i_EntityRef.Cap>(value: _.Value<_embedded>): DLit<_embedded> {return {"value": value};}
export namespace DCompound {
export function rec<_embedded = _i_EntityRef.Cap>(
{ctor, members}: {
ctor: CRec<_embedded>,
members: _.KeyedDictionary<number, Pattern<_embedded>, _embedded>
}
): DCompound<_embedded> {return {"_variant": "rec", "ctor": ctor, "members": members};};
export function arr<_embedded = _i_EntityRef.Cap>(
{ctor, members}: {ctor: CArr, members: _.KeyedDictionary<number, Pattern<_embedded>, _embedded>}
): DCompound<_embedded> {return {"_variant": "arr", "ctor": ctor, "members": members};};
export function dict<_embedded = _i_EntityRef.Cap>(
{ctor, members}: {
ctor: CDict,
members: _.KeyedDictionary<_.Value<_embedded>, Pattern<_embedded>, _embedded>
}
): DCompound<_embedded> {return {"_variant": "dict", "ctor": ctor, "members": members};};
}
export function CRec<_embedded = _i_EntityRef.Cap>({label, arity}: {label: _.Value<_embedded>, arity: number}): CRec<_embedded> {return {"label": label, "arity": arity};}
export function CArr(arity: number): CArr {return {"arity": arity};}
export function CDict(): CDict {return null;}
export function asPattern<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Pattern<_embedded> {
let result = toPattern(v);
if (result === void 0) throw new TypeError(`Invalid Pattern: ${_.stringify(v)}`);
return result;
}
export function toPattern<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Pattern<_embedded> {
let _tmp0: (DDiscard) | undefined;
let result: undefined | Pattern<_embedded>;
_tmp0 = toDDiscard(v);
if (_tmp0 !== void 0) {result = {"_variant": "DDiscard", "value": _tmp0};};
if (result === void 0) {
let _tmp1: (DBind<_embedded>) | undefined;
_tmp1 = toDBind(v);
if (_tmp1 !== void 0) {result = {"_variant": "DBind", "value": _tmp1};};
if (result === void 0) {
let _tmp2: (DLit<_embedded>) | undefined;
_tmp2 = toDLit(v);
if (_tmp2 !== void 0) {result = {"_variant": "DLit", "value": _tmp2};};
if (result === void 0) {
let _tmp3: (DCompound<_embedded>) | undefined;
_tmp3 = toDCompound(v);
if (_tmp3 !== void 0) {result = {"_variant": "DCompound", "value": _tmp3};};
};
};
};
return result;
}
export function fromPattern<_embedded = _i_EntityRef.Cap>(_v: Pattern<_embedded>): _.Value<_embedded> {
switch (_v._variant) {
case "DDiscard": {return fromDDiscard<_embedded>(_v.value);};
case "DBind": {return fromDBind<_embedded>(_v.value);};
case "DLit": {return fromDLit<_embedded>(_v.value);};
case "DCompound": {return fromDCompound<_embedded>(_v.value);};
};
}
export function asDDiscard<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): DDiscard {
let result = toDDiscard(v);
if (result === void 0) throw new TypeError(`Invalid DDiscard: ${_.stringify(v)}`);
return result;
}
export function toDDiscard<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | DDiscard {
let result: undefined | DDiscard;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $_) ? null : void 0;
if (_tmp0 !== void 0) {result = null;};
};
return result;
}
export function fromDDiscard<_embedded = _i_EntityRef.Cap>(_v: DDiscard): _.Value<_embedded> {return _.Record($_, []);}
export function asDBind<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): DBind<_embedded> {
let result = toDBind(v);
if (result === void 0) throw new TypeError(`Invalid DBind: ${_.stringify(v)}`);
return result;
}
export function toDBind<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | DBind<_embedded> {
let result: undefined | DBind<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $bind) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (Pattern<_embedded>) | undefined;
_tmp1 = toPattern(v[0]);
if (_tmp1 !== void 0) {result = {"pattern": _tmp1};};
};
};
return result;
}
export function fromDBind<_embedded = _i_EntityRef.Cap>(_v: DBind<_embedded>): _.Value<_embedded> {return _.Record($bind, [fromPattern<_embedded>(_v["pattern"])]);}
export function asDLit<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): DLit<_embedded> {
let result = toDLit(v);
if (result === void 0) throw new TypeError(`Invalid DLit: ${_.stringify(v)}`);
return result;
}
export function toDLit<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | DLit<_embedded> {
let result: undefined | DLit<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $lit) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {result = {"value": _tmp1};};
};
};
return result;
}
export function fromDLit<_embedded = _i_EntityRef.Cap>(_v: DLit<_embedded>): _.Value<_embedded> {return _.Record($lit, [_v["value"]]);}
export function asDCompound<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): DCompound<_embedded> {
let result = toDCompound(v);
if (result === void 0) throw new TypeError(`Invalid DCompound: ${_.stringify(v)}`);
return result;
}
export function toDCompound<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | DCompound<_embedded> {
let result: undefined | DCompound<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $compound) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (CRec<_embedded>) | undefined;
_tmp1 = toCRec(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (_.KeyedDictionary<number, Pattern<_embedded>, _embedded>) | undefined;
_tmp2 = void 0;
if (_.Dictionary.isDictionary<_embedded>(v[1])) {
_tmp2 = new _.KeyedDictionary();
for (const [_tmp4, _tmp3] of v[1]) {
let _tmp5: (number) | undefined;
_tmp5 = typeof _tmp4 === 'number' ? _tmp4 : void 0;
if (_tmp5 !== void 0) {
let _tmp6: (Pattern<_embedded>) | undefined;
_tmp6 = toPattern(_tmp3);
if (_tmp6 !== void 0) {_tmp2.set(_tmp5, _tmp6); continue;};
};
_tmp2 = void 0;
break;
};
};
if (_tmp2 !== void 0) {result = {"_variant": "rec", "ctor": _tmp1, "members": _tmp2};};
};
};
};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp7: (null) | undefined;
_tmp7 = _.is(v.label, $compound) ? null : void 0;
if (_tmp7 !== void 0) {
let _tmp8: (CArr) | undefined;
_tmp8 = toCArr(v[0]);
if (_tmp8 !== void 0) {
let _tmp9: (_.KeyedDictionary<number, Pattern<_embedded>, _embedded>) | undefined;
_tmp9 = void 0;
if (_.Dictionary.isDictionary<_embedded>(v[1])) {
_tmp9 = new _.KeyedDictionary();
for (const [_tmp11, _tmp10] of v[1]) {
let _tmp12: (number) | undefined;
_tmp12 = typeof _tmp11 === 'number' ? _tmp11 : void 0;
if (_tmp12 !== void 0) {
let _tmp13: (Pattern<_embedded>) | undefined;
_tmp13 = toPattern(_tmp10);
if (_tmp13 !== void 0) {_tmp9.set(_tmp12, _tmp13); continue;};
};
_tmp9 = void 0;
break;
};
};
if (_tmp9 !== void 0) {result = {"_variant": "arr", "ctor": _tmp8, "members": _tmp9};};
};
};
};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp14: (null) | undefined;
_tmp14 = _.is(v.label, $compound) ? null : void 0;
if (_tmp14 !== void 0) {
let _tmp15: (CDict) | undefined;
_tmp15 = toCDict(v[0]);
if (_tmp15 !== void 0) {
let _tmp16: (_.KeyedDictionary<_.Value<_embedded>, Pattern<_embedded>, _embedded>) | undefined;
_tmp16 = void 0;
if (_.Dictionary.isDictionary<_embedded>(v[1])) {
_tmp16 = new _.KeyedDictionary();
for (const [_tmp18, _tmp17] of v[1]) {
let _tmp19: (_.Value<_embedded>) | undefined;
_tmp19 = _tmp18;
if (_tmp19 !== void 0) {
let _tmp20: (Pattern<_embedded>) | undefined;
_tmp20 = toPattern(_tmp17);
if (_tmp20 !== void 0) {_tmp16.set(_tmp19, _tmp20); continue;};
};
_tmp16 = void 0;
break;
};
};
if (_tmp16 !== void 0) {result = {"_variant": "dict", "ctor": _tmp15, "members": _tmp16};};
};
};
};
};
};
return result;
}
export function fromDCompound<_embedded = _i_EntityRef.Cap>(_v: DCompound<_embedded>): _.Value<_embedded> {
switch (_v._variant) {
case "rec": {
return _.Record(
$compound,
[
fromCRec<_embedded>(_v["ctor"]),
new _.Dictionary<_embedded>(
_.Array.from(_v["members"].entries()).map(([k, v]) => [k, fromPattern<_embedded>(v)])
)
]
);
};
case "arr": {
return _.Record(
$compound,
[
fromCArr<_embedded>(_v["ctor"]),
new _.Dictionary<_embedded>(
_.Array.from(_v["members"].entries()).map(([k, v]) => [k, fromPattern<_embedded>(v)])
)
]
);
};
case "dict": {
return _.Record(
$compound,
[
fromCDict<_embedded>(_v["ctor"]),
new _.Dictionary<_embedded>(
_.Array.from(_v["members"].entries()).map(([k, v]) => [k, fromPattern<_embedded>(v)])
)
]
);
};
};
}
export function asCRec<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): CRec<_embedded> {
let result = toCRec(v);
if (result === void 0) throw new TypeError(`Invalid CRec: ${_.stringify(v)}`);
return result;
}
export function toCRec<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | CRec<_embedded> {
let result: undefined | CRec<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $rec) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (number) | undefined;
_tmp2 = typeof v[1] === 'number' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"label": _tmp1, "arity": _tmp2};};
};
};
};
return result;
}
export function fromCRec<_embedded = _i_EntityRef.Cap>(_v: CRec<_embedded>): _.Value<_embedded> {return _.Record($rec, [_v["label"], _v["arity"]]);}
export function asCArr<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): CArr {
let result = toCArr(v);
if (result === void 0) throw new TypeError(`Invalid CArr: ${_.stringify(v)}`);
return result;
}
export function toCArr<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | CArr {
let result: undefined | CArr;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $arr) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (number) | undefined;
_tmp1 = typeof v[0] === 'number' ? v[0] : void 0;
if (_tmp1 !== void 0) {result = {"arity": _tmp1};};
};
};
return result;
}
export function fromCArr<_embedded = _i_EntityRef.Cap>(_v: CArr): _.Value<_embedded> {return _.Record($arr, [_v["arity"]]);}
export function asCDict<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): CDict {
let result = toCDict(v);
if (result === void 0) throw new TypeError(`Invalid CDict: ${_.stringify(v)}`);
return result;
}
export function toCDict<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | CDict {
let result: undefined | CDict;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $dict) ? null : void 0;
if (_tmp0 !== void 0) {result = null;};
};
return result;
}
export function fromCDict<_embedded = _i_EntityRef.Cap>(_v: CDict): _.Value<_embedded> {return _.Record($dict, []);}

View File

@ -1,40 +1,40 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
import * as _i_Actor from "../runtime/actor";
import * as _i_sturdy from "./sturdy";
export const $bind = Symbol.for("bind");
export const $resolve = Symbol.for("resolve");
export type _embedded = _i_EntityRef.Cap;
export type _ptr = _i_Actor.Ref;
export type Resolve<_embedded = _i_EntityRef.Cap> = {"sturdyref": _i_sturdy.SturdyRef<_embedded>, "observer": _embedded};
export type _val = _.Value<_ptr>;
export type Bind<_embedded = _i_EntityRef.Cap> = {"oid": _.Value<_embedded>, "key": _.Bytes, "target": _embedded};
export type Resolve = {"sturdyref": _i_sturdy.SturdyRef, "observer": _ptr};
export type Bind = {"oid": _val, "key": _.Bytes, "target": _ptr};
export function Resolve<_embedded = _i_EntityRef.Cap>(
{sturdyref, observer}: {sturdyref: _i_sturdy.SturdyRef<_embedded>, observer: _embedded}
): Resolve<_embedded> {return {"sturdyref": sturdyref, "observer": observer};}
export function Resolve({sturdyref, observer}: {sturdyref: _i_sturdy.SturdyRef, observer: _ptr}): Resolve {return {"sturdyref": sturdyref, "observer": observer};}
export function Bind<_embedded = _i_EntityRef.Cap>({oid, key, target}: {oid: _.Value<_embedded>, key: _.Bytes, target: _embedded}): Bind<_embedded> {return {"oid": oid, "key": key, "target": target};}
export function Bind({oid, key, target}: {oid: _val, key: _.Bytes, target: _ptr}): Bind {return {"oid": oid, "key": key, "target": target};}
export function asResolve<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Resolve<_embedded> {
export function asResolve(v: _val): Resolve {
let result = toResolve(v);
if (result === void 0) throw new TypeError(`Invalid Resolve: ${_.stringify(v)}`);
return result;
}
export function toResolve<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Resolve<_embedded> {
let result: undefined | Resolve<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
export function toResolve(v: _val): undefined | Resolve {
let result: undefined | Resolve;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $resolve) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_i_sturdy.SturdyRef<_embedded>) | undefined;
let _tmp1: (_i_sturdy.SturdyRef) | undefined;
_tmp1 = _i_sturdy.toSturdyRef(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (_embedded) | undefined;
_tmp2 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
let _tmp2: (_ptr) | undefined;
_tmp2 = _.isPointer<_ptr>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {result = {"sturdyref": _tmp1, "observer": _tmp2};};
};
};
@ -42,33 +42,30 @@ export function toResolve<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>):
return result;
}
export function fromResolve<_embedded = _i_EntityRef.Cap>(_v: Resolve<_embedded>): _.Value<_embedded> {
return _.Record(
$resolve,
[_i_sturdy.fromSturdyRef<_embedded>(_v["sturdyref"]), _.embed(_v["observer"])]
);
export function fromResolve(_v: Resolve): _val {
return _.Record($resolve, [_i_sturdy.fromSturdyRef(_v["sturdyref"]), _.embed(_v["observer"])]);
}
export function asBind<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Bind<_embedded> {
export function asBind(v: _val): Bind {
let result = toBind(v);
if (result === void 0) throw new TypeError(`Invalid Bind: ${_.stringify(v)}`);
return result;
}
export function toBind<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Bind<_embedded> {
let result: undefined | Bind<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
export function toBind(v: _val): undefined | Bind {
let result: undefined | Bind;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $bind) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
let _tmp1: (_val) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (_.Bytes) | undefined;
_tmp2 = _.Bytes.isBytes(v[1]) ? v[1] : void 0;
if (_tmp2 !== void 0) {
let _tmp3: (_embedded) | undefined;
_tmp3 = _.isEmbedded<_embedded>(v[2]) ? v[2].embeddedValue : void 0;
let _tmp3: (_ptr) | undefined;
_tmp3 = _.isPointer<_ptr>(v[2]) ? v[2].embeddedValue : void 0;
if (_tmp3 !== void 0) {result = {"oid": _tmp1, "key": _tmp2, "target": _tmp3};};
};
};
@ -77,5 +74,5 @@ export function toBind<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): und
return result;
}
export function fromBind<_embedded = _i_EntityRef.Cap>(_v: Bind<_embedded>): _.Value<_embedded> {return _.Record($bind, [_v["oid"], _v["key"], _.embed(_v["target"])]);}
export function fromBind(_v: Bind): _val {return _.Record($bind, [_v["oid"], _v["key"], _.embed(_v["target"])]);}

View File

@ -1,151 +1,89 @@
import * as _ from "@preserves/core";
import * as _i_sturdy from "./sturdy";
export const $assert = Symbol.for("assert");
export const $error = Symbol.for("error");
export const $message = Symbol.for("message");
export const $retract = Symbol.for("retract");
export const $sync = Symbol.for("sync");
export type Packet<_embedded = _.GenericEmbedded> = (
{"_variant": "Turn", "value": Turn<_embedded>} |
{"_variant": "Error", "value": Error<_embedded>}
);
export type _ptr = _i_sturdy.WireRef;
export type Error<_embedded = _.GenericEmbedded> = {"message": string, "detail": _.Value<_embedded>};
export type _val = _.Value<_ptr>;
export type Assertion<_embedded = _.GenericEmbedded> = _.Value<_embedded>;
export type Assertion = _val;
export type Handle = number;
export type Event<_embedded = _.GenericEmbedded> = (
{"_variant": "Assert", "value": Assert<_embedded>} |
export type Event = (
{"_variant": "Assert", "value": Assert} |
{"_variant": "Retract", "value": Retract} |
{"_variant": "Message", "value": Message<_embedded>} |
{"_variant": "Sync", "value": Sync<_embedded>}
{"_variant": "Message", "value": Message} |
{"_variant": "Sync", "value": Sync}
);
export type Oid = number;
export type Turn<_embedded = _.GenericEmbedded> = Array<TurnEvent<_embedded>>;
export type Turn = Array<TurnEvent>;
export type TurnEvent<_embedded = _.GenericEmbedded> = {"oid": Oid, "event": Event<_embedded>};
export type TurnEvent = {"oid": Oid, "event": Event};
export type Assert<_embedded = _.GenericEmbedded> = {"assertion": Assertion<_embedded>, "handle": Handle};
export type Assert = {"assertion": Assertion, "handle": Handle};
export type Retract = {"handle": Handle};
export type Message<_embedded = _.GenericEmbedded> = {"body": Assertion<_embedded>};
export type Message = {"body": Assertion};
export type Sync<_embedded = _.GenericEmbedded> = {"peer": _embedded};
export type Sync = {"peer": _ptr};
export namespace Packet {
export function Turn<_embedded = _.GenericEmbedded>(value: Turn<_embedded>): Packet<_embedded> {return {"_variant": "Turn", "value": value};};
export function Error<_embedded = _.GenericEmbedded>(value: Error<_embedded>): Packet<_embedded> {return {"_variant": "Error", "value": value};};
}
export function Error<_embedded = _.GenericEmbedded>({message, detail}: {message: string, detail: _.Value<_embedded>}): Error<_embedded> {return {"message": message, "detail": detail};}
export function Assertion<_embedded = _.GenericEmbedded>(value: _.Value<_embedded>): Assertion<_embedded> {return value;}
export function Assertion(value: _val): Assertion {return value;}
export function Handle(value: number): Handle {return value;}
export namespace Event {
export function Assert<_embedded = _.GenericEmbedded>(value: Assert<_embedded>): Event<_embedded> {return {"_variant": "Assert", "value": value};};
export function Retract<_embedded = _.GenericEmbedded>(value: Retract): Event<_embedded> {return {"_variant": "Retract", "value": value};};
export function Message<_embedded = _.GenericEmbedded>(value: Message<_embedded>): Event<_embedded> {return {"_variant": "Message", "value": value};};
export function Sync<_embedded = _.GenericEmbedded>(value: Sync<_embedded>): Event<_embedded> {return {"_variant": "Sync", "value": value};};
export function Assert(value: Assert): Event {return {"_variant": "Assert", "value": value};};
export function Retract(value: Retract): Event {return {"_variant": "Retract", "value": value};};
export function Message(value: Message): Event {return {"_variant": "Message", "value": value};};
export function Sync(value: Sync): Event {return {"_variant": "Sync", "value": value};};
}
export function Oid(value: number): Oid {return value;}
export function Turn<_embedded = _.GenericEmbedded>(value: Array<TurnEvent<_embedded>>): Turn<_embedded> {return value;}
export function Turn(value: Array<TurnEvent>): Turn {return value;}
export function TurnEvent<_embedded = _.GenericEmbedded>({oid, event}: {oid: Oid, event: Event<_embedded>}): TurnEvent<_embedded> {return {"oid": oid, "event": event};}
export function TurnEvent({oid, event}: {oid: Oid, event: Event}): TurnEvent {return {"oid": oid, "event": event};}
export function Assert<_embedded = _.GenericEmbedded>({assertion, handle}: {assertion: Assertion<_embedded>, handle: Handle}): Assert<_embedded> {return {"assertion": assertion, "handle": handle};}
export function Assert({assertion, handle}: {assertion: Assertion, handle: Handle}): Assert {return {"assertion": assertion, "handle": handle};}
export function Retract(handle: Handle): Retract {return {"handle": handle};}
export function Message<_embedded = _.GenericEmbedded>(body: Assertion<_embedded>): Message<_embedded> {return {"body": body};}
export function Message(body: Assertion): Message {return {"body": body};}
export function Sync<_embedded = _.GenericEmbedded>(peer: _embedded): Sync<_embedded> {return {"peer": peer};}
export function Sync(peer: _ptr): Sync {return {"peer": peer};}
export function asPacket<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Packet<_embedded> {
let result = toPacket(v);
if (result === void 0) throw new TypeError(`Invalid Packet: ${_.stringify(v)}`);
return result;
}
export function toPacket<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Packet<_embedded> {
let _tmp0: (Turn<_embedded>) | undefined;
let result: undefined | Packet<_embedded>;
_tmp0 = toTurn(v);
if (_tmp0 !== void 0) {result = {"_variant": "Turn", "value": _tmp0};};
if (result === void 0) {
let _tmp1: (Error<_embedded>) | undefined;
_tmp1 = toError(v);
if (_tmp1 !== void 0) {result = {"_variant": "Error", "value": _tmp1};};
};
return result;
}
export function fromPacket<_embedded = _.GenericEmbedded>(_v: Packet<_embedded>): _.Value<_embedded> {
switch (_v._variant) {
case "Turn": {return fromTurn<_embedded>(_v.value);};
case "Error": {return fromError<_embedded>(_v.value);};
};
}
export function asError<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Error<_embedded> {
let result = toError(v);
if (result === void 0) throw new TypeError(`Invalid Error: ${_.stringify(v)}`);
return result;
}
export function toError<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Error<_embedded> {
let result: undefined | Error<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $error) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (_.Value<_embedded>) | undefined;
_tmp2 = v[1];
if (_tmp2 !== void 0) {result = {"message": _tmp1, "detail": _tmp2};};
};
};
};
return result;
}
export function fromError<_embedded = _.GenericEmbedded>(_v: Error<_embedded>): _.Value<_embedded> {return _.Record($error, [_v["message"], _v["detail"]]);}
export function asAssertion<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Assertion<_embedded> {
export function asAssertion(v: _val): Assertion {
let result = toAssertion(v);
if (result === void 0) throw new TypeError(`Invalid Assertion: ${_.stringify(v)}`);
return result;
}
export function toAssertion<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Assertion<_embedded> {
let _tmp0: (_.Value<_embedded>) | undefined;
let result: undefined | Assertion<_embedded>;
export function toAssertion(v: _val): undefined | Assertion {
let _tmp0: (_val) | undefined;
let result: undefined | Assertion;
_tmp0 = v;
if (_tmp0 !== void 0) {result = _tmp0;};
return result;
}
export function fromAssertion<_embedded = _.GenericEmbedded>(_v: Assertion<_embedded>): _.Value<_embedded> {return _v;}
export function fromAssertion(_v: Assertion): _val {return _v;}
export function asHandle<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Handle {
export function asHandle(v: _val): Handle {
let result = toHandle(v);
if (result === void 0) throw new TypeError(`Invalid Handle: ${_.stringify(v)}`);
return result;
}
export function toHandle<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Handle {
export function toHandle(v: _val): undefined | Handle {
let _tmp0: (number) | undefined;
let result: undefined | Handle;
_tmp0 = typeof v === 'number' ? v : void 0;
@ -153,17 +91,17 @@ export function toHandle<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>):
return result;
}
export function fromHandle<_embedded = _.GenericEmbedded>(_v: Handle): _.Value<_embedded> {return _v;}
export function fromHandle(_v: Handle): _val {return _v;}
export function asEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Event<_embedded> {
export function asEvent(v: _val): Event {
let result = toEvent(v);
if (result === void 0) throw new TypeError(`Invalid Event: ${_.stringify(v)}`);
return result;
}
export function toEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Event<_embedded> {
let _tmp0: (Assert<_embedded>) | undefined;
let result: undefined | Event<_embedded>;
export function toEvent(v: _val): undefined | Event {
let _tmp0: (Assert) | undefined;
let result: undefined | Event;
_tmp0 = toAssert(v);
if (_tmp0 !== void 0) {result = {"_variant": "Assert", "value": _tmp0};};
if (result === void 0) {
@ -171,11 +109,11 @@ export function toEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): u
_tmp1 = toRetract(v);
if (_tmp1 !== void 0) {result = {"_variant": "Retract", "value": _tmp1};};
if (result === void 0) {
let _tmp2: (Message<_embedded>) | undefined;
let _tmp2: (Message) | undefined;
_tmp2 = toMessage(v);
if (_tmp2 !== void 0) {result = {"_variant": "Message", "value": _tmp2};};
if (result === void 0) {
let _tmp3: (Sync<_embedded>) | undefined;
let _tmp3: (Sync) | undefined;
_tmp3 = toSync(v);
if (_tmp3 !== void 0) {result = {"_variant": "Sync", "value": _tmp3};};
};
@ -184,22 +122,22 @@ export function toEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): u
return result;
}
export function fromEvent<_embedded = _.GenericEmbedded>(_v: Event<_embedded>): _.Value<_embedded> {
export function fromEvent(_v: Event): _val {
switch (_v._variant) {
case "Assert": {return fromAssert<_embedded>(_v.value);};
case "Retract": {return fromRetract<_embedded>(_v.value);};
case "Message": {return fromMessage<_embedded>(_v.value);};
case "Sync": {return fromSync<_embedded>(_v.value);};
case "Assert": {return fromAssert(_v.value);};
case "Retract": {return fromRetract(_v.value);};
case "Message": {return fromMessage(_v.value);};
case "Sync": {return fromSync(_v.value);};
};
}
export function asOid<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Oid {
export function asOid(v: _val): Oid {
let result = toOid(v);
if (result === void 0) throw new TypeError(`Invalid Oid: ${_.stringify(v)}`);
return result;
}
export function toOid<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Oid {
export function toOid(v: _val): undefined | Oid {
let _tmp0: (number) | undefined;
let result: undefined | Oid;
_tmp0 = typeof v === 'number' ? v : void 0;
@ -207,47 +145,46 @@ export function toOid<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): und
return result;
}
export function fromOid<_embedded = _.GenericEmbedded>(_v: Oid): _.Value<_embedded> {return _v;}
export function fromOid(_v: Oid): _val {return _v;}
export function asTurn<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Turn<_embedded> {
export function asTurn(v: _val): Turn {
let result = toTurn(v);
if (result === void 0) throw new TypeError(`Invalid Turn: ${_.stringify(v)}`);
return result;
}
export function toTurn<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Turn<_embedded> {
let _tmp0: (Array<TurnEvent<_embedded>>) | undefined;
let result: undefined | Turn<_embedded>;
_tmp0 = void 0;
export function toTurn(v: _val): undefined | Turn {
let result: undefined | Turn;
if (_.Array.isArray(v)) {
let _tmp0: (Array<TurnEvent>) | undefined;
_tmp0 = [];
for (const _tmp1 of v) {
let _tmp2: (TurnEvent<_embedded>) | undefined;
let _tmp2: (TurnEvent) | undefined;
_tmp2 = toTurnEvent(_tmp1);
if (_tmp2 !== void 0) {_tmp0.push(_tmp2); continue;};
_tmp0 = void 0;
break;
};
if (_tmp0 !== void 0) {result = _tmp0;};
};
if (_tmp0 !== void 0) {result = _tmp0;};
return result;
}
export function fromTurn<_embedded = _.GenericEmbedded>(_v: Turn<_embedded>): _.Value<_embedded> {return _v.map(v => fromTurnEvent<_embedded>(v));}
export function fromTurn(_v: Turn): _val {return _v.map(v => fromTurnEvent(v));}
export function asTurnEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): TurnEvent<_embedded> {
export function asTurnEvent(v: _val): TurnEvent {
let result = toTurnEvent(v);
if (result === void 0) throw new TypeError(`Invalid TurnEvent: ${_.stringify(v)}`);
return result;
}
export function toTurnEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | TurnEvent<_embedded> {
let result: undefined | TurnEvent<_embedded>;
export function toTurnEvent(v: _val): undefined | TurnEvent {
let result: undefined | TurnEvent;
if (_.Array.isArray(v) && v.length === 2) {
let _tmp0: (Oid) | undefined;
_tmp0 = toOid(v[0]);
if (_tmp0 !== void 0) {
let _tmp1: (Event<_embedded>) | undefined;
let _tmp1: (Event) | undefined;
_tmp1 = toEvent(v[1]);
if (_tmp1 !== void 0) {result = {"oid": _tmp0, "event": _tmp1};};
};
@ -255,21 +192,21 @@ export function toTurnEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>
return result;
}
export function fromTurnEvent<_embedded = _.GenericEmbedded>(_v: TurnEvent<_embedded>): _.Value<_embedded> {return [fromOid<_embedded>(_v["oid"]), fromEvent<_embedded>(_v["event"])];}
export function fromTurnEvent(_v: TurnEvent): _val {return [fromOid(_v["oid"]), fromEvent(_v["event"])];}
export function asAssert<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Assert<_embedded> {
export function asAssert(v: _val): Assert {
let result = toAssert(v);
if (result === void 0) throw new TypeError(`Invalid Assert: ${_.stringify(v)}`);
return result;
}
export function toAssert<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Assert<_embedded> {
let result: undefined | Assert<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
export function toAssert(v: _val): undefined | Assert {
let result: undefined | Assert;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $assert) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (Assertion<_embedded>) | undefined;
let _tmp1: (Assertion) | undefined;
_tmp1 = toAssertion(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (Handle) | undefined;
@ -281,22 +218,19 @@ export function toAssert<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>):
return result;
}
export function fromAssert<_embedded = _.GenericEmbedded>(_v: Assert<_embedded>): _.Value<_embedded> {
return _.Record(
$assert,
[fromAssertion<_embedded>(_v["assertion"]), fromHandle<_embedded>(_v["handle"])]
);
export function fromAssert(_v: Assert): _val {
return _.Record($assert, [fromAssertion(_v["assertion"]), fromHandle(_v["handle"])]);
}
export function asRetract<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Retract {
export function asRetract(v: _val): Retract {
let result = toRetract(v);
if (result === void 0) throw new TypeError(`Invalid Retract: ${_.stringify(v)}`);
return result;
}
export function toRetract<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Retract {
export function toRetract(v: _val): undefined | Retract {
let result: undefined | Retract;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $retract) ? null : void 0;
if (_tmp0 !== void 0) {
@ -308,21 +242,21 @@ export function toRetract<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>):
return result;
}
export function fromRetract<_embedded = _.GenericEmbedded>(_v: Retract): _.Value<_embedded> {return _.Record($retract, [fromHandle<_embedded>(_v["handle"])]);}
export function fromRetract(_v: Retract): _val {return _.Record($retract, [fromHandle(_v["handle"])]);}
export function asMessage<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Message<_embedded> {
export function asMessage(v: _val): Message {
let result = toMessage(v);
if (result === void 0) throw new TypeError(`Invalid Message: ${_.stringify(v)}`);
return result;
}
export function toMessage<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Message<_embedded> {
let result: undefined | Message<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
export function toMessage(v: _val): undefined | Message {
let result: undefined | Message;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $message) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (Assertion<_embedded>) | undefined;
let _tmp1: (Assertion) | undefined;
_tmp1 = toAssertion(v[0]);
if (_tmp1 !== void 0) {result = {"body": _tmp1};};
};
@ -330,27 +264,27 @@ export function toMessage<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>):
return result;
}
export function fromMessage<_embedded = _.GenericEmbedded>(_v: Message<_embedded>): _.Value<_embedded> {return _.Record($message, [fromAssertion<_embedded>(_v["body"])]);}
export function fromMessage(_v: Message): _val {return _.Record($message, [fromAssertion(_v["body"])]);}
export function asSync<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Sync<_embedded> {
export function asSync(v: _val): Sync {
let result = toSync(v);
if (result === void 0) throw new TypeError(`Invalid Sync: ${_.stringify(v)}`);
return result;
}
export function toSync<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Sync<_embedded> {
let result: undefined | Sync<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
export function toSync(v: _val): undefined | Sync {
let result: undefined | Sync;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $sync) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_embedded) | undefined;
_tmp1 = _.isEmbedded<_embedded>(v[0]) ? v[0].embeddedValue : void 0;
let _tmp1: (_ptr) | undefined;
_tmp1 = _.isPointer<_ptr>(v[0]) ? v[0].embeddedValue : void 0;
if (_tmp1 !== void 0) {result = {"peer": _tmp1};};
};
};
return result;
}
export function fromSync<_embedded = _.GenericEmbedded>(_v: Sync<_embedded>): _.Value<_embedded> {return _.Record($sync, [_.embed(_v["peer"])]);}
export function fromSync(_v: Sync): _val {return _.Record($sync, [_.embed(_v["peer"])]);}

View File

@ -1,35 +0,0 @@
import * as _ from "@preserves/core";
export const __lit0 = Symbol.for("racket-event");
export type RacketEvent<_embedded = _.GenericEmbedded> = {"source": _embedded, "event": _embedded};
export function RacketEvent<_embedded = _.GenericEmbedded>({source, event}: {source: _embedded, event: _embedded}): RacketEvent<_embedded> {return {"source": source, "event": event};}
export function asRacketEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): RacketEvent<_embedded> {
let result = toRacketEvent(v);
if (result === void 0) throw new TypeError(`Invalid RacketEvent: ${_.stringify(v)}`);
return result;
}
export function toRacketEvent<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | RacketEvent<_embedded> {
let result: undefined | RacketEvent<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit0) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_embedded) | undefined;
_tmp1 = _.isEmbedded<_embedded>(v[0]) ? v[0].embeddedValue : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (_embedded) | undefined;
_tmp2 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {result = {"source": _tmp1, "event": _tmp2};};
};
};
};
return result;
}
export function fromRacketEvent<_embedded = _.GenericEmbedded>(_v: RacketEvent<_embedded>): _.Value<_embedded> {return _.Record(__lit0, [_.embed(_v["source"]), _.embed(_v["event"])]);}

View File

@ -0,0 +1,182 @@
import * as _ from "@preserves/core";
import * as _i_Actor from "../runtime/actor";
export const $claimNick = Symbol.for("claimNick");
export const $joinedUser = Symbol.for("joinedUser");
export const $nickConflict = Symbol.for("nickConflict");
export const $says = Symbol.for("says");
export const $user = Symbol.for("user");
export type _ptr = _i_Actor.Ref;
export type _val = _.Value<_ptr>;
export type UserId = number;
export type Join = {"uid": UserId, "handle": _ptr};
export type NickClaim = {"uid": UserId, "name": string, "k": _ptr};
export type UserInfo = {"uid": UserId, "name": string};
export type Says = {"who": UserId, "what": string};
export type NickConflict = null;
export function UserId(value: number): UserId {return value;}
export function Join({uid, handle}: {uid: UserId, handle: _ptr}): Join {return {"uid": uid, "handle": handle};}
export function NickClaim({uid, name, k}: {uid: UserId, name: string, k: _ptr}): NickClaim {return {"uid": uid, "name": name, "k": k};}
export function UserInfo({uid, name}: {uid: UserId, name: string}): UserInfo {return {"uid": uid, "name": name};}
export function Says({who, what}: {who: UserId, what: string}): Says {return {"who": who, "what": what};}
export function NickConflict(): NickConflict {return null;}
export function asUserId(v: _val): UserId {
let result = toUserId(v);
if (result === void 0) throw new TypeError(`Invalid UserId: ${_.stringify(v)}`);
return result;
}
export function toUserId(v: _val): undefined | UserId {
let _tmp0: (number) | undefined;
let result: undefined | UserId;
_tmp0 = typeof v === 'number' ? v : void 0;
if (_tmp0 !== void 0) {result = _tmp0;};
return result;
}
export function fromUserId(_v: UserId): _val {return _v;}
export function asJoin(v: _val): Join {
let result = toJoin(v);
if (result === void 0) throw new TypeError(`Invalid Join: ${_.stringify(v)}`);
return result;
}
export function toJoin(v: _val): undefined | Join {
let result: undefined | Join;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $joinedUser) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (_ptr) | undefined;
_tmp2 = _.isPointer<_ptr>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {result = {"uid": _tmp1, "handle": _tmp2};};
};
};
};
return result;
}
export function fromJoin(_v: Join): _val {return _.Record($joinedUser, [fromUserId(_v["uid"]), _.embed(_v["handle"])]);}
export function asNickClaim(v: _val): NickClaim {
let result = toNickClaim(v);
if (result === void 0) throw new TypeError(`Invalid NickClaim: ${_.stringify(v)}`);
return result;
}
export function toNickClaim(v: _val): undefined | NickClaim {
let result: undefined | NickClaim;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $claimNick) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (string) | undefined;
_tmp2 = typeof v[1] === 'string' ? v[1] : void 0;
if (_tmp2 !== void 0) {
let _tmp3: (_ptr) | undefined;
_tmp3 = _.isPointer<_ptr>(v[2]) ? v[2].embeddedValue : void 0;
if (_tmp3 !== void 0) {result = {"uid": _tmp1, "name": _tmp2, "k": _tmp3};};
};
};
};
};
return result;
}
export function fromNickClaim(_v: NickClaim): _val {
return _.Record($claimNick, [fromUserId(_v["uid"]), _v["name"], _.embed(_v["k"])]);
}
export function asUserInfo(v: _val): UserInfo {
let result = toUserInfo(v);
if (result === void 0) throw new TypeError(`Invalid UserInfo: ${_.stringify(v)}`);
return result;
}
export function toUserInfo(v: _val): undefined | UserInfo {
let result: undefined | UserInfo;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $user) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (string) | undefined;
_tmp2 = typeof v[1] === 'string' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"uid": _tmp1, "name": _tmp2};};
};
};
};
return result;
}
export function fromUserInfo(_v: UserInfo): _val {return _.Record($user, [fromUserId(_v["uid"]), _v["name"]]);}
export function asSays(v: _val): Says {
let result = toSays(v);
if (result === void 0) throw new TypeError(`Invalid Says: ${_.stringify(v)}`);
return result;
}
export function toSays(v: _val): undefined | Says {
let result: undefined | Says;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $says) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (string) | undefined;
_tmp2 = typeof v[1] === 'string' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"who": _tmp1, "what": _tmp2};};
};
};
};
return result;
}
export function fromSays(_v: Says): _val {return _.Record($says, [fromUserId(_v["who"]), _v["what"]]);}
export function asNickConflict(v: _val): NickConflict {
let result = toNickConflict(v);
if (result === void 0) throw new TypeError(`Invalid NickConflict: ${_.stringify(v)}`);
return result;
}
export function toNickConflict(v: _val): undefined | NickConflict {
let result: undefined | NickConflict;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $nickConflict) ? null : void 0;
if (_tmp0 !== void 0) {result = null;};
};
return result;
}
export function fromNickConflict(_v: NickConflict): _val {return _.Record($nickConflict, []);}

View File

@ -1,289 +0,0 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
export const $Observe = Symbol.for("Observe");
export const $claimNick = Symbol.for("claimNick");
export const $joinedUser = Symbol.for("joinedUser");
export const $nickConflict = Symbol.for("nickConflict");
export const $says = Symbol.for("says");
export const $user = Symbol.for("user");
export const __lit5 = true;
export type _embedded = _i_EntityRef.Cap;
export type UserId = number;
export type Join<_embedded = _i_EntityRef.Cap> = {"uid": UserId, "handle": _embedded};
export type Session<_embedded = _i_EntityRef.Cap> = (
{"_variant": "observeUsers", "observer": _embedded} |
{"_variant": "observeSpeech", "observer": _embedded} |
{"_variant": "NickClaim", "value": NickClaim<_embedded>} |
{"_variant": "Says", "value": Says}
);
export type NickClaim<_embedded = _i_EntityRef.Cap> = {"uid": UserId, "name": string, "k": _embedded};
export type NickClaimResponse = ({"_variant": "true"} | {"_variant": "NickConflict", "value": NickConflict});
export type UserInfo = {"uid": UserId, "name": string};
export type Says = {"who": UserId, "what": string};
export type NickConflict = null;
export function UserId(value: number): UserId {return value;}
export function Join<_embedded = _i_EntityRef.Cap>({uid, handle}: {uid: UserId, handle: _embedded}): Join<_embedded> {return {"uid": uid, "handle": handle};}
export namespace Session {
export function observeUsers<_embedded = _i_EntityRef.Cap>(observer: _embedded): Session<_embedded> {return {"_variant": "observeUsers", "observer": observer};};
export function observeSpeech<_embedded = _i_EntityRef.Cap>(observer: _embedded): Session<_embedded> {return {"_variant": "observeSpeech", "observer": observer};};
export function NickClaim<_embedded = _i_EntityRef.Cap>(value: NickClaim<_embedded>): Session<_embedded> {return {"_variant": "NickClaim", "value": value};};
export function Says<_embedded = _i_EntityRef.Cap>(value: Says): Session<_embedded> {return {"_variant": "Says", "value": value};};
}
export function NickClaim<_embedded = _i_EntityRef.Cap>({uid, name, k}: {uid: UserId, name: string, k: _embedded}): NickClaim<_embedded> {return {"uid": uid, "name": name, "k": k};}
export namespace NickClaimResponse {
export function $true(): NickClaimResponse {return {"_variant": "true"};};
export function NickConflict(value: NickConflict): NickClaimResponse {return {"_variant": "NickConflict", "value": value};};
}
export function UserInfo({uid, name}: {uid: UserId, name: string}): UserInfo {return {"uid": uid, "name": name};}
export function Says({who, what}: {who: UserId, what: string}): Says {return {"who": who, "what": what};}
export function NickConflict(): NickConflict {return null;}
export function asUserId<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): UserId {
let result = toUserId(v);
if (result === void 0) throw new TypeError(`Invalid UserId: ${_.stringify(v)}`);
return result;
}
export function toUserId<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | UserId {
let _tmp0: (number) | undefined;
let result: undefined | UserId;
_tmp0 = typeof v === 'number' ? v : void 0;
if (_tmp0 !== void 0) {result = _tmp0;};
return result;
}
export function fromUserId<_embedded = _i_EntityRef.Cap>(_v: UserId): _.Value<_embedded> {return _v;}
export function asJoin<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Join<_embedded> {
let result = toJoin(v);
if (result === void 0) throw new TypeError(`Invalid Join: ${_.stringify(v)}`);
return result;
}
export function toJoin<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Join<_embedded> {
let result: undefined | Join<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $joinedUser) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (_embedded) | undefined;
_tmp2 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {result = {"uid": _tmp1, "handle": _tmp2};};
};
};
};
return result;
}
export function fromJoin<_embedded = _i_EntityRef.Cap>(_v: Join<_embedded>): _.Value<_embedded> {
return _.Record($joinedUser, [fromUserId<_embedded>(_v["uid"]), _.embed(_v["handle"])]);
}
export function asSession<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Session<_embedded> {
let result = toSession(v);
if (result === void 0) throw new TypeError(`Invalid Session: ${_.stringify(v)}`);
return result;
}
export function toSession<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Session<_embedded> {
let result: undefined | Session<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $Observe) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (null) | undefined;
_tmp1 = _.is(v[0], $user) ? null : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (_embedded) | undefined;
_tmp2 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {result = {"_variant": "observeUsers", "observer": _tmp2};};
};
};
};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp3: (null) | undefined;
_tmp3 = _.is(v.label, $Observe) ? null : void 0;
if (_tmp3 !== void 0) {
let _tmp4: (null) | undefined;
_tmp4 = _.is(v[0], $says) ? null : void 0;
if (_tmp4 !== void 0) {
let _tmp5: (_embedded) | undefined;
_tmp5 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp5 !== void 0) {result = {"_variant": "observeSpeech", "observer": _tmp5};};
};
};
};
if (result === void 0) {
let _tmp6: (NickClaim<_embedded>) | undefined;
_tmp6 = toNickClaim(v);
if (_tmp6 !== void 0) {result = {"_variant": "NickClaim", "value": _tmp6};};
if (result === void 0) {
let _tmp7: (Says) | undefined;
_tmp7 = toSays(v);
if (_tmp7 !== void 0) {result = {"_variant": "Says", "value": _tmp7};};
};
};
};
return result;
}
export function fromSession<_embedded = _i_EntityRef.Cap>(_v: Session<_embedded>): _.Value<_embedded> {
switch (_v._variant) {
case "observeUsers": {return _.Record($Observe, [$user, _.embed(_v["observer"])]);};
case "observeSpeech": {return _.Record($Observe, [$says, _.embed(_v["observer"])]);};
case "NickClaim": {return fromNickClaim<_embedded>(_v.value);};
case "Says": {return fromSays<_embedded>(_v.value);};
};
}
export function asNickClaim<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): NickClaim<_embedded> {
let result = toNickClaim(v);
if (result === void 0) throw new TypeError(`Invalid NickClaim: ${_.stringify(v)}`);
return result;
}
export function toNickClaim<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | NickClaim<_embedded> {
let result: undefined | NickClaim<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $claimNick) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (string) | undefined;
_tmp2 = typeof v[1] === 'string' ? v[1] : void 0;
if (_tmp2 !== void 0) {
let _tmp3: (_embedded) | undefined;
_tmp3 = _.isEmbedded<_embedded>(v[2]) ? v[2].embeddedValue : void 0;
if (_tmp3 !== void 0) {result = {"uid": _tmp1, "name": _tmp2, "k": _tmp3};};
};
};
};
};
return result;
}
export function fromNickClaim<_embedded = _i_EntityRef.Cap>(_v: NickClaim<_embedded>): _.Value<_embedded> {
return _.Record($claimNick, [fromUserId<_embedded>(_v["uid"]), _v["name"], _.embed(_v["k"])]);
}
export function asNickClaimResponse<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): NickClaimResponse {
let result = toNickClaimResponse(v);
if (result === void 0) throw new TypeError(`Invalid NickClaimResponse: ${_.stringify(v)}`);
return result;
}
export function toNickClaimResponse<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | NickClaimResponse {
let _tmp0: (null) | undefined;
let result: undefined | NickClaimResponse;
_tmp0 = _.is(v, __lit5) ? null : void 0;
if (_tmp0 !== void 0) {result = {"_variant": "true"};};
if (result === void 0) {
let _tmp1: (NickConflict) | undefined;
_tmp1 = toNickConflict(v);
if (_tmp1 !== void 0) {result = {"_variant": "NickConflict", "value": _tmp1};};
};
return result;
}
export function fromNickClaimResponse<_embedded = _i_EntityRef.Cap>(_v: NickClaimResponse): _.Value<_embedded> {
switch (_v._variant) {
case "true": {return __lit5;};
case "NickConflict": {return fromNickConflict<_embedded>(_v.value);};
};
}
export function asUserInfo<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): UserInfo {
let result = toUserInfo(v);
if (result === void 0) throw new TypeError(`Invalid UserInfo: ${_.stringify(v)}`);
return result;
}
export function toUserInfo<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | UserInfo {
let result: undefined | UserInfo;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $user) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (string) | undefined;
_tmp2 = typeof v[1] === 'string' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"uid": _tmp1, "name": _tmp2};};
};
};
};
return result;
}
export function fromUserInfo<_embedded = _i_EntityRef.Cap>(_v: UserInfo): _.Value<_embedded> {return _.Record($user, [fromUserId<_embedded>(_v["uid"]), _v["name"]]);}
export function asSays<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Says {
let result = toSays(v);
if (result === void 0) throw new TypeError(`Invalid Says: ${_.stringify(v)}`);
return result;
}
export function toSays<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Says {
let result: undefined | Says;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $says) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (UserId) | undefined;
_tmp1 = toUserId(v[0]);
if (_tmp1 !== void 0) {
let _tmp2: (string) | undefined;
_tmp2 = typeof v[1] === 'string' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"who": _tmp1, "what": _tmp2};};
};
};
};
return result;
}
export function fromSays<_embedded = _i_EntityRef.Cap>(_v: Says): _.Value<_embedded> {return _.Record($says, [fromUserId<_embedded>(_v["who"]), _v["what"]]);}
export function asNickConflict<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): NickConflict {
let result = toNickConflict(v);
if (result === void 0) throw new TypeError(`Invalid NickConflict: ${_.stringify(v)}`);
return result;
}
export function toNickConflict<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | NickConflict {
let result: undefined | NickConflict;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $nickConflict) ? null : void 0;
if (_tmp0 !== void 0) {result = null;};
};
return result;
}
export function fromNickConflict<_embedded = _i_EntityRef.Cap>(_v: NickConflict): _.Value<_embedded> {return _.Record($nickConflict, []);}

View File

@ -1,245 +0,0 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
export const $complete = Symbol.for("complete");
export const $failed = Symbol.for("failed");
export const $ready = Symbol.for("ready");
export const $started = Symbol.for("started");
export const __lit0 = Symbol.for("require-service");
export const __lit1 = Symbol.for("run-service");
export const __lit2 = Symbol.for("service-state");
export const __lit3 = Symbol.for("service-object");
export const __lit8 = Symbol.for("depends-on");
export const __lit9 = Symbol.for("core-service");
export type _embedded = _i_EntityRef.Cap;
export type RequireService<_embedded = _i_EntityRef.Cap> = {"serviceName": _.Value<_embedded>};
export type RunService<_embedded = _i_EntityRef.Cap> = {"serviceName": _.Value<_embedded>};
export type ServiceState<_embedded = _i_EntityRef.Cap> = {"serviceName": _.Value<_embedded>, "state": State};
export type ServiceObject<_embedded = _i_EntityRef.Cap> = {"serviceName": _.Value<_embedded>, "object": _.Value<_embedded>};
export type State = (
{"_variant": "started"} |
{"_variant": "ready"} |
{"_variant": "failed"} |
{"_variant": "complete"}
);
export type ServiceDependency<_embedded = _i_EntityRef.Cap> = {"depender": _.Value<_embedded>, "dependee": ServiceState<_embedded>};
export type CoreService<_embedded = _i_EntityRef.Cap> = {"serviceName": _.Value<_embedded>};
export function RequireService<_embedded = _i_EntityRef.Cap>(serviceName: _.Value<_embedded>): RequireService<_embedded> {return {"serviceName": serviceName};}
export function RunService<_embedded = _i_EntityRef.Cap>(serviceName: _.Value<_embedded>): RunService<_embedded> {return {"serviceName": serviceName};}
export function ServiceState<_embedded = _i_EntityRef.Cap>({serviceName, state}: {serviceName: _.Value<_embedded>, state: State}): ServiceState<_embedded> {return {"serviceName": serviceName, "state": state};}
export function ServiceObject<_embedded = _i_EntityRef.Cap>(
{serviceName, object}: {serviceName: _.Value<_embedded>, object: _.Value<_embedded>}
): ServiceObject<_embedded> {return {"serviceName": serviceName, "object": object};}
export namespace State {
export function started(): State {return {"_variant": "started"};};
export function ready(): State {return {"_variant": "ready"};};
export function failed(): State {return {"_variant": "failed"};};
export function complete(): State {return {"_variant": "complete"};};
}
export function ServiceDependency<_embedded = _i_EntityRef.Cap>(
{depender, dependee}: {depender: _.Value<_embedded>, dependee: ServiceState<_embedded>}
): ServiceDependency<_embedded> {return {"depender": depender, "dependee": dependee};}
export function CoreService<_embedded = _i_EntityRef.Cap>(serviceName: _.Value<_embedded>): CoreService<_embedded> {return {"serviceName": serviceName};}
export function asRequireService<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): RequireService<_embedded> {
let result = toRequireService(v);
if (result === void 0) throw new TypeError(`Invalid RequireService: ${_.stringify(v)}`);
return result;
}
export function toRequireService<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | RequireService<_embedded> {
let result: undefined | RequireService<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit0) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {result = {"serviceName": _tmp1};};
};
};
return result;
}
export function fromRequireService<_embedded = _i_EntityRef.Cap>(_v: RequireService<_embedded>): _.Value<_embedded> {return _.Record(__lit0, [_v["serviceName"]]);}
export function asRunService<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): RunService<_embedded> {
let result = toRunService(v);
if (result === void 0) throw new TypeError(`Invalid RunService: ${_.stringify(v)}`);
return result;
}
export function toRunService<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | RunService<_embedded> {
let result: undefined | RunService<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit1) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {result = {"serviceName": _tmp1};};
};
};
return result;
}
export function fromRunService<_embedded = _i_EntityRef.Cap>(_v: RunService<_embedded>): _.Value<_embedded> {return _.Record(__lit1, [_v["serviceName"]]);}
export function asServiceState<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): ServiceState<_embedded> {
let result = toServiceState(v);
if (result === void 0) throw new TypeError(`Invalid ServiceState: ${_.stringify(v)}`);
return result;
}
export function toServiceState<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | ServiceState<_embedded> {
let result: undefined | ServiceState<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit2) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (State) | undefined;
_tmp2 = toState(v[1]);
if (_tmp2 !== void 0) {result = {"serviceName": _tmp1, "state": _tmp2};};
};
};
};
return result;
}
export function fromServiceState<_embedded = _i_EntityRef.Cap>(_v: ServiceState<_embedded>): _.Value<_embedded> {
return _.Record(__lit2, [_v["serviceName"], fromState<_embedded>(_v["state"])]);
}
export function asServiceObject<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): ServiceObject<_embedded> {
let result = toServiceObject(v);
if (result === void 0) throw new TypeError(`Invalid ServiceObject: ${_.stringify(v)}`);
return result;
}
export function toServiceObject<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | ServiceObject<_embedded> {
let result: undefined | ServiceObject<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit3) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (_.Value<_embedded>) | undefined;
_tmp2 = v[1];
if (_tmp2 !== void 0) {result = {"serviceName": _tmp1, "object": _tmp2};};
};
};
};
return result;
}
export function fromServiceObject<_embedded = _i_EntityRef.Cap>(_v: ServiceObject<_embedded>): _.Value<_embedded> {return _.Record(__lit3, [_v["serviceName"], _v["object"]]);}
export function asState<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): State {
let result = toState(v);
if (result === void 0) throw new TypeError(`Invalid State: ${_.stringify(v)}`);
return result;
}
export function toState<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | State {
let _tmp0: (null) | undefined;
let result: undefined | State;
_tmp0 = _.is(v, $started) ? null : void 0;
if (_tmp0 !== void 0) {result = {"_variant": "started"};};
if (result === void 0) {
let _tmp1: (null) | undefined;
_tmp1 = _.is(v, $ready) ? null : void 0;
if (_tmp1 !== void 0) {result = {"_variant": "ready"};};
if (result === void 0) {
let _tmp2: (null) | undefined;
_tmp2 = _.is(v, $failed) ? null : void 0;
if (_tmp2 !== void 0) {result = {"_variant": "failed"};};
if (result === void 0) {
let _tmp3: (null) | undefined;
_tmp3 = _.is(v, $complete) ? null : void 0;
if (_tmp3 !== void 0) {result = {"_variant": "complete"};};
};
};
};
return result;
}
export function fromState<_embedded = _i_EntityRef.Cap>(_v: State): _.Value<_embedded> {
switch (_v._variant) {
case "started": {return $started;};
case "ready": {return $ready;};
case "failed": {return $failed;};
case "complete": {return $complete;};
};
}
export function asServiceDependency<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): ServiceDependency<_embedded> {
let result = toServiceDependency(v);
if (result === void 0) throw new TypeError(`Invalid ServiceDependency: ${_.stringify(v)}`);
return result;
}
export function toServiceDependency<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | ServiceDependency<_embedded> {
let result: undefined | ServiceDependency<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit8) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (ServiceState<_embedded>) | undefined;
_tmp2 = toServiceState(v[1]);
if (_tmp2 !== void 0) {result = {"depender": _tmp1, "dependee": _tmp2};};
};
};
};
return result;
}
export function fromServiceDependency<_embedded = _i_EntityRef.Cap>(_v: ServiceDependency<_embedded>): _.Value<_embedded> {
return _.Record(__lit8, [_v["depender"], fromServiceState<_embedded>(_v["dependee"])]);
}
export function asCoreService<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): CoreService<_embedded> {
let result = toCoreService(v);
if (result === void 0) throw new TypeError(`Invalid CoreService: ${_.stringify(v)}`);
return result;
}
export function toCoreService<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | CoreService<_embedded> {
let result: undefined | CoreService<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit9) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {result = {"serviceName": _tmp1};};
};
};
return result;
}
export function fromCoreService<_embedded = _i_EntityRef.Cap>(_v: CoreService<_embedded>): _.Value<_embedded> {return _.Record(__lit9, [_v["serviceName"]]);}

View File

@ -1,10 +1,12 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
import * as _i_Actor from "../runtime/actor";
export const $Present = Symbol.for("Present");
export const $Says = Symbol.for("Says");
export type _embedded = _i_EntityRef.Cap;
export type _ptr = _i_Actor.Ref;
export type _val = _.Value<_ptr>;
export type Present = {"username": string};
@ -15,15 +17,15 @@ export function Present(username: string): Present {return {"username": username
export function Says({who, what}: {who: string, what: string}): Says {return {"who": who, "what": what};}
export function asPresent<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Present {
export function asPresent(v: _val): Present {
let result = toPresent(v);
if (result === void 0) throw new TypeError(`Invalid Present: ${_.stringify(v)}`);
return result;
}
export function toPresent<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Present {
export function toPresent(v: _val): undefined | Present {
let result: undefined | Present;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $Present) ? null : void 0;
if (_tmp0 !== void 0) {
@ -35,17 +37,17 @@ export function toPresent<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>):
return result;
}
export function fromPresent<_embedded = _i_EntityRef.Cap>(_v: Present): _.Value<_embedded> {return _.Record($Present, [_v["username"]]);}
export function fromPresent(_v: Present): _val {return _.Record($Present, [_v["username"]]);}
export function asSays<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Says {
export function asSays(v: _val): Says {
let result = toSays(v);
if (result === void 0) throw new TypeError(`Invalid Says: ${_.stringify(v)}`);
return result;
}
export function toSays<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Says {
export function toSays(v: _val): undefined | Says {
let result: undefined | Says;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $Says) ? null : void 0;
if (_tmp0 !== void 0) {
@ -61,5 +63,5 @@ export function toSays<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): und
return result;
}
export function fromSays<_embedded = _i_EntityRef.Cap>(_v: Says): _.Value<_embedded> {return _.Record($Says, [_v["who"], _v["what"]]);}
export function fromSays(_v: Says): _val {return _.Record($Says, [_v["who"], _v["what"]]);}

View File

@ -1,401 +0,0 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
export const $bytes = Symbol.for("bytes");
export const $credit = Symbol.for("credit");
export const $crlf = Symbol.for("crlf");
export const $data = Symbol.for("data");
export const $eof = Symbol.for("eof");
export const $error = Symbol.for("error");
export const $lf = Symbol.for("lf");
export const $object = Symbol.for("object");
export const $packet = Symbol.for("packet");
export const $sink = Symbol.for("sink");
export const $source = Symbol.for("source");
export const $unbounded = Symbol.for("unbounded");
export const __lit0 = Symbol.for("stream-connection");
export const __lit1 = Symbol.for("stream-listener-ready");
export const __lit2 = Symbol.for("stream-listener-error");
export type _embedded = _i_EntityRef.Cap;
export type StreamConnection<_embedded = _i_EntityRef.Cap> = {"source": _embedded, "sink": _embedded, "spec": _.Value<_embedded>};
export type StreamListenerReady<_embedded = _i_EntityRef.Cap> = {"spec": _.Value<_embedded>};
export type StreamListenerError<_embedded = _i_EntityRef.Cap> = {"spec": _.Value<_embedded>, "message": string};
export type StreamError = {"message": string};
export type Source<_embedded = _i_EntityRef.Cap> = (
{"_variant": "sink", "controller": _embedded} |
{"_variant": "StreamError", "value": StreamError} |
{"_variant": "credit", "amount": CreditAmount, "mode": Mode<_embedded>}
);
export type Sink<_embedded = _i_EntityRef.Cap> = (
{"_variant": "source", "controller": _embedded} |
{"_variant": "StreamError", "value": StreamError} |
{"_variant": "data", "payload": _.Value<_embedded>, "mode": Mode<_embedded>} |
{"_variant": "eof"}
);
export type CreditAmount = ({"_variant": "count", "value": number} | {"_variant": "unbounded"});
export type Mode<_embedded = _i_EntityRef.Cap> = (
{"_variant": "bytes"} |
{"_variant": "lines", "value": LineMode} |
{"_variant": "packet", "size": number} |
{"_variant": "object", "description": _.Value<_embedded>}
);
export type LineMode = ({"_variant": "lf"} | {"_variant": "crlf"});
export function StreamConnection<_embedded = _i_EntityRef.Cap>(
{source, sink, spec}: {source: _embedded, sink: _embedded, spec: _.Value<_embedded>}
): StreamConnection<_embedded> {return {"source": source, "sink": sink, "spec": spec};}
export function StreamListenerReady<_embedded = _i_EntityRef.Cap>(spec: _.Value<_embedded>): StreamListenerReady<_embedded> {return {"spec": spec};}
export function StreamListenerError<_embedded = _i_EntityRef.Cap>({spec, message}: {spec: _.Value<_embedded>, message: string}): StreamListenerError<_embedded> {return {"spec": spec, "message": message};}
export function StreamError(message: string): StreamError {return {"message": message};}
export namespace Source {
export function sink<_embedded = _i_EntityRef.Cap>(controller: _embedded): Source<_embedded> {return {"_variant": "sink", "controller": controller};};
export function StreamError<_embedded = _i_EntityRef.Cap>(value: StreamError): Source<_embedded> {return {"_variant": "StreamError", "value": value};};
export function credit<_embedded = _i_EntityRef.Cap>({amount, mode}: {amount: CreditAmount, mode: Mode<_embedded>}): Source<_embedded> {return {"_variant": "credit", "amount": amount, "mode": mode};};
}
export namespace Sink {
export function source<_embedded = _i_EntityRef.Cap>(controller: _embedded): Sink<_embedded> {return {"_variant": "source", "controller": controller};};
export function StreamError<_embedded = _i_EntityRef.Cap>(value: StreamError): Sink<_embedded> {return {"_variant": "StreamError", "value": value};};
export function data<_embedded = _i_EntityRef.Cap>({payload, mode}: {payload: _.Value<_embedded>, mode: Mode<_embedded>}): Sink<_embedded> {return {"_variant": "data", "payload": payload, "mode": mode};};
export function eof<_embedded = _i_EntityRef.Cap>(): Sink<_embedded> {return {"_variant": "eof"};};
}
export namespace CreditAmount {
export function count(value: number): CreditAmount {return {"_variant": "count", "value": value};};
export function unbounded(): CreditAmount {return {"_variant": "unbounded"};};
}
export namespace Mode {
export function bytes<_embedded = _i_EntityRef.Cap>(): Mode<_embedded> {return {"_variant": "bytes"};};
export function lines<_embedded = _i_EntityRef.Cap>(value: LineMode): Mode<_embedded> {return {"_variant": "lines", "value": value};};
export function packet<_embedded = _i_EntityRef.Cap>(size: number): Mode<_embedded> {return {"_variant": "packet", "size": size};};
export function object<_embedded = _i_EntityRef.Cap>(description: _.Value<_embedded>): Mode<_embedded> {return {"_variant": "object", "description": description};};
}
export namespace LineMode {
export function lf(): LineMode {return {"_variant": "lf"};};
export function crlf(): LineMode {return {"_variant": "crlf"};};
}
export function asStreamConnection<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): StreamConnection<_embedded> {
let result = toStreamConnection(v);
if (result === void 0) throw new TypeError(`Invalid StreamConnection: ${_.stringify(v)}`);
return result;
}
export function toStreamConnection<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | StreamConnection<_embedded> {
let result: undefined | StreamConnection<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit0) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_embedded) | undefined;
_tmp1 = _.isEmbedded<_embedded>(v[0]) ? v[0].embeddedValue : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (_embedded) | undefined;
_tmp2 = _.isEmbedded<_embedded>(v[1]) ? v[1].embeddedValue : void 0;
if (_tmp2 !== void 0) {
let _tmp3: (_.Value<_embedded>) | undefined;
_tmp3 = v[2];
if (_tmp3 !== void 0) {result = {"source": _tmp1, "sink": _tmp2, "spec": _tmp3};};
};
};
};
};
return result;
}
export function fromStreamConnection<_embedded = _i_EntityRef.Cap>(_v: StreamConnection<_embedded>): _.Value<_embedded> {
return _.Record(__lit0, [_.embed(_v["source"]), _.embed(_v["sink"]), _v["spec"]]);
}
export function asStreamListenerReady<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): StreamListenerReady<_embedded> {
let result = toStreamListenerReady(v);
if (result === void 0) throw new TypeError(`Invalid StreamListenerReady: ${_.stringify(v)}`);
return result;
}
export function toStreamListenerReady<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | StreamListenerReady<_embedded> {
let result: undefined | StreamListenerReady<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit1) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {result = {"spec": _tmp1};};
};
};
return result;
}
export function fromStreamListenerReady<_embedded = _i_EntityRef.Cap>(_v: StreamListenerReady<_embedded>): _.Value<_embedded> {return _.Record(__lit1, [_v["spec"]]);}
export function asStreamListenerError<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): StreamListenerError<_embedded> {
let result = toStreamListenerError(v);
if (result === void 0) throw new TypeError(`Invalid StreamListenerError: ${_.stringify(v)}`);
return result;
}
export function toStreamListenerError<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | StreamListenerError<_embedded> {
let result: undefined | StreamListenerError<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit2) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (string) | undefined;
_tmp2 = typeof v[1] === 'string' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"spec": _tmp1, "message": _tmp2};};
};
};
};
return result;
}
export function fromStreamListenerError<_embedded = _i_EntityRef.Cap>(_v: StreamListenerError<_embedded>): _.Value<_embedded> {return _.Record(__lit2, [_v["spec"], _v["message"]]);}
export function asStreamError<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): StreamError {
let result = toStreamError(v);
if (result === void 0) throw new TypeError(`Invalid StreamError: ${_.stringify(v)}`);
return result;
}
export function toStreamError<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | StreamError {
let result: undefined | StreamError;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $error) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {result = {"message": _tmp1};};
};
};
return result;
}
export function fromStreamError<_embedded = _i_EntityRef.Cap>(_v: StreamError): _.Value<_embedded> {return _.Record($error, [_v["message"]]);}
export function asSource<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Source<_embedded> {
let result = toSource(v);
if (result === void 0) throw new TypeError(`Invalid Source: ${_.stringify(v)}`);
return result;
}
export function toSource<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Source<_embedded> {
let result: undefined | Source<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $sink) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_embedded) | undefined;
_tmp1 = _.isEmbedded<_embedded>(v[0]) ? v[0].embeddedValue : void 0;
if (_tmp1 !== void 0) {result = {"_variant": "sink", "controller": _tmp1};};
};
};
if (result === void 0) {
let _tmp2: (StreamError) | undefined;
_tmp2 = toStreamError(v);
if (_tmp2 !== void 0) {result = {"_variant": "StreamError", "value": _tmp2};};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp3: (null) | undefined;
_tmp3 = _.is(v.label, $credit) ? null : void 0;
if (_tmp3 !== void 0) {
let _tmp4: (CreditAmount) | undefined;
_tmp4 = toCreditAmount(v[0]);
if (_tmp4 !== void 0) {
let _tmp5: (Mode<_embedded>) | undefined;
_tmp5 = toMode(v[1]);
if (_tmp5 !== void 0) {result = {"_variant": "credit", "amount": _tmp4, "mode": _tmp5};};
};
};
};
};
};
return result;
}
export function fromSource<_embedded = _i_EntityRef.Cap>(_v: Source<_embedded>): _.Value<_embedded> {
switch (_v._variant) {
case "sink": {return _.Record($sink, [_.embed(_v["controller"])]);};
case "StreamError": {return fromStreamError<_embedded>(_v.value);};
case "credit": {
return _.Record(
$credit,
[fromCreditAmount<_embedded>(_v["amount"]), fromMode<_embedded>(_v["mode"])]
);
};
};
}
export function asSink<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Sink<_embedded> {
let result = toSink(v);
if (result === void 0) throw new TypeError(`Invalid Sink: ${_.stringify(v)}`);
return result;
}
export function toSink<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Sink<_embedded> {
let result: undefined | Sink<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $source) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_embedded) | undefined;
_tmp1 = _.isEmbedded<_embedded>(v[0]) ? v[0].embeddedValue : void 0;
if (_tmp1 !== void 0) {result = {"_variant": "source", "controller": _tmp1};};
};
};
if (result === void 0) {
let _tmp2: (StreamError) | undefined;
_tmp2 = toStreamError(v);
if (_tmp2 !== void 0) {result = {"_variant": "StreamError", "value": _tmp2};};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp3: (null) | undefined;
_tmp3 = _.is(v.label, $data) ? null : void 0;
if (_tmp3 !== void 0) {
let _tmp4: (_.Value<_embedded>) | undefined;
_tmp4 = v[0];
if (_tmp4 !== void 0) {
let _tmp5: (Mode<_embedded>) | undefined;
_tmp5 = toMode(v[1]);
if (_tmp5 !== void 0) {result = {"_variant": "data", "payload": _tmp4, "mode": _tmp5};};
};
};
};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp6: (null) | undefined;
_tmp6 = _.is(v.label, $eof) ? null : void 0;
if (_tmp6 !== void 0) {result = {"_variant": "eof"};};
};
};
};
};
return result;
}
export function fromSink<_embedded = _i_EntityRef.Cap>(_v: Sink<_embedded>): _.Value<_embedded> {
switch (_v._variant) {
case "source": {return _.Record($source, [_.embed(_v["controller"])]);};
case "StreamError": {return fromStreamError<_embedded>(_v.value);};
case "data": {return _.Record($data, [_v["payload"], fromMode<_embedded>(_v["mode"])]);};
case "eof": {return _.Record($eof, []);};
};
}
export function asCreditAmount<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): CreditAmount {
let result = toCreditAmount(v);
if (result === void 0) throw new TypeError(`Invalid CreditAmount: ${_.stringify(v)}`);
return result;
}
export function toCreditAmount<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | CreditAmount {
let _tmp0: (number) | undefined;
let result: undefined | CreditAmount;
_tmp0 = typeof v === 'number' ? v : void 0;
if (_tmp0 !== void 0) {result = {"_variant": "count", "value": _tmp0};};
if (result === void 0) {
let _tmp1: (null) | undefined;
_tmp1 = _.is(v, $unbounded) ? null : void 0;
if (_tmp1 !== void 0) {result = {"_variant": "unbounded"};};
};
return result;
}
export function fromCreditAmount<_embedded = _i_EntityRef.Cap>(_v: CreditAmount): _.Value<_embedded> {
switch (_v._variant) {case "count": {return _v.value;}; case "unbounded": {return $unbounded;};};
}
export function asMode<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Mode<_embedded> {
let result = toMode(v);
if (result === void 0) throw new TypeError(`Invalid Mode: ${_.stringify(v)}`);
return result;
}
export function toMode<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Mode<_embedded> {
let _tmp0: (null) | undefined;
let result: undefined | Mode<_embedded>;
_tmp0 = _.is(v, $bytes) ? null : void 0;
if (_tmp0 !== void 0) {result = {"_variant": "bytes"};};
if (result === void 0) {
let _tmp1: (LineMode) | undefined;
_tmp1 = toLineMode(v);
if (_tmp1 !== void 0) {result = {"_variant": "lines", "value": _tmp1};};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp2: (null) | undefined;
_tmp2 = _.is(v.label, $packet) ? null : void 0;
if (_tmp2 !== void 0) {
let _tmp3: (number) | undefined;
_tmp3 = typeof v[0] === 'number' ? v[0] : void 0;
if (_tmp3 !== void 0) {result = {"_variant": "packet", "size": _tmp3};};
};
};
if (result === void 0) {
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp4: (null) | undefined;
_tmp4 = _.is(v.label, $object) ? null : void 0;
if (_tmp4 !== void 0) {
let _tmp5: (_.Value<_embedded>) | undefined;
_tmp5 = v[0];
if (_tmp5 !== void 0) {result = {"_variant": "object", "description": _tmp5};};
};
};
};
};
};
return result;
}
export function fromMode<_embedded = _i_EntityRef.Cap>(_v: Mode<_embedded>): _.Value<_embedded> {
switch (_v._variant) {
case "bytes": {return $bytes;};
case "lines": {return fromLineMode<_embedded>(_v.value);};
case "packet": {return _.Record($packet, [_v["size"]]);};
case "object": {return _.Record($object, [_v["description"]]);};
};
}
export function asLineMode<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): LineMode {
let result = toLineMode(v);
if (result === void 0) throw new TypeError(`Invalid LineMode: ${_.stringify(v)}`);
return result;
}
export function toLineMode<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | LineMode {
let _tmp0: (null) | undefined;
let result: undefined | LineMode;
_tmp0 = _.is(v, $lf) ? null : void 0;
if (_tmp0 !== void 0) {result = {"_variant": "lf"};};
if (result === void 0) {
let _tmp1: (null) | undefined;
_tmp1 = _.is(v, $crlf) ? null : void 0;
if (_tmp1 !== void 0) {result = {"_variant": "crlf"};};
};
return result;
}
export function fromLineMode<_embedded = _i_EntityRef.Cap>(_v: LineMode): _.Value<_embedded> {
switch (_v._variant) {case "lf": {return $lf;}; case "crlf": {return $crlf;};};
}

File diff suppressed because it is too large Load Diff

View File

@ -1,115 +0,0 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
export const __lit0 = Symbol.for("tcp-remote");
export const __lit1 = Symbol.for("tcp-local");
export const __lit2 = Symbol.for("tcp-peer");
export type _embedded = _i_EntityRef.Cap;
export type TcpRemote = {"host": string, "port": number};
export type TcpLocal = {"host": string, "port": number};
export type TcpPeerInfo<_embedded = _i_EntityRef.Cap> = {"handle": _embedded, "local": TcpLocal, "remote": TcpRemote};
export function TcpRemote({host, port}: {host: string, port: number}): TcpRemote {return {"host": host, "port": port};}
export function TcpLocal({host, port}: {host: string, port: number}): TcpLocal {return {"host": host, "port": port};}
export function TcpPeerInfo<_embedded = _i_EntityRef.Cap>(
{handle, local, remote}: {handle: _embedded, local: TcpLocal, remote: TcpRemote}
): TcpPeerInfo<_embedded> {return {"handle": handle, "local": local, "remote": remote};}
export function asTcpRemote<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): TcpRemote {
let result = toTcpRemote(v);
if (result === void 0) throw new TypeError(`Invalid TcpRemote: ${_.stringify(v)}`);
return result;
}
export function toTcpRemote<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | TcpRemote {
let result: undefined | TcpRemote;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit0) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (number) | undefined;
_tmp2 = typeof v[1] === 'number' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"host": _tmp1, "port": _tmp2};};
};
};
};
return result;
}
export function fromTcpRemote<_embedded = _i_EntityRef.Cap>(_v: TcpRemote): _.Value<_embedded> {return _.Record(__lit0, [_v["host"], _v["port"]]);}
export function asTcpLocal<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): TcpLocal {
let result = toTcpLocal(v);
if (result === void 0) throw new TypeError(`Invalid TcpLocal: ${_.stringify(v)}`);
return result;
}
export function toTcpLocal<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | TcpLocal {
let result: undefined | TcpLocal;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit1) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (number) | undefined;
_tmp2 = typeof v[1] === 'number' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"host": _tmp1, "port": _tmp2};};
};
};
};
return result;
}
export function fromTcpLocal<_embedded = _i_EntityRef.Cap>(_v: TcpLocal): _.Value<_embedded> {return _.Record(__lit1, [_v["host"], _v["port"]]);}
export function asTcpPeerInfo<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): TcpPeerInfo<_embedded> {
let result = toTcpPeerInfo(v);
if (result === void 0) throw new TypeError(`Invalid TcpPeerInfo: ${_.stringify(v)}`);
return result;
}
export function toTcpPeerInfo<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | TcpPeerInfo<_embedded> {
let result: undefined | TcpPeerInfo<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit2) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_embedded) | undefined;
_tmp1 = _.isEmbedded<_embedded>(v[0]) ? v[0].embeddedValue : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (TcpLocal) | undefined;
_tmp2 = toTcpLocal(v[1]);
if (_tmp2 !== void 0) {
let _tmp3: (TcpRemote) | undefined;
_tmp3 = toTcpRemote(v[2]);
if (_tmp3 !== void 0) {result = {"handle": _tmp1, "local": _tmp2, "remote": _tmp3};};
};
};
};
};
return result;
}
export function fromTcpPeerInfo<_embedded = _i_EntityRef.Cap>(_v: TcpPeerInfo<_embedded>): _.Value<_embedded> {
return _.Record(
__lit2,
[
_.embed(_v["handle"]),
fromTcpLocal<_embedded>(_v["local"]),
fromTcpRemote<_embedded>(_v["remote"])
]
);
}

View File

@ -1,147 +0,0 @@
import * as _ from "@preserves/core";
export const $absolute = Symbol.for("absolute");
export const $clear = Symbol.for("clear");
export const $relative = Symbol.for("relative");
export const __lit0 = Symbol.for("set-timer");
export const __lit1 = Symbol.for("timer-expired");
export const __lit5 = Symbol.for("later-than");
export type SetTimer<_embedded = _.GenericEmbedded> = {"label": _.Value<_embedded>, "msecs": number, "kind": TimerKind};
export type TimerExpired<_embedded = _.GenericEmbedded> = {"label": _.Value<_embedded>, "msecs": number};
export type TimerKind = ({"_variant": "relative"} | {"_variant": "absolute"} | {"_variant": "clear"});
export type LaterThan = {"msecs": number};
export function SetTimer<_embedded = _.GenericEmbedded>(
{label, msecs, kind}: {label: _.Value<_embedded>, msecs: number, kind: TimerKind}
): SetTimer<_embedded> {return {"label": label, "msecs": msecs, "kind": kind};}
export function TimerExpired<_embedded = _.GenericEmbedded>({label, msecs}: {label: _.Value<_embedded>, msecs: number}): TimerExpired<_embedded> {return {"label": label, "msecs": msecs};}
export namespace TimerKind {
export function relative(): TimerKind {return {"_variant": "relative"};};
export function absolute(): TimerKind {return {"_variant": "absolute"};};
export function clear(): TimerKind {return {"_variant": "clear"};};
}
export function LaterThan(msecs: number): LaterThan {return {"msecs": msecs};}
export function asSetTimer<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): SetTimer<_embedded> {
let result = toSetTimer(v);
if (result === void 0) throw new TypeError(`Invalid SetTimer: ${_.stringify(v)}`);
return result;
}
export function toSetTimer<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | SetTimer<_embedded> {
let result: undefined | SetTimer<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit0) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (number) | undefined;
_tmp2 = _.Float.isDouble(v[1]) ? v[1].value : void 0;
if (_tmp2 !== void 0) {
let _tmp3: (TimerKind) | undefined;
_tmp3 = toTimerKind(v[2]);
if (_tmp3 !== void 0) {result = {"label": _tmp1, "msecs": _tmp2, "kind": _tmp3};};
};
};
};
};
return result;
}
export function fromSetTimer<_embedded = _.GenericEmbedded>(_v: SetTimer<_embedded>): _.Value<_embedded> {
return _.Record(
__lit0,
[_v["label"], _.Double(_v["msecs"]), fromTimerKind<_embedded>(_v["kind"])]
);
}
export function asTimerExpired<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): TimerExpired<_embedded> {
let result = toTimerExpired(v);
if (result === void 0) throw new TypeError(`Invalid TimerExpired: ${_.stringify(v)}`);
return result;
}
export function toTimerExpired<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | TimerExpired<_embedded> {
let result: undefined | TimerExpired<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit1) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (_.Value<_embedded>) | undefined;
_tmp1 = v[0];
if (_tmp1 !== void 0) {
let _tmp2: (number) | undefined;
_tmp2 = _.Float.isDouble(v[1]) ? v[1].value : void 0;
if (_tmp2 !== void 0) {result = {"label": _tmp1, "msecs": _tmp2};};
};
};
};
return result;
}
export function fromTimerExpired<_embedded = _.GenericEmbedded>(_v: TimerExpired<_embedded>): _.Value<_embedded> {return _.Record(__lit1, [_v["label"], _.Double(_v["msecs"])]);}
export function asTimerKind<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): TimerKind {
let result = toTimerKind(v);
if (result === void 0) throw new TypeError(`Invalid TimerKind: ${_.stringify(v)}`);
return result;
}
export function toTimerKind<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | TimerKind {
let _tmp0: (null) | undefined;
let result: undefined | TimerKind;
_tmp0 = _.is(v, $relative) ? null : void 0;
if (_tmp0 !== void 0) {result = {"_variant": "relative"};};
if (result === void 0) {
let _tmp1: (null) | undefined;
_tmp1 = _.is(v, $absolute) ? null : void 0;
if (_tmp1 !== void 0) {result = {"_variant": "absolute"};};
if (result === void 0) {
let _tmp2: (null) | undefined;
_tmp2 = _.is(v, $clear) ? null : void 0;
if (_tmp2 !== void 0) {result = {"_variant": "clear"};};
};
};
return result;
}
export function fromTimerKind<_embedded = _.GenericEmbedded>(_v: TimerKind): _.Value<_embedded> {
switch (_v._variant) {
case "relative": {return $relative;};
case "absolute": {return $absolute;};
case "clear": {return $clear;};
};
}
export function asLaterThan<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): LaterThan {
let result = toLaterThan(v);
if (result === void 0) throw new TypeError(`Invalid LaterThan: ${_.stringify(v)}`);
return result;
}
export function toLaterThan<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | LaterThan {
let result: undefined | LaterThan;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, __lit5) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (number) | undefined;
_tmp1 = _.Float.isDouble(v[0]) ? v[0].value : void 0;
if (_tmp1 !== void 0) {result = {"msecs": _tmp1};};
};
};
return result;
}
export function fromLaterThan<_embedded = _.GenericEmbedded>(_v: LaterThan): _.Value<_embedded> {return _.Record(__lit5, [_.Double(_v["msecs"])]);}

View File

@ -1,112 +0,0 @@
import * as _ from "@preserves/core";
export const $stdio = Symbol.for("stdio");
export const $tcp = Symbol.for("tcp");
export const $unix = Symbol.for("unix");
export const $ws = Symbol.for("ws");
export type Tcp = {"host": string, "port": number};
export type Unix = {"path": string};
export type WebSocket = {"url": string};
export type Stdio = null;
export function Tcp({host, port}: {host: string, port: number}): Tcp {return {"host": host, "port": port};}
export function Unix(path: string): Unix {return {"path": path};}
export function WebSocket(url: string): WebSocket {return {"url": url};}
export function Stdio(): Stdio {return null;}
export function asTcp<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Tcp {
let result = toTcp(v);
if (result === void 0) throw new TypeError(`Invalid Tcp: ${_.stringify(v)}`);
return result;
}
export function toTcp<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Tcp {
let result: undefined | Tcp;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $tcp) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (number) | undefined;
_tmp2 = typeof v[1] === 'number' ? v[1] : void 0;
if (_tmp2 !== void 0) {result = {"host": _tmp1, "port": _tmp2};};
};
};
};
return result;
}
export function fromTcp<_embedded = _.GenericEmbedded>(_v: Tcp): _.Value<_embedded> {return _.Record($tcp, [_v["host"], _v["port"]]);}
export function asUnix<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Unix {
let result = toUnix(v);
if (result === void 0) throw new TypeError(`Invalid Unix: ${_.stringify(v)}`);
return result;
}
export function toUnix<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Unix {
let result: undefined | Unix;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $unix) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {result = {"path": _tmp1};};
};
};
return result;
}
export function fromUnix<_embedded = _.GenericEmbedded>(_v: Unix): _.Value<_embedded> {return _.Record($unix, [_v["path"]]);}
export function asWebSocket<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): WebSocket {
let result = toWebSocket(v);
if (result === void 0) throw new TypeError(`Invalid WebSocket: ${_.stringify(v)}`);
return result;
}
export function toWebSocket<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | WebSocket {
let result: undefined | WebSocket;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $ws) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {result = {"url": _tmp1};};
};
};
return result;
}
export function fromWebSocket<_embedded = _.GenericEmbedded>(_v: WebSocket): _.Value<_embedded> {return _.Record($ws, [_v["url"]]);}
export function asStdio<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): Stdio {
let result = toStdio(v);
if (result === void 0) throw new TypeError(`Invalid Stdio: ${_.stringify(v)}`);
return result;
}
export function toStdio<_embedded = _.GenericEmbedded>(v: _.Value<_embedded>): undefined | Stdio {
let result: undefined | Stdio;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $stdio) ? null : void 0;
if (_tmp0 !== void 0) {result = null;};
};
return result;
}
export function fromStdio<_embedded = _.GenericEmbedded>(_v: Stdio): _.Value<_embedded> {return _.Record($stdio, []);}

View File

@ -1,31 +1,33 @@
import * as _ from "@preserves/core";
import * as _i_EntityRef from "../runtime/actor";
import * as _i_Actor from "../runtime/actor";
export const $Instance = Symbol.for("Instance");
export type _embedded = _i_EntityRef.Cap;
export type _ptr = _i_Actor.Ref;
export type Instance<_embedded = _i_EntityRef.Cap> = {"name": string, "argument": _.Value<_embedded>};
export type _val = _.Value<_ptr>;
export type Instance = {"name": string, "argument": _val};
export function Instance<_embedded = _i_EntityRef.Cap>({name, argument}: {name: string, argument: _.Value<_embedded>}): Instance<_embedded> {return {"name": name, "argument": argument};}
export function Instance({name, argument}: {name: string, argument: _val}): Instance {return {"name": name, "argument": argument};}
export function asInstance<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): Instance<_embedded> {
export function asInstance(v: _val): Instance {
let result = toInstance(v);
if (result === void 0) throw new TypeError(`Invalid Instance: ${_.stringify(v)}`);
return result;
}
export function toInstance<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>): undefined | Instance<_embedded> {
let result: undefined | Instance<_embedded>;
if (_.Record.isRecord<_.Value<_embedded>, _.Tuple<_.Value<_embedded>>, _embedded>(v)) {
export function toInstance(v: _val): undefined | Instance {
let result: undefined | Instance;
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
let _tmp0: (null) | undefined;
_tmp0 = _.is(v.label, $Instance) ? null : void 0;
if (_tmp0 !== void 0) {
let _tmp1: (string) | undefined;
_tmp1 = typeof v[0] === 'string' ? v[0] : void 0;
if (_tmp1 !== void 0) {
let _tmp2: (_.Value<_embedded>) | undefined;
let _tmp2: (_val) | undefined;
_tmp2 = v[1];
if (_tmp2 !== void 0) {result = {"name": _tmp1, "argument": _tmp2};};
};
@ -34,5 +36,5 @@ export function toInstance<_embedded = _i_EntityRef.Cap>(v: _.Value<_embedded>):
return result;
}
export function fromInstance<_embedded = _i_EntityRef.Cap>(_v: Instance<_embedded>): _.Value<_embedded> {return _.Record($Instance, [_v["name"], _v["argument"]]);}
export function fromInstance(_v: Instance): _val {return _.Record($Instance, [_v["name"], _v["argument"]]);}

View File

@ -2,8 +2,6 @@ import { IdentitySet, Value } from '@preserves/core';
import { Attenuation, runRewrites } from './rewrite.js';
import { queueTask } from './task.js';
export type AnyValue = Value<Ref>;
//---------------------------------------------------------------------------
if ('stackTraceLimit' in Error) {
@ -22,8 +20,6 @@ export interface Entity {
sync(turn: Turn, peer: Ref): void;
}
export type Cap = Ref;
export interface Ref {
readonly relay: Facet;
readonly target: Partial<Entity>;
@ -64,11 +60,11 @@ export class Actor {
terminateWith(t: Turn, reason: Exclude<ExitReason, null>) {
if (this.exitReason !== null) return;
this.exitReason = reason;
if (!reason.ok) {
console.error(`Actor ${this.id} crashed:`, reason.err);
if (!this.exitReason.ok) {
console.error(`Actor ${this.id} crashed:`, this.exitReason.err);
}
this.exitHooks.forEach(hook => hook(t));
queueTask(() => Turn.for(this.root, t => this.root._terminate(t, reason.ok), true));
queueTask(() => Turn.for(this.root, t => this.root._terminate(t, false), true));
}
}
@ -155,7 +151,7 @@ export class Turn {
const t = new Turn(facet);
try {
f(t);
t.queues!.forEach((q, facet) => queueTask(() => Turn.for(facet, t=> q.forEach(f => f(t)))));
t.queues!.forEach((q, facet) => queueTask(() => q.forEach(f => Turn.for(facet, f))));
t.queues = null;
} catch (err) {
Turn.for(facet.actor.root, t => facet.actor.terminateWith(t, { ok: false, err }));

View File

@ -1,6 +1,6 @@
// Bags and Deltas (which are Bags where item-counts can be negative).
import { Value, Set, Dictionary, GenericEmbedded } from '@preserves/core';
import { Value, Set, Dictionary, GenericPointer } from '@preserves/core';
export enum ChangeDescription {
PRESENT_TO_ABSENT = -1,
@ -9,7 +9,7 @@ export enum ChangeDescription {
PRESENT_TO_PRESENT = 2,
}
export class Bag<T extends object = GenericEmbedded> {
export class Bag<T extends object = GenericPointer> {
_items: Dictionary<T, number>;
constructor(s?: Set<T>) {

View File

@ -1,11 +1,9 @@
import { KeyedDictionary, preserves } from '@preserves/core';
import { AnyValue, Assertion, Entity, Handle, LocalAction, Ref, Turn } from 'runtime/actor';
import { Assertion, Entity, Handle, LocalAction, Ref, Turn } from 'runtime/actor';
import { Dictionary, IdentityMap, is, Record, Tuple } from '@preserves/core';
import { Bag, ChangeDescription } from './bag';
import { fromObserve, Observe } from '../gen/dataspace';
import { DBind, DDiscard, DLit, Pattern, DCompound, CArr, CDict, CRec } from '../gen/dataspacePatterns';
export { asObserve, fromObserve, toObserve, Observe, $Observe } from '../gen/dataspace';
export * from '../gen/dataspacePatterns';
import { fromObserve, toObserve, Observe } from '../gen/dataspace';
export * from '../gen/dataspace';
// Q. Why keep "Observe"? Why not do the clever trick of asserting the
// observer, and having the dataspace read the implicit pattern it's
@ -38,19 +36,54 @@ export * from '../gen/dataspacePatterns';
// spurious variation.
export class Dataspace implements Partial<Entity> {
readonly handleMap: IdentityMap<Handle, Record<Assertion, any, Ref>> = new IdentityMap();
readonly assertions = new Bag<Ref>();
readonly subscriptions = new Dictionary<Ref, Map<Ref, Dictionary<Ref, Handle>>>();
assert(turn: Turn, rec: Assertion, handle: Handle): void {
console.log(preserves`ds ${turn.activeFacet.id} assert ${rec} ${handle}`);
throw new Error("Full dataspaces not implemented");
// console.log(preserves`ds ${turn.activeFacet.id} assert ${rec} ${handle}`);
if (!Record.isRecord<Assertion, Tuple<Assertion>, Ref>(rec)) return;
this.handleMap.set(handle, rec);
if (this.assertions.change(rec, +1) !== ChangeDescription.ABSENT_TO_PRESENT) return;
{
const o = toObserve(rec);
if (o !== void 0) {
const seen = new Dictionary<Ref, Handle>();
if (!this.subscriptions.has(o.label)) this.subscriptions.set(o.label, new Map());
this.subscriptions.get(o.label)!.set(o.observer, seen);
this.assertions.forEach((_count, prev) =>
is((prev as Record<Assertion, any, Ref>).label, o.label)
&& seen.set(prev, turn.assert(o.observer, prev)));
}
}
this.subscriptions.get(rec.label)?.forEach((seen, peer) =>
seen.has(rec) || seen.set(rec, turn.assert(peer, rec)));
}
retract(turn: Turn, upstreamHandle: Handle): void {
console.log(preserves`ds ${turn.activeFacet.id} retract ${upstreamHandle}`);
throw new Error("Full dataspaces not implemented");
const rec = this.handleMap.get(upstreamHandle);
// console.log(preserves`ds ${turn.activeFacet.id} retract ${rec} ${upstreamHandle}`);
if (rec === void 0) return;
this.handleMap.delete(upstreamHandle);
if (this.assertions.change(rec, -1) !== ChangeDescription.PRESENT_TO_ABSENT) return;
this.subscriptions.get(rec.label)?.forEach((seen, _peer) => {
turn.retract(seen.get(rec));
seen.delete(rec);
});
{
const o = toObserve(rec);
if (o !== void 0) {
let peerMap = this.subscriptions.get(o.label)!;
peerMap.delete(o.observer);
if (peerMap.size === 0) this.subscriptions.delete(o.label);
}
}
}
message(turn: Turn, rec: Assertion): void {
console.log(preserves`ds ${turn.activeFacet.id} message ${rec}`);
throw new Error("Full dataspaces not implemented");
// console.log(preserves`ds ${turn.activeFacet.id} message ${rec}`);
if (!Record.isRecord<Assertion, Tuple<Assertion>, Ref>(rec)) return;
this.subscriptions.get(rec.label)?.forEach((_seen, peer) => turn.message(peer, rec));
}
}
@ -91,46 +124,6 @@ export function during(f: (t: Turn, a: Assertion) => Promise<LocalAction | null>
};
}
export function observe(t: Turn, ds: Ref, pattern: Pattern, e: Partial<Entity>): Handle {
return t.assert(ds, fromObserve(Observe({ pattern, observer: t.ref(e) })));
}
export namespace P {
export function discard(): Pattern {
return Pattern.DDiscard(DDiscard());
}
export function bind(pattern: Pattern = discard()): Pattern {
return Pattern.DBind(DBind(pattern));
}
export function lit(value: AnyValue): Pattern {
return Pattern.DLit(DLit(value));
}
export function rec(label: AnyValue, ...fields: Pattern[]): Pattern {
const members = new KeyedDictionary<number, Pattern, Ref>();
fields.forEach((f, i) => {
if (f._variant !== 'DDiscard') members.set(i, f);
});
return Pattern.DCompound(DCompound.rec({
ctor: CRec({ label, arity: fields.length }),
members,
}));
}
export function arr(...entries: Pattern[]): Pattern {
const members = new KeyedDictionary<number, Pattern, Ref>();
entries.forEach((f, i) => {
if (f._variant !== 'DDiscard') members.set(i, f);
});
return Pattern.DCompound(DCompound.arr({
ctor: CArr(entries.length),
members,
}));
}
export function dict(...entries: [AnyValue, Pattern][]): Pattern {
const members = new KeyedDictionary<AnyValue, Pattern, Ref>();
entries.forEach(([k, p]) => members.set(k, p));
return Pattern.DCompound(DCompound.dict({
ctor: CDict(),
members,
}));
}
export function observe(t: Turn, ds: Ref, label: symbol, e: Partial<Entity>): Handle {
return t.assert(ds, fromObserve(Observe({ label, observer: t.ref(e) })));
}

View File

@ -1,6 +1,5 @@
import type { Assertion, Handle, Ref, Turn } from "./actor.js";
import { Bytes, Dictionary, DoubleFloat, embed, IdentityMap, is, isEmbedded, Record, SingleFloat, Tuple } from "@preserves/core";
import { SturdyValue } from "../transport/sturdy.js";
import { Bytes, Dictionary, DoubleFloat, IdentityMap, is, isPointer, Record, SingleFloat, Tuple } from "@preserves/core";
import {
Alts,
@ -18,19 +17,20 @@ import {
PCompoundMembers,
PDiscard,
PNot,
PEmbedded,
PPointer,
Pattern,
Rewrite,
TRef,
Template,
_embedded,
_val,
_ptr,
} from '../gen/sturdy.js';
export * from '../gen/sturdy.js';
export type Bindings = Array<Assertion>;
export type Bindings = { [name: string]: Assertion };
export function match(p: Pattern, v: Assertion): Bindings | null {
let bindings: Bindings = [];
let bindings: Bindings = {};
function walk(p: Pattern, v: Assertion): boolean {
switch (p._variant) {
@ -46,11 +46,11 @@ export function match(p: Pattern, v: Assertion): Bindings | null {
case 'String': return typeof v === 'string';
case 'Symbol': return typeof v === 'symbol';
}
case 'PEmbedded':
return isEmbedded(v);
case 'PPointer':
return isPointer(v);
case 'PBind':
if (walk(p.value.pattern, v)) {
bindings.push(v);
bindings[p.value.name.asPreservesText()] = v;
return true;
}
return false;
@ -61,7 +61,7 @@ export function match(p: Pattern, v: Assertion): Bindings | null {
return true;
case 'PNot': {
const savedBindings = bindings;
bindings = [];
bindings = {};
const result = !walk(p.value.pattern, v)
bindings = savedBindings;
return result;
@ -112,16 +112,8 @@ export function match(p: Pattern, v: Assertion): Bindings | null {
export function instantiate(t: Template, b: Bindings): Assertion {
function walk(t: Template): Assertion {
switch (t._variant) {
case 'TAttenuate': {
const v = walk(t.value.template);
if (!isEmbedded(v)) {
throw new Error(`Attempt to attenuate non-capability: ${v.asPreservesText()}`);
}
const r = v.embeddedValue;
return embed(attenuate(r, ... t.value.attenuation));
}
case 'TRef': {
const n = t.value.binding;
const n = t.value.name.asPreservesText()
const v = b[n];
if (v === void 0) throw new Error(`Unbound reference: ${n}`);
return v;
@ -193,10 +185,12 @@ export function runRewrites(a: Attenuation | undefined, v: Assertion): Assertion
return v;
}
const _a = Symbol.for('a');
export function rfilter(... patterns: Pattern[]): Caveat {
const ps = patterns.map(p => Rewrite({
pattern: Pattern.PBind(PBind(p)),
template: Template.TRef(TRef(0))
pattern: Pattern.PBind(PBind({ name: _a, pattern: p })),
template: Template.TRef(TRef(_a))
}));
return ps.length === 1 ? Caveat.Rewrite(ps[0]) : Caveat.Alts(Alts(ps));
}
@ -237,27 +231,27 @@ export function forwarder(t: Turn, ref: Ref): { proxy: Ref, revoker: Ref } {
return { proxy, revoker };
}
export function pRec(label: SturdyValue, ... members: Array<Pattern>): Pattern {
export function pRec(label: _val, ... members: Array<Pattern>): Pattern {
return Pattern.PCompound(PCompound({
ctor: ConstructorSpec.CRec(CRec({ label: label, arity: members.length })),
members: PCompoundMembers(new Dictionary<_embedded, Pattern>(
members: PCompoundMembers(new Dictionary<_ptr, Pattern>(
members.map((p, i) => [i, p] as const).filter(e => e[1]._variant !== 'PDiscard')))}));
}
export function pArr(... members: Array<Pattern>): Pattern {
return Pattern.PCompound(PCompound({
ctor: ConstructorSpec.CArr(CArr(members.length)),
members: PCompoundMembers(new Dictionary<_embedded, Pattern>(
members: PCompoundMembers(new Dictionary<_ptr, Pattern>(
members.map((p, i) => [i, p] as const).filter(e => e[1]._variant !== 'PDiscard')))}));
}
export function pDict(... entries: [SturdyValue, Pattern][]): Pattern {
export function pDict(... entries: [_val, Pattern][]): Pattern {
return Pattern.PCompound(PCompound({
ctor: ConstructorSpec.CDict(CDict()),
members: PCompoundMembers(new Dictionary<_embedded, Pattern>(entries))}));
members: PCompoundMembers(new Dictionary<_ptr, Pattern>(entries))}));
}
export function pLit(value: SturdyValue): Pattern {
export function pLit(value: _val): Pattern {
return Pattern.Lit(Lit(value));
}
@ -269,12 +263,12 @@ export function pAnd(... ps: Pattern[]): Pattern {
return Pattern.PAnd(PAnd(ps));
}
export function pBind(pattern: Pattern): Pattern {
return Pattern.PBind(PBind(pattern));
export function pBind(name: symbol, pattern: Pattern): Pattern {
return Pattern.PBind(PBind({ name, pattern }));
}
export function pEmbedded(): Pattern {
return Pattern.PEmbedded(PEmbedded());
export function pPointer(): Pattern {
return Pattern.PPointer(PPointer());
}
export function pSymbol(): Pattern {

View File

@ -1,13 +1,13 @@
import { Bytes, Reader } from '@preserves/core';
import { fromSturdyRef, toSturdyRef, toCaveat, attenuate, sturdyDecode, sturdyEncode, _embedded } from '../transport/sturdy.js';
import { fromSturdyRef, toSturdyRef, toCaveat, attenuate, sturdyDecode, sturdyEncode, _ptr } from '../transport/sturdy.js';
const [ base, pat ] = process.argv.slice(2);
const baseCap = toSturdyRef(sturdyDecode(Bytes.fromHex(base ?? '')));
if (baseCap === void 0) throw new Error("Cannot decode sturdyref");
const cs0 = new Reader<_embedded>(pat).next();
const cs0 = new Reader<_ptr>(pat).next();
if (!Array.isArray(cs0)) throw new Error("Expected array of caveats");
const cs = cs0.map(c => toCaveat(c) ?? (()=>{ throw new Error("Cannot decode caveat"); })());
attenuate(baseCap, ... cs).then(derived => {
console.log(fromSturdyRef(derived).asPreservesText());
console.log(derived.asPreservesText());
console.log(sturdyEncode(fromSturdyRef(derived)).toHex());
});

View File

@ -1,24 +1,24 @@
import * as S from '../gen/sturdy.js';
import { Oid } from '../gen/protocol.js';
import * as IO from '../gen/protocol.js';
import { Ref } from '../runtime/actor.js';
import { Decoder, DecoderState, Encoder, EncoderState, GenericEmbedded, neverEmbeddedType, EmbeddedType, Value } from '@preserves/core';
import { Decoder, DecoderState, Encoder, EncoderState, GenericPointer, neverPointerType, PointerType, Value } from '@preserves/core';
export type WireSymbol = { oid: Oid, ref: Ref, count: number };
export type WireSymbol = { oid: IO.Oid, ref: Ref, count: number };
export const wireRefEmbeddedType: EmbeddedType<S.WireRef> = {
export const wireRefPointerType: PointerType<S.WireRef> = {
decode(s: DecoderState): S.WireRef {
return S.asWireRef(new Decoder<any>(s).next());
},
encode(s: EncoderState, v: S.WireRef): void {
new Encoder<any>(s, neverEmbeddedType).push(S.fromWireRef(v));
new Encoder<any>(s, neverPointerType).push(S.fromWireRef(v));
},
fromValue(v: Value<GenericEmbedded>): S.WireRef {
return S.asWireRef(v as Value<S._embedded>);
fromValue(v: Value<GenericPointer>): S.WireRef {
return S.asWireRef(v as S._val);
},
toValue(v: S.WireRef): Value<GenericEmbedded> {
return S.fromWireRef(v) as Value<GenericEmbedded>;
toValue(v: S.WireRef): Value<GenericPointer> {
return S.fromWireRef(v) as Value<GenericPointer>;
}
};

View File

@ -1,7 +1,7 @@
import { Actor, Assertion, Entity, Facet, Handle, Ref, Turn } from '../runtime/actor.js';
import { BytesLike, Decoder, Dictionary, embed, encode, IdentityMap, mapEmbeddeds, underlying, Value } from '@preserves/core';
import { BytesLike, Decoder, Dictionary, embed, encode, IdentityMap, mapPointers, underlying, Value } from '@preserves/core';
import * as IO from '../gen/protocol.js';
import { wireRefEmbeddedType, WireSymbol } from './protocol.js';
import { wireRefPointerType, WireSymbol } from './protocol.js';
import { queueTask } from '../runtime/task.js';
import { attenuate } from '../runtime/rewrite.js';
import { fromAttenuation, WireRef } from '../gen/sturdy.js';
@ -46,7 +46,7 @@ export class RelayEntity implements Entity {
this.oid = oid;
}
send(m: IO.Event<WireRef>): void {
send(m: IO.Event): void {
this.relay.send(this.oid, m);
}
@ -131,13 +131,13 @@ export class Relay {
readonly exported = new Membrane();
readonly imported = new Membrane();
nextLocalOid: IO.Oid = 0;
pendingTurn: IO.Turn<WireRef> = [];
pendingTurn: IO.Turn = [];
debug: boolean;
trustPeer: boolean;
readonly decoder = new Decoder(void 0, {
includeAnnotations: false,
embeddedDecode: wireRefEmbeddedType,
pointerDecode: wireRefPointerType,
});
constructor(t: Turn, options: RelayOptions) {
@ -153,14 +153,14 @@ export class Relay {
rewriteOut(assertion: Assertion, transient: boolean): [Value<WireRef>, Array<WireSymbol>]
{
const exported: Array<WireSymbol> = [];
const rewritten = mapEmbeddeds(assertion, r => embed(this.rewriteRefOut(r, transient, exported)));
const rewritten = mapPointers(assertion, r => embed(this.rewriteRefOut(r, transient, exported)));
return [rewritten, exported];
}
rewriteIn(t: Turn, a: Value<WireRef>): [Assertion, Array<WireSymbol>]
{
const imported: Array<WireSymbol> = [];
const rewritten = mapEmbeddeds(a, r => embed(this.rewriteRefIn(t, r, imported)));
const rewritten = mapPointers(a, r => embed(this.rewriteRefIn(t, r, imported)));
return [rewritten, imported];
}
@ -172,7 +172,6 @@ export class Relay {
deregister(handle: Handle): void {
(this.outboundAssertions.get(handle) ?? []).forEach(e => this.releaseRefOut(e));
this.outboundAssertions.delete(handle);
}
rewriteRefOut(r: Ref, transient: boolean, exported: Array<WireSymbol>): WireRef {
@ -229,13 +228,13 @@ export class Relay {
}
}
send(remoteOid: IO.Oid, m: IO.Event<WireRef>): void {
send(remoteOid: IO.Oid, m: IO.Event): void {
if (this.pendingTurn.length === 0) {
queueTask(() => {
if (this.debug) console.log('OUT', IO.fromTurn(this.pendingTurn).asPreservesText());
this.w(underlying(encode(IO.fromTurn(this.pendingTurn), {
canonical: true,
embeddedEncode: wireRefEmbeddedType,
pointerEncode: wireRefPointerType,
})));
this.pendingTurn = [];
});
@ -264,7 +263,7 @@ export class Relay {
});
}
handle(t: Turn, r: Ref, m: IO.Event<WireRef>) {
handle(t: Turn, r: Ref, m: IO.Event) {
switch (m._variant) {
case 'Assert': {
const [a, imported] = this.rewriteIn(t, m.value.assertion);

View File

@ -7,30 +7,30 @@
// California: Internet Society, 2014.
import { mac } from './cryptography.js';
import { Bytes, decode, encode, is, neverEmbeddedType, Value } from '@preserves/core';
import { Bytes, decode, encode, is, neverPointerType } from '@preserves/core';
import * as S from '../gen/sturdy.js';
export * from '../gen/sturdy.js';
export type SturdyValue = Value<S._embedded>;
export type SturdyValue = S._val;
export const KEY_LENGTH = 16; // 128 bits
export function embeddedNotAllowed(): never {
export function pointerNotAllowed(): never {
throw new Error("Embedded Ref not permitted in SturdyRef");
}
export function sturdyEncode(v: SturdyValue): Bytes {
return encode<S._embedded>(v, {
return encode<S._ptr>(v, {
canonical: true,
includeAnnotations: false,
embeddedEncode: neverEmbeddedType,
pointerEncode: neverPointerType,
});
}
export function sturdyDecode(bs: Bytes): SturdyValue {
return decode<S._embedded>(bs, {
return decode<S._ptr>(bs, {
includeAnnotations: false,
embeddedDecode: neverEmbeddedType,
pointerDecode: neverPointerType,
});
}

View File

@ -2,17 +2,17 @@
# yarn lockfile v1
"@preserves/core@^0.17.0":
version "0.17.0"
resolved "https://registry.yarnpkg.com/@preserves/core/-/core-0.17.0.tgz#23e7edb0a1bf5e602d210ea2ae474113d0cc5b12"
integrity sha512-ZyqsC8f08yvOn9UjaBekIhKDY44k7sWwyW2xTLfVCffFHGCPidgq6uUGKcuKAbr3ibGB7kQ6KQr/xgVAUpDC0Q==
"@preserves/core@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@preserves/core/-/core-0.14.0.tgz#a7b8fda8b408415e0dbc0682218d6f63f3ec19e5"
integrity sha512-iTwhoW/dVZIXIfU6p98ZL9dZS5vNH12CDBL+OMJP5cF6fon/CXEVvGEjx/cNJ1+Xg0KSz+CLNXNAdZhwPoph1Q==
"@preserves/schema@^0.16.0":
version "0.16.0"
resolved "https://registry.yarnpkg.com/@preserves/schema/-/schema-0.16.0.tgz#93fa31486b5d614ad2203e188be311f834ddd7d7"
integrity sha512-fSCqybOlXTNJktTe+96RJiSBh8rStYJ7Hpm2DnuFAne6t5EjGaTnre15vBn/IDq92cBLS+LMOCDrc4IojAXTkw==
"@preserves/schema@^0.7.0":
version "0.7.0"
resolved "https://registry.yarnpkg.com/@preserves/schema/-/schema-0.7.0.tgz#4e835353a597b5e37284d1a6f9ee3a49b91abe41"
integrity sha512-9XO0Wpi4udUxatlKT3cLpt+u4bQCmLrRidCEM91tcCOOD7i+h6ltohKfWbXrn94St0uZTBkLU+jRBHb8i75PsQ==
dependencies:
"@preserves/core" "^0.17.0"
"@preserves/core" "^0.14.0"
"@types/glob" "^7.1.3"
"@types/minimatch" "^3.0.3"
chalk "^4.1.0"
@ -35,9 +35,9 @@
integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==
"@types/node@*":
version "15.6.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08"
integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==
version "14.14.41"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615"
integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==
"@types/node@^14.14.31":
version "14.14.33"
@ -159,9 +159,9 @@ glob-parent@~5.1.0:
is-glob "^4.0.1"
glob@^7.1.6:
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@ -237,9 +237,9 @@ path-is-absolute@^1.0.0:
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
picomatch@^2.0.4, picomatch@^2.2.1:
version "2.3.0"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
version "2.2.3"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
readdirp@~3.5.0:
version "3.5.0"