Skip to content

Commit fd8c652

Browse files
committed
Merge pull request #1 from SimonRichardson/meltdown
Updating to purescript 0.7.0
2 parents dd41ddb + 28aaa10 commit fd8c652

18 files changed

+152
-160
lines changed

.travis.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
language: node_js
2+
sudo: false
23
node_js:
34
- 0.10
45
env:
5-
- TAG=v0.6.9.3
6+
- TAG=v0.7.0 PATH=$HOME/bin:$PATH
67
install:
8+
- mkdir $HOME/bin
79
- wget -O $HOME/purescript.tar.gz https://github.com/purescript/purescript/releases/download/$TAG/linux64.tar.gz
8-
- sudo tar zxvf $HOME/purescript.tar.gz -C /usr/local/bin purescript/psc{,i,-docs,-make} --strip-components=1
9-
- sudo chmod a+x /usr/local/bin/psc{,i,-docs,-make}
10+
- tar zxvf $HOME/purescript.tar.gz -C $HOME/bin purescript/psc{,i,-docs,-bundle,-publish} --strip-components=1
11+
- chmod a+x $HOME/bin/psc{,i,-docs,-bundle,-publish}
1012
- npm install bower gulp -g
1113
- npm install && bower install
1214
script:
13-
- gulp
15+
- gulp

bower.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
"package.json"
1818
],
1919
"dependencies": {
20-
"purescript-string-parsers": "~0.4.1",
21-
"purescript-pathy": "~0.1.3",
22-
"purescript-maps": "~0.3.4",
23-
"purescript-integers": "~0.1.0",
24-
"purescript-globals": "~0.1.6"
20+
"purescript-string-parsers": "^0.5.0",
21+
"purescript-pathy": "^0.2.0",
22+
"purescript-arrays": "^0.4.0",
23+
"purescript-lists": "^0.7.0",
24+
"purescript-maps": "^0.4.0",
25+
"purescript-integers": "^0.2.0",
26+
"purescript-globals": "^0.2.0"
2527
}
2628
}

gulpfile.js

Lines changed: 23 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,34 @@
1+
/* jshint node: true */
12
"use strict";
23

3-
var gulp = require("gulp");
4-
var plumber = require("gulp-plumber");
5-
var purescript = require("gulp-purescript");
6-
var jsvalidate = require("gulp-jsvalidate");
7-
var run = require("gulp-run");
4+
var gulp = require("gulp"),
5+
purescript = require("gulp-purescript"),
6+
run = require("gulp-run"),
87

9-
var paths = [
10-
"src/**/*.purs",
11-
"bower_components/purescript-*/src/**/*.purs",
12-
"test/**/*.purs"
13-
];
8+
sources = [
9+
"src/**/*.purs",
10+
"bower_components/purescript-*/src/**/*.purs",
11+
"test/**/*.purs"
12+
],
13+
14+
foreigns = [
15+
"src/**/*.js",
16+
"bower_components/purescript-*/src/**/*.js",
17+
"test/**/*.js"
18+
];
1419

1520
gulp.task("make", function() {
16-
return gulp.src(paths)
17-
.pipe(plumber())
18-
.pipe(purescript.pscMake());
21+
return purescript.psc({ src: sources, ffi: foreigns });
1922
});
2023

