Генератор мок-данных с персонажами из популярных фильмов и сериалов

от автора

Часто в демо интерфейсах продуктов можно увидеть имена 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/