From e343513ff86d9e1809045901762c742114c39e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 17:47:36 +0200 Subject: [PATCH 01/14] Buffers are backed up by Uint8array --- index.js | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/index.js b/index.js index 2f69ae0..f228903 100644 --- a/index.js +++ b/index.js @@ -1,27 +1,13 @@ -var Buffer = require('buffer').Buffer +module.exports = buf => { + if (buf instanceof ArrayBuffer) return buf -module.exports = function (buf) { - // If the buffer is backed by a Uint8Array, a faster version will work - if (buf instanceof Uint8Array) { - // If the buffer isn't a subarray, return the underlying ArrayBuffer - if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { - return buf.buffer - } else if (typeof buf.buffer.slice === 'function') { - // Otherwise we need to get a proper copy - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) - } - } + if (!ArrayBuffer.isView(buf)) throw new Error('Argument must be a ArrayBufferView') - if (Buffer.isBuffer(buf)) { - // This is the slow version that will work with any Buffer - // implementation (even in old browsers) - var arrayCopy = new Uint8Array(buf.length) - var len = buf.length - for (var i = 0; i < len; i++) { - arrayCopy[i] = buf[i] - } - return arrayCopy.buffer - } else { - throw new Error('Argument must be a Buffer') + // If the buffer isn't a subarray, return the underlying ArrayBuffer + if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { + return buf.buffer } + + // Otherwise we need to get a proper copy + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) } From dc8ea663f0d3722043dc36c5f1aac23680b15413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 17:54:00 +0200 Subject: [PATCH 02/14] Remove buffer entirely closes #1 --- index.js | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/index.js b/index.js index 2f69ae0..f228903 100644 --- a/index.js +++ b/index.js @@ -1,27 +1,13 @@ -var Buffer = require('buffer').Buffer +module.exports = buf => { + if (buf instanceof ArrayBuffer) return buf -module.exports = function (buf) { - // If the buffer is backed by a Uint8Array, a faster version will work - if (buf instanceof Uint8Array) { - // If the buffer isn't a subarray, return the underlying ArrayBuffer - if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { - return buf.buffer - } else if (typeof buf.buffer.slice === 'function') { - // Otherwise we need to get a proper copy - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) - } - } + if (!ArrayBuffer.isView(buf)) throw new Error('Argument must be a ArrayBufferView') - if (Buffer.isBuffer(buf)) { - // This is the slow version that will work with any Buffer - // implementation (even in old browsers) - var arrayCopy = new Uint8Array(buf.length) - var len = buf.length - for (var i = 0; i < len; i++) { - arrayCopy[i] = buf[i] - } - return arrayCopy.buffer - } else { - throw new Error('Argument must be a Buffer') + // If the buffer isn't a subarray, return the underlying ArrayBuffer + if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { + return buf.buffer } + + // Otherwise we need to get a proper copy + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) } From 103869c322389fc965d83d6dd052345227ed754c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 17:54:42 +0200 Subject: [PATCH 03/14] Add files to package.json closes #2 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 9ed4674..ac36134 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "test-browser": "airtap --loopback airtap.local -- test.js", "test-browser-local": "airtap --no-instrument --local 8080 -- test.js" }, + "files": ["index.js"], "repository": { "type": "git", "url": "git://github.com/jhiesey/to-arraybuffer.git" From f10b7e3f2b5860e632bb17eaea2537b7ef547a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 17:55:52 +0200 Subject: [PATCH 04/14] Use Buffer.alloc in tests closes #3 --- test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test.js b/test.js index 1814ae3..c87270e 100644 --- a/test.js +++ b/test.js @@ -14,7 +14,7 @@ function elementsEqual (ab, buffer) { } test('Basic behavior', function (t) { - var buf = new Buffer(10) + var buf = Buffer.alloc(10) for (var i = 0; i < 10; i++) { buf[i] = i } @@ -27,7 +27,7 @@ test('Basic behavior', function (t) { }) test('Behavior when input is a subarray 1', function (t) { - var origBuf = new Buffer(10) + var origBuf = Buffer.alloc(10) for (var i = 0; i < 10; i++) { origBuf[i] = i } @@ -42,7 +42,7 @@ test('Behavior when input is a subarray 1', function (t) { }) test('Behavior when input is a subarray 2', function (t) { - var origBuf = new Buffer(10) + var origBuf = Buffer.alloc(10) for (var i = 0; i < 10; i++) { origBuf[i] = i } From b529c074e29be3e19170bd40fee94ff7326cce86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:03:51 +0200 Subject: [PATCH 05/14] updated dev dependencies --- package.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ac36134..0aee88f 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "test-browser": "airtap --loopback airtap.local -- test.js", "test-browser-local": "airtap --no-instrument --local 8080 -- test.js" }, - "files": ["index.js"], + "files": [ + "index.js" + ], "repository": { "type": "git", "url": "git://github.com/jhiesey/to-arraybuffer.git" @@ -29,7 +31,7 @@ }, "homepage": "https://github.com/jhiesey/to-arraybuffer#readme", "devDependencies": { - "airtap": "^0.0.5", - "tape": "^4.9.0" + "airtap": "^3.0.0", + "tape": "^5.2.2" } } From 94b5d70bb771140bf29044cb3deeff8221b2a267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:06:16 +0200 Subject: [PATCH 06/14] standard --fix --- index.js | 16 +++++------ test.js | 84 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/index.js b/index.js index f228903..07fb532 100644 --- a/index.js +++ b/index.js @@ -1,13 +1,13 @@ module.exports = buf => { - if (buf instanceof ArrayBuffer) return buf + if (buf instanceof ArrayBuffer) return buf - if (!ArrayBuffer.isView(buf)) throw new Error('Argument must be a ArrayBufferView') + if (!ArrayBuffer.isView(buf)) throw new Error('Argument must be a ArrayBufferView') - // If the buffer isn't a subarray, return the underlying ArrayBuffer - if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { - return buf.buffer - } + // If the buffer isn't a subarray, return the underlying ArrayBuffer + if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { + return buf.buffer + } - // Otherwise we need to get a proper copy - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) + // Otherwise we need to get a proper copy + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) } diff --git a/test.js b/test.js index c87270e..8ac75f4 100644 --- a/test.js +++ b/test.js @@ -1,57 +1,57 @@ -var Buffer = require('buffer').Buffer -var test = require('tape') +const Buffer = require('buffer').Buffer +const test = require('tape') -var toArrayBuffer = require('.') +const toArrayBuffer = require('.') function elementsEqual (ab, buffer) { - var view = new Uint8Array(ab) - for (var i = 0; i < view.length; i++) { - if (view[i] !== buffer[i]) { - return false - } - } - return true + const view = new Uint8Array(ab) + for (let i = 0; i < view.length; i++) { + if (view[i] !== buffer[i]) { + return false + } + } + return true } test('Basic behavior', function (t) { - var buf = Buffer.alloc(10) - for (var i = 0; i < 10; i++) { - buf[i] = i - } + const buf = Buffer.alloc(10) + for (let i = 0; i < 10; i++) { + buf[i] = i + } - var ab = toArrayBuffer(buf) + const ab = toArrayBuffer(buf) - t.equals(ab.byteLength, 10, 'correct length') - t.ok(elementsEqual(ab, buf), 'elements equal') - t.end() + t.equals(ab.byteLength, 10, 'correct length') + t.ok(elementsEqual(ab, buf), 'elements equal') + t.end() }) test('Behavior when input is a subarray 1', function (t) { - var origBuf = Buffer.alloc(10) - for (var i = 0; i < 10; i++) { - origBuf[i] = i - } - var buf = origBuf.slice(1) - - var ab = toArrayBuffer(buf) - - t.equals(ab.byteLength, 9, 'correct length') - t.ok(elementsEqual(ab, buf), 'elements equal') - t.notOk(ab === buf.buffer, 'the underlying ArrayBuffer is not returned when incorrect') - t.end() + const origBuf = Buffer.alloc(10) + for (let i = 0; i < 10; i++) { + origBuf[i] = i + } + const buf = origBuf.slice(1) + + const ab = toArrayBuffer(buf) + + t.equals(ab.byteLength, 9, 'correct length') + t.ok(elementsEqual(ab, buf), 'elements equal') + t.notOk(ab === buf.buffer, 'the underlying ArrayBuffer is not returned when incorrect') + t.end() }) test('Behavior when input is a subarray 2', function (t) { - var origBuf = Buffer.alloc(10) - for (var i = 0; i < 10; i++) { - origBuf[i] = i - } - var buf = origBuf.slice(0, 9) - - var ab = toArrayBuffer(buf) - - t.equals(ab.byteLength, 9, 'correct length') - t.ok(elementsEqual(ab, buf), 'elements equal') - t.notOk(ab === buf.buffer, 'the underlying ArrayBuffer is not returned when incorrect') - t.end() + const origBuf = Buffer.alloc(10) + for (let i = 0; i < 10; i++) { + origBuf[i] = i + } + const buf = origBuf.slice(0, 9) + + const ab = toArrayBuffer(buf) + + t.equals(ab.byteLength, 9, 'correct length') + t.ok(elementsEqual(ab, buf), 'elements equal') + t.notOk(ab === buf.buffer, 'the underlying ArrayBuffer is not returned when incorrect') + t.end() }) From c9f9ee2178f9e0f0648225476093ea9629a70d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:09:23 +0200 Subject: [PATCH 07/14] unnecessary check --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 07fb532..079e308 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,7 @@ module.exports = buf => { if (!ArrayBuffer.isView(buf)) throw new Error('Argument must be a ArrayBufferView') // If the buffer isn't a subarray, return the underlying ArrayBuffer - if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { + if (buf.byteLength === buf.buffer.byteLength) { return buf.buffer } From 3475c801abb9bcf5025a7e9b326dcf34b041b5cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:09:32 +0200 Subject: [PATCH 08/14] jsdoc --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index 079e308..67309f6 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,4 @@ +/** @param {ArrayBufferView} buf */ module.exports = buf => { if (buf instanceof ArrayBuffer) return buf From 683af519843c3e59029b7df5e5bb4491036791ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:10:19 +0200 Subject: [PATCH 09/14] Treat extension-less no different (ESM convention) --- test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.js b/test.js index 8ac75f4..49ce72e 100644 --- a/test.js +++ b/test.js @@ -1,7 +1,7 @@ const Buffer = require('buffer').Buffer const test = require('tape') -const toArrayBuffer = require('.') +const toArrayBuffer = require('./index.js') function elementsEqual (ab, buffer) { const view = new Uint8Array(ab) From a2d8d7b1902f01ba882098320a8ee8dce9524784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:13:03 +0200 Subject: [PATCH 10/14] updated example --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6bdef26..f0aeda7 100644 --- a/README.md +++ b/README.md @@ -13,15 +13,15 @@ when using [the Buffer implementation provided by Browserify](https://www.npmjs. ## Usage ``` js -var toArrayBuffer = require('to-arraybuffer') +import toArrayBuffer from 'to-arraybuffer' -var buffer = new Buffer(100) +const buffer = Buffer.alloc(100) // Fill the buffer with some data -var ab = toArrayBuffer(buffer) +const ab = toArrayBuffer(buffer) // `ab` now contains the same data as `buffer` ``` ## License -MIT \ No newline at end of file +MIT From 78c30e5c23b9d7d8a2d7becca182d372a46005a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:16:18 +0200 Subject: [PATCH 11/14] closer to esm style --- test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.js b/test.js index 49ce72e..6235a8c 100644 --- a/test.js +++ b/test.js @@ -1,4 +1,4 @@ -const Buffer = require('buffer').Buffer +const { Buffer } = require('buffer') const test = require('tape') const toArrayBuffer = require('./index.js') From 029251479e1f45efa2acac2565f4140b5e9151fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:19:48 +0200 Subject: [PATCH 12/14] make it tighter --- index.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 67309f6..86b6564 100644 --- a/index.js +++ b/index.js @@ -5,10 +5,8 @@ module.exports = buf => { if (!ArrayBuffer.isView(buf)) throw new Error('Argument must be a ArrayBufferView') // If the buffer isn't a subarray, return the underlying ArrayBuffer - if (buf.byteLength === buf.buffer.byteLength) { - return buf.buffer - } - - // Otherwise we need to get a proper copy - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) + // Otherwise we need to get a proper copy + return buf.byteLength === buf.buffer.byteLength + ? buf.buffer + : buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) } From 4ec6c0d8528d8609f675048b9f6fa8f7642d2a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:34:50 +0200 Subject: [PATCH 13/14] fix indentation --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 86b6564..138d159 100644 --- a/index.js +++ b/index.js @@ -5,7 +5,7 @@ module.exports = buf => { if (!ArrayBuffer.isView(buf)) throw new Error('Argument must be a ArrayBufferView') // If the buffer isn't a subarray, return the underlying ArrayBuffer - // Otherwise we need to get a proper copy + // Otherwise we need to get a proper copy return buf.byteLength === buf.buffer.byteLength ? buf.buffer : buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) From 2d0f5785f51b0f6e74fc353bd8d31f46ed07c109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20Wa=CC=88rting?= Date: Fri, 9 Jul 2021 18:35:32 +0200 Subject: [PATCH 14/14] fix indentation --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 138d159..55d2cef 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,6 @@ module.exports = buf => { // If the buffer isn't a subarray, return the underlying ArrayBuffer // Otherwise we need to get a proper copy return buf.byteLength === buf.buffer.byteLength - ? buf.buffer + ? buf.buffer : buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) }