Skip to content

Commit

Permalink
Merge pull request #665 from antoniomuso/feat/added-frame-compression…
Browse files Browse the repository at this point in the history
…-decompression

feat: added frame compression decompression
  • Loading branch information
antoniomuso authored Oct 10, 2024
2 parents 7334bee + ce4b029 commit 11fc6b8
Show file tree
Hide file tree
Showing 8 changed files with 1,026 additions and 603 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/CI.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -158,22 +158,22 @@ jobs:
path: ${{ env.APP_NAME }}.*.node
if-no-files-found: error
build-freebsd:
runs-on: macos-12
runs-on: ubuntu-latest
name: Build FreeBSD
steps:
- uses: actions/checkout@v4
- name: Build
id: build
uses: cross-platform-actions/action@v0.23.0
uses: cross-platform-actions/action@v0.25.0
env:
DEBUG: napi:*
RUSTUP_HOME: /usr/local/rustup
CARGO_HOME: /usr/local/cargo
RUSTUP_IO_THREADS: 1
with:
operating_system: freebsd
version: '13.2'
memory: 13G
version: '14.1'
memory: 8G
cpu_count: 3
environment_variables: 'DEBUG RUSTUP_IO_THREADS'
shell: bash
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ version = "0.1.0"
crate-type = ["cdylib"]

[dependencies]
lz4_flex = { version = "0.11.2" }
lz4_flex = { version = "0.11.3" }
napi = "2"
napi-derive = "2"

Expand Down
18 changes: 17 additions & 1 deletion __test__/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { readFileSync } from 'fs'

import test from 'ava'

import { compress, uncompress, compressSync, uncompressSync } from '../index.js'
import { compress, uncompress, compressSync, uncompressSync, compressFrame, decompressFrame } from '../index.js'

const stringToCompress = 'adewqeqweqwewleekqwoekqwoekqwpoekqwpoekqwpoekqwpoekqwpoekqwpokeeqw'
const dict = readFileSync('__test__/dict.bin')
Expand All @@ -11,6 +11,14 @@ test('compress should return smaller value', async (t) => {
const before = Buffer.from(stringToCompress)
const compressed = await compress(before)
t.true(before.length > compressed.length)
t.true(compressed.length !== 0)
})

test('compressFrame should return smaller value', async (t) => {
const before = Buffer.from(stringToCompress)
const compressed = await compressFrame(before)
t.true(before.length > compressed.length)
t.true(compressed.length !== 0)
})

