UNPKG

@nos-sdk/nos-node-sdk

Version:

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

78 lines 2.88 kB
"use strict"; 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