ts-gimei
Version:
日本語の人物名や住所のテストデータを、漢字・ひらがな・カタカナ・ローマ字で出力します
76 lines (75 loc) • 2.75 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Gimei = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const yaml_1 = require("yaml");
class Gimei {
person(params) {
if (!this.namesData)
this.loadNamesData();
const gender = params?.gender ?? getRandomItem(['male', 'female']);
const firstNames = this.namesData.firstNames[gender];
const lastNames = this.namesData.lastNames;
const firstName = getRandomItem(firstNames);
const lastName = getRandomItem(lastNames);
const fullName = {
kanji: `${lastName.kanji} ${firstName.kanji}`,
hiragana: `${lastName.hiragana} ${firstName.hiragana}`,
katakana: `${lastName.katakana} ${firstName.katakana}`,
romaji: `${lastName.romaji} ${firstName.romaji}`,
};
return {
firstName,
lastName,
fullName,
gender,
};
}
address() {
if (!this.addressesData)
this.loadAddressesData();
const prefecture = getRandomItem(this.addressesData.prefecture);
const city = getRandomItem(this.addressesData.city);
const town = getRandomItem(this.addressesData.town);
return { prefecture, city, town };
}
loadNamesData() {
const _path = path_1.default.join(__dirname, '..', 'data', 'names.yml');
const str = fs_extra_1.default.readFileSync(_path, 'utf8');
const ymlData = (0, yaml_1.parse)(str);
this.namesData = {
firstNames: {
male: ymlData.first_name.male.map(parseItem),
female: ymlData.first_name.female.map(parseItem),
},
lastNames: ymlData.last_name.map(parseItem),
};
}
loadAddressesData() {
const _path = path_1.default.join(__dirname, '..', 'data', 'addresses.yml');
const str = fs_extra_1.default.readFileSync(_path, 'utf8');
const ymlData = (0, yaml_1.parse)(str);
this.addressesData = {
prefecture: ymlData.addresses.prefecture.map(parseItem),
city: ymlData.addresses.city.map(parseItem),
town: ymlData.addresses.town.map(parseItem),
};
}
}
exports.Gimei = Gimei;
function parseItem(item) {
const [kanji, hiragana, katakana, romaji] = item;
return {
kanji,
hiragana,
katakana,
romaji,
};
}
function getRandomItem(array) {
return array[Math.floor(Math.random() * array.length)];
}