@vielzeug/illusionist 2.2.0 → 2.3.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.
- package/dist/factory.cjs.map +1 -1
- package/dist/factory.d.ts +20 -14
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js.map +1 -1
- package/dist/illusionist.cjs.map +1 -1
- package/dist/illusionist.iife.js.map +1 -1
- package/dist/illusionist.js.map +1 -1
- package/package.json +2 -2
package/dist/factory.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.cjs","names":[],"sources":["../src/factory.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\nimport * as commerceApi from './commerce/commerce';\nimport * as dateApi from './date/date';\nimport * as financeApi from './finance/finance';\nimport * as internetApi from './internet/internet';\nimport * as locationApi from './location/location';\nimport * as loremApi from './lorem/lorem';\nimport * as personApi from './person/person';\nimport { createSeed } from './seed/create-seed';\nimport * as systemApi from './system/system';\nimport type { IllusionistContext, IllusionistLocale, IllusionistOptions } from './types';\n\nexport type { IllusionistOptions } from './types';\n\nexport type Illusionist = {\n readonly person: typeof personApi
|
|
1
|
+
{"version":3,"file":"factory.cjs","names":[],"sources":["../src/factory.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\nimport * as commerceApi from './commerce/commerce';\nimport * as dateApi from './date/date';\nimport * as financeApi from './finance/finance';\nimport * as internetApi from './internet/internet';\nimport * as locationApi from './location/location';\nimport * as loremApi from './lorem/lorem';\nimport * as personApi from './person/person';\nimport { createSeed } from './seed/create-seed';\nimport * as systemApi from './system/system';\nimport type { IllusionistContext, IllusionistLocale, IllusionistOptions } from './types';\n\nexport type { IllusionistOptions } from './types';\n\n/** Strips the leading `IllusionistContext` parameter from a function type. */\ntype Bound<F> = F extends (ctx: IllusionistContext, ...args: infer A) => infer R ? (...args: A) => R : F;\n\n/** Maps a module of `(ctx, ...args) => R` functions to `(...args) => R`. */\ntype BoundApi<T> = { readonly [K in keyof T]: Bound<T[K]> };\n\nexport type Illusionist = {\n readonly person: BoundApi<typeof personApi>;\n readonly internet: BoundApi<typeof internetApi>;\n readonly commerce: BoundApi<typeof commerceApi>;\n readonly date: BoundApi<typeof dateApi>;\n readonly finance: BoundApi<typeof financeApi>;\n readonly location: BoundApi<typeof locationApi>;\n readonly lorem: BoundApi<typeof loremApi>;\n readonly system: BoundApi<typeof systemApi>;\n\n /** The seed used to initialize this instance, or `undefined` for cryptographic randomness. */\n readonly seed: number | string | undefined;\n /** The active locale data. */\n readonly locale: IllusionistLocale;\n\n dispose(): void;\n readonly disposed: boolean;\n readonly disposalSignal: AbortSignal;\n [Symbol.dispose](): void;\n};\n\n/**\n * Creates a bound illusionist instance with all categories sharing a single seeded\n * random source and locale.\n *\n * @example\n * ```ts\n * import { en } from '@vielzeug/illusionist/locales';\n *\n * const illusion = createIllusion({ seed: 12345, locale: en });\n *\n * illusion.person.fullName(); // deterministic — same seed → same result\n * illusion.internet.email();\n * illusion.commerce.price();\n * illusion.dispose(); // [Symbol.dispose]() also works\n * ```\n */\nexport function createIllusion(options: IllusionistOptions): Illusionist {\n const { locale, seed } = options;\n const source: RandomSource = createSeed(seed);\n const controller = new AbortController();\n let disposed = false;\n\n const ctx: IllusionistContext = { locale, source };\n\n const bind = <T extends Record<string, (ctx: IllusionistContext, ...args: never[]) => unknown>>(\n api: T,\n ): BoundApi<T> => {\n const bound = {} as Record<string, (...args: never[]) => unknown>;\n\n for (const [key, fn] of Object.entries(api)) {\n if (typeof fn === 'function') {\n bound[key] = (...args: never[]) => (fn as (ctx: IllusionistContext, ...args: never[]) => unknown)(ctx, ...args);\n }\n }\n\n return bound as unknown as BoundApi<T>;\n };\n\n const dispose = (): void => {\n if (disposed) return;\n\n disposed = true;\n controller.abort();\n };\n\n return {\n commerce: bind(commerceApi),\n date: bind(dateApi),\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return disposed;\n },\n finance: bind(financeApi),\n internet: bind(internetApi),\n locale,\n location: bind(locationApi),\n lorem: bind(loremApi),\n person: bind(personApi),\n seed,\n system: bind(systemApi),\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":"0TAyDA,SAAgB,EAAe,EAA0C,CACvE,GAAM,CAAE,SAAQ,QAAS,EACnB,EAAuB,EAAA,WAAW,CAAI,EACtC,EAAa,IAAI,gBACnB,EAAW,GAET,EAA0B,CAAE,SAAQ,QAAO,EAE3C,EACJ,GACgB,CAChB,IAAM,EAAQ,CAAC,EAEf,IAAK,GAAM,CAAC,EAAK,KAAO,OAAO,QAAQ,CAAG,EACpC,OAAO,GAAO,aAChB,EAAM,IAAQ,GAAG,IAAmB,EAA8D,EAAK,GAAG,CAAI,GAIlH,OAAO,CACT,EAEM,MAAsB,CACtB,IAEJ,EAAW,GACX,EAAW,MAAM,EACnB,EAEA,MAAO,CACL,SAAU,EAAK,EAAA,gBAAW,EAC1B,KAAM,EAAK,EAAA,YAAO,EAClB,IAAI,gBAA8B,CAChC,OAAO,EAAW,MACpB,EACA,UACA,IAAI,UAAoB,CACtB,OAAO,CACT,EACA,QAAS,EAAK,EAAA,eAAU,EACxB,SAAU,EAAK,EAAA,gBAAW,EAC1B,SACA,SAAU,EAAK,EAAA,gBAAW,EAC1B,MAAO,EAAK,EAAA,aAAQ,EACpB,OAAQ,EAAK,EAAA,cAAS,EACtB,OACA,OAAQ,EAAK,EAAA,cAAS,GACrB,OAAO,SAAU,CACpB,CACF"}
|
package/dist/factory.d.ts
CHANGED
|
@@ -6,17 +6,23 @@ import * as locationApi from './location/location';
|
|
|
6
6
|
import * as loremApi from './lorem/lorem';
|
|
7
7
|
import * as personApi from './person/person';
|
|
8
8
|
import * as systemApi from './system/system';
|
|
9
|
-
import type { IllusionistLocale, IllusionistOptions } from './types';
|
|
9
|
+
import type { IllusionistContext, IllusionistLocale, IllusionistOptions } from './types';
|
|
10
10
|
export type { IllusionistOptions } from './types';
|
|
11
|
+
/** Strips the leading `IllusionistContext` parameter from a function type. */
|
|
12
|
+
type Bound<F> = F extends (ctx: IllusionistContext, ...args: infer A) => infer R ? (...args: A) => R : F;
|
|
13
|
+
/** Maps a module of `(ctx, ...args) => R` functions to `(...args) => R`. */
|
|
14
|
+
type BoundApi<T> = {
|
|
15
|
+
readonly [K in keyof T]: Bound<T[K]>;
|
|
16
|
+
};
|
|
11
17
|
export type Illusionist = {
|
|
12
|
-
readonly person: typeof personApi
|
|
13
|
-
readonly internet: typeof internetApi
|
|
14
|
-
readonly commerce: typeof commerceApi
|
|
15
|
-
readonly date: typeof dateApi
|
|
16
|
-
readonly finance: typeof financeApi
|
|
17
|
-
readonly location: typeof locationApi
|
|
18
|
-
readonly lorem: typeof loremApi
|
|
19
|
-
readonly system: typeof systemApi
|
|
18
|
+
readonly person: BoundApi<typeof personApi>;
|
|
19
|
+
readonly internet: BoundApi<typeof internetApi>;
|
|
20
|
+
readonly commerce: BoundApi<typeof commerceApi>;
|
|
21
|
+
readonly date: BoundApi<typeof dateApi>;
|
|
22
|
+
readonly finance: BoundApi<typeof financeApi>;
|
|
23
|
+
readonly location: BoundApi<typeof locationApi>;
|
|
24
|
+
readonly lorem: BoundApi<typeof loremApi>;
|
|
25
|
+
readonly system: BoundApi<typeof systemApi>;
|
|
20
26
|
/** The seed used to initialize this instance, or `undefined` for cryptographic randomness. */
|
|
21
27
|
readonly seed: number | string | undefined;
|
|
22
28
|
/** The active locale data. */
|
|
@@ -34,12 +40,12 @@ export type Illusionist = {
|
|
|
34
40
|
* ```ts
|
|
35
41
|
* import { en } from '@vielzeug/illusionist/locales';
|
|
36
42
|
*
|
|
37
|
-
* const
|
|
43
|
+
* const illusion = createIllusion({ seed: 12345, locale: en });
|
|
38
44
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
45
|
+
* illusion.person.fullName(); // deterministic — same seed → same result
|
|
46
|
+
* illusion.internet.email();
|
|
47
|
+
* illusion.commerce.price();
|
|
48
|
+
* illusion.dispose(); // [Symbol.dispose]() also works
|
|
43
49
|
* ```
|
|
44
50
|
*/
|
|
45
51
|
export declare function createIllusion(options: IllusionistOptions): Illusionist;
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEzF,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,8EAA8E;AAC9E,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEzG,4EAA4E;AAC5E,KAAK,QAAQ,CAAC,CAAC,IAAI;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,UAAU,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,SAAS,CAAC,CAAC;IAE5C,8FAA8F;IAC9F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3C,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAiDvE"}
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","names":[],"sources":["../src/factory.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\nimport * as commerceApi from './commerce/commerce';\nimport * as dateApi from './date/date';\nimport * as financeApi from './finance/finance';\nimport * as internetApi from './internet/internet';\nimport * as locationApi from './location/location';\nimport * as loremApi from './lorem/lorem';\nimport * as personApi from './person/person';\nimport { createSeed } from './seed/create-seed';\nimport * as systemApi from './system/system';\nimport type { IllusionistContext, IllusionistLocale, IllusionistOptions } from './types';\n\nexport type { IllusionistOptions } from './types';\n\nexport type Illusionist = {\n readonly person: typeof personApi
|
|
1
|
+
{"version":3,"file":"factory.js","names":[],"sources":["../src/factory.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\nimport * as commerceApi from './commerce/commerce';\nimport * as dateApi from './date/date';\nimport * as financeApi from './finance/finance';\nimport * as internetApi from './internet/internet';\nimport * as locationApi from './location/location';\nimport * as loremApi from './lorem/lorem';\nimport * as personApi from './person/person';\nimport { createSeed } from './seed/create-seed';\nimport * as systemApi from './system/system';\nimport type { IllusionistContext, IllusionistLocale, IllusionistOptions } from './types';\n\nexport type { IllusionistOptions } from './types';\n\n/** Strips the leading `IllusionistContext` parameter from a function type. */\ntype Bound<F> = F extends (ctx: IllusionistContext, ...args: infer A) => infer R ? (...args: A) => R : F;\n\n/** Maps a module of `(ctx, ...args) => R` functions to `(...args) => R`. */\ntype BoundApi<T> = { readonly [K in keyof T]: Bound<T[K]> };\n\nexport type Illusionist = {\n readonly person: BoundApi<typeof personApi>;\n readonly internet: BoundApi<typeof internetApi>;\n readonly commerce: BoundApi<typeof commerceApi>;\n readonly date: BoundApi<typeof dateApi>;\n readonly finance: BoundApi<typeof financeApi>;\n readonly location: BoundApi<typeof locationApi>;\n readonly lorem: BoundApi<typeof loremApi>;\n readonly system: BoundApi<typeof systemApi>;\n\n /** The seed used to initialize this instance, or `undefined` for cryptographic randomness. */\n readonly seed: number | string | undefined;\n /** The active locale data. */\n readonly locale: IllusionistLocale;\n\n dispose(): void;\n readonly disposed: boolean;\n readonly disposalSignal: AbortSignal;\n [Symbol.dispose](): void;\n};\n\n/**\n * Creates a bound illusionist instance with all categories sharing a single seeded\n * random source and locale.\n *\n * @example\n * ```ts\n * import { en } from '@vielzeug/illusionist/locales';\n *\n * const illusion = createIllusion({ seed: 12345, locale: en });\n *\n * illusion.person.fullName(); // deterministic — same seed → same result\n * illusion.internet.email();\n * illusion.commerce.price();\n * illusion.dispose(); // [Symbol.dispose]() also works\n * ```\n */\nexport function createIllusion(options: IllusionistOptions): Illusionist {\n const { locale, seed } = options;\n const source: RandomSource = createSeed(seed);\n const controller = new AbortController();\n let disposed = false;\n\n const ctx: IllusionistContext = { locale, source };\n\n const bind = <T extends Record<string, (ctx: IllusionistContext, ...args: never[]) => unknown>>(\n api: T,\n ): BoundApi<T> => {\n const bound = {} as Record<string, (...args: never[]) => unknown>;\n\n for (const [key, fn] of Object.entries(api)) {\n if (typeof fn === 'function') {\n bound[key] = (...args: never[]) => (fn as (ctx: IllusionistContext, ...args: never[]) => unknown)(ctx, ...args);\n }\n }\n\n return bound as unknown as BoundApi<T>;\n };\n\n const dispose = (): void => {\n if (disposed) return;\n\n disposed = true;\n controller.abort();\n };\n\n return {\n commerce: bind(commerceApi),\n date: bind(dateApi),\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return disposed;\n },\n finance: bind(financeApi),\n internet: bind(internetApi),\n locale,\n location: bind(locationApi),\n lorem: bind(loremApi),\n person: bind(personApi),\n seed,\n system: bind(systemApi),\n [Symbol.dispose]: dispose,\n };\n}\n"],"mappings":";;;;;;;;;;AAyDA,SAAgB,EAAe,GAA0C;CACvE,IAAM,EAAE,WAAQ,YAAS,GACnB,IAAuB,EAAW,CAAI,GACtC,IAAa,IAAI,gBAAgB,GACnC,IAAW,IAET,IAA0B;EAAE;EAAQ;CAAO,GAE3C,KACJ,MACgB;EAChB,IAAM,IAAQ,CAAC;EAEf,KAAK,IAAM,CAAC,GAAK,MAAO,OAAO,QAAQ,CAAG,GACxC,AAAI,OAAO,KAAO,eAChB,EAAM,MAAQ,GAAG,MAAmB,EAA8D,GAAK,GAAG,CAAI;EAIlH,OAAO;CACT,GAEM,UAAsB;EACtB,MAEJ,IAAW,IACX,EAAW,MAAM;CACnB;CAEA,OAAO;EACL,UAAU,EAAK,CAAW;EAC1B,MAAM,EAAK,CAAO;EAClB,IAAI,iBAA8B;GAChC,OAAO,EAAW;EACpB;EACA;EACA,IAAI,WAAoB;GACtB,OAAO;EACT;EACA,SAAS,EAAK,CAAU;EACxB,UAAU,EAAK,CAAW;EAC1B;EACA,UAAU,EAAK,CAAW;EAC1B,OAAO,EAAK,CAAQ;EACpB,QAAQ,EAAK,CAAS;EACtB;EACA,QAAQ,EAAK,CAAS;GACrB,OAAO,UAAU;CACpB;AACF"}
|
package/dist/illusionist.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"illusionist.cjs","names":["e","e","t","e","n","t","t","e"],"sources":["../src/_helpers/float.ts","../../arsenal/dist/random/uuid.js","../../arsenal/dist/random/_index.js","../../arsenal/dist/random/random.js","../../arsenal/dist/random/draw.js","../src/_helpers/int.ts","../src/_helpers/string.ts","../src/commerce/data.ts","../src/commerce/commerce.ts","../src/date/date.ts","../src/errors.ts","../src/finance/data.ts","../src/finance/finance.ts","../src/internet/data.ts","../src/internet/internet.ts","../src/location/location.ts","../src/lorem/data.ts","../src/lorem/lorem.ts","../src/_helpers/boolean.ts","../src/person/person.ts","../../arsenal/dist/errors.js","../../arsenal/dist/object/hash.js","../src/seed/mulberry32.ts","../src/seed/create-seed.ts","../src/system/data.ts","../src/system/system.ts","../src/factory.ts","../src/location/data/de.ts","../src/person/data/de.ts","../src/locales/de.ts","../src/location/data/en.ts","../src/person/data/en.ts","../src/locales/en.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/**\n * Generates a random float in `[min, max)`.\n * Pass `min` = `max` for a constant; the result is still `min` (not `max`).\n */\nexport function float(min: number, max: number, source?: RandomSource): number {\n if (min > max) return min;\n\n const span = max - min;\n const raw = source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n\n return min + raw * span;\n}\n\n/** Generates a random float with a fixed number of decimal places. */\nexport function floatFixed(min: number, max: number, decimals = 2, source?: RandomSource): number {\n const factor = 10 ** decimals;\n const scaled = float(min * factor, max * factor, source);\n\n return Math.round(scaled) / factor;\n}\n","//#region src/random/uuid.ts\nfunction e() {\n\treturn crypto.randomUUID();\n}\n//#endregion\nexport { e as uuid };\n\n//# sourceMappingURL=uuid.js.map","//#region src/random/_index.ts\nfunction e(e, t) {\n\tlet n = t?.next() ?? crypto.getRandomValues(/* @__PURE__ */ new Uint32Array(1))[0] / 4294967296;\n\tif (!Number.isFinite(n) || n < 0 || n >= 1) throw RangeError(\"random source must return a finite number in [0, 1)\");\n\treturn Math.floor(n * e);\n}\n//#endregion\nexport { e as randomIndex };\n\n//# sourceMappingURL=_index.js.map","import { randomIndex as e } from \"./_index.js\";\n//#region src/random/random.ts\nfunction t(t, n, r) {\n\tif (t > n) throw RangeError(\"random: minimum value must not be greater than maximum value\");\n\treturn e(n - t + 1, r) + t;\n}\n//#endregion\nexport { t as random };\n\n//# sourceMappingURL=random.js.map","import { randomIndex as e } from \"./_index.js\";\nimport { random as t } from \"./random.js\";\n//#region src/random/draw.ts\nfunction n(e, n) {\n\tif (e.length !== 0) return e[t(0, e.length - 1, n)];\n}\nfunction r(t, n, r) {\n\tlet i = Math.max(0, Math.min(t.length, Math.floor(n)));\n\tif (i === 0) return [];\n\tif (i === t.length) return [...t];\n\tlet a = [...t];\n\tfor (let t = a.length - 1; t > 0; t--) {\n\t\tlet n = e(t + 1, r), i = a[t];\n\t\ta[t] = a[n], a[n] = i;\n\t}\n\treturn a.slice(0, i);\n}\n//#endregion\nexport { n as draw, r as drawMany };\n\n//# sourceMappingURL=draw.js.map","import type { RandomSource } from '@vielzeug/arsenal/random';\nimport { random } from '@vielzeug/arsenal/random';\n\n/** Generates a random integer in `[min, max]` (inclusive). */\nexport function int(min: number, max: number, source?: RandomSource): number {\n return random(min, max, source);\n}\n","import type { RandomSource } from '@vielzeug/arsenal/random';\nimport { draw } from '@vielzeug/arsenal/random';\n\n/** Picks a random element from an array. Returns `undefined` for empty arrays. */\nexport function pick<T>(array: readonly T[], source?: RandomSource): T | undefined {\n return draw([...array], source);\n}\n\n/** Generates a string of random digits with a fixed length. */\nexport function numericString(length: number, source?: RandomSource): string {\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += Math.floor((source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * 10);\n }\n\n return result;\n}\n\n/** Generates a random hex string of the given length. */\nexport function hexString(length: number, source?: RandomSource): string {\n const chars = '0123456789abcdef';\n let result = '';\n\n for (let i = 0; i < length; i++) {\n const idx = Math.floor((source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * 16);\n\n result += chars[idx];\n }\n\n return result;\n}\n\n/** Generates a random alphanumeric string of the given length. */\nexport function alphanumeric(length: number, source?: RandomSource): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n\n for (let i = 0; i < length; i++) {\n const idx = Math.floor(\n (source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * chars.length,\n );\n\n result += chars[idx];\n }\n\n return result;\n}\n\n/** Generates a random Base58 string (no 0, O, I, l) — used for Bitcoin-style addresses. */\nexport function base58String(length: number, source?: RandomSource): string {\n const chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n let result = '';\n\n for (let i = 0; i < length; i++) {\n const idx = Math.floor(\n (source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * chars.length,\n );\n\n result += chars[idx];\n }\n\n return result;\n}\n","export const COMMERCE_DATA = {\n departments: [\n 'Books',\n 'Movies',\n 'Music',\n 'Games',\n 'Electronics',\n 'Computers',\n 'Home',\n 'Garden',\n 'Tools',\n 'Grocery',\n 'Health',\n 'Beauty',\n 'Toys',\n 'Kids',\n 'Baby',\n 'Clothing',\n 'Shoes',\n 'Jewelry',\n 'Sports',\n 'Outdoors',\n 'Automotive',\n ],\n productAdjectives: [\n 'Small',\n 'Ergonomic',\n 'Rustic',\n 'Intelligent',\n 'Gorgeous',\n 'Incredible',\n 'Fantastic',\n 'Practical',\n 'Sleek',\n 'Awesome',\n 'Generic',\n 'Handmade',\n 'Licensed',\n 'Refined',\n 'Unbranded',\n 'Tasty',\n ],\n productMaterials: [\n 'Steel',\n 'Wooden',\n 'Concrete',\n 'Plastic',\n 'Cotton',\n 'Granite',\n 'Rubber',\n 'Metal',\n 'Soft',\n 'Fresh',\n 'Frozen',\n ],\n productNouns: [\n 'Chair',\n 'Car',\n 'Computer',\n 'Gloves',\n 'Pants',\n 'Shirt',\n 'Table',\n 'Shoes',\n 'Hat',\n 'Plate',\n 'Knife',\n 'Bottle',\n 'Coat',\n 'Lamp',\n 'Keyboard',\n 'Bag',\n 'Bench',\n 'Clock',\n 'Watch',\n 'Wallet',\n ],\n} as const;\n","import { type Currency, EUR, GBP, type Money, money, USD } from '@vielzeug/coins';\n\nimport { floatFixed } from '../_helpers/float';\nimport { int } from '../_helpers/int';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { COMMERCE_DATA } from './data';\n\nconst CURRENCIES: Record<'USD' | 'EUR' | 'GBP', Currency> = { EUR, GBP, USD };\n\nexport type PriceOptions = {\n readonly min?: number;\n readonly max?: number;\n readonly currency?: 'USD' | 'EUR' | 'GBP';\n};\n\nexport function productAdjective(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.productAdjectives, ctx.source)!;\n}\n\nexport function productMaterial(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.productMaterials, ctx.source)!;\n}\n\nexport function productNoun(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.productNouns, ctx.source)!;\n}\n\nexport function productName(ctx: IllusionistContext): string {\n return `${productAdjective(ctx)} ${productMaterial(ctx)} ${productNoun(ctx)}`;\n}\n\nexport function department(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.departments, ctx.source)!;\n}\n\nexport function price(ctx: IllusionistContext, opts: PriceOptions = {}): Money {\n const min = opts.min ?? 0.01;\n const max = opts.max ?? 1000;\n const code = opts.currency ?? 'USD';\n const amount = floatFixed(min, max, 2, ctx.source);\n\n return money(amount.toFixed(2), CURRENCIES[code]);\n}\n\nexport function productDescription(ctx: IllusionistContext): string {\n const sentences = int(1, 2, ctx.source);\n const parts: string[] = [];\n\n for (let i = 0; i < sentences; i++) {\n const adjective = pick(COMMERCE_DATA.productAdjectives, ctx.source)!;\n const material = pick(COMMERCE_DATA.productMaterials, ctx.source)!;\n const noun = pick(COMMERCE_DATA.productNouns, ctx.source)!;\n const department = pick(COMMERCE_DATA.departments, ctx.source)!;\n\n parts.push(\n `The ${adjective.toLowerCase()} ${material.toLowerCase()} ${noun.toLowerCase()} is a great choice for your ${department.toLowerCase()} needs.`,\n );\n }\n\n return parts.join(' ');\n}\n","import { shift, Temporal } from '@vielzeug/tempo';\n\nimport { int } from '../_helpers/int';\nimport type { IllusionistContext } from '../types';\n\ntype DateOptions = {\n years?: number;\n ref?: Temporal.ZonedDateTime;\n};\n\nfunction resolveRef(ref?: Temporal.ZonedDateTime): Temporal.ZonedDateTime {\n return ref ?? Temporal.Now.zonedDateTimeISO('UTC');\n}\n\n/**\n * Generates a past date within the given number of years from `ref` (default: now).\n */\nexport function past(ctx: IllusionistContext, options?: DateOptions): Temporal.ZonedDateTime {\n const ref = resolveRef(options?.ref);\n const years = options?.years ?? 1;\n const maxSeconds = years * 365 * 24 * 60 * 60;\n const minSeconds = 1;\n\n return shift(ref, { seconds: -int(minSeconds, maxSeconds, ctx.source) });\n}\n\n/**\n * Generates a future date within the given number of years from `ref` (default: now).\n */\nexport function future(ctx: IllusionistContext, options?: DateOptions): Temporal.ZonedDateTime {\n const ref = resolveRef(options?.ref);\n const years = options?.years ?? 1;\n const maxSeconds = years * 365 * 24 * 60 * 60;\n\n return shift(ref, { seconds: int(1, maxSeconds, ctx.source) });\n}\n\n/**\n * Generates a recent date within the given number of days from `ref` (default: now).\n */\nexport function recent(\n ctx: IllusionistContext,\n options?: { days?: number; ref?: Temporal.ZonedDateTime },\n): Temporal.ZonedDateTime {\n const ref = resolveRef(options?.ref);\n const days = options?.days ?? 1;\n const maxSeconds = days * 24 * 60 * 60;\n\n return shift(ref, { seconds: -int(1, maxSeconds, ctx.source) });\n}\n\n/**\n * Generates a date between `from` and `to`.\n */\nexport function between(\n ctx: IllusionistContext,\n from: Temporal.ZonedDateTime,\n to: Temporal.ZonedDateTime,\n): Temporal.ZonedDateTime {\n const fromNs = from.toInstant().epochNanoseconds;\n const toNs = to.toInstant().epochNanoseconds;\n\n if (fromNs > toNs) {\n return from;\n }\n\n const spanNs = toNs - fromNs;\n const spanSeconds = Number(spanNs / 1_000_000_000n);\n const offsetSeconds = Math.floor(ctx.source.next() * spanSeconds);\n\n return from.add({ seconds: offsetSeconds });\n}\n\n/**\n * Generates a random birthday — a date with a random year (default 18-80 years ago) and random month/day.\n */\nexport function birthday(\n ctx: IllusionistContext,\n options?: { minAge?: number; maxAge?: number; ref?: Temporal.ZonedDateTime },\n): Temporal.PlainDate {\n const ref = resolveRef(options?.ref);\n const minAge = options?.minAge ?? 18;\n const maxAge = options?.maxAge ?? 80;\n const age = int(minAge, maxAge, ctx.source);\n const month = int(1, 12, ctx.source);\n const day = int(1, 28, ctx.source);\n\n return ref.toPlainDate().subtract({ years: age }).with({ day, month });\n}\n\n/**\n * Returns a random weekday name.\n */\nexport function weekday(ctx: IllusionistContext, locale?: string): string {\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n const loc = locale ?? ctx.locale.code;\n const localized =\n loc === 'de' ? ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'] : days;\n\n return localized[int(0, 6, ctx.source)]!;\n}\n\n/**\n * Returns a random month name.\n */\nexport function month(ctx: IllusionistContext, locale?: string): string {\n const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n const loc = locale ?? ctx.locale.code;\n const localized =\n loc === 'de'\n ? [\n 'Januar',\n 'Februar',\n 'März',\n 'April',\n 'Mai',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'Dezember',\n ]\n : months;\n\n return localized[int(0, 11, ctx.source)]!;\n}\n","/** Base class for all illusionist errors. Use `instanceof IllusionistError` to catch any illusionist-originated error. */\nexport class IllusionistError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when the seeded random source produces an invalid value. */\nexport class IllusionistSeedError extends IllusionistError {}\n","export const FINANCE_DATA = {\n banks: [\n 'Deutsche Bank',\n 'Commerzbank',\n 'Sparkasse',\n 'Barclays',\n 'HSBC',\n 'BNP Paribas',\n 'Santander',\n 'ING',\n 'UniCredit',\n 'UBS',\n ],\n creditCardIins: { amex: ['34', '37'], mastercard: ['51', '52', '53', '54', '55'], visa: ['4'] },\n ibanCountryCodes: { AT: 'AT', BE: 'BE', CH: 'CH', DE: 'DE', ES: 'ES', FR: 'FR', GB: 'GB', IT: 'IT', NL: 'NL' },\n ibanLengths: { AT: 20, BE: 16, CH: 21, DE: 22, ES: 24, FR: 27, GB: 22, IT: 27, NL: 18 },\n transactionTypes: ['payment', 'transfer', 'deposit', 'withdrawal', 'refund', 'fee'],\n} as const;\n","import { type Currency, EUR, GBP, type Money, money, USD } from '@vielzeug/coins';\n\nimport { floatFixed } from '../_helpers/float';\nimport { int } from '../_helpers/int';\nimport { alphanumeric, base58String, hexString, numericString, pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { FINANCE_DATA } from './data';\n\nconst CURRENCIES: Record<'USD' | 'EUR' | 'GBP', Currency> = { EUR, GBP, USD };\n\nconst CREDIT_CARD_TYPES = ['visa', 'mastercard', 'amex'] as const;\ntype CreditCardType = (typeof CREDIT_CARD_TYPES)[number];\n\nconst IBAN_COUNTRIES = Object.keys(FINANCE_DATA.ibanCountryCodes) as (keyof typeof FINANCE_DATA.ibanCountryCodes)[];\n\nconst LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\nfunction letters(count: number, ctx: IllusionistContext): string {\n let result = '';\n\n for (let i = 0; i < count; i++) {\n result += LETTERS[Math.floor(ctx.source.next() * LETTERS.length)];\n }\n\n return result;\n}\n\n/** Computes `n mod 97` for an arbitrarily long numeric string. */\nfunction mod97(numeric: string): number {\n let remainder = 0;\n\n for (const ch of numeric) {\n remainder = (remainder * 10 + Number(ch)) % 97;\n }\n\n return remainder;\n}\n\n/** Computes the two IBAN check digits so the resulting IBAN passes the mod-97 validation. */\nfunction ibanCheckDigits(country: string, bban: string): string {\n const rearranged = `${bban}${country}00`;\n const numeric = rearranged.replace(/[A-Z]/g, (c) => String(c.charCodeAt(0) - 55));\n const check = 98 - mod97(numeric);\n\n return check.toString().padStart(2, '0');\n}\n\n/** Computes the Luhn check digit for a partial card number (the final digit is appended). */\nfunction luhnCheckDigit(partial: string): string {\n const digits = partial.split('').map(Number);\n let sum = 0;\n let double = true;\n\n for (let i = digits.length - 1; i >= 0; i--) {\n let d = digits[i]!;\n\n if (double) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n\n sum += d;\n double = !double;\n }\n\n const check = (10 - (sum % 10)) % 10;\n\n return String(check);\n}\n\nexport type AmountOptions = {\n readonly min?: number;\n readonly max?: number;\n readonly currency?: 'USD' | 'EUR' | 'GBP';\n};\n\nexport function amount(ctx: IllusionistContext, opts: AmountOptions = {}): Money {\n const min = opts.min ?? 100;\n const max = opts.max ?? 10000;\n const code = opts.currency ?? 'USD';\n const value = floatFixed(min, max, 2, ctx.source);\n\n return money(value.toFixed(2), CURRENCIES[code]);\n}\n\nexport function iban(ctx: IllusionistContext, countryCode?: string): string {\n const country = (countryCode ?? pick(IBAN_COUNTRIES, ctx.source)!) as keyof typeof FINANCE_DATA.ibanLengths;\n\n if (!(country in FINANCE_DATA.ibanLengths)) {\n throw new RangeError(`iban: unsupported country code \"${countryCode}\". Supported: ${IBAN_COUNTRIES.join(', ')}`);\n }\n\n const totalLength = FINANCE_DATA.ibanLengths[country];\n const bbanLength = totalLength - 4;\n const bban = numericString(bbanLength, ctx.source);\n const checkDigits = ibanCheckDigits(country, bban);\n\n return `${country}${checkDigits}${bban}`;\n}\n\nexport function bic(ctx: IllusionistContext): string {\n const bankCode = letters(4, ctx);\n const country = letters(2, ctx);\n const location = alphanumeric(2, ctx.source).toUpperCase();\n const useBranch = int(0, 1, ctx.source) === 1;\n const branch = useBranch ? alphanumeric(3, ctx.source).toUpperCase() : '';\n\n return `${bankCode}${country}${location}${branch}`;\n}\n\nexport function creditCardNumber(ctx: IllusionistContext, type?: CreditCardType): string {\n const cardType = type ?? pick(CREDIT_CARD_TYPES, ctx.source)!;\n const iin = pick(FINANCE_DATA.creditCardIins[cardType], ctx.source)!;\n const totalLength = cardType === 'amex' ? 15 : 16;\n const partial = iin + numericString(totalLength - iin.length - 1, ctx.source);\n const checkDigit = luhnCheckDigit(partial);\n\n return `${partial}${checkDigit}`;\n}\n\nexport function creditCardCVV(ctx: IllusionistContext, type?: CreditCardType): string {\n const cardType = type ?? pick(CREDIT_CARD_TYPES, ctx.source)!;\n const length = cardType === 'amex' ? 4 : 3;\n\n return numericString(length, ctx.source);\n}\n\nexport function bitcoinAddress(ctx: IllusionistContext): string {\n const prefix = pick(['1', '3', 'bc1'], ctx.source)!;\n const suffixLength = int(25, 34, ctx.source);\n\n return `${prefix}${base58String(suffixLength, ctx.source)}`;\n}\n\nexport function ethereumAddress(ctx: IllusionistContext): string {\n return `0x${hexString(40, ctx.source)}`;\n}\n\nexport function transactionType(ctx: IllusionistContext): string {\n return pick(FINANCE_DATA.transactionTypes, ctx.source)!;\n}\n\nexport function bank(ctx: IllusionistContext): string {\n return pick(FINANCE_DATA.banks, ctx.source)!;\n}\n","export const INTERNET_DATA = {\n domains: ['example', 'test', 'demo', 'mail', 'web', 'tech', 'app', 'cloud', 'dev', 'info'],\n httpMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n mimeTypes: [\n 'text/plain',\n 'text/html',\n 'application/json',\n 'application/xml',\n 'application/octet-stream',\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/svg+xml',\n 'application/pdf',\n 'audio/mpeg',\n 'video/mp4',\n ],\n protocols: ['https', 'http'],\n statusCodes: [200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 405, 409, 418, 422, 429, 500, 502, 503],\n tlds: ['com', 'org', 'net', 'io', 'dev', 'co', 'app', 'tech', 'cloud', 'ai'],\n userAgents: [\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15',\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',\n 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',\n ],\n} as const;\n","import { int } from '../_helpers/int';\nimport { alphanumeric, hexString, pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { INTERNET_DATA } from './data';\n\nconst SPECIAL_CHARS = '!@#$%^&*()_+-=[]{}|;:,.<>?';\n\nconst URL_PATH_WORDS = [\n 'api',\n 'v1',\n 'v2',\n 'users',\n 'posts',\n 'comments',\n 'articles',\n 'products',\n 'orders',\n 'items',\n 'search',\n 'auth',\n 'login',\n 'logout',\n 'profile',\n 'settings',\n 'dashboard',\n 'files',\n 'images',\n 'assets',\n 'static',\n 'public',\n 'private',\n 'admin',\n 'reports',\n];\n\n/** Generates an email address of the form `firstname.lastname@domain.tld`. */\nexport function email(ctx: IllusionistContext): string {\n const first = (\n pick(ctx.locale.person.firstNameFemale, ctx.source) ??\n pick(ctx.locale.person.firstNameMale, ctx.source) ??\n 'user'\n ).toLowerCase();\n const last = (pick(ctx.locale.person.lastName, ctx.source) ?? 'name').toLowerCase();\n const domain = pick(INTERNET_DATA.domains, ctx.source) ?? 'example';\n const tld = pick(INTERNET_DATA.tlds, ctx.source) ?? 'com';\n return `${first}.${last}@${domain}.${tld}`;\n}\n\n/** Generates a username: either a random alphanumeric string or a `firstname.lastname` pattern. */\nexport function username(ctx: IllusionistContext): string {\n if (int(0, 1, ctx.source) === 0) {\n return alphanumeric(int(6, 12, ctx.source), ctx.source);\n }\n const first = (\n pick(ctx.locale.person.firstNameFemale, ctx.source) ??\n pick(ctx.locale.person.firstNameMale, ctx.source) ??\n 'user'\n ).toLowerCase();\n const last = (pick(ctx.locale.person.lastName, ctx.source) ?? 'name').toLowerCase();\n return `${first}.${last}`;\n}\n\n/** Options for {@link password}. */\nexport type PasswordOptions = {\n /** Password length. Defaults to `12`. */\n length?: number;\n /** When `true`, builds a memorable password from name fragments and digits. */\n memorable?: boolean;\n};\n\n/** Generates a password mixing upper/lowercase letters, digits, and special characters. */\nexport function password(ctx: IllusionistContext, opts: PasswordOptions = {}): string {\n const length = opts.length ?? 12;\n\n if (opts.memorable) {\n const first = (\n pick(ctx.locale.person.firstNameFemale, ctx.source) ??\n pick(ctx.locale.person.firstNameMale, ctx.source) ??\n 'user'\n ).toLowerCase();\n const last = (pick(ctx.locale.person.lastName, ctx.source) ?? 'name').toLowerCase();\n const num = String(int(10, 99, ctx.source));\n const special = pick(SPECIAL_CHARS.split(''), ctx.source) ?? '!';\n const base = `${first}${last}${num}${special}`;\n if (base.length <= length) return base + alphanumeric(length - base.length, ctx.source);\n // Truncation would cut the special char/number — put them first, then fill from the name.\n const essential = `${num}${special}`;\n const remaining = length - essential.length;\n const namePart = remaining > 0 ? (first + last).slice(0, remaining) : '';\n const result = essential + namePart;\n\n return result.length < length ? result + alphanumeric(length - result.length, ctx.source) : result.slice(0, length);\n }\n\n const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const lower = 'abcdefghijklmnopqrstuvwxyz';\n const digits = '0123456789';\n const pools = [upper, lower, digits, SPECIAL_CHARS];\n\n // Guarantee at least one char from each pool, then fill the rest randomly.\n const chars: string[] = [];\n for (const pool of pools) {\n chars.push(pool[Math.floor(ctx.source.next() * pool.length)] ?? upper[0]!);\n }\n const all = upper + lower + digits + SPECIAL_CHARS;\n while (chars.length < length) {\n chars.push(all[Math.floor(ctx.source.next() * all.length)] ?? 'a');\n }\n\n // Shuffle via Fisher-Yates using ctx.source.\n for (let i = chars.length - 1; i > 0; i--) {\n const j = Math.floor(ctx.source.next() * (i + 1));\n [chars[i], chars[j]] = [chars[j]!, chars[i]!];\n }\n\n return chars.slice(0, length).join('');\n}\n\n/** Generates a URL of the form `protocol://sub.domain.tld/path/...`. */\nexport function url(ctx: IllusionistContext): string {\n const protocol = pick(INTERNET_DATA.protocols, ctx.source) ?? 'https';\n const sub = pick(['www', 'api', 'app', 'mail', 'static', 'cdn'], ctx.source) ?? 'www';\n const domain = pick(INTERNET_DATA.domains, ctx.source) ?? 'example';\n const tld = pick(INTERNET_DATA.tlds, ctx.source) ?? 'com';\n const host = `${sub}.${domain}.${tld}`;\n\n const segmentCount = int(1, 4, ctx.source);\n const segments: string[] = [];\n for (let i = 0; i < segmentCount; i++) {\n const word = pick(URL_PATH_WORDS, ctx.source) ?? 'api';\n // Occasionally append a numeric or short alphanumeric suffix to a segment.\n if (int(0, 2, ctx.source) === 0) {\n segments.push(`${word}-${alphanumeric(int(2, 5), ctx.source).toLowerCase()}`);\n } else {\n segments.push(word);\n }\n }\n\n return `${protocol}://${host}/${segments.join('/')}`;\n}\n\n/** Generates a domain name of the form `domain.tld`. */\nexport function domainName(ctx: IllusionistContext): string {\n const domain = pick(INTERNET_DATA.domains, ctx.source) ?? 'example';\n const tld = pick(INTERNET_DATA.tlds, ctx.source) ?? 'com';\n return `${domain}.${tld}`;\n}\n\n/** Generates an IPv4 or IPv6 address. Defaults to IPv4. */\nexport function ip(ctx: IllusionistContext, version: 4 | 6 = 4): string {\n if (version === 6) {\n const groups: string[] = [];\n for (let i = 0; i < 8; i++) {\n groups.push(hexString(4, ctx.source));\n }\n return groups.join(':');\n }\n const octets: number[] = [];\n for (let i = 0; i < 4; i++) {\n octets.push(int(0, 255, ctx.source));\n }\n return octets.join('.');\n}\n\n/** Generates a MAC address of the form `XX:XX:XX:XX:XX:XX`. */\nexport function mac(ctx: IllusionistContext): string {\n const parts: string[] = [];\n for (let i = 0; i < 6; i++) {\n parts.push(hexString(2, ctx.source));\n }\n return parts.join(':');\n}\n\n/** Picks a random user agent string. */\nexport function userAgent(ctx: IllusionistContext): string {\n return pick(INTERNET_DATA.userAgents, ctx.source) ?? INTERNET_DATA.userAgents[0]!;\n}\n\n/** Picks a random HTTP method. */\nexport function httpMethod(ctx: IllusionistContext): string {\n return pick(INTERNET_DATA.httpMethods, ctx.source) ?? 'GET';\n}\n\n/** Picks a random HTTP status code. */\nexport function statusCode(ctx: IllusionistContext): number {\n return pick(INTERNET_DATA.statusCodes, ctx.source) ?? 200;\n}\n\n/** Picks a random MIME type. */\nexport function mimeType(ctx: IllusionistContext): string {\n return pick(INTERNET_DATA.mimeTypes, ctx.source) ?? 'text/plain';\n}\n","import { float } from '../_helpers/float';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext, LocationLocaleData } from '../types';\n\nfunction data(ctx: IllusionistContext): LocationLocaleData {\n return ctx.locale.location;\n}\n\n/** A geographic coordinate pair. */\nexport type Coordinate = {\n lat: number;\n lng: number;\n};\n\n/** Picks a random city from the locale dataset. */\nexport function city(ctx: IllusionistContext): string {\n return pick(data(ctx).cities, ctx.source)!;\n}\n\n/** Picks a random street from the locale dataset. */\nexport function street(ctx: IllusionistContext): string {\n return pick(data(ctx).streets, ctx.source)!;\n}\n\n/** Builds a street address: a house number (1-999) followed by a street name. */\nexport function streetAddress(ctx: IllusionistContext): string {\n const houseNumber = Math.floor(float(1, 1000, ctx.source));\n return `${houseNumber} ${street(ctx)}`;\n}\n\n/** Generates a ZIP/postal code matching the locale's pattern (`#` = digit, other chars preserved). */\nexport function zipCode(ctx: IllusionistContext): string {\n const pattern = data(ctx).zipPattern;\n\n return pattern.replace(/#/g, () => String(Math.floor((ctx.source.next() ?? 0) * 10)));\n}\n\n/** Picks a random state/region from the locale dataset. */\nexport function state(ctx: IllusionistContext): string {\n return pick(data(ctx).states, ctx.source)!;\n}\n\n/** Picks a random country from the locale dataset. */\nexport function country(ctx: IllusionistContext): string {\n return pick(data(ctx).countries, ctx.source)!;\n}\n\n/** Generates a random latitude in the range [-90, 90]. */\nexport function latitude(ctx: IllusionistContext): number {\n return float(-90, 90, ctx.source);\n}\n\n/** Generates a random longitude in the range [-180, 180]. */\nexport function longitude(ctx: IllusionistContext): number {\n return float(-180, 180, ctx.source);\n}\n\n/**\n * Returns a coordinate within ~1 degree of the reference point.\n * When no reference is provided, a random coordinate is used.\n */\nexport function nearbyGPSCoordinate(ctx: IllusionistContext, ref?: Coordinate): Coordinate {\n const base = ref ?? { lat: latitude(ctx), lng: longitude(ctx) };\n return {\n lat: float(base.lat - 1, base.lat + 1, ctx.source),\n lng: float(base.lng - 1, base.lng + 1, ctx.source),\n };\n}\n","/** Latin word pool for the `lorem` category. */\nexport const LOREM_DATA = {\n words: [\n 'lorem',\n 'ipsum',\n 'dolor',\n 'sit',\n 'amet',\n 'consectetur',\n 'adipiscing',\n 'elit',\n 'sed',\n 'do',\n 'eiusmod',\n 'tempor',\n 'incididunt',\n 'ut',\n 'labore',\n 'et',\n 'dolore',\n 'magna',\n 'aliqua',\n 'enim',\n 'ad',\n 'minim',\n 'veniam',\n 'quis',\n 'nostrud',\n 'exercitation',\n 'ullamco',\n 'laboris',\n 'nisi',\n 'aliquip',\n 'ex',\n 'ea',\n 'commodo',\n 'consequat',\n 'duis',\n 'aute',\n 'irure',\n 'in',\n 'reprehenderit',\n 'voluptate',\n 'velit',\n 'esse',\n 'cillum',\n 'fugiat',\n 'nulla',\n 'pariatur',\n 'excepteur',\n 'sint',\n 'occaecat',\n 'cupidatat',\n 'non',\n 'proident',\n 'sunt',\n 'culpa',\n 'qui',\n 'officia',\n 'deserunt',\n 'mollit',\n 'anim',\n 'id',\n 'est',\n 'laborum',\n ],\n} as const;\n","import { float } from '../_helpers/float';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { LOREM_DATA } from './data';\n\n/** Picks a single random word from the lorem word pool. */\nexport function word(ctx: IllusionistContext): string {\n return pick(LOREM_DATA.words, ctx.source)!;\n}\n\n/** Builds a space-joined run of `count` random words (default 3). */\nexport function words(ctx: IllusionistContext, count = 3): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(word(ctx));\n }\n return out.join(' ');\n}\n\n/** Builds a sentence of `wordCount` words (default 6-12) with a capital first letter and trailing period. */\nexport function sentence(ctx: IllusionistContext, wordCount?: number): string {\n const count = wordCount ?? Math.floor(float(6, 13, ctx.source));\n const text = words(ctx, count);\n return `${text.charAt(0).toUpperCase()}${text.slice(1)}.`;\n}\n\n/** Builds `count` space-joined sentences (default 3). */\nexport function sentences(ctx: IllusionistContext, count = 3): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(sentence(ctx));\n }\n return out.join(' ');\n}\n\n/** Builds a paragraph of `sentenceCount` sentences (default 3-7), space-joined. */\nexport function paragraph(ctx: IllusionistContext, sentenceCount?: number): string {\n const count = sentenceCount ?? Math.floor(float(3, 8, ctx.source));\n return sentences(ctx, count);\n}\n\n/** Builds `count` newline-joined paragraphs (default 3). */\nexport function paragraphs(ctx: IllusionistContext, count = 3): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(paragraph(ctx));\n }\n return out.join('\\n');\n}\n\n/** Builds a hyphen-joined slug of `wordCount` words (default 3). */\nexport function slug(ctx: IllusionistContext, wordCount = 3): string {\n const out: string[] = [];\n for (let i = 0; i < wordCount; i++) {\n out.push(word(ctx));\n }\n return out.join('-');\n}\n\n/** Builds `count` newline-joined lines, each a sentence (default 5). */\nexport function lines(ctx: IllusionistContext, count = 5): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(sentence(ctx));\n }\n return out.join('\\n');\n}\n","import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/** Generates a random boolean with an optional probability bias (0–1, default 0.5). */\nexport function boolean(source?: RandomSource, probability = 0.5): boolean {\n const raw = source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n\n return raw < probability;\n}\n","import { boolean } from '../_helpers/boolean';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext, PersonLocaleData } from '../types';\n\nfunction data(ctx: IllusionistContext): PersonLocaleData {\n return ctx.locale.person;\n}\n\nexport function firstName(ctx: IllusionistContext): string {\n const d = data(ctx);\n const pool = boolean(ctx.source) ? d.firstNameMale : d.firstNameFemale;\n return pick(pool, ctx.source)!;\n}\n\nexport function lastName(ctx: IllusionistContext): string {\n return pick(data(ctx).lastName, ctx.source)!;\n}\n\nexport function fullName(ctx: IllusionistContext): string {\n return `${firstName(ctx)} ${lastName(ctx)}`;\n}\n\nexport function gender(ctx: IllusionistContext): string {\n return pick(data(ctx).gender, ctx.source)!;\n}\n\nexport function prefix(ctx: IllusionistContext): string {\n return pick(data(ctx).prefix, ctx.source)!;\n}\n\nexport function suffix(ctx: IllusionistContext): string {\n const d = data(ctx);\n if (d.suffix.length === 0) return '';\n return pick(d.suffix, ctx.source)!;\n}\n\nexport function jobTitle(ctx: IllusionistContext): string {\n const d = data(ctx);\n return `${pick(d.jobAreas, ctx.source)!} ${pick(d.jobTypes, ctx.source)!}`;\n}\n","//#region src/errors.ts\nvar e = class extends Error {\n\tconstructor(e, t) {\n\t\tsuper(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);\n\t}\n}, t = class extends e {};\n//#endregion\nexport { e as ArsenalError, t as ArsenalSerializationError };\n\n//# sourceMappingURL=errors.js.map","import { ArsenalSerializationError as e } from \"../errors.js\";\n//#region src/object/hash.ts\nfunction t(n, r, i) {\n\tif (n === void 0) return \"undefined\";\n\tif (n === null) return \"null\";\n\tif (typeof n == \"bigint\") return `${n}n`;\n\tif (typeof n != \"object\") return JSON.stringify(n);\n\tif (i.has(n)) return \"[Circular]\";\n\tif (i.add(n), n instanceof Date) return `[Date:${Number.isNaN(n.getTime()) ? \"Invalid\" : n.toISOString()}]`;\n\tif (n instanceof RegExp) return `[RegExp:${n.source}/${n.flags}]`;\n\tif (n instanceof Set) return `[Set:${[...n].map((e) => t(e, r, i)).sort().join(\",\")}]`;\n\tif (n instanceof Map) return `[Map:${[...n.entries()].map(([e, n]) => [t(e, r, i), t(n, r, i)]).sort(([e, t], [n, r]) => e === n ? t.localeCompare(r) : e.localeCompare(n)).map(([e, t]) => `${e}=>${t}`).join(\",\")}]`;\n\tif (Array.isArray(n)) return `[${n.map((e) => t(e, r, i)).join(\",\")}]`;\n\tlet a = Object.getPrototypeOf(n);\n\tif (a !== Object.prototype && a !== null) {\n\t\tif (r?.onClassInstance === \"throw\") throw new e(`hash: unsupported type ${n.constructor?.name ?? \"unknown\"}`);\n\t\treturn String(n);\n\t}\n\tlet o = n;\n\treturn `{${Object.keys(o).filter((e) => o[e] !== void 0).sort().map((e) => `${JSON.stringify(e)}:${t(o[e], r, i)}`).join(\",\")}}`;\n}\nfunction n(e, n) {\n\treturn t(e, n, /* @__PURE__ */ new Set());\n}\n//#endregion\nexport { n as hash };\n\n//# sourceMappingURL=hash.js.map","import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/**\n * Mulberry32 — a fast, deterministic 32-bit PRNG.\n *\n * Not cryptographically secure. Use `createSeed()` without a seed for\n * `crypto.getRandomValues`-backed randomness in security-sensitive contexts.\n *\n * @param seed - A 32-bit integer seed.\n * @returns A {@link RandomSource} producing floats in `[0, 1)`.\n */\nexport function mulberry32(seed: number): RandomSource {\n let state = seed >>> 0;\n\n return {\n next(): number {\n state = (state + 0x6d2b79f5) >>> 0;\n let t = state;\n\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n },\n };\n}\n","import { hash } from '@vielzeug/arsenal/object';\nimport type { RandomSource } from '@vielzeug/arsenal/random';\n\nimport { IllusionistSeedError } from '../errors';\nimport { mulberry32 } from './mulberry32';\n\n/**\n * Creates a {@link RandomSource} from a seed.\n *\n * - **Number seed** — used directly as the mulberry32 state.\n * - **String seed** — hashed via `arsenal`'s `hash()` to produce a 32-bit integer.\n * - **No seed** — falls back to `crypto.getRandomValues` for cryptographic randomness.\n *\n * @example\n * ```ts\n * const a = createSeed(12345); // deterministic\n * const b = createSeed('hello'); // deterministic (hashed)\n * const c = createSeed(); // cryptographic (non-deterministic)\n * ```\n */\nexport function createSeed(seed?: number | string): RandomSource {\n if (seed == null) return cryptoSource();\n\n if (typeof seed === 'number') {\n if (!Number.isFinite(seed)) throw new IllusionistSeedError(`createSeed: numeric seed must be finite, got ${seed}`);\n\n return mulberry32(Math.trunc(seed));\n }\n\n const hashed = hash(seed);\n\n // FNV-1a-ish fold from the hash string into a 32-bit integer.\n let state = 0;\n\n for (let i = 0; i < hashed.length; i++) {\n state = (Math.imul(state, 31) + hashed.charCodeAt(i)) >>> 0;\n }\n\n return mulberry32(state);\n}\n\nfunction cryptoSource(): RandomSource {\n return {\n next(): number {\n return crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n },\n };\n}\n","export const SYSTEM_DATA = {\n cronExpressions: [\n '0 * * * *',\n '0 0 * * *',\n '0 0 * * 0',\n '*/5 * * * *',\n '0 12 * * 1-5',\n '0 0 1 * *',\n '0 0 1 1 *',\n '0 3 * * *',\n '30 7 * * 1-5',\n '0 18 * * 5',\n ],\n directories: [\n 'src',\n 'dist',\n 'build',\n 'lib',\n 'test',\n 'docs',\n 'config',\n 'assets',\n 'public',\n 'private',\n 'tmp',\n 'cache',\n 'var',\n 'opt',\n 'etc',\n ],\n fileExtensions: [\n 'txt',\n 'pdf',\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'jpg',\n 'png',\n 'gif',\n 'svg',\n 'webp',\n 'ico',\n 'mp3',\n 'wav',\n 'flac',\n 'ogg',\n 'mp4',\n 'avi',\n 'mkv',\n 'webm',\n 'zip',\n 'tar',\n 'gz',\n 'rar',\n '7z',\n 'js',\n 'ts',\n 'json',\n 'xml',\n 'html',\n 'css',\n 'md',\n 'py',\n 'java',\n 'go',\n 'rs',\n 'c',\n 'cpp',\n ],\n fileNames: [\n 'document',\n 'report',\n 'summary',\n 'notes',\n 'draft',\n 'config',\n 'readme',\n 'index',\n 'main',\n 'app',\n 'data',\n 'backup',\n 'export',\n 'import',\n 'log',\n ],\n mimeTypes: {\n avi: 'video/x-msvideo',\n css: 'text/css',\n gif: 'image/gif',\n gz: 'application/gzip',\n html: 'text/html',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n mp3: 'audio/mpeg',\n mp4: 'video/mp4',\n pdf: 'application/pdf',\n png: 'image/png',\n svg: 'image/svg+xml',\n tar: 'application/x-tar',\n txt: 'text/plain',\n wav: 'audio/wav',\n webp: 'image/webp',\n xml: 'application/xml',\n zip: 'application/zip',\n },\n} as const;\n","import { uuid as cryptoUuid } from '@vielzeug/arsenal/random';\n\nimport { int } from '../_helpers/int';\nimport { alphanumeric, pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { SYSTEM_DATA } from './data';\n\n/** Generates a random file extension from common types. */\nexport function fileExtension(ctx: IllusionistContext): string {\n return pick(SYSTEM_DATA.fileExtensions, ctx.source)!;\n}\n\n/** Generates a random file name with extension. */\nexport function fileName(ctx: IllusionistContext): string {\n const base = pick(SYSTEM_DATA.fileNames, ctx.source)!;\n const ext = fileExtension(ctx);\n\n return `${base}.${ext}`;\n}\n\n/** Generates a random file path with 1-4 directory segments and a file name. */\nexport function filePath(ctx: IllusionistContext): string {\n const segments = int(1, 4, ctx.source);\n const dirs: string[] = [];\n\n for (let i = 0; i < segments; i++) {\n dirs.push(pick(SYSTEM_DATA.directories, ctx.source)!);\n }\n\n return `${dirs.join('/')}/${fileName(ctx)}`;\n}\n\n/** Returns a random MIME type string. */\nexport function mimeType(ctx: IllusionistContext): string {\n const types = Object.values(SYSTEM_DATA.mimeTypes);\n\n return pick(types, ctx.source)!;\n}\n\n/** Generates a random semver version string. */\nexport function semver(ctx: IllusionistContext, options?: { maxMajor?: number; includePrerelease?: boolean }): string {\n const maxMajor = options?.maxMajor ?? 20;\n const major = int(0, maxMajor, ctx.source);\n const minor = int(0, 20, ctx.source);\n const patch = int(0, 99, ctx.source);\n\n let version = `${major}.${minor}.${patch}`;\n\n if (options?.includePrerelease && ctx.source.next() < 0.3) {\n const labels = ['alpha', 'beta', 'rc', 'next'];\n const label = pick(labels, ctx.source)!;\n const num = int(1, 10, ctx.source);\n\n version += `-${label}.${num}`;\n }\n\n return version;\n}\n\n/**\n * Generates a random UUID via `crypto.randomUUID()`.\n *\n * **Not deterministic** — ignores the seeded `RandomSource` and always uses\n * cryptographic randomness. Use this for unique identifiers where\n * unpredictability matters more than reproducibility.\n */\nexport function uuid(): string {\n return cryptoUuid();\n}\n\n/** Generates a random port number (1-65535, avoiding well-known ports below 1024 by default). */\nexport function port(ctx: IllusionistContext, options?: { min?: number; max?: number }): number {\n const min = options?.min ?? 1024;\n const max = options?.max ?? 65535;\n\n return int(min, max, ctx.source);\n}\n\n/** Returns a random cron expression from common patterns. */\nexport function cron(ctx: IllusionistContext): string {\n return pick(SYSTEM_DATA.cronExpressions, ctx.source)!;\n}\n\n/** Generates a random process name. */\nexport function process(ctx: IllusionistContext): string {\n const prefixes = ['node', 'python', 'ruby', 'java', 'go', 'rust', 'bash'];\n const prefix = pick(prefixes, ctx.source)!;\n const suffix = alphanumeric(int(3, 8, ctx.source), ctx.source);\n\n return `${prefix}_${suffix}`;\n}\n","import type { RandomSource } from '@vielzeug/arsenal/random';\nimport * as commerceApi from './commerce/commerce';\nimport * as dateApi from './date/date';\nimport * as financeApi from './finance/finance';\nimport * as internetApi from './internet/internet';\nimport * as locationApi from './location/location';\nimport * as loremApi from './lorem/lorem';\nimport * as personApi from './person/person';\nimport { createSeed } from './seed/create-seed';\nimport * as systemApi from './system/system';\nimport type { IllusionistContext, IllusionistLocale, IllusionistOptions } from './types';\n\nexport type { IllusionistOptions } from './types';\n\nexport type Illusionist = {\n readonly person: typeof personApi;\n readonly internet: typeof internetApi;\n readonly commerce: typeof commerceApi;\n readonly date: typeof dateApi;\n readonly finance: typeof financeApi;\n readonly location: typeof locationApi;\n readonly lorem: typeof loremApi;\n readonly system: typeof systemApi;\n\n /** The seed used to initialize this instance, or `undefined` for cryptographic randomness. */\n readonly seed: number | string | undefined;\n /** The active locale data. */\n readonly locale: IllusionistLocale;\n\n dispose(): void;\n readonly disposed: boolean;\n readonly disposalSignal: AbortSignal;\n [Symbol.dispose](): void;\n};\n\n/**\n * Creates a bound illusionist instance with all categories sharing a single seeded\n * random source and locale.\n *\n * @example\n * ```ts\n * import { en } from '@vielzeug/illusionist/locales';\n *\n * const illusionist = createIllusion({ seed: 12345, locale: en });\n *\n * illusionist.person.fullName(); // deterministic — same seed → same result\n * illusionist.internet.email();\n * illusionist.commerce.price();\n * illusionist.dispose(); // [Symbol.dispose]() also works\n * ```\n */\nexport function createIllusion(options: IllusionistOptions): Illusionist {\n const { locale, seed } = options;\n const source: RandomSource = createSeed(seed);\n const controller = new AbortController();\n let disposed = false;\n\n const ctx: IllusionistContext = { locale, source };\n\n const bind = <T extends Record<string, (ctx: IllusionistContext, ...args: never[]) => unknown>>(api: T): T => {\n const bound = {} as Record<string, (...args: never[]) => unknown>;\n\n for (const [key, fn] of Object.entries(api)) {\n if (typeof fn === 'function') {\n bound[key] = (...args: never[]) => (fn as (ctx: IllusionistContext, ...args: never[]) => unknown)(ctx, ...args);\n }\n }\n\n return bound as T;\n };\n\n const dispose = (): void => {\n if (disposed) return;\n\n disposed = true;\n controller.abort();\n };\n\n return {\n commerce: bind(commerceApi),\n date: bind(dateApi),\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return disposed;\n },\n finance: bind(financeApi),\n internet: bind(internetApi),\n locale,\n location: bind(locationApi),\n lorem: bind(loremApi),\n person: bind(personApi),\n seed,\n system: bind(systemApi),\n [Symbol.dispose]: dispose,\n };\n}\n","/** German-language location dataset for the `location` category. */\nexport const LOCATION_DATA_DE = {\n cities: [\n 'Berlin',\n 'Hamburg',\n 'München',\n 'Köln',\n 'Frankfurt am Main',\n 'Stuttgart',\n 'Düsseldorf',\n 'Leipzig',\n 'Dortmund',\n 'Essen',\n 'Bremen',\n 'Dresden',\n 'Hannover',\n 'Nürnberg',\n 'Duisburg',\n 'Bochum',\n 'Wuppertal',\n 'Bielefeld',\n 'Bonn',\n 'Münster',\n ],\n countries: [\n 'Deutschland',\n 'Österreich',\n 'Schweiz',\n 'Frankreich',\n 'Italien',\n 'Spanien',\n 'Niederlande',\n 'Belgien',\n 'Polen',\n 'Tschechien',\n 'Dänemark',\n 'Schweden',\n 'Norwegen',\n 'Finnland',\n 'Portugal',\n ],\n states: [\n 'Baden-Württemberg',\n 'Bayern',\n 'Berlin',\n 'Brandenburg',\n 'Bremen',\n 'Hamburg',\n 'Hessen',\n 'Mecklenburg-Vorpommern',\n 'Niedersachsen',\n 'Nordrhein-Westfalen',\n 'Rheinland-Pfalz',\n 'Saarland',\n 'Sachsen',\n 'Sachsen-Anhalt',\n 'Schleswig-Holstein',\n 'Thüringen',\n ],\n streets: [\n 'Hauptstraße',\n 'Schulstraße',\n 'Bahnhofstraße',\n 'Gartenstraße',\n 'Bergstraße',\n 'Dorfstraße',\n 'Lindenstraße',\n 'Goethestraße',\n 'Schillerstraße',\n 'Mozartstraße',\n 'Bahnhofplatz',\n 'Marktplatz',\n 'Kirchplatz',\n 'Schlossplatz',\n 'Waldrand',\n ],\n zipPattern: '#####',\n} as const;\n","/** German-language person dataset for the `person` category. */\nexport const PERSON_DATA_DE = {\n firstNameFemale: [\n 'Mia',\n 'Emma',\n 'Sophia',\n 'Hannah',\n 'Emilia',\n 'Lina',\n 'Ella',\n 'Marie',\n 'Clara',\n 'Lena',\n 'Lea',\n 'Lilly',\n 'Anna',\n 'Ida',\n 'Mila',\n 'Luisa',\n 'Nora',\n 'Greta',\n 'Frieda',\n 'Johanna',\n 'Lotte',\n 'Charlotte',\n 'Mathilda',\n 'Lara',\n 'Sarah',\n 'Julia',\n 'Laura',\n 'Lisa',\n 'Katharina',\n 'Sabine',\n 'Andrea',\n 'Petra',\n 'Susanne',\n 'Nicole',\n 'Stefanie',\n 'Christina',\n 'Tanja',\n 'Birgit',\n 'Monika',\n 'Ursula',\n 'Helga',\n 'Ingrid',\n 'Brigitte',\n 'Gisela',\n 'Renate',\n 'Angelika',\n 'Claudia',\n 'Sandra',\n 'Beate',\n 'Klara',\n ],\n firstNameMale: [\n 'Ben',\n 'Paul',\n 'Leon',\n 'Finn',\n 'Elias',\n 'Jonas',\n 'Felix',\n 'Maximilian',\n 'Max',\n 'Luca',\n 'Noah',\n 'Henry',\n 'Lukas',\n 'Moritz',\n 'David',\n 'Niklas',\n 'Philipp',\n 'Julian',\n 'Tim',\n 'Tom',\n 'Simon',\n 'Alexander',\n 'Liam',\n 'Emil',\n 'Daniel',\n 'Sebastian',\n 'Matteo',\n 'Fabian',\n 'Jakob',\n 'Tobias',\n 'Florian',\n 'Marvin',\n 'Anton',\n 'Johannes',\n 'Stefan',\n 'Andreas',\n 'Michael',\n 'Thomas',\n 'Christian',\n 'Klaus',\n 'Peter',\n 'Wolfgang',\n 'Jürgen',\n 'Frank',\n 'Hans',\n 'Martin',\n 'Rolf',\n 'Bernd',\n 'Uwe',\n 'Karl',\n ],\n gender: ['Männlich', 'Weiblich', 'Nicht-binär', 'Divers'],\n jobAreas: [\n 'Finanzen',\n 'IT',\n 'Marketing',\n 'Vertrieb',\n 'Personalwesen',\n 'Betrieb',\n 'Ingenieurwesen',\n 'Forschung',\n 'Design',\n 'Recht',\n 'Kundenservice',\n 'Produkt',\n 'Logistik',\n 'Buchhaltung',\n 'Öffentlichkeitsarbeit',\n 'Qualitätssicherung',\n 'Daten',\n 'Sicherheit',\n 'Kommunikation',\n 'Verwaltung',\n ],\n jobTypes: [\n 'Ingenieur',\n 'Manager',\n 'Analyst',\n 'Spezialist',\n 'Koordinator',\n 'Direktor',\n 'Berater',\n 'Entwickler',\n 'Architekt',\n 'Administrator',\n 'Beamter',\n 'Mitarbeiter',\n 'Aufseher',\n 'Techniker',\n 'Assistent',\n ],\n lastName: [\n 'Müller',\n 'Schmidt',\n 'Schneider',\n 'Fischer',\n 'Weber',\n 'Meyer',\n 'Wagner',\n 'Becker',\n 'Schulz',\n 'Hoffmann',\n 'Schäfer',\n 'Koch',\n 'Bauer',\n 'Richter',\n 'Klein',\n 'Wolf',\n 'Schröder',\n 'Neumann',\n 'Schwarz',\n 'Zimmermann',\n 'Braun',\n 'Krüger',\n 'Hofmann',\n 'Hartmann',\n 'Lange',\n 'Schmitt',\n 'Werner',\n 'Krause',\n 'Lehmann',\n 'Schmid',\n 'Schulze',\n 'Maier',\n 'Köhler',\n 'Herrmann',\n 'König',\n 'Walter',\n 'Mayer',\n 'Huber',\n 'Kaiser',\n 'Fuchs',\n 'Peters',\n 'Lang',\n 'Scholz',\n 'Möller',\n 'Weiß',\n 'Jung',\n 'Hahn',\n 'Schubert',\n 'Vogel',\n 'Friedrich',\n ],\n prefix: ['Herr', 'Frau', 'Dr.', 'Prof.'],\n suffix: [],\n};\n","import { LOCATION_DATA_DE } from '../location/data/de';\nimport { PERSON_DATA_DE } from '../person/data/de';\nimport type { IllusionistLocale } from '../types';\n\n/** German locale data for Illusionist. */\nexport const de = {\n code: 'de',\n location: LOCATION_DATA_DE,\n person: PERSON_DATA_DE,\n} satisfies IllusionistLocale;\n","/** English-language location dataset for the `location` category. */\nexport const LOCATION_DATA_EN = {\n cities: [\n 'New York',\n 'Los Angeles',\n 'Chicago',\n 'Houston',\n 'Phoenix',\n 'Philadelphia',\n 'San Antonio',\n 'San Diego',\n 'Dallas',\n 'San Jose',\n 'Austin',\n 'Jacksonville',\n 'Fort Worth',\n 'Columbus',\n 'Charlotte',\n 'San Francisco',\n 'Indianapolis',\n 'Seattle',\n 'Denver',\n 'Boston',\n ],\n countries: [\n 'United States',\n 'United Kingdom',\n 'Germany',\n 'France',\n 'Italy',\n 'Spain',\n 'Netherlands',\n 'Belgium',\n 'Switzerland',\n 'Austria',\n 'Canada',\n 'Australia',\n 'Japan',\n 'Brazil',\n 'India',\n ],\n states: [\n 'Alabama',\n 'Alaska',\n 'Arizona',\n 'Arkansas',\n 'California',\n 'Colorado',\n 'Connecticut',\n 'Delaware',\n 'Florida',\n 'Georgia',\n 'Hawaii',\n 'Idaho',\n 'Illinois',\n 'Indiana',\n 'Iowa',\n 'Kansas',\n 'Kentucky',\n 'Louisiana',\n 'Maine',\n 'Maryland',\n 'Massachusetts',\n 'Michigan',\n 'Minnesota',\n 'Mississippi',\n 'Missouri',\n 'Montana',\n 'Nebraska',\n 'Nevada',\n 'New Hampshire',\n 'New Jersey',\n 'New Mexico',\n 'New York',\n 'North Carolina',\n 'North Dakota',\n 'Ohio',\n 'Oklahoma',\n 'Oregon',\n 'Pennsylvania',\n 'Rhode Island',\n 'South Carolina',\n 'South Dakota',\n 'Tennessee',\n 'Texas',\n 'Utah',\n 'Vermont',\n 'Virginia',\n 'Washington',\n 'West Virginia',\n 'Wisconsin',\n 'Wyoming',\n ],\n streets: [\n 'Main St',\n 'Oak Ave',\n 'Maple Dr',\n 'Cedar Ln',\n 'Pine Rd',\n 'Elm St',\n 'Washington Blvd',\n 'Park Ave',\n 'Lake Dr',\n 'Hill Rd',\n 'River Rd',\n 'Spring St',\n 'Forest Dr',\n 'Sunset Blvd',\n 'Highland Ave',\n ],\n zipPattern: '#####',\n} as const;\n","/** English-language person dataset for the `person` category. */\nexport const PERSON_DATA_EN = {\n firstNameFemale: [\n 'Mary',\n 'Patricia',\n 'Jennifer',\n 'Linda',\n 'Elizabeth',\n 'Barbara',\n 'Susan',\n 'Jessica',\n 'Sarah',\n 'Karen',\n 'Lisa',\n 'Nancy',\n 'Betty',\n 'Margaret',\n 'Sandra',\n 'Ashley',\n 'Kimberly',\n 'Emily',\n 'Donna',\n 'Michelle',\n 'Carol',\n 'Amanda',\n 'Dorothy',\n 'Melissa',\n 'Deborah',\n 'Stephanie',\n 'Rebecca',\n 'Sharon',\n 'Laura',\n 'Cynthia',\n 'Kathleen',\n 'Amy',\n 'Shirley',\n 'Angela',\n 'Helen',\n 'Anna',\n 'Brenda',\n 'Pamela',\n 'Nicole',\n 'Emma',\n 'Samantha',\n 'Katherine',\n 'Christine',\n 'Debra',\n 'Rachel',\n 'Catherine',\n 'Carolyn',\n 'Janet',\n 'Ruth',\n 'Maria',\n ],\n firstNameMale: [\n 'James',\n 'John',\n 'Robert',\n 'Michael',\n 'William',\n 'David',\n 'Richard',\n 'Joseph',\n 'Thomas',\n 'Charles',\n 'Christopher',\n 'Daniel',\n 'Matthew',\n 'Anthony',\n 'Mark',\n 'Donald',\n 'Steven',\n 'Paul',\n 'Andrew',\n 'Joshua',\n 'Kenneth',\n 'Kevin',\n 'Brian',\n 'George',\n 'Edward',\n 'Ronald',\n 'Timothy',\n 'Jason',\n 'Jeffrey',\n 'Ryan',\n 'Jacob',\n 'Gary',\n 'Nicholas',\n 'Eric',\n 'Jonathan',\n 'Stephen',\n 'Larry',\n 'Justin',\n 'Scott',\n 'Brandon',\n 'Benjamin',\n 'Samuel',\n 'Gregory',\n 'Frank',\n 'Alexander',\n 'Raymond',\n 'Patrick',\n 'Jack',\n 'Dennis',\n 'Jerry',\n ],\n gender: ['Male', 'Female', 'Non-binary', 'Other'],\n jobAreas: [\n 'Finance',\n 'IT',\n 'Marketing',\n 'Sales',\n 'Human Resources',\n 'Operations',\n 'Engineering',\n 'Research',\n 'Design',\n 'Legal',\n 'Customer Support',\n 'Product',\n 'Logistics',\n 'Accounting',\n 'Public Relations',\n 'Quality Assurance',\n 'Data',\n 'Security',\n 'Communications',\n 'Administration',\n ],\n jobTypes: [\n 'Engineer',\n 'Manager',\n 'Analyst',\n 'Specialist',\n 'Coordinator',\n 'Director',\n 'Consultant',\n 'Developer',\n 'Architect',\n 'Administrator',\n 'Officer',\n 'Representative',\n 'Supervisor',\n 'Technician',\n 'Assistant',\n ],\n lastName: [\n 'Smith',\n 'Johnson',\n 'Williams',\n 'Brown',\n 'Jones',\n 'Garcia',\n 'Miller',\n 'Davis',\n 'Rodriguez',\n 'Martinez',\n 'Hernandez',\n 'Lopez',\n 'Gonzalez',\n 'Wilson',\n 'Anderson',\n 'Thomas',\n 'Taylor',\n 'Moore',\n 'Jackson',\n 'Martin',\n 'Lee',\n 'Perez',\n 'Thompson',\n 'White',\n 'Harris',\n 'Sanchez',\n 'Clark',\n 'Ramirez',\n 'Lewis',\n 'Robinson',\n 'Walker',\n 'Young',\n 'Allen',\n 'King',\n 'Wright',\n 'Scott',\n 'Torres',\n 'Nguyen',\n 'Hill',\n 'Flores',\n 'Green',\n 'Adams',\n 'Nelson',\n 'Baker',\n 'Hall',\n 'Rivera',\n 'Campbell',\n 'Mitchell',\n 'Carter',\n 'Roberts',\n ],\n prefix: ['Mr.', 'Mrs.', 'Ms.', 'Dr.', 'Prof.'],\n suffix: ['Jr.', 'Sr.', 'II', 'III', 'IV', 'PhD'],\n};\n","import { LOCATION_DATA_EN } from '../location/data/en';\nimport { PERSON_DATA_EN } from '../person/data/en';\nimport type { IllusionistLocale } from '../types';\n\n/** English locale data for Illusionist. */\nexport const en = {\n code: 'en',\n location: LOCATION_DATA_EN,\n person: PERSON_DATA_EN,\n} satisfies IllusionistLocale;\n"],"mappings":"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BACA,SACA,SACA,cACA,SACA,UACA,SACA,yBACA,gBACA,sBACA,kBACA,WACA,UACA,iBACA,qBACA,WACF,EACA,QAAS,CACP,cACA,cACA,gBACA,eACA,aACA,aACA,eACA,eACA,iBACA,eACA,eACA,aACA,aACA,eACA,UACF,EACA,WAAY,OErEF,EACV,OAAQ,CDNR,gBAAiB,oVAmDjB,EACA,cAAe,8UAmDf,EACA,OAAQ,CAAC,WAAY,WAAY,cAAe,QAAQ,EACxD,SAAU,CACR,WACA,KACA,YACA,WACA,gBACA,UACA,iBACA,YACA,SACA,QACA,gBACA,UACA,WACA,cACA,wBACA,qBACA,QACA,aACA,gBACA,YACF,EACA,SAAU,CACR,YACA,UACA,UACA,aACA,cACA,WACA,UACA,aACA,YACA,gBACA,UACA,cACA,WACA,YACA,WACF,EACA,SAAU,+WAmDV,EACA,OAAQ,CAAC,OAAQ,OAAQ,MAAO,OAAO,EACvC,OAAQ,CAAC,CC/LD,CACV,EGJa,GAAK,CAChB,KAAM,KACN,SAAU,CFLV,OAAQ,CACN,WACA,cACA,UACA,UACA,UACA,eACA,cACA,YACA,SACA,WACA,SACA,eACA,aACA,WACA,YACA,gBACA,eACA,UACA,SACA,QACF,EACA,UAAW,CACT,gBACA,iBACA,UACA,SACA,QACA,QACA,cACA,UACA,cACA,UACA,SACA,YACA,QACA,SACA,OACF,EACA,OAAQ,meAmDR,EACA,QAAS,CACP,UACA,UACA,WACA,WACA,UACA,SACA,kBACA,WACA,UACA,UACA,WACA,YACA,YACA,cACA,cACF,EACA,WAAY,OEvGF,EACV,OAAQ,CDNR,gBAAiB,oXAmDjB,EACA,cAAe,6WAmDf,EACA,OAAQ,CAAC,OAAQ,SAAU,aAAc,OAAO,EAChD,SAAU,CACR,UACA,KACA,YACA,QACA,kBACA,aACA,cACA,WACA,SACA,QACA,mBACA,UACA,YACA,aACA,mBACA,oBACA,OACA,WACA,iBACA,gBACF,EACA,SAAU,CACR,WACA,UACA,UACA,aACA,cACA,WACA,aACA,YACA,YACA,gBACA,UACA,iBACA,aACA,aACA,WACF,EACA,SAAU,2WAmDV,EACA,OAAQ,CAAC,MAAO,OAAQ,MAAO,MAAO,OAAO,EAC7C,OAAQ,CAAC,MAAO,MAAO,KAAM,MAAO,KAAM,KAAK,CC/LvC,CACV"}
|
|
1
|
+
{"version":3,"file":"illusionist.cjs","names":["e","e","t","e","n","t","t","e"],"sources":["../src/_helpers/float.ts","../../arsenal/dist/random/uuid.js","../../arsenal/dist/random/_index.js","../../arsenal/dist/random/random.js","../../arsenal/dist/random/draw.js","../src/_helpers/int.ts","../src/_helpers/string.ts","../src/commerce/data.ts","../src/commerce/commerce.ts","../src/date/date.ts","../src/errors.ts","../src/finance/data.ts","../src/finance/finance.ts","../src/internet/data.ts","../src/internet/internet.ts","../src/location/location.ts","../src/lorem/data.ts","../src/lorem/lorem.ts","../src/_helpers/boolean.ts","../src/person/person.ts","../../arsenal/dist/errors.js","../../arsenal/dist/object/hash.js","../src/seed/mulberry32.ts","../src/seed/create-seed.ts","../src/system/data.ts","../src/system/system.ts","../src/factory.ts","../src/location/data/de.ts","../src/person/data/de.ts","../src/locales/de.ts","../src/location/data/en.ts","../src/person/data/en.ts","../src/locales/en.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/**\n * Generates a random float in `[min, max)`.\n * Pass `min` = `max` for a constant; the result is still `min` (not `max`).\n */\nexport function float(min: number, max: number, source?: RandomSource): number {\n if (min > max) return min;\n\n const span = max - min;\n const raw = source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n\n return min + raw * span;\n}\n\n/** Generates a random float with a fixed number of decimal places. */\nexport function floatFixed(min: number, max: number, decimals = 2, source?: RandomSource): number {\n const factor = 10 ** decimals;\n const scaled = float(min * factor, max * factor, source);\n\n return Math.round(scaled) / factor;\n}\n","//#region src/random/uuid.ts\nfunction e() {\n\treturn crypto.randomUUID();\n}\n//#endregion\nexport { e as uuid };\n\n//# sourceMappingURL=uuid.js.map","//#region src/random/_index.ts\nfunction e(e, t) {\n\tlet n = t?.next() ?? crypto.getRandomValues(/* @__PURE__ */ new Uint32Array(1))[0] / 4294967296;\n\tif (!Number.isFinite(n) || n < 0 || n >= 1) throw RangeError(\"random source must return a finite number in [0, 1)\");\n\treturn Math.floor(n * e);\n}\n//#endregion\nexport { e as randomIndex };\n\n//# sourceMappingURL=_index.js.map","import { randomIndex as e } from \"./_index.js\";\n//#region src/random/random.ts\nfunction t(t, n, r) {\n\tif (t > n) throw RangeError(\"random: minimum value must not be greater than maximum value\");\n\treturn e(n - t + 1, r) + t;\n}\n//#endregion\nexport { t as random };\n\n//# sourceMappingURL=random.js.map","import { randomIndex as e } from \"./_index.js\";\nimport { random as t } from \"./random.js\";\n//#region src/random/draw.ts\nfunction n(e, n) {\n\tif (e.length !== 0) return e[t(0, e.length - 1, n)];\n}\nfunction r(t, n, r) {\n\tlet i = Math.max(0, Math.min(t.length, Math.floor(n)));\n\tif (i === 0) return [];\n\tif (i === t.length) return [...t];\n\tlet a = [...t];\n\tfor (let t = a.length - 1; t > 0; t--) {\n\t\tlet n = e(t + 1, r), i = a[t];\n\t\ta[t] = a[n], a[n] = i;\n\t}\n\treturn a.slice(0, i);\n}\n//#endregion\nexport { n as draw, r as drawMany };\n\n//# sourceMappingURL=draw.js.map","import type { RandomSource } from '@vielzeug/arsenal/random';\nimport { random } from '@vielzeug/arsenal/random';\n\n/** Generates a random integer in `[min, max]` (inclusive). */\nexport function int(min: number, max: number, source?: RandomSource): number {\n return random(min, max, source);\n}\n","import type { RandomSource } from '@vielzeug/arsenal/random';\nimport { draw } from '@vielzeug/arsenal/random';\n\n/** Picks a random element from an array. Returns `undefined` for empty arrays. */\nexport function pick<T>(array: readonly T[], source?: RandomSource): T | undefined {\n return draw([...array], source);\n}\n\n/** Generates a string of random digits with a fixed length. */\nexport function numericString(length: number, source?: RandomSource): string {\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += Math.floor((source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * 10);\n }\n\n return result;\n}\n\n/** Generates a random hex string of the given length. */\nexport function hexString(length: number, source?: RandomSource): string {\n const chars = '0123456789abcdef';\n let result = '';\n\n for (let i = 0; i < length; i++) {\n const idx = Math.floor((source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * 16);\n\n result += chars[idx];\n }\n\n return result;\n}\n\n/** Generates a random alphanumeric string of the given length. */\nexport function alphanumeric(length: number, source?: RandomSource): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n\n for (let i = 0; i < length; i++) {\n const idx = Math.floor(\n (source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * chars.length,\n );\n\n result += chars[idx];\n }\n\n return result;\n}\n\n/** Generates a random Base58 string (no 0, O, I, l) — used for Bitcoin-style addresses. */\nexport function base58String(length: number, source?: RandomSource): string {\n const chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n let result = '';\n\n for (let i = 0; i < length; i++) {\n const idx = Math.floor(\n (source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000) * chars.length,\n );\n\n result += chars[idx];\n }\n\n return result;\n}\n","export const COMMERCE_DATA = {\n departments: [\n 'Books',\n 'Movies',\n 'Music',\n 'Games',\n 'Electronics',\n 'Computers',\n 'Home',\n 'Garden',\n 'Tools',\n 'Grocery',\n 'Health',\n 'Beauty',\n 'Toys',\n 'Kids',\n 'Baby',\n 'Clothing',\n 'Shoes',\n 'Jewelry',\n 'Sports',\n 'Outdoors',\n 'Automotive',\n ],\n productAdjectives: [\n 'Small',\n 'Ergonomic',\n 'Rustic',\n 'Intelligent',\n 'Gorgeous',\n 'Incredible',\n 'Fantastic',\n 'Practical',\n 'Sleek',\n 'Awesome',\n 'Generic',\n 'Handmade',\n 'Licensed',\n 'Refined',\n 'Unbranded',\n 'Tasty',\n ],\n productMaterials: [\n 'Steel',\n 'Wooden',\n 'Concrete',\n 'Plastic',\n 'Cotton',\n 'Granite',\n 'Rubber',\n 'Metal',\n 'Soft',\n 'Fresh',\n 'Frozen',\n ],\n productNouns: [\n 'Chair',\n 'Car',\n 'Computer',\n 'Gloves',\n 'Pants',\n 'Shirt',\n 'Table',\n 'Shoes',\n 'Hat',\n 'Plate',\n 'Knife',\n 'Bottle',\n 'Coat',\n 'Lamp',\n 'Keyboard',\n 'Bag',\n 'Bench',\n 'Clock',\n 'Watch',\n 'Wallet',\n ],\n} as const;\n","import { type Currency, EUR, GBP, type Money, money, USD } from '@vielzeug/coins';\n\nimport { floatFixed } from '../_helpers/float';\nimport { int } from '../_helpers/int';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { COMMERCE_DATA } from './data';\n\nconst CURRENCIES: Record<'USD' | 'EUR' | 'GBP', Currency> = { EUR, GBP, USD };\n\nexport type PriceOptions = {\n readonly min?: number;\n readonly max?: number;\n readonly currency?: 'USD' | 'EUR' | 'GBP';\n};\n\nexport function productAdjective(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.productAdjectives, ctx.source)!;\n}\n\nexport function productMaterial(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.productMaterials, ctx.source)!;\n}\n\nexport function productNoun(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.productNouns, ctx.source)!;\n}\n\nexport function productName(ctx: IllusionistContext): string {\n return `${productAdjective(ctx)} ${productMaterial(ctx)} ${productNoun(ctx)}`;\n}\n\nexport function department(ctx: IllusionistContext): string {\n return pick(COMMERCE_DATA.departments, ctx.source)!;\n}\n\nexport function price(ctx: IllusionistContext, opts: PriceOptions = {}): Money {\n const min = opts.min ?? 0.01;\n const max = opts.max ?? 1000;\n const code = opts.currency ?? 'USD';\n const amount = floatFixed(min, max, 2, ctx.source);\n\n return money(amount.toFixed(2), CURRENCIES[code]);\n}\n\nexport function productDescription(ctx: IllusionistContext): string {\n const sentences = int(1, 2, ctx.source);\n const parts: string[] = [];\n\n for (let i = 0; i < sentences; i++) {\n const adjective = pick(COMMERCE_DATA.productAdjectives, ctx.source)!;\n const material = pick(COMMERCE_DATA.productMaterials, ctx.source)!;\n const noun = pick(COMMERCE_DATA.productNouns, ctx.source)!;\n const department = pick(COMMERCE_DATA.departments, ctx.source)!;\n\n parts.push(\n `The ${adjective.toLowerCase()} ${material.toLowerCase()} ${noun.toLowerCase()} is a great choice for your ${department.toLowerCase()} needs.`,\n );\n }\n\n return parts.join(' ');\n}\n","import { shift, Temporal } from '@vielzeug/tempo';\n\nimport { int } from '../_helpers/int';\nimport type { IllusionistContext } from '../types';\n\ntype DateOptions = {\n years?: number;\n ref?: Temporal.ZonedDateTime;\n};\n\nfunction resolveRef(ref?: Temporal.ZonedDateTime): Temporal.ZonedDateTime {\n return ref ?? Temporal.Now.zonedDateTimeISO('UTC');\n}\n\n/**\n * Generates a past date within the given number of years from `ref` (default: now).\n */\nexport function past(ctx: IllusionistContext, options?: DateOptions): Temporal.ZonedDateTime {\n const ref = resolveRef(options?.ref);\n const years = options?.years ?? 1;\n const maxSeconds = years * 365 * 24 * 60 * 60;\n const minSeconds = 1;\n\n return shift(ref, { seconds: -int(minSeconds, maxSeconds, ctx.source) });\n}\n\n/**\n * Generates a future date within the given number of years from `ref` (default: now).\n */\nexport function future(ctx: IllusionistContext, options?: DateOptions): Temporal.ZonedDateTime {\n const ref = resolveRef(options?.ref);\n const years = options?.years ?? 1;\n const maxSeconds = years * 365 * 24 * 60 * 60;\n\n return shift(ref, { seconds: int(1, maxSeconds, ctx.source) });\n}\n\n/**\n * Generates a recent date within the given number of days from `ref` (default: now).\n */\nexport function recent(\n ctx: IllusionistContext,\n options?: { days?: number; ref?: Temporal.ZonedDateTime },\n): Temporal.ZonedDateTime {\n const ref = resolveRef(options?.ref);\n const days = options?.days ?? 1;\n const maxSeconds = days * 24 * 60 * 60;\n\n return shift(ref, { seconds: -int(1, maxSeconds, ctx.source) });\n}\n\n/**\n * Generates a date between `from` and `to`.\n */\nexport function between(\n ctx: IllusionistContext,\n from: Temporal.ZonedDateTime,\n to: Temporal.ZonedDateTime,\n): Temporal.ZonedDateTime {\n const fromNs = from.toInstant().epochNanoseconds;\n const toNs = to.toInstant().epochNanoseconds;\n\n if (fromNs > toNs) {\n return from;\n }\n\n const spanNs = toNs - fromNs;\n const spanSeconds = Number(spanNs / 1_000_000_000n);\n const offsetSeconds = Math.floor(ctx.source.next() * spanSeconds);\n\n return from.add({ seconds: offsetSeconds });\n}\n\n/**\n * Generates a random birthday — a date with a random year (default 18-80 years ago) and random month/day.\n */\nexport function birthday(\n ctx: IllusionistContext,\n options?: { minAge?: number; maxAge?: number; ref?: Temporal.ZonedDateTime },\n): Temporal.PlainDate {\n const ref = resolveRef(options?.ref);\n const minAge = options?.minAge ?? 18;\n const maxAge = options?.maxAge ?? 80;\n const age = int(minAge, maxAge, ctx.source);\n const month = int(1, 12, ctx.source);\n const day = int(1, 28, ctx.source);\n\n return ref.toPlainDate().subtract({ years: age }).with({ day, month });\n}\n\n/**\n * Returns a random weekday name.\n */\nexport function weekday(ctx: IllusionistContext, locale?: string): string {\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n const loc = locale ?? ctx.locale.code;\n const localized =\n loc === 'de' ? ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'] : days;\n\n return localized[int(0, 6, ctx.source)]!;\n}\n\n/**\n * Returns a random month name.\n */\nexport function month(ctx: IllusionistContext, locale?: string): string {\n const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n const loc = locale ?? ctx.locale.code;\n const localized =\n loc === 'de'\n ? [\n 'Januar',\n 'Februar',\n 'März',\n 'April',\n 'Mai',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'Dezember',\n ]\n : months;\n\n return localized[int(0, 11, ctx.source)]!;\n}\n","/** Base class for all illusionist errors. Use `instanceof IllusionistError` to catch any illusionist-originated error. */\nexport class IllusionistError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when the seeded random source produces an invalid value. */\nexport class IllusionistSeedError extends IllusionistError {}\n","export const FINANCE_DATA = {\n banks: [\n 'Deutsche Bank',\n 'Commerzbank',\n 'Sparkasse',\n 'Barclays',\n 'HSBC',\n 'BNP Paribas',\n 'Santander',\n 'ING',\n 'UniCredit',\n 'UBS',\n ],\n creditCardIins: { amex: ['34', '37'], mastercard: ['51', '52', '53', '54', '55'], visa: ['4'] },\n ibanCountryCodes: { AT: 'AT', BE: 'BE', CH: 'CH', DE: 'DE', ES: 'ES', FR: 'FR', GB: 'GB', IT: 'IT', NL: 'NL' },\n ibanLengths: { AT: 20, BE: 16, CH: 21, DE: 22, ES: 24, FR: 27, GB: 22, IT: 27, NL: 18 },\n transactionTypes: ['payment', 'transfer', 'deposit', 'withdrawal', 'refund', 'fee'],\n} as const;\n","import { type Currency, EUR, GBP, type Money, money, USD } from '@vielzeug/coins';\n\nimport { floatFixed } from '../_helpers/float';\nimport { int } from '../_helpers/int';\nimport { alphanumeric, base58String, hexString, numericString, pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { FINANCE_DATA } from './data';\n\nconst CURRENCIES: Record<'USD' | 'EUR' | 'GBP', Currency> = { EUR, GBP, USD };\n\nconst CREDIT_CARD_TYPES = ['visa', 'mastercard', 'amex'] as const;\ntype CreditCardType = (typeof CREDIT_CARD_TYPES)[number];\n\nconst IBAN_COUNTRIES = Object.keys(FINANCE_DATA.ibanCountryCodes) as (keyof typeof FINANCE_DATA.ibanCountryCodes)[];\n\nconst LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\nfunction letters(count: number, ctx: IllusionistContext): string {\n let result = '';\n\n for (let i = 0; i < count; i++) {\n result += LETTERS[Math.floor(ctx.source.next() * LETTERS.length)];\n }\n\n return result;\n}\n\n/** Computes `n mod 97` for an arbitrarily long numeric string. */\nfunction mod97(numeric: string): number {\n let remainder = 0;\n\n for (const ch of numeric) {\n remainder = (remainder * 10 + Number(ch)) % 97;\n }\n\n return remainder;\n}\n\n/** Computes the two IBAN check digits so the resulting IBAN passes the mod-97 validation. */\nfunction ibanCheckDigits(country: string, bban: string): string {\n const rearranged = `${bban}${country}00`;\n const numeric = rearranged.replace(/[A-Z]/g, (c) => String(c.charCodeAt(0) - 55));\n const check = 98 - mod97(numeric);\n\n return check.toString().padStart(2, '0');\n}\n\n/** Computes the Luhn check digit for a partial card number (the final digit is appended). */\nfunction luhnCheckDigit(partial: string): string {\n const digits = partial.split('').map(Number);\n let sum = 0;\n let double = true;\n\n for (let i = digits.length - 1; i >= 0; i--) {\n let d = digits[i]!;\n\n if (double) {\n d *= 2;\n if (d > 9) d -= 9;\n }\n\n sum += d;\n double = !double;\n }\n\n const check = (10 - (sum % 10)) % 10;\n\n return String(check);\n}\n\nexport type AmountOptions = {\n readonly min?: number;\n readonly max?: number;\n readonly currency?: 'USD' | 'EUR' | 'GBP';\n};\n\nexport function amount(ctx: IllusionistContext, opts: AmountOptions = {}): Money {\n const min = opts.min ?? 100;\n const max = opts.max ?? 10000;\n const code = opts.currency ?? 'USD';\n const value = floatFixed(min, max, 2, ctx.source);\n\n return money(value.toFixed(2), CURRENCIES[code]);\n}\n\nexport function iban(ctx: IllusionistContext, countryCode?: string): string {\n const country = (countryCode ?? pick(IBAN_COUNTRIES, ctx.source)!) as keyof typeof FINANCE_DATA.ibanLengths;\n\n if (!(country in FINANCE_DATA.ibanLengths)) {\n throw new RangeError(`iban: unsupported country code \"${countryCode}\". Supported: ${IBAN_COUNTRIES.join(', ')}`);\n }\n\n const totalLength = FINANCE_DATA.ibanLengths[country];\n const bbanLength = totalLength - 4;\n const bban = numericString(bbanLength, ctx.source);\n const checkDigits = ibanCheckDigits(country, bban);\n\n return `${country}${checkDigits}${bban}`;\n}\n\nexport function bic(ctx: IllusionistContext): string {\n const bankCode = letters(4, ctx);\n const country = letters(2, ctx);\n const location = alphanumeric(2, ctx.source).toUpperCase();\n const useBranch = int(0, 1, ctx.source) === 1;\n const branch = useBranch ? alphanumeric(3, ctx.source).toUpperCase() : '';\n\n return `${bankCode}${country}${location}${branch}`;\n}\n\nexport function creditCardNumber(ctx: IllusionistContext, type?: CreditCardType): string {\n const cardType = type ?? pick(CREDIT_CARD_TYPES, ctx.source)!;\n const iin = pick(FINANCE_DATA.creditCardIins[cardType], ctx.source)!;\n const totalLength = cardType === 'amex' ? 15 : 16;\n const partial = iin + numericString(totalLength - iin.length - 1, ctx.source);\n const checkDigit = luhnCheckDigit(partial);\n\n return `${partial}${checkDigit}`;\n}\n\nexport function creditCardCVV(ctx: IllusionistContext, type?: CreditCardType): string {\n const cardType = type ?? pick(CREDIT_CARD_TYPES, ctx.source)!;\n const length = cardType === 'amex' ? 4 : 3;\n\n return numericString(length, ctx.source);\n}\n\nexport function bitcoinAddress(ctx: IllusionistContext): string {\n const prefix = pick(['1', '3', 'bc1'], ctx.source)!;\n const suffixLength = int(25, 34, ctx.source);\n\n return `${prefix}${base58String(suffixLength, ctx.source)}`;\n}\n\nexport function ethereumAddress(ctx: IllusionistContext): string {\n return `0x${hexString(40, ctx.source)}`;\n}\n\nexport function transactionType(ctx: IllusionistContext): string {\n return pick(FINANCE_DATA.transactionTypes, ctx.source)!;\n}\n\nexport function bank(ctx: IllusionistContext): string {\n return pick(FINANCE_DATA.banks, ctx.source)!;\n}\n","export const INTERNET_DATA = {\n domains: ['example', 'test', 'demo', 'mail', 'web', 'tech', 'app', 'cloud', 'dev', 'info'],\n httpMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n mimeTypes: [\n 'text/plain',\n 'text/html',\n 'application/json',\n 'application/xml',\n 'application/octet-stream',\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/svg+xml',\n 'application/pdf',\n 'audio/mpeg',\n 'video/mp4',\n ],\n protocols: ['https', 'http'],\n statusCodes: [200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 405, 409, 418, 422, 429, 500, 502, 503],\n tlds: ['com', 'org', 'net', 'io', 'dev', 'co', 'app', 'tech', 'cloud', 'ai'],\n userAgents: [\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15',\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',\n 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',\n ],\n} as const;\n","import { int } from '../_helpers/int';\nimport { alphanumeric, hexString, pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { INTERNET_DATA } from './data';\n\nconst SPECIAL_CHARS = '!@#$%^&*()_+-=[]{}|;:,.<>?';\n\nconst URL_PATH_WORDS = [\n 'api',\n 'v1',\n 'v2',\n 'users',\n 'posts',\n 'comments',\n 'articles',\n 'products',\n 'orders',\n 'items',\n 'search',\n 'auth',\n 'login',\n 'logout',\n 'profile',\n 'settings',\n 'dashboard',\n 'files',\n 'images',\n 'assets',\n 'static',\n 'public',\n 'private',\n 'admin',\n 'reports',\n];\n\n/** Generates an email address of the form `firstname.lastname@domain.tld`. */\nexport function email(ctx: IllusionistContext): string {\n const first = (\n pick(ctx.locale.person.firstNameFemale, ctx.source) ??\n pick(ctx.locale.person.firstNameMale, ctx.source) ??\n 'user'\n ).toLowerCase();\n const last = (pick(ctx.locale.person.lastName, ctx.source) ?? 'name').toLowerCase();\n const domain = pick(INTERNET_DATA.domains, ctx.source) ?? 'example';\n const tld = pick(INTERNET_DATA.tlds, ctx.source) ?? 'com';\n return `${first}.${last}@${domain}.${tld}`;\n}\n\n/** Generates a username: either a random alphanumeric string or a `firstname.lastname` pattern. */\nexport function username(ctx: IllusionistContext): string {\n if (int(0, 1, ctx.source) === 0) {\n return alphanumeric(int(6, 12, ctx.source), ctx.source);\n }\n const first = (\n pick(ctx.locale.person.firstNameFemale, ctx.source) ??\n pick(ctx.locale.person.firstNameMale, ctx.source) ??\n 'user'\n ).toLowerCase();\n const last = (pick(ctx.locale.person.lastName, ctx.source) ?? 'name').toLowerCase();\n return `${first}.${last}`;\n}\n\n/** Options for {@link password}. */\nexport type PasswordOptions = {\n /** Password length. Defaults to `12`. */\n length?: number;\n /** When `true`, builds a memorable password from name fragments and digits. */\n memorable?: boolean;\n};\n\n/** Generates a password mixing upper/lowercase letters, digits, and special characters. */\nexport function password(ctx: IllusionistContext, opts: PasswordOptions = {}): string {\n const length = opts.length ?? 12;\n\n if (opts.memorable) {\n const first = (\n pick(ctx.locale.person.firstNameFemale, ctx.source) ??\n pick(ctx.locale.person.firstNameMale, ctx.source) ??\n 'user'\n ).toLowerCase();\n const last = (pick(ctx.locale.person.lastName, ctx.source) ?? 'name').toLowerCase();\n const num = String(int(10, 99, ctx.source));\n const special = pick(SPECIAL_CHARS.split(''), ctx.source) ?? '!';\n const base = `${first}${last}${num}${special}`;\n if (base.length <= length) return base + alphanumeric(length - base.length, ctx.source);\n // Truncation would cut the special char/number — put them first, then fill from the name.\n const essential = `${num}${special}`;\n const remaining = length - essential.length;\n const namePart = remaining > 0 ? (first + last).slice(0, remaining) : '';\n const result = essential + namePart;\n\n return result.length < length ? result + alphanumeric(length - result.length, ctx.source) : result.slice(0, length);\n }\n\n const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const lower = 'abcdefghijklmnopqrstuvwxyz';\n const digits = '0123456789';\n const pools = [upper, lower, digits, SPECIAL_CHARS];\n\n // Guarantee at least one char from each pool, then fill the rest randomly.\n const chars: string[] = [];\n for (const pool of pools) {\n chars.push(pool[Math.floor(ctx.source.next() * pool.length)] ?? upper[0]!);\n }\n const all = upper + lower + digits + SPECIAL_CHARS;\n while (chars.length < length) {\n chars.push(all[Math.floor(ctx.source.next() * all.length)] ?? 'a');\n }\n\n // Shuffle via Fisher-Yates using ctx.source.\n for (let i = chars.length - 1; i > 0; i--) {\n const j = Math.floor(ctx.source.next() * (i + 1));\n [chars[i], chars[j]] = [chars[j]!, chars[i]!];\n }\n\n return chars.slice(0, length).join('');\n}\n\n/** Generates a URL of the form `protocol://sub.domain.tld/path/...`. */\nexport function url(ctx: IllusionistContext): string {\n const protocol = pick(INTERNET_DATA.protocols, ctx.source) ?? 'https';\n const sub = pick(['www', 'api', 'app', 'mail', 'static', 'cdn'], ctx.source) ?? 'www';\n const domain = pick(INTERNET_DATA.domains, ctx.source) ?? 'example';\n const tld = pick(INTERNET_DATA.tlds, ctx.source) ?? 'com';\n const host = `${sub}.${domain}.${tld}`;\n\n const segmentCount = int(1, 4, ctx.source);\n const segments: string[] = [];\n for (let i = 0; i < segmentCount; i++) {\n const word = pick(URL_PATH_WORDS, ctx.source) ?? 'api';\n // Occasionally append a numeric or short alphanumeric suffix to a segment.\n if (int(0, 2, ctx.source) === 0) {\n segments.push(`${word}-${alphanumeric(int(2, 5), ctx.source).toLowerCase()}`);\n } else {\n segments.push(word);\n }\n }\n\n return `${protocol}://${host}/${segments.join('/')}`;\n}\n\n/** Generates a domain name of the form `domain.tld`. */\nexport function domainName(ctx: IllusionistContext): string {\n const domain = pick(INTERNET_DATA.domains, ctx.source) ?? 'example';\n const tld = pick(INTERNET_DATA.tlds, ctx.source) ?? 'com';\n return `${domain}.${tld}`;\n}\n\n/** Generates an IPv4 or IPv6 address. Defaults to IPv4. */\nexport function ip(ctx: IllusionistContext, version: 4 | 6 = 4): string {\n if (version === 6) {\n const groups: string[] = [];\n for (let i = 0; i < 8; i++) {\n groups.push(hexString(4, ctx.source));\n }\n return groups.join(':');\n }\n const octets: number[] = [];\n for (let i = 0; i < 4; i++) {\n octets.push(int(0, 255, ctx.source));\n }\n return octets.join('.');\n}\n\n/** Generates a MAC address of the form `XX:XX:XX:XX:XX:XX`. */\nexport function mac(ctx: IllusionistContext): string {\n const parts: string[] = [];\n for (let i = 0; i < 6; i++) {\n parts.push(hexString(2, ctx.source));\n }\n return parts.join(':');\n}\n\n/** Picks a random user agent string. */\nexport function userAgent(ctx: IllusionistContext): string {\n return pick(INTERNET_DATA.userAgents, ctx.source) ?? INTERNET_DATA.userAgents[0]!;\n}\n\n/** Picks a random HTTP method. */\nexport function httpMethod(ctx: IllusionistContext): string {\n return pick(INTERNET_DATA.httpMethods, ctx.source) ?? 'GET';\n}\n\n/** Picks a random HTTP status code. */\nexport function statusCode(ctx: IllusionistContext): number {\n return pick(INTERNET_DATA.statusCodes, ctx.source) ?? 200;\n}\n\n/** Picks a random MIME type. */\nexport function mimeType(ctx: IllusionistContext): string {\n return pick(INTERNET_DATA.mimeTypes, ctx.source) ?? 'text/plain';\n}\n","import { float } from '../_helpers/float';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext, LocationLocaleData } from '../types';\n\nfunction data(ctx: IllusionistContext): LocationLocaleData {\n return ctx.locale.location;\n}\n\n/** A geographic coordinate pair. */\nexport type Coordinate = {\n lat: number;\n lng: number;\n};\n\n/** Picks a random city from the locale dataset. */\nexport function city(ctx: IllusionistContext): string {\n return pick(data(ctx).cities, ctx.source)!;\n}\n\n/** Picks a random street from the locale dataset. */\nexport function street(ctx: IllusionistContext): string {\n return pick(data(ctx).streets, ctx.source)!;\n}\n\n/** Builds a street address: a house number (1-999) followed by a street name. */\nexport function streetAddress(ctx: IllusionistContext): string {\n const houseNumber = Math.floor(float(1, 1000, ctx.source));\n return `${houseNumber} ${street(ctx)}`;\n}\n\n/** Generates a ZIP/postal code matching the locale's pattern (`#` = digit, other chars preserved). */\nexport function zipCode(ctx: IllusionistContext): string {\n const pattern = data(ctx).zipPattern;\n\n return pattern.replace(/#/g, () => String(Math.floor((ctx.source.next() ?? 0) * 10)));\n}\n\n/** Picks a random state/region from the locale dataset. */\nexport function state(ctx: IllusionistContext): string {\n return pick(data(ctx).states, ctx.source)!;\n}\n\n/** Picks a random country from the locale dataset. */\nexport function country(ctx: IllusionistContext): string {\n return pick(data(ctx).countries, ctx.source)!;\n}\n\n/** Generates a random latitude in the range [-90, 90]. */\nexport function latitude(ctx: IllusionistContext): number {\n return float(-90, 90, ctx.source);\n}\n\n/** Generates a random longitude in the range [-180, 180]. */\nexport function longitude(ctx: IllusionistContext): number {\n return float(-180, 180, ctx.source);\n}\n\n/**\n * Returns a coordinate within ~1 degree of the reference point.\n * When no reference is provided, a random coordinate is used.\n */\nexport function nearbyGPSCoordinate(ctx: IllusionistContext, ref?: Coordinate): Coordinate {\n const base = ref ?? { lat: latitude(ctx), lng: longitude(ctx) };\n return {\n lat: float(base.lat - 1, base.lat + 1, ctx.source),\n lng: float(base.lng - 1, base.lng + 1, ctx.source),\n };\n}\n","/** Latin word pool for the `lorem` category. */\nexport const LOREM_DATA = {\n words: [\n 'lorem',\n 'ipsum',\n 'dolor',\n 'sit',\n 'amet',\n 'consectetur',\n 'adipiscing',\n 'elit',\n 'sed',\n 'do',\n 'eiusmod',\n 'tempor',\n 'incididunt',\n 'ut',\n 'labore',\n 'et',\n 'dolore',\n 'magna',\n 'aliqua',\n 'enim',\n 'ad',\n 'minim',\n 'veniam',\n 'quis',\n 'nostrud',\n 'exercitation',\n 'ullamco',\n 'laboris',\n 'nisi',\n 'aliquip',\n 'ex',\n 'ea',\n 'commodo',\n 'consequat',\n 'duis',\n 'aute',\n 'irure',\n 'in',\n 'reprehenderit',\n 'voluptate',\n 'velit',\n 'esse',\n 'cillum',\n 'fugiat',\n 'nulla',\n 'pariatur',\n 'excepteur',\n 'sint',\n 'occaecat',\n 'cupidatat',\n 'non',\n 'proident',\n 'sunt',\n 'culpa',\n 'qui',\n 'officia',\n 'deserunt',\n 'mollit',\n 'anim',\n 'id',\n 'est',\n 'laborum',\n ],\n} as const;\n","import { float } from '../_helpers/float';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { LOREM_DATA } from './data';\n\n/** Picks a single random word from the lorem word pool. */\nexport function word(ctx: IllusionistContext): string {\n return pick(LOREM_DATA.words, ctx.source)!;\n}\n\n/** Builds a space-joined run of `count` random words (default 3). */\nexport function words(ctx: IllusionistContext, count = 3): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(word(ctx));\n }\n return out.join(' ');\n}\n\n/** Builds a sentence of `wordCount` words (default 6-12) with a capital first letter and trailing period. */\nexport function sentence(ctx: IllusionistContext, wordCount?: number): string {\n const count = wordCount ?? Math.floor(float(6, 13, ctx.source));\n const text = words(ctx, count);\n return `${text.charAt(0).toUpperCase()}${text.slice(1)}.`;\n}\n\n/** Builds `count` space-joined sentences (default 3). */\nexport function sentences(ctx: IllusionistContext, count = 3): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(sentence(ctx));\n }\n return out.join(' ');\n}\n\n/** Builds a paragraph of `sentenceCount` sentences (default 3-7), space-joined. */\nexport function paragraph(ctx: IllusionistContext, sentenceCount?: number): string {\n const count = sentenceCount ?? Math.floor(float(3, 8, ctx.source));\n return sentences(ctx, count);\n}\n\n/** Builds `count` newline-joined paragraphs (default 3). */\nexport function paragraphs(ctx: IllusionistContext, count = 3): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(paragraph(ctx));\n }\n return out.join('\\n');\n}\n\n/** Builds a hyphen-joined slug of `wordCount` words (default 3). */\nexport function slug(ctx: IllusionistContext, wordCount = 3): string {\n const out: string[] = [];\n for (let i = 0; i < wordCount; i++) {\n out.push(word(ctx));\n }\n return out.join('-');\n}\n\n/** Builds `count` newline-joined lines, each a sentence (default 5). */\nexport function lines(ctx: IllusionistContext, count = 5): string {\n const out: string[] = [];\n for (let i = 0; i < count; i++) {\n out.push(sentence(ctx));\n }\n return out.join('\\n');\n}\n","import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/** Generates a random boolean with an optional probability bias (0–1, default 0.5). */\nexport function boolean(source?: RandomSource, probability = 0.5): boolean {\n const raw = source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n\n return raw < probability;\n}\n","import { boolean } from '../_helpers/boolean';\nimport { pick } from '../_helpers/string';\nimport type { IllusionistContext, PersonLocaleData } from '../types';\n\nfunction data(ctx: IllusionistContext): PersonLocaleData {\n return ctx.locale.person;\n}\n\nexport function firstName(ctx: IllusionistContext): string {\n const d = data(ctx);\n const pool = boolean(ctx.source) ? d.firstNameMale : d.firstNameFemale;\n return pick(pool, ctx.source)!;\n}\n\nexport function lastName(ctx: IllusionistContext): string {\n return pick(data(ctx).lastName, ctx.source)!;\n}\n\nexport function fullName(ctx: IllusionistContext): string {\n return `${firstName(ctx)} ${lastName(ctx)}`;\n}\n\nexport function gender(ctx: IllusionistContext): string {\n return pick(data(ctx).gender, ctx.source)!;\n}\n\nexport function prefix(ctx: IllusionistContext): string {\n return pick(data(ctx).prefix, ctx.source)!;\n}\n\nexport function suffix(ctx: IllusionistContext): string {\n const d = data(ctx);\n if (d.suffix.length === 0) return '';\n return pick(d.suffix, ctx.source)!;\n}\n\nexport function jobTitle(ctx: IllusionistContext): string {\n const d = data(ctx);\n return `${pick(d.jobAreas, ctx.source)!} ${pick(d.jobTypes, ctx.source)!}`;\n}\n","//#region src/errors.ts\nvar e = class extends Error {\n\tconstructor(e, t) {\n\t\tsuper(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);\n\t}\n}, t = class extends e {};\n//#endregion\nexport { e as ArsenalError, t as ArsenalSerializationError };\n\n//# sourceMappingURL=errors.js.map","import { ArsenalSerializationError as e } from \"../errors.js\";\n//#region src/object/hash.ts\nfunction t(n, r, i) {\n\tif (n === void 0) return \"undefined\";\n\tif (n === null) return \"null\";\n\tif (typeof n == \"bigint\") return `${n}n`;\n\tif (typeof n != \"object\") return JSON.stringify(n);\n\tif (i.has(n)) return \"[Circular]\";\n\tif (i.add(n), n instanceof Date) return `[Date:${Number.isNaN(n.getTime()) ? \"Invalid\" : n.toISOString()}]`;\n\tif (n instanceof RegExp) return `[RegExp:${n.source}/${n.flags}]`;\n\tif (n instanceof Set) return `[Set:${[...n].map((e) => t(e, r, i)).sort().join(\",\")}]`;\n\tif (n instanceof Map) return `[Map:${[...n.entries()].map(([e, n]) => [t(e, r, i), t(n, r, i)]).sort(([e, t], [n, r]) => e === n ? t.localeCompare(r) : e.localeCompare(n)).map(([e, t]) => `${e}=>${t}`).join(\",\")}]`;\n\tif (Array.isArray(n)) return `[${n.map((e) => t(e, r, i)).join(\",\")}]`;\n\tlet a = Object.getPrototypeOf(n);\n\tif (a !== Object.prototype && a !== null) {\n\t\tif (r?.onClassInstance === \"throw\") throw new e(`hash: unsupported type ${n.constructor?.name ?? \"unknown\"}`);\n\t\treturn String(n);\n\t}\n\tlet o = n;\n\treturn `{${Object.keys(o).filter((e) => o[e] !== void 0).sort().map((e) => `${JSON.stringify(e)}:${t(o[e], r, i)}`).join(\",\")}}`;\n}\nfunction n(e, n) {\n\treturn t(e, n, /* @__PURE__ */ new Set());\n}\n//#endregion\nexport { n as hash };\n\n//# sourceMappingURL=hash.js.map","import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/**\n * Mulberry32 — a fast, deterministic 32-bit PRNG.\n *\n * Not cryptographically secure. Use `createSeed()` without a seed for\n * `crypto.getRandomValues`-backed randomness in security-sensitive contexts.\n *\n * @param seed - A 32-bit integer seed.\n * @returns A {@link RandomSource} producing floats in `[0, 1)`.\n */\nexport function mulberry32(seed: number): RandomSource {\n let state = seed >>> 0;\n\n return {\n next(): number {\n state = (state + 0x6d2b79f5) >>> 0;\n let t = state;\n\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n },\n };\n}\n","import { hash } from '@vielzeug/arsenal/object';\nimport type { RandomSource } from '@vielzeug/arsenal/random';\n\nimport { IllusionistSeedError } from '../errors';\nimport { mulberry32 } from './mulberry32';\n\n/**\n * Creates a {@link RandomSource} from a seed.\n *\n * - **Number seed** — used directly as the mulberry32 state.\n * - **String seed** — hashed via `arsenal`'s `hash()` to produce a 32-bit integer.\n * - **No seed** — falls back to `crypto.getRandomValues` for cryptographic randomness.\n *\n * @example\n * ```ts\n * const a = createSeed(12345); // deterministic\n * const b = createSeed('hello'); // deterministic (hashed)\n * const c = createSeed(); // cryptographic (non-deterministic)\n * ```\n */\nexport function createSeed(seed?: number | string): RandomSource {\n if (seed == null) return cryptoSource();\n\n if (typeof seed === 'number') {\n if (!Number.isFinite(seed)) throw new IllusionistSeedError(`createSeed: numeric seed must be finite, got ${seed}`);\n\n return mulberry32(Math.trunc(seed));\n }\n\n const hashed = hash(seed);\n\n // FNV-1a-ish fold from the hash string into a 32-bit integer.\n let state = 0;\n\n for (let i = 0; i < hashed.length; i++) {\n state = (Math.imul(state, 31) + hashed.charCodeAt(i)) >>> 0;\n }\n\n return mulberry32(state);\n}\n\nfunction cryptoSource(): RandomSource {\n return {\n next(): number {\n return crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n },\n };\n}\n","export const SYSTEM_DATA = {\n cronExpressions: [\n '0 * * * *',\n '0 0 * * *',\n '0 0 * * 0',\n '*/5 * * * *',\n '0 12 * * 1-5',\n '0 0 1 * *',\n '0 0 1 1 *',\n '0 3 * * *',\n '30 7 * * 1-5',\n '0 18 * * 5',\n ],\n directories: [\n 'src',\n 'dist',\n 'build',\n 'lib',\n 'test',\n 'docs',\n 'config',\n 'assets',\n 'public',\n 'private',\n 'tmp',\n 'cache',\n 'var',\n 'opt',\n 'etc',\n ],\n fileExtensions: [\n 'txt',\n 'pdf',\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'jpg',\n 'png',\n 'gif',\n 'svg',\n 'webp',\n 'ico',\n 'mp3',\n 'wav',\n 'flac',\n 'ogg',\n 'mp4',\n 'avi',\n 'mkv',\n 'webm',\n 'zip',\n 'tar',\n 'gz',\n 'rar',\n '7z',\n 'js',\n 'ts',\n 'json',\n 'xml',\n 'html',\n 'css',\n 'md',\n 'py',\n 'java',\n 'go',\n 'rs',\n 'c',\n 'cpp',\n ],\n fileNames: [\n 'document',\n 'report',\n 'summary',\n 'notes',\n 'draft',\n 'config',\n 'readme',\n 'index',\n 'main',\n 'app',\n 'data',\n 'backup',\n 'export',\n 'import',\n 'log',\n ],\n mimeTypes: {\n avi: 'video/x-msvideo',\n css: 'text/css',\n gif: 'image/gif',\n gz: 'application/gzip',\n html: 'text/html',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n mp3: 'audio/mpeg',\n mp4: 'video/mp4',\n pdf: 'application/pdf',\n png: 'image/png',\n svg: 'image/svg+xml',\n tar: 'application/x-tar',\n txt: 'text/plain',\n wav: 'audio/wav',\n webp: 'image/webp',\n xml: 'application/xml',\n zip: 'application/zip',\n },\n} as const;\n","import { uuid as cryptoUuid } from '@vielzeug/arsenal/random';\n\nimport { int } from '../_helpers/int';\nimport { alphanumeric, pick } from '../_helpers/string';\nimport type { IllusionistContext } from '../types';\nimport { SYSTEM_DATA } from './data';\n\n/** Generates a random file extension from common types. */\nexport function fileExtension(ctx: IllusionistContext): string {\n return pick(SYSTEM_DATA.fileExtensions, ctx.source)!;\n}\n\n/** Generates a random file name with extension. */\nexport function fileName(ctx: IllusionistContext): string {\n const base = pick(SYSTEM_DATA.fileNames, ctx.source)!;\n const ext = fileExtension(ctx);\n\n return `${base}.${ext}`;\n}\n\n/** Generates a random file path with 1-4 directory segments and a file name. */\nexport function filePath(ctx: IllusionistContext): string {\n const segments = int(1, 4, ctx.source);\n const dirs: string[] = [];\n\n for (let i = 0; i < segments; i++) {\n dirs.push(pick(SYSTEM_DATA.directories, ctx.source)!);\n }\n\n return `${dirs.join('/')}/${fileName(ctx)}`;\n}\n\n/** Returns a random MIME type string. */\nexport function mimeType(ctx: IllusionistContext): string {\n const types = Object.values(SYSTEM_DATA.mimeTypes);\n\n return pick(types, ctx.source)!;\n}\n\n/** Generates a random semver version string. */\nexport function semver(ctx: IllusionistContext, options?: { maxMajor?: number; includePrerelease?: boolean }): string {\n const maxMajor = options?.maxMajor ?? 20;\n const major = int(0, maxMajor, ctx.source);\n const minor = int(0, 20, ctx.source);\n const patch = int(0, 99, ctx.source);\n\n let version = `${major}.${minor}.${patch}`;\n\n if (options?.includePrerelease && ctx.source.next() < 0.3) {\n const labels = ['alpha', 'beta', 'rc', 'next'];\n const label = pick(labels, ctx.source)!;\n const num = int(1, 10, ctx.source);\n\n version += `-${label}.${num}`;\n }\n\n return version;\n}\n\n/**\n * Generates a random UUID via `crypto.randomUUID()`.\n *\n * **Not deterministic** — ignores the seeded `RandomSource` and always uses\n * cryptographic randomness. Use this for unique identifiers where\n * unpredictability matters more than reproducibility.\n */\nexport function uuid(): string {\n return cryptoUuid();\n}\n\n/** Generates a random port number (1-65535, avoiding well-known ports below 1024 by default). */\nexport function port(ctx: IllusionistContext, options?: { min?: number; max?: number }): number {\n const min = options?.min ?? 1024;\n const max = options?.max ?? 65535;\n\n return int(min, max, ctx.source);\n}\n\n/** Returns a random cron expression from common patterns. */\nexport function cron(ctx: IllusionistContext): string {\n return pick(SYSTEM_DATA.cronExpressions, ctx.source)!;\n}\n\n/** Generates a random process name. */\nexport function process(ctx: IllusionistContext): string {\n const prefixes = ['node', 'python', 'ruby', 'java', 'go', 'rust', 'bash'];\n const prefix = pick(prefixes, ctx.source)!;\n const suffix = alphanumeric(int(3, 8, ctx.source), ctx.source);\n\n return `${prefix}_${suffix}`;\n}\n","import type { RandomSource } from '@vielzeug/arsenal/random';\nimport * as commerceApi from './commerce/commerce';\nimport * as dateApi from './date/date';\nimport * as financeApi from './finance/finance';\nimport * as internetApi from './internet/internet';\nimport * as locationApi from './location/location';\nimport * as loremApi from './lorem/lorem';\nimport * as personApi from './person/person';\nimport { createSeed } from './seed/create-seed';\nimport * as systemApi from './system/system';\nimport type { IllusionistContext, IllusionistLocale, IllusionistOptions } from './types';\n\nexport type { IllusionistOptions } from './types';\n\n/** Strips the leading `IllusionistContext` parameter from a function type. */\ntype Bound<F> = F extends (ctx: IllusionistContext, ...args: infer A) => infer R ? (...args: A) => R : F;\n\n/** Maps a module of `(ctx, ...args) => R` functions to `(...args) => R`. */\ntype BoundApi<T> = { readonly [K in keyof T]: Bound<T[K]> };\n\nexport type Illusionist = {\n readonly person: BoundApi<typeof personApi>;\n readonly internet: BoundApi<typeof internetApi>;\n readonly commerce: BoundApi<typeof commerceApi>;\n readonly date: BoundApi<typeof dateApi>;\n readonly finance: BoundApi<typeof financeApi>;\n readonly location: BoundApi<typeof locationApi>;\n readonly lorem: BoundApi<typeof loremApi>;\n readonly system: BoundApi<typeof systemApi>;\n\n /** The seed used to initialize this instance, or `undefined` for cryptographic randomness. */\n readonly seed: number | string | undefined;\n /** The active locale data. */\n readonly locale: IllusionistLocale;\n\n dispose(): void;\n readonly disposed: boolean;\n readonly disposalSignal: AbortSignal;\n [Symbol.dispose](): void;\n};\n\n/**\n * Creates a bound illusionist instance with all categories sharing a single seeded\n * random source and locale.\n *\n * @example\n * ```ts\n * import { en } from '@vielzeug/illusionist/locales';\n *\n * const illusion = createIllusion({ seed: 12345, locale: en });\n *\n * illusion.person.fullName(); // deterministic — same seed → same result\n * illusion.internet.email();\n * illusion.commerce.price();\n * illusion.dispose(); // [Symbol.dispose]() also works\n * ```\n */\nexport function createIllusion(options: IllusionistOptions): Illusionist {\n const { locale, seed } = options;\n const source: RandomSource = createSeed(seed);\n const controller = new AbortController();\n let disposed = false;\n\n const ctx: IllusionistContext = { locale, source };\n\n const bind = <T extends Record<string, (ctx: IllusionistContext, ...args: never[]) => unknown>>(\n api: T,\n ): BoundApi<T> => {\n const bound = {} as Record<string, (...args: never[]) => unknown>;\n\n for (const [key, fn] of Object.entries(api)) {\n if (typeof fn === 'function') {\n bound[key] = (...args: never[]) => (fn as (ctx: IllusionistContext, ...args: never[]) => unknown)(ctx, ...args);\n }\n }\n\n return bound as unknown as BoundApi<T>;\n };\n\n const dispose = (): void => {\n if (disposed) return;\n\n disposed = true;\n controller.abort();\n };\n\n return {\n commerce: bind(commerceApi),\n date: bind(dateApi),\n get disposalSignal(): AbortSignal {\n return controller.signal;\n },\n dispose,\n get disposed(): boolean {\n return disposed;\n },\n finance: bind(financeApi),\n internet: bind(internetApi),\n locale,\n location: bind(locationApi),\n lorem: bind(loremApi),\n person: bind(personApi),\n seed,\n system: bind(systemApi),\n [Symbol.dispose]: dispose,\n };\n}\n","/** German-language location dataset for the `location` category. */\nexport const LOCATION_DATA_DE = {\n cities: [\n 'Berlin',\n 'Hamburg',\n 'München',\n 'Köln',\n 'Frankfurt am Main',\n 'Stuttgart',\n 'Düsseldorf',\n 'Leipzig',\n 'Dortmund',\n 'Essen',\n 'Bremen',\n 'Dresden',\n 'Hannover',\n 'Nürnberg',\n 'Duisburg',\n 'Bochum',\n 'Wuppertal',\n 'Bielefeld',\n 'Bonn',\n 'Münster',\n ],\n countries: [\n 'Deutschland',\n 'Österreich',\n 'Schweiz',\n 'Frankreich',\n 'Italien',\n 'Spanien',\n 'Niederlande',\n 'Belgien',\n 'Polen',\n 'Tschechien',\n 'Dänemark',\n 'Schweden',\n 'Norwegen',\n 'Finnland',\n 'Portugal',\n ],\n states: [\n 'Baden-Württemberg',\n 'Bayern',\n 'Berlin',\n 'Brandenburg',\n 'Bremen',\n 'Hamburg',\n 'Hessen',\n 'Mecklenburg-Vorpommern',\n 'Niedersachsen',\n 'Nordrhein-Westfalen',\n 'Rheinland-Pfalz',\n 'Saarland',\n 'Sachsen',\n 'Sachsen-Anhalt',\n 'Schleswig-Holstein',\n 'Thüringen',\n ],\n streets: [\n 'Hauptstraße',\n 'Schulstraße',\n 'Bahnhofstraße',\n 'Gartenstraße',\n 'Bergstraße',\n 'Dorfstraße',\n 'Lindenstraße',\n 'Goethestraße',\n 'Schillerstraße',\n 'Mozartstraße',\n 'Bahnhofplatz',\n 'Marktplatz',\n 'Kirchplatz',\n 'Schlossplatz',\n 'Waldrand',\n ],\n zipPattern: '#####',\n} as const;\n","/** German-language person dataset for the `person` category. */\nexport const PERSON_DATA_DE = {\n firstNameFemale: [\n 'Mia',\n 'Emma',\n 'Sophia',\n 'Hannah',\n 'Emilia',\n 'Lina',\n 'Ella',\n 'Marie',\n 'Clara',\n 'Lena',\n 'Lea',\n 'Lilly',\n 'Anna',\n 'Ida',\n 'Mila',\n 'Luisa',\n 'Nora',\n 'Greta',\n 'Frieda',\n 'Johanna',\n 'Lotte',\n 'Charlotte',\n 'Mathilda',\n 'Lara',\n 'Sarah',\n 'Julia',\n 'Laura',\n 'Lisa',\n 'Katharina',\n 'Sabine',\n 'Andrea',\n 'Petra',\n 'Susanne',\n 'Nicole',\n 'Stefanie',\n 'Christina',\n 'Tanja',\n 'Birgit',\n 'Monika',\n 'Ursula',\n 'Helga',\n 'Ingrid',\n 'Brigitte',\n 'Gisela',\n 'Renate',\n 'Angelika',\n 'Claudia',\n 'Sandra',\n 'Beate',\n 'Klara',\n ],\n firstNameMale: [\n 'Ben',\n 'Paul',\n 'Leon',\n 'Finn',\n 'Elias',\n 'Jonas',\n 'Felix',\n 'Maximilian',\n 'Max',\n 'Luca',\n 'Noah',\n 'Henry',\n 'Lukas',\n 'Moritz',\n 'David',\n 'Niklas',\n 'Philipp',\n 'Julian',\n 'Tim',\n 'Tom',\n 'Simon',\n 'Alexander',\n 'Liam',\n 'Emil',\n 'Daniel',\n 'Sebastian',\n 'Matteo',\n 'Fabian',\n 'Jakob',\n 'Tobias',\n 'Florian',\n 'Marvin',\n 'Anton',\n 'Johannes',\n 'Stefan',\n 'Andreas',\n 'Michael',\n 'Thomas',\n 'Christian',\n 'Klaus',\n 'Peter',\n 'Wolfgang',\n 'Jürgen',\n 'Frank',\n 'Hans',\n 'Martin',\n 'Rolf',\n 'Bernd',\n 'Uwe',\n 'Karl',\n ],\n gender: ['Männlich', 'Weiblich', 'Nicht-binär', 'Divers'],\n jobAreas: [\n 'Finanzen',\n 'IT',\n 'Marketing',\n 'Vertrieb',\n 'Personalwesen',\n 'Betrieb',\n 'Ingenieurwesen',\n 'Forschung',\n 'Design',\n 'Recht',\n 'Kundenservice',\n 'Produkt',\n 'Logistik',\n 'Buchhaltung',\n 'Öffentlichkeitsarbeit',\n 'Qualitätssicherung',\n 'Daten',\n 'Sicherheit',\n 'Kommunikation',\n 'Verwaltung',\n ],\n jobTypes: [\n 'Ingenieur',\n 'Manager',\n 'Analyst',\n 'Spezialist',\n 'Koordinator',\n 'Direktor',\n 'Berater',\n 'Entwickler',\n 'Architekt',\n 'Administrator',\n 'Beamter',\n 'Mitarbeiter',\n 'Aufseher',\n 'Techniker',\n 'Assistent',\n ],\n lastName: [\n 'Müller',\n 'Schmidt',\n 'Schneider',\n 'Fischer',\n 'Weber',\n 'Meyer',\n 'Wagner',\n 'Becker',\n 'Schulz',\n 'Hoffmann',\n 'Schäfer',\n 'Koch',\n 'Bauer',\n 'Richter',\n 'Klein',\n 'Wolf',\n 'Schröder',\n 'Neumann',\n 'Schwarz',\n 'Zimmermann',\n 'Braun',\n 'Krüger',\n 'Hofmann',\n 'Hartmann',\n 'Lange',\n 'Schmitt',\n 'Werner',\n 'Krause',\n 'Lehmann',\n 'Schmid',\n 'Schulze',\n 'Maier',\n 'Köhler',\n 'Herrmann',\n 'König',\n 'Walter',\n 'Mayer',\n 'Huber',\n 'Kaiser',\n 'Fuchs',\n 'Peters',\n 'Lang',\n 'Scholz',\n 'Möller',\n 'Weiß',\n 'Jung',\n 'Hahn',\n 'Schubert',\n 'Vogel',\n 'Friedrich',\n ],\n prefix: ['Herr', 'Frau', 'Dr.', 'Prof.'],\n suffix: [],\n};\n","import { LOCATION_DATA_DE } from '../location/data/de';\nimport { PERSON_DATA_DE } from '../person/data/de';\nimport type { IllusionistLocale } from '../types';\n\n/** German locale data for Illusionist. */\nexport const de = {\n code: 'de',\n location: LOCATION_DATA_DE,\n person: PERSON_DATA_DE,\n} satisfies IllusionistLocale;\n","/** English-language location dataset for the `location` category. */\nexport const LOCATION_DATA_EN = {\n cities: [\n 'New York',\n 'Los Angeles',\n 'Chicago',\n 'Houston',\n 'Phoenix',\n 'Philadelphia',\n 'San Antonio',\n 'San Diego',\n 'Dallas',\n 'San Jose',\n 'Austin',\n 'Jacksonville',\n 'Fort Worth',\n 'Columbus',\n 'Charlotte',\n 'San Francisco',\n 'Indianapolis',\n 'Seattle',\n 'Denver',\n 'Boston',\n ],\n countries: [\n 'United States',\n 'United Kingdom',\n 'Germany',\n 'France',\n 'Italy',\n 'Spain',\n 'Netherlands',\n 'Belgium',\n 'Switzerland',\n 'Austria',\n 'Canada',\n 'Australia',\n 'Japan',\n 'Brazil',\n 'India',\n ],\n states: [\n 'Alabama',\n 'Alaska',\n 'Arizona',\n 'Arkansas',\n 'California',\n 'Colorado',\n 'Connecticut',\n 'Delaware',\n 'Florida',\n 'Georgia',\n 'Hawaii',\n 'Idaho',\n 'Illinois',\n 'Indiana',\n 'Iowa',\n 'Kansas',\n 'Kentucky',\n 'Louisiana',\n 'Maine',\n 'Maryland',\n 'Massachusetts',\n 'Michigan',\n 'Minnesota',\n 'Mississippi',\n 'Missouri',\n 'Montana',\n 'Nebraska',\n 'Nevada',\n 'New Hampshire',\n 'New Jersey',\n 'New Mexico',\n 'New York',\n 'North Carolina',\n 'North Dakota',\n 'Ohio',\n 'Oklahoma',\n 'Oregon',\n 'Pennsylvania',\n 'Rhode Island',\n 'South Carolina',\n 'South Dakota',\n 'Tennessee',\n 'Texas',\n 'Utah',\n 'Vermont',\n 'Virginia',\n 'Washington',\n 'West Virginia',\n 'Wisconsin',\n 'Wyoming',\n ],\n streets: [\n 'Main St',\n 'Oak Ave',\n 'Maple Dr',\n 'Cedar Ln',\n 'Pine Rd',\n 'Elm St',\n 'Washington Blvd',\n 'Park Ave',\n 'Lake Dr',\n 'Hill Rd',\n 'River Rd',\n 'Spring St',\n 'Forest Dr',\n 'Sunset Blvd',\n 'Highland Ave',\n ],\n zipPattern: '#####',\n} as const;\n","/** English-language person dataset for the `person` category. */\nexport const PERSON_DATA_EN = {\n firstNameFemale: [\n 'Mary',\n 'Patricia',\n 'Jennifer',\n 'Linda',\n 'Elizabeth',\n 'Barbara',\n 'Susan',\n 'Jessica',\n 'Sarah',\n 'Karen',\n 'Lisa',\n 'Nancy',\n 'Betty',\n 'Margaret',\n 'Sandra',\n 'Ashley',\n 'Kimberly',\n 'Emily',\n 'Donna',\n 'Michelle',\n 'Carol',\n 'Amanda',\n 'Dorothy',\n 'Melissa',\n 'Deborah',\n 'Stephanie',\n 'Rebecca',\n 'Sharon',\n 'Laura',\n 'Cynthia',\n 'Kathleen',\n 'Amy',\n 'Shirley',\n 'Angela',\n 'Helen',\n 'Anna',\n 'Brenda',\n 'Pamela',\n 'Nicole',\n 'Emma',\n 'Samantha',\n 'Katherine',\n 'Christine',\n 'Debra',\n 'Rachel',\n 'Catherine',\n 'Carolyn',\n 'Janet',\n 'Ruth',\n 'Maria',\n ],\n firstNameMale: [\n 'James',\n 'John',\n 'Robert',\n 'Michael',\n 'William',\n 'David',\n 'Richard',\n 'Joseph',\n 'Thomas',\n 'Charles',\n 'Christopher',\n 'Daniel',\n 'Matthew',\n 'Anthony',\n 'Mark',\n 'Donald',\n 'Steven',\n 'Paul',\n 'Andrew',\n 'Joshua',\n 'Kenneth',\n 'Kevin',\n 'Brian',\n 'George',\n 'Edward',\n 'Ronald',\n 'Timothy',\n 'Jason',\n 'Jeffrey',\n 'Ryan',\n 'Jacob',\n 'Gary',\n 'Nicholas',\n 'Eric',\n 'Jonathan',\n 'Stephen',\n 'Larry',\n 'Justin',\n 'Scott',\n 'Brandon',\n 'Benjamin',\n 'Samuel',\n 'Gregory',\n 'Frank',\n 'Alexander',\n 'Raymond',\n 'Patrick',\n 'Jack',\n 'Dennis',\n 'Jerry',\n ],\n gender: ['Male', 'Female', 'Non-binary', 'Other'],\n jobAreas: [\n 'Finance',\n 'IT',\n 'Marketing',\n 'Sales',\n 'Human Resources',\n 'Operations',\n 'Engineering',\n 'Research',\n 'Design',\n 'Legal',\n 'Customer Support',\n 'Product',\n 'Logistics',\n 'Accounting',\n 'Public Relations',\n 'Quality Assurance',\n 'Data',\n 'Security',\n 'Communications',\n 'Administration',\n ],\n jobTypes: [\n 'Engineer',\n 'Manager',\n 'Analyst',\n 'Specialist',\n 'Coordinator',\n 'Director',\n 'Consultant',\n 'Developer',\n 'Architect',\n 'Administrator',\n 'Officer',\n 'Representative',\n 'Supervisor',\n 'Technician',\n 'Assistant',\n ],\n lastName: [\n 'Smith',\n 'Johnson',\n 'Williams',\n 'Brown',\n 'Jones',\n 'Garcia',\n 'Miller',\n 'Davis',\n 'Rodriguez',\n 'Martinez',\n 'Hernandez',\n 'Lopez',\n 'Gonzalez',\n 'Wilson',\n 'Anderson',\n 'Thomas',\n 'Taylor',\n 'Moore',\n 'Jackson',\n 'Martin',\n 'Lee',\n 'Perez',\n 'Thompson',\n 'White',\n 'Harris',\n 'Sanchez',\n 'Clark',\n 'Ramirez',\n 'Lewis',\n 'Robinson',\n 'Walker',\n 'Young',\n 'Allen',\n 'King',\n 'Wright',\n 'Scott',\n 'Torres',\n 'Nguyen',\n 'Hill',\n 'Flores',\n 'Green',\n 'Adams',\n 'Nelson',\n 'Baker',\n 'Hall',\n 'Rivera',\n 'Campbell',\n 'Mitchell',\n 'Carter',\n 'Roberts',\n ],\n prefix: ['Mr.', 'Mrs.', 'Ms.', 'Dr.', 'Prof.'],\n suffix: ['Jr.', 'Sr.', 'II', 'III', 'IV', 'PhD'],\n};\n","import { LOCATION_DATA_EN } from '../location/data/en';\nimport { PERSON_DATA_EN } from '../person/data/en';\nimport type { IllusionistLocale } from '../types';\n\n/** English locale data for Illusionist. */\nexport const en = {\n code: 'en',\n location: LOCATION_DATA_EN,\n person: PERSON_DATA_EN,\n} satisfies IllusionistLocale;\n"],"mappings":"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BACA,SACA,SACA,cACA,SACA,UACA,SACA,yBACA,gBACA,sBACA,kBACA,WACA,UACA,iBACA,qBACA,WACF,EACA,QAAS,CACP,cACA,cACA,gBACA,eACA,aACA,aACA,eACA,eACA,iBACA,eACA,eACA,aACA,aACA,eACA,UACF,EACA,WAAY,OErEF,EACV,OAAQ,CDNR,gBAAiB,oVAmDjB,EACA,cAAe,8UAmDf,EACA,OAAQ,CAAC,WAAY,WAAY,cAAe,QAAQ,EACxD,SAAU,CACR,WACA,KACA,YACA,WACA,gBACA,UACA,iBACA,YACA,SACA,QACA,gBACA,UACA,WACA,cACA,wBACA,qBACA,QACA,aACA,gBACA,YACF,EACA,SAAU,CACR,YACA,UACA,UACA,aACA,cACA,WACA,UACA,aACA,YACA,gBACA,UACA,cACA,WACA,YACA,WACF,EACA,SAAU,+WAmDV,EACA,OAAQ,CAAC,OAAQ,OAAQ,MAAO,OAAO,EACvC,OAAQ,CAAC,CC/LD,CACV,EGJa,GAAK,CAChB,KAAM,KACN,SAAU,CFLV,OAAQ,CACN,WACA,cACA,UACA,UACA,UACA,eACA,cACA,YACA,SACA,WACA,SACA,eACA,aACA,WACA,YACA,gBACA,eACA,UACA,SACA,QACF,EACA,UAAW,CACT,gBACA,iBACA,UACA,SACA,QACA,QACA,cACA,UACA,cACA,UACA,SACA,YACA,QACA,SACA,OACF,EACA,OAAQ,meAmDR,EACA,QAAS,CACP,UACA,UACA,WACA,WACA,UACA,SACA,kBACA,WACA,UACA,UACA,WACA,YACA,YACA,cACA,cACF,EACA,WAAY,OEvGF,EACV,OAAQ,CDNR,gBAAiB,oXAmDjB,EACA,cAAe,6WAmDf,EACA,OAAQ,CAAC,OAAQ,SAAU,aAAc,OAAO,EAChD,SAAU,CACR,UACA,KACA,YACA,QACA,kBACA,aACA,cACA,WACA,SACA,QACA,mBACA,UACA,YACA,aACA,mBACA,oBACA,OACA,WACA,iBACA,gBACF,EACA,SAAU,CACR,WACA,UACA,UACA,aACA,cACA,WACA,aACA,YACA,YACA,gBACA,UACA,iBACA,aACA,aACA,WACF,EACA,SAAU,2WAmDV,EACA,OAAQ,CAAC,MAAO,OAAQ,MAAO,MAAO,OAAO,EAC7C,OAAQ,CAAC,MAAO,MAAO,KAAM,MAAO,KAAM,KAAK,CC/LvC,CACV"}
|