test('compress decompress should work', async (t) => {
Expand Down Expand Up @@ -49,3 +57,11 @@ test('uncompress should take all input types', async (t) => {
await t.notThrowsAsync(uncompress(compressedValue))
await t.notThrowsAsync(uncompress(new Uint8Array(compressedValue)))
})

test('compress and decompress frame should work', async (t) => {
const before = Buffer.from(stringToCompress)
const compressed = await compressFrame(before)
t.true(before.length > compressed.length)
const decompressed = await decompressFrame(compressed)
t.is(before.toString('utf8'), decompressed.toString('utf8'))
})
17 changes: 7 additions & 10 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
/* auto-generated by NAPI-RS */
/* eslint-disable */
export declare export function compress(data: string | Buffer, dict?: string | Buffer | undefined | null): Promise<Buffer> | Promise<Buffer>

export function compress(
data: string | Buffer,
dict?: string | Buffer | undefined | null,
): Promise<Buffer> | Promise<Buffer>
export declare export function compressFrame(data: string | Buffer): Promise<Buffer>

export function compressSync(data: string | Buffer, dict?: string | Buffer | undefined | null): Buffer
export declare export function compressSync(data: string | Buffer, dict?: string | Buffer | undefined | null): Buffer

export function uncompress(
data: string | Buffer,
dict?: string | Buffer | undefined | null,
): Promise<Buffer> | Promise<Buffer>
export declare export function decompressFrame(data: string | Buffer): Promise<Buffer>

export function uncompressSync(data: string | Buffer, dict?: string | Buffer | undefined | null): Buffer
export declare export function uncompress(data: string | Buffer, dict?: string | Buffer | undefined | null): Promise<Buffer> | Promise<Buffer>

export declare export function uncompressSync(data: string | Buffer, dict?: string | Buffer | undefined | null): Buffer
175 changes: 110 additions & 65 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else if (process.arch === 'arm') {
try {
return require('./lz4-napi.android-arm-eabi.node')
Expand All @@ -80,6 +81,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else {
loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
}
Expand All @@ -95,6 +97,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else if (process.arch === 'ia32') {
try {
return require('./lz4-napi.win32-ia32-msvc.node')
Expand All @@ -106,6 +109,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else if (process.arch === 'arm64') {
try {
return require('./lz4-napi.win32-arm64-msvc.node')
Expand All @@ -117,20 +121,21 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else {
loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
}
} else if (process.platform === 'darwin') {
try {
return require('./lz4-napi.darwin-universal.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-darwin-universal')
} catch (e) {
loadErrors.push(e)
}
return require('./lz4-napi.darwin-universal.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-darwin-universal')
} catch (e) {
loadErrors.push(e)
}

if (process.arch === 'x64') {
try {
Expand All @@ -143,6 +148,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else if (process.arch === 'arm64') {
try {
return require('./lz4-napi.darwin-arm64.node')
Expand All @@ -154,6 +160,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else {
loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
}
Expand All @@ -169,6 +176,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else if (process.arch === 'arm64') {
try {
return require('./lz4-napi.freebsd-arm64.node')
Expand All @@ -180,60 +188,78 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else {
loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
}
} else if (process.platform === 'linux') {
if (process.arch === 'x64') {
if (isMusl()) {
try {
return require('./lz4-napi.linux-x64-musl.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-x64-musl')
} catch (e) {
loadErrors.push(e)
}
return require('./lz4-napi.linux-x64-musl.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-x64-musl')
} catch (e) {
loadErrors.push(e)
}

} else {
try {
return require('./lz4-napi.linux-x64-gnu.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-x64-gnu')
} catch (e) {
loadErrors.push(e)
}
return require('./lz4-napi.linux-x64-gnu.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-x64-gnu')
} catch (e) {
loadErrors.push(e)
}

}
} else if (process.arch === 'arm64') {
if (isMusl()) {
try {
return require('./lz4-napi.linux-arm64-musl.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-arm64-musl')
} catch (e) {
loadErrors.push(e)
}
return require('./lz4-napi.linux-arm64-musl.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-arm64-musl')
} catch (e) {
loadErrors.push(e)
}

} else {
try {
return require('./lz4-napi.linux-arm64-gnu.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-arm64-gnu')
} catch (e) {
loadErrors.push(e)
}
return require('./lz4-napi.linux-arm64-gnu.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-arm64-gnu')
} catch (e) {
loadErrors.push(e)
}

}
} else if (process.arch === 'arm') {
if (isMusl()) {
try {
return require('./lz4-napi.linux-arm-musleabihf.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-arm-musleabihf')
} catch (e) {
loadErrors.push(e)
}

} else {
try {
return require('./lz4-napi.linux-arm-gnueabihf.node')
} catch (e) {
loadErrors.push(e)
Expand All @@ -243,30 +269,46 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

}
} else if (process.arch === 'riscv64') {
if (isMusl()) {
try {
return require('./lz4-napi.linux-riscv64-musl.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-riscv64-musl')
} catch (e) {
loadErrors.push(e)
}
return require('./lz4-napi.linux-riscv64-musl.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-riscv64-musl')
} catch (e) {
loadErrors.push(e)
}

} else {
try {
return require('./lz4-napi.linux-riscv64-gnu.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-riscv64-gnu')
} catch (e) {
loadErrors.push(e)
}
return require('./lz4-napi.linux-riscv64-gnu.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-riscv64-gnu')
} catch (e) {
loadErrors.push(e)
}

}
} else if (process.arch === 'ppc64') {
try {
return require('./lz4-napi.linux-ppc64-gnu.node')
} catch (e) {
loadErrors.push(e)
}
try {
return require('lz4-napi-linux-ppc64-gnu')
} catch (e) {
loadErrors.push(e)
}

} else if (process.arch === 's390x') {
try {
return require('./lz4-napi.linux-s390x-gnu.node')
Expand All @@ -278,6 +320,7 @@ function requireNative() {
} catch (e) {
loadErrors.push(e)
}

} else {
loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
}
Expand All @@ -293,15 +336,15 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
nativeBinding = require('./lz4-napi.wasi.cjs')
} catch (err) {
if (process.env.NAPI_RS_FORCE_WASI) {
console.error(err)
loadErrors.push(err)
}
}
if (!nativeBinding) {
try {
nativeBinding = require('lz4-napi-wasm32-wasi')
} catch (err) {
if (process.env.NAPI_RS_FORCE_WASI) {
console.error(err)
loadErrors.push(err)
}
}
}
Expand All @@ -319,6 +362,8 @@ if (!nativeBinding) {
}

module.exports.compress = nativeBinding.compress
module.exports.compressFrame = nativeBinding.compressFrame
module.exports.compressSync = nativeBinding.compressSync
module.exports.decompressFrame = nativeBinding.decompressFrame
module.exports.uncompress = nativeBinding.uncompress
module.exports.uncompressSync = nativeBinding.uncompressSync
Loading

0 comments on commit 11fc6b8

Please sign in to comment.