@zyno-io/dk-server-foundation 26.216.430

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 (663) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +458 -0
  3. package/dist/devconsole/assets/index-CKF3C3kv.css +1 -0
  4. package/dist/devconsole/assets/index-CsHdomhM.js +27 -0
  5. package/dist/devconsole/index.html +13 -0
  6. package/dist/resources/proto/generated/devconsole/devconsole.d.ts +320 -0
  7. package/dist/resources/proto/generated/devconsole/devconsole.d.ts.map +1 -0
  8. package/dist/resources/proto/generated/devconsole/devconsole.js +3751 -0
  9. package/dist/resources/proto/generated/devconsole/devconsole.js.map +1 -0
  10. package/dist/src/app/base.d.ts +36 -0
  11. package/dist/src/app/base.d.ts.map +1 -0
  12. package/dist/src/app/base.js +240 -0
  13. package/dist/src/app/base.js.map +1 -0
  14. package/dist/src/app/config.d.ts +90 -0
  15. package/dist/src/app/config.d.ts.map +1 -0
  16. package/dist/src/app/config.js +33 -0
  17. package/dist/src/app/config.js.map +1 -0
  18. package/dist/src/app/config.loader.d.ts +14 -0
  19. package/dist/src/app/config.loader.d.ts.map +1 -0
  20. package/dist/src/app/config.loader.js +67 -0
  21. package/dist/src/app/config.loader.js.map +1 -0
  22. package/dist/src/app/const.d.ts +3 -0
  23. package/dist/src/app/const.d.ts.map +1 -0
  24. package/dist/src/app/const.js +6 -0
  25. package/dist/src/app/const.js.map +1 -0
  26. package/dist/src/app/dev.d.ts +7 -0
  27. package/dist/src/app/dev.d.ts.map +1 -0
  28. package/dist/src/app/dev.js +105 -0
  29. package/dist/src/app/dev.js.map +1 -0
  30. package/dist/src/app/index.d.ts +7 -0
  31. package/dist/src/app/index.d.ts.map +1 -0
  32. package/dist/src/app/index.js +12 -0
  33. package/dist/src/app/index.js.map +1 -0
  34. package/dist/src/app/openapi.d.ts +4 -0
  35. package/dist/src/app/openapi.d.ts.map +1 -0
  36. package/dist/src/app/openapi.js +6 -0
  37. package/dist/src/app/openapi.js.map +1 -0
  38. package/dist/src/app/resolver.d.ts +11 -0
  39. package/dist/src/app/resolver.d.ts.map +1 -0
  40. package/dist/src/app/resolver.js +60 -0
  41. package/dist/src/app/resolver.js.map +1 -0
  42. package/dist/src/app/shutdown.d.ts +12 -0
  43. package/dist/src/app/shutdown.d.ts.map +1 -0
  44. package/dist/src/app/shutdown.js +63 -0
  45. package/dist/src/app/shutdown.js.map +1 -0
  46. package/dist/src/app/state.d.ts +16 -0
  47. package/dist/src/app/state.d.ts.map +1 -0
  48. package/dist/src/app/state.js +12 -0
  49. package/dist/src/app/state.js.map +1 -0
  50. package/dist/src/auth/index.d.ts +3 -0
  51. package/dist/src/auth/index.d.ts.map +1 -0
  52. package/dist/src/auth/index.js +6 -0
  53. package/dist/src/auth/index.js.map +1 -0
  54. package/dist/src/auth/jwt.d.ts +76 -0
  55. package/dist/src/auth/jwt.d.ts.map +1 -0
  56. package/dist/src/auth/jwt.js +218 -0
  57. package/dist/src/auth/jwt.js.map +1 -0
  58. package/dist/src/auth/provider.d.ts +15 -0
  59. package/dist/src/auth/provider.d.ts.map +1 -0
  60. package/dist/src/auth/provider.js +50 -0
  61. package/dist/src/auth/provider.js.map +1 -0
  62. package/dist/src/cli/dksf-dev.d.ts +3 -0
  63. package/dist/src/cli/dksf-dev.d.ts.map +1 -0
  64. package/dist/src/cli/dksf-dev.js +408 -0
  65. package/dist/src/cli/dksf-dev.js.map +1 -0
  66. package/dist/src/cli/dksf-gen-proto.d.ts +3 -0
  67. package/dist/src/cli/dksf-gen-proto.d.ts.map +1 -0
  68. package/dist/src/cli/dksf-gen-proto.js +164 -0
  69. package/dist/src/cli/dksf-gen-proto.js.map +1 -0
  70. package/dist/src/cli/dksf-install.d.ts +3 -0
  71. package/dist/src/cli/dksf-install.d.ts.map +1 -0
  72. package/dist/src/cli/dksf-install.js +10 -0
  73. package/dist/src/cli/dksf-install.js.map +1 -0
  74. package/dist/src/cli/dksf-test.d.ts +3 -0
  75. package/dist/src/cli/dksf-test.d.ts.map +1 -0
  76. package/dist/src/cli/dksf-test.js +78 -0
  77. package/dist/src/cli/dksf-test.js.map +1 -0
  78. package/dist/src/cli/dksf-update.d.ts +3 -0
  79. package/dist/src/cli/dksf-update.d.ts.map +1 -0
  80. package/dist/src/cli/dksf-update.js +86 -0
  81. package/dist/src/cli/dksf-update.js.map +1 -0
  82. package/dist/src/database/common.d.ts +84 -0
  83. package/dist/src/database/common.d.ts.map +1 -0
  84. package/dist/src/database/common.js +380 -0
  85. package/dist/src/database/common.js.map +1 -0
  86. package/dist/src/database/dialect.d.ts +10 -0
  87. package/dist/src/database/dialect.d.ts.map +1 -0
  88. package/dist/src/database/dialect.js +56 -0
  89. package/dist/src/database/dialect.js.map +1 -0
  90. package/dist/src/database/entity.d.ts +62 -0
  91. package/dist/src/database/entity.d.ts.map +1 -0
  92. package/dist/src/database/entity.js +198 -0
  93. package/dist/src/database/entity.js.map +1 -0
  94. package/dist/src/database/index.d.ts +8 -0
  95. package/dist/src/database/index.d.ts.map +1 -0
  96. package/dist/src/database/index.js +15 -0
  97. package/dist/src/database/index.js.map +1 -0
  98. package/dist/src/database/migration/MigrationResetCommand.d.ts +9 -0
  99. package/dist/src/database/migration/MigrationResetCommand.d.ts.map +1 -0
  100. package/dist/src/database/migration/MigrationResetCommand.js +75 -0
  101. package/dist/src/database/migration/MigrationResetCommand.js.map +1 -0
  102. package/dist/src/database/migration/MigrationRunCommand.d.ts +11 -0
  103. package/dist/src/database/migration/MigrationRunCommand.d.ts.map +1 -0
  104. package/dist/src/database/migration/MigrationRunCommand.js +118 -0
  105. package/dist/src/database/migration/MigrationRunCommand.js.map +1 -0
  106. package/dist/src/database/migration/characters.d.ts +14 -0
  107. package/dist/src/database/migration/characters.d.ts.map +1 -0
  108. package/dist/src/database/migration/characters.js +56 -0
  109. package/dist/src/database/migration/characters.js.map +1 -0
  110. package/dist/src/database/migration/create/MigrationCreateCommand.d.ts +11 -0
  111. package/dist/src/database/migration/create/MigrationCreateCommand.d.ts.map +1 -0
  112. package/dist/src/database/migration/create/MigrationCreateCommand.js +106 -0
  113. package/dist/src/database/migration/create/MigrationCreateCommand.js.map +1 -0
  114. package/dist/src/database/migration/create/comparator.d.ts +3 -0
  115. package/dist/src/database/migration/create/comparator.d.ts.map +1 -0
  116. package/dist/src/database/migration/create/comparator.js +408 -0
  117. package/dist/src/database/migration/create/comparator.js.map +1 -0
  118. package/dist/src/database/migration/create/db-reader.d.ts +5 -0
  119. package/dist/src/database/migration/create/db-reader.d.ts.map +1 -0
  120. package/dist/src/database/migration/create/db-reader.js +473 -0
  121. package/dist/src/database/migration/create/db-reader.js.map +1 -0
  122. package/dist/src/database/migration/create/ddl-generator.d.ts +3 -0
  123. package/dist/src/database/migration/create/ddl-generator.d.ts.map +1 -0
  124. package/dist/src/database/migration/create/ddl-generator.js +725 -0
  125. package/dist/src/database/migration/create/ddl-generator.js.map +1 -0
  126. package/dist/src/database/migration/create/entity-reader.d.ts +4 -0
  127. package/dist/src/database/migration/create/entity-reader.d.ts.map +1 -0
  128. package/dist/src/database/migration/create/entity-reader.js +417 -0
  129. package/dist/src/database/migration/create/entity-reader.js.map +1 -0
  130. package/dist/src/database/migration/create/file-generator.d.ts +3 -0
  131. package/dist/src/database/migration/create/file-generator.d.ts.map +1 -0
  132. package/dist/src/database/migration/create/file-generator.js +62 -0
  133. package/dist/src/database/migration/create/file-generator.js.map +1 -0
  134. package/dist/src/database/migration/create/prompt.d.ts +4 -0
  135. package/dist/src/database/migration/create/prompt.d.ts.map +1 -0
  136. package/dist/src/database/migration/create/prompt.js +55 -0
  137. package/dist/src/database/migration/create/prompt.js.map +1 -0
  138. package/dist/src/database/migration/create/schema-model.d.ts +109 -0
  139. package/dist/src/database/migration/create/schema-model.d.ts.map +1 -0
  140. package/dist/src/database/migration/create/schema-model.js +24 -0
  141. package/dist/src/database/migration/create/schema-model.js.map +1 -0
  142. package/dist/src/database/migration/helpers.d.ts +3 -0
  143. package/dist/src/database/migration/helpers.d.ts.map +1 -0
  144. package/dist/src/database/migration/helpers.js +13 -0
  145. package/dist/src/database/migration/helpers.js.map +1 -0
  146. package/dist/src/database/migration/index.d.ts +9 -0
  147. package/dist/src/database/migration/index.d.ts.map +1 -0
  148. package/dist/src/database/migration/index.js +43 -0
  149. package/dist/src/database/migration/index.js.map +1 -0
  150. package/dist/src/database/migration/migration.entity.d.ts +8 -0
  151. package/dist/src/database/migration/migration.entity.d.ts.map +1 -0
  152. package/dist/src/database/migration/migration.entity.js +16 -0
  153. package/dist/src/database/migration/migration.entity.js.map +1 -0
  154. package/dist/src/database/mysql.d.ts +16 -0
  155. package/dist/src/database/mysql.d.ts.map +1 -0
  156. package/dist/src/database/mysql.js +140 -0
  157. package/dist/src/database/mysql.js.map +1 -0
  158. package/dist/src/database/postgres.d.ts +16 -0
  159. package/dist/src/database/postgres.d.ts.map +1 -0
  160. package/dist/src/database/postgres.js +91 -0
  161. package/dist/src/database/postgres.js.map +1 -0
  162. package/dist/src/database/types.d.ts +21 -0
  163. package/dist/src/database/types.d.ts.map +1 -0
  164. package/dist/src/database/types.js +27 -0
  165. package/dist/src/database/types.js.map +1 -0
  166. package/dist/src/devconsole/devconsole.controller.d.ts +7 -0
  167. package/dist/src/devconsole/devconsole.controller.d.ts.map +1 -0
  168. package/dist/src/devconsole/devconsole.controller.js +82 -0
  169. package/dist/src/devconsole/devconsole.controller.js.map +1 -0
  170. package/dist/src/devconsole/devconsole.middleware.d.ts +12 -0
  171. package/dist/src/devconsole/devconsole.middleware.d.ts.map +1 -0
  172. package/dist/src/devconsole/devconsole.middleware.js +28 -0
  173. package/dist/src/devconsole/devconsole.middleware.js.map +1 -0
  174. package/dist/src/devconsole/devconsole.srpc.d.ts +14 -0
  175. package/dist/src/devconsole/devconsole.srpc.d.ts.map +1 -0
  176. package/dist/src/devconsole/devconsole.srpc.js +94 -0
  177. package/dist/src/devconsole/devconsole.srpc.js.map +1 -0
  178. package/dist/src/devconsole/devconsole.store.d.ts +101 -0
  179. package/dist/src/devconsole/devconsole.store.d.ts.map +1 -0
  180. package/dist/src/devconsole/devconsole.store.js +125 -0
  181. package/dist/src/devconsole/devconsole.store.js.map +1 -0
  182. package/dist/src/devconsole/devconsole.ws.d.ts +18 -0
  183. package/dist/src/devconsole/devconsole.ws.d.ts.map +1 -0
  184. package/dist/src/devconsole/devconsole.ws.js +470 -0
  185. package/dist/src/devconsole/devconsole.ws.js.map +1 -0
  186. package/dist/src/devconsole/index.d.ts +2 -0
  187. package/dist/src/devconsole/index.d.ts.map +1 -0
  188. package/dist/src/devconsole/index.js +6 -0
  189. package/dist/src/devconsole/index.js.map +1 -0
  190. package/dist/src/devconsole/patches.d.ts +6 -0
  191. package/dist/src/devconsole/patches.d.ts.map +1 -0
  192. package/dist/src/devconsole/patches.js +397 -0
  193. package/dist/src/devconsole/patches.js.map +1 -0
  194. package/dist/src/health/health.module.d.ts +6 -0
  195. package/dist/src/health/health.module.d.ts.map +1 -0
  196. package/dist/src/health/health.module.js +32 -0
  197. package/dist/src/health/health.module.js.map +1 -0
  198. package/dist/src/health/healthcheck.controller.d.ts +10 -0
  199. package/dist/src/health/healthcheck.controller.d.ts.map +1 -0
  200. package/dist/src/health/healthcheck.controller.js +30 -0
  201. package/dist/src/health/healthcheck.controller.js.map +1 -0
  202. package/dist/src/health/healthcheck.service.d.ts +13 -0
  203. package/dist/src/health/healthcheck.service.d.ts.map +1 -0
  204. package/dist/src/health/healthcheck.service.js +33 -0
  205. package/dist/src/health/healthcheck.service.js.map +1 -0
  206. package/dist/src/health/index.d.ts +3 -0
  207. package/dist/src/health/index.d.ts.map +1 -0
  208. package/dist/src/health/index.js +6 -0
  209. package/dist/src/health/index.js.map +1 -0
  210. package/dist/src/helpers/async/context.d.ts +11 -0
  211. package/dist/src/helpers/async/context.d.ts.map +1 -0
  212. package/dist/src/helpers/async/context.js +75 -0
  213. package/dist/src/helpers/async/context.js.map +1 -0
  214. package/dist/src/helpers/async/process.d.ts +16 -0
  215. package/dist/src/helpers/async/process.d.ts.map +1 -0
  216. package/dist/src/helpers/async/process.js +44 -0
  217. package/dist/src/helpers/async/process.js.map +1 -0
  218. package/dist/src/helpers/async/promise.d.ts +5 -0
  219. package/dist/src/helpers/async/promise.d.ts.map +1 -0
  220. package/dist/src/helpers/async/promise.js +27 -0
  221. package/dist/src/helpers/async/promise.js.map +1 -0
  222. package/dist/src/helpers/data/array.d.ts +3 -0
  223. package/dist/src/helpers/data/array.d.ts.map +1 -0
  224. package/dist/src/helpers/data/array.js +17 -0
  225. package/dist/src/helpers/data/array.js.map +1 -0
  226. package/dist/src/helpers/data/objects.d.ts +12 -0
  227. package/dist/src/helpers/data/objects.d.ts.map +1 -0
  228. package/dist/src/helpers/data/objects.js +75 -0
  229. package/dist/src/helpers/data/objects.js.map +1 -0
  230. package/dist/src/helpers/data/serialization.d.ts +4 -0
  231. package/dist/src/helpers/data/serialization.d.ts.map +1 -0
  232. package/dist/src/helpers/data/serialization.js +15 -0
  233. package/dist/src/helpers/data/serialization.js.map +1 -0
  234. package/dist/src/helpers/data/transformer.d.ts +13 -0
  235. package/dist/src/helpers/data/transformer.d.ts.map +1 -0
  236. package/dist/src/helpers/data/transformer.js +55 -0
  237. package/dist/src/helpers/data/transformer.js.map +1 -0
  238. package/dist/src/helpers/framework/decorators.d.ts +5 -0
  239. package/dist/src/helpers/framework/decorators.d.ts.map +1 -0
  240. package/dist/src/helpers/framework/decorators.js +39 -0
  241. package/dist/src/helpers/framework/decorators.js.map +1 -0
  242. package/dist/src/helpers/framework/event.d.ts +3 -0
  243. package/dist/src/helpers/framework/event.d.ts.map +1 -0
  244. package/dist/src/helpers/framework/event.js +20 -0
  245. package/dist/src/helpers/framework/event.js.map +1 -0
  246. package/dist/src/helpers/framework/injection.d.ts +7 -0
  247. package/dist/src/helpers/framework/injection.d.ts.map +1 -0
  248. package/dist/src/helpers/framework/injection.js +52 -0
  249. package/dist/src/helpers/framework/injection.js.map +1 -0
  250. package/dist/src/helpers/index.d.ts +22 -0
  251. package/dist/src/helpers/index.d.ts.map +1 -0
  252. package/dist/src/helpers/index.js +32 -0
  253. package/dist/src/helpers/index.js.map +1 -0
  254. package/dist/src/helpers/io/package.d.ts +5 -0
  255. package/dist/src/helpers/io/package.d.ts.map +1 -0
  256. package/dist/src/helpers/io/package.js +31 -0
  257. package/dist/src/helpers/io/package.js.map +1 -0
  258. package/dist/src/helpers/io/stream.d.ts +18 -0
  259. package/dist/src/helpers/io/stream.d.ts.map +1 -0
  260. package/dist/src/helpers/io/stream.js +91 -0
  261. package/dist/src/helpers/io/stream.js.map +1 -0
  262. package/dist/src/helpers/redis/broadcast.d.ts +13 -0
  263. package/dist/src/helpers/redis/broadcast.d.ts.map +1 -0
  264. package/dist/src/helpers/redis/broadcast.js +100 -0
  265. package/dist/src/helpers/redis/broadcast.js.map +1 -0
  266. package/dist/src/helpers/redis/cache.d.ts +7 -0
  267. package/dist/src/helpers/redis/cache.d.ts.map +1 -0
  268. package/dist/src/helpers/redis/cache.js +28 -0
  269. package/dist/src/helpers/redis/cache.js.map +1 -0
  270. package/dist/src/helpers/redis/mutex.d.ts +24 -0
  271. package/dist/src/helpers/redis/mutex.d.ts.map +1 -0
  272. package/dist/src/helpers/redis/mutex.js +240 -0
  273. package/dist/src/helpers/redis/mutex.js.map +1 -0
  274. package/dist/src/helpers/redis/redis.d.ts +11 -0
  275. package/dist/src/helpers/redis/redis.d.ts.map +1 -0
  276. package/dist/src/helpers/redis/redis.js +59 -0
  277. package/dist/src/helpers/redis/redis.js.map +1 -0
  278. package/dist/src/helpers/security/crypto.d.ts +26 -0
  279. package/dist/src/helpers/security/crypto.d.ts.map +1 -0
  280. package/dist/src/helpers/security/crypto.js +121 -0
  281. package/dist/src/helpers/security/crypto.js.map +1 -0
  282. package/dist/src/helpers/security/validation.d.ts +4 -0
  283. package/dist/src/helpers/security/validation.d.ts.map +1 -0
  284. package/dist/src/helpers/security/validation.js +25 -0
  285. package/dist/src/helpers/security/validation.js.map +1 -0
  286. package/dist/src/helpers/utils/date.d.ts +4 -0
  287. package/dist/src/helpers/utils/date.d.ts.map +1 -0
  288. package/dist/src/helpers/utils/date.js +23 -0
  289. package/dist/src/helpers/utils/date.js.map +1 -0
  290. package/dist/src/helpers/utils/error.d.ts +24 -0
  291. package/dist/src/helpers/utils/error.d.ts.map +1 -0
  292. package/dist/src/helpers/utils/error.js +168 -0
  293. package/dist/src/helpers/utils/error.js.map +1 -0
  294. package/dist/src/helpers/utils/jsx.d.ts +3 -0
  295. package/dist/src/helpers/utils/jsx.d.ts.map +1 -0
  296. package/dist/src/helpers/utils/jsx.js +13 -0
  297. package/dist/src/helpers/utils/jsx.js.map +1 -0
  298. package/dist/src/helpers/utils/uuid.d.ts +3 -0
  299. package/dist/src/helpers/utils/uuid.d.ts.map +1 -0
  300. package/dist/src/helpers/utils/uuid.js +14 -0
  301. package/dist/src/helpers/utils/uuid.js.map +1 -0
  302. package/dist/src/http/auth.d.ts +46 -0
  303. package/dist/src/http/auth.d.ts.map +1 -0
  304. package/dist/src/http/auth.js +162 -0
  305. package/dist/src/http/auth.js.map +1 -0
  306. package/dist/src/http/context.d.ts +5 -0
  307. package/dist/src/http/context.d.ts.map +1 -0
  308. package/dist/src/http/context.js +22 -0
  309. package/dist/src/http/context.js.map +1 -0
  310. package/dist/src/http/cors.d.ts +36 -0
  311. package/dist/src/http/cors.d.ts.map +1 -0
  312. package/dist/src/http/cors.js +171 -0
  313. package/dist/src/http/cors.js.map +1 -0
  314. package/dist/src/http/errors.d.ts +3 -0
  315. package/dist/src/http/errors.d.ts.map +1 -0
  316. package/dist/src/http/errors.js +10 -0
  317. package/dist/src/http/errors.js.map +1 -0
  318. package/dist/src/http/index.d.ts +24 -0
  319. package/dist/src/http/index.d.ts.map +1 -0
  320. package/dist/src/http/index.js +25 -0
  321. package/dist/src/http/index.js.map +1 -0
  322. package/dist/src/http/kernel.d.ts +17 -0
  323. package/dist/src/http/kernel.d.ts.map +1 -0
  324. package/dist/src/http/kernel.js +133 -0
  325. package/dist/src/http/kernel.js.map +1 -0
  326. package/dist/src/http/middleware.d.ts +12 -0
  327. package/dist/src/http/middleware.d.ts.map +1 -0
  328. package/dist/src/http/middleware.js +61 -0
  329. package/dist/src/http/middleware.js.map +1 -0
  330. package/dist/src/http/overrides.d.ts +2 -0
  331. package/dist/src/http/overrides.d.ts.map +1 -0
  332. package/dist/src/http/overrides.js +19 -0
  333. package/dist/src/http/overrides.js.map +1 -0
  334. package/dist/src/http/store.d.ts +33 -0
  335. package/dist/src/http/store.d.ts.map +1 -0
  336. package/dist/src/http/store.js +102 -0
  337. package/dist/src/http/store.js.map +1 -0
  338. package/dist/src/http/uploads.d.ts +7 -0
  339. package/dist/src/http/uploads.d.ts.map +1 -0
  340. package/dist/src/http/uploads.js +8 -0
  341. package/dist/src/http/uploads.js.map +1 -0
  342. package/dist/src/http/workflow.d.ts +18 -0
  343. package/dist/src/http/workflow.d.ts.map +1 -0
  344. package/dist/src/http/workflow.js +181 -0
  345. package/dist/src/http/workflow.js.map +1 -0
  346. package/dist/src/index.d.ts +13 -0
  347. package/dist/src/index.d.ts.map +1 -0
  348. package/dist/src/index.js +25 -0
  349. package/dist/src/index.js.map +1 -0
  350. package/dist/src/services/cli/invoke.d.ts +5 -0
  351. package/dist/src/services/cli/invoke.d.ts.map +1 -0
  352. package/dist/src/services/cli/invoke.js +45 -0
  353. package/dist/src/services/cli/invoke.js.map +1 -0
  354. package/dist/src/services/cli/repl-context.d.ts +13 -0
  355. package/dist/src/services/cli/repl-context.d.ts.map +1 -0
  356. package/dist/src/services/cli/repl-context.js +60 -0
  357. package/dist/src/services/cli/repl-context.js.map +1 -0
  358. package/dist/src/services/cli/repl.d.ts +5 -0
  359. package/dist/src/services/cli/repl.d.ts.map +1 -0
  360. package/dist/src/services/cli/repl.js +32 -0
  361. package/dist/src/services/cli/repl.js.map +1 -0
  362. package/dist/src/services/cli.d.ts +12 -0
  363. package/dist/src/services/cli.d.ts.map +1 -0
  364. package/dist/src/services/cli.js +76 -0
  365. package/dist/src/services/cli.js.map +1 -0
  366. package/dist/src/services/index.d.ts +7 -0
  367. package/dist/src/services/index.d.ts.map +1 -0
  368. package/dist/src/services/index.js +10 -0
  369. package/dist/src/services/index.js.map +1 -0
  370. package/dist/src/services/leader.d.ts +32 -0
  371. package/dist/src/services/leader.d.ts.map +1 -0
  372. package/dist/src/services/leader.js +174 -0
  373. package/dist/src/services/leader.js.map +1 -0
  374. package/dist/src/services/logger.d.ts +35 -0
  375. package/dist/src/services/logger.d.ts.map +1 -0
  376. package/dist/src/services/logger.js +245 -0
  377. package/dist/src/services/logger.js.map +1 -0
  378. package/dist/src/services/mail/index.d.ts +61 -0
  379. package/dist/src/services/mail/index.d.ts.map +1 -0
  380. package/dist/src/services/mail/index.js +90 -0
  381. package/dist/src/services/mail/index.js.map +1 -0
  382. package/dist/src/services/mail/postmark.d.ts +11 -0
  383. package/dist/src/services/mail/postmark.d.ts.map +1 -0
  384. package/dist/src/services/mail/postmark.js +42 -0
  385. package/dist/src/services/mail/postmark.js.map +1 -0
  386. package/dist/src/services/mail/smtp.d.ts +11 -0
  387. package/dist/src/services/mail/smtp.d.ts.map +1 -0
  388. package/dist/src/services/mail/smtp.js +61 -0
  389. package/dist/src/services/mail/smtp.js.map +1 -0
  390. package/dist/src/services/mesh.d.ts +65 -0
  391. package/dist/src/services/mesh.d.ts.map +1 -0
  392. package/dist/src/services/mesh.js +422 -0
  393. package/dist/src/services/mesh.js.map +1 -0
  394. package/dist/src/services/worker/bootstrap.d.ts +3 -0
  395. package/dist/src/services/worker/bootstrap.d.ts.map +1 -0
  396. package/dist/src/services/worker/bootstrap.js +64 -0
  397. package/dist/src/services/worker/bootstrap.js.map +1 -0
  398. package/dist/src/services/worker/cli.d.ts +11 -0
  399. package/dist/src/services/worker/cli.d.ts.map +1 -0
  400. package/dist/src/services/worker/cli.js +43 -0
  401. package/dist/src/services/worker/cli.js.map +1 -0
  402. package/dist/src/services/worker/entity.d.ts +18 -0
  403. package/dist/src/services/worker/entity.d.ts.map +1 -0
  404. package/dist/src/services/worker/entity.js +16 -0
  405. package/dist/src/services/worker/entity.js.map +1 -0
  406. package/dist/src/services/worker/index.d.ts +9 -0
  407. package/dist/src/services/worker/index.d.ts.map +1 -0
  408. package/dist/src/services/worker/index.js +40 -0
  409. package/dist/src/services/worker/index.js.map +1 -0
  410. package/dist/src/services/worker/queue.d.ts +8 -0
  411. package/dist/src/services/worker/queue.d.ts.map +1 -0
  412. package/dist/src/services/worker/queue.js +32 -0
  413. package/dist/src/services/worker/queue.js.map +1 -0
  414. package/dist/src/services/worker/recorder.d.ts +16 -0
  415. package/dist/src/services/worker/recorder.d.ts.map +1 -0
  416. package/dist/src/services/worker/recorder.js +168 -0
  417. package/dist/src/services/worker/recorder.js.map +1 -0
  418. package/dist/src/services/worker/runner.d.ts +21 -0
  419. package/dist/src/services/worker/runner.d.ts.map +1 -0
  420. package/dist/src/services/worker/runner.js +156 -0
  421. package/dist/src/services/worker/runner.js.map +1 -0
  422. package/dist/src/services/worker/types.d.ts +26 -0
  423. package/dist/src/services/worker/types.d.ts.map +1 -0
  424. package/dist/src/services/worker/types.js +29 -0
  425. package/dist/src/services/worker/types.js.map +1 -0
  426. package/dist/src/srpc/SrpcByteStream.d.ts +67 -0
  427. package/dist/src/srpc/SrpcByteStream.d.ts.map +1 -0
  428. package/dist/src/srpc/SrpcByteStream.js +319 -0
  429. package/dist/src/srpc/SrpcByteStream.js.map +1 -0
  430. package/dist/src/srpc/SrpcClient.d.ts +75 -0
  431. package/dist/src/srpc/SrpcClient.d.ts.map +1 -0
  432. package/dist/src/srpc/SrpcClient.js +445 -0
  433. package/dist/src/srpc/SrpcClient.js.map +1 -0
  434. package/dist/src/srpc/SrpcServer.d.ts +80 -0
  435. package/dist/src/srpc/SrpcServer.d.ts.map +1 -0
  436. package/dist/src/srpc/SrpcServer.js +561 -0
  437. package/dist/src/srpc/SrpcServer.js.map +1 -0
  438. package/dist/src/srpc/index.d.ts +7 -0
  439. package/dist/src/srpc/index.d.ts.map +1 -0
  440. package/dist/src/srpc/index.js +12 -0
  441. package/dist/src/srpc/index.js.map +1 -0
  442. package/dist/src/srpc/types.d.ts +131 -0
  443. package/dist/src/srpc/types.d.ts.map +1 -0
  444. package/dist/src/srpc/types.js +65 -0
  445. package/dist/src/srpc/types.js.map +1 -0
  446. package/dist/src/telemetry/index.d.ts +2 -0
  447. package/dist/src/telemetry/index.d.ts.map +1 -0
  448. package/dist/src/telemetry/index.js +5 -0
  449. package/dist/src/telemetry/index.js.map +1 -0
  450. package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts +22 -0
  451. package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts.map +1 -0
  452. package/dist/src/telemetry/otel/MariaDBInstrumentation.js +248 -0
  453. package/dist/src/telemetry/otel/MariaDBInstrumentation.js.map +1 -0
  454. package/dist/src/telemetry/otel/helpers.d.ts +27 -0
  455. package/dist/src/telemetry/otel/helpers.d.ts.map +1 -0
  456. package/dist/src/telemetry/otel/helpers.js +126 -0
  457. package/dist/src/telemetry/otel/helpers.js.map +1 -0
  458. package/dist/src/telemetry/otel/index.d.ts +14 -0
  459. package/dist/src/telemetry/otel/index.d.ts.map +1 -0
  460. package/dist/src/telemetry/otel/index.js +132 -0
  461. package/dist/src/telemetry/otel/index.js.map +1 -0
  462. package/dist/src/telemetry/otel/metrics.controller.d.ts +6 -0
  463. package/dist/src/telemetry/otel/metrics.controller.d.ts.map +1 -0
  464. package/dist/src/telemetry/otel/metrics.controller.js +63 -0
  465. package/dist/src/telemetry/otel/metrics.controller.js.map +1 -0
  466. package/dist/src/telemetry/sentry.d.ts +9 -0
  467. package/dist/src/telemetry/sentry.d.ts.map +1 -0
  468. package/dist/src/telemetry/sentry.js +62 -0
  469. package/dist/src/telemetry/sentry.js.map +1 -0
  470. package/dist/src/testing/expect.d.ts +25 -0
  471. package/dist/src/testing/expect.d.ts.map +1 -0
  472. package/dist/src/testing/expect.js +151 -0
  473. package/dist/src/testing/expect.js.map +1 -0
  474. package/dist/src/testing/fixtures.d.ts +19 -0
  475. package/dist/src/testing/fixtures.d.ts.map +1 -0
  476. package/dist/src/testing/fixtures.js +69 -0
  477. package/dist/src/testing/fixtures.js.map +1 -0
  478. package/dist/src/testing/index.d.ts +260 -0
  479. package/dist/src/testing/index.d.ts.map +1 -0
  480. package/dist/src/testing/index.js +345 -0
  481. package/dist/src/testing/index.js.map +1 -0
  482. package/dist/src/testing/requests.d.ts +10 -0
  483. package/dist/src/testing/requests.d.ts.map +1 -0
  484. package/dist/src/testing/requests.js +56 -0
  485. package/dist/src/testing/requests.js.map +1 -0
  486. package/dist/src/testing/sql.d.ts +11 -0
  487. package/dist/src/testing/sql.d.ts.map +1 -0
  488. package/dist/src/testing/sql.js +55 -0
  489. package/dist/src/testing/sql.js.map +1 -0
  490. package/dist/src/types/index.d.ts +57 -0
  491. package/dist/src/types/index.d.ts.map +1 -0
  492. package/dist/src/types/index.js +73 -0
  493. package/dist/src/types/index.js.map +1 -0
  494. package/dist/src/types/phone.d.ts +11 -0
  495. package/dist/src/types/phone.d.ts.map +1 -0
  496. package/dist/src/types/phone.js +73 -0
  497. package/dist/src/types/phone.js.map +1 -0
  498. package/docs/.vitepress/config.mts +79 -0
  499. package/docs/.yarnrc.yml +1 -0
  500. package/docs/content/CONTRIBUTING.md +140 -0
  501. package/docs/content/README-DEV.md +142 -0
  502. package/docs/content/README.md +39 -0
  503. package/docs/content/authentication.md +215 -0
  504. package/docs/content/cli.md +335 -0
  505. package/docs/content/configuration.md +175 -0
  506. package/docs/content/database.md +422 -0
  507. package/docs/content/devconsole.md +123 -0
  508. package/docs/content/getting-started.md +154 -0
  509. package/docs/content/guides/test-migration-guide.md +351 -0
  510. package/docs/content/health.md +54 -0
  511. package/docs/content/helpers.md +322 -0
  512. package/docs/content/http.md +253 -0
  513. package/docs/content/index.md +147 -0
  514. package/docs/content/leader-service.md +98 -0
  515. package/docs/content/logging.md +150 -0
  516. package/docs/content/mail.md +161 -0
  517. package/docs/content/mesh-service.md +204 -0
  518. package/docs/content/public/images/devconsole/01-dashboard.png +0 -0
  519. package/docs/content/public/images/devconsole/02-routes.png +0 -0
  520. package/docs/content/public/images/devconsole/03-openapi.png +0 -0
  521. package/docs/content/public/images/devconsole/04-requests.png +0 -0
  522. package/docs/content/public/images/devconsole/05-srpc.png +0 -0
  523. package/docs/content/public/images/devconsole/06-database.png +0 -0
  524. package/docs/content/public/images/devconsole/07-health.png +0 -0
  525. package/docs/content/public/images/devconsole/08-mutex.png +0 -0
  526. package/docs/content/public/images/devconsole/09-repl.png +0 -0
  527. package/docs/content/public/images/devconsole/10-workers.png +0 -0
  528. package/docs/content/redis.md +168 -0
  529. package/docs/content/srpc.md +261 -0
  530. package/docs/content/telemetry.md +166 -0
  531. package/docs/content/testing.md +222 -0
  532. package/docs/content/types.md +215 -0
  533. package/docs/content/worker.md +177 -0
  534. package/docs/package.json +16 -0
  535. package/docs/scripts/README-SCREENSHOTS.md +145 -0
  536. package/docs/scripts/capture-devconsole-screenshots.js +184 -0
  537. package/docs/yarn.lock +2408 -0
  538. package/package.json +144 -0
  539. package/patches/@deepkit+type+1.0.19.patch +38 -0
  540. package/patches/deepkit-openapi-core+0.0.9.patch +62 -0
  541. package/src/app/base.ts +253 -0
  542. package/src/app/config.loader.ts +66 -0
  543. package/src/app/config.ts +119 -0
  544. package/src/app/const.ts +4 -0
  545. package/src/app/dev.ts +92 -0
  546. package/src/app/index.ts +6 -0
  547. package/src/app/openapi.ts +3 -0
  548. package/src/app/resolver.ts +49 -0
  549. package/src/app/shutdown.ts +55 -0
  550. package/src/app/state.ts +19 -0
  551. package/src/auth/index.ts +2 -0
  552. package/src/auth/jwt.ts +275 -0
  553. package/src/auth/provider.ts +57 -0
  554. package/src/cli/dksf-dev.ts +416 -0
  555. package/src/cli/dksf-gen-proto.ts +176 -0
  556. package/src/cli/dksf-install.ts +11 -0
  557. package/src/cli/dksf-test.ts +84 -0
  558. package/src/cli/dksf-update.ts +101 -0
  559. package/src/database/common.ts +385 -0
  560. package/src/database/dialect.ts +43 -0
  561. package/src/database/entity.ts +285 -0
  562. package/src/database/index.ts +7 -0
  563. package/src/database/migration/MigrationResetCommand.ts +72 -0
  564. package/src/database/migration/MigrationRunCommand.ts +118 -0
  565. package/src/database/migration/characters.ts +53 -0
  566. package/src/database/migration/create/MigrationCreateCommand.ts +96 -0
  567. package/src/database/migration/create/comparator.ts +467 -0
  568. package/src/database/migration/create/db-reader.ts +510 -0
  569. package/src/database/migration/create/ddl-generator.ts +755 -0
  570. package/src/database/migration/create/entity-reader.ts +471 -0
  571. package/src/database/migration/create/file-generator.ts +57 -0
  572. package/src/database/migration/create/prompt.ts +49 -0
  573. package/src/database/migration/create/schema-model.ts +102 -0
  574. package/src/database/migration/helpers.ts +7 -0
  575. package/src/database/migration/index.ts +35 -0
  576. package/src/database/migration/migration.entity.ts +10 -0
  577. package/src/database/mysql.ts +140 -0
  578. package/src/database/postgres.ts +97 -0
  579. package/src/database/types.ts +18 -0
  580. package/src/devconsole/devconsole.controller.ts +59 -0
  581. package/src/devconsole/devconsole.middleware.ts +23 -0
  582. package/src/devconsole/devconsole.srpc.ts +94 -0
  583. package/src/devconsole/devconsole.store.ts +190 -0
  584. package/src/devconsole/devconsole.ws.ts +491 -0
  585. package/src/devconsole/index.ts +1 -0
  586. package/src/devconsole/patches.ts +428 -0
  587. package/src/health/health.module.ts +30 -0
  588. package/src/health/healthcheck.controller.ts +17 -0
  589. package/src/health/healthcheck.service.ts +28 -0
  590. package/src/health/index.ts +2 -0
  591. package/src/helpers/async/context.ts +67 -0
  592. package/src/helpers/async/process.ts +49 -0
  593. package/src/helpers/async/promise.ts +16 -0
  594. package/src/helpers/data/array.ts +11 -0
  595. package/src/helpers/data/objects.ts +64 -0
  596. package/src/helpers/data/serialization.ts +11 -0
  597. package/src/helpers/data/transformer.ts +54 -0
  598. package/src/helpers/framework/decorators.ts +27 -0
  599. package/src/helpers/framework/event.ts +11 -0
  600. package/src/helpers/framework/injection.ts +47 -0
  601. package/src/helpers/index.ts +34 -0
  602. package/src/helpers/io/package.ts +26 -0
  603. package/src/helpers/io/stream.ts +79 -0
  604. package/src/helpers/redis/broadcast.ts +96 -0
  605. package/src/helpers/redis/cache.ts +28 -0
  606. package/src/helpers/redis/mutex.ts +260 -0
  607. package/src/helpers/redis/redis.ts +60 -0
  608. package/src/helpers/security/crypto.ts +133 -0
  609. package/src/helpers/security/validation.ts +16 -0
  610. package/src/helpers/utils/date.ts +13 -0
  611. package/src/helpers/utils/error.ts +155 -0
  612. package/src/helpers/utils/jsx.ts +8 -0
  613. package/src/helpers/utils/uuid.ts +8 -0
  614. package/src/http/auth.ts +156 -0
  615. package/src/http/context.ts +15 -0
  616. package/src/http/cors.ts +159 -0
  617. package/src/http/errors.ts +9 -0
  618. package/src/http/index.ts +19 -0
  619. package/src/http/kernel.ts +138 -0
  620. package/src/http/middleware.ts +59 -0
  621. package/src/http/overrides.ts +20 -0
  622. package/src/http/store.ts +86 -0
  623. package/src/http/uploads.ts +6 -0
  624. package/src/http/workflow.ts +167 -0
  625. package/src/index.ts +19 -0
  626. package/src/services/cli/invoke.ts +39 -0
  627. package/src/services/cli/repl-context.ts +63 -0
  628. package/src/services/cli/repl.ts +22 -0
  629. package/src/services/cli.ts +74 -0
  630. package/src/services/index.ts +6 -0
  631. package/src/services/leader.ts +201 -0
  632. package/src/services/logger.ts +258 -0
  633. package/src/services/mail/index.ts +117 -0
  634. package/src/services/mail/postmark.ts +37 -0
  635. package/src/services/mail/smtp.ts +46 -0
  636. package/src/services/mesh.ts +508 -0
  637. package/src/services/worker/bootstrap.ts +53 -0
  638. package/src/services/worker/cli.ts +32 -0
  639. package/src/services/worker/entity.ts +22 -0
  640. package/src/services/worker/index.ts +30 -0
  641. package/src/services/worker/queue.ts +35 -0
  642. package/src/services/worker/recorder.ts +172 -0
  643. package/src/services/worker/runner.ts +179 -0
  644. package/src/services/worker/types.ts +32 -0
  645. package/src/srpc/SrpcByteStream.ts +382 -0
  646. package/src/srpc/SrpcClient.ts +512 -0
  647. package/src/srpc/SrpcServer.ts +681 -0
  648. package/src/srpc/index.ts +15 -0
  649. package/src/srpc/types.ts +146 -0
  650. package/src/telemetry/index.ts +1 -0
  651. package/src/telemetry/otel/MariaDBInstrumentation.ts +297 -0
  652. package/src/telemetry/otel/helpers.ts +117 -0
  653. package/src/telemetry/otel/index.ts +150 -0
  654. package/src/telemetry/otel/metrics.controller.ts +50 -0
  655. package/src/telemetry/sentry.ts +58 -0
  656. package/src/testing/expect.ts +148 -0
  657. package/src/testing/fixtures.ts +62 -0
  658. package/src/testing/index.ts +355 -0
  659. package/src/testing/requests.ts +68 -0
  660. package/src/testing/sql.ts +50 -0
  661. package/src/types/index.ts +64 -0
  662. package/src/types/phone.ts +64 -0
  663. package/types.d.ts +20 -0
