Files
NapCatQQ/.pnpm-store/v3/files/3a/922a4610f6202a239454f87d07fb839a2cf4301fed19f8d7859da8e2a8d87e07afb0e9b25fd9657d139a0be5e1c7e3fd96686518bb146986941d1067b2d764
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

57 lines
1.6 KiB
Plaintext

'use strict';
const path = require('path');
const yazl = require('yazl');
const assert = require('assert');
const stream = require('stream');
const utils = require('../utils');
const ready = require('get-ready');
class ZipFileStream extends stream.Transform {
constructor(opts) {
super(opts);
const sourceType = utils.sourceType(opts.source);
const zipfile = new yazl.ZipFile();
const zipStream = zipfile.outputStream;
zipStream.on('data', data => this.push(data));
zipStream.on('end', () => this.ready(true));
zipfile.on('error', err => this.emit('error', err));
if (sourceType !== 'file') {
assert(opts.relativePath, 'opts.relativePath is required when compressing a buffer, or a stream');
}
if (sourceType) {
this.end();
}
if (sourceType === 'file') {
zipfile.addFile(opts.source, opts.relativePath || path.basename(opts.source), opts.yazl);
} else if (sourceType === 'buffer') {
zipfile.addBuffer(opts.source, opts.relativePath, opts.yazl);
} else if (sourceType === 'stream') {
zipfile.addReadStream(opts.source, opts.relativePath, opts.yazl);
} else { // undefined
const passThrough = this._passThrough = new stream.PassThrough();
this.on('finish', () => passThrough.end());
zipfile.addReadStream(passThrough, opts.relativePath, opts.yazl);
}
zipfile.end(opts.yazl);
}
_transform(chunk, encoding, callback) {
if (this._passThrough) {
this._passThrough.write(chunk, encoding, callback);
}
}
_flush(callback) {
this.ready(callback);
}
}
ready.mixin(ZipFileStream.prototype);
module.exports = ZipFileStream;