35 lines
854 B
TypeScript
35 lines
854 B
TypeScript
type SplitBindSpec = {
|
|
host: string;
|
|
container: string;
|
|
options: string;
|
|
};
|
|
|
|
export function splitSandboxBindSpec(spec: string): SplitBindSpec | null {
|
|
const separator = getHostContainerSeparatorIndex(spec);
|
|
if (separator === -1) {
|
|
return null;
|
|
}
|
|
|
|
const host = spec.slice(0, separator);
|
|
const rest = spec.slice(separator + 1);
|
|
const optionsStart = rest.indexOf(":");
|
|
if (optionsStart === -1) {
|
|
return { host, container: rest, options: "" };
|
|
}
|
|
return {
|
|
host,
|
|
container: rest.slice(0, optionsStart),
|
|
options: rest.slice(optionsStart + 1),
|
|
};
|
|
}
|
|
|
|
function getHostContainerSeparatorIndex(spec: string): number {
|
|
const hasDriveLetterPrefix = /^[A-Za-z]:[\\/]/.test(spec);
|
|
for (let i = hasDriveLetterPrefix ? 2 : 0; i < spec.length; i += 1) {
|
|
if (spec[i] === ":") {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|