@vielzeug/illusionist 2.3.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +2 -50
  2. package/dist/_helpers/boolean.cjs +1 -1
  3. package/dist/_helpers/boolean.cjs.map +1 -1
  4. package/dist/_helpers/boolean.d.ts +1 -1
  5. package/dist/_helpers/boolean.d.ts.map +1 -1
  6. package/dist/_helpers/boolean.js.map +1 -1
  7. package/dist/_helpers/float.cjs +1 -1
  8. package/dist/_helpers/float.cjs.map +1 -1
  9. package/dist/_helpers/float.d.ts +1 -1
  10. package/dist/_helpers/float.d.ts.map +1 -1
  11. package/dist/_helpers/float.js.map +1 -1
  12. package/dist/_helpers/int.cjs +1 -1
  13. package/dist/_helpers/int.cjs.map +1 -1
  14. package/dist/_helpers/int.d.ts +1 -1
  15. package/dist/_helpers/int.d.ts.map +1 -1
  16. package/dist/_helpers/int.js +1 -1
  17. package/dist/_helpers/int.js.map +1 -1
  18. package/dist/_helpers/next-float.d.ts +1 -3
  19. package/dist/_helpers/next-float.d.ts.map +1 -1
  20. package/dist/_helpers/next-float.js +1 -7
  21. package/dist/_helpers/string.cjs +1 -1
  22. package/dist/_helpers/string.cjs.map +1 -1
  23. package/dist/_helpers/string.d.ts +1 -1
  24. package/dist/_helpers/string.d.ts.map +1 -1
  25. package/dist/_helpers/string.js.map +1 -1
  26. package/dist/date/date.cjs +1 -1
  27. package/dist/date/date.cjs.map +1 -1
  28. package/dist/date/date.d.ts.map +1 -1
  29. package/dist/date/date.js +24 -24
  30. package/dist/date/date.js.map +1 -1
  31. package/dist/factory.cjs +1 -1
  32. package/dist/factory.cjs.map +1 -1
  33. package/dist/factory.d.ts +0 -5
  34. package/dist/factory.d.ts.map +1 -1
  35. package/dist/factory.js +12 -22
  36. package/dist/factory.js.map +1 -1
  37. package/dist/illusionist.cjs +3 -3
  38. package/dist/illusionist.cjs.map +1 -1
  39. package/dist/illusionist.iife.js +3 -3
  40. package/dist/illusionist.iife.js.map +1 -1
  41. package/dist/illusionist.js +3 -3
  42. package/dist/illusionist.js.map +1 -1
  43. package/dist/internet/internet.cjs +1 -1
  44. package/dist/internet/internet.cjs.map +1 -1
  45. package/dist/internet/internet.js +11 -10
  46. package/dist/internet/internet.js.map +1 -1
  47. package/dist/location/location.cjs +1 -1
  48. package/dist/location/location.cjs.map +1 -1
  49. package/dist/seed/create-seed.cjs +1 -1
  50. package/dist/seed/create-seed.cjs.map +1 -1
  51. package/dist/seed/create-seed.d.ts +2 -2
  52. package/dist/seed/create-seed.d.ts.map +1 -1
  53. package/dist/seed/create-seed.js +10 -11
  54. package/dist/seed/create-seed.js.map +1 -1
  55. package/dist/seed/mulberry32.cjs.map +1 -1
  56. package/dist/seed/mulberry32.d.ts +1 -1
  57. package/dist/seed/mulberry32.d.ts.map +1 -1
  58. package/dist/seed/mulberry32.js.map +1 -1
  59. package/dist/system/system.cjs +1 -1
  60. package/dist/system/system.cjs.map +1 -1
  61. package/dist/system/system.d.ts.map +1 -1
  62. package/dist/system/system.js +23 -24
  63. package/dist/system/system.js.map +1 -1
  64. package/dist/types.d.ts +2 -3
  65. package/dist/types.d.ts.map +1 -1
  66. package/package.json +10 -10
  67. package/dist/_helpers/next-float.cjs +0 -2
  68. package/dist/_helpers/next-float.cjs.map +0 -1
  69. package/dist/_helpers/next-float.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"internet.cjs","names":[],"sources":["../../src/internet/internet.ts"],"sourcesContent":["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(pick(pool.split(''), ctx.source)!);\n }\n const all = upper + lower + digits + SPECIAL_CHARS;\n while (chars.length < length) {\n chars.push(pick(all.split(''), ctx.source)!);\n }\n\n // Shuffle via Fisher-Yates using ctx.source.\n for (let i = chars.length - 1; i > 0; i--) {\n const j = int(0, i, ctx.source);\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"],"mappings":"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"}
1
+ {"version":3,"file":"internet.cjs","names":[],"sources":["../../src/internet/internet.ts"],"sourcesContent":["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(pick(pool.split(''), ctx.source)!);\n }\n const all = upper + lower + digits + SPECIAL_CHARS;\n while (chars.length < length) {\n chars.push(pick(all.split(''), ctx.source)!);\n }\n\n // Shuffle via Fisher-Yates using ctx.source.\n for (let i = chars.length - 1; i > 0; i--) {\n const j = int(0, i, ctx.source);\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"],"mappings":"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"}
@@ -56,19 +56,20 @@ function d(e, r = {}) {
56
56
  let d = `${c}${l}`, f = a - d.length, p = d + (f > 0 ? (r + o).slice(0, f) : "");
57
57
  return p.length < a ? p + n(a - p.length, e.source) : p.slice(0, a);
58
58
  }
59
- let o = [
60
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
61
- "abcdefghijklmnopqrstuvwxyz",
62
- "0123456789",
59
+ let o = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", c = "abcdefghijklmnopqrstuvwxyz", l = "0123456789", u = [
60
+ o,
61
+ c,
62
+ l,
63
63
  s
64
- ], c = [];
65
- for (let t of o) c.push(i(t.split(""), e.source));
66
- for (; c.length < a;) c.push(i("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?".split(""), e.source));
67
- for (let n = c.length - 1; n > 0; n--) {
64
+ ], d = [];
65
+ for (let t of u) d.push(i(t.split(""), e.source));
66
+ let f = o + c + l + s;
67
+ for (; d.length < a;) d.push(i(f.split(""), e.source));
68
+ for (let n = d.length - 1; n > 0; n--) {
68
69
  let r = t(0, n, e.source);
69
- [c[n], c[r]] = [c[r], c[n]];
70
+ [d[n], d[r]] = [d[r], d[n]];
70
71
  }
71
- return c.slice(0, a).join("");
72
+ return d.slice(0, a).join("");
72
73
  }
