on master help sign in
README.md+3−3
since splitsnapshots
unifiedsplit
@@ -137,7 +137,7 @@ The first five keys `[0..4]` are
137these values. Both the Haskell code and `jsaddle.js` can allocate new `JSVal` keys. The Haskell code allocates negative
137these values. Both the Haskell code and `jsaddle.js` can allocate new `JSVal` keys. The Haskell code allocates negative
138keys and `jsaddle.js` allocates positive keys to avoid clashing.
138keys and `jsaddle.js` allocates positive keys to avoid clashing.
139
139
140−The haskell code will not know the value of the to go with the key, but it will include it in commands to the server
140+The haskell code will not know the value to go with the key, but it will include it in commands to the server
141that are sort of "hey call this function and put the result in the map with this key"). This allows for the
141that are sort of "hey call this function and put the result in the map with this key"). This allows for the
142lazy execution of the JSaddle code.
142lazy execution of the JSaddle code.
143
143
@@ -146,7 +146,7 @@ when the JSVal is no longer reachable. The `jsaddle.js` code then deletes the k
146
146
147### JSStrings
147### JSStrings
148
148
149−These are haskell `Text` type and so reside on the native side of the WebSocket. If you want to make avoid transferring large string values over the WebSocket use `toJSVal` to convert it to a `JSVal`.
149+These are haskell `Text` type and so reside on the native side of the WebSocket. If you want to avoid transferring large string values over the WebSocket use `toJSVal` to convert it to a `JSVal`.
150
150
151### Lazy Execution
151### Lazy Execution
152
152
@@ -213,7 +213,7 @@ JSaddle does not support exceptions well. When compiled with GHCJS an exception
213at the point the exception is thrown.
213at the point the exception is thrown.
214
214
215When using GHC the Haskell executions will probably continue for a while before the exception is received at all by the Haskell code
215When using GHC the Haskell executions will probably continue for a while before the exception is received at all by the Haskell code
216−(because the lazy execution of the JS code). The exception will be thrown when the the next synchronous command is executed.
216+(because the lazy execution of the JS code). The exception will be thrown when the next synchronous command is executed.
217When it reaches the synchronous command a haskell type JSException will be thrown (this may not be the thread that initiated the
217When it reaches the synchronous command a haskell type JSException will be thrown (this may not be the thread that initiated the
218command that caused the exception). You can use `syncPoint` and `syncAfter` to force the exception to be thrown.
218command that caused the exception). You can use `syncPoint` and `syncAfter` to force the exception to be thrown.
219There are `JSM` versions of `catch` and `bracket` that also include a `syncPoint` call.
219There are `JSM` versions of `catch` and `bracket` that also include a `syncPoint` call.
cabal.project+1−8
@@ -2,16 +2,9 @@ packages:
2 jsaddle/
2 jsaddle/
3 jsaddle-warp/
3 jsaddle-warp/
4 jsaddle-wkwebview/
4 jsaddle-wkwebview/
5−-- jsaddle-webkitgtk/
6 jsaddle-webkit2gtk/
5 jsaddle-webkit2gtk/
7 jsaddle-clib/
6 jsaddle-clib/
8
7
9constraints: haskell-gi-overloading == 0.0
8constraints: haskell-gi-overloading == 0.0
10
9
11−write-ghc-environment-files: never
10+allow-newer: websockets:random, splitmix:time, *:time, *:unix, *:process, stm:base
12−
13−source-repository-package
14− type: git
15− location: https://github.com/gtk2hs/webkit-javascriptcore
16− tag: 5868624d0ea1db6e6279c301f7f56adb808a85bf
17− --sha256: 0aj0cvcbnzrdi1ynahpb4034vadfrs99n5qa8dar1srhijv55g8b
default.nixdeleted−28
@@ -1,28 +0,0 @@
1−{ pkgs ? import nixpkgs (haskellNixpkgsArgs // (if system == null then {} else { inherit system; }) //
2− { overlays = haskellNixpkgsArgs.overlays ++ [(self: super: {
3− inherit (self.haskell-nix.haskellPackages) alex happy;
4− })];})
5−, nixpkgs ? haskellNixSrc + "/nixpkgs"
6−, haskellNixpkgsArgs ? import haskellNixSrc
7−, haskellNixSrc ? builtins.fetchTarball {
8− url = "https://github.com/input-output-hk/haskell.nix/archive/1dd6951d6a56115fd368c5b37b8dab47a90ec45c.tar.gz";
9− sha256 = "02nhjy90xwg9wrp81cnlczndxags966c71wlbz6n91423a13mc99";
10− }
11−, haskellCompiler ? "ghc881"
12−, system ? null
13−}:
14−let
15− frameworks = pkgs.lib.optionals pkgs.stdenv.isDarwin (
16− with pkgs.darwin.apple_sdk.frameworks; [ Cocoa Carbon CoreGraphics ]);
17− project = pkgs.haskell-nix.cabalProject' {
18− src = pkgs.haskell-nix.haskellLib.cleanGit { src = ./.; };
19− ghc = pkgs.buildPackages.pkgs.haskell-nix.compiler.${haskellCompiler};
20− modules = [
21− ({ config, ...}: {
22− packages.gi-gtk.components.setup.frameworks = frameworks;
23− packages.vault.components.library.doHaddock = false;
24− })
25− ];
26− };
27−in
28− project
jsaddle-clib/jsaddle-clib.cabal+2−2
@@ -1,5 +1,5 @@
1name: jsaddle-clib
1name: jsaddle-clib
2−version: 0.9.7.0
2+version: 0.9.8.0
3cabal-version: >=1.10
3cabal-version: >=1.10
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
@@ -21,7 +21,7 @@ library
21 Language.Javascript.JSaddle.CLib
21 Language.Javascript.JSaddle.CLib
22 Language.Javascript.JSaddle.CLib.Internal
22 Language.Javascript.JSaddle.CLib.Internal
23 build-depends:
23 build-depends:
24− aeson >=0.8.0.2 && <1.5,
24+ aeson >=0.8.0.2 && <1.6,
25 base <5,
25 base <5,
26 base-compat >=0.9.0 && <0.12,
26 base-compat >=0.9.0 && <0.12,
27 bytestring >=0.10.6.0 && <0.11,
27 bytestring >=0.10.6.0 && <0.11,
jsaddle-warp/jsaddle-warp.cabal+5−5
@@ -1,5 +1,5 @@
1name: jsaddle-warp
1name: jsaddle-warp
2−version: 0.9.7.0
2+version: 0.9.8.0
3cabal-version: >=1.10
3cabal-version: >=1.10
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
@@ -27,7 +27,7 @@ library
27 other-modules:
27 other-modules:
28 Language.Javascript.JSaddle.WebSockets.Compat
28 Language.Javascript.JSaddle.WebSockets.Compat
29 build-depends:
29 build-depends:
30− aeson >=0.8.0.2 && <1.5,
30+ aeson >=0.8.0.2 && <1.6,
31 bytestring >=0.10.6.0 && <0.11,
31 bytestring >=0.10.6.0 && <0.11,
32 containers >=0.5.6.2 && <0.7,
32 containers >=0.5.6.2 && <0.7,
33 foreign-store >=0.2 && <0.3,
33 foreign-store >=0.2 && <0.3,
@@ -35,7 +35,7 @@ library
35 jsaddle >=0.9.4.0 && <0.10,
35 jsaddle >=0.9.4.0 && <0.10,
36 stm >=2.4.4 && <2.6,
36 stm >=2.4.4 && <2.6,
37 text >=1.2.1.3 && <1.3,
37 text >=1.2.1.3 && <1.3,
38− time >=1.5.0.1 && <1.10,
38+ time >=1.5.0.1 && <1.11,
39 transformers >=0.4.2.0 && <0.6,
39 transformers >=0.4.2.0 && <0.6,
40 wai >=3.0.3.0 && <3.3,
40 wai >=3.0.3.0 && <3.3,
41 wai-websockets >=3.0.0.6 && <3.1,
41 wai-websockets >=3.0.0.6 && <3.1,
@@ -59,7 +59,7 @@ test-suite test-tool
59 bytestring -any,
59 bytestring -any,
60 containers -any,
60 containers -any,
61 deepseq -any,
61 deepseq -any,
62− doctest >=0.10.1 && <0.17,
62+ doctest >=0.10.1 && <0.19,
63 exceptions -any,
63 exceptions -any,
64 filepath >=1.4.0.0 && <1.5,
64 filepath >=1.4.0.0 && <1.5,
65 foreign-store -any,
65 foreign-store -any,
@@ -81,7 +81,7 @@ test-suite test-tool
81 wai -any,
81 wai -any,
82 wai-websockets -any,
82 wai-websockets -any,
83 warp -any,
83 warp -any,
84− webdriver >=0.8.4 && <1.0,
84+ webdriver >=0.8.4 && <0.10,
85 websockets -any
85 websockets -any
86 type: exitcode-stdio-1.0
86 type: exitcode-stdio-1.0
87 main-is: DocTest.hs
87 main-is: DocTest.hs
jsaddle-webkit2gtk/jsaddle-webkit2gtk.cabal+3−3
@@ -1,5 +1,5 @@
1name: jsaddle-webkit2gtk
1name: jsaddle-webkit2gtk
2−version: 0.9.7.0
2+version: 0.9.8.0
3cabal-version: >=1.10
3cabal-version: >=1.10
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
@@ -26,7 +26,7 @@ library
26 base <5
26 base <5
27 if !impl(ghcjs -any)
27 if !impl(ghcjs -any)
28 build-depends:
28 build-depends:
29− aeson >=0.8.0.2 && <1.5,
29+ aeson >=0.8.0.2 && <1.6,
30 base <5,
30 base <5,
31 bytestring >=0.10.6.0 && <0.11,
31 bytestring >=0.10.6.0 && <0.11,
32 directory >=1.0.0.2 && <1.4,
32 directory >=1.0.0.2 && <1.4,
@@ -35,7 +35,7 @@ library
35 gi-gtk >=3.0.17 && <3.1,
35 gi-gtk >=3.0.17 && <3.1,
36 gi-webkit2 >=4.0.14 && <4.1,
36 gi-webkit2 >=4.0.14 && <4.1,
37 gi-javascriptcore >=4.0.14 && <4.1,
37 gi-javascriptcore >=4.0.14 && <4.1,
38− haskell-gi-base >=0.20 && <0.24,
38+ haskell-gi-base >=0.20 && <0.26,
39 haskell-gi-overloading >=0.0 && < 2.0,
39 haskell-gi-overloading >=0.0 && < 2.0,
40 jsaddle >=0.9.4.0 && <0.10,
40 jsaddle >=0.9.4.0 && <0.10,
41 text >=1.2.1.3 && <1.3,
41 text >=1.2.1.3 && <1.3,
jsaddle-webkit2gtk/src/Language/Javascript/JSaddle/WebKitGTK.hs+8−2
@@ -55,11 +55,11 @@ import GI.GLib (timeoutAdd, idleAdd, pattern PRIORITY_HIGH, pattern PRIORITY_DEF
55import qualified GI.Gtk as Gtk (main, init)
55import qualified GI.Gtk as Gtk (main, init)
56import GI.Gtk
56import GI.Gtk
57 (windowSetPosition, windowSetDefaultSize, windowNew,
57 (windowSetPosition, windowSetDefaultSize, windowNew,
58− scrolledWindowNew, noAdjustment, containerAdd,
58+ scrolledWindowNew, Adjustment, containerAdd,
59 WindowType(..), WindowPosition(..), widgetDestroy,
59 WindowType(..), WindowPosition(..), widgetDestroy,
60 widgetGetToplevel, widgetShowAll, onWidgetDestroy,
60 widgetGetToplevel, widgetShowAll, onWidgetDestroy,
61 mainQuit)
61 mainQuit)
62−import GI.Gio (noCancellable)
62+import GI.Gio (Cancellable)
63import GI.JavaScriptCore (valueToString)
63import GI.JavaScriptCore (valueToString)
64import GI.WebKit2
64import GI.WebKit2
65 (scriptDialogPromptSetText, scriptDialogPromptGetDefaultText,
65 (scriptDialogPromptSetText, scriptDialogPromptGetDefaultText,
@@ -82,6 +82,12 @@ import Language.Javascript.JSaddle (JSM, Results, Batch)
82import Language.Javascript.JSaddle.Run (runJavaScript)
82import Language.Javascript.JSaddle.Run (runJavaScript)
83import Language.Javascript.JSaddle.Run.Files (initState, runBatch, ghcjsHelpers)
83import Language.Javascript.JSaddle.Run.Files (initState, runBatch, ghcjsHelpers)
84
84
85+noAdjustment :: Maybe Adjustment
86+noAdjustment = Nothing
87+
88+noCancellable :: Maybe Cancellable
89+noCancellable = Nothing
90+
85quitWebView :: WebView -> IO ()
91quitWebView :: WebView -> IO ()
86quitWebView wv = postGUIAsync $ do w <- widgetGetToplevel wv --TODO: Shouldn't this be postGUISync?
92quitWebView wv = postGUIAsync $ do w <- widgetGetToplevel wv --TODO: Shouldn't this be postGUISync?
87 widgetDestroy w
93 widgetDestroy w
jsaddle-wkwebview/default.nixnew file+14
@@ -0,0 +1,14 @@
1+{ filterSource ? (x: x) }:
2+self: super:
3+let
4+ pkgs = self.callPackage ({pkgs}: pkgs) {};
5+ inherit (pkgs) lib;
6+in
7+with pkgs.haskell.lib;
8+overrideCabal (self.callCabal2nix "jsaddle-wkwebview" (filterSource ./.) {}) (drv: {
9+ libraryFrameworkDepends = (drv.libraryFrameworkDepends or []) ++
10+ (if pkgs.stdenv.hostPlatform.useiOSPrebuilt then [
11+ "${pkgs.buildPackages.darwin.xcode}/Contents/Developer/Platforms/${pkgs.stdenv.hostPlatform.xcodePlatform}.platform/Developer/SDKs/${pkgs.stdenv.hostPlatform.xcodePlatform}.sdk/System"
12+ ] else (with pkgs.buildPackages.darwin.apple_sdk.frameworks; [ Cocoa WebKit ]));
13+ buildDepends = lib.optional (!pkgs.stdenv.hostPlatform.useiOSPrebuilt) [ pkgs.buildPackages.darwin.cf-private ];
14+})
jsaddle-wkwebview/jsaddle-wkwebview.cabal+5−3
@@ -1,5 +1,5 @@
1name: jsaddle-wkwebview
1name: jsaddle-wkwebview
2−version: 0.9.7.0
2+version: 0.9.8.0
3cabal-version: >=1.10
3cabal-version: >=1.10
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
@@ -29,13 +29,15 @@ library
29 base <5
29 base <5
30 default-language: Haskell2010
30 default-language: Haskell2010
31 hs-source-dirs: src
31 hs-source-dirs: src
32− frameworks: Foundation, WebKit
33 ghc-options: -ferror-spans -Wall
32 ghc-options: -ferror-spans -Wall
33+ if os(linux)
34+ buildable: False
34 if impl(ghcjs)
35 if impl(ghcjs)
35 hs-source-dirs: src-ghcjs
36 hs-source-dirs: src-ghcjs
36 else
37 else
38+ frameworks: Foundation, WebKit
37 build-depends:
39 build-depends:
38− aeson >=0.8.0.2 && <1.5,
40+ aeson >=0.8.0.2 && <1.6,
39 bytestring >=0.10.6.0 && <0.11,
41 bytestring >=0.10.6.0 && <0.11,
40 directory,
42 directory,
41 jsaddle >= 0.9.4.0 && <0.10,
43 jsaddle >= 0.9.4.0 && <0.10,
jsaddle/jsaddle.cabal+8−8
@@ -1,5 +1,5 @@
1name: jsaddle
1name: jsaddle
2−version: 0.9.7.0
2+version: 0.9.8.0
3cabal-version: >=1.10
3cabal-version: >=1.10
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
@@ -10,7 +10,7 @@ description:
10 This package provides an EDSL for calling JavaScript that
10 This package provides an EDSL for calling JavaScript that
11 can be used both from GHCJS and GHC. When using GHC
11 can be used both from GHCJS and GHC. When using GHC
12 the application is run using Warp and WebSockets to
12 the application is run using Warp and WebSockets to
13− drive a small JavaScipt helper.
13+ drive a small JavaScript helper.
14category: Web, Javascript
14category: Web, Javascript
15author: Hamish Mackenzie
15author: Hamish Mackenzie
16
16
@@ -42,14 +42,14 @@ library
42 ghc-prim,
42 ghc-prim,
43 http-types >=0.8.6 && <0.13,
43 http-types >=0.8.6 && <0.13,
44 process >=1.2.3.0 && <1.7,
44 process >=1.2.3.0 && <1.7,
45− random >= 1.1 && < 1.2,
45+ random >= 1.1 && < 1.3,
46 ref-tf >=0.4.0.1 && <0.5,
46 ref-tf >=0.4.0.1 && <0.5,
47 scientific >=0.3 && <0.4,
47 scientific >=0.3 && <0.4,
48 stm >=2.4.4 && <2.6,
48 stm >=2.4.4 && <2.6,
49− time >=1.5.0.1 && <1.10,
49+ time >=1.5.0.1 && <1.11,
50 unordered-containers >=0.2 && <0.3,
50 unordered-containers >=0.2 && <0.3,
51 vector >=0.10 && <0.13,
51 vector >=0.10 && <0.13,
52− unliftio-core >=0.1 && < 0.2
52+ unliftio-core >=0.1 && < 0.3
53 exposed-modules:
53 exposed-modules:
54 Data.JSString
54 Data.JSString
55 Data.JSString.Internal
55 Data.JSString.Internal
@@ -107,13 +107,13 @@ library
107 Language.Javascript.JSaddle.Value
107 Language.Javascript.JSaddle.Value
108 Language.Javascript.JSaddle.Types
108 Language.Javascript.JSaddle.Types
109 build-depends:
109 build-depends:
110− aeson >=0.8.0.2 && <1.5,
110+ aeson >=0.11.3.0 && <1.6,
111 base >=4.9 && <5,
111 base >=4.9 && <5,
112 base-compat >=0.9.0 && <0.12,
112 base-compat >=0.9.0 && <0.12,
113− base64-bytestring >=1.0.0.1 && <1.1,
113+ base64-bytestring >=1.0.0.1 && <1.2,
114 bytestring >=0.10.6.0 && <0.11,
114 bytestring >=0.10.6.0 && <0.11,
115 exceptions >=0.8 && <0.11,
115 exceptions >=0.8 && <0.11,
116− lens >=3.8.5 && <4.19,
116+ lens >=3.8.5 && <5.1,
117 primitive >=0.6.1.0 && <0.8,
117 primitive >=0.6.1.0 && <0.8,
118 text >=1.2.1.3 && <1.3,
118 text >=1.2.1.3 && <1.3,
119 transformers >=0.4.2.0 && <0.6
119 transformers >=0.4.2.0 && <0.6
jsaddle/src/Language/Javascript/JSaddle/Object.hs+3−4
@@ -526,12 +526,11 @@ array args = do
526 Object . coerce <$> fromListIO rargs
526 Object . coerce <$> fromListIO rargs
527
527
528-- | JavaScript's global object
528-- | JavaScript's global object
529−global :: Object
530#ifdef ghcjs_HOST_OS
529#ifdef ghcjs_HOST_OS
531−global = js_window
532−foreign import javascript unsafe "$r = window"
530+foreign import javascript unsafe "$r = globalThis"
533− js_window :: Object
531+ global :: Object
534#else
532#else
533+global :: Object
535global = Object . JSVal . unsafePerformIO $ newIORef 4
534global = Object . JSVal . unsafePerformIO $ newIORef 4
536#endif
535#endif
537
536
jsaddle/src/Language/Javascript/JSaddle/Run/Files.hs+1−1
@@ -41,7 +41,7 @@ initState = "\
41 \ jsaddle_values.set(1, undefined);\n\
41 \ jsaddle_values.set(1, undefined);\n\
42 \ jsaddle_values.set(2, false);\n\
42 \ jsaddle_values.set(2, false);\n\
43 \ jsaddle_values.set(3, true);\n\
43 \ jsaddle_values.set(3, true);\n\
44− \ jsaddle_values.set(4, window);\n\
44+ \ jsaddle_values.set(4, globalThis);\n\
45 \ var jsaddle_index = 100;\n\
45 \ var jsaddle_index = 100;\n\
46 \ var expectedBatch = 1;\n\
46 \ var expectedBatch = 1;\n\
47 \ var lastResults = [0, {\"tag\": \"Success\", \"contents\": [[], []]}];\n\
47 \ var lastResults = [0, {\"tag\": \"Success\", \"contents\": [[], []]}];\n\
nix/hix.nixnew file+8
@@ -0,0 +1,8 @@
1+{pkgs, ...}:
2+{ modules = [({pkgs, ...}: {
3+ packages.webkit2gtk3-javascriptcore.components.library.doHaddock = false;
4+ })];
5+ shell.buildInputs = [ pkgs.nodejs ];
6+ shell.tools.cabal = {};
7+ shell.crossPlatforms = p: [ p.ghcjs ];
8+}
shell.nixdeleted−3
@@ -1,3 +0,0 @@
1−{ haskellCompiler ? "ghc881" }:
2−(import ./. { inherit haskellCompiler; }).hsPkgs.shellFor {}
3−