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

@vendortf/catalog

v0.1.1

Published

This is a fork of the original repo, which adresses performance issues with the `toFullSKU` function.

Downloads

3

Readme

Note

This is a fork of the original repo, which adresses performance issues with the toFullSKU function.

Catalog • example workflow

📖 Table of Contents

👋 Introduction

Catalog aims to provide an extensive standardised identifier system similar to a stock-keeping unit (SKU) system for TF2 items.

We may have data objects representing the full details of an item as large as this but we can represent the object as minimally as 5918;6. In this example, 5918 represents the item's defindex that tells us the item we have (a Scream Fortress XII War Paint Case) and 6 represents the item's quality of Unique quality in this case. Almost all other item details can (and should) be functionally determined from the SKU.

Other libraries such as tf2-sku and tf2-item-format already provide standards for keeping to this SKU system, however, there is currently not a standard for including item modifications e.g spells, parts etc.

This means that applications will need to continue holding onto complete item information within databases should they wish to account for item modifications. As such, this library provides an extension for item modifications on top of the current standard.

🔌 Getting Started

You can install this module with npm within your project by running the command:

npm install @automatedtf/catalog
Example Usages

There are a number of ways this module can be used.

// Get an EconItem somehow e.g Steam Inventory JSON API
const econItem = { ... };

// Parse to a SKU
const baseSKU: string = toBaseSKU(econItem);
const fullSKU: string = toFullSKU(econItem);

// Get a human-readable item name
// NOTE: toName does not support full SKUs yet
const baseName: string = toName(baseSKU); // e.g Unique Brown Bomber
const theSameBaseName: string = toName(fullSKU);

// Parse a SKU into a ParsedSKUItem
const baseItemDetails: ParsedSKUItem = parseSKU(baseSKU);
const fullItemDetails: ParsedSKUItem = parseSKU(fullSKU); // includes item modifications

// Strip a full SKU into its base SKU
const _baseSKU: string = stripFullSKU(fullSKU); // remove item modifications
// Assertion: baseSKU === _baseSKU;

🗂️ What makes a SKU?

There are two concepts covered here when using this module: a base SKU and a full SKU.

Base SKU

A base SKU is the standard provided by other SKU libraries such as tf2-item-format and tf2-sku. This library uses tf2-item-format as it provides an intermediate object from parseEconItem that holds all information on item types and modifications. Calling toSKU from tf2-item-format upon this object will create a base SKU that considers the item type but not any modifications.

This can be used to identify items that are of the same type e.g an Unusual Green Confetti Brigade Helm and an Unusual Green Confetti Bridge Helm painted Australium Gold, however, won't take into account a modification such as paint.

This is more than sufficient for usage when one may not be concerned about item modifications within their item management system.

Components of a Base SKU

The regular expression for a base SKU roughly comes out to this:

[defindex];[quality](;uncraftable)?(;(u[effectenum])?(;[kt-X])?
  • defindex - number representing the identifier for what the item; seen in the TF2 schema
  • quality - number representing an item's quality; seen in the TF2 schema
  • uncraftable - 'uncraftable' if item is uncraftable, nothing if not.
  • effectenum - number representing the (generally Unusual) effect on an item; seen in the TF2 schema
  • kt-X - Represents the killstreak tier on an item
    • kt-1 - Killstreak
    • kt-2 - Specialized Killstreak
    • kt-3 - Professional Killstreak
Examples of Base SKUs

🚧 TODO 🚧

Full SKU

The full SKU is a concept introduced with this library that extends a base SKU to include string mappings for item modifications. This can be used for representing an item compactly by capturing every customisation for an item.

The regular expression for a full SKU is:

([base_sku])(;pnt[paintdefindex])?(;prt[partdefindex])*(;spl[spelldefindex])*(;shn[sheenenum])?(;ksr[killstreakerenum])?
  • base_sku - Base SKU of item as previously
  • paintdefindex - number representing the paint can used to paint the item; defindex seen in the TF2 schema
  • partdefindex - number representing the part attached on Strange item; in TF2 schema. There may be multiple parts.
  • spelldefindex - number representing the spells applied onto item, using spell's defindex in TF2 schema. All voice spells are treated as the defindex 8905 or the constant HALLOWEEN_SPELL_FIRST_VOICE. There may be multiple spells.
  • sheenenum - number representing the sheen of a Specialized Killstreak'd or Professional Killstreak'd item
    • 0 - Agonizing Emerald
    • 1 - Deadly Daffodil
    • 2 - Hot Rod
    • 3 - Manndarin
    • 4 - MeanGreen
    • 5 - TeamShine
    • 6 - VillainousViolet
  • killstreakerenum - number representing killstreaker of Professional Killstreak'd item
    • 0 - Cerebral Discharge
    • 1 - Fire Horns
    • 2 - Flames
    • 3 - Hypno-Beam
    • 4 - Incinerator
    • 5 - Singularity
    • 6 - Tornado
Examples of Full SKUs

🚧 TODO 🚧

💡 Improvements to Make

There are a number of ways that the module can be improved. This can include new functionalities, but some improvements can just be a refactoring - to reduce memory usage, minimise code duplication, and increase code hygiene.

Refactoring

There are several places in which a refactor could take place for parsing or expansion, including techniques such as grouping constants together and functions together for better management.

These are:

  • Prefix Constants
  • Parse Functions
  • Expander Functions
  • Killstreaker / Part / Sheen / Spell Enums
toName supporting full SKUs

When representing an item as a SKU to be used later for the frontend, it may be helpful to differentiate an item's name based on its modifications e.g an 'Unusual Green Confetti Brigade Helm painted Australium Gold'. toName could be extended for full SKUs later down the line.

📚 Helpful Resources