Reference
Streams, draws and seeds
import { … } from "@johnmorrisdotca/tane";
9.8 kB minified and gzipped, with everything it imports (measured with esbuild)
Tane 種: seeded random numbers and daily seeds.
One seed, the same numbers everywhere: a small generator, the draws a game
needs from it, seeds that travel in an address with ranges kept aside, one
seed a day, and a stream's position written down and read back. No
dependencies and no DOM; @johnmorrisdotca/tane/react adds two hooks, and
tane is the same thing from a terminal.
Exports
| Name | Kind | What it is |
|---|---|---|
addDays | function | The day by days after (or, negative, before) a day. |
below | function | An integer in [0, n): one draw. |
chance | function | True with probability p, from 0 (never) to 1 (always): one draw. |
checkBlocks | function | The blocks in ascending order, checked: whole numbers, inside 1 to most, none overlapping another. |
CLI_MAX_COUNT | constant | The most numbers one run prints. |
cliLanguage | function | The language the command line speaks: --lang, or the environment's, or the system's; Japanese for ja…, English for anything else. |
CliResult | type | What the command line came to. |
CliSurroundings | type | What the command line is run in. |
counted | function | A seeded stream that counts its own draws, so that it can be written down at any moment and picked up later: const random = counted(42), draw from it as from any stream, then keep random.position(). |
CountedRandom | type | A stream that knows where it is: call it for the next number, as any Random; read seed and draws, or take its position(). |
CSV_COLUMNS | constant | The columns of the CSV, in order. |
dailySeed | function | Today's seed, the date as a number: 2026-09-30 is 20260930. |
dayKey | function | The day a moment falls on, in UTC or in the named IANA time zone. |
DayKey | type | A calendar date, YYYY-MM-DD. |
dayOfSeed | function | The day a seed names inside a block, or null for a seed that names none. |
daysBetween | function | How many days to is after from: negative when it is before. |
daySeed | function | A day's seed inside a block kept for it: the block's first seed plus the date as a number. |
deriveSeed | function | A seed of its own for one part of something seeded: deriveSeed(game, "deck") and deriveSeed(game, "dice") are two unrelated streams from one game's seed, and adding a third part later moves neither. |
distinctBelow | function | count different integers below limit, in the order drawn, by drawing again whenever a number comes up twice. |
drawSeed | function | A seed from 1 to most, any of them as likely as another, skipping every reserved block: one draw. |
DrawSeedOptions | type | Where a drawn seed may land. |
fillIn | function | Put values into a string's braces: fillIn("Seed {seed}", { seed: 42 }) is "Seed 42". |
float | function | A number in [min, max): one draw. |
fork | function | A new, independent stream split off another: it takes one draw from random and seeds a fresh generator from it. |
freshSeed | function | A new seed for something nobody asked for by number, drawn from Math.random. |
fromJSON | function | A position from JSON that toJSON wrote. |
fromText | function | A position from a line toText wrote, with any space around it. |
hashSeed | function | A seed from any text: hashSeed("room-7") is the same unsigned 32-bit integer everywhere. |
inBlock | function | Whether a seed falls inside a block. |
int | function | An integer from min to max, both included: one draw. |
isDayKey | function | Whether a text is a real date written YYYY-MM-DD: 2026-02-30 is not. |
isSeed | function | Whether a value read from outside (an address, a request body) is a seed: an integer from 1 to most. |
Language | type | The languages Tane speaks. |
languageOf | function | The language a tag such as ja-JP or en_US.UTF-8 names: Japanese for anything that starts ja, English otherwise. |
MAX_CSV_ROWS | constant | The most rows toCSV writes at once. |
mulberry32 | function | A seeded stream: mulberry32(42) returns the same numbers every time it is made. |
nextDayStart | function | The first moment of the day after the one at falls on, in that zone: when a daily seed next changes. |
normal | function | A number from a normal distribution (Box–Muller): two draws. |
pick | function | One item of a list, each as likely as the next: one draw. |
Random | type | A number in [0, 1), like Math.random, from a stream a seed fixes. |
randomAt | function | A stream that starts draws numbers into seed's: randomAt(42, 7)() is the eighth number of mulberry32(42), reached without drawing the first seven. |
runCli | function | Run the command line. |
sample | function | count items of a list, no item twice, in the order drawn: a partial Fisher–Yates, one draw each. |
SAVE_FORMAT | constant | The shape of the JSON and the text this package writes. |
savedStream | function | A position as the object toJSON writes: the format, the seed, the draws and the state they come to. |
SavedStream | type | A stream's position as toJSON writes it. |
SEED_MOST | constant | The largest seed: it travels as a plain integer, so it stays a positive 32-bit signed one. |
SeedBlock | type | A range of seeds kept aside: from up to, not including, from + size. |
seededRandom | function | A seeded stream. |
seedFrom | function | A seed from whatever a person typed or a link carried. |
shuffle | function | The list in place, in a random order (Fisher–Yates, from the end): one draw for each item but the first. |
shuffled | function | A shuffled copy; the list given is left alone. |
stateAt | function | The generator's state after draws numbers have been taken from seed: an unsigned 32-bit integer. |
step | function | One step of mulberry32 as a pure function: the number drawn and the state to keep for the next one. |
Step | type | One draw and the state after it, for code that keeps the state itself (in a database row, say). |
StreamPosition | type | Where a stream is: the seed it started from, and how many numbers have been drawn from it. |
STRINGS | constant | Every string, in both languages. |
TaneStrings | type | The names of the strings. |
toCSV | function | The next count numbers from a position as CSV for a spreadsheet: a header, then one row a draw, with the draw's number counted from 1, its value, and the generator's state after it. |
toJSON | function | A position as JSON, two spaces deep, with the format's number first. |
toText | function | A position as one line to paste into a chat or a bug report: tane:1:42:7 is format 1, seed 42, 7 draws in. |
VERSION | constant | The version of this package, as package.json has it. |
weightedIndex | function | An index into weights, each chosen in proportion to its weight: one draw. |
weightedPick | function | One item, chosen by the matching weight: one draw. |