1+ import { decode , encode , parseToObj , stringifyObj } from 'cipher-kit/web-api' ;
12import pako , { type DeflateFunctionOptions } from 'pako' ;
2- import { $decode , $encode } from './encode' ;
33import { $err , $ok , $stringifyError , type Result } from './error' ;
4- import { $isStr , isInCompressionFormat , parseToObj , stringifyObj } from './utils' ;
4+ import { $isStr , isInCompressionFormat } from './utils' ;
55
66const COMPRESSION_OPTIONS : DeflateFunctionOptions = {
77 level : 6 ,
@@ -12,19 +12,17 @@ const COMPRESSION_OPTIONS: DeflateFunctionOptions = {
1212} ;
1313
1414export function compress ( data : string ) : Result < string > {
15- if ( ! $isStr ( data , 1 ) ) {
16- return $err ( { msg : 'Empty string' , desc : 'Cannot compress null or undefined string' } ) ;
17- }
15+ try {
16+ if ( ! $isStr ( data ) ) return $err ( { msg : 'Empty string' , desc : 'Cannot compress null or undefined string' } ) ;
1817
19- const { bytes , error } = $ encode( data , 'utf8' ) ;
20- if ( error ) return $err ( error ) ;
18+ const encoded = encode ( data , 'utf8' ) ;
19+ if ( encoded . error ) return $err ( { msg : encoded . error . message , desc : encoded . error . description } ) ;
2120
22- const decoded = $ decode( bytes , 'base64url' ) ;
23- if ( decoded . error ) return $err ( decoded . error ) ;
21+ const decoded = decode ( encoded . bytes , 'base64url' ) ;
22+ if ( decoded . error ) return $err ( { msg : decoded . error . message , desc : decoded . error . description } ) ;
2423
25- try {
26- const compressed = $decode ( pako . deflate ( bytes , COMPRESSION_OPTIONS ) , 'base64url' ) ;
27- if ( compressed . error ) return $err ( compressed . error ) ;
24+ const compressed = decode ( pako . deflate ( encoded . bytes , COMPRESSION_OPTIONS ) , 'base64url' ) ;
25+ if ( compressed . error ) return $err ( { msg : compressed . error . message , desc : compressed . error . description } ) ;
2826
2927 if ( decoded . result . length <= compressed . result . length ) return $ok ( `${ decoded . result } .0.` ) ;
3028 return $ok ( `${ compressed . result } .1.` ) ;
@@ -34,19 +32,26 @@ export function compress(data: string): Result<string> {
3432}
3533
3634export function decompress ( data : string ) : Result < string > {
37- if ( isInCompressionFormat ( data ) === false ) {
38- return $err ( { msg : 'Invalid format' , desc : 'String does not match expected compressed format' } ) ;
39- }
35+ try {
36+ if ( isInCompressionFormat ( data ) === false ) {
37+ return $err ( { msg : 'Invalid format' , desc : 'String does not match expected compressed format' } ) ;
38+ }
4039
41- const str = data . slice ( 0 , - 3 ) ;
42- if ( ! $isStr ( str , 1 ) ) return $err ( { msg : 'Invalid input' , desc : 'Input is not a valid string' } ) ;
40+ const str = data . slice ( 0 , - 3 ) ;
41+ if ( ! $isStr ( str , 1 ) ) return $err ( { msg : 'Invalid input' , desc : 'Input is not a valid string' } ) ;
4342
44- const { bytes , error } = $ encode( str , 'base64url' ) ;
45- if ( error ) return $err ( error ) ;
43+ const encoded = encode ( str , 'base64url' ) ;
44+ if ( encoded . error ) return $err ( { msg : encoded . error . message , desc : encoded . error . description } ) ;
4645
47- try {
48- if ( data . endsWith ( '.1.' ) ) return $ok ( pako . inflate ( bytes , { to : 'string' } ) ) ;
49- if ( data . endsWith ( '.0.' ) ) return $decode ( bytes , 'utf8' ) ;
46+ if ( data . endsWith ( '.1.' ) ) {
47+ return $ok ( pako . inflate ( encoded . bytes , { to : 'string' } ) ) ;
48+ }
49+
50+ if ( data . endsWith ( '.0.' ) ) {
51+ const decoded = decode ( encoded . bytes , 'utf8' ) ;
52+ if ( decoded . error ) return $err ( { msg : decoded . error . message , desc : decoded . error . description } ) ;
53+ return $ok ( decoded . result ) ;
54+ }
5055
5156 return $err ( { msg : 'Invalid compression type' , desc : 'Expected .0. or .1. at the end of the string' } ) ;
5257 } catch ( error ) {
0 commit comments