@open-audio-stack/core
Version:
Open-source audio plugin management software
57 lines (56 loc) • 1.69 kB
JavaScript
import * as semver from 'semver';
import slugify from 'slugify';
let DEBUG = false;
const URLSAFE_REGEX = /[^\w\s$*_+~.()'"!\-:@/]+/g;
export function inputGetParts(input) {
return input.split('@');
}
export function log(...args) {
if (DEBUG)
console.log(...args);
}
export function logEnable() {
return (DEBUG = true);
}
export function logDisable() {
return (DEBUG = false);
}
export function pathGetDirectory(path, sep = '/') {
return path.substring(0, path.lastIndexOf(sep));
}
export function pathGetExt(path, sep = '.') {
return path.substring(path.lastIndexOf(sep) + 1);
}
export function pathGetFilename(path, sep = '/') {
return path.substring(path.lastIndexOf(sep) + 1);
}
export function pathGetSlug(path, sep = '/') {
const parts = path.split(sep);
const index = parts.findIndex(part => semver.valid(part));
return parts[index - 2] + '/' + parts[index - 1];
}
export function pathGetVersion(path, sep = '/') {
const parts = path.split(sep);
const index = parts.findIndex(part => semver.valid(part));
return parts[index];
}
export function toSlug(val) {
// @ts-expect-error slugify library issue with ESM modules
return slugify(val, { lower: true, remove: URLSAFE_REGEX });
}
export function isValidSlug(slug) {
let valid = true;
// Must have exactly one slash.
if (slug.split('/').length !== 2)
valid = false;
// Must be lowercase.
if (slug !== slug.toLowerCase())
valid = false;
// Must pass slugify conversion
if (slug !== toSlug(slug))
valid = false;
return valid;
}
export function isValidVersion(version) {
return semver.valid(version) !== null;
}