UNPKG

@open-audio-stack/core

Version:
57 lines (56 loc) 1.69 kB
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; }