@hugomrdias/foxer 0.1.3 → 0.1.11

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 (343) hide show
  1. package/CHANGELOG.md +71 -17
  2. package/README.md +77 -10
  3. package/dist/{src/api/runner.d.ts → api/create-api.d.ts} +2 -2
  4. package/dist/api/create-api.d.ts.map +1 -0
  5. package/dist/{src/api/runner.js → api/create-api.js} +2 -2
  6. package/dist/api/create-api.js.map +1 -0
  7. package/dist/api/index.d.ts.map +1 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/api/server.d.ts.map +1 -0
  10. package/dist/api/server.js.map +1 -0
  11. package/dist/api/sql-middleware.d.ts.map +1 -0
  12. package/dist/{src/api → api}/sql-middleware.js +3 -3
  13. package/dist/api/sql-middleware.js.map +1 -0
  14. package/dist/api/sql.d.ts.map +1 -0
  15. package/dist/api/sql.js.map +1 -0
  16. package/dist/api/sse.d.ts.map +1 -0
  17. package/dist/api/sse.js.map +1 -0
  18. package/dist/bin/create.d.ts.map +1 -0
  19. package/dist/{src/bin → bin}/create.js +4 -4
  20. package/dist/bin/create.js.map +1 -0
  21. package/dist/bin/dev.d.ts.map +1 -0
  22. package/dist/{src/bin → bin}/dev.js +9 -11
  23. package/dist/bin/dev.js.map +1 -0
  24. package/dist/bin/flags.d.ts.map +1 -0
  25. package/dist/{src/bin → bin}/flags.js +1 -1
  26. package/dist/bin/flags.js.map +1 -0
  27. package/dist/{src/bin → bin}/index.d.ts.map +1 -1
  28. package/dist/{src/bin → bin}/index.js +4 -2
  29. package/dist/bin/index.js.map +1 -0
  30. package/dist/bin/serve.d.ts +3 -0
  31. package/dist/bin/serve.d.ts.map +1 -0
  32. package/dist/bin/serve.js +53 -0
  33. package/dist/bin/serve.js.map +1 -0
  34. package/dist/bin/start.d.ts +3 -0
  35. package/dist/bin/start.d.ts.map +1 -0
  36. package/dist/bin/start.js +72 -0
  37. package/dist/bin/start.js.map +1 -0
  38. package/dist/bin/utils.d.ts.map +1 -0
  39. package/dist/bin/utils.js +39 -0
  40. package/dist/bin/utils.js.map +1 -0
  41. package/dist/config/config.d.ts.map +1 -0
  42. package/dist/config/config.js.map +1 -0
  43. package/dist/{src/config → config}/env.d.ts +1 -1
  44. package/dist/config/env.d.ts.map +1 -0
  45. package/dist/{src/config → config}/env.js +4 -3
  46. package/dist/config/env.js.map +1 -0
  47. package/dist/contants.d.ts.map +1 -0
  48. package/dist/contants.js.map +1 -0
  49. package/dist/{src/db → db}/actions/blocks.d.ts +9 -6
  50. package/dist/db/actions/blocks.d.ts.map +1 -0
  51. package/dist/{src/db → db}/actions/blocks.js +40 -44
  52. package/dist/db/actions/blocks.js.map +1 -0
  53. package/dist/db/actions/index.d.ts.map +1 -0
  54. package/dist/db/actions/index.js.map +1 -0
  55. package/dist/db/actions/transactions.d.ts.map +1 -0
  56. package/dist/db/actions/transactions.js.map +1 -0
  57. package/dist/{src/db → db}/client.d.ts +3 -3
  58. package/dist/db/client.d.ts.map +1 -0
  59. package/dist/{src/db → db}/client.js +9 -3
  60. package/dist/db/client.js.map +1 -0
  61. package/dist/{src/db → db}/column-types.d.ts +2 -2
  62. package/dist/db/column-types.d.ts.map +1 -0
  63. package/dist/{src/db → db}/column-types.js +11 -3
  64. package/dist/db/column-types.js.map +1 -0
  65. package/dist/db/encode.d.ts.map +1 -0
  66. package/dist/db/encode.js.map +1 -0
  67. package/dist/db/migrate.d.ts.map +1 -0
  68. package/dist/db/migrate.js.map +1 -0
  69. package/dist/{src/db → db}/schema/blocks.d.ts +16 -16
  70. package/dist/{src/db → db}/schema/blocks.d.ts.map +1 -1
  71. package/dist/db/schema/blocks.js.map +1 -0
  72. package/dist/{src/db → db}/schema/index.d.ts +44 -44
  73. package/dist/{src/db → db}/schema/index.d.ts.map +1 -1
  74. package/dist/db/schema/index.js.map +1 -0
  75. package/dist/{src/db → db}/schema/transactions.d.ts +6 -6
  76. package/dist/{src/db → db}/schema/transactions.d.ts.map +1 -1
  77. package/dist/{src/db → db}/schema/transactions.js +3 -1
  78. package/dist/db/schema/transactions.js.map +1 -0
  79. package/dist/db/transaction.d.ts.map +1 -0
  80. package/dist/db/transaction.js.map +1 -0
  81. package/dist/{src/hooks → hooks}/registry.d.ts +7 -3
  82. package/dist/hooks/registry.d.ts.map +1 -0
  83. package/dist/{src/hooks → hooks}/registry.js +5 -0
  84. package/dist/hooks/registry.js.map +1 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/indexer/backfill.d.ts.map +1 -0
  88. package/dist/{src/indexer → indexer}/backfill.js +22 -19
  89. package/dist/indexer/backfill.js.map +1 -0
  90. package/dist/{src/indexer/runner.d.ts → indexer/create-indexer.d.ts} +2 -2
  91. package/dist/indexer/create-indexer.d.ts.map +1 -0
  92. package/dist/{src/indexer/runner.js → indexer/create-indexer.js} +2 -2
  93. package/dist/indexer/create-indexer.js.map +1 -0
  94. package/dist/indexer/live.d.ts.map +1 -0
  95. package/dist/{src/indexer → indexer}/live.js +3 -3
  96. package/dist/indexer/live.js.map +1 -0
  97. package/dist/{src/indexer → indexer}/process-block.d.ts +4 -4
  98. package/dist/indexer/process-block.d.ts.map +1 -0
  99. package/dist/{src/indexer → indexer}/process-block.js +6 -31
  100. package/dist/indexer/process-block.js.map +1 -0
  101. package/dist/indexer/queue-block.d.ts.map +1 -0
  102. package/dist/{src/indexer → indexer}/queue-block.js +19 -1
  103. package/dist/indexer/queue-block.js.map +1 -0
  104. package/dist/{src/indexer → indexer}/reorg.d.ts +2 -2
  105. package/dist/indexer/reorg.d.ts.map +1 -0
  106. package/dist/indexer/reorg.js.map +1 -0
  107. package/dist/rpc/client.d.ts.map +1 -0
  108. package/dist/rpc/client.js.map +1 -0
  109. package/dist/rpc/get-block.d.ts.map +1 -0
  110. package/dist/rpc/get-block.js.map +1 -0
  111. package/dist/rpc/get-logs.d.ts.map +1 -0
  112. package/dist/{src/rpc → rpc}/get-logs.js +2 -2
  113. package/dist/rpc/get-logs.js.map +1 -0
  114. package/dist/schema.d.ts.map +1 -0
  115. package/dist/schema.js.map +1 -0
  116. package/dist/{src/types.d.ts → types.d.ts} +2 -0
  117. package/dist/types.d.ts.map +1 -0
  118. package/dist/types.js.map +1 -0
  119. package/dist/utils/bloom.d.ts.map +1 -0
  120. package/dist/utils/bloom.js.map +1 -0
  121. package/dist/utils/build-conflict-columns.d.ts.map +1 -0
  122. package/dist/utils/build-conflict-columns.js.map +1 -0
  123. package/dist/utils/common.d.ts.map +1 -0
  124. package/dist/utils/common.js.map +1 -0
  125. package/dist/utils/cursor.d.ts.map +1 -0
  126. package/dist/utils/cursor.js.map +1 -0
  127. package/dist/utils/format.d.ts.map +1 -0
  128. package/dist/utils/format.js.map +1 -0
  129. package/dist/utils/hash.d.ts.map +1 -0
  130. package/dist/utils/hash.js.map +1 -0
  131. package/dist/utils/json.d.ts.map +1 -0
  132. package/dist/utils/json.js.map +1 -0
  133. package/dist/utils/logger.d.ts.map +1 -0
  134. package/dist/{src/utils → utils}/logger.js +0 -3
  135. package/dist/utils/logger.js.map +1 -0
  136. package/dist/utils/shutdown.d.ts.map +1 -0
  137. package/dist/{src/utils → utils}/shutdown.js +3 -2
  138. package/dist/utils/shutdown.js.map +1 -0
  139. package/dist/utils/timer.d.ts.map +1 -0
  140. package/dist/utils/timer.js.map +1 -0
  141. package/dist/utils/types.d.ts.map +1 -0
  142. package/dist/{src → utils}/types.js.map +1 -1
  143. package/package.json +45 -41
  144. package/src/api/{runner.ts → create-api.ts} +2 -1
  145. package/src/api/server.ts +1 -0
  146. package/src/api/sql-middleware.ts +4 -3
  147. package/src/api/sql.ts +2 -1
  148. package/src/bin/create.ts +7 -8
  149. package/src/bin/dev.ts +11 -13
  150. package/src/bin/flags.ts +1 -1
  151. package/src/bin/index.ts +6 -2
  152. package/src/bin/serve.ts +65 -0
  153. package/src/bin/start.ts +87 -0
  154. package/src/bin/utils.ts +22 -25
  155. package/src/config/config.ts +1 -0
  156. package/src/config/env.ts +5 -3
  157. package/src/db/actions/blocks.ts +53 -52
  158. package/src/db/actions/transactions.ts +1 -0
  159. package/src/db/client.ts +12 -5
  160. package/src/db/column-types.ts +17 -6
  161. package/src/db/encode.ts +1 -0
  162. package/src/db/migrate.ts +1 -0
  163. package/src/db/schema/blocks.ts +1 -0
  164. package/src/db/schema/transactions.ts +4 -1
  165. package/src/hooks/registry.ts +15 -3
  166. package/src/indexer/backfill.ts +31 -20
  167. package/src/indexer/{runner.ts → create-indexer.ts} +1 -1
  168. package/src/indexer/live.ts +4 -3
  169. package/src/indexer/process-block.ts +13 -41
  170. package/src/indexer/queue-block.ts +25 -1
  171. package/src/indexer/reorg.ts +3 -2
  172. package/src/rpc/client.ts +1 -0
  173. package/src/rpc/get-block.ts +1 -0
  174. package/src/rpc/get-logs.ts +3 -2
  175. package/src/types.ts +3 -0
  176. package/src/utils/logger.ts +1 -3
  177. package/src/utils/shutdown.ts +3 -2
  178. package/src/utils/types.ts +1 -0
  179. package/template/{package.json → package.json.tpl} +10 -8
  180. package/template/{pnpm-workspace.yaml → pnpm-workspace.yaml.tpl} +1 -1
  181. package/template/{tsconfig.json → tsconfig.json.tpl} +1 -2
  182. package/template/turbo.json.tpl +22 -0
  183. package/tsconfig.json +3 -1
  184. package/dist/src/api/index.d.ts.map +0 -1
  185. package/dist/src/api/index.js.map +0 -1
  186. package/dist/src/api/runner.d.ts.map +0 -1
  187. package/dist/src/api/runner.js.map +0 -1
  188. package/dist/src/api/server.d.ts.map +0 -1
  189. package/dist/src/api/server.js.map +0 -1
  190. package/dist/src/api/sql-middleware.d.ts.map +0 -1
  191. package/dist/src/api/sql-middleware.js.map +0 -1
  192. package/dist/src/api/sql.d.ts.map +0 -1
  193. package/dist/src/api/sql.js.map +0 -1
  194. package/dist/src/api/sse.d.ts.map +0 -1
  195. package/dist/src/api/sse.js.map +0 -1
  196. package/dist/src/bin/create.d.ts.map +0 -1
  197. package/dist/src/bin/create.js.map +0 -1
  198. package/dist/src/bin/dev.d.ts.map +0 -1
  199. package/dist/src/bin/dev.js.map +0 -1
  200. package/dist/src/bin/flags.d.ts.map +0 -1
  201. package/dist/src/bin/flags.js.map +0 -1
  202. package/dist/src/bin/index.js.map +0 -1
  203. package/dist/src/bin/utils.d.ts.map +0 -1
  204. package/dist/src/bin/utils.js +0 -52
  205. package/dist/src/bin/utils.js.map +0 -1
  206. package/dist/src/config/config.d.ts.map +0 -1
  207. package/dist/src/config/config.js.map +0 -1
  208. package/dist/src/config/env.d.ts.map +0 -1
  209. package/dist/src/config/env.js.map +0 -1
  210. package/dist/src/contants.d.ts.map +0 -1
  211. package/dist/src/contants.js.map +0 -1
  212. package/dist/src/db/actions/blocks.d.ts.map +0 -1
  213. package/dist/src/db/actions/blocks.js.map +0 -1
  214. package/dist/src/db/actions/index.d.ts.map +0 -1
  215. package/dist/src/db/actions/index.js.map +0 -1
  216. package/dist/src/db/actions/transactions.d.ts.map +0 -1
  217. package/dist/src/db/actions/transactions.js.map +0 -1
  218. package/dist/src/db/client.d.ts.map +0 -1
  219. package/dist/src/db/client.js.map +0 -1
  220. package/dist/src/db/column-types.d.ts.map +0 -1
  221. package/dist/src/db/column-types.js.map +0 -1
  222. package/dist/src/db/encode.d.ts.map +0 -1
  223. package/dist/src/db/encode.js.map +0 -1
  224. package/dist/src/db/migrate.d.ts.map +0 -1
  225. package/dist/src/db/migrate.js.map +0 -1
  226. package/dist/src/db/schema/blocks.js.map +0 -1
  227. package/dist/src/db/schema/index.js.map +0 -1
  228. package/dist/src/db/schema/transactions.js.map +0 -1
  229. package/dist/src/db/transaction.d.ts.map +0 -1
  230. package/dist/src/db/transaction.js.map +0 -1
  231. package/dist/src/hooks/registry.d.ts.map +0 -1
  232. package/dist/src/hooks/registry.js.map +0 -1
  233. package/dist/src/index.d.ts.map +0 -1
  234. package/dist/src/index.js.map +0 -1
  235. package/dist/src/indexer/backfill.d.ts.map +0 -1
  236. package/dist/src/indexer/backfill.js.map +0 -1
  237. package/dist/src/indexer/live.d.ts.map +0 -1
  238. package/dist/src/indexer/live.js.map +0 -1
  239. package/dist/src/indexer/process-block.d.ts.map +0 -1
  240. package/dist/src/indexer/process-block.js.map +0 -1
  241. package/dist/src/indexer/queue-block.d.ts.map +0 -1
  242. package/dist/src/indexer/queue-block.js.map +0 -1
  243. package/dist/src/indexer/reorg.d.ts.map +0 -1
  244. package/dist/src/indexer/reorg.js.map +0 -1
  245. package/dist/src/indexer/runner.d.ts.map +0 -1
  246. package/dist/src/indexer/runner.js.map +0 -1
  247. package/dist/src/rpc/client.d.ts.map +0 -1
  248. package/dist/src/rpc/client.js.map +0 -1
  249. package/dist/src/rpc/get-block.d.ts.map +0 -1
  250. package/dist/src/rpc/get-block.js.map +0 -1
  251. package/dist/src/rpc/get-logs.d.ts.map +0 -1
  252. package/dist/src/rpc/get-logs.js.map +0 -1
  253. package/dist/src/schema.d.ts.map +0 -1
  254. package/dist/src/schema.js.map +0 -1
  255. package/dist/src/types.d.ts.map +0 -1
  256. package/dist/src/utils/bloom.d.ts.map +0 -1
  257. package/dist/src/utils/bloom.js.map +0 -1
  258. package/dist/src/utils/build-conflict-columns.d.ts.map +0 -1
  259. package/dist/src/utils/build-conflict-columns.js.map +0 -1
  260. package/dist/src/utils/common.d.ts.map +0 -1
  261. package/dist/src/utils/common.js.map +0 -1
  262. package/dist/src/utils/cursor.d.ts.map +0 -1
  263. package/dist/src/utils/cursor.js.map +0 -1
  264. package/dist/src/utils/format.d.ts.map +0 -1
  265. package/dist/src/utils/format.js.map +0 -1
  266. package/dist/src/utils/hash.d.ts.map +0 -1
  267. package/dist/src/utils/hash.js.map +0 -1
  268. package/dist/src/utils/json.d.ts.map +0 -1
  269. package/dist/src/utils/json.js.map +0 -1
  270. package/dist/src/utils/logger.d.ts.map +0 -1
  271. package/dist/src/utils/logger.js.map +0 -1
  272. package/dist/src/utils/shutdown.d.ts.map +0 -1
  273. package/dist/src/utils/shutdown.js.map +0 -1
  274. package/dist/src/utils/timer.d.ts.map +0 -1
  275. package/dist/src/utils/timer.js.map +0 -1
  276. package/dist/src/utils/types.d.ts.map +0 -1
  277. package/dist/src/utils/types.js.map +0 -1
  278. package/dist/tsconfig.tsbuildinfo +0 -1
  279. package/template/biome.template.json +0 -50
  280. /package/dist/{src/api → api}/index.d.ts +0 -0
  281. /package/dist/{src/api → api}/index.js +0 -0
  282. /package/dist/{src/api → api}/server.d.ts +0 -0
  283. /package/dist/{src/api → api}/server.js +0 -0
  284. /package/dist/{src/api → api}/sql-middleware.d.ts +0 -0
  285. /package/dist/{src/api → api}/sql.d.ts +0 -0
  286. /package/dist/{src/api → api}/sql.js +0 -0
  287. /package/dist/{src/api → api}/sse.d.ts +0 -0
  288. /package/dist/{src/api → api}/sse.js +0 -0
  289. /package/dist/{src/bin → bin}/create.d.ts +0 -0
  290. /package/dist/{src/bin → bin}/dev.d.ts +0 -0
  291. /package/dist/{src/bin → bin}/flags.d.ts +0 -0
  292. /package/dist/{src/bin → bin}/index.d.ts +0 -0
  293. /package/dist/{src/bin → bin}/utils.d.ts +0 -0
  294. /package/dist/{src/config → config}/config.d.ts +0 -0
  295. /package/dist/{src/config → config}/config.js +0 -0
  296. /package/dist/{src/contants.d.ts → contants.d.ts} +0 -0
  297. /package/dist/{src/contants.js → contants.js} +0 -0
  298. /package/dist/{src/db → db}/actions/index.d.ts +0 -0
  299. /package/dist/{src/db → db}/actions/index.js +0 -0
  300. /package/dist/{src/db → db}/actions/transactions.d.ts +0 -0
  301. /package/dist/{src/db → db}/actions/transactions.js +0 -0
  302. /package/dist/{src/db → db}/encode.d.ts +0 -0
  303. /package/dist/{src/db → db}/encode.js +0 -0
  304. /package/dist/{src/db → db}/migrate.d.ts +0 -0
  305. /package/dist/{src/db → db}/migrate.js +0 -0
  306. /package/dist/{src/db → db}/schema/blocks.js +0 -0
  307. /package/dist/{src/db → db}/schema/index.js +0 -0
  308. /package/dist/{src/db → db}/transaction.d.ts +0 -0
  309. /package/dist/{src/db → db}/transaction.js +0 -0
  310. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  311. /package/dist/{src/index.js → index.js} +0 -0
  312. /package/dist/{src/indexer → indexer}/backfill.d.ts +0 -0
  313. /package/dist/{src/indexer → indexer}/live.d.ts +0 -0
  314. /package/dist/{src/indexer → indexer}/queue-block.d.ts +0 -0
  315. /package/dist/{src/indexer → indexer}/reorg.js +0 -0
  316. /package/dist/{src/rpc → rpc}/client.d.ts +0 -0
  317. /package/dist/{src/rpc → rpc}/client.js +0 -0
  318. /package/dist/{src/rpc → rpc}/get-block.d.ts +0 -0
  319. /package/dist/{src/rpc → rpc}/get-block.js +0 -0
  320. /package/dist/{src/rpc → rpc}/get-logs.d.ts +0 -0
  321. /package/dist/{src/schema.d.ts → schema.d.ts} +0 -0
  322. /package/dist/{src/schema.js → schema.js} +0 -0
  323. /package/dist/{src/types.js → types.js} +0 -0
  324. /package/dist/{src/utils → utils}/bloom.d.ts +0 -0
  325. /package/dist/{src/utils → utils}/bloom.js +0 -0
  326. /package/dist/{src/utils → utils}/build-conflict-columns.d.ts +0 -0
  327. /package/dist/{src/utils → utils}/build-conflict-columns.js +0 -0
  328. /package/dist/{src/utils → utils}/common.d.ts +0 -0
  329. /package/dist/{src/utils → utils}/common.js +0 -0
  330. /package/dist/{src/utils → utils}/cursor.d.ts +0 -0
  331. /package/dist/{src/utils → utils}/cursor.js +0 -0
  332. /package/dist/{src/utils → utils}/format.d.ts +0 -0
  333. /package/dist/{src/utils → utils}/format.js +0 -0
  334. /package/dist/{src/utils → utils}/hash.d.ts +0 -0
  335. /package/dist/{src/utils → utils}/hash.js +0 -0
  336. /package/dist/{src/utils → utils}/json.d.ts +0 -0
  337. /package/dist/{src/utils → utils}/json.js +0 -0
  338. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  339. /package/dist/{src/utils → utils}/shutdown.d.ts +0 -0
  340. /package/dist/{src/utils → utils}/timer.d.ts +0 -0
  341. /package/dist/{src/utils → utils}/timer.js +0 -0
  342. /package/dist/{src/utils → utils}/types.d.ts +0 -0
  343. /package/dist/{src/utils → utils}/types.js +0 -0
