Skip to the content

Tane種

Reproduce numbers from a seed, shuffle or pick items, share a daily puzzle and resume a saved stream.

Tane means seed in Japanese. About the name

Contents

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

NameKindWhat it is
addDaysfunctionThe day by days after (or, negative, before) a day.
belowfunctionAn integer in [0, n): one draw.
chancefunctionTrue with probability p, from 0 (never) to 1 (always): one draw.
checkBlocksfunctionThe blocks in ascending order, checked: whole numbers, inside 1 to most, none overlapping another.
CLI_MAX_COUNTconstantThe most numbers one run prints.
cliLanguagefunctionThe language the command line speaks: --lang, or the environment's, or the system's; Japanese for ja…, English for anything else.
CliResulttypeWhat the command line came to.
CliSurroundingstypeWhat the command line is run in.
countedfunctionA 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().
CountedRandomtypeA stream that knows where it is: call it for the next number, as any Random; read seed and draws, or take its position().
CSV_COLUMNSconstantThe columns of the CSV, in order.
dailySeedfunctionToday's seed, the date as a number: 2026-09-30 is 20260930.
dayKeyfunctionThe day a moment falls on, in UTC or in the named IANA time zone.
DayKeytypeA calendar date, YYYY-MM-DD.
dayOfSeedfunctionThe day a seed names inside a block, or null for a seed that names none.
daysBetweenfunctionHow many days to is after from: negative when it is before.
daySeedfunctionA day's seed inside a block kept for it: the block's first seed plus the date as a number.
deriveSeedfunctionA 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.
distinctBelowfunctioncount different integers below limit, in the order drawn, by drawing again whenever a number comes up twice.
drawSeedfunctionA seed from 1 to most, any of them as likely as another, skipping every reserved block: one draw.
DrawSeedOptionstypeWhere a drawn seed may land.
fillInfunctionPut values into a string's braces: fillIn("Seed {seed}", { seed: 42 }) is "Seed 42".
floatfunctionA number in [min, max): one draw.
forkfunctionA new, independent stream split off another: it takes one draw from random and seeds a fresh generator from it.
freshSeedfunctionA new seed for something nobody asked for by number, drawn from Math.random.
fromJSONfunctionA position from JSON that toJSON wrote.
fromTextfunctionA position from a line toText wrote, with any space around it.
hashSeedfunctionA seed from any text: hashSeed("room-7") is the same unsigned 32-bit integer everywhere.
inBlockfunctionWhether a seed falls inside a block.
intfunctionAn integer from min to max, both included: one draw.
isDayKeyfunctionWhether a text is a real date written YYYY-MM-DD: 2026-02-30 is not.
isSeedfunctionWhether a value read from outside (an address, a request body) is a seed: an integer from 1 to most.
LanguagetypeThe languages Tane speaks.
languageOffunctionThe language a tag such as ja-JP or en_US.UTF-8 names: Japanese for anything that starts ja, English otherwise.
MAX_CSV_ROWSconstantThe most rows toCSV writes at once.
mulberry32functionA seeded stream: mulberry32(42) returns the same numbers every time it is made.
nextDayStartfunctionThe first moment of the day after the one at falls on, in that zone: when a daily seed next changes.
normalfunctionA number from a normal distribution (Box–Muller): two draws.
pickfunctionOne item of a list, each as likely as the next: one draw.
RandomtypeA number in [0, 1), like Math.random, from a stream a seed fixes.
randomAtfunctionA stream that starts draws numbers into seed's: randomAt(42, 7)() is the eighth number of mulberry32(42), reached without drawing the first seven.
runClifunctionRun the command line.
samplefunctioncount items of a list, no item twice, in the order drawn: a partial Fisher–Yates, one draw each.
SAVE_FORMATconstantThe shape of the JSON and the text this package writes.
savedStreamfunctionA position as the object toJSON writes: the format, the seed, the draws and the state they come to.
SavedStreamtypeA stream's position as toJSON writes it.
SEED_MOSTconstantThe largest seed: it travels as a plain integer, so it stays a positive 32-bit signed one.
SeedBlocktypeA range of seeds kept aside: from up to, not including, from + size.
seededRandomfunctionA seeded stream.
seedFromfunctionA seed from whatever a person typed or a link carried.
shufflefunctionThe list in place, in a random order (Fisher–Yates, from the end): one draw for each item but the first.
shuffledfunctionA shuffled copy; the list given is left alone.
stateAtfunctionThe generator's state after draws numbers have been taken from seed: an unsigned 32-bit integer.
stepfunctionOne step of mulberry32 as a pure function: the number drawn and the state to keep for the next one.
SteptypeOne draw and the state after it, for code that keeps the state itself (in a database row, say).
StreamPositiontypeWhere a stream is: the seed it started from, and how many numbers have been drawn from it.
STRINGSconstantEvery string, in both languages.
TaneStringstypeThe names of the strings.
toCSVfunctionThe 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.
toJSONfunctionA position as JSON, two spaces deep, with the format's number first.
toTextfunctionA 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.
VERSIONconstantThe version of this package, as package.json has it.
weightedIndexfunctionAn index into weights, each chosen in proportion to its weight: one draw.
weightedPickfunctionOne item, chosen by the matching weight: one draw.

View sourceEdit on GitHubMade from the source of @johnmorrisdotca/tane 1.3.0.