@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,84 @@
1
+ #!/usr/bin/env node
2
+
3
+ /* eslint-disable @typescript-eslint/no-require-imports */
4
+
5
+ import { spawn } from 'child_process';
6
+ import { globSync } from 'fs';
7
+ import { join, resolve } from 'path';
8
+
9
+ process.env.TZ = 'UTC';
10
+ process.env.APP_ENV = 'test';
11
+
12
+ const distDir = resolve('dist');
13
+
14
+ async function main() {
15
+ // Run global setup if available
16
+ let teardown: (() => Promise<void>) | undefined;
17
+ try {
18
+ const globalSetup = require(join(distDir, 'tests', 'shared', 'globalSetup'));
19
+ if (globalSetup.setup) {
20
+ await globalSetup.setup();
21
+ }
22
+ if (globalSetup.teardown) {
23
+ teardown = globalSetup.teardown;
24
+ }
25
+ } catch {
26
+ // No global setup found, continue
27
+ }
28
+
29
+ // Parse arguments
30
+ const args = process.argv.slice(2);
31
+ const nodeArgs: string[] = [];
32
+ const fileArgs: string[] = [];
33
+
34
+ for (const arg of args) {
35
+ if (arg.startsWith('-')) {
36
+ nodeArgs.push(arg);
37
+ } else {
38
+ fileArgs.push(arg);
39
+ }
40
+ }
41
+
42
+ // Collect test files
43
+ const testFiles: string[] = [];
44
+ for (const f of fileArgs) {
45
+ const distPath = f.startsWith('dist/') ? f : f.replace(/^tests\//, 'dist/tests/').replace(/\.ts$/, '.js');
46
+ if (distPath.endsWith('/') || !distPath.includes('.')) {
47
+ testFiles.push(...globSync(join(distPath, '**/*.spec.js')));
48
+ } else {
49
+ testFiles.push(distPath);
50
+ }
51
+ }
52
+ if (testFiles.length === 0) {
53
+ testFiles.push(...globSync(join(distDir, 'tests', '**/*.spec.js')));
54
+ }
55
+
56
+ // Run node --test
57
+ // Note: --test-timeout applies to describe() suites on Node 24+, so this must be high
58
+ // enough to cover DB setup in before() hooks under concurrent execution.
59
+ // Individual tests can override with { timeout } per-test if needed.
60
+ const child = spawn(
61
+ process.execPath,
62
+ ['--enable-source-maps', '--test', '--test-force-exit', '--test-timeout=180000', ...nodeArgs, ...testFiles],
63
+ {
64
+ stdio: 'inherit',
65
+ env: { ...process.env, TZ: 'UTC' }
66
+ }
67
+ );
68
+
69
+ const exitCode = await new Promise<number | null>(resolve => {
70
+ child.on('close', resolve);
71
+ });
72
+
73
+ // Run teardown
74
+ if (teardown) {
75
+ await teardown();
76
+ }
77
+
78
+ process.exit(exitCode ?? 1);
79
+ }
80
+
81
+ main().catch(err => {
82
+ console.error('Test runner error:', err);
83
+ process.exit(1);
84
+ });
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { assert } from '@deepkit/type';
4
+ import { execSync } from 'child_process';
5
+ import { existsSync } from 'fs';
6
+ import { readFile, stat, writeFile } from 'fs/promises';
7
+ import glob from 'tiny-glob';
8
+
9
+ const packageJsonPath = `package.json`;
10
+ if (!existsSync(packageJsonPath)) {
11
+ console.log('No package.json found in current directory.');
12
+ process.exit(1);
13
+ }
14
+
15
+ const latestDKSFInfoStr = execSync('npm info @zyno-io/dk-server-foundation@latest --json').toString();
16
+ const latestDKSFInfo = JSON.parse(latestDKSFInfoStr);
17
+ assert<{
18
+ 'dist-tags': {
19
+ latest: string;
20
+ };
21
+ dependencies: {
22
+ [key: string]: string;
23
+ };
24
+ }>(latestDKSFInfo);
25
+ const latestVersion = latestDKSFInfo['dist-tags'].latest;
26
+
27
+ applyUpdates()
28
+ .then(() => process.exit(0))
29
+ .catch(err => {
30
+ console.error(err);
31
+ process.exit(1);
32
+ });
33
+
34
+ ////
35
+
36
+ async function applyUpdates() {
37
+ const rootPackageJson = await processPackageJson(packageJsonPath);
38
+
39
+ if (rootPackageJson.workspaces) {
40
+ for (const workspace of rootPackageJson.workspaces) {
41
+ const matches = await glob(workspace);
42
+ for (const match of matches) {
43
+ const matchState = await stat(match);
44
+ if (matchState.isDirectory()) {
45
+ const packageJsonPath = `${match}/package.json`;
46
+ if (existsSync(packageJsonPath)) {
47
+ await processPackageJson(packageJsonPath);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ async function processPackageJson(path: string) {
56
+ const packageJsonStr = await readFile(path, 'utf8');
57
+ const packageJson = JSON.parse(packageJsonStr);
58
+ assert<{
59
+ workspaces?: string[];
60
+ dependencies?: {
61
+ [key: string]: string;
62
+ };
63
+ }>(packageJson);
64
+
65
+ if (packageJson.dependencies) {
66
+ const currentVersion = packageJson.dependencies['@zyno-io/dk-server-foundation'];
67
+ if (!currentVersion) {
68
+ console.log(`${path}: No @zyno-io/dk-server-foundation dependency found in package.json.`);
69
+ return packageJson;
70
+ }
71
+
72
+ if (currentVersion === latestVersion) {
73
+ console.log(`${path}: DKSF already up to date.`);
74
+ } else if (currentVersion === '*') {
75
+ console.log(`${path}: DKSF set to '*'`);
76
+ } else {
77
+ console.log(`${path}: Updating @zyno-io/dk-server-foundation from ${currentVersion} to ${latestVersion}.`);
78
+ packageJson.dependencies['@zyno-io/dk-server-foundation'] = latestVersion;
79
+ }
80
+
81
+ for (const dependency in latestDKSFInfo.dependencies) {
82
+ if (dependency in packageJson.dependencies) {
83
+ if (packageJson.dependencies[dependency] === '*') {
84
+ console.log(`${path}: ${dependency} is set to '*'.`);
85
+ continue;
86
+ }
87
+ if (packageJson.dependencies[dependency] !== latestDKSFInfo.dependencies[dependency]) {
88
+ console.log(
89
+ `${path}: Updating ${dependency} from ${packageJson.dependencies[dependency]} to ${latestDKSFInfo.dependencies[dependency]}.`
90
+ );
91
+ packageJson.dependencies[dependency] = latestDKSFInfo.dependencies[dependency];
92
+ }
93
+ }
94
+ }
95
+
96
+ const newPackageJsonStr = JSON.stringify(packageJson, undefined, 4);
97
+ await writeFile(path, `${newPackageJsonStr}\n`);
98
+ }
99
+
100
+ return packageJson;
101
+ }
@@ -0,0 +1,385 @@
1
+ import { AbstractClassType, ClassType, TypeAnnotation } from '@deepkit/core';
2
+ import { HttpNotFoundError } from '@deepkit/http';
3
+ import { ActiveRecord, ActiveRecordClassType, Database, DatabaseAdapter, DatabaseSession, FilterQuery, ItemNotFound, OrmEntity } from '@deepkit/orm';
4
+ import { sql, SQLDatabaseAdapter, SQLDatabaseQuery, SqlQuery } from '@deepkit/sql';
5
+ import { AutoIncrement, deserialize, ReceiveType, ReflectionClass, Type } from '@deepkit/type';
6
+ import { pick } from 'lodash';
7
+
8
+ import { flattenMutexKey, MutexKey } from '../helpers';
9
+ import { ObjectKeysMatching } from '../types';
10
+ import { getDialect } from './dialect';
11
+
12
+ const PreCommitHooksSymbol = Symbol('PreCommitHooks');
13
+ const PostCommitHooksSymbol = Symbol('PostCommitHooks');
14
+
15
+ declare module '@deepkit/orm' {
16
+ interface DatabaseSession {
17
+ [PreCommitHooksSymbol]?: (() => Promise<void>)[];
18
+ [PostCommitHooksSymbol]?: (() => Promise<void>)[];
19
+ addPreCommitHook(hook: () => Promise<void>): void;
20
+ addPostCommitHook(hook: () => Promise<void>): void;
21
+ acquireSessionLock(key: MutexKey | MutexKey[]): Promise<void>;
22
+ }
23
+ }
24
+
25
+ DatabaseSession.prototype.addPreCommitHook = function (hook: () => Promise<void>) {
26
+ if (!this[PreCommitHooksSymbol]) this[PreCommitHooksSymbol] = [];
27
+ this[PreCommitHooksSymbol]!.push(hook);
28
+ };
29
+
30
+ DatabaseSession.prototype.addPostCommitHook = function (hook: () => Promise<void>) {
31
+ if (!this[PostCommitHooksSymbol]) this[PostCommitHooksSymbol] = [];
32
+ this[PostCommitHooksSymbol]!.push(hook);
33
+ };
34
+
35
+ DatabaseSession.prototype.acquireSessionLock = async function (key: MutexKey | MutexKey[]) {
36
+ const flattenedKey = flattenMutexKey(key);
37
+ const adapter = this.adapter as SQLDatabaseAdapter;
38
+ const dialect = getDialect(adapter);
39
+
40
+ if (dialect === 'postgres') {
41
+ // use a transaction-scoped advisory lock — automatically released on commit/rollback
42
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
+ const lockQuery = adapter.rawFactory(this as any).create(sql`SELECT pg_advisory_xact_lock(hashtext(${flattenedKey})::bigint)`);
44
+ await lockQuery.find();
45
+ } else {
46
+ // the idea here is to create a new row outside the transaction so that a primary key index lock isn't obtained
47
+ // then we can use an in-transaction row level update so that a row-level lock is acquired
48
+ // this will be automatically released when the transaction is committed or rolled back
49
+
50
+ // insert the lock row outside the transaction on a separate connection
51
+ const insertConn = await adapter.connectionPool.getConnection();
52
+ try {
53
+ await insertConn.run(`INSERT IGNORE INTO _locks (\`key\`) VALUES (?)`, [flattenedKey]);
54
+ } finally {
55
+ insertConn.release();
56
+ }
57
+
58
+ // update in-transaction to acquire row-level lock
59
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
+ const updateQuery = adapter.rawFactory(this as any).create(sql`UPDATE _locks SET lastTouched=NOW() WHERE \`key\` = ${flattenedKey}`);
61
+ await updateQuery.execute();
62
+ }
63
+ };
64
+
65
+ // todo: swapping DatabaseAdapter for SQLDatabaseAdapter, which exposes "platform", seems to break
66
+ // types for reasons TBD
67
+ type QueryClassType<T> = ReceiveType<T> | ClassType<T> | AbstractClassType<T> | ReflectionClass<T>;
68
+ export class BaseDatabase<A extends DatabaseAdapter = DatabaseAdapter> extends Database<A> {
69
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
70
+ constructor(adapter: A, schemas?: (Type | ClassType | ReflectionClass<any>)[]) {
71
+ super(adapter, schemas);
72
+
73
+ // we don't like the default "clone" behavior of the query builder
74
+ // todo: ideally we could keep .clone but only have it actually perform the clone if it's called from outside the lib
75
+ const originalQuery = this.query;
76
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
+ (this.query as any) = <T extends OrmEntity>(type: QueryClassType<T>, txn?: DatabaseSession<DatabaseAdapter>) => {
78
+ const result = txn ? txn.query(type) : (originalQuery.apply(this, [type]) as unknown as SQLDatabaseQuery<T>);
79
+ result.clone = () => result;
80
+ return result;
81
+ };
82
+ }
83
+
84
+ // override existing definition
85
+ declare query: <T extends OrmEntity>(type?: QueryClassType<T>, txn?: DatabaseSession<DatabaseAdapter>) => SQLDatabaseQuery<T>;
86
+
87
+ async transaction<T>(callback: (session: DatabaseSession<A>) => Promise<T>): Promise<T> {
88
+ let session_: DatabaseSession<DatabaseAdapter> | undefined;
89
+ const result = await super.transaction(async session => {
90
+ session_ = session;
91
+ session.withIdentityMap = false;
92
+ const result = await callback(session);
93
+ if (session[PreCommitHooksSymbol]) {
94
+ await session.flush();
95
+ for (const hook of session[PreCommitHooksSymbol]!) {
96
+ await hook();
97
+ }
98
+ }
99
+ return result;
100
+ });
101
+ if (session_?.[PostCommitHooksSymbol]) {
102
+ for (const hook of session_[PostCommitHooksSymbol]!) {
103
+ await hook();
104
+ }
105
+ }
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ return result as any; // todo: types
108
+ }
109
+
110
+ async session<T>(worker: (session: DatabaseSession<A>) => Promise<T>): Promise<T> {
111
+ return super.session(async session => {
112
+ session.withIdentityMap = false;
113
+ return worker(session);
114
+ });
115
+ }
116
+
117
+ async withTransaction<R>(txn: DatabaseSession<A> | undefined, callback: (session: DatabaseSession<A>) => Promise<R>): Promise<R> {
118
+ if (txn) {
119
+ return await callback(txn);
120
+ } else {
121
+ return await this.transaction(async txn => callback(txn));
122
+ }
123
+ }
124
+
125
+ async withSession<R>(session: DatabaseSession<A> | undefined, callback: (session: DatabaseSession<A>) => Promise<R>): Promise<R> {
126
+ if (session) {
127
+ return await callback(session);
128
+ } else {
129
+ return await this.session(async session => callback(session));
130
+ }
131
+ }
132
+
133
+ async rawExecute(
134
+ sqlIn: SqlQuery | string,
135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+ existingSession?: DatabaseSession<any>
137
+ ): Promise<{ affectedRows: number; insertId: number; warningStatus: number }> {
138
+ return this.withSession(existingSession, async session => {
139
+ if (!(session.adapter instanceof SQLDatabaseAdapter)) {
140
+ throw new Error('Cannot perform raw query on non-SQL database');
141
+ }
142
+
143
+ // raw queries executed against a session likely expect the data to already be written,
144
+ // so let's flush everything we have already queued up
145
+ if (existingSession) {
146
+ await session.flush();
147
+ }
148
+
149
+ const adapter = session.adapter as SQLDatabaseAdapter;
150
+ const sqlQuery = typeof sqlIn === 'string' ? new SqlQuery([sqlIn]) : sqlIn;
151
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+ const rawQuery = adapter.rawFactory(session as any).create(sqlQuery);
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
+ return rawQuery.execute() as any;
155
+ });
156
+ }
157
+
158
+ async rawExecuteUnsafe(
159
+ sqlIn: string,
160
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
161
+ bindings: any[],
162
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
163
+ existingSession?: DatabaseSession<any>
164
+ ): Promise<{ affectedRows: number; insertId: number; warningStatus: number }> {
165
+ return this.rawExecute(this.createSqlQuery(sqlIn, bindings), existingSession);
166
+ }
167
+
168
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
169
+ async rawQuery(sqlIn: SqlQuery | string, existingSession?: DatabaseSession<any>) {
170
+ return this.withSession(existingSession, async session => {
171
+ if (!(session.adapter instanceof SQLDatabaseAdapter)) {
172
+ throw new Error('Cannot perform raw query on non-SQL database');
173
+ }
174
+
175
+ // raw queries executed against a session likely expect the data to already be written,
176
+ // so let's flush everything we have already queued up
177
+ if (existingSession) {
178
+ await session.flush();
179
+ }
180
+
181
+ const adapter = session.adapter as SQLDatabaseAdapter;
182
+ const sqlQuery = typeof sqlIn === 'string' ? new SqlQuery([sqlIn]) : sqlIn;
183
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
184
+ const rawQuery = adapter.rawFactory(session as any).create(sqlQuery);
185
+ return await rawQuery.find();
186
+ });
187
+ }
188
+
189
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
190
+ async rawFind<T>(sqlIn: SqlQuery | string, existingSession?: DatabaseSession<any>, type?: ReceiveType<T>): Promise<T[]> {
191
+ const rows = await this.rawQuery(sqlIn, existingSession);
192
+ return type
193
+ ? rows.map(row => deserialize<T>(row, undefined, (this.adapter as unknown as SQLDatabaseAdapter).platform.serializer, undefined, type))
194
+ : (rows as T[]);
195
+ }
196
+
197
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
198
+ async rawFindUnsafe<T>(sqlIn: string, bindings: any[], existingSession?: DatabaseSession<any>, type?: ReceiveType<T>): Promise<T[]> {
199
+ return this.rawFind<T>(this.createSqlQuery(sqlIn, bindings), existingSession, type);
200
+ }
201
+
202
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
203
+ async rawFindOne<T>(sqlIn: SqlQuery | string, existingSession?: DatabaseSession<any>, type?: ReceiveType<T>): Promise<T | undefined> {
204
+ const rows = await this.rawFind<T>(sqlIn, existingSession, type);
205
+ return rows[0];
206
+ }
207
+
208
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
209
+ async rawFindOneUnsafe<T>(sqlIn: string, bindings: any[], existingSession?: DatabaseSession<any>, type?: ReceiveType<T>): Promise<T | undefined> {
210
+ return this.rawFindOne<T>(this.createSqlQuery(sqlIn, bindings), existingSession, type);
211
+ }
212
+
213
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
+ createSqlQuery(sqlIn: string, bindings: any[]): SqlQuery {
215
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
+ const sqlPieces: TemplateStringsArray = sqlIn.split('?') as any;
217
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
218
+ (sqlPieces as any).raw = sqlIn;
219
+ return sql(sqlPieces, ...bindings);
220
+ }
221
+ }
222
+
223
+ type FieldsMatching<T, V> = {
224
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
225
+ [K in keyof T]: T[K] extends V ? (T[K] extends Function ? never : K) : never;
226
+ }[keyof T];
227
+ export type DataTypes = string | number | boolean | Date | object | null;
228
+ export type EntityFieldKeys<T extends object> = FieldsMatching<T, DataTypes>;
229
+ export type EntityFields<T extends object> = Pick<T, EntityFieldKeys<T>>; // https://github.com/deepkit/deepkit-framework/issues/430
230
+ export type EntityClassFields<T extends ClassType> = Pick<InstanceType<T>, EntityFieldKeys<InstanceType<T>>>;
231
+
232
+ export declare type HasDefault = TypeAnnotation<'dksf:hasDefault'>;
233
+ export type OptionalKeys<T extends object> = ObjectKeysMatching<T, HasDefault> | ObjectKeysMatching<T, null> | ObjectKeysMatching<T, AutoIncrement>;
234
+ export type EntityOptionals<T extends object> = { [K in keyof Pick<T, OptionalKeys<T>>]?: T[K] } & { [K in keyof Omit<T, OptionalKeys<T>>]: T[K] };
235
+ export type NewEntityFields<T extends object> = EntityOptionals<EntityFields<T>>;
236
+
237
+ export function createEntity<D extends T, T extends ActiveRecord = ActiveRecord>(Entity: ClassType<T>, data: NewEntityFields<D>): T {
238
+ const entity = new Entity();
239
+ Object.assign(entity, data);
240
+
241
+ // fill in the nulls and auto-increments
242
+ const type = ReflectionClass.from(Entity);
243
+ for (const property of type.getProperties()) {
244
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
245
+ if ((data as any)[property.name] === undefined) {
246
+ if (property.isAutoIncrement()) {
247
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
248
+ (entity as any)[property.name] = 0;
249
+ } else if (property.isNullable()) {
250
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
251
+ (entity as any)[property.name] = null;
252
+ }
253
+ }
254
+ }
255
+
256
+ return entity;
257
+ }
258
+
259
+ export function createEntities<D extends T, T extends ActiveRecord = ActiveRecord>(Entity: ClassType<T>, data: NewEntityFields<D>[]): T[] {
260
+ return data.map(d => createEntity(Entity, d));
261
+ }
262
+
263
+ export function createQueuedEntity<D extends T, T extends ActiveRecord = ActiveRecord>(
264
+ Entity: ClassType<T>,
265
+ data: NewEntityFields<D>,
266
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
267
+ session: DatabaseSession<any>
268
+ ): T {
269
+ const entity = createEntity(Entity, data);
270
+ session.add(entity);
271
+ return entity;
272
+ }
273
+
274
+ export function createQueuedEntities<D extends T, T extends ActiveRecord = ActiveRecord>(
275
+ Entity: ClassType<T>,
276
+ data: NewEntityFields<D>[],
277
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
278
+ session: DatabaseSession<any>
279
+ ): T[] {
280
+ const entities = createEntities(Entity, data);
281
+ session.add(...entities);
282
+ return entities;
283
+ }
284
+
285
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
286
+ export async function persistEntity<T extends ActiveRecord>(entity: T, session?: DatabaseSession<any>) {
287
+ return persistEntities([entity], session);
288
+ }
289
+
290
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
291
+ export async function persistEntities<T extends ActiveRecord>(entities: T[], session?: DatabaseSession<any>) {
292
+ if (session) {
293
+ session.add(...entities);
294
+ await session.flush();
295
+ } else {
296
+ for (const entity of entities) {
297
+ await entity.save();
298
+ }
299
+ }
300
+ }
301
+
302
+ export async function createPersistedEntity<D extends T, T extends ActiveRecord = ActiveRecord>(
303
+ Entity: ClassType<T>,
304
+ data: NewEntityFields<D>,
305
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
306
+ session?: DatabaseSession<any>
307
+ ): Promise<T> {
308
+ const entity = createEntity(Entity, data);
309
+ await persistEntity(entity, session);
310
+ return entity;
311
+ }
312
+
313
+ export async function createPersistedEntities<D extends T, T extends ActiveRecord = ActiveRecord>(
314
+ Entity: ClassType<T>,
315
+ data: NewEntityFields<D>[],
316
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
317
+ session?: DatabaseSession<any>
318
+ ): Promise<T[]> {
319
+ const entities = createEntities(Entity, data);
320
+ await persistEntities(entities, session);
321
+ return entities;
322
+ }
323
+
324
+ const PKFieldCache = new WeakMap<ActiveRecordClassType, string>();
325
+ export function getPKFieldForEntity(EntityClass: ActiveRecordClassType) {
326
+ if (PKFieldCache.has(EntityClass)) return PKFieldCache.get(EntityClass)!;
327
+ const pkField = ReflectionClass.from(EntityClass).getPrimary().name;
328
+ PKFieldCache.set(EntityClass, pkField);
329
+ return pkField;
330
+ }
331
+
332
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
333
+ export function getPKFieldForEntityInstance(entity: any) {
334
+ if (!(entity instanceof ActiveRecord)) {
335
+ if (typeof entity === 'object' && 'id' in entity) return 'id';
336
+ throw new Error('Entity does not extend ActiveRecord class and does not have "id" field');
337
+ }
338
+ return getPKFieldForEntity(entity.constructor as ActiveRecordClassType);
339
+ }
340
+
341
+ type EntityFilter<T extends ActiveRecordClassType> = FilterQuery<InstanceType<T>> | string | number;
342
+
343
+ function getEntityFilter<T extends ActiveRecordClassType>(EntityClass: T, filter: EntityFilter<T>): FilterQuery<InstanceType<T>> {
344
+ if (typeof filter === 'object') return filter;
345
+ const pkField = getPKFieldForEntity(EntityClass);
346
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
347
+ return { [pkField]: filter } as any;
348
+ }
349
+
350
+ export async function getEntityOrUndefined<T extends ActiveRecordClassType>(
351
+ EntityClass: T,
352
+ filter: EntityFilter<T>
353
+ ): Promise<InstanceType<T> | undefined> {
354
+ const query: SQLDatabaseQuery<InstanceType<T>> = EntityClass.query();
355
+ const resolvedFilter = getEntityFilter(EntityClass, filter);
356
+ return query.filter(resolvedFilter).findOneOrUndefined();
357
+ }
358
+
359
+ export async function getEntityOr404<T extends ActiveRecordClassType>(EntityClass: T, filter: EntityFilter<T>): Promise<InstanceType<T>> {
360
+ const entity = await getEntityOrUndefined(EntityClass, filter);
361
+ if (!entity) throw new HttpNotFoundError();
362
+ return entity;
363
+ }
364
+
365
+ export async function getEntity<T extends ActiveRecordClassType>(EntityClass: T, filter: EntityFilter<T>): Promise<InstanceType<T>> {
366
+ const entity = await getEntityOrUndefined(EntityClass, filter);
367
+ if (!entity) throw new ItemNotFound();
368
+ return entity;
369
+ }
370
+
371
+ export async function entityExists<T extends ActiveRecordClassType>(EntityClass: T, filter: EntityFilter<T>): Promise<boolean> {
372
+ const query: SQLDatabaseQuery<InstanceType<T>> = EntityClass.query();
373
+ const resolvedFilter = getEntityFilter(EntityClass, filter);
374
+ return query.filter(resolvedFilter).has();
375
+ }
376
+
377
+ export function getEntityFields<T extends ActiveRecord>(entity: T): EntityFields<T> {
378
+ return pick(entity, Object.keys(entity)) as EntityFields<T>;
379
+ }
380
+
381
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
382
+ export function logSql(sql: string, bindings: any[] = []) {
383
+ const logBindings = [...bindings];
384
+ console.log(sql.replace(/\?/g, () => JSON.stringify(logBindings.shift())));
385
+ }
@@ -0,0 +1,43 @@
1
+ import { SQLDatabaseAdapter } from '@deepkit/sql';
2
+
3
+ export type Dialect = 'mysql' | 'postgres';
4
+
5
+ export function getDialect(adapter: SQLDatabaseAdapter): Dialect {
6
+ const name = adapter.getName();
7
+ if (name === 'mysql') return 'mysql';
8
+ if (name === 'postgres') return 'postgres';
9
+ throw new Error(`Unsupported database dialect: ${name}`);
10
+ }
11
+
12
+ export function quoteId(dialect: Dialect, name: string): string {
13
+ if (dialect === 'mysql') return `\`${name.replace(/`/g, '``')}\``;
14
+ return `"${name.replace(/"/g, '""')}"`;
15
+ }
16
+
17
+ export function tableExistsSql(dialect: Dialect, tableName: string, schema = 'public'): string {
18
+ if (dialect === 'mysql') {
19
+ return `SHOW TABLES LIKE '${tableName}'`;
20
+ }
21
+ return `SELECT tablename FROM pg_tables WHERE schemaname = '${schema}' AND tablename = '${tableName}'`;
22
+ }
23
+
24
+ export function listTablesSql(dialect: Dialect, schema = 'public'): string {
25
+ if (dialect === 'mysql') {
26
+ return `SHOW TABLES`;
27
+ }
28
+ return `SELECT tablename FROM pg_tables WHERE schemaname = '${schema}'`;
29
+ }
30
+
31
+ export function listDatabasesSql(dialect: Dialect): string {
32
+ if (dialect === 'mysql') {
33
+ return `SHOW DATABASES`;
34
+ }
35
+ return `SELECT datname AS "Database" FROM pg_database WHERE datistemplate = false`;
36
+ }
37
+
38
+ export function currentDatabaseSql(dialect: Dialect): string {
39
+ if (dialect === 'mysql') {
40
+ return `SELECT DATABASE()`;
41
+ }
42
+ return `SELECT current_database()`;
43
+ }