Skip to content

Commit 88cb15d

Browse files
committed
feat: update to purescript v0.13.6, to halogen-vdom v6.1.2, replace deprecated package maps with ordered-collections, remove bower, install spago
1 parent 2277c7f commit 88cb15d

File tree

7 files changed

+174
-47
lines changed

7 files changed

+174
-47
lines changed

bower.json

Lines changed: 0 additions & 18 deletions
This file was deleted.

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"private": true,
33
"scripts": {
4-
"clean": "rimraf output && rimraf .pulp-cache",
5-
"build": "pulp build -- --censor-lib --strict"
4+
"clean": "rimraf output && rimraf .spago",
5+
"build": "spago build"
66
},
77
"devDependencies": {
8-
"pulp": "^11.0.0",
9-
"purescript-psa": "^0.5.1",
10-
"purescript": "^0.11.4",
11-
"rimraf": "^2.6.1"
8+
"spago": "^0.14.0",
9+
"purescript-psa": "^0.7.3",
10+
"purescript": "^0.13.6",
11+
"rimraf": "^3.0.2"
1212
}
1313
}

packages.dhall

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
{-
2+
Welcome to your new Dhall package-set!
3+
4+
Below are instructions for how to edit this file for most use
5+
cases, so that you don't need to know Dhall to use it.
6+
7+
## Warning: Don't Move This Top-Level Comment!
8+
9+
Due to how `dhall format` currently works, this comment's
10+
instructions cannot appear near corresponding sections below
11+
because `dhall format` will delete the comment. However,
12+
it will not delete a top-level comment like this one.
13+
14+
## Use Cases
15+
16+
Most will want to do one or both of these options:
17+
1. Override/Patch a package's dependency
18+
2. Add a package not already in the default package set
19+
20+
This file will continue to work whether you use one or both options.
21+
Instructions for each option are explained below.
22+
23+
### Overriding/Patching a package
24+
25+
Purpose:
26+
- Change a package's dependency to a newer/older release than the
27+
default package set's release
28+
- Use your own modified version of some dependency that may
29+
include new API, changed API, removed API by
30+
using your custom git repo of the library rather than
31+
the package set's repo
32+
33+
Syntax:
34+
Replace the overrides' "{=}" (an empty record) with the following idea
35+
The "//" or "⫽" means "merge these two records and
36+
when they have the same value, use the one on the right:"
37+
-------------------------------
38+
let overrides =
39+
{ packageName =
40+
upstream.packageName // { updateEntity1 = "new value", updateEntity2 = "new value" }
41+
, packageName =
42+
upstream.packageName // { version = "v4.0.0" }
43+
, packageName =
44+
upstream.packageName // { repo = "https://www.example.com/path/to/new/repo.git" }
45+
}
46+
-------------------------------
47+
48+
Example:
49+
-------------------------------
50+
let overrides =
51+
{ halogen =
52+
upstream.halogen // { version = "master" }
53+
, halogen-vdom =
54+
upstream.halogen-vdom // { version = "v4.0.0" }
55+
}
56+
-------------------------------
57+
58+
### Additions
59+
60+
Purpose:
61+
- Add packages that aren't already included in the default package set
62+
63+
Syntax:
64+
Replace the additions' "{=}" (an empty record) with the following idea:
65+
-------------------------------
66+
let additions =
67+
{ package-name =
68+
{ dependencies =
69+
[ "dependency1"
70+
, "dependency2"
71+
]
72+
, repo =
73+
"https://example.com/path/to/git/repo.git"
74+
, version =
75+
"tag ('v4.0.0') or branch ('master')"
76+
}
77+
, package-name =
78+
{ dependencies =
79+
[ "dependency1"
80+
, "dependency2"
81+
]
82+
, repo =
83+
"https://example.com/path/to/git/repo.git"
84+
, version =
85+
"tag ('v4.0.0') or branch ('master')"
86+
}
87+
, etc.
88+
}
89+
-------------------------------
90+
91+
Example:
92+
-------------------------------
93+
let additions =
94+
{ benchotron =
95+
{ dependencies =
96+
[ "arrays"
97+
, "exists"
98+
, "profunctor"
99+
, "strings"
100+
, "quickcheck"
101+
, "lcg"
102+
, "transformers"
103+
, "foldable-traversable"
104+
, "exceptions"
105+
, "node-fs"
106+
, "node-buffer"
107+
, "node-readline"
108+
, "datetime"
109+
, "now"
110+
]
111+
, repo =
112+
"https://github.com/hdgarrood/purescript-benchotron.git"
113+
, version =
114+
"v7.0.0"
115+
}
116+
}
117+
-------------------------------
118+
-}
119+
120+
121+
let upstream =
122+
https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200309/packages.dhall sha256:9221987b4e7ea99ccd0efbe056f7bebc872cd92e0058efe5baa181d73359e7b3
123+
124+
let overrides = {=}
125+
126+
let additions = {=}
127+
128+
in upstream // overrides // additions

spago.dhall

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{-
2+
Welcome to a Spago project!
3+
You can edit this file as you like.
4+
-}
5+
{ name = "halogen-vdom-string-renderer"
6+
, dependencies = [ "console", "effect", "psci-support", "halogen-vdom", "ordered-collections", "foreign" ]
7+
, packages = ./packages.dhall
8+
, sources = [ "src/**/*.purs", "test/**/*.purs" ]
9+
}

