Skip to content

Commit

Permalink
feat: allow path encoding to be disabled
Browse files Browse the repository at this point in the history
  • Loading branch information
frederickfogerty committed Feb 24, 2022
1 parent 97f726c commit 1413800
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 22 deletions.
53 changes: 32 additions & 21 deletions src/index.js
Expand Up @@ -47,19 +47,17 @@ export default class ImgixClient {
return VERSION;
}

buildURL(path = '', params = {}) {
const sanitizedPath = this._sanitizePath(path);
buildURL(rawPath = '', params = {}, options = {}) {
let path = rawPath;
if (!options.disablePathEncoding) {
path = this._sanitizePath(path);
}

let finalParams = this._buildParams(params);
if (!!this.settings.secureURLToken) {
finalParams = this._signParams(sanitizedPath, finalParams);
finalParams = this._signParams(path, finalParams);
}
return (
this.settings.urlPrefix +
this.settings.domain +
sanitizedPath +
finalParams
);
return this.settings.urlPrefix + this.settings.domain + path + finalParams;
}

_buildParams(params = {}) {
Expand Down Expand Up @@ -168,10 +166,9 @@ export default class ImgixClient {
return resolutions;
}

_buildSrcSetPairs(path, params, options) {
const [widthTolerance, minWidth, maxWidth] = validateAndDestructureOptions(
options,
);
_buildSrcSetPairs(path, params = {}, options = {}) {
const [widthTolerance, minWidth, maxWidth] =
validateAndDestructureOptions(options);

let targetWidthValues;
if (options.widths) {
Expand All @@ -187,13 +184,18 @@ export default class ImgixClient {
}

const srcset = targetWidthValues.map(
(w) => `${this.buildURL(path, { ...params, w })} ${w}w`,
(w) =>
`${this.buildURL(
path,
{ ...params, w },
{ disablePathEncoding: options.disablePathEncoding },
)} ${w}w`,
);

return srcset.join(',\n');
}

_buildDPRSrcSet(path, params, options) {
_buildDPRSrcSet(path, params = {}, options = {}) {
if (options.devicePixelRatios) {
validateDevicePixelRatios(options.devicePixelRatios);
}
Expand All @@ -213,16 +215,25 @@ export default class ImgixClient {
const qualities = { ...DPR_QUALITIES, ...options.variableQualities };

const withQuality = (path, params, dpr) => {
return `${this.buildURL(path, {
...params,
dpr: dpr,
q: params.q || qualities[dpr] || qualities[Math.floor(dpr)],
})} ${dpr}x`;
return `${this.buildURL(
path,
{
...params,
dpr: dpr,
q: params.q || qualities[dpr] || qualities[Math.floor(dpr)],
},
{ disablePathEncoding: options.disablePathEncoding },
)} ${dpr}x`;
};

const srcset = disableVariableQuality
? targetRatios.map(
(dpr) => `${this.buildURL(path, { ...params, dpr })} ${dpr}x`,
(dpr) =>
`${this.buildURL(
path,
{ ...params, dpr },
{ disablePathEncoding: options.disablePathEncoding },
)} ${dpr}x`,
)
: targetRatios.map((dpr) => withQuality(path, params, dpr));

Expand Down
7 changes: 6 additions & 1 deletion types/index.d.ts
Expand Up @@ -11,7 +11,11 @@ declare class ImgixClient {
includeLibraryParam?: boolean;
});

buildURL(path: string, params?: {}): string;
buildURL(
path: string,
params?: {},
options?: { disablePathEncoding?: boolean },
): string;
_sanitizePath(path: string): string;
_buildParams(params: {}): string;
_signParams(path: string, queryParams?: {}): string;
Expand All @@ -38,6 +42,7 @@ export interface SrcSetOptions {
disableVariableQuality?: boolean;
devicePixelRatios?: DevicePixelRatio[];
variableQualities?: VariableQualities;
disablePathEncoding?: boolean;
}

export default ImgixClient;

0 comments on commit 1413800

Please sign in to comment.