/**
* @file toPosix
* @module pathe/lib/toPosix
*/
import validateURLString from '#internal/validate-url-string'
import sep from '#lib/sep'
export default toPosix
/**
* Make separators in `input` POSIX-compliant.
*
* Supports encoded separators (e.g. `%5C`, `%5c`).
*
* @category
* utils
*
* @template {URL | string} Input
* The URL or path to handle
*
* @this {void}
*
* @param {Input} input
* The {@linkcode URL}, URL string, or path to handle
* @return {Input}
* `input` with POSIX-compliant separators
*/
function toPosix(this: void, input: Input): Input
/**
* Make separators in `list` POSIX-compliant.
*
* Supports encoded separators (e.g. `%5C`, `%5c`).
*
* @category
* utils
*
* @template {(URL | string)[]} List
* The list to handle
*
* @this {void}
*
* @param {List} list
* The list of {@linkcode URL}s, URL strings, or paths to handle
* @return {List}
* `list` with POSIX-compliant separators
*/
function toPosix(this: void, list: List): List
/**
* Make separators in `value` POSIX-compliant.
*
* Supports encoded separators (e.g. `%5C`, `%5c`).
*
* @category
* utils
*
* @template {URL | string} Input
* The URL or path to handle
*
* @this {void}
*
* @param {Input | Input[]} value
* The {@linkcode URL}, URL string, or path to handle, or list of such values
* @return {Input | Input[]}
* `value` with POSIX-compliant separators
*/
function toPosix(
this: void,
value: Input | Input[]
): Input | Input[]
/**
* @this {void}
*
* @param {(URL | string)[] | URL | string} value
* The {@linkcode URL}, URL string, or path to handle, or list of such values
* @return {(URL | string)[] | URL | string}
* `value` with POSIX-compliant separators
*/
function toPosix(
this: void,
value: (URL | string)[] | URL | string
): (URL | string)[] | URL | string {
if (Array.isArray(value)) {
/**
* Current index in {@linkcode value}.
*
* @var {number} i
*/
let i: number = -1
while (++i < value.length) {
/**
* The URL, URL string, or path to handle.
*
* @const {URL | string} input
*/
const input: URL | string = value[i]!
validateURLString(input, `value[${i}]`)
value[i] = toPosix(input)
}
return value
}
validateURLString(value, 'value')
if (typeof value === 'string') {
return value.replace(/\\/g, sep)
.replace(/(?:%5C)/g, '%2F')
.replace(/(?:%5c)/g, '%2f')
}
return value.href = toPosix(value.href), value
}