{"id":30143033,"url":"https://github.com/jsonjoy-com/json-random","last_synced_at":"2026-01-20T16:29:44.999Z","repository":{"id":307972241,"uuid":"1031185766","full_name":"jsonjoy-com/json-random","owner":"jsonjoy-com","description":"Completely random JSON generator and structured schema-based JSON generator","archived":false,"fork":false,"pushed_at":"2025-08-03T14:24:41.000Z","size":344,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-20T03:59:39.671Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsonjoy-com.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"streamich"}},"created_at":"2025-08-03T07:41:08.000Z","updated_at":"2025-08-03T16:25:53.000Z","dependencies_parsed_at":"2025-08-11T06:27:43.639Z","dependency_job_id":null,"html_url":"https://github.com/jsonjoy-com/json-random","commit_stats":null,"previous_names":["jsonjoy-com/json-random"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/jsonjoy-com/json-random","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonjoy-com%2Fjson-random","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonjoy-com%2Fjson-random/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonjoy-com%2Fjson-random/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonjoy-com%2Fjson-random/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsonjoy-com","download_url":"https://codeload.github.com/jsonjoy-com/json-random/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonjoy-com%2Fjson-random/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28607158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T16:10:39.856Z","status":"ssl_error","status_checked_at":"2026-01-20T16:10:39.493Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-11T06:27:35.049Z","updated_at":"2026-01-20T16:29:44.992Z","avatar_url":"https://github.com/jsonjoy-com.png","language":"TypeScript","funding_links":["https://github.com/sponsors/streamich"],"categories":[],"sub_categories":[],"readme":"# `json-random`\n\nA fast, flexible random JSON generation library with zero dependencies. Generate random JSON data for testing, development, and prototyping with powerful template-based schemas or simple randomization.\n\n## Features\n\n- **Fast \u0026 Lightweight**: Zero dependencies, optimized for performance\n- **Template-Based Generation**: Create structured JSON following schemas\n- **Flexible Randomization**: Control probabilities, types, and structure\n- **Deterministic Mode**: Reproducible random generation with seeds\n- **String Token System**: Powerful pattern-based string generation\n- **TypeScript Support**: Full type definitions included\n\n## Installation\n\n```bash\nnpm install @jsonjoy.com/json-random\n```\n\n## Quick Start\n\n```typescript\nimport { RandomJson, TemplateJson, randomString, deterministic } from '@jsonjoy.com/json-random';\n\n// Generate random JSON\nconst randomData = RandomJson.generate();\n\n// Generate structured JSON from template\nconst userData = TemplateJson.gen(['obj', [\n  ['id', ['int', 1, 1000]],\n  ['name', ['str', ['list', ['pick', 'John', 'Jane', 'Bob'], ' ', ['pick', 'Doe', 'Smith']]]],\n  ['active', 'bool']\n]]);\n\n// Generate random strings with patterns\nconst email = randomString(['list', \n  ['pick', 'user', 'admin', 'test'], \n  '@', \n  ['pick', 'example.com', 'test.org']\n]);\n```\n\n## API Reference\n\n### RandomJson\n\nThe `RandomJson` class provides methods for generating random JSON data with configurable options.\n\n#### `RandomJson.generate(options?: RandomJsonOptions): unknown`\n\nGenerates a random JSON object with the specified options.\n\n```typescript\ninterface RandomJsonOptions {\n  rootNode?: 'object' | 'array' | 'string';\n  nodeCount?: number;\n  odds?: NodeOdds;\n  strings?: Token;\n}\n\ninterface NodeOdds {\n  null: number;\n  boolean: number;\n  number: number;\n  string: number;\n  binary: number;\n  array: number;\n  object: number;\n}\n```\n\n**Examples:**\n\n```typescript\n// Basic random JSON (default: object with ~32 nodes)\nconst basic = RandomJson.generate();\n\n// Smaller JSON with 5 nodes\nconst small = RandomJson.generate({ nodeCount: 5 });\n\n// Force root to be an array\nconst arrayRoot = RandomJson.generate({ \n  rootNode: 'array',\n  nodeCount: 3 \n});\n\n// Customize node type probabilities\nconst stringHeavy = RandomJson.generate({\n  nodeCount: 10,\n  odds: {\n    null: 1,\n    boolean: 1,\n    number: 2,\n    string: 20,    // Much higher probability for strings\n    binary: 0,\n    array: 2,\n    object: 5\n  }\n});\n\n// Use custom string patterns\nconst customStrings = RandomJson.generate({\n  nodeCount: 5,\n  strings: ['pick', 'alpha', 'beta', 'gamma', 'delta']\n});\n```\n\n#### Static Generation Methods\n\nGenerate specific JSON types directly:\n\n```typescript\n// Generate random string (default length: 1-16 chars)\nconst str = RandomJson.genString();\nconst longStr = RandomJson.genString(50);\n\n// Generate random number\nconst num = RandomJson.genNumber();\n\n// Generate random boolean\nconst bool = RandomJson.genBoolean();\n\n// Generate random array\nconst arr = RandomJson.genArray();\nconst customArr = RandomJson.genArray({\n  nodeCount: 3,\n  odds: { string: 10, number: 5, boolean: 1, null: 0, array: 0, object: 0, binary: 0 }\n});\n\n// Generate random object\nconst obj = RandomJson.genObject();\nconst customObj = RandomJson.genObject({\n  nodeCount: 4,\n  odds: { string: 8, number: 8, boolean: 2, null: 1, array: 1, object: 1, binary: 0 }\n});\n\n// Generate random binary data\nconst binary = RandomJson.genBinary();\nconst largeBinary = RandomJson.genBinary(100);\n```\n\n### TemplateJson\n\nThe `TemplateJson` class generates JSON data following structured templates, perfect for creating realistic test data.\n\n#### `TemplateJson.gen(template?: Template, opts?: TemplateJsonOpts): unknown`\n\nGenerates JSON following the specified template.\n\n```typescript\ninterface TemplateJsonOpts {\n  maxNodes?: number; // Soft limit on total nodes generated (default: 100)\n}\n```\n\n#### Template Types\n\nTemplates define the structure and type of generated data:\n\n##### Basic Types\n\n```typescript\n// Shorthand templates\nTemplateJson.gen('str');    // Random string\nTemplateJson.gen('int');    // Random integer\nTemplateJson.gen('int64');  // Random 64-bit integer (bigint)\nTemplateJson.gen('float');  // Random float\nTemplateJson.gen('num');    // Random number (int or float)\nTemplateJson.gen('bool');   // Random boolean\nTemplateJson.gen('bin');    // Random binary data (Uint8Array)\nTemplateJson.gen('nil');    // null value\n\n// Type-specific templates\nTemplateJson.gen(['str', tokenPattern]);           // String with pattern\nTemplateJson.gen(['int', min, max]);              // Integer in range\nTemplateJson.gen(['int64', min, max]);            // 64-bit integer in range (bigint)\nTemplateJson.gen(['float', min, max]);            // Float in range\nTemplateJson.gen(['bool', fixedValue]);           // Fixed or random boolean\nTemplateJson.gen(['bin', min, max, omin, omax]);  // Binary with length and octet range\nTemplateJson.gen(['lit', anyValue]);              // Literal value (cloned)\n```\n\n**Examples:**\n\n```typescript\n// Strings with patterns\nconst greeting = TemplateJson.gen(['str', ['list', \n  ['pick', 'Hello', 'Hi', 'Hey'], \n  ' ', \n  ['pick', 'World', 'There']\n]]);\n\n// Numbers in ranges\nconst age = TemplateJson.gen(['int', 18, 100]);\nconst price = TemplateJson.gen(['float', 0.01, 999.99]);\nconst score = TemplateJson.gen(['num', 0, 100]);\n\n// 64-bit integers (bigint)\nconst largeId = TemplateJson.gen(['int64', BigInt('1000000000000'), BigInt('9999999999999')]);\nconst timestamp = TemplateJson.gen(['int64', BigInt('1640000000000'), BigInt('1700000000000')]);\n\n// Binary data (Uint8Array)\nconst hash = TemplateJson.gen(['bin', 32, 32]); // 32-byte hash\nconst key = TemplateJson.gen(['bin', 16, 16, 0, 255]); // 16-byte key with full octet range\nconst randomBytes = TemplateJson.gen(['bin', 1, 10]); // 1-10 random bytes\n\n// Fixed values\nconst isActive = TemplateJson.gen(['bool', true]);\nconst userId = TemplateJson.gen(['lit', 'user_12345']);\n```\n\n##### 64-bit Integer Templates\n\nGenerate large integers using JavaScript's bigint type:\n\n```typescript\n// Basic 64-bit integer\nconst id = TemplateJson.gen('int64');                // Random bigint in safe range\n\n// 64-bit integer with range\nconst timestamp = TemplateJson.gen(['int64', \n  BigInt('1640000000000'),  // Min value\n  BigInt('1700000000000')   // Max value\n]);\n\n// Large database IDs\nconst dbId = TemplateJson.gen(['int64', \n  BigInt('1000000000000000000'), \n  BigInt('9999999999999999999')\n]);\n\n// Fixed bigint value\nconst constant = TemplateJson.gen(['int64', BigInt('42'), BigInt('42')]);\n```\n\n##### Binary Data Templates\n\nGenerate binary data as Uint8Array:\n\n```typescript\n// Basic binary data (0-5 bytes)\nconst data = TemplateJson.gen('bin');\n\n// Binary with specific length range\nconst hash = TemplateJson.gen(['bin', 32, 32]);     // Exactly 32 bytes\nconst key = TemplateJson.gen(['bin', 16, 64]);      // 16-64 bytes\n\n// Binary with octet value constraints\nconst restrictedData = TemplateJson.gen(['bin', \n  8,    // Min length: 8 bytes\n  16,   // Max length: 16 bytes  \n  32,   // Min octet value: 32\n  126   // Max octet value: 126 (printable ASCII range)\n]);\n\n// Cryptographic examples\nconst aesKey = TemplateJson.gen(['bin', 32, 32]);           // 256-bit AES key\nconst iv = TemplateJson.gen(['bin', 16, 16]);               // 128-bit IV\nconst salt = TemplateJson.gen(['bin', 16, 32]);             // 16-32 byte salt\nconst signature = TemplateJson.gen(['bin', 64, 64, 0, 255]); // 64-byte signature\n```\n\n##### Array Templates\n\n```typescript\ntype ArrayTemplate = [\n  'arr',\n  min?,        // Minimum length (default: 0)\n  max?,        // Maximum length (default: 5)  \n  template?,   // Template for items\n  head?,       // Fixed items at start\n  tail?        // Fixed items at end\n];\n```\n\n**Examples:**\n\n```typescript\n// Basic arrays\nconst numbers = TemplateJson.gen(['arr', 2, 5, 'int']);\nconst mixed = TemplateJson.gen(['arr', 1, 3]);\n\n// Arrays with head/tail\nconst coords = TemplateJson.gen(['arr', 0, 0, null, \n  [['float', -180, 180], ['float', -90, 90]], // head: [longitude, latitude]\n  [['lit', 'WGS84']]                          // tail: coordinate system\n]);\n\n// Nested arrays\nconst matrix = TemplateJson.gen(['arr', 2, 3, \n  ['arr', 2, 3, ['int', 0, 10]]\n]);\n```\n\n##### Object Templates\n\n```typescript\ntype ObjectTemplate = [\n  'obj',\n  fields?  // Array of field definitions\n];\n\ntype ObjectTemplateField = [\n  key,           // Key name (string or Token)\n  valueTemplate, // Template for the value\n  optionality?   // Probability of omission (0 = required, 1 = always omit)\n];\n```\n\n**Examples:**\n\n```typescript\n// User profile\nconst user = TemplateJson.gen(['obj', [\n  ['id', ['int', 1, 10000]],\n  ['username', ['str', ['list', \n    ['pick', 'user', 'admin', 'guest'], \n    ['char', 48, 57, 4] // 4 digits\n  ]]],\n  ['email', ['str', ['list',\n    ['repeat', 3, 10, ['char', 97, 122]], // 3-10 lowercase letters\n    '@',\n    ['pick', 'example.com', 'test.org', 'demo.net']\n  ]]],\n  ['age', ['int', 18, 120]],\n  ['isActive', 'bool'],\n  ['profile', ['obj', [\n    ['bio', ['str', ['repeat', 10, 50, ['char', 32, 126]]]],\n    ['avatar', ['str', ['list', 'https://avatar.example.com/', ['char', 48, 57, 8]]], 0.3]  // 30% chance to omit\n  ]]]\n]]);\n\n// API Response\nconst apiResponse = TemplateJson.gen(['obj', [\n  ['status', ['pick', 'success', 'error']],\n  ['timestamp', ['int', 1640000000, 1700000000]],\n  ['data', ['arr', 0, 10, ['obj', [\n    ['id', 'int'],\n    ['value', 'str']\n  ]]]]\n]]);\n```\n\n##### Map Templates\n\nGenerate key-value maps where all values follow the same template:\n\n```typescript\ntype MapTemplate = [\n  'map',\n  keyToken?,    // Token for generating keys\n  valueTemplate?, // Template for values\n  min?,         // Minimum entries (default: 0)\n  max?          // Maximum entries (default: 5)\n];\n```\n\n**Examples:**\n\n```typescript\n// Configuration map\nconst config = TemplateJson.gen(['map',\n  ['pick', 'timeout', 'retries', 'cache_ttl', 'max_connections'],\n  ['int', 1, 3600],\n  3, 5\n]);\n\n// User permissions\nconst permissions = TemplateJson.gen(['map',\n  ['list', 'can_', ['pick', 'read', 'write', 'delete', 'admin']],\n  'bool',\n  2, 6\n]);\n\n// Localization strings\nconst translations = TemplateJson.gen(['map',\n  ['pick', 'welcome', 'goodbye', 'error', 'success', 'loading'],\n  ['str', ['repeat', 5, 20, ['char', 32, 126]]],\n  3, 8\n]);\n```\n\n##### Union Templates (Or)\n\nChoose randomly from multiple template options:\n\n```typescript\n// Mixed data types\nconst mixedValue = TemplateJson.gen(['or', 'str', 'int', 'bool']);\n\n// Different user types\nconst user = TemplateJson.gen(['or',\n  ['obj', [['type', ['lit', 'admin']], ['permissions', ['lit', 'all']]]],\n  ['obj', [['type', ['lit', 'user']], ['level', ['int', 1, 5]]]],\n  ['obj', [['type', ['lit', 'guest']], ['expires', 'int']]]\n]);\n```\n\n##### Recursive Templates\n\nCreate self-referencing structures:\n\n```typescript\n// Tree structure\nconst tree = (): Template =\u003e ['obj', [\n  ['value', 'int'],\n  ['left', tree, 0.3],   // 30% chance of left child\n  ['right', tree, 0.3]   // 30% chance of right child\n]];\n\nconst treeData = TemplateJson.gen(tree);\n\n// Nested comments\nconst comment = (): Template =\u003e ['obj', [\n  ['id', 'int'],\n  ['text', 'str'],\n  ['author', 'str'],\n  ['replies', ['arr', 0, 3, comment, [], []], 0.4] // 40% chance of replies\n]];\n\nconst commentThread = TemplateJson.gen(comment);\n```\n\n### String Token System\n\nThe `randomString` function and string templates use a powerful token system for pattern-based string generation.\n\n#### `randomString(token: Token): string`\n\n```typescript\ntype Token = TokenLiteral | TokenPick | TokenRepeat | TokenChar | TokenList;\n```\n\n#### Token Types\n\n##### `TokenLiteral` - Static strings\n```typescript\nrandomString('Hello');  // Always returns \"Hello\"\n```\n\n##### `TokenPick` - Choose randomly from options\n```typescript\nrandomString(['pick', 'red', 'green', 'blue']);\n// Returns one of: \"red\", \"green\", \"blue\"\n\nrandomString(['pick', \n  'small', 'medium', 'large', 'extra-large'\n]);\n```\n\n##### `TokenRepeat` - Repeat patterns\n```typescript\nrandomString(['repeat', 3, 5, 'X']);\n// Returns 3-5 X's: \"XXX\", \"XXXX\", or \"XXXXX\"\n\nrandomString(['repeat', 2, 4, ['pick', 'A', 'B']]);\n// Returns 2-4 random A's or B's: \"AB\", \"BAA\", \"ABBA\", etc.\n```\n\n##### `TokenChar` - Character ranges\n```typescript\nrandomString(['char', 65, 90]);     // Single random A-Z\nrandomString(['char', 97, 122, 5]); // 5 random a-z chars\nrandomString(['char', 48, 57, 3]);  // 3 random digits\n\n// Unicode ranges\nrandomString(['char', 0x1F600, 0x1F64F]); // Random emoji\n```\n\n##### `TokenList` - Concatenate tokens\n```typescript\nrandomString(['list', \n  'user_',\n  ['char', 48, 57, 4],              // 4 digits\n  '_',\n  ['pick', 'active', 'inactive']\n]);\n// Example: \"user_1234_active\"\n\n// Email generation\nrandomString(['list',\n  ['repeat', 3, 12, ['char', 97, 122]], // 3-12 lowercase letters\n  ['pick', '.', '_', '-', ''],          // Optional separator\n  ['repeat', 0, 5, ['char', 97, 122]],  // 0-5 more letters\n  '@',\n  ['pick', 'gmail.com', 'yahoo.com', 'example.org']\n]);\n```\n\n#### Complex String Examples\n\n```typescript\n// Phone numbers\nconst phone = randomString(['list',\n  '+1-',\n  ['char', 50, 57, 3],  // Area code (2-9)\n  '-',\n  ['char', 48, 57, 3],  // Exchange\n  '-',\n  ['char', 48, 57, 4]   // Number\n]);\n\n// Product codes\nconst productCode = randomString(['list',\n  ['pick', 'PRD', 'ITM', 'SKU'],\n  '-',\n  ['char', 65, 90, 2],    // 2 uppercase letters\n  ['char', 48, 57, 6]     // 6 digits\n]);\n\n// URLs\nconst url = randomString(['list',\n  'https://',\n  ['repeat', 3, 15, ['char', 97, 122]], // Domain name\n  ['pick', '.com', '.org', '.net', '.io'],\n  ['pick', '', '/', '/api/', '/v1/'],\n  ['repeat', 0, 10, ['char', 97, 122]] // Optional path\n]);\n```\n\n### Utility Functions\n\n#### `deterministic(seed: number | (() =\u003e number), callback: () =\u003e T): T`\n\nExecute code with deterministic random number generation.\n\n```typescript\nimport { deterministic, RandomJson, TemplateJson } from '@jsonjoy.com/json-random';\n\n// Generate the same data every time\nconst data1 = deterministic(42, () =\u003e RandomJson.generate({ nodeCount: 5 }));\nconst data2 = deterministic(42, () =\u003e RandomJson.generate({ nodeCount: 5 }));\n// data1 and data2 are identical\n\n// Different seeds produce different but deterministic results\nconst dataA = deterministic(123, () =\u003e TemplateJson.gen('str'));\nconst dataB = deterministic(456, () =\u003e TemplateJson.gen('str'));\n\n// Use custom random number generator\nconst customRng = rnd(999);\nconst data3 = deterministic(customRng, () =\u003e RandomJson.generate());\n```\n\n#### `rnd(seed: number): () =\u003e number`\n\nCreate a deterministic random number generator function.\n\n```typescript\nimport { rnd } from '@jsonjoy.com/json-random';\n\nconst randomFn = rnd(12345);\nconsole.log(randomFn()); // 0.00002...\nconsole.log(randomFn()); // 0.77271...\nconsole.log(randomFn()); // 0.32429...\n```\n\n#### `int(min: number, max: number): number`\n\nGenerate a random integer between min and max (inclusive).\n\n```typescript\nimport { int } from '@jsonjoy.com/json-random';\n\nconst dice = int(1, 6);        // 1-6\nconst percentage = int(0, 100); // 0-100\nconst id = int(1000, 9999);   // 4-digit ID\n```\n\n## Use Cases\n\n### Testing \u0026 Development\n\n```typescript\n// Generate test user data\nconst testUsers = Array.from({ length: 10 }, () =\u003e \n  TemplateJson.gen(['obj', [\n    ['id', ['int', 1, 10000]],\n    ['name', ['str', ['list', \n      ['pick', 'John', 'Jane', 'Bob', 'Alice', 'Charlie'],\n      ' ',\n      ['pick', 'Doe', 'Smith', 'Johnson', 'Brown']\n    ]]],\n    ['email', ['str', ['list',\n      ['repeat', 3, 10, ['char', 97, 122]],\n      '@test.com'\n    ]]],\n    ['age', ['int', 18, 65]],\n    ['active', 'bool']\n  ]])\n);\n\n// Generate API response mock data\nconst mockApiResponse = TemplateJson.gen(['obj', [\n  ['success', ['lit', true]],\n  ['timestamp', ['lit', Date.now()]],\n  ['data', ['arr', 5, 15, ['obj', [\n    ['id', 'int'],\n    ['status', ['pick', 'pending', 'completed', 'failed']],\n    ['value', ['float', 0, 1000]]\n  ]]]]\n]]);\n\n// Generate cryptographic test data\nconst cryptoData = TemplateJson.gen(['obj', [\n  ['userId', ['int64', BigInt('1000000000000'), BigInt('9999999999999')]],\n  ['sessionId', ['str', ['list', 'sess_', ['repeat', 32, 32, ['pick', ...'0123456789abcdef'.split('')]]]]],\n  ['publicKey', ['bin', 32, 32]], // 256-bit public key\n  ['signature', ['bin', 64, 64]], // 512-bit signature\n  ['nonce', ['bin', 16, 16]],     // 128-bit nonce\n  ['timestamp', ['int64', BigInt(Date.now()), BigInt(Date.now() + 86400000)]]\n]]);\n```\n\n### Load Testing\n\n```typescript\n// Generate large datasets for performance testing\nconst loadTestData = deterministic(42, () =\u003e \n  Array.from({ length: 1000 }, () =\u003e \n    RandomJson.generate({ \n      nodeCount: 50,\n      odds: {\n        null: 1,\n        boolean: 2,\n        number: 10,\n        string: 8,\n        binary: 0,\n        array: 3,\n        object: 5\n      }\n    })\n  )\n);\n```\n\n### Configuration Generation\n\n```typescript\n// Generate service configurations\nconst serviceConfig = TemplateJson.gen(['obj', [\n  ['database', ['obj', [\n    ['host', ['str', ['list', 'db-', ['char', 48, 57, 2], '.example.com']]],\n    ['port', ['int', 3000, 6000]],\n    ['timeout', ['int', 1000, 30000]],\n    ['pool_size', ['int', 5, 50]]\n  ]]],\n  ['cache', ['obj', [\n    ['enabled', 'bool'],\n    ['ttl', ['int', 60, 3600]],\n    ['max_size', ['int', 100, 10000]]\n  ]]],\n  ['security', ['obj', [\n    ['api_key', ['bin', 32, 32]],                    // 256-bit API key\n    ['session_timeout', ['int64', BigInt('3600'), BigInt('86400')]], // 1 hour to 1 day in seconds\n    ['max_request_size', ['int64', BigInt('1048576'), BigInt('104857600')]] // 1MB to 100MB\n  ]]],\n  ['features', ['map',\n    ['pick', 'feature_a', 'feature_b', 'feature_c', 'feature_d'],\n    'bool',\n    2, 5\n  ]]\n]]);\n```\n\n## Helper Methods for Easy Generation\n\nThe library provides convenient helper methods for generating common data types without needing to construct templates manually. These methods are available in the `examples` module:\n\n```typescript\nimport { \n  genUser, \n  genAddress, \n  genProduct, \n  genOrder,\n  genRandomExample \n} from '@jsonjoy.com/json-random/lib/examples';\n\n// Generate common data types quickly\nconst user = genUser();\nconst address = genAddress();\nconst product = genProduct();\nconst order = genOrder();\n\n// Generate random example from any template\nconst randomData = genRandomExample();\n```\n\n### Available Helper Methods\n\n| Method | Description |\n|--------|-------------|\n| `genUser()` | Generate comprehensive user profile with details |\n| `genUserBasic()` | Generate basic user with essential information |\n| `genAddress()` | Generate address with street, city, state, etc. |\n| `genProduct()` | Generate product with name, price, category |\n| `genOrder()` | Generate order with items and customer info |\n| `genTransaction()` | Generate financial transaction data |\n| `genBankAccount()` | Generate bank account information |\n| `genSocialPost()` | Generate social media post |\n| `genSocialProfile()` | Generate social media profile |\n| `genLocation()` | Generate location with coordinates |\n| `genApiResponse()` | Generate API response with data array |\n| `genApiResponseDetailed()` | Generate comprehensive API response |\n| `genServiceConfig()` | Generate service configuration |\n| `genPatient()` | Generate medical patient record |\n| `genMedicalRecord()` | Generate comprehensive medical record |\n| `genStudent()` | Generate student profile |\n| `genCourse()` | Generate course information |\n| `genSensorReading()` | Generate IoT sensor reading |\n| `genIotDevice()` | Generate IoT device profile |\n| `genLogEntry()` | Generate log entry for monitoring |\n| `genMetricData()` | Generate metric data for monitoring |\n| `genRandomExample()` | Generate random data from any available template |\n\n### Usage Examples\n\n```typescript\n// Generate test user data for API testing\nconst testUser = genUser();\nconsole.log(testUser);\n// Output: { id: 4829, username: \"user_7432\", email: \"alice@gmail.com\", ... }\n\n// Generate address for form testing\nconst shippingAddress = genAddress();\nconsole.log(shippingAddress);\n// Output: { street: \"123 Main St\", city: \"Springfield\", state: \"CA\", ... }\n\n// Generate product catalog\nconst products = Array.from({ length: 10 }, () =\u003e genProduct());\n\n// Generate random test data\nconst randomTestData = Array.from({ length: 5 }, () =\u003e genRandomExample());\n```\n\n## Demos\n\nRun the included demos to see the library in action:\n\n```bash\n# Random JSON generation\nnpx ts-node src/__demos__/json-random.ts\n\n# Template-based generation  \nnpx ts-node src/__demos__/map-demo.ts\n```\n\n## TypeScript Support\n\nThe library includes full TypeScript definitions:\n\n```typescript\nimport type { \n  RandomJsonOptions, \n  NodeOdds,\n  Template,\n  TemplateJsonOpts,\n  Token,\n  ArrayTemplate,\n  ObjectTemplate,\n  MapTemplate\n} from '@jsonjoy.com/json-random';\n```\n\n## License\n\nApache-2.0","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonjoy-com%2Fjson-random","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsonjoy-com%2Fjson-random","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonjoy-com%2Fjson-random/lists"}