@typed/fp
Version:
Data Structures and Resources for fp-ts
80 lines • 1.68 kB
JavaScript
/**
* @category Constructor
* @since 0.13.0
*/
export const param = (param) => `:${param}`;
/**
* @category Constructor
* @since 0.13.0
*/
export const optional = (param) => `${param}?`;
/**
* @category Constructor
* @since 0.13.0
*/
export const prefix = (prefix, param) => `{${prefix}${param}}`;
/**
* Construct query params
* @category Constructor
* @since 0.13.0
*/
export const queryParam = (key, value) => `${key}=${value}`;
/**
* @category Constructor
* @since 0.13.0
*/
export const zeroOrMore = (param) => `:${param}*`;
/**
* one or more path parts will be matched to this param
* @category Constructor
* @since 0.13.0
*/
export const oneOrMore = (param) => `:${param}+`;
/**
* @category Constructor
* @since 0.13.0
*/
export const queryParams = (...params) => `\\?${params.join('&')}`;
/**
* @category Constructor
* @since 0.13.0
*/
export const unnamed = `(.*)`;
/**
* @category Combinator
* @since 0.13.0
*/
export const pathJoin = (...parts) => {
if (parts.length === 0) {
return ``;
}
const [head, ...tail] = parts;
return `${formatPart(head)}${pathJoin(...tail)}`;
};
/**
* Formats a piece of a path
* @category Combinator
* @since 0.13.0
*/
export const formatPart = (part) => {
part = removeLeadingSlash(part);
if (part.startsWith('{')) {
return part;
}
if (part.startsWith('\\?')) {
return part;
}
return part === '' ? '' : `/${part}`;
};
/**
* @category Combinator
* @since 0.13.0
*/
export const removeLeadingSlash = (a) => {
let s = a.slice();
while (s.startsWith('/')) {
s = s.slice(1);
}
return s;
};
//# sourceMappingURL=Path.js.map