UNPKG

@huideyeren/type-gimei

Version:

type-gimei generates Japanese Language random data.

385 lines 9.23 kB
import { ADDRESSES_DATA } from "./addresses_data"; import { NAMES_DATA } from "./names_data"; const jconv = require('jaconv'); export var GENDER; (function (GENDER) { GENDER["male"] = "male"; GENDER["female"] = "female"; })(GENDER || (GENDER = {})); export class Gimei { constructor(gender = undefined) { this.name = new Name(gender); this.address = new Address(); } static get NAMES() { return NAMES_DATA; } static get ADDRESSES() { return ADDRESSES_DATA; } static get GENDER() { return GENDER; } static get Random() { return Random; } static randomName(gender = undefined) { return new Name(gender); } static randomAddress() { return new Address(); } static randomMale() { return Name.randomMale(); } static randomFemale() { return Name.randomFemale(); } static createName() { return new Name(); } static createAddress() { return new Address(); } static kanji() { return this.createName().kanji(); } static katakana() { return this.createName().katakana(); } static romaji() { return this.createName().romaji(); } static first() { return this.createName().first; } static last() { return this.createName().last; } static prefecture() { return this.createAddress().prefecture; } static city() { return this.createAddress().city; } static town() { return this.createAddress().town; } kanji() { return this.name.kanji(); } hiragana() { return this.name.hiragana(); } katakana() { return this.name.katakana(); } romaji() { return this.name.romaji(); } get first() { return this.name.first; } get last() { return this.name.last; } get prefecture() { return this.address.prefecture; } get city() { return this.address.city; } get town() { return this.address.town; } toString() { return this.name.kanji(); } } export class Name { constructor(gender = undefined) { this.gender = gender; this.first = new FirstName(gender); this.last = new LastName(); } static randomMale() { return new this(Gimei.GENDER.male); } static randomFemale() { return new this(Gimei.GENDER.female); } static kanji() { return (new this).kanji(); } static hiragana() { return (new this).hiragana(); } static katakana() { return (new this).katakana(); } static romaji() { return (new this).romaji(); } toString() { return "uheheheh"; } kanji() { return `${this.last.kanji()} ${this.first.kanji()}`; } hiragana() { return `${this.last.hiragana()} ${this.first.hiragana()}`; } katakana() { return `${this.last.katakana()} ${this.first.katakana()}`; } romaji() { return `${this.last.romaji()} ${this.first.romaji()}`; } isMale() { return this.gender == Gimei.GENDER.male; } isFemale() { return this.gender == Gimei.GENDER.female; } } export class FirstName { constructor(gender = undefined) { this.gender = gender || Random.randomGender(); let data_len = Gimei.NAMES['first_name'][this.gender].length - 1; this.name = new NameWord(Gimei.NAMES['first_name'][this.gender][Random.random(0, data_len)]); } static createMale() { return (new this(GENDER.male)); } static createFemale() { return (new this(GENDER.female)); } kanji() { return this.name.kanji(); } hiragana() { return this.name.hiragana(); } katakana() { return this.name.katakana(); } romaji() { return this.name.romaji(); } isMale() { return this.gender === GENDER.male; } isFemale() { return this.gender === GENDER.female; } toString() { return this.name.toString(); } } export class LastName { constructor() { let data_len = Gimei.NAMES['last_name'].length - 1; this.name = new NameWord(Gimei.NAMES['last_name'][Random.random(0, data_len)]); } kanji() { return this.name.kanji(); } hiragana() { return this.name.hiragana(); } katakana() { return this.name.katakana(); } romaji() { return this.name.romaji(); } toString() { return this.name.toString(); } } class NameWord { constructor(name) { this.name = name; } kanji() { return this.name[0]; } hiragana() { return this.name[1]; } katakana() { return this.name[2]; } romaji() { let n = jconv.toHebon(this.hiragana()); return n.charAt(0) + n.slice(1).toLowerCase(); } toString() { return this.kanji(); } } export class Address { constructor() { this.prefecture = new Prefecture(); this.city = new City(); this.town = new Town(); } static kanji() { return (new this).kanji(); } static hiragana() { return (new this).hiragana(); } static katakana() { return (new this).katakana(); } static romaji() { return (new this).romaji(); } toString() { return "uheheheh"; } kanji() { return `${this.prefecture.kanji()}${this.city.kanji()}${this.town.kanji()}`; } hiragana() { return `${this.prefecture.hiragana()}${this.city.hiragana()}${this.town.hiragana()}`; } katakana() { return `${this.prefecture.katakana()}${this.city.katakana()}${this.town.katakana()}`; } romaji() { return `${this.prefecture.romaji()} ${this.city.romaji()} ${this.town.romaji()}`; } } export class Prefecture { constructor() { let data_len = Gimei.ADDRESSES['prefecture'].length - 1; this.address = new AddressWord(Gimei.ADDRESSES['prefecture'][Random.random(0, data_len)]); } kanji() { return this.address.kanji(); } hiragana() { return this.address.hiragana(); } katakana() { return this.address.katakana(); } romaji() { return this.address.romaji(); } toString() { return this.address.toString(); } } export class City { constructor() { let data_len = Gimei.ADDRESSES['city'].length - 1; this.address = new AddressWord(Gimei.ADDRESSES['city'][Random.random(0, data_len)]); } kanji() { return this.address.kanji(); } hiragana() { return this.address.hiragana(); } katakana() { return this.address.katakana(); } romaji() { return this.address.romaji(); } toString() { return this.address.toString(); } } export class Town { constructor() { let data_len = Gimei.ADDRESSES['town'].length - 1; this.address = new AddressWord(Gimei.ADDRESSES['town'][Random.random(0, data_len)]); } kanji() { return this.address.kanji(); } hiragana() { return this.address.hiragana(); } katakana() { return this.address.katakana(); } romaji() { return this.address.romaji(); } toString() { return this.address.toString(); } } class AddressWord { constructor(address) { this.address = address; } kanji() { return this.address[0]; } hiragana() { return this.address[1]; } katakana() { return this.address[2]; } romaji() { let n = jconv.toHebon(this.hiragana()); return n.charAt(0) + n.slice(1).toLowerCase(); } toString() { return this.kanji(); } } export class Random { constructor(seed) { if (seed === undefined) { let max = 100; let min = 0; seed = Math.floor(Math.random() * (max - min)) + min; } this.x = 123456789; this.y = 345677911; this.z = 567899233; this.w = seed; } next() { let t; t = this.x ^ (this.x << 11); this.x = this.y; this.y = this.z; this.z = this.w; return this.w = (this.w ^ (this.w >>> 19)) ^ (t ^ (t >>> 8)); } nextInt(min, max) { const rand = Math.abs(this.next()); return min + (rand % (max + 1 - min)); } static random(min = 0, max = 1) { let rand = new Random(); return rand.nextInt(min, max); } static randomGender(min = 0, max = 1) { let rand = new Random(); let index = rand.nextInt(min, max); let gender; switch (index) { case 0: gender = GENDER.male; break; case 1: gender = GENDER.female; break; default: gender = GENDER.male; break; } return gender; } } //# sourceMappingURL=gimei.js.map