|
|
- import copy from 'copy-to';
- import urlutil from 'url';
- import merge from 'merge-descriptors';
- import is from 'is-type-of';
- import { isIP } from '../utils/isIP';
- import { checkConfigValid } from '../utils/checkConfigValid';
-
- export function getReqUrl(this: any, params) {
- const ep: any = {};
- const isCname = this.options.cname;
- checkConfigValid(this.options.endpoint, 'endpoint');
- copy(this.options.endpoint, false).to(ep);
-
- if (params.bucket && !isCname && !isIP(ep.hostname) && !this.options.sldEnable) {
- ep.host = `${params.bucket}.${ep.host}`;
- }
-
- let resourcePath = '/';
- if (params.bucket && this.options.sldEnable) {
- resourcePath += `${params.bucket}/`;
- }
-
- if (params.object) {
- // Preserve '/' in result url
- resourcePath += this._escape(params.object).replace(/\+/g, '%2B');
- }
- ep.pathname = resourcePath;
-
- const query = {};
- if (params.query) {
- merge(query, params.query);
- }
-
- if (params.subres) {
- let subresAsQuery = {};
- if ((is as any).string(params.subres)) {
- subresAsQuery[params.subres] = '';
- } else if (is.array(params.subres)) {
- params.subres.forEach(k => {
- subresAsQuery[k] = '';
- });
- } else {
- subresAsQuery = params.subres;
- }
- merge(query, subresAsQuery);
- }
-
- ep.query = query;
-
- return urlutil.format(ep);
- }
|