loredata 0.2.0 → 0.4.1
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/README.md +126 -65
- package/data/avengers/addresses.json +27 -0
- package/data/avengers/characters.json +305 -0
- package/data/avengers/meta.json +13 -0
- package/data/better-call-saul/addresses.json +37 -0
- package/data/better-call-saul/characters.json +268 -0
- package/data/better-call-saul/meta.json +13 -0
- package/data/big-bang-theory/addresses.json +31 -0
- package/data/big-bang-theory/characters.json +198 -0
- package/data/big-bang-theory/meta.json +13 -0
- package/data/breaking-bad/characters.json +249 -148
- package/data/breaking-bad/meta.json +8 -1
- package/data/fast-and-furious/addresses.json +1 -2
- package/data/fast-and-furious/characters.json +226 -133
- package/data/fast-and-furious/meta.json +13 -1
- package/data/friends/characters.json +402 -281
- package/data/friends/meta.json +8 -1
- package/data/game-of-thrones/addresses.json +6 -22
- package/data/game-of-thrones/characters.json +507 -299
- package/data/game-of-thrones/meta.json +8 -1
- package/data/guardians-of-the-galaxy/addresses.json +17 -0
- package/data/guardians-of-the-galaxy/characters.json +226 -0
- package/data/guardians-of-the-galaxy/meta.json +13 -0
- package/data/harry-potter/addresses.json +6 -11
- package/data/harry-potter/characters.json +239 -147
- package/data/harry-potter/meta.json +8 -1
- package/data/house-md/characters.json +184 -52
- package/data/house-md/meta.json +8 -1
- package/data/lost/characters.json +420 -299
- package/data/lost/meta.json +8 -1
- package/data/matrix/characters.json +144 -34
- package/data/matrix/meta.json +13 -1
- package/data/peaky-blinders/characters.json +191 -37
- package/data/peaky-blinders/meta.json +8 -1
- package/data/prison-break/addresses.json +24 -0
- package/data/prison-break/characters.json +188 -0
- package/data/prison-break/meta.json +13 -0
- package/data/sherlock/characters.json +369 -263
- package/data/sherlock/meta.json +8 -1
- package/data/simpsons/addresses.json +21 -0
- package/data/simpsons/characters.json +383 -0
- package/data/simpsons/meta.json +13 -0
- package/data/sopranos/addresses.json +37 -0
- package/data/sopranos/characters.json +292 -0
- package/data/sopranos/meta.json +13 -0
- package/data/south-park/addresses.json +31 -0
- package/data/south-park/characters.json +372 -0
- package/data/south-park/meta.json +13 -0
- package/data/spider-man/addresses.json +31 -0
- package/data/spider-man/characters.json +219 -0
- package/data/spider-man/meta.json +13 -0
- package/data/star-wars/addresses.json +19 -0
- package/data/star-wars/characters.json +254 -0
- package/data/star-wars/meta.json +13 -0
- package/data/stranger-things/addresses.json +31 -0
- package/data/stranger-things/characters.json +226 -0
- package/data/stranger-things/meta.json +13 -0
- package/data/supernatural/addresses.json +25 -0
- package/data/supernatural/characters.json +190 -0
- package/data/supernatural/meta.json +13 -0
- package/data/the-crown/addresses.json +27 -0
- package/data/the-crown/characters.json +275 -0
- package/data/the-crown/meta.json +13 -0
- package/data/the-office/characters.json +478 -283
- package/data/the-office/meta.json +8 -1
- package/data/the-walking-dead/addresses.json +25 -0
- package/data/the-walking-dead/characters.json +186 -0
- package/data/the-walking-dead/meta.json +13 -0
- package/data/the-witcher/addresses.json +22 -0
- package/data/the-witcher/characters.json +272 -0
- package/data/the-witcher/meta.json +13 -0
- package/data/vikings/addresses.json +26 -0
- package/data/vikings/characters.json +240 -0
- package/data/vikings/meta.json +13 -0
- package/data/westworld/addresses.json +19 -0
- package/data/westworld/characters.json +161 -0
- package/data/westworld/meta.json +13 -0
- package/data/x-men/addresses.json +24 -0
- package/data/x-men/characters.json +242 -0
- package/data/x-men/meta.json +18 -0
- package/dist/browser.cjs +18 -72
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +3 -3
- package/dist/browser.d.ts +3 -3
- package/dist/browser.js +18 -72
- package/dist/browser.js.map +1 -1
- package/dist/cli/cli.cjs +41 -73
- package/dist/cli/cli.cjs.map +1 -1
- package/dist/cli/cli.js +41 -73
- package/dist/cli/cli.js.map +1 -1
- package/dist/index.cjs +41 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +41 -72
- package/dist/index.js.map +1 -1
- package/dist/{universe-store-Del1UHgn.d.cts → universe-store-CWhCn3U6.d.cts} +21 -11
- package/dist/{universe-store-Del1UHgn.d.ts → universe-store-CWhCn3U6.d.ts} +21 -11
- package/package.json +85 -81
- package/data/breaking-bad/domains.json +0 -6
- package/data/fast-and-furious/domains.json +0 -6
- package/data/friends/domains.json +0 -6
- package/data/game-of-thrones/domains.json +0 -6
- package/data/harry-potter/domains.json +0 -6
- package/data/house-md/domains.json +0 -6
- package/data/lost/domains.json +0 -6
- package/data/matrix/domains.json +0 -6
- package/data/peaky-blinders/domains.json +0 -6
- package/data/sherlock/domains.json +0 -6
- package/data/the-office/domains.json +0 -6
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "logan",
|
|
4
|
+
"firstName": "Logan",
|
|
5
|
+
"usernames": [
|
|
6
|
+
"wolverine",
|
|
7
|
+
"weaponx_program",
|
|
8
|
+
"yellow_spandex"
|
|
9
|
+
],
|
|
10
|
+
"profession": "Soldier",
|
|
11
|
+
"interests": [
|
|
12
|
+
"motorcycles",
|
|
13
|
+
"cigars",
|
|
14
|
+
"cage fighting",
|
|
15
|
+
"wilderness"
|
|
16
|
+
],
|
|
17
|
+
"quotes": [
|
|
18
|
+
"I'm the best there is at what I do. But what I do best isn't very nice.",
|
|
19
|
+
"You gonna tell me to stay away from your girl?",
|
|
20
|
+
"You actually go outside in these things?",
|
|
21
|
+
"Nature made me a freak. Man made me a weapon. And God made it last too long.",
|
|
22
|
+
"Don't be what they made you."
|
|
23
|
+
],
|
|
24
|
+
"gender": "male",
|
|
25
|
+
"address": {
|
|
26
|
+
"street": "1407 Graymalkin Lane",
|
|
27
|
+
"city": "Salem Center",
|
|
28
|
+
"state": "NY",
|
|
29
|
+
"country": "US"
|
|
30
|
+
},
|
|
31
|
+
"symbol": "🐺",
|
|
32
|
+
"color": "#4a1942",
|
|
33
|
+
"emailDomains": [
|
|
34
|
+
"xavier-institute.edu",
|
|
35
|
+
"canada-mail.net"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "charles-xavier",
|
|
40
|
+
"firstName": "Charles",
|
|
41
|
+
"lastName": "Xavier",
|
|
42
|
+
"usernames": [
|
|
43
|
+
"cerebro_founder",
|
|
44
|
+
"cerebro_mind",
|
|
45
|
+
"hope_remains"
|
|
46
|
+
],
|
|
47
|
+
"profession": "Professor",
|
|
48
|
+
"interests": [
|
|
49
|
+
"genetics",
|
|
50
|
+
"chess",
|
|
51
|
+
"education",
|
|
52
|
+
"mutant advocacy"
|
|
53
|
+
],
|
|
54
|
+
"quotes": [
|
|
55
|
+
"Mutation: it is the key to our evolution.",
|
|
56
|
+
"Just because someone stumbles and loses their way, it doesn't mean they're lost forever.",
|
|
57
|
+
"I don't want your suffering. I don't want your future!",
|
|
58
|
+
"I feel a great swell of pity for the poor soul who comes to that school looking for trouble.",
|
|
59
|
+
"Please, Charles, we need you to hope again."
|
|
60
|
+
],
|
|
61
|
+
"gender": "male",
|
|
62
|
+
"address": {
|
|
63
|
+
"street": "1407 Graymalkin Lane",
|
|
64
|
+
"city": "Salem Center",
|
|
65
|
+
"state": "NY",
|
|
66
|
+
"country": "US"
|
|
67
|
+
},
|
|
68
|
+
"symbol": "♟️",
|
|
69
|
+
"color": "#1e3a5f",
|
|
70
|
+
"emailDomains": [
|
|
71
|
+
"xavier-institute.edu",
|
|
72
|
+
"xaviers-school.org"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "erik-lehnsherr",
|
|
77
|
+
"firstName": "Erik",
|
|
78
|
+
"lastName": "Lehnsherr",
|
|
79
|
+
"usernames": [
|
|
80
|
+
"magneto",
|
|
81
|
+
"plastic_prison",
|
|
82
|
+
"homo_superior"
|
|
83
|
+
],
|
|
84
|
+
"profession": "Mutant leader",
|
|
85
|
+
"interests": [
|
|
86
|
+
"chess",
|
|
87
|
+
"mutant rights",
|
|
88
|
+
"history",
|
|
89
|
+
"political strategy"
|
|
90
|
+
],
|
|
91
|
+
"quotes": [
|
|
92
|
+
"Peace was never an option.",
|
|
93
|
+
"We are the future, Charles, not them. They no longer matter.",
|
|
94
|
+
"Mankind has always feared what it doesn't understand.",
|
|
95
|
+
"We are the future. We are the ones who inherit this earth.",
|
|
96
|
+
"If there's one thing I'm guilty of, it's fighting for people like us."
|
|
97
|
+
],
|
|
98
|
+
"gender": "male",
|
|
99
|
+
"symbol": "🧲",
|
|
100
|
+
"color": "#7f1d1d",
|
|
101
|
+
"emailDomains": [
|
|
102
|
+
"brotherhood-mutants.net",
|
|
103
|
+
"genosha-post.org"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "jean-grey",
|
|
108
|
+
"firstName": "Jean",
|
|
109
|
+
"lastName": "Grey",
|
|
110
|
+
"usernames": [
|
|
111
|
+
"phoenix_force",
|
|
112
|
+
"dark_phoenix",
|
|
113
|
+
"grey_matter"
|
|
114
|
+
],
|
|
115
|
+
"profession": "Doctor",
|
|
116
|
+
"interests": [
|
|
117
|
+
"genetics",
|
|
118
|
+
"research",
|
|
119
|
+
"psychology",
|
|
120
|
+
"patient care"
|
|
121
|
+
],
|
|
122
|
+
"quotes": [
|
|
123
|
+
"I am not the woman I was. I am something more.",
|
|
124
|
+
"When I lose control, bad things happen. But it feels good.",
|
|
125
|
+
"I can see inside their minds. What they truly feel.",
|
|
126
|
+
"I don't want to fix it. This is who I am.",
|
|
127
|
+
"You shouldn't have to hide."
|
|
128
|
+
],
|
|
129
|
+
"gender": "female",
|
|
130
|
+
"address": {
|
|
131
|
+
"street": "1407 Graymalkin Lane",
|
|
132
|
+
"city": "Salem Center",
|
|
133
|
+
"state": "NY",
|
|
134
|
+
"country": "US"
|
|
135
|
+
},
|
|
136
|
+
"symbol": "🔥",
|
|
137
|
+
"color": "#1e3a5f",
|
|
138
|
+
"emailDomains": [
|
|
139
|
+
"xavier-institute.edu",
|
|
140
|
+
"xaviers-school.org"
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "storm",
|
|
145
|
+
"firstName": "Ororo",
|
|
146
|
+
"lastName": "Munroe",
|
|
147
|
+
"usernames": [
|
|
148
|
+
"storm_goddess",
|
|
149
|
+
"wind_rider",
|
|
150
|
+
"toad_lightning"
|
|
151
|
+
],
|
|
152
|
+
"profession": "Teacher",
|
|
153
|
+
"interests": [
|
|
154
|
+
"Africa",
|
|
155
|
+
"gardening",
|
|
156
|
+
"leadership",
|
|
157
|
+
"aviation"
|
|
158
|
+
],
|
|
159
|
+
"quotes": [
|
|
160
|
+
"Do you know what happens to a toad when it's struck by lightning? The same thing that happens to everything else.",
|
|
161
|
+
"Sometimes anger can help you survive.",
|
|
162
|
+
"I am a goddess. I will not be caged.",
|
|
163
|
+
"You must have faith.",
|
|
164
|
+
"The weather is not something you control. It's something you feel."
|
|
165
|
+
],
|
|
166
|
+
"gender": "female",
|
|
167
|
+
"symbol": "⚡",
|
|
168
|
+
"color": "#1d4ed8",
|
|
169
|
+
"emailDomains": [
|
|
170
|
+
"xavier-institute.edu",
|
|
171
|
+
"xaviers-school.org"
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"id": "mystique",
|
|
176
|
+
"firstName": "Raven",
|
|
177
|
+
"lastName": "Darkhölme",
|
|
178
|
+
"usernames": [
|
|
179
|
+
"shapeshifter",
|
|
180
|
+
"natural_blue",
|
|
181
|
+
"mutant_and_proud"
|
|
182
|
+
],
|
|
183
|
+
"profession": "Spy",
|
|
184
|
+
"interests": [
|
|
185
|
+
"espionage",
|
|
186
|
+
"disguise",
|
|
187
|
+
"martial arts",
|
|
188
|
+
"mutant liberation"
|
|
189
|
+
],
|
|
190
|
+
"quotes": [
|
|
191
|
+
"Mutant and proud.",
|
|
192
|
+
"I shouldn't have to. I'm a natural blue.",
|
|
193
|
+
"We should be running this country.",
|
|
194
|
+
"I know what I have to do. It's not their pain. It's ours.",
|
|
195
|
+
"You know, sometimes I wonder what my life would have been like if you hadn't found me here that night."
|
|
196
|
+
],
|
|
197
|
+
"gender": "female",
|
|
198
|
+
"symbol": "🦎",
|
|
199
|
+
"color": "#4a1942",
|
|
200
|
+
"emailDomains": [
|
|
201
|
+
"brotherhood-mutants.net",
|
|
202
|
+
"shape-shift.net"
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "cyclops",
|
|
207
|
+
"firstName": "Scott",
|
|
208
|
+
"lastName": "Summers",
|
|
209
|
+
"usernames": [
|
|
210
|
+
"optic_blast",
|
|
211
|
+
"visor_on",
|
|
212
|
+
"prove_it"
|
|
213
|
+
],
|
|
214
|
+
"profession": "Team leader",
|
|
215
|
+
"interests": [
|
|
216
|
+
"tactics",
|
|
217
|
+
"aviation",
|
|
218
|
+
"leadership",
|
|
219
|
+
"motorcycles"
|
|
220
|
+
],
|
|
221
|
+
"quotes": [
|
|
222
|
+
"We're a team, Professor. We take care of each other.",
|
|
223
|
+
"She did make a choice. It was you.",
|
|
224
|
+
"You can't just keep running from this.",
|
|
225
|
+
"I would die for any one of them.",
|
|
226
|
+
"Prove it."
|
|
227
|
+
],
|
|
228
|
+
"gender": "male",
|
|
229
|
+
"address": {
|
|
230
|
+
"street": "1407 Graymalkin Lane",
|
|
231
|
+
"city": "Salem Center",
|
|
232
|
+
"state": "NY",
|
|
233
|
+
"country": "US"
|
|
234
|
+
},
|
|
235
|
+
"symbol": "🕶️",
|
|
236
|
+
"color": "#166534",
|
|
237
|
+
"emailDomains": [
|
|
238
|
+
"xavier-institute.edu",
|
|
239
|
+
"x-men-ops.net"
|
|
240
|
+
]
|
|
241
|
+
}
|
|
242
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "x-men",
|
|
3
|
+
"name": "X-Men",
|
|
4
|
+
"genre": ["action", "sci-fi", "drama"],
|
|
5
|
+
"description": "Mutants with extraordinary powers fight for coexistence with humanity while facing threats from those who fear and persecute them.",
|
|
6
|
+
"tmdbId": 36657,
|
|
7
|
+
"mediaType": "movie",
|
|
8
|
+
"year": 2000,
|
|
9
|
+
"rating": 7,
|
|
10
|
+
"networks": [
|
|
11
|
+
"The Donners' Company",
|
|
12
|
+
"Bad Hat Harry Productions",
|
|
13
|
+
"20th Century Fox",
|
|
14
|
+
"Marvel Entertainment Group"
|
|
15
|
+
],
|
|
16
|
+
"posterPath": "/bRDAc4GogyS9ci3ow7UnInOcriN.jpg",
|
|
17
|
+
"backdropPath": "/3QUVzbcNyfGe3ocWkYAT8emK8Co.jpg"
|
|
18
|
+
}
|
package/dist/browser.cjs
CHANGED
|
@@ -54,55 +54,12 @@ function pickRandom(array, rng) {
|
|
|
54
54
|
|
|
55
55
|
// src/generators/email.ts
|
|
56
56
|
var EmailGenerator = class {
|
|
57
|
-
static
|
|
58
|
-
const domain = pickRandom(
|
|
59
|
-
const first = firstName.toLowerCase();
|
|
60
|
-
const last = lastName.toLowerCase();
|
|
61
|
-
return `${first}.${last}@${domain}`;
|
|
62
|
-
}
|
|
63
|
-
static generateFromUsername(username, domains, rng) {
|
|
64
|
-
const domain = pickRandom(domains.emailDomains, rng);
|
|
57
|
+
static generateFromUsername(username, emailDomains, rng) {
|
|
58
|
+
const domain = pickRandom(emailDomains, rng);
|
|
65
59
|
return `${username}@${domain}`;
|
|
66
60
|
}
|
|
67
61
|
};
|
|
68
62
|
|
|
69
|
-
// src/generators/phone.ts
|
|
70
|
-
var PhoneGenerator = class {
|
|
71
|
-
static generate(domains, rng) {
|
|
72
|
-
if (domains.phoneEasterEggs && domains.phoneEasterEggs.length > 0 && rng() < 0.2) {
|
|
73
|
-
return pickRandom(domains.phoneEasterEggs, rng);
|
|
74
|
-
}
|
|
75
|
-
const prefix = pickRandom(domains.phonePrefixes, rng);
|
|
76
|
-
const suffix = this.randomDigits(7, rng);
|
|
77
|
-
return `${prefix}-${suffix.slice(0, 3)}-${suffix.slice(3)}`;
|
|
78
|
-
}
|
|
79
|
-
static randomDigits(count, rng) {
|
|
80
|
-
let result = "";
|
|
81
|
-
for (let i = 0; i < count; i++) {
|
|
82
|
-
result += Math.floor(rng() * 10).toString();
|
|
83
|
-
}
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
// src/generators/password.ts
|
|
89
|
-
var PasswordGenerator = class {
|
|
90
|
-
static generate(domains, rng) {
|
|
91
|
-
if (domains.passwordEasterEggs && domains.passwordEasterEggs.length > 0 && rng() < 0.3) {
|
|
92
|
-
return pickRandom(domains.passwordEasterEggs, rng);
|
|
93
|
-
}
|
|
94
|
-
return this.randomPassword(12, rng);
|
|
95
|
-
}
|
|
96
|
-
static randomPassword(length, rng) {
|
|
97
|
-
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$";
|
|
98
|
-
let result = "";
|
|
99
|
-
for (let i = 0; i < length; i++) {
|
|
100
|
-
result += chars[Math.floor(rng() * chars.length)];
|
|
101
|
-
}
|
|
102
|
-
return result;
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
|
|
106
63
|
// src/engine/person-factory.ts
|
|
107
64
|
var PersonFactory = class {
|
|
108
65
|
static build(universe, seed) {
|
|
@@ -125,11 +82,8 @@ var PersonFactory = class {
|
|
|
125
82
|
}
|
|
126
83
|
const address = character.address ?? universe.addresses[0];
|
|
127
84
|
const username = character.usernames[0];
|
|
128
|
-
const domains = character.emailDomain ? { ...universe.domains, emailDomains: [character.emailDomain] } : universe.domains;
|
|
129
85
|
const rng = createRng(0);
|
|
130
|
-
const email = EmailGenerator.generateFromUsername(username,
|
|
131
|
-
const phone = PhoneGenerator.generate(universe.domains, rng);
|
|
132
|
-
const password = PasswordGenerator.generate(universe.domains, rng);
|
|
86
|
+
const email = EmailGenerator.generateFromUsername(username, character.emailDomains, rng);
|
|
133
87
|
const quote = character.quotes[0];
|
|
134
88
|
const person = {
|
|
135
89
|
id: crypto.randomUUID(),
|
|
@@ -138,8 +92,6 @@ var PersonFactory = class {
|
|
|
138
92
|
lastName: character.lastName,
|
|
139
93
|
username,
|
|
140
94
|
email,
|
|
141
|
-
password,
|
|
142
|
-
phone,
|
|
143
95
|
address: {
|
|
144
96
|
street: address.street,
|
|
145
97
|
city: address.city,
|
|
@@ -160,10 +112,7 @@ var PersonFactory = class {
|
|
|
160
112
|
static buildFromCharacter(character, universe, rng) {
|
|
161
113
|
const address = character.address ?? pickRandom(universe.addresses, rng);
|
|
162
114
|
const username = pickRandom(character.usernames, rng);
|
|
163
|
-
const
|
|
164
|
-
const email = EmailGenerator.generateFromUsername(username, domains, rng);
|
|
165
|
-
const phone = PhoneGenerator.generate(universe.domains, rng);
|
|
166
|
-
const password = PasswordGenerator.generate(universe.domains, rng);
|
|
115
|
+
const email = EmailGenerator.generateFromUsername(username, character.emailDomains, rng);
|
|
167
116
|
const quote = pickRandom(character.quotes, rng);
|
|
168
117
|
const person = {
|
|
169
118
|
id: crypto.randomUUID(),
|
|
@@ -172,8 +121,6 @@ var PersonFactory = class {
|
|
|
172
121
|
lastName: character.lastName,
|
|
173
122
|
username,
|
|
174
123
|
email,
|
|
175
|
-
password,
|
|
176
|
-
phone,
|
|
177
124
|
address: {
|
|
178
125
|
street: address.street,
|
|
179
126
|
city: address.city,
|
|
@@ -303,7 +250,6 @@ var import_meta = {};
|
|
|
303
250
|
var metaModules = import_meta.glob("../data/*/meta.json", { eager: false });
|
|
304
251
|
var characterModules = import_meta.glob("../data/*/characters.json", { eager: false });
|
|
305
252
|
var addressModules = import_meta.glob("../data/*/addresses.json", { eager: false });
|
|
306
|
-
var domainModules = import_meta.glob("../data/*/domains.json", { eager: false });
|
|
307
253
|
function extractId(path) {
|
|
308
254
|
const parts = path.split("/");
|
|
309
255
|
return parts[parts.length - 2];
|
|
@@ -336,32 +282,27 @@ async function loadUniverse(id) {
|
|
|
336
282
|
const metaPath = `../data/${id}/meta.json`;
|
|
337
283
|
const charactersPath = `../data/${id}/characters.json`;
|
|
338
284
|
const addressesPath = `../data/${id}/addresses.json`;
|
|
339
|
-
const domainsPath = `../data/${id}/domains.json`;
|
|
340
285
|
const metaLoader = metaModules[metaPath];
|
|
341
286
|
const charactersLoader = characterModules[charactersPath];
|
|
342
287
|
const addressesLoader = addressModules[addressesPath];
|
|
343
|
-
|
|
344
|
-
if (!metaLoader || !charactersLoader || !addressesLoader || !domainsLoader) {
|
|
288
|
+
if (!metaLoader || !charactersLoader || !addressesLoader) {
|
|
345
289
|
throw new Error(`Universe "${id}" not found`);
|
|
346
290
|
}
|
|
347
|
-
const [metaModule, charactersModule, addressesModule
|
|
291
|
+
const [metaModule, charactersModule, addressesModule] = await Promise.all([
|
|
348
292
|
metaLoader(),
|
|
349
293
|
charactersLoader(),
|
|
350
|
-
addressesLoader()
|
|
351
|
-
domainsLoader()
|
|
294
|
+
addressesLoader()
|
|
352
295
|
]);
|
|
353
296
|
const meta = metaModule.default;
|
|
354
297
|
const characters = charactersModule.default;
|
|
355
298
|
const addresses = addressesModule.default;
|
|
356
|
-
const domains = domainsModule.default;
|
|
357
299
|
const universeData = {
|
|
358
300
|
id: meta.id,
|
|
359
301
|
name: meta.name,
|
|
360
302
|
genre: meta.genre,
|
|
361
303
|
description: meta.description,
|
|
362
304
|
characters,
|
|
363
|
-
addresses
|
|
364
|
-
domains
|
|
305
|
+
addresses
|
|
365
306
|
};
|
|
366
307
|
return universeData;
|
|
367
308
|
}
|
|
@@ -388,16 +329,21 @@ async function getAllInterests() {
|
|
|
388
329
|
}
|
|
389
330
|
async function getAllLocations() {
|
|
390
331
|
const universes = await loadAllUniverses();
|
|
391
|
-
const
|
|
332
|
+
const seen = /* @__PURE__ */ new Map();
|
|
392
333
|
for (const universe of universes) {
|
|
393
334
|
for (const address of universe.addresses) {
|
|
394
|
-
if (address.city) {
|
|
395
|
-
|
|
335
|
+
if (address.city && !seen.has(`city:${address.city}`)) {
|
|
336
|
+
seen.set(`city:${address.city}`, { name: address.city, type: "city" });
|
|
337
|
+
}
|
|
338
|
+
if (address.state && !seen.has(`state:${address.state}`)) {
|
|
339
|
+
seen.set(`state:${address.state}`, { name: address.state, type: "state" });
|
|
340
|
+
}
|
|
341
|
+
if (address.country && !seen.has(`country:${address.country}`)) {
|
|
342
|
+
seen.set(`country:${address.country}`, { name: address.country, type: "country" });
|
|
396
343
|
}
|
|
397
344
|
}
|
|
398
345
|
}
|
|
399
|
-
|
|
400
|
-
return result;
|
|
346
|
+
return Array.from(seen.values()).sort((a, b) => a.name.localeCompare(b.name));
|
|
401
347
|
}
|
|
402
348
|
|
|
403
349
|
// src/browser.ts
|
package/dist/browser.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser.ts","../src/generators/random.ts","../src/generators/email.ts","../src/generators/phone.ts","../src/generators/password.ts","../src/engine/person-factory.ts","../src/engine/universe-store.ts","../src/universes/browser-loader.ts"],"sourcesContent":["import { PersonFactory } from '@/engine/person-factory';\nimport { UniverseStore } from '@/engine/universe-store';\n\nimport type { Person, UniverseData } from '@/types';\n\nexport { UniverseStore };\nexport {\n\tloadUniverse,\n\tloadUniverses,\n\tloadAllUniverses,\n\tloadUniverseMeta,\n\tgetManifest,\n\tgetAllInterests,\n\tgetAllLocations,\n\tgetAvailableIds\n} from '@/universes/browser-loader';\n\nexport function personFromData(universe: UniverseData, seed?: number): Person {\n\treturn PersonFactory.build(universe, seed);\n}\n\nexport type { Person, UniverseMeta } from '@/types';\nexport type { Address, UniverseData, CharacterData, AddressData, DomainsData } from '@/types';\nexport type { CharacterEntry, CharacterQuery } from '@/types';\n","/**\n * Seeded pseudo-random number generator (mulberry32).\n * Returns a function that produces values in [0, 1).\n */\nexport function createRng(seed?: number): () => number {\n\tif (seed === undefined) {\n\t\treturn Math.random;\n\t}\n\n\tlet s = seed;\n\n\treturn function rng(): number {\n\t\ts += 0x6d2b79f5;\n\t\tlet z = s;\n\t\tz = Math.imul(z ^ (z >>> 15), z | 1);\n\t\tz ^= z + Math.imul(z ^ (z >>> 7), z | 61);\n\n\t\treturn ((z ^ (z >>> 14)) >>> 0) / 4294967296;\n\t};\n}\n\nexport function pickRandom<T>(array: T[], rng: () => number): T {\n\tconst index = Math.floor(rng() * array.length);\n\n\treturn array[index];\n}\n","import { pickRandom } from './random';\n\nimport type { DomainsData } from '@/types';\n\nexport class EmailGenerator {\n\tstatic generate(firstName: string, lastName: string, domains: DomainsData, rng: () => number): string {\n\t\tconst domain = pickRandom(domains.emailDomains, rng);\n\t\tconst first = firstName.toLowerCase();\n\t\tconst last = lastName.toLowerCase();\n\n\t\treturn `${first}.${last}@${domain}`;\n\t}\n\n\tstatic generateFromUsername(username: string, domains: DomainsData, rng: () => number): string {\n\t\tconst domain = pickRandom(domains.emailDomains, rng);\n\n\t\treturn `${username}@${domain}`;\n\t}\n}\n","import { pickRandom } from './random';\n\nimport type { DomainsData } from '@/types';\n\nexport class PhoneGenerator {\n\tstatic generate(domains: DomainsData, rng: () => number): string {\n\t\tif (domains.phoneEasterEggs && domains.phoneEasterEggs.length > 0 && rng() < 0.2) {\n\t\t\treturn pickRandom(domains.phoneEasterEggs, rng);\n\t\t}\n\n\t\tconst prefix = pickRandom(domains.phonePrefixes, rng);\n\t\tconst suffix = this.randomDigits(7, rng);\n\n\t\treturn `${prefix}-${suffix.slice(0, 3)}-${suffix.slice(3)}`;\n\t}\n\n\tprivate static randomDigits(count: number, rng: () => number): string {\n\t\tlet result = '';\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tresult += Math.floor(rng() * 10).toString();\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","import { pickRandom } from './random';\n\nimport type { DomainsData } from '@/types';\n\nexport class PasswordGenerator {\n\tstatic generate(domains: DomainsData, rng: () => number): string {\n\t\tif (domains.passwordEasterEggs && domains.passwordEasterEggs.length > 0 && rng() < 0.3) {\n\t\t\treturn pickRandom(domains.passwordEasterEggs, rng);\n\t\t}\n\n\t\treturn this.randomPassword(12, rng);\n\t}\n\n\tprivate static randomPassword(length: number, rng: () => number): string {\n\t\tconst chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$';\n\t\tlet result = '';\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tresult += chars[Math.floor(rng() * chars.length)];\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","import { createRng, pickRandom, EmailGenerator, PhoneGenerator, PasswordGenerator } from '@/generators';\n\nimport type { Person, UniverseData, CharacterData } from '@/types';\n\nexport class PersonFactory {\n\tstatic build(universe: UniverseData, seed?: number): Person {\n\t\tconst rng = createRng(seed);\n\n\t\tconst character = pickRandom(universe.characters, rng);\n\n\t\treturn this.buildFromCharacter(character, universe, rng);\n\t}\n\n\tstatic buildByCharacterId(characterId: string, universe: UniverseData, seed?: number): Person {\n\t\tconst character = universe.characters.find((c) => c.id === characterId);\n\n\t\tif (!character) {\n\t\t\tthrow new Error(`Character \"${characterId}\" not found in universe \"${universe.id}\"`);\n\t\t}\n\n\t\tconst rng = createRng(seed);\n\n\t\treturn this.buildFromCharacter(character, universe, rng);\n\t}\n\n\tstatic buildCanonical(characterId: string, universe: UniverseData): Person {\n\t\tconst character = universe.characters.find((c) => c.id === characterId);\n\n\t\tif (!character) {\n\t\t\tthrow new Error(`Character \"${characterId}\" not found in universe \"${universe.id}\"`);\n\t\t}\n\n\t\tconst address = character.address ?? universe.addresses[0];\n\t\tconst username = character.usernames[0];\n\t\tconst domains = character.emailDomain ? { ...universe.domains, emailDomains: [character.emailDomain] } : universe.domains;\n\t\tconst rng = createRng(0);\n\t\tconst email = EmailGenerator.generateFromUsername(username, domains, rng);\n\t\tconst phone = PhoneGenerator.generate(universe.domains, rng);\n\t\tconst password = PasswordGenerator.generate(universe.domains, rng);\n\t\tconst quote = character.quotes[0];\n\n\t\tconst person: Person = {\n\t\t\tid: crypto.randomUUID(),\n\t\t\tcharacterId: character.id,\n\t\t\tfirstName: character.firstName,\n\t\t\tlastName: character.lastName,\n\t\t\tusername,\n\t\t\temail,\n\t\t\tpassword,\n\t\t\tphone,\n\t\t\taddress: {\n\t\t\t\tstreet: address.street,\n\t\t\t\tcity: address.city,\n\t\t\t\tstate: address.state ?? '',\n\t\t\t\tzip: address.zip ?? '',\n\t\t\t\tcountry: address.country\n\t\t\t},\n\t\t\tprofession: character.profession,\n\t\t\tinterests: character.interests,\n\t\t\tquote,\n\t\t\tuniverse: universe.id,\n\t\t\tuniverseName: universe.name,\n\t\t\t...(character.symbol ? { symbol: character.symbol } : {}),\n\t\t\t...(character.color ? { color: character.color } : {})\n\t\t};\n\n\t\treturn person;\n\t}\n\n\tprivate static buildFromCharacter(character: CharacterData, universe: UniverseData, rng: () => number): Person {\n\t\tconst address = character.address ?? pickRandom(universe.addresses, rng);\n\n\t\tconst username = pickRandom(character.usernames, rng);\n\n\t\tconst domains = character.emailDomain ? { ...universe.domains, emailDomains: [character.emailDomain] } : universe.domains;\n\n\t\tconst email = EmailGenerator.generateFromUsername(username, domains, rng);\n\t\tconst phone = PhoneGenerator.generate(universe.domains, rng);\n\t\tconst password = PasswordGenerator.generate(universe.domains, rng);\n\t\tconst quote = pickRandom(character.quotes, rng);\n\n\t\tconst person: Person = {\n\t\t\tid: crypto.randomUUID(),\n\t\t\tcharacterId: character.id,\n\t\t\tfirstName: character.firstName,\n\t\t\tlastName: character.lastName,\n\t\t\tusername,\n\t\t\temail,\n\t\t\tpassword,\n\t\t\tphone,\n\t\t\taddress: {\n\t\t\t\tstreet: address.street,\n\t\t\t\tcity: address.city,\n\t\t\t\tstate: address.state ?? '',\n\t\t\t\tzip: address.zip ?? '',\n\t\t\t\tcountry: address.country\n\t\t\t},\n\t\t\tprofession: character.profession,\n\t\t\tinterests: character.interests,\n\t\t\tquote,\n\t\t\tuniverse: universe.id,\n\t\t\tuniverseName: universe.name,\n\t\t\t...(character.symbol ? { symbol: character.symbol } : {}),\n\t\t\t...(character.color ? { color: character.color } : {})\n\t\t};\n\n\t\treturn person;\n\t}\n}\n","import { createRng } from '@/generators';\n\nimport { PersonFactory } from './person-factory';\n\nimport type { UniverseData, UniverseMeta, Person, CharacterEntry, CharacterQuery } from '@/types';\n\nexport class UniverseStore {\n\tprivate universes: UniverseData[];\n\tprivate characterIndex: CharacterEntry[];\n\n\tconstructor(universes: UniverseData[]) {\n\t\tthis.universes = universes;\n\t\tthis.characterIndex = this.buildIndex(universes);\n\t}\n\n\tget index(): CharacterEntry[] {\n\t\treturn this.characterIndex;\n\t}\n\n\tgetInterests(universeIds?: string[]): string[] {\n\t\tconst entries =\n\t\t\tuniverseIds && universeIds.length > 0\n\t\t\t\t? this.characterIndex.filter((e) => universeIds.includes(e.universeId))\n\t\t\t\t: this.characterIndex;\n\n\t\tconst interestSet = new Set<string>();\n\n\t\tfor (const entry of entries) {\n\t\t\tfor (const interest of entry.interests) {\n\t\t\t\tinterestSet.add(interest);\n\t\t\t}\n\t\t}\n\n\t\tconst result = Array.from(interestSet).sort();\n\n\t\treturn result;\n\t}\n\n\tgetUniverses(): UniverseMeta[] {\n\t\tconst result = this.universes.map((u) => {\n\t\t\tconst meta: UniverseMeta = {\n\t\t\t\tid: u.id,\n\t\t\t\tname: u.name,\n\t\t\t\tgenre: u.genre,\n\t\t\t\tdescription: u.description\n\t\t\t};\n\n\t\t\treturn meta;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfindCharacters(query: CharacterQuery): CharacterEntry[] {\n\t\tlet entries = this.characterIndex;\n\n\t\tif (query.universes && query.universes.length > 0) {\n\t\t\tentries = entries.filter((e) => query.universes!.includes(e.universeId));\n\t\t}\n\n\t\tif (query.name && query.name.trim().length > 0) {\n\t\t\tconst needle = query.name.toLowerCase();\n\n\t\t\tentries = entries.filter((e) => {\n\t\t\t\tconst fullName = `${e.firstName} ${e.lastName}`.toLowerCase();\n\n\t\t\t\treturn fullName.includes(needle);\n\t\t\t});\n\t\t}\n\n\t\tif (query.interests && query.interests.length > 0) {\n\t\t\tconst mode = query.interestsMode ?? 'or';\n\n\t\t\tif (mode === 'and') {\n\t\t\t\tentries = entries.filter((e) => query.interests!.every((interest) => e.interests.includes(interest)));\n\t\t\t} else {\n\t\t\t\tentries = entries.filter((e) => query.interests!.some((interest) => e.interests.includes(interest)));\n\t\t\t}\n\t\t}\n\n\t\treturn entries;\n\t}\n\n\tpersonByCharacterId(characterId: string, seed?: number): Person {\n\t\tconst entry = this.characterIndex.find((e) => e.characterId === characterId);\n\n\t\tif (!entry) {\n\t\t\tthrow new Error(`Character \"${characterId}\" not found in store`);\n\t\t}\n\n\t\tconst universe = this.universes.find((u) => u.id === entry.universeId);\n\n\t\tif (!universe) {\n\t\t\tthrow new Error(`Universe \"${entry.universeId}\" not found in store`);\n\t\t}\n\n\t\treturn PersonFactory.buildByCharacterId(characterId, universe, seed);\n\t}\n\n\tgeneratePersonas(query: CharacterQuery, count: number, seed?: number): Person[] {\n\t\tconst matching = this.findCharacters(query);\n\n\t\tif (matching.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst rng = createRng(seed);\n\t\tconst actualCount = Math.min(count, matching.length);\n\n\t\tconst shuffled = [...matching].sort(() => rng() - 0.5);\n\t\tconst selected = shuffled.slice(0, actualCount);\n\t\tconst personas: Person[] = [];\n\n\t\tfor (let i = 0; i < selected.length; i++) {\n\t\t\tconst entry = selected[i];\n\t\t\tconst universe = this.universes.find((u) => u.id === entry.universeId)!;\n\t\t\tconst personSeed = seed !== undefined ? seed + i : undefined;\n\n\t\t\tpersonas.push(PersonFactory.buildByCharacterId(entry.characterId, universe, personSeed));\n\t\t}\n\n\t\treturn personas;\n\t}\n\n\tprivate buildIndex(universes: UniverseData[]): CharacterEntry[] {\n\t\tconst index: CharacterEntry[] = [];\n\n\t\tfor (const universe of universes) {\n\t\t\tfor (const character of universe.characters) {\n\t\t\t\tconst entry: CharacterEntry = {\n\t\t\t\t\tcharacterId: character.id,\n\t\t\t\t\tuniverseId: universe.id,\n\t\t\t\t\tuniverseName: universe.name,\n\t\t\t\t\tfirstName: character.firstName,\n\t\t\t\t\tlastName: character.lastName,\n\t\t\t\t\tinterests: character.interests,\n\t\t\t\t\tprofession: character.profession\n\t\t\t\t};\n\n\t\t\t\tindex.push(entry);\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t}\n}\n","import type { UniverseData, UniverseMeta, CharacterData, AddressData, DomainsData } from '@/types';\n\ninterface MetaJson {\n\tid: string;\n\tname: string;\n\tgenre: string[];\n\tdescription: string;\n}\n\nconst metaModules = import.meta.glob('../data/*/meta.json', { eager: false });\nconst characterModules = import.meta.glob('../data/*/characters.json', { eager: false });\nconst addressModules = import.meta.glob('../data/*/addresses.json', { eager: false });\nconst domainModules = import.meta.glob('../data/*/domains.json', { eager: false });\n\nfunction extractId(path: string): string {\n\tconst parts = path.split('/');\n\n\treturn parts[parts.length - 2];\n}\n\nexport function getAvailableIds(): string[] {\n\treturn Object.keys(metaModules).map(extractId);\n}\n\nexport async function loadUniverseMeta(id: string): Promise<UniverseMeta> {\n\tconst metaPath = `../data/${id}/meta.json`;\n\tconst metaLoader = metaModules[metaPath];\n\n\tif (!metaLoader) {\n\t\tthrow new Error(`Universe \"${id}\" not found`);\n\t}\n\n\tconst metaModule = await metaLoader();\n\tconst meta = (metaModule as { default: MetaJson }).default;\n\n\tconst result: UniverseMeta = {\n\t\tid: meta.id,\n\t\tname: meta.name,\n\t\tgenre: meta.genre,\n\t\tdescription: meta.description\n\t};\n\n\treturn result;\n}\n\nexport async function getManifest(): Promise<UniverseMeta[]> {\n\tconst ids = getAvailableIds();\n\tconst result = await Promise.all(ids.map((id) => loadUniverseMeta(id)));\n\n\treturn result;\n}\n\nexport async function loadUniverse(id: string): Promise<UniverseData> {\n\tconst metaPath = `../data/${id}/meta.json`;\n\tconst charactersPath = `../data/${id}/characters.json`;\n\tconst addressesPath = `../data/${id}/addresses.json`;\n\tconst domainsPath = `../data/${id}/domains.json`;\n\n\tconst metaLoader = metaModules[metaPath];\n\tconst charactersLoader = characterModules[charactersPath];\n\tconst addressesLoader = addressModules[addressesPath];\n\tconst domainsLoader = domainModules[domainsPath];\n\n\tif (!metaLoader || !charactersLoader || !addressesLoader || !domainsLoader) {\n\t\tthrow new Error(`Universe \"${id}\" not found`);\n\t}\n\n\tconst [metaModule, charactersModule, addressesModule, domainsModule] = await Promise.all([\n\t\tmetaLoader(),\n\t\tcharactersLoader(),\n\t\taddressesLoader(),\n\t\tdomainsLoader()\n\t]);\n\n\tconst meta = (metaModule as { default: MetaJson }).default;\n\tconst characters = (charactersModule as { default: CharacterData[] }).default;\n\tconst addresses = (addressesModule as { default: AddressData[] }).default;\n\tconst domains = (domainsModule as { default: DomainsData }).default;\n\n\tconst universeData: UniverseData = {\n\t\tid: meta.id,\n\t\tname: meta.name,\n\t\tgenre: meta.genre,\n\t\tdescription: meta.description,\n\t\tcharacters,\n\t\taddresses,\n\t\tdomains\n\t};\n\n\treturn universeData;\n}\n\nexport async function loadUniverses(ids: string[]): Promise<UniverseData[]> {\n\tconst result = await Promise.all(ids.map((id) => loadUniverse(id)));\n\n\treturn result;\n}\n\nexport async function loadAllUniverses(): Promise<UniverseData[]> {\n\tconst ids = getAvailableIds();\n\n\treturn loadUniverses(ids);\n}\n\nexport async function getAllInterests(): Promise<string[]> {\n\tconst universes = await loadAllUniverses();\n\tconst interestSet = new Set<string>();\n\n\tfor (const universe of universes) {\n\t\tfor (const character of universe.characters) {\n\t\t\tfor (const interest of character.interests) {\n\t\t\t\tinterestSet.add(interest);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst result = Array.from(interestSet).sort();\n\n\treturn result;\n}\n\nexport async function getAllLocations(): Promise<string[]> {\n\tconst universes = await loadAllUniverses();\n\tconst citySet = new Set<string>();\n\n\tfor (const universe of universes) {\n\t\tfor (const address of universe.addresses) {\n\t\t\tif (address.city) {\n\t\t\t\tcitySet.add(address.city);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst result = Array.from(citySet).sort();\n\n\treturn result;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/browser.ts","../src/generators/random.ts","../src/generators/email.ts","../src/engine/person-factory.ts","../src/engine/universe-store.ts","../src/universes/browser-loader.ts"],"sourcesContent":["import { PersonFactory } from '@/engine/person-factory';\nimport { UniverseStore } from '@/engine/universe-store';\n\nimport type { Person, UniverseData } from '@/types';\n\nexport { UniverseStore };\nexport {\n\tloadUniverse,\n\tloadUniverses,\n\tloadAllUniverses,\n\tloadUniverseMeta,\n\tgetManifest,\n\tgetAllInterests,\n\tgetAllLocations,\n\tgetAvailableIds\n} from '@/universes/browser-loader';\n\nexport function personFromData(universe: UniverseData, seed?: number): Person {\n\treturn PersonFactory.build(universe, seed);\n}\n\nexport type { Person, UniverseMeta } from '@/types';\nexport type { Address, UniverseData, CharacterData, AddressData } from '@/types';\nexport type { CharacterEntry, CharacterQuery } from '@/types';\n","/**\n * Seeded pseudo-random number generator (mulberry32).\n * Returns a function that produces values in [0, 1).\n */\nexport function createRng(seed?: number): () => number {\n\tif (seed === undefined) {\n\t\treturn Math.random;\n\t}\n\n\tlet s = seed;\n\n\treturn function rng(): number {\n\t\ts += 0x6d2b79f5;\n\t\tlet z = s;\n\t\tz = Math.imul(z ^ (z >>> 15), z | 1);\n\t\tz ^= z + Math.imul(z ^ (z >>> 7), z | 61);\n\n\t\treturn ((z ^ (z >>> 14)) >>> 0) / 4294967296;\n\t};\n}\n\nexport function pickRandom<T>(array: T[], rng: () => number): T {\n\tconst index = Math.floor(rng() * array.length);\n\n\treturn array[index];\n}\n","import { pickRandom } from './random';\n\nexport class EmailGenerator {\n\tstatic generateFromUsername(username: string, emailDomains: string[], rng: () => number): string {\n\t\tconst domain = pickRandom(emailDomains, rng);\n\n\t\treturn `${username}@${domain}`;\n\t}\n}\n","import { createRng, pickRandom, EmailGenerator } from '@/generators';\n\nimport type { Person, UniverseData, CharacterData } from '@/types';\n\nexport class PersonFactory {\n\tstatic build(universe: UniverseData, seed?: number): Person {\n\t\tconst rng = createRng(seed);\n\n\t\tconst character = pickRandom(universe.characters, rng);\n\n\t\treturn this.buildFromCharacter(character, universe, rng);\n\t}\n\n\tstatic buildByCharacterId(characterId: string, universe: UniverseData, seed?: number): Person {\n\t\tconst character = universe.characters.find((c) => c.id === characterId);\n\n\t\tif (!character) {\n\t\t\tthrow new Error(`Character \"${characterId}\" not found in universe \"${universe.id}\"`);\n\t\t}\n\n\t\tconst rng = createRng(seed);\n\n\t\treturn this.buildFromCharacter(character, universe, rng);\n\t}\n\n\tstatic buildCanonical(characterId: string, universe: UniverseData): Person {\n\t\tconst character = universe.characters.find((c) => c.id === characterId);\n\n\t\tif (!character) {\n\t\t\tthrow new Error(`Character \"${characterId}\" not found in universe \"${universe.id}\"`);\n\t\t}\n\n\t\tconst address = character.address ?? universe.addresses[0];\n\t\tconst username = character.usernames[0];\n\t\tconst rng = createRng(0);\n\t\tconst email = EmailGenerator.generateFromUsername(username, character.emailDomains, rng);\n\t\tconst quote = character.quotes[0];\n\n\t\tconst person: Person = {\n\t\t\tid: crypto.randomUUID(),\n\t\t\tcharacterId: character.id,\n\t\t\tfirstName: character.firstName,\n\t\t\tlastName: character.lastName,\n\t\t\tusername,\n\t\t\temail,\n\t\t\taddress: {\n\t\t\t\tstreet: address.street,\n\t\t\t\tcity: address.city,\n\t\t\t\tstate: address.state ?? '',\n\t\t\t\tzip: address.zip ?? '',\n\t\t\t\tcountry: address.country\n\t\t\t},\n\t\t\tprofession: character.profession,\n\t\t\tinterests: character.interests,\n\t\t\tquote,\n\t\t\tuniverse: universe.id,\n\t\t\tuniverseName: universe.name,\n\t\t\t...(character.symbol ? { symbol: character.symbol } : {}),\n\t\t\t...(character.color ? { color: character.color } : {})\n\t\t};\n\n\t\treturn person;\n\t}\n\n\tprivate static buildFromCharacter(character: CharacterData, universe: UniverseData, rng: () => number): Person {\n\t\tconst address = character.address ?? pickRandom(universe.addresses, rng);\n\t\tconst username = pickRandom(character.usernames, rng);\n\t\tconst email = EmailGenerator.generateFromUsername(username, character.emailDomains, rng);\n\t\tconst quote = pickRandom(character.quotes, rng);\n\n\t\tconst person: Person = {\n\t\t\tid: crypto.randomUUID(),\n\t\t\tcharacterId: character.id,\n\t\t\tfirstName: character.firstName,\n\t\t\tlastName: character.lastName,\n\t\t\tusername,\n\t\t\temail,\n\t\t\taddress: {\n\t\t\t\tstreet: address.street,\n\t\t\t\tcity: address.city,\n\t\t\t\tstate: address.state ?? '',\n\t\t\t\tzip: address.zip ?? '',\n\t\t\t\tcountry: address.country\n\t\t\t},\n\t\t\tprofession: character.profession,\n\t\t\tinterests: character.interests,\n\t\t\tquote,\n\t\t\tuniverse: universe.id,\n\t\t\tuniverseName: universe.name,\n\t\t\t...(character.symbol ? { symbol: character.symbol } : {}),\n\t\t\t...(character.color ? { color: character.color } : {})\n\t\t};\n\n\t\treturn person;\n\t}\n}\n","import { createRng } from '@/generators';\n\nimport { PersonFactory } from './person-factory';\n\nimport type { UniverseData, UniverseMeta, Person, CharacterEntry, CharacterQuery } from '@/types';\n\nexport class UniverseStore {\n\tprivate universes: UniverseData[];\n\tprivate characterIndex: CharacterEntry[];\n\n\tconstructor(universes: UniverseData[]) {\n\t\tthis.universes = universes;\n\t\tthis.characterIndex = this.buildIndex(universes);\n\t}\n\n\tget index(): CharacterEntry[] {\n\t\treturn this.characterIndex;\n\t}\n\n\tgetInterests(universeIds?: string[]): string[] {\n\t\tconst entries =\n\t\t\tuniverseIds && universeIds.length > 0\n\t\t\t\t? this.characterIndex.filter((e) => universeIds.includes(e.universeId))\n\t\t\t\t: this.characterIndex;\n\n\t\tconst interestSet = new Set<string>();\n\n\t\tfor (const entry of entries) {\n\t\t\tfor (const interest of entry.interests) {\n\t\t\t\tinterestSet.add(interest);\n\t\t\t}\n\t\t}\n\n\t\tconst result = Array.from(interestSet).sort();\n\n\t\treturn result;\n\t}\n\n\tgetUniverses(): UniverseMeta[] {\n\t\tconst result = this.universes.map((u) => {\n\t\t\tconst meta: UniverseMeta = {\n\t\t\t\tid: u.id,\n\t\t\t\tname: u.name,\n\t\t\t\tgenre: u.genre,\n\t\t\t\tdescription: u.description\n\t\t\t};\n\n\t\t\treturn meta;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfindCharacters(query: CharacterQuery): CharacterEntry[] {\n\t\tlet entries = this.characterIndex;\n\n\t\tif (query.universes && query.universes.length > 0) {\n\t\t\tentries = entries.filter((e) => query.universes!.includes(e.universeId));\n\t\t}\n\n\t\tif (query.name && query.name.trim().length > 0) {\n\t\t\tconst needle = query.name.toLowerCase();\n\n\t\t\tentries = entries.filter((e) => {\n\t\t\t\tconst fullName = `${e.firstName} ${e.lastName}`.toLowerCase();\n\n\t\t\t\treturn fullName.includes(needle);\n\t\t\t});\n\t\t}\n\n\t\tif (query.interests && query.interests.length > 0) {\n\t\t\tconst mode = query.interestsMode ?? 'or';\n\n\t\t\tif (mode === 'and') {\n\t\t\t\tentries = entries.filter((e) => query.interests!.every((interest) => e.interests.includes(interest)));\n\t\t\t} else {\n\t\t\t\tentries = entries.filter((e) => query.interests!.some((interest) => e.interests.includes(interest)));\n\t\t\t}\n\t\t}\n\n\t\treturn entries;\n\t}\n\n\tpersonByCharacterId(characterId: string, seed?: number): Person {\n\t\tconst entry = this.characterIndex.find((e) => e.characterId === characterId);\n\n\t\tif (!entry) {\n\t\t\tthrow new Error(`Character \"${characterId}\" not found in store`);\n\t\t}\n\n\t\tconst universe = this.universes.find((u) => u.id === entry.universeId);\n\n\t\tif (!universe) {\n\t\t\tthrow new Error(`Universe \"${entry.universeId}\" not found in store`);\n\t\t}\n\n\t\treturn PersonFactory.buildByCharacterId(characterId, universe, seed);\n\t}\n\n\tgeneratePersonas(query: CharacterQuery, count: number, seed?: number): Person[] {\n\t\tconst matching = this.findCharacters(query);\n\n\t\tif (matching.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst rng = createRng(seed);\n\t\tconst actualCount = Math.min(count, matching.length);\n\n\t\tconst shuffled = [...matching].sort(() => rng() - 0.5);\n\t\tconst selected = shuffled.slice(0, actualCount);\n\t\tconst personas: Person[] = [];\n\n\t\tfor (let i = 0; i < selected.length; i++) {\n\t\t\tconst entry = selected[i];\n\t\t\tconst universe = this.universes.find((u) => u.id === entry.universeId)!;\n\t\t\tconst personSeed = seed !== undefined ? seed + i : undefined;\n\n\t\t\tpersonas.push(PersonFactory.buildByCharacterId(entry.characterId, universe, personSeed));\n\t\t}\n\n\t\treturn personas;\n\t}\n\n\tprivate buildIndex(universes: UniverseData[]): CharacterEntry[] {\n\t\tconst index: CharacterEntry[] = [];\n\n\t\tfor (const universe of universes) {\n\t\t\tfor (const character of universe.characters) {\n\t\t\t\tconst entry: CharacterEntry = {\n\t\t\t\t\tcharacterId: character.id,\n\t\t\t\t\tuniverseId: universe.id,\n\t\t\t\t\tuniverseName: universe.name,\n\t\t\t\t\tfirstName: character.firstName,\n\t\t\t\t\tlastName: character.lastName,\n\t\t\t\t\tinterests: character.interests,\n\t\t\t\t\tprofession: character.profession\n\t\t\t\t};\n\n\t\t\t\tindex.push(entry);\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t}\n}\n","import type { UniverseData, UniverseMeta, CharacterData, AddressData, LocationEntry } from '@/types';\n\ninterface MetaJson {\n\tid: string;\n\tname: string;\n\tgenre: string[];\n\tdescription: string;\n}\n\nconst metaModules = import.meta.glob('../data/*/meta.json', { eager: false });\nconst characterModules = import.meta.glob('../data/*/characters.json', { eager: false });\nconst addressModules = import.meta.glob('../data/*/addresses.json', { eager: false });\n\nfunction extractId(path: string): string {\n\tconst parts = path.split('/');\n\n\treturn parts[parts.length - 2];\n}\n\nexport function getAvailableIds(): string[] {\n\treturn Object.keys(metaModules).map(extractId);\n}\n\nexport async function loadUniverseMeta(id: string): Promise<UniverseMeta> {\n\tconst metaPath = `../data/${id}/meta.json`;\n\tconst metaLoader = metaModules[metaPath];\n\n\tif (!metaLoader) {\n\t\tthrow new Error(`Universe \"${id}\" not found`);\n\t}\n\n\tconst metaModule = await metaLoader();\n\tconst meta = (metaModule as { default: MetaJson }).default;\n\n\tconst result: UniverseMeta = {\n\t\tid: meta.id,\n\t\tname: meta.name,\n\t\tgenre: meta.genre,\n\t\tdescription: meta.description\n\t};\n\n\treturn result;\n}\n\nexport async function getManifest(): Promise<UniverseMeta[]> {\n\tconst ids = getAvailableIds();\n\tconst result = await Promise.all(ids.map((id) => loadUniverseMeta(id)));\n\n\treturn result;\n}\n\nexport async function loadUniverse(id: string): Promise<UniverseData> {\n\tconst metaPath = `../data/${id}/meta.json`;\n\tconst charactersPath = `../data/${id}/characters.json`;\n\tconst addressesPath = `../data/${id}/addresses.json`;\n\n\tconst metaLoader = metaModules[metaPath];\n\tconst charactersLoader = characterModules[charactersPath];\n\tconst addressesLoader = addressModules[addressesPath];\n\n\tif (!metaLoader || !charactersLoader || !addressesLoader) {\n\t\tthrow new Error(`Universe \"${id}\" not found`);\n\t}\n\n\tconst [metaModule, charactersModule, addressesModule] = await Promise.all([\n\t\tmetaLoader(),\n\t\tcharactersLoader(),\n\t\taddressesLoader()\n\t]);\n\n\tconst meta = (metaModule as { default: MetaJson }).default;\n\tconst characters = (charactersModule as { default: CharacterData[] }).default;\n\tconst addresses = (addressesModule as { default: AddressData[] }).default;\n\n\tconst universeData: UniverseData = {\n\t\tid: meta.id,\n\t\tname: meta.name,\n\t\tgenre: meta.genre,\n\t\tdescription: meta.description,\n\t\tcharacters,\n\t\taddresses\n\t};\n\n\treturn universeData;\n}\n\nexport async function loadUniverses(ids: string[]): Promise<UniverseData[]> {\n\tconst result = await Promise.all(ids.map((id) => loadUniverse(id)));\n\n\treturn result;\n}\n\nexport async function loadAllUniverses(): Promise<UniverseData[]> {\n\tconst ids = getAvailableIds();\n\n\treturn loadUniverses(ids);\n}\n\nexport async function getAllInterests(): Promise<string[]> {\n\tconst universes = await loadAllUniverses();\n\tconst interestSet = new Set<string>();\n\n\tfor (const universe of universes) {\n\t\tfor (const character of universe.characters) {\n\t\t\tfor (const interest of character.interests) {\n\t\t\t\tinterestSet.add(interest);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst result = Array.from(interestSet).sort();\n\n\treturn result;\n}\n\nexport async function getAllLocations(): Promise<LocationEntry[]> {\n\tconst universes = await loadAllUniverses();\n\tconst seen = new Map<string, LocationEntry>();\n\n\tfor (const universe of universes) {\n\t\tfor (const address of universe.addresses) {\n\t\t\tif (address.city && !seen.has(`city:${address.city}`)) {\n\t\t\t\tseen.set(`city:${address.city}`, { name: address.city, type: 'city' });\n\t\t\t}\n\n\t\t\tif (address.state && !seen.has(`state:${address.state}`)) {\n\t\t\t\tseen.set(`state:${address.state}`, { name: address.state, type: 'state' });\n\t\t\t}\n\n\t\t\tif (address.country && !seen.has(`country:${address.country}`)) {\n\t\t\t\tseen.set(`country:${address.country}`, { name: address.country, type: 'country' });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn Array.from(seen.values()).sort((a, b) => a.name.localeCompare(b.name));\n}\n"],"mappings":"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","names":[]}
|
package/dist/browser.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { U as UniverseMeta, a as UniverseData, P as Person } from './universe-store-
|
|
2
|
-
export { A as Address, b as AddressData, C as CharacterData, c as CharacterEntry, d as CharacterQuery,
|
|
1
|
+
import { L as LocationEntry, U as UniverseMeta, a as UniverseData, P as Person } from './universe-store-CWhCn3U6.cjs';
|
|
2
|
+
export { A as Address, b as AddressData, C as CharacterData, c as CharacterEntry, d as CharacterQuery, e as UniverseStore } from './universe-store-CWhCn3U6.cjs';
|
|
3
3
|
|
|
4
4
|
declare function getAvailableIds(): string[];
|
|
5
5
|
declare function loadUniverseMeta(id: string): Promise<UniverseMeta>;
|
|
@@ -8,7 +8,7 @@ declare function loadUniverse(id: string): Promise<UniverseData>;
|
|
|
8
8
|
declare function loadUniverses(ids: string[]): Promise<UniverseData[]>;
|
|
9
9
|
declare function loadAllUniverses(): Promise<UniverseData[]>;
|
|
10
10
|
declare function getAllInterests(): Promise<string[]>;
|
|
11
|
-
declare function getAllLocations(): Promise<
|
|
11
|
+
declare function getAllLocations(): Promise<LocationEntry[]>;
|
|
12
12
|
|
|
13
13
|
declare function personFromData(universe: UniverseData, seed?: number): Person;
|
|
14
14
|
|
package/dist/browser.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { U as UniverseMeta, a as UniverseData, P as Person } from './universe-store-
|
|
2
|
-
export { A as Address, b as AddressData, C as CharacterData, c as CharacterEntry, d as CharacterQuery,
|
|
1
|
+
import { L as LocationEntry, U as UniverseMeta, a as UniverseData, P as Person } from './universe-store-CWhCn3U6.js';
|
|
2
|
+
export { A as Address, b as AddressData, C as CharacterData, c as CharacterEntry, d as CharacterQuery, e as UniverseStore } from './universe-store-CWhCn3U6.js';
|
|
3
3
|
|
|
4
4
|
declare function getAvailableIds(): string[];
|
|
5
5
|
declare function loadUniverseMeta(id: string): Promise<UniverseMeta>;
|
|
@@ -8,7 +8,7 @@ declare function loadUniverse(id: string): Promise<UniverseData>;
|
|
|
8
8
|
declare function loadUniverses(ids: string[]): Promise<UniverseData[]>;
|
|
9
9
|
declare function loadAllUniverses(): Promise<UniverseData[]>;
|
|
10
10
|
declare function getAllInterests(): Promise<string[]>;
|
|
11
|
-
declare function getAllLocations(): Promise<
|
|
11
|
+
declare function getAllLocations(): Promise<LocationEntry[]>;
|
|
12
12
|
|
|
13
13
|
declare function personFromData(universe: UniverseData, seed?: number): Person;
|
|
14
14
|
|