New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

buffer-backed-object

Package Overview
Dependencies
Maintainers
2
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

buffer-backed-object - npm Package Compare versions

Comparing version

to
1.0.1

70

buffer-backed-object.test.js

@@ -345,1 +345,71 @@ import { expect, test } from "vitest";

});
test("NestedArrayOfBufferBackedObjects test raw bufferview", function () {
const BBOVec3 = BBO.NestedBufferBackedObject({
x: BBO.Float32(),
y: BBO.Float32(),
z: BBO.Float32(),
});
const structDesc = {
ambient: BBOVec3,
lightCount: BBO.Float32(),
lights: BBO.NestedArrayOfBufferBackedObjects(1, {
position: BBOVec3,
range: BBO.Float32(),
color: BBOVec3,
intensity: BBO.Float32(),
}),
};
const buffer = new ArrayBuffer(BBO.structSize(structDesc));
const view = BBO.BufferBackedObject(buffer, structDesc);
view.ambient.x = 1;
view.ambient.y = 2;
view.ambient.z = 3;
view.lightCount = 4;
view.lights.forEach(light => {
light.position.x = 5;
light.position.y = 6;
light.position.z = 7;
light.range = 8;
light.color.x = 9;
light.color.y = 10;
light.color.z = 11;
light.intensity = 12;
});
const f32 = new Float32Array(buffer);
expect(f32[0]).toBe(1);
expect(f32[1]).toBe(2);
expect(f32[2]).toBe(3);
expect(f32[3]).toBe(4);
expect(f32[4]).toBe(5);
expect(f32[5]).toBe(6);
expect(f32[6]).toBe(7);
expect(f32[7]).toBe(8);
expect(f32[8]).toBe(9);
expect(f32[9]).toBe(10);
expect(f32[10]).toBe(11);
expect(f32[11]).toBe(12);
});
test("Nested NestedBufferBackedObjects", function () {
const structDesc = {
somethingElse: BBO.Float32(),
nest1: BBO.NestedBufferBackedObject({
somethingElse: BBO.Float32(),
nest2: BBO.NestedBufferBackedObject( {
value: BBO.Float32()
})
}),
};
const buffer = new ArrayBuffer(BBO.structSize(structDesc));
const view = BBO.BufferBackedObject(buffer, structDesc);
view.somethingElse = 1;
view.nest1.somethingElse = 2;
view.nest1.nest2.value = 3;
const f32 = new Float32Array(buffer);
expect(f32[0]).toBe(1);
expect(f32[1]).toBe(2);
expect(f32[2]).toBe(3);
});

5

buffer-backed-object.ts

