git.iko.soy/rowtype-yoga/purescript-arraybuffer-builder
on master help sign in
Prep for v3.1.0
commit51d48bedfd191fa7cab61cc23d2e6b576695d301 authorJames Brock <jamesbrock@gmail.com> dateSat 10 Dec 2022, 18:02 (4 years ago) parenta2a090c
7 files changed+49−18
CHANGELOG.md+5 README.md+10−9 bower.json+3−3 packages.dhall+2−2 spago-dev.dhall+1 src/Data/ArrayBuffer/Builder.purs+2−2 test/Main.purs+26−2
CHANGELOG.md+5
@@ -1,5 +1,10 @@
11# Changelog
22
3+## v3.1.0 2022-12-10
4+
5+- Transfer to __rowtype-yoga__.
6+- Docs.
7+
38## v3.0.1 2022-05-04
49
510CI repair. Change `test.dhall` to `spago-dev.dhall`.
README.md+10−9
@@ -1,7 +1,8 @@
11# purescript-arraybuffer-builder
22
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)
44[![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)
56
67
78[`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`.
5051
5152We give this as an example, rather than supporting it in the library, because
5253it 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).
5455
5556```purescript
5657import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut)
5758import Data.ArrayBuffer.Typed (buffer)
58−import Data.TextEncoding (encodeUtf8)
5959import Data.ArrayBuffer.ArrayBuffer (byteLength)
60+import Web.Encoding.TextEncoder (new, textEncoder)
6061
6162putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
6263putStringUtf8 s = do
63− let stringbuf = buffer $ encodeUtf8 s
64− -- Put a 32-bit big-endian length prefix for the length of the utf8 string, in bytes.
64+ textEncoder <- liftEffect new
65+ let stringbuf = buffer $ encode s textEncoder
66+ -- Put a 32-bit big-endian length for the utf8 string, in bytes.
6567 putInt32be $ byteLength stringbuf
6668 putArrayBuffer stringbuf
6769
68−do
69− arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "BLM"
70+arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "🦝"
7071```
7172
7273### Serialize an `Array Int`
@@ -85,7 +86,7 @@ import Data.Array (length)
8586
8687putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
8788putArrayInt32 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.
8990 putInt32be 0
9091 putInt32be $ length xs
9192 traverse_ putInt32be xs
@@ -105,7 +106,7 @@ import Data.Array (foldRecM)
105106
106107putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
107108putArrayInt32 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.
109110 putInt32be 0
110111 putInt32be $ length xs
111112 foldRecM (\_ x -> putInt32be x) unit xs
bower.json+3−3
@@ -14,7 +14,7 @@
1414 "output"
1515 ],
1616 "dependencies": {
17− "purescript-arraybuffer": "^v13.0.0",
17+ "purescript-arraybuffer": "^v13.1.1",
1818 "purescript-arraybuffer-types": "^v3.0.2",
1919 "purescript-effect": "^v4.0.0",
2020 "purescript-float32": "^v2.0.0",
@@ -22,8 +22,8 @@
2222 "purescript-lists": "^v7.0.0",
2323 "purescript-maybe": "^v6.0.0",
2424 "purescript-newtype": "^v5.0.0",
25− "purescript-prelude": "^v6.0.0",
26− "purescript-tailrec": "^v6.0.0",
25+ "purescript-prelude": "^v6.0.1",
26+ "purescript-tailrec": "^v6.1.0",
2727 "purescript-transformers": "^v6.0.0",
2828 "purescript-uint": "^v7.0.0"
2929 }
packages.dhall+2−2
@@ -117,8 +117,8 @@ let additions =
117117-------------------------------
118118-}
119119let upstream =
120− https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.0-20220502/src/packages.dhall
121− sha256:38d347aeba9fe6359c208abe87a5cecf1ffb14294f11ad19664ae35c59b6e29a
120+ https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.4-20221209/src/packages.dhall
121+ sha256:b55c24bf585df4041ae6e87124cab7b35d474a9a77c9c3862ee6bf1dae618d72
122122
123123let overrides = {=}
124124
spago-dev.dhall+1
@@ -15,5 +15,6 @@ in conf //
1515 , dependencies = conf.dependencies #
1616 [ "assert"
1717 , "arrays"
18+ , "web-encoding"
1819 ]
1920 }
src/Data/ArrayBuffer/Builder.purs+2−2
@@ -5,10 +5,10 @@
55-- | Writing to an `ArrayBuffer` is an `Effect`ful activity, so most
66-- | functions in this module must be run in a `MonadEffect` context.
77-- |
8−-- | For operations for working with `ArrayBuffer`, see
8+-- | For other operations for working with `ArrayBuffer`, see
99-- | module
1010-- | [`Data.ArrayBuffer.ArrayBuffer`](https://pursuit.purescript.org/packages/purescript-arraybuffer/docs/Data.ArrayBuffer.ArrayBuffer)
11−-- | in package __purescript-arraybuffer__.
11+-- | in package __arraybuffer__.
1212module Data.ArrayBuffer.Builder
1313 ( PutM
1414 , Put
test/Main.purs+26−2
@@ -5,14 +5,20 @@ import Prelude
55import Control.Monad.Writer.Trans (tell)
66import Data.Array (foldRecM)
77import Data.Array as Array
8−import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putInt16be, putInt32le, putInt8, subBuilder)
8+import Data.ArrayBuffer.ArrayBuffer (byteLength)
9+import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putArrayBuffer, putInt16be, putInt32be, putInt32le, putInt8, subBuilder)
910import Data.ArrayBuffer.Builder.Internal (cons, encodeInt8, execBuilder, length, singleton, (<>>))
1011import Data.ArrayBuffer.DataView as DV
12+import Data.ArrayBuffer.Typed (buffer)
1113import 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)
1316import Data.UInt as UInt
1417import Effect (Effect)
18+import Effect.Class (class MonadEffect, liftEffect)
1519import Test.Assert (assertEqual')
20+import Web.Encoding.TextEncoder (encode)
21+import Web.Encoding.TextEncoder as TextEncoder
1622
1723asBytes :: ArrayBuffer -> Effect (Array Int)
1824asBytes x = do
@@ -120,3 +126,21 @@ main = do
120126 let stackblower = Array.replicate 20000 2
121127 putTest "Stack test" stackblower do
122128 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+ }