@nice2dev/game-engine 1.0.22 → 1.0.24

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.
@@ -0,0 +1,567 @@
1
+ /**
2
+ * @file GameSaveSystem.ts
3
+ * @description Serialization with schema migration for game saves
4
+ * PRO-1.5: Runtime & Performance
5
+ *
6
+ * Features:
7
+ * - Save/load game state
8
+ * - Schema versioning
9
+ * - Migration system
10
+ * - Multiple save slots
11
+ * - Cloud save support
12
+ * - Compression
13
+ * - Encryption
14
+ * - Auto-save
15
+ */
16
+ // ============================================================
17
+ // Default Configuration
18
+ // ============================================================
19
+ const DEFAULT_SAVE_CONFIG = {
20
+ format: 'json',
21
+ backend: 'local',
22
+ compress: true,
23
+ encrypt: false,
24
+ maxSlots: 10,
25
+ autoSaveInterval: 60000, // 1 minute
26
+ autoSaveSlot: 0,
27
+ cloudSync: false,
28
+ schemaVersion: 1,
29
+ };
30
+ class LocalStorageAdapter {
31
+ constructor(prefix = 'game_save_') {
32
+ this.prefix = prefix;
33
+ }
34
+ async save(key, data) {
35
+ try {
36
+ localStorage.setItem(this.prefix + key, data);
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ async load(key) {
44
+ return localStorage.getItem(this.prefix + key);
45
+ }
46
+ async delete(key) {
47
+ localStorage.removeItem(this.prefix + key);
48
+ return true;
49
+ }
50
+ async exists(key) {
51
+ return localStorage.getItem(this.prefix + key) !== null;
52
+ }
53
+ async list(prefix) {
54
+ const keys = [];
55
+ for (let i = 0; i < localStorage.length; i++) {
56
+ const key = localStorage.key(i);
57
+ if (key?.startsWith(this.prefix + prefix)) {
58
+ keys.push(key.substring(this.prefix.length));
59
+ }
60
+ }
61
+ return keys;
62
+ }
63
+ async clear() {
64
+ const keysToRemove = [];
65
+ for (let i = 0; i < localStorage.length; i++) {
66
+ const key = localStorage.key(i);
67
+ if (key?.startsWith(this.prefix)) {
68
+ keysToRemove.push(key);
69
+ }
70
+ }
71
+ keysToRemove.forEach((key) => localStorage.removeItem(key));
72
+ }
73
+ }
74
+ class IndexedDBAdapter {
75
+ constructor(dbName = 'game_saves', storeName = 'saves') {
76
+ this.db = null;
77
+ this.dbName = dbName;
78
+ this.storeName = storeName;
79
+ }
80
+ async getDB() {
81
+ if (this.db) {
82
+ return this.db;
83
+ }
84
+ return new Promise((resolve, reject) => {
85
+ const request = indexedDB.open(this.dbName, 1);
86
+ request.onerror = () => reject(request.error);
87
+ request.onsuccess = () => {
88
+ this.db = request.result;
89
+ resolve(this.db);
90
+ };
91
+ request.onupgradeneeded = () => {
92
+ const db = request.result;
93
+ if (!db.objectStoreNames.contains(this.storeName)) {
94
+ db.createObjectStore(this.storeName, { keyPath: 'key' });
95
+ }
96
+ };
97
+ });
98
+ }
99
+ async save(key, data) {
100
+ try {
101
+ const db = await this.getDB();
102
+ return new Promise((resolve) => {
103
+ const transaction = db.transaction(this.storeName, 'readwrite');
104
+ const store = transaction.objectStore(this.storeName);
105
+ const request = store.put({ key, data });
106
+ request.onsuccess = () => resolve(true);
107
+ request.onerror = () => resolve(false);
108
+ });
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ }
114
+ async load(key) {
115
+ try {
116
+ const db = await this.getDB();
117
+ return new Promise((resolve) => {
118
+ const transaction = db.transaction(this.storeName, 'readonly');
119
+ const store = transaction.objectStore(this.storeName);
120
+ const request = store.get(key);
121
+ request.onsuccess = () => resolve(request.result?.data ?? null);
122
+ request.onerror = () => resolve(null);
123
+ });
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ async delete(key) {
130
+ try {
131
+ const db = await this.getDB();
132
+ return new Promise((resolve) => {
133
+ const transaction = db.transaction(this.storeName, 'readwrite');
134
+ const store = transaction.objectStore(this.storeName);
135
+ const request = store.delete(key);
136
+ request.onsuccess = () => resolve(true);
137
+ request.onerror = () => resolve(false);
138
+ });
139
+ }
140
+ catch {
141
+ return false;
142
+ }
143
+ }
144
+ async exists(key) {
145
+ return (await this.load(key)) !== null;
146
+ }
147
+ async list(_prefix) {
148
+ try {
149
+ const db = await this.getDB();
150
+ return new Promise((resolve) => {
151
+ const transaction = db.transaction(this.storeName, 'readonly');
152
+ const store = transaction.objectStore(this.storeName);
153
+ const request = store.getAllKeys();
154
+ request.onsuccess = () => resolve(request.result);
155
+ request.onerror = () => resolve([]);
156
+ });
157
+ }
158
+ catch {
159
+ return [];
160
+ }
161
+ }
162
+ async clear() {
163
+ try {
164
+ const db = await this.getDB();
165
+ await new Promise((resolve) => {
166
+ const transaction = db.transaction(this.storeName, 'readwrite');
167
+ const store = transaction.objectStore(this.storeName);
168
+ const request = store.clear();
169
+ request.onsuccess = () => resolve();
170
+ request.onerror = () => resolve();
171
+ });
172
+ }
173
+ catch {
174
+ // Ignore
175
+ }
176
+ }
177
+ }
178
+ // ============================================================
179
+ // Save System
180
+ // ============================================================
181
+ class GameSaveSystem {
182
+ constructor(config) {
183
+ this.config = { ...DEFAULT_SAVE_CONFIG };
184
+ this.migrations = [];
185
+ this.autoSaveTimer = null;
186
+ if (config) {
187
+ this.config = { ...this.config, ...config };
188
+ }
189
+ this.adapter = this.createAdapter(this.config.backend);
190
+ }
191
+ createAdapter(backend) {
192
+ switch (backend) {
193
+ case 'indexeddb':
194
+ return new IndexedDBAdapter();
195
+ case 'local':
196
+ default:
197
+ return new LocalStorageAdapter();
198
+ }
199
+ }
200
+ // ─── Migration System ──────────────────────────────────
201
+ registerMigration(migration) {
202
+ this.migrations.push(migration);
203
+ this.migrations.sort((a, b) => a.fromVersion - b.fromVersion);
204
+ }
205
+ async migrate(data, fromVersion) {
206
+ let currentVersion = fromVersion;
207
+ let migrationsApplied = 0;
208
+ try {
209
+ while (currentVersion < this.config.schemaVersion) {
210
+ const migration = this.migrations.find((m) => m.fromVersion === currentVersion);
211
+ if (!migration) {
212
+ return {
213
+ success: false,
214
+ fromVersion,
215
+ toVersion: currentVersion,
216
+ migrationsApplied,
217
+ error: `No migration found from version ${currentVersion}`,
218
+ };
219
+ }
220
+ data = migration.migrate(data);
221
+ currentVersion = migration.toVersion;
222
+ migrationsApplied++;
223
+ }
224
+ return {
225
+ success: true,
226
+ fromVersion,
227
+ toVersion: currentVersion,
228
+ migrationsApplied,
229
+ };
230
+ }
231
+ catch (error) {
232
+ return {
233
+ success: false,
234
+ fromVersion,
235
+ toVersion: currentVersion,
236
+ migrationsApplied,
237
+ error: error.message,
238
+ };
239
+ }
240
+ }
241
+ // ─── Save Operations ───────────────────────────────────
242
+ async save(slot, name) {
243
+ if (slot < 0 || slot >= this.config.maxSlots) {
244
+ return { success: false, slot, error: 'Invalid slot number' };
245
+ }
246
+ this.onSaveStarted?.(slot);
247
+ try {
248
+ const state = this.getGameState?.() ?? this.createEmptyState();
249
+ const existingMeta = await this.getSlotMetadata(slot);
250
+ const metadata = {
251
+ id: existingMeta?.id ?? this.generateId(),
252
+ name: name ?? existingMeta?.name ?? `Save ${slot + 1}`,
253
+ slot,
254
+ version: (existingMeta?.version ?? 0) + 1,
255
+ schemaVersion: this.config.schemaVersion,
256
+ createdAt: existingMeta?.createdAt ?? Date.now(),
257
+ modifiedAt: Date.now(),
258
+ playTime: existingMeta?.playTime ?? 0,
259
+ tags: existingMeta?.tags ?? [],
260
+ checksum: '',
261
+ size: 0,
262
+ compressed: this.config.compress,
263
+ encrypted: this.config.encrypt,
264
+ cloudSynced: false,
265
+ };
266
+ const saveData = { metadata, state };
267
+ let serialized = this.serialize(saveData);
268
+ if (this.config.compress) {
269
+ serialized = await this.compress(serialized);
270
+ }
271
+ if (this.config.encrypt && this.config.encryptionKey) {
272
+ serialized = await this.encrypt(serialized, this.config.encryptionKey);
273
+ }
274
+ metadata.checksum = await this.calculateChecksum(serialized);
275
+ metadata.size = serialized.length;
276
+ // Save data
277
+ const dataKey = `slot_${slot}_data`;
278
+ const metaKey = `slot_${slot}_meta`;
279
+ const dataSuccess = await this.adapter.save(dataKey, serialized);
280
+ const metaSuccess = await this.adapter.save(metaKey, JSON.stringify(metadata));
281
+ if (!dataSuccess || !metaSuccess) {
282
+ return { success: false, slot, error: 'Failed to write save data' };
283
+ }
284
+ const result = { success: true, slot, metadata };
285
+ this.onSaveCompleted?.(result);
286
+ return result;
287
+ }
288
+ catch (error) {
289
+ const result = {
290
+ success: false,
291
+ slot,
292
+ error: error.message,
293
+ };
294
+ this.onSaveCompleted?.(result);
295
+ return result;
296
+ }
297
+ }
298
+ async load(slot) {
299
+ if (slot < 0 || slot >= this.config.maxSlots) {
300
+ return { success: false, error: 'Invalid slot number', migrated: false };
301
+ }
302
+ this.onLoadStarted?.(slot);
303
+ try {
304
+ const dataKey = `slot_${slot}_data`;
305
+ const metaKey = `slot_${slot}_meta`;
306
+ const metaStr = await this.adapter.load(metaKey);
307
+ if (!metaStr) {
308
+ return { success: false, error: 'Save slot is empty', migrated: false };
309
+ }
310
+ const metadata = JSON.parse(metaStr);
311
+ let serialized = await this.adapter.load(dataKey);
312
+ if (!serialized) {
313
+ return { success: false, error: 'Save data not found', migrated: false };
314
+ }
315
+ // Verify checksum
316
+ const checksum = await this.calculateChecksum(serialized);
317
+ if (checksum !== metadata.checksum) {
318
+ return { success: false, error: 'Save data corrupted', migrated: false };
319
+ }
320
+ if (metadata.encrypted && this.config.encryptionKey) {
321
+ serialized = await this.decrypt(serialized, this.config.encryptionKey);
322
+ }
323
+ if (metadata.compressed) {
324
+ serialized = await this.decompress(serialized);
325
+ }
326
+ const saveData = this.deserialize(serialized);
327
+ const state = saveData.state;
328
+ let migrated = false;
329
+ let migratedFrom;
330
+ // Check for migration
331
+ if (metadata.schemaVersion < this.config.schemaVersion) {
332
+ this.onMigrationNeeded?.(metadata.schemaVersion, this.config.schemaVersion);
333
+ const migrationResult = await this.migrate(state, metadata.schemaVersion);
334
+ if (!migrationResult.success) {
335
+ return {
336
+ success: false,
337
+ error: `Migration failed: ${migrationResult.error}`,
338
+ migrated: false,
339
+ };
340
+ }
341
+ migrated = true;
342
+ migratedFrom = metadata.schemaVersion;
343
+ }
344
+ // Apply state
345
+ this.setGameState?.(state);
346
+ const result = {
347
+ success: true,
348
+ data: state,
349
+ metadata,
350
+ migrated,
351
+ migratedFrom,
352
+ };
353
+ this.onLoadCompleted?.(result);
354
+ return result;
355
+ }
356
+ catch (error) {
357
+ const result = {
358
+ success: false,
359
+ error: error.message,
360
+ migrated: false,
361
+ };
362
+ this.onLoadCompleted?.(result);
363
+ return result;
364
+ }
365
+ }
366
+ async delete(slot) {
367
+ if (slot < 0 || slot >= this.config.maxSlots) {
368
+ return false;
369
+ }
370
+ const dataKey = `slot_${slot}_data`;
371
+ const metaKey = `slot_${slot}_meta`;
372
+ await this.adapter.delete(dataKey);
373
+ await this.adapter.delete(metaKey);
374
+ return true;
375
+ }
376
+ // ─── Slot Management ───────────────────────────────────
377
+ async getSlots() {
378
+ const slots = [];
379
+ for (let i = 0; i < this.config.maxSlots; i++) {
380
+ const metadata = await this.getSlotMetadata(i);
381
+ slots.push({
382
+ index: i,
383
+ isEmpty: !metadata,
384
+ metadata: metadata ?? undefined,
385
+ });
386
+ }
387
+ return slots;
388
+ }
389
+ async getSlotMetadata(slot) {
390
+ const metaKey = `slot_${slot}_meta`;
391
+ const metaStr = await this.adapter.load(metaKey);
392
+ if (!metaStr) {
393
+ return null;
394
+ }
395
+ try {
396
+ return JSON.parse(metaStr);
397
+ }
398
+ catch {
399
+ return null;
400
+ }
401
+ }
402
+ async hasSlot(slot) {
403
+ return (await this.getSlotMetadata(slot)) !== null;
404
+ }
405
+ async getNextEmptySlot() {
406
+ for (let i = 0; i < this.config.maxSlots; i++) {
407
+ if (!(await this.hasSlot(i))) {
408
+ return i;
409
+ }
410
+ }
411
+ return -1;
412
+ }
413
+ // ─── Auto-save ─────────────────────────────────────────
414
+ startAutoSave() {
415
+ if (this.autoSaveTimer) {
416
+ return;
417
+ }
418
+ this.autoSaveTimer = setInterval(async () => {
419
+ const result = await this.save(this.config.autoSaveSlot, 'Auto Save');
420
+ this.onAutoSave?.(result);
421
+ }, this.config.autoSaveInterval);
422
+ }
423
+ stopAutoSave() {
424
+ if (this.autoSaveTimer) {
425
+ clearInterval(this.autoSaveTimer);
426
+ this.autoSaveTimer = null;
427
+ }
428
+ }
429
+ async triggerAutoSave() {
430
+ const result = await this.save(this.config.autoSaveSlot, 'Auto Save');
431
+ this.onAutoSave?.(result);
432
+ return result;
433
+ }
434
+ // ─── Quick Save/Load ───────────────────────────────────
435
+ async quickSave() {
436
+ return this.save(0, 'Quick Save');
437
+ }
438
+ async quickLoad() {
439
+ return this.load(0);
440
+ }
441
+ // ─── Export/Import ─────────────────────────────────────
442
+ async exportSave(slot) {
443
+ const dataKey = `slot_${slot}_data`;
444
+ const metaKey = `slot_${slot}_meta`;
445
+ const data = await this.adapter.load(dataKey);
446
+ const meta = await this.adapter.load(metaKey);
447
+ if (!data || !meta) {
448
+ return null;
449
+ }
450
+ return btoa(JSON.stringify({ data, meta }));
451
+ }
452
+ async importSave(slot, exportedData) {
453
+ try {
454
+ const { data, meta } = JSON.parse(atob(exportedData));
455
+ const dataKey = `slot_${slot}_data`;
456
+ const metaKey = `slot_${slot}_meta`;
457
+ // Update metadata with new slot
458
+ const metadata = JSON.parse(meta);
459
+ metadata.slot = slot;
460
+ await this.adapter.save(dataKey, data);
461
+ await this.adapter.save(metaKey, JSON.stringify(metadata));
462
+ return true;
463
+ }
464
+ catch {
465
+ return false;
466
+ }
467
+ }
468
+ // ─── Utilities ─────────────────────────────────────────
469
+ serialize(data) {
470
+ return JSON.stringify(data);
471
+ }
472
+ deserialize(str) {
473
+ return JSON.parse(str);
474
+ }
475
+ async compress(data) {
476
+ // Simple compression using TextEncoder and base64
477
+ // In production, use a proper compression library like pako
478
+ const encoder = new TextEncoder();
479
+ const bytes = encoder.encode(data);
480
+ return btoa(String.fromCharCode(...bytes));
481
+ }
482
+ async decompress(data) {
483
+ const bytes = atob(data)
484
+ .split('')
485
+ .map((c) => c.charCodeAt(0));
486
+ const decoder = new TextDecoder();
487
+ return decoder.decode(new Uint8Array(bytes));
488
+ }
489
+ async encrypt(data, _key) {
490
+ // Placeholder - in production use Web Crypto API
491
+ return btoa(data);
492
+ }
493
+ async decrypt(data, _key) {
494
+ // Placeholder - in production use Web Crypto API
495
+ return atob(data);
496
+ }
497
+ async calculateChecksum(data) {
498
+ const encoder = new TextEncoder();
499
+ const bytes = encoder.encode(data);
500
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);
501
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
502
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
503
+ }
504
+ generateId() {
505
+ return `save_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
506
+ }
507
+ createEmptyState() {
508
+ return {
509
+ player: {},
510
+ world: {},
511
+ inventory: {},
512
+ quests: {},
513
+ settings: {},
514
+ custom: {},
515
+ };
516
+ }
517
+ // ─── Configuration ─────────────────────────────────────
518
+ getConfig() {
519
+ return { ...this.config };
520
+ }
521
+ setConfig(config) {
522
+ this.config = { ...this.config, ...config };
523
+ if (config.backend) {
524
+ this.adapter = this.createAdapter(config.backend);
525
+ }
526
+ }
527
+ setAdapter(adapter) {
528
+ this.adapter = adapter;
529
+ }
530
+ // ─── Callbacks ─────────────────────────────────────────
531
+ setOnSaveStarted(callback) {
532
+ this.onSaveStarted = callback;
533
+ }
534
+ setOnSaveCompleted(callback) {
535
+ this.onSaveCompleted = callback;
536
+ }
537
+ setOnLoadStarted(callback) {
538
+ this.onLoadStarted = callback;
539
+ }
540
+ setOnLoadCompleted(callback) {
541
+ this.onLoadCompleted = callback;
542
+ }
543
+ setOnAutoSave(callback) {
544
+ this.onAutoSave = callback;
545
+ }
546
+ setOnMigrationNeeded(callback) {
547
+ this.onMigrationNeeded = callback;
548
+ }
549
+ setGetGameState(callback) {
550
+ this.getGameState = callback;
551
+ }
552
+ setSetGameState(callback) {
553
+ this.setGameState = callback;
554
+ }
555
+ }
556
+ // ============================================================
557
+ // Factory Functions
558
+ // ============================================================
559
+ function createSaveSystem(config) {
560
+ return new GameSaveSystem(config);
561
+ }
562
+ function createMigration(fromVersion, toVersion, migrate, description = '') {
563
+ return { fromVersion, toVersion, migrate, description };
564
+ }
565
+
566
+ export { DEFAULT_SAVE_CONFIG, GameSaveSystem, IndexedDBAdapter, LocalStorageAdapter, createMigration, createSaveSystem };
567
+ //# sourceMappingURL=GameSaveSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GameSaveSystem.js","sources":["../../../src/performance/GameSaveSystem.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice2dev/game-engine",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
4
4
  "description": "Nice2Dev Game Engine — No-code game engine and editor for React",
5
5
  "author": "NiceToDev <contact@nicetodev.com>",
6
6
  "license": "SEE LICENSE IN LICENSE",