'use strict'
|
Object.defineProperty(exports, '__esModule', { value: true })
|
exports.tar =
|
exports.zip =
|
exports.ZipAFolder =
|
exports.COMPRESSION_LEVEL =
|
void 0
|
const tslib_1 = require('tslib')
|
const fs_1 = require('fs')
|
const path_1 = tslib_1.__importDefault(require('path'))
|
const archiver_1 = tslib_1.__importDefault(require('archiver'))
|
const promises_1 = tslib_1.__importDefault(require('fs/promises'))
|
const is_glob_1 = tslib_1.__importDefault(require('is-glob'))
|
const glob_1 = require('glob')
|
var COMPRESSION_LEVEL
|
;(function (COMPRESSION_LEVEL) {
|
COMPRESSION_LEVEL[(COMPRESSION_LEVEL['uncompressed'] = 0)] = 'uncompressed'
|
COMPRESSION_LEVEL[(COMPRESSION_LEVEL['medium'] = 5)] = 'medium'
|
COMPRESSION_LEVEL[(COMPRESSION_LEVEL['high'] = 9)] = 'high'
|
})(COMPRESSION_LEVEL || (exports.COMPRESSION_LEVEL = COMPRESSION_LEVEL = {}))
|
class ZipAFolder {
|
static tar(src, tarFilePath, zipAFolderOptions) {
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
const o = zipAFolderOptions || {
|
compression: COMPRESSION_LEVEL.high,
|
}
|
if (o.compression === COMPRESSION_LEVEL.uncompressed) {
|
yield ZipAFolder.compress({
|
src,
|
targetFilePath: tarFilePath,
|
format: 'tar',
|
zipAFolderOptions,
|
})
|
} else {
|
yield ZipAFolder.compress({
|
src,
|
targetFilePath: tarFilePath,
|
format: 'tar',
|
zipAFolderOptions,
|
archiverOptions: {
|
gzip: true,
|
gzipOptions: {
|
level: o.compression,
|
},
|
},
|
})
|
}
|
})
|
}
|
static zip(src, zipFilePath, zipAFolderOptions) {
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
const o = zipAFolderOptions || {
|
compression: COMPRESSION_LEVEL.high,
|
}
|
if (o.compression === COMPRESSION_LEVEL.uncompressed) {
|
yield ZipAFolder.compress({
|
src,
|
targetFilePath: zipFilePath,
|
format: 'zip',
|
zipAFolderOptions,
|
archiverOptions: {
|
store: true,
|
},
|
})
|
} else {
|
yield ZipAFolder.compress({
|
src,
|
targetFilePath: zipFilePath,
|
format: 'zip',
|
zipAFolderOptions,
|
archiverOptions: {
|
zlib: {
|
level: o.compression,
|
},
|
},
|
})
|
}
|
})
|
}
|
static compress(_a) {
|
return tslib_1.__awaiter(
|
this,
|
arguments,
|
void 0,
|
function* ({
|
src,
|
targetFilePath,
|
format,
|
zipAFolderOptions,
|
archiverOptions,
|
}) {
|
let output
|
const globList = []
|
if (
|
!(zipAFolderOptions === null || zipAFolderOptions === void 0
|
? void 0
|
: zipAFolderOptions.customWriteStream) &&
|
targetFilePath
|
) {
|
const targetBasePath = path_1.default.dirname(targetFilePath)
|
if (targetBasePath === src) {
|
throw new Error('Source and target folder must be different.')
|
}
|
try {
|
if (!(0, is_glob_1.default)(src)) {
|
yield promises_1.default.access(
|
src,
|
promises_1.default.constants.R_OK
|
)
|
}
|
yield promises_1.default.access(
|
targetBasePath,
|
promises_1.default.constants.R_OK |
|
promises_1.default.constants.W_OK
|
)
|
} catch (e) {
|
throw new Error(`Permission error: ${e.message}`)
|
}
|
if ((0, is_glob_1.default)(src)) {
|
for (const globPart of src.split(',')) {
|
globList.push(...(yield (0, glob_1.glob)(globPart.trim())))
|
}
|
if (globList.length === 0) {
|
throw new Error(`No glob match found for "${src}".`)
|
}
|
}
|
output = (0, fs_1.createWriteStream)(targetFilePath)
|
} else if (zipAFolderOptions && zipAFolderOptions.customWriteStream) {
|
output = zipAFolderOptions.customWriteStream
|
} else {
|
throw new Error(
|
'You must either provide a target file path or a custom write stream to write to.'
|
)
|
}
|
const zipArchive = (0, archiver_1.default)(
|
format,
|
archiverOptions || {}
|
)
|
return new Promise((resolve, reject) =>
|
tslib_1.__awaiter(this, void 0, void 0, function* () {
|
output.on('close', resolve)
|
output.on('error', reject)
|
zipArchive.pipe(output)
|
if ((0, is_glob_1.default)(src)) {
|
for (const file of globList) {
|
if ((yield promises_1.default.lstat(file)).isFile()) {
|
const content = yield promises_1.default.readFile(file)
|
zipArchive.append(content, {
|
name: file,
|
})
|
}
|
}
|
} else {
|
zipArchive.directory(
|
src,
|
(zipAFolderOptions === null || zipAFolderOptions === void 0
|
? void 0
|
: zipAFolderOptions.destPath) || false,
|
{
|
date: new Date(Date.now() + 8 * 60 * 60 * 1000),
|
}
|
)
|
}
|
yield zipArchive.finalize()
|
})
|
)
|
}
|
)
|
}
|
}
|
exports.ZipAFolder = ZipAFolder
|
exports.zip = ZipAFolder.zip
|
exports.tar = ZipAFolder.tar
|
//# sourceMappingURL=ZipAFolder.js.map
|