From 78219438ac7a0f3fd2eb54dd66c9f709fb6b0eb1 Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Tue, 3 Oct 2023 22:04:00 -0500 Subject: [PATCH 1/6] fix: Node.URL.URLSearchParams keys & values return undefined --- src/Node/URL/URLSearchParams.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Node/URL/URLSearchParams.js b/src/Node/URL/URLSearchParams.js index 3c185cd..55aa984 100644 --- a/src/Node/URL/URLSearchParams.js +++ b/src/Node/URL/URLSearchParams.js @@ -21,8 +21,8 @@ export const entriesImpl = (params, tuple) => { return arr; }; export const keysImpl = (params) => { - Array.from(params.keys()); + return Array.from(params.keys()); }; export const valuesImpl = (params) => { - Array.from(params.values()); + return Array.from(params.values()); }; From c9cc7c79dbf44c08cdb6c5e5523c7c1f319e6f05 Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Tue, 3 Oct 2023 22:06:44 -0500 Subject: [PATCH 2/6] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3128f8e..014e038 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Breaking changes: New features: Bugfixes: + - `URLSearchParams.keys` and `.values` returned undefined due to a bug in the foreign code (#22 by @cakekindel) Other improvements: - Rename `uneffectfulHref` to `hrefPure` (used in `Show` instance) (#21 by @JordanMartinez) From bf0160314b1c87d311a12c5d9b8ce97018ce6c79 Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Tue, 3 Oct 2023 22:24:59 -0500 Subject: [PATCH 3/6] test: add tests --- bower.json | 3 ++- test/Main.purs | 41 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/bower.json b/bower.json index 4470a66..197975b 100644 --- a/bower.json +++ b/bower.json @@ -19,6 +19,7 @@ "purescript-tuples": "^7.0.0" }, "devDependencies": { - "purescript-assert": "^6.0.0" + "purescript-assert": "^6.0.0", + "purescript-ordered-collections": "^3.1.1" } } diff --git a/test/Main.purs b/test/Main.purs index dd259bb..d63e2a3 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -4,11 +4,44 @@ import Prelude import Effect (Effect) import Node.URL as URL +import Node.URL.URLSearchParams as URL.Search +import Foreign (unsafeReadTagged) +import Data.Bifunctor (lmap) +import Control.Monad.Except (runExcept) +import Control.Monad.Error.Class (liftEither) +import Effect.Exception (error) +import Data.Traversable (for) +import Data.Tuple (Tuple(..)) +import Data.Map as Map import Test.Assert (assertEqual) main ∷ Effect Unit main = do - let urlStr = "http://example.com/" - url <- URL.new urlStr - urlStr' <- URL.format url - assertEqual { expected: urlStr, actual: urlStr' } + do + -- Simple roundtrip + let urlStr = "http://example.com/" + url <- URL.new urlStr + urlStr' <- URL.format url + assertEqual { expected: urlStr, actual: urlStr' } + + do + -- URLSearchParams + let urlStr = "http://example.com/?k&v=a&k&v=b" + url <- URL.new urlStr + search <- URL.searchParams url + keys <- URL.Search.keys search + valuesForeign <- URL.Search.values search + values <- for valuesForeign $ liftEither <<< lmap (error <<< show) <<< runExcept <<< unsafeReadTagged "String" + + map <- Map.fromFoldable <$> for keys \k -> do + vs <- URL.Search.getAll k search + pure $ Tuple k vs + + assertEqual { actual: keys, expected: ["k", "v", "k", "v"] } + assertEqual { actual: values, expected: ["", "a", "", "b"] } + assertEqual + { actual: map + , expected: Map.fromFoldable [ Tuple "k" ["", ""] + , Tuple "v" ["a", "b"] + ] + } From 2dea74c63ee6d514e637661a3d8959eab5b5f4e0 Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Tue, 3 Oct 2023 22:26:25 -0500 Subject: [PATCH 4/6] test: formatting --- test/Main.purs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/test/Main.purs b/test/Main.purs index d63e2a3..4dbfa67 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -17,21 +17,29 @@ import Test.Assert (assertEqual) main ∷ Effect Unit main = do + -- Simple roundtrip do - -- Simple roundtrip let urlStr = "http://example.com/" url <- URL.new urlStr urlStr' <- URL.format url assertEqual { expected: urlStr, actual: urlStr' } + -- URLSearchParams do - -- URLSearchParams let urlStr = "http://example.com/?k&v=a&k&v=b" url <- URL.new urlStr search <- URL.searchParams url keys <- URL.Search.keys search valuesForeign <- URL.Search.values search - values <- for valuesForeign $ liftEither <<< lmap (error <<< show) <<< runExcept <<< unsafeReadTagged "String" + + let + getStringOrThrow = + liftEither + <<< lmap (error <<< show) + <<< runExcept + <<< unsafeReadTagged "String" + + values <- for valuesForeign getStringOrThrow map <- Map.fromFoldable <$> for keys \k -> do vs <- URL.Search.getAll k search From b76858d782f889fab8cf93d9b6740c09986ad889 Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Wed, 4 Oct 2023 10:06:16 -0500 Subject: [PATCH 5/6] chore: fmt --- test/Main.purs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/test/Main.purs b/test/Main.purs index 4dbfa67..f66190f 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -35,21 +35,22 @@ main = do let getStringOrThrow = liftEither - <<< lmap (error <<< show) - <<< runExcept - <<< unsafeReadTagged "String" + <<< lmap (error <<< show) + <<< runExcept + <<< unsafeReadTagged "String" values <- for valuesForeign getStringOrThrow map <- Map.fromFoldable <$> for keys \k -> do - vs <- URL.Search.getAll k search - pure $ Tuple k vs + vs <- URL.Search.getAll k search + pure $ Tuple k vs - assertEqual { actual: keys, expected: ["k", "v", "k", "v"] } - assertEqual { actual: values, expected: ["", "a", "", "b"] } + assertEqual { actual: keys, expected: [ "k", "v", "k", "v" ] } + assertEqual { actual: values, expected: [ "", "a", "", "b" ] } assertEqual { actual: map - , expected: Map.fromFoldable [ Tuple "k" ["", ""] - , Tuple "v" ["a", "b"] - ] + , expected: Map.fromFoldable + [ Tuple "k" [ "", "" ] + , Tuple "v" [ "a", "b" ] + ] } From b1ab58ada7b90347134f6fedd315afe7176610b1 Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Wed, 4 Oct 2023 10:07:22 -0500 Subject: [PATCH 6/6] chore: add npm fmt script --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 4ed063e..6c93cdb 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,14 @@ "scripts": { "clean": "rimraf output && rimraf .pulp-cache", "build": "eslint src && pulp build -- --censor-lib --strict", - "test": "pulp test -- --censor-lib --strict" + "test": "pulp test -- --censor-lib --strict", + "fmt": "purs-tidy format-in-place 'src/**/*.purs' 'test/**/*.purs'" }, "devDependencies": { "eslint": "^7.15.0", "pulp": "16.0.0-0", "purescript-psa": "^0.8.2", + "purs-tidy": "^0.10.0", "rimraf": "^3.0.2" } }