fix(napi): deref from Uint8ClampedArray
This commit is contained in:
parent
25f2147e6b
commit
2763a8e7b2
6 changed files with 17 additions and 1 deletions
|
@ -263,7 +263,8 @@ impl JsTypedArray {
|
||||||
impl JsTypedArrayValue {
|
impl JsTypedArrayValue {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn is_valid_as_ref(&self, dest_type: TypedArrayType) {
|
fn is_valid_as_ref(&self, dest_type: TypedArrayType) {
|
||||||
if self.typedarray_type == TypedArrayType::Uint8Clamped && dest_type != TypedArrayType::Uint8 {
|
// deref `Uint8ClampedArray` as `&[u8]` is valid
|
||||||
|
if self.typedarray_type == TypedArrayType::Uint8Clamped && dest_type == TypedArrayType::Uint8 {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if self.typedarray_type != dest_type {
|
if self.typedarray_type != dest_type {
|
||||||
|
|
|
@ -145,6 +145,7 @@ Generated by [AVA](https://avajs.dev).
|
||||||
export function convertU32Array(input: Uint32Array): Array<number>␊
|
export function convertU32Array(input: Uint32Array): Array<number>␊
|
||||||
export function createExternalTypedArray(): Uint32Array␊
|
export function createExternalTypedArray(): Uint32Array␊
|
||||||
export function mutateTypedArray(input: Float32Array): void␊
|
export function mutateTypedArray(input: Float32Array): void␊
|
||||||
|
export function derefUint8Array(a: Uint8Array, b: Uint8ClampedArray): number␊
|
||||||
/**␊
|
/**␊
|
||||||
* \`constructor\` option for \`struct\` requires all fields to be public,␊
|
* \`constructor\` option for \`struct\` requires all fields to be public,␊
|
||||||
* otherwise tag impl fn as constructor␊
|
* otherwise tag impl fn as constructor␊
|
||||||
|
|
Binary file not shown.
|
@ -83,6 +83,7 @@ import {
|
||||||
testSerdeRoundtrip,
|
testSerdeRoundtrip,
|
||||||
createObjWithProperty,
|
createObjWithProperty,
|
||||||
dateToNumber,
|
dateToNumber,
|
||||||
|
derefUint8Array,
|
||||||
} from '../'
|
} from '../'
|
||||||
|
|
||||||
test('export const', (t) => {
|
test('export const', (t) => {
|
||||||
|
@ -358,6 +359,13 @@ test('mutate TypedArray', (t) => {
|
||||||
t.deepEqual(input, new Float32Array([2.0, 4.0, 6.0, 8.0, 10.0]))
|
t.deepEqual(input, new Float32Array([2.0, 4.0, 6.0, 8.0, 10.0]))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('deref uint8 array', (t) => {
|
||||||
|
t.is(
|
||||||
|
derefUint8Array(new Uint8Array([1, 2]), new Uint8ClampedArray([3, 4])),
|
||||||
|
4,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
test('async', async (t) => {
|
test('async', async (t) => {
|
||||||
const bufPromise = readFileAsync(join(__dirname, '../package.json'))
|
const bufPromise = readFileAsync(join(__dirname, '../package.json'))
|
||||||
await t.notThrowsAsync(bufPromise)
|
await t.notThrowsAsync(bufPromise)
|
||||||
|
|
1
examples/napi/index.d.ts
vendored
1
examples/napi/index.d.ts
vendored
|
@ -135,6 +135,7 @@ export function appendBuffer(buf: Buffer): Buffer
|
||||||
export function convertU32Array(input: Uint32Array): Array<number>
|
export function convertU32Array(input: Uint32Array): Array<number>
|
||||||
export function createExternalTypedArray(): Uint32Array
|
export function createExternalTypedArray(): Uint32Array
|
||||||
export function mutateTypedArray(input: Float32Array): void
|
export function mutateTypedArray(input: Float32Array): void
|
||||||
|
export function derefUint8Array(a: Uint8Array, b: Uint8ClampedArray): number
|
||||||
/**
|
/**
|
||||||
* `constructor` option for `struct` requires all fields to be public,
|
* `constructor` option for `struct` requires all fields to be public,
|
||||||
* otherwise tag impl fn as constructor
|
* otherwise tag impl fn as constructor
|
||||||
|
|
|
@ -28,3 +28,8 @@ fn mutate_typed_array(mut input: Float32Array) {
|
||||||
*item *= 2.0;
|
*item *= 2.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[napi]
|
||||||
|
fn deref_uint8_array(a: Uint8Array, b: Uint8ClampedArray) -> u32 {
|
||||||
|
(a.len() + b.len()) as u32
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue