simfile-parser
v0.7.2
Published
Read stepmania charts with javascript!
Downloads
126
Readme
simfile-parser
Original parsing code from city41/stepcharts. Props to Matt for building a really sweet site.
Works both in node (server-side or CLI) and in browser. Bun and Deno support is untested, but an interesting future to explore!
Usage
Install with npm install --save simfile-parser
or yarn add simfile-parser
// in node.js >= 16.9.0
import {
parseAllPacks,
parsePack,
parseSong,
calculateStats,
} from "simfile-parser";
// Use one of the three parsing functions depending on your needs:
const allMyStuff = parseAllPacks("/pathToStepmania/Songs");
const aGreatPack = parsePack("/pathToStepmania/Songs/DDRMAX2");
const aGreatSong = parseSong(".../Songs/Easy as Pie 2/Abracadabra");
// you can get some top level info about a song's contents too:
calculateStats(aGreatSong.charts["single-challenge"]);
/* returns:
{
"freezes": 111,
"gallops": 0,
"jacks": 22,
"jumps": 8,
}
*/
Browser support
Support dragging packs directly into a web app by parsing in-browser!
// requires typescript 5.0 in "Bundler" module resolution mode for typings
import { parsePack } from "simfile-parser/browser";
// necessary to enable data drops
document.body.addEventListener("dragover", function (e) {
e.preventDefault();
});
document.body.addEventListener("drop", async function (e) {
// also necessary to prevent browser navigating to dropped folder
evt.preventDefault();
if (!evt.dataTransfer) {
return;
}
if (evt.dataTransfer.items.length !== 1) {
console.error("too many items dropped, try just one folder");
return;
}
try {
const pack = await parsePack(evt.dataTransfer.items[0]);
console.log(`parsed pack "${pack.name}" with ${pack.songCount} songs`);
} catch (e) {
console.error(e);
}
});