@giancosta86/drago
v1.0.0
Published
Random sinogram generator for TypeScript
Downloads
10
Maintainers
Readme
drago
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.
Installation
TypeScript
The package on NPM is:
@giancosta86/drago
The public API entirely resides in the root package index, so you shouldn't reference specific modules.
Usage
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
.