package/package.json CHANGED
@@ -1,35 +1,22 @@
1
1
  {
2
2
  "name": "@hugomrdias/foxer",
3
+ "version": "0.1.11",
3
4
  "description": "Foxer is a all-in-one application server for Filecoin.",
4
- "version": "0.1.3",
5
- "author": "Hugo Dias <hugomrdias@gmail.com>",
6
5
  "license": "Apache-2.0 OR MIT",
6
+ "author": "Hugo Dias <hugomrdias@gmail.com>",
7
7
  "repository": {
8
8
  "url": "hugomrdias/foxer",
9
9
  "directory": "packages/foxer"
10
10
  },
11
- "type": "module",
12
- "sideEffects": false,
13
11
  "bin": {
14
- "foxer": "./dist/src/bin/index.js"
15
- },
16
- "main": "dist/src/index.js",
17
- "module": "dist/src/index.js",
18
- "types": "dist/src/index.d.ts",
19
- "exports": {
20
- ".": {
21
- "types": "./dist/src/index.d.ts",
22
- "default": "./dist/src/index.js"
23
- },
24
- "./api": {
25
- "types": "./dist/src/api/index.d.ts",
26
- "default": "./dist/src/api/index.js"
27
- },
28
- "./schema": {
29
- "types": "./dist/src/schema.d.ts",
30
- "default": "./dist/src/schema.js"
31
- }
12
+ "foxer": "./dist/bin/index.js",
13
+ "foxer.src": "./src/bin/index.ts"
32
14
  },
15
+ "type": "module",
16
+ "sideEffects": false,
17
+ "main": "dist/index.js",
18
+ "module": "dist/index.js",
19
+ "types": "dist/index.d.ts",
33
20
  "typesVersions": {
34
21
  "*": {
35
22
  "api": [
@@ -40,47 +27,64 @@
40
27
  ]
41
28
  }
42
29
  },
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "./api": {
36
+ "types": "./dist/api/index.d.ts",
37
+ "default": "./dist/api/index.js"
38
+ },
39
+ "./schema": {
40
+ "types": "./dist/schema.d.ts",
41
+ "default": "./dist/schema.js"
42
+ }
43
+ },
44
+ "publishConfig": {
45
+ "access": "public",
46
+ "provenance": true
47
+ },
48
+ "scripts": {
49
+ "check": "tsc --noEmit && biome check .",
50
+ "build": "tsc -b",
51
+ "prepublishOnly": "bun run build"
52
+ },
43
53
  "dependencies": {
44
- "@bluwy/giget-core": "^0.1.6",
54
+ "@bluwy/giget-core": "^0.1.7",
45
55
  "@clack/prompts": "^1.1.0",
46
- "@electric-sql/pglite": "^0.3.16",
56
+ "@electric-sql/pglite": "^0.4.1",
47
57
  "@hono/node-server": "^1.19.11",
48
58
  "@libpg-query/parser": "^17.6.3",
49
59
  "@pgsql/traverse": "^17.2.4",
50
60
  "abitype": "^1.2.3",
51
61
  "cleye": "^2.3.0",
52
62
  "dotenv": "^17.2.3",
53
- "drizzle-orm": "1.0.0-beta.15-859cf75",
63
+ "drizzle-orm": "1.0.0-beta.17-67b1795",
54
64
  "exit-hook": "^5.1.0",
55
- "hono": "^4.12.7",
65
+ "hono": "^4.12.9",
56
66
  "hono-pino": "^0.10.3",
57
67
  "http-shutdown": "^1.2.2",
58
- "lilconfig": "^3.1.3",
68
+ "iso-base": "^4.3.1",
59
69
  "p-queue": "^9.1.0",
60
70
  "pg": "^8.20.0",
71
+ "pgserve": "^1.1.6",
61
72
  "picocolors": "^1.1.1",
62
73
  "pino": "^10.3.1",
63
74
  "postgres": "^3.4.8",
64
75
  "scule": "^1.3.0",
76
+ "unconfig": "^7.5.0",
65
77
  "zod": "^4.1.11"
66
78
  },
