git.iko.soy/rowtype-yoga/purescript-arraybuffer-builder
on 60ad0c1 help sign in
.github/workflows/ci.yml+3
since splitsnapshots
unifiedsplit
@@ -44,3 +44,6 @@ 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,10 +1,5 @@
1# Changelog
1# Changelog
2
2
3−## v3.1.0 2022-12-10
4−
5−- Transfer to __rowtype-yoga__.
6−- Docs.
7−
8## v3.0.1 2022-05-04
3## v3.0.1 2022-05-04
9
4
10CI repair. Change `test.dhall` to `spago-dev.dhall`.
5CI repair. Change `test.dhall` to `spago-dev.dhall`.
DEVELOPMENT.mdnew file+43
@@ -0,0 +1,43 @@
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+12−17
@@ -1,8 +1,7 @@
1# purescript-arraybuffer-builder
1# purescript-arraybuffer-builder
2
2
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)
3+[![CI](https://github.com/jamesdbrock/purescript-arraybuffer-builder/workflows/CI/badge.svg?branch=master)](https://github.com/jamesdbrock/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)
6
5
7
6
8[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
7[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
@@ -51,26 +50,23 @@ Encode a `String` as UTF8 with a length prefix into our `Builder`.
51
50
52We give this as an example, rather than supporting it in the library, because
51We give this as an example, rather than supporting it in the library, because
53it depends on
52it depends on
54−[`Web.Encoding.TextEncoder`](https://pursuit.purescript.org/packages/purescript-web-encoding/docs/Web.Encoding.TextEncoder).
53+[`Data.TextEncoding.encodeUtf8`](https://pursuit.purescript.org/packages/purescript-text-encoding/docs/Data.TextEncoding#v:encodeUtf8).
55
54
56```purescript
55```purescript
57−import Effect.Class (class MonadEffect, liftEffect)
58−import Data.UInt (fromInt)
59−import Data.ArrayBuffer.Types (ArrayBuffer(..))
60−import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut, putUint32be)
56+import Data.ArrayBuffer.Builder (PutM, putArrayBuffer, execPut)
61import Data.ArrayBuffer.Typed (buffer)
57import Data.ArrayBuffer.Typed (buffer)
58+import Data.TextEncoding (encodeUtf8)
62import Data.ArrayBuffer.ArrayBuffer (byteLength)
59import Data.ArrayBuffer.ArrayBuffer (byteLength)
63−import Web.Encoding.TextEncoder (new, TextEncoder, encode)
64
60
65putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
61putStringUtf8 :: forall m. MonadEffect m => String -> PutM m Unit
66putStringUtf8 s = do
62putStringUtf8 s = do
67− textEncoder <- liftEffect new
68− let stringbuf = buffer $ encode s textEncoder
63+ let stringbuf = buffer $ encodeUtf8 s
69− -- Put a 32-bit big-endian length for the utf8 string, in bytes.
64+ -- Put a 32-bit big-endian length prefix for the length of the utf8 string, in bytes.
70− putUint32be $ fromInt $ byteLength stringbuf
65+ putInt32be $ byteLength stringbuf
71 putArrayBuffer stringbuf
66 putArrayBuffer stringbuf
72
67
68+do
73−arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "🦝"
69+ arraybuffer :: ArrayBuffer <- execPut $ putStringUtf8 "BLM"
74```
70```
75
71
76### Serialize an `Array Int`
72### Serialize an `Array Int`
@@ -89,7 +85,7 @@ import Data.Array (length)
89
85
90putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
86putArrayInt32 :: forall m. MonadEffect m => Array Int -> PutM m Unit
91putArrayInt32 xs = do
87putArrayInt32 xs = do
92− -- Put a 64-bit big-endian length prefix for the array.
88+ -- Put a 64-bit big-endian length prefix for the length of the array.
93 putInt32be 0
89 putInt32be 0
94 putInt32be $ length xs
90 putInt32be $ length xs
95 traverse_ putInt32be xs
91 traverse_ putInt32be xs
@@ -109,7 +105,7 @@ import Data.Array (foldRecM)
109
105
110putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
106putArrayInt32 :: forall m. MonadEffect m => MonadRec m => Array Int -> PutM m Unit
111putArrayInt32 xs = do
107putArrayInt32 xs = do
112− -- Put a 64-bit big-endian length prefix for the array.
108+ -- Put a 64-bit big-endian length prefix for the length of the array.
113 putInt32be 0
109 putInt32be 0
114 putInt32be $ length xs
110 putInt32be $ length xs
115 foldRecM (\_ x -> putInt32be x) unit xs
111 foldRecM (\_ x -> putInt32be x) unit xs
@@ -124,7 +120,7 @@ of the `PutM` builder expression are stack-safe.
124
120
125This package is only for writing `ArrayBuffer`s, not reading them.
121This package is only for writing `ArrayBuffer`s, not reading them.
126See
122See
127−[__parsing-dataview__](https://pursuit.purescript.org/packages/purescript-parsing-dataview/)
123+[__purescript-parsing-dataview__](https://pursuit.purescript.org/packages/purescript-parsing-dataview/)
128for a way to deserialize from `ArrayBuffer` back to Purescript data.
124for a way to deserialize from `ArrayBuffer` back to Purescript data.
129
125
130## Alternative packages for serializing to an `ArrayBuffer`
126## Alternative packages for serializing to an `ArrayBuffer`
@@ -133,7 +129,6 @@ for a way to deserialize from `ArrayBuffer` back to Purescript data.
133* [__node-buffer__](https://pursuit.purescript.org/packages/purescript-node-buffer)
129* [__node-buffer__](https://pursuit.purescript.org/packages/purescript-node-buffer)
134* [__arraybuffer-class__](https://pursuit.purescript.org/packages/purescript-arraybuffer-class)
130* [__arraybuffer-class__](https://pursuit.purescript.org/packages/purescript-arraybuffer-class)
135* [__bytestrings__](https://pursuit.purescript.org/packages/purescript-bytestrings/)
131* [__bytestrings__](https://pursuit.purescript.org/packages/purescript-bytestrings/)
136−* [__array-builder__](https://pursuit.purescript.org/packages/purescript-array-builder)
137
132
138## Development
133## Development
139
134
bower.json+3−3
@@ -14,7 +14,7 @@
14 "output"
14 "output"
15 ],
15 ],
16 "dependencies": {
16 "dependencies": {
17− "purescript-arraybuffer": "^v13.1.1",
17+ "purescript-arraybuffer": "^v13.0.0",
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.1",
25+ "purescript-prelude": "^v6.0.0",
26− "purescript-tailrec": "^v6.1.0",
26+ "purescript-tailrec": "^v6.0.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.4-20221209/src/packages.dhall
120+ https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.0-20220502/src/packages.dhall
121− sha256:b55c24bf585df4041ae6e87124cab7b35d474a9a77c9c3862ee6bf1dae618d72
121+ sha256:38d347aeba9fe6359c208abe87a5cecf1ffb14294f11ad19664ae35c59b6e29a
122
122
123let overrides = {=}
123let overrides = {=}
124
124
psc-package.jsonnew file+16
@@ -0,0 +1,16 @@
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,6 +15,5 @@ in conf //
15 , dependencies = conf.dependencies #
15 , dependencies = conf.dependencies #
16 [ "assert"
16 [ "assert"
17 , "arrays"
17 , "arrays"
18− , "web-encoding"
19 ]
18 ]
20 }
19 }
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 other operations for working with `ArrayBuffer`, see
8+-- | For 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 __arraybuffer__.
11+-- | in package __purescript-arraybuffer__.
12module Data.ArrayBuffer.Builder
12module Data.ArrayBuffer.Builder
13 ( PutM
13 ( PutM
14 , Put
14 , Put
test/Main.purs+2−26
@@ -5,20 +5,14 @@ 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)
9−import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putArrayBuffer, putInt16be, putInt32be, putInt32le, putInt8, subBuilder)
8+import Data.ArrayBuffer.Builder (Builder, DataBuff(..), PutM, execPut, putInt16be, putInt32le, putInt8, subBuilder)
10import Data.ArrayBuffer.Builder.Internal (cons, encodeInt8, execBuilder, length, singleton, (<>>))
9import Data.ArrayBuffer.Builder.Internal (cons, encodeInt8, execBuilder, length, singleton, (<>>))
11import Data.ArrayBuffer.DataView as DV
10import Data.ArrayBuffer.DataView as DV
12−import Data.ArrayBuffer.Typed (buffer)
13import Data.ArrayBuffer.Typed as AT
11import Data.ArrayBuffer.Typed as AT
14−import Data.ArrayBuffer.Typed as AV
12+import Data.ArrayBuffer.Types (ArrayBuffer, Uint8Array)
15−import Data.ArrayBuffer.Types (ArrayBuffer, Uint8Array, Int8Array)
16import Data.UInt as UInt
13import Data.UInt as UInt
17import Effect (Effect)
14import Effect (Effect)
18−import Effect.Class (class MonadEffect, liftEffect)
19import Test.Assert (assertEqual')
15import Test.Assert (assertEqual')
20−import Web.Encoding.TextEncoder (encode)
21−import Web.Encoding.TextEncoder as TextEncoder
22
16
23asBytes :: ArrayBuffer -> Effect (Array Int)
17asBytes :: ArrayBuffer -> Effect (Array Int)
24asBytes x = do
18asBytes x = do
@@ -126,21 +120,3 @@ main = do
126 let stackblower = Array.replicate 20000 2
120 let stackblower = Array.replicate 20000 2
127 putTest "Stack test" stackblower do
121 putTest "Stack test" stackblower do
128 foldRecM (\_ x -> putInt8 x) unit stackblower
122 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− }