- Add ESLint with typescript-eslint for unused code detection - Fix 33 unused variable/import warnings across codebase - Remove player_name from leaderboard insert (normalized design) - Add ensureUserProfile() to upsert user display_name to users table - Update leaderboard queries to join with users(display_name) - Add getDisplayName() helper for leaderboard entries 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import { writable } from 'svelte/store';
|
|
import { LevelRegistry } from '../levels/storage/levelRegistry';
|
|
import type { LevelConfig } from '../levels/config/levelConfig';
|
|
import type { CloudLevelEntry } from '../services/cloudLevelService';
|
|
|
|
interface LevelRegistryState {
|
|
isInitialized: boolean;
|
|
levels: Map<string, CloudLevelEntry>;
|
|
}
|
|
|
|
function createLevelRegistryStore() {
|
|
const registry = LevelRegistry.getInstance();
|
|
|
|
const initial: LevelRegistryState = {
|
|
isInitialized: false,
|
|
levels: new Map(),
|
|
};
|
|
|
|
const { subscribe, set: _set, update } = writable<LevelRegistryState>(initial);
|
|
|
|
// Initialize registry
|
|
(async () => {
|
|
try {
|
|
await registry.initialize();
|
|
update(state => ({
|
|
...state,
|
|
isInitialized: true,
|
|
levels: registry.getAllLevels(),
|
|
}));
|
|
} catch (error) {
|
|
console.error('[LevelRegistryStore] Failed to initialize:', error);
|
|
}
|
|
})();
|
|
|
|
return {
|
|
subscribe,
|
|
getLevel: (levelId: string): LevelConfig | null => {
|
|
return registry.getLevel(levelId);
|
|
},
|
|
getLevelEntry: (levelId: string): CloudLevelEntry | null => {
|
|
return registry.getLevelEntry(levelId);
|
|
},
|
|
refresh: async () => {
|
|
registry.reset();
|
|
await registry.initialize();
|
|
update(state => ({
|
|
...state,
|
|
levels: registry.getAllLevels(),
|
|
}));
|
|
},
|
|
};
|
|
}
|
|
|
|
export const levelRegistryStore = createLevelRegistryStore();
|