Часто в демо интерфейсах продуктов можно увидеть имена John Doe, Jane Smith, Test User и случайные почты вроде test@example.com. И такой же рандомный текст в описании профиля, профессии и интересах.
Я создал генератор мок-данных, который генерирует данные профиля из персонажей популярных кинофраншиз. Во все тяжкие, игра престолов, матрица, южный парк и другие. Подходит для демо, мокапов, скриншотов интерфейса и сидов баз данных.
Демо: https://loredata.orchidfiles.com
Функционал
-
29 киновселенных
-
Генерация одного профиля и группы профилей
-
Фильтр по интересам, имени, вселенной, локации
-
Работает в браузере, node.js и CLI
-
Все данные находятся в NPM пакете без API запросов
Установка
# librarynpm install loredata# CLInpm install -g loredata
Пример использования
import { person, group } from 'loredata';const p = person({ universe: 'breaking-bad' });// {// firstName: 'Walter',// lastName: 'White',// username: 'heisenberg',// email: 'blue_sky_cook@lospollos.com',// quote: "I am the one who knocks.",// profession: 'Chemistry teacher',// interests: ['chemistry', 'cooking', 'family'],// address: { street: '308 Negra Arroyo Lane', city: 'Albuquerque', state: 'NM' },// symbol: '☢️',// universe: 'breaking-bad',// universeName: 'Breaking Bad'// }const team = group({ universe: 'game-of-thrones', size: 3 });// [// { firstName: 'Jon', lastName: 'Snow', username: 'lord_commander', ... },// { firstName: 'Daenerys', lastName: 'Targaryen', username: 'mother_of_dragons', ... },// { firstName: 'Tyrion', lastName: 'Lannister', username: 'halfman', ... },// ]
Детерминированный вывод
Если вам нужно получать одинаковый результат при каждой генерации, вы можете передать параметр seed:
const p = person({ universe: 'matrix', seed: 42 });const team = group({ universe: 'matrix', size: 3, seed: 42 });
Подключение на фронтенде
Библиотека также поддерживает работу в браузерной среде через отдельную точку входа, не зависящую от fs или path:
import { loadUniverse, personFromData } from 'loredata/browser';const universe = await loadUniverse('breaking-bad');const p = personFromData(universe);
Это работает с Vite, webpack и другими сборщиками фронтенда.
CLI
loredata person --universe breaking-badloredata person --universe breaking-bad --format jsonloredata person --interests chemistry,cookingloredata person --interests chemistry,cooking --interests-mode andloredata person --name walterloredata group --universe matrix --size 5loredata universes
Как устроен проект
TypeScript-монорепо с pnpm. Внутри npm-пакет с библиотекой, CLI и веб-приложение с демо.
Данные лежат в JSON-датасетах: для каждой вселенной отдельные файлы с мета-информацией и персонажами. Чтобы подключить новую вселенную, достаточно добавить data/{id}/meta.json и data/{id}/characters.json. Качество продукта держится на каноничности датасета: правильная профессия, реальный адрес, цитаты, логины персонажа.
Ссылки
ссылка на оригинал статьи https://habr.com/ru/articles/1044646/