@@ -58,3 +58,2 @@ export type Descriptor<T = any> = {

const dataView = new DataView(buffer, byteOffset);
// Accumulate the size of one struct
let stride = 0;

@@ -320,7 +319,7 @@ // Copy the descriptors.

return {
align: Object.values(descriptors)[0].align ?? 1,
align: structAlign(descriptors),
size,
get: (dataView, byteOffset) =>
ArrayOfBufferBackedObjects(dataView.buffer, descriptors, {
byteOffset,
byteOffset: dataView.byteOffset + byteOffset,
length: 1,

@@ -327,0 +326,0 @@ })[0],

68

dist/buffer-backed-object.js

@@ -1,18 +0,18 @@

function y(t) {
function B(t) {
return typeof t == "symbol" ? !1 : !isNaN(t);
}
function a(t, e) {
function b(t, e) {
let n = t - t % e;
return t % e != 0 && (n += e), n;
}
function B(t) {
function h(t) {
let e = 0;
for (const { align: n = 1, size: i } of Object.values(t))
e = a(e, n) + i;
return e = a(e, h(t)), e;
e = b(e, n) + i;
return e = b(e, a(t)), e;
}
function h(t) {
function a(t) {
return Math.max(...Object.values(t).map((e) => e.align ?? 1));
}
function b(t, e, { byteOffset: n = 0, length: i = 0, align: r = h(e) } = {}) {
function d(t, e, { byteOffset: n = 0, length: i = 0, align: r = a(e) } = {}) {
const l = new DataView(t, n);

@@ -26,7 +26,7 @@ let u = 0;

...o,
offset: a(u, o.align ?? 1)
offset: b(u, o.align ?? 1)
}, u = g[f].offset + o.size;
return u = a(u, r), i || (i = Math.floor((t.byteLength - n) / u)), new Proxy(new Array(i), {
return u = b(u, r), i || (i = Math.floor((t.byteLength - n) / u)), new Proxy(new Array(i), {
has(f, o) {
return y(o) ? o < i : o === "buffer" ? !0 : o in f;
return B(o) ? o < i : o === "buffer" ? !0 : o in f;
},

@@ -36,7 +36,7 @@ get(f, o, w) {

return t;
if (!y(o)) {
if (!B(o)) {
let E = f[o];
return typeof E == "function" && (E = E.bind(w)), E;
}
const s = parseInt(o), d = s * u;
const s = parseInt(o), y = s * u;
if (!(s >= f.length)) {

@@ -49,9 +49,9 @@ if (!f[s]) {

get() {
return c.get(l, d + c.offset);
return c.get(l, y + c.offset);
},
set(T) {
set(O) {
return c.set(
l,
d + c.offset,
T
y + c.offset,
O
);

@@ -67,4 +67,4 @@ }

}
function O(t, e, { byteOffset: n = 0, align: i = 1 } = {}) {
return b(t, e, {
function T(t, e, { byteOffset: n = 0, align: i = 1 } = {}) {
return d(t, e, {
byteOffset: n,

@@ -203,8 +203,8 @@ align: i

function L(t) {
const e = B(t);
const e = h(t);
return {
align: Object.values(t)[0].align ?? 1,
align: a(t),
size: e,
get: (n, i) => b(n.buffer, t, {
byteOffset: i,
get: (n, i) => d(n.buffer, t, {
byteOffset: n.byteOffset + i,
length: 1

@@ -217,8 +217,8 @@ })[0],

}
function v(t, e) {
const n = B(e) * t;
function R(t, e) {
const n = h(e) * t;
return {
align: Object.values(e)[0].align ?? 1,
size: n,
get: (i, r) => b(i.buffer, e, {
get: (i, r) => d(i.buffer, e, {
byteOffset: r + i.byteOffset,

@@ -232,3 +232,3 @@ length: t

}
function R(t) {
function Y(t) {
return {

@@ -244,3 +244,3 @@ align: 1,

}
function Y(t) {
function v(t) {
return { align: 1, size: t, get() {

@@ -251,6 +251,6 @@ }, set() {

export {
b as ArrayOfBufferBackedObjects,
d as ArrayOfBufferBackedObjects,
M as BigInt64,
P as BigUint64,
O as BufferBackedObject,
T as BufferBackedObject,
A as Float32,

@@ -261,11 +261,11 @@ j as Float64,

F as Int8,
v as NestedArrayOfBufferBackedObjects,
R as NestedArrayOfBufferBackedObjects,
L as NestedBufferBackedObject,
R as UTF8String,
Y as UTF8String,
U as Uint16,
z as Uint32,
S as Uint8,
Y as reserved,
h as structAlign,
B as structSize
v as reserved,
a as structAlign,
h as structSize
};

@@ -1,1 +0,1 @@

(function(l,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(l=typeof globalThis<"u"?globalThis:l||self,s(l["buffer-backed-object"]={}))})(this,function(l){"use strict";function s(t){return typeof t=="symbol"?!1:!isNaN(t)}function b(t,e){let n=t-t%e;return t%e!=0&&(n+=e),n}function y(t){let e=0;for(const{align:n=1,size:i}of Object.values(t))e=b(e,n)+i;return e=b(e,O(t)),e}function O(t){return Math.max(...Object.values(t).map(e=>e.align??1))}function d(t,e,{byteOffset:n=0,length:i=0,align:r=O(e)}={}){const f=new DataView(t,n);let E=0;const B={...e};for(const[u,o]of Object.entries(B))B[u]={...o,offset:b(E,o.align??1)},E=B[u].offset+o.size;return E=b(E,r),i||(i=Math.floor((t.byteLength-n)/E)),new Proxy(new Array(i),{has(u,o){return s(o)?o<i:o==="buffer"?!0:o in u},get(u,o,N){if(o==="buffer")return t;if(!s(o)){let g=u[o];return typeof g=="function"&&(g=g.bind(N)),g}const c=parseInt(o),h=c*E;if(!(c>=u.length)){if(!u[c]){u[c]={};for(const[g,a]of Object.entries(B))"get"in a&&Object.defineProperty(u[c],g,{enumerable:!0,get(){return a.get(f,h+a.offset)},set(R){return a.set(f,h+a.offset,R)}});Object.freeze(u[c])}return u[c]}}})}function T(t,e,{byteOffset:n=0,align:i=1}={}){return d(t,e,{byteOffset:n,align:i})[0]}function U({endianness:t="little",align:e=2}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Uint16Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getUint16(r,n),set:(i,r,f)=>i.setUint16(r,f,n)}}function w({endianness:t="little",align:e=4}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Uint32Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getUint32(r,n),set:(i,r,f)=>i.setUint32(r,f,n)}}function I({endianness:t="little",align:e=2}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Int16Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getInt16(r,n),set:(i,r,f)=>i.setInt16(r,f,n)}}function j({endianness:t="little",align:e=4}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Int32Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getInt32(r,n),set:(i,r,f)=>i.setInt32(r,f,n)}}function z({endianness:t="little",align:e=4}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Float32Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getFloat32(r,n),set:(i,r,f)=>i.setFloat32(r,f,n)}}function A({endianness:t="little",align:e=8}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Float64Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getFloat64(r,n),set:(i,r,f)=>i.setFloat64(r,f,n)}}function _({endianness:t="little",align:e=8}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:BigInt64Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getBigInt64(r,n),set:(i,r,f)=>i.setBigInt64(r,f,n)}}function S({endianness:t="little",align:e=8}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:BigUint64Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getBigUint64(r,n),set:(i,r,f)=>i.setBigUint64(r,f,n)}}function F(){return{align:1,size:1,get:(t,e)=>t.getUint8(e),set:(t,e,n)=>t.setUint8(e,n)}}function M(){return{align:1,size:1,get:(t,e)=>t.getInt8(e),set:(t,e,n)=>t.setInt8(e,n)}}function P(t){const e=y(t);return{align:Object.values(t)[0].align??1,size:e,get:(n,i)=>d(n.buffer,t,{byteOffset:i,length:1})[0],set:(n,i,r)=>{throw Error("Can’t set an entire struct")}}}function v(t,e){const n=y(e)*t;return{align:Object.values(e)[0].align??1,size:n,get:(i,r)=>d(i.buffer,e,{byteOffset:r+i.byteOffset,length:t}),set:(i,r,f)=>{throw Error("Can’t set an entire array")}}}function k(t){return{align:1,size:t,get:(e,n)=>new TextDecoder().decode(new Uint8Array(e.buffer,n,t)).replace(/\u0000+$/,""),set:(e,n,i)=>{const r=new TextEncoder().encode(i),f=new Uint8Array(e.buffer,n,t);f.fill(0),f.set(r.subarray(0,t))}}}function L(t){return{align:1,size:t,get(){},set(){}}}l.ArrayOfBufferBackedObjects=d,l.BigInt64=_,l.BigUint64=S,l.BufferBackedObject=T,l.Float32=z,l.Float64=A,l.Int16=I,l.Int32=j,l.Int8=M,l.NestedArrayOfBufferBackedObjects=v,l.NestedBufferBackedObject=P,l.UTF8String=k,l.Uint16=U,l.Uint32=w,l.Uint8=F,l.reserved=L,l.structAlign=O,l.structSize=y,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
(function(l,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(l=typeof globalThis<"u"?globalThis:l||self,s(l["buffer-backed-object"]={}))})(this,function(l){"use strict";function s(t){return typeof t=="symbol"?!1:!isNaN(t)}function a(t,e){let n=t-t%e;return t%e!=0&&(n+=e),n}function O(t){let e=0;for(const{align:n=1,size:i}of Object.values(t))e=a(e,n)+i;return e=a(e,d(t)),e}function d(t){return Math.max(...Object.values(t).map(e=>e.align??1))}function B(t,e,{byteOffset:n=0,length:i=0,align:r=d(e)}={}){const f=new DataView(t,n);let E=0;const y={...e};for(const[u,o]of Object.entries(y))y[u]={...o,offset:a(E,o.align??1)},E=y[u].offset+o.size;return E=a(E,r),i||(i=Math.floor((t.byteLength-n)/E)),new Proxy(new Array(i),{has(u,o){return s(o)?o<i:o==="buffer"?!0:o in u},get(u,o,N){if(o==="buffer")return t;if(!s(o)){let g=u[o];return typeof g=="function"&&(g=g.bind(N)),g}const c=parseInt(o),h=c*E;if(!(c>=u.length)){if(!u[c]){u[c]={};for(const[g,b]of Object.entries(y))"get"in b&&Object.defineProperty(u[c],g,{enumerable:!0,get(){return b.get(f,h+b.offset)},set(R){return b.set(f,h+b.offset,R)}});Object.freeze(u[c])}return u[c]}}})}function T(t,e,{byteOffset:n=0,align:i=1}={}){return B(t,e,{byteOffset:n,align:i})[0]}function U({endianness:t="little",align:e=2}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Uint16Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getUint16(r,n),set:(i,r,f)=>i.setUint16(r,f,n)}}function I({endianness:t="little",align:e=4}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Uint32Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getUint32(r,n),set:(i,r,f)=>i.setUint32(r,f,n)}}function w({endianness:t="little",align:e=2}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Int16Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getInt16(r,n),set:(i,r,f)=>i.setInt16(r,f,n)}}function j({endianness:t="little",align:e=4}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Int32Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getInt32(r,n),set:(i,r,f)=>i.setInt32(r,f,n)}}function z({endianness:t="little",align:e=4}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Float32Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getFloat32(r,n),set:(i,r,f)=>i.setFloat32(r,f,n)}}function A({endianness:t="little",align:e=8}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:Float64Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getFloat64(r,n),set:(i,r,f)=>i.setFloat64(r,f,n)}}function _({endianness:t="little",align:e=8}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:BigInt64Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getBigInt64(r,n),set:(i,r,f)=>i.setBigInt64(r,f,n)}}function S({endianness:t="little",align:e=8}={}){if(t!=="big"&&t!=="little")throw Error("Endianness needs to be either 'big' or 'little'");const n=t==="little";return{align:e,size:BigUint64Array.BYTES_PER_ELEMENT,get:(i,r)=>i.getBigUint64(r,n),set:(i,r,f)=>i.setBigUint64(r,f,n)}}function F(){return{align:1,size:1,get:(t,e)=>t.getUint8(e),set:(t,e,n)=>t.setUint8(e,n)}}function M(){return{align:1,size:1,get:(t,e)=>t.getInt8(e),set:(t,e,n)=>t.setInt8(e,n)}}function P(t){const e=O(t);return{align:d(t),size:e,get:(n,i)=>B(n.buffer,t,{byteOffset:n.byteOffset+i,length:1})[0],set:(n,i,r)=>{throw Error("Can’t set an entire struct")}}}function k(t,e){const n=O(e)*t;return{align:Object.values(e)[0].align??1,size:n,get:(i,r)=>B(i.buffer,e,{byteOffset:r+i.byteOffset,length:t}),set:(i,r,f)=>{throw Error("Can’t set an entire array")}}}function v(t){return{align:1,size:t,get:(e,n)=>new TextDecoder().decode(new Uint8Array(e.buffer,n,t)).replace(/\u0000+$/,""),set:(e,n,i)=>{const r=new TextEncoder().encode(i),f=new Uint8Array(e.buffer,n,t);f.fill(0),f.set(r.subarray(0,t))}}}function L(t){return{align:1,size:t,get(){},set(){}}}l.ArrayOfBufferBackedObjects=B,l.BigInt64=_,l.BigUint64=S,l.BufferBackedObject=T,l.Float32=z,l.Float64=A,l.Int16=w,l.Int32=j,l.Int8=M,l.NestedArrayOfBufferBackedObjects=k,l.NestedBufferBackedObject=P,l.UTF8String=v,l.Uint16=U,l.Uint32=I,l.Uint8=F,l.reserved=L,l.structAlign=d,l.structSize=O,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
{
"name": "buffer-backed-object",
"version": "1.0.0",
"version": "1.0.1",
"description": "",
"repository": "github:GoogleChromeLabs/buffer-backed-object",
"homepage": "https://github.com/GoogleChromeLabs/buffer-backed-object#readme",
"source": "buffer-backed-object.ts",
"module": "dist/buffer-backed-object.js",
"source": "buffer-backed-object.js",
"module": "dist/buffer-backed-object.modern.js",
"main": "dist/buffer-backed-object.umd.js",

@@ -10,0 +10,0 @@ "types": "dist/buffer-backed-object.d.ts",

Sorry, the diff of this file is not supported yet