@anil-labs/factory 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +21 -0
  3. package/README.md +371 -0
  4. package/dist/builders/index.d.cts +40 -0
  5. package/dist/builders/index.d.ts +40 -0
  6. package/dist/chunks/faker-BOtDMmjd.cjs +1430 -0
  7. package/dist/chunks/faker-BOtDMmjd.cjs.map +1 -0
  8. package/dist/chunks/faker-BlEhpR26.mjs +1287 -0
  9. package/dist/chunks/faker-BlEhpR26.mjs.map +1 -0
  10. package/dist/chunks/persist-DcARfeC-.cjs +134 -0
  11. package/dist/chunks/persist-DcARfeC-.cjs.map +1 -0
  12. package/dist/chunks/persist-ZGX3NWMF.mjs +117 -0
  13. package/dist/chunks/persist-ZGX3NWMF.mjs.map +1 -0
  14. package/dist/core/collection.d.cts +41 -0
  15. package/dist/core/collection.d.ts +41 -0
  16. package/dist/core/factory.d.cts +115 -0
  17. package/dist/core/factory.d.ts +115 -0
  18. package/dist/core/index.d.cts +6 -0
  19. package/dist/core/index.d.ts +6 -0
  20. package/dist/core/registry.d.cts +20 -0
  21. package/dist/core/registry.d.ts +20 -0
  22. package/dist/core/sequence.d.cts +36 -0
  23. package/dist/core/sequence.d.ts +36 -0
  24. package/dist/core/types.d.cts +47 -0
  25. package/dist/core/types.d.ts +47 -0
  26. package/dist/faker/color.d.cts +22 -0
  27. package/dist/faker/color.d.ts +22 -0
  28. package/dist/faker/commerce.d.cts +21 -0
  29. package/dist/faker/commerce.d.ts +21 -0
  30. package/dist/faker/company.d.cts +20 -0
  31. package/dist/faker/company.d.ts +20 -0
  32. package/dist/faker/datatype.d.cts +16 -0
  33. package/dist/faker/datatype.d.ts +16 -0
  34. package/dist/faker/date.d.cts +29 -0
  35. package/dist/faker/date.d.ts +29 -0
  36. package/dist/faker/faker.d.cts +82 -0
  37. package/dist/faker/faker.d.ts +82 -0
  38. package/dist/faker/finance.d.cts +25 -0
  39. package/dist/faker/finance.d.ts +25 -0
  40. package/dist/faker/helpers.d.cts +52 -0
  41. package/dist/faker/helpers.d.ts +52 -0
  42. package/dist/faker/image.d.cts +22 -0
  43. package/dist/faker/image.d.ts +22 -0
  44. package/dist/faker/index.d.cts +21 -0
  45. package/dist/faker/index.d.ts +21 -0
  46. package/dist/faker/internet.d.cts +33 -0
  47. package/dist/faker/internet.d.ts +33 -0
  48. package/dist/faker/locale.d.cts +26 -0
  49. package/dist/faker/locale.d.ts +26 -0
  50. package/dist/faker/location.d.cts +30 -0
  51. package/dist/faker/location.d.ts +30 -0
  52. package/dist/faker/lorem.d.cts +26 -0
  53. package/dist/faker/lorem.d.ts +26 -0
  54. package/dist/faker/number.d.cts +31 -0
  55. package/dist/faker/number.d.ts +31 -0
  56. package/dist/faker/person.d.cts +29 -0
  57. package/dist/faker/person.d.ts +29 -0
  58. package/dist/faker/regex.d.cts +19 -0
  59. package/dist/faker/regex.d.ts +19 -0
  60. package/dist/faker/string.d.cts +33 -0
  61. package/dist/faker/string.d.ts +33 -0
  62. package/dist/faker/system.d.cts +29 -0
  63. package/dist/faker/system.d.ts +29 -0
  64. package/dist/faker.cjs +26 -0
  65. package/dist/faker.mjs +3 -0
  66. package/dist/index.cjs +635 -0
  67. package/dist/index.cjs.map +1 -0
  68. package/dist/index.d.cts +37 -0
  69. package/dist/index.d.ts +37 -0
  70. package/dist/index.mjs +596 -0
  71. package/dist/index.mjs.map +1 -0
  72. package/dist/locales/en.cjs +351 -0
  73. package/dist/locales/en.cjs.map +1 -0
  74. package/dist/locales/en.d.cts +11 -0
  75. package/dist/locales/en.d.ts +11 -0
  76. package/dist/locales/en.mjs +350 -0
  77. package/dist/locales/en.mjs.map +1 -0
  78. package/dist/locales/types.d.cts +30 -0
  79. package/dist/locales/types.d.ts +30 -0
  80. package/dist/persist/console.d.cts +15 -0
  81. package/dist/persist/console.d.ts +15 -0
  82. package/dist/persist/http.d.cts +42 -0
  83. package/dist/persist/http.d.ts +42 -0
  84. package/dist/persist/index.d.cts +5 -0
  85. package/dist/persist/index.d.ts +5 -0
  86. package/dist/persist/memory.d.cts +26 -0
  87. package/dist/persist/memory.d.ts +26 -0
  88. package/dist/persist.cjs +5 -0
  89. package/dist/persist.mjs +2 -0
  90. package/dist/prng/index.d.cts +5 -0
  91. package/dist/prng/index.d.ts +5 -0
  92. package/dist/prng/mulberry32.d.cts +19 -0
  93. package/dist/prng/mulberry32.d.ts +19 -0
  94. package/dist/prng/types.d.cts +23 -0
  95. package/dist/prng/types.d.ts +23 -0
  96. package/dist/snapshot/index.d.cts +16 -0
  97. package/dist/snapshot/index.d.ts +16 -0
  98. package/package.json +136 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faker-BOtDMmjd.cjs","names":[],"sources":["../../src/prng/mulberry32.ts","../../src/prng/index.ts","../../src/faker/locale.ts","../../src/faker/person.ts","../../src/faker/internet.ts","../../src/faker/location.ts","../../src/faker/lorem.ts","../../src/faker/date.ts","../../src/faker/number.ts","../../src/faker/string.ts","../../src/faker/color.ts","../../src/faker/company.ts","../../src/faker/commerce.ts","../../src/faker/finance.ts","../../src/faker/image.ts","../../src/faker/system.ts","../../src/faker/datatype.ts","../../src/faker/regex.ts","../../src/faker/helpers.ts","../../src/faker/faker.ts"],"sourcesContent":["import type { Prng } from './types'\n\n/**\n * Mulberry32 — 32-bit, ~4 billion period, very fast, deterministic.\n *\n * Good enough for test data and snapshots. NOT cryptographically secure.\n *\n * @see https://gist.github.com/tommyettinger/46a3b8f97c8e3a59e1e0c7f8e85bcde6\n */\nexport class Mulberry32 implements Prng {\n private state: number\n\n constructor(seed?: number) {\n this.state = normalizeSeed(seed)\n }\n\n get currentSeed(): number {\n return this.state >>> 0\n }\n\n seed(seed: number): void {\n this.state = normalizeSeed(seed)\n }\n\n next(): number {\n // The classic Mulberry32 step.\n this.state = (this.state + 0x6d2b79f5) >>> 0\n let t = this.state\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4_294_967_296\n }\n\n int(min: number, max: number): number {\n if (max < min) [min, max] = [max, min]\n return Math.floor(this.next() * (max - min + 1)) + min\n }\n\n float(min: number, max: number, decimals = 2): number {\n const v = this.next() * (max - min) + min\n const factor = 10 ** decimals\n return Math.round(v * factor) / factor\n }\n\n bool(chance = 0.5): boolean {\n return this.next() < chance\n }\n\n pick<T>(items: readonly T[]): T {\n if (items.length === 0) {\n throw new Error('[Prng] pick(): array is empty.')\n }\n const picked = items[this.int(0, items.length - 1)]\n if (picked === undefined) throw new Error('[Prng] pick(): unreachable index')\n return picked\n }\n}\n\n/**\n * Coerce any input into a non-zero 32-bit unsigned integer. We map `0` to the\n * golden-ratio constant so callers passing `0` get a deterministic-but-non-zero\n * starting state (zero would emit a long initial run of small numbers).\n */\nfunction normalizeSeed(seed: number | undefined): number {\n if (typeof seed !== 'number' || Number.isNaN(seed)) {\n return (Date.now() ^ Math.floor(Math.random() * 0xffffffff)) >>> 0\n }\n const truncated = Math.trunc(seed) >>> 0\n return truncated === 0 ? 0x9e3779b9 : truncated\n}\n","export type { Prng } from './types'\nexport { Mulberry32 } from './mulberry32'\n\nimport { Mulberry32 } from './mulberry32'\nimport type { Prng } from './types'\n\n/** Construct a default PRNG (currently Mulberry32). */\nexport function createPrng(seed?: number): Prng {\n return new Mulberry32(seed)\n}\n","import type { LocaleData } from '@/locales/types'\nimport { en } from '@/locales/en'\n\n/**\n * Live reference to the active locale data. A single instance is shared by\n * every faker namespace, so swapping the locale at the `Faker` level\n * propagates instantly without rebuilding modules.\n */\nexport class LocaleRef {\n private currentName: string\n private currentData: LocaleData\n\n constructor(initial = 'en') {\n this.currentName = initial\n const data = registry.get(initial)\n if (!data) {\n throw new Error(\n `[Locale] Unknown locale \"${initial}\". Registered: ${[...registry.keys()].join(', ')}`,\n )\n }\n this.currentData = data\n }\n\n /** Read the currently-active locale data. */\n get data(): LocaleData {\n return this.currentData\n }\n\n /** Read the active locale's identifier (e.g. `\"en\"`). */\n get name(): string {\n return this.currentName\n }\n\n /** Swap to a different registered locale. Throws if unknown. */\n set(name: string): void {\n const data = registry.get(name)\n if (!data) {\n throw new Error(\n `[Locale] Unknown locale \"${name}\". Registered: ${[...registry.keys()].join(', ')}`,\n )\n }\n this.currentName = name\n this.currentData = data\n }\n}\n\nconst registry = new Map<string, LocaleData>()\nregistry.set('en', en)\n\n/** Register a new locale. Overwrites if `name` already exists. */\nexport function registerLocale(name: string, data: LocaleData): void {\n registry.set(name, data)\n}\n\n/** Read a locale's raw data without making it active. */\nexport function getLocale(name: string): LocaleData | undefined {\n return registry.get(name)\n}\n\n/** List every registered locale identifier. */\nexport function listLocales(): string[] {\n return [...registry.keys()]\n}\n\nexport type { LocaleData }\nexport { en }\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\n\n/**\n * Personal-name namespace.\n *\n * @example\n * ```ts\n * faker.person.firstName() // \"Sarah\"\n * faker.person.firstName('male') // \"James\"\n * faker.person.fullName() // \"Olivia Patel\"\n * faker.person.jobTitle() // → from `company.jobTitle()`\n * ```\n */\nexport class Person {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n ) {}\n\n firstName(sex?: 'male' | 'female'): string {\n const d = this.locale.data\n if (sex === 'male' && d.firstNamesMale?.length) return this.rng.pick(d.firstNamesMale)\n if (sex === 'female' && d.firstNamesFemale?.length) return this.rng.pick(d.firstNamesFemale)\n return this.rng.pick(d.firstNames)\n }\n\n lastName(): string {\n return this.rng.pick(this.locale.data.lastNames)\n }\n\n fullName(\n opts: { sex?: 'male' | 'female'; withPrefix?: boolean; withSuffix?: boolean } = {},\n ): string {\n const parts: string[] = []\n if (opts.withPrefix) parts.push(this.prefix())\n parts.push(this.firstName(opts.sex), this.lastName())\n if (opts.withSuffix) parts.push(this.suffix())\n return parts.join(' ')\n }\n\n prefix(): string {\n return this.rng.pick(this.locale.data.prefixes)\n }\n\n suffix(): string {\n return this.rng.pick(this.locale.data.suffixes)\n }\n\n /** Returns `\"male\"` or `\"female\"`. */\n sex(): 'male' | 'female' {\n return this.rng.bool() ? 'male' : 'female'\n }\n}\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\n\n/**\n * Internet / network namespace.\n *\n * @example\n * ```ts\n * faker.internet.email() // \"olivia.patel91@example.com\"\n * faker.internet.email({ firstName: 'Alice', lastName: 'Wu' }) // \"alice.wu41@…\"\n * faker.internet.userName() // \"alex_anderson\"\n * faker.internet.url() // \"https://app.gupta.io\"\n * faker.internet.ipv4() // \"172.16.42.7\"\n * faker.internet.password(12) // \"K8m$pQrt2Wz!\"\n * ```\n */\nexport class Internet {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n ) {}\n\n email(opts: { firstName?: string; lastName?: string } = {}): string {\n const first = (opts.firstName ?? this.rng.pick(this.locale.data.firstNames)).toLowerCase()\n const last = (opts.lastName ?? this.rng.pick(this.locale.data.lastNames)).toLowerCase()\n const suffix = this.rng.int(1, 99).toString()\n const local = this.rng.pick([`${first}.${last}`, `${first}${last}`, `${first}_${last}`])\n const domain = this.rng.pick(this.locale.data.emailDomains)\n return `${local}${suffix}@${domain}`\n }\n\n userName(): string {\n const first = this.rng.pick(this.locale.data.firstNames).toLowerCase()\n const last = this.rng.pick(this.locale.data.lastNames).toLowerCase()\n const numeric = this.rng.int(1, 999).toString()\n return this.rng.pick([`${first}.${last}`, `${first}_${last}`, `${first}${numeric}`])\n }\n\n /** Bare domain (e.g. `acme.io`). */\n domainName(): string {\n const word = this.rng.pick(this.locale.data.firstNames).toLowerCase()\n return `${word}.${this.rng.pick(this.locale.data.tlds)}`\n }\n\n url(): string {\n const sub = this.rng.pick(['www', 'app', 'api', 'blog', 'docs'])\n return `https://${sub}.${this.domainName()}`\n }\n\n ipv4(): string {\n return [\n this.rng.int(1, 255),\n this.rng.int(0, 255),\n this.rng.int(0, 255),\n this.rng.int(1, 254),\n ].join('.')\n }\n\n ipv6(): string {\n return Array.from({ length: 8 }, () =>\n this.rng.int(0, 0xffff).toString(16).padStart(4, '0'),\n ).join(':')\n }\n\n /** Random MAC address (colon-separated). */\n mac(): string {\n return Array.from({ length: 6 }, () => this.rng.int(0, 255).toString(16).padStart(2, '0')).join(\n ':',\n )\n }\n\n password(length = 12): string {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+='\n let out = ''\n for (let i = 0; i < length; i++) {\n const ch = chars[this.rng.int(0, chars.length - 1)]\n if (ch !== undefined) out += ch\n }\n return out\n }\n}\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\n\n/**\n * Postal-address namespace.\n *\n * @example\n * ```ts\n * faker.location.streetAddress() // \"742 Oak Ave\"\n * faker.location.city() // \"Seattle\"\n * faker.location.country() // \"United States\"\n * faker.location.latitude() // 47.6062\n * ```\n */\nexport class Location {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n ) {}\n\n streetAddress(): string {\n const number = this.rng.int(100, 9999).toString()\n const name = this.rng.pick(this.locale.data.streetNames)\n const suffix = this.rng.pick(this.locale.data.streetSuffixes)\n return `${number} ${name} ${suffix}`\n }\n\n city(): string {\n return this.rng.pick(this.locale.data.cities)\n }\n\n state(): string {\n return this.rng.pick(this.locale.data.states)\n }\n\n zipCode(): string {\n return String(this.rng.int(10_000, 99_999))\n }\n\n /** Locale's primary country (e.g. `\"United States\"` for `en`). */\n country(): string {\n return this.locale.data.country\n }\n\n /** Random country from the locale's broader country list. */\n countryName(): string {\n return this.rng.pick(this.locale.data.countries)\n }\n\n /** Full single-line address. */\n fullAddress(): string {\n return `${this.streetAddress()}, ${this.city()}, ${this.state()} ${this.zipCode()}`\n }\n\n latitude(min = -90, max = 90): number {\n return this.rng.float(min, max, 4)\n }\n\n longitude(min = -180, max = 180): number {\n return this.rng.float(min, max, 4)\n }\n}\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\n\n/** Capitalise the first character of a string. */\nfunction capitalize(s: string): string {\n const first = s[0]\n return first === undefined ? s : first.toUpperCase() + s.slice(1)\n}\n\n/**\n * Lorem-ipsum text generator.\n *\n * @example\n * ```ts\n * faker.lorem.word() // \"consectetur\"\n * faker.lorem.words(3) // \"dolor sit amet\"\n * faker.lorem.sentence() // \"Ut labore et dolore magna aliqua.\"\n * faker.lorem.paragraph()\n * faker.lorem.paragraphs(3)\n * ```\n */\nexport class Lorem {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n ) {}\n\n word(): string {\n return this.rng.pick(this.locale.data.loremWords)\n }\n\n words(count = 3): string {\n return Array.from({ length: count }, () => this.word()).join(' ')\n }\n\n sentence(wordCount?: number): string {\n const count = wordCount ?? this.rng.int(4, 12)\n return capitalize(this.words(count)) + '.'\n }\n\n paragraph(sentenceCount?: number): string {\n const count = sentenceCount ?? this.rng.int(3, 6)\n return Array.from({ length: count }, () => this.sentence()).join(' ')\n }\n\n paragraphs(count = 3): string {\n return Array.from({ length: count }, () => this.paragraph()).join('\\n\\n')\n }\n\n /** Alias of `paragraph()` — matches faker.js. */\n text(): string {\n return this.paragraph()\n }\n}\n","import type { Prng } from '@/prng/types'\n\nconst DAY_MS = 86_400_000\n\n/**\n * Date / time generators.\n *\n * @example\n * ```ts\n * faker.date.past() // a Date in the last 365 days\n * faker.date.recent(30) // last 30 days\n * faker.date.future(60) // next 60 days\n * faker.date.between(a, b)\n * faker.date.birthdate({ min: 18, max: 65 })\n * ```\n */\nexport class DateGen {\n constructor(private readonly rng: Prng) {}\n\n past(days = 365): Date {\n const now = Date.now()\n return new Date(this.rng.int(now - days * DAY_MS, now - 1))\n }\n\n recent(days = 30): Date {\n return this.past(days)\n }\n\n future(days = 30): Date {\n const now = Date.now()\n return new Date(this.rng.int(now + 1, now + days * DAY_MS))\n }\n\n soon(days = 7): Date {\n return this.future(days)\n }\n\n between(from: Date, to: Date): Date {\n const a = from.getTime()\n const b = to.getTime()\n return new Date(this.rng.int(Math.min(a, b), Math.max(a, b)))\n }\n\n /** ISO-8601 string of a random recent date. */\n iso(days = 365): string {\n return this.past(days).toISOString()\n }\n\n /** A plausible birthdate for someone in `[min, max]` years old. */\n birthdate(opts: { max?: number; min?: number } = {}): Date {\n const min = opts.min ?? 18\n const max = opts.max ?? 80\n const now = Date.now()\n const minTime = now - max * 365 * DAY_MS\n const maxTime = now - min * 365 * DAY_MS\n return new Date(this.rng.int(minTime, maxTime))\n }\n}\n","import type { Prng } from '@/prng/types'\n\n/**\n * Number generators.\n *\n * @example\n * ```ts\n * faker.number.int({ min: 1, max: 100 })\n * faker.number.float({ min: 0, max: 1, decimals: 3 })\n * faker.number.bigInt({ min: 0n, max: 1000n })\n * faker.number.between(1, 5)\n * ```\n */\nexport class NumberGen {\n constructor(private readonly rng: Prng) {}\n\n int(opts: { max?: number; min?: number } = {}): number {\n return this.rng.int(opts.min ?? 0, opts.max ?? Number.MAX_SAFE_INTEGER)\n }\n\n float(opts: { decimals?: number; max?: number; min?: number } = {}): number {\n return this.rng.float(opts.min ?? 0, opts.max ?? 1, opts.decimals ?? 2)\n }\n\n bigInt(opts: { max?: bigint; min?: bigint } = {}): bigint {\n const min = opts.min ?? 0n\n const max = opts.max ?? 1_000_000_000n\n if (max < min) throw new Error('[Number] bigInt: max < min')\n const range = max - min + 1n\n // Compose a bigint from two 32-bit ints to cover up to 64 bits.\n const lo = BigInt(this.rng.int(0, 0xffffffff))\n const hi = BigInt(this.rng.int(0, 0xffffffff))\n const composed = (hi << 32n) | lo\n return min + (composed % range)\n }\n\n /** Convenience: integer in `[min, max]`. */\n between(min: number, max: number): number {\n return this.rng.int(min, max)\n }\n}\n","import type { Prng } from '@/prng/types'\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\nconst NUMERIC = '0123456789'\nconst ALPHANUMERIC = ALPHA + NUMERIC\nconst HEX = '0123456789abcdef'\nconst NANOID = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'\n\n/**\n * String / identifier generators.\n *\n * @example\n * ```ts\n * faker.string.uuid() // \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n * faker.string.nanoid()\n * faker.string.alphanumeric(8)\n * faker.string.hexadecimal(16)\n * faker.string.sample(20) // any printable char\n * faker.string.slug() // \"dolor-sit-amet\"\n * ```\n */\nexport class StringGen {\n constructor(private readonly rng: Prng) {}\n\n /** RFC-4122 v4 UUID. */\n uuid(): string {\n const bytes = Array.from({ length: 16 }, () => this.rng.int(0, 255))\n bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40 // version 4\n bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80 // RFC 4122 variant\n const hex = bytes.map((b) => b.toString(16).padStart(2, '0')).join('')\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`\n }\n\n /** URL-safe random ID — same alphabet as nanoid. */\n nanoid(length = 21): string {\n return this.pickFrom(NANOID, length)\n }\n\n alpha(length = 10): string {\n return this.pickFrom(ALPHA, length)\n }\n\n numeric(length = 10): string {\n return this.pickFrom(NUMERIC, length)\n }\n\n alphanumeric(length = 10): string {\n return this.pickFrom(ALPHANUMERIC, length)\n }\n\n hexadecimal(length = 8, opts: { prefix?: string } = {}): string {\n return (opts.prefix ?? '') + this.pickFrom(HEX, length)\n }\n\n /** Random printable ASCII (32–126), any character. */\n sample(length = 10): string {\n let out = ''\n for (let i = 0; i < length; i++) out += String.fromCharCode(this.rng.int(33, 126))\n return out\n }\n\n /** Lowercase, hyphen-joined word sequence. */\n slug(words = 3, dictionary?: readonly string[]): string {\n const pool = dictionary ?? DEFAULT_SLUG_WORDS\n return Array.from({ length: words }, () => this.rng.pick(pool)).join('-')\n }\n\n private pickFrom(pool: string, length: number): string {\n let out = ''\n for (let i = 0; i < length; i++) {\n const ch = pool[this.rng.int(0, pool.length - 1)]\n if (ch !== undefined) out += ch\n }\n return out\n }\n}\n\nconst DEFAULT_SLUG_WORDS = [\n 'amber',\n 'azure',\n 'cedar',\n 'cobalt',\n 'coral',\n 'dawn',\n 'ember',\n 'fern',\n 'frost',\n 'glass',\n 'haven',\n 'iris',\n 'jade',\n 'lake',\n 'maple',\n 'meadow',\n 'nova',\n 'opal',\n 'pine',\n 'quartz',\n 'river',\n 'sage',\n 'silk',\n 'stone',\n 'tide',\n 'umber',\n 'velvet',\n 'wave',\n 'xeno',\n 'yarn',\n 'zenith',\n]\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\n\n/**\n * Color generators.\n *\n * @example\n * ```ts\n * faker.color.name() // \"amber\"\n * faker.color.hex() // \"#3f8ad5\"\n * faker.color.rgb() // \"rgb(63, 138, 213)\"\n * faker.color.hsl() // \"hsl(217, 64%, 54%)\"\n * ```\n */\nexport class Color {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n ) {}\n\n name(): string {\n return this.rng.pick(this.locale.data.colors)\n }\n\n hex(): string {\n return '#' + this.rng.int(0, 0xffffff).toString(16).padStart(6, '0')\n }\n\n rgb(): string {\n const r = this.rng.int(0, 255).toString()\n const g = this.rng.int(0, 255).toString()\n const b = this.rng.int(0, 255).toString()\n return `rgb(${r}, ${g}, ${b})`\n }\n\n hsl(): string {\n const h = this.rng.int(0, 360).toString()\n const s = this.rng.int(40, 90).toString()\n const l = this.rng.int(30, 70).toString()\n return `hsl(${h}, ${s}%, ${l}%)`\n }\n}\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\n\n/**\n * Company / employment generators.\n *\n * @example\n * ```ts\n * faker.company.name() // \"Stark Industries\"\n * faker.company.jobTitle() // \"Frontend Developer\"\n * faker.company.buzzPhrase() // \"leverage cross-platform synergies\"\n * ```\n */\nexport class Company {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n ) {}\n\n name(): string {\n return this.rng.pick(this.locale.data.companies)\n }\n\n jobTitle(): string {\n return this.rng.pick(this.locale.data.jobTitles)\n }\n\n buzzPhrase(): string {\n return this.rng.pick(this.locale.data.buzzPhrases)\n }\n}\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\n\n/**\n * Commerce generators.\n *\n * @example\n * ```ts\n * faker.commerce.productName() // \"Bamboo Notebook\"\n * faker.commerce.price() // 24.99\n * faker.commerce.department() // \"Electronics\"\n * ```\n */\nexport class Commerce {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n ) {}\n\n productName(): string {\n return this.rng.pick(this.locale.data.productNames)\n }\n\n department(): string {\n return this.rng.pick(this.locale.data.departments)\n }\n\n price(min = 1, max = 1000, decimals = 2): number {\n return this.rng.float(min, max, decimals)\n }\n\n productDescription(): string {\n const adj = this.rng.pick(['Premium', 'Eco-friendly', 'Hand-crafted', 'Vintage', 'Modern'])\n return `${adj} ${this.productName().toLowerCase()} designed for everyday use.`\n }\n}\n","import type { Prng } from '@/prng/types'\n\n/**\n * Finance generators.\n *\n * @example\n * ```ts\n * faker.finance.amount() // \"327.41\"\n * faker.finance.amount(0, 10, 2, '$') // \"$4.27\"\n * faker.finance.accountNumber()\n * faker.finance.creditCardNumber() // 16-digit Luhn-valid number\n * faker.finance.currencyCode()\n * faker.finance.iban()\n * ```\n */\nexport class Finance {\n constructor(private readonly rng: Prng) {}\n\n amount(min = 0, max = 1000, decimals = 2, symbol = ''): string {\n return symbol + this.rng.float(min, max, decimals).toFixed(decimals)\n }\n\n accountNumber(digits = 10): string {\n let out = ''\n for (let i = 0; i < digits; i++) out += this.rng.int(0, 9).toString()\n return out\n }\n\n /** Generates a Luhn-valid 16-digit credit-card number. */\n creditCardNumber(): string {\n const digits: number[] = []\n for (let i = 0; i < 15; i++) digits.push(this.rng.int(0, 9))\n // Compute Luhn check digit.\n let sum = 0\n for (let i = digits.length - 1; i >= 0; i--) {\n const raw = digits[i]\n if (raw === undefined) continue\n let d = raw\n if ((digits.length - i) % 2 === 1) {\n d *= 2\n if (d > 9) d -= 9\n }\n sum += d\n }\n digits.push((10 - (sum % 10)) % 10)\n return digits.join('')\n }\n\n currencyCode(): string {\n return this.rng.pick(CURRENCY_CODES)\n }\n\n iban(countryCode = 'GB', length = 22): string {\n let body = ''\n for (let i = 0; i < length - 4; i++) body += this.rng.int(0, 9).toString()\n const checkDigits = this.rng.int(10, 99).toString()\n return `${countryCode}${checkDigits}${body}`\n }\n\n bitcoinAddress(): string {\n const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz123456789'\n let out = this.rng.pick(['1', '3'])\n const length = this.rng.int(25, 33)\n for (let i = 1; i < length; i++) {\n const ch = chars[this.rng.int(0, chars.length - 1)]\n if (ch !== undefined) out += ch\n }\n return out\n }\n}\n\nconst CURRENCY_CODES = [\n 'USD',\n 'EUR',\n 'GBP',\n 'JPY',\n 'CHF',\n 'CAD',\n 'AUD',\n 'CNY',\n 'INR',\n 'NPR',\n 'BRL',\n 'MXN',\n 'SGD',\n 'HKD',\n 'KRW',\n]\n","import type { Prng } from '@/prng/types'\n\n/**\n * Image-URL generators. No bytes are produced — just predictable URLs that\n * resolve to real images from public providers.\n *\n * @example\n * ```ts\n * faker.image.url() // picsum.photos URL\n * faker.image.avatar() // ui-avatars URL\n * faker.image.dataUri(64, 64) // tiny embeddable PNG\n * ```\n */\nexport class Image {\n constructor(private readonly rng: Prng) {}\n\n /** Picsum-photos placeholder URL. */\n url(width = 640, height = 480): string {\n const random = this.rng.int(1, 10_000).toString()\n return `https://picsum.photos/${width.toString()}/${height.toString()}?random=${random}`\n }\n\n /** ui-avatars.com avatar URL — needs a name to render initials. */\n avatar(name = 'User'): string {\n const params = new URLSearchParams({\n name,\n size: String(this.rng.pick([64, 96, 128, 256])),\n background: this.rng.int(0, 0xffffff).toString(16).padStart(6, '0'),\n color: 'fff',\n })\n return `https://ui-avatars.com/api/?${params.toString()}`\n }\n\n /** Tiny single-color PNG data-uri — useful for testing inline-image flows. */\n dataUri(width = 1, height = 1): string {\n // Solid 1x1 PNG is a well-known constant — wider sizes use the same pixel\n // for simplicity (the goal is a syntactically valid data-uri, not a\n // rasterised image).\n void width\n void height\n return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='\n }\n}\n","import type { Prng } from '@/prng/types'\nimport type { LocaleRef } from './locale'\nimport type { StringGen } from './string'\n\n/**\n * Filesystem / operating-system generators.\n *\n * @example\n * ```ts\n * faker.system.fileName() // \"amber-cedar-pine.json\"\n * faker.system.commonFileExt() // \"pdf\"\n * faker.system.mimeType() // \"image/png\"\n * faker.system.filePath() // \"/var/log/glass-stone.txt\"\n * ```\n */\nexport class System {\n constructor(\n private readonly rng: Prng,\n private readonly locale: LocaleRef,\n private readonly strings: StringGen,\n ) {}\n\n commonFileExt(): string {\n return this.rng.pick(this.locale.data.fileExtensions)\n }\n\n fileExt(): string {\n return this.rng.pick(this.locale.data.fileExtensions)\n }\n\n fileName(opts: { withExt?: boolean } = {}): string {\n const base = this.strings.slug(this.rng.int(2, 4))\n return opts.withExt === false ? base : `${base}.${this.commonFileExt()}`\n }\n\n directoryPath(): string {\n const depth = this.rng.int(1, 4)\n return '/' + Array.from({ length: depth }, () => this.strings.slug(1)).join('/')\n }\n\n filePath(): string {\n return `${this.directoryPath()}/${this.fileName()}`\n }\n\n mimeType(): string {\n return this.rng.pick(this.locale.data.mimeTypes)\n }\n\n semver(): string {\n return [this.rng.int(0, 10), this.rng.int(0, 20), this.rng.int(0, 100)].join('.')\n }\n}\n","import type { Prng } from '@/prng/types'\n\n/**\n * Primitive datatype generators.\n *\n * @example\n * ```ts\n * faker.datatype.boolean() // true or false\n * faker.datatype.boolean(0.8) // true with 80% probability\n * ```\n */\nexport class Datatype {\n constructor(private readonly rng: Prng) {}\n\n /** Boolean with probability `chance` of `true` (default 0.5). */\n boolean(chance = 0.5): boolean {\n return this.rng.bool(chance)\n }\n}\n","import type { Prng } from '@/prng/types'\n\n/**\n * Generate a sample string that matches the given regular-expression pattern.\n *\n * Supports the regex subset commonly used in test data:\n * - Literals, dot, escaped characters\n * - Character classes `[a-z]`, `[^…]`, `\\d`, `\\D`, `\\w`, `\\W`, `\\s`, `\\S`\n * - Groups `(...)`, non-capturing `(?:...)`, alternation `a|b|c`\n * - Quantifiers `*`, `+`, `?`, `{n}`, `{n,m}` (lazy `?` is ignored)\n *\n * Unsupported regex features (lookbehind/lookahead, backreferences,\n * named groups) are silently treated as literals.\n *\n * @example\n * ```ts\n * generateFromRegex(/[A-Z]{3}-\\d{4}/, prng) // \"ZQX-4172\"\n * ```\n */\nexport function generateFromRegex(pattern: RegExp | string, rng: Prng): string {\n const src = pattern instanceof RegExp ? pattern.source : pattern\n const parser = new RegexParser(src)\n const tree = parser.parse()\n return render(tree, rng)\n}\n\n// ---------------------------------------------------------------------------\n// Character pools\n// ---------------------------------------------------------------------------\n\nfunction charRange(startCode: number, endCode: number): string[] {\n const out: string[] = []\n for (let c = startCode; c <= endCode; c++) out.push(String.fromCharCode(c))\n return out\n}\n\nconst D = charRange(0x30, 0x39) // '0'..'9'\nconst L = charRange(0x61, 0x7a) // 'a'..'z'\nconst U = charRange(0x41, 0x5a) // 'A'..'Z'\nconst W = [...D, ...L, ...U, '_']\nconst S = [' ', '\\t']\nconst NW = [' ', '!', '@', '#', '$', '%', '&', '*', '-', '+', '=', ';', ':', ',', '.', '/', '?']\nconst ALL = [...W, ...S, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '+']\n\nfunction expandEscape(ch: string): string[] {\n switch (ch) {\n case 'd':\n return [...D]\n case 'D':\n return [...L, ...U, '_', ' ']\n case 'w':\n return [...W]\n case 'W':\n return [...NW]\n case 's':\n return [...S]\n case 'S':\n return [...W, ...NW]\n case 'n':\n return ['\\n']\n case 't':\n return ['\\t']\n case 'r':\n return ['\\r']\n default:\n return [ch]\n }\n}\n\n// ---------------------------------------------------------------------------\n// AST nodes\n// ---------------------------------------------------------------------------\n\ninterface Quantified {\n max: number\n min: number\n node: Node\n}\ninterface SeqNode {\n items: Quantified[]\n kind: 'seq'\n}\ntype Node =\n | { kind: 'lit'; value: string }\n | { kind: 'class'; pool: string[] }\n | { kind: 'dot' }\n | SeqNode\n | { branches: SeqNode[]; kind: 'alt' }\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nclass RegexParser {\n private pos = 0\n constructor(private readonly src: string) {}\n\n parse(): Node {\n return this.parseAlt()\n }\n\n private peek(): string | undefined {\n return this.src[this.pos]\n }\n\n private parseAlt(): Node {\n const branches: SeqNode[] = [this.parseSeq()]\n while (this.peek() === '|') {\n this.pos++\n branches.push(this.parseSeq())\n }\n if (branches.length === 1) {\n const only = branches[0]\n if (only === undefined) throw new Error('[regex] unreachable: empty branches')\n return only\n }\n return { kind: 'alt', branches }\n }\n\n private parseSeq(): SeqNode {\n const items: Quantified[] = []\n while (this.pos < this.src.length && this.peek() !== ')' && this.peek() !== '|') {\n const node = this.parseAtom()\n const q = this.parseQuant()\n items.push({ node, min: q.min, max: q.max })\n if (this.peek() === '?') this.pos++ // lazy modifier on group-level — ignore\n }\n return { kind: 'seq', items }\n }\n\n private parseAtom(): Node {\n const ch = this.peek()\n if (ch === '(') {\n this.pos++\n // Handle non-capturing `(?:...)` and other special forms — we just\n // skip up to the colon and treat as a group.\n if (this.peek() === '?') {\n const colon = this.src.indexOf(':', this.pos)\n if (colon !== -1) this.pos = colon + 1\n }\n const inner = this.parseAlt()\n if (this.peek() === ')') this.pos++\n return inner\n }\n if (ch === '[') {\n this.pos++\n return { kind: 'class', pool: this.parseCharClass() }\n }\n if (ch === '.') {\n this.pos++\n return { kind: 'dot' }\n }\n if (ch === '^' || ch === '$') {\n this.pos++\n return { kind: 'lit', value: '' }\n }\n if (ch === '\\\\') {\n this.pos++\n const escaped = this.src[this.pos++] ?? ''\n return { kind: 'class', pool: expandEscape(escaped) }\n }\n this.pos++\n return { kind: 'lit', value: ch ?? '' }\n }\n\n private parseCharClass(): string[] {\n let negate = false\n if (this.peek() === '^') {\n negate = true\n this.pos++\n }\n const pool: string[] = []\n while (this.pos < this.src.length && this.peek() !== ']') {\n if (this.peek() === '\\\\') {\n this.pos++\n pool.push(...expandEscape(this.src[this.pos++] ?? ''))\n } else if (\n this.src[this.pos + 1] === '-' &&\n this.src[this.pos + 2] &&\n this.src[this.pos + 2] !== ']'\n ) {\n const fromCh = this.src[this.pos]\n const toCh = this.src[this.pos + 2]\n if (fromCh !== undefined && toCh !== undefined) {\n const from = fromCh.charCodeAt(0)\n const to = toCh.charCodeAt(0)\n for (let c = from; c <= to; c++) pool.push(String.fromCharCode(c))\n }\n this.pos += 3\n } else {\n const ch = this.src[this.pos++]\n if (ch !== undefined) pool.push(ch)\n }\n }\n if (this.peek() === ']') this.pos++\n if (negate) {\n const set = new Set(pool)\n return ALL.filter((c) => !set.has(c))\n }\n return pool.length > 0 ? pool : ['a']\n }\n\n private parseQuant(): { max: number; min: number } {\n const ch = this.peek()\n if (ch === '*') {\n this.pos++\n return { min: 0, max: 8 }\n }\n if (ch === '+') {\n this.pos++\n return { min: 1, max: 8 }\n }\n if (ch === '?') {\n this.pos++\n return { min: 0, max: 1 }\n }\n if (ch === '{') {\n const end = this.src.indexOf('}', this.pos)\n if (end !== -1) {\n const inner = this.src.slice(this.pos + 1, end)\n this.pos = end + 1\n if (this.peek() === '?') this.pos++ // lazy — ignore\n const parts = inner.split(',')\n const lo = parseInt(parts[0] ?? '1', 10)\n const hi = parts.length > 1 ? (parts[1] ? parseInt(parts[1], 10) : lo + 4) : lo\n return { min: lo, max: Math.min(hi, lo + 10) }\n }\n }\n return { min: 1, max: 1 }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Render\n// ---------------------------------------------------------------------------\n\nfunction render(node: Node, rng: Prng): string {\n switch (node.kind) {\n case 'lit':\n return node.value\n case 'class':\n return node.pool.length > 0 ? rng.pick(node.pool) : ''\n case 'dot':\n return rng.pick([...W, ' '])\n case 'seq': {\n let out = ''\n for (const item of node.items) {\n const count = rng.int(item.min, item.max)\n for (let i = 0; i < count; i++) out += render(item.node, rng)\n }\n return out\n }\n case 'alt':\n return render(rng.pick(node.branches), rng)\n }\n}\n","import type { Prng } from '@/prng/types'\nimport { generateFromRegex } from './regex'\n\nexport interface WeightedItem<T> {\n /** The value to potentially return. */\n readonly value: T\n /** Relative weight; need not sum to 1. */\n readonly weight: number\n}\n\nexport interface UniqueOptions {\n /** Maximum number of attempts before giving up. Defaults to `count * 10`. */\n maxRetries?: number\n}\n\n/**\n * General helpers — operate on arbitrary inputs, not tied to any locale or\n * faker namespace.\n *\n * @example\n * ```ts\n * faker.helpers.arrayElement([1, 2, 3]) // 2\n * faker.helpers.arrayElements([1, 2, 3, 4], 2) // [3, 1]\n * faker.helpers.shuffle([1, 2, 3]) // [2, 3, 1]\n * faker.helpers.weightedArrayElement([\n * { value: 'rare', weight: 1 },\n * { value: 'common', weight: 9 },\n * ])\n * faker.helpers.fromRegExp(/[A-Z]{3}\\d{4}/) // \"PWB7401\"\n * faker.helpers.unique(() => faker.internet.email(), 5)\n * ```\n */\nexport class Helpers {\n constructor(private readonly rng: Prng) {}\n\n arrayElement<T>(items: readonly T[]): T {\n return this.rng.pick(items)\n }\n\n /** Pick `count` distinct elements from `items` (no replacement). */\n arrayElements<T>(items: readonly T[], count?: number): T[] {\n const n = count ?? this.rng.int(1, items.length)\n if (n > items.length) {\n throw new Error(\n `[Helpers] arrayElements: requested ${n.toString()} from ${items.length.toString()} items.`,\n )\n }\n return this.shuffle(items).slice(0, n)\n }\n\n shuffle<T>(items: readonly T[]): T[] {\n const copy = [...items]\n for (let i = copy.length - 1; i > 0; i--) {\n const j = this.rng.int(0, i)\n const a = copy[i]\n const b = copy[j]\n if (a === undefined || b === undefined) continue\n copy[i] = b\n copy[j] = a\n }\n return copy\n }\n\n weightedArrayElement<T>(items: readonly WeightedItem<T>[]): T {\n if (items.length === 0) throw new Error('[Helpers] weightedArrayElement: empty list.')\n const total = items.reduce((acc, it) => acc + it.weight, 0)\n if (total <= 0) throw new Error('[Helpers] weightedArrayElement: weights sum to <= 0.')\n let target = this.rng.next() * total\n for (const it of items) {\n target -= it.weight\n if (target <= 0) return it.value\n }\n const last = items[items.length - 1]\n if (last === undefined) throw new Error('[Helpers] weightedArrayElement: unreachable')\n return last.value\n }\n\n /** Build an array of length `length` by calling `fn(index)`. */\n multiple<T>(length: number, fn: (index: number) => T): T[] {\n return Array.from({ length }, (_, i) => fn(i))\n }\n\n /** Repeat a string `count` times. */\n repeat(value: string, count: number): string {\n return value.repeat(count)\n }\n\n /** Sample-string matching a regex. */\n fromRegExp(pattern: RegExp | string): string {\n return generateFromRegex(pattern, this.rng)\n }\n\n /**\n * Collect `count` unique results from `fn`. Throws if the retry budget is\n * exhausted before reaching `count`.\n */\n unique<T>(fn: () => T, count: number, options: UniqueOptions = {}): T[] {\n const out = new Set<T>()\n const budget = options.maxRetries ?? count * 10\n let attempts = 0\n while (out.size < count && attempts < budget) {\n out.add(fn())\n attempts++\n }\n if (out.size < count) {\n throw new Error(\n `[Helpers] unique: could not produce ${count.toString()} unique values after ${budget.toString()} attempts (got ${out.size.toString()}).`,\n )\n }\n return [...out]\n }\n\n /** Pick a random `enum` value, handling numeric reverse-mappings. */\n enumValue<T>(enumObj: Record<string, T>): T {\n const numericKeys = Object.keys(enumObj).filter((k) => /^\\d+$/.test(k))\n const values =\n numericKeys.length > 0 ? (numericKeys.map((k) => enumObj[k]) as T[]) : Object.values(enumObj)\n if (values.length === 0) throw new Error('[Helpers] enumValue: enum has no values.')\n return this.rng.pick(values)\n }\n\n /** With probability `chance`, return `value`; otherwise `undefined`. */\n maybe<T>(value: T, chance = 0.5): T | undefined {\n return this.rng.bool(chance) ? value : undefined\n }\n}\n","import { createPrng } from '@/prng'\nimport type { Prng } from '@/prng/types'\nimport { LocaleRef } from './locale'\nimport { Person } from './person'\nimport { Internet } from './internet'\nimport { Location } from './location'\nimport { Lorem } from './lorem'\nimport { DateGen } from './date'\nimport { NumberGen } from './number'\nimport { StringGen } from './string'\nimport { Color } from './color'\nimport { Company } from './company'\nimport { Commerce } from './commerce'\nimport { Finance } from './finance'\nimport { Image } from './image'\nimport { System } from './system'\nimport { Datatype } from './datatype'\nimport { Helpers } from './helpers'\n\n/** Options for constructing a `Faker` instance. */\nexport interface FakerOptions {\n /** Initial locale name. Defaults to `\"en\"`. */\n locale?: string\n /** Initial PRNG seed. If omitted, a time-based seed is used. */\n seed?: number\n}\n\n/**\n * Faceted, seedable, locale-aware random-data generator.\n *\n * Every namespace shares the same PRNG and locale reference — `seed()` and\n * `locale()` mutate that shared state in place, so changes propagate without\n * re-constructing modules.\n *\n * @example\n * ```ts\n * import { Faker } from '@anil-labs/factory'\n *\n * const f = new Faker({ seed: 42, locale: 'en' })\n * f.person.fullName() // \"Olivia Patel\"\n * f.seed(42)\n * f.person.fullName() // \"Olivia Patel\" — deterministic\n *\n * // Or use the package's default instance:\n * import { faker } from '@anil-labs/factory'\n * faker.seed(1)\n * faker.internet.email()\n * ```\n */\nexport class Faker {\n private readonly rng: Prng\n private readonly localeRef: LocaleRef\n\n readonly person: Person\n readonly internet: Internet\n readonly location: Location\n readonly lorem: Lorem\n readonly date: DateGen\n readonly number: NumberGen\n readonly string: StringGen\n readonly color: Color\n readonly company: Company\n readonly commerce: Commerce\n readonly finance: Finance\n readonly image: Image\n readonly system: System\n readonly datatype: Datatype\n readonly helpers: Helpers\n\n constructor(opts: FakerOptions = {}) {\n this.rng = createPrng(opts.seed)\n this.localeRef = new LocaleRef(opts.locale ?? 'en')\n\n this.person = new Person(this.rng, this.localeRef)\n this.internet = new Internet(this.rng, this.localeRef)\n this.location = new Location(this.rng, this.localeRef)\n this.lorem = new Lorem(this.rng, this.localeRef)\n this.date = new DateGen(this.rng)\n this.number = new NumberGen(this.rng)\n this.string = new StringGen(this.rng)\n this.color = new Color(this.rng, this.localeRef)\n this.company = new Company(this.rng, this.localeRef)\n this.commerce = new Commerce(this.rng, this.localeRef)\n this.finance = new Finance(this.rng)\n this.image = new Image(this.rng)\n this.system = new System(this.rng, this.localeRef, this.string)\n this.datatype = new Datatype(this.rng)\n this.helpers = new Helpers(this.rng)\n }\n\n /** Reseed the underlying PRNG. Subsequent calls are deterministic from here. */\n seed(seed: number): this {\n this.rng.seed(seed)\n return this\n }\n\n /** Switch the active locale. Throws if unknown. */\n locale(name: string): this {\n this.localeRef.set(name)\n return this\n }\n\n /** Read the current locale identifier (e.g. `\"en\"`). */\n currentLocale(): string {\n return this.localeRef.name\n }\n\n /** Read the current seed (useful for snapshot reproduction). */\n currentSeed(): number {\n return this.rng.currentSeed\n }\n\n /**\n * Build a fresh, independent `Faker` with its own PRNG seeded from this\n * one's current state. Useful when you need to fork a deterministic stream.\n */\n fork(): Faker {\n return new Faker({ seed: this.rng.int(0, 0xffffffff), locale: this.localeRef.name })\n }\n\n /** Access the underlying PRNG. Advanced use only. */\n rawPrng(): Prng {\n return this.rng\n }\n}\n\n/** Default singleton — mutable via `faker.seed()` / `faker.locale()`. */\nexport const faker = new Faker()\n"],"mappings":"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"}