73
74
  function f(e) {
74
75
  let r = i(a.protocols, e.source) ?? "https", o = `${i([
@@ -1 +1 @@
1
- {"version":3,"file":"internet.js","names":[],"sources":["../../src/internet/internet.ts"],"sourcesContent":["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(pick(pool.split(''), ctx.source)!);\n }\n const all = upper + lower + digits + SPECIAL_CHARS;\n while (chars.length < length) {\n chars.push(pick(all.split(''), ctx.source)!);\n }\n\n // Shuffle via Fisher-Yates using ctx.source.\n for (let i = chars.length - 1; i > 0; i--) {\n const j = int(0, i, ctx.source);\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"],"mappings":"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"}
1
+ {"version":3,"file":"internet.js","names":[],"sources":["../../src/internet/internet.ts"],"sourcesContent":["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(pick(pool.split(''), ctx.source)!);\n }\n const all = upper + lower + digits + SPECIAL_CHARS;\n while (chars.length < length) {\n chars.push(pick(all.split(''), ctx.source)!);\n }\n\n // Shuffle via Fisher-Yates using ctx.source.\n for (let i = chars.length - 1; i > 0; i--) {\n const j = int(0, i, ctx.source);\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"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../_helpers/next-float.cjs"),n=require("../_helpers/float.cjs"),r=require("../_helpers/string.cjs");var i=e.__exportAll({city:()=>o,country:()=>d,latitude:()=>f,longitude:()=>p,nearbyGPSCoordinate:()=>m,state:()=>u,street:()=>s,streetAddress:()=>c,zipCode:()=>l});function a(e){return e.locale.location}function o(e){return r.pick(a(e).cities,e.source)}function s(e){return r.pick(a(e).streets,e.source)}function c(e){return`${Math.floor(n.float(1,1e3,e.source))} ${s(e)}`}function l(e){return a(e).zipPattern.replace(/#/g,()=>String(Math.floor(t.nextFloat(e.source)*10)))}function u(e){return r.pick(a(e).states,e.source)}function d(e){return r.pick(a(e).countries,e.source)}function f(e){return n.float(-90,90,e.source)}function p(e){return n.float(-180,180,e.source)}function m(e,t){let r=t??{lat:f(e),lng:p(e)};return{lat:n.float(r.lat-1,r.lat+1,e.source),lng:n.float(r.lng-1,r.lng+1,e.source)}}exports.city=o,exports.country=d,exports.latitude=f,Object.defineProperty(exports,"location_exports",{enumerable:!0,get:function(){return i}}),exports.longitude=p,exports.nearbyGPSCoordinate=m,exports.state=u,exports.street=s,exports.streetAddress=c,exports.zipCode=l;
1
+ const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../_helpers/float.cjs"),n=require("../_helpers/string.cjs");let r=require("@vielzeug/arsenal");var i=e.__exportAll({city:()=>o,country:()=>d,latitude:()=>f,longitude:()=>p,nearbyGPSCoordinate:()=>m,state:()=>u,street:()=>s,streetAddress:()=>c,zipCode:()=>l});function a(e){return e.locale.location}function o(e){return n.pick(a(e).cities,e.source)}function s(e){return n.pick(a(e).streets,e.source)}function c(e){return`${Math.floor(t.float(1,1e3,e.source))} ${s(e)}`}function l(e){return a(e).zipPattern.replace(/#/g,()=>String(Math.floor((0,r.randomFloat)(e.source)*10)))}function u(e){return n.pick(a(e).states,e.source)}function d(e){return n.pick(a(e).countries,e.source)}function f(e){return t.float(-90,90,e.source)}function p(e){return t.float(-180,180,e.source)}function m(e,n){let r=n??{lat:f(e),lng:p(e)};return{lat:t.float(r.lat-1,r.lat+1,e.source),lng:t.float(r.lng-1,r.lng+1,e.source)}}exports.city=o,exports.country=d,exports.latitude=f,Object.defineProperty(exports,"location_exports",{enumerable:!0,get:function(){return i}}),exports.longitude=p,exports.nearbyGPSCoordinate=m,exports.state=u,exports.street=s,exports.streetAddress=c,exports.zipCode=l;
2
2
  //# sourceMappingURL=location.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"location.cjs","names":[],"sources":["../../src/location/location.ts"],"sourcesContent":["import { float } from '../_helpers/float';\nimport { nextFloat } from '../_helpers/next-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(nextFloat(ctx.source) * 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"],"mappings":"wUAKA,SAAS,EAAK,EAA6C,CACzD,OAAO,EAAI,OAAO,QACpB,CASA,SAAgB,EAAK,EAAiC,CACpD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,OAAQ,EAAI,MAAM,CAC1C,CAGA,SAAgB,EAAO,EAAiC,CACtD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,QAAS,EAAI,MAAM,CAC3C,CAGA,SAAgB,EAAc,EAAiC,CAE7D,MAAO,GADa,KAAK,MAAM,EAAA,MAAM,EAAG,IAAM,EAAI,MAAM,CAC9C,EAAY,GAAG,EAAO,CAAG,GACrC,CAGA,SAAgB,EAAQ,EAAiC,CAGvD,OAFgB,EAAK,CAAG,CAAC,CAAC,WAEX,QAAQ,SAAY,OAAO,KAAK,MAAM,EAAA,UAAU,EAAI,MAAM,EAAI,EAAE,CAAC,CAAC,CACnF,CAGA,SAAgB,EAAM,EAAiC,CACrD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,OAAQ,EAAI,MAAM,CAC1C,CAGA,SAAgB,EAAQ,EAAiC,CACvD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,UAAW,EAAI,MAAM,CAC7C,CAGA,SAAgB,EAAS,EAAiC,CACxD,OAAO,EAAA,MAAM,IAAK,GAAI,EAAI,MAAM,CAClC,CAGA,SAAgB,EAAU,EAAiC,CACzD,OAAO,EAAA,MAAM,KAAM,IAAK,EAAI,MAAM,CACpC,CAMA,SAAgB,EAAoB,EAAyB,EAA8B,CACzF,IAAM,EAAO,GAAO,CAAE,IAAK,EAAS,CAAG,EAAG,IAAK,EAAU,CAAG,CAAE,EAC9D,MAAO,CACL,IAAK,EAAA,MAAM,EAAK,IAAM,EAAG,EAAK,IAAM,EAAG,EAAI,MAAM,EACjD,IAAK,EAAA,MAAM,EAAK,IAAM,EAAG,EAAK,IAAM,EAAG,EAAI,MAAM,CACnD,CACF"}
1
+ {"version":3,"file":"location.cjs","names":[],"sources":["../../src/location/location.ts"],"sourcesContent":["import { float } from '../_helpers/float';\nimport { nextFloat } from '../_helpers/next-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(nextFloat(ctx.source) * 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"],"mappings":"mUAKA,SAAS,EAAK,EAA6C,CACzD,OAAO,EAAI,OAAO,QACpB,CASA,SAAgB,EAAK,EAAiC,CACpD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,OAAQ,EAAI,MAAM,CAC1C,CAGA,SAAgB,EAAO,EAAiC,CACtD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,QAAS,EAAI,MAAM,CAC3C,CAGA,SAAgB,EAAc,EAAiC,CAE7D,MAAO,GADa,KAAK,MAAM,EAAA,MAAM,EAAG,IAAM,EAAI,MAAM,CAC9C,EAAY,GAAG,EAAO,CAAG,GACrC,CAGA,SAAgB,EAAQ,EAAiC,CAGvD,OAFgB,EAAK,CAAG,CAAC,CAAC,WAEX,QAAQ,SAAY,OAAO,KAAK,OAAA,EAAM,EAAA,YAAA,CAAU,EAAI,MAAM,EAAI,EAAE,CAAC,CAAC,CACnF,CAGA,SAAgB,EAAM,EAAiC,CACrD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,OAAQ,EAAI,MAAM,CAC1C,CAGA,SAAgB,EAAQ,EAAiC,CACvD,OAAO,EAAA,KAAK,EAAK,CAAG,CAAC,CAAC,UAAW,EAAI,MAAM,CAC7C,CAGA,SAAgB,EAAS,EAAiC,CACxD,OAAO,EAAA,MAAM,IAAK,GAAI,EAAI,MAAM,CAClC,CAGA,SAAgB,EAAU,EAAiC,CACzD,OAAO,EAAA,MAAM,KAAM,IAAK,EAAI,MAAM,CACpC,CAMA,SAAgB,EAAoB,EAAyB,EAA8B,CACzF,IAAM,EAAO,GAAO,CAAE,IAAK,EAAS,CAAG,EAAG,IAAK,EAAU,CAAG,CAAE,EAC9D,MAAO,CACL,IAAK,EAAA,MAAM,EAAK,IAAM,EAAG,EAAK,IAAM,EAAG,EAAI,MAAM,EACjD,IAAK,EAAA,MAAM,EAAK,IAAM,EAAG,EAAK,IAAM,EAAG,EAAI,MAAM,CACnD,CACF"}
@@ -1,2 +1,2 @@
1
- const e=require("../errors.cjs"),t=require("./mulberry32.cjs");let n=require("@vielzeug/arsenal/object");function r(r){if(r==null)return i();if(typeof r==`number`){if(!Number.isFinite(r))throw new e.IllusionistSeedError(`createSeed: numeric seed must be finite, got ${r}`);return t.mulberry32(Math.trunc(r))}let a=(0,n.hash)(r),o=0;for(let e=0;e<a.length;e++)o=Math.imul(o,31)+a.charCodeAt(e)>>>0;return t.mulberry32(o)}function i(){return{next(){return crypto.getRandomValues(new Uint32Array(1))[0]/4294967296}}}exports.createSeed=r;
1
+ const e=require("../errors.cjs"),t=require("./mulberry32.cjs");function n(n){if(n==null)return r();if(typeof n==`number`){if(!Number.isFinite(n))throw new e.IllusionistSeedError(`createSeed: numeric seed must be finite, got ${n}`);return t.mulberry32(Math.trunc(n))}let i=JSON.stringify(n),a=0;for(let e=0;e<i.length;e++)a=Math.imul(a,31)+i.charCodeAt(e)>>>0;return t.mulberry32(a)}function r(){return{next(){return crypto.getRandomValues(new Uint32Array(1))[0]/4294967296}}}exports.createSeed=n;
2
2
  //# sourceMappingURL=create-seed.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-seed.cjs","names":[],"sources":["../../src/seed/create-seed.ts"],"sourcesContent":["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"],"mappings":"yGAoBA,SAAgB,EAAW,EAAsC,CAC/D,GAAI,GAAQ,KAAM,OAAO,EAAa,EAEtC,GAAI,OAAO,GAAS,SAAU,CAC5B,GAAI,CAAC,OAAO,SAAS,CAAI,EAAG,MAAM,IAAI,EAAA,qBAAqB,gDAAgD,GAAM,EAEjH,OAAO,EAAA,WAAW,KAAK,MAAM,CAAI,CAAC,CACpC,CAEA,IAAM,GAAA,EAAS,EAAA,KAAA,CAAK,CAAI,EAGpB,EAAQ,EAEZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,EAAS,KAAK,KAAK,EAAO,EAAE,EAAI,EAAO,WAAW,CAAC,IAAO,EAG5D,OAAO,EAAA,WAAW,CAAK,CACzB,CAEA,SAAS,GAA6B,CACpC,MAAO,CACL,MAAe,CACb,OAAO,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,GAAM,UAC1D,CACF,CACF"}
1
+ {"version":3,"file":"create-seed.cjs","names":[],"sources":["../../src/seed/create-seed.ts"],"sourcesContent":["import { IllusionistSeedError } from '../errors';\nimport type { RandomSource } from '../types';\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** — serialized via `JSON.stringify` and folded into 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 = JSON.stringify(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"],"mappings":"+DAkBA,SAAgB,EAAW,EAAsC,CAC/D,GAAI,GAAQ,KAAM,OAAO,EAAa,EAEtC,GAAI,OAAO,GAAS,SAAU,CAC5B,GAAI,CAAC,OAAO,SAAS,CAAI,EAAG,MAAM,IAAI,EAAA,qBAAqB,gDAAgD,GAAM,EAEjH,OAAO,EAAA,WAAW,KAAK,MAAM,CAAI,CAAC,CACpC,CAEA,IAAM,EAAS,KAAK,UAAU,CAAI,EAG9B,EAAQ,EAEZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,EAAS,KAAK,KAAK,EAAO,EAAE,EAAI,EAAO,WAAW,CAAC,IAAO,EAG5D,OAAO,EAAA,WAAW,CAAK,CACzB,CAEA,SAAS,GAA6B,CACpC,MAAO,CACL,MAAe,CACb,OAAO,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,GAAM,UAC1D,CACF,CACF"}
@@ -1,9 +1,9 @@
1
- import type { RandomSource } from '@vielzeug/arsenal/random';
1
+ import type { RandomSource } from '../types';
2
2
  /**
3
3
  * Creates a {@link RandomSource} from a seed.
4
4
  *
5
5
  * - **Number seed** — used directly as the mulberry32 state.
6
- * - **String seed** — hashed via `arsenal`'s `hash()` to produce a 32-bit integer.
6
+ * - **String seed** — serialized via `JSON.stringify` and folded into a 32-bit integer.
7
7
  * - **No seed** — falls back to `crypto.getRandomValues` for cryptographic randomness.
8
8
  *
9
9
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"create-seed.d.ts","sourceRoot":"","sources":["../../src/seed/create-seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAK7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAmB/D"}
1
+ {"version":3,"file":"create-seed.d.ts","sourceRoot":"","sources":["../../src/seed/create-seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAmB/D"}
@@ -1,23 +1,22 @@
1
1
  import { IllusionistSeedError as e } from "../errors.js";
2
2
  import { mulberry32 as t } from "./mulberry32.js";
3
- import { hash as n } from "@vielzeug/arsenal/object";
4
3
  //#region src/seed/create-seed.ts
5
- function r(r) {
6
- if (r == null) return i();
7
- if (typeof r == "number") {
8
- if (!Number.isFinite(r)) throw new e(`createSeed: numeric seed must be finite, got ${r}`);
9
- return t(Math.trunc(r));
4
+ function n(n) {
5
+ if (n == null) return r();
6
+ if (typeof n == "number") {
7
+ if (!Number.isFinite(n)) throw new e(`createSeed: numeric seed must be finite, got ${n}`);
8
+ return t(Math.trunc(n));
10
9
  }
11
- let a = n(r), o = 0;
12
- for (let e = 0; e < a.length; e++) o = Math.imul(o, 31) + a.charCodeAt(e) >>> 0;
13
- return t(o);
10
+ let i = JSON.stringify(n), a = 0;
11
+ for (let e = 0; e < i.length; e++) a = Math.imul(a, 31) + i.charCodeAt(e) >>> 0;
12
+ return t(a);
14
13
  }
15
- function i() {
14
+ function r() {
16
15
  return { next() {
17
16
  return crypto.getRandomValues(/* @__PURE__ */ new Uint32Array(1))[0] / 4294967296;
18
17
  } };
19
18
  }
20
19
  //#endregion
21
- export { r as createSeed };
20
+ export { n as createSeed };
22
21
 
23
22
  //# sourceMappingURL=create-seed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-seed.js","names":[],"sources":["../../src/seed/create-seed.ts"],"sourcesContent":["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"],"mappings":";;;;AAoBA,SAAgB,EAAW,GAAsC;CAC/D,IAAI,KAAQ,MAAM,OAAO,EAAa;CAEtC,IAAI,OAAO,KAAS,UAAU;EAC5B,IAAI,CAAC,OAAO,SAAS,CAAI,GAAG,MAAM,IAAI,EAAqB,gDAAgD,GAAM;EAEjH,OAAO,EAAW,KAAK,MAAM,CAAI,CAAC;CACpC;CAEA,IAAM,IAAS,EAAK,CAAI,GAGpB,IAAQ;CAEZ,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KACjC,IAAS,KAAK,KAAK,GAAO,EAAE,IAAI,EAAO,WAAW,CAAC,MAAO;CAG5D,OAAO,EAAW,CAAK;AACzB;AAEA,SAAS,IAA6B;CACpC,OAAO,EACL,OAAe;EACb,OAAO,OAAO,gCAAgB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAM;CAC1D,EACF;AACF"}
1
+ {"version":3,"file":"create-seed.js","names":[],"sources":["../../src/seed/create-seed.ts"],"sourcesContent":["import { IllusionistSeedError } from '../errors';\nimport type { RandomSource } from '../types';\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** — serialized via `JSON.stringify` and folded into 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 = JSON.stringify(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"],"mappings":";;;AAkBA,SAAgB,EAAW,GAAsC;CAC/D,IAAI,KAAQ,MAAM,OAAO,EAAa;CAEtC,IAAI,OAAO,KAAS,UAAU;EAC5B,IAAI,CAAC,OAAO,SAAS,CAAI,GAAG,MAAM,IAAI,EAAqB,gDAAgD,GAAM;EAEjH,OAAO,EAAW,KAAK,MAAM,CAAI,CAAC;CACpC;CAEA,IAAM,IAAS,KAAK,UAAU,CAAI,GAG9B,IAAQ;CAEZ,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KACjC,IAAS,KAAK,KAAK,GAAO,EAAE,IAAI,EAAO,WAAW,CAAC,MAAO;CAG5D,OAAO,EAAW,CAAK;AACzB;AAEA,SAAS,IAA6B;CACpC,OAAO,EACL,OAAe;EACb,OAAO,OAAO,gCAAgB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAM;CAC1D,EACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"mulberry32.cjs","names":[],"sources":["../../src/seed/mulberry32.ts"],"sourcesContent":["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"],"mappings":"AAWA,SAAgB,EAAW,EAA4B,CACrD,IAAI,EAAQ,IAAS,EAErB,MAAO,CACL,MAAe,CACb,EAAS,EAAQ,aAAgB,EACjC,IAAI,EAAI,EAKR,MAHA,GAAI,KAAK,KAAK,EAAK,IAAM,GAAK,EAAI,CAAC,EACnC,GAAK,EAAI,KAAK,KAAK,EAAK,IAAM,EAAI,EAAI,EAAE,IAE/B,EAAK,IAAM,MAAS,GAAK,UACpC,CACF,CACF"}
1
+ {"version":3,"file":"mulberry32.cjs","names":[],"sources":["../../src/seed/mulberry32.ts"],"sourcesContent":["import type { RandomSource } from '../types';\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"],"mappings":"AAWA,SAAgB,EAAW,EAA4B,CACrD,IAAI,EAAQ,IAAS,EAErB,MAAO,CACL,MAAe,CACb,EAAS,EAAQ,aAAgB,EACjC,IAAI,EAAI,EAKR,MAHA,GAAI,KAAK,KAAK,EAAK,IAAM,GAAK,EAAI,CAAC,EACnC,GAAK,EAAI,KAAK,KAAK,EAAK,IAAM,EAAI,EAAI,EAAE,IAE/B,EAAK,IAAM,MAAS,GAAK,UACpC,CACF,CACF"}
@@ -1,4 +1,4 @@
1
- import type { RandomSource } from '@vielzeug/arsenal/random';
1
+ import type { RandomSource } from '../types';
2
2
  /**
3
3
  * Mulberry32 — a fast, deterministic 32-bit PRNG.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mulberry32.d.ts","sourceRoot":"","sources":["../../src/seed/mulberry32.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAcrD"}
1
+ {"version":3,"file":"mulberry32.d.ts","sourceRoot":"","sources":["../../src/seed/mulberry32.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAcrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"mulberry32.js","names":[],"sources":["../../src/seed/mulberry32.ts"],"sourcesContent":["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"],"mappings":";AAWA,SAAgB,EAAW,GAA4B;CACrD,IAAI,IAAQ,MAAS;CAErB,OAAO,EACL,OAAe;EACb,IAAS,IAAQ,eAAgB;EACjC,IAAI,IAAI;EAKR,OAHA,IAAI,KAAK,KAAK,IAAK,MAAM,IAAK,IAAI,CAAC,GACnC,KAAK,IAAI,KAAK,KAAK,IAAK,MAAM,GAAI,IAAI,EAAE,KAE/B,IAAK,MAAM,QAAS,KAAK;CACpC,EACF;AACF"}
1
+ {"version":3,"file":"mulberry32.js","names":[],"sources":["../../src/seed/mulberry32.ts"],"sourcesContent":["import type { RandomSource } from '../types';\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"],"mappings":";AAWA,SAAgB,EAAW,GAA4B;CACrD,IAAI,IAAQ,MAAS;CAErB,OAAO,EACL,OAAe;EACb,IAAS,IAAQ,eAAgB;EACjC,IAAI,IAAI;EAKR,OAHA,IAAI,KAAK,KAAK,IAAK,MAAM,IAAK,IAAI,CAAC,GACnC,KAAK,IAAI,KAAK,KAAK,IAAK,MAAM,GAAI,IAAI,EAAE,KAE/B,IAAK,MAAM,QAAS,KAAK;CACpC,EACF;AACF"}
@@ -1,2 +1,2 @@
1
- const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../_helpers/int.cjs"),n=require("../_helpers/string.cjs"),r=require("./data.cjs");let i=require("@vielzeug/arsenal/random");var a=e.__exportAll({cron:()=>p,fileExtension:()=>o,fileName:()=>s,filePath:()=>c,mimeType:()=>l,port:()=>f,process:()=>m,semver:()=>u,uuid:()=>d});function o(e){return n.pick(r.SYSTEM_DATA.fileExtensions,e.source)}function s(e){return`${n.pick(r.SYSTEM_DATA.fileNames,e.source)}.${o(e)}`}function c(e){let i=t.int(1,4,e.source),a=[];for(let t=0;t<i;t++)a.push(n.pick(r.SYSTEM_DATA.directories,e.source));return`${a.join(`/`)}/${s(e)}`}function l(e){let t=Object.values(r.SYSTEM_DATA.mimeTypes);return n.pick(t,e.source)}function u(e,r){let i=r?.maxMajor??20,a=`${t.int(0,i,e.source)}.${t.int(0,20,e.source)}.${t.int(0,99,e.source)}`;if(r?.includePrerelease&&e.source.next()<.3){let r=n.pick([`alpha`,`beta`,`rc`,`next`],e.source),i=t.int(1,10,e.source);a+=`-${r}.${i}`}return a}function d(){return(0,i.uuid)()}function f(e,n){let r=n?.min??1024,i=n?.max??65535;return t.int(r,i,e.source)}function p(e){return n.pick(r.SYSTEM_DATA.cronExpressions,e.source)}function m(e){return`${n.pick([`node`,`python`,`ruby`,`java`,`go`,`rust`,`bash`],e.source)}_${n.alphanumeric(t.int(3,8,e.source),e.source)}`}exports.cron=p,exports.fileExtension=o,exports.fileName=s,exports.filePath=c,exports.mimeType=l,exports.port=f,exports.process=m,exports.semver=u,Object.defineProperty(exports,"system_exports",{enumerable:!0,get:function(){return a}}),exports.uuid=d;
1
+ const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../_helpers/int.cjs"),n=require("../_helpers/string.cjs"),r=require("./data.cjs");var i=e.__exportAll({cron:()=>f,fileExtension:()=>a,fileName:()=>o,filePath:()=>s,mimeType:()=>c,port:()=>d,process:()=>p,semver:()=>l,uuid:()=>u});function a(e){return n.pick(r.SYSTEM_DATA.fileExtensions,e.source)}function o(e){return`${n.pick(r.SYSTEM_DATA.fileNames,e.source)}.${a(e)}`}function s(e){let i=t.int(1,4,e.source),a=[];for(let t=0;t<i;t++)a.push(n.pick(r.SYSTEM_DATA.directories,e.source));return`${a.join(`/`)}/${o(e)}`}function c(e){let t=Object.values(r.SYSTEM_DATA.mimeTypes);return n.pick(t,e.source)}function l(e,r){let i=r?.maxMajor??20,a=`${t.int(0,i,e.source)}.${t.int(0,20,e.source)}.${t.int(0,99,e.source)}`;if(r?.includePrerelease&&e.source.next()<.3){let r=n.pick([`alpha`,`beta`,`rc`,`next`],e.source),i=t.int(1,10,e.source);a+=`-${r}.${i}`}return a}function u(){return crypto.randomUUID()}function d(e,n){let r=n?.min??1024,i=n?.max??65535;return t.int(r,i,e.source)}function f(e){return n.pick(r.SYSTEM_DATA.cronExpressions,e.source)}function p(e){return`${n.pick([`node`,`python`,`ruby`,`java`,`go`,`rust`,`bash`],e.source)}_${n.alphanumeric(t.int(3,8,e.source),e.source)}`}exports.cron=f,exports.fileExtension=a,exports.fileName=o,exports.filePath=s,exports.mimeType=c,exports.port=d,exports.process=p,exports.semver=l,Object.defineProperty(exports,"system_exports",{enumerable:!0,get:function(){return i}}),exports.uuid=u;
2
2
  //# sourceMappingURL=system.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.cjs","names":[],"sources":["../../src/system/system.ts"],"sourcesContent":["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"],"mappings":"gVAQA,SAAgB,EAAc,EAAiC,CAC7D,OAAO,EAAA,KAAK,EAAA,YAAY,eAAgB,EAAI,MAAM,CACpD,CAGA,SAAgB,EAAS,EAAiC,CAIxD,MAAO,GAHM,EAAA,KAAK,EAAA,YAAY,UAAW,EAAI,MAGnC,EAAK,GAFH,EAAc,CAER,GACpB,CAGA,SAAgB,EAAS,EAAiC,CACxD,IAAM,EAAW,EAAA,IAAI,EAAG,EAAG,EAAI,MAAM,EAC/B,EAAiB,CAAC,EAExB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,IAC5B,EAAK,KAAK,EAAA,KAAK,EAAA,YAAY,YAAa,EAAI,MAAM,CAAE,EAGtD,MAAO,GAAG,EAAK,KAAK,GAAG,EAAE,GAAG,EAAS,CAAG,GAC1C,CAGA,SAAgB,EAAS,EAAiC,CACxD,IAAM,EAAQ,OAAO,OAAO,EAAA,YAAY,SAAS,EAEjD,OAAO,EAAA,KAAK,EAAO,EAAI,MAAM,CAC/B,CAGA,SAAgB,EAAO,EAAyB,EAAsE,CACpH,IAAM,EAAW,GAAS,UAAY,GAKlC,EAAU,GAJA,EAAA,IAAI,EAAG,EAAU,EAAI,MAIlB,EAAM,GAHT,EAAA,IAAI,EAAG,GAAI,EAAI,MAGH,EAAM,GAFlB,EAAA,IAAI,EAAG,GAAI,EAAI,MAEM,IAEnC,GAAI,GAAS,mBAAqB,EAAI,OAAO,KAAK,EAAI,GAAK,CAEzD,IAAM,EAAQ,EAAA,KAAK,CADH,QAAS,OAAQ,KAAM,MACpB,EAAQ,EAAI,MAAM,EAC/B,EAAM,EAAA,IAAI,EAAG,GAAI,EAAI,MAAM,EAEjC,GAAW,IAAI,EAAM,GAAG,GAC1B,CAEA,OAAO,CACT,CASA,SAAgB,GAAe,CAC7B,OAAA,EAAO,EAAA,KAAA,CAAW,CACpB,CAGA,SAAgB,EAAK,EAAyB,EAAkD,CAC9F,IAAM,EAAM,GAAS,KAAO,KACtB,EAAM,GAAS,KAAO,MAE5B,OAAO,EAAA,IAAI,EAAK,EAAK,EAAI,MAAM,CACjC,CAGA,SAAgB,EAAK,EAAiC,CACpD,OAAO,EAAA,KAAK,EAAA,YAAY,gBAAiB,EAAI,MAAM,CACrD,CAGA,SAAgB,EAAQ,EAAiC,CAKvD,MAAO,GAHQ,EAAA,KAAK,CADF,OAAQ,SAAU,OAAQ,OAAQ,KAAM,OAAQ,MAC9C,EAAU,EAAI,MAGxB,EAAO,GAFF,EAAA,aAAa,EAAA,IAAI,EAAG,EAAG,EAAI,MAAM,EAAG,EAAI,MAEnC,GACtB"}
1
+ {"version":3,"file":"system.cjs","names":[],"sources":["../../src/system/system.ts"],"sourcesContent":["import { 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 crypto.randomUUID();\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"],"mappings":"sSAMA,SAAgB,EAAc,EAAiC,CAC7D,OAAO,EAAA,KAAK,EAAA,YAAY,eAAgB,EAAI,MAAM,CACpD,CAGA,SAAgB,EAAS,EAAiC,CAIxD,MAAO,GAHM,EAAA,KAAK,EAAA,YAAY,UAAW,EAAI,MAGnC,EAAK,GAFH,EAAc,CAER,GACpB,CAGA,SAAgB,EAAS,EAAiC,CACxD,IAAM,EAAW,EAAA,IAAI,EAAG,EAAG,EAAI,MAAM,EAC/B,EAAiB,CAAC,EAExB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,IAC5B,EAAK,KAAK,EAAA,KAAK,EAAA,YAAY,YAAa,EAAI,MAAM,CAAE,EAGtD,MAAO,GAAG,EAAK,KAAK,GAAG,EAAE,GAAG,EAAS,CAAG,GAC1C,CAGA,SAAgB,EAAS,EAAiC,CACxD,IAAM,EAAQ,OAAO,OAAO,EAAA,YAAY,SAAS,EAEjD,OAAO,EAAA,KAAK,EAAO,EAAI,MAAM,CAC/B,CAGA,SAAgB,EAAO,EAAyB,EAAsE,CACpH,IAAM,EAAW,GAAS,UAAY,GAKlC,EAAU,GAJA,EAAA,IAAI,EAAG,EAAU,EAAI,MAIlB,EAAM,GAHT,EAAA,IAAI,EAAG,GAAI,EAAI,MAGH,EAAM,GAFlB,EAAA,IAAI,EAAG,GAAI,EAAI,MAEM,IAEnC,GAAI,GAAS,mBAAqB,EAAI,OAAO,KAAK,EAAI,GAAK,CAEzD,IAAM,EAAQ,EAAA,KAAK,CADH,QAAS,OAAQ,KAAM,MACpB,EAAQ,EAAI,MAAM,EAC/B,EAAM,EAAA,IAAI,EAAG,GAAI,EAAI,MAAM,EAEjC,GAAW,IAAI,EAAM,GAAG,GAC1B,CAEA,OAAO,CACT,CASA,SAAgB,GAAe,CAC7B,OAAO,OAAO,WAAW,CAC3B,CAGA,SAAgB,EAAK,EAAyB,EAAkD,CAC9F,IAAM,EAAM,GAAS,KAAO,KACtB,EAAM,GAAS,KAAO,MAE5B,OAAO,EAAA,IAAI,EAAK,EAAK,EAAI,MAAM,CACjC,CAGA,SAAgB,EAAK,EAAiC,CACpD,OAAO,EAAA,KAAK,EAAA,YAAY,gBAAiB,EAAI,MAAM,CACrD,CAGA,SAAgB,EAAQ,EAAiC,CAKvD,MAAO,GAHQ,EAAA,KAAK,CADF,OAAQ,SAAU,OAAQ,OAAQ,KAAM,OAAQ,MAC9C,EAAU,EAAI,MAGxB,EAAO,GAFF,EAAA,aAAa,EAAA,IAAI,EAAG,EAAG,EAAI,MAAM,EAAG,EAAI,MAEnC,GACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/system/system.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAE7D;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAKxD;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CASxD;AAED,yCAAyC;AACzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAIxD;AAED,gDAAgD;AAChD,wBAAgB,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAiBpH;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,iGAAiG;AACjG,wBAAgB,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAK9F;AAED,6DAA6D;AAC7D,wBAAgB,IAAI,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAEpD;AAED,uCAAuC;AACvC,wBAAgB,OAAO,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAMvD"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/system/system.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAE7D;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAKxD;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CASxD;AAED,yCAAyC;AACzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAIxD;AAED,gDAAgD;AAChD,wBAAgB,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAiBpH;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,iGAAiG;AACjG,wBAAgB,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAK9F;AAED,6DAA6D;AAC7D,wBAAgB,IAAI,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAEpD;AAED,uCAAuC;AACvC,wBAAgB,OAAO,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAMvD"}
@@ -2,35 +2,34 @@ import { __exportAll as e } from "../_virtual/_rolldown/runtime.js";
2
2
  import { int as t } from "../_helpers/int.js";
3
3
  import { alphanumeric as n, pick as r } from "../_helpers/string.js";
4
4
  import { SYSTEM_DATA as i } from "./data.js";
5
- import { uuid as a } from "@vielzeug/arsenal/random";
6
5
  //#region src/system/system.ts
7
- var o = /* @__PURE__ */ e({
8
- cron: () => m,
9
- fileExtension: () => s,
10
- fileName: () => c,
11
- filePath: () => l,
12
- mimeType: () => u,
13
- port: () => p,
14
- process: () => h,
15
- semver: () => d,
16
- uuid: () => f
6
+ var a = /* @__PURE__ */ e({
7
+ cron: () => p,
8
+ fileExtension: () => o,
9
+ fileName: () => s,
10
+ filePath: () => c,
11
+ mimeType: () => l,
12
+ port: () => f,
13
+ process: () => m,
14
+ semver: () => u,
15
+ uuid: () => d
17
16
  });
18
- function s(e) {
17
+ function o(e) {
19
18
  return r(i.fileExtensions, e.source);
20
19
  }
21
- function c(e) {
22
- return `${r(i.fileNames, e.source)}.${s(e)}`;
20
+ function s(e) {
21
+ return `${r(i.fileNames, e.source)}.${o(e)}`;
23
22
  }
24
- function l(e) {
23
+ function c(e) {
25
24
  let n = t(1, 4, e.source), a = [];
26
25
  for (let t = 0; t < n; t++) a.push(r(i.directories, e.source));
27
- return `${a.join("/")}/${c(e)}`;
26
+ return `${a.join("/")}/${s(e)}`;
28
27
  }
29
- function u(e) {
28
+ function l(e) {
30
29
  let t = Object.values(i.mimeTypes);
31
30
  return r(t, e.source);
32
31
  }
33
- function d(e, n) {
32
+ function u(e, n) {
34
33
  let i = n?.maxMajor ?? 20, a = `${t(0, i, e.source)}.${t(0, 20, e.source)}.${t(0, 99, e.source)}`;
35
34
  if (n?.includePrerelease && e.source.next() < .3) {
36
35
  let n = r([
@@ -43,17 +42,17 @@ function d(e, n) {
43
42
  }
44
43
  return a;
45
44
  }
46
- function f() {
47
- return a();
45
+ function d() {
46
+ return crypto.randomUUID();
48
47
  }
49
- function p(e, n) {
48
+ function f(e, n) {
50
49
  let r = n?.min ?? 1024, i = n?.max ?? 65535;
51
50
  return t(r, i, e.source);
52
51
  }
53
- function m(e) {
52
+ function p(e) {
54
53
  return r(i.cronExpressions, e.source);
55
54
  }
56
- function h(e) {
55
+ function m(e) {
57
56
  return `${r([
58
57
  "node",
59
58
  "python",
@@ -65,6 +64,6 @@ function h(e) {
65
64
  ], e.source)}_${n(t(3, 8, e.source), e.source)}`;
66
65
  }
67
66
  //#endregion
68
- export { m as cron, s as fileExtension, c as fileName, l as filePath, u as mimeType, p as port, h as process, d as semver, o as system_exports, f as uuid };
67
+ export { p as cron, o as fileExtension, s as fileName, c as filePath, l as mimeType, f as port, m as process, u as semver, a as system_exports, d as uuid };
69
68
 
70
69
  //# sourceMappingURL=system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","names":[],"sources":["../../src/system/system.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;AAQA,SAAgB,EAAc,GAAiC;CAC7D,OAAO,EAAK,EAAY,gBAAgB,EAAI,MAAM;AACpD;AAGA,SAAgB,EAAS,GAAiC;CAIxD,OAAO,GAHM,EAAK,EAAY,WAAW,EAAI,MAGnC,EAAK,GAFH,EAAc,CAER;AACpB;AAGA,SAAgB,EAAS,GAAiC;CACxD,IAAM,IAAW,EAAI,GAAG,GAAG,EAAI,MAAM,GAC/B,IAAiB,CAAC;CAExB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAU,KAC5B,EAAK,KAAK,EAAK,EAAY,aAAa,EAAI,MAAM,CAAE;CAGtD,OAAO,GAAG,EAAK,KAAK,GAAG,EAAE,GAAG,EAAS,CAAG;AAC1C;AAGA,SAAgB,EAAS,GAAiC;CACxD,IAAM,IAAQ,OAAO,OAAO,EAAY,SAAS;CAEjD,OAAO,EAAK,GAAO,EAAI,MAAM;AAC/B;AAGA,SAAgB,EAAO,GAAyB,GAAsE;CACpH,IAAM,IAAW,GAAS,YAAY,IAKlC,IAAU,GAJA,EAAI,GAAG,GAAU,EAAI,MAIlB,EAAM,GAHT,EAAI,GAAG,IAAI,EAAI,MAGH,EAAM,GAFlB,EAAI,GAAG,IAAI,EAAI,MAEM;CAEnC,IAAI,GAAS,qBAAqB,EAAI,OAAO,KAAK,IAAI,IAAK;EAEzD,IAAM,IAAQ,EAAK;GADH;GAAS;GAAQ;GAAM;EACpB,GAAQ,EAAI,MAAM,GAC/B,IAAM,EAAI,GAAG,IAAI,EAAI,MAAM;EAEjC,KAAW,IAAI,EAAM,GAAG;CAC1B;CAEA,OAAO;AACT;AASA,SAAgB,IAAe;CAC7B,OAAO,EAAW;AACpB;AAGA,SAAgB,EAAK,GAAyB,GAAkD;CAC9F,IAAM,IAAM,GAAS,OAAO,MACtB,IAAM,GAAS,OAAO;CAE5B,OAAO,EAAI,GAAK,GAAK,EAAI,MAAM;AACjC;AAGA,SAAgB,EAAK,GAAiC;CACpD,OAAO,EAAK,EAAY,iBAAiB,EAAI,MAAM;AACrD;AAGA,SAAgB,EAAQ,GAAiC;CAKvD,OAAO,GAHQ,EAAK;EADF;EAAQ;EAAU;EAAQ;EAAQ;EAAM;EAAQ;CAC9C,GAAU,EAAI,MAGxB,EAAO,GAFF,EAAa,EAAI,GAAG,GAAG,EAAI,MAAM,GAAG,EAAI,MAEnC;AACtB"}
1
+ {"version":3,"file":"system.js","names":[],"sources":["../../src/system/system.ts"],"sourcesContent":["import { 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 crypto.randomUUID();\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"],"mappings":";;;;;;;;;;;;;;;;AAMA,SAAgB,EAAc,GAAiC;CAC7D,OAAO,EAAK,EAAY,gBAAgB,EAAI,MAAM;AACpD;AAGA,SAAgB,EAAS,GAAiC;CAIxD,OAAO,GAHM,EAAK,EAAY,WAAW,EAAI,MAGnC,EAAK,GAFH,EAAc,CAER;AACpB;AAGA,SAAgB,EAAS,GAAiC;CACxD,IAAM,IAAW,EAAI,GAAG,GAAG,EAAI,MAAM,GAC/B,IAAiB,CAAC;CAExB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAU,KAC5B,EAAK,KAAK,EAAK,EAAY,aAAa,EAAI,MAAM,CAAE;CAGtD,OAAO,GAAG,EAAK,KAAK,GAAG,EAAE,GAAG,EAAS,CAAG;AAC1C;AAGA,SAAgB,EAAS,GAAiC;CACxD,IAAM,IAAQ,OAAO,OAAO,EAAY,SAAS;CAEjD,OAAO,EAAK,GAAO,EAAI,MAAM;AAC/B;AAGA,SAAgB,EAAO,GAAyB,GAAsE;CACpH,IAAM,IAAW,GAAS,YAAY,IAKlC,IAAU,GAJA,EAAI,GAAG,GAAU,EAAI,MAIlB,EAAM,GAHT,EAAI,GAAG,IAAI,EAAI,MAGH,EAAM,GAFlB,EAAI,GAAG,IAAI,EAAI,MAEM;CAEnC,IAAI,GAAS,qBAAqB,EAAI,OAAO,KAAK,IAAI,IAAK;EAEzD,IAAM,IAAQ,EAAK;GADH;GAAS;GAAQ;GAAM;EACpB,GAAQ,EAAI,MAAM,GAC/B,IAAM,EAAI,GAAG,IAAI,EAAI,MAAM;EAEjC,KAAW,IAAI,EAAM,GAAG;CAC1B;CAEA,OAAO;AACT;AASA,SAAgB,IAAe;CAC7B,OAAO,OAAO,WAAW;AAC3B;AAGA,SAAgB,EAAK,GAAyB,GAAkD;CAC9F,IAAM,IAAM,GAAS,OAAO,MACtB,IAAM,GAAS,OAAO;CAE5B,OAAO,EAAI,GAAK,GAAK,EAAI,MAAM;AACjC;AAGA,SAAgB,EAAK,GAAiC;CACpD,OAAO,EAAK,EAAY,iBAAiB,EAAI,MAAM;AACrD;AAGA,SAAgB,EAAQ,GAAiC;CAKvD,OAAO,GAHQ,EAAK;EADF;EAAQ;EAAU;EAAQ;EAAQ;EAAM;EAAQ;CAC9C,GAAU,EAAI,MAGxB,EAAO,GAFF,EAAa,EAAI,GAAG,GAAG,EAAI,MAAM,GAAG,EAAI,MAEnC;AACtB"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { RandomSource } from '@vielzeug/arsenal/random';
1
+ import type { RandomSource } from '@vielzeug/arsenal';
2
+ export type { RandomSource };
2
3
  /** Locale-specific data used by the person category. */
3
4
  export type PersonLocaleData = {
4
5
  readonly firstNameFemale: readonly string[];
@@ -36,6 +37,4 @@ export type IllusionistContext = {
36
37
  readonly source: RandomSource;
37
38
  readonly locale: IllusionistLocale;
38
39
  };
39
- /** Re-exported from arsenal for consumer convenience. */
40
- export type { RandomSource } from '@vielzeug/arsenal/random';
41
40
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;CACvC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,+CAA+C;IAC/C,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC,CAAC;AAEF,yDAAyD;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;CACvC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,+CAA+C;IAC/C,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/illusionist",
3
- "version": "2.3.2",
3
+ "version": "3.0.0",
4
4
  "description": "Typed, deterministic, locale-aware fake data generator with seeded PRNG",
5
5
  "repository": {
6
6
  "type": "git",
@@ -130,26 +130,26 @@
130
130
  "registry": "https://registry.npmjs.org/"
131
131
  },
132
132
  "scripts": {
133
- "build": "pnpm run verify:exports && vite build && pnpm run build:bundle && pnpm run build:types",
133
+ "build": "pnpm --silent run verify:exports && vite build && pnpm --silent run build:bundle && pnpm --silent run build:types",
134
134
  "build:bundle": "vite build --config vite.bundle.config.ts",
135
135
  "build:types": "tsc -p tsconfig.declarations.json",
136
136
  "fix": "biome check --write src",
137
137
  "lint": "biome ci src",
138
- "prepublishOnly": "pnpm run build",
138
+ "prepublishOnly": "pnpm --silent run build",
139
139
  "preview": "vite preview",
140
140
  "sync:exports": "node ./scripts/sync-exports.mjs",
141
- "test": "pnpm run verify:exports && vitest",
141
+ "test": "pnpm --silent run verify:exports && vitest",
142
142
  "verify:exports": "node ./scripts/sync-exports.mjs --check"
143
143
  },
144
144
  "dependencies": {
145
- "@vielzeug/arsenal": "2.1.0",
146
- "@vielzeug/coins": "2.2.0",
147
- "@vielzeug/tempo": "2.2.0"
145
+ "@vielzeug/arsenal": "3.0.0",
146
+ "@vielzeug/coins": "3.0.0",
147
+ "@vielzeug/tempo": "3.0.0"
148
148
  },
149
149
  "devDependencies": {
150
- "@types/node": "^26.2.0",
150
+ "@types/node": "^26.4.1",
151
151
  "typescript": "^6.0.3",
152
- "vite": "^8.2.1",
153
- "vitest": "^4.1.10"
152
+ "vite": "^8.2.2",
153
+ "vitest": "^5.0.0"
154
154
  }
155
155
  }
@@ -1,2 +0,0 @@
1
- function e(e){return e?.next()??crypto.getRandomValues(new Uint32Array(1))[0]/4294967296}exports.nextFloat=e;
2
- //# sourceMappingURL=next-float.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"next-float.cjs","names":[],"sources":["../../src/_helpers/next-float.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/** Returns a float in `[0, 1)` from the source, falling back to `crypto.getRandomValues` when unset. */\nexport function nextFloat(source?: RandomSource): number {\n return source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n}\n"],"mappings":"AAGA,SAAgB,EAAU,EAA+B,CACvD,OAAO,GAAQ,KAAK,GAAK,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,GAAM,UAC5E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"next-float.js","names":[],"sources":["../../src/_helpers/next-float.ts"],"sourcesContent":["import type { RandomSource } from '@vielzeug/arsenal/random';\n\n/** Returns a float in `[0, 1)` from the source, falling back to `crypto.getRandomValues` when unset. */\nexport function nextFloat(source?: RandomSource): number {\n return source?.next() ?? crypto.getRandomValues(new Uint32Array(1))[0]! / 0x100000000;\n}\n"],"mappings":";AAGA,SAAgB,EAAU,GAA+B;CACvD,OAAO,GAAQ,KAAK,KAAK,OAAO,gCAAgB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAM;AAC5E"}