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