@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.
Files changed (463) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +331 -2
  3. package/dist/adapters/opencode/rpc/contract.d.ts +813 -0
  4. package/dist/adapters/opencode/rpc/contract.d.ts.map +1 -0
  5. package/dist/adapters/opencode/rpc/contract.js +254 -0
  6. package/dist/adapters/opencode/rpc/contract.js.map +1 -0
  7. package/dist/adapters/opencode/server/handlers.d.ts +20 -0
  8. package/dist/adapters/opencode/server/handlers.d.ts.map +1 -0
  9. package/dist/adapters/opencode/server/handlers.js +41 -0
  10. package/dist/adapters/opencode/server/handlers.js.map +1 -0
  11. package/dist/adapters/opencode/server/plugin.d.ts +19 -0
  12. package/dist/adapters/opencode/server/plugin.d.ts.map +1 -0
  13. package/dist/adapters/opencode/server/plugin.js +101 -0
  14. package/dist/adapters/opencode/server/plugin.js.map +1 -0
  15. package/dist/adapters/opencode/server/usage-reconciliation.d.ts +24 -0
  16. package/dist/adapters/opencode/server/usage-reconciliation.d.ts.map +1 -0
  17. package/dist/adapters/opencode/server/usage-reconciliation.js +60 -0
  18. package/dist/adapters/opencode/server/usage-reconciliation.js.map +1 -0
  19. package/dist/adapters/opencode/tui/choices/cards.d.ts +32 -0
  20. package/dist/adapters/opencode/tui/choices/cards.d.ts.map +1 -0
  21. package/dist/adapters/opencode/tui/choices/cards.jsx +114 -0
  22. package/dist/adapters/opencode/tui/choices/cards.jsx.map +1 -0
  23. package/dist/adapters/opencode/tui/choices/encounter.d.ts +13 -0
  24. package/dist/adapters/opencode/tui/choices/encounter.d.ts.map +1 -0
  25. package/dist/adapters/opencode/tui/choices/encounter.jsx +30 -0
  26. package/dist/adapters/opencode/tui/choices/encounter.jsx.map +1 -0
  27. package/dist/adapters/opencode/tui/client.d.ts +164 -0
  28. package/dist/adapters/opencode/tui/client.d.ts.map +1 -0
  29. package/dist/adapters/opencode/tui/client.js +30 -0
  30. package/dist/adapters/opencode/tui/client.js.map +1 -0
  31. package/dist/adapters/opencode/tui/commands/commands.d.ts +21 -0
  32. package/dist/adapters/opencode/tui/commands/commands.d.ts.map +1 -0
  33. package/dist/adapters/opencode/tui/commands/commands.jsx +78 -0
  34. package/dist/adapters/opencode/tui/commands/commands.jsx.map +1 -0
  35. package/dist/adapters/opencode/tui/components/action-button.d.ts +12 -0
  36. package/dist/adapters/opencode/tui/components/action-button.d.ts.map +1 -0
  37. package/dist/adapters/opencode/tui/components/action-button.jsx +13 -0
  38. package/dist/adapters/opencode/tui/components/action-button.jsx.map +1 -0
  39. package/dist/adapters/opencode/tui/components/move-list.d.ts +13 -0
  40. package/dist/adapters/opencode/tui/components/move-list.d.ts.map +1 -0
  41. package/dist/adapters/opencode/tui/components/move-list.jsx +91 -0
  42. package/dist/adapters/opencode/tui/components/move-list.jsx.map +1 -0
  43. package/dist/adapters/opencode/tui/components/owner.d.ts +3 -0
  44. package/dist/adapters/opencode/tui/components/owner.d.ts.map +1 -0
  45. package/dist/adapters/opencode/tui/components/owner.js +16 -0
  46. package/dist/adapters/opencode/tui/components/owner.js.map +1 -0
  47. package/dist/adapters/opencode/tui/components/sprite.d.ts +13 -0
  48. package/dist/adapters/opencode/tui/components/sprite.d.ts.map +1 -0
  49. package/dist/adapters/opencode/tui/components/sprite.jsx +30 -0
  50. package/dist/adapters/opencode/tui/components/sprite.jsx.map +1 -0
  51. package/dist/adapters/opencode/tui/controls/native.d.ts +2 -0
  52. package/dist/adapters/opencode/tui/controls/native.d.ts.map +1 -0
  53. package/dist/adapters/opencode/tui/controls/native.js +22 -0
  54. package/dist/adapters/opencode/tui/controls/native.js.map +1 -0
  55. package/dist/adapters/opencode/tui/dex/actions.d.ts +12 -0
  56. package/dist/adapters/opencode/tui/dex/actions.d.ts.map +1 -0
  57. package/dist/adapters/opencode/tui/dex/actions.jsx +15 -0
  58. package/dist/adapters/opencode/tui/dex/actions.jsx.map +1 -0
  59. package/dist/adapters/opencode/tui/dex/dialog.d.ts +12 -0
  60. package/dist/adapters/opencode/tui/dex/dialog.d.ts.map +1 -0
  61. package/dist/adapters/opencode/tui/dex/dialog.jsx +79 -0
  62. package/dist/adapters/opencode/tui/dex/dialog.jsx.map +1 -0
  63. package/dist/adapters/opencode/tui/export/actions.d.ts +14 -0
  64. package/dist/adapters/opencode/tui/export/actions.d.ts.map +1 -0
  65. package/dist/adapters/opencode/tui/export/actions.js +25 -0
  66. package/dist/adapters/opencode/tui/export/actions.js.map +1 -0
  67. package/dist/adapters/opencode/tui/export/presentation.d.ts +16 -0
  68. package/dist/adapters/opencode/tui/export/presentation.d.ts.map +1 -0
  69. package/dist/adapters/opencode/tui/export/presentation.js +15 -0
  70. package/dist/adapters/opencode/tui/export/presentation.js.map +1 -0
  71. package/dist/adapters/opencode/tui/pc/actions.d.ts +22 -0
  72. package/dist/adapters/opencode/tui/pc/actions.d.ts.map +1 -0
  73. package/dist/adapters/opencode/tui/pc/actions.jsx +47 -0
  74. package/dist/adapters/opencode/tui/pc/actions.jsx.map +1 -0
  75. package/dist/adapters/opencode/tui/pc/details.d.ts +10 -0
  76. package/dist/adapters/opencode/tui/pc/details.d.ts.map +1 -0
  77. package/dist/adapters/opencode/tui/pc/details.jsx +51 -0
  78. package/dist/adapters/opencode/tui/pc/details.jsx.map +1 -0
  79. package/dist/adapters/opencode/tui/pc/dialog.d.ts +19 -0
  80. package/dist/adapters/opencode/tui/pc/dialog.d.ts.map +1 -0
  81. package/dist/adapters/opencode/tui/pc/dialog.jsx +263 -0
  82. package/dist/adapters/opencode/tui/pc/dialog.jsx.map +1 -0
  83. package/dist/adapters/opencode/tui/plugin.d.ts +14 -0
  84. package/dist/adapters/opencode/tui/plugin.d.ts.map +1 -0
  85. package/dist/adapters/opencode/tui/plugin.jsx +103 -0
  86. package/dist/adapters/opencode/tui/plugin.jsx.map +1 -0
  87. package/dist/adapters/opencode/tui/sidebar/actions.d.ts +21 -0
  88. package/dist/adapters/opencode/tui/sidebar/actions.d.ts.map +1 -0
  89. package/dist/adapters/opencode/tui/sidebar/actions.js +54 -0
  90. package/dist/adapters/opencode/tui/sidebar/actions.js.map +1 -0
  91. package/dist/adapters/opencode/tui/sidebar/register.d.ts +30 -0
  92. package/dist/adapters/opencode/tui/sidebar/register.d.ts.map +1 -0
  93. package/dist/adapters/opencode/tui/sidebar/register.jsx +21 -0
  94. package/dist/adapters/opencode/tui/sidebar/register.jsx.map +1 -0
  95. package/dist/adapters/opencode/tui/sidebar/view.d.ts +43 -0
  96. package/dist/adapters/opencode/tui/sidebar/view.d.ts.map +1 -0
  97. package/dist/adapters/opencode/tui/sidebar/view.jsx +166 -0
  98. package/dist/adapters/opencode/tui/sidebar/view.jsx.map +1 -0
  99. package/dist/adapters/opencode/tui/state/cleanup.d.ts +8 -0
  100. package/dist/adapters/opencode/tui/state/cleanup.d.ts.map +1 -0
  101. package/dist/adapters/opencode/tui/state/cleanup.js +68 -0
  102. package/dist/adapters/opencode/tui/state/cleanup.js.map +1 -0
  103. package/dist/adapters/opencode/tui/state/coordinator.d.ts +122 -0
  104. package/dist/adapters/opencode/tui/state/coordinator.d.ts.map +1 -0
  105. package/dist/adapters/opencode/tui/state/coordinator.js +40 -0
  106. package/dist/adapters/opencode/tui/state/coordinator.js.map +1 -0
  107. package/dist/adapters/opencode/tui/state/setup-failure.d.ts +2 -0
  108. package/dist/adapters/opencode/tui/state/setup-failure.d.ts.map +1 -0
  109. package/dist/adapters/opencode/tui/state/setup-failure.js +10 -0
  110. package/dist/adapters/opencode/tui/state/setup-failure.js.map +1 -0
  111. package/dist/adapters/opencode/tui/travel/actions.d.ts +16 -0
  112. package/dist/adapters/opencode/tui/travel/actions.d.ts.map +1 -0
  113. package/dist/adapters/opencode/tui/travel/actions.jsx +31 -0
  114. package/dist/adapters/opencode/tui/travel/actions.jsx.map +1 -0
  115. package/dist/adapters/opencode/tui/travel/dialog.d.ts +29 -0
  116. package/dist/adapters/opencode/tui/travel/dialog.d.ts.map +1 -0
  117. package/dist/adapters/opencode/tui/travel/dialog.jsx +128 -0
  118. package/dist/adapters/opencode/tui/travel/dialog.jsx.map +1 -0
  119. package/dist/adapters/opencode/tui/travel/projection.d.ts +29 -0
  120. package/dist/adapters/opencode/tui/travel/projection.d.ts.map +1 -0
  121. package/dist/adapters/opencode/tui/travel/projection.js +44 -0
  122. package/dist/adapters/opencode/tui/travel/projection.js.map +1 -0
  123. package/dist/adapters/presentation/game-notifications.d.ts +13 -0
  124. package/dist/adapters/presentation/game-notifications.d.ts.map +1 -0
  125. package/dist/adapters/presentation/game-notifications.js +111 -0
  126. package/dist/adapters/presentation/game-notifications.js.map +1 -0
  127. package/dist/adapters/presentation/localization.d.ts +12 -0
  128. package/dist/adapters/presentation/localization.d.ts.map +1 -0
  129. package/dist/adapters/presentation/localization.js +65 -0
  130. package/dist/adapters/presentation/localization.js.map +1 -0
  131. package/dist/adapters/presentation/move-details.d.ts +11 -0
  132. package/dist/adapters/presentation/move-details.d.ts.map +1 -0
  133. package/dist/adapters/presentation/move-details.js +47 -0
  134. package/dist/adapters/presentation/move-details.js.map +1 -0
  135. package/dist/adapters/presentation/pc-copy.d.ts +31 -0
  136. package/dist/adapters/presentation/pc-copy.d.ts.map +1 -0
  137. package/dist/adapters/presentation/pc-copy.js +56 -0
  138. package/dist/adapters/presentation/pc-copy.js.map +1 -0
  139. package/dist/adapters/presentation/ui-copy.d.ts +49 -0
  140. package/dist/adapters/presentation/ui-copy.d.ts.map +1 -0
  141. package/dist/adapters/presentation/ui-copy.js +81 -0
  142. package/dist/adapters/presentation/ui-copy.js.map +1 -0
  143. package/dist/adapters/showdown/format-team.d.ts +3 -0
  144. package/dist/adapters/showdown/format-team.d.ts.map +1 -0
  145. package/dist/adapters/showdown/format-team.js +23 -0
  146. package/dist/adapters/showdown/format-team.js.map +1 -0
  147. package/dist/adapters/sprites/cache.d.ts +12 -0
  148. package/dist/adapters/sprites/cache.d.ts.map +1 -0
  149. package/dist/adapters/sprites/cache.js +43 -0
  150. package/dist/adapters/sprites/cache.js.map +1 -0
  151. package/dist/adapters/sprites/contracts.d.ts +20 -0
  152. package/dist/adapters/sprites/contracts.d.ts.map +1 -0
  153. package/dist/adapters/sprites/contracts.js +12 -0
  154. package/dist/adapters/sprites/contracts.js.map +1 -0
  155. package/dist/adapters/sqlite/game-repository.d.ts +14 -0
  156. package/dist/adapters/sqlite/game-repository.d.ts.map +1 -0
  157. package/dist/adapters/sqlite/game-repository.js +48 -0
  158. package/dist/adapters/sqlite/game-repository.js.map +1 -0
  159. package/dist/adapters/sqlite/game-transaction.d.ts +5 -0
  160. package/dist/adapters/sqlite/game-transaction.d.ts.map +1 -0
  161. package/dist/adapters/sqlite/game-transaction.js +35 -0
  162. package/dist/adapters/sqlite/game-transaction.js.map +1 -0
  163. package/dist/adapters/sqlite/initialize-database.d.ts +6 -0
  164. package/dist/adapters/sqlite/initialize-database.d.ts.map +1 -0
  165. package/dist/adapters/sqlite/initialize-database.js +15 -0
  166. package/dist/adapters/sqlite/initialize-database.js.map +1 -0
  167. package/dist/adapters/sqlite/pokemon-mapper.d.ts +23 -0
  168. package/dist/adapters/sqlite/pokemon-mapper.d.ts.map +1 -0
  169. package/dist/adapters/sqlite/pokemon-mapper.js +41 -0
  170. package/dist/adapters/sqlite/pokemon-mapper.js.map +1 -0
  171. package/dist/adapters/sqlite/queries/collection.d.ts +8 -0
  172. package/dist/adapters/sqlite/queries/collection.d.ts.map +1 -0
  173. package/dist/adapters/sqlite/queries/collection.js +58 -0
  174. package/dist/adapters/sqlite/queries/collection.js.map +1 -0
  175. package/dist/adapters/sqlite/queries/game-state.d.ts +4 -0
  176. package/dist/adapters/sqlite/queries/game-state.d.ts.map +1 -0
  177. package/dist/adapters/sqlite/queries/game-state.js +165 -0
  178. package/dist/adapters/sqlite/queries/game-state.js.map +1 -0
  179. package/dist/adapters/sqlite/schema.d.ts +4 -0
  180. package/dist/adapters/sqlite/schema.d.ts.map +1 -0
  181. package/dist/adapters/sqlite/schema.js +284 -0
  182. package/dist/adapters/sqlite/schema.js.map +1 -0
  183. package/dist/adapters/sqlite/starter-selection-store.d.ts +4 -0
  184. package/dist/adapters/sqlite/starter-selection-store.d.ts.map +1 -0
  185. package/dist/adapters/sqlite/starter-selection-store.js +55 -0
  186. package/dist/adapters/sqlite/starter-selection-store.js.map +1 -0
  187. package/dist/adapters/sqlite/transaction-stores/choices.d.ts +7 -0
  188. package/dist/adapters/sqlite/transaction-stores/choices.d.ts.map +1 -0
  189. package/dist/adapters/sqlite/transaction-stores/choices.js +54 -0
  190. package/dist/adapters/sqlite/transaction-stores/choices.js.map +1 -0
  191. package/dist/adapters/sqlite/transaction-stores/encounters.d.ts +7 -0
  192. package/dist/adapters/sqlite/transaction-stores/encounters.d.ts.map +1 -0
  193. package/dist/adapters/sqlite/transaction-stores/encounters.js +59 -0
  194. package/dist/adapters/sqlite/transaction-stores/encounters.js.map +1 -0
  195. package/dist/adapters/sqlite/transaction-stores/exploration.d.ts +7 -0
  196. package/dist/adapters/sqlite/transaction-stores/exploration.d.ts.map +1 -0
  197. package/dist/adapters/sqlite/transaction-stores/exploration.js +65 -0
  198. package/dist/adapters/sqlite/transaction-stores/exploration.js.map +1 -0
  199. package/dist/adapters/sqlite/transaction-stores/pokemon.d.ts +7 -0
  200. package/dist/adapters/sqlite/transaction-stores/pokemon.d.ts.map +1 -0
  201. package/dist/adapters/sqlite/transaction-stores/pokemon.js +160 -0
  202. package/dist/adapters/sqlite/transaction-stores/pokemon.js.map +1 -0
  203. package/dist/adapters/sqlite/transaction-stores/queue-order.d.ts +5 -0
  204. package/dist/adapters/sqlite/transaction-stores/queue-order.d.ts.map +1 -0
  205. package/dist/adapters/sqlite/transaction-stores/queue-order.js +15 -0
  206. package/dist/adapters/sqlite/transaction-stores/queue-order.js.map +1 -0
  207. package/dist/adapters/sqlite/transaction-stores/receipts.d.ts +4 -0
  208. package/dist/adapters/sqlite/transaction-stores/receipts.d.ts.map +1 -0
  209. package/dist/adapters/sqlite/transaction-stores/receipts.js +11 -0
  210. package/dist/adapters/sqlite/transaction-stores/receipts.js.map +1 -0
  211. package/dist/adapters/sqlite/transaction-stores/trainers.d.ts +4 -0
  212. package/dist/adapters/sqlite/transaction-stores/trainers.d.ts.map +1 -0
  213. package/dist/adapters/sqlite/transaction-stores/trainers.js +11 -0
  214. package/dist/adapters/sqlite/transaction-stores/trainers.js.map +1 -0
  215. package/dist/application/contracts/game.d.ts +1412 -0
  216. package/dist/application/contracts/game.d.ts.map +1 -0
  217. package/dist/application/contracts/game.js +126 -0
  218. package/dist/application/contracts/game.js.map +1 -0
  219. package/dist/application/contracts/starter-choice.d.ts +6 -0
  220. package/dist/application/contracts/starter-choice.d.ts.map +1 -0
  221. package/dist/application/contracts/starter-choice.js +2 -0
  222. package/dist/application/contracts/starter-choice.js.map +1 -0
  223. package/dist/application/game.d.ts +34 -0
  224. package/dist/application/game.d.ts.map +1 -0
  225. package/dist/application/game.js +67 -0
  226. package/dist/application/game.js.map +1 -0
  227. package/dist/application/ports/game-transaction.d.ts +172 -0
  228. package/dist/application/ports/game-transaction.d.ts.map +1 -0
  229. package/dist/application/ports/game-transaction.js +2 -0
  230. package/dist/application/ports/game-transaction.js.map +1 -0
  231. package/dist/application/ports/game.d.ts +11 -0
  232. package/dist/application/ports/game.d.ts.map +1 -0
  233. package/dist/application/ports/game.js +2 -0
  234. package/dist/application/ports/game.js.map +1 -0
  235. package/dist/application/ports/starter-selection-store.d.ts +23 -0
  236. package/dist/application/ports/starter-selection-store.d.ts.map +1 -0
  237. package/dist/application/ports/starter-selection-store.js +2 -0
  238. package/dist/application/ports/starter-selection-store.js.map +1 -0
  239. package/dist/application/use-cases/choices.d.ts +9 -0
  240. package/dist/application/use-cases/choices.d.ts.map +1 -0
  241. package/dist/application/use-cases/choices.js +111 -0
  242. package/dist/application/use-cases/choices.js.map +1 -0
  243. package/dist/application/use-cases/choose-regional-starter.d.ts +4 -0
  244. package/dist/application/use-cases/choose-regional-starter.d.ts.map +1 -0
  245. package/dist/application/use-cases/choose-regional-starter.js +37 -0
  246. package/dist/application/use-cases/choose-regional-starter.js.map +1 -0
  247. package/dist/application/use-cases/choose-starter.d.ts +15 -0
  248. package/dist/application/use-cases/choose-starter.d.ts.map +1 -0
  249. package/dist/application/use-cases/choose-starter.js +26 -0
  250. package/dist/application/use-cases/choose-starter.js.map +1 -0
  251. package/dist/application/use-cases/encounters.d.ts +234 -0
  252. package/dist/application/use-cases/encounters.d.ts.map +1 -0
  253. package/dist/application/use-cases/encounters.js +39 -0
  254. package/dist/application/use-cases/encounters.js.map +1 -0
  255. package/dist/application/use-cases/game-command-support.d.ts +16 -0
  256. package/dist/application/use-cases/game-command-support.d.ts.map +1 -0
  257. package/dist/application/use-cases/game-command-support.js +16 -0
  258. package/dist/application/use-cases/game-command-support.js.map +1 -0
  259. package/dist/application/use-cases/game-commands.d.ts +244 -0
  260. package/dist/application/use-cases/game-commands.d.ts.map +1 -0
  261. package/dist/application/use-cases/game-commands.js +14 -0
  262. package/dist/application/use-cases/game-commands.js.map +1 -0
  263. package/dist/application/use-cases/learn-move.d.ts +22 -0
  264. package/dist/application/use-cases/learn-move.d.ts.map +1 -0
  265. package/dist/application/use-cases/learn-move.js +24 -0
  266. package/dist/application/use-cases/learn-move.js.map +1 -0
  267. package/dist/application/use-cases/party.d.ts +8 -0
  268. package/dist/application/use-cases/party.d.ts.map +1 -0
  269. package/dist/application/use-cases/party.js +44 -0
  270. package/dist/application/use-cases/party.js.map +1 -0
  271. package/dist/application/use-cases/record-usage.d.ts +10 -0
  272. package/dist/application/use-cases/record-usage.d.ts.map +1 -0
  273. package/dist/application/use-cases/record-usage.js +145 -0
  274. package/dist/application/use-cases/record-usage.js.map +1 -0
  275. package/dist/application/use-cases/resolve-progression.d.ts +9 -0
  276. package/dist/application/use-cases/resolve-progression.d.ts.map +1 -0
  277. package/dist/application/use-cases/resolve-progression.js +80 -0
  278. package/dist/application/use-cases/resolve-progression.js.map +1 -0
  279. package/dist/application/use-cases/travel.d.ts +7 -0
  280. package/dist/application/use-cases/travel.d.ts.map +1 -0
  281. package/dist/application/use-cases/travel.js +58 -0
  282. package/dist/application/use-cases/travel.js.map +1 -0
  283. package/dist/cli/command.d.ts +16 -0
  284. package/dist/cli/command.d.ts.map +1 -0
  285. package/dist/cli/command.js +73 -0
  286. package/dist/cli/command.js.map +1 -0
  287. package/dist/cli/install.d.ts +9 -0
  288. package/dist/cli/install.d.ts.map +1 -0
  289. package/dist/cli/install.js +23 -0
  290. package/dist/cli/install.js.map +1 -0
  291. package/dist/cli.d.ts +3 -0
  292. package/dist/cli.d.ts.map +1 -0
  293. package/dist/cli.js +124 -0
  294. package/dist/cli.js.map +1 -0
  295. package/dist/domain/choices/choices.d.ts +79 -0
  296. package/dist/domain/choices/choices.d.ts.map +1 -0
  297. package/dist/domain/choices/choices.js +54 -0
  298. package/dist/domain/choices/choices.js.map +1 -0
  299. package/dist/domain/content/catalog.d.ts +241 -0
  300. package/dist/domain/content/catalog.d.ts.map +1 -0
  301. package/dist/domain/content/catalog.js +286 -0
  302. package/dist/domain/content/catalog.js.map +1 -0
  303. package/dist/domain/content/catalogs/abilities-catalog.d.ts +8 -0
  304. package/dist/domain/content/catalogs/abilities-catalog.d.ts.map +1 -0
  305. package/dist/domain/content/catalogs/abilities-catalog.js +2054 -0
  306. package/dist/domain/content/catalogs/abilities-catalog.js.map +1 -0
  307. package/dist/domain/content/catalogs/alola-locations-catalog.d.ts +4949 -0
  308. package/dist/domain/content/catalogs/alola-locations-catalog.d.ts.map +1 -0
  309. package/dist/domain/content/catalogs/alola-locations-catalog.js +5994 -0
  310. package/dist/domain/content/catalogs/alola-locations-catalog.js.map +1 -0
  311. package/dist/domain/content/catalogs/encouter-methods.d.ts +2 -0
  312. package/dist/domain/content/catalogs/encouter-methods.d.ts.map +1 -0
  313. package/dist/domain/content/catalogs/encouter-methods.js +69 -0
  314. package/dist/domain/content/catalogs/encouter-methods.js.map +1 -0
  315. package/dist/domain/content/catalogs/galar-locations-catalog.d.ts +6707 -0
  316. package/dist/domain/content/catalogs/galar-locations-catalog.d.ts.map +1 -0
  317. package/dist/domain/content/catalogs/galar-locations-catalog.js +8089 -0
  318. package/dist/domain/content/catalogs/galar-locations-catalog.js.map +1 -0
  319. package/dist/domain/content/catalogs/hoenn-locations-catalog.d.ts +2922 -0
  320. package/dist/domain/content/catalogs/hoenn-locations-catalog.d.ts.map +1 -0
  321. package/dist/domain/content/catalogs/hoenn-locations-catalog.js +3541 -0
  322. package/dist/domain/content/catalogs/hoenn-locations-catalog.js.map +1 -0
  323. package/dist/domain/content/catalogs/johto-locations-catalog.d.ts +29 -0
  324. package/dist/domain/content/catalogs/johto-locations-catalog.d.ts.map +1 -0
  325. package/dist/domain/content/catalogs/johto-locations-catalog.js +4151 -0
  326. package/dist/domain/content/catalogs/johto-locations-catalog.js.map +1 -0
  327. package/dist/domain/content/catalogs/kalos-locations-catalog.d.ts +29 -0
  328. package/dist/domain/content/catalogs/kalos-locations-catalog.d.ts.map +1 -0
  329. package/dist/domain/content/catalogs/kalos-locations-catalog.js +4346 -0
  330. package/dist/domain/content/catalogs/kalos-locations-catalog.js.map +1 -0
  331. package/dist/domain/content/catalogs/kanto-locations-catalog.d.ts +2304 -0
  332. package/dist/domain/content/catalogs/kanto-locations-catalog.d.ts.map +1 -0
  333. package/dist/domain/content/catalogs/kanto-locations-catalog.js +2796 -0
  334. package/dist/domain/content/catalogs/kanto-locations-catalog.js.map +1 -0
  335. package/dist/domain/content/catalogs/moves-catalog.d.ts +62 -0
  336. package/dist/domain/content/catalogs/moves-catalog.d.ts.map +1 -0
  337. package/dist/domain/content/catalogs/moves-catalog.js +12883 -0
  338. package/dist/domain/content/catalogs/moves-catalog.js.map +1 -0
  339. package/dist/domain/content/catalogs/natures-catalog.d.ts +202 -0
  340. package/dist/domain/content/catalogs/natures-catalog.d.ts.map +1 -0
  341. package/dist/domain/content/catalogs/natures-catalog.js +228 -0
  342. package/dist/domain/content/catalogs/natures-catalog.js.map +1 -0
  343. package/dist/domain/content/catalogs/paldea-locations-catalog.d.ts +14756 -0
  344. package/dist/domain/content/catalogs/paldea-locations-catalog.d.ts.map +1 -0
  345. package/dist/domain/content/catalogs/paldea-locations-catalog.js +17762 -0
  346. package/dist/domain/content/catalogs/paldea-locations-catalog.js.map +1 -0
  347. package/dist/domain/content/catalogs/pokemon-catalog.d.ts +75 -0
  348. package/dist/domain/content/catalogs/pokemon-catalog.d.ts.map +1 -0
  349. package/dist/domain/content/catalogs/pokemon-catalog.js +100649 -0
  350. package/dist/domain/content/catalogs/pokemon-catalog.js.map +1 -0
  351. package/dist/domain/content/catalogs/regional-forms-catalog.d.ts +3033 -0
  352. package/dist/domain/content/catalogs/regional-forms-catalog.d.ts.map +1 -0
  353. package/dist/domain/content/catalogs/regional-forms-catalog.js +4358 -0
  354. package/dist/domain/content/catalogs/regional-forms-catalog.js.map +1 -0
  355. package/dist/domain/content/catalogs/regions-catalog.d.ts +8 -0
  356. package/dist/domain/content/catalogs/regions-catalog.d.ts.map +1 -0
  357. package/dist/domain/content/catalogs/regions-catalog.js +66 -0
  358. package/dist/domain/content/catalogs/regions-catalog.js.map +1 -0
  359. package/dist/domain/content/catalogs/sinnoh-locations-catalog.d.ts +5955 -0
  360. package/dist/domain/content/catalogs/sinnoh-locations-catalog.d.ts.map +1 -0
  361. package/dist/domain/content/catalogs/sinnoh-locations-catalog.js +7184 -0
  362. package/dist/domain/content/catalogs/sinnoh-locations-catalog.js.map +1 -0
  363. package/dist/domain/content/catalogs/stats-catalog.d.ts +38 -0
  364. package/dist/domain/content/catalogs/stats-catalog.d.ts.map +1 -0
  365. package/dist/domain/content/catalogs/stats-catalog.js +45 -0
  366. package/dist/domain/content/catalogs/stats-catalog.js.map +1 -0
  367. package/dist/domain/content/catalogs/types-catalog.d.ts +8 -0
  368. package/dist/domain/content/catalogs/types-catalog.d.ts.map +1 -0
  369. package/dist/domain/content/catalogs/types-catalog.js +129 -0
  370. package/dist/domain/content/catalogs/types-catalog.js.map +1 -0
  371. package/dist/domain/content/catalogs/unova-locations-catalog.d.ts +29 -0
  372. package/dist/domain/content/catalogs/unova-locations-catalog.d.ts.map +1 -0
  373. package/dist/domain/content/catalogs/unova-locations-catalog.js +6552 -0
  374. package/dist/domain/content/catalogs/unova-locations-catalog.js.map +1 -0
  375. package/dist/domain/content/encounter-catalog.d.ts +27 -0
  376. package/dist/domain/content/encounter-catalog.d.ts.map +1 -0
  377. package/dist/domain/content/encounter-catalog.js +75 -0
  378. package/dist/domain/content/encounter-catalog.js.map +1 -0
  379. package/dist/domain/content/names.d.ts +6 -0
  380. package/dist/domain/content/names.d.ts.map +1 -0
  381. package/dist/domain/content/names.js +7 -0
  382. package/dist/domain/content/names.js.map +1 -0
  383. package/dist/domain/content/schema.d.ts +153 -0
  384. package/dist/domain/content/schema.d.ts.map +1 -0
  385. package/dist/domain/content/schema.js +81 -0
  386. package/dist/domain/content/schema.js.map +1 -0
  387. package/dist/domain/content/sprites.d.ts +5 -0
  388. package/dist/domain/content/sprites.d.ts.map +1 -0
  389. package/dist/domain/content/sprites.js +22 -0
  390. package/dist/domain/content/sprites.js.map +1 -0
  391. package/dist/domain/encounters/encounter.d.ts +56 -0
  392. package/dist/domain/encounters/encounter.d.ts.map +1 -0
  393. package/dist/domain/encounters/encounter.js +74 -0
  394. package/dist/domain/encounters/encounter.js.map +1 -0
  395. package/dist/domain/exploration/exploration.d.ts +63 -0
  396. package/dist/domain/exploration/exploration.d.ts.map +1 -0
  397. package/dist/domain/exploration/exploration.js +48 -0
  398. package/dist/domain/exploration/exploration.js.map +1 -0
  399. package/dist/domain/party/party.d.ts +59 -0
  400. package/dist/domain/party/party.d.ts.map +1 -0
  401. package/dist/domain/party/party.js +19 -0
  402. package/dist/domain/party/party.js.map +1 -0
  403. package/dist/domain/pokemon/model.d.ts +43 -0
  404. package/dist/domain/pokemon/model.d.ts.map +1 -0
  405. package/dist/domain/pokemon/model.js +18 -0
  406. package/dist/domain/pokemon/model.js.map +1 -0
  407. package/dist/domain/pokemon/nature.d.ts +10 -0
  408. package/dist/domain/pokemon/nature.d.ts.map +1 -0
  409. package/dist/domain/pokemon/nature.js +23 -0
  410. package/dist/domain/pokemon/nature.js.map +1 -0
  411. package/dist/domain/pokemon/starter.d.ts +23 -0
  412. package/dist/domain/pokemon/starter.d.ts.map +1 -0
  413. package/dist/domain/pokemon/starter.js +59 -0
  414. package/dist/domain/pokemon/starter.js.map +1 -0
  415. package/dist/domain/pokemon/stats.d.ts +6 -0
  416. package/dist/domain/pokemon/stats.d.ts.map +1 -0
  417. package/dist/domain/pokemon/stats.js +35 -0
  418. package/dist/domain/pokemon/stats.js.map +1 -0
  419. package/dist/domain/pokemon/types.d.ts +37 -0
  420. package/dist/domain/pokemon/types.d.ts.map +1 -0
  421. package/dist/domain/pokemon/types.js +30 -0
  422. package/dist/domain/pokemon/types.js.map +1 -0
  423. package/dist/domain/progression/catalog.d.ts +34 -0
  424. package/dist/domain/progression/catalog.d.ts.map +1 -0
  425. package/dist/domain/progression/catalog.js +258 -0
  426. package/dist/domain/progression/catalog.js.map +1 -0
  427. package/dist/domain/progression/level-evolution.d.ts +13 -0
  428. package/dist/domain/progression/level-evolution.d.ts.map +1 -0
  429. package/dist/domain/progression/level-evolution.js +245 -0
  430. package/dist/domain/progression/level-evolution.js.map +1 -0
  431. package/dist/domain/progression/policies.d.ts +38 -0
  432. package/dist/domain/progression/policies.d.ts.map +1 -0
  433. package/dist/domain/progression/policies.js +78 -0
  434. package/dist/domain/progression/policies.js.map +1 -0
  435. package/dist/domain/shared/identifiers.d.ts +12 -0
  436. package/dist/domain/shared/identifiers.d.ts.map +1 -0
  437. package/dist/domain/shared/identifiers.js +7 -0
  438. package/dist/domain/shared/identifiers.js.map +1 -0
  439. package/dist/domain/shared/language.d.ts +7 -0
  440. package/dist/domain/shared/language.d.ts.map +1 -0
  441. package/dist/domain/shared/language.js +3 -0
  442. package/dist/domain/shared/language.js.map +1 -0
  443. package/dist/domain/trainer/trainer.d.ts +7 -0
  444. package/dist/domain/trainer/trainer.d.ts.map +1 -0
  445. package/dist/domain/trainer/trainer.js +2 -0
  446. package/dist/domain/trainer/trainer.js.map +1 -0
  447. package/dist/domain/usage/usage.d.ts +21 -0
  448. package/dist/domain/usage/usage.d.ts.map +1 -0
  449. package/dist/domain/usage/usage.js +23 -0
  450. package/dist/domain/usage/usage.js.map +1 -0
  451. package/dist/index.d.ts +2 -0
  452. package/dist/index.d.ts.map +1 -0
  453. package/dist/index.js +183817 -0
  454. package/dist/index.js.map +1 -0
  455. package/dist/package.json +10 -0
  456. package/dist/rpc.d.ts +2 -0
  457. package/dist/rpc.d.ts.map +1 -0
  458. package/dist/rpc.js +568 -0
  459. package/dist/rpc.js.map +1 -0
  460. package/dist/tui.d.ts +2 -0
  461. package/dist/tui.d.ts.map +1 -0
  462. package/dist/tui.js +184828 -0
  463. 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,4 @@
1
+ import type { Database } from "bun:sqlite";
2
+ /** Initialize the current schema or atomically upgrade released saves. */
3
+ export declare function initializeGameSchema(database: Database): void;
4
+ //# sourceMappingURL=schema.d.ts.map
@@ -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"}