@sbugallo/pokecode 0.0.0-stage → 0.2.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.
- package/LICENSE +201 -0
- package/README.md +331 -2
- package/dist/adapters/opencode/rpc/contract.d.ts +813 -0
- package/dist/adapters/opencode/rpc/contract.d.ts.map +1 -0
- package/dist/adapters/opencode/rpc/contract.js +254 -0
- package/dist/adapters/opencode/rpc/contract.js.map +1 -0
- package/dist/adapters/opencode/server/handlers.d.ts +20 -0
- package/dist/adapters/opencode/server/handlers.d.ts.map +1 -0
- package/dist/adapters/opencode/server/handlers.js +41 -0
- package/dist/adapters/opencode/server/handlers.js.map +1 -0
- package/dist/adapters/opencode/server/plugin.d.ts +19 -0
- package/dist/adapters/opencode/server/plugin.d.ts.map +1 -0
- package/dist/adapters/opencode/server/plugin.js +101 -0
- package/dist/adapters/opencode/server/plugin.js.map +1 -0
- package/dist/adapters/opencode/server/usage-reconciliation.d.ts +24 -0
- package/dist/adapters/opencode/server/usage-reconciliation.d.ts.map +1 -0
- package/dist/adapters/opencode/server/usage-reconciliation.js +60 -0
- package/dist/adapters/opencode/server/usage-reconciliation.js.map +1 -0
- package/dist/adapters/opencode/tui/choices/cards.d.ts +32 -0
- package/dist/adapters/opencode/tui/choices/cards.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/choices/cards.jsx +114 -0
- package/dist/adapters/opencode/tui/choices/cards.jsx.map +1 -0
- package/dist/adapters/opencode/tui/choices/encounter.d.ts +13 -0
- package/dist/adapters/opencode/tui/choices/encounter.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/choices/encounter.jsx +30 -0
- package/dist/adapters/opencode/tui/choices/encounter.jsx.map +1 -0
- package/dist/adapters/opencode/tui/client.d.ts +164 -0
- package/dist/adapters/opencode/tui/client.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/client.js +30 -0
- package/dist/adapters/opencode/tui/client.js.map +1 -0
- package/dist/adapters/opencode/tui/commands/commands.d.ts +21 -0
- package/dist/adapters/opencode/tui/commands/commands.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/commands/commands.jsx +78 -0
- package/dist/adapters/opencode/tui/commands/commands.jsx.map +1 -0
- package/dist/adapters/opencode/tui/components/action-button.d.ts +12 -0
- package/dist/adapters/opencode/tui/components/action-button.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/components/action-button.jsx +13 -0
- package/dist/adapters/opencode/tui/components/action-button.jsx.map +1 -0
- package/dist/adapters/opencode/tui/components/move-list.d.ts +13 -0
- package/dist/adapters/opencode/tui/components/move-list.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/components/move-list.jsx +91 -0
- package/dist/adapters/opencode/tui/components/move-list.jsx.map +1 -0
- package/dist/adapters/opencode/tui/components/owner.d.ts +3 -0
- package/dist/adapters/opencode/tui/components/owner.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/components/owner.js +16 -0
- package/dist/adapters/opencode/tui/components/owner.js.map +1 -0
- package/dist/adapters/opencode/tui/components/sprite.d.ts +13 -0
- package/dist/adapters/opencode/tui/components/sprite.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/components/sprite.jsx +30 -0
- package/dist/adapters/opencode/tui/components/sprite.jsx.map +1 -0
- package/dist/adapters/opencode/tui/controls/native.d.ts +2 -0
- package/dist/adapters/opencode/tui/controls/native.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/controls/native.js +22 -0
- package/dist/adapters/opencode/tui/controls/native.js.map +1 -0
- package/dist/adapters/opencode/tui/dex/actions.d.ts +12 -0
- package/dist/adapters/opencode/tui/dex/actions.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/dex/actions.jsx +15 -0
- package/dist/adapters/opencode/tui/dex/actions.jsx.map +1 -0
- package/dist/adapters/opencode/tui/dex/dialog.d.ts +12 -0
- package/dist/adapters/opencode/tui/dex/dialog.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/dex/dialog.jsx +79 -0
- package/dist/adapters/opencode/tui/dex/dialog.jsx.map +1 -0
- package/dist/adapters/opencode/tui/export/actions.d.ts +14 -0
- package/dist/adapters/opencode/tui/export/actions.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/export/actions.js +25 -0
- package/dist/adapters/opencode/tui/export/actions.js.map +1 -0
- package/dist/adapters/opencode/tui/export/presentation.d.ts +16 -0
- package/dist/adapters/opencode/tui/export/presentation.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/export/presentation.js +15 -0
- package/dist/adapters/opencode/tui/export/presentation.js.map +1 -0
- package/dist/adapters/opencode/tui/pc/actions.d.ts +22 -0
- package/dist/adapters/opencode/tui/pc/actions.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/pc/actions.jsx +47 -0
- package/dist/adapters/opencode/tui/pc/actions.jsx.map +1 -0
- package/dist/adapters/opencode/tui/pc/details.d.ts +10 -0
- package/dist/adapters/opencode/tui/pc/details.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/pc/details.jsx +51 -0
- package/dist/adapters/opencode/tui/pc/details.jsx.map +1 -0
- package/dist/adapters/opencode/tui/pc/dialog.d.ts +19 -0
- package/dist/adapters/opencode/tui/pc/dialog.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/pc/dialog.jsx +263 -0
- package/dist/adapters/opencode/tui/pc/dialog.jsx.map +1 -0
- package/dist/adapters/opencode/tui/plugin.d.ts +14 -0
- package/dist/adapters/opencode/tui/plugin.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/plugin.jsx +103 -0
- package/dist/adapters/opencode/tui/plugin.jsx.map +1 -0
- package/dist/adapters/opencode/tui/sidebar/actions.d.ts +21 -0
- package/dist/adapters/opencode/tui/sidebar/actions.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/sidebar/actions.js +54 -0
- package/dist/adapters/opencode/tui/sidebar/actions.js.map +1 -0
- package/dist/adapters/opencode/tui/sidebar/register.d.ts +30 -0
- package/dist/adapters/opencode/tui/sidebar/register.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/sidebar/register.jsx +21 -0
- package/dist/adapters/opencode/tui/sidebar/register.jsx.map +1 -0
- package/dist/adapters/opencode/tui/sidebar/view.d.ts +43 -0
- package/dist/adapters/opencode/tui/sidebar/view.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/sidebar/view.jsx +166 -0
- package/dist/adapters/opencode/tui/sidebar/view.jsx.map +1 -0
- package/dist/adapters/opencode/tui/state/cleanup.d.ts +8 -0
- package/dist/adapters/opencode/tui/state/cleanup.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/state/cleanup.js +68 -0
- package/dist/adapters/opencode/tui/state/cleanup.js.map +1 -0
- package/dist/adapters/opencode/tui/state/coordinator.d.ts +122 -0
- package/dist/adapters/opencode/tui/state/coordinator.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/state/coordinator.js +40 -0
- package/dist/adapters/opencode/tui/state/coordinator.js.map +1 -0
- package/dist/adapters/opencode/tui/state/setup-failure.d.ts +2 -0
- package/dist/adapters/opencode/tui/state/setup-failure.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/state/setup-failure.js +10 -0
- package/dist/adapters/opencode/tui/state/setup-failure.js.map +1 -0
- package/dist/adapters/opencode/tui/travel/actions.d.ts +16 -0
- package/dist/adapters/opencode/tui/travel/actions.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/travel/actions.jsx +31 -0
- package/dist/adapters/opencode/tui/travel/actions.jsx.map +1 -0
- package/dist/adapters/opencode/tui/travel/dialog.d.ts +29 -0
- package/dist/adapters/opencode/tui/travel/dialog.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/travel/dialog.jsx +128 -0
- package/dist/adapters/opencode/tui/travel/dialog.jsx.map +1 -0
- package/dist/adapters/opencode/tui/travel/projection.d.ts +29 -0
- package/dist/adapters/opencode/tui/travel/projection.d.ts.map +1 -0
- package/dist/adapters/opencode/tui/travel/projection.js +44 -0
- package/dist/adapters/opencode/tui/travel/projection.js.map +1 -0
- package/dist/adapters/presentation/game-notifications.d.ts +13 -0
- package/dist/adapters/presentation/game-notifications.d.ts.map +1 -0
- package/dist/adapters/presentation/game-notifications.js +111 -0
- package/dist/adapters/presentation/game-notifications.js.map +1 -0
- package/dist/adapters/presentation/localization.d.ts +12 -0
- package/dist/adapters/presentation/localization.d.ts.map +1 -0
- package/dist/adapters/presentation/localization.js +65 -0
- package/dist/adapters/presentation/localization.js.map +1 -0
- package/dist/adapters/presentation/move-details.d.ts +11 -0
- package/dist/adapters/presentation/move-details.d.ts.map +1 -0
- package/dist/adapters/presentation/move-details.js +47 -0
- package/dist/adapters/presentation/move-details.js.map +1 -0
- package/dist/adapters/presentation/pc-copy.d.ts +31 -0
- package/dist/adapters/presentation/pc-copy.d.ts.map +1 -0
- package/dist/adapters/presentation/pc-copy.js +56 -0
- package/dist/adapters/presentation/pc-copy.js.map +1 -0
- package/dist/adapters/presentation/ui-copy.d.ts +49 -0
- package/dist/adapters/presentation/ui-copy.d.ts.map +1 -0
- package/dist/adapters/presentation/ui-copy.js +81 -0
- package/dist/adapters/presentation/ui-copy.js.map +1 -0
- package/dist/adapters/showdown/format-team.d.ts +3 -0
- package/dist/adapters/showdown/format-team.d.ts.map +1 -0
- package/dist/adapters/showdown/format-team.js +23 -0
- package/dist/adapters/showdown/format-team.js.map +1 -0
- package/dist/adapters/sprites/cache.d.ts +12 -0
- package/dist/adapters/sprites/cache.d.ts.map +1 -0
- package/dist/adapters/sprites/cache.js +43 -0
- package/dist/adapters/sprites/cache.js.map +1 -0
- package/dist/adapters/sprites/contracts.d.ts +20 -0
- package/dist/adapters/sprites/contracts.d.ts.map +1 -0
- package/dist/adapters/sprites/contracts.js +12 -0
- package/dist/adapters/sprites/contracts.js.map +1 -0
- package/dist/adapters/sqlite/game-repository.d.ts +14 -0
- package/dist/adapters/sqlite/game-repository.d.ts.map +1 -0
- package/dist/adapters/sqlite/game-repository.js +48 -0
- package/dist/adapters/sqlite/game-repository.js.map +1 -0
- package/dist/adapters/sqlite/game-transaction.d.ts +5 -0
- package/dist/adapters/sqlite/game-transaction.d.ts.map +1 -0
- package/dist/adapters/sqlite/game-transaction.js +35 -0
- package/dist/adapters/sqlite/game-transaction.js.map +1 -0
- package/dist/adapters/sqlite/initialize-database.d.ts +6 -0
- package/dist/adapters/sqlite/initialize-database.d.ts.map +1 -0
- package/dist/adapters/sqlite/initialize-database.js +15 -0
- package/dist/adapters/sqlite/initialize-database.js.map +1 -0
- package/dist/adapters/sqlite/pokemon-mapper.d.ts +23 -0
- package/dist/adapters/sqlite/pokemon-mapper.d.ts.map +1 -0
- package/dist/adapters/sqlite/pokemon-mapper.js +41 -0
- package/dist/adapters/sqlite/pokemon-mapper.js.map +1 -0
- package/dist/adapters/sqlite/queries/collection.d.ts +8 -0
- package/dist/adapters/sqlite/queries/collection.d.ts.map +1 -0
- package/dist/adapters/sqlite/queries/collection.js +58 -0
- package/dist/adapters/sqlite/queries/collection.js.map +1 -0
- package/dist/adapters/sqlite/queries/game-state.d.ts +4 -0
- package/dist/adapters/sqlite/queries/game-state.d.ts.map +1 -0
- package/dist/adapters/sqlite/queries/game-state.js +165 -0
- package/dist/adapters/sqlite/queries/game-state.js.map +1 -0
- package/dist/adapters/sqlite/schema.d.ts +4 -0
- package/dist/adapters/sqlite/schema.d.ts.map +1 -0
- package/dist/adapters/sqlite/schema.js +284 -0
- package/dist/adapters/sqlite/schema.js.map +1 -0
- package/dist/adapters/sqlite/starter-selection-store.d.ts +4 -0
- package/dist/adapters/sqlite/starter-selection-store.d.ts.map +1 -0
- package/dist/adapters/sqlite/starter-selection-store.js +55 -0
- package/dist/adapters/sqlite/starter-selection-store.js.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/choices.d.ts +7 -0
- package/dist/adapters/sqlite/transaction-stores/choices.d.ts.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/choices.js +54 -0
- package/dist/adapters/sqlite/transaction-stores/choices.js.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/encounters.d.ts +7 -0
- package/dist/adapters/sqlite/transaction-stores/encounters.d.ts.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/encounters.js +59 -0
- package/dist/adapters/sqlite/transaction-stores/encounters.js.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/exploration.d.ts +7 -0
- package/dist/adapters/sqlite/transaction-stores/exploration.d.ts.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/exploration.js +65 -0
- package/dist/adapters/sqlite/transaction-stores/exploration.js.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/pokemon.d.ts +7 -0
- package/dist/adapters/sqlite/transaction-stores/pokemon.d.ts.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/pokemon.js +160 -0
- package/dist/adapters/sqlite/transaction-stores/pokemon.js.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/queue-order.d.ts +5 -0
- package/dist/adapters/sqlite/transaction-stores/queue-order.d.ts.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/queue-order.js +15 -0
- package/dist/adapters/sqlite/transaction-stores/queue-order.js.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/receipts.d.ts +4 -0
- package/dist/adapters/sqlite/transaction-stores/receipts.d.ts.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/receipts.js +11 -0
- package/dist/adapters/sqlite/transaction-stores/receipts.js.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/trainers.d.ts +4 -0
- package/dist/adapters/sqlite/transaction-stores/trainers.d.ts.map +1 -0
- package/dist/adapters/sqlite/transaction-stores/trainers.js +11 -0
- package/dist/adapters/sqlite/transaction-stores/trainers.js.map +1 -0
- package/dist/application/contracts/game.d.ts +1412 -0
- package/dist/application/contracts/game.d.ts.map +1 -0
- package/dist/application/contracts/game.js +126 -0
- package/dist/application/contracts/game.js.map +1 -0
- package/dist/application/contracts/starter-choice.d.ts +6 -0
- package/dist/application/contracts/starter-choice.d.ts.map +1 -0
- package/dist/application/contracts/starter-choice.js +2 -0
- package/dist/application/contracts/starter-choice.js.map +1 -0
- package/dist/application/game.d.ts +34 -0
- package/dist/application/game.d.ts.map +1 -0
- package/dist/application/game.js +67 -0
- package/dist/application/game.js.map +1 -0
- package/dist/application/ports/game-transaction.d.ts +172 -0
- package/dist/application/ports/game-transaction.d.ts.map +1 -0
- package/dist/application/ports/game-transaction.js +2 -0
- package/dist/application/ports/game-transaction.js.map +1 -0
- package/dist/application/ports/game.d.ts +11 -0
- package/dist/application/ports/game.d.ts.map +1 -0
- package/dist/application/ports/game.js +2 -0
- package/dist/application/ports/game.js.map +1 -0
- package/dist/application/ports/starter-selection-store.d.ts +23 -0
- package/dist/application/ports/starter-selection-store.d.ts.map +1 -0
- package/dist/application/ports/starter-selection-store.js +2 -0
- package/dist/application/ports/starter-selection-store.js.map +1 -0
- package/dist/application/use-cases/choices.d.ts +9 -0
- package/dist/application/use-cases/choices.d.ts.map +1 -0
- package/dist/application/use-cases/choices.js +111 -0
- package/dist/application/use-cases/choices.js.map +1 -0
- package/dist/application/use-cases/choose-regional-starter.d.ts +4 -0
- package/dist/application/use-cases/choose-regional-starter.d.ts.map +1 -0
- package/dist/application/use-cases/choose-regional-starter.js +37 -0
- package/dist/application/use-cases/choose-regional-starter.js.map +1 -0
- package/dist/application/use-cases/choose-starter.d.ts +15 -0
- package/dist/application/use-cases/choose-starter.d.ts.map +1 -0
- package/dist/application/use-cases/choose-starter.js +26 -0
- package/dist/application/use-cases/choose-starter.js.map +1 -0
- package/dist/application/use-cases/encounters.d.ts +234 -0
- package/dist/application/use-cases/encounters.d.ts.map +1 -0
- package/dist/application/use-cases/encounters.js +39 -0
- package/dist/application/use-cases/encounters.js.map +1 -0
- package/dist/application/use-cases/game-command-support.d.ts +16 -0
- package/dist/application/use-cases/game-command-support.d.ts.map +1 -0
- package/dist/application/use-cases/game-command-support.js +16 -0
- package/dist/application/use-cases/game-command-support.js.map +1 -0
- package/dist/application/use-cases/game-commands.d.ts +244 -0
- package/dist/application/use-cases/game-commands.d.ts.map +1 -0
- package/dist/application/use-cases/game-commands.js +14 -0
- package/dist/application/use-cases/game-commands.js.map +1 -0
- package/dist/application/use-cases/learn-move.d.ts +22 -0
- package/dist/application/use-cases/learn-move.d.ts.map +1 -0
- package/dist/application/use-cases/learn-move.js +24 -0
- package/dist/application/use-cases/learn-move.js.map +1 -0
- package/dist/application/use-cases/party.d.ts +8 -0
- package/dist/application/use-cases/party.d.ts.map +1 -0
- package/dist/application/use-cases/party.js +44 -0
- package/dist/application/use-cases/party.js.map +1 -0
- package/dist/application/use-cases/record-usage.d.ts +10 -0
- package/dist/application/use-cases/record-usage.d.ts.map +1 -0
- package/dist/application/use-cases/record-usage.js +145 -0
- package/dist/application/use-cases/record-usage.js.map +1 -0
- package/dist/application/use-cases/resolve-progression.d.ts +9 -0
- package/dist/application/use-cases/resolve-progression.d.ts.map +1 -0
- package/dist/application/use-cases/resolve-progression.js +80 -0
- package/dist/application/use-cases/resolve-progression.js.map +1 -0
- package/dist/application/use-cases/travel.d.ts +7 -0
- package/dist/application/use-cases/travel.d.ts.map +1 -0
- package/dist/application/use-cases/travel.js +58 -0
- package/dist/application/use-cases/travel.js.map +1 -0
- package/dist/cli/command.d.ts +16 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +73 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/install.d.ts +9 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +23 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +124 -0
- package/dist/cli.js.map +1 -0
- package/dist/domain/choices/choices.d.ts +79 -0
- package/dist/domain/choices/choices.d.ts.map +1 -0
- package/dist/domain/choices/choices.js +54 -0
- package/dist/domain/choices/choices.js.map +1 -0
- package/dist/domain/content/catalog.d.ts +241 -0
- package/dist/domain/content/catalog.d.ts.map +1 -0
- package/dist/domain/content/catalog.js +286 -0
- package/dist/domain/content/catalog.js.map +1 -0
- package/dist/domain/content/catalogs/abilities-catalog.d.ts +8 -0
- package/dist/domain/content/catalogs/abilities-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/abilities-catalog.js +2054 -0
- package/dist/domain/content/catalogs/abilities-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/alola-locations-catalog.d.ts +4949 -0
- package/dist/domain/content/catalogs/alola-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/alola-locations-catalog.js +5994 -0
- package/dist/domain/content/catalogs/alola-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/encouter-methods.d.ts +2 -0
- package/dist/domain/content/catalogs/encouter-methods.d.ts.map +1 -0
- package/dist/domain/content/catalogs/encouter-methods.js +69 -0
- package/dist/domain/content/catalogs/encouter-methods.js.map +1 -0
- package/dist/domain/content/catalogs/galar-locations-catalog.d.ts +6707 -0
- package/dist/domain/content/catalogs/galar-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/galar-locations-catalog.js +8089 -0
- package/dist/domain/content/catalogs/galar-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/hoenn-locations-catalog.d.ts +2922 -0
- package/dist/domain/content/catalogs/hoenn-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/hoenn-locations-catalog.js +3541 -0
- package/dist/domain/content/catalogs/hoenn-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/johto-locations-catalog.d.ts +29 -0
- package/dist/domain/content/catalogs/johto-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/johto-locations-catalog.js +4151 -0
- package/dist/domain/content/catalogs/johto-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/kalos-locations-catalog.d.ts +29 -0
- package/dist/domain/content/catalogs/kalos-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/kalos-locations-catalog.js +4346 -0
- package/dist/domain/content/catalogs/kalos-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/kanto-locations-catalog.d.ts +2304 -0
- package/dist/domain/content/catalogs/kanto-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/kanto-locations-catalog.js +2796 -0
- package/dist/domain/content/catalogs/kanto-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/moves-catalog.d.ts +62 -0
- package/dist/domain/content/catalogs/moves-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/moves-catalog.js +12883 -0
- package/dist/domain/content/catalogs/moves-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/natures-catalog.d.ts +202 -0
- package/dist/domain/content/catalogs/natures-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/natures-catalog.js +228 -0
- package/dist/domain/content/catalogs/natures-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/paldea-locations-catalog.d.ts +14756 -0
- package/dist/domain/content/catalogs/paldea-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/paldea-locations-catalog.js +17762 -0
- package/dist/domain/content/catalogs/paldea-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/pokemon-catalog.d.ts +75 -0
- package/dist/domain/content/catalogs/pokemon-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/pokemon-catalog.js +100649 -0
- package/dist/domain/content/catalogs/pokemon-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/regional-forms-catalog.d.ts +3033 -0
- package/dist/domain/content/catalogs/regional-forms-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/regional-forms-catalog.js +4358 -0
- package/dist/domain/content/catalogs/regional-forms-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/regions-catalog.d.ts +8 -0
- package/dist/domain/content/catalogs/regions-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/regions-catalog.js +66 -0
- package/dist/domain/content/catalogs/regions-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/sinnoh-locations-catalog.d.ts +5955 -0
- package/dist/domain/content/catalogs/sinnoh-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/sinnoh-locations-catalog.js +7184 -0
- package/dist/domain/content/catalogs/sinnoh-locations-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/stats-catalog.d.ts +38 -0
- package/dist/domain/content/catalogs/stats-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/stats-catalog.js +45 -0
- package/dist/domain/content/catalogs/stats-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/types-catalog.d.ts +8 -0
- package/dist/domain/content/catalogs/types-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/types-catalog.js +129 -0
- package/dist/domain/content/catalogs/types-catalog.js.map +1 -0
- package/dist/domain/content/catalogs/unova-locations-catalog.d.ts +29 -0
- package/dist/domain/content/catalogs/unova-locations-catalog.d.ts.map +1 -0
- package/dist/domain/content/catalogs/unova-locations-catalog.js +6552 -0
- package/dist/domain/content/catalogs/unova-locations-catalog.js.map +1 -0
- package/dist/domain/content/encounter-catalog.d.ts +27 -0
- package/dist/domain/content/encounter-catalog.d.ts.map +1 -0
- package/dist/domain/content/encounter-catalog.js +75 -0
- package/dist/domain/content/encounter-catalog.js.map +1 -0
- package/dist/domain/content/names.d.ts +6 -0
- package/dist/domain/content/names.d.ts.map +1 -0
- package/dist/domain/content/names.js +7 -0
- package/dist/domain/content/names.js.map +1 -0
- package/dist/domain/content/schema.d.ts +153 -0
- package/dist/domain/content/schema.d.ts.map +1 -0
- package/dist/domain/content/schema.js +81 -0
- package/dist/domain/content/schema.js.map +1 -0
- package/dist/domain/content/sprites.d.ts +5 -0
- package/dist/domain/content/sprites.d.ts.map +1 -0
- package/dist/domain/content/sprites.js +22 -0
- package/dist/domain/content/sprites.js.map +1 -0
- package/dist/domain/encounters/encounter.d.ts +56 -0
- package/dist/domain/encounters/encounter.d.ts.map +1 -0
- package/dist/domain/encounters/encounter.js +74 -0
- package/dist/domain/encounters/encounter.js.map +1 -0
- package/dist/domain/exploration/exploration.d.ts +63 -0
- package/dist/domain/exploration/exploration.d.ts.map +1 -0
- package/dist/domain/exploration/exploration.js +48 -0
- package/dist/domain/exploration/exploration.js.map +1 -0
- package/dist/domain/party/party.d.ts +59 -0
- package/dist/domain/party/party.d.ts.map +1 -0
- package/dist/domain/party/party.js +19 -0
- package/dist/domain/party/party.js.map +1 -0
- package/dist/domain/pokemon/model.d.ts +43 -0
- package/dist/domain/pokemon/model.d.ts.map +1 -0
- package/dist/domain/pokemon/model.js +18 -0
- package/dist/domain/pokemon/model.js.map +1 -0
- package/dist/domain/pokemon/nature.d.ts +10 -0
- package/dist/domain/pokemon/nature.d.ts.map +1 -0
- package/dist/domain/pokemon/nature.js +23 -0
- package/dist/domain/pokemon/nature.js.map +1 -0
- package/dist/domain/pokemon/starter.d.ts +23 -0
- package/dist/domain/pokemon/starter.d.ts.map +1 -0
- package/dist/domain/pokemon/starter.js +59 -0
- package/dist/domain/pokemon/starter.js.map +1 -0
- package/dist/domain/pokemon/stats.d.ts +6 -0
- package/dist/domain/pokemon/stats.d.ts.map +1 -0
- package/dist/domain/pokemon/stats.js +35 -0
- package/dist/domain/pokemon/stats.js.map +1 -0
- package/dist/domain/pokemon/types.d.ts +37 -0
- package/dist/domain/pokemon/types.d.ts.map +1 -0
- package/dist/domain/pokemon/types.js +30 -0
- package/dist/domain/pokemon/types.js.map +1 -0
- package/dist/domain/progression/catalog.d.ts +34 -0
- package/dist/domain/progression/catalog.d.ts.map +1 -0
- package/dist/domain/progression/catalog.js +258 -0
- package/dist/domain/progression/catalog.js.map +1 -0
- package/dist/domain/progression/level-evolution.d.ts +13 -0
- package/dist/domain/progression/level-evolution.d.ts.map +1 -0
- package/dist/domain/progression/level-evolution.js +245 -0
- package/dist/domain/progression/level-evolution.js.map +1 -0
- package/dist/domain/progression/policies.d.ts +38 -0
- package/dist/domain/progression/policies.d.ts.map +1 -0
- package/dist/domain/progression/policies.js +78 -0
- package/dist/domain/progression/policies.js.map +1 -0
- package/dist/domain/shared/identifiers.d.ts +12 -0
- package/dist/domain/shared/identifiers.d.ts.map +1 -0
- package/dist/domain/shared/identifiers.js +7 -0
- package/dist/domain/shared/identifiers.js.map +1 -0
- package/dist/domain/shared/language.d.ts +7 -0
- package/dist/domain/shared/language.d.ts.map +1 -0
- package/dist/domain/shared/language.js +3 -0
- package/dist/domain/shared/language.js.map +1 -0
- package/dist/domain/trainer/trainer.d.ts +7 -0
- package/dist/domain/trainer/trainer.d.ts.map +1 -0
- package/dist/domain/trainer/trainer.js +2 -0
- package/dist/domain/trainer/trainer.js.map +1 -0
- package/dist/domain/usage/usage.d.ts +21 -0
- package/dist/domain/usage/usage.d.ts.map +1 -0
- package/dist/domain/usage/usage.js +23 -0
- package/dist/domain/usage/usage.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +183817 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +10 -0
- package/dist/rpc.d.ts +2 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +568 -0
- package/dist/rpc.js.map +1 -0
- package/dist/tui.d.ts +2 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +184828 -0
- package/package.json +83 -4
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { nationalDex, regionalFormIdsForSpecies } from "../../../domain/content/catalog.js";
|
|
2
|
+
import { speciesIdSchema } from "../../../domain/shared/identifiers.js";
|
|
3
|
+
import { pokemonFromRow } from "../pokemon-mapper.js";
|
|
4
|
+
export function createSqliteCollectionQueries(database) {
|
|
5
|
+
const list = (trainerId) => ({
|
|
6
|
+
pokemon: database
|
|
7
|
+
.query(`SELECT id, species_id AS speciesId, name, gender, level, experience, ability, nature, shiny,
|
|
8
|
+
hp_iv AS hpIv, attack_iv AS attackIv, defense_iv AS defenseIv,
|
|
9
|
+
special_attack_iv AS specialAttackIv, special_defense_iv AS specialDefenseIv,
|
|
10
|
+
speed_iv AS speedIv
|
|
11
|
+
FROM owned_pokemon WHERE trainer_id = ?1 ORDER BY rowid`)
|
|
12
|
+
.all(trainerId)
|
|
13
|
+
.map((row) => {
|
|
14
|
+
const moves = database
|
|
15
|
+
.query("SELECT move_id AS id, move_name AS name, position FROM pokemon_moves WHERE pokemon_id = ?1 ORDER BY position")
|
|
16
|
+
.all(row.id);
|
|
17
|
+
return pokemonFromRow(row, moves);
|
|
18
|
+
}),
|
|
19
|
+
});
|
|
20
|
+
const dex = (trainerId) => {
|
|
21
|
+
const discoveries = new Map(trainerId === null
|
|
22
|
+
? []
|
|
23
|
+
: database
|
|
24
|
+
.query("SELECT species_id AS speciesId, caught FROM pokedex_entries WHERE trainer_id = ?1")
|
|
25
|
+
.all(trainerId)
|
|
26
|
+
.map((entry) => [entry.speciesId, entry.caught]));
|
|
27
|
+
return {
|
|
28
|
+
discoveries: [...discoveries].map(([speciesId, caught]) => ({
|
|
29
|
+
speciesId: speciesIdSchema.parse(speciesId),
|
|
30
|
+
status: caught === 1 ? "caught" : "seen",
|
|
31
|
+
})),
|
|
32
|
+
pokemon: nationalDex().map((pokemon) => {
|
|
33
|
+
const statusForSpeciesAndForms = [
|
|
34
|
+
pokemon.speciesId,
|
|
35
|
+
...regionalFormIdsForSpecies(pokemon.speciesId),
|
|
36
|
+
].map((speciesId) => discoveries.get(speciesId));
|
|
37
|
+
const caught = statusForSpeciesAndForms.includes(1)
|
|
38
|
+
? 1
|
|
39
|
+
: statusForSpeciesAndForms.includes(0)
|
|
40
|
+
? 0
|
|
41
|
+
: undefined;
|
|
42
|
+
return {
|
|
43
|
+
...pokemon,
|
|
44
|
+
status: caught === 1
|
|
45
|
+
? "caught"
|
|
46
|
+
: caught === 0
|
|
47
|
+
? "seen"
|
|
48
|
+
: "unknown",
|
|
49
|
+
};
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
return { list, dex };
|
|
54
|
+
}
|
|
55
|
+
export function trainerIdForQueries(database) {
|
|
56
|
+
return (database.query("SELECT id FROM trainers LIMIT 1").get()?.id ?? null);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../../src/adapters/sqlite/queries/collection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAA;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AACvE,OAAO,EAAmB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEtE,MAAM,UAAU,6BAA6B,CAAC,QAAkB;IAC9D,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAqB,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,QAAQ;aACd,KAAK,CACJ;;;;gEAIwD,CACzD;aACA,GAAG,CAAC,SAAS,CAAC;aACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,QAAQ;iBACnB,KAAK,CAIJ,8GAA8G,CAC/G;iBACA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACd,OAAO,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACnC,CAAC,CAAC;KACL,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,CAAC,SAAwB,EAAc,EAAE;QACnD,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,SAAS,KAAK,IAAI;YAChB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,QAAQ;iBACL,KAAK,CACJ,mFAAmF,CACpF;iBACA,GAAG,CAAC,SAAS,CAAC;iBACd,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAU,CAAC,CAChE,CAAA;QACD,OAAO;YACL,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1D,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC3C,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAE,QAAkB,CAAC,CAAC,CAAE,MAAgB;aAC/D,CAAC,CAAC;YACH,OAAO,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACrC,MAAM,wBAAwB,GAAG;oBAC/B,OAAO,CAAC,SAAS;oBACjB,GAAG,yBAAyB,CAAC,OAAO,CAAC,SAAS,CAAC;iBAChD,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;gBAChD,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjD,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;wBACpC,CAAC,CAAC,CAAC;wBACH,CAAC,CAAC,SAAS,CAAA;gBACf,OAAO;oBACL,GAAG,OAAO;oBACV,MAAM,EACJ,MAAM,KAAK,CAAC;wBACV,CAAC,CAAE,QAAkB;wBACrB,CAAC,CAAC,MAAM,KAAK,CAAC;4BACZ,CAAC,CAAE,MAAgB;4BACnB,CAAC,CAAE,SAAmB;iBAC7B,CAAA;YACH,CAAC,CAAC;SACH,CAAA;IACH,CAAC,CAAA;IAED,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACpD,OAAO,CACL,QAAQ,CAAC,KAAK,CAA8B,iCAAiC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,CACjG,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
import { type GameState } from "../../../application/contracts/game.js";
|
|
3
|
+
export declare function createSqliteGameStateQuery(database: Database): (locationUnlockThreshold: number) => GameState;
|
|
4
|
+
//# sourceMappingURL=game-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-state.d.ts","sourceRoot":"","sources":["../../../../src/adapters/sqlite/queries/game-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,wCAAwC,CAAA;AAmBxF,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,QAAQ,GACjB,CAAC,uBAAuB,EAAE,MAAM,KAAK,SAAS,CAkMhD"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { gameStateSchema } from "../../../application/contracts/game.js";
|
|
2
|
+
import { locationsForRegion, regions } from "../../../domain/content/catalog.js";
|
|
3
|
+
import { speciesIdSchema } from "../../../domain/shared/identifiers.js";
|
|
4
|
+
import { pokemonFromRow } from "../pokemon-mapper.js";
|
|
5
|
+
export function createSqliteGameStateQuery(database) {
|
|
6
|
+
return (locationUnlockThreshold) => {
|
|
7
|
+
const trainer = database
|
|
8
|
+
.query("SELECT id, current_region_id AS regionId, current_location_id AS locationId FROM trainers LIMIT 1")
|
|
9
|
+
.get();
|
|
10
|
+
if (trainer === null) {
|
|
11
|
+
return gameStateSchema.parse({
|
|
12
|
+
phase: "onboarding",
|
|
13
|
+
message: "Choose a starter from any supported main-game region.",
|
|
14
|
+
region: null,
|
|
15
|
+
location: null,
|
|
16
|
+
party: [1, 2, 3, 4, 5, 6].map((position) => ({ position, pokemon: null })),
|
|
17
|
+
pendingChoices: [],
|
|
18
|
+
exploration: null,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const partyRows = database
|
|
22
|
+
.query(`SELECT
|
|
23
|
+
party_slots.position,
|
|
24
|
+
owned_pokemon.id,
|
|
25
|
+
owned_pokemon.species_id AS speciesId,
|
|
26
|
+
owned_pokemon.name,
|
|
27
|
+
owned_pokemon.gender,
|
|
28
|
+
owned_pokemon.level,
|
|
29
|
+
owned_pokemon.experience,
|
|
30
|
+
owned_pokemon.ability,
|
|
31
|
+
owned_pokemon.nature,
|
|
32
|
+
owned_pokemon.shiny,
|
|
33
|
+
owned_pokemon.hp_iv AS hpIv,
|
|
34
|
+
owned_pokemon.attack_iv AS attackIv,
|
|
35
|
+
owned_pokemon.defense_iv AS defenseIv,
|
|
36
|
+
owned_pokemon.special_attack_iv AS specialAttackIv,
|
|
37
|
+
owned_pokemon.special_defense_iv AS specialDefenseIv,
|
|
38
|
+
owned_pokemon.speed_iv AS speedIv
|
|
39
|
+
FROM party_slots
|
|
40
|
+
JOIN owned_pokemon ON owned_pokemon.id = party_slots.pokemon_id
|
|
41
|
+
WHERE party_slots.trainer_id = ?1`)
|
|
42
|
+
.all(trainer.id);
|
|
43
|
+
const pokemonByPosition = new Map(partyRows.map((row) => {
|
|
44
|
+
const moves = database
|
|
45
|
+
.query("SELECT move_id AS id, move_name AS name, position FROM pokemon_moves WHERE pokemon_id = ?1 ORDER BY position")
|
|
46
|
+
.all(row.id);
|
|
47
|
+
return [row.position, pokemonFromRow(row, moves)];
|
|
48
|
+
}));
|
|
49
|
+
const pendingChoices = database
|
|
50
|
+
.query(`SELECT id, kind, payload FROM pending_choices
|
|
51
|
+
WHERE trainer_id = ?1
|
|
52
|
+
ORDER BY
|
|
53
|
+
CASE kind WHEN 'starter' THEN 0 WHEN 'move' THEN 1 WHEN 'evolution' THEN 2 WHEN 'catch' THEN 3 WHEN 'region' THEN 4 ELSE 5 END,
|
|
54
|
+
COALESCE((
|
|
55
|
+
SELECT party_slots.position
|
|
56
|
+
FROM party_slots
|
|
57
|
+
WHERE party_slots.trainer_id = pending_choices.trainer_id
|
|
58
|
+
AND party_slots.pokemon_id = CASE
|
|
59
|
+
WHEN json_valid(pending_choices.payload)
|
|
60
|
+
THEN json_extract(pending_choices.payload, '$.pokemonId')
|
|
61
|
+
END
|
|
62
|
+
), 7),
|
|
63
|
+
created_at,
|
|
64
|
+
insertion_order,
|
|
65
|
+
rowid`)
|
|
66
|
+
.all(trainer.id);
|
|
67
|
+
const encounterRow = database
|
|
68
|
+
.query(`SELECT id, kind, species_id AS speciesId, name, level, gender, shiny,
|
|
69
|
+
sprite_url AS spriteUrl, ability FROM pending_encounters
|
|
70
|
+
WHERE trainer_id = ?1 ORDER BY created_at, insertion_order, rowid LIMIT 1`)
|
|
71
|
+
.get(trainer.id);
|
|
72
|
+
const pendingEncounterCount = database
|
|
73
|
+
.query("SELECT COUNT(*) AS count FROM pending_encounters WHERE trainer_id = ?1")
|
|
74
|
+
.get(trainer.id)?.count ?? 0;
|
|
75
|
+
const pendingEncounter = encounterRow === null
|
|
76
|
+
? null
|
|
77
|
+
: {
|
|
78
|
+
id: encounterRow.id,
|
|
79
|
+
kind: encounterRow.kind,
|
|
80
|
+
speciesId: speciesIdSchema.parse(encounterRow.speciesId),
|
|
81
|
+
name: encounterRow.name,
|
|
82
|
+
level: encounterRow.level,
|
|
83
|
+
gender: encounterRow.gender,
|
|
84
|
+
shiny: encounterRow.shiny === 1,
|
|
85
|
+
spriteUrl: encounterRow.spriteUrl,
|
|
86
|
+
caught: database
|
|
87
|
+
.query("SELECT caught FROM pokedex_entries WHERE trainer_id = ?1 AND species_id = ?2")
|
|
88
|
+
.get(trainer.id, encounterRow.speciesId)?.caught === 1,
|
|
89
|
+
};
|
|
90
|
+
const choicePokemonRows = database
|
|
91
|
+
.query(`SELECT owned_pokemon.id, owned_pokemon.species_id AS speciesId, owned_pokemon.name,
|
|
92
|
+
owned_pokemon.gender, owned_pokemon.level, owned_pokemon.experience, owned_pokemon.ability,
|
|
93
|
+
owned_pokemon.nature, owned_pokemon.shiny, owned_pokemon.hp_iv AS hpIv,
|
|
94
|
+
owned_pokemon.attack_iv AS attackIv, owned_pokemon.defense_iv AS defenseIv,
|
|
95
|
+
owned_pokemon.special_attack_iv AS specialAttackIv,
|
|
96
|
+
owned_pokemon.special_defense_iv AS specialDefenseIv, owned_pokemon.speed_iv AS speedIv,
|
|
97
|
+
MIN(pending_choices.insertion_order) AS firstChoiceOrder
|
|
98
|
+
FROM pending_choices
|
|
99
|
+
JOIN owned_pokemon ON owned_pokemon.trainer_id = pending_choices.trainer_id
|
|
100
|
+
AND owned_pokemon.id = CASE
|
|
101
|
+
WHEN json_valid(pending_choices.payload)
|
|
102
|
+
THEN json_extract(pending_choices.payload, '$.pokemonId')
|
|
103
|
+
END
|
|
104
|
+
WHERE pending_choices.trainer_id = ?1 AND pending_choices.kind IN ('move', 'evolution')
|
|
105
|
+
GROUP BY owned_pokemon.id
|
|
106
|
+
ORDER BY firstChoiceOrder, owned_pokemon.id`)
|
|
107
|
+
.all(trainer.id);
|
|
108
|
+
const choicePokemon = choicePokemonRows.map((row) => {
|
|
109
|
+
const moves = database
|
|
110
|
+
.query("SELECT move_id AS id, move_name AS name, position FROM pokemon_moves WHERE pokemon_id = ?1 ORDER BY position")
|
|
111
|
+
.all(row.id);
|
|
112
|
+
return pokemonFromRow(row, moves);
|
|
113
|
+
});
|
|
114
|
+
const unlockedLocationIds = new Set(database
|
|
115
|
+
.query("SELECT location_id AS locationId FROM location_progress WHERE trainer_id = ?1 AND unlocked = 1")
|
|
116
|
+
.all(trainer.id)
|
|
117
|
+
.map((location) => location.locationId));
|
|
118
|
+
const progress = database
|
|
119
|
+
.query("SELECT token_count AS tokenCount FROM location_unlock_progress WHERE trainer_id = ?1")
|
|
120
|
+
.get(trainer.id);
|
|
121
|
+
const regionProgress = database
|
|
122
|
+
.query("SELECT region_id AS regionId, completed FROM region_progress WHERE trainer_id = ?1")
|
|
123
|
+
.all(trainer.id);
|
|
124
|
+
const progressByRegion = new Map(regionProgress.map((region) => [region.regionId, region]));
|
|
125
|
+
return gameStateSchema.parse({
|
|
126
|
+
phase: "active",
|
|
127
|
+
message: `Your ${trainer.regionId} adventure begins at ${trainer.locationId}.`,
|
|
128
|
+
region: trainer.regionId,
|
|
129
|
+
location: trainer.locationId,
|
|
130
|
+
party: [1, 2, 3, 4, 5, 6].map((position) => ({
|
|
131
|
+
position,
|
|
132
|
+
pokemon: pokemonByPosition.get(position) ?? null,
|
|
133
|
+
})),
|
|
134
|
+
pendingChoices,
|
|
135
|
+
pendingEncounterCount,
|
|
136
|
+
choicePokemon,
|
|
137
|
+
pendingEncounter,
|
|
138
|
+
exploration: {
|
|
139
|
+
regions: regions().map((region) => ({
|
|
140
|
+
...region,
|
|
141
|
+
visited: progressByRegion.has(region.id),
|
|
142
|
+
completed: progressByRegion.get(region.id)?.completed === 1,
|
|
143
|
+
locations: progressByRegion.has(region.id)
|
|
144
|
+
? locationsForRegion(region.id).map((location) => ({
|
|
145
|
+
id: location.id,
|
|
146
|
+
name: location.name,
|
|
147
|
+
unlocked: unlockedLocationIds.has(location.id),
|
|
148
|
+
encounterless: location.encounterless,
|
|
149
|
+
}))
|
|
150
|
+
: [],
|
|
151
|
+
})),
|
|
152
|
+
locations: locationsForRegion(trainer.regionId).map((location) => ({
|
|
153
|
+
id: location.id,
|
|
154
|
+
name: location.name,
|
|
155
|
+
unlocked: unlockedLocationIds.has(location.id),
|
|
156
|
+
encounterless: location.encounterless,
|
|
157
|
+
})),
|
|
158
|
+
locationUnlockProgress: progress?.tokenCount ?? 0,
|
|
159
|
+
locationUnlockThreshold,
|
|
160
|
+
regionComplete: progressByRegion.get(trainer.regionId)?.completed === 1,
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=game-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-state.js","sourceRoot":"","sources":["../../../../src/adapters/sqlite/queries/game-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/adapters/sqlite/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA+H1C,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAgC7D"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { nextQueueOrder } from "./transaction-stores/queue-order.js";
|
|
3
|
+
const initialSchema = `
|
|
4
|
+
CREATE TABLE trainers (
|
|
5
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
6
|
+
current_region_id TEXT NOT NULL,
|
|
7
|
+
current_location_id TEXT NOT NULL,
|
|
8
|
+
created_at TEXT NOT NULL
|
|
9
|
+
);
|
|
10
|
+
CREATE TABLE owned_pokemon (
|
|
11
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
12
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
13
|
+
species_id TEXT NOT NULL,
|
|
14
|
+
name TEXT NOT NULL,
|
|
15
|
+
level INTEGER NOT NULL CHECK(level BETWEEN 1 AND 100),
|
|
16
|
+
experience REAL NOT NULL DEFAULT 0 CHECK(experience >= 0),
|
|
17
|
+
ability TEXT NOT NULL,
|
|
18
|
+
nature TEXT NOT NULL,
|
|
19
|
+
gender TEXT NOT NULL CHECK(gender IN ('male', 'female', 'genderless')),
|
|
20
|
+
shiny INTEGER NOT NULL DEFAULT 0 CHECK(shiny IN (0, 1)),
|
|
21
|
+
hp_iv INTEGER NOT NULL CHECK(hp_iv BETWEEN 0 AND 31),
|
|
22
|
+
attack_iv INTEGER NOT NULL CHECK(attack_iv BETWEEN 0 AND 31),
|
|
23
|
+
defense_iv INTEGER NOT NULL CHECK(defense_iv BETWEEN 0 AND 31),
|
|
24
|
+
special_attack_iv INTEGER NOT NULL CHECK(special_attack_iv BETWEEN 0 AND 31),
|
|
25
|
+
special_defense_iv INTEGER NOT NULL CHECK(special_defense_iv BETWEEN 0 AND 31),
|
|
26
|
+
speed_iv INTEGER NOT NULL CHECK(speed_iv BETWEEN 0 AND 31),
|
|
27
|
+
hp_ev INTEGER NOT NULL DEFAULT 0 CHECK(hp_ev = 0),
|
|
28
|
+
attack_ev INTEGER NOT NULL DEFAULT 0 CHECK(attack_ev = 0),
|
|
29
|
+
defense_ev INTEGER NOT NULL DEFAULT 0 CHECK(defense_ev = 0),
|
|
30
|
+
special_attack_ev INTEGER NOT NULL DEFAULT 0 CHECK(special_attack_ev = 0),
|
|
31
|
+
special_defense_ev INTEGER NOT NULL DEFAULT 0 CHECK(special_defense_ev = 0),
|
|
32
|
+
speed_ev INTEGER NOT NULL DEFAULT 0 CHECK(speed_ev = 0)
|
|
33
|
+
);
|
|
34
|
+
CREATE TABLE party_slots (
|
|
35
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
36
|
+
position INTEGER NOT NULL CHECK(position BETWEEN 1 AND 6),
|
|
37
|
+
pokemon_id TEXT UNIQUE REFERENCES owned_pokemon(id),
|
|
38
|
+
PRIMARY KEY(trainer_id, position)
|
|
39
|
+
);
|
|
40
|
+
CREATE TABLE pokemon_moves (
|
|
41
|
+
pokemon_id TEXT NOT NULL REFERENCES owned_pokemon(id),
|
|
42
|
+
position INTEGER NOT NULL CHECK(position BETWEEN 1 AND 4),
|
|
43
|
+
move_id TEXT NOT NULL,
|
|
44
|
+
move_name TEXT NOT NULL,
|
|
45
|
+
PRIMARY KEY(pokemon_id, position)
|
|
46
|
+
);
|
|
47
|
+
CREATE TABLE region_progress (
|
|
48
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
49
|
+
region_id TEXT NOT NULL,
|
|
50
|
+
completed INTEGER NOT NULL DEFAULT 0 CHECK(completed IN (0, 1)),
|
|
51
|
+
next_region_dismissed INTEGER NOT NULL DEFAULT 0 CHECK(next_region_dismissed IN (0, 1)),
|
|
52
|
+
PRIMARY KEY(trainer_id, region_id)
|
|
53
|
+
);
|
|
54
|
+
CREATE TABLE location_progress (
|
|
55
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
56
|
+
location_id TEXT NOT NULL,
|
|
57
|
+
unlocked INTEGER NOT NULL DEFAULT 1 CHECK(unlocked IN (0, 1)),
|
|
58
|
+
PRIMARY KEY(trainer_id, location_id)
|
|
59
|
+
);
|
|
60
|
+
CREATE TABLE location_unlock_progress (
|
|
61
|
+
trainer_id TEXT PRIMARY KEY NOT NULL REFERENCES trainers(id),
|
|
62
|
+
token_count INTEGER NOT NULL DEFAULT 0 CHECK(token_count >= 0)
|
|
63
|
+
);
|
|
64
|
+
CREATE TABLE pending_choices (
|
|
65
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
66
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
67
|
+
kind TEXT NOT NULL,
|
|
68
|
+
payload TEXT NOT NULL,
|
|
69
|
+
created_at TEXT NOT NULL,
|
|
70
|
+
insertion_order INTEGER NOT NULL DEFAULT 0
|
|
71
|
+
);
|
|
72
|
+
CREATE TABLE token_receipts (
|
|
73
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
74
|
+
trainer_id TEXT REFERENCES trainers(id),
|
|
75
|
+
session_id TEXT NOT NULL,
|
|
76
|
+
message_id TEXT NOT NULL,
|
|
77
|
+
token_count INTEGER NOT NULL CHECK(token_count >= 0),
|
|
78
|
+
created_at TEXT NOT NULL,
|
|
79
|
+
UNIQUE(session_id, message_id)
|
|
80
|
+
);
|
|
81
|
+
CREATE TABLE encounter_progress (
|
|
82
|
+
trainer_id TEXT PRIMARY KEY NOT NULL REFERENCES trainers(id),
|
|
83
|
+
token_count INTEGER NOT NULL DEFAULT 0 CHECK(token_count >= 0),
|
|
84
|
+
threshold INTEGER NOT NULL CHECK(threshold > 0)
|
|
85
|
+
);
|
|
86
|
+
CREATE TABLE pending_encounters (
|
|
87
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
88
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
89
|
+
kind TEXT NOT NULL CHECK(kind IN ('ordinary', 'special')),
|
|
90
|
+
species_id TEXT NOT NULL,
|
|
91
|
+
name TEXT NOT NULL,
|
|
92
|
+
level INTEGER NOT NULL CHECK(level BETWEEN 1 AND 100),
|
|
93
|
+
sprite_url TEXT NOT NULL,
|
|
94
|
+
ability TEXT NOT NULL,
|
|
95
|
+
gender TEXT NOT NULL CHECK(gender IN ('male', 'female', 'genderless')),
|
|
96
|
+
shiny INTEGER NOT NULL DEFAULT 0 CHECK(shiny IN (0, 1)),
|
|
97
|
+
special_encounter_id TEXT,
|
|
98
|
+
created_at TEXT NOT NULL,
|
|
99
|
+
insertion_order INTEGER NOT NULL DEFAULT 0
|
|
100
|
+
);
|
|
101
|
+
CREATE TABLE queue_order_sequences (
|
|
102
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
103
|
+
queue_kind TEXT NOT NULL CHECK(queue_kind IN ('choice', 'encounter')),
|
|
104
|
+
last_order INTEGER NOT NULL DEFAULT 0 CHECK(last_order >= 0),
|
|
105
|
+
PRIMARY KEY(trainer_id, queue_kind)
|
|
106
|
+
);
|
|
107
|
+
CREATE INDEX pending_choices_trainer_order
|
|
108
|
+
ON pending_choices(trainer_id, insertion_order);
|
|
109
|
+
CREATE INDEX pending_encounters_trainer_order
|
|
110
|
+
ON pending_encounters(trainer_id, insertion_order);
|
|
111
|
+
CREATE TABLE pokedex_entries (
|
|
112
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
113
|
+
species_id TEXT NOT NULL,
|
|
114
|
+
seen INTEGER NOT NULL DEFAULT 1 CHECK(seen IN (0, 1)),
|
|
115
|
+
caught INTEGER NOT NULL DEFAULT 0 CHECK(caught IN (0, 1)),
|
|
116
|
+
PRIMARY KEY(trainer_id, species_id)
|
|
117
|
+
);
|
|
118
|
+
CREATE TABLE triggered_special_encounters (
|
|
119
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
120
|
+
special_encounter_id TEXT NOT NULL,
|
|
121
|
+
triggered_at TEXT NOT NULL,
|
|
122
|
+
PRIMARY KEY(trainer_id, special_encounter_id)
|
|
123
|
+
);
|
|
124
|
+
`;
|
|
125
|
+
/** Initialize the current schema or atomically upgrade released saves. */
|
|
126
|
+
export function initializeGameSchema(database) {
|
|
127
|
+
const initialize = database.transaction(() => {
|
|
128
|
+
const version = database
|
|
129
|
+
.query("PRAGMA user_version")
|
|
130
|
+
.get()?.user_version;
|
|
131
|
+
if (version === 3)
|
|
132
|
+
return;
|
|
133
|
+
if (version === 1 || version === 2) {
|
|
134
|
+
if (version === 1)
|
|
135
|
+
migrateVersionOne(database);
|
|
136
|
+
migrateVersionTwo(database);
|
|
137
|
+
database.run("PRAGMA user_version = 3");
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const existing = database
|
|
141
|
+
.query("SELECT name FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%' LIMIT 1")
|
|
142
|
+
.get();
|
|
143
|
+
if (version !== 0 || existing !== null) {
|
|
144
|
+
throw new Error("Unsupported PokéCode save schema. No save data was changed. " +
|
|
145
|
+
"Development saves are not upgraded automatically. Stop OpenCode, back up the save directory, " +
|
|
146
|
+
"then move game.sqlite and any game.sqlite-wal/game.sqlite-shm files out of it to start a new game. " +
|
|
147
|
+
"If this save was created by a newer version, use that version instead.");
|
|
148
|
+
}
|
|
149
|
+
database.run(initialSchema);
|
|
150
|
+
database.run("PRAGMA user_version = 3");
|
|
151
|
+
});
|
|
152
|
+
initialize.immediate();
|
|
153
|
+
}
|
|
154
|
+
/** The first region already received its onboarding starter; later regions did not. */
|
|
155
|
+
function migrateVersionTwo(database) {
|
|
156
|
+
const missedRegions = database
|
|
157
|
+
.query(`SELECT progress.trainer_id AS trainerId, progress.region_id AS region,
|
|
158
|
+
trainers.created_at AS createdAt
|
|
159
|
+
FROM region_progress AS progress
|
|
160
|
+
JOIN trainers ON trainers.id = progress.trainer_id
|
|
161
|
+
WHERE progress.rowid <> (
|
|
162
|
+
SELECT MIN(first.rowid) FROM region_progress AS first
|
|
163
|
+
WHERE first.trainer_id = progress.trainer_id
|
|
164
|
+
)
|
|
165
|
+
ORDER BY progress.rowid`)
|
|
166
|
+
.all();
|
|
167
|
+
for (const region of missedRegions) {
|
|
168
|
+
database
|
|
169
|
+
.query(`INSERT INTO pending_choices (id, trainer_id, kind, payload, created_at, insertion_order)
|
|
170
|
+
VALUES (?1, ?2, 'starter', ?3, ?4, ?5)`)
|
|
171
|
+
.run(randomUUID(), region.trainerId, JSON.stringify({ region: region.region }), region.createdAt, nextQueueOrder(database, region.trainerId, "choice"));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function migrateVersionOne(database) {
|
|
175
|
+
const catchChoices = database
|
|
176
|
+
.query("SELECT id, trainer_id AS trainerId, payload FROM pending_choices WHERE kind = 'catch' ORDER BY rowid")
|
|
177
|
+
.all();
|
|
178
|
+
const encounters = database
|
|
179
|
+
.query("SELECT id, trainer_id AS trainerId FROM pending_encounters ORDER BY rowid")
|
|
180
|
+
.all();
|
|
181
|
+
const choicesByTrainer = groupByTrainer(catchChoices);
|
|
182
|
+
const encountersByTrainer = groupByTrainer(encounters);
|
|
183
|
+
const trainerIds = new Set([...choicesByTrainer.keys(), ...encountersByTrainer.keys()]);
|
|
184
|
+
const encounterIdByChoice = new Map();
|
|
185
|
+
for (const choice of catchChoices) {
|
|
186
|
+
let payload;
|
|
187
|
+
try {
|
|
188
|
+
payload = JSON.parse(choice.payload);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
throw invalidCatchPairing(choice.trainerId, "a catch choice contains invalid JSON");
|
|
192
|
+
}
|
|
193
|
+
if (payload === null ||
|
|
194
|
+
typeof payload !== "object" ||
|
|
195
|
+
Array.isArray(payload) ||
|
|
196
|
+
Object.keys(payload).length !== 0) {
|
|
197
|
+
throw invalidCatchPairing(choice.trainerId, "a catch choice does not have the legacy empty payload");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
for (const trainerId of trainerIds) {
|
|
201
|
+
const trainerChoices = choicesByTrainer.get(trainerId) ?? [];
|
|
202
|
+
const trainerEncounters = encountersByTrainer.get(trainerId) ?? [];
|
|
203
|
+
if (trainerChoices.length !== trainerEncounters.length || trainerChoices.length > 1) {
|
|
204
|
+
throw invalidCatchPairing(trainerId, `found ${trainerChoices.length} catch choices and ${trainerEncounters.length} pending encounters`);
|
|
205
|
+
}
|
|
206
|
+
const choice = trainerChoices[0];
|
|
207
|
+
const encounter = trainerEncounters[0];
|
|
208
|
+
if (choice !== undefined && encounter !== undefined) {
|
|
209
|
+
if (!isUuid(encounter.id)) {
|
|
210
|
+
throw invalidCatchPairing(trainerId, `pending encounter ID ${encounter.id} is not a UUID`);
|
|
211
|
+
}
|
|
212
|
+
encounterIdByChoice.set(choice.id, encounter.id);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
database.run("ALTER TABLE pending_choices ADD COLUMN insertion_order INTEGER NOT NULL DEFAULT 0");
|
|
216
|
+
database.run("UPDATE pending_choices SET insertion_order = rowid");
|
|
217
|
+
const updateCatchPayload = database.query("UPDATE pending_choices SET payload = ?1 WHERE id = ?2 AND kind = 'catch'");
|
|
218
|
+
for (const [choiceId, encounterId] of encounterIdByChoice) {
|
|
219
|
+
updateCatchPayload.run(JSON.stringify({ encounterId }), choiceId);
|
|
220
|
+
}
|
|
221
|
+
database.run(`
|
|
222
|
+
CREATE TABLE pending_encounters_v2 (
|
|
223
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
224
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
225
|
+
kind TEXT NOT NULL CHECK(kind IN ('ordinary', 'special')),
|
|
226
|
+
species_id TEXT NOT NULL,
|
|
227
|
+
name TEXT NOT NULL,
|
|
228
|
+
level INTEGER NOT NULL CHECK(level BETWEEN 1 AND 100),
|
|
229
|
+
sprite_url TEXT NOT NULL,
|
|
230
|
+
ability TEXT NOT NULL,
|
|
231
|
+
gender TEXT NOT NULL CHECK(gender IN ('male', 'female', 'genderless')),
|
|
232
|
+
shiny INTEGER NOT NULL DEFAULT 0 CHECK(shiny IN (0, 1)),
|
|
233
|
+
special_encounter_id TEXT,
|
|
234
|
+
created_at TEXT NOT NULL,
|
|
235
|
+
insertion_order INTEGER NOT NULL DEFAULT 0
|
|
236
|
+
)
|
|
237
|
+
`);
|
|
238
|
+
database.run(`
|
|
239
|
+
INSERT INTO pending_encounters_v2 (
|
|
240
|
+
id, trainer_id, kind, species_id, name, level, sprite_url, ability, gender,
|
|
241
|
+
shiny, special_encounter_id, created_at, insertion_order
|
|
242
|
+
)
|
|
243
|
+
SELECT id, trainer_id, kind, species_id, name, level, sprite_url, ability, gender,
|
|
244
|
+
shiny, special_encounter_id, created_at, rowid
|
|
245
|
+
FROM pending_encounters ORDER BY rowid
|
|
246
|
+
`);
|
|
247
|
+
database.run("DROP TABLE pending_encounters");
|
|
248
|
+
database.run("ALTER TABLE pending_encounters_v2 RENAME TO pending_encounters");
|
|
249
|
+
database.run(`
|
|
250
|
+
CREATE TABLE queue_order_sequences (
|
|
251
|
+
trainer_id TEXT NOT NULL REFERENCES trainers(id),
|
|
252
|
+
queue_kind TEXT NOT NULL CHECK(queue_kind IN ('choice', 'encounter')),
|
|
253
|
+
last_order INTEGER NOT NULL DEFAULT 0 CHECK(last_order >= 0),
|
|
254
|
+
PRIMARY KEY(trainer_id, queue_kind)
|
|
255
|
+
)
|
|
256
|
+
`);
|
|
257
|
+
database.run(`
|
|
258
|
+
INSERT INTO queue_order_sequences (trainer_id, queue_kind, last_order)
|
|
259
|
+
SELECT trainer_id, 'choice', MAX(insertion_order) FROM pending_choices GROUP BY trainer_id
|
|
260
|
+
`);
|
|
261
|
+
database.run(`
|
|
262
|
+
INSERT INTO queue_order_sequences (trainer_id, queue_kind, last_order)
|
|
263
|
+
SELECT trainer_id, 'encounter', MAX(insertion_order) FROM pending_encounters GROUP BY trainer_id
|
|
264
|
+
`);
|
|
265
|
+
database.run("CREATE INDEX pending_choices_trainer_order ON pending_choices(trainer_id, insertion_order)");
|
|
266
|
+
database.run("CREATE INDEX pending_encounters_trainer_order ON pending_encounters(trainer_id, insertion_order)");
|
|
267
|
+
}
|
|
268
|
+
function groupByTrainer(rows) {
|
|
269
|
+
const grouped = new Map();
|
|
270
|
+
for (const row of rows) {
|
|
271
|
+
const group = grouped.get(row.trainerId) ?? [];
|
|
272
|
+
group.push(row);
|
|
273
|
+
grouped.set(row.trainerId, group);
|
|
274
|
+
}
|
|
275
|
+
return grouped;
|
|
276
|
+
}
|
|
277
|
+
function isUuid(value) {
|
|
278
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
|
|
279
|
+
}
|
|
280
|
+
function invalidCatchPairing(trainerId, reason) {
|
|
281
|
+
return new Error(`Cannot migrate PokéCode save: invalid pending catch/encounter pairing for trainer ${trainerId} (${reason}). ` +
|
|
282
|
+
"Back up the save and inspect pending_choices and pending_encounters before retrying; no migration changes were committed.");
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/adapters/sqlite/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
import type { StarterGameState, StarterSelectionStore } from "../../application/ports/starter-selection-store.js";
|
|
3
|
+
export declare function createSqliteStarterSelectionStore<TState extends StarterGameState>(database: Database, readState: () => TState): StarterSelectionStore<TState>;
|
|
4
|
+
//# sourceMappingURL=starter-selection-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter-selection-store.d.ts","sourceRoot":"","sources":["../../../src/adapters/sqlite/starter-selection-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAEV,gBAAgB,EAEhB,qBAAqB,EACtB,MAAM,oDAAoD,CAAA;AAG3D,wBAAgB,iCAAiC,CAAC,MAAM,SAAS,gBAAgB,EAC/E,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,MAAM,GACtB,qBAAqB,CAAC,MAAM,CAAC,CA0H/B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { pokemonIdSchema, trainerIdSchema } from "../../domain/shared/identifiers.js";
|
|
2
|
+
export function createSqliteStarterSelectionStore(database, readState) {
|
|
3
|
+
const createStarterAtomically = (selection, createIds) => {
|
|
4
|
+
const select = database.transaction(() => {
|
|
5
|
+
const existing = database
|
|
6
|
+
.query("SELECT id FROM trainers LIMIT 1")
|
|
7
|
+
.get();
|
|
8
|
+
if (existing !== null)
|
|
9
|
+
return false;
|
|
10
|
+
const ids = createIds();
|
|
11
|
+
const trainerId = trainerIdSchema.parse(ids.trainerId);
|
|
12
|
+
const pokemonId = pokemonIdSchema.parse(ids.pokemonId);
|
|
13
|
+
database
|
|
14
|
+
.query("INSERT INTO trainers (id, current_region_id, current_location_id, created_at) VALUES (?1, ?2, ?3, ?4)")
|
|
15
|
+
.run(trainerId, selection.regionId, selection.locationId, selection.selectedAt);
|
|
16
|
+
database
|
|
17
|
+
.query("INSERT INTO region_progress (trainer_id, region_id) VALUES (?1, ?2)")
|
|
18
|
+
.run(trainerId, selection.regionId);
|
|
19
|
+
database
|
|
20
|
+
.query("INSERT INTO location_progress (trainer_id, location_id) VALUES (?1, ?2)")
|
|
21
|
+
.run(trainerId, selection.locationId);
|
|
22
|
+
database
|
|
23
|
+
.query("INSERT INTO location_unlock_progress (trainer_id, token_count) VALUES (?1, 0)")
|
|
24
|
+
.run(trainerId);
|
|
25
|
+
database
|
|
26
|
+
.query(`INSERT INTO owned_pokemon (
|
|
27
|
+
id, trainer_id, species_id, name, level, experience, ability, nature, gender, shiny,
|
|
28
|
+
hp_iv, attack_iv, defense_iv, special_attack_iv, special_defense_iv, speed_iv,
|
|
29
|
+
hp_ev, attack_ev, defense_ev, special_attack_ev, special_defense_ev, speed_ev
|
|
30
|
+
) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16,
|
|
31
|
+
?17, ?18, ?19, ?20, ?21, ?22)`)
|
|
32
|
+
.run(pokemonId, trainerId, selection.speciesId, selection.name, selection.level, selection.experience, selection.ability, selection.nature, selection.gender, Number(selection.shiny), selection.ivs.hp, selection.ivs.attack, selection.ivs.defense, selection.ivs.specialAttack, selection.ivs.specialDefense, selection.ivs.speed, selection.evs.hp, selection.evs.attack, selection.evs.defense, selection.evs.specialAttack, selection.evs.specialDefense, selection.evs.speed);
|
|
33
|
+
database
|
|
34
|
+
.query("INSERT INTO party_slots (trainer_id, position, pokemon_id) VALUES (?1, ?2, ?3)")
|
|
35
|
+
.run(trainerId, 1, pokemonId);
|
|
36
|
+
database
|
|
37
|
+
.query("INSERT INTO pokedex_entries (trainer_id, species_id, seen, caught) VALUES (?1, ?2, 1, 1)")
|
|
38
|
+
.run(trainerId, selection.speciesId);
|
|
39
|
+
for (const position of [2, 3, 4, 5, 6]) {
|
|
40
|
+
database
|
|
41
|
+
.query("INSERT INTO party_slots (trainer_id, position, pokemon_id) VALUES (?1, ?2, NULL)")
|
|
42
|
+
.run(trainerId, position);
|
|
43
|
+
}
|
|
44
|
+
for (const [index, move] of selection.moves.entries()) {
|
|
45
|
+
database
|
|
46
|
+
.query("INSERT INTO pokemon_moves (pokemon_id, position, move_id, move_name) VALUES (?1, ?2, ?3, ?4)")
|
|
47
|
+
.run(pokemonId, index + 1, move.id, move.name);
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
});
|
|
51
|
+
return select.immediate();
|
|
52
|
+
};
|
|
53
|
+
return { readState, createStarterAtomically };
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=starter-selection-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter-selection-store.js","sourceRoot":"","sources":["../../../src/adapters/sqlite/starter-selection-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
import type { CommandTransactionStores, UsageTransactionStores } from "../../../application/ports/game-transaction.js";
|
|
3
|
+
export declare function createChoiceTransactionStore(database: Database): {
|
|
4
|
+
readonly usage: UsageTransactionStores["choices"];
|
|
5
|
+
readonly commands: CommandTransactionStores["choices"];
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=choices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choices.d.ts","sourceRoot":"","sources":["../../../../src/adapters/sqlite/transaction-stores/choices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,gDAAgD,CAAA;AAIvD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,GAAG;IAChE,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAA;CACvD,CAqEA"}
|