Skip to content

Commit 0cb9a8f

Browse files
committed
GHCJS MisoString optimizations
1 parent 4788466 commit 0cb9a8f

File tree

21 files changed

+207
-151
lines changed

21 files changed

+207
-151
lines changed

ghcjs/lightning-verifier/src/App/Types.hs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ module App.Types
1414
stUri,
1515
setScreenPure,
1616
setScreenAction,
17-
shareLink,
1817
vsn,
1918
usd,
2019
btc,
@@ -30,16 +29,18 @@ where
3029
import qualified Data.ByteString.Base64.URL as B64URL
3130
import qualified Data.ByteString.Lazy as BL
3231
import Data.Functor.Barbie
33-
import qualified Data.Text as T
3432
import qualified Data.Version as Version
3533
import qualified Functora.Aes as Aes
3634
import Functora.Cfg
3735
import Functora.Miso.Prelude
3836
import Functora.Miso.Types as X
3937
import Functora.Money hiding (Currency, Money, Text)
4038
import qualified Functora.Prelude as Prelude
39+
import qualified Miso.String as MS
4140
import qualified Paths_lightning_verifier as Paths
4241
import qualified Text.URI as URI
42+
import qualified Text.URI.QQ as URI
43+
import qualified Prelude
4344

4445
data Model = Model
4546
{ modelFav :: OpenedOrClosed,
@@ -229,7 +230,7 @@ stQuery st = do
229230

230231
stUri :: (MonadThrow m) => Model -> m URI
231232
stUri st = do
232-
uri <- mkURI $ fromMisoString baseUri
233+
uri <- mkURI $ fromMisoString @Prelude.Text baseUri
233234
qxs <- stQuery . uniqueToIdentity $ st ^. #modelState
234235
pure
235236
$ uri
@@ -285,17 +286,10 @@ setScreenAction =
285286
. Instant
286287
. setScreenPure
287288

288-
shareLink :: forall a. (From Prelude.Text a) => Model -> a
289-
shareLink =
290-
from @Prelude.Text @a
291-
. either impureThrow URI.render
292-
. stUri
293-
294289
vsn :: MisoString
295290
vsn =
296-
from @Prelude.Text @MisoString
297-
. T.intercalate "."
298-
. fmap Prelude.inspect
291+
MS.intercalate "."
292+
. fmap (toMisoString @Prelude.String . Prelude.show)
299293
$ Version.versionBranch Paths.version
300294

301295
usd :: CurrencyInfo
@@ -304,23 +298,29 @@ usd = CurrencyInfo (CurrencyCode "usd") mempty
304298
btc :: CurrencyInfo
305299
btc = CurrencyInfo (CurrencyCode "btc") mempty
306300

307-
googlePlayLink :: Prelude.Text
308-
googlePlayLink = "https://play.google.com/apps/testing/com.functora.lightning_verifier"
301+
googlePlayLink :: URI
302+
googlePlayLink =
303+
[URI.uri|https://play.google.com/apps/testing/com.functora.lightning_verifier|]
309304

310-
testGroupLink :: Prelude.Text
311-
testGroupLink = "https://groups.google.com/g/currency-converter"
305+
testGroupLink :: URI
306+
testGroupLink =
307+
[URI.uri|https://groups.google.com/g/currency-converter|]
312308

313-
functoraLink :: Prelude.Text
314-
functoraLink = "https://functora.github.io/"
309+
functoraLink :: URI
310+
functoraLink =
311+
[URI.uri|https://functora.github.io/|]
315312

316-
sourceLink :: Prelude.Text
313+
sourceLink :: URI
317314
sourceLink =
318-
"https://github.com/functora/functora.github.io/tree/master/ghcjs/lightning-verifier"
315+
[URI.uri|https://github.com/functora/functora.github.io/tree/master/ghcjs/lightning-verifier|]
319316

320-
apkLink :: Prelude.Text
317+
apkLink :: URI
321318
apkLink =
322-
"https://github.com/functora/functora.github.io/releases/download/lightning-verifier-v"
323-
<> fromMisoString vsn
319+
either impureThrow id
320+
. URI.mkURI
321+
. fromMisoString @Prelude.Text
322+
$ "https://github.com/functora/functora.github.io/releases/download/lightning-verifier-v"
323+
<> vsn
324324
<> "/lightning-verifier-v"
325-
<> fromMisoString vsn
325+
<> vsn
326326
<> ".apk"

ghcjs/lightning-verifier/src/App/Widgets/Bolt11.hs

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import qualified Bitcoin.Address as Btc
1010
import qualified Data.Aeson as A
1111
import qualified Data.ByteString.Base16 as B16
1212
import qualified Data.ByteString.Lazy as BL
13-
import qualified Data.Text.Encoding as T
1413
import qualified Functora.Bolt11 as B11
1514
import Functora.Miso.Prelude
1615
import qualified Functora.Miso.Widgets.FieldPairs as FieldPairs
@@ -123,9 +122,9 @@ makeBolt11Viewer st =
123122
rawR = st ^. #stDocLnPreimage . #fieldOutput
124123
ln :: Either MisoString B11.Bolt11
125124
ln =
126-
first (mappend "Bad invoice - " . from @Prelude.String @MisoString)
125+
first (mappend "Bad invoice - " . toMisoString @Prelude.String)
127126
. B11.decodeBolt11
128-
$ from @MisoString @Prelude.Text rawLn
127+
$ fromMisoString @Prelude.Text rawLn
129128
rh :: Either MisoString ByteString
130129
rh = ln >>= parsePreimageHash
131130
r :: Either MisoString ByteString
@@ -149,12 +148,13 @@ plain =
149148

150149
parsePreimage :: MisoString -> Either MisoString ByteString
151150
parsePreimage rawR =
152-
case B16.decode . T.encodeUtf8 $ from @MisoString @Prelude.Text rawR of
151+
case B16.decode $ fromMisoString @ByteString rawR of
153152
(r, "") -> Right r
154153
(_, e) ->
155154
Left
155+
. toMisoString @Prelude.String
156156
$ "Bad preimage - non hex leftover "
157-
<> from @Prelude.String @MisoString (Prelude.show e)
157+
<> Prelude.show e
158158

159159
parsePreimageHash :: B11.Bolt11 -> Either MisoString ByteString
160160
parsePreimageHash ln =
@@ -180,7 +180,11 @@ invoiceFields ln =
180180
B11.BitcoinRegtest -> "Bitcoin Regtest"
181181
B11.BitcoinSignet -> "Bitcoin Signet",
182182
pair "Amount"
183-
. maybe "0" B11.inspectBolt11HrpAmt
183+
. maybe
184+
"0"
185+
( toMisoString @Prelude.String
186+
. B11.inspectBolt11HrpAmt
187+
)
184188
. B11.bolt11HrpAmt
185189
$ B11.bolt11Hrp ln,
186190
pair "Created At"
@@ -191,6 +195,7 @@ invoiceFields ln =
191195
>>= invoiceFieldsTag ln
192196
)
193197
<> [ pair "Signature"
198+
. toMisoString @Prelude.String
194199
. B11.inspectHex
195200
$ B11.bolt11SigVal sig,
196201
pair "Pubkey Recovery Flag"
@@ -212,20 +217,21 @@ invoiceFieldsTag ln = \case
212217
pure . pair "Expires At" . inspectTimestamp $ x + B11.bolt11Timestamp ln
213218
B11.MinFinalCltvExpiry x ->
214219
pure . pair "Min Final CLTV Expiry" $ inspect x <> " Blocks"
215-
B11.OnchainFallback x -> do
216-
--
217-
-- TODO : do not ignore failure?
218-
--
219-
txt <- either (const mempty) pure . decodeUtf8' $ Btc.renderAddress x
220-
pure $ pair "Onchain Fallback" $ from @Prelude.Text @MisoString txt
220+
B11.OnchainFallback x ->
221+
pure
222+
. pair "Onchain Fallback"
223+
. toMisoString @ByteString
224+
$ Btc.renderAddress x
221225
B11.ExtraRouteInfo x ->
222226
pure
223227
. pair "Extra Routing Info"
224-
. either (const mempty) (from @Prelude.Text @MisoString)
225-
. decodeUtf8'
226-
. from @BL.ByteString @ByteString
228+
. toMisoString @BL.ByteString
227229
$ A.encode x
228-
B11.Features x -> pure . pair "Feature Bits" $ B11.inspectFeatures x
230+
B11.Features x ->
231+
pure
232+
. pair "Feature Bits"
233+
. toMisoString @Prelude.Text
234+
$ B11.inspectFeatures x
229235
B11.UnknownTag {} -> mempty
230236
B11.UnparsedTag {} -> mempty
231237
where
@@ -239,6 +245,7 @@ invoiceFieldsTag ln = \case
239245
hex x =
240246
pure
241247
. pair x
248+
. toMisoString @Prelude.String
242249
. B11.inspectHex
243250

244251
preimageFields :: MisoString -> ByteString -> [FieldPair DynamicField Identity]

ghcjs/lightning-verifier/src/App/Widgets/Fav.hs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@ where
66
import App.Types
77
import App.Widgets.Templates
88
import qualified Data.Map as Map
9-
import qualified Data.Text as T
109
import qualified Functora.Miso.Css as Css
1110
import qualified Functora.Miso.Jsm as Jsm
1211
import Functora.Miso.Prelude
1312
import qualified Functora.Miso.Widgets.Field as Field
1413
import qualified Functora.Miso.Widgets.Grid as Grid
1514
import qualified Material.Button as Button
1615
import qualified Material.Dialog as Dialog
17-
import qualified Text.URI as URI
16+
import qualified Miso.String as MS
1817

1918
fav :: Model -> [View Action]
2019
fav st =
@@ -75,8 +74,8 @@ fav st =
7574
closeAction = PushUpdate . Instant $ pure . (& #modelFav .~ Closed)
7675
saveAction nextSt = do
7776
ct <- getCurrentTime
77+
uri <- stUri nextSt
7878
let txt = makeFavName st
79-
let uri = either impureThrow id . URI.mkURI $ shareLink nextSt
8079
let nextFav = Fav {favUri = uri, favCreatedAt = ct}
8180
let nextFavName = makeFavName nextSt
8281
Jsm.popupText
@@ -114,14 +113,10 @@ fav st =
114113
else Jsm.enterOrEscapeBlur uid code
115114

116115
makeFavName :: Model -> MisoString
117-
makeFavName st =
118-
toMisoString
119-
. T.toUpper
120-
. T.strip
121-
$ fromMisoString preFavName
122-
where
123-
preFavName =
124-
st ^. #modelFavName . #fieldInput . #uniqueValue
116+
makeFavName =
117+
MS.toUpper
118+
. MS.strip
119+
. (^. #modelFavName . #fieldInput . #uniqueValue)
125120

126121
favItems :: Model -> [View Action]
127122
favItems st =

ghcjs/lightning-verifier/src/App/Widgets/Main.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ tosWidget =
209209
[ Miso.text "\169 2024 ",
210210
BrowserLink.browserLink
211211
BrowserLink.Args
212-
{ BrowserLink.argsLink = "https://functora.github.io/",
212+
{ BrowserLink.argsLink = functoraLink,
213213
BrowserLink.argsLabel = "Functora",
214214
BrowserLink.argsAction = PushUpdate . Instant
215215
},

ghcjs/lightning-verifier/src/App/Widgets/Menu.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import qualified Material.IconButton as IconButton
2020
import qualified Material.Theme as Theme
2121
import qualified Material.TopAppBar as TopAppBar
2222
import qualified Text.URI as URI
23+
import qualified Prelude
2324

2425
menu :: Model -> [View Action]
2526
menu st =
@@ -108,7 +109,9 @@ menu st =
108109
( PushUpdate
109110
. Instant
110111
. Jsm.shareText
111-
$ shareLink @MisoString st
112+
. toMisoString @Prelude.String
113+
. either impureThrow URI.renderStr
114+
$ stUri st
112115
)
113116
& IconButton.setAttributes
114117
[ TopAppBar.actionItem,
@@ -458,5 +461,3 @@ linksWidget st =
458461
PushUpdate
459462
. Instant
460463
. Jsm.openBrowserPage
461-
. either impureThrow id
462-
. URI.mkURI

ghcjs/lightning-verifier/src/App/Widgets/Templates.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import qualified App.Widgets.Bolt11 as B11
99
import qualified Functora.Aes as Aes
1010
import Functora.Cfg
1111
import Functora.Miso.Prelude
12+
import qualified Prelude
1213

1314
newModel :: (MonadThrow m, MonadUnliftIO m) => Maybe Model -> URI -> m Model
1415
newModel mSt uri = do
@@ -63,7 +64,7 @@ newModel mSt uri = do
6364
bDoc :: ByteString <-
6465
maybe
6566
( throwString
66-
@MisoString
67+
@Prelude.String
6768
"Failed to decrypt the document!"
6869
)
6970
pure

ghcjs/lightning-verifier/src/Main.hs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Network.Wai.Application.Static
99
import qualified Network.Wai.Handler.Warp as Warp
1010
import qualified Network.WebSockets as Ws
1111
import qualified Data.ByteString.Lazy as BL
12-
import qualified Data.Text as T
12+
import qualified Miso.String as MS
1313
#endif
1414

1515
#ifdef wasi_HOST_OS
@@ -84,7 +84,7 @@ runApp app = do
8484
staticApp (defaultWebAppSettings "static") req
8585
("site.webmanifest" : _) ->
8686
staticApp (defaultWebAppSettings "static") req
87-
(file : _) | (T.isSuffixOf ".js" file) && (file /= "jsaddle.js") ->
87+
(file : _) | (MS.isSuffixOf ".js" file) && (file /= "jsaddle.js") ->
8888
staticApp (defaultWebAppSettings "static") req
8989
_ ->
9090
JS.jsaddleAppWithJs (JS.jsaddleJs False <> js) req
@@ -177,16 +177,16 @@ updateModel (ChanUpdate prevSt) _ = do
177177
)
178178
$ evalModel
179179
=<< foldlM (&) prevSt actions
180-
uri <- URI.mkURI $ shareLink nextSt
180+
uri <- stUri nextSt
181181
Jsm.insertStorage ("favorite-" <> vsn) (nextSt ^. #modelFavMap)
182182
Jsm.insertStorage ("current-" <> vsn) uri
183183
syncUri uri
184184
nextUri <- stUri $ nextSt & #modelState . #stScreen %~ unQrCode
185185
uriViewer <-
186186
newFieldPair mempty
187187
. DynamicFieldText
188-
. toMisoString
189-
$ URI.render nextUri
188+
. toMisoString @Prelude.String
189+
$ URI.renderStr nextUri
190190
let finSt =
191191
nextSt
192192
& #modelUriViewer
@@ -269,7 +269,12 @@ syncInputs st = do
269269
where
270270
fun :: Unique MisoString -> JSM (Unique MisoString)
271271
fun txt = do
272-
el <- getElementById . htmlUid @MisoString $ txt ^. #uniqueUid
272+
el <-
273+
getElementById
274+
. toMisoString @(UTF_8 ByteString)
275+
. htmlUid
276+
$ txt
277+
^. #uniqueUid
273278
elExist <- ghcjsPure $ JS.isTruthy el
274279
when elExist $ do
275280
inps <-

0 commit comments

Comments
 (0)