From 404372eb6ac95cdc54677aeefd6a2c098297db7e Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 01:19:41 +0300 Subject: [PATCH 1/8] Few fixes to SSH and Owner to implement auth and transfer commands in Spago --- app/src/App/Auth.purs | 2 +- flake.nix | 2 +- lib/src/Owner.purs | 6 ++++- lib/src/SSH.js | 8 ++++++ lib/src/SSH.purs | 45 ++++++++++++++++++++++--------- lib/test/Registry/SSH.purs | 18 +++++++------ lib/test/Registry/Test/Utils.purs | 2 +- spago.yaml | 7 +++-- 8 files changed, 62 insertions(+), 28 deletions(-) diff --git a/app/src/App/Auth.purs b/app/src/App/Auth.purs index 9c48cc038..4f285129d 100644 --- a/app/src/App/Auth.purs +++ b/app/src/App/Auth.purs @@ -33,5 +33,5 @@ type SignAuthenticated = signPayload :: SignAuthenticated -> Either String SSH.Signature signPayload { privateKey, rawPayload } = do - private <- SSH.parsePrivateKey privateKey + private <- lmap SSH.printParsePrivateKeyError $ SSH.parsePrivateKey { key: privateKey, passphrase: Nothing } pure $ SSH.sign private rawPayload diff --git a/flake.nix b/flake.nix index 7784bce83..baf59c600 100644 --- a/flake.nix +++ b/flake.nix @@ -853,7 +853,7 @@ # Development tooling purs - spago-bin.spago-0_93_19 # until new lockfile format supported by overlay + spago-bin.spago-0_93_36 purs-tidy-unstable purs-backend-es-unstable ]; diff --git a/lib/src/Owner.purs b/lib/src/Owner.purs index e5fff9cce..f02abfedc 100644 --- a/lib/src/Owner.purs +++ b/lib/src/Owner.purs @@ -25,7 +25,11 @@ newtype Owner = Owner } derive instance Newtype Owner _ -derive newtype instance Eq Owner + +-- | Owners are equal if their keytype and public key are equal, regardless of +-- | the id field, which is just an arbitrary string. +instance Eq Owner where + eq (Owner o1) (Owner o2) = o1.keytype == o2.keytype && o1.public == o2.public -- | A codec for encoding and decoding an `Owner` as JSON. Represented as a JSON -- | object. diff --git a/lib/src/SSH.js b/lib/src/SSH.js index f59a1038c..46c29301a 100644 --- a/lib/src/SSH.js +++ b/lib/src/SSH.js @@ -28,3 +28,11 @@ export function isPrivateKeyImpl(parsedKey) { export function equalsImpl(a, b) { return a.equals(b); } + +export function publicToOwnerImpl(parsedKey) { + return { + id: parsedKey.comment, + keytype: parsedKey.type, + public: parsedKey.getPublicSSH().toString("base64"), + }; +} diff --git a/lib/src/SSH.purs b/lib/src/SSH.purs index 5cec49110..0c5677324 100644 --- a/lib/src/SSH.purs +++ b/lib/src/SSH.purs @@ -1,21 +1,27 @@ module Registry.SSH ( PublicKey , PrivateKey + , ParsePrivateKeyError(..) + , printParsePrivateKeyError , Signature(..) , parsePublicKey , parsePrivateKey - , parsePrivateKeyWithPassword + , publicToOwner , sign , verify ) where import Prelude +import Data.Bifunctor (bimap) import Data.Either (Either(..)) import Data.Function.Uncurried (Fn1, Fn2, Fn3, Fn4, runFn1, runFn2, runFn3, runFn4) +import Data.Maybe (Maybe) import Data.Newtype (class Newtype) -import Data.Nullable (Nullable, notNull, null) +import Data.Nullable (Nullable, null) +import Data.Nullable as Nullable import Effect.Exception as Exception +import Registry.Owner (Owner(..)) -- | A parsed SSH public key which can be used to verify payloads. newtype PublicKey = PublicKey ParsedKey @@ -37,18 +43,24 @@ foreign import parseKeyImpl :: forall r. Fn4 (Exception.Error -> r) (ParsedKey - parse :: String -> Either String ParsedKey parse buf = runFn4 parseKeyImpl (Left <<< Exception.message) Right buf null --- | Parse a non-password-protected private SSH key -parsePrivateKey :: String -> Either String PrivateKey -parsePrivateKey key = case parse key of - Right parsed | not (isPrivateKey parsed) -> Left $ "Expected private key, but this is a public key of type " <> keyType parsed - result -> map PrivateKey result +data ParsePrivateKeyError + = GotPublicKeyInstead String + | RequiresPassphrase + | OtherParseError String + +printParsePrivateKeyError :: ParsePrivateKeyError -> String +printParsePrivateKeyError = case _ of + GotPublicKeyInstead keyType' -> "Expected private key, but got public key of type " <> keyType' + RequiresPassphrase -> "Encrypted private key requires a passphrase" + OtherParseError message -> message -- | Parse a password-protected private SSH key -parsePrivateKeyWithPassword :: { key :: String, passphrase :: String } -> Either String PrivateKey -parsePrivateKeyWithPassword { key, passphrase } = - case runFn4 parseKeyImpl (Left <<< Exception.message) Right key (notNull passphrase) of - Right parsed | not (isPrivateKey parsed) -> Left $ "Expected private key, but this is a public key of type " <> keyType parsed - result -> map PrivateKey result +parsePrivateKey :: { key :: String, passphrase :: Maybe String } -> Either ParsePrivateKeyError PrivateKey +parsePrivateKey { key, passphrase } = + case runFn4 parseKeyImpl (Left <<< Exception.message) Right key (Nullable.toNullable passphrase) of + Right parsed | not (isPrivateKey parsed) -> Left $ GotPublicKeyInstead $ keyType parsed + Left "Encrypted private OpenSSH key detected, but no passphrase given" -> Left RequiresPassphrase + result -> bimap OtherParseError PrivateKey result -- | Parse a public SSH key parsePublicKey :: String -> Either String PublicKey @@ -88,3 +100,12 @@ isPrivateKey :: ParsedKey -> Boolean isPrivateKey = runFn1 isPrivateKeyImpl foreign import equalsImpl :: Fn2 ParsedKey ParsedKey Boolean + +foreign import publicToOwnerImpl :: Fn1 PublicKey { keytype :: String, public :: String, id :: Nullable String } + +publicToOwner :: PublicKey -> Owner +publicToOwner key = + let + { id: nullableId, keytype, public } = runFn1 publicToOwnerImpl key + in + Owner { keytype, public, id: Nullable.toMaybe nullableId } diff --git a/lib/test/Registry/SSH.purs b/lib/test/Registry/SSH.purs index 92d185955..800d1d187 100644 --- a/lib/test/Registry/SSH.purs +++ b/lib/test/Registry/SSH.purs @@ -3,6 +3,7 @@ module Test.Registry.SSH (spec) where import Prelude import Data.Either (Either(..)) +import Data.Maybe (Maybe(..)) import Data.String as String import Registry.SSH (Signature(..)) import Registry.SSH as SSH @@ -13,8 +14,8 @@ import Test.Spec as Spec spec :: Spec.Spec Unit spec = do Spec.it "Parses an ED25519 private key" do - case SSH.parsePrivateKey id_ed25519 of - Left err -> Assert.fail $ "Failed to parse ed_25519 private key: " <> err + case SSH.parsePrivateKey { key: id_ed25519, passphrase: Nothing } of + Left err -> Assert.fail $ "Failed to parse ed_25519 private key: " <> SSH.printParsePrivateKeyError err Right _ -> pure unit Spec.it "Parses an ED25519 public key" do @@ -23,12 +24,13 @@ spec = do Right _ -> pure unit Spec.it "Parses a password-protected RSA private key" do - case SSH.parsePrivateKey id_rsa of - Left err1 -> do - err1 `Assert.shouldEqual` "Encrypted private OpenSSH key detected, but no passphrase given" - case SSH.parsePrivateKeyWithPassword { key: id_rsa, passphrase: id_rsa_password } of - Left err2 -> Assert.fail $ "Failed to parse id_rsa private key with password: " <> err2 + case SSH.parsePrivateKey { key: id_rsa, passphrase: Nothing } of + Left err1@SSH.RequiresPassphrase -> do + SSH.printParsePrivateKeyError err1 `Assert.shouldEqual` "Encrypted private OpenSSH key detected, but no passphrase given" + case SSH.parsePrivateKey { key: id_rsa, passphrase: Just id_rsa_password } of + Left err2 -> Assert.fail $ "Failed to parse id_rsa private key with password: " <> SSH.printParsePrivateKeyError err2 Right _ -> pure unit + Left otherError -> Assert.fail $ "Should have required a passphrase, but got: " <> SSH.printParsePrivateKeyError otherError Right _ -> Assert.fail $ "Expected parse failure, but got key." Spec.it "Parses an RSA public key" do @@ -41,7 +43,7 @@ spec = do Left _ -> pure unit Right _ -> Assert.fail "Parsed private key as a public key." - case SSH.parsePrivateKey id_ed25519_pub of + case SSH.parsePrivateKey { key: id_ed25519_pub, passphrase: Nothing } of Left _ -> pure unit Right _ -> Assert.fail "Parsed public key as a private key." diff --git a/lib/test/Registry/Test/Utils.purs b/lib/test/Registry/Test/Utils.purs index 58d9f8128..2e0869f3c 100644 --- a/lib/test/Registry/Test/Utils.purs +++ b/lib/test/Registry/Test/Utils.purs @@ -91,7 +91,7 @@ unsafeSSHPublicKey str = fromRight ("Failed to parse SSH key: " <> str) (SSH.par -- | Unsafely parse a private SSH key from a string unsafeSSHPrivateKey :: String -> SSH.PrivateKey -unsafeSSHPrivateKey str = fromRight ("Failed to parse SSH key: " <> str) (SSH.parsePrivateKey str) +unsafeSSHPrivateKey str = fromRight ("Failed to parse SSH key: " <> str) (SSH.parsePrivateKey { key: str, passphrase: Nothing }) -- | Unsafely create a manifest from a name, version, and array of dependencies -- | where keys are package names and values are ranges. diff --git a/spago.yaml b/spago.yaml index 74b14750a..d079d3e15 100644 --- a/spago.yaml +++ b/spago.yaml @@ -1,8 +1,7 @@ workspace: - lock: true - package_set: - registry: 46.0.0 - extra_packages: + packageSet: + registry: 50.10.0 + extraPackages: codec-json: 1.2.0 dodo-printer: repo: https://github.com/natefaubion/purescript-dodo-printer.git From 0306ab54d87175413ebcd83ea0f029d0416b4050 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 16:43:09 +0300 Subject: [PATCH 2/8] Latest spago --- flake.lock | 6 +- flake.nix | 2 +- spago.lock | 1522 +++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 1322 insertions(+), 208 deletions(-) diff --git a/flake.lock b/flake.lock index 6dfd6d662..91bdc8b26 100644 --- a/flake.lock +++ b/flake.lock @@ -75,11 +75,11 @@ "slimlock": "slimlock" }, "locked": { - "lastModified": 1720786645, - "narHash": "sha256-eiuWqQ9xTA2E76XDg13TQBecnLV1g+ahdauC0FYSD7U=", + "lastModified": 1724938718, + "narHash": "sha256-lE6fUo7cgMcO20mH+9VRhDoMLlC99K5lMEVuJm+UGEI=", "owner": "thomashoneyman", "repo": "purescript-overlay", - "rev": "c46925ec09fdf54b5bb4ba38b40e19918d3be7be", + "rev": "9970a549c72aa7a787ea7cc205a0d52c3589f799", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index baf59c600..4a7a925b4 100644 --- a/flake.nix +++ b/flake.nix @@ -853,7 +853,7 @@ # Development tooling purs - spago-bin.spago-0_93_36 + spago-bin.spago-0_93_39 purs-tidy-unstable purs-backend-es-unstable ]; diff --git a/spago.lock b/spago.lock index 75d0acb28..afe2e64ae 100644 --- a/spago.lock +++ b/spago.lock @@ -2,206 +2,1318 @@ workspace: packages: registry-app: path: app - dependencies: - - aff - - ansi - - arrays - - b64 - - bifunctors - - codec - - codec-json - - console - - const - - control - - datetime - - dodo-printer - - dotenv - - effect - - either - - exceptions - - exists - - fetch - - filterable - - foldable-traversable - - foreign - - foreign-object - - formatters - - http-methods - - httpurple - - identity - - integers - - js-date - - js-fetch - - js-promise-aff - - js-uri - - json - - lists - - maybe - - newtype - - node-buffer - - node-child-process - - node-execa - - node-fs - - node-path - - node-process - - now - - nullable - - numbers - - ordered-collections - - orders - - parallel - - parsing - - partial - - prelude - - profunctor - - record - - refs - - registry-foreign - - registry-lib - - run - - safe-coerce - - strings - - these - - transformers - - tuples - - typelevel-prelude - - unicode - - unsafe-coerce - - uuidv4 - - variant - test_dependencies: - - spec + core: + dependencies: + - aff + - ansi + - arrays + - b64 + - bifunctors + - codec + - codec-json + - console + - const + - control + - datetime + - dodo-printer + - dotenv + - effect + - either + - exceptions + - exists + - fetch + - filterable + - foldable-traversable + - foreign + - foreign-object + - formatters + - http-methods + - httpurple + - identity + - integers + - js-date + - js-fetch + - js-promise-aff + - js-uri + - json + - lists + - maybe + - newtype + - node-buffer + - node-child-process + - node-execa + - node-fs + - node-path + - node-process + - now + - nullable + - numbers + - ordered-collections + - orders + - parallel + - parsing + - partial + - prelude + - profunctor + - record + - refs + - registry-foreign + - registry-lib + - run + - safe-coerce + - strings + - these + - transformers + - tuples + - typelevel-prelude + - unicode + - unsafe-coerce + - uuidv4 + - variant + build_plan: + - aff + - aff-promise + - ansi + - arraybuffer-types + - arrays + - assert + - avar + - b64 + - bifunctors + - catenable-lists + - codec + - codec-json + - console + - const + - contravariant + - control + - convertable-options + - datetime + - debug + - distributive + - dodo-printer + - dotenv + - effect + - either + - encoding + - enums + - exceptions + - exists + - fetch + - filterable + - fixed-points + - foldable-traversable + - foreign + - foreign-object + - formatters + - free + - functions + - functors + - gen + - graphs + - heterogeneous + - http-methods + - httpurple + - identity + - integers + - invariant + - js-date + - js-fetch + - js-promise + - js-promise-aff + - js-timers + - js-uri + - json + - justifill + - language-cst-parser + - lazy + - lcg + - lists + - literals + - maybe + - media-types + - newtype + - node-buffer + - node-child-process + - node-event-emitter + - node-execa + - node-fs + - node-http + - node-human-signals + - node-net + - node-os + - node-path + - node-process + - node-streams + - node-tls + - node-url + - nonempty + - now + - nullable + - numbers + - options + - ordered-collections + - orders + - parallel + - parsing + - partial + - posix-types + - prelude + - profunctor + - profunctor-lenses + - psci-support + - quickcheck + - quickcheck-laws + - random + - record + - record-studio + - refs + - registry-foreign + - registry-lib + - routing-duplex + - run + - safe-coerce + - st + - strings + - tailrec + - these + - transformers + - tuples + - type-equality + - typelevel-prelude + - unfoldable + - unicode + - unsafe-coerce + - unsafe-reference + - untagged-union + - uuidv4 + - variant + - web-dom + - web-events + - web-file + - web-streams + test: + dependencies: + - spec + build_plan: + - aff + - ansi + - arrays + - avar + - bifunctors + - catenable-lists + - const + - contravariant + - control + - datetime + - distributive + - effect + - either + - enums + - exceptions + - exists + - foldable-traversable + - fork + - free + - functions + - functors + - gen + - identity + - integers + - invariant + - lazy + - lists + - maybe + - mmorph + - newtype + - nonempty + - now + - numbers + - ordered-collections + - orders + - parallel + - partial + - pipes + - prelude + - profunctor + - refs + - safe-coerce + - spec + - st + - strings + - tailrec + - transformers + - tuples + - type-equality + - unfoldable + - unsafe-coerce registry-foreign: path: foreign - dependencies: - - aff - - aff-promise - - arrays - - b64 - - bifunctors - - codec - - codec-json - - convertable-options - - datetime - - effect - - either - - exceptions - - fetch - - filterable - - foldable-traversable - - foreign-object - - functions - - http-methods - - integers - - js-date - - js-fetch - - json - - maybe - - newtype - - node-buffer - - node-path - - nullable - - ordered-collections - - prelude - - profunctor - - registry-lib - - strings - - transformers - - tuples - - unsafe-coerce - - variant - test_dependencies: - - node-child-process - - node-execa - - node-fs - - node-process - - spec + core: + dependencies: + - aff + - aff-promise + - arrays + - b64 + - bifunctors + - codec + - codec-json + - convertable-options + - datetime + - effect + - either + - exceptions + - fetch + - filterable + - foldable-traversable + - foreign-object + - functions + - http-methods + - integers + - js-date + - js-fetch + - json + - maybe + - newtype + - node-buffer + - node-path + - nullable + - ordered-collections + - prelude + - profunctor + - registry-lib + - strings + - transformers + - tuples + - unsafe-coerce + - variant + build_plan: + - aff + - aff-promise + - arraybuffer-types + - arrays + - assert + - b64 + - bifunctors + - catenable-lists + - codec + - codec-json + - console + - const + - contravariant + - control + - convertable-options + - datetime + - distributive + - effect + - either + - encoding + - enums + - exceptions + - exists + - fetch + - filterable + - fixed-points + - foldable-traversable + - foreign + - foreign-object + - formatters + - free + - functions + - functors + - gen + - graphs + - http-methods + - identity + - integers + - invariant + - js-date + - js-fetch + - js-promise + - js-promise-aff + - js-uri + - json + - language-cst-parser + - lazy + - lcg + - lists + - maybe + - media-types + - newtype + - node-buffer + - node-event-emitter + - node-fs + - node-path + - node-streams + - nonempty + - now + - nullable + - numbers + - ordered-collections + - orders + - parallel + - parsing + - partial + - prelude + - profunctor + - profunctor-lenses + - quickcheck + - random + - record + - refs + - registry-lib + - routing-duplex + - safe-coerce + - st + - strings + - tailrec + - transformers + - tuples + - type-equality + - typelevel-prelude + - unfoldable + - unicode + - unsafe-coerce + - variant + - web-dom + - web-events + - web-file + - web-streams + test: + dependencies: + - node-child-process + - node-execa + - node-fs + - node-process + - spec + build_plan: + - aff + - ansi + - arraybuffer-types + - arrays + - avar + - bifunctors + - catenable-lists + - console + - const + - contravariant + - control + - datetime + - distributive + - effect + - either + - enums + - exceptions + - exists + - foldable-traversable + - foreign + - foreign-object + - fork + - free + - functions + - functors + - gen + - identity + - integers + - invariant + - js-date + - js-timers + - lazy + - lists + - maybe + - mmorph + - newtype + - node-buffer + - node-child-process + - node-event-emitter + - node-execa + - node-fs + - node-human-signals + - node-os + - node-path + - node-process + - node-streams + - nonempty + - now + - nullable + - numbers + - ordered-collections + - orders + - parallel + - parsing + - partial + - pipes + - posix-types + - prelude + - profunctor + - record + - refs + - safe-coerce + - spec + - st + - strings + - tailrec + - transformers + - tuples + - type-equality + - typelevel-prelude + - unfoldable + - unicode + - unsafe-coerce + - unsafe-reference registry-lib: path: lib - dependencies: - - aff - - arrays - - bifunctors - - codec - - codec-json - - control - - datetime - - effect - - either - - exceptions - - foldable-traversable - - foreign-object - - formatters - - functions - - functors - - graphs - - integers - - json - - language-cst-parser - - lists - - maybe - - newtype - - node-buffer - - node-fs - - node-path - - nullable - - ordered-collections - - parsing - - partial - - prelude - - profunctor - - profunctor-lenses - - routing-duplex - - safe-coerce - - st - - strings - - transformers - - tuples - test_dependencies: - - exceptions - - json - - node-child-process - - node-execa - - spec - - unsafe-coerce + core: + dependencies: + - aff + - arrays + - bifunctors + - codec + - codec-json + - control + - datetime + - effect + - either + - exceptions + - foldable-traversable + - foreign-object + - formatters + - functions + - functors + - graphs + - integers + - json + - language-cst-parser + - lists + - maybe + - newtype + - node-buffer + - node-fs + - node-path + - nullable + - ordered-collections + - parsing + - partial + - prelude + - profunctor + - profunctor-lenses + - routing-duplex + - safe-coerce + - st + - strings + - transformers + - tuples + build_plan: + - aff + - arraybuffer-types + - arrays + - assert + - bifunctors + - catenable-lists + - codec + - codec-json + - console + - const + - contravariant + - control + - datetime + - distributive + - effect + - either + - enums + - exceptions + - exists + - fixed-points + - foldable-traversable + - foreign + - foreign-object + - formatters + - free + - functions + - functors + - gen + - graphs + - identity + - integers + - invariant + - js-date + - js-uri + - json + - language-cst-parser + - lazy + - lcg + - lists + - maybe + - newtype + - node-buffer + - node-event-emitter + - node-fs + - node-path + - node-streams + - nonempty + - now + - nullable + - numbers + - ordered-collections + - orders + - parallel + - parsing + - partial + - prelude + - profunctor + - profunctor-lenses + - quickcheck + - random + - record + - refs + - routing-duplex + - safe-coerce + - st + - strings + - tailrec + - transformers + - tuples + - type-equality + - typelevel-prelude + - unfoldable + - unicode + - unsafe-coerce + - variant + test: + dependencies: + - exceptions + - json + - node-child-process + - node-execa + - spec + - unsafe-coerce + build_plan: + - aff + - ansi + - arraybuffer-types + - arrays + - avar + - bifunctors + - catenable-lists + - console + - const + - contravariant + - control + - datetime + - distributive + - effect + - either + - enums + - exceptions + - exists + - foldable-traversable + - foreign + - foreign-object + - fork + - free + - functions + - functors + - gen + - identity + - integers + - invariant + - js-date + - js-timers + - json + - lazy + - lists + - maybe + - mmorph + - newtype + - node-buffer + - node-child-process + - node-event-emitter + - node-execa + - node-fs + - node-human-signals + - node-os + - node-path + - node-process + - node-streams + - nonempty + - now + - nullable + - numbers + - ordered-collections + - orders + - parallel + - parsing + - partial + - pipes + - posix-types + - prelude + - profunctor + - record + - refs + - safe-coerce + - spec + - st + - strings + - tailrec + - transformers + - tuples + - type-equality + - typelevel-prelude + - unfoldable + - unicode + - unsafe-coerce + - unsafe-reference registry-scripts: path: scripts - dependencies: - - aff - - argparse-basic - - arrays - - codec-json - - console - - datetime - - either - - exceptions - - exists - - filterable - - foldable-traversable - - formatters - - json - - lists - - newtype - - node-fs - - node-path - - node-process - - now - - numbers - - ordered-collections - - parsing - - prelude - - profunctor - - refs - - registry-app - - registry-foreign - - registry-lib - - run - - strings - - tuples - - variant - test_dependencies: [] + core: + dependencies: + - aff + - argparse-basic + - arrays + - codec-json + - console + - datetime + - either + - exceptions + - exists + - filterable + - foldable-traversable + - formatters + - json + - lists + - newtype + - node-fs + - node-path + - node-process + - now + - numbers + - ordered-collections + - parsing + - prelude + - profunctor + - refs + - registry-app + - registry-foreign + - registry-lib + - run + - strings + - tuples + - variant + build_plan: + - aff + - aff-promise + - ansi + - argparse-basic + - arraybuffer-types + - arrays + - assert + - avar + - b64 + - bifunctors + - catenable-lists + - codec + - codec-json + - console + - const + - contravariant + - control + - convertable-options + - datetime + - debug + - distributive + - dodo-printer + - dotenv + - effect + - either + - encoding + - enums + - exceptions + - exists + - fetch + - filterable + - fixed-points + - foldable-traversable + - foreign + - foreign-object + - formatters + - free + - functions + - functors + - gen + - graphs + - heterogeneous + - http-methods + - httpurple + - identity + - integers + - invariant + - js-date + - js-fetch + - js-promise + - js-promise-aff + - js-timers + - js-uri + - json + - justifill + - language-cst-parser + - lazy + - lcg + - lists + - literals + - maybe + - media-types + - newtype + - node-buffer + - node-child-process + - node-event-emitter + - node-execa + - node-fs + - node-http + - node-human-signals + - node-net + - node-os + - node-path + - node-process + - node-streams + - node-tls + - node-url + - nonempty + - now + - nullable + - numbers + - options + - ordered-collections + - orders + - parallel + - parsing + - partial + - posix-types + - prelude + - profunctor + - profunctor-lenses + - psci-support + - quickcheck + - quickcheck-laws + - random + - record + - record-studio + - refs + - registry-app + - registry-foreign + - registry-lib + - routing-duplex + - run + - safe-coerce + - st + - strings + - tailrec + - these + - transformers + - tuples + - type-equality + - typelevel-prelude + - unfoldable + - unicode + - unsafe-coerce + - unsafe-reference + - untagged-union + - uuidv4 + - variant + - web-dom + - web-events + - web-file + - web-streams + test: + dependencies: [] + build_plan: [] package_set: - registry: 46.0.0 + address: + registry: 50.10.0 + compiler: ">=0.15.15 <0.16.0" + content: + abc-parser: 2.0.1 + ace: 9.1.0 + aff: 7.1.0 + aff-bus: 6.0.0 + aff-coroutines: 9.0.0 + aff-promise: 4.0.0 + aff-retry: 2.0.0 + affjax: 13.0.0 + affjax-node: 1.0.0 + affjax-web: 1.0.0 + ansi: 7.0.0 + applicative-phases: 1.0.0 + argonaut: 9.0.0 + argonaut-aeson-generic: 0.4.1 + argonaut-codecs: 9.1.0 + argonaut-core: 7.0.0 + argonaut-generic: 8.0.0 + argonaut-traversals: 10.0.0 + argparse-basic: 2.0.0 + array-builder: 0.1.2 + array-search: 0.5.6 + arraybuffer: 13.2.0 + arraybuffer-builder: 3.1.0 + arraybuffer-types: 3.0.2 + arrays: 7.3.0 + arrays-extra: 0.6.1 + arrays-zipper: 2.0.1 + ask: 1.0.0 + assert: 6.0.0 + assert-multiple: 0.3.4 + avar: 5.0.0 + b64: 0.0.8 + barbies: 1.0.1 + barlow-lens: 0.9.0 + bifunctors: 6.0.0 + bigints: 7.0.1 + bolson: 0.3.9 + bookhound: 0.1.7 + bower-json: 3.0.0 + call-by-name: 4.0.1 + canvas: 6.0.0 + canvas-action: 9.0.0 + cartesian: 1.0.6 + catenable-lists: 7.0.0 + chameleon: 1.0.0 + chameleon-halogen: 1.0.3 + chameleon-react-basic: 1.1.0 + chameleon-styled: 2.5.0 + chameleon-transformers: 1.0.0 + channel: 1.0.0 + checked-exceptions: 3.1.1 + choku: 1.0.1 + classless: 0.1.1 + classless-arbitrary: 0.1.1 + classless-decode-json: 0.1.1 + classless-encode-json: 0.1.3 + classnames: 2.0.0 + codec: 6.1.0 + codec-argonaut: 10.0.0 + codec-json: 1.1.0 + colors: 7.0.1 + concur-core: 0.5.0 + concur-react: 0.5.0 + concurrent-queues: 3.0.0 + console: 6.1.0 + const: 6.0.0 + contravariant: 6.0.0 + control: 6.0.0 + convertable-options: 1.0.0 + coroutines: 7.0.0 + css: 6.0.0 + css-frameworks: 1.0.1 + data-mvc: 0.0.2 + datetime: 6.1.0 + datetime-parsing: 0.2.0 + debug: 6.0.2 + decimals: 7.1.0 + default-values: 1.0.1 + deku: 0.9.23 + deno: 0.0.5 + dissect: 1.0.0 + distributive: 6.0.0 + dom-filereader: 7.0.0 + dom-indexed: 12.0.0 + dom-simple: 0.4.0 + dotenv: 4.0.3 + droplet: 0.6.0 + dts: 1.0.0 + dual-numbers: 1.0.2 + dynamic-buffer: 3.0.1 + echarts-simple: 0.0.1 + effect: 4.0.0 + either: 6.1.0 + elmish: 0.11.3 + elmish-enzyme: 0.1.1 + elmish-hooks: 0.10.0 + elmish-html: 0.8.2 + elmish-testing-library: 0.3.2 + email-validate: 7.0.0 + encoding: 0.0.9 + enums: 6.0.1 + env-names: 0.3.4 + error: 2.0.0 + eta-conversion: 0.3.2 + exceptions: 6.0.0 + exists: 6.0.0 + exitcodes: 4.0.0 + expect-inferred: 3.0.0 + fahrtwind: 2.0.0 + fallback: 0.1.0 + fast-vect: 1.2.0 + fetch: 4.1.0 + fetch-argonaut: 1.0.1 + fetch-core: 5.1.0 + fetch-yoga-json: 1.1.0 + ffi-simple: 0.5.1 + fft-js: 0.1.0 + filterable: 5.0.0 + fix-functor: 0.1.0 + fixed-points: 7.0.0 + fixed-precision: 5.0.0 + flame: 1.3.0 + float32: 2.0.0 + fmt: 0.2.1 + foldable-traversable: 6.0.0 + foldable-traversable-extra: 0.0.6 + foreign: 7.0.0 + foreign-object: 4.1.0 + foreign-readwrite: 3.4.0 + forgetmenot: 0.1.0 + fork: 6.0.0 + form-urlencoded: 7.0.0 + formatters: 7.0.0 + framer-motion: 1.0.1 + free: 7.1.0 + freeap: 7.0.0 + freer-free: 0.0.1 + freet: 7.0.0 + functions: 6.0.0 + functor1: 3.0.0 + functors: 5.0.0 + fuzzy: 0.4.0 + gen: 4.0.0 + generate-values: 1.0.1 + generic-router: 0.0.1 + geojson: 0.0.5 + geometry-plane: 1.0.3 + gojs: 0.1.1 + grain: 3.0.0 + grain-router: 3.0.0 + grain-virtualized: 3.0.0 + graphs: 8.1.0 + group: 4.1.1 + halogen: 7.0.0 + halogen-bootstrap5: 5.3.2 + halogen-canvas: 1.0.0 + halogen-css: 10.0.0 + halogen-echarts-simple: 0.0.4 + halogen-formless: 4.0.3 + halogen-helix: 1.0.0 + halogen-hooks: 0.6.3 + halogen-hooks-extra: 0.9.0 + halogen-infinite-scroll: 1.1.0 + halogen-store: 0.5.4 + halogen-storybook: 2.0.0 + halogen-subscriptions: 2.0.0 + halogen-svg-elems: 8.0.0 + halogen-typewriter: 1.0.4 + halogen-vdom: 8.0.0 + halogen-vdom-string-renderer: 0.5.0 + halogen-xterm: 2.0.0 + heckin: 2.0.1 + heterogeneous: 0.6.0 + homogeneous: 0.4.0 + http-methods: 6.0.0 + httpurple: 4.0.0 + humdrum: 0.0.1 + hyrule: 2.3.8 + identity: 6.0.0 + identy: 4.0.1 + indexed-db: 1.0.0 + indexed-monad: 3.0.0 + int64: 3.0.0 + integers: 6.0.0 + interpolate: 5.0.2 + intersection-observer: 1.0.1 + invariant: 6.0.0 + jarilo: 1.0.1 + jelly: 0.10.0 + jelly-router: 0.3.0 + jelly-signal: 0.4.0 + jest: 1.0.0 + js-abort-controller: 1.0.0 + js-bigints: 2.2.1 + js-date: 8.0.0 + js-fetch: 0.2.1 + js-fileio: 3.0.0 + js-intl: 1.0.4 + js-iterators: 0.1.1 + js-maps: 0.1.2 + js-promise: 1.0.0 + js-promise-aff: 1.0.0 + js-timers: 6.1.0 + js-uri: 3.1.0 + json: 1.0.0 + json-codecs: 5.0.0 + justifill: 0.5.0 + jwt: 0.0.9 + labeled-data: 0.2.0 + language-cst-parser: 0.14.0 + lazy: 6.0.0 + lazy-joe: 1.0.0 + lcg: 4.0.0 + leibniz: 5.0.0 + leveldb: 1.0.1 + liminal: 1.0.1 + linalg: 6.0.0 + lists: 7.0.0 + literals: 1.0.2 + logging: 3.0.0 + logging-journald: 0.4.0 + lumi-components: 18.0.0 + machines: 7.0.0 + maps-eager: 0.4.1 + marionette: 1.0.0 + marionette-react-basic-hooks: 0.1.1 + marked: 0.1.0 + matrices: 5.0.1 + matryoshka: 1.0.0 + maybe: 6.0.0 + media-types: 6.0.0 + meowclient: 1.0.0 + midi: 4.0.0 + milkis: 9.0.0 + minibench: 4.0.1 + mmorph: 7.0.0 + monad-control: 5.0.0 + monad-logger: 1.3.1 + monad-loops: 0.5.0 + monad-unlift: 1.0.1 + monoid-extras: 0.0.1 + monoidal: 0.16.0 + morello: 0.4.0 + mote: 3.0.0 + motsunabe: 2.0.0 + mvc: 0.0.1 + mysql: 6.0.1 + n3: 0.1.0 + nano-id: 1.1.0 + nanoid: 0.1.0 + naturals: 3.0.0 + nested-functor: 0.2.1 + newtype: 5.0.0 + nextjs: 0.1.1 + nextui: 0.2.0 + node-buffer: 9.0.0 + node-child-process: 11.1.0 + node-event-emitter: 3.0.0 + node-execa: 5.0.0 + node-fs: 9.1.0 + node-glob-basic: 1.3.0 + node-http: 9.1.0 + node-http2: 1.1.1 + node-human-signals: 1.0.0 + node-net: 5.1.0 + node-os: 5.1.0 + node-path: 5.0.0 + node-process: 11.2.0 + node-readline: 8.1.0 + node-sqlite3: 8.0.0 + node-streams: 9.0.0 + node-tls: 0.3.1 + node-url: 7.0.1 + node-zlib: 0.4.0 + nonempty: 7.0.0 + now: 6.0.0 + npm-package-json: 2.0.0 + nullable: 6.0.0 + numberfield: 0.1.0 + numbers: 9.0.1 + oak: 3.1.1 + oak-debug: 1.2.2 + object-maps: 0.3.0 + ocarina: 1.5.4 + open-folds: 6.3.0 + open-memoize: 6.1.0 + open-pairing: 6.1.0 + options: 7.0.0 + optparse: 5.0.1 + ordered-collections: 3.2.0 + ordered-set: 0.4.0 + orders: 6.0.0 + owoify: 1.2.0 + pairs: 9.0.1 + parallel: 7.0.0 + parsing: 10.2.0 + parsing-dataview: 3.2.4 + partial: 4.0.0 + pathy: 9.0.0 + pha: 0.13.0 + phaser: 0.7.0 + phylio: 1.1.2 + pipes: 8.0.0 + pirates-charm: 0.0.1 + pmock: 0.9.0 + point-free: 1.0.0 + pointed-list: 0.5.1 + polymorphic-vectors: 4.0.0 + posix-types: 6.0.0 + postgresql: 1.3.0 + precise: 6.0.0 + precise-datetime: 7.0.0 + prelude: 6.0.1 + prettier-printer: 3.0.0 + profunctor: 6.0.1 + profunctor-lenses: 8.0.0 + protobuf: 4.3.0 + psa-utils: 8.0.0 + psci-support: 6.0.0 + punycode: 1.0.0 + qualified-do: 2.2.0 + quantities: 12.2.0 + quickcheck: 8.0.1 + quickcheck-combinators: 0.1.3 + quickcheck-laws: 7.0.0 + quickcheck-utf8: 0.0.0 + random: 6.0.0 + rationals: 6.0.0 + rdf: 0.1.0 + react: 11.0.0 + react-aria: 0.2.0 + react-basic: 17.0.0 + react-basic-classic: 3.0.0 + react-basic-dnd: 10.1.0 + react-basic-dom: 6.1.0 + react-basic-emotion: 7.1.0 + react-basic-hooks: 8.2.0 + react-basic-storybook: 2.0.0 + react-dom: 8.0.0 + react-halo: 3.0.0 + react-icons: 1.1.5 + react-markdown: 0.1.0 + react-testing-library: 4.0.1 + react-virtuoso: 1.0.0 + reactix: 0.6.0 + read: 1.0.1 + recharts: 1.1.0 + record: 4.0.0 + record-extra: 5.0.1 + record-ptional-fields: 0.1.2 + record-studio: 1.0.4 + refs: 6.0.0 + remotedata: 5.0.1 + resize-observer: 1.0.0 + resource: 2.0.1 + resourcet: 1.0.0 + result: 1.0.3 + return: 0.2.0 + ring-modules: 5.0.1 + rito: 0.3.4 + rough-notation: 1.0.2 + routing: 11.0.0 + routing-duplex: 0.7.0 + run: 5.0.0 + safe-coerce: 2.0.0 + safely: 4.0.1 + school-of-music: 1.3.0 + selection-foldable: 0.2.0 + selective-functors: 1.0.1 + semirings: 7.0.0 + signal: 13.0.0 + simple-emitter: 3.0.1 + simple-i18n: 2.0.1 + simple-json: 9.0.0 + simple-json-generics: 0.2.1 + simple-ulid: 3.0.0 + sized-matrices: 1.0.0 + sized-vectors: 5.0.2 + slug: 3.0.8 + small-ffi: 4.0.1 + soundfonts: 4.1.0 + sparse-matrices: 1.3.0 + sparse-polynomials: 2.0.5 + spec: 7.6.0 + spec-mocha: 5.1.0 + spec-quickcheck: 5.0.0 + splitmix: 2.1.0 + ssrs: 1.0.0 + st: 6.2.0 + statistics: 0.3.2 + strictlypositiveint: 1.0.1 + string-parsers: 8.0.0 + strings: 6.0.1 + strings-extra: 4.0.0 + stringutils: 0.0.12 + substitute: 0.2.3 + supply: 0.2.0 + svg-parser: 3.0.0 + systemd-journald: 0.3.0 + tagged: 4.0.2 + tailrec: 6.1.0 + tecton: 0.2.1 + tecton-halogen: 0.2.0 + test-unit: 17.0.0 + thermite: 6.3.1 + thermite-dom: 0.3.1 + these: 6.0.0 + toestand: 0.9.0 + transformation-matrix: 1.0.1 + transformers: 6.0.0 + tree-rose: 4.0.2 + ts-bridge: 4.0.0 + tuples: 7.0.0 + two-or-more: 1.0.0 + type-equality: 4.0.1 + typedenv: 2.0.1 + typelevel: 6.0.0 + typelevel-lists: 2.1.0 + typelevel-peano: 1.0.1 + typelevel-prelude: 7.0.0 + typelevel-regex: 0.0.3 + typelevel-rows: 0.1.0 + typisch: 0.4.0 + uint: 7.0.0 + ulid: 3.0.1 + uncurried-transformers: 1.1.0 + undefined: 2.0.0 + undefined-is-not-a-problem: 1.1.0 + unfoldable: 6.0.0 + unicode: 6.0.0 + unique: 0.6.1 + unlift: 1.0.1 + unordered-collections: 3.1.0 + unsafe-coerce: 6.0.0 + unsafe-reference: 5.0.0 + untagged-to-tagged: 0.1.4 + untagged-union: 1.0.0 + uri: 9.0.0 + uuid: 9.0.0 + uuidv4: 1.0.0 + validation: 6.0.0 + variant: 8.0.0 + variant-encodings: 2.0.0 + vectorfield: 1.0.1 + vectors: 2.1.0 + versions: 7.0.0 + visx: 0.0.2 + web-clipboard: 5.0.0 + web-cssom: 2.0.0 + web-cssom-view: 0.1.0 + web-dom: 6.0.0 + web-dom-parser: 8.0.0 + web-dom-xpath: 3.0.0 + web-encoding: 3.0.0 + web-events: 4.0.0 + web-fetch: 4.0.1 + web-file: 4.0.0 + web-geometry: 0.1.0 + web-html: 4.1.0 + web-pointerevents: 2.0.0 + web-proletarian: 1.0.0 + web-promise: 3.2.0 + web-resize-observer: 2.1.0 + web-router: 1.0.0 + web-socket: 4.0.0 + web-storage: 5.0.0 + web-streams: 4.0.0 + web-touchevents: 4.0.0 + web-uievents: 5.0.0 + web-url: 2.0.0 + web-workers: 1.1.0 + web-xhr: 5.0.1 + webextension-polyfill: 0.1.0 + webgpu: 0.0.1 + which: 2.0.0 + xterm: 1.0.0 + yoga-fetch: 1.0.1 + yoga-json: 5.1.0 + yoga-om: 0.1.0 + yoga-postgres: 6.0.0 + yoga-tree: 1.0.0 + z3: 0.0.2 + zipperarray: 2.0.0 extra_packages: codec-json: 1.2.0 dodo-printer: @@ -568,10 +1680,11 @@ packages: - prelude encoding: type: registry - version: 0.0.8 - integrity: sha256-n0HhENAax0yr7JFwZXcisx0jJvVf1dFwqd+Q5i2Pr88= + version: 0.0.9 + integrity: sha256-vtyUO06Jww8pFl4wRekPd1YpJl2XuQXcaNXQgHtG8Tk= dependencies: - arraybuffer-types + - effect - either - exceptions - functions @@ -608,16 +1721,18 @@ packages: - unsafe-coerce fetch: type: registry - version: 4.0.0 - integrity: sha256-Ita74WPIvzCsSIkUQQbBDKgIrsnuBWIRzEJ8Q5P7iQU= + version: 4.1.0 + integrity: sha256-zCwBUkRL9n6nUhK1+7UqqsuxswPFATsZfGSBOA3NYYY= dependencies: - aff - arraybuffer-types - bifunctors - effect + - either - foreign - http-methods - js-fetch + - js-promise - js-promise-aff - maybe - newtype @@ -1354,8 +2469,8 @@ packages: - tuples ordered-collections: type: registry - version: 3.1.1 - integrity: sha256-boSYHmlz4aSbwsNN4VxiwCStc0t+y1F7BXmBS+1JNtI= + version: 3.2.0 + integrity: sha256-o9jqsj5rpJmMdoe/zyufWHFjYYFTTsJpgcuCnqCO6PM= dependencies: - arrays - foldable-traversable @@ -1452,8 +2567,8 @@ packages: dependencies: [] profunctor: type: registry - version: 6.0.0 - integrity: sha256-99NzxFgTr4CGlCSRYG1kShL+JhYbihhHtbOk1/0R5zI= + version: 6.0.1 + integrity: sha256-E58hSYdJvF2Qjf9dnWLPlJKh2Z2fLfFLkQoYi16vsFk= dependencies: - control - distributive @@ -1616,8 +2731,8 @@ packages: - unsafe-coerce spec: type: registry - version: 7.5.5 - integrity: sha256-HdyBH7Ys1/m2SdTq3u2u9LdQ4cGeaohWeEMYay2mHdU= + version: 7.6.0 + integrity: sha256-+merGdQbL9zWONbnt8S8J9afGJ59MQqGtS0qSd3yu4I= dependencies: - aff - ansi @@ -1626,7 +2741,6 @@ packages: - bifunctors - control - datetime - - debug - effect - either - exceptions From 275ee0fcda4943f7ee7fa27341f5e4c9c9efe318 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 16:50:21 +0300 Subject: [PATCH 3/8] Latest spago --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 4a7a925b4..6d4bfa540 100644 --- a/flake.nix +++ b/flake.nix @@ -270,7 +270,7 @@ pushd $WORKDIR export HEALTHCHECKS_URL=${defaultEnv.HEALTHCHECKS_URL} - ${pkgs.spago-bin.spago-0_93_19}/bin/spago test + ${pkgs.spago-bin.spago-0_93_39}/bin/spago test popd ''; From 103d26ac87f49d24284ef7ab2fc7b0ae19ed8acd Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 17:45:27 +0300 Subject: [PATCH 4/8] Back to spago 0.93.19 --- flake.nix | 4 +- spago.lock | 1498 +++++++--------------------------------------------- spago.yaml | 5 +- 3 files changed, 198 insertions(+), 1309 deletions(-) diff --git a/flake.nix b/flake.nix index 6d4bfa540..7784bce83 100644 --- a/flake.nix +++ b/flake.nix @@ -270,7 +270,7 @@ pushd $WORKDIR export HEALTHCHECKS_URL=${defaultEnv.HEALTHCHECKS_URL} - ${pkgs.spago-bin.spago-0_93_39}/bin/spago test + ${pkgs.spago-bin.spago-0_93_19}/bin/spago test popd ''; @@ -853,7 +853,7 @@ # Development tooling purs - spago-bin.spago-0_93_39 + spago-bin.spago-0_93_19 # until new lockfile format supported by overlay purs-tidy-unstable purs-backend-es-unstable ]; diff --git a/spago.lock b/spago.lock index afe2e64ae..c13ad586c 100644 --- a/spago.lock +++ b/spago.lock @@ -2,1318 +2,206 @@ workspace: packages: registry-app: path: app - core: - dependencies: - - aff - - ansi - - arrays - - b64 - - bifunctors - - codec - - codec-json - - console - - const - - control - - datetime - - dodo-printer - - dotenv - - effect - - either - - exceptions - - exists - - fetch - - filterable - - foldable-traversable - - foreign - - foreign-object - - formatters - - http-methods - - httpurple - - identity - - integers - - js-date - - js-fetch - - js-promise-aff - - js-uri - - json - - lists - - maybe - - newtype - - node-buffer - - node-child-process - - node-execa - - node-fs - - node-path - - node-process - - now - - nullable - - numbers - - ordered-collections - - orders - - parallel - - parsing - - partial - - prelude - - profunctor - - record - - refs - - registry-foreign - - registry-lib - - run - - safe-coerce - - strings - - these - - transformers - - tuples - - typelevel-prelude - - unicode - - unsafe-coerce - - uuidv4 - - variant - build_plan: - - aff - - aff-promise - - ansi - - arraybuffer-types - - arrays - - assert - - avar - - b64 - - bifunctors - - catenable-lists - - codec - - codec-json - - console - - const - - contravariant - - control - - convertable-options - - datetime - - debug - - distributive - - dodo-printer - - dotenv - - effect - - either - - encoding - - enums - - exceptions - - exists - - fetch - - filterable - - fixed-points - - foldable-traversable - - foreign - - foreign-object - - formatters - - free - - functions - - functors - - gen - - graphs - - heterogeneous - - http-methods - - httpurple - - identity - - integers - - invariant - - js-date - - js-fetch - - js-promise - - js-promise-aff - - js-timers - - js-uri - - json - - justifill - - language-cst-parser - - lazy - - lcg - - lists - - literals - - maybe - - media-types - - newtype - - node-buffer - - node-child-process - - node-event-emitter - - node-execa - - node-fs - - node-http - - node-human-signals - - node-net - - node-os - - node-path - - node-process - - node-streams - - node-tls - - node-url - - nonempty - - now - - nullable - - numbers - - options - - ordered-collections - - orders - - parallel - - parsing - - partial - - posix-types - - prelude - - profunctor - - profunctor-lenses - - psci-support - - quickcheck - - quickcheck-laws - - random - - record - - record-studio - - refs - - registry-foreign - - registry-lib - - routing-duplex - - run - - safe-coerce - - st - - strings - - tailrec - - these - - transformers - - tuples - - type-equality - - typelevel-prelude - - unfoldable - - unicode - - unsafe-coerce - - unsafe-reference - - untagged-union - - uuidv4 - - variant - - web-dom - - web-events - - web-file - - web-streams - test: - dependencies: - - spec - build_plan: - - aff - - ansi - - arrays - - avar - - bifunctors - - catenable-lists - - const - - contravariant - - control - - datetime - - distributive - - effect - - either - - enums - - exceptions - - exists - - foldable-traversable - - fork - - free - - functions - - functors - - gen - - identity - - integers - - invariant - - lazy - - lists - - maybe - - mmorph - - newtype - - nonempty - - now - - numbers - - ordered-collections - - orders - - parallel - - partial - - pipes - - prelude - - profunctor - - refs - - safe-coerce - - spec - - st - - strings - - tailrec - - transformers - - tuples - - type-equality - - unfoldable - - unsafe-coerce + dependencies: + - aff + - ansi + - arrays + - b64 + - bifunctors + - codec + - codec-json + - console + - const + - control + - datetime + - dodo-printer + - dotenv + - effect + - either + - exceptions + - exists + - fetch + - filterable + - foldable-traversable + - foreign + - foreign-object + - formatters + - http-methods + - httpurple + - identity + - integers + - js-date + - js-fetch + - js-promise-aff + - js-uri + - json + - lists + - maybe + - newtype + - node-buffer + - node-child-process + - node-execa + - node-fs + - node-path + - node-process + - now + - nullable + - numbers + - ordered-collections + - orders + - parallel + - parsing + - partial + - prelude + - profunctor + - record + - refs + - registry-foreign + - registry-lib + - run + - safe-coerce + - strings + - these + - transformers + - tuples + - typelevel-prelude + - unicode + - unsafe-coerce + - uuidv4 + - variant + test_dependencies: + - spec registry-foreign: path: foreign - core: - dependencies: - - aff - - aff-promise - - arrays - - b64 - - bifunctors - - codec - - codec-json - - convertable-options - - datetime - - effect - - either - - exceptions - - fetch - - filterable - - foldable-traversable - - foreign-object - - functions - - http-methods - - integers - - js-date - - js-fetch - - json - - maybe - - newtype - - node-buffer - - node-path - - nullable - - ordered-collections - - prelude - - profunctor - - registry-lib - - strings - - transformers - - tuples - - unsafe-coerce - - variant - build_plan: - - aff - - aff-promise - - arraybuffer-types - - arrays - - assert - - b64 - - bifunctors - - catenable-lists - - codec - - codec-json - - console - - const - - contravariant - - control - - convertable-options - - datetime - - distributive - - effect - - either - - encoding - - enums - - exceptions - - exists - - fetch - - filterable - - fixed-points - - foldable-traversable - - foreign - - foreign-object - - formatters - - free - - functions - - functors - - gen - - graphs - - http-methods - - identity - - integers - - invariant - - js-date - - js-fetch - - js-promise - - js-promise-aff - - js-uri - - json - - language-cst-parser - - lazy - - lcg - - lists - - maybe - - media-types - - newtype - - node-buffer - - node-event-emitter - - node-fs - - node-path - - node-streams - - nonempty - - now - - nullable - - numbers - - ordered-collections - - orders - - parallel - - parsing - - partial - - prelude - - profunctor - - profunctor-lenses - - quickcheck - - random - - record - - refs - - registry-lib - - routing-duplex - - safe-coerce - - st - - strings - - tailrec - - transformers - - tuples - - type-equality - - typelevel-prelude - - unfoldable - - unicode - - unsafe-coerce - - variant - - web-dom - - web-events - - web-file - - web-streams - test: - dependencies: - - node-child-process - - node-execa - - node-fs - - node-process - - spec - build_plan: - - aff - - ansi - - arraybuffer-types - - arrays - - avar - - bifunctors - - catenable-lists - - console - - const - - contravariant - - control - - datetime - - distributive - - effect - - either - - enums - - exceptions - - exists - - foldable-traversable - - foreign - - foreign-object - - fork - - free - - functions - - functors - - gen - - identity - - integers - - invariant - - js-date - - js-timers - - lazy - - lists - - maybe - - mmorph - - newtype - - node-buffer - - node-child-process - - node-event-emitter - - node-execa - - node-fs - - node-human-signals - - node-os - - node-path - - node-process - - node-streams - - nonempty - - now - - nullable - - numbers - - ordered-collections - - orders - - parallel - - parsing - - partial - - pipes - - posix-types - - prelude - - profunctor - - record - - refs - - safe-coerce - - spec - - st - - strings - - tailrec - - transformers - - tuples - - type-equality - - typelevel-prelude - - unfoldable - - unicode - - unsafe-coerce - - unsafe-reference + dependencies: + - aff + - aff-promise + - arrays + - b64 + - bifunctors + - codec + - codec-json + - convertable-options + - datetime + - effect + - either + - exceptions + - fetch + - filterable + - foldable-traversable + - foreign-object + - functions + - http-methods + - integers + - js-date + - js-fetch + - json + - maybe + - newtype + - node-buffer + - node-path + - nullable + - ordered-collections + - prelude + - profunctor + - registry-lib + - strings + - transformers + - tuples + - unsafe-coerce + - variant + test_dependencies: + - node-child-process + - node-execa + - node-fs + - node-process + - spec registry-lib: path: lib - core: - dependencies: - - aff - - arrays - - bifunctors - - codec - - codec-json - - control - - datetime - - effect - - either - - exceptions - - foldable-traversable - - foreign-object - - formatters - - functions - - functors - - graphs - - integers - - json - - language-cst-parser - - lists - - maybe - - newtype - - node-buffer - - node-fs - - node-path - - nullable - - ordered-collections - - parsing - - partial - - prelude - - profunctor - - profunctor-lenses - - routing-duplex - - safe-coerce - - st - - strings - - transformers - - tuples - build_plan: - - aff - - arraybuffer-types - - arrays - - assert - - bifunctors - - catenable-lists - - codec - - codec-json - - console - - const - - contravariant - - control - - datetime - - distributive - - effect - - either - - enums - - exceptions - - exists - - fixed-points - - foldable-traversable - - foreign - - foreign-object - - formatters - - free - - functions - - functors - - gen - - graphs - - identity - - integers - - invariant - - js-date - - js-uri - - json - - language-cst-parser - - lazy - - lcg - - lists - - maybe - - newtype - - node-buffer - - node-event-emitter - - node-fs - - node-path - - node-streams - - nonempty - - now - - nullable - - numbers - - ordered-collections - - orders - - parallel - - parsing - - partial - - prelude - - profunctor - - profunctor-lenses - - quickcheck - - random - - record - - refs - - routing-duplex - - safe-coerce - - st - - strings - - tailrec - - transformers - - tuples - - type-equality - - typelevel-prelude - - unfoldable - - unicode - - unsafe-coerce - - variant - test: - dependencies: - - exceptions - - json - - node-child-process - - node-execa - - spec - - unsafe-coerce - build_plan: - - aff - - ansi - - arraybuffer-types - - arrays - - avar - - bifunctors - - catenable-lists - - console - - const - - contravariant - - control - - datetime - - distributive - - effect - - either - - enums - - exceptions - - exists - - foldable-traversable - - foreign - - foreign-object - - fork - - free - - functions - - functors - - gen - - identity - - integers - - invariant - - js-date - - js-timers - - json - - lazy - - lists - - maybe - - mmorph - - newtype - - node-buffer - - node-child-process - - node-event-emitter - - node-execa - - node-fs - - node-human-signals - - node-os - - node-path - - node-process - - node-streams - - nonempty - - now - - nullable - - numbers - - ordered-collections - - orders - - parallel - - parsing - - partial - - pipes - - posix-types - - prelude - - profunctor - - record - - refs - - safe-coerce - - spec - - st - - strings - - tailrec - - transformers - - tuples - - type-equality - - typelevel-prelude - - unfoldable - - unicode - - unsafe-coerce - - unsafe-reference + dependencies: + - aff + - arrays + - bifunctors + - codec + - codec-json + - control + - datetime + - effect + - either + - exceptions + - foldable-traversable + - foreign-object + - formatters + - functions + - functors + - graphs + - integers + - json + - language-cst-parser + - lists + - maybe + - newtype + - node-buffer + - node-fs + - node-path + - nullable + - ordered-collections + - parsing + - partial + - prelude + - profunctor + - profunctor-lenses + - routing-duplex + - safe-coerce + - st + - strings + - transformers + - tuples + test_dependencies: + - exceptions + - json + - node-child-process + - node-execa + - spec + - unsafe-coerce registry-scripts: path: scripts - core: - dependencies: - - aff - - argparse-basic - - arrays - - codec-json - - console - - datetime - - either - - exceptions - - exists - - filterable - - foldable-traversable - - formatters - - json - - lists - - newtype - - node-fs - - node-path - - node-process - - now - - numbers - - ordered-collections - - parsing - - prelude - - profunctor - - refs - - registry-app - - registry-foreign - - registry-lib - - run - - strings - - tuples - - variant - build_plan: - - aff - - aff-promise - - ansi - - argparse-basic - - arraybuffer-types - - arrays - - assert - - avar - - b64 - - bifunctors - - catenable-lists - - codec - - codec-json - - console - - const - - contravariant - - control - - convertable-options - - datetime - - debug - - distributive - - dodo-printer - - dotenv - - effect - - either - - encoding - - enums - - exceptions - - exists - - fetch - - filterable - - fixed-points - - foldable-traversable - - foreign - - foreign-object - - formatters - - free - - functions - - functors - - gen - - graphs - - heterogeneous - - http-methods - - httpurple - - identity - - integers - - invariant - - js-date - - js-fetch - - js-promise - - js-promise-aff - - js-timers - - js-uri - - json - - justifill - - language-cst-parser - - lazy - - lcg - - lists - - literals - - maybe - - media-types - - newtype - - node-buffer - - node-child-process - - node-event-emitter - - node-execa - - node-fs - - node-http - - node-human-signals - - node-net - - node-os - - node-path - - node-process - - node-streams - - node-tls - - node-url - - nonempty - - now - - nullable - - numbers - - options - - ordered-collections - - orders - - parallel - - parsing - - partial - - posix-types - - prelude - - profunctor - - profunctor-lenses - - psci-support - - quickcheck - - quickcheck-laws - - random - - record - - record-studio - - refs - - registry-app - - registry-foreign - - registry-lib - - routing-duplex - - run - - safe-coerce - - st - - strings - - tailrec - - these - - transformers - - tuples - - type-equality - - typelevel-prelude - - unfoldable - - unicode - - unsafe-coerce - - unsafe-reference - - untagged-union - - uuidv4 - - variant - - web-dom - - web-events - - web-file - - web-streams - test: - dependencies: [] - build_plan: [] + dependencies: + - aff + - argparse-basic + - arrays + - codec-json + - console + - datetime + - either + - exceptions + - exists + - filterable + - foldable-traversable + - formatters + - json + - lists + - newtype + - node-fs + - node-path + - node-process + - now + - numbers + - ordered-collections + - parsing + - prelude + - profunctor + - refs + - registry-app + - registry-foreign + - registry-lib + - run + - strings + - tuples + - variant + test_dependencies: [] package_set: - address: - registry: 50.10.0 - compiler: ">=0.15.15 <0.16.0" - content: - abc-parser: 2.0.1 - ace: 9.1.0 - aff: 7.1.0 - aff-bus: 6.0.0 - aff-coroutines: 9.0.0 - aff-promise: 4.0.0 - aff-retry: 2.0.0 - affjax: 13.0.0 - affjax-node: 1.0.0 - affjax-web: 1.0.0 - ansi: 7.0.0 - applicative-phases: 1.0.0 - argonaut: 9.0.0 - argonaut-aeson-generic: 0.4.1 - argonaut-codecs: 9.1.0 - argonaut-core: 7.0.0 - argonaut-generic: 8.0.0 - argonaut-traversals: 10.0.0 - argparse-basic: 2.0.0 - array-builder: 0.1.2 - array-search: 0.5.6 - arraybuffer: 13.2.0 - arraybuffer-builder: 3.1.0 - arraybuffer-types: 3.0.2 - arrays: 7.3.0 - arrays-extra: 0.6.1 - arrays-zipper: 2.0.1 - ask: 1.0.0 - assert: 6.0.0 - assert-multiple: 0.3.4 - avar: 5.0.0 - b64: 0.0.8 - barbies: 1.0.1 - barlow-lens: 0.9.0 - bifunctors: 6.0.0 - bigints: 7.0.1 - bolson: 0.3.9 - bookhound: 0.1.7 - bower-json: 3.0.0 - call-by-name: 4.0.1 - canvas: 6.0.0 - canvas-action: 9.0.0 - cartesian: 1.0.6 - catenable-lists: 7.0.0 - chameleon: 1.0.0 - chameleon-halogen: 1.0.3 - chameleon-react-basic: 1.1.0 - chameleon-styled: 2.5.0 - chameleon-transformers: 1.0.0 - channel: 1.0.0 - checked-exceptions: 3.1.1 - choku: 1.0.1 - classless: 0.1.1 - classless-arbitrary: 0.1.1 - classless-decode-json: 0.1.1 - classless-encode-json: 0.1.3 - classnames: 2.0.0 - codec: 6.1.0 - codec-argonaut: 10.0.0 - codec-json: 1.1.0 - colors: 7.0.1 - concur-core: 0.5.0 - concur-react: 0.5.0 - concurrent-queues: 3.0.0 - console: 6.1.0 - const: 6.0.0 - contravariant: 6.0.0 - control: 6.0.0 - convertable-options: 1.0.0 - coroutines: 7.0.0 - css: 6.0.0 - css-frameworks: 1.0.1 - data-mvc: 0.0.2 - datetime: 6.1.0 - datetime-parsing: 0.2.0 - debug: 6.0.2 - decimals: 7.1.0 - default-values: 1.0.1 - deku: 0.9.23 - deno: 0.0.5 - dissect: 1.0.0 - distributive: 6.0.0 - dom-filereader: 7.0.0 - dom-indexed: 12.0.0 - dom-simple: 0.4.0 - dotenv: 4.0.3 - droplet: 0.6.0 - dts: 1.0.0 - dual-numbers: 1.0.2 - dynamic-buffer: 3.0.1 - echarts-simple: 0.0.1 - effect: 4.0.0 - either: 6.1.0 - elmish: 0.11.3 - elmish-enzyme: 0.1.1 - elmish-hooks: 0.10.0 - elmish-html: 0.8.2 - elmish-testing-library: 0.3.2 - email-validate: 7.0.0 - encoding: 0.0.9 - enums: 6.0.1 - env-names: 0.3.4 - error: 2.0.0 - eta-conversion: 0.3.2 - exceptions: 6.0.0 - exists: 6.0.0 - exitcodes: 4.0.0 - expect-inferred: 3.0.0 - fahrtwind: 2.0.0 - fallback: 0.1.0 - fast-vect: 1.2.0 - fetch: 4.1.0 - fetch-argonaut: 1.0.1 - fetch-core: 5.1.0 - fetch-yoga-json: 1.1.0 - ffi-simple: 0.5.1 - fft-js: 0.1.0 - filterable: 5.0.0 - fix-functor: 0.1.0 - fixed-points: 7.0.0 - fixed-precision: 5.0.0 - flame: 1.3.0 - float32: 2.0.0 - fmt: 0.2.1 - foldable-traversable: 6.0.0 - foldable-traversable-extra: 0.0.6 - foreign: 7.0.0 - foreign-object: 4.1.0 - foreign-readwrite: 3.4.0 - forgetmenot: 0.1.0 - fork: 6.0.0 - form-urlencoded: 7.0.0 - formatters: 7.0.0 - framer-motion: 1.0.1 - free: 7.1.0 - freeap: 7.0.0 - freer-free: 0.0.1 - freet: 7.0.0 - functions: 6.0.0 - functor1: 3.0.0 - functors: 5.0.0 - fuzzy: 0.4.0 - gen: 4.0.0 - generate-values: 1.0.1 - generic-router: 0.0.1 - geojson: 0.0.5 - geometry-plane: 1.0.3 - gojs: 0.1.1 - grain: 3.0.0 - grain-router: 3.0.0 - grain-virtualized: 3.0.0 - graphs: 8.1.0 - group: 4.1.1 - halogen: 7.0.0 - halogen-bootstrap5: 5.3.2 - halogen-canvas: 1.0.0 - halogen-css: 10.0.0 - halogen-echarts-simple: 0.0.4 - halogen-formless: 4.0.3 - halogen-helix: 1.0.0 - halogen-hooks: 0.6.3 - halogen-hooks-extra: 0.9.0 - halogen-infinite-scroll: 1.1.0 - halogen-store: 0.5.4 - halogen-storybook: 2.0.0 - halogen-subscriptions: 2.0.0 - halogen-svg-elems: 8.0.0 - halogen-typewriter: 1.0.4 - halogen-vdom: 8.0.0 - halogen-vdom-string-renderer: 0.5.0 - halogen-xterm: 2.0.0 - heckin: 2.0.1 - heterogeneous: 0.6.0 - homogeneous: 0.4.0 - http-methods: 6.0.0 - httpurple: 4.0.0 - humdrum: 0.0.1 - hyrule: 2.3.8 - identity: 6.0.0 - identy: 4.0.1 - indexed-db: 1.0.0 - indexed-monad: 3.0.0 - int64: 3.0.0 - integers: 6.0.0 - interpolate: 5.0.2 - intersection-observer: 1.0.1 - invariant: 6.0.0 - jarilo: 1.0.1 - jelly: 0.10.0 - jelly-router: 0.3.0 - jelly-signal: 0.4.0 - jest: 1.0.0 - js-abort-controller: 1.0.0 - js-bigints: 2.2.1 - js-date: 8.0.0 - js-fetch: 0.2.1 - js-fileio: 3.0.0 - js-intl: 1.0.4 - js-iterators: 0.1.1 - js-maps: 0.1.2 - js-promise: 1.0.0 - js-promise-aff: 1.0.0 - js-timers: 6.1.0 - js-uri: 3.1.0 - json: 1.0.0 - json-codecs: 5.0.0 - justifill: 0.5.0 - jwt: 0.0.9 - labeled-data: 0.2.0 - language-cst-parser: 0.14.0 - lazy: 6.0.0 - lazy-joe: 1.0.0 - lcg: 4.0.0 - leibniz: 5.0.0 - leveldb: 1.0.1 - liminal: 1.0.1 - linalg: 6.0.0 - lists: 7.0.0 - literals: 1.0.2 - logging: 3.0.0 - logging-journald: 0.4.0 - lumi-components: 18.0.0 - machines: 7.0.0 - maps-eager: 0.4.1 - marionette: 1.0.0 - marionette-react-basic-hooks: 0.1.1 - marked: 0.1.0 - matrices: 5.0.1 - matryoshka: 1.0.0 - maybe: 6.0.0 - media-types: 6.0.0 - meowclient: 1.0.0 - midi: 4.0.0 - milkis: 9.0.0 - minibench: 4.0.1 - mmorph: 7.0.0 - monad-control: 5.0.0 - monad-logger: 1.3.1 - monad-loops: 0.5.0 - monad-unlift: 1.0.1 - monoid-extras: 0.0.1 - monoidal: 0.16.0 - morello: 0.4.0 - mote: 3.0.0 - motsunabe: 2.0.0 - mvc: 0.0.1 - mysql: 6.0.1 - n3: 0.1.0 - nano-id: 1.1.0 - nanoid: 0.1.0 - naturals: 3.0.0 - nested-functor: 0.2.1 - newtype: 5.0.0 - nextjs: 0.1.1 - nextui: 0.2.0 - node-buffer: 9.0.0 - node-child-process: 11.1.0 - node-event-emitter: 3.0.0 - node-execa: 5.0.0 - node-fs: 9.1.0 - node-glob-basic: 1.3.0 - node-http: 9.1.0 - node-http2: 1.1.1 - node-human-signals: 1.0.0 - node-net: 5.1.0 - node-os: 5.1.0 - node-path: 5.0.0 - node-process: 11.2.0 - node-readline: 8.1.0 - node-sqlite3: 8.0.0 - node-streams: 9.0.0 - node-tls: 0.3.1 - node-url: 7.0.1 - node-zlib: 0.4.0 - nonempty: 7.0.0 - now: 6.0.0 - npm-package-json: 2.0.0 - nullable: 6.0.0 - numberfield: 0.1.0 - numbers: 9.0.1 - oak: 3.1.1 - oak-debug: 1.2.2 - object-maps: 0.3.0 - ocarina: 1.5.4 - open-folds: 6.3.0 - open-memoize: 6.1.0 - open-pairing: 6.1.0 - options: 7.0.0 - optparse: 5.0.1 - ordered-collections: 3.2.0 - ordered-set: 0.4.0 - orders: 6.0.0 - owoify: 1.2.0 - pairs: 9.0.1 - parallel: 7.0.0 - parsing: 10.2.0 - parsing-dataview: 3.2.4 - partial: 4.0.0 - pathy: 9.0.0 - pha: 0.13.0 - phaser: 0.7.0 - phylio: 1.1.2 - pipes: 8.0.0 - pirates-charm: 0.0.1 - pmock: 0.9.0 - point-free: 1.0.0 - pointed-list: 0.5.1 - polymorphic-vectors: 4.0.0 - posix-types: 6.0.0 - postgresql: 1.3.0 - precise: 6.0.0 - precise-datetime: 7.0.0 - prelude: 6.0.1 - prettier-printer: 3.0.0 - profunctor: 6.0.1 - profunctor-lenses: 8.0.0 - protobuf: 4.3.0 - psa-utils: 8.0.0 - psci-support: 6.0.0 - punycode: 1.0.0 - qualified-do: 2.2.0 - quantities: 12.2.0 - quickcheck: 8.0.1 - quickcheck-combinators: 0.1.3 - quickcheck-laws: 7.0.0 - quickcheck-utf8: 0.0.0 - random: 6.0.0 - rationals: 6.0.0 - rdf: 0.1.0 - react: 11.0.0 - react-aria: 0.2.0 - react-basic: 17.0.0 - react-basic-classic: 3.0.0 - react-basic-dnd: 10.1.0 - react-basic-dom: 6.1.0 - react-basic-emotion: 7.1.0 - react-basic-hooks: 8.2.0 - react-basic-storybook: 2.0.0 - react-dom: 8.0.0 - react-halo: 3.0.0 - react-icons: 1.1.5 - react-markdown: 0.1.0 - react-testing-library: 4.0.1 - react-virtuoso: 1.0.0 - reactix: 0.6.0 - read: 1.0.1 - recharts: 1.1.0 - record: 4.0.0 - record-extra: 5.0.1 - record-ptional-fields: 0.1.2 - record-studio: 1.0.4 - refs: 6.0.0 - remotedata: 5.0.1 - resize-observer: 1.0.0 - resource: 2.0.1 - resourcet: 1.0.0 - result: 1.0.3 - return: 0.2.0 - ring-modules: 5.0.1 - rito: 0.3.4 - rough-notation: 1.0.2 - routing: 11.0.0 - routing-duplex: 0.7.0 - run: 5.0.0 - safe-coerce: 2.0.0 - safely: 4.0.1 - school-of-music: 1.3.0 - selection-foldable: 0.2.0 - selective-functors: 1.0.1 - semirings: 7.0.0 - signal: 13.0.0 - simple-emitter: 3.0.1 - simple-i18n: 2.0.1 - simple-json: 9.0.0 - simple-json-generics: 0.2.1 - simple-ulid: 3.0.0 - sized-matrices: 1.0.0 - sized-vectors: 5.0.2 - slug: 3.0.8 - small-ffi: 4.0.1 - soundfonts: 4.1.0 - sparse-matrices: 1.3.0 - sparse-polynomials: 2.0.5 - spec: 7.6.0 - spec-mocha: 5.1.0 - spec-quickcheck: 5.0.0 - splitmix: 2.1.0 - ssrs: 1.0.0 - st: 6.2.0 - statistics: 0.3.2 - strictlypositiveint: 1.0.1 - string-parsers: 8.0.0 - strings: 6.0.1 - strings-extra: 4.0.0 - stringutils: 0.0.12 - substitute: 0.2.3 - supply: 0.2.0 - svg-parser: 3.0.0 - systemd-journald: 0.3.0 - tagged: 4.0.2 - tailrec: 6.1.0 - tecton: 0.2.1 - tecton-halogen: 0.2.0 - test-unit: 17.0.0 - thermite: 6.3.1 - thermite-dom: 0.3.1 - these: 6.0.0 - toestand: 0.9.0 - transformation-matrix: 1.0.1 - transformers: 6.0.0 - tree-rose: 4.0.2 - ts-bridge: 4.0.0 - tuples: 7.0.0 - two-or-more: 1.0.0 - type-equality: 4.0.1 - typedenv: 2.0.1 - typelevel: 6.0.0 - typelevel-lists: 2.1.0 - typelevel-peano: 1.0.1 - typelevel-prelude: 7.0.0 - typelevel-regex: 0.0.3 - typelevel-rows: 0.1.0 - typisch: 0.4.0 - uint: 7.0.0 - ulid: 3.0.1 - uncurried-transformers: 1.1.0 - undefined: 2.0.0 - undefined-is-not-a-problem: 1.1.0 - unfoldable: 6.0.0 - unicode: 6.0.0 - unique: 0.6.1 - unlift: 1.0.1 - unordered-collections: 3.1.0 - unsafe-coerce: 6.0.0 - unsafe-reference: 5.0.0 - untagged-to-tagged: 0.1.4 - untagged-union: 1.0.0 - uri: 9.0.0 - uuid: 9.0.0 - uuidv4: 1.0.0 - validation: 6.0.0 - variant: 8.0.0 - variant-encodings: 2.0.0 - vectorfield: 1.0.1 - vectors: 2.1.0 - versions: 7.0.0 - visx: 0.0.2 - web-clipboard: 5.0.0 - web-cssom: 2.0.0 - web-cssom-view: 0.1.0 - web-dom: 6.0.0 - web-dom-parser: 8.0.0 - web-dom-xpath: 3.0.0 - web-encoding: 3.0.0 - web-events: 4.0.0 - web-fetch: 4.0.1 - web-file: 4.0.0 - web-geometry: 0.1.0 - web-html: 4.1.0 - web-pointerevents: 2.0.0 - web-proletarian: 1.0.0 - web-promise: 3.2.0 - web-resize-observer: 2.1.0 - web-router: 1.0.0 - web-socket: 4.0.0 - web-storage: 5.0.0 - web-streams: 4.0.0 - web-touchevents: 4.0.0 - web-uievents: 5.0.0 - web-url: 2.0.0 - web-workers: 1.1.0 - web-xhr: 5.0.1 - webextension-polyfill: 0.1.0 - webgpu: 0.0.1 - which: 2.0.0 - xterm: 1.0.0 - yoga-fetch: 1.0.1 - yoga-json: 5.1.0 - yoga-om: 0.1.0 - yoga-postgres: 6.0.0 - yoga-tree: 1.0.0 - z3: 0.0.2 - zipperarray: 2.0.0 + registry: 50.10.0 extra_packages: codec-json: 1.2.0 dodo-printer: diff --git a/spago.yaml b/spago.yaml index d079d3e15..20f1ce205 100644 --- a/spago.yaml +++ b/spago.yaml @@ -1,7 +1,8 @@ workspace: - packageSet: + lock: true + package_set: registry: 50.10.0 - extraPackages: + extra_packages: codec-json: 1.2.0 dodo-printer: repo: https://github.com/natefaubion/purescript-dodo-printer.git From 9792f52b7e17e92ba314708edb1a49644b9cba0e Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 18:15:40 +0300 Subject: [PATCH 5/8] Rename publicToOwner Co-authored-by: Thomas Honeyman --- lib/src/SSH.purs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/SSH.purs b/lib/src/SSH.purs index 0c5677324..2ebd66b90 100644 --- a/lib/src/SSH.purs +++ b/lib/src/SSH.purs @@ -6,7 +6,7 @@ module Registry.SSH , Signature(..) , parsePublicKey , parsePrivateKey - , publicToOwner + , publicKeyToOwner , sign , verify ) where From bcc2960b1d933e6ee4132d51aa2297bfb63143e4 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 18:20:28 +0300 Subject: [PATCH 6/8] Use do Co-authored-by: Thomas Honeyman --- lib/src/SSH.purs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/src/SSH.purs b/lib/src/SSH.purs index 2ebd66b90..f91435dda 100644 --- a/lib/src/SSH.purs +++ b/lib/src/SSH.purs @@ -104,8 +104,6 @@ foreign import equalsImpl :: Fn2 ParsedKey ParsedKey Boolean foreign import publicToOwnerImpl :: Fn1 PublicKey { keytype :: String, public :: String, id :: Nullable String } publicToOwner :: PublicKey -> Owner -publicToOwner key = - let - { id: nullableId, keytype, public } = runFn1 publicToOwnerImpl key - in - Owner { keytype, public, id: Nullable.toMaybe nullableId } +publicToOwner key = do + let { id: nullableId, keytype, public } = runFn1 publicToOwnerImpl key + Owner { keytype, public, id: Nullable.toMaybe nullableId } From fc3069b91560b5713463112377c2fbf060ef2425 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 18:26:49 +0300 Subject: [PATCH 7/8] Review feedback --- lib/src/SSH.purs | 5 ++--- lib/test/Registry/SSH.purs | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/src/SSH.purs b/lib/src/SSH.purs index f91435dda..8576f73ce 100644 --- a/lib/src/SSH.purs +++ b/lib/src/SSH.purs @@ -54,7 +54,6 @@ printParsePrivateKeyError = case _ of RequiresPassphrase -> "Encrypted private key requires a passphrase" OtherParseError message -> message --- | Parse a password-protected private SSH key parsePrivateKey :: { key :: String, passphrase :: Maybe String } -> Either ParsePrivateKeyError PrivateKey parsePrivateKey { key, passphrase } = case runFn4 parseKeyImpl (Left <<< Exception.message) Right key (Nullable.toNullable passphrase) of @@ -103,7 +102,7 @@ foreign import equalsImpl :: Fn2 ParsedKey ParsedKey Boolean foreign import publicToOwnerImpl :: Fn1 PublicKey { keytype :: String, public :: String, id :: Nullable String } -publicToOwner :: PublicKey -> Owner -publicToOwner key = do +publicKeyToOwner :: PublicKey -> Owner +publicKeyToOwner key = do let { id: nullableId, keytype, public } = runFn1 publicToOwnerImpl key Owner { keytype, public, id: Nullable.toMaybe nullableId } diff --git a/lib/test/Registry/SSH.purs b/lib/test/Registry/SSH.purs index 800d1d187..c873c3047 100644 --- a/lib/test/Registry/SSH.purs +++ b/lib/test/Registry/SSH.purs @@ -26,7 +26,7 @@ spec = do Spec.it "Parses a password-protected RSA private key" do case SSH.parsePrivateKey { key: id_rsa, passphrase: Nothing } of Left err1@SSH.RequiresPassphrase -> do - SSH.printParsePrivateKeyError err1 `Assert.shouldEqual` "Encrypted private OpenSSH key detected, but no passphrase given" + SSH.printParsePrivateKeyError err1 `Assert.shouldEqual` "Encrypted private key requires a passphrase" case SSH.parsePrivateKey { key: id_rsa, passphrase: Just id_rsa_password } of Left err2 -> Assert.fail $ "Failed to parse id_rsa private key with password: " <> SSH.printParsePrivateKeyError err2 Right _ -> pure unit From 650bae8023c41b5e5be7427bc97a8eb46d33b175 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Thu, 29 Aug 2024 18:29:59 +0300 Subject: [PATCH 8/8] Review feedback --- app/src/App/Auth.purs | 2 +- lib/src/SSH.purs | 12 ++++++------ lib/test/Registry/SSH.purs | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/App/Auth.purs b/app/src/App/Auth.purs index 4f285129d..c8647304f 100644 --- a/app/src/App/Auth.purs +++ b/app/src/App/Auth.purs @@ -33,5 +33,5 @@ type SignAuthenticated = signPayload :: SignAuthenticated -> Either String SSH.Signature signPayload { privateKey, rawPayload } = do - private <- lmap SSH.printParsePrivateKeyError $ SSH.parsePrivateKey { key: privateKey, passphrase: Nothing } + private <- lmap SSH.printPrivateKeyParseError $ SSH.parsePrivateKey { key: privateKey, passphrase: Nothing } pure $ SSH.sign private rawPayload diff --git a/lib/src/SSH.purs b/lib/src/SSH.purs index 8576f73ce..9a922f4f1 100644 --- a/lib/src/SSH.purs +++ b/lib/src/SSH.purs @@ -1,8 +1,8 @@ module Registry.SSH ( PublicKey , PrivateKey - , ParsePrivateKeyError(..) - , printParsePrivateKeyError + , PrivateKeyParseError(..) + , printPrivateKeyParseError , Signature(..) , parsePublicKey , parsePrivateKey @@ -43,18 +43,18 @@ foreign import parseKeyImpl :: forall r. Fn4 (Exception.Error -> r) (ParsedKey - parse :: String -> Either String ParsedKey parse buf = runFn4 parseKeyImpl (Left <<< Exception.message) Right buf null -data ParsePrivateKeyError +data PrivateKeyParseError = GotPublicKeyInstead String | RequiresPassphrase | OtherParseError String -printParsePrivateKeyError :: ParsePrivateKeyError -> String -printParsePrivateKeyError = case _ of +printPrivateKeyParseError :: PrivateKeyParseError -> String +printPrivateKeyParseError = case _ of GotPublicKeyInstead keyType' -> "Expected private key, but got public key of type " <> keyType' RequiresPassphrase -> "Encrypted private key requires a passphrase" OtherParseError message -> message -parsePrivateKey :: { key :: String, passphrase :: Maybe String } -> Either ParsePrivateKeyError PrivateKey +parsePrivateKey :: { key :: String, passphrase :: Maybe String } -> Either PrivateKeyParseError PrivateKey parsePrivateKey { key, passphrase } = case runFn4 parseKeyImpl (Left <<< Exception.message) Right key (Nullable.toNullable passphrase) of Right parsed | not (isPrivateKey parsed) -> Left $ GotPublicKeyInstead $ keyType parsed diff --git a/lib/test/Registry/SSH.purs b/lib/test/Registry/SSH.purs index c873c3047..26ac33799 100644 --- a/lib/test/Registry/SSH.purs +++ b/lib/test/Registry/SSH.purs @@ -15,7 +15,7 @@ spec :: Spec.Spec Unit spec = do Spec.it "Parses an ED25519 private key" do case SSH.parsePrivateKey { key: id_ed25519, passphrase: Nothing } of - Left err -> Assert.fail $ "Failed to parse ed_25519 private key: " <> SSH.printParsePrivateKeyError err + Left err -> Assert.fail $ "Failed to parse ed_25519 private key: " <> SSH.printPrivateKeyParseError err Right _ -> pure unit Spec.it "Parses an ED25519 public key" do @@ -26,11 +26,11 @@ spec = do Spec.it "Parses a password-protected RSA private key" do case SSH.parsePrivateKey { key: id_rsa, passphrase: Nothing } of Left err1@SSH.RequiresPassphrase -> do - SSH.printParsePrivateKeyError err1 `Assert.shouldEqual` "Encrypted private key requires a passphrase" + SSH.printPrivateKeyParseError err1 `Assert.shouldEqual` "Encrypted private key requires a passphrase" case SSH.parsePrivateKey { key: id_rsa, passphrase: Just id_rsa_password } of - Left err2 -> Assert.fail $ "Failed to parse id_rsa private key with password: " <> SSH.printParsePrivateKeyError err2 + Left err2 -> Assert.fail $ "Failed to parse id_rsa private key with password: " <> SSH.printPrivateKeyParseError err2 Right _ -> pure unit - Left otherError -> Assert.fail $ "Should have required a passphrase, but got: " <> SSH.printParsePrivateKeyError otherError + Left otherError -> Assert.fail $ "Should have required a passphrase, but got: " <> SSH.printPrivateKeyParseError otherError Right _ -> Assert.fail $ "Expected parse failure, but got key." Spec.it "Parses an RSA public key" do