npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

techmino-replay-parser

v3.0.0

Published

A TypeScript parser for Techmino base64-encoded replays.

Downloads

15

Readme

Techmino Replay Parser

A TypeScript parser for Techmino base64-encoded replays.
This parser is based on Techmino's algorithm used to parse the replays, available here.

Credits to SweetSea for helping me verify the results using their own parser written in Python!
They also helped as a reference for the very early versions before the parser was completely remade, with Techmino's code as a reference.

Building

You'll need Node.js (or any Node alternatives) to build this project. (I personally use Bun for its unmatched speed.)

npm install
npm run build

Usage

You can grab the TypeScript version in /src/, or the JavaScript version in /dist/.

Sample code is available in the demo-file.html and demo-b64.html files.

// Getting replay data from `.rep` file
import { parseReplayFromBuffer, type GameReplayData } from 'techmino-replay-parser';

// Binary encoded replay file.
// It's the one in `(Techmino save dir)/replay/`.
const compressedRepFile: File = '...';

// We first convert it to an array buffer.
const arrayBuffer: ArrayBuffer = compressedRepFile.arrayBuffer();

// Then we convert it to a Uint8Array.
const buffer = new Uint8Array(arrayBuffer);

// Then we get the replay data.
const replayData: GameReplayData = await parseReplayFromBuffer(buffer);

console.log(replayData);
// Getting replay data from pasted base64 string
// (You can get this by pressing the export button in Techmino's replay list)
import { parseReplayFromRepString, type GameReplayData } from 'techmino-replay-parser';

// Base64 encoded replay data.
const base64Replay: string = '...';

const replayData: GameReplayData = await parseReplayFromRepString(base64);

console.log(replayData);

Testing

To test this project, simply run the tests with Bun:

bun test

To add a new test case, you can create a new JSON file in /tests. Its format is:

{
    "replay": "Insert your replay in base-64 format here. You can simply paste the garbled text you get from exporting a replay to the clipboard.",
    "expected": {
        "comment": "The 'expected' object is what you expect out of the parser.",
        "comment_2": "You can omit fields you don't want to test, like the username.",
        "comment_3": "The test only checks if whatever you put here, is a *superset* of the object that the parser outputs.",
        "comment_4": "This means that if the parser outputs more fields than you put here, the test will still pass."
    }
}