on master help sign in
18 files changed+105−74
since splitsnapshots
unifiedsplit
.travis.yml+1−1 README.md+3−3 cabal.project+1−8 default.nix−28 jsaddle-clib/jsaddle-clib.cabal+2−2 jsaddle-warp/jsaddle-warp.cabal+6−6 jsaddle-webkit2gtk/jsaddle-webkit2gtk.cabal+3−3 jsaddle-webkit2gtk/src/Language/Javascript/JSaddle/WebKitGTK.hs+8−2 jsaddle-wkwebview/cbits-uikit/AppDelegate.m+12 jsaddle-wkwebview/default.nix+14 jsaddle-wkwebview/jsaddle-wkwebview.cabal+5−3 jsaddle-wkwebview/src-ghc/Language/Javascript/JSaddle/WKWebView.hs+23−1 jsaddle-wkwebview/src/Language/Javascript/JSaddle/WKWebView/Internal.hs+7−1 jsaddle/jsaddle.cabal+8−8 jsaddle/src/Language/Javascript/JSaddle/Object.hs+3−4 jsaddle/src/Language/Javascript/JSaddle/Run/Files.hs+1−1 nix/hix.nix+8 shell.nix−3
.travis.yml+1−1
@@ -43,5 +43,5 @@ script:
4343
4444notifications:
4545 irc:
46− channels: "irc.freenode.net#gtk2hs"
46+ channels: "irc.freenode.net#ghcjs"
4747 email: true
README.md+3−3
@@ -137,7 +137,7 @@ The first five keys `[0..4]` are
137137these values. Both the Haskell code and `jsaddle.js` can allocate new `JSVal` keys. The Haskell code allocates negative
138138keys and `jsaddle.js` allocates positive keys to avoid clashing.
139139
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
141141that are sort of "hey call this function and put the result in the map with this key"). This allows for the
142142lazy execution of the JSaddle code.
143143
@@ -146,7 +146,7 @@ when the JSVal is no longer reachable. The `jsaddle.js` code then deletes the k
146146
147147### JSStrings
148148
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`.
150150
151151### Lazy Execution
152152
@@ -213,7 +213,7 @@ JSaddle does not support exceptions well. When compiled with GHCJS an exception
213213at the point the exception is thrown.
214214
215215When 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.
217217When it reaches the synchronous command a haskell type JSException will be thrown (this may not be the thread that initiated the
218218command that caused the exception). You can use `syncPoint` and `syncAfter` to force the exception to be thrown.
219219There are `JSM` versions of `catch` and `bracket` that also include a `syncPoint` call.
cabal.project+1−8
@@ -2,16 +2,9 @@ packages:
22 jsaddle/
33 jsaddle-warp/
44 jsaddle-wkwebview/
5−-- jsaddle-webkitgtk/
65 jsaddle-webkit2gtk/
76 jsaddle-clib/
87
98constraints: haskell-gi-overloading == 0.0
109
11−write-ghc-environment-files: never
12−
13−source-repository-package
14− type: git
15− location: https://github.com/gtk2hs/webkit-javascriptcore
16− tag: 5868624d0ea1db6e6279c301f7f56adb808a85bf
17− --sha256: 0aj0cvcbnzrdi1ynahpb4034vadfrs99n5qa8dar1srhijv55g8b
10+allow-newer: websockets:random, splitmix:time, *:time, *:unix, *:process, stm:base
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 @@
11name: jsaddle-clib
2−version: 0.9.7.0
2+version: 0.9.8.0
33cabal-version: >=1.10
44build-type: Simple
55license: MIT
@@ -21,7 +21,7 @@ library
2121 Language.Javascript.JSaddle.CLib
2222 Language.Javascript.JSaddle.CLib.Internal
2323 build-depends:
24− aeson >=0.8.0.2 && <1.5,
24+ aeson >=0.8.0.2 && <1.6,
2525 base <5,
2626 base-compat >=0.9.0 && <0.12,
2727 bytestring >=0.10.6.0 && <0.11,
jsaddle-warp/jsaddle-warp.cabal+6−6
@@ -1,5 +1,5 @@
11name: jsaddle-warp
2−version: 0.9.7.0
2+version: 0.9.8.0
33cabal-version: >=1.10
44build-type: Simple
55license: MIT
@@ -27,7 +27,7 @@ library
2727 other-modules:
2828 Language.Javascript.JSaddle.WebSockets.Compat
2929 build-depends:
30− aeson >=0.8.0.2 && <1.5,
30+ aeson >=0.8.0.2 && <1.6,
3131 bytestring >=0.10.6.0 && <0.11,
3232 containers >=0.5.6.2 && <0.7,
3333 foreign-store >=0.2 && <0.3,
@@ -35,11 +35,11 @@ library
3535 jsaddle >=0.9.4.0 && <0.10,
3636 stm >=2.4.4 && <2.6,
3737 text >=1.2.1.3 && <1.3,
38− time >=1.5.0.1 && <1.10,
38+ time >=1.5.0.1 && <1.11,
3939 transformers >=0.4.2.0 && <0.6,
4040 wai >=3.0.3.0 && <3.3,
4141 wai-websockets >=3.0.0.6 && <3.1,
42− warp >=3.1.2 && <3.3,
42+ warp >=3.1.2 && <3.4,
4343 websockets >=0.9.5.0 && <0.13
4444 exposed-modules:
4545 Language.Javascript.JSaddle.Warp
@@ -59,7 +59,7 @@ test-suite test-tool
5959 bytestring -any,
6060 containers -any,
6161 deepseq -any,
62− doctest >=0.10.1 && <0.17,
62+ doctest >=0.10.1 && <0.19,
6363 exceptions -any,
6464 filepath >=1.4.0.0 && <1.5,
6565 foreign-store -any,
@@ -81,7 +81,7 @@ test-suite test-tool
8181 wai -any,
8282 wai-websockets -any,
8383 warp -any,
84− webdriver >=0.8.4 && <1.0,
84+ webdriver >=0.8.4 && <0.10,
8585 websockets -any
8686 type: exitcode-stdio-1.0
8787 main-is: DocTest.hs
jsaddle-webkit2gtk/jsaddle-webkit2gtk.cabal+3−3
@@ -1,5 +1,5 @@
11name: jsaddle-webkit2gtk
2−version: 0.9.7.0
2+version: 0.9.8.0
33cabal-version: >=1.10
44build-type: Simple
55license: MIT
@@ -26,7 +26,7 @@ library
2626 base <5
2727 if !impl(ghcjs -any)
2828 build-depends:
29− aeson >=0.8.0.2 && <1.5,
29+ aeson >=0.8.0.2 && <1.6,
3030 base <5,
3131 bytestring >=0.10.6.0 && <0.11,
3232 directory >=1.0.0.2 && <1.4,
@@ -35,7 +35,7 @@ library
3535 gi-gtk >=3.0.17 && <3.1,
3636 gi-webkit2 >=4.0.14 && <4.1,
3737 gi-javascriptcore >=4.0.14 && <4.1,
38− haskell-gi-base >=0.20 && <0.24,
38+ haskell-gi-base >=0.20 && <0.26,
3939 haskell-gi-overloading >=0.0 && < 2.0,
4040 jsaddle >=0.9.4.0 && <0.10,
4141 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
5555import qualified GI.Gtk as Gtk (main, init)
5656import GI.Gtk
5757 (windowSetPosition, windowSetDefaultSize, windowNew,
58− scrolledWindowNew, noAdjustment, containerAdd,
58+ scrolledWindowNew, Adjustment, containerAdd,
5959 WindowType(..), WindowPosition(..), widgetDestroy,
6060 widgetGetToplevel, widgetShowAll, onWidgetDestroy,
6161 mainQuit)
62−import GI.Gio (noCancellable)
62+import GI.Gio (Cancellable)
6363import GI.JavaScriptCore (valueToString)
6464import GI.WebKit2
6565 (scriptDialogPromptSetText, scriptDialogPromptGetDefaultText,
@@ -82,6 +82,12 @@ import Language.Javascript.JSaddle (JSM, Results, Batch)
8282import Language.Javascript.JSaddle.Run (runJavaScript)
8383import Language.Javascript.JSaddle.Run.Files (initState, runBatch, ghcjsHelpers)
8484
85+noAdjustment :: Maybe Adjustment
86+noAdjustment = Nothing
87+
88+noCancellable :: Maybe Cancellable
89+noCancellable = Nothing
90+
8591quitWebView :: WebView -> IO ()
8692quitWebView wv = postGUIAsync $ do w <- widgetGetToplevel wv --TODO: Shouldn't this be postGUISync?
8793 widgetDestroy w
jsaddle-wkwebview/cbits-uikit/AppDelegate.m+12
@@ -5,6 +5,7 @@
55
66extern void callIO(HsStablePtr);
77extern void callWithCString(const char * _Nonnull, HsStablePtr);
8+extern void callWithCIntCString(int n, const char * _Nonnull, HsStablePtr);
89
910@interface AppDelegate ()
1011
@@ -20,6 +21,7 @@ HsStablePtr global_applicationWillEnterForeground = 0;
2021HsStablePtr global_applicationWillTerminate = 0;
2122HsStablePtr global_applicationSignificantTimeChange = 0;
2223HsStablePtr global_applicationUniversalLink = 0;
24+HsStablePtr global_applicationDidReceiveRemoteNotification = 0;
2325uint64_t global_requestAuthorizationWithOptions = 0;
2426uint64_t global_requestAuthorizationOptionBadge = 0;
2527uint64_t global_requestAuthorizationOptionSound = 0;
@@ -115,6 +117,14 @@ HsStablePtr global_didFailToRegisterForRemoteNotificationsWithError = 0;
115117 if ([userInfo valueForKeyPath:@"aps.badge"] != nil) {
116118 [UIApplication sharedApplication].applicationIconBadgeNumber=[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue];
117119 }
120+ NSError *error;
121+ NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error];
122+ if (jsonData) {
123+ NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
124+ callWithCIntCString((int) application.applicationState, [jsonString UTF8String], global_applicationDidReceiveRemoteNotification);
125+ } else {
126+ NSLog(@"jsaddle-wkwebview didReceiveRemoteNotification handler: error while serialising push notification as JSON");
127+ }
118128 completionHandler(UIBackgroundFetchResultNewData);
119129}
120130
@@ -152,6 +162,7 @@ void runInWKWebView(HsStablePtr handler,
152162 HsStablePtr hs_applicationWillTerminate,
153163 HsStablePtr hs_applicationSignificantTimeChange,
154164 HsStablePtr hs_applicationUniversalLink,
165+ HsStablePtr hs_applicationDidReceiveRemoteNotification,
155166 const uint64_t hs_requestAuthorizationWithOptions,
156167 const uint64_t hs_requestAuthorizationOptionBadge,
157168 const uint64_t hs_requestAuthorizationOptionSound,
@@ -172,6 +183,7 @@ void runInWKWebView(HsStablePtr handler,
172183 global_applicationWillTerminate = hs_applicationWillTerminate;
173184 global_applicationSignificantTimeChange = hs_applicationSignificantTimeChange;
174185 global_applicationUniversalLink = hs_applicationUniversalLink;
186+ global_applicationDidReceiveRemoteNotification = hs_applicationDidReceiveRemoteNotification;
175187 global_requestAuthorizationWithOptions = hs_requestAuthorizationWithOptions;
176188 global_requestAuthorizationOptionBadge = hs_requestAuthorizationOptionBadge;
177189 global_requestAuthorizationOptionSound = hs_requestAuthorizationOptionSound;
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 @@
11name: jsaddle-wkwebview
2−version: 0.9.7.0
2+version: 0.9.8.0
33cabal-version: >=1.10
44build-type: Simple
55license: MIT
@@ -29,13 +29,15 @@ library
2929 base <5
3030 default-language: Haskell2010
3131 hs-source-dirs: src
32− frameworks: Foundation, WebKit
3332 ghc-options: -ferror-spans -Wall
33+ if os(linux)
34+ buildable: False
3435 if impl(ghcjs)
3536 hs-source-dirs: src-ghcjs
3637 else
38+ frameworks: Foundation, WebKit
3739 build-depends:
38− aeson >=0.8.0.2 && <1.5,
40+ aeson >=0.8.0.2 && <1.6,
3941 bytestring >=0.10.6.0 && <0.11,
4042 directory,
4143 jsaddle >= 0.9.4.0 && <0.10,
jsaddle-wkwebview/src-ghc/Language/Javascript/JSaddle/WKWebView.hs+23−1
@@ -9,6 +9,7 @@ module Language.Javascript.JSaddle.WKWebView
99 , runHTMLWithBaseURL
1010 , runFile
1111 , mainBundleResourcePath
12+ , ApplicationState (..)
1213 , AppDelegateConfig (..)
1314 , AppDelegateNotificationConfig (..)
1415 , AuthorizationOption (..)
@@ -24,7 +25,7 @@ import Language.Javascript.JSaddle.WKWebView.Internal
2425 (jsaddleMain, jsaddleMainHTMLWithBaseURL, jsaddleMainFile, WKWebView(..), mainBundleResourcePath)
2526import System.Environment (getProgName)
2627import Foreign.C.String (CString, withCString)
27−import Foreign.C.Types (CBool)
28+import Foreign.C.Types (CBool, CInt)
2829import Foreign.StablePtr (StablePtr, newStablePtr)
2930import Language.Javascript.JSaddle (JSM)
3031
@@ -40,6 +41,7 @@ foreign import ccall runInWKWebView
4041 -> StablePtr (IO ()) -- applicationWillTerminate
4142 -> StablePtr (IO ()) -- applicationSignificantTimeChange
4243 -> StablePtr (CString -> IO ()) -- applicationUniversalLink
44+ -> StablePtr (CInt -> CString -> IO ()) -- applicationDidReceiveRemoteNotification
4345 -> Word64 -- whether to run requestAuthorizationWithOptions
4446 -> Word64 -- Ask for Badge authorization
4547 -> Word64 -- Ask for Sound authorization
@@ -66,6 +68,11 @@ data AppDelegateConfig = AppDelegateConfig
6668 --
6769 -- The Core Foundation plist key CFBundleURLTypes controls which URL schemes
6870 -- the app should respond to.
71+ , _appDelegateConfig_applicationDidReceiveRemoteNotification :: ApplicationState -> CString -> IO ()
72+ -- ^ Called when the application receives a remote notification.
73+ -- 'ApplicationState' is the current state of the app.
74+ -- The 'CString' JSON-encoded user info contained in the notification.
75+ -- For more information see https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623117-application?language=objc
6976 , _appDelegateConfig_appDelegateNotificationConfig :: AppDelegateNotificationConfig
7077 , _appDelegateConfig_developerExtrasEnabled :: Bool
7178 -- ^ Allow devtools in the app. Defaults to 'True'
@@ -89,6 +96,7 @@ instance Default AppDelegateConfig where
8996 , _appDelegateConfig_applicationWillTerminate = return ()
9097 , _appDelegateConfig_applicationSignificantTimeChange = return ()
9198 , _appDelegateConfig_applicationUniversalLink = \_ -> return ()
99+ , _appDelegateConfig_applicationDidReceiveRemoteNotification = \_ _ -> return ()
92100 , _appDelegateConfig_appDelegateNotificationConfig = def
93101 , _appDelegateConfig_developerExtrasEnabled = True
94102 , _appDelegateConfig_applicationOpenFile = \_ -> return False
@@ -100,6 +108,12 @@ data AuthorizationOption = AuthorizationOption_Badge
100108 | AuthorizationOption_CarPlay
101109 deriving (Show, Read, Eq, Ord)
102110
111+data ApplicationState = ApplicationState_Active
112+ | ApplicationState_Inactive
113+ | ApplicationState_Background
114+ | ApplicationState_Unknown CInt
115+ deriving (Show, Read, Eq, Ord)
116+
103117data AppDelegateNotificationConfig = AppDelegateNotificationConfig
104118 { _appDelegateNotificationConfig_requestAuthorizationWithOptions :: Maybe (Set AuthorizationOption)
105119 , _appDelegateNotificationConfig_registerForRemoteNotifications :: Bool
@@ -162,6 +176,13 @@ run' cfg main = do
162176 applicationWillTerminate <- newStablePtr $ _appDelegateConfig_applicationWillTerminate cfg
163177 applicationSignificantTimeChange <- newStablePtr $ _appDelegateConfig_applicationSignificantTimeChange cfg
164178 applicationUniversalLink <- newStablePtr $ _appDelegateConfig_applicationUniversalLink cfg
179+ applicationDidReceiveRemoteNotification <- newStablePtr $ \n s -> do
180+ let appState = case n of
181+ 0 -> ApplicationState_Active
182+ 1 -> ApplicationState_Inactive
183+ 2 -> ApplicationState_Background
184+ _ -> ApplicationState_Unknown n
185+ _appDelegateConfig_applicationDidReceiveRemoteNotification cfg appState s
165186 applicationOpenFile <- newStablePtr $ fmap fromBool . _appDelegateConfig_applicationOpenFile cfg
166187
167188 -- AppDelegate notification configuration
@@ -185,6 +206,7 @@ run' cfg main = do
185206 applicationWillTerminate
186207 applicationSignificantTimeChange
187208 applicationUniversalLink
209+ applicationDidReceiveRemoteNotification
188210 (fromBool requestAuthorizationWithOptions)
189211 (fromBool $ Set.member AuthorizationOption_Badge authorizationOptions)
190212 (fromBool $ Set.member AuthorizationOption_Sound authorizationOptions)
jsaddle-wkwebview/src/Language/Javascript/JSaddle/WKWebView/Internal.hs+7−1
@@ -20,7 +20,7 @@ import qualified Data.Text as T (pack)
2020import Data.Text.Encoding (encodeUtf8)
2121
2222import Foreign.C.String (CString)
23−import Foreign.C.Types (CBool(..))
23+import Foreign.C.Types (CBool(..), CInt(..))
2424import Foreign.Ptr (Ptr, nullPtr)
2525import Foreign.StablePtr (StablePtr, newStablePtr, deRefStablePtr)
2626
@@ -37,6 +37,7 @@ foreign export ccall jsaddleStart :: StablePtr (IO ()) -> IO ()
3737foreign export ccall jsaddleResult :: StablePtr (Results -> IO ()) -> CString -> IO ()
3838foreign export ccall jsaddleSyncResult :: StablePtr (Results -> IO Batch) -> JSaddleHandler -> CString -> IO ()
3939foreign export ccall callWithWebView :: WKWebView -> StablePtr (WKWebView -> IO ()) -> IO ()
40+foreign export ccall callWithCIntCString :: CInt -> CString -> StablePtr (CInt -> CString -> IO ()) -> IO ()
4041foreign export ccall callWithCString :: CString -> StablePtr (CString -> IO ()) -> IO ()
4142foreign export ccall callWithCStringReturningBool :: CString -> StablePtr (CString -> IO CBool) -> IO CBool
4243foreign export ccall callIO :: StablePtr (IO ()) -> IO ()
@@ -128,6 +129,11 @@ callWithCString c fptr = do
128129 f <- deRefStablePtr fptr
129130 f c
130131
132+callWithCIntCString :: CInt -> CString -> StablePtr (CInt -> CString -> IO ()) -> IO ()
133+callWithCIntCString n s fptr = do
134+ f <- deRefStablePtr fptr
135+ f n s
136+
131137callWithCStringReturningBool :: CString -> StablePtr (CString -> IO CBool) -> IO CBool
132138callWithCStringReturningBool c fptr = do
133139 f <- deRefStablePtr fptr
jsaddle/jsaddle.cabal+8−8
@@ -1,5 +1,5 @@
11name: jsaddle
2−version: 0.9.7.0
2+version: 0.9.8.0
33cabal-version: >=1.10
44build-type: Simple
55license: MIT
@@ -10,7 +10,7 @@ description:
1010 This package provides an EDSL for calling JavaScript that
1111 can be used both from GHCJS and GHC. When using GHC
1212 the application is run using Warp and WebSockets to
13− drive a small JavaScipt helper.
13+ drive a small JavaScript helper.
1414category: Web, Javascript
1515author: Hamish Mackenzie
1616
@@ -42,14 +42,14 @@ library
4242 ghc-prim,
4343 http-types >=0.8.6 && <0.13,
4444 process >=1.2.3.0 && <1.7,
45− random >= 1.1 && < 1.2,
45+ random >= 1.1 && < 1.3,
4646 ref-tf >=0.4.0.1 && <0.5,
4747 scientific >=0.3 && <0.4,
4848 stm >=2.4.4 && <2.6,
49− time >=1.5.0.1 && <1.10,
49+ time >=1.5.0.1 && <1.11,
5050 unordered-containers >=0.2 && <0.3,
5151 vector >=0.10 && <0.13,
52− unliftio-core >=0.1 && < 0.2
52+ unliftio-core >=0.1 && < 0.3
5353 exposed-modules:
5454 Data.JSString
5555 Data.JSString.Internal
@@ -107,13 +107,13 @@ library
107107 Language.Javascript.JSaddle.Value
108108 Language.Javascript.JSaddle.Types
109109 build-depends:
110− aeson >=0.8.0.2 && <1.5,
110+ aeson >=0.11.3.0 && <1.6,
111111 base >=4.9 && <5,
112112 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,
114114 bytestring >=0.10.6.0 && <0.11,
115115 exceptions >=0.8 && <0.11,
116− lens >=3.8.5 && <4.19,
116+ lens >=3.8.5 && <5.1,
117117 primitive >=0.6.1.0 && <0.8,
118118 text >=1.2.1.3 && <1.3,
119119 transformers >=0.4.2.0 && <0.6
jsaddle/src/Language/Javascript/JSaddle/Object.hs+3−4
@@ -526,12 +526,11 @@ array args = do
526526 Object . coerce <$> fromListIO rargs
527527
528528-- | JavaScript's global object
529−global :: Object
530529#ifdef ghcjs_HOST_OS
531−global = js_window
532−foreign import javascript unsafe "$r = window"
533− js_window :: Object
530+foreign import javascript unsafe "$r = globalThis"
531+ global :: Object
534532#else
533+global :: Object
535534global = Object . JSVal . unsafePerformIO $ newIORef 4
536535#endif
537536
jsaddle/src/Language/Javascript/JSaddle/Run/Files.hs+1−1
@@ -41,7 +41,7 @@ initState = "\
4141 \ jsaddle_values.set(1, undefined);\n\
4242 \ jsaddle_values.set(2, false);\n\
4343 \ jsaddle_values.set(3, true);\n\
44− \ jsaddle_values.set(4, window);\n\
44+ \ jsaddle_values.set(4, globalThis);\n\
4545 \ var jsaddle_index = 100;\n\
4646 \ var expectedBatch = 1;\n\
4747 \ 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−