@nos-sdk/nos-node-sdk
Version:
NOS Node.js SDK实现了NOS对象操作接口,基于此SDK能方便快速地实现JavaScript应用程序来使用NOS的对象存储服务。
78 lines • 2.88 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const path = __importStar(require("path"));
const qs = __importStar(require("querystring"));
const ramda_1 = require("ramda");
const ramda_adjunct_1 = require("ramda-adjunct");
const util_1 = require("./util");
const url = __importStar(require("url"));
// stringify query
const commonQueryStringify = ramda_1.pipe(Object.entries, ramda_1.map(([key, value]) => {
if (typeof value === 'boolean') {
return value ? key : '';
}
return `${key}=${qs.escape(value)}`;
}), ramda_adjunct_1.compact, ramda_1.sort(ramda_1.ascend(v => v)), ramda_1.join('&'));
const uriQueryStringify = ramda_1.pipe(ramda_1.omit(['bucket', 'objectKey']), commonQueryStringify);
const resourceQueryStringify = ramda_1.pipe(ramda_1.pick(['acl', 'location', 'uploadId', 'uploads', 'partNumber', 'delete']), commonQueryStringify);
/**
* normalize object key
* 1. remove prefix /
* /obj => obj, dir/obj => dir%2Fobj
* @param key
*/
function escapeObjectKey(key) {
return key.replace(/\//g, '%2F');
}
exports.escapeObjectKey = escapeObjectKey;
/**
* 获取资源路径,不对 / 进行转义
* @param resource
*/
function getResourceUri(resource) {
if (typeof resource === 'string')
return resource;
const query = uriQueryStringify(resource);
const urlObj = {
pathname: '/',
search: query,
};
if ('objectKey' in resource) {
urlObj.pathname = url.resolve(urlObj.pathname, resource.objectKey);
}
return url.format(urlObj);
}
exports.getResourceUri = getResourceUri;
/**
* 获取资源字符串,对 objectKey 进行转义,保证 objectKey 没有前置 /
* @param resource
*/
function getResourceString(resource) {
if (typeof resource === 'string')
return resource;
const query = resourceQueryStringify(resource);
if ('objectKey' in resource) {
return url.format({
pathname: path.posix.join('/', resource.bucket, escapeObjectKey(resource.objectKey)),
search: query,
});
// return `/${resource.bucket}/${qs.escape(resource.objectKey)}${query ? '?' + query : ''}`
}
else if ('bucket' in resource) {
return `/${resource.bucket}/${query ? '?' + query : ''}`;
}
return '/';
}
exports.getResourceString = getResourceString;
function mergeResource(dest, ...srcs) {
Object.assign(dest, ...srcs.map(util_1.compactObject));
}
exports.mergeResource = mergeResource;
//# sourceMappingURL=resource.js.map