git.iko.soy/rowtype-yoga/purescript-arraybuffer-builder
on master help sign in
.github/workflows/ci.yml−3
since splitsnapshots
unifiedsplit
@@ -44,6 +44,3 @@ jobs:
44 npm install bower pulp@16.0.0-0
44 npm install bower pulp@16.0.0-0
45 npx bower install
45 npx bower install
46 npx pulp build -- --censor-lib --strict
46 npx pulp build -- --censor-lib --strict
47− if [ -d "test" ]; then
48− npx pulp test
49− fi
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`.
DEVELOPMENT.mddeleted−43
@@ -1,43 +0,0 @@
1−# Development Notes
2−
3−All of the commands needed for development are in the `shell.nix` environment.
4−
5−```
6−$ nix-shell
7−```
8−
9−## Edit
10−
11−The `psc-ide` command is available for the [VS Code Purescript IDE extension](https://github.com/nwolverson/vscode-ide-purescript.git).
12−
13−```
14−[nix-shell:]$ code .
15−```
16−
17−## Build
18−
19−```
20−[nix-shell:]$ spago build
21−```
22−
23−## Test
24−
25−The test dependencies are specified seperately in `test.dhall`.
26−
27−```
28−[nix-shell:]$ spago -x test.dhall test
29−```
30−
31−## Publishing to Pursuit with `spago`
32−
33−[Publishing with `spago`](https://github.com/purescript/spago#publish-my-library).
34−
35−```
36−[nix-shell:]$ bower install --save
37−[nix-shell:]$ spago bump-version --no-dry-run major
38−[nix-shell:]$ pulp publish --no-push
39−```
40−
41−## Bower
42−
43−The `bower.json` is generated by running `spago bump-version`, do not edit it.
README.md+17−12
@@ -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,26 @@ 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
57+import Effect.Class (class MonadEffect, liftEffect)
58+import Data.UInt (fromInt)
59+import Data.ArrayBuffer.Types (ArrayBuffer(..))
56−import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut)
60+import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut, putUint32be)
57import Data.ArrayBuffer.Typed (buffer)
61import Data.ArrayBuffer.Typed (buffer)
58−import Data.TextEncoding (encodeUtf8)
59import Data.ArrayBuffer.ArrayBuffer (byteLength)
62import Data.ArrayBuffer.ArrayBuffer (byteLength)
63+import Web.Encoding.TextEncoder (new, TextEncoder, encode)
60
64
61putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
65putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
62putStringUtf8 s = do
66putStringUtf8 s = do
67+ textEncoder <- liftEffect new
63− let stringbuf = buffer $ encodeUtf8 s
68+ let stringbuf = buffer $ encode s textEncoder
64− -- Put a 32-bit big-endian length prefix for the length of the utf8 string, in bytes.
69+ -- Put a 32-bit big-endian length for the utf8 string, in bytes.
65− putInt32be $ byteLength stringbuf
70+ putUint32be $ fromInt $ byteLength stringbuf
66 putArrayBuffer stringbuf
71 putArrayBuffer stringbuf
67
72
68−do
69− arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "BLM"
73+arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "🦝"
70```
74```
71
75
72### Serialize an `Array Int`
76### Serialize an `Array Int`
@@ -85,7 +89,7 @@ import Data.Array (length)
85
89
86putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
90putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
87putArrayInt32 xs = do
91putArrayInt32 xs = do
88− -- Put a 64-bit big-endian length prefix for the length of the array.
92+ -- Put a 64-bit big-endian length prefix for the array.
89 putInt32be 0
93 putInt32be 0
90 putInt32be $ length xs
94 putInt32be $ length xs
91 traverse_ putInt32be xs
95 traverse_ putInt32be xs
@@ -105,7 +109,7 @@ import Data.Array (foldRecM)
105
109
106putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
110putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
107putArrayInt32 xs = do
111putArrayInt32 xs = do
108− -- Put a 64-bit big-endian length prefix for the length of the array.
112+ -- Put a 64-bit big-endian length prefix for the array.
109 putInt32be 0
113 putInt32be 0
110 putInt32be $ length xs
114 putInt32be $ length xs
111 foldRecM (\_ x -> putInt32be x) unit xs
115 foldRecM (\_ x -> putInt32be x) unit xs
@@ -120,7 +124,7 @@ of the `PutM` builder expression are stack-safe.
120
124
121This package is only for writing `ArrayBuffer`s, not reading them.
125This package is only for writing `ArrayBuffer`s, not reading them.
122See
126See
123−[__purescript-parsing-dataview__](https://pursuit.purescript.org/packages/purescript-parsing-dataview/)
127+[__parsing-dataview__](https://pursuit.purescript.org/packages/purescript-parsing-dataview/)
124for a way to deserialize from `ArrayBuffer` back to Purescript data.
128for a way to deserialize from `ArrayBuffer` back to Purescript data.
125
129
126## Alternative packages for serializing to an `ArrayBuffer`
130## Alternative packages for serializing to an `ArrayBuffer`
@@ -129,6 +133,7 @@ for a way to deserialize from `ArrayBuffer` back to Purescript data.
129* [__node-buffer__](https://pursuit.purescript.org/packages/purescript-node-buffer)
133* [__node-buffer__](https://pursuit.purescript.org/packages/purescript-node-buffer)
130* [__arraybuffer-class__](https://pursuit.purescript.org/packages/purescript-arraybuffer-class)
134* [__arraybuffer-class__](https://pursuit.purescript.org/packages/purescript-arraybuffer-class)
131* [__bytestrings__](https://pursuit.purescript.org/packages/purescript-bytestrings/)
135* [__bytestrings__](https://pursuit.purescript.org/packages/purescript-bytestrings/)
136+* [__array-builder__](https://pursuit.purescript.org/packages/purescript-array-builder)
132
137
133## Development
138## Development
134
139
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
psc-package.jsondeleted−16
@@ -1,16 +0,0 @@
1−{
2− "name": "purescript-arraybuffer-builder",
3− "set": "psc-0.14.1-20210429",
4− "source": "https://github.com/purescript/package-sets.git",
5− "depends": [
6− "prelude",
7− "effect",
8− "float32",
9− "maybe",
10− "prelude",
11− "transformers",
12− "uint",
13− "arraybuffer-types",
14− "arraybuffer"
15− ]
16−}
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+ }