feat(alias): filename -> snake_case alias converter

This commit is contained in:
Axel Meyer
2026-06-16 20:57:07 +02:00
parent 765e4bf964
commit 775ad58308
2 changed files with 80 additions and 0 deletions

30
src/alias.js Normal file
View File

@@ -0,0 +1,30 @@
// src/alias.js
// Pure functions for deriving snake_case aliases from sprite filenames.
// No I/O.
const path = require('node:path');
const SUPPORTED_EXT = ['.png', '.webp', '.jpg', '.jpeg'];
function stripPrefix(name, prefix) {
if (!prefix) return name;
if (name.startsWith(prefix)) return name.slice(prefix.length);
return name;
}
// CamelCase -> snake_case. Boundary: lowercase/digit -> uppercase.
function camelToSnakeCase(s) {
return s
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
.toLowerCase();
}
function aliasFromFilename(filename, opts = {}) {
const ext = path.extname(filename).toLowerCase();
let base = SUPPORTED_EXT.includes(ext)
? filename.slice(0, -ext.length)
: filename;
if (opts.stripPrefix) base = stripPrefix(base, opts.stripPrefix);
return camelToSnakeCase(base);
}
module.exports = { stripPrefix, camelToSnakeCase, aliasFromFilename };