skygame-data 1.1.20 → 1.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/parser.js DELETED
@@ -1,483 +0,0 @@
1
- import { parse } from 'jsonc-parser';
2
- import { ItemType } from './index.js';
3
- import { SkyDateHelper } from './helpers/date-helper.js';
4
- import { SpiritTreeHelper } from './helpers/spirit-tree-helper.js';
5
- export class SkyDataResolver {
6
- data;
7
- guids = new Map();
8
- itemIds = new Map();
9
- constructor(data) {
10
- this.data = data;
11
- }
12
- /**
13
- * Parses Sky data from a JSONC string.
14
- * To resolve references, use `resolveSkyData` after parsing.
15
- * @param json - The contents of `/assets/everything.json`.
16
- */
17
- static parse(json) {
18
- return parse(json, undefined, {
19
- disallowComments: false,
20
- allowEmptyContent: false,
21
- allowTrailingComma: true
22
- });
23
- }
24
- /**
25
- * Resolves all references in the Sky data object.
26
- * The object is modified in-place.
27
- * @param data - The Sky data object to resolve.
28
- */
29
- static resolve(data) {
30
- const resolver = new SkyDataResolver(data);
31
- resolver.resolve();
32
- return resolver.data;
33
- }
34
- resolve() {
35
- Object.values(this.data).forEach(c => this.registerGuids(c));
36
- this.resolveRealms();
37
- this.resolveAreas();
38
- this.resolveSeasons();
39
- this.resolveSpirits();
40
- this.resolveTravelingSpirits();
41
- this.resolveSpecialVisits();
42
- this.resolveSpiritTreeTiers();
43
- this.resolveSpiritTrees();
44
- this.resolveEvents();
45
- this.resolveShops();
46
- this.resolveItems();
47
- this.resolveItemLists();
48
- this.resolveSeasonItems();
49
- this.data.guids = this.guids;
50
- this.data.itemIds = this.itemIds;
51
- }
52
- registerGuids(config) {
53
- if (!Array.isArray(config.items)) {
54
- return;
55
- }
56
- for (const item of config.items) {
57
- this.registerGuid(item);
58
- }
59
- }
60
- registerGuid(obj) {
61
- if (!obj.guid) {
62
- throw new Error('Missing GUID');
63
- }
64
- if (obj.guid?.length !== 10) {
65
- throw new Error(`Invalid GUID: ${obj.guid}`);
66
- }
67
- if (this.guids.has(obj.guid)) {
68
- throw new Error(`Duplicate GUID: ${obj.guid}`);
69
- }
70
- this.guids.set(obj.guid, obj);
71
- }
72
- resolveRealms() {
73
- this.data.realms.items.forEach(realm => {
74
- // Map areas to realms.
75
- realm.areas?.forEach((area, i) => {
76
- area = this.guids.get(area);
77
- realm.areas[i] = area;
78
- area.realm = realm;
79
- });
80
- // Map constellation spirits.
81
- realm.constellation?.icons?.forEach((icon, i) => {
82
- const spirit = this.guids.get(icon.spirit);
83
- realm.constellation.icons[i].spirit = spirit;
84
- });
85
- // Map elders
86
- if (realm.elder) {
87
- realm.elder = this.guids.get(realm.elder);
88
- }
89
- });
90
- }
91
- resolveAreas() {
92
- this.data.areas.items.forEach(area => {
93
- // Map Spirit to Areas.
94
- area.spirits?.forEach((spirit, i) => {
95
- spirit = this.guids.get(spirit);
96
- area.spirits[i] = spirit;
97
- spirit.area = area;
98
- });
99
- // Map Winged Light to Area.
100
- area.wingedLights?.forEach((wl, i) => {
101
- wl = this.guids.get(wl);
102
- area.wingedLights[i] = wl;
103
- wl.area = area;
104
- });
105
- // Map connected areas.
106
- area.connections?.forEach((c, i) => {
107
- c.area = this.guids.get(c.area);
108
- });
109
- // Map.. Map Shrine to Area.
110
- area.mapShrines?.forEach((ms, i) => {
111
- const mapShrine = this.guids.get(ms);
112
- area.mapShrines[i] = mapShrine;
113
- mapShrine.area = area;
114
- });
115
- });
116
- }
117
- resolveSeasons() {
118
- this.data.seasons.items.forEach((season, i) => {
119
- season.number = i + 1;
120
- if (typeof season.date === 'string') {
121
- season.date = SkyDateHelper.fromStringSky(season.date);
122
- }
123
- if (typeof season.endDate === 'string') {
124
- season.endDate = SkyDateHelper.fromStringSky(season.endDate).endOf('day');
125
- }
126
- // Map Spirits to Season.
127
- season.spirits?.forEach((spirit, si) => {
128
- spirit = this.guids.get(spirit);
129
- season.spirits[si] = spirit;
130
- spirit.season = season;
131
- });
132
- // Map Shops to Season
133
- season.shops?.forEach((shop, si) => {
134
- shop = this.guids.get(shop);
135
- season.shops[si] = shop;
136
- shop.season = season;
137
- });
138
- // Map included trees (one-way).
139
- season.includedTrees?.forEach((tree, ti) => {
140
- tree = this.guids.get(tree);
141
- season.includedTrees[ti] = tree;
142
- });
143
- });
144
- }
145
- resolveSpirits() {
146
- this.data.spirits.items.forEach((spirit, i) => {
147
- spirit._index = i;
148
- // Map spirits to spirit tree.
149
- if (spirit.tree) {
150
- const tree = this.guids.get(spirit.tree);
151
- tree.spirit = spirit;
152
- spirit.tree = tree;
153
- }
154
- // Map past versions of spirit tree.
155
- if (spirit.treeRevisions) {
156
- spirit.treeRevisions.forEach((pt, i) => {
157
- const tree = this.guids.get(pt);
158
- tree.spirit = spirit;
159
- spirit.treeRevisions[i] = tree;
160
- });
161
- }
162
- });
163
- }
164
- resolveTravelingSpirits() {
165
- const tsCounts = {};
166
- this.data.travelingSpirits.items.forEach((ts, i) => {
167
- // Initialize dates
168
- if (typeof ts.date === 'string') {
169
- ts.date = SkyDateHelper.fromStringSky(ts.date);
170
- }
171
- ts.endDate = typeof ts.endDate === 'string'
172
- ? SkyDateHelper.fromStringSky(ts.endDate)?.endOf('day')
173
- : ts.date.plus({ days: 3 }).endOf('day');
174
- // Map TS to Spirit.
175
- const spirit = this.guids.get(ts.spirit);
176
- ts.spirit = spirit;
177
- spirit.ts ??= [];
178
- spirit.ts.push(ts);
179
- tsCounts[spirit.name] ??= 0;
180
- tsCounts[spirit.name]++;
181
- ts.number = i + 1;
182
- ts.visit = tsCounts[spirit.name];
183
- // Map TS to Spirit Tree.
184
- const tree = this.guids.get(ts.tree);
185
- ts.tree = tree;
186
- tree.ts = ts;
187
- });
188
- }
189
- resolveSpecialVisits() {
190
- this.data.specialVisits.items.forEach((sv, i) => {
191
- // Initialize dates
192
- if (typeof sv.date === 'string') {
193
- sv.date = SkyDateHelper.fromStringSky(sv.date);
194
- }
195
- if (typeof sv.endDate === 'string') {
196
- sv.endDate = SkyDateHelper.fromStringSky(sv.endDate).endOf('day');
197
- }
198
- // Map SV to Area.
199
- if (sv.area) {
200
- const area = this.guids.get(sv.area);
201
- sv.area = area;
202
- area.rs ??= [];
203
- area.rs.push(sv);
204
- }
205
- // Map Visits.
206
- sv.spirits?.forEach((visit, si) => {
207
- visit = this.guids.get(visit);
208
- sv.spirits[si] = visit;
209
- visit.visit = sv;
210
- // Map Visit to Spirit.
211
- const spirit = this.guids.get(visit.spirit);
212
- sv.spirits[si].spirit = spirit;
213
- spirit.visits ??= [];
214
- spirit.visits.push(visit);
215
- // Map Visit to Spirit Tree.
216
- const tree = this.guids.get(visit.tree);
217
- sv.spirits[si].tree = tree;
218
- tree.visit = visit;
219
- });
220
- });
221
- }
222
- resolveSpiritTrees() {
223
- this.data.spiritTrees.items.forEach(spiritTree => {
224
- // Map Spirit Tree to Node.
225
- if (spiritTree.node) {
226
- const node = this.guids.get(spiritTree.node);
227
- if (!node) {
228
- console.error('Node not found', spiritTree.node);
229
- }
230
- spiritTree.node = node;
231
- node.spiritTree = spiritTree;
232
- this.resolveNode(node);
233
- }
234
- // Map Spirit tree tier.
235
- if (typeof spiritTree.tier === 'string') {
236
- const tier = this.guids.get(spiritTree.tier);
237
- if (!tier) {
238
- console.error('Spirit tree tier not found', spiritTree.tier);
239
- }
240
- spiritTree.tier = tier;
241
- tier.spiritTree = spiritTree;
242
- SpiritTreeHelper.getNodes(spiritTree).forEach(n => n.spiritTree = spiritTree);
243
- }
244
- });
245
- }
246
- resolveSpiritTreeTiers() {
247
- this.data.spiritTreeTiers.items.forEach(tier => {
248
- // Map tier nodes.
249
- tier.rows?.forEach(row => {
250
- row.forEach((node, ni) => {
251
- if (!node) {
252
- return;
253
- }
254
- const n = this.guids.get(node);
255
- if (!n) {
256
- console.error('Node not found', node);
257
- }
258
- row[ni] = n;
259
- n.root = n;
260
- this.resolveNode(n);
261
- });
262
- });
263
- if (!tier.prev) {
264
- tier.root = tier;
265
- }
266
- // Map next tier.
267
- if (typeof tier.next === 'string') {
268
- const nextTier = this.guids.get(tier.next);
269
- if (!nextTier) {
270
- console.error('Next spirit tree tier not found', tier.next);
271
- }
272
- tier.next = nextTier;
273
- nextTier.prev = tier;
274
- nextTier.root = tier.root;
275
- }
276
- });
277
- }
278
- resolveEvents() {
279
- this.data.events.items.forEach(event => {
280
- event.instances?.forEach((eventInstance, iInstance) => {
281
- eventInstance = this.guids.get(eventInstance);
282
- event.instances[iInstance] = eventInstance;
283
- eventInstance.event = event;
284
- eventInstance.number = iInstance + 1;
285
- // Initialize dates
286
- if (typeof eventInstance.date === 'string') {
287
- eventInstance.date = SkyDateHelper.fromStringSky(eventInstance.date);
288
- }
289
- if (typeof eventInstance.endDate === 'string') {
290
- eventInstance.endDate = SkyDateHelper.fromStringSky(eventInstance.endDate).endOf('day');
291
- }
292
- // Map shops to instance.
293
- eventInstance.shops?.forEach((shop, iShop) => {
294
- shop = this.guids.get(shop);
295
- eventInstance.shops[iShop] = shop;
296
- shop.event = eventInstance;
297
- });
298
- // Initialize event spirits.
299
- eventInstance.spirits?.forEach((eventSpirit, ies) => {
300
- eventSpirit = this.guids.get(eventSpirit);
301
- eventInstance.spirits[ies] = eventSpirit;
302
- eventSpirit.eventInstance = eventInstance;
303
- const spirit = this.guids.get(eventSpirit.spirit);
304
- if (!spirit) {
305
- console.error('Spirit not found', eventSpirit.spirit);
306
- }
307
- eventSpirit.spirit = spirit;
308
- eventSpirit.spirit.events = [];
309
- eventSpirit.spirit.events.push(eventSpirit);
310
- const tree = this.guids.get(eventSpirit.tree);
311
- if (!tree) {
312
- console.error('Tree not found', eventSpirit.tree);
313
- }
314
- eventSpirit.tree = tree;
315
- tree.eventInstanceSpirit = eventSpirit;
316
- });
317
- });
318
- });
319
- }
320
- resolveShops() {
321
- this.data.shops.items.forEach(shop => {
322
- // Map Shop to Spirit.
323
- if (shop.spirit) {
324
- const spirit = this.guids.get(shop.spirit);
325
- shop.spirit = spirit;
326
- spirit.shops ??= [];
327
- spirit.shops.push(shop);
328
- }
329
- shop.iaps?.forEach((iap, iIap) => {
330
- iap = this.guids.get(iap);
331
- shop.iaps[iIap] = iap;
332
- iap.shop = shop;
333
- iap.items?.forEach((itemGuid, iItem) => {
334
- const item = this.guids.get(itemGuid);
335
- if (!item) {
336
- console.error('Item not found', itemGuid);
337
- }
338
- iap.items[iItem] = item;
339
- item.iaps ??= [];
340
- item.iaps.push(iap);
341
- if (iap.bought) {
342
- item.unlocked = true;
343
- }
344
- });
345
- });
346
- if (shop.itemList) {
347
- const itemList = this.guids.get(shop.itemList);
348
- shop.itemList = itemList;
349
- itemList.shop = shop;
350
- }
351
- });
352
- }
353
- resolveItems() {
354
- const ids = new Set();
355
- const types = new Set();
356
- for (const type in ItemType) {
357
- types.add(type);
358
- }
359
- let shouldAbort = false;
360
- const emoteOrders = {};
361
- const emotes = [];
362
- this.data.items.items.forEach(item => {
363
- if (typeof (item.id) === 'number') {
364
- if (ids.has(item.id)) {
365
- console.error('Duplicate item ID.', item.id, item);
366
- shouldAbort = true;
367
- }
368
- else {
369
- ids.add(item.id);
370
- this.itemIds.set(item.id, item);
371
- }
372
- }
373
- else {
374
- console.error('Item ID not defined', item);
375
- shouldAbort = true;
376
- }
377
- if (!item.type || !types.has(item.type)) {
378
- console.error('Item type not defined.', item);
379
- shouldAbort = true;
380
- }
381
- if (item.type === 'Emote') {
382
- if (item.level === 1) {
383
- emoteOrders[item.name] = item.order ?? 999999;
384
- }
385
- else {
386
- emotes.push(item);
387
- }
388
- }
389
- if (!item.unlocked && item.autoUnlocked) {
390
- item.unlocked = true;
391
- }
392
- item.order ??= 999999;
393
- });
394
- emotes.forEach(emote => emote.order = emoteOrders[emote.name] ?? emote.order);
395
- if (shouldAbort) {
396
- throw new Error('Errors found while resolving items. See console for details.');
397
- }
398
- }
399
- resolveItemLists() {
400
- this.data.itemLists.items.forEach(itemList => {
401
- itemList.items.forEach(itemNode => {
402
- itemNode.itemList = itemList;
403
- if (typeof itemNode.item === 'string') {
404
- const item = this.guids.get(itemNode.item);
405
- itemNode.item = item;
406
- item.listNodes ??= [];
407
- item.listNodes.push(itemNode);
408
- }
409
- });
410
- });
411
- }
412
- resolveSeasonItems() {
413
- for (const season of this.data.seasons.items) {
414
- // Spirit items
415
- for (const spirit of season.spirits ?? []) {
416
- const items = SpiritTreeHelper.getItems(spirit.tree, true);
417
- for (const item of items) {
418
- item.season = season;
419
- }
420
- }
421
- // IAP items
422
- for (const shop of season.shops ?? []) {
423
- for (const iap of shop.iaps ?? []) {
424
- for (const item of iap.items ?? []) {
425
- item.season = season;
426
- }
427
- }
428
- }
429
- }
430
- }
431
- resolveNode(node, prev, root) {
432
- root ??= node;
433
- const getNode = (guid) => {
434
- const v = this.guids.get(guid);
435
- return this.resolveNode(v, node, root ?? node);
436
- };
437
- node.root = root;
438
- if (prev) {
439
- node.prev = prev;
440
- }
441
- if (typeof node.n === 'string') {
442
- node.n = getNode(node.n);
443
- }
444
- if (typeof node.nw === 'string') {
445
- node.nw = getNode(node.nw);
446
- }
447
- if (typeof node.ne === 'string') {
448
- node.ne = getNode(node.ne);
449
- }
450
- if (typeof node.item === 'string') {
451
- const item = this.guids.get(node.item);
452
- if (!item) {
453
- console.error('Node item not found', node, node.item);
454
- }
455
- node.item = item;
456
- item.nodes ??= [];
457
- item.nodes.push(node);
458
- }
459
- else if (node.item) {
460
- node.item.nodes ??= [];
461
- node.item.nodes.push(node);
462
- }
463
- if (node.hiddenItems?.length) {
464
- node.hiddenItems.forEach((itemGuid, i) => {
465
- if (typeof itemGuid !== 'string')
466
- return;
467
- const item = this.guids.get(itemGuid);
468
- if (!item) {
469
- console.error('Node hidden item not found', node, itemGuid);
470
- }
471
- node.hiddenItems[i] = item;
472
- item.hiddenNodes ??= [];
473
- item.hiddenNodes.push(node);
474
- // Mark hidden item as unlocked.
475
- if (node.unlocked) {
476
- item.unlocked = true;
477
- }
478
- });
479
- }
480
- return node;
481
- }
482
- }
483
- //# sourceMappingURL=parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}