super-maker
v1.0.21
Published
Data generator designed specifically for turboMaker.
Maintainers
Readme
superMaker
Data generator designed specifically for turboMaker. Generates random data: text, hashtags, words, dates, emails, id, url, arrays, booleans, etc.
Suitable for
- Populating databases and creating synthetic content (posts, users, products, etc.)
- Rapid prototyping
Features
- Ability to create a fully custom data storage to be used during generation.
- Uses Fisher-Yates shuffle — a reliable shuffling algorithm.
- Text generation with hashtags.
- Automatic hashtag extraction.
- Generation of unique email, id, etc., using randomBytes().
- Work with arrays and objects.
Installation & Usage
- Install the package:
npm i super-maker- In the root of the project, create a file super-maker-storage.json.
Fill it with data, for example:
{
"words": [
"zorvian",
"velthara",
"quarnex"
],
"hashtags": [
"#Mercury",
"#Venus",
"#Moon"
],
"fullName": [
"James Smith",
"John Johnson",
"Robert Brown"
],
"fullNames": {
"name": [
"James",
"Emily",
"Michael"
],
"surname": [
"Smith",
"Johnson",
"Williams"
]
},
"images": {
"avatar": [
"https://raw.githubusercontent.com/AndrewShedov/superMaker/refs/heads/main/storage/images/1.webp",
"https://raw.githubusercontent.com/AndrewShedov/superMaker/refs/heads/main/storage/images/2.webp"
],
"banner": [
"https://raw.githubusercontent.com/AndrewShedov/superMaker/refs/heads/main/storage/images/1.webp",
"https://raw.githubusercontent.com/AndrewShedov/superMaker/refs/heads/main/storage/images/2.webp"
]
},
"users": [
"683a6251661f8f39765a75cc",
"683a6220c57fe3aba56e3745",
"683a622042fd1cb967541fb5",
"683a62208355f4708ed7ed81"
]
}- Generate data in turboMaker.
Example: posts generation:
import { superMaker } from 'super-maker';
import { ObjectId } from 'mongodb';
export const config = {
uri: 'mongodb://127.0.0.1:27017',
db: 'crystalTest',
collection: 'posts',
numberThreads: 'max',
numberDocuments: 1_000_000,
batchSize: 10_000,
timeStepMs: 20
};
export async function generatingData({
createdAt,
updatedAt
}) {
const user = superMaker.take.value({
key: 'users'
});
const {
title,
text,
hashtagsFromFullText
} = superMaker.lorem.fullText.generate({
titleOptions: {
sentenceMin: 0,
sentenceMax: 1,
wordMin: 4,
wordMax: 7,
hashtagMin: 0,
hashtagMax: 1
},
textOptions: {
sentenceMin: 1,
sentenceMax: 12,
wordMin: 4,
wordMax: 10,
hashtagMin: 0,
hashtagMax: 2
}
});
return {
title,
text,
hashtags: hashtagsFromFullText,
views: superMaker.randomNumber({
min: 120,
max: 3125
}),
mainImage: superMaker.take.value({
key: 'images.avatar'
}),
liked: superMaker.take.values({
key: 'users',
min: 3,
max: 25
}),
user: new ObjectId(user),
createdAt,
updatedAt
};
}Available methods
lorem: {
words,
sentences,
fullText
},words
Takes words from the storage and outputs them in random order, uses — Fisher-Yates shuffle.
sentences
Takes words from the store and turns them into sentences with or without hashtags and outputs them randomly, uses Fisher-Yates shuffle. You can specify different output variations.
fullText
Extracts words from the storage, converts them into sentences with or without hashtags, and outputs them randomly using the Fisher-Yates shuffle. You can split a sentence into parts: title, text, hashtagsFromFullText and output each part in a separate document field, as well as specify different output variations.
take: {
value,
values
},value
Returns a single value from storage, by key.
values
Outputs an array of values from storage by key, with various variations and output settings.
randomNumber,
randomDate,
randomBoolean,
randomCrypto,
randomEmailCryptorandomNumber
Outputs a random number in a configurable range.
randomDate
Displays a random date within a configurable range. Time format - 24 hour.
randomBoolean
Outputs a random boolean within a configurable percentage range.
randomCrypto
Outputs generated cryptographically strong pseudo-random data with the given length superMaker.randomCrypto(16). Uses - randomBytes().
randomEmailCrypto
Outputs generated cryptographically strong pseudo-random data with a given length superMaker.randomEmailCrypto(5) and frames it in '[email protected]'. Uses - randomBytes().
Simulation of CRYSTAL v2.0 operation using synthetic data generated with turboMaker and superMaker:
