https://github.com/danocmx/node-tf2-item-format
Fully typed battle-tested library that helps you format TF2 items to the community standards.
https://github.com/danocmx/node-tf2-item-format
sku tf2 tf2-items
Last synced: 3 months ago
JSON representation
Fully typed battle-tested library that helps you format TF2 items to the community standards.
- Host: GitHub
- URL: https://github.com/danocmx/node-tf2-item-format
- Owner: danocmx
- License: mit
- Created: 2019-03-28T21:15:45.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-30T04:12:51.000Z (7 months ago)
- Last Synced: 2024-10-30T09:11:20.593Z (7 months ago)
- Topics: sku, tf2, tf2-items
- Language: JavaScript
- Homepage:
- Size: 4.01 MB
- Stars: 24
- Watchers: 0
- Forks: 5
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# TF2 Item Format
Formatting for TF2 items.Use `v5` branch for current version.
Install it via `npm install tf2-item-format`## Features
- Parses item name into attribute object
- Stringifies attribute object into item name same as backpack.tf
- Parses ECON item into attributes
- Parses SKU into attributes
- Makes SKU out of attributes
- Creates backpack.tf compatible format for listing creation## Support the project
tf2-item-format is now used in number of production grade projects for handling item data,
help support the project by donating items [here](https://steamcommunity.com/tradeoffer/new/?partner=162338347&token=Od7J3LIh).## Migrating from v4 to v5
To keep your application working like before with version 5 you have to:
```ts
import { parseString } from 'tf2-item-format/static' // -> from 'tf2-item-format'const { parseString } = require('tf2-item-format/static') // -> from 'tf2-item-format'
```### New
To inject your own schema use this interface:
```ts
export type ISchema = {
getDefindex(search: number | string): number|null;
getName(search: number | string): string;
getEffectName(effect: number | string): string;
getWearName(wear: number | string): string;
getKillstreakName(killstreak: number | string): string;
getTextureName(texture: number | string): string;
getQualityName(quality: number | string): string;
getEffectEnum(effect: number | string): number;
getWearEnum(wear: number | string): number;
getKillstreakEnum(killstreak: number | string): number;
getTextureEnum(texture: number | string): number;
getQualityEnum(quality: number | string): number;
getTextures(): SchemaEnum;
getEffects(): SchemaEnum;
isUniqueHat(defindexOrName: string | number): boolean;
}// Extra types you might need:
export type NameToDefindex = { [name: string]: number };
export type DefindexToName = { [defindex: number]: string };
export type SchemaEnum = NameToDefindex & DefindexToName;// Import these like:
// import { ISchema, NameToDefindex, DefindexToName, SchemaEnum } from 'tf2-item-format'
```
Then you just have to:
```ts
import { createFormat } from 'tf2-item-format';const format = createFormat(schema);
```
Every method is then export same as before.You can use `parseSKU` and `toSKU` without schema:
```ts
import { parseSKU, toSKU } from 'tf2-item-format';
```Please note that static schema has implemented a lot of overwrites for defindexes that simply cannot be obtained by the limited data we have, so when you are implementing it yourself you should use the current `Schema` as your guide.
## Instalation
Via NPM: `npm install tf2-item-format`
Or Yarn: `yarn add tf2-item-format`## Documentation
Currently there is no full documentation.We export these methods:
- `parseString`
- `stringify`
- `parseEconItem`
- `toSKU`
- `parseSKU`
- `createBPListing`
- `fixName`And static schema:
- under property `schema`Everything is fully typed so you should be able to get this working on your own, until I make a documentation.
Some of the types are a bit confusing which will get fixed in next major version.### parseEconItem
```ts
parseEconItem(econ: EconItem, inNumbers: boolean, useDefindexes: boolean, options?: { useTrueDefindex: boolean }): ParsedEconItem;
```- `econ` is raw item you receive from the api
- `inNumbers` - changes return type of certain attributes to numbers instead of pure strings, eg. quality, texture, wear, ...
- `useDefindexes` - appends item defindex to the object, adds target & output aswell
- `options`
- `useTrueDefindex` - returns true defindex item has on this econ, doesn't ask schema.
- Returns `ParsedEconItem` which is an object of all attributes the econ gives us### createBPListing
```ts
createBPListing(attributes: ItemAttributes | StringifySKUAttributes, options?: CreateBPListingOptions): BackpackTFListing
```- `attributes` - these you get from `parseString`, `parseSKU` or `parseEconItem`, all are compatible
- `options`
- `unuSkinsToDecorated` - defaults unusual skins to decorated weapon quality, default value is `true`
- Returns `BackpackTFListing` object compatible with `item` object in backpack.tf listing creation api### stringify
```ts
stringify(attributes: StrigifySKUAttributes | ItemAttributes, options?: StringifyOptions): string
```- `attributes` - these you get from `parseString`, `parseSKU` or `parseEconItem`, all are compatible
- `options`
- `determineUniqueHat` - if set it checks in schema if given item should use `The` in name, defaults to `false`
- Returns the item name#### Note for stringify
If you are using sku format to store your items and want to use `The` in your names, you have to turn `determineUniqueHat` to `true`.## Compability usage
```ts
// Have a name, want a sku
const attributes = parseString(name, true, true); // To get defindexes and enums
const sku = toSKU(attributes);// Have a sku, want a name
const attributes = parseSKU(sku);
const name = stringify(attributes);// Have a sku, want a bp listing
const attributes = parseSKU(sku);
const listing = createBPListing(attributes);
```
Every method should be interchangable in similar ways.