alepha 0.18.2 → 0.18.3

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 (397) hide show
  1. package/assets/devtools-ui/200.html +2 -2
  2. package/assets/devtools-ui/200.html.br +0 -0
  3. package/assets/devtools-ui/404.html +2 -2
  4. package/assets/devtools-ui/404.html.br +0 -0
  5. package/assets/devtools-ui/{asset.BfSBZ5Dd.css → asset.hG_f8HuK.css} +1 -1
  6. package/assets/devtools-ui/asset.hG_f8HuK.css.br +0 -0
  7. package/assets/devtools-ui/chunk.B3au4Lhg.js +1 -0
  8. package/assets/devtools-ui/chunk.B3au4Lhg.js.br +0 -0
  9. package/assets/devtools-ui/chunk.BLOrlnMB.js +1 -0
  10. package/assets/devtools-ui/chunk.BLOrlnMB.js.br +0 -0
  11. package/assets/devtools-ui/chunk.BLR01ljW.js +1 -0
  12. package/assets/devtools-ui/chunk.BLR01ljW.js.br +0 -0
  13. package/assets/devtools-ui/chunk.BTXaIUlA.js +1 -0
  14. package/assets/devtools-ui/chunk.BTXaIUlA.js.br +0 -0
  15. package/assets/devtools-ui/{chunk.lJL-lgnW.js → chunk.BhJaxmm8.js} +1 -1
  16. package/assets/devtools-ui/chunk.BhJaxmm8.js.br +0 -0
  17. package/assets/devtools-ui/chunk.BtoNxFuL.js +1 -0
  18. package/assets/devtools-ui/chunk.BtoNxFuL.js.br +0 -0
  19. package/assets/devtools-ui/chunk.C8YUV2Wd.js +1 -0
  20. package/assets/devtools-ui/chunk.C8YUV2Wd.js.br +0 -0
  21. package/assets/devtools-ui/{chunk.M6wyKO_3.js → chunk.CBbIgDzE.js} +2 -2
  22. package/assets/devtools-ui/chunk.CBbIgDzE.js.br +0 -0
  23. package/assets/devtools-ui/chunk.CFqIniwA.js +1 -0
  24. package/assets/devtools-ui/chunk.CFqIniwA.js.br +0 -0
  25. package/assets/devtools-ui/chunk.CLFF7f7-.js +1 -0
  26. package/assets/devtools-ui/chunk.CLFF7f7-.js.br +0 -0
  27. package/assets/devtools-ui/chunk.CRsBbA10.js +1 -0
  28. package/assets/devtools-ui/chunk.CRsBbA10.js.br +0 -0
  29. package/assets/devtools-ui/{chunk.DbEH1oOB.js → chunk.CZPo6v95.js} +1 -1
  30. package/assets/devtools-ui/chunk.CZPo6v95.js.br +0 -0
  31. package/assets/devtools-ui/chunk.D0fWgNos.js +1 -0
  32. package/assets/devtools-ui/chunk.D0fWgNos.js.br +1 -0
  33. package/assets/devtools-ui/chunk.D7-0ziQ6.js +1 -0
  34. package/assets/devtools-ui/chunk.D7-0ziQ6.js.br +0 -0
  35. package/assets/devtools-ui/chunk.DAewe0vm.js +1 -0
  36. package/assets/devtools-ui/chunk.DAewe0vm.js.br +0 -0
  37. package/assets/devtools-ui/chunk.DJRQEYqK.js +1 -0
  38. package/assets/devtools-ui/chunk.DJRQEYqK.js.br +0 -0
  39. package/assets/devtools-ui/{chunk.CZl6J9DF.js → chunk.DMAxv14p.js} +1 -1
  40. package/assets/devtools-ui/chunk.DMAxv14p.js.br +0 -0
  41. package/assets/devtools-ui/{chunk.BT2IiBkZ.js → chunk.DMImnNjU.js} +1 -1
  42. package/assets/devtools-ui/chunk.DMImnNjU.js.br +0 -0
  43. package/assets/devtools-ui/chunk.DeeQsidk.js +9 -0
  44. package/assets/devtools-ui/chunk.DeeQsidk.js.br +0 -0
  45. package/assets/devtools-ui/chunk.DqEwn9Vj.js +7 -0
  46. package/assets/devtools-ui/chunk.DqEwn9Vj.js.br +0 -0
  47. package/assets/devtools-ui/chunk.Dt8OsQey.js +1 -0
  48. package/assets/devtools-ui/chunk.Dt8OsQey.js.br +0 -0
  49. package/assets/devtools-ui/{chunk.B9pX3zit.js → chunk.Dtp8oa_f.js} +1 -1
  50. package/assets/devtools-ui/chunk.Dtp8oa_f.js.br +0 -0
  51. package/assets/devtools-ui/chunk.Dx3JzAYM.js +1 -0
  52. package/assets/devtools-ui/chunk.Dx3JzAYM.js.br +0 -0
  53. package/assets/devtools-ui/chunk.GCOj1-5E.js +1 -0
  54. package/assets/devtools-ui/chunk.GCOj1-5E.js.br +0 -0
  55. package/assets/devtools-ui/chunk.IC1LD8BH.js +1 -0
  56. package/assets/devtools-ui/chunk.IC1LD8BH.js.br +0 -0
  57. package/assets/devtools-ui/chunk.IwuB_TqW.js +1 -0
  58. package/assets/devtools-ui/chunk.IwuB_TqW.js.br +0 -0
  59. package/assets/devtools-ui/chunk.Qqapj2zq.js +1 -0
  60. package/assets/devtools-ui/chunk.Qqapj2zq.js.br +0 -0
  61. package/assets/devtools-ui/{chunk.C79YouPp.js → chunk.TKKKndOy.js} +1 -1
  62. package/assets/devtools-ui/chunk.TKKKndOy.js.br +0 -0
  63. package/assets/devtools-ui/chunk.YHTVhFQT.js +1 -0
  64. package/assets/devtools-ui/chunk.YHTVhFQT.js.br +0 -0
  65. package/assets/devtools-ui/chunk.fnod6uEi.js +1 -0
  66. package/assets/devtools-ui/chunk.fnod6uEi.js.br +0 -0
  67. package/assets/devtools-ui/chunk.mOCRmXjo.js +1 -0
  68. package/assets/devtools-ui/chunk.mOCRmXjo.js.br +0 -0
  69. package/assets/devtools-ui/chunk.qZTNEAK0.js +1 -0
  70. package/assets/devtools-ui/chunk.qZTNEAK0.js.br +0 -0
  71. package/assets/devtools-ui/chunk.rc9m0y4-.js +1 -0
  72. package/assets/devtools-ui/chunk.rc9m0y4-.js.br +0 -0
  73. package/assets/devtools-ui/entry.Cxc5QLCU.js +80 -0
  74. package/assets/devtools-ui/entry.Cxc5QLCU.js.br +0 -0
  75. package/assets/devtools-ui/index.html +2 -2
  76. package/assets/devtools-ui/index.html.br +0 -0
  77. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  78. package/assets/swagger-ui/swagger-ui.css +1 -1
  79. package/dist/api/audits/index.d.ts +61 -5
  80. package/dist/api/audits/index.d.ts.map +1 -1
  81. package/dist/api/files/index.d.ts +61 -5
  82. package/dist/api/files/index.d.ts.map +1 -1
  83. package/dist/api/jobs/index.d.ts +61 -5
  84. package/dist/api/jobs/index.d.ts.map +1 -1
  85. package/dist/api/jobs/index.js +4 -2
  86. package/dist/api/jobs/index.js.map +1 -1
  87. package/dist/api/keys/index.d.ts +5 -5
  88. package/dist/api/notifications/index.browser.js +44 -1
  89. package/dist/api/notifications/index.browser.js.map +1 -1
  90. package/dist/api/notifications/index.d.ts +187 -2
  91. package/dist/api/notifications/index.d.ts.map +1 -1
  92. package/dist/api/notifications/index.js +143 -8
  93. package/dist/api/notifications/index.js.map +1 -1
  94. package/dist/api/parameters/index.d.ts +61 -5
  95. package/dist/api/parameters/index.d.ts.map +1 -1
  96. package/dist/api/users/index.d.ts +330 -93
  97. package/dist/api/users/index.d.ts.map +1 -1
  98. package/dist/api/users/index.js +27 -36
  99. package/dist/api/users/index.js.map +1 -1
  100. package/dist/cli/config/index.d.ts +46 -0
  101. package/dist/cli/config/index.d.ts.map +1 -0
  102. package/dist/cli/config/index.js +20 -0
  103. package/dist/cli/config/index.js.map +1 -0
  104. package/dist/cli/core/index.d.ts +69 -66
  105. package/dist/cli/core/index.d.ts.map +1 -1
  106. package/dist/cli/core/index.js +329 -196
  107. package/dist/cli/core/index.js.map +1 -1
  108. package/dist/cli/platform/index.d.ts +302 -63
  109. package/dist/cli/platform/index.d.ts.map +1 -1
  110. package/dist/cli/platform/index.js +455 -25
  111. package/dist/cli/platform/index.js.map +1 -1
  112. package/dist/core/index.browser.js +125 -87
  113. package/dist/core/index.browser.js.map +1 -1
  114. package/dist/core/index.d.ts +62 -53
  115. package/dist/core/index.d.ts.map +1 -1
  116. package/dist/core/index.js +125 -87
  117. package/dist/core/index.js.map +1 -1
  118. package/dist/core/index.native.js +125 -87
  119. package/dist/core/index.native.js.map +1 -1
  120. package/dist/core/index.workerd.js +125 -87
  121. package/dist/core/index.workerd.js.map +1 -1
  122. package/dist/crypto/index.d.ts +18 -1
  123. package/dist/crypto/index.d.ts.map +1 -1
  124. package/dist/crypto/index.js +29 -3
  125. package/dist/crypto/index.js.map +1 -1
  126. package/dist/devtools/index.js +3 -12
  127. package/dist/devtools/index.js.map +1 -1
  128. package/dist/logger/index.d.ts +10 -1
  129. package/dist/logger/index.d.ts.map +1 -1
  130. package/dist/logger/index.js +19 -9
  131. package/dist/logger/index.js.map +1 -1
  132. package/dist/orm/core/index.browser.js +57 -1
  133. package/dist/orm/core/index.browser.js.map +1 -1
  134. package/dist/orm/core/index.bun.js +378 -19
  135. package/dist/orm/core/index.bun.js.map +1 -1
  136. package/dist/orm/core/index.d.ts +328 -9
  137. package/dist/orm/core/index.d.ts.map +1 -1
  138. package/dist/orm/core/index.js +384 -21
  139. package/dist/orm/core/index.js.map +1 -1
  140. package/dist/orm/postgres/index.bun.js +49 -17
  141. package/dist/orm/postgres/index.bun.js.map +1 -1
  142. package/dist/orm/postgres/index.d.ts +47 -21
  143. package/dist/orm/postgres/index.d.ts.map +1 -1
  144. package/dist/orm/postgres/index.js +52 -17
  145. package/dist/orm/postgres/index.js.map +1 -1
  146. package/dist/react/core/index.d.ts +1 -1
  147. package/dist/react/core/index.d.ts.map +1 -1
  148. package/dist/react/core/index.js +6 -1
  149. package/dist/react/core/index.js.map +1 -1
  150. package/dist/react/form/index.d.ts +28 -18
  151. package/dist/react/form/index.d.ts.map +1 -1
  152. package/dist/react/form/index.js +92 -56
  153. package/dist/react/form/index.js.map +1 -1
  154. package/dist/react/router/index.browser.js +448 -116
  155. package/dist/react/router/index.browser.js.map +1 -1
  156. package/dist/react/router/index.d.ts +102 -40
  157. package/dist/react/router/index.d.ts.map +1 -1
  158. package/dist/react/router/index.js +453 -92
  159. package/dist/react/router/index.js.map +1 -1
  160. package/dist/security/index.d.ts +3 -11
  161. package/dist/security/index.d.ts.map +1 -1
  162. package/dist/security/index.js +6 -11
  163. package/dist/security/index.js.map +1 -1
  164. package/dist/server/auth/index.d.ts +22 -24
  165. package/dist/server/auth/index.d.ts.map +1 -1
  166. package/dist/server/auth/index.js +102 -82
  167. package/dist/server/auth/index.js.map +1 -1
  168. package/dist/server/cookies/index.d.ts +7 -4
  169. package/dist/server/cookies/index.d.ts.map +1 -1
  170. package/dist/server/cookies/index.js +13 -12
  171. package/dist/server/cookies/index.js.map +1 -1
  172. package/dist/server/core/index.d.ts +288 -4
  173. package/dist/server/core/index.d.ts.map +1 -1
  174. package/dist/server/core/index.js +375 -2
  175. package/dist/server/core/index.js.map +1 -1
  176. package/dist/server/links/index.browser.js +10 -71
  177. package/dist/server/links/index.browser.js.map +1 -1
  178. package/dist/server/links/index.d.ts +32 -49
  179. package/dist/server/links/index.d.ts.map +1 -1
  180. package/dist/server/links/index.js +73 -100
  181. package/dist/server/links/index.js.map +1 -1
  182. package/dist/system/index.browser.js +221 -2
  183. package/dist/system/index.browser.js.map +1 -1
  184. package/dist/system/index.d.ts +63 -1
  185. package/dist/system/index.d.ts.map +1 -1
  186. package/dist/system/index.js +221 -1
  187. package/dist/system/index.js.map +1 -1
  188. package/dist/system/index.workerd.js +224 -4
  189. package/dist/system/index.workerd.js.map +1 -1
  190. package/package.json +10 -5
  191. package/src/api/jobs/providers/JobProvider.ts +6 -3
  192. package/src/api/notifications/controllers/AdminNotificationController.ts +83 -0
  193. package/src/api/notifications/index.browser.ts +3 -0
  194. package/src/api/notifications/index.ts +14 -2
  195. package/src/api/notifications/jobs/NotificationJobs.ts +11 -2
  196. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +20 -0
  197. package/src/api/notifications/schemas/notificationQuerySchema.ts +19 -0
  198. package/src/api/notifications/schemas/notificationResourceSchema.ts +18 -0
  199. package/src/api/notifications/services/NotificationSenderService.ts +15 -2
  200. package/src/api/users/atoms/realmAuthSettingsAtom.ts +28 -32
  201. package/src/api/users/buckets/UserBuckets.ts +1 -1
  202. package/src/api/users/jobs/UserJobs.ts +1 -1
  203. package/src/api/users/primitives/$realm.ts +8 -49
  204. package/src/api/users/providers/RealmProvider.ts +2 -3
  205. package/src/api/users/services/RegistrationService.spec.ts +7 -7
  206. package/src/api/users/services/RegistrationService.ts +3 -3
  207. package/src/api/users/services/SessionService.spec.ts +4 -4
  208. package/src/api/users/services/SessionService.ts +3 -3
  209. package/src/cli/{core → config}/defineConfig.ts +14 -20
  210. package/src/cli/config/index.ts +1 -0
  211. package/src/cli/core/commands/db.ts +65 -1
  212. package/src/cli/core/commands/dev.ts +1 -0
  213. package/src/cli/core/commands/init.ts +2 -192
  214. package/src/cli/core/index.ts +34 -11
  215. package/src/cli/core/providers/ViteDevServerProvider.ts +52 -13
  216. package/src/cli/core/services/PackageManagerUtils.ts +43 -21
  217. package/src/cli/core/services/ProjectScaffolder.ts +214 -2
  218. package/src/cli/core/services/ViteUtils.ts +57 -0
  219. package/src/cli/core/tasks/BuildClientTask.ts +7 -2
  220. package/src/cli/core/tasks/BuildCloudflareTask.ts +4 -12
  221. package/src/cli/core/tasks/BuildServerTask.ts +2 -0
  222. package/src/cli/core/tasks/BuildVercelTask.ts +165 -168
  223. package/src/cli/core/templates/alephaConfigTs.ts +1 -1
  224. package/src/cli/core/templates/apiAppSecurityTs.ts +5 -8
  225. package/src/cli/core/templates/tsconfigJson.ts +6 -1
  226. package/src/cli/platform/adapters/CloudflareAdapter.spec.ts +1 -1
  227. package/src/cli/platform/adapters/CloudflareAdapter.ts +30 -29
  228. package/src/cli/platform/atoms/platformOptions.ts +21 -0
  229. package/src/cli/platform/commands/SecretsCommand.spec.ts +298 -0
  230. package/src/cli/platform/commands/SecretsCommand.ts +283 -0
  231. package/src/cli/platform/commands/platform.ts +12 -0
  232. package/src/cli/platform/index.ts +14 -28
  233. package/src/cli/platform/providers/GitHubSecretStore.spec.ts +153 -0
  234. package/src/cli/platform/providers/GitHubSecretStore.ts +112 -0
  235. package/src/cli/platform/providers/MemorySecretStore.ts +114 -0
  236. package/src/cli/platform/providers/SecretStoreProvider.ts +39 -0
  237. package/src/cli/platform/schemas/cloudflare.ts +2 -0
  238. package/src/cli/platform/services/CloudflareApi.ts +5 -2
  239. package/src/cli/platform/services/DockerComposeGenerator.spec.ts +115 -0
  240. package/src/cli/platform/services/DockerComposeGenerator.ts +46 -1
  241. package/src/cli/platform/services/SecretFilterService.spec.ts +111 -0
  242. package/src/cli/platform/services/SecretFilterService.ts +54 -0
  243. package/src/core/Alepha.ts +94 -25
  244. package/src/core/__tests__/Alepha-parseEnv.spec.ts +20 -0
  245. package/src/core/primitives/$memoize.ts +38 -26
  246. package/src/core/providers/AlsProvider.ts +2 -0
  247. package/src/core/providers/EventManager.ts +4 -0
  248. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +1 -4
  249. package/src/core/providers/KeylessJsonSchemaCodec.ts +19 -125
  250. package/src/core/providers/SchemaValidator.spec.ts +36 -0
  251. package/src/core/providers/SchemaValidator.ts +9 -0
  252. package/src/crypto/index.ts +6 -1
  253. package/src/crypto/providers/SecretProvider.ts +36 -0
  254. package/src/devtools/providers/DevToolsProvider.ts +3 -12
  255. package/src/logger/index.ts +33 -6
  256. package/src/logger/providers/PrettyFormatterProvider.ts +5 -3
  257. package/src/orm/__tests__/orm-next-tests.ts +492 -0
  258. package/src/orm/__tests__/orm-next.spec.ts +140 -0
  259. package/src/orm/core/constants/PG_SYMBOLS.ts +17 -0
  260. package/src/orm/core/index.bun.ts +3 -6
  261. package/src/orm/core/index.shared-server.ts +2 -0
  262. package/src/orm/core/index.shared.ts +2 -0
  263. package/src/orm/core/index.ts +5 -7
  264. package/src/orm/core/interfaces/AggregateQuery.ts +103 -0
  265. package/src/orm/core/interfaces/PgQueryWhere.ts +7 -0
  266. package/src/orm/core/primitives/$entity.ts +8 -0
  267. package/src/orm/core/primitives/$repository.ts +6 -3
  268. package/src/orm/core/primitives/$view.ts +88 -0
  269. package/src/orm/core/providers/DbCacheProvider.ts +66 -0
  270. package/src/orm/core/providers/DrizzleKitProvider.ts +42 -0
  271. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +2 -3
  272. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +12 -0
  273. package/src/orm/core/providers/drivers/DatabaseProvider.ts +39 -0
  274. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +2 -3
  275. package/src/orm/core/schemas/databaseEnvSchema.ts +31 -0
  276. package/src/orm/core/schemas/insertSchema.ts +13 -3
  277. package/src/orm/core/schemas/updateSchema.ts +14 -3
  278. package/src/orm/core/services/ModelBuilder.ts +26 -14
  279. package/src/orm/core/services/QueryManager.ts +13 -0
  280. package/src/orm/core/services/Repository.ts +307 -5
  281. package/src/orm/core/services/SqliteModelBuilder.ts +38 -0
  282. package/src/orm/postgres/index.bun.ts +4 -7
  283. package/src/orm/postgres/index.ts +4 -7
  284. package/src/orm/postgres/providers/BunPostgresProvider.ts +12 -2
  285. package/src/orm/postgres/providers/NodePostgresProvider.ts +7 -0
  286. package/src/orm/postgres/providers/PglitePostgresProvider.ts +10 -17
  287. package/src/orm/postgres/providers/PostgresProvider.ts +7 -36
  288. package/src/orm/postgres/schemas/postgresEnvSchema.ts +32 -0
  289. package/src/orm/postgres/services/PostgresModelBuilder.ts +40 -0
  290. package/src/react/core/components/ErrorBoundary.tsx +5 -2
  291. package/src/react/form/hooks/useFieldValue.ts +34 -0
  292. package/src/react/form/hooks/useForm.browser.spec.tsx +94 -9
  293. package/src/react/form/hooks/useForm.ts +14 -2
  294. package/src/react/form/hooks/useFormState.ts +10 -10
  295. package/src/react/form/hooks/useFormValues.ts +29 -0
  296. package/src/react/form/index.ts +3 -1
  297. package/src/react/form/services/FormModel.ts +53 -122
  298. package/src/react/router/components/ErrorViewer.tsx +333 -34
  299. package/src/react/router/components/NestedView.tsx +10 -3
  300. package/src/react/router/primitives/$page.browser.spec.tsx +34 -0
  301. package/src/react/router/primitives/$page.spec.tsx +20 -0
  302. package/src/react/router/primitives/$page.ts +24 -0
  303. package/src/react/router/providers/ReactBrowserRouterProvider.ts +14 -2
  304. package/src/react/router/providers/ReactPageProvider.ts +156 -73
  305. package/src/react/router/providers/ReactServerProvider.ts +40 -2
  306. package/src/react/router/providers/ReactServerTemplateProvider.ts +13 -1
  307. package/src/security/providers/SecurityProvider.ts +5 -27
  308. package/src/server/auth/primitives/$auth.ts +52 -19
  309. package/src/server/auth/providers/ServerAuthProvider.ts +145 -139
  310. package/src/server/cookies/providers/ServerCookiesProvider.ts +12 -24
  311. package/src/server/core/index.ts +3 -1
  312. package/src/server/core/primitives/$sse.spec.ts +315 -0
  313. package/src/server/core/primitives/$sse.ts +715 -0
  314. package/src/server/links/index.browser.ts +1 -3
  315. package/src/server/links/index.ts +0 -3
  316. package/src/server/links/providers/LinkProvider.spec.ts +12 -21
  317. package/src/server/links/providers/LinkProvider.ts +20 -52
  318. package/src/server/links/providers/ServerLinksProvider.spec.ts +106 -0
  319. package/src/server/links/providers/ServerLinksProvider.ts +113 -73
  320. package/src/server/links/schemas/apiLinksResponseSchema.ts +4 -21
  321. package/src/server/links/services/BatchCollector.ts +5 -3
  322. package/src/system/index.browser.ts +1 -0
  323. package/src/system/index.ts +3 -0
  324. package/src/system/index.workerd.ts +39 -1
  325. package/src/system/providers/WorkerdFileSystemProvider.ts +365 -0
  326. package/assets/devtools-ui/asset.BfSBZ5Dd.css.br +0 -0
  327. package/assets/devtools-ui/chunk.2NYaoqWt.js +0 -1
  328. package/assets/devtools-ui/chunk.2NYaoqWt.js.br +0 -0
  329. package/assets/devtools-ui/chunk.B052Z_xQ.js +0 -1
  330. package/assets/devtools-ui/chunk.B052Z_xQ.js.br +0 -0
  331. package/assets/devtools-ui/chunk.B4kVY90C.js +0 -1
  332. package/assets/devtools-ui/chunk.B4kVY90C.js.br +0 -0
  333. package/assets/devtools-ui/chunk.B7QJXctB.js +0 -1
  334. package/assets/devtools-ui/chunk.B7QJXctB.js.br +0 -0
  335. package/assets/devtools-ui/chunk.B9pX3zit.js.br +0 -0
  336. package/assets/devtools-ui/chunk.BKF9JxIo.js +0 -1
  337. package/assets/devtools-ui/chunk.BKF9JxIo.js.br +0 -0
  338. package/assets/devtools-ui/chunk.BOHgdTP-.js +0 -1
  339. package/assets/devtools-ui/chunk.BOHgdTP-.js.br +0 -0
  340. package/assets/devtools-ui/chunk.BOVFxkYC.js +0 -1
  341. package/assets/devtools-ui/chunk.BOVFxkYC.js.br +0 -0
  342. package/assets/devtools-ui/chunk.BR842zj5.js +0 -1
  343. package/assets/devtools-ui/chunk.BR842zj5.js.br +0 -0
  344. package/assets/devtools-ui/chunk.BT2IiBkZ.js.br +0 -0
  345. package/assets/devtools-ui/chunk.C79YouPp.js.br +0 -0
  346. package/assets/devtools-ui/chunk.C8mlBrjW.js +0 -9
  347. package/assets/devtools-ui/chunk.C8mlBrjW.js.br +0 -0
  348. package/assets/devtools-ui/chunk.CK0ow3AZ.js +0 -1
  349. package/assets/devtools-ui/chunk.CK0ow3AZ.js.br +0 -0
  350. package/assets/devtools-ui/chunk.CZl6J9DF.js.br +0 -0
  351. package/assets/devtools-ui/chunk.CdNr0YzS.js +0 -1
  352. package/assets/devtools-ui/chunk.CdNr0YzS.js.br +0 -0
  353. package/assets/devtools-ui/chunk.Ce6_6iIF.js +0 -1
  354. package/assets/devtools-ui/chunk.Ce6_6iIF.js.br +0 -0
  355. package/assets/devtools-ui/chunk.CpyDMr6O.js +0 -1
  356. package/assets/devtools-ui/chunk.CpyDMr6O.js.br +0 -0
  357. package/assets/devtools-ui/chunk.CyPmvPnY.js +0 -1
  358. package/assets/devtools-ui/chunk.CyPmvPnY.js.br +0 -0
  359. package/assets/devtools-ui/chunk.DTI_geWu.js +0 -1
  360. package/assets/devtools-ui/chunk.DTI_geWu.js.br +0 -0
  361. package/assets/devtools-ui/chunk.DbEH1oOB.js.br +0 -0
  362. package/assets/devtools-ui/chunk.Ddeqj5gv.js +0 -1
  363. package/assets/devtools-ui/chunk.Ddeqj5gv.js.br +0 -0
  364. package/assets/devtools-ui/chunk.DpRnB4vJ.js +0 -1
  365. package/assets/devtools-ui/chunk.DpRnB4vJ.js.br +0 -0
  366. package/assets/devtools-ui/chunk.DxPGTlsg.js +0 -1
  367. package/assets/devtools-ui/chunk.DxPGTlsg.js.br +0 -0
  368. package/assets/devtools-ui/chunk.G7_MMBJS.js +0 -1
  369. package/assets/devtools-ui/chunk.G7_MMBJS.js.br +0 -0
  370. package/assets/devtools-ui/chunk.M6wyKO_3.js.br +0 -0
  371. package/assets/devtools-ui/chunk.OUxNGmQ6.js +0 -1
  372. package/assets/devtools-ui/chunk.OUxNGmQ6.js.br +0 -0
  373. package/assets/devtools-ui/chunk.T1kle-fF.js +0 -1
  374. package/assets/devtools-ui/chunk.T1kle-fF.js.br +0 -0
  375. package/assets/devtools-ui/chunk.WjpsbQAv.js +0 -1
  376. package/assets/devtools-ui/chunk.WjpsbQAv.js.br +0 -0
  377. package/assets/devtools-ui/chunk.c6YgVx86.js +0 -1
  378. package/assets/devtools-ui/chunk.c6YgVx86.js.br +0 -0
  379. package/assets/devtools-ui/chunk.dwU3E_MU.js +0 -1
  380. package/assets/devtools-ui/chunk.dwU3E_MU.js.br +0 -0
  381. package/assets/devtools-ui/chunk.lJL-lgnW.js.br +0 -0
  382. package/assets/devtools-ui/chunk.lPWRmvA-.js +0 -7
  383. package/assets/devtools-ui/chunk.lPWRmvA-.js.br +0 -0
  384. package/assets/devtools-ui/chunk.p3HJvugM.js +0 -1
  385. package/assets/devtools-ui/chunk.p3HJvugM.js.br +0 -0
  386. package/assets/devtools-ui/chunk.r_Xoa_CI.js +0 -1
  387. package/assets/devtools-ui/chunk.r_Xoa_CI.js.br +0 -0
  388. package/assets/devtools-ui/chunk.sRNuTYXb.js +0 -1
  389. package/assets/devtools-ui/chunk.sRNuTYXb.js.br +0 -0
  390. package/assets/devtools-ui/chunk.tUjcyX5C.js +0 -1
  391. package/assets/devtools-ui/chunk.tUjcyX5C.js.br +0 -0
  392. package/assets/devtools-ui/chunk.thjBxvCA.js +0 -1
  393. package/assets/devtools-ui/chunk.thjBxvCA.js.br +0 -0
  394. package/assets/devtools-ui/entry.GYhBVRpC.js +0 -78
  395. package/assets/devtools-ui/entry.GYhBVRpC.js.br +0 -0
  396. package/src/server/links/services/DefinitionsPool.spec.ts +0 -86
  397. package/src/server/links/services/DefinitionsPool.ts +0 -43
