git.iko.soy/rowtype-yoga/purescript-arraybuffer-builder
on master help sign in
Prep for v3.1.0
51d48beJames Brock
CHANGELOG.md+5
@@ -1,5 +1,10 @@
1# Changelog
1# Changelog
2
2
3+## v3.1.0 2022-12-10
4+
5+- Transfer to __rowtype-yoga__.
6+- Docs.
7+
3## v3.0.1 2022-05-04
8## v3.0.1 2022-05-04
4
9
5CI repair. Change `test.dhall` to `spago-dev.dhall`.
10CI repair. Change `test.dhall` to `spago-dev.dhall`.
README.md+10−9
@@ -1,7 +1,8 @@
1# purescript-arraybuffer-builder
1# purescript-arraybuffer-builder
2
2
3−[![CI](https://github.com/jamesdbrock/purescript-arraybuffer-builder/workflows/CI/badge.svg?branch=master)](https://github.com/jamesdbrock/purescript-arraybuffer-builder/actions)
3+[![CI](https://github.com/rowtype-yoga/purescript-arraybuffer-builder/workflows/CI/badge.svg?branch=master)](https://github.com/rowtype-yoga/purescript-arraybuffer-builder/actions)
4[![Pursuit](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/badge)](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/)
4[![Pursuit](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/badge)](http://pursuit.purescript.org/packages/purescript-arraybuffer-builder/)
5+[![Maintainer: jamesdbrock](https://img.shields.io/badge/maintainer-jamesdbrock-teal.svg)](https://github.com/jamesdbrock)
5
6
6
7
7[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
8[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
@@ -50,23 +51,23 @@ Encode a `String` as UTF8 with a length prefix into our `Builder`.
50
51
51We give this as an example, rather than supporting it in the library, because
52We give this as an example, rather than supporting it in the library, because
52it depends on
53it depends on
53−[`Data.TextEncoding.encodeUtf8`](https://pursuit.purescript.org/packages/purescript-text-encoding/docs/Data.TextEncoding#v:encodeUtf8).
54+[`Web.Encoding.TextEncoder`](https://pursuit.purescript.org/packages/purescript-web-encoding/docs/Web.Encoding.TextEncoder).
54
55
55```purescript
56```purescript
56import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut)
57import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut)
57import Data.ArrayBuffer.Typed (buffer)
58import Data.ArrayBuffer.Typed (buffer)
58−import Data.TextEncoding (encodeUtf8)
59import Data.ArrayBuffer.ArrayBuffer (byteLength)
59import Data.ArrayBuffer.ArrayBuffer (byteLength)
60+import Web.Encoding.TextEncoder (new, textEncoder)
60
61
61putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
62putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
62putStringUtf8 s = do
63putStringUtf8 s = do
64+ textEncoder <- liftEffect new
63− let stringbuf = buffer $ encodeUtf8 s
65+ let stringbuf = buffer $ encode s textEncoder
64− -- Put a 32-bit big-endian length prefix for the length of the utf8 string, in bytes.
66+ -- Put a 32-bit big-endian length for the utf8 string, in bytes.
65 putInt32be $ byteLength stringbuf
67 putInt32be $ byteLength stringbuf
66 putArrayBuffer stringbuf
68 putArrayBuffer stringbuf
67
69
68−do
69− arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "BLM"
70+arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "🦝"
70```
71```
71
72
72### Serialize an `Array Int`
73### Serialize an `Array Int`
@@ -85,7 +86,7 @@ import Data.Array (length)
85
86
86putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
87putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
87putArrayInt32 xs = do
88putArrayInt32 xs = do
88− -- Put a 64-bit big-endian length prefix for the length of the array.
89+ -- Put a 64-bit big-endian length prefix for the array.
89 putInt32be 0
90 putInt32be 0
90 putInt32be $ length xs
91 putInt32be $ length xs
91 traverse_ putInt32be xs
92 traverse_ putInt32be xs
@@ -105,7 +106,7 @@ import Data.Array (foldRecM)
105
106
106putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
107putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
107putArrayInt32 xs = do
108putArrayInt32 xs = do
108− -- Put a 64-bit big-endian length prefix for the length of the array.
109+ -- Put a 64-bit big-endian length prefix for the array.
109 putInt32be 0
110 putInt32be 0
110 putInt32be $ length xs
111 putInt32be $ length xs
111 foldRecM (\_ x -> putInt32be x) unit xs
112 foldRecM (\_ x -> putInt32be x) unit xs
bower.json+3−3
@@ -14,7 +14,7 @@
14 "output"
14 "output"
15 ],
15 ],
16 "dependencies": {
16 "dependencies": {
17− "purescript-arraybuffer": "^v13.0.0",
17+ "purescript-arraybuffer": "^v13.1.1",
18 "purescript-arraybuffer-types": "^v3.0.2",
18 "purescript-arraybuffer-types": "^v3.0.2",
19 "purescript-effect": "^v4.0.0",
19 "purescript-effect": "^v4.0.0",
20 "purescript-float32": "^v2.0.0",
20 "purescript-float32": "^v2.0.0",
@@ -22,8 +22,8 @@
22 "purescript-lists": "^v7.0.0",
22 "purescript-lists": "^v7.0.0",
23 "purescript-maybe": "^v6.0.0",
23 "purescript-maybe": "^v6.0.0",
24 "purescript-newtype": "^v5.0.0",
24 "purescript-newtype": "^v5.0.0",
25− "purescript-prelude": "^v6.0.0",
25+ "purescript-prelude": "^v6.0.1",
26− "purescript-tailrec": "^v6.0.0",
26+ "purescript-tailrec": "^v6.1.0",
27 "purescript-transformers": "^v6.0.0",
27 "purescript-transformers": "^v6.0.0",
28 "purescript-uint": "^v7.0.0"
28 "purescript-uint": "^v7.0.0"
29 }
29 }
packages.dhall+2−2
@@ -117,8 +117,8 @@ let additions =
117-------------------------------
117-------------------------------
118-}
118-}
119let upstream =
119let upstream =
120− https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.0-20220502/src/packages.dhall
120+ https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.4-20221209/src/packages.dhall
121− sha256:38d347aeba9fe6359c208abe87a5cecf1ffb14294f11ad19664ae35c59b6e29a
121+ sha256:b55c24bf585df4041ae6e87124cab7b35d474a9a77c9c3862ee6bf1dae618d72
122
122
123let overrides = {=}
123let overrides = {=}
124
124
spago-dev.dhall+1
@@ -15,5 +15,6 @@ in conf //
15 , dependencies = conf.dependencies #
15 , dependencies = conf.dependencies #
16 [ "assert"
16 [ "assert"
17 , "arrays"
17 , "arrays"
18+ , "web-encoding"
18 ]
19 ]
19 }
20 }
src/Data/ArrayBuffer/Builder.purs+2−2
@@ -5,10 +5,10 @@
5-- | Writing to an `ArrayBuffer` is an `Effect`ful activity, so most
5-- | Writing to an `ArrayBuffer` is an `Effect`ful activity, so most
6-- | functions in this module must be run in a `MonadEffect` context.
6-- | functions in this module must be run in a `MonadEffect` context.
7-- |
7-- |
8−-- | For operations for working with `ArrayBuffer`, see
8+-- | For other operations for working with `ArrayBuffer`, see
9-- | module
9-- | module
10-- | [`Data.ArrayBuffer.ArrayBuffer`](https://pursuit.purescript.org/packages/purescript-arraybuffer/docs/Data.ArrayBuffer.ArrayBuffer)
10-- | [`Data.ArrayBuffer.ArrayBuffer`](https://pursuit.purescript.org/packages/purescript-arraybuffer/docs/Data.ArrayBuffer.ArrayBuffer)
11−-- | in package __purescript-arraybuffer__.
11+-- | in package __arraybuffer__.
12module Data.ArrayBuffer.Builder
12module Data.ArrayBuffer.Builder
13 ( PutM
13 ( PutM
14 , Put
14 , Put
test/Main.purs+26−2
@@ -5,14 +5,20 @@ import Prelude
5import Control.Monad.Writer.Trans (tell)
5import Control.Monad.Writer.Trans (tell)
6import Data.Array (foldRecM)
6import Data.Array (foldRecM)
7import Data.Array as Array
7import Data.Array as Array
8+import Data.ArrayBuffer.ArrayBuffer (byteLength)
8−import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putInt16be, putInt32le, putInt8, subBuilder)
9+import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putArrayBuffer, putInt16be, putInt32be, putInt32le, putInt8, subBuilder)
9import Data.ArrayBuffer.Builder.Internal (cons, encodeInt8, execBuilder, length, singleton, (<>>))
10import Data.ArrayBuffer.Builder.Internal (cons, encodeInt8, execBuilder, length, singleton, (<>>))
10import Data.ArrayBuffer.DataView as DV
11import Data.ArrayBuffer.DataView as DV
12+import Data.ArrayBuffer.Typed (buffer)
11import Data.ArrayBuffer.Typed as AT
13import Data.ArrayBuffer.Typed as AT
12−import Data.ArrayBuffer.Types (ArrayBuffer, Uint8Array)
14+import Data.ArrayBuffer.Typed as AV
15+import Data.ArrayBuffer.Types (ArrayBuffer, Uint8Array, Int8Array)
13import Data.UInt as UInt
16import Data.UInt as UInt
14import Effect (Effect)
17import Effect (Effect)
18+import Effect.Class (class MonadEffect, liftEffect)
15import Test.Assert (assertEqual')
19import Test.Assert (assertEqual')
20+import Web.Encoding.TextEncoder (encode)
21+import Web.Encoding.TextEncoder as TextEncoder
16
22
17asBytes :: ArrayBuffer -> Effect (Array Int)
23asBytes :: ArrayBuffer -> Effect (Array Int)
18asBytes x = do
24asBytes x = do
@@ -120,3 +126,21 @@ main = do
120 let stackblower = Array.replicate 20000 2
126 let stackblower = Array.replicate 20000 2
121 putTest "Stack test" stackblower do
127 putTest "Stack test" stackblower do
122 foldRecM (\_ x -> putInt8 x) unit stackblower
128 foldRecM (\_ x -> putInt8 x) unit stackblower
129+
130+ do
131+ let
132+ putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
133+ putStringUtf8 s = do
134+ textEncoder <- liftEffect TextEncoder.new
135+ let stringbuf = buffer $ encode s textEncoder
136+ -- Put a 32-bit big-endian length prefix for the length of the utf8 string, in bytes.
137+ putInt32be $ byteLength stringbuf
138+ putArrayBuffer stringbuf
139+
140+ arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "🦝"
141+ view :: Int8Array <- AV.whole arraybuffer
142+ viewarray <- AV.toArray view
143+ assertEqual' "utf-8 test"
144+ { actual: viewarray
145+ , expected: [ 0, 0, 0, 4, -16, -97, -90, -99 ]
146+ }