7zip-wrapper 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +10 -10
- package/dist/index.d.mts +62 -16
- package/dist/index.d.ts +62 -16
- package/dist/index.js +5 -5
- package/dist/index.mjs +5 -5
- package/dist/postinstall.js +1 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
#!/usr/bin/env node
|
|
3
|
-
"use strict";var
|
|
4
|
-
${e}`.toLowerCase();return
|
|
5
|
-
`),r=[],
|
|
6
|
-
`),r={};for(let
|
|
7
|
-
`),r=[],
|
|
8
|
-
7-Zip CLI Wrapper v${
|
|
3
|
+
"use strict";var ft=Object.create;var W=Object.defineProperty;var dt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var mt=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var Et=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ht(e))!gt.call(t,s)&&s!==r&&W(t,s,{get:()=>e[s],enumerable:!(n=dt(e,s))||n.enumerable});return t};var y=(t,e,r)=>(r=t!=null?ft(mt(t)):{},Et(e||!t||!t.__esModule?W(r,"default",{value:t,enumerable:!0}):r,t));var ut=require("util");var w={SUCCESS:0,WARNING:1,FATAL_ERROR:2,COMMAND_LINE_ERROR:7,NOT_ENOUGH_MEMORY:8,USER_STOPPED:255};var V={win32:"7za.exe",linux:"7za",darwin:"7za"},o={TYPE:"-t",LEVEL:"-mx",METHOD:"-m0",DICT_SIZE:"-md",WORD_SIZE:"-mfbc",THREADS:"-mmt",SOLID:"-ms",ENCRYPT_HEADERS:"-mhe",PASSWORD:"-p",OUTPUT:"-o",OVERWRITE_ALL:"-aoa",SKIP_EXISTING:"-aos",TECH_INFO:"-slt",VERBOSE:"-bb1",RECURSE:"-r",NO_RECURSE:"-r-",INCLUDE:"-i!",EXCLUDE:"-x!",STORE_SYMLINKS:"-snl",STORE_HARDLINKS:"-snh",TIMESTAMPS:"-bt",YES:"-y",SFX:"-sfx",VOLUME:"-v",PRESERVE_PERMISSIONS:"-spf"},d={ADD:"a",EXTRACT:"x",EXTRACT_FLAT:"e",LIST:"l",TEST:"t",UPDATE:"u",DELETE:"d",RENAME:"rn",HASH:"h",INFO:"i",BENCHMARK:"b"};var X=3e4;var _=y(require("fs"));var j=require("child_process");var K=y(require("fs")),I=y(require("path")),b=y(require("os")),q=require("child_process");var f=class extends Error{constructor(r,n,s){super(r);this.code=n;this.exitCode=s;this.name="ZipWrapperError",Error.captureStackTrace?.(this,this.constructor)}},A=class extends f{constructor(e=[]){let r=e.length>0?` Searched: ${e.join(", ")}`:"";super(`7-Zip binary not found.${r}`,"BINARY_NOT_FOUND"),this.name="BinaryNotFoundError"}},x=class extends f{constructor(r){super(`Archive not found: ${r}`,"ARCHIVE_NOT_FOUND");this.archivePath=r;this.name="ArchiveNotFoundError"}},T=class extends f{constructor(r){super(r?`Password required for archive: ${r}`:"Password required for encrypted archive","PASSWORD_REQUIRED");this.archivePath=r;this.name="PasswordRequiredError"}},O=class extends f{constructor(r){super(r?`Wrong password for archive: ${r}`:"Wrong password for encrypted archive","WRONG_PASSWORD");this.archivePath=r;this.name="WrongPasswordError"}},$=class extends f{constructor(r,n){super(n?`Corrupt archive: ${r} - ${n}`:`Corrupt archive: ${r}`,"CORRUPT_ARCHIVE");this.archivePath=r;this.details=n;this.name="CorruptArchiveError"}},C=class extends f{constructor(e,r){super(e,"COMPRESSION_ERROR",r),this.name="CompressionError"}};var z=class extends f{constructor(r,n){super(n?`Operation '${n}' timed out after ${r}ms`:`Operation timed out after ${r}ms`,"TIMEOUT");this.timeoutMs=r;this.operation=n;this.name="TimeoutError"}};function Y(t,e,r,n){let s=`${t}
|
|
4
|
+
${e}`.toLowerCase();return s.includes("wrong password")||s.includes("incorrect password")?new O(n):s.includes("enter password")||s.includes("password is required")||s.includes("encrypted")?new T(n):s.includes("data error")||s.includes("crc failed")||s.includes("headers error")||s.includes("unexpected end")?new $(n||"unknown",t.trim()):(s.includes("cannot find archive")||s.includes("cannot open"))&&n?new x(n):new C(t.trim()||"Unknown 7-Zip error",r)}var Z=y(require("fs")),v=y(require("path"));function yt(t){let e=t;for(;;){if(Z.default.existsSync(v.default.join(e,"package.json")))return e;let r=v.default.dirname(e);if(r===e)return t;e=r}}var xt=yt(__dirname),D=v.default.join(xt,"bin");var St=[{platform:"win",arch:"x64",filename:"win-x64-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"ia32",filename:"win-x86-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"arm64",filename:"win-arm64-7za.exe",targetName:"7za.exe"},{platform:"linux",arch:"x64",filename:"linux-x64-7za",targetName:"7za"},{platform:"linux",arch:"ia32",filename:"linux-x86-7za",targetName:"7za"},{platform:"linux",arch:"arm64",filename:"linux-arm64-7za",targetName:"7za"},{platform:"linux",arch:"arm",filename:"linux-arm-7za",targetName:"7za"},{platform:"darwin",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"darwin",arch:"arm64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"arm64",filename:"mac-7za",targetName:"7za"}],R=null;var wt=()=>{let t=b.default.platform();return t==="win32"?"win":t==="darwin"?"darwin":t},At=()=>{let t=b.default.arch();return t==="x64"?"x64":t==="ia32"?"ia32":t==="arm64"?"arm64":t==="arm"?"arm":t};var zt=()=>{let t=wt(),e=At();return St.find(r=>r.platform===t&&r.arch===e)},vt=()=>V[b.default.platform()]||"7za",Rt=()=>{let t=zt();return t?I.default.join(D,t.targetName):I.default.join(D,vt())};function N(){return R||(R=Rt(),R)}var Ft=N();function bt(t){return t||N()}function Pt(t){let e=t||N();if(!K.default.existsSync(e))return!1;try{return(0,q.execSync)(`"${e}"`,{timeout:1e3,windowsHide:!0,stdio:"ignore"}),!0}catch{return!1}}function G(t){let e=bt(t);if(!Pt(e))throw new A([e]);return e}function J(t,e){let r=G(e?.binaryPath);try{return(0,j.spawn)(r,t,{...e,windowsHide:!0,stdio:["pipe","pipe","pipe"]})}catch(n){throw new f(`Failed to spawn 7-Zip process: ${n.message}`)}}async function m(t,e){let r=e?.timeout??X;return new Promise((n,s)=>{let i=[],u=[],a,l,c=!1;try{a=J(t,e)}catch(p){s(p);return}r>0&&(l=setTimeout(()=>{c=!0,a.kill("SIGTERM"),s(new z(r,`7za ${t[0]}`))},r)),a.stdout?.on("data",p=>{i.push(p),e?.onProgress&&Tt(p.toString("utf-8"),e.onProgress)}),a.stderr?.on("data",p=>{u.push(p)}),a.on("close",p=>{if(l&&clearTimeout(l),c)return;let k=Buffer.concat(i).toString("utf-8"),U=Buffer.concat(u).toString("utf-8"),F={success:p===w.SUCCESS,command:`7za ${t.join(" ")}`,stdout:k,stderr:U,exitCode:p};if(p===w.SUCCESS||p===w.WARNING)n(F);else{let H=Y(U,k,p,e?.archivePath);Object.assign(H,{result:F}),s(H)}}),a.on("error",p=>{l&&clearTimeout(l),s(new f(`Failed to execute 7-Zip: ${p.message}`))})})}function Tt(t,e){let r=t.match(/(\d+)%/);r&&e({percent:parseInt(r[1],10)});let n=t.match(/- (.+)$/m);n&&e({file:n[1].trim()})}function Q(t){let e=t.split(`
|
|
5
|
+
`),r=[],n=0,s=0,i=0,u=0,a=null;for(let l of e){let c=l.trim();c.startsWith("Path = ")?(a?.path&&r.push(a),a={path:c.substring(7),size:0,packedSize:0,modified:new Date,attributes:"",crc:"",method:"",isDirectory:!1}):a&&(c.startsWith("Size = ")?a.size=parseInt(c.substring(7),10)||0:c.startsWith("Packed Size = ")?a.packedSize=parseInt(c.substring(14),10)||0:c.startsWith("Modified = ")?a.modified=new Date(c.substring(11)):c.startsWith("Attributes = ")?(a.attributes=c.substring(13),a.isDirectory=a.attributes.includes("D")):c.startsWith("CRC = ")?a.crc=c.substring(6):c.startsWith("Method = ")?a.method=c.substring(9):c.startsWith("Encrypted = ")&&(a.encrypted=c.substring(12)==="+"))}a?.path&&r.push(a);for(let l of r)l.isDirectory?u++:(i++,n+=l.size,s+=l.packedSize);return{entries:r,stats:{totalSize:n,totalPackedSize:s,fileCount:i,dirCount:u,ratio:n>0?s/n:0}}}function tt(t){let e=t.split(`
|
|
6
|
+
`),r={};for(let n of e){let s=n.match(/(\w+)\s+for data:\s+([0-9A-Fa-f]+)/);if(s){r[s[1].toLowerCase()]=s[2];continue}let i=n.match(/^([0-9A-Fa-f]+)\s+(.+)$/);if(i){let u=i[1],a=i[2].trim();r[a]=u}}return r}function rt(t){let e=t.split(`
|
|
7
|
+
`),r=[],n=!0;for(let s of e){let i=s.toLowerCase();(i.includes("error")||i.includes("failed")||i.includes("cannot")||i.includes("crc failed"))&&(r.push(s.trim()),n=!1)}return t.includes("Everything is Ok")&&(n=!0,r.length=0),{ok:n,errors:r}}function g(t,e,r,n){let s=[t];return s.push(...e),r&&s.push(r),n&&n.length>0&&s.push(...n),s}function P(t){if(!_.default.existsSync(t))throw new x(t)}async function et(t,e,r){let n=[];if(r?.type&&n.push(`${o.TYPE}${r.type}`),r?.level!==void 0&&n.push(`${o.LEVEL}=${r.level}`),r?.method&&n.push(`${o.METHOD}=${r.method}`),r?.dictionarySize&&n.push(`${o.DICT_SIZE}=${r.dictionarySize}`),r?.wordSize!==void 0&&n.push(`${o.WORD_SIZE}=${r.wordSize}`),r?.threads!==void 0&&n.push(`${o.THREADS}${r.threads}`),r?.solid&&n.push(`${o.SOLID}=on`),r?.sfx&&n.push(o.SFX),r?.volumes&&n.push(`${o.VOLUME}${r.volumes}`),r?.password&&(n.push(`${o.PASSWORD}${r.password}`),r.encryptFilenames&&n.push(`${o.ENCRYPT_HEADERS}=on`)),r?.includePatterns)for(let i of r.includePatterns)n.push(`${o.INCLUDE}${i}`);if(r?.excludePatterns)for(let i of r.excludePatterns)n.push(`${o.EXCLUDE}${i}`);r?.recursive===!1?n.push(o.NO_RECURSE):n.push(o.RECURSE),r?.followSymlinks&&(n.push(`${o.STORE_HARDLINKS}-`),n.push(`${o.STORE_SYMLINKS}-`)),r?.storeSymlinks&&(n.push(o.STORE_HARDLINKS),n.push(o.STORE_SYMLINKS)),n.push(o.YES);let s=Array.isArray(e)?e:[e];return m(g(d.ADD,n,t,s),{onProgress:r?.onProgress,cwd:r?.cwd})}async function st(t,e){P(t);let r=[o.YES];if(e?.outputDir&&r.push(`${o.OUTPUT}${e.outputDir}`),e?.password&&r.push(`${o.PASSWORD}${e.password}`),e?.includePatterns)for(let i of e.includePatterns)r.push(`${o.INCLUDE}${i}`);if(e?.excludePatterns)for(let i of e.excludePatterns)r.push(`${o.EXCLUDE}${i}`);e?.overwrite===!1?r.push(o.SKIP_EXISTING):e?.overwrite===!0&&r.push(o.OVERWRITE_ALL),e?.preservePermissions&&r.push(o.PRESERVE_PERMISSIONS);let n=e?.files||[],s=e?.flat?d.EXTRACT_FLAT:d.EXTRACT;return m(g(s,r,t,n),{archivePath:t,onProgress:e?.onProgress})}async function nt(t,e){P(t);let r=[o.TECH_INFO];e?.verbose&&r.push(o.VERBOSE),e?.password&&r.push(`${o.PASSWORD}${e.password}`);let n=await m(g(d.LIST,r,t),{archivePath:t}),s=Q(n.stdout);return{archive:t,size:s.stats.totalSize,packedSize:s.stats.totalPackedSize,fileCount:s.stats.fileCount,dirCount:s.stats.dirCount,entries:s.entries}}async function it(t,e){P(t);let r=[o.TIMESTAMPS];e&&r.push(`${o.PASSWORD}${e}`);let n=await m(g(d.TEST,r,t),{archivePath:t}),s=rt(n.stdout+n.stderr);return{archive:t,ok:n.success&&s.ok,errors:s.errors}}async function ot(t,e="crc32"){let r=[`-scrc${e}`],n=Array.isArray(t)?t:[t],s=0;for(let a of n)try{let l=_.default.statSync(a);s+=l.size}catch{}let i=await m(g(d.HASH,r,void 0,n)),u=tt(i.stdout);return{file:Array.isArray(t)?t[0]:t,hashes:u,size:s}}async function at(t){return P(t),(await m(g(d.INFO,[],t),{archivePath:t})).stdout}async function ct(t,e){let r=[o.VERBOSE];if(t)for(let n of t)r.push(`-mm=${n}`);return e&&r.push(`-mmt=${e}`),m(g(d.BENCHMARK,r))}function L(t,e=2){if(t===0)return"0 B";let r=["B","KB","MB","GB","TB","PB"],n=1024,s=Math.floor(Math.log(t)/Math.log(n));return`${parseFloat((t/Math.pow(n,s)).toFixed(e))} ${r[s]}`}var lt="2.0.0",pt=(0,ut.parseArgs)({args:process.argv.slice(2),options:{help:{type:"boolean",short:"h"},version:{type:"boolean",short:"v"},output:{type:"string",short:"o"},password:{type:"string",short:"p"},level:{type:"string",short:"l"},type:{type:"string",short:"t"},verbose:{type:"boolean",short:"V"},hash:{type:"string",short:"H",default:"crc32"}},allowPositionals:!0});function B(){console.log(`
|
|
8
|
+
7-Zip CLI Wrapper v${lt}
|
|
9
9
|
|
|
10
10
|
USAGE:
|
|
11
11
|
7zip <command> [options] [files...]
|
|
@@ -38,7 +38,7 @@ EXAMPLES:
|
|
|
38
38
|
7zip test backup.7z -p mypassword
|
|
39
39
|
|
|
40
40
|
For more information, visit: https://github.com/iqbal-rashed/7zip-wrapper
|
|
41
|
-
`)}function
|
|
42
|
-
Archive: ${
|
|
43
|
-
`),t.verbose){console.log("---");for(let
|
|
44
|
-
Hashes:`);for(let[
|
|
41
|
+
`)}function Ot(){console.log(`7-Zip CLI Wrapper v${lt}`)}function S(t,e=!1){(pt.values.verbose||!e)&&console.log(t)}function M(t){console.log(`\u2713 ${t}`)}function h(t){console.error(`\u2717 ${t}`)}async function $t(){let{values:t,positionals:e}=pt,[r,...n]=e;t.help&&(B(),process.exit(0)),t.version&&(Ot(),process.exit(0)),r||(B(),process.exit(1));try{switch(r){case"add":case"a":{let[s,...i]=n;(!s||i.length===0)&&(h("Archive and files required"),console.log("Usage: 7zip add <archive> <files...>"),process.exit(1)),S(`Creating archive: ${s}`,!0),await et(s,i,{type:t.type||"7z",level:t.level?parseInt(t.level,10):5,password:t.password}),M(`Archive created: ${s}`);break}case"extract":case"x":case"e":{let[s]=n;s||(h("Archive path required"),console.log("Usage: 7zip extract <archive> [-o output]"),process.exit(1));let i=t.output||".";S(`Extracting: ${s}`,!0),await st(s,{outputDir:i,password:t.password}),M(`Extracted to: ${i}`);break}case"list":case"l":{let[s]=n;s||(h("Archive path required"),console.log("Usage: 7zip list <archive>"),process.exit(1));let i=await nt(s,{password:t.password});if(console.log(`
|
|
42
|
+
Archive: ${s}`),console.log(`Files: ${i.fileCount}`),console.log(`Directories: ${i.dirCount}`),console.log(`Total size: ${L(i.size)}`),console.log(`Compressed: ${L(i.packedSize)}`),console.log(`Ratio: ${(i.packedSize/i.size*100).toFixed(1)}%
|
|
43
|
+
`),t.verbose){console.log("---");for(let u of i.entries){let a=u.isDirectory?"D":"F",l=u.size.toString().padStart(12);console.log(`${a} ${l} ${u.path}`)}}break}case"test":case"t":{let[s]=n;s||(h("Archive path required"),console.log("Usage: 7zip test <archive>"),process.exit(1)),S(`Testing: ${s}`,!0);let i=await it(s,t.password);if(i.ok)M("Archive is OK");else{h("Archive has errors:");for(let u of i.errors)console.log(` - ${u}`);process.exit(1)}break}case"hash":case"h":{let s=n;s.length===0&&(h("Files required"),console.log("Usage: 7zip hash <files...> [-H hashType]"),process.exit(1));let i=t.hash||"crc32";S(`Calculating ${i} hash...`,!0);let u=await ot(s,i);console.log(`
|
|
44
|
+
Hashes:`);for(let[a,l]of Object.entries(u.hashes))console.log(` ${l} ${a}`);break}case"info":case"i":{let[s]=n;s||(h("Archive path required"),console.log("Usage: 7zip info <archive>"),process.exit(1));let i=await at(s);console.log(i);break}case"benchmark":case"b":{S("Running benchmark...",!0);let s=await ct();console.log(s.stdout);break}default:h(`Unknown command: ${r}`),B(),process.exit(1)}}catch(s){s instanceof Error&&(h(s.message),t.verbose&&s.stack&&console.error(s.stack)),process.exit(1)}}$t();
|
package/dist/index.d.mts
CHANGED
|
@@ -320,6 +320,9 @@ interface ExtendedExecOptions extends ExecOptions {
|
|
|
320
320
|
/** Progress callback */
|
|
321
321
|
onProgress?: ProgressCallback;
|
|
322
322
|
}
|
|
323
|
+
interface ZipWrapperOptions {
|
|
324
|
+
binaryPath?: string;
|
|
325
|
+
}
|
|
323
326
|
/**
|
|
324
327
|
* Generic command options
|
|
325
328
|
*/
|
|
@@ -337,6 +340,9 @@ interface CommandOptions extends Partial<PasswordOptions>, ExtendedExecOptions {
|
|
|
337
340
|
*/
|
|
338
341
|
type WildcardPattern = string;
|
|
339
342
|
|
|
343
|
+
declare const PACKAGE_ROOT: string;
|
|
344
|
+
declare const DEFAULT_BIN_DIR: string;
|
|
345
|
+
|
|
340
346
|
/**
|
|
341
347
|
* 7-Zip command implementations
|
|
342
348
|
*/
|
|
@@ -468,6 +474,57 @@ declare class TimeoutError extends ZipWrapperError {
|
|
|
468
474
|
*/
|
|
469
475
|
declare function parseZipWrapperError(stderr: string, stdout: string, exitCode: number | null, archivePath?: string): ZipWrapperError;
|
|
470
476
|
|
|
477
|
+
/**
|
|
478
|
+
* Binary detection, validation, and download helpers
|
|
479
|
+
*/
|
|
480
|
+
/**
|
|
481
|
+
* Get the path to the 7-Zip binary (bundled default)
|
|
482
|
+
*/
|
|
483
|
+
declare function getPath(): string;
|
|
484
|
+
/**
|
|
485
|
+
* Set the path to the 7-Zip binary (bundled default)
|
|
486
|
+
*/
|
|
487
|
+
declare function setCachePath(binaryPath?: string): string;
|
|
488
|
+
/**
|
|
489
|
+
* Binary information
|
|
490
|
+
*/
|
|
491
|
+
interface BinaryInfo {
|
|
492
|
+
/** Full path to binary */
|
|
493
|
+
path: string;
|
|
494
|
+
/** Whether binary is bundled with package */
|
|
495
|
+
isBundled: boolean;
|
|
496
|
+
/** Operating system */
|
|
497
|
+
platform: string;
|
|
498
|
+
/** CPU architecture */
|
|
499
|
+
arch: string;
|
|
500
|
+
/** 7-Zip version (if detectable) */
|
|
501
|
+
version?: string;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Get binary information
|
|
505
|
+
*/
|
|
506
|
+
declare function getBinaryInfo(customPath?: string): BinaryInfo;
|
|
507
|
+
/**
|
|
508
|
+
* Verify binary is executable
|
|
509
|
+
*/
|
|
510
|
+
declare function verifyBinary(binaryPath?: string): boolean;
|
|
511
|
+
/**
|
|
512
|
+
* Download the bundled binary if available for the current platform
|
|
513
|
+
*/
|
|
514
|
+
declare function downloadBundledBinary(silent?: boolean): Promise<string>;
|
|
515
|
+
/**
|
|
516
|
+
* Ensure a usable binary, downloading bundled binary when missing
|
|
517
|
+
*/
|
|
518
|
+
declare function ensureBinary(options?: {
|
|
519
|
+
binaryPath?: string;
|
|
520
|
+
silent?: boolean;
|
|
521
|
+
download?: boolean;
|
|
522
|
+
}): Promise<string>;
|
|
523
|
+
/**
|
|
524
|
+
* Clear cached binary information
|
|
525
|
+
*/
|
|
526
|
+
declare function clearBinaryCache(): void;
|
|
527
|
+
|
|
471
528
|
/**
|
|
472
529
|
* 7-Zip wrapper for Node.js
|
|
473
530
|
*
|
|
@@ -492,26 +549,15 @@ declare function parseZipWrapperError(stderr: string, stdout: string, exitCode:
|
|
|
492
549
|
* ```
|
|
493
550
|
*/
|
|
494
551
|
declare class ZipWrapper {
|
|
495
|
-
binaryPath?: string | undefined;
|
|
496
552
|
/**
|
|
497
553
|
* Create a new ZipWrapper instance
|
|
498
|
-
* @param
|
|
554
|
+
* @param options - Optional wrapper options including `binaryPath`
|
|
555
|
+
* @throws {Error} If the resolved binary path does not exist or is not executable
|
|
499
556
|
*/
|
|
500
|
-
|
|
557
|
+
binaryPath: string;
|
|
558
|
+
constructor(options?: ZipWrapperOptions);
|
|
501
559
|
/**
|
|
502
560
|
* Add files to archive
|
|
503
|
-
* @param archive - Path to the archive file
|
|
504
|
-
* @param files - Files or directories to add (supports wildcards)
|
|
505
|
-
* @param options - Compression options
|
|
506
|
-
*
|
|
507
|
-
* @example
|
|
508
|
-
* ```typescript
|
|
509
|
-
* await zip.add('archive.7z', 'src/', {
|
|
510
|
-
* level: 9,
|
|
511
|
-
* method: 'lzma2',
|
|
512
|
-
* password: 'secret'
|
|
513
|
-
* });
|
|
514
|
-
* ```
|
|
515
561
|
*/
|
|
516
562
|
add(archive: string, files: string | string[], options?: AddOptions): Promise<ArchiveResult>;
|
|
517
563
|
/**
|
|
@@ -636,4 +682,4 @@ declare const quick: {
|
|
|
636
682
|
test(archive: string): Promise<TestResult>;
|
|
637
683
|
};
|
|
638
684
|
|
|
639
|
-
export { type AddOptions, type ArchiveEntry, type ArchiveFormat, type ArchiveInfo, ArchiveNotFoundError, type ArchiveResult, type ArchiveType, BinaryNotFoundError, COMPRESSION_PRESETS, CompressionError, type CompressionLevel, type CompressionMethod, type CompressionOptions, type CompressionPreset, CorruptArchiveError, type ExtendedExecOptions, type ExtractOptions, ExtractionError, type HashResult, type HashType, type ListOptions, type ListResult, type OperationStats, type PasswordOptions, PasswordRequiredError, type ProgressCallback, type RenameOptions, type TestResult, TimeoutError, UnsupportedFormatError, type UpdateOptions, type VolumeSize, type WildcardPattern, WrongPasswordError, ZipWrapper, ZipWrapperError, add, benchmark, convert, deleteFiles, extract, hash, hashArchive, info, list, parseZipWrapperError, quick, rename, test, update, zipWrapper };
|
|
685
|
+
export { type AddOptions, type ArchiveEntry, type ArchiveFormat, type ArchiveInfo, ArchiveNotFoundError, type ArchiveResult, type ArchiveType, BinaryNotFoundError, COMPRESSION_PRESETS, CompressionError, type CompressionLevel, type CompressionMethod, type CompressionOptions, type CompressionPreset, CorruptArchiveError, DEFAULT_BIN_DIR, type ExtendedExecOptions, type ExtractOptions, ExtractionError, type HashResult, type HashType, type ListOptions, type ListResult, type OperationStats, PACKAGE_ROOT, type PasswordOptions, PasswordRequiredError, type ProgressCallback, type RenameOptions, type TestResult, TimeoutError, UnsupportedFormatError, type UpdateOptions, type VolumeSize, type WildcardPattern, WrongPasswordError, ZipWrapper, ZipWrapperError, add, benchmark, clearBinaryCache, convert, deleteFiles, downloadBundledBinary, ensureBinary, extract, getBinaryInfo, getPath, hash, hashArchive, info, list, parseZipWrapperError, quick, rename, setCachePath, test, update, verifyBinary, zipWrapper };
|
package/dist/index.d.ts
CHANGED
|
@@ -320,6 +320,9 @@ interface ExtendedExecOptions extends ExecOptions {
|
|
|
320
320
|
/** Progress callback */
|
|
321
321
|
onProgress?: ProgressCallback;
|
|
322
322
|
}
|
|
323
|
+
interface ZipWrapperOptions {
|
|
324
|
+
binaryPath?: string;
|
|
325
|
+
}
|
|
323
326
|
/**
|
|
324
327
|
* Generic command options
|
|
325
328
|
*/
|
|
@@ -337,6 +340,9 @@ interface CommandOptions extends Partial<PasswordOptions>, ExtendedExecOptions {
|
|
|
337
340
|
*/
|
|
338
341
|
type WildcardPattern = string;
|
|
339
342
|
|
|
343
|
+
declare const PACKAGE_ROOT: string;
|
|
344
|
+
declare const DEFAULT_BIN_DIR: string;
|
|
345
|
+
|
|
340
346
|
/**
|
|
341
347
|
* 7-Zip command implementations
|
|
342
348
|
*/
|
|
@@ -468,6 +474,57 @@ declare class TimeoutError extends ZipWrapperError {
|
|
|
468
474
|
*/
|
|
469
475
|
declare function parseZipWrapperError(stderr: string, stdout: string, exitCode: number | null, archivePath?: string): ZipWrapperError;
|
|
470
476
|
|
|
477
|
+
/**
|
|
478
|
+
* Binary detection, validation, and download helpers
|
|
479
|
+
*/
|
|
480
|
+
/**
|
|
481
|
+
* Get the path to the 7-Zip binary (bundled default)
|
|
482
|
+
*/
|
|
483
|
+
declare function getPath(): string;
|
|
484
|
+
/**
|
|
485
|
+
* Set the path to the 7-Zip binary (bundled default)
|
|
486
|
+
*/
|
|
487
|
+
declare function setCachePath(binaryPath?: string): string;
|
|
488
|
+
/**
|
|
489
|
+
* Binary information
|
|
490
|
+
*/
|
|
491
|
+
interface BinaryInfo {
|
|
492
|
+
/** Full path to binary */
|
|
493
|
+
path: string;
|
|
494
|
+
/** Whether binary is bundled with package */
|
|
495
|
+
isBundled: boolean;
|
|
496
|
+
/** Operating system */
|
|
497
|
+
platform: string;
|
|
498
|
+
/** CPU architecture */
|
|
499
|
+
arch: string;
|
|
500
|
+
/** 7-Zip version (if detectable) */
|
|
501
|
+
version?: string;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Get binary information
|
|
505
|
+
*/
|
|
506
|
+
declare function getBinaryInfo(customPath?: string): BinaryInfo;
|
|
507
|
+
/**
|
|
508
|
+
* Verify binary is executable
|
|
509
|
+
*/
|
|
510
|
+
declare function verifyBinary(binaryPath?: string): boolean;
|
|
511
|
+
/**
|
|
512
|
+
* Download the bundled binary if available for the current platform
|
|
513
|
+
*/
|
|
514
|
+
declare function downloadBundledBinary(silent?: boolean): Promise<string>;
|
|
515
|
+
/**
|
|
516
|
+
* Ensure a usable binary, downloading bundled binary when missing
|
|
517
|
+
*/
|
|
518
|
+
declare function ensureBinary(options?: {
|
|
519
|
+
binaryPath?: string;
|
|
520
|
+
silent?: boolean;
|
|
521
|
+
download?: boolean;
|
|
522
|
+
}): Promise<string>;
|
|
523
|
+
/**
|
|
524
|
+
* Clear cached binary information
|
|
525
|
+
*/
|
|
526
|
+
declare function clearBinaryCache(): void;
|
|
527
|
+
|
|
471
528
|
/**
|
|
472
529
|
* 7-Zip wrapper for Node.js
|
|
473
530
|
*
|
|
@@ -492,26 +549,15 @@ declare function parseZipWrapperError(stderr: string, stdout: string, exitCode:
|
|
|
492
549
|
* ```
|
|
493
550
|
*/
|
|
494
551
|
declare class ZipWrapper {
|
|
495
|
-
binaryPath?: string | undefined;
|
|
496
552
|
/**
|
|
497
553
|
* Create a new ZipWrapper instance
|
|
498
|
-
* @param
|
|
554
|
+
* @param options - Optional wrapper options including `binaryPath`
|
|
555
|
+
* @throws {Error} If the resolved binary path does not exist or is not executable
|
|
499
556
|
*/
|
|
500
|
-
|
|
557
|
+
binaryPath: string;
|
|
558
|
+
constructor(options?: ZipWrapperOptions);
|
|
501
559
|
/**
|
|
502
560
|
* Add files to archive
|
|
503
|
-
* @param archive - Path to the archive file
|
|
504
|
-
* @param files - Files or directories to add (supports wildcards)
|
|
505
|
-
* @param options - Compression options
|
|
506
|
-
*
|
|
507
|
-
* @example
|
|
508
|
-
* ```typescript
|
|
509
|
-
* await zip.add('archive.7z', 'src/', {
|
|
510
|
-
* level: 9,
|
|
511
|
-
* method: 'lzma2',
|
|
512
|
-
* password: 'secret'
|
|
513
|
-
* });
|
|
514
|
-
* ```
|
|
515
561
|
*/
|
|
516
562
|
add(archive: string, files: string | string[], options?: AddOptions): Promise<ArchiveResult>;
|
|
517
563
|
/**
|
|
@@ -636,4 +682,4 @@ declare const quick: {
|
|
|
636
682
|
test(archive: string): Promise<TestResult>;
|
|
637
683
|
};
|
|
638
684
|
|
|
639
|
-
export { type AddOptions, type ArchiveEntry, type ArchiveFormat, type ArchiveInfo, ArchiveNotFoundError, type ArchiveResult, type ArchiveType, BinaryNotFoundError, COMPRESSION_PRESETS, CompressionError, type CompressionLevel, type CompressionMethod, type CompressionOptions, type CompressionPreset, CorruptArchiveError, type ExtendedExecOptions, type ExtractOptions, ExtractionError, type HashResult, type HashType, type ListOptions, type ListResult, type OperationStats, type PasswordOptions, PasswordRequiredError, type ProgressCallback, type RenameOptions, type TestResult, TimeoutError, UnsupportedFormatError, type UpdateOptions, type VolumeSize, type WildcardPattern, WrongPasswordError, ZipWrapper, ZipWrapperError, add, benchmark, convert, deleteFiles, extract, hash, hashArchive, info, list, parseZipWrapperError, quick, rename, test, update, zipWrapper };
|
|
685
|
+
export { type AddOptions, type ArchiveEntry, type ArchiveFormat, type ArchiveInfo, ArchiveNotFoundError, type ArchiveResult, type ArchiveType, BinaryNotFoundError, COMPRESSION_PRESETS, CompressionError, type CompressionLevel, type CompressionMethod, type CompressionOptions, type CompressionPreset, CorruptArchiveError, DEFAULT_BIN_DIR, type ExtendedExecOptions, type ExtractOptions, ExtractionError, type HashResult, type HashType, type ListOptions, type ListResult, type OperationStats, PACKAGE_ROOT, type PasswordOptions, PasswordRequiredError, type ProgressCallback, type RenameOptions, type TestResult, TimeoutError, UnsupportedFormatError, type UpdateOptions, type VolumeSize, type WildcardPattern, WrongPasswordError, ZipWrapper, ZipWrapperError, add, benchmark, clearBinaryCache, convert, deleteFiles, downloadBundledBinary, ensureBinary, extract, getBinaryInfo, getPath, hash, hashArchive, info, list, parseZipWrapperError, quick, rename, setCachePath, test, update, verifyBinary, zipWrapper };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
${r}`.toLowerCase();return
|
|
3
|
-
`),t=[],
|
|
4
|
-
`),t={};for(let
|
|
5
|
-
`),t=[],
|
|
1
|
+
'use strict';var P=require('fs'),U=require('path'),child_process=require('child_process'),z=require('os'),Pt=require('https');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);var U__default=/*#__PURE__*/_interopDefault(U);var z__default=/*#__PURE__*/_interopDefault(z);var Pt__default=/*#__PURE__*/_interopDefault(Pt);var ut={fastest:{name:"Fastest",level:1},fast:{name:"Fast",level:3},normal:{name:"Normal",level:5},maximum:{name:"Maximum",level:7},ultra:{name:"Ultra",level:9,method:"lzma2",dictionarySize:"64m",solid:true}};function At(e){let r=e;for(;;){if(P__default.default.existsSync(U__default.default.join(r,"package.json")))return r;let t=U__default.default.dirname(r);if(t===r)return e;r=t;}}var pt=At(__dirname),R=U__default.default.join(pt,"bin");var v={SUCCESS:0,WARNING:1};var lt={win32:"7za.exe",linux:"7za",darwin:"7za"},i={TYPE:"-t",LEVEL:"-mx",METHOD:"-m0",DICT_SIZE:"-md",WORD_SIZE:"-mfbc",THREADS:"-mmt",SOLID:"-ms",ENCRYPT_HEADERS:"-mhe",PASSWORD:"-p",OUTPUT:"-o",OVERWRITE_ALL:"-aoa",SKIP_EXISTING:"-aos",TECH_INFO:"-slt",VERBOSE:"-bb1",RECURSE:"-r",NO_RECURSE:"-r-",INCLUDE:"-i!",EXCLUDE:"-x!",STORE_SYMLINKS:"-snl",STORE_HARDLINKS:"-snh",TIMESTAMPS:"-bt",YES:"-y",SFX:"-sfx",VOLUME:"-v",PRESERVE_PERMISSIONS:"-spf"},m={ADD:"a",EXTRACT:"x",EXTRACT_FLAT:"e",LIST:"l",TEST:"t",UPDATE:"u",DELETE:"d",RENAME:"rn",HASH:"h",INFO:"i",BENCHMARK:"b"};var mt=3e4;var l=class extends Error{constructor(t,n,s){super(t);this.code=n;this.exitCode=s;this.name="ZipWrapperError",Error.captureStackTrace?.(this,this.constructor);}},y=class extends l{constructor(r=[]){let t=r.length>0?` Searched: ${r.join(", ")}`:"";super(`7-Zip binary not found.${t}`,"BINARY_NOT_FOUND"),this.name="BinaryNotFoundError";}},A=class extends l{constructor(t){super(`Archive not found: ${t}`,"ARCHIVE_NOT_FOUND");this.archivePath=t;this.name="ArchiveNotFoundError";}},I=class extends l{constructor(t){super(t?`Password required for archive: ${t}`:"Password required for encrypted archive","PASSWORD_REQUIRED");this.archivePath=t;this.name="PasswordRequiredError";}},$=class extends l{constructor(t){super(t?`Wrong password for archive: ${t}`:"Wrong password for encrypted archive","WRONG_PASSWORD");this.archivePath=t;this.name="WrongPasswordError";}},D=class extends l{constructor(t,n){super(n?`Corrupt archive: ${t} - ${n}`:`Corrupt archive: ${t}`,"CORRUPT_ARCHIVE");this.archivePath=t;this.details=n;this.name="CorruptArchiveError";}},N=class extends l{constructor(r,t){super(r,"COMPRESSION_ERROR",t),this.name="CompressionError";}},k=class extends l{constructor(r,t){super(r,"EXTRACTION_ERROR",t),this.name="ExtractionError";}},H=class extends l{constructor(t){super(`Unsupported archive format: ${t}`,"UNSUPPORTED_FORMAT");this.format=t;this.name="UnsupportedFormatError";}},w=class extends l{constructor(t,n){super(n?`Operation '${n}' timed out after ${t}ms`:`Operation timed out after ${t}ms`,"TIMEOUT");this.timeoutMs=t;this.operation=n;this.name="TimeoutError";}};function W(e,r,t,n){let s=`${e}
|
|
2
|
+
${r}`.toLowerCase();return s.includes("wrong password")||s.includes("incorrect password")?new $(n):s.includes("enter password")||s.includes("password is required")||s.includes("encrypted")?new I(n):s.includes("data error")||s.includes("crc failed")||s.includes("headers error")||s.includes("unexpected end")?new D(n||"unknown",e.trim()):(s.includes("cannot find archive")||s.includes("cannot open"))&&n?new A(n):new N(e.trim()||"Unknown 7-Zip error",t)}var Y=(e,r)=>new Promise((t,n)=>{Pt__default.default.get(e,s=>{if((s.statusCode===301||s.statusCode===302)&&s.headers.location){Y(s.headers.location,r).then(t).catch(n);return}if(s.statusCode!==200){n(new Error(`Download failed with status ${s.statusCode}`));return}let a=`${r}.download`,u=P__default.default.createWriteStream(a);s.on("error",o=>{u.destroy(),P__default.default.rmSync(a,{force:true}),n(o);}),u.on("error",o=>{P__default.default.rmSync(a,{force:true}),n(o);}),u.on("finish",()=>{u.close(()=>{P__default.default.renameSync(a,r),t();});}),s.pipe(u);}).on("error",n);});var Ot="https://github.com/iqbal-rashed/7zip-wrapper/releases/download/latest",wt=[{platform:"win",arch:"x64",filename:"win-x64-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"ia32",filename:"win-x86-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"arm64",filename:"win-arm64-7za.exe",targetName:"7za.exe"},{platform:"linux",arch:"x64",filename:"linux-x64-7za",targetName:"7za"},{platform:"linux",arch:"ia32",filename:"linux-x86-7za",targetName:"7za"},{platform:"linux",arch:"arm64",filename:"linux-arm64-7za",targetName:"7za"},{platform:"linux",arch:"arm",filename:"linux-arm-7za",targetName:"7za"},{platform:"darwin",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"darwin",arch:"arm64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"arm64",filename:"mac-7za",targetName:"7za"}],x=null,T=null,Tt=()=>{let e=z__default.default.platform();return e==="win32"?"win":e==="darwin"?"darwin":e},zt=()=>{let e=z__default.default.arch();return e==="x64"?"x64":e==="ia32"?"ia32":e==="arm64"?"arm64":e==="arm"?"arm":e},bt=e=>{P__default.default.mkdirSync(e,{recursive:true});},Ct=e=>{P__default.default.chmodSync(e,493);},ft=()=>{let e=Tt(),r=zt();return wt.find(t=>t.platform===e&&t.arch===r)},vt=()=>lt[z__default.default.platform()]||"7za",ht=()=>{let e=ft();return e?U__default.default.join(R,e.targetName):U__default.default.join(R,vt())};function S(){return x||(x=ht(),x)}function X(e){return x=e||S(),x}S();function V(e){return e||S()}function It(e){if(!e&&T)return T;let r=V(e),t={path:r,isBundled:P__default.default.existsSync(r),platform:z__default.default.platform(),arch:z__default.default.arch()};try{t.version=$t(r);}catch{}return e||(T=t),t}function $t(e){try{let r=e||S(),n=child_process.execSync(`"${r}"`,{encoding:"utf-8",timeout:5e3,windowsHide:!0}).match(/7-Zip.*?(\d+\.\d+)/);return n?n[1]:void 0}catch{return}}function K(e){let r=e||S();if(!P__default.default.existsSync(r))return false;try{return child_process.execSync(`"${r}"`,{timeout:1e3,windowsHide:!0,stdio:"ignore"}),!0}catch{return false}}function L(e){let r=V(e);if(!K(r))throw new y([r]);return r}async function gt(e=false){let r=ft();if(!r)throw new y([ht()]);let t=U__default.default.join(R,r.targetName);if(P__default.default.existsSync(t))return x=t,t;e||console.log(`Downloading 7-Zip binary for ${r.platform}-${r.arch}...`);let n=`${Ot}/${r.filename}`;return bt(R),await Y(n,t),r.platform!=="win"&&Ct(t),e||console.log(`Successfully downloaded to: ${t}`),x=t,T=null,t}async function G(e){let r=V(e?.binaryPath);if(P__default.default.existsSync(r)){if(!K(r))throw new y([r]);return r}if(e?.binaryPath)throw new y([e.binaryPath]);if(e?.download===false)throw new y([r]);return gt(e?.silent)}function Dt(){x=null,T=null;}function B(e,r){let t=L(r?.binaryPath);try{return child_process.spawn(t,e,{...r,windowsHide:!0,stdio:["pipe","pipe","pipe"]})}catch(n){throw new l(`Failed to spawn 7-Zip process: ${n.message}`)}}async function h(e,r){let t=r?.timeout??mt;return new Promise((n,s)=>{let a=[],u=[],o,p,c=false;try{o=B(e,r);}catch(d){s(d);return}t>0&&(p=setTimeout(()=>{c=true,o.kill("SIGTERM"),s(new w(t,`7za ${e[0]}`));},t)),o.stdout?.on("data",d=>{a.push(d),r?.onProgress&&_t(d.toString("utf-8"),r.onProgress);}),o.stderr?.on("data",d=>{u.push(d);}),o.on("close",d=>{if(p&&clearTimeout(p),c)return;let it=Buffer.concat(a).toString("utf-8"),ot=Buffer.concat(u).toString("utf-8"),at={success:d===v.SUCCESS,command:`7za ${e.join(" ")}`,stdout:it,stderr:ot,exitCode:d};if(d===v.SUCCESS||d===v.WARNING)n(at);else {let ct=W(ot,it,d,r?.archivePath);Object.assign(ct,{result:at}),s(ct);}}),o.on("error",d=>{p&&clearTimeout(p),s(new l(`Failed to execute 7-Zip: ${d.message}`));});})}function _t(e,r){let t=e.match(/(\d+)%/);t&&r({percent:parseInt(t[1],10)});let n=e.match(/- (.+)$/m);n&&r({file:n[1].trim()});}function Et(e){let r=e.split(`
|
|
3
|
+
`),t=[],n=0,s=0,a=0,u=0,o=null;for(let p of r){let c=p.trim();c.startsWith("Path = ")?(o?.path&&t.push(o),o={path:c.substring(7),size:0,packedSize:0,modified:new Date,attributes:"",crc:"",method:"",isDirectory:false}):o&&(c.startsWith("Size = ")?o.size=parseInt(c.substring(7),10)||0:c.startsWith("Packed Size = ")?o.packedSize=parseInt(c.substring(14),10)||0:c.startsWith("Modified = ")?o.modified=new Date(c.substring(11)):c.startsWith("Attributes = ")?(o.attributes=c.substring(13),o.isDirectory=o.attributes.includes("D")):c.startsWith("CRC = ")?o.crc=c.substring(6):c.startsWith("Method = ")?o.method=c.substring(9):c.startsWith("Encrypted = ")&&(o.encrypted=c.substring(12)==="+"));}o?.path&&t.push(o);for(let p of t)p.isDirectory?u++:(a++,n+=p.size,s+=p.packedSize);return {entries:t,stats:{totalSize:n,totalPackedSize:s,fileCount:a,dirCount:u,ratio:n>0?s/n:0}}}function j(e){let r=e.split(`
|
|
4
|
+
`),t={};for(let n of r){let s=n.match(/(\w+)\s+for data:\s+([0-9A-Fa-f]+)/);if(s){t[s[1].toLowerCase()]=s[2];continue}let a=n.match(/^([0-9A-Fa-f]+)\s+(.+)$/);if(a){let u=a[1],o=a[2].trim();t[o]=u;}}return t}function yt(e){let r=e.split(`
|
|
5
|
+
`),t=[],n=true;for(let s of r){let a=s.toLowerCase();(a.includes("error")||a.includes("failed")||a.includes("cannot")||a.includes("crc failed"))&&(t.push(s.trim()),n=false);}return e.includes("Everything is Ok")&&(n=true,t.length=0),{ok:n,errors:t}}function f(e,r,t,n){let s=[e];return s.push(...r),t&&s.push(t),n&&n.length>0&&s.push(...n),s}function g(e){if(!P__default.default.existsSync(e))throw new A(e)}async function xt(e,r,t,n={}){let s=[`-si${r}`];n.password&&s.push(`-p${n.password}`),n.level&&s.push(`-mx=${n.level}`),n.method&&s.push(`-m0=${n.method}`),s.push(i.YES);let a=f(m.ADD,s,e);return new Promise((u,o)=>{try{let p=B(a,{...n,archivePath:e});t.pipe(p.stdin),p.on("close",c=>{c===0?u():o(new Error(`7-Zip exited with code ${c}`));}),p.on("error",c=>o(c)),t.on("error",c=>o(c));}catch(p){o(p);}})}function q(e,r,t={}){g(e);let n=["-so"];t.password&&n.push(`-p${t.password}`),n.push(i.YES);let s=f(m.EXTRACT,n,e,[r]),a=B(s,{...t,archivePath:e});if(!a.stdout)throw new l("Failed to get stdout from 7-Zip process");return a.stdout}async function St(e,r,t={}){let n=q(e,r,t);return new Promise((s,a)=>{let u=[];n.on("data",o=>u.push(Buffer.from(o))),n.on("error",o=>a(o)),n.on("end",()=>s(Buffer.concat(u)));})}async function O(e,r,t){let n=[];if(t?.type&&n.push(`${i.TYPE}${t.type}`),t?.level!==void 0&&n.push(`${i.LEVEL}=${t.level}`),t?.method&&n.push(`${i.METHOD}=${t.method}`),t?.dictionarySize&&n.push(`${i.DICT_SIZE}=${t.dictionarySize}`),t?.wordSize!==void 0&&n.push(`${i.WORD_SIZE}=${t.wordSize}`),t?.threads!==void 0&&n.push(`${i.THREADS}${t.threads}`),t?.solid&&n.push(`${i.SOLID}=on`),t?.sfx&&n.push(i.SFX),t?.volumes&&n.push(`${i.VOLUME}${t.volumes}`),t?.password&&(n.push(`${i.PASSWORD}${t.password}`),t.encryptFilenames&&n.push(`${i.ENCRYPT_HEADERS}=on`)),t?.includePatterns)for(let a of t.includePatterns)n.push(`${i.INCLUDE}${a}`);if(t?.excludePatterns)for(let a of t.excludePatterns)n.push(`${i.EXCLUDE}${a}`);t?.recursive===false?n.push(i.NO_RECURSE):n.push(i.RECURSE),t?.followSymlinks&&(n.push(`${i.STORE_HARDLINKS}-`),n.push(`${i.STORE_SYMLINKS}-`)),t?.storeSymlinks&&(n.push(i.STORE_HARDLINKS),n.push(i.STORE_SYMLINKS)),n.push(i.YES);let s=Array.isArray(r)?r:[r];return h(f(m.ADD,n,e,s),{onProgress:t?.onProgress,cwd:t?.cwd})}async function C(e,r){g(e);let t=[i.YES];if(r?.outputDir&&t.push(`${i.OUTPUT}${r.outputDir}`),r?.password&&t.push(`${i.PASSWORD}${r.password}`),r?.includePatterns)for(let a of r.includePatterns)t.push(`${i.INCLUDE}${a}`);if(r?.excludePatterns)for(let a of r.excludePatterns)t.push(`${i.EXCLUDE}${a}`);r?.overwrite===false?t.push(i.SKIP_EXISTING):r?.overwrite===true&&t.push(i.OVERWRITE_ALL),r?.preservePermissions&&t.push(i.PRESERVE_PERMISSIONS);let n=r?.files||[],s=r?.flat?m.EXTRACT_FLAT:m.EXTRACT;return h(f(s,t,e,n),{archivePath:e,onProgress:r?.onProgress})}async function M(e,r){g(e);let t=[i.TECH_INFO];r?.verbose&&t.push(i.VERBOSE),r?.password&&t.push(`${i.PASSWORD}${r.password}`);let n=await h(f(m.LIST,t,e),{archivePath:e}),s=Et(n.stdout);return {archive:e,size:s.stats.totalSize,packedSize:s.stats.totalPackedSize,fileCount:s.stats.fileCount,dirCount:s.stats.dirCount,entries:s.entries}}async function J(e,r){g(e);let t=[i.YES],n=[];if(r.add&&n.push(...r.add),r.update)for(let s of r.update)n.push(`!${s}`);return h(f(m.UPDATE,t,e,n),{archivePath:e,onProgress:r.onProgress,cwd:r.cwd})}async function Q(e,r){g(e);let t=[i.YES],n=Array.isArray(r)?r:[r];return h(f(m.DELETE,t,e,n),{archivePath:e})}async function F(e,r){g(e);let t=[i.TIMESTAMPS];r&&t.push(`${i.PASSWORD}${r}`);let n=await h(f(m.TEST,t,e),{archivePath:e}),s=yt(n.stdout+n.stderr);return {archive:e,ok:n.success&&s.ok,errors:s.errors}}async function tt(e,r="crc32"){let t=[`-scrc${r}`],n=Array.isArray(e)?e:[e],s=0;for(let o of n)try{let p=P__default.default.statSync(o);s+=p.size;}catch{}let a=await h(f(m.HASH,t,void 0,n)),u=j(a.stdout);return {file:Array.isArray(e)?e[0]:e,hashes:u,size:s}}async function Lt(e,r="crc32"){g(e);let t=[`-scrc${r}`],n=await h(f(m.HASH,t,e),{archivePath:e}),s=j(n.stdout),a=P__default.default.statSync(e);return {file:e,hashes:s,size:a.size}}async function rt(e){return g(e),(await h(f(m.INFO,[],e),{archivePath:e})).stdout}async function Bt(e,r,t){g(e);let n=[i.YES];return h(f(m.RENAME,n,e,[r,t]),{archivePath:e})}async function et(e,r,t){g(e);let n=`${e}_temp_${Date.now()}`;P__default.default.mkdirSync(n,{recursive:true});try{await C(e,{outputDir:n});let s=t||e.replace(/\.[^.]+$/,`.${r}`);return await O(s,n,{type:r})}finally{P__default.default.rmSync(n,{recursive:true,force:true});}}async function nt(e,r){let t=[i.VERBOSE];if(e)for(let n of e)t.push(`-mm=${n}`);return r&&t.push(`-mmt=${r}`),h(f(m.BENCHMARK,t))}var st=class{binaryPath=S();constructor(r){if(r?.binaryPath){let t=L(r.binaryPath);X(t);}else G();this.binaryPath=S();}async add(r,t,n){return O(r,t,n)}async extract(r,t){return C(r,t)}async list(r,t){return M(r,t)}async update(r,t){return J(r,t)}async delete(r,t){return Q(r,t)}async test(r,t){return F(r,t)}async addFromStream(r,t,n,s){return xt(r,t,n,s)}extractToStream(r,t,n){return q(r,t,n)}async extractToBuffer(r,t,n){return St(r,t,n)}async hash(r,t){return tt(r,t)}async info(r){return rt(r)}async benchmark(r,t){return nt(r,t)}async convert(r,t,n){return et(r,t,n)}},wr=new st,Tr={async zip(e,r){return O(r,e,{type:"zip",level:9})},async sevenz(e,r){return O(r,e,{type:"7z",level:9})},async extract(e,r){return C(e,{outputDir:r})},async list(e){return M(e)},async test(e){return F(e)}};exports.ArchiveNotFoundError=A;exports.BinaryNotFoundError=y;exports.COMPRESSION_PRESETS=ut;exports.CompressionError=N;exports.CorruptArchiveError=D;exports.DEFAULT_BIN_DIR=R;exports.ExtractionError=k;exports.PACKAGE_ROOT=pt;exports.PasswordRequiredError=I;exports.TimeoutError=w;exports.UnsupportedFormatError=H;exports.WrongPasswordError=$;exports.ZipWrapper=st;exports.ZipWrapperError=l;exports.add=O;exports.benchmark=nt;exports.clearBinaryCache=Dt;exports.convert=et;exports.deleteFiles=Q;exports.downloadBundledBinary=gt;exports.ensureBinary=G;exports.extract=C;exports.getBinaryInfo=It;exports.getPath=S;exports.hash=tt;exports.hashArchive=Lt;exports.info=rt;exports.list=M;exports.parseZipWrapperError=W;exports.quick=Tr;exports.rename=Bt;exports.setCachePath=X;exports.test=F;exports.update=J;exports.verifyBinary=K;exports.zipWrapper=wr;
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
${r}`.toLowerCase();return
|
|
3
|
-
`),t=[],
|
|
4
|
-
`),t={};for(let
|
|
5
|
-
`),t=[],
|
|
1
|
+
import k from'path';import {fileURLToPath}from'url';import O from'fs';import {execSync,spawn}from'child_process';import b from'os';import bt from'https';var Ot=()=>fileURLToPath(import.meta.url),wt=()=>k.dirname(Ot()),g=wt();var pt={fastest:{name:"Fastest",level:1},fast:{name:"Fast",level:3},normal:{name:"Normal",level:5},maximum:{name:"Maximum",level:7},ultra:{name:"Ultra",level:9,method:"lzma2",dictionarySize:"64m",solid:true}};function zt(e){let r=e;for(;;){if(O.existsSync(k.join(r,"package.json")))return r;let t=k.dirname(r);if(t===r)return e;r=t;}}var lt=zt(g),A=k.join(lt,"bin");var I={SUCCESS:0,WARNING:1};var mt={win32:"7za.exe",linux:"7za",darwin:"7za"},i={TYPE:"-t",LEVEL:"-mx",METHOD:"-m0",DICT_SIZE:"-md",WORD_SIZE:"-mfbc",THREADS:"-mmt",SOLID:"-ms",ENCRYPT_HEADERS:"-mhe",PASSWORD:"-p",OUTPUT:"-o",OVERWRITE_ALL:"-aoa",SKIP_EXISTING:"-aos",TECH_INFO:"-slt",VERBOSE:"-bb1",RECURSE:"-r",NO_RECURSE:"-r-",INCLUDE:"-i!",EXCLUDE:"-x!",STORE_SYMLINKS:"-snl",STORE_HARDLINKS:"-snh",TIMESTAMPS:"-bt",YES:"-y",SFX:"-sfx",VOLUME:"-v",PRESERVE_PERMISSIONS:"-spf"},m={ADD:"a",EXTRACT:"x",EXTRACT_FLAT:"e",LIST:"l",TEST:"t",UPDATE:"u",DELETE:"d",RENAME:"rn",HASH:"h",INFO:"i",BENCHMARK:"b"};var dt=3e4;var l=class extends Error{constructor(t,n,s){super(t);this.code=n;this.exitCode=s;this.name="ZipWrapperError",Error.captureStackTrace?.(this,this.constructor);}},x=class extends l{constructor(r=[]){let t=r.length>0?` Searched: ${r.join(", ")}`:"";super(`7-Zip binary not found.${t}`,"BINARY_NOT_FOUND"),this.name="BinaryNotFoundError";}},P=class extends l{constructor(t){super(`Archive not found: ${t}`,"ARCHIVE_NOT_FOUND");this.archivePath=t;this.name="ArchiveNotFoundError";}},$=class extends l{constructor(t){super(t?`Password required for archive: ${t}`:"Password required for encrypted archive","PASSWORD_REQUIRED");this.archivePath=t;this.name="PasswordRequiredError";}},D=class extends l{constructor(t){super(t?`Wrong password for archive: ${t}`:"Wrong password for encrypted archive","WRONG_PASSWORD");this.archivePath=t;this.name="WrongPasswordError";}},N=class extends l{constructor(t,n){super(n?`Corrupt archive: ${t} - ${n}`:`Corrupt archive: ${t}`,"CORRUPT_ARCHIVE");this.archivePath=t;this.details=n;this.name="CorruptArchiveError";}},_=class extends l{constructor(r,t){super(r,"COMPRESSION_ERROR",t),this.name="CompressionError";}},H=class extends l{constructor(r,t){super(r,"EXTRACTION_ERROR",t),this.name="ExtractionError";}},W=class extends l{constructor(t){super(`Unsupported archive format: ${t}`,"UNSUPPORTED_FORMAT");this.format=t;this.name="UnsupportedFormatError";}},T=class extends l{constructor(t,n){super(n?`Operation '${n}' timed out after ${t}ms`:`Operation timed out after ${t}ms`,"TIMEOUT");this.timeoutMs=t;this.operation=n;this.name="TimeoutError";}};function Y(e,r,t,n){let s=`${e}
|
|
2
|
+
${r}`.toLowerCase();return s.includes("wrong password")||s.includes("incorrect password")?new D(n):s.includes("enter password")||s.includes("password is required")||s.includes("encrypted")?new $(n):s.includes("data error")||s.includes("crc failed")||s.includes("headers error")||s.includes("unexpected end")?new N(n||"unknown",e.trim()):(s.includes("cannot find archive")||s.includes("cannot open"))&&n?new P(n):new _(e.trim()||"Unknown 7-Zip error",t)}var Z=(e,r)=>new Promise((t,n)=>{bt.get(e,s=>{if((s.statusCode===301||s.statusCode===302)&&s.headers.location){Z(s.headers.location,r).then(t).catch(n);return}if(s.statusCode!==200){n(new Error(`Download failed with status ${s.statusCode}`));return}let a=`${r}.download`,u=O.createWriteStream(a);s.on("error",o=>{u.destroy(),O.rmSync(a,{force:true}),n(o);}),u.on("error",o=>{O.rmSync(a,{force:true}),n(o);}),u.on("finish",()=>{u.close(()=>{O.renameSync(a,r),t();});}),s.pipe(u);}).on("error",n);});var Ct="https://github.com/iqbal-rashed/7zip-wrapper/releases/download/latest",vt=[{platform:"win",arch:"x64",filename:"win-x64-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"ia32",filename:"win-x86-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"arm64",filename:"win-arm64-7za.exe",targetName:"7za.exe"},{platform:"linux",arch:"x64",filename:"linux-x64-7za",targetName:"7za"},{platform:"linux",arch:"ia32",filename:"linux-x86-7za",targetName:"7za"},{platform:"linux",arch:"arm64",filename:"linux-arm64-7za",targetName:"7za"},{platform:"linux",arch:"arm",filename:"linux-arm-7za",targetName:"7za"},{platform:"darwin",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"darwin",arch:"arm64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"arm64",filename:"mac-7za",targetName:"7za"}],S=null,z=null,It=()=>{let e=b.platform();return e==="win32"?"win":e==="darwin"?"darwin":e},$t=()=>{let e=b.arch();return e==="x64"?"x64":e==="ia32"?"ia32":e==="arm64"?"arm64":e==="arm"?"arm":e},Dt=e=>{O.mkdirSync(e,{recursive:true});},Nt=e=>{O.chmodSync(e,493);},ht=()=>{let e=It(),r=$t();return vt.find(t=>t.platform===e&&t.arch===r)},_t=()=>mt[b.platform()]||"7za",gt=()=>{let e=ht();return e?k.join(A,e.targetName):k.join(A,_t())};function R(){return S||(S=gt(),S)}function V(e){return S=e||R(),S}R();function K(e){return e||R()}function Lt(e){if(!e&&z)return z;let r=K(e),t={path:r,isBundled:O.existsSync(r),platform:b.platform(),arch:b.arch()};try{t.version=Bt(r);}catch{}return e||(z=t),t}function Bt(e){try{let r=e||R(),n=execSync(`"${r}"`,{encoding:"utf-8",timeout:5e3,windowsHide:!0}).match(/7-Zip.*?(\d+\.\d+)/);return n?n[1]:void 0}catch{return}}function G(e){let r=e||R();if(!O.existsSync(r))return false;try{return execSync(`"${r}"`,{timeout:1e3,windowsHide:!0,stdio:"ignore"}),!0}catch{return false}}function B(e){let r=K(e);if(!G(r))throw new x([r]);return r}async function Et(e=false){let r=ht();if(!r)throw new x([gt()]);let t=k.join(A,r.targetName);if(O.existsSync(t))return S=t,t;e||console.log(`Downloading 7-Zip binary for ${r.platform}-${r.arch}...`);let n=`${Ct}/${r.filename}`;return Dt(A),await Z(n,t),r.platform!=="win"&&Nt(t),e||console.log(`Successfully downloaded to: ${t}`),S=t,z=null,t}async function j(e){let r=K(e?.binaryPath);if(O.existsSync(r)){if(!G(r))throw new x([r]);return r}if(e?.binaryPath)throw new x([e.binaryPath]);if(e?.download===false)throw new x([r]);return Et(e?.silent)}function Mt(){S=null,z=null;}function M(e,r){let t=B(r?.binaryPath);try{return spawn(t,e,{...r,windowsHide:!0,stdio:["pipe","pipe","pipe"]})}catch(n){throw new l(`Failed to spawn 7-Zip process: ${n.message}`)}}async function h(e,r){let t=r?.timeout??dt;return new Promise((n,s)=>{let a=[],u=[],o,p,c=false;try{o=M(e,r);}catch(d){s(d);return}t>0&&(p=setTimeout(()=>{c=true,o.kill("SIGTERM"),s(new T(t,`7za ${e[0]}`));},t)),o.stdout?.on("data",d=>{a.push(d),r?.onProgress&&Ut(d.toString("utf-8"),r.onProgress);}),o.stderr?.on("data",d=>{u.push(d);}),o.on("close",d=>{if(p&&clearTimeout(p),c)return;let ot=Buffer.concat(a).toString("utf-8"),at=Buffer.concat(u).toString("utf-8"),ct={success:d===I.SUCCESS,command:`7za ${e.join(" ")}`,stdout:ot,stderr:at,exitCode:d};if(d===I.SUCCESS||d===I.WARNING)n(ct);else {let ut=Y(at,ot,d,r?.archivePath);Object.assign(ut,{result:ct}),s(ut);}}),o.on("error",d=>{p&&clearTimeout(p),s(new l(`Failed to execute 7-Zip: ${d.message}`));});})}function Ut(e,r){let t=e.match(/(\d+)%/);t&&r({percent:parseInt(t[1],10)});let n=e.match(/- (.+)$/m);n&&r({file:n[1].trim()});}function yt(e){let r=e.split(`
|
|
3
|
+
`),t=[],n=0,s=0,a=0,u=0,o=null;for(let p of r){let c=p.trim();c.startsWith("Path = ")?(o?.path&&t.push(o),o={path:c.substring(7),size:0,packedSize:0,modified:new Date,attributes:"",crc:"",method:"",isDirectory:false}):o&&(c.startsWith("Size = ")?o.size=parseInt(c.substring(7),10)||0:c.startsWith("Packed Size = ")?o.packedSize=parseInt(c.substring(14),10)||0:c.startsWith("Modified = ")?o.modified=new Date(c.substring(11)):c.startsWith("Attributes = ")?(o.attributes=c.substring(13),o.isDirectory=o.attributes.includes("D")):c.startsWith("CRC = ")?o.crc=c.substring(6):c.startsWith("Method = ")?o.method=c.substring(9):c.startsWith("Encrypted = ")&&(o.encrypted=c.substring(12)==="+"));}o?.path&&t.push(o);for(let p of t)p.isDirectory?u++:(a++,n+=p.size,s+=p.packedSize);return {entries:t,stats:{totalSize:n,totalPackedSize:s,fileCount:a,dirCount:u,ratio:n>0?s/n:0}}}function q(e){let r=e.split(`
|
|
4
|
+
`),t={};for(let n of r){let s=n.match(/(\w+)\s+for data:\s+([0-9A-Fa-f]+)/);if(s){t[s[1].toLowerCase()]=s[2];continue}let a=n.match(/^([0-9A-Fa-f]+)\s+(.+)$/);if(a){let u=a[1],o=a[2].trim();t[o]=u;}}return t}function xt(e){let r=e.split(`
|
|
5
|
+
`),t=[],n=true;for(let s of r){let a=s.toLowerCase();(a.includes("error")||a.includes("failed")||a.includes("cannot")||a.includes("crc failed"))&&(t.push(s.trim()),n=false);}return e.includes("Everything is Ok")&&(n=true,t.length=0),{ok:n,errors:t}}function f(e,r,t,n){let s=[e];return s.push(...r),t&&s.push(t),n&&n.length>0&&s.push(...n),s}function E(e){if(!O.existsSync(e))throw new P(e)}async function St(e,r,t,n={}){let s=[`-si${r}`];n.password&&s.push(`-p${n.password}`),n.level&&s.push(`-mx=${n.level}`),n.method&&s.push(`-m0=${n.method}`),s.push(i.YES);let a=f(m.ADD,s,e);return new Promise((u,o)=>{try{let p=M(a,{...n,archivePath:e});t.pipe(p.stdin),p.on("close",c=>{c===0?u():o(new Error(`7-Zip exited with code ${c}`));}),p.on("error",c=>o(c)),t.on("error",c=>o(c));}catch(p){o(p);}})}function J(e,r,t={}){E(e);let n=["-so"];t.password&&n.push(`-p${t.password}`),n.push(i.YES);let s=f(m.EXTRACT,n,e,[r]),a=M(s,{...t,archivePath:e});if(!a.stdout)throw new l("Failed to get stdout from 7-Zip process");return a.stdout}async function Rt(e,r,t={}){let n=J(e,r,t);return new Promise((s,a)=>{let u=[];n.on("data",o=>u.push(Buffer.from(o))),n.on("error",o=>a(o)),n.on("end",()=>s(Buffer.concat(u)));})}async function w(e,r,t){let n=[];if(t?.type&&n.push(`${i.TYPE}${t.type}`),t?.level!==void 0&&n.push(`${i.LEVEL}=${t.level}`),t?.method&&n.push(`${i.METHOD}=${t.method}`),t?.dictionarySize&&n.push(`${i.DICT_SIZE}=${t.dictionarySize}`),t?.wordSize!==void 0&&n.push(`${i.WORD_SIZE}=${t.wordSize}`),t?.threads!==void 0&&n.push(`${i.THREADS}${t.threads}`),t?.solid&&n.push(`${i.SOLID}=on`),t?.sfx&&n.push(i.SFX),t?.volumes&&n.push(`${i.VOLUME}${t.volumes}`),t?.password&&(n.push(`${i.PASSWORD}${t.password}`),t.encryptFilenames&&n.push(`${i.ENCRYPT_HEADERS}=on`)),t?.includePatterns)for(let a of t.includePatterns)n.push(`${i.INCLUDE}${a}`);if(t?.excludePatterns)for(let a of t.excludePatterns)n.push(`${i.EXCLUDE}${a}`);t?.recursive===false?n.push(i.NO_RECURSE):n.push(i.RECURSE),t?.followSymlinks&&(n.push(`${i.STORE_HARDLINKS}-`),n.push(`${i.STORE_SYMLINKS}-`)),t?.storeSymlinks&&(n.push(i.STORE_HARDLINKS),n.push(i.STORE_SYMLINKS)),n.push(i.YES);let s=Array.isArray(r)?r:[r];return h(f(m.ADD,n,e,s),{onProgress:t?.onProgress,cwd:t?.cwd})}async function v(e,r){E(e);let t=[i.YES];if(r?.outputDir&&t.push(`${i.OUTPUT}${r.outputDir}`),r?.password&&t.push(`${i.PASSWORD}${r.password}`),r?.includePatterns)for(let a of r.includePatterns)t.push(`${i.INCLUDE}${a}`);if(r?.excludePatterns)for(let a of r.excludePatterns)t.push(`${i.EXCLUDE}${a}`);r?.overwrite===false?t.push(i.SKIP_EXISTING):r?.overwrite===true&&t.push(i.OVERWRITE_ALL),r?.preservePermissions&&t.push(i.PRESERVE_PERMISSIONS);let n=r?.files||[],s=r?.flat?m.EXTRACT_FLAT:m.EXTRACT;return h(f(s,t,e,n),{archivePath:e,onProgress:r?.onProgress})}async function F(e,r){E(e);let t=[i.TECH_INFO];r?.verbose&&t.push(i.VERBOSE),r?.password&&t.push(`${i.PASSWORD}${r.password}`);let n=await h(f(m.LIST,t,e),{archivePath:e}),s=yt(n.stdout);return {archive:e,size:s.stats.totalSize,packedSize:s.stats.totalPackedSize,fileCount:s.stats.fileCount,dirCount:s.stats.dirCount,entries:s.entries}}async function Q(e,r){E(e);let t=[i.YES],n=[];if(r.add&&n.push(...r.add),r.update)for(let s of r.update)n.push(`!${s}`);return h(f(m.UPDATE,t,e,n),{archivePath:e,onProgress:r.onProgress,cwd:r.cwd})}async function tt(e,r){E(e);let t=[i.YES],n=Array.isArray(r)?r:[r];return h(f(m.DELETE,t,e,n),{archivePath:e})}async function U(e,r){E(e);let t=[i.TIMESTAMPS];r&&t.push(`${i.PASSWORD}${r}`);let n=await h(f(m.TEST,t,e),{archivePath:e}),s=xt(n.stdout+n.stderr);return {archive:e,ok:n.success&&s.ok,errors:s.errors}}async function rt(e,r="crc32"){let t=[`-scrc${r}`],n=Array.isArray(e)?e:[e],s=0;for(let o of n)try{let p=O.statSync(o);s+=p.size;}catch{}let a=await h(f(m.HASH,t,void 0,n)),u=q(a.stdout);return {file:Array.isArray(e)?e[0]:e,hashes:u,size:s}}async function kt(e,r="crc32"){E(e);let t=[`-scrc${r}`],n=await h(f(m.HASH,t,e),{archivePath:e}),s=q(n.stdout),a=O.statSync(e);return {file:e,hashes:s,size:a.size}}async function et(e){return E(e),(await h(f(m.INFO,[],e),{archivePath:e})).stdout}async function Ht(e,r,t){E(e);let n=[i.YES];return h(f(m.RENAME,n,e,[r,t]),{archivePath:e})}async function nt(e,r,t){E(e);let n=`${e}_temp_${Date.now()}`;O.mkdirSync(n,{recursive:true});try{await v(e,{outputDir:n});let s=t||e.replace(/\.[^.]+$/,`.${r}`);return await w(s,n,{type:r})}finally{O.rmSync(n,{recursive:true,force:true});}}async function st(e,r){let t=[i.VERBOSE];if(e)for(let n of e)t.push(`-mm=${n}`);return r&&t.push(`-mmt=${r}`),h(f(m.BENCHMARK,t))}var it=class{binaryPath=R();constructor(r){if(r?.binaryPath){let t=B(r.binaryPath);V(t);}else j();this.binaryPath=R();}async add(r,t,n){return w(r,t,n)}async extract(r,t){return v(r,t)}async list(r,t){return F(r,t)}async update(r,t){return Q(r,t)}async delete(r,t){return tt(r,t)}async test(r,t){return U(r,t)}async addFromStream(r,t,n,s){return St(r,t,n,s)}extractToStream(r,t,n){return J(r,t,n)}async extractToBuffer(r,t,n){return Rt(r,t,n)}async hash(r,t){return rt(r,t)}async info(r){return et(r)}async benchmark(r,t){return st(r,t)}async convert(r,t,n){return nt(r,t,n)}},Dr=new it,Nr={async zip(e,r){return w(r,e,{type:"zip",level:9})},async sevenz(e,r){return w(r,e,{type:"7z",level:9})},async extract(e,r){return v(e,{outputDir:r})},async list(e){return F(e)},async test(e){return U(e)}};export{P as ArchiveNotFoundError,x as BinaryNotFoundError,pt as COMPRESSION_PRESETS,_ as CompressionError,N as CorruptArchiveError,A as DEFAULT_BIN_DIR,H as ExtractionError,lt as PACKAGE_ROOT,$ as PasswordRequiredError,T as TimeoutError,W as UnsupportedFormatError,D as WrongPasswordError,it as ZipWrapper,l as ZipWrapperError,w as add,st as benchmark,Mt as clearBinaryCache,nt as convert,tt as deleteFiles,Et as downloadBundledBinary,j as ensureBinary,v as extract,Lt as getBinaryInfo,R as getPath,rt as hash,kt as hashArchive,et as info,F as list,Y as parseZipWrapperError,Nr as quick,Ht as rename,V as setCachePath,U as test,Q as update,G as verifyBinary,Dr as zipWrapper};
|
package/dist/postinstall.js
CHANGED
|
@@ -1,3 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`);let o=D.find(n=>n.platform===e&&n.arch===r);o||(console.warn(`Warning: No pre-built binary available for ${e}-${r}`),console.log("You can use your system 7za by setting USE_SYSTEM_7ZA=true"),process.exit(0));let t=h.default.join(f,o.targetName);i.default.existsSync(t)&&(console.log(`Binary already exists: ${t}`),process.exit(0)),console.log(`Downloading: ${o.filename}`);let a=`${P}/${o.filename}`;k(f);try{await w(a,t),e!=="win"&&v(t),console.log(`
|
|
3
|
-
Successfully downloaded to: ${t}`),process.exit(0)}catch(n){console.error(`Download failed: ${n.message}`),console.log("You can use your system 7za by setting USE_SYSTEM_7ZA=true"),process.exit(1)}};R().catch(e=>{console.error(`Unexpected error: ${e.message}`),process.exit(1)}).finally(()=>process.exit(0));
|
|
1
|
+
"use strict";var _=Object.create;var A=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var C=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of I(t))!D.call(r,n)&&n!==e&&A(r,n,{get:()=>t[n],enumerable:!(o=v(t,n))||o.enumerable});return r};var i=(r,t,e)=>(e=r!=null?_(B(r)):{},C(t||!r||!r.__esModule?A(e,"default",{value:r,enumerable:!0}):e,r));var c=i(require("fs")),g=i(require("path")),x=i(require("os")),b=require("child_process");var w={win32:"7za.exe",linux:"7za",darwin:"7za"};var E=class extends Error{constructor(e,o,n){super(e);this.code=o;this.exitCode=n;this.name="ZipWrapperError",Error.captureStackTrace?.(this,this.constructor)}},a=class extends E{constructor(t=[]){let e=t.length>0?` Searched: ${t.join(", ")}`:"";super(`7-Zip binary not found.${e}`,"BINARY_NOT_FOUND"),this.name="BinaryNotFoundError"}};var z=i(require("fs")),d=i(require("path"));function P(r){let t=r;for(;;){if(z.default.existsSync(d.default.join(t,"package.json")))return t;let e=d.default.dirname(t);if(e===t)return r;t=e}}var M=P(__dirname),p=d.default.join(M,"bin");var m=i(require("fs")),R=i(require("https"));var y=(r,t)=>new Promise((e,o)=>{R.default.get(r,n=>{if((n.statusCode===301||n.statusCode===302)&&n.headers.location){y(n.headers.location,t).then(e).catch(o);return}if(n.statusCode!==200){o(new Error(`Download failed with status ${n.statusCode}`));return}let f=`${t}.download`,u=m.default.createWriteStream(f);n.on("error",h=>{u.destroy(),m.default.rmSync(f,{force:!0}),o(h)}),u.on("error",h=>{m.default.rmSync(f,{force:!0}),o(h)}),u.on("finish",()=>{u.close(()=>{m.default.renameSync(f,t),e()})}),n.pipe(u)}).on("error",o)});var $="https://github.com/iqbal-rashed/7zip-wrapper/releases/download/latest",F=[{platform:"win",arch:"x64",filename:"win-x64-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"ia32",filename:"win-x86-7za.exe",targetName:"7za.exe"},{platform:"win",arch:"arm64",filename:"win-arm64-7za.exe",targetName:"7za.exe"},{platform:"linux",arch:"x64",filename:"linux-x64-7za",targetName:"7za"},{platform:"linux",arch:"ia32",filename:"linux-x86-7za",targetName:"7za"},{platform:"linux",arch:"arm64",filename:"linux-arm64-7za",targetName:"7za"},{platform:"linux",arch:"arm",filename:"linux-arm-7za",targetName:"7za"},{platform:"darwin",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"darwin",arch:"arm64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"x64",filename:"mac-7za",targetName:"7za"},{platform:"mac",arch:"arm64",filename:"mac-7za",targetName:"7za"}],s=null,L=null,U=()=>{let r=x.default.platform();return r==="win32"?"win":r==="darwin"?"darwin":r},W=()=>{let r=x.default.arch();return r==="x64"?"x64":r==="ia32"?"ia32":r==="arm64"?"arm64":r==="arm"?"arm":r},H=r=>{c.default.mkdirSync(r,{recursive:!0})},k=r=>{c.default.chmodSync(r,493)},T=()=>{let r=U(),t=W();return F.find(e=>e.platform===r&&e.arch===t)},X=()=>w[x.default.platform()]||"7za",O=()=>{let r=T();return r?g.default.join(p,r.targetName):g.default.join(p,X())};function S(){return s||(s=O(),s)}var sr=S();function Y(r){return r||S()}function j(r){let t=r||S();if(!c.default.existsSync(t))return!1;try{return(0,b.execSync)(`"${t}"`,{timeout:1e3,windowsHide:!0,stdio:"ignore"}),!0}catch{return!1}}async function G(r=!1){let t=T();if(!t)throw new a([O()]);let e=g.default.join(p,t.targetName);if(c.default.existsSync(e))return s=e,e;r||console.log(`Downloading 7-Zip binary for ${t.platform}-${t.arch}...`);let o=`${$}/${t.filename}`;return H(p),await y(o,e),t.platform!=="win"&&k(e),r||console.log(`Successfully downloaded to: ${e}`),s=e,L=null,e}async function N(r){let t=Y(r?.binaryPath);if(c.default.existsSync(t)){if(!j(t))throw new a([t]);return t}if(r?.binaryPath)throw new a([r.binaryPath]);if(r?.download===!1)throw new a([t]);return G(r?.silent)}N().catch(r=>{console.error(`Unexpected error: ${r.message}`),process.exit(1)}).finally(()=>process.exit(0));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "7zip-wrapper",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "A comprehensive, feature-complete Node.js wrapper for 7-Zip with TypeScript support, bundled binaries, and cross-platform compatibility.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|