Errors: one class per mistake, all SportyError
{
"surface(\"hockey\", \"khl\")": {
"name": "UnknownLeagueError",
"instanceof SportyError": true,
"instanceof UnknownLeagueError": true,
"instanceof UnknownDisplayRangeError": false,
"instanceof UnknownUnitError": false,
"instanceof InputError": false,
"message": "Unknown hockey league \"khl\"; expected one of: ahl, custom, echl, iihf, ncaa, nhl, nwhl, ohl, phf, pwhl, qmjhl,…"
},
"surface(\"hockey\", \"nhl\", { displayRange: \"slot\" })": {
"name": "UnknownDisplayRangeError",
"instanceof SportyError": true,
"instanceof UnknownLeagueError": false,
"instanceof UnknownDisplayRangeError": true,
"instanceof UnknownUnitError": false,
"instanceof InputError": false,
"message": "Unknown hockey display range \"slot\"; expected one of: full, in_bounds_only, in bounds only, offense, offence, …"
},
"normalizeUnit(\"furlong\")": {
"name": "UnknownUnitError",
"instanceof SportyError": true,
"instanceof UnknownLeagueError": false,
"instanceof UnknownDisplayRangeError": false,
"instanceof UnknownUnitError": true,
"instanceof InputError": false,
"message": "Unknown unit \"furlong\"; expected one of: mm, cm, m, in, ft, yd (or a full name such as \"feet\")"
},
"surface(\"soccer\", \"epl\", { arcResolution: 1 })": {
"name": "SportyError",
"instanceof SportyError": true,
"instanceof UnknownLeagueError": false,
"instanceof UnknownDisplayRangeError": false,
"instanceof UnknownUnitError": false,
"instanceof InputError": false,
"message": "arcResolution must be an integer >= 2; got 1"
},
"drawScene(ctx, surface(\"soccer\", \"epl\", { xlim: [0, 0] }))": {
"name": "InputError",
"instanceof SportyError": true,
"instanceof UnknownLeagueError": false,
"instanceof UnknownDisplayRangeError": false,
"instanceof UnknownUnitError": false,
"instanceof InputError": true,
"message": "soccer \"epl\" has an empty bbox [0, -50, 0, 50]; nothing to draw"
}
}import { createCanvas } from "@napi-rs/canvas";
import {
InputError,
SportyError,
UnknownDisplayRangeError,
UnknownLeagueError,
UnknownUnitError,
normalizeUnit,
surface,
} from "@sportsdataverse/sporty";
import { drawScene } from "@sportsdataverse/sporty/canvas";
const caught = (f: () => unknown) => {
try {
f();
return "no error";
} catch (e) {
if (!(e instanceof SportyError)) throw e;
return {
name: e.name,
"instanceof SportyError": e instanceof SportyError,
"instanceof UnknownLeagueError": e instanceof UnknownLeagueError,
"instanceof UnknownDisplayRangeError": e instanceof UnknownDisplayRangeError,
"instanceof UnknownUnitError": e instanceof UnknownUnitError,
"instanceof InputError": e instanceof InputError,
message: e.message.length > 110 ? `${e.message.slice(0, 110)}…` : e.message,
};
}
};
// A league name is any string at compile time (new leagues need no release), so a typo surfaces here.
{
'surface("hockey", "khl")': caught(() => surface("hockey", "khl")),
'surface("hockey", "nhl", { displayRange: "slot" })': caught(() =>
// @ts-expect-error: the display range is checked at compile time too
surface("hockey", "nhl", { displayRange: "slot" }),
),
'normalizeUnit("furlong")': caught(() => normalizeUnit("furlong")),
'surface("soccer", "epl", { arcResolution: 1 })': caught(() =>
surface("soccer", "epl", { arcResolution: 1 }),
),
// nothing to draw: the xlim crops the pitch to zero width (here on an @napi-rs/canvas context, in Node)
'drawScene(ctx, surface("soccer", "epl", { xlim: [0, 0] }))': caught(() =>
drawScene(createCanvas(100, 100).getContext("2d"), surface("soccer", "epl", { xlim: [0, 0] })),
),
};
Tags: node · errors · SportyError · UnknownLeagueError · UnknownDisplayRangeError · UnknownUnitError · InputError. All sporty examples.