Random sinogram generator for TypeScript
🫖drago is a web assembly for 🦋TypeScript, written in 🦀Rust, at the top of a technological stack which includes chinese-format, chinese-rand and other crates; the name of this project stems from the Italian word describing one of the fabled, 🌺sublime 🫖dragons of the Eastern legends.
Its purpose is simple and elegant: generating random Chinese logograms via LogogramGenerator
class - in accordance with the parameters provided by the user as a variety of thematic categories.
The package on NPM is:
@giancosta86/drago
The public API entirely resides in the root package index, so you shouldn't reference specific modules.
The purpose of this library is to create random Chinese logograms on demand - which can be achieved via a sequence of minimalist steps:
-
Import the required identifiers:
import initDrago, { LogogramGenerator, RandomParams, } from "@giancosta86/drago";
-
Initialize the web assembly; in any initialization block of your client, call:
await initDrago(/*[optional module/path/URL here]*/);
-
Note 1: for synchronous initialization, the
initSync
function is available as a named import. -
Note 2: most often, you'll' want to pass a parameter related to the location of your .wasm file.
-
-
Create an instance of
LogogramGenerator
- by calling itscreate
static method and passing an object implementing theRandomParams
interface. For example:const logogramGenerator = LogogramGenerator.create({ seed: 90, variant: "Simplified", fraction: { denominatorRange: [1, 7], numeratorRange: [4, 21], }, decimal: { integerRange: [1, 42], fractionalLengthRange: [1, 3], }, });
Later, you can store the instance and use it wherever you need.
Note 1: most of the fields are optional - but at least one of the optional fields must be present; this constraint is due to the fact that
LogogramGenerator
requires at least one generation strategy.Note 2: anyway, in case of unacceptable settings, the
create
method will throw an object of typeRandomParamsError
, containing a detailed description.Note 3: because of limitations in the underlying implementation, you cannot have two or more independent
LogogramGenerator
instances: creating each instance automatically resets - to the latest value - the seed of the internal randomization engine, from which every single instance would draw its random data.In summary: you should have just one instance of
LogogramGenerator
in your client. -
Call
logograms()
whenever you need to create random logograms: the generator will randomly pick one of the provided strategies, returning the Chinese characters as astring
:let characters: string = logogramGenerator.logograms();
Note: the generation of characters is a safe operations - because all the validations occur when instantiating
LogogramGenerator
.