@jsonjoy.com/json-random
Version:
Random JSON generation, structured JSON by schema generation, no dependencies.
1,176 lines • 42.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.genSocialPost = exports.genBankAccount = exports.genTransaction = exports.genOrder = exports.genProduct = exports.genAddress = exports.genUserBasic = exports.genUser = exports.allExamples = exports.loadTestUser = exports.mixedTypes = exports.performanceTest = exports.largeNumbers = exports.unicodeText = exports.emptyStructures = exports.grade = exports.course = exports.student = exports.medicalRecord = exports.patient = exports.iotDevice = exports.sensorReading = exports.socialProfile = exports.socialPost = exports.bankAccount = exports.transaction = exports.location = exports.address = exports.coordinates = exports.metricData = exports.logEntry = exports.userRole = exports.userToken = exports.order = exports.product = exports.comment = exports.tree = exports.translations = exports.permissions = exports.configMap = exports.serviceConfig = exports.apiResponseDetailed = exports.apiResponse = exports.userBasic = exports.userProfile = exports.tokenUsername = exports.tokenUrl = exports.tokenProductCode = exports.tokenPhone = exports.tokenEmail = void 0;
exports.genRandomExample = exports.genMetricData = exports.genLogEntry = exports.genIotDevice = exports.genSensorReading = exports.genCourse = exports.genStudent = exports.genMedicalRecord = exports.genPatient = exports.genServiceConfig = exports.genApiResponseDetailed = exports.genApiResponse = exports.genLocation = exports.genSocialProfile = void 0;
const TemplateJson_1 = require("./structured/TemplateJson");
// ============================================================================
// String Pattern Templates (from README examples)
// ============================================================================
exports.tokenEmail = [
'list',
['repeat', 3, 12, ['char', 97, 122]], // 3-12 lowercase letters
['pick', '.', '_', '-', ''], // Optional separator
['repeat', 0, 5, ['char', 97, 122]], // 0-5 more letters
'@',
['pick', 'gmail.com', 'yahoo.com', 'example.org', 'test.com', 'demo.net'],
];
exports.tokenPhone = [
'list',
'+1-',
['char', 50, 57, 3], // Area code (2-9)
'-',
['char', 48, 57, 3], // Exchange
'-',
['char', 48, 57, 4], // Number
];
exports.tokenProductCode = [
'list',
['pick', 'PRD', 'ITM', 'SKU'],
'-',
['char', 65, 90, 2], // 2 uppercase letters
['char', 48, 57, 6], // 6 digits
];
exports.tokenUrl = [
'list',
'https://',
['repeat', 3, 15, ['char', 97, 122]], // Domain name
['pick', '.com', '.org', '.net', '.io'],
['pick', '', '/', '/api/', '/v1/'],
['repeat', 0, 10, ['char', 97, 122]], // Optional path
];
exports.tokenUsername = [
'list',
['pick', 'user', 'admin', 'guest', 'test'],
['char', 48, 57, 4], // 4 digits
];
// ============================================================================
// User Profile Templates (from README examples)
// ============================================================================
exports.userProfile = [
'obj',
[
['id', ['int', 1, 10000]],
['username', ['str', exports.tokenUsername]],
['email', ['str', exports.tokenEmail]],
['age', ['int', 18, 120]],
['isActive', 'bool'],
[
'profile',
[
'obj',
[
['bio', ['str', ['repeat', 10, 50, ['char', 32, 126]]]],
['avatar', ['str', ['list', 'https://avatar.example.com/', ['char', 48, 57, 8]]], 0.3], // 30% chance to omit
],
],
],
],
];
exports.userBasic = [
'obj',
[
['id', ['int', 1, 1000]],
[
'name',
[
'str',
[
'list',
['pick', 'John', 'Jane', 'Bob', 'Alice', 'Charlie'],
' ',
['pick', 'Doe', 'Smith', 'Johnson', 'Brown'],
],
],
],
['active', 'bool'],
],
];
// ============================================================================
// API Response Templates (from README examples)
// ============================================================================
exports.apiResponse = [
'obj',
[
['status', ['str', ['pick', 'success', 'error']]],
['timestamp', ['int', 1640000000, 1700000000]],
[
'data',
[
'arr',
0,
10,
[
'obj',
[
['id', 'int'],
['value', 'str'],
],
],
],
],
],
];
exports.apiResponseDetailed = [
'obj',
[
['success', ['lit', true]],
['timestamp', ['lit', Date.now()]],
[
'data',
[
'arr',
5,
15,
[
'obj',
[
['id', 'int'],
['status', ['str', ['pick', 'pending', 'completed', 'failed']]],
['value', ['float', 0, 1000]],
],
],
],
],
],
];
// ============================================================================
// Configuration Templates (from README examples)
// ============================================================================
exports.serviceConfig = [
'obj',
[
[
'database',
[
'obj',
[
['host', ['str', ['list', 'db-', ['char', 48, 57, 2], '.example.com']]],
['port', ['int', 3000, 6000]],
['timeout', ['int', 1000, 30000]],
['pool_size', ['int', 5, 50]],
],
],
],
[
'cache',
[
'obj',
[
['enabled', 'bool'],
['ttl', ['int', 60, 3600]],
['max_size', ['int', 100, 10000]],
],
],
],
['features', ['map', ['pick', 'feature_a', 'feature_b', 'feature_c', 'feature_d'], 'bool', 2, 5]],
],
];
exports.configMap = [
'map',
['pick', 'timeout', 'retries', 'cache_ttl', 'max_connections'],
['int', 1, 3600],
3,
5,
];
exports.permissions = [
'map',
['list', 'can_', ['pick', 'read', 'write', 'delete', 'admin']],
'bool',
2,
6,
];
exports.translations = [
'map',
['pick', 'welcome', 'goodbye', 'error', 'success', 'loading'],
['str', ['repeat', 5, 20, ['char', 32, 126]]],
3,
8,
];
// ============================================================================
// Recursive Templates (from README examples)
// ============================================================================
const tree = () => [
'obj',
[
['value', 'int'],
['left', exports.tree, 0.3], // 30% chance of left child
['right', exports.tree, 0.3], // 30% chance of right child
],
];
exports.tree = tree;
const comment = () => [
'obj',
[
['id', 'int'],
['text', 'str'],
['author', 'str'],
['replies', ['arr', 0, 3, exports.comment, [], []], 0.4], // 40% chance of replies
],
];
exports.comment = comment;
// ============================================================================
// E-commerce Templates
// ============================================================================
exports.product = [
'obj',
[
['id', ['str', ['list', 'prod_', ['char', 48, 57, 8]]]],
[
'name',
[
'str',
[
'list',
['pick', 'Premium', 'Deluxe', 'Classic', 'Modern', 'Vintage'],
' ',
['pick', 'Widget', 'Gadget', 'Tool', 'Device', 'Accessory'],
],
],
],
['price', ['float', 9.99, 999.99]],
['currency', ['str', ['pick', 'USD', 'EUR', 'GBP', 'JPY']]],
['category', ['str', ['pick', 'electronics', 'clothing', 'books', 'home', 'sports']]],
['tags', ['arr', 1, 5, ['str', ['pick', 'new', 'sale', 'featured', 'popular', 'limited']]]],
[
'inventory',
[
'obj',
[
['stock', ['int', 0, 1000]],
['warehouse', ['str', ['list', 'WH-', ['char', 65, 90, 2], ['char', 48, 57, 3]]]],
['reserved', ['int', 0, 50]],
],
],
],
['rating', ['float', 1.0, 5.0]],
['reviews', ['int', 0, 10000]],
],
];
exports.order = [
'obj',
[
['orderId', ['str', ['list', 'ORD-', ['char', 48, 57, 10]]]],
['customerId', ['str', ['list', 'CUST-', ['char', 65, 90, 3], ['char', 48, 57, 6]]]],
[
'items',
[
'arr',
1,
8,
[
'obj',
[
['productId', ['str', exports.tokenProductCode]],
['quantity', ['int', 1, 10]],
['price', ['float', 5.0, 500.0]],
],
],
],
],
['total', ['float', 10.0, 2000.0]],
['status', ['str', ['pick', 'pending', 'processing', 'shipped', 'delivered', 'cancelled']]],
['createdAt', ['int', 1640000000, 1700000000]],
[
'shippingAddress',
[
'obj',
[
[
'street',
['str', ['list', ['char', 48, 57, 3], ' ', ['pick', 'Main St', 'Oak Ave', 'Pine Rd', 'Cedar Ln']]],
],
['city', ['str', ['pick', 'New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']]],
['state', ['str', ['pick', 'NY', 'CA', 'IL', 'TX', 'AZ']]],
['zipCode', ['str', ['char', 48, 57, 5]]],
['country', ['str', ['pick', 'US', 'CA', 'MX']]],
],
],
],
],
];
// ============================================================================
// Authentication & Security Templates
// ============================================================================
exports.userToken = [
'obj',
[
['token', ['str', ['list', 'eyJ', ['repeat', 20, 40, ['char', 65, 90]]]]],
['refreshToken', ['str', ['list', 'rt_', ['repeat', 32, 64, ['char', 97, 122]]]]],
['expiresAt', ['int', Date.now(), Date.now() + 86400000]],
['scope', ['arr', 1, 4, ['str', ['pick', 'read', 'write', 'admin', 'user']]]],
],
];
exports.userRole = [
'obj',
[
['roleId', ['str', ['list', 'role_', ['char', 48, 57, 6]]]],
['name', ['str', ['pick', 'admin', 'user', 'moderator', 'guest', 'super_admin']]],
[
'permissions',
[
'arr',
2,
10,
[
'str',
[
'pick',
'users:read',
'users:write',
'users:delete',
'posts:read',
'posts:write',
'posts:delete',
'admin:read',
'admin:write',
'system:manage',
],
],
],
],
['createdBy', ['str', exports.tokenUsername]],
['isActive', 'bool'],
],
];
// ============================================================================
// Logging & Monitoring Templates
// ============================================================================
exports.logEntry = [
'obj',
[
['timestamp', ['int', Date.now() - 86400000, Date.now()]],
['level', ['str', ['pick', 'debug', 'info', 'warn', 'error', 'fatal']]],
[
'message',
[
'str',
[
'list',
['pick', 'User', 'System', 'Database', 'API', 'Cache'],
' ',
['pick', 'action', 'error', 'warning', 'success', 'failure'],
': ',
['repeat', 10, 50, ['char', 32, 126]],
],
],
],
['service', ['str', ['pick', 'web-server', 'database', 'cache', 'auth-service', 'api-gateway']]],
['userId', ['str', exports.tokenUsername], 0.7],
['requestId', ['str', ['list', 'req_', ['char', 97, 122, 8], ['char', 48, 57, 4]]]],
[
'metadata',
[
'obj',
[
[
'ip',
[
'str',
[
'list',
['char', 49, 57],
['char', 48, 57, 2],
'.',
['char', 48, 57, 3],
'.',
['char', 48, 57, 3],
'.',
['char', 48, 57, 3],
],
],
],
[
'userAgent',
[
'str',
[
'pick',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)',
'Mozilla/5.0 (X11; Linux x86_64)',
],
],
],
['duration', ['int', 1, 5000]],
],
],
0.5,
],
],
];
exports.metricData = [
'obj',
[
['name', ['str', ['pick', 'cpu_usage', 'memory_usage', 'disk_io', 'network_latency', 'request_count']]],
['value', ['float', 0, 100]],
['unit', ['str', ['pick', 'percent', 'bytes', 'ms', 'count', 'rate']]],
['timestamp', ['int', Date.now() - 3600000, Date.now()]],
[
'tags',
[
'obj',
[
['environment', ['str', ['pick', 'production', 'staging', 'development']]],
['service', ['str', ['pick', 'web', 'api', 'database', 'cache']]],
['region', ['str', ['pick', 'us-east-1', 'us-west-2', 'eu-west-1']]],
],
],
],
],
];
// ============================================================================
// Geographic & Location Templates
// ============================================================================
exports.coordinates = [
'arr',
0,
0,
'nil',
[
['float', -180, 180],
['float', -90, 90],
], // head: [longitude, latitude]
[['lit', 'WGS84']], // tail: coordinate system
];
exports.address = [
'obj',
[
[
'street',
['str', ['list', ['char', 48, 57, 3], ' ', ['pick', 'Main St', 'Oak Ave', 'Pine Rd', 'Elm St', 'Maple Dr']]],
],
[
'city',
['str', ['pick', 'New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio']],
],
['state', ['str', ['pick', 'NY', 'CA', 'IL', 'TX', 'AZ', 'PA']]],
['country', ['str', ['pick', 'United States', 'Canada', 'Mexico', 'United Kingdom', 'Germany', 'France']]],
['postalCode', ['str', ['char', 48, 57, 5]]],
['coordinates', exports.coordinates, 0.3],
],
];
exports.location = [
'obj',
[
[
'name',
[
'str',
[
'list',
['pick', 'Coffee Shop', 'Restaurant', 'Store', 'Office', 'Park'],
' ',
['pick', 'Downtown', 'Central', 'North', 'South', 'Main'],
],
],
],
['address', exports.address],
['phone', ['str', exports.tokenPhone]],
[
'hours',
[
'obj',
[
['monday', ['str', ['pick', '9:00-17:00', '8:00-18:00', 'closed']]],
['tuesday', ['str', ['pick', '9:00-17:00', '8:00-18:00', 'closed']]],
['wednesday', ['str', ['pick', '9:00-17:00', '8:00-18:00', 'closed']]],
['thursday', ['str', ['pick', '9:00-17:00', '8:00-18:00', 'closed']]],
['friday', ['str', ['pick', '9:00-17:00', '8:00-18:00', 'closed']]],
['saturday', ['str', ['pick', '10:00-16:00', '9:00-15:00', 'closed']]],
['sunday', ['str', ['pick', '12:00-16:00', 'closed']]],
],
],
0.4,
],
],
];
// ============================================================================
// Financial & Transaction Templates
// ============================================================================
exports.transaction = [
'obj',
[
['id', ['str', ['list', 'txn_', ['char', 97, 122, 8], ['char', 48, 57, 8]]]],
['amount', ['float', 0.01, 10000.0]],
['currency', ['str', ['pick', 'USD', 'EUR', 'GBP', 'JPY', 'CAD', 'AUD']]],
['type', ['str', ['pick', 'debit', 'credit', 'transfer', 'payment', 'refund']]],
['status', ['str', ['pick', 'pending', 'completed', 'failed', 'cancelled']]],
['fromAccount', ['str', ['list', 'acc_', ['char', 48, 57, 12]]]],
['toAccount', ['str', ['list', 'acc_', ['char', 48, 57, 12]]]],
[
'description',
[
'str',
[
'list',
['pick', 'Payment to', 'Transfer from', 'Purchase at', 'Refund for'],
' ',
['repeat', 5, 20, ['char', 32, 126]],
],
],
],
['timestamp', ['int', Date.now() - 86400000, Date.now()]],
['fees', ['float', 0, 50.0], 0.3],
],
];
exports.bankAccount = [
'obj',
[
['accountNumber', ['str', ['char', 48, 57, 12]]],
['routingNumber', ['str', ['char', 48, 57, 9]]],
['accountType', ['str', ['pick', 'checking', 'savings', 'business', 'credit']]],
['balance', ['float', 0, 100000.0]],
['currency', ['str', ['pick', 'USD', 'EUR', 'GBP']]],
['isActive', 'bool'],
['openedDate', ['int', 946684800, Date.now()]], // From year 2000
['lastActivity', ['int', Date.now() - 2592000, Date.now()]], // Last 30 days
],
];
// ============================================================================
// Social Media Templates
// ============================================================================
exports.socialPost = [
'obj',
[
['id', ['str', ['list', 'post_', ['char', 97, 122, 8]]]],
['content', ['str', ['repeat', 10, 280, ['char', 32, 126]]]],
[
'author',
[
'obj',
[
['username', ['str', exports.tokenUsername]],
[
'displayName',
[
'str',
[
'list',
['pick', 'John', 'Jane', 'Alex', 'Sam', 'Chris'],
' ',
['pick', 'Smith', 'Doe', 'Johnson', 'Brown'],
],
],
],
['verified', 'bool'],
],
],
],
['likes', ['int', 0, 10000]],
['shares', ['int', 0, 1000]],
['comments', ['int', 0, 500]],
['hashtags', ['arr', 0, 5, ['str', ['list', '#', ['repeat', 3, 15, ['char', 97, 122]]]]]],
['mentions', ['arr', 0, 3, ['str', ['list', '@', exports.tokenUsername]]]],
['timestamp', ['int', Date.now() - 604800000, Date.now()]], // Last week
[
'media',
[
'arr',
0,
4,
[
'obj',
[
['type', ['str', ['pick', 'image', 'video', 'gif']]],
['url', ['str', exports.tokenUrl]],
['alt', ['str', ['repeat', 5, 50, ['char', 32, 126]]], 0.7],
],
],
],
0.4,
],
],
];
exports.socialProfile = [
'obj',
[
['username', ['str', exports.tokenUsername]],
['displayName', ['str', ['repeat', 3, 30, ['char', 32, 126]]]],
['bio', ['str', ['repeat', 10, 160, ['char', 32, 126]]], 0.8],
['followers', ['int', 0, 1000000]],
['following', ['int', 0, 10000]],
['posts', ['int', 0, 50000]],
['verified', 'bool'],
['joinDate', ['int', 946684800, Date.now()]],
['location', ['str', ['pick', 'New York', 'London', 'Tokyo', 'Berlin', 'Sydney']], 0.6],
['website', ['str', exports.tokenUrl], 0.3],
],
];
// ============================================================================
// IoT & Sensor Data Templates
// ============================================================================
exports.sensorReading = [
'obj',
[
['sensorId', ['str', ['list', 'sensor_', ['char', 65, 90, 2], ['char', 48, 57, 6]]]],
['deviceType', ['str', ['pick', 'temperature', 'humidity', 'pressure', 'motion', 'light', 'sound']]],
['value', ['float', -50, 150]],
['unit', ['str', ['pick', 'celsius', 'fahrenheit', 'percent', 'pascal', 'lux', 'decibel']]],
['timestamp', ['int', Date.now() - 3600000, Date.now()]],
[
'location',
[
'obj',
[
['room', ['str', ['pick', 'living_room', 'bedroom', 'kitchen', 'bathroom', 'office']]],
['floor', ['int', 1, 10]],
['building', ['str', ['list', 'Building ', ['char', 65, 90]]]],
],
],
],
['status', ['str', ['pick', 'online', 'offline', 'maintenance', 'error']]],
['battery', ['int', 0, 100], 0.6],
],
];
exports.iotDevice = [
'obj',
[
['deviceId', ['str', ['list', 'iot_', ['char', 97, 122, 4], ['char', 48, 57, 8]]]],
[
'name',
[
'str',
[
'list',
['pick', 'Smart', 'Connected', 'Wireless', 'Digital'],
' ',
['pick', 'Thermostat', 'Camera', 'Lock', 'Light', 'Sensor'],
],
],
],
['manufacturer', ['str', ['pick', 'SmartHome Inc', 'IoT Solutions', 'TechDevice Co', 'ConnectCorp']]],
['model', ['str', ['list', ['char', 65, 90, 2], '-', ['char', 48, 57, 4]]]],
['firmwareVersion', ['str', ['list', ['char', 49, 57], '.', ['char', 48, 57], '.', ['char', 48, 57]]]],
['ipAddress', ['str', ['list', '192.168.', ['char', 48, 57, 1], '.', ['char', 48, 57, 3]]]],
[
'macAddress',
[
'str',
[
'list',
['char', 48, 57, 2],
':',
['char', 48, 57, 2],
':',
['char', 48, 57, 2],
':',
['char', 48, 57, 2],
':',
['char', 48, 57, 2],
':',
['char', 48, 57, 2],
],
],
],
['lastSeen', ['int', Date.now() - 86400000, Date.now()]],
['sensors', ['arr', 1, 4, exports.sensorReading]],
],
];
// ============================================================================
// Medical Records Templates
// ============================================================================
exports.patient = [
'obj',
[
['patientId', ['str', ['list', 'PAT-', ['char', 48, 57, 8]]]],
['firstName', ['str', ['pick', 'John', 'Jane', 'Michael', 'Sarah', 'David', 'Emily', 'James', 'Lisa']]],
['lastName', ['str', ['pick', 'Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis']]],
['dateOfBirth', ['int', 157766400, 1009843200]], // 1975-2002
['gender', ['str', ['pick', 'male', 'female', 'non-binary', 'prefer-not-to-say']]],
['bloodType', ['str', ['pick', 'A+', 'A-', 'B+', 'B-', 'AB+', 'AB-', 'O+', 'O-']]],
['allergies', ['arr', 0, 5, ['str', ['pick', 'peanuts', 'shellfish', 'dairy', 'gluten', 'penicillin', 'latex']]]],
[
'emergencyContact',
[
'obj',
[
[
'name',
[
'str',
[
'list',
['pick', 'John', 'Jane', 'Michael', 'Sarah'],
' ',
['pick', 'Smith', 'Johnson', 'Williams', 'Brown'],
],
],
],
['relationship', ['str', ['pick', 'spouse', 'parent', 'sibling', 'child', 'friend']]],
['phone', ['str', exports.tokenPhone]],
],
],
],
[
'insurance',
[
'obj',
[
['provider', ['str', ['pick', 'HealthCare Plus', 'MedInsure', 'WellnessCare', 'LifeHealth']]],
['policyNumber', ['str', ['list', ['char', 65, 90, 3], ['char', 48, 57, 9]]]],
['groupNumber', ['str', ['char', 48, 57, 6]]],
],
],
0.9,
],
],
];
exports.medicalRecord = [
'obj',
[
['recordId', ['str', ['list', 'MED-', ['char', 48, 57, 10]]]],
['patientId', ['str', ['list', 'PAT-', ['char', 48, 57, 8]]]],
['visitDate', ['int', Date.now() - 31536000, Date.now()]], // Last year
[
'provider',
[
'obj',
[
[
'name',
[
'str',
[
'list',
'Dr. ',
['pick', 'John', 'Jane', 'Michael', 'Sarah'],
' ',
['pick', 'Smith', 'Johnson', 'Williams'],
],
],
],
['specialty', ['str', ['pick', 'cardiology', 'neurology', 'pediatrics', 'orthopedics', 'dermatology']]],
['license', ['str', ['list', ['char', 65, 90, 2], ['char', 48, 57, 8]]]],
],
],
],
['diagnosis', ['arr', 1, 3, ['str', ['pick', 'hypertension', 'diabetes', 'asthma', 'arthritis', 'migraine']]]],
[
'medications',
[
'arr',
0,
5,
[
'obj',
[
['name', ['str', ['pick', 'Lisinopril', 'Metformin', 'Albuterol', 'Ibuprofen', 'Atorvastatin']]],
['dosage', ['str', ['list', ['char', 48, 57, 2], 'mg']]],
['frequency', ['str', ['pick', 'once daily', 'twice daily', 'three times daily', 'as needed']]],
],
],
],
],
[
'vitals',
[
'obj',
[
['bloodPressure', ['str', ['list', ['char', 49, 57], ['char', 48, 57, 2], '/', ['char', 48, 57, 2]]]],
['heartRate', ['int', 60, 100]],
['temperature', ['float', 96.0, 104.0]],
['weight', ['float', 100, 300]],
],
],
0.8,
],
],
];
// ============================================================================
// Educational Data Templates
// ============================================================================
exports.student = [
'obj',
[
['studentId', ['str', ['list', 'STU-', ['char', 48, 57, 7]]]],
['firstName', ['str', ['pick', 'Alex', 'Sam', 'Jordan', 'Casey', 'Taylor', 'Morgan', 'Riley', 'Avery']]],
['lastName', ['str', ['pick', 'Anderson', 'Brown', 'Clark', 'Davis', 'Evans', 'Foster', 'Green', 'Hill']]],
['email', ['str', exports.tokenEmail]],
['grade', ['str', ['pick', '9th', '10th', '11th', '12th', 'Freshman', 'Sophomore', 'Junior', 'Senior']]],
[
'major',
['str', ['pick', 'Computer Science', 'Biology', 'Mathematics', 'English', 'History', 'Physics', 'Chemistry']],
0.7,
],
['gpa', ['float', 2.0, 4.0]],
['enrollmentDate', ['int', 1567296000, Date.now()]], // From 2019
],
];
exports.course = [
'obj',
[
['courseId', ['str', ['list', ['char', 65, 90, 3], '-', ['char', 48, 57, 3]]]],
[
'title',
[
'str',
[
'list',
['pick', 'Introduction to', 'Advanced', 'Fundamentals of', 'Applied'],
' ',
['pick', 'Computer Science', 'Mathematics', 'Biology', 'Chemistry', 'Physics', 'History', 'Literature'],
],
],
],
['credits', ['int', 1, 6]],
[
'instructor',
[
'obj',
[
[
'name',
[
'str',
[
'list',
'Prof. ',
['pick', 'John', 'Jane', 'Michael', 'Sarah'],
' ',
['pick', 'Smith', 'Johnson', 'Williams'],
],
],
],
['email', ['str', exports.tokenEmail]],
['office', ['str', ['list', ['char', 65, 90], '-', ['char', 48, 57, 3]]]],
],
],
],
[
'schedule',
[
'obj',
[
['days', ['arr', 1, 3, ['str', ['pick', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']]]],
[
'time',
[
'str',
[
'list',
['char', 48, 57, 2],
':',
['pick', '00', '30'],
'-',
['char', 48, 57, 2],
':',
['pick', '00', '30'],
],
],
],
['room', ['str', ['list', ['char', 65, 90], '-', ['char', 48, 57, 3]]]],
],
],
],
['capacity', ['int', 15, 200]],
['enrolled', ['int', 5, 180]],
],
];
exports.grade = [
'obj',
[
['studentId', ['str', ['list', 'STU-', ['char', 48, 57, 7]]]],
['courseId', ['str', ['list', ['char', 65, 90, 3], '-', ['char', 48, 57, 3]]]],
['semester', ['str', ['pick', 'Fall 2023', 'Spring 2024', 'Summer 2024', 'Fall 2024']]],
[
'assignments',
[
'arr',
3,
8,
[
'obj',
[
[
'name',
['str', ['list', ['pick', 'Assignment', 'Quiz', 'Exam', 'Project', 'Lab'], ' ', ['char', 48, 57, 1]]],
],
['score', ['float', 0, 100]],
['maxScore', ['lit', 100]],
['dueDate', ['int', Date.now() - 7776000, Date.now() + 7776000]], // +/- 90 days
['submitted', 'bool'],
],
],
],
],
['finalGrade', ['str', ['pick', 'A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'F']]],
['gpa', ['float', 0.0, 4.0]],
],
];
// ============================================================================
// Edge Cases & Special Templates
// ============================================================================
exports.emptyStructures = [
'obj',
[
['emptyObject', ['obj', []]],
['emptyArray', ['arr', 0, 0]],
['emptyString', ['lit', '']],
['nullValue', 'nil'],
['zeroNumber', ['lit', 0]],
['falseBool', ['lit', false]],
],
];
exports.unicodeText = [
'obj',
[
['ascii', ['str', ['repeat', 5, 15, ['char', 32, 126]]]],
['latin', ['str', ['repeat', 5, 15, ['char', 160, 255]]]],
['emoji', ['str', ['repeat', 1, 5, ['char', 0x1f600, 0x1f64f]]]],
['chinese', ['str', ['repeat', 3, 8, ['char', 0x4e00, 0x9fff]]]],
['arabic', ['str', ['repeat', 3, 8, ['char', 0x0600, 0x06ff]]]],
[
'mixed',
[
'str',
[
'list',
['repeat', 2, 5, ['char', 65, 90]],
' ',
['char', 0x1f600, 0x1f64f],
' ',
['repeat', 2, 5, ['char', 0x4e00, 0x9fff]],
],
],
],
],
];
exports.largeNumbers = [
'obj',
[
['maxSafeInteger', ['lit', Number.MAX_SAFE_INTEGER]],
['minSafeInteger', ['lit', Number.MIN_SAFE_INTEGER]],
['largeFloat', ['float', 1e10, 1e15]],
['smallFloat', ['float', 1e-10, 1e-5]],
['preciseDecimal', ['float', 0.000001, 0.999999]],
['scientificNotation', ['lit', 1.23e-45]],
],
];
exports.performanceTest = [
'arr',
100,
1000,
[
'obj',
[
['id', ['int', 1, 1000000]],
['data', ['str', ['repeat', 50, 200, ['char', 32, 126]]]],
['nested', ['obj', [['level1', ['obj', [['level2', ['obj', [['level3', ['arr', 5, 10, 'int']]]]]]]]]]],
],
],
];
exports.mixedTypes = [
'or',
'str',
'int',
'float',
'bool',
'nil',
['arr', 1, 3, 'str'],
[
'obj',
[
['key1', 'str'],
['key2', 'int'],
],
],
];
// ============================================================================
// Load Testing Templates (from README examples)
// ============================================================================
exports.loadTestUser = [
'obj',
[
['id', ['int', 1, 10000]],
[
'name',
[
'str',
[
'list',
['pick', 'John', 'Jane', 'Bob', 'Alice', 'Charlie'],
' ',
['pick', 'Doe', 'Smith', 'Johnson', 'Brown'],
],
],
],
['email', ['str', ['list', ['repeat', 3, 10, ['char', 97, 122]], '@test.com']]],
['age', ['int', 18, 65]],
['active', 'bool'],
],
];
// ============================================================================
// Combined Template using 'or' to randomly pick from all examples
// ============================================================================
exports.allExamples = [
'or',
exports.userProfile,
exports.userBasic,
exports.apiResponse,
exports.apiResponseDetailed,
exports.serviceConfig,
exports.product,
exports.order,
exports.userToken,
exports.userRole,
exports.logEntry,
exports.metricData,
exports.address,
exports.location,
exports.transaction,
exports.bankAccount,
exports.socialPost,
exports.socialProfile,
exports.sensorReading,
exports.iotDevice,
exports.patient,
exports.medicalRecord,
exports.student,
exports.course,
exports.grade,
exports.emptyStructures,
exports.unicodeText,
exports.largeNumbers,
exports.performanceTest,
exports.mixedTypes,
exports.loadTestUser,
exports.tree,
exports.comment,
];
// ============================================================================
// Helper Methods for Easy Random JSON Generation
// ============================================================================
/**
* Generate a random user profile with comprehensive details.
* @returns Random user profile object
*/
const genUser = () => TemplateJson_1.TemplateJson.gen(exports.userProfile);
exports.genUser = genUser;
/**
* Generate a basic user object with essential information.
* @returns Random basic user object
*/
const genUserBasic = () => TemplateJson_1.TemplateJson.gen(exports.userBasic);
exports.genUserBasic = genUserBasic;
/**
* Generate a random address object with street, city, state, etc.
* @returns Random address object
*/
const genAddress = () => TemplateJson_1.TemplateJson.gen(exports.address);
exports.genAddress = genAddress;
/**
* Generate a random product with details like name, price, category.
* @returns Random product object
*/
const genProduct = () => TemplateJson_1.TemplateJson.gen(exports.product);
exports.genProduct = genProduct;
/**
* Generate a random order with items, customer info, and totals.
* @returns Random order object
*/
const genOrder = () => TemplateJson_1.TemplateJson.gen(exports.order);
exports.genOrder = genOrder;
/**
* Generate a random financial transaction.
* @returns Random transaction object
*/
const genTransaction = () => TemplateJson_1.TemplateJson.gen(exports.transaction);
exports.genTransaction = genTransaction;
/**
* Generate a random bank account information.
* @returns Random bank account object
*/
const genBankAccount = () => TemplateJson_1.TemplateJson.gen(exports.bankAccount);
exports.genBankAccount = genBankAccount;
/**
* Generate a random social media post.
* @returns Random social post object
*/
const genSocialPost = () => TemplateJson_1.TemplateJson.gen(exports.socialPost);
exports.genSocialPost = genSocialPost;
/**
* Generate a random social media profile.
* @returns Random social profile object
*/
const genSocialProfile = () => TemplateJson_1.TemplateJson.gen(exports.socialProfile);
exports.genSocialProfile = genSocialProfile;
/**
* Generate a random location with coordinates and details.
* @returns Random location object
*/
const genLocation = () => TemplateJson_1.TemplateJson.gen(exports.location);
exports.genLocation = genLocation;
/**
* Generate a random API response with data array.
* @returns Random API response object
*/
const genApiResponse = () => TemplateJson_1.TemplateJson.gen(exports.apiResponse);
exports.genApiResponse = genApiResponse;
/**
* Generate a detailed API response with comprehensive metadata.
* @returns Random detailed API response object
*/
const genApiResponseDetailed = () => TemplateJson_1.TemplateJson.gen(exports.apiResponseDetailed);
exports.genApiResponseDetailed = genApiResponseDetailed;
/**
* Generate a random service configuration.
* @returns Random service config object
*/
const genServiceConfig = () => TemplateJson_1.TemplateJson.gen(exports.serviceConfig);
exports.genServiceConfig = genServiceConfig;
/**
* Generate a random medical patient record.
* @returns Random patient object
*/
const genPatient = () => TemplateJson_1.TemplateJson.gen(exports.patient);
exports.genPatient = genPatient;
/**
* Generate a comprehensive medical record.
* @returns Random medical record object
*/
const genMedicalRecord = () => TemplateJson_1.TemplateJson.gen(exports.medicalRecord);
exports.genMedicalRecord = genMedicalRecord;
/**
* Generate a random student profile.
* @returns Random student object
*/
const genStudent = () => TemplateJson_1.TemplateJson.gen(exports.student);
exports.genStudent = genStudent;
/**
* Generate a random course information.
* @returns Random course object
*/
const genCourse = () => TemplateJson_1.TemplateJson.gen(exports.course);
exports.genCourse = genCourse;
/**
* Generate a random IoT sensor reading.
* @returns Random sensor reading object
*/
const genSensorReading = () => TemplateJson_1.TemplateJson.gen(exports.sensorReading);
exports.genSensorReading = genSensorReading;
/**
* Generate a random IoT device profile.
* @returns Random IoT device object
*/
const genIotDevice = () => TemplateJson_1.TemplateJson.gen(exports.iotDevice);
exports.genIotDevice = genIotDevice;
/**
* Generate a random log entry for monitoring.
* @returns Random log entry object
*/
const genLogEntry = () => TemplateJson_1.TemplateJson.gen(exports.logEntry);
exports.genLogEntry = genLogEntry;
/**
* Generate random metric data for monitoring.
* @returns Random metric data object
*/
const genMetricData = () => TemplateJson_1.TemplateJson.gen(exports.metricData);
exports.genMetricData = genMetricData;
/**
* Generate a random example from any of the available templates.
* Uses the 'or' pattern to randomly select from all templates.
* @returns Random example data from any template
*/
const genRandomExample = () => TemplateJson_1.TemplateJson.gen(exports.allExamples);
exports.genRandomExample = genRandomExample;
//# sourceMappingURL=examples.js.map