src/Halogen/VDom/DOM/StringRenderer.purs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import Prelude
44
import Halogen.VDom (VDom, ElemName(..))
55
import Halogen.VDom.DOM.Prop (Prop(..), PropValue)
66
import Data.Array as A
7-
import Data.Foreign (toForeign, typeOf)
7+
import Foreign (unsafeToForeign, typeOf)
88
import Data.Maybe (Maybe(..))
99
import Data.String as S
10-
import Data.StrMap as SM
11-
import Data.Tuple (Tuple(..))
10+
import Data.Set as Set
1211
import Halogen.VDom.StringRenderer as VSR
1312
import Halogen.VDom.StringRenderer.Util (escape)
1413
import Unsafe.Coerce (unsafeCoerce)
@@ -18,7 +17,7 @@ render renderWidget = VSR.render getTagType renderProps renderWidget
1817

1918
getTagType ElemName VSR.TagType
2019
getTagType (ElemName en)
21-
| SM.member en voidElements = VSR.SelfClosingTag
20+
| Set.member en voidElements = VSR.SelfClosingTag
2221
| otherwise = VSR.NormalTag
2322

2423
renderProps i. Array (Prop i) String
@@ -41,19 +40,17 @@ propNameToAttrName = case _ of
4140
p → p
4241

4342
renderProperty String PropValue Maybe String
44-
renderProperty name prop = case typeOf (toForeign prop) of
43+
renderProperty name prop = case typeOf (unsafeToForeign prop) of
4544
"string" → renderAttr name' $ (unsafeCoerce PropValue String) prop
4645
"number" → renderAttr name' $ show ((unsafeCoerce PropValue String) prop)
4746
"boolean"Just $ escape name'
4847
_ → Nothing
4948
where
5049
name' = propNameToAttrName name
5150

52-
voidElements :: SM.StrMap Unit
51+
voidElements :: Set.Set String
5352
voidElements =
54-
SM.fromFoldable
55-
$ map (flip Tuple unit)
56-
$ names
53+
Set.fromFoldable names
5754
where
5855
names =
5956
[ "area"

src/Halogen/VDom/StringRenderer.purs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ module Halogen.VDom.StringRenderer
66
import Prelude
77

88
import Data.Array as A
9-
import Data.Maybe (maybe)
9+
import Data.Maybe (Maybe, maybe)
1010
import Data.String as S
1111
import Data.Tuple (snd)
1212

13-
import Halogen.VDom (VDom(..), ElemSpec(..), ElemName(..), Namespace(..), runGraft)
13+
import Halogen.VDom (VDom(..), ElemName(..), Namespace(..), runGraft)
1414
import Halogen.VDom.StringRenderer.Util (escape)
1515

1616
-- | Type used to determine whether an element can be rendered as self-closing
@@ -25,29 +25,29 @@ derive instance ordTagType ∷ Ord TagType
2525
-- | Renders a `VDom` tree to a string using the specified tag type scheme,
2626
-- | attribute renderer, and widget renderer.
2727
render
28-
a w
28+
attrs widget
2929
. (ElemName TagType)
30-
(a String)
31-
(w String)
32-
VDom a w
30+
(attrs String)
31+
(widget String)
32+
VDom attrs widget
3333
String
3434
render getTagType renderAttrs renderWidget = go
3535
where
36-
go VDom a w String
36+
go VDom attrs widget String
3737
go = case _ of
3838
Text s → escape s
39-
Elem elem children → renderElement elem children
40-
Keyed elem kchildren → renderElement elem (map snd kchildren)
41-
Widget w → renderWidget w
39+
Elem namespace elementName attrs children → renderElement namespace elementName attrs children
40+
Keyed namespace elementName attrs kchildren → renderElement namespace elementName attrs (map snd kchildren)
41+
Widget widget → renderWidget widget
4242
Grafted g → go (runGraft g)
4343

44-
renderElement ElemSpec a Array (VDom a w) String
45-
renderElement (ElemSpec mns en@(ElemName name) attrs) children =
44+
renderElement (Maybe Namespace) -> ElemName -> attrs Array (VDom attrs widget) String
45+
renderElement maybeNamespace elemName@(ElemName name) attrs children =
4646
let
4747
as = renderAttrs attrs
48-
as' = maybe as (\(Namespace ns) -> "xmlns=\"" <> escape ns <> "\"" <> if S.null as then "" else " " <> as) mns
48+
as' = maybe as (\(Namespace ns) -> "xmlns=\"" <> escape ns <> "\"" <> if S.null as then "" else " " <> as) maybeNamespace
4949
in
5050
"<" <> name <> (if S.null as then "" else " ") <> as <>
5151
if A.null children
52-
then if getTagType en == SelfClosingTag then "/>" else "></" <> name <> ">"
52+
then if getTagType elemName == SelfClosingTag then "/>" else "></" <> name <> ">"
5353
else ">" <> S.joinWith "" (map go children) <> "</" <> name <> ">"

test/Main.purs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Test.Main where
2+
3+
import Prelude
4+
5+
import Effect (Effect)
6+
import Effect.Class.Console (log)
7+
8+
main :: Effect Unit
9+
main = do
10+
log "🍝"
11+
log "You should add some tests."

0 commit comments

Comments
 (0)