UNPKG

@nos-sdk/nos-node-sdk

Version:

NOS Node.js SDK实现了NOS对象操作接口,基于此SDK能方便快速地实现JavaScript应用程序来使用NOS的对象存储服务。

149 lines 4.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const crypto_1 = require("crypto"); const ramda_1 = require("ramda"); const ramda_adjunct_1 = require("ramda-adjunct"); const encodeCharCode = new Map("!'()&^~".split('').map(char => [ new RegExp(`\\${char}`, 'g'), `%${char .charCodeAt(0) .toString(16) .toUpperCase()}`, ])); function camelCase(name) { if (name === 'ID') return 'id'; name = name.replace(/^[A-Z]/, m => m.toLowerCase()); name = name.replace(/[-_][a-z]/g, m => m[1].toUpperCase()); return name; } exports.camelCase = camelCase; function CamelCase(name) { if (name === 'id') return 'ID'; name = name.replace(/^[a-z]/, m => m.toUpperCase()); name = name.replace(/[-_][a-z]/g, m => m[1].toUpperCase()); return name; } exports.CamelCase = CamelCase; function kababCase(name) { name = name.replace(/^[A-Z]/, m => m.toLowerCase()); name = name.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`); return name; } exports.kababCase = kababCase; function renameObjectNameFactory(renameFunc) { return function changeCase(obj) { switch (ramda_1.type(obj)) { case 'Object': obj = ramda_adjunct_1.renameKeysWith(renameFunc, obj); for (const [key, value] of Object.entries(obj)) { obj[key] = changeCase(value); } break; case 'Array': for (let i = 0; i < obj.length; i++) { obj[i] = changeCase(obj[i]); } obj = obj.slice(); // clone break; } return obj; }; } exports.camelCaseObject = renameObjectNameFactory(camelCase); exports.CamelCaseObject = renameObjectNameFactory(CamelCase); exports.kababCaseObject = renameObjectNameFactory(kababCase); function stream2Buffer(stream) { const bufs = []; return new Promise((resolve, reject) => { stream.on('data', buf => bufs.push(buf)); stream.on('end', () => { resolve(Buffer.concat(bufs)); }); stream.on('error', reject); }); } exports.stream2Buffer = stream2Buffer; exports.addMetadataPrefix = ramda_adjunct_1.renameKeysWith(ramda_1.pipe(kababCase, ramda_1.concat('x-nos-'))); function getMetadataFromHeaders(headers) { let keyIt = headers.keys(); const metadata = {}; let res = keyIt.next(); while (!res.done) { const key = res.value; if (key.startsWith('x-nos-')) { metadata[key.slice(6)] = headers.get(key); } res = keyIt.next(); } return exports.camelCaseObject(metadata); } exports.getMetadataFromHeaders = getMetadataFromHeaders; function isHttpStatusOk(status) { return status >= 200 && status < 400; } exports.isHttpStatusOk = isHttpStatusOk; function md5sum(data) { return crypto_1.createHash('md5') .update(data) .digest('hex'); } exports.md5sum = md5sum; exports.isNullOrUndefined = (a) => ramda_adjunct_1.isNull(a) || ramda_adjunct_1.isUndefined(a); exports.compactObject = ramda_1.filter(e => !exports.isNullOrUndefined(e)); // https://www.typescriptlang.org/docs/handbook/mixins.html function applyMixins(derivedCtor, baseCtors) { baseCtors.forEach(baseCtor => { Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { derivedCtor.prototype[name] = baseCtor.prototype[name]; }); }); } exports.applyMixins = applyMixins; // decorator to add callback support of method function Callbackable(target, key, descr) { const fn = descr.value; descr.value = function (...args) { if (typeof args[args.length - 1] === 'function') { const cb = args[args.length - 1]; fn.apply(this, args.slice(0, -1)) .then((data) => cb(null, data)) .catch((e) => cb(e, null)); return; } return fn.apply(this, args); }; } exports.Callbackable = Callbackable; // make sure value is array // if value is undefined or null, return [] // if value is not array, wrapper as array // return value function normalizeArray(value) { if (!value) { return []; } if (ramda_1.type(value) !== 'Array') { return [value]; } return value; } exports.normalizeArray = normalizeArray; /** * @param key */ function encodeKey(key) { if (key[0] === '/' && key.length > 1) { key = key.slice(1); } key = encodeURIComponent(key); for (const [reg, str] of encodeCharCode) { key = key.replace(reg, str); } // 恢复 / key = key.replace(/%2F/g, '/'); return key; } exports.encodeKey = encodeKey; //# sourceMappingURL=util.js.map