67
79
  "devDependencies": {
68
80
  "@pgsql/types": "^17.6.2",
69
- "@types/node": "^25.4.0",
70
- "@types/pg": "^8.18.0",
71
- "type-fest": "^5.4.4",
81
+ "@types/node": "^25.5.0",
82
+ "@types/pg": "^8.20.0",
83
+ "type-fest": "^5.5.0",
72
84
  "typescript": "^5.9.2"
73
85
  },
74
86
  "peerDependencies": {
75
- "hono": ">=4.5",
76
- "viem": ">=2"
77
- },
78
- "publishConfig": {
79
- "provenance": true,
80
- "access": "public"
81
- },
82
- "scripts": {
83
- "build": "tsc --build",
84
- "lint": "tsc --build && biome check ."
87
+ "hono": ">=4.12.9",
88
+ "viem": "2.47.6"
85
89
  }
86
- }
90
+ }
@@ -1,11 +1,12 @@
1
1
  import { serve } from '@hono/node-server'
2
2
  import shutdown from 'http-shutdown'
3
+
3
4
  import type { InternalConfig } from '../config/config.ts'
4
5
  import type { Database } from '../db/client.ts'
5
6
  import type { Logger } from '../utils/logger.ts'
6
7
  import { createApiServer } from './server.ts'