21-
gulp.task("jsvalidate", ["make"], function () {
22-
return gulp.src("output/**/*.js")
23-
.pipe(plumber())
24-
.pipe(jsvalidate());
24+
gulp.task("test", ["make"], function() {
25+
return purescript.pscBundle({ src: "output/**/*.js", main: "Test.Main" })
26+
.pipe(run("node"));
2527
});
2628

27-
var docTasks = [];
28-
29-
var docTask = function(name) {
30-
var taskName = "docs-" + name.toLowerCase();
31-
gulp.task(taskName, function () {
32-
return gulp.src("src/" + name.replace(/\./g, "/") + ".purs")
33-
.pipe(plumber())
34-
.pipe(purescript.pscDocs())
35-
.pipe(gulp.dest("docs/" + name + ".md"));
36-
});
37-
docTasks.push(taskName);
38-
};
39-
40-
["Data.URI", "Data.URI.Authority", "Data.URI.Common", "Data.URI.Host",
41-
"Data.URI.Path", "Data.URI.Query", "Data.URI.Scheme", "Data.URI.Types",
42-
"Data.URI.UserInfo"].forEach(docTask);
43-
44-
gulp.task("docs", docTasks);
45-
46-
gulp.task("test", function() {
47-
return gulp.src(paths)
48-
.pipe(plumber())
49-
.pipe(purescript.psc({ main: "Test.Main" }))
50-
.pipe(run("node"));
29+
gulp.task("dotpsci", function () {
30+
return purescript.psci({ src: sources, ffi: foreigns })
31+
.pipe(gulp.dest("."));
5132
});
5233

53-
gulp.task("default", ["jsvalidate", "docs", "test"]);
34+
gulp.task("default", ["test", "dotpsci"]);

package.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
{
2+
"name" : "purescript-uri",
23
"private": true,
34
"devDependencies": {
5+
"ioredis": "1.1.x",
46
"gulp": "^3.8.11",
5-
"gulp-jsvalidate": "^1.0.1",
6-
"gulp-plumber": "^1.0.0",
7-
"gulp-purescript": "^0.3.1",
8-
"gulp-run": "^1.6.7"
7+
"gulp-jscs": "^1.6.0",
8+
"gulp-jshint": "^1.11.2",
9+
"gulp-purescript": "^0.5.0",
10+
"gulp-run": "^1.6.8"
911
}
10-
}
12+
}

src/Data/URI.purs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
module Data.URI where
22

3+
import Prelude
34
import Control.Alt ((<|>))
45
import Control.Apply ((<*), (*>))
56
import Data.Array (catMaybes)
67
import Data.Either (Either(..), either)
78
import Data.Maybe (Maybe(..))
8-
import Data.String (joinWith)
99
import Data.URI.Authority
1010
import Data.URI.Common
1111
import Data.URI.Fragment
@@ -17,6 +17,7 @@ import Data.URI.Query
1717
import Data.URI.Scheme
1818
import Data.URI.Types
1919
import Data.URI.UserInfo
20+
import qualified Data.String as S
2021
import Text.Parsing.StringParser (Parser(), ParseError(), runParser, try)
2122
import Text.Parsing.StringParser.Combinators (optionMaybe)
2223
import Text.Parsing.StringParser.String (string, eof)
@@ -61,22 +62,22 @@ printURIRef = either printURI printRelativeRef
6162

6263
printURI :: URI -> String
6364
printURI (URI s h q f) =
64-
joinWith "" $ catMaybes [ printScheme <$> s
65-
, Just (printHierPart h)
66-
, printQuery <$> q
67-
, ("#" ++ ) <$> f
68-
]
65+
S.joinWith "" $ catMaybes [ printScheme <$> s
66+
, Just (printHierPart h)
67+
, printQuery <$> q
68+
, ("#" ++ ) <$> f
69+
]
6970

7071
printAbsoluteURI :: AbsoluteURI -> String
7172
printAbsoluteURI (AbsoluteURI s h q) =
72-
joinWith "" $ catMaybes [ printScheme <$> s
73-
, Just (printHierPart h)
74-
, printQuery <$> q
75-
]
73+
S.joinWith "" $ catMaybes [ printScheme <$> s
74+
, Just (printHierPart h)
75+
, printQuery <$> q
76+
]
7677

7778
printRelativeRef :: RelativeRef -> String
7879
printRelativeRef (RelativeRef h q f) =
79-
joinWith "" $ catMaybes [ Just (printRelativePart h)
80-
, printQuery <$> q
81-
, ("#" ++ ) <$> f
82-
]
80+
S.joinWith "" $ catMaybes [ Just (printRelativePart h)
81+
, printQuery <$> q
82+
, ("#" ++ ) <$> f
83+
]

src/Data/URI/Authority.purs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
module Data.URI.Authority where
22

3+
import Prelude
34
import Control.Apply ((*>))
45
import Data.Array (catMaybes)
56
import Data.Int (fromNumber, toNumber)
67
import Data.Maybe (Maybe(..), maybe)
7-
import Data.String (joinWith)
88
import Data.Tuple(Tuple(..))
9+
import Data.List (List(..), fromList)
910
import Data.URI.Common
1011
import Data.URI.Host
1112
import Data.URI.Types
1213
import Data.URI.UserInfo
1314
import Global (readInt, isNaN)
15+
import qualified Data.String as S
1416
import Text.Parsing.StringParser (Parser(), fail)
1517
import Text.Parsing.StringParser.Combinators (optionMaybe, sepBy1)
1618
import Text.Parsing.StringParser.String (string)
@@ -20,19 +22,18 @@ parseAuthority = do
2022
ui <- optionMaybe parseUserInfo
2123
hosts <- flip sepBy1 (string ",") $ Tuple <$> parseHost
2224
<*> optionMaybe (string ":" *> parsePort)
23-
return $ Authority ui hosts
25+
return $ Authority ui (fromList hosts)
2426

2527
parsePort :: Parser Port
2628
parsePort = do
27-
s <- rxPat "[0-9]+"
28-
let n = readInt 10 s
29-
if isNaN n && show n == s
30-
then fail "Expected valid port number"
31-
else pure (fromNumber n)
29+
s <- rxPat "[0-9]+"
30+
case fromNumber $ readInt 10 s of
31+
Just x -> pure x
32+
_ -> fail "Expected valid port number"
3233

3334
printAuthority :: Authority -> String
3435
printAuthority (Authority u hs) =
3536
"//" ++ maybe "" (++ "@") u
36-
++ joinWith "," (printHostAndPort <$> hs)
37+
++ S.joinWith "," (printHostAndPort <$> hs)
3738
where
38-
printHostAndPort (Tuple h p) = printHost h ++ maybe "" (\n -> ":" ++ show (toNumber n)) p
39+
printHostAndPort (Tuple h p) = printHost h ++ maybe "" (\n -> ":" ++ show n) p

src/Data/URI/Common.purs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
module Data.URI.Common where
22

3+
import Prelude
34
import Control.Alt ((<|>))
4-
import Control.Monad (replicateM)
5+
import Data.Array (replicateM)
6+
import Data.List (List(..), fromList)
57
import Data.Function (Fn5(), runFn5)
68
import Data.Maybe (Maybe(..))
7-
import Data.String (joinWith, length)
9+
import qualified Data.String as S
810
import Data.URI.Types
911
import Text.Parsing.StringParser (Parser(..), ParseError(..), unParser)
1012
import Text.Parsing.StringParser.String (string)
1113
import qualified Data.String.Regex as Rx
1214

13-
rep :: Number -> Parser String -> Parser String
14-
rep n p = joinWith "" <$> replicateM n p
15+
joinWith :: String -> List String -> String
16+
joinWith x y = S.joinWith x $ fromList y
17+
18+
rep :: Int -> Parser String -> Parser String
19+
rep n p = S.joinWith "" <$> replicateM n p
1520

1621
rxPat :: String -> Parser String
1722
rxPat rx = anyMatch $ Rx.regex rx (Rx.noFlags { ignoreCase = true })
@@ -39,22 +44,10 @@ parseSubDelims = rxPat "[!$&'()*+;=]"
3944

4045
anyMatch :: Rx.Regex -> Parser String
4146
anyMatch rx = Parser \{ str: str, pos: i } fc sc -> case match1From rx i str of
42-
Just m -> sc m { str: str, pos: i + (length m) }
47+
Just m -> sc m { str: str, pos: i + (S.length m) }
4348
Nothing -> fc i (ParseError $ "Expected " ++ show rx)
4449

45-
match1From :: Rx.Regex -> Number -> String -> Maybe String
46-
match1From rx i str = runFn5 match1FromImpl Just Nothing rx i str
47-
48-
foreign import match1FromImpl
49-
"""
50-
function match1FromImpl(just, nothing, rx, i, str) {
51-
var rxStr = rx.toString();
52-
var flagIndex = rxStr.lastIndexOf("/");
53-
var pattern = rxStr.substring(1, flagIndex);
54-
var flags = rxStr.substring(flagIndex + 1);
55-
rx = new RegExp(pattern, flags.indexOf("g") === -1 ? flags + "g" : flags);
56-
rx.lastIndex = i;
57-
var result = rx.exec(str);
58-
return result && result.index === i ? just(result[0]) : nothing;
59-
}
60-
""" :: forall a. Fn5 (a -> Maybe a) (Maybe a) Rx.Regex Number String (Maybe String)
50+
match1From :: Rx.Regex -> Int -> String -> Maybe String
51+
match1From rx i str = runFn5 _match1From Just Nothing rx i str
52+
53+
foreign import _match1From :: forall a. Fn5 (a -> Maybe a) (Maybe a) Rx.Regex Int String (Maybe String)

src/Data/URI/Fragment.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Data.URI.Fragment where
22

3+
import Prelude
34
import Control.Alt ((<|>))
4-
import Data.String (joinWith)
55
import Data.URI.Common
66
import Data.URI.Types
77
import Text.Parsing.StringParser (Parser(), try)

src/Data/URI/HierarchicalPart.purs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
module Data.URI.HierarchicalPart where
22

3+
import Prelude
34
import Control.Alt ((<|>))
45
import Control.Apply ((*>))
56
import Data.Array (catMaybes)
67
import Data.Maybe (Maybe(..))
7-
import Data.String (joinWith)
88
import Data.URI.Authority
99
import Data.URI.Common
1010
import Data.URI.Path
1111
import Data.URI.Types
12+
import qualified Data.String as S
1213
import Text.Parsing.StringParser (Parser())
1314
import Text.Parsing.StringParser.Combinators (optionMaybe)
1415
import Text.Parsing.StringParser.String (string)
@@ -21,6 +22,6 @@ parseHierarchicalPart = (HierarchicalPart <$> optionMaybe (string "//" *> parseA
2122

2223
printHierPart :: HierarchicalPart -> String
2324
printHierPart (HierarchicalPart a p) =
24-
joinWith "" $ catMaybes [ printAuthority <$> a
25-
, printPath <$> p
26-
]
25+
S.joinWith "" $ catMaybes [ printAuthority <$> a
26+
, printPath <$> p
27+
]

src/Data/URI/Host.purs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
module Data.URI.Host where
22

3+
import Prelude
34
import Control.Alt ((<|>))
45
import Control.Apply ((*>), (<*))
56
import Data.Array (length)
6-
import Data.String (joinWith)
7+
import Data.List (fromList)
78
import Data.URI.Common
89
import Data.URI.Types
10+
import qualified Data.String as S
911
import Text.Parsing.StringParser (Parser(), try)
1012
import Text.Parsing.StringParser.Combinators ((<?>), many1, sepBy1)
1113
import Text.Parsing.StringParser.String (string)
@@ -22,7 +24,7 @@ parseIPv4Address :: Parser Host
2224
parseIPv4Address = IPv4Address <$> rxPat pattern <?> "IPv4 address"
2325
where
2426
pattern :: String
25-
pattern = joinWith "" ["(", octet, "\\.", octet, "\\.", octet, "\\.", octet, ")"]
27+
pattern = S.joinWith "" ["(", octet, "\\.", octet, "\\.", octet, "\\.", octet, ")"]
2628
octet :: String
2729
octet = "(1[0-9]{2}|[1-9][0-9]|[0-9]|2[0-4][0-9]|25[0-5])"
2830

0 commit comments

Comments
 (0)