@yuntools/ali-oss
Version:
阿里云 OSS 命令行工具 ossutil 封装,支持 ESM,CJS 导入,提供 TypeScript 类型定义
85 lines • 3.95 kB
JavaScript
import { DataKey } from './types.js';
export const regxStat = new Map([
[DataKey.acl, new RegExp(`${DataKey.acl}\\s+:\\s+(\\w+)`, 'u')],
[DataKey.acceptRanges, new RegExp(`${DataKey.acceptRanges}\\s+:\\s+(\\d+)`, 'u')],
[DataKey.contentLength, new RegExp(`${DataKey.contentLength}\\s+:\\s+(\\d+)`, 'u')],
[DataKey.contentMd5, new RegExp(`${DataKey.contentMd5}\\s+:\\s+(\\S+)`, 'u')],
[DataKey.contentType, new RegExp(`${DataKey.contentType}\\s+:\\s+(\\S+)`, 'u')],
[DataKey.etag, new RegExp(`${DataKey.etag}\\s+:\\s+(\\S+)`, 'u')],
[DataKey.lastModified, new RegExp(`${DataKey.lastModified}\\s+:\\s+(\\d+.+)`, 'u')],
[DataKey.owner, new RegExp(`${DataKey.owner}\\s+:\\s+(\\d+)`, 'u')],
[DataKey.xOssHashCrc64ecma, new RegExp(`${DataKey.xOssHashCrc64ecma}\\s+:\\s+(\\S+)`, 'u')],
[DataKey.xOssObjectType, new RegExp(`${DataKey.xOssObjectType}\\s+:\\s+(\\w+)`, 'u')],
[DataKey.xOssStorageClass, new RegExp(`${DataKey.xOssStorageClass}\\s+:\\s+(\\w+)`, 'u')],
[DataKey.link, new RegExp('https://[^?\\s\\n]+', 'u')],
[DataKey.httpUrl, new RegExp('https://[^?\\s\\n]+', 'u')],
[DataKey.httpShareUrl, new RegExp('https?://\\S+', 'u')],
]);
export const regxCommon = new Map([
[DataKey.elapsed, /(\d+\.\d+)\(s\)\s+elapsed(?=\s|\n|\r\n|$)/u],
/** average speed 1628000(byte/s)' */
[DataKey.averageSpeed, /average\s+speed\s+(\d+)/u],
// Succeed: Total num: 10, size: 2,125. OK num: 10(upload 9 files, 1 directories).
[DataKey.succeedTotalNumber, new RegExp('Succeed: Total num:\\s+(\\d+)', 'u')],
[DataKey.succeedTotalSize, new RegExp('Succeed: Total.+? size:\\s+([\\d,]+)', 'u')],
[DataKey.uploadDirs, new RegExp('OK num:.+?upload.+?(\\d+)\\s+directories', 'u')],
[DataKey.uploadFiles, new RegExp('OK num:.+?upload.+?(\\d+)\\s+files', 'u')],
// Succeed: Total num: 10, size: 2,125. OK num: 10(copy 9 objects).
[DataKey.copyObjects, new RegExp('OK num:.+?copy\\s+?(\\d+)\\s+objects', 'u')],
// "Succeed: Total num: 1, size: 493. OK num: 1(download 1 objects).\n\naverage speed 1000(byte/s)\n\n0.259723(s) elapsed"
[DataKey.downloadObjects, new RegExp('OK num:.+?download\\s+?(\\d+)\\s+objects', 'u')],
]);
export const pickRegxMap = new Map([
...regxCommon,
...regxStat,
]);
export const pickFuncMap = new Map([
[DataKey.elapsed, pickString],
[DataKey.averageSpeed, pickNumber],
[DataKey.acl, pickString],
[DataKey.acceptRanges, pickNumber],
[DataKey.contentLength, pickNumber],
[DataKey.contentMd5, pickString],
[DataKey.contentType, pickString],
[DataKey.etag, pickString],
[DataKey.lastModified, pickString],
[DataKey.owner, pickString],
[DataKey.xOssHashCrc64ecma, pickString],
[DataKey.xOssObjectType, pickString],
[DataKey.xOssStorageClass, pickString],
[DataKey.link, pickString],
[DataKey.httpUrl, pickString],
[DataKey.httpShareUrl, pickString],
[DataKey.succeedTotalNumber, pickNumber],
[DataKey.succeedTotalSize, pickNumberStr],
[DataKey.uploadDirs, pickNumber],
[DataKey.uploadFiles, pickNumber],
[DataKey.copyObjects, pickNumber],
[DataKey.downloadObjects, pickNumber],
]);
function pickString(input, rule, debug = false) {
return pick(input, rule, debug);
}
function pickNumber(input, rule, debug = false) {
const found = pick(input, rule, debug);
return found ? parseInt(found, 10) : void 0;
}
function pickNumberStr(input, rule, debug = false) {
const found = pick(input, rule, debug);
return found ? found.replace(/,/ug, '').trim() : void 0;
}
function pick(input, rule, debug = false) {
debug && console.log({ pickInput: input });
const found = input.match(rule);
if (!found) {
return;
}
debug && console.log({ pickFound: found });
if (found.length === 1) {
return found[0];
}
else if (found.length >= 1) {
return found[1];
}
}
//# sourceMappingURL=rule.js.map