npm.io
0.0.0 • Published 2d ago

@game-infra/balance-schemas

Licence
Version
0.0.0
Deps
3
Size
56 kB
Vulns
0
Weekly
0

@game-infra/balance-schemas

Balance-tool API contract: valibot schemas plus toad-contracts defineApiContract definitions for dataset list/save/load/publish/export-all and the balance AI-assist endpoint. Builds on @game-infra/api-schemas-core (reuses createSuccessResponseSchema and AIProviderSchema).

Published to npm. Also consumable as sibling source (exports points at src/).

Install

// pnpm sibling checkout
"@game-infra/balance-schemas": "link:../../game-infra/packages/schemas/balance-schemas"
// or from npm
"@game-infra/balance-schemas": "^0.1.0"

valibot is a peer dependency (^1.4.0); the consumer provides it. @game-infra/api-schemas-core is a direct dependency.

Usage

Contracts carry method, path, params, and request/response schemas in one object. Build a URL with pathResolver, derive the route pattern with mapApiContractToPath:

import { balanceLoadContract, balancePublishContract } from "@game-infra/balance-schemas";
import { mapApiContractToPath } from "@toad-contracts/valibot";

balanceLoadContract.pathResolver({ gameId: "g1", datasetId: "weapons" });
// '/games/g1/balance/weapons'
mapApiContractToPath(balancePublishContract);
// '/games/:gameId/balance/:datasetId/publish'

Register on a Hono service with @toad-contracts/hono (buildHonoRoute) and call from a frontend with @toad-contracts/frontend-http-client (sendByApiContract) — both drive off the same contract objects.

Extension points

  • Dataset ids: datasetId is a plain string(). The old BalanceDatasetIds enum (weapons/mechaFrames/genericUnits/combatConstants) was dropped during the extraction; games register their own dataset descriptors via config and re-tighten the value there.
  • AI provider: the AI-assist request's provider field reuses AIProviderSchema from @game-infra/api-schemas-core, the single source of truth across AI endpoints.

Migrating from golem-forge

The old BalanceApiPaths constants and BalancePathResolvers / resolve*Path helpers are gone. Get a URL from the contract itself with contract.pathResolver(params) and the :param route pattern with mapApiContractToPath(contract). Prefer driving requests through @toad-contracts/frontend-http-client (sendByApiContract) and routes through @toad-contracts/hono (buildHonoRoute), which consume the contract directly so you never touch a raw path.

Dependencies

@game-infra/api-schemas-core, @toad-contracts/core, @toad-contracts/valibot; peer valibot.

Consumers

balance-tool (the dataset editor frontend and its backend endpoints).