@@ -0,0 +1,510 @@
1
+ import { sql } from '@deepkit/sql';
2
+
3
+ import { BaseDatabase } from '../../common';
4
+ import { quoteId } from '../../dialect';
5
+ import { ColumnSchema, DatabaseSchema, Dialect, IndexSchema, ForeignKeySchema, TableSchema } from './schema-model';
6
+
7
+ export async function readAllTableNames(db: BaseDatabase, dialect: Dialect, pgSchema: string = 'public'): Promise<string[]> {
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ let rows: any[];
10
+ if (dialect === 'mysql') {
11
+ rows = await db.rawQuery(
12
+ sql`SELECT TABLE_NAME FROM information_schema.TABLES
13
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_TYPE = 'BASE TABLE'`
14
+ );
15
+ return rows.map(r => r.TABLE_NAME);
16
+ } else {
17
+ rows = await db.rawQuery(sql`SELECT tablename FROM pg_tables WHERE schemaname = ${pgSchema}`);
18
+ return rows.map(r => r.tablename);
19
+ }
20
+ }
21
+
22
+ export async function readDatabaseSchema(
23
+ db: BaseDatabase,
24
+ dialect: Dialect,
25
+ tableNames: string[],
26
+ pgSchema: string = 'public'
27
+ ): Promise<DatabaseSchema> {
28
+ const schema: DatabaseSchema = new Map();
29
+
30
+ for (const tableName of tableNames) {
31
+ try {
32
+ const table = dialect === 'mysql' ? await readMySQLTable(db, tableName) : await readPostgresTable(db, tableName, pgSchema);
33
+ if (table) {
34
+ schema.set(tableName, table);
35
+ }
36
+ } catch (err) {
37
+ throw new Error(`Failed to read schema for table '${tableName}': ${err instanceof Error ? err.message : err}`);
38
+ }
39
+ }
40
+
41
+ return schema;
42
+ }
43
+
44
+ // --- MySQL ---
45
+
46
+ async function readMySQLTable(db: BaseDatabase, tableName: string): Promise<TableSchema | null> {
47
+ const columns = await readMySQLColumns(db, tableName);
48
+ if (columns.length === 0) return null;
49
+
50
+ const indexes = await readMySQLIndexes(db, tableName);
51
+ const foreignKeys = await readMySQLForeignKeys(db, tableName);
52
+
53
+ return { name: tableName, columns, indexes, foreignKeys };
54
+ }
55
+
56
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+ async function readMySQLColumns(db: BaseDatabase, tableName: string): Promise<ColumnSchema[]> {
58
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
+ const rows: any[] = await db.rawQuery(
60
+ sql`SELECT COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE,
61
+ DATA_TYPE, COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH,
62
+ NUMERIC_PRECISION, NUMERIC_SCALE, EXTRA, COLUMN_KEY
63
+ FROM information_schema.COLUMNS
64
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ${tableName}
65
+ ORDER BY ORDINAL_POSITION`
66
+ );
67
+
68
+ return rows.map(row => {
69
+ const columnType = (row.COLUMN_TYPE || '').toLowerCase();
70
+ const dataType = (row.DATA_TYPE || '').toLowerCase();
71
+ const extra = (row.EXTRA || '').toLowerCase();
72
+
73
+ const col: ColumnSchema = {
74
+ name: row.COLUMN_NAME,
75
+ type: normalizeMySQLType(dataType, columnType),
76
+ size: inferMySQLSize(dataType, columnType, row.CHARACTER_MAXIMUM_LENGTH, row.NUMERIC_PRECISION),
77
+ scale: row.NUMERIC_SCALE != null ? Number(row.NUMERIC_SCALE) : undefined,
78
+ unsigned: columnType.includes('unsigned'),
79
+ nullable: row.IS_NULLABLE === 'YES',
80
+ autoIncrement: extra.includes('auto_increment'),
81
+ isPrimaryKey: row.COLUMN_KEY === 'PRI',
82
+ ordinalPosition: Number(row.ORDINAL_POSITION)
83
+ };
84
+
85
+ // Parse enum values
86
+ if (dataType === 'enum') {
87
+ col.enumValues = parseEnumValues(columnType);
88
+ }
89
+
90
+ // Default value
91
+ if (row.COLUMN_DEFAULT != null && !col.autoIncrement) {
92
+ const def = String(row.COLUMN_DEFAULT);
93
+ if (isExpression(def)) {
94
+ col.defaultExpression = def;
95
+ } else {
96
+ col.defaultValue = def;
97
+ }
98
+ }
99
+
100
+ // ON UPDATE expression
101
+ if (extra.includes('on update')) {
102
+ const match = extra.match(/on update\s+(.+)/i);
103
+ if (match) {
104
+ col.onUpdateExpression = match[1].toUpperCase();
105
+ }
106
+ }
107
+
108
+ return col;
109
+ });
110
+ }
111
+
112
+ async function readMySQLIndexes(db: BaseDatabase, tableName: string): Promise<IndexSchema[]> {
113
+ // SHOW INDEX requires an identifier, not a parameter — use quoteId
114
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
115
+ const rows: any[] = await db.rawQuery(`SHOW INDEX FROM ${quoteId('mysql', tableName)}`);
116
+
117
+ const indexMap = new Map<string, { schema: IndexSchema; columnsBySeq: { seq: number; name: string }[] }>();
118
+ for (const row of rows) {
119
+ const keyName = row.Key_name;
120
+ if (keyName === 'PRIMARY') continue; // PK is handled separately
121
+
122
+ if (!indexMap.has(keyName)) {
123
+ indexMap.set(keyName, {
124
+ schema: {
125
+ name: keyName,
126
+ columns: [],
127
+ unique: row.Non_unique === 0,
128
+ spatial: (row.Index_type || '').toUpperCase() === 'SPATIAL'
129
+ },
130
+ columnsBySeq: []
131
+ });
132
+ }
133
+ indexMap.get(keyName)!.columnsBySeq.push({ seq: Number(row.Seq_in_index), name: row.Column_name });
134
+ }
135
+
136
+ // Sort columns by Seq_in_index to ensure correct multi-column index order
137
+ for (const entry of indexMap.values()) {
138
+ entry.columnsBySeq.sort((a, b) => a.seq - b.seq);
139
+ entry.schema.columns = entry.columnsBySeq.map(c => c.name);
140
+ }
141
+
142
+ return Array.from(indexMap.values()).map(e => e.schema);
143
+ }
144
+
145
+ async function readMySQLForeignKeys(db: BaseDatabase, tableName: string): Promise<ForeignKeySchema[]> {
146
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
+ const rows: any[] = await db.rawQuery(
148
+ sql`SELECT
149
+ kcu.CONSTRAINT_NAME,
150
+ kcu.COLUMN_NAME,
151
+ kcu.REFERENCED_TABLE_NAME,
152
+ kcu.REFERENCED_COLUMN_NAME,
153
+ rc.DELETE_RULE,
154
+ rc.UPDATE_RULE
155
+ FROM information_schema.KEY_COLUMN_USAGE kcu
156
+ JOIN information_schema.REFERENTIAL_CONSTRAINTS rc
157
+ ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
158
+ AND kcu.TABLE_SCHEMA = rc.CONSTRAINT_SCHEMA
159
+ WHERE kcu.TABLE_SCHEMA = DATABASE()
160
+ AND kcu.TABLE_NAME = ${tableName}
161
+ AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
162
+ ORDER BY kcu.CONSTRAINT_NAME, kcu.ORDINAL_POSITION`
163
+ );
164
+
165
+ const fkMap = new Map<string, ForeignKeySchema>();
166
+ for (const row of rows) {
167
+ const name = row.CONSTRAINT_NAME;
168
+ if (!fkMap.has(name)) {
169
+ fkMap.set(name, {
170
+ name,
171
+ columns: [],
172
+ referencedTable: row.REFERENCED_TABLE_NAME,
173
+ referencedColumns: [],
174
+ onDelete: (row.DELETE_RULE || 'RESTRICT').toUpperCase(),
175
+ onUpdate: (row.UPDATE_RULE || 'RESTRICT').toUpperCase()
176
+ });
177
+ }
178
+ const fk = fkMap.get(name)!;
179
+ fk.columns.push(row.COLUMN_NAME);
180
+ fk.referencedColumns.push(row.REFERENCED_COLUMN_NAME);
181
+ }
182
+
183
+ return Array.from(fkMap.values());
184
+ }
185
+
186
+ // --- PostgreSQL ---
187
+
188
+ async function readPostgresTable(db: BaseDatabase, tableName: string, pgSchema: string = 'public'): Promise<TableSchema | null> {
189
+ const columns = await readPostgresColumns(db, tableName, pgSchema);
190
+ if (columns.length === 0) return null;
191
+
192
+ const indexes = await readPostgresIndexes(db, tableName, pgSchema);
193
+ const foreignKeys = await readPostgresForeignKeys(db, tableName, pgSchema);
194
+
195
+ // Read PK constraint name
196
+ let primaryKeyConstraintName: string | undefined;
197
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
198
+ const pkConstraintRows: any[] = await db.rawQuery(
199
+ sql`SELECT constraint_name FROM information_schema.table_constraints
200
+ WHERE table_schema = ${pgSchema} AND table_name = ${tableName}
201
+ AND constraint_type = 'PRIMARY KEY'`
202
+ );
203
+ if (pkConstraintRows.length > 0) {
204
+ primaryKeyConstraintName = pkConstraintRows[0].constraint_name;
205
+ }
206
+
207
+ return { name: tableName, columns, indexes, foreignKeys, primaryKeyConstraintName };
208
+ }
209
+
210
+ async function readPostgresColumns(db: BaseDatabase, tableName: string, pgSchema: string = 'public'): Promise<ColumnSchema[]> {
211
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
212
+ const rows: any[] = await db.rawQuery(
213
+ sql`SELECT column_name, ordinal_position, column_default, is_nullable,
214
+ data_type, udt_name, character_maximum_length,
215
+ numeric_precision, numeric_scale, is_identity,
216
+ identity_generation
217
+ FROM information_schema.columns
218
+ WHERE table_schema = ${pgSchema} AND table_name = ${tableName}
219
+ ORDER BY ordinal_position`
220
+ );
221
+
222
+ const columns: ColumnSchema[] = [];
223
+
224
+ for (const row of rows) {
225
+ const dataType = normalizePostgresType(row.data_type, row.udt_name);
226
+ const isIdentity = row.is_identity === 'YES';
227
+ const isSerial = (row.column_default && String(row.column_default).includes('nextval(')) || isIdentity;
228
+
229
+ const col: ColumnSchema = {
230
+ name: row.column_name,
231
+ type: dataType,
232
+ size: inferPostgresSize(dataType, row.character_maximum_length, row.numeric_precision),
233
+ scale: row.numeric_scale != null ? Number(row.numeric_scale) : undefined,
234
+ unsigned: false,
235
+ nullable: row.is_nullable === 'YES',
236
+ autoIncrement: isSerial,
237
+ isPrimaryKey: false, // resolved below from PK constraint
238
+ isIdentity,
239
+ ordinalPosition: Number(row.ordinal_position)
240
+ };
241
+
242
+ // Resolve actual sequence name for serial columns
243
+ if (isSerial && !isIdentity) {
244
+ const qualifiedTable = `${pgSchema}.${tableName}`;
245
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
246
+ const seqRows: any[] = await db.rawQuery(sql`SELECT pg_get_serial_sequence(${qualifiedTable}, ${row.column_name}) as seq_name`);
247
+ if (seqRows.length > 0 && seqRows[0].seq_name) {
248
+ col.sequenceName = seqRows[0].seq_name;
249
+ }
250
+ }
251
+
252
+ // Enum type — only classify as enum if enum values exist;
253
+ // other USER-DEFINED types (citext, ltree, PostGIS) are left as-is
254
+ if (row.data_type === 'USER-DEFINED') {
255
+ const enumValues = await readPostgresEnumValues(db, row.udt_name, pgSchema);
256
+ if (enumValues.length > 0) {
257
+ col.type = 'enum';
258
+ col.enumTypeName = row.udt_name;
259
+ col.enumValues = enumValues;
260
+ }
261
+ }
262
+
263
+ // Default
264
+ if (row.column_default != null && !isSerial) {
265
+ const def = String(row.column_default);
266
+ // Strip type casts like ::text, ::character varying, or chained casts like ::character varying::text
267
+ const cleaned = def.replace(/(::[\w ]+)+$/i, '').trim();
268
+ if (isExpression(cleaned)) {
269
+ col.defaultExpression = cleaned;
270
+ } else {
271
+ // Remove surrounding quotes from string defaults
272
+ col.defaultValue = cleaned.replace(/^'(.*)'$/, '$1');
273
+ }
274
+ }
275
+
276
+ columns.push(col);
277
+ }
278
+
279
+ // Resolve primary keys
280
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
281
+ const pkRows: any[] = await db.rawQuery(
282
+ sql`SELECT kcu.column_name
283
+ FROM information_schema.table_constraints tc
284
+ JOIN information_schema.key_column_usage kcu
285
+ ON tc.constraint_name = kcu.constraint_name
286
+ AND tc.table_schema = kcu.table_schema
287
+ WHERE tc.constraint_type = 'PRIMARY KEY'
288
+ AND tc.table_schema = ${pgSchema}
289
+ AND tc.table_name = ${tableName}
290
+ ORDER BY kcu.ordinal_position`
291
+ );
292
+ const pkCols = new Set(pkRows.map(r => r.column_name));
293
+ for (const col of columns) {
294
+ if (pkCols.has(col.name)) col.isPrimaryKey = true;
295
+ }
296
+
297
+ return columns;
298
+ }
299
+
300
+ async function readPostgresEnumValues(db: BaseDatabase, typeName: string, pgSchema: string = 'public'): Promise<string[]> {
301
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
302
+ const rows: any[] = await db.rawQuery(
303
+ sql`SELECT e.enumlabel
304
+ FROM pg_enum e
305
+ JOIN pg_type t ON e.enumtypid = t.oid
306
+ JOIN pg_namespace n ON n.oid = t.typnamespace
307
+ WHERE t.typname = ${typeName}
308
+ AND n.nspname = ${pgSchema}
309
+ ORDER BY e.enumsortorder`
310
+ );
311
+ return rows.map(r => r.enumlabel);
312
+ }
313
+
314
+ async function readPostgresIndexes(db: BaseDatabase, tableName: string, pgSchema: string = 'public'): Promise<IndexSchema[]> {
315
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
316
+ const rows: any[] = await db.rawQuery(
317
+ sql`SELECT
318
+ i.relname AS index_name,
319
+ ix.indisunique AS is_unique,
320
+ array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) AS columns
321
+ FROM pg_index ix
322
+ JOIN pg_class t ON t.oid = ix.indrelid
323
+ JOIN pg_class i ON i.oid = ix.indexrelid
324
+ JOIN pg_namespace n ON n.oid = t.relnamespace
325
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
326
+ WHERE n.nspname = ${pgSchema}
327
+ AND t.relname = ${tableName}
328
+ AND NOT ix.indisprimary
329
+ GROUP BY i.relname, ix.indisunique`
330
+ );
331
+
332
+ return rows.map(row => ({
333
+ name: row.index_name,
334
+ columns: Array.isArray(row.columns) ? row.columns : [row.columns],
335
+ unique: row.is_unique,
336
+ spatial: false
337
+ }));
338
+ }
339
+
340
+ async function readPostgresForeignKeys(db: BaseDatabase, tableName: string, pgSchema: string = 'public'): Promise<ForeignKeySchema[]> {
341
+ // Use pg_constraint to correctly pair multi-column FK columns via conkey/confkey arrays
342
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
343
+ const rows: any[] = await db.rawQuery(
344
+ sql`SELECT
345
+ c.conname AS constraint_name,
346
+ array_agg(a_src.attname ORDER BY key_idx.ord) AS columns,
347
+ ref_cls.relname AS referenced_table,
348
+ array_agg(a_ref.attname ORDER BY key_idx.ord) AS referenced_columns,
349
+ CASE c.confdeltype
350
+ WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT'
351
+ WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL'
352
+ WHEN 'd' THEN 'SET DEFAULT' ELSE 'RESTRICT'
353
+ END AS delete_rule,
354
+ CASE c.confupdtype
355
+ WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT'
356
+ WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL'
357
+ WHEN 'd' THEN 'SET DEFAULT' ELSE 'RESTRICT'
358
+ END AS update_rule
359
+ FROM pg_constraint c
360
+ JOIN pg_class src_cls ON src_cls.oid = c.conrelid
361
+ JOIN pg_namespace n ON n.oid = src_cls.relnamespace
362
+ JOIN pg_class ref_cls ON ref_cls.oid = c.confrelid
363
+ CROSS JOIN LATERAL unnest(c.conkey, c.confkey) WITH ORDINALITY AS key_idx(src_attnum, ref_attnum, ord)
364
+ JOIN pg_attribute a_src ON a_src.attrelid = c.conrelid AND a_src.attnum = key_idx.src_attnum
365
+ JOIN pg_attribute a_ref ON a_ref.attrelid = c.confrelid AND a_ref.attnum = key_idx.ref_attnum
366
+ WHERE c.contype = 'f'
367
+ AND n.nspname = ${pgSchema}
368
+ AND src_cls.relname = ${tableName}
369
+ GROUP BY c.conname, ref_cls.relname, c.confdeltype, c.confupdtype`
370
+ );
371
+
372
+ return rows.map(row => ({
373
+ name: row.constraint_name,
374
+ columns: Array.isArray(row.columns) ? row.columns : [row.columns],
375
+ referencedTable: row.referenced_table,
376
+ referencedColumns: Array.isArray(row.referenced_columns) ? row.referenced_columns : [row.referenced_columns],
377
+ onDelete: (row.delete_rule || 'RESTRICT').toUpperCase(),
378
+ onUpdate: (row.update_rule || 'RESTRICT').toUpperCase()
379
+ }));
380
+ }
381
+
382
+ // --- Helpers ---
383
+
384
+ function normalizeMySQLType(dataType: string, columnType: string): string {
385
+ // Keep tinyint(1) for boolean detection
386
+ if (dataType === 'tinyint' && columnType.startsWith('tinyint(1)')) {
387
+ return 'tinyint';
388
+ }
389
+ // Strip display widths: int(11) → int
390
+ return dataType;
391
+ }
392
+
393
+ function inferMySQLSize(dataType: string, columnType: string, charMaxLen: number | null, numPrecision: number | null): number | undefined {
394
+ if (dataType === 'varchar' || dataType === 'char') {
395
+ return charMaxLen != null ? Number(charMaxLen) : undefined;
396
+ }
397
+ if (dataType === 'tinyint' && columnType.startsWith('tinyint(1)')) {
398
+ return 1;
399
+ }
400
+ if (dataType === 'decimal' || dataType === 'numeric') {
401
+ return numPrecision != null ? Number(numPrecision) : undefined;
402
+ }
403
+ return undefined;
404
+ }
405
+
406
+ function normalizePostgresType(dataType: string, udtName: string): string {
407
+ switch (dataType) {
408
+ case 'character varying':
409
+ return 'varchar';
410
+ case 'character':
411
+ return 'char';
412
+ case 'integer':
413
+ return 'int';
414
+ case 'timestamp without time zone':
415
+ return 'timestamp';
416
+ case 'timestamp with time zone':
417
+ return 'timestamptz';
418
+ case 'boolean':
419
+ return 'boolean';
420
+ case 'double precision':
421
+ return 'double precision';
422
+ case 'real':
423
+ return 'real';
424
+ case 'smallint':
425
+ return 'smallint';
426
+ case 'bigint':
427
+ return 'bigint';
428
+ case 'text':
429
+ return 'text';
430
+ case 'json':
431
+ return 'json';
432
+ case 'jsonb':
433
+ return 'jsonb';
434
+ case 'uuid':
435
+ return 'uuid';
436
+ case 'bytea':
437
+ return 'bytea';
438
+ case 'date':
439
+ return 'date';
440
+ case 'USER-DEFINED':
441
+ return udtName; // will be resolved to 'enum' by caller
442
+ case 'ARRAY':
443
+ return 'jsonb'; // arrays stored as jsonb
444
+ default:
445
+ return dataType;
446
+ }
447
+ }
448
+
449
+ function inferPostgresSize(dataType: string, charMaxLen: number | null, numPrecision: number | null): number | undefined {
450
+ if (dataType === 'varchar' || dataType === 'char') {
451
+ return charMaxLen != null ? Number(charMaxLen) : undefined;
452
+ }
453
+ if (dataType === 'decimal' || dataType === 'numeric') {
454
+ return numPrecision != null ? Number(numPrecision) : undefined;
455
+ }
456
+ return undefined;
457
+ }
458
+
459
+ function parseEnumValues(columnType: string): string[] {
460
+ // Parse enum('value1','value2','value3') — handles escaped quotes within values
461
+ const match = columnType.match(/^enum\((.+)\)$/i);
462
+ if (!match) return [];
463
+
464
+ const inner = match[1];
465
+ const values: string[] = [];
466
+ let i = 0;
467
+ while (i < inner.length) {
468
+ // Skip whitespace
469
+ while (i < inner.length && inner[i] === ' ') i++;
470
+ if (i >= inner.length) break;
471
+
472
+ if (inner[i] === "'") {
473
+ i++; // skip opening quote
474
+ let val = '';
475
+ while (i < inner.length) {
476
+ if (inner[i] === '\\' && i + 1 < inner.length) {
477
+ // Backslash-escaped character
478
+ val += inner[i + 1];
479
+ i += 2;
480
+ } else if (inner[i] === "'" && i + 1 < inner.length && inner[i + 1] === "'") {
481
+ val += "'";
482
+ i += 2; // skip doubled quote
483
+ } else if (inner[i] === "'") {
484
+ i++; // skip closing quote
485
+ break;
486
+ } else {
487
+ val += inner[i];
488
+ i++;
489
+ }
490
+ }
491
+ values.push(val);
492
+ }
493
+
494
+ // Skip comma
495
+ while (i < inner.length && (inner[i] === ',' || inner[i] === ' ')) i++;
496
+ }
497
+ return values;
498
+ }
499
+
500
+ function isExpression(value: string): boolean {
501
+ const upper = value.toUpperCase().trim();
502
+ return (
503
+ /\bCURRENT_TIMESTAMP\b/.test(upper) ||
504
+ /\bNOW\s*\(\)/.test(upper) ||
505
+ /\bCURRENT_DATE\b/.test(upper) ||
506
+ /\bUUID\s*\(\)/.test(upper) ||
507
+ /\bGEN_RANDOM_UUID\s*\(\)/.test(upper) ||
508
+ /\bNEXTVAL\s*\(/.test(upper)
509
+ );
510
+ }