@@ -10,6 +10,7 @@ export * from "./providers/FileSystemProvider.ts";
10
10
  export * from "./providers/MemoryFileSystemProvider.ts";
11
11
  export * from "./providers/MemoryShellProvider.ts";
12
12
  export * from "./providers/ShellProvider.ts";
13
+ export * from "./providers/WorkerdFileSystemProvider.ts";
13
14
  export * from "./services/FileDetector.ts";
14
15
 
15
16
  export const AlephaSystem = $module({
@@ -5,6 +5,7 @@ import { MemoryShellProvider } from "./providers/MemoryShellProvider.ts";
5
5
  import { NodeFileSystemProvider } from "./providers/NodeFileSystemProvider.ts";
6
6
  import { NodeShellProvider } from "./providers/NodeShellProvider.ts";
7
7
  import { ShellProvider } from "./providers/ShellProvider.ts";
8
+ import { WorkerdFileSystemProvider } from "./providers/WorkerdFileSystemProvider.ts";
8
9
  import { FileDetector } from "./services/FileDetector.ts";
9
10
 
10
11
  // ---------------------------------------------------------------------------------------------------------------------
@@ -16,6 +17,7 @@ export * from "./providers/MemoryShellProvider.ts";
16
17
  export * from "./providers/NodeFileSystemProvider.ts";
17
18
  export * from "./providers/NodeShellProvider.ts";
18
19
  export * from "./providers/ShellProvider.ts";
20
+ export * from "./providers/WorkerdFileSystemProvider.ts";
19
21
  export * from "./services/FileDetector.ts";
20
22
 
21
23
  // ---------------------------------------------------------------------------------------------------------------------
@@ -39,6 +41,7 @@ export const AlephaSystem = $module({
39
41
  FileSystemProvider,
40
42
  MemoryFileSystemProvider,
41
43
  NodeFileSystemProvider,
44
+ WorkerdFileSystemProvider,
42
45
  ShellProvider,
43
46
  MemoryShellProvider,
44
47
  NodeShellProvider,
@@ -1 +1,39 @@
1
- export * from "./index.browser.ts";
1
+ import { $module } from "alepha";
2
+ import { FileSystemProvider } from "./providers/FileSystemProvider.ts";
3
+ import { MemoryFileSystemProvider } from "./providers/MemoryFileSystemProvider.ts";
4
+ import { MemoryShellProvider } from "./providers/MemoryShellProvider.ts";
5
+ import { ShellProvider } from "./providers/ShellProvider.ts";
6
+ import { WorkerdFileSystemProvider } from "./providers/WorkerdFileSystemProvider.ts";
7
+ import { FileDetector } from "./services/FileDetector.ts";
8
+
9
+ export * from "./errors/FileError.ts";
10
+ export * from "./providers/FileSystemProvider.ts";
11
+ export * from "./providers/MemoryFileSystemProvider.ts";
12
+ export * from "./providers/MemoryShellProvider.ts";
13
+ export * from "./providers/ShellProvider.ts";
14
+ export * from "./providers/WorkerdFileSystemProvider.ts";
15
+ export * from "./services/FileDetector.ts";
16
+
17
+ export const AlephaSystem = $module({
18
+ name: "alepha.system",
19
+ services: [
20
+ FileDetector,
21
+ FileSystemProvider,
22
+ MemoryFileSystemProvider,
23
+ WorkerdFileSystemProvider,
24
+ ShellProvider,
25
+ MemoryShellProvider,
26
+ ],
27
+ register: (alepha) =>
28
+ alepha
29
+ .with({
30
+ optional: true,
31
+ provide: FileSystemProvider,
32
+ use: WorkerdFileSystemProvider,
33
+ })
34
+ .with({
35
+ optional: true,
36
+ provide: ShellProvider,
37
+ use: MemoryShellProvider,
38
+ }),
39
+ });
@@ -0,0 +1,365 @@
1
+ import { $inject, AlephaError, type FileLike, Json } from "alepha";
2
+ import { FileDetector } from "../services/FileDetector.ts";
3
+ import type {
4
+ CpOptions,
5
+ CreateFileOptions,
6
+ FileSystemProvider,
7
+ LsOptions,
8
+ MkdirOptions,
9
+ RmOptions,
10
+ } from "./FileSystemProvider.ts";
11
+
12
+ // ---------------------------------------------------------------------------------------------------------------------
13
+
14
+ /**
15
+ * Web-standard implementation of FileSystemProvider for Cloudflare Workers and other edge runtimes.
16
+ *
17
+ * Uses only Web APIs (ReadableStream, TextEncoder, etc.) — no Node.js-specific APIs.
18
+ * Provides working `createFile` with proper streaming support.
19
+ * Filesystem operations (rm, cp, mv, etc.) are not available in edge runtimes and will throw.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const fs = alepha.inject(WorkerdFileSystemProvider);
24
+ *
25
+ * // Create from text (returns FileLike with web ReadableStream)
26
+ * const file = fs.createFile({ text: "Hello!", name: "greeting.txt" });
27
+ * const stream = file.stream(); // ReadableStream (web standard)
28
+ * ```
29
+ */
30
+ export class WorkerdFileSystemProvider implements FileSystemProvider {
31
+ protected detector = $inject(FileDetector);
32
+ protected json = $inject(Json);
33
+
34
+ protected encoder = new TextEncoder();
35
+ protected decoder = new TextDecoder();
36
+
37
+ public join(...paths: string[]): string {
38
+ const joined = paths.join("/").replace(/\/+/g, "/");
39
+ const parts = joined.split("/");
40
+ const resolved: string[] = [];
41
+ for (const part of parts) {
42
+ if (part === "..") {
43
+ resolved.pop();
44
+ } else if (part !== ".") {
45
+ resolved.push(part);
46
+ }
47
+ }
48
+ return resolved.join("/") || ".";
49
+ }
50
+
51
+ public createFile(options: CreateFileOptions): FileLike {
52
+ if ("text" in options) {
53
+ return this.createFileFromText(options.text, {
54
+ type: options.type,
55
+ name: options.name,
56
+ });
57
+ }
58
+
59
+ if ("arrayBuffer" in options) {
60
+ return this.createFileFromArrayBuffer(options.arrayBuffer, {
61
+ type: options.type,
62
+ name: options.name,
63
+ });
64
+ }
65
+
66
+ if ("buffer" in options) {
67
+ const ab =
68
+ options.buffer instanceof ArrayBuffer
69
+ ? options.buffer
70
+ : options.buffer.buffer.slice(
71
+ options.buffer.byteOffset,
72
+ options.buffer.byteOffset + options.buffer.byteLength,
73
+ );
74
+ return this.createFileFromArrayBuffer(ab as ArrayBuffer, {
75
+ type: options.type,
76
+ name: options.name,
77
+ });
78
+ }
79
+
80
+ if ("file" in options) {
81
+ return this.createFileFromWebFile(options.file, {
82
+ type: options.type,
83
+ name: options.name,
84
+ size: options.size,
85
+ });
86
+ }
87
+
88
+ if ("response" in options) {
89
+ return this.createFileFromResponse(options.response, {
90
+ type: options.type,
91
+ name: options.name,
92
+ });
93
+ }
94
+
95
+ if ("stream" in options) {
96
+ return this.createFileFromStream(options.stream as ReadableStream, {
97
+ type: options.type,
98
+ name: options.name,
99
+ size: options.size,
100
+ });
101
+ }
102
+
103
+ if ("url" in options) {
104
+ return this.createFileFromUrl(options.url, {
105
+ type: options.type,
106
+ name: options.name,
107
+ });
108
+ }
109
+
110
+ if ("path" in options) {
111
+ throw new AlephaError(
112
+ "WorkerdFileSystemProvider.createFile: 'path' source is not supported in edge runtimes.",
113
+ );
114
+ }
115
+
116
+ throw new AlephaError(
117
+ "WorkerdFileSystemProvider.createFile: unsupported options.",
118
+ );
119
+ }
120
+
121
+ // -------------------------------------------------------------------------------------------------------------------
122
+
123
+ protected createFileFromText(
124
+ text: string,
125
+ options: { type?: string; name?: string } = {},
126
+ ): FileLike {
127
+ const encoded = this.encoder.encode(text);
128
+ const name = options.name ?? "file.txt";
129
+ return {
130
+ name,
131
+ type: options.type ?? this.detector.getContentType(name),
132
+ size: encoded.byteLength,
133
+ lastModified: Date.now(),
134
+ stream: () =>
135
+ new ReadableStream({
136
+ start(controller) {
137
+ controller.enqueue(encoded);
138
+ controller.close();
139
+ },
140
+ }),
141
+ arrayBuffer: async () =>
142
+ encoded.buffer.slice(
143
+ encoded.byteOffset,
144
+ encoded.byteOffset + encoded.byteLength,
145
+ ) as ArrayBuffer,
146
+ text: async () => text,
147
+ };
148
+ }
149
+
150
+ protected createFileFromArrayBuffer(
151
+ source: ArrayBuffer,
152
+ options: { type?: string; name?: string } = {},
153
+ ): FileLike {
154
+ const name = options.name ?? "file";
155
+ const bytes = new Uint8Array(source);
156
+ return {
157
+ name,
158
+ type: options.type ?? this.detector.getContentType(name),
159
+ size: source.byteLength,
160
+ lastModified: Date.now(),
161
+ stream: () =>
162
+ new ReadableStream({
163
+ start(controller) {
164
+ controller.enqueue(bytes);
165
+ controller.close();
166
+ },
167
+ }),
168
+ arrayBuffer: async () => source,
169
+ text: async () => this.decoder.decode(source),
170
+ };
171
+ }
172
+
173
+ protected createFileFromWebFile(
174
+ source: File,
175
+ options: { type?: string; name?: string; size?: number } = {},
176
+ ): FileLike {
177
+ const name = options.name ?? source.name;
178
+ return {
179
+ name,
180
+ type: options.type ?? (source.type || this.detector.getContentType(name)),
181
+ size: options.size ?? source.size ?? 0,
182
+ lastModified: source.lastModified || Date.now(),
183
+ stream: () => source.stream(),
184
+ arrayBuffer: async () => await source.arrayBuffer(),
185
+ text: async () => await source.text(),
186
+ };
187
+ }
188
+
189
+ protected createFileFromResponse(
190
+ response: Response,
191
+ options: { type?: string; name?: string } = {},
192
+ ): FileLike {
193
+ if (!response.body) {
194
+ throw new AlephaError("Response has no body stream");
195
+ }
196
+
197
+ const sizeHeader = response.headers.get("content-length");
198
+ const size = sizeHeader ? parseInt(sizeHeader, 10) : 0;
199
+
200
+ let name = options.name;
201
+ if (!name) {
202
+ const cd = response.headers.get("content-disposition");
203
+ if (cd) {
204
+ const match = cd.match(/filename="?([^"]+)"?/);
205
+ if (match) {
206
+ name = match[1];
207
+ }
208
+ }
209
+ }
210
+ name ??= "file";
211
+
212
+ const type =
213
+ options.type ?? response.headers.get("content-type") ?? undefined;
214
+
215
+ return {
216
+ name,
217
+ type: type ?? this.detector.getContentType(name),
218
+ size,
219
+ lastModified: Date.now(),
220
+ stream: () => response.body!,
221
+ arrayBuffer: async () => await response.arrayBuffer(),
222
+ text: async () => await response.text(),
223
+ };
224
+ }
225
+
226
+ protected createFileFromStream(
227
+ source: ReadableStream,
228
+ options: { type?: string; name?: string; size?: number } = {},
229
+ ): FileLike {
230
+ const name = options.name ?? "file";
231
+ let buffer: ArrayBuffer | null = null;
232
+
233
+ const consumeStream = async (): Promise<ArrayBuffer> => {
234
+ if (buffer) return buffer;
235
+ const reader = source.getReader();
236
+ const chunks: Uint8Array[] = [];
237
+ let done = false;
238
+ while (!done) {
239
+ const result = await reader.read();
240
+ done = result.done;
241
+ if (result.value) {
242
+ chunks.push(result.value);
243
+ }
244
+ }
245
+ const total = chunks.reduce((sum, c) => sum + c.byteLength, 0);
246
+ const merged = new Uint8Array(total);
247
+ let offset = 0;
248
+ for (const chunk of chunks) {
249
+ merged.set(chunk, offset);
250
+ offset += chunk.byteLength;
251
+ }
252
+ buffer = merged.buffer as ArrayBuffer;
253
+ return buffer;
254
+ };
255
+
256
+ return {
257
+ name,
258
+ type: options.type ?? this.detector.getContentType(name),
259
+ size: options.size ?? 0,
260
+ lastModified: Date.now(),
261
+ stream: () => source,
262
+ arrayBuffer: consumeStream,
263
+ text: async () => this.decoder.decode(await consumeStream()),
264
+ };
265
+ }
266
+
267
+ protected createFileFromUrl(
268
+ url: string,
269
+ options: { type?: string; name?: string } = {},
270
+ ): FileLike {
271
+ const parsedUrl = new URL(url);
272
+ const name = options.name ?? parsedUrl.pathname.split("/").pop() ?? "file";
273
+
274
+ return {
275
+ name,
276
+ type: options.type ?? this.detector.getContentType(name),
277
+ size: 0,
278
+ lastModified: Date.now(),
279
+ stream: () => {
280
+ throw new AlephaError(
281
+ "WorkerdFileSystemProvider: streaming from URL is not supported. Use fetch() and createFile({ response }) instead.",
282
+ );
283
+ },
284
+ arrayBuffer: async () => {
285
+ const res = await fetch(url);
286
+ return await res.arrayBuffer();
287
+ },
288
+ text: async () => {
289
+ const res = await fetch(url);
290
+ return await res.text();
291
+ },
292
+ };
293
+ }
294
+
295
+ // -------------------------------------------------------------------------------------------------------------------
296
+ // Filesystem operations — not available in edge runtimes
297
+ // -------------------------------------------------------------------------------------------------------------------
298
+
299
+ public async rm(_path: string, _options?: RmOptions): Promise<void> {
300
+ throw new AlephaError(
301
+ "WorkerdFileSystemProvider: rm() is not available in edge runtimes.",
302
+ );
303
+ }
304
+
305
+ public async cp(
306
+ _src: string,
307
+ _dest: string,
308
+ _options?: CpOptions,
309
+ ): Promise<void> {
310
+ throw new AlephaError(
311
+ "WorkerdFileSystemProvider: cp() is not available in edge runtimes.",
312
+ );
313
+ }
314
+
315
+ public async mv(_src: string, _dest: string): Promise<void> {
316
+ throw new AlephaError(
317
+ "WorkerdFileSystemProvider: mv() is not available in edge runtimes.",
318
+ );
319
+ }
320
+
321
+ public async mkdir(_path: string, _options?: MkdirOptions): Promise<void> {
322
+ throw new AlephaError(
323
+ "WorkerdFileSystemProvider: mkdir() is not available in edge runtimes.",
324
+ );
325
+ }
326
+
327
+ public async ls(_path: string, _options?: LsOptions): Promise<string[]> {
328
+ throw new AlephaError(
329
+ "WorkerdFileSystemProvider: ls() is not available in edge runtimes.",
330
+ );
331
+ }
332
+
333
+ public async exists(_path: string): Promise<boolean> {
334
+ throw new AlephaError(
335
+ "WorkerdFileSystemProvider: exists() is not available in edge runtimes.",
336
+ );
337
+ }
338
+
339
+ public async readFile(_path: string): Promise<Buffer> {
340
+ throw new AlephaError(
341
+ "WorkerdFileSystemProvider: readFile() is not available in edge runtimes.",
342
+ );
343
+ }
344
+
345
+ public async writeFile(
346
+ _path: string,
347
+ _data: Uint8Array | Buffer | string | FileLike,
348
+ ): Promise<void> {
349
+ throw new AlephaError(
350
+ "WorkerdFileSystemProvider: writeFile() is not available in edge runtimes.",
351
+ );
352
+ }
353
+
354
+ public async readTextFile(_path: string): Promise<string> {
355
+ throw new AlephaError(
356
+ "WorkerdFileSystemProvider: readTextFile() is not available in edge runtimes.",
357
+ );
358
+ }
359
+
360
+ public async readJsonFile<T = unknown>(_path: string): Promise<T> {
361
+ throw new AlephaError(
362
+ "WorkerdFileSystemProvider: readJsonFile() is not available in edge runtimes.",
363
+ );
364
+ }
365
+ }
@@ -1 +0,0 @@
1
- var O=Object.defineProperty;var l=(r,o)=>O(r,"name",{value:o,configurable:!0});import{a as U,Y as _,D as H,r as a,j as e,a5 as J,Z as Y,P as c,F as I,ae as G,G as K,a4 as $,T as x,U as k,ag as W,ad as Z,ac as q}from"./entry.GYhBVRpC.js";import{d as Q}from"./chunk.CpyDMr6O.js";import{a as X}from"./chunk.C8mlBrjW.js";import{A as R}from"./chunk.DpRnB4vJ.js";import{I as z}from"./chunk.C79YouPp.js";import{u as ee,I as te,T as se}from"./chunk.B052Z_xQ.js";import"./chunk.sRNuTYXb.js";import"./chunk.dwU3E_MU.js";import"./chunk.BOHgdTP-.js";import"./chunk.BKF9JxIo.js";import"./chunk.lJL-lgnW.js";import"./chunk.WjpsbQAv.js";import"./chunk.CZl6J9DF.js";import"./chunk.CK0ow3AZ.js";import"./chunk.r_Xoa_CI.js";import"./chunk.thjBxvCA.js";import"./chunk.Ce6_6iIF.js";import"./chunk.CyPmvPnY.js";import"./chunk.tUjcyX5C.js";const oe=Z.object({}),ne=l(r=>{if(!r)return null;try{const o=q(r);if(o?.properties)return o}catch{}return null},"toTypeBoxSchema"),re=l(({entity:r,record:o,isNew:s,onSave:d,onDelete:j,pkColumn:b})=>{const f=a.useMemo(()=>{const S=s?r.insertSchema:r.updateSchema;return ne(S)??oe},[r,s]),h=ee({schema:f,handler:l(()=>{},"handler"),initialValues:s?void 0:o},[f,o,s]);return e.jsxs(c,{direction:"column",gap:"md",children:[e.jsxs(c,{justify:"space-between",children:[e.jsx(x,{fz:"sm",fw:600,children:s?"New Record":`Edit Record (${b}: ${o?.[b]})`}),e.jsxs(c,{gap:"xs",children:[e.jsx(R,{size:"xs",onClick:l(()=>d(h.currentValues),"onClick"),children:s?"Create":"Save"}),!s&&e.jsx(R,{size:"sm",variant:"light",intent:"danger",onClick:j,icon:e.jsx(te,{size:14})})]})]}),e.jsx(se,{form:h,skipSubmitButton:!0,skipFormElement:!0,columns:1})]})},"RecordForm"),ae=l(r=>{const o="/db/editor/";if(!r.startsWith(o))return{table:"",recordId:""};const s=r.slice(o.length),d=s.indexOf("/");return d===-1?{table:decodeURIComponent(s),recordId:""}:{table:decodeURIComponent(s.slice(0,d)),recordId:decodeURIComponent(s.slice(d+1))}},"parseEditorPath"),ce=l(({entities:r})=>{const o=U(_),s=H(),[d,j]=a.useState([]),[b,f]=a.useState(!1),[h,S]=a.useState(""),[w,D]=a.useState(null),{table:n,recordId:y}=ae(s.pathname),m=y==="new",v=r.find(t=>t.name===n),p=v?.columns?.find(t=>t.primaryKey)?.name??"id",g=a.useCallback(async()=>{if(n){f(!0);try{const t=await o.fetch(`/__devtools/api/db/${n}/records?size=50`);j(t.data?.content??[]),D(t.data?.page)}catch{j([])}finally{f(!1)}}},[o,n]);a.useEffect(()=>{g()},[n,g]);const u=a.useMemo(()=>!y||m?null:d.find(t=>String(t[p])===y)??null,[d,y,m,p]),E=a.useCallback(t=>{s.push(`/db/editor/${encodeURIComponent(t)}`)},[s]),L=a.useCallback(t=>{const i=t[p];s.push(`/db/editor/${encodeURIComponent(n)}/${encodeURIComponent(String(i))}`)},[s,n,p]),T=a.useCallback(()=>{s.push(`/db/editor/${encodeURIComponent(n)}/new`)},[s,n]),P=l(async t=>{try{if(m)await o.fetch(`/__devtools/api/db/${n}/records`,{method:"POST",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}}),s.push(`/db/editor/${encodeURIComponent(n)}`);else if(u){const i=u[p];await o.fetch(`/__devtools/api/db/${n}/records/${i}`,{method:"PUT",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}})}await g()}catch{}},"handleSave"),B=l(async()=>{if(!u)return;const t=u[p];try{await o.fetch(`/__devtools/api/db/${n}/records/${t}`,{method:"DELETE"}),s.push(`/db/editor/${encodeURIComponent(n)}`),await g()}catch{}},"handleDelete"),F=a.useMemo(()=>r.filter(i=>i.name.toLowerCase().includes(h.toLowerCase())).map(i=>({id:`entity:${i.name}`,label:i.name,icon:e.jsx(Y,{size:13,color:"var(--mantine-color-blue-text)",style:{flexShrink:0}}),badge:e.jsx(J,{size:"xs",variant:"light",color:"gray",children:i.columns?.length??0})})),[r,h]),M=a.useCallback(t=>{const i=t.replace(/^entity:/,"");E(i)},[E]),V=a.useMemo(()=>new Set,[]),A=n?`entity:${n}`:"";return e.jsxs(c,{style:{flex:1,overflow:"hidden"},children:[e.jsxs(c,{w:200,style:{borderRight:`1px solid ${I.colors.border}`,flexShrink:0,display:"flex",flexDirection:"column"},children:[e.jsx(c,{p:"xs",children:e.jsx(G,{size:"xs",placeholder:"Filter tables...",leftSection:e.jsx(K,{size:14}),value:h,onChange:l(t=>S(t.currentTarget.value),"onChange")})}),e.jsx($,{style:{flex:1},px:"xs",children:e.jsx(X,{nodes:F,selectedId:A,openNodes:V,onSelect:M,onToggle:l(()=>{},"onToggle"),showLeafCount:!1})})]}),n&&e.jsxs(c,{w:200,style:{borderRight:`1px solid ${I.colors.border}`,flexShrink:0,display:"flex",flexDirection:"column"},children:[e.jsx(c,{px:"xs",py:"xs",style:{borderBottom:`1px solid ${I.colors.border}`,flexShrink:0},children:e.jsxs(c,{gap:"xs",justify:"space-between",children:[e.jsxs(x,{fz:10,c:"dimmed",tt:"uppercase",fw:600,lts:.5,children:["Records"," ",w?.totalElements!=null&&`(${w.totalElements})`]}),e.jsx(R,{size:"xs",variant:"subtle",color:"teal",onClick:T,icon:e.jsx(z,{size:14})})]})}),e.jsxs($,{style:{flex:1},px:"xs",py:"xs",children:[e.jsx(k,{w:"100%",py:4,className:"devtools-tree-node","data-selected":m||void 0,style:{borderRadius:6,paddingLeft:8,paddingRight:8,transition:"background 100ms ease"},onClick:T,children:e.jsxs(c,{gap:8,wrap:"nowrap",children:[e.jsx(z,{size:13,color:"var(--mantine-color-teal-text)",style:{flexShrink:0}}),e.jsx(x,{fz:12,c:"teal",children:"New Record"})]})}),b?e.jsx(c,{justify:"center",py:"md",children:e.jsx(W,{size:"xs"})}):d.map((t,i)=>{const C=t[p]??i,N=!m&&String(C)===y;return e.jsx(k,{w:"100%",py:4,className:"devtools-tree-node","data-selected":N||void 0,style:{borderRadius:6,paddingLeft:8,paddingRight:8,transition:"background 100ms ease"},onClick:l(()=>L(t),"onClick"),children:e.jsxs(x,{fz:12,ff:"monospace",truncate:!0,children:[p,": ",String(C)]})},String(C))})]})]}),e.jsxs(c,{style:{flex:1,overflow:"auto"},p:"md",children:[!n&&e.jsx(c,{align:"center",justify:"center",h:"100%",children:e.jsx(x,{c:"dimmed",fz:"sm",children:"Select a table to browse records"})}),n&&!u&&!m&&e.jsx(c,{align:"center",justify:"center",h:"100%",children:e.jsx(x,{c:"dimmed",fz:"sm",children:"Select a record or create a new one"})}),(u||m)&&v&&e.jsx(re,{entity:v,record:u,isNew:m,onSave:P,onDelete:B,pkColumn:p})]})]})},"DatabaseEditor"),Te=l(()=>{const r=U(_),[o,s]=a.useState([]);return a.useEffect(()=>{r.fetch("/__devtools/api/metadata",{schema:{response:Q}}).then(d=>s(d.data.entities??[])).catch(()=>{})},[r]),e.jsx(ce,{entities:o})},"DatabaseEditorPage");export{Te as default};