7
8
 
8
- export function bootstrapApiServer(options: {
9
+ export function createApi(options: {
9
10
  db: Database
10
11
  config: InternalConfig
11
12
  logger: Logger
package/src/api/server.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Hono } from 'hono'
2
2
  import { type PinoLogger, pinoLogger } from 'hono-pino'
3
+
3
4
  import type { InternalConfig } from '../config/config.ts'
4
5
  import type { Database } from '../db/client.ts'
5
6
  import type { Logger } from '../utils/logger.ts'
@@ -2,6 +2,7 @@ import type { QueryWithTypings } from 'drizzle-orm'
2
2
  import { createMiddleware } from 'hono/factory'
3
3
  import { streamSSE } from 'hono/streaming'
4
4
  import postgres from 'postgres'
5
+
5
6
  import { PUBLICATION_NAME } from '../contants.ts'
6
7
  import type { Database } from '../db/client.ts'
7
8
  import type { Logger } from '../utils/logger.ts'
@@ -97,18 +98,18 @@ export function sqlMiddleware({
97
98
  })
98
99
  })
99
100
 
100
- stream.writeSSE({
101
+ await stream.writeSSE({
101
102
  data: JSON.stringify(dbResult.result),
102
103
  })
103
104
 
104
105
  for (const table of tables) {
105
106
  const sub = await pg.subscribe(`*:${table}`, async () => {
106
107
  const dbResult = await executeSql({ db, query })
107
- stream.writeSSE({
108
+ await stream.writeSSE({
108
109
  data: JSON.stringify(dbResult.result),
109
110
  })
110
111
  })
111
- subscriptions.push(sub.unsubscribe)
112
+ subscriptions.push(() => sub.unsubscribe())
112
113
  }
113
114
 
114
115
  while (stream.closed === false && stream.aborted === false) {
package/src/api/sql.ts CHANGED
@@ -9,6 +9,7 @@ import type { Visitor } from '@pgsql/traverse'
9
9
  import { walk } from '@pgsql/traverse'
10
10
  import type { QueryWithTypings } from 'drizzle-orm'
11
11
  import { Pool } from 'pg'
12
+
12
13
  import type { Database } from '../db/client'
13
14
  import type { MaybeResult } from '../types'
14
15
 
@@ -120,7 +121,7 @@ export async function executeSql({
120
121
  query: QueryWithTypings
121
122
  }): Promise<MaybeResult<unknown>> {
122
123
  try {
123
- let dbResult: unknown | undefined
124
+ let dbResult: unknown
124
125
  if (db.$client instanceof PGlite) {
125
126
  dbResult = await db._.session
126
127
  .prepareQuery(query, undefined, undefined, false)
package/src/bin/create.ts CHANGED
@@ -9,6 +9,7 @@ import {
9
9
  } from 'node:fs'
10
10
  import { basename, dirname, relative, resolve } from 'node:path'
11
11
  import { fileURLToPath } from 'node:url'
12
+
12
13
  import { downloadTemplate } from '@bluwy/giget-core'
13
14
  import * as p from '@clack/prompts'
14
15
  import { type Command, command } from 'cleye'
@@ -150,7 +151,7 @@ export const create: Command = command(
150
151
 
151
152
  const pkg = JSON.parse(
152
153
  readFileSync(
153
- resolve(__dirname, `../../../template/package.json`),
154
+ resolve(__dirname, `../../template/package.json.tpl`),
154
155
  'utf-8'
155
156
  )
156
157
  )
@@ -164,17 +165,17 @@ export const create: Command = command(
164
165
 
165
166
  if (pm === 'pnpm') {
166
167
  copy(
167
- resolve(__dirname, `../../../template/pnpm-workspace.yaml`),
168
+ resolve(__dirname, `../../template/pnpm-workspace.yaml.tpl`),
168
169
  resolve(root, 'pnpm-workspace.yaml')
169
170
  )
170
171
  }
171
172
 
172
173
  copy(
173
- resolve(__dirname, `../../../template/biome.template.json`),
174
- resolve(root, 'biome.json')
174
+ resolve(__dirname, `../../template/turbo.json.tpl`),
175
+ resolve(root, 'turbo.json')
175
176
  )
176
177
  copy(
177
- resolve(__dirname, `../../../template/tsconfig.json`),
178
+ resolve(__dirname, `../../template/tsconfig.json.tpl`),
178
179
  resolve(root, 'tsconfig.json')
179
180
  )
180
181
 
@@ -191,9 +192,7 @@ export const create: Command = command(
191
192
  const cdProjectName = relative(cwd, root)
192
193
  doneMessage += `Done. Now run:\n`
193
194
  if (root !== cwd) {
194
- doneMessage += `\n cd ${
195
- cdProjectName.includes(' ') ? `"${cdProjectName}"` : cdProjectName
196
- }`
195
+ doneMessage += `\n cd ${cdProjectName.includes(' ') ? `"${cdProjectName}"` : cdProjectName}`
197
196
  }
198
197
  doneMessage += `\n ${getInstallCommand(pm).join(' ')}`
199
198
  doneMessage += `\n ${getRunCommand(pm, 'dev').join(' ')}`
package/src/bin/dev.ts CHANGED
@@ -1,16 +1,18 @@
1
1
  import fs from 'node:fs'
2
2
  import path from 'node:path'
3
+
3
4
  import { type Command, command } from 'cleye'
4
5
  import { gracefulExit } from 'exit-hook'
5
- import { bootstrapApiServer } from '../api/runner.ts'
6
+
7
+ import { createApi } from '../api/create-api.ts'
6
8
  import { createEnv } from '../config/env.ts'
7
9
  import { createDatabase } from '../db/client.ts'
8
10
  import { runMigrations } from '../db/migrate.ts'
9
11
  import * as InternalSchema from '../db/schema/index.ts'
10
- import { HookRegistry } from '../hooks/registry.ts'
11
- import { bootstrapIndexer } from '../indexer/runner.ts'
12
+ import { createRegistry } from '../hooks/registry.ts'
13
+ import { createIndexer } from '../indexer/create-indexer.ts'
12
14
  import { createLogger } from '../utils/logger.ts'
13
- import { createExit, registerUnhandled } from '../utils/shutdown.ts'
15
+ import { createExit } from '../utils/shutdown.ts'
14
16
  import { globalFlags } from './flags.ts'
15
17
  import { loadConfig } from './utils.ts'
16
18
 
@@ -19,7 +21,7 @@ export const dev: Command = command(
19
21
  name: 'dev',
20
22
  flags: { ...globalFlags },
21
23
  help: {
22
- description: 'Start the development server with hot reloading',
24
+ description: 'Start the development server',
23
25
  },
24
26
  },
25
27
  async (argv) => {
@@ -28,8 +30,6 @@ export const dev: Command = command(
28
30
  mode: argv.flags.logMode,
29
31
  })
30
32
 
31
- registerUnhandled({ logger })
32
-
33
33
  if (!fs.existsSync(path.join(argv.flags.root, '.env.local'))) {
34
34
  logger.warn({
35
35
  msg: 'Local environment file (.env.local) not found',
@@ -38,7 +38,6 @@ export const dev: Command = command(
38
38
 
39
39
  try {
40
40
  const env = createEnv(logger)
41
-
42
41
  const config = await loadConfig(
43
42
  logger,
44
43
  argv.flags.root,
@@ -57,17 +56,16 @@ export const dev: Command = command(
57
56
  logger,
58
57
  })
59
58
 
60
- const registry = new HookRegistry()
61
- config.hooks({ registry })
59
+ const registry = createRegistry({ config })
62
60
 
63
61
  const [api, indexer] = await Promise.all([
64
- bootstrapApiServer({
62
+ createApi({
65
63
  db: dbContext.db,
66
64
  config,
67
65
  logger,
68
66
  port: argv.flags.port,
69
67
  }),
70
- bootstrapIndexer({
68
+ createIndexer({
71
69
  logger,
72
70
  db: dbContext.db,
73
71
  registry,
@@ -80,7 +78,7 @@ export const dev: Command = command(
80
78
  stop: async () => {
81
79
  indexer.stop()
82
80
  api.stop()
83
- await dbContext.close()
81
+ await dbContext.stop()
84
82
  },
85
83
  })
86
84
  } catch (error) {
package/src/bin/flags.ts CHANGED
@@ -55,7 +55,7 @@ export const globalFlags = {
55
55
  logMode: {
56
56
  type: LogMode,
57
57
  description: 'The log mode to use',
58
- default: LogMode(process.env.NODE_ENV !== 'production' ? 'pretty' : 'json'),
58
+ default: LogMode(process.env.NODE_ENV === 'production' ? 'json' : 'pretty'),
59
59
  },
60
60
  port: {
61
61
  type: Number,
package/src/bin/index.ts CHANGED
@@ -3,12 +3,16 @@
3
3
  import { readFileSync } from 'node:fs'
4
4
  import { dirname, resolve } from 'node:path'
5
5
  import { fileURLToPath } from 'node:url'
6
+
6
7
  import { cli } from 'cleye'
8
+
7
9
  import { create } from './create.ts'
8
10
  import { dev } from './dev.ts'
11
+ import { serve } from './serve.ts'
12
+ import { start } from './start.ts'
9
13
 
10
14
  const __dirname = dirname(fileURLToPath(import.meta.url))
11
- const packageJsonPath = resolve(__dirname, '../../../package.json')
15
+ const packageJsonPath = resolve(__dirname, '../../package.json')
12
16
  const packageJson = JSON.parse(
13
17
  readFileSync(packageJsonPath, { encoding: 'utf8' })
14
18
  )
@@ -16,7 +20,7 @@ const packageJson = JSON.parse(
16
20
  const argv = cli({
17
21
  name: 'foxer',
18
22
  version: packageJson.version,
19
- commands: [dev, create],
23
+ commands: [dev, create, start, serve],
20
24
  help: {
21
25
  version: packageJson.version,
22
26
  },
@@ -0,0 +1,65 @@
1
+ import { type Command, command } from 'cleye'
2
+ import { gracefulExit } from 'exit-hook'
3
+
4
+ import { createApi } from '../api/create-api.ts'
5
+ import { createEnv } from '../config/env.ts'
6
+ import { createDatabase } from '../db/client.ts'
7
+ import * as InternalSchema from '../db/schema/index.ts'
8
+ import { createLogger } from '../utils/logger.ts'
9
+ import { createExit } from '../utils/shutdown.ts'
10
+ import { globalFlags } from './flags.ts'
11
+ import { loadConfig } from './utils.ts'
12
+
13
+ export const serve: Command = command(
14
+ {
15
+ name: 'serve',
16
+ flags: { ...globalFlags },
17
+ help: {
18
+ description: 'Serve the production HTTP API and without the indexer',
19
+ },
20
+ },
21
+ async (argv) => {
22
+ const logger = createLogger({
23
+ level: argv.flags.logLevel,
24
+ mode: 'json',
25
+ })
26
+
27
+ if (process.env.DATABASE_URL == null) {
28
+ logger.error('DATABASE_URL environment variable is not set')
29
+ gracefulExit(1)
30
+ }
31
+
32
+ try {
33
+ const env = createEnv(logger)
34
+ const config = await loadConfig(
35
+ logger,
36
+ argv.flags.root,
37
+ argv.flags.config
38
+ )
39
+
40
+ const dbContext = createDatabase({
41
+ env,
42
+ schema: { ...config.schema, ...InternalSchema.schema },
43
+ relations: { ...config.relations, ...InternalSchema.relations },
44
+ })
45
+
46
+ const api = createApi({
47
+ db: dbContext.db,
48
+ config,
49
+ logger,
50
+ port: argv.flags.port,
51
+ })
52
+
53
+ createExit({
54
+ logger,
55
+ stop: async () => {
56
+ api.stop()
57
+ await dbContext.stop()
58
+ },
59
+ })
60
+ } catch (error) {
61
+ logger.error({ error }, 'HTTP API server failed')
62
+ gracefulExit(1)
63
+ }
64
+ }
65
+ )
@@ -0,0 +1,87 @@
1
+ import path from 'node:path'
2
+
3
+ import { type Command, command } from 'cleye'
4
+ import { gracefulExit } from 'exit-hook'
5
+
6
+ import { createApi } from '../api/create-api.ts'
7
+ import { createEnv } from '../config/env.ts'
8
+ import { createDatabase } from '../db/client.ts'
9
+ import { runMigrations } from '../db/migrate.ts'
10
+ import * as InternalSchema from '../db/schema/index.ts'
11
+ import { createRegistry } from '../hooks/registry.ts'
12
+ import { createIndexer } from '../indexer/create-indexer.ts'
13
+ import { createLogger } from '../utils/logger.ts'
14
+ import { createExit } from '../utils/shutdown.ts'
15
+ import { globalFlags } from './flags.ts'
16
+ import { loadConfig } from './utils.ts'
17
+
18
+ export const start: Command = command(
19
+ {
20
+ name: 'start',
21
+ flags: { ...globalFlags },
22
+ help: {
23
+ description: 'Start the production server',
24
+ },
25
+ },
26
+ async (argv) => {
27
+ const logger = createLogger({
28
+ level: argv.flags.logLevel,
29
+ mode: 'json',
30
+ })
31
+
32
+ if (process.env.DATABASE_URL == null) {
33
+ logger.error('DATABASE_URL environment variable is not set')
34
+ gracefulExit(1)
35
+ }
36
+
37
+ try {
38
+ const env = createEnv(logger)
39
+ const config = await loadConfig(
40
+ logger,
41
+ argv.flags.root,
42
+ argv.flags.config
43
+ )
44
+
45
+ const dbContext = createDatabase({
46
+ env,
47
+ schema: { ...config.schema, ...InternalSchema.schema },
48
+ relations: { ...config.relations, ...InternalSchema.relations },
49
+ })
50
+
51
+ await runMigrations({
52
+ dbContext,
53
+ folder: path.resolve(argv.flags.root, config.drizzleFolder),
54
+ logger,
55
+ })
56
+
57
+ const registry = createRegistry({ config })
58
+
59
+ const [api, indexer] = await Promise.all([
60
+ createApi({
61
+ db: dbContext.db,
62
+ config,
63
+ logger,
64
+ port: argv.flags.port,
65
+ }),
66
+ createIndexer({
67
+ logger,
68
+ db: dbContext.db,
69
+ registry,
70
+ config,
71
+ }),
72
+ ])
73
+
74
+ createExit({
75
+ logger,
76
+ stop: async () => {
77
+ indexer.stop()
78
+ api.stop()
79
+ await dbContext.stop()
80
+ },
81
+ })
82
+ } catch (error) {
83
+ logger.error({ error }, 'start server failed')
84
+ gracefulExit(1)
85
+ }
86
+ }
87
+ )
package/src/bin/utils.ts CHANGED
@@ -1,50 +1,47 @@
1
1
  import path from 'node:path'
2
- import { pathToFileURL } from 'node:url'
3
- import { type LilconfigResult, lilconfig } from 'lilconfig'
2
+ import {
3
+ type LoadConfigResult,
4
+ loadConfig as unconfigLoadConfig,
5
+ } from 'unconfig'
6
+
4
7
  import type { InternalConfig } from '../config/config'
5
8
  import type { Logger } from '../utils/logger'
6
9
 
7
10
  const CLI_NAME = 'foxer'
8
11
 
9
- const loadEsm = async (filepath: string) => {
10
- const res = await import(pathToFileURL(filepath).href)
11
- return res.default ?? res
12
- }
13
-
14
- const configLoaders = {
15
- '.js': loadEsm,
16
- '.mjs': loadEsm,
17
- '.ts': loadEsm,
18
- '.mts': loadEsm,
19
- }
20
-
21
12
  export async function loadConfig(
22
13
  logger: Logger,
23
14
  root: string,
24
15
  filePath?: string
25
16
  ) {
26
- let configFile: LilconfigResult | undefined
17
+ let configFile: LoadConfigResult<{ config: InternalConfig }> | undefined
27
18
 
28
19
  try {
29
20
  if (filePath) {
30
21
  const configPath = path.resolve(root, filePath)
31
22
 
32
- configFile = await lilconfig(configPath, {
33
- loaders: configLoaders,
34
- searchPlaces: [],
35
- }).load(configPath)
23
+ configFile = await unconfigLoadConfig({
24
+ sources: [
25
+ {
26
+ files: configPath,
27
+ },
28
+ ],
29
+ })
36
30
  } else {
37
- configFile = await lilconfig(CLI_NAME, {
38
- loaders: configLoaders,
39
- searchPlaces: [`${CLI_NAME}.config.ts`, `${CLI_NAME}.config.mts`],
40
- }).search()
31
+ configFile = await unconfigLoadConfig({
32
+ sources: [
33
+ {
34
+ files: `${CLI_NAME}.config`,
35
+ },
36
+ ],
37
+ })
41
38
  }
42
39
  } catch (error) {
43
- logger.error(error, 'config evaluation failed')
40
+ logger.error({ error }, 'config evaluation failed')
44
41
  // ignore
45
42
  }
46
43
 
47
- if (!configFile || configFile.isEmpty) {
44
+ if (!configFile) {
48
45
  logger.error({
49
46
  msg: 'Config file not found',
50
47
  })
@@ -13,6 +13,7 @@ import {
13
13
  type PublicClientConfig,
14
14
  type WebSocketTransport,
15
15
  } from 'viem'
16
+
16
17
  import type { Database } from '../db/client.ts'
17
18
  import type { HookRegistry } from '../hooks/registry.ts'
18
19
  import { createRpcClients, type RpcClients } from '../rpc/client.ts'
package/src/config/env.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import dotenv from 'dotenv'
2
2
  import { z } from 'zod'
3
+
3
4
  import type { Logger } from '../utils/logger'
4
5
 
5
6
  dotenv.config({
6
7
  path: '.env.local',
8
+ quiet: true,
7
9
  })
8
10
 
9
11
  export type Env = z.infer<typeof envSchema>
@@ -15,14 +17,14 @@ const envSchema = z.object({
15
17
  LOG_MODE: z.enum(['pretty', 'json']).default('pretty'),
16
18
  })
17
19
 
18
- export function createEnv(logger: Logger) {
20
+ export function createEnv(_logger: Logger) {
19
21
  const parsed = envSchema.safeParse(process.env)
20
22
 
21
23
  if (!parsed.success) {
22
24
  throw new Error(
23
- `Failed to parse environment variables: \n ${z.flattenError(parsed.error)}`
25
+ `Failed to parse environment variables: \n ${z.prettifyError(parsed.error)}`
24
26
  )
25
27
  }
26
- logger.debug({ env: parsed.data }, 'env parsed')
28
+ // logger.debug({ env: parsed.data }, 'env parsed')
27
29
  return parsed.data
28
30
  }