@antelopejs/interface-dms 0.10.3 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +21 -10
  3. package/dist/attachments.d.ts +15 -2
  4. package/dist/attachments.js +14 -1
  5. package/dist/attachments.js.map +1 -1
  6. package/dist/auth/db/models/sessions.model.d.ts +7 -5
  7. package/dist/auth/db/models/sessions.model.js +2 -9
  8. package/dist/auth/db/models/sessions.model.js.map +1 -1
  9. package/dist/auth/db/models/userExternalIdentities.model.d.ts +7 -5
  10. package/dist/auth/db/models/users.model.d.ts +7 -5
  11. package/dist/auth/db/tables/users.table.d.ts +4 -2
  12. package/dist/auth/db/tables/users.table.js.map +1 -1
  13. package/dist/auth/index.d.ts +4 -4
  14. package/dist/auth/internal/jwt-auth-decorator.d.ts +1 -1
  15. package/dist/auth/internal/jwt-auth-decorator.js +6 -3
  16. package/dist/auth/internal/jwt-auth-decorator.js.map +1 -1
  17. package/dist/auth/internal/request-authenticators.d.ts +12 -0
  18. package/dist/auth/internal/request-authenticators.js +53 -10
  19. package/dist/auth/internal/request-authenticators.js.map +1 -1
  20. package/dist/base/activity-feed.d.ts +34 -32
  21. package/dist/base/activity-feed.js +2 -0
  22. package/dist/base/activity-feed.js.map +1 -1
  23. package/dist/base/banner.d.ts +12 -10
  24. package/dist/base/banner.js +2 -0
  25. package/dist/base/banner.js.map +1 -1
  26. package/dist/base/block-registry/internal/describe.js +3 -9
  27. package/dist/base/block-registry/internal/describe.js.map +1 -1
  28. package/dist/base/block-registry/internal/ui.js +1 -1
  29. package/dist/base/block-registry/internal/ui.js.map +1 -1
  30. package/dist/base/card.d.ts +11 -9
  31. package/dist/base/card.js +2 -0
  32. package/dist/base/card.js.map +1 -1
  33. package/dist/base/chart-card.d.ts +4 -2
  34. package/dist/base/chart-card.js +2 -0
  35. package/dist/base/chart-card.js.map +1 -1
  36. package/dist/base/chart-schemas.d.ts +148 -148
  37. package/dist/base/chart.d.ts +65 -0
  38. package/dist/base/chart.js +65 -0
  39. package/dist/base/chart.js.map +1 -1
  40. package/dist/base/code-block.d.ts +5 -3
  41. package/dist/base/code-block.js +2 -0
  42. package/dist/base/code-block.js.map +1 -1
  43. package/dist/base/custom.d.ts +5 -0
  44. package/dist/base/custom.js +5 -0
  45. package/dist/base/custom.js.map +1 -1
  46. package/dist/base/data-types/default/address.d.ts +5 -0
  47. package/dist/base/data-types/default/address.js +5 -0
  48. package/dist/base/data-types/default/address.js.map +1 -1
  49. package/dist/base/data-types/default/choices.d.ts +20 -0
  50. package/dist/base/data-types/default/choices.js +20 -0
  51. package/dist/base/data-types/default/choices.js.map +1 -1
  52. package/dist/base/data-types/default/files.d.ts +22 -5
  53. package/dist/base/data-types/default/files.js +20 -0
  54. package/dist/base/data-types/default/files.js.map +1 -1
  55. package/dist/base/data-types/default/numbers.d.ts +15 -0
  56. package/dist/base/data-types/default/numbers.js +25 -9
  57. package/dist/base/data-types/default/numbers.js.map +1 -1
  58. package/dist/base/data-types/default/relations.d.ts +10 -2
  59. package/dist/base/data-types/default/relations.js +9 -6
  60. package/dist/base/data-types/default/relations.js.map +1 -1
  61. package/dist/base/data-types/default/strings.d.ts +25 -0
  62. package/dist/base/data-types/default/strings.js +25 -0
  63. package/dist/base/data-types/default/strings.js.map +1 -1
  64. package/dist/base/data-types/default-types.d.ts +1 -1
  65. package/dist/base/data-types/field-types.d.ts +10 -0
  66. package/dist/base/data-types/field-types.js +10 -0
  67. package/dist/base/data-types/field-types.js.map +1 -1
  68. package/dist/base/data-types/internal/relation-endpoints.js +1 -0
  69. package/dist/base/data-types/internal/relation-endpoints.js.map +1 -1
  70. package/dist/base/data-types/status-type.d.ts +5 -0
  71. package/dist/base/data-types/status-type.js +5 -0
  72. package/dist/base/data-types/status-type.js.map +1 -1
  73. package/dist/base/display.d.ts +6 -6
  74. package/dist/base/empty-state.d.ts +15 -13
  75. package/dist/base/empty-state.js +2 -0
  76. package/dist/base/empty-state.js.map +1 -1
  77. package/dist/base/form-block-schema.d.ts +50 -50
  78. package/dist/base/form-schema.d.ts +2 -0
  79. package/dist/base/form-schema.js +2 -0
  80. package/dist/base/form-schema.js.map +1 -1
  81. package/dist/base/grid.d.ts +4 -0
  82. package/dist/base/grid.js +4 -0
  83. package/dist/base/grid.js.map +1 -1
  84. package/dist/base/guard.d.ts +30 -28
  85. package/dist/base/guard.js +2 -0
  86. package/dist/base/guard.js.map +1 -1
  87. package/dist/base/helpers/archive-mode-helpers.d.ts +1 -1
  88. package/dist/base/helpers/file-refs.js +15 -15
  89. package/dist/base/helpers/file-refs.js.map +1 -1
  90. package/dist/base/internal/form-schema-validation.js +7 -1
  91. package/dist/base/internal/form-schema-validation.js.map +1 -1
  92. package/dist/base/internal/realtime-topics.js.map +1 -1
  93. package/dist/base/internal/searchable.d.ts +2 -1
  94. package/dist/base/internal/searchable.js +1 -3
  95. package/dist/base/internal/searchable.js.map +1 -1
  96. package/dist/base/key-value-list.d.ts +21 -19
  97. package/dist/base/key-value-list.js +2 -0
  98. package/dist/base/key-value-list.js.map +1 -1
  99. package/dist/base/kpi-card.d.ts +4 -2
  100. package/dist/base/kpi-card.js +2 -0
  101. package/dist/base/kpi-card.js.map +1 -1
  102. package/dist/base/live-toggle.d.ts +2 -0
  103. package/dist/base/live-toggle.js +2 -0
  104. package/dist/base/live-toggle.js.map +1 -1
  105. package/dist/base/meter.d.ts +23 -21
  106. package/dist/base/meter.js +2 -0
  107. package/dist/base/meter.js.map +1 -1
  108. package/dist/base/nav-card-grid.d.ts +24 -19
  109. package/dist/base/nav-card-grid.js +5 -0
  110. package/dist/base/nav-card-grid.js.map +1 -1
  111. package/dist/base/page-toolbar.d.ts +2 -0
  112. package/dist/base/page-toolbar.js +2 -0
  113. package/dist/base/page-toolbar.js.map +1 -1
  114. package/dist/base/period-selector.d.ts +3 -1
  115. package/dist/base/period-selector.js +2 -0
  116. package/dist/base/period-selector.js.map +1 -1
  117. package/dist/base/placeholder.d.ts +2 -0
  118. package/dist/base/placeholder.js +2 -0
  119. package/dist/base/placeholder.js.map +1 -1
  120. package/dist/base/resource-form-schema.d.ts +2 -2
  121. package/dist/base/searchable.d.ts +3 -2
  122. package/dist/base/searchable.js +2 -2
  123. package/dist/base/searchable.js.map +1 -1
  124. package/dist/base/section.d.ts +6 -2
  125. package/dist/base/section.js +4 -0
  126. package/dist/base/section.js.map +1 -1
  127. package/dist/base/stack.d.ts +6 -0
  128. package/dist/base/stack.js +6 -0
  129. package/dist/base/stack.js.map +1 -1
  130. package/dist/base/stat-group.d.ts +16 -14
  131. package/dist/base/stat-group.js +2 -0
  132. package/dist/base/stat-group.js.map +1 -1
  133. package/dist/base/tab.d.ts +10 -8
  134. package/dist/base/tab.js +2 -0
  135. package/dist/base/tab.js.map +1 -1
  136. package/dist/base/table-view/column-display.d.ts +1 -1
  137. package/dist/base/table-view/column-display.js.map +1 -1
  138. package/dist/base/table-view/data-functions.d.ts +10 -4
  139. package/dist/base/table-view/data-functions.js.map +1 -1
  140. package/dist/base/table-view/factory.d.ts +5 -0
  141. package/dist/base/table-view/factory.js +8 -4
  142. package/dist/base/table-view/factory.js.map +1 -1
  143. package/dist/base/table-view/internal/auth.d.ts +17 -3
  144. package/dist/base/table-view/internal/auth.js +26 -5
  145. package/dist/base/table-view/internal/auth.js.map +1 -1
  146. package/dist/base/table-view/internal/column-conditions.d.ts +8 -1
  147. package/dist/base/table-view/internal/column-conditions.js +25 -13
  148. package/dist/base/table-view/internal/column-conditions.js.map +1 -1
  149. package/dist/base/table-view/internal/column-display.d.ts +1 -2
  150. package/dist/base/table-view/internal/column-display.js +3 -9
  151. package/dist/base/table-view/internal/column-display.js.map +1 -1
  152. package/dist/base/table-view/internal/factory-helpers.d.ts +1 -1
  153. package/dist/base/table-view/internal/factory-helpers.js +17 -14
  154. package/dist/base/table-view/internal/factory-helpers.js.map +1 -1
  155. package/dist/base/table-view/internal/factory-lifecycle-created.d.ts +2 -3
  156. package/dist/base/table-view/internal/factory-lifecycle-created.js +5 -5
  157. package/dist/base/table-view/internal/factory-lifecycle-created.js.map +1 -1
  158. package/dist/base/table-view/internal/factory-lifecycle-filter.d.ts +2 -2
  159. package/dist/base/table-view/internal/factory-private-actions.d.ts +2 -2
  160. package/dist/base/table-view/internal/files.d.ts +2 -1
  161. package/dist/base/table-view/internal/files.js +14 -5
  162. package/dist/base/table-view/internal/files.js.map +1 -1
  163. package/dist/base/table-view/internal/footer.d.ts +3 -3
  164. package/dist/base/table-view/internal/footer.js +16 -15
  165. package/dist/base/table-view/internal/footer.js.map +1 -1
  166. package/dist/base/table-view/internal/guards.d.ts +27 -5
  167. package/dist/base/table-view/internal/guards.js +127 -49
  168. package/dist/base/table-view/internal/guards.js.map +1 -1
  169. package/dist/base/table-view/internal/meta-helpers.d.ts +1 -1
  170. package/dist/base/table-view/internal/meta-helpers.js +3 -4
  171. package/dist/base/table-view/internal/meta-helpers.js.map +1 -1
  172. package/dist/base/table-view/internal/meta.js +2 -3
  173. package/dist/base/table-view/internal/meta.js.map +1 -1
  174. package/dist/base/table-view/internal/option-contract.d.ts +1 -1
  175. package/dist/base/table-view/internal/option-footer.d.ts +2 -2
  176. package/dist/base/table-view/internal/option-row-actions.d.ts +1 -1
  177. package/dist/base/table-view/internal/realtime.d.ts +52 -11
  178. package/dist/base/table-view/internal/realtime.js +23 -16
  179. package/dist/base/table-view/internal/realtime.js.map +1 -1
  180. package/dist/base/table-view/internal/resource-form.d.ts +1 -1
  181. package/dist/base/table-view/internal/resource-form.js +1 -1
  182. package/dist/base/table-view/internal/resource-form.js.map +1 -1
  183. package/dist/base/table-view/internal/row-actions-schema.d.ts +12 -12
  184. package/dist/base/table-view/internal/row-rule-shape.d.ts +11 -5
  185. package/dist/base/table-view/internal/row-rule-shape.js +60 -30
  186. package/dist/base/table-view/internal/row-rule-shape.js.map +1 -1
  187. package/dist/base/table-view/internal/row-rules.d.ts +28 -1
  188. package/dist/base/table-view/internal/row-rules.js +8 -19
  189. package/dist/base/table-view/internal/row-rules.js.map +1 -1
  190. package/dist/base/table-view/internal/tabs.d.ts +1 -1
  191. package/dist/base/table-view/internal/tabs.js +1 -4
  192. package/dist/base/table-view/internal/tabs.js.map +1 -1
  193. package/dist/base/table-view/internal/validation.d.ts +2 -2
  194. package/dist/base/table-view/internal/validation.js +7 -7
  195. package/dist/base/table-view/internal/validation.js.map +1 -1
  196. package/dist/base/table-view/meta.d.ts +7 -6
  197. package/dist/base/table-view/meta.js +12 -7
  198. package/dist/base/table-view/meta.js.map +1 -1
  199. package/dist/base/table-view/resource-form.d.ts +3 -1
  200. package/dist/base/table-view/resource-form.js +2 -0
  201. package/dist/base/table-view/resource-form.js.map +1 -1
  202. package/dist/base/table-view/routes.d.ts +73 -21
  203. package/dist/base/table-view/routes.js +13 -10
  204. package/dist/base/table-view/routes.js.map +1 -1
  205. package/dist/base/table-view/schema.d.ts +152 -152
  206. package/dist/base/table-view/source.js +4 -1
  207. package/dist/base/table-view/source.js.map +1 -1
  208. package/dist/base/table-view.d.ts +1 -1
  209. package/dist/base/table-view.js.map +1 -1
  210. package/dist/base/top-list-card.d.ts +35 -33
  211. package/dist/base/top-list-card.js +2 -0
  212. package/dist/base/top-list-card.js.map +1 -1
  213. package/dist/base/types/error.js +5 -2
  214. package/dist/base/types/error.js.map +1 -1
  215. package/dist/base/types/guards.d.ts +4 -4
  216. package/dist/base/types/json.d.ts +1 -10
  217. package/dist/base/types/row-action.d.ts +7 -7
  218. package/dist/component-options/confirm-dialog.d.ts +2 -0
  219. package/dist/component-options/confirm-dialog.js.map +1 -1
  220. package/dist/component-options/data-type.d.ts +2 -2
  221. package/dist/component-options/data-type.js +7 -7
  222. package/dist/component-options/data-type.js.map +1 -1
  223. package/dist/component-options/row-action.d.ts +14 -9
  224. package/dist/component-slots.d.ts +11 -2
  225. package/dist/component-slots.js +1 -0
  226. package/dist/component-slots.js.map +1 -1
  227. package/dist/component.d.ts +7 -8
  228. package/dist/component.js +17 -25
  229. package/dist/component.js.map +1 -1
  230. package/dist/data-controllers/members.d.ts +11 -7
  231. package/dist/data-controllers/members.js +1 -1
  232. package/dist/data-controllers/members.js.map +1 -1
  233. package/dist/data-controllers/roles.d.ts +32 -10
  234. package/dist/db/internal/exportJobs.model.d.ts +7 -5
  235. package/dist/db/internal/inviteResolutions.model.d.ts +7 -5
  236. package/dist/db/internal/tenantLifecycle.model.d.ts +7 -5
  237. package/dist/db/models/roles.model.d.ts +7 -5
  238. package/dist/db/models/tenantMembers.model.d.ts +7 -5
  239. package/dist/db/models/tenants.model.d.ts +7 -5
  240. package/dist/db/models/user_invites.model.d.ts +7 -5
  241. package/dist/db/tables/tenants.table.d.ts +9 -0
  242. package/dist/db/tables/tenants.table.js +4 -0
  243. package/dist/db/tables/tenants.table.js.map +1 -1
  244. package/dist/guards.d.ts +1 -1
  245. package/dist/hooks.d.ts +10 -9
  246. package/dist/hooks.js +42 -33
  247. package/dist/hooks.js.map +1 -1
  248. package/dist/internal/attachments.d.ts +2 -2
  249. package/dist/internal/component-builder.js +2 -1
  250. package/dist/internal/component-builder.js.map +1 -1
  251. package/dist/internal/component-serialization.d.ts +2 -4
  252. package/dist/internal/component-serialization.js +4 -3
  253. package/dist/internal/component-serialization.js.map +1 -1
  254. package/dist/internal/component-slots.d.ts +19 -2
  255. package/dist/internal/component-slots.js +35 -12
  256. package/dist/internal/component-slots.js.map +1 -1
  257. package/dist/internal/component-watch-filter.d.ts +11 -0
  258. package/dist/internal/component-watch-filter.js +22 -0
  259. package/dist/internal/component-watch-filter.js.map +1 -0
  260. package/dist/internal/component-watches.js +0 -1
  261. package/dist/internal/component-watches.js.map +1 -1
  262. package/dist/internal/own-entry.d.ts +7 -0
  263. package/dist/internal/own-entry.js +13 -0
  264. package/dist/internal/own-entry.js.map +1 -0
  265. package/dist/invite-extension-payloads.d.ts +14 -2
  266. package/dist/invite-extensions/internal/delivery.js +1 -2
  267. package/dist/invite-extensions/internal/delivery.js.map +1 -1
  268. package/dist/invite-extensions/internal/edit.d.ts +2 -1
  269. package/dist/invite-extensions/internal/edit.js +8 -9
  270. package/dist/invite-extensions/internal/edit.js.map +1 -1
  271. package/dist/invite-extensions/internal/form-slot.js +8 -15
  272. package/dist/invite-extensions/internal/form-slot.js.map +1 -1
  273. package/dist/invite-extensions/internal/payload-slices.d.ts +33 -3
  274. package/dist/invite-extensions/internal/payload-slices.js +84 -19
  275. package/dist/invite-extensions/internal/payload-slices.js.map +1 -1
  276. package/dist/invite-extensions/internal/types.d.ts +10 -1
  277. package/dist/invite-resolution.js +6 -4
  278. package/dist/invite-resolution.js.map +1 -1
  279. package/dist/json.d.ts +10 -0
  280. package/dist/json.js +3 -0
  281. package/dist/json.js.map +1 -0
  282. package/dist/layout-banners.d.ts +5 -2
  283. package/dist/layout-banners.js.map +1 -1
  284. package/dist/page/controllers.d.ts +2 -2
  285. package/dist/page/internal/extension-validation.js +3 -2
  286. package/dist/page/internal/extension-validation.js.map +1 -1
  287. package/dist/page/internal/metadata-layout.js +1 -1
  288. package/dist/page/internal/metadata-layout.js.map +1 -1
  289. package/dist/page/internal/metadata-publish.js +3 -2
  290. package/dist/page/internal/metadata-publish.js.map +1 -1
  291. package/dist/page/internal/metadata-registration.js +5 -4
  292. package/dist/page/internal/metadata-registration.js.map +1 -1
  293. package/dist/page/internal/metadata-upload-registration.d.ts +3 -1
  294. package/dist/page/internal/metadata-upload-registration.js +9 -0
  295. package/dist/page/internal/metadata-upload-registration.js.map +1 -1
  296. package/dist/page/internal/metadata-uploads.d.ts +18 -5
  297. package/dist/page/internal/metadata-uploads.js +7 -8
  298. package/dist/page/internal/metadata-uploads.js.map +1 -1
  299. package/dist/page/internal/page-record.d.ts +2 -3
  300. package/dist/page/internal/page-record.js +19 -14
  301. package/dist/page/internal/page-record.js.map +1 -1
  302. package/dist/page/layout-filter.js +17 -6
  303. package/dist/page/layout-filter.js.map +1 -1
  304. package/dist/page/metadata.js +5 -7
  305. package/dist/page/metadata.js.map +1 -1
  306. package/dist/request-tenant.d.ts +10 -4
  307. package/dist/request-tenant.js +16 -34
  308. package/dist/request-tenant.js.map +1 -1
  309. package/dist/tenant-export.d.ts +2 -1
  310. package/dist/tenant-lifecycle.d.ts +13 -4
  311. package/dist/tenant-lifecycle.js +51 -18
  312. package/dist/tenant-lifecycle.js.map +1 -1
  313. package/dist/types.d.ts +20 -0
  314. package/dist/uploads.js +42 -59
  315. package/dist/uploads.js.map +1 -1
  316. package/dist/utils/fire-and-forget.js.map +1 -1
  317. package/dist/utils/internal/decorated-class.d.ts +14 -0
  318. package/dist/utils/internal/decorated-class.js +37 -0
  319. package/dist/utils/internal/decorated-class.js.map +1 -0
  320. package/dist/utils/internal/type-check.d.ts +9 -0
  321. package/dist/utils/internal/type-check.js +13 -5
  322. package/dist/utils/internal/type-check.js.map +1 -1
  323. package/dist/utils/internal/value-parser.d.ts +1 -1
  324. package/dist/utils/internal/value-parser.js +22 -9
  325. package/dist/utils/internal/value-parser.js.map +1 -1
  326. package/dist/watch-actions.d.ts +1 -1
  327. package/docs/1.core/1.introduction.md +82 -77
  328. package/docs/1.core/10.layout-banners.md +57 -45
  329. package/docs/1.core/11.modules-and-dynamic-menus.md +178 -0
  330. package/docs/1.core/12.frontend-modules-and-request-helpers.md +155 -0
  331. package/docs/1.core/13.tenant-data-export.md +120 -0
  332. package/docs/1.core/2.pages-and-modules.md +140 -367
  333. package/docs/1.core/3.components.md +21 -22
  334. package/docs/1.core/4.permissions.md +92 -71
  335. package/docs/1.core/5.tenancy.md +112 -86
  336. package/docs/1.core/6.invites.md +90 -65
  337. package/docs/1.core/7.hooks.md +96 -166
  338. package/docs/1.core/8.realtime.md +44 -45
  339. package/docs/1.core/9.quick-actions.md +37 -30
  340. package/docs/2.auth/1.introduction.md +33 -35
  341. package/docs/2.auth/2.authentication.md +60 -38
  342. package/docs/2.auth/3.tokens-and-sessions.md +56 -55
  343. package/docs/2.auth/4.users.md +82 -52
  344. package/docs/2.auth/5.external-identities.md +25 -26
  345. package/docs/3.base/1.introduction.md +64 -60
  346. package/docs/3.base/10.display-blocks.md +15 -16
  347. package/docs/3.base/11.page-layouts.md +273 -0
  348. package/docs/3.base/12.table-row-actions.md +122 -0
  349. package/docs/3.base/13.table-filters-and-forms.md +104 -0
  350. package/docs/3.base/14.table-events-and-helpers.md +114 -0
  351. package/docs/3.base/15.table-sources-and-gates.md +24 -0
  352. package/docs/3.base/2.types.md +44 -41
  353. package/docs/3.base/3.forms.md +27 -28
  354. package/docs/3.base/4.tables.md +34 -367
  355. package/docs/3.base/5.charts-and-widgets.md +28 -29
  356. package/docs/3.base/6.layout.md +21 -270
  357. package/docs/3.base/8.data-types.md +39 -40
  358. package/docs/3.base/9.helpers.md +36 -38
  359. package/docs/4.notifications/1.introduction.md +22 -26
  360. package/docs/4.notifications/2.categories-and-subjects.md +58 -55
  361. package/docs/4.notifications/3.sending.md +72 -68
  362. package/docs/5.html-render/1.introduction.md +119 -81
  363. package/docs/5.html-render/2.built-in-emails.md +71 -51
  364. package/docs/index.md +18 -29
  365. package/docs/tsconfig.json +4 -0
  366. package/package.json +12 -12
  367. package/docs/images/emails-admin-invite.png +0 -0
  368. package/docs/images/emails-change-notice.png +0 -0
  369. package/docs/images/emails-change-verification.png +0 -0
  370. package/docs/images/emails-digest-logo-dark.png +0 -0
  371. package/docs/images/emails-digest-logo-light.png +0 -0
  372. package/docs/images/emails-digest.png +0 -0
  373. package/docs/images/emails-export-partial.png +0 -0
  374. package/docs/images/emails-export-ready.png +0 -0
  375. package/docs/images/emails-reset-password.png +0 -0
  376. package/docs/images/emails-two-factor.png +0 -0
  377. package/docs/images/emails-user-validation.png +0 -0
package/dist/hooks.js CHANGED
@@ -56,13 +56,15 @@ var Hook;
56
56
  * cleaned up along with the workspace, and make it idempotent so a retried
57
57
  * signup does not double it.
58
58
  *
59
- * It fires once per tenant, when the tenant is created, through
60
- * `ProvisionTenant` (`@antelopejs/interface-dms/tenant-provisioning`): by
61
- * the DMS for the `default` tenant, on the start that creates it, once
62
- * `DATABASE_INITIALIZED` has settled; by the signup flow of a SaaS module
63
- * for each workspace it creates. It is where a module writes the default
64
- * data a tenant starts with: written once, that data then belongs to the
65
- * tenant, and nothing writes it again on a later start.
59
+ * It fires when a tenant is created, through `ProvisionTenant`
60
+ * (`@antelopejs/interface-dms/tenant-provisioning`): by the DMS for the
61
+ * `default` tenant, once every module has started, on the replica holding its
62
+ * provisioning lease; by the signup flow of a SaaS module for each workspace
63
+ * it creates. It is where a module writes the default data a tenant starts
64
+ * with: once it succeeded, that data belongs to the tenant and nothing writes
65
+ * it again on a later start. The `default` tenant's handlers run again after
66
+ * an attempt that failed or whose process died, so a handler skips what it
67
+ * already wrote.
66
68
  */
67
69
  Hook["TENANT_BEING_PROVISIONED"] = "tenant:being-provisioned";
68
70
  Hook["TENANT_DELETED"] = "tenant:deleted";
@@ -90,34 +92,40 @@ var Hook;
90
92
  */
91
93
  Hook["USER_DELETED"] = "user:deleted";
92
94
  })(Hook || (exports.Hook = Hook = {}));
93
- const hooksRegistry = new Map();
94
- const settledHooks = new owned_registry_1.OwnedRegistry();
95
- function getHooks(name) {
96
- const existing = hooksRegistry.get(name);
97
- if (existing)
98
- return existing;
99
- const hooks = new owned_registry_1.OwnedRegistry();
100
- hooksRegistry.set(name, hooks);
101
- return hooks;
102
- }
103
- function logHookFailure(name, error) {
104
- logging_1.Logging.Error(`Hook '${name}' execution failed:`, error);
95
+ class HookState {
96
+ handlers = new owned_registry_1.OwnedRegistry();
97
+ settled = new owned_registry_1.OwnedRegistry();
105
98
  }
106
- function findSettledHook(name) {
107
- return settledHooks.values().find((settled) => settled.name === name);
99
+ const hookStates = {
100
+ [Hook.DATABASE_INITIALIZED]: new HookState(),
101
+ [Hook.TENANT_BEING_PROVISIONED]: new HookState(),
102
+ [Hook.TENANT_DELETED]: new HookState(),
103
+ [Hook.TENANT_DATA_EXPORT]: new HookState(),
104
+ [Hook.INVITE_BEING_CREATED]: new HookState(),
105
+ [Hook.INVITE_CREATED]: new HookState(),
106
+ [Hook.INVITE_DELETED]: new HookState(),
107
+ [Hook.MEMBER_BEING_ADDED]: new HookState(),
108
+ [Hook.MEMBER_BEING_CHANGED]: new HookState(),
109
+ [Hook.MEMBER_ADDED]: new HookState(),
110
+ [Hook.MEMBER_REMOVED]: new HookState(),
111
+ [Hook.USER_DELETED]: new HookState(),
112
+ [Hook.USER_REGISTERED]: new HookState(),
113
+ };
114
+ function getHooks(name) {
115
+ return hookStates[name].handlers;
108
116
  }
109
117
  /**
110
118
  * Runs a handler registered after its hook settled, without blocking the
111
119
  * registration: the registering module's `construct()` or `start()` neither
112
120
  * waits for it nor sees its failure.
113
121
  */
114
- function runLateHandler(settled, callback, owner) {
122
+ function runLateHandler(name, settled, callback, owner) {
115
123
  const run = async () => callback(...settled.args);
116
124
  const runAsOwner = async () => owner ? (0, interface_core_1.RunWithResponsibleModule)(owner, run) : run();
117
125
  void Promise.resolve()
118
126
  .then(runAsOwner)
119
127
  .catch((error) => {
120
- logging_1.Logging.Error(`Hook '${settled.name}' handler of module '${owner ?? "unknown"}' failed:`, error);
128
+ logging_1.Logging.Error(`Hook '${name}' handler of module '${owner ?? "unknown"}' failed:`, error);
121
129
  });
122
130
  }
123
131
  /**
@@ -138,9 +146,9 @@ function RegisterHook(name, callback, options) {
138
146
  callback,
139
147
  moduleId: options?.moduleId ?? owner,
140
148
  });
141
- const settled = findSettledHook(name);
149
+ const [settled] = hookStates[name].settled.values();
142
150
  if (settled)
143
- runLateHandler(settled, callback, owner);
151
+ runLateHandler(name, settled, callback, owner);
144
152
  }
145
153
  /**
146
154
  * Drop a handler registered with {@link RegisterHook}, for a module that stops
@@ -173,7 +181,7 @@ function RegisterTenantDataExportContributor(moduleId, handler) {
173
181
  }
174
182
  async function ExecuteHooks(name, ...args) {
175
183
  for (const hook of getHooks(name).values()) {
176
- await hook.callback(...args);
184
+ await Promise.resolve(hook.callback(...args));
177
185
  }
178
186
  }
179
187
  /**
@@ -191,32 +199,33 @@ async function SettleHook(name, ...args) {
191
199
  while (pending.length > 0) {
192
200
  for (const hook of pending) {
193
201
  ran.add(hook);
194
- await hook.callback(...args);
202
+ await Promise.resolve(hook.callback(...args));
195
203
  }
196
204
  pending = getHooks(name)
197
205
  .values()
198
206
  .filter((hook) => !ran.has(hook));
199
207
  }
200
- settledHooks.add({ name, args });
208
+ hookStates[name].settled.add({ args });
201
209
  }
202
210
  /**
203
211
  * End what {@link SettleHook} started: later registrations wait for the hook
204
212
  * to be settled again.
205
213
  */
206
214
  function UnsettleHook(name) {
207
- const isSettled = (settled) => settled.name === name;
208
- while (settledHooks.has(isSettled))
209
- settledHooks.remove(isSettled);
215
+ const { settled } = hookStates[name];
216
+ const always = () => true;
217
+ while (settled.has(always))
218
+ settled.remove(always);
210
219
  }
211
220
  async function CollectHooks(name, ...args) {
212
221
  const results = [];
213
222
  for (const hook of getHooks(name).values()) {
214
223
  try {
215
- const value = await hook.callback(...args);
224
+ const value = await Promise.resolve(hook.callback(...args));
216
225
  results.push(value);
217
226
  }
218
227
  catch (error) {
219
- logHookFailure(name, error);
228
+ logging_1.Logging.Error(`Hook '${name}' execution failed:`, error);
220
229
  }
221
230
  }
222
231
  return results;
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import type { RequestContext } from "@antelopejs/interface-api";
2
- import type { DataControllerCallback } from "@antelopejs/interface-data-api";
2
+ import type { DataControllerCallback, DataControllerInstance } from "@antelopejs/interface-data-api";
3
3
  /**
4
4
  * Trusted inputs used to wrap a table-view attachment write.
5
5
  *
6
6
  * @internal
7
7
  */
8
8
  export interface TableViewAttachmentSaveRequest {
9
- controller: unknown;
9
+ controller: DataControllerInstance;
10
10
  route: DataControllerCallback;
11
11
  context: RequestContext;
12
12
  params: unknown;
@@ -8,6 +8,7 @@ exports.warnUnknownChild = warnUnknownChild;
8
8
  exports.setButton = setButton;
9
9
  /** @internal */
10
10
  const logging_1 = require("@antelopejs/interface-core/logging");
11
+ const own_entry_1 = require("./own-entry");
11
12
  /** @internal */
12
13
  function mergeBuilderOptions(options, update, partial) {
13
14
  const state = {
@@ -50,7 +51,7 @@ function warnUnknownChild(children, childId, name) {
50
51
  }
51
52
  /** @internal */
52
53
  function setButton(buttons, name, id, info) {
53
- if (buttons()[id]) {
54
+ if ((0, own_entry_1.ownEntry)(buttons(), id)) {
54
55
  logging_1.Logging.Warn(`Duplicate button id "${id}" in component "${name()}"`);
55
56
  }
56
57
  buttons()[id] = { id, ...info };
@@ -1 +1 @@
1
- {"version":3,"file":"component-builder.js","sourceRoot":"","sources":["../../src/internal/component-builder.ts"],"names":[],"mappings":";;AAUA,kDAeC;AAGD,kCAIC;AAGD,kCAUC;AAGD,kCAeC;AAGD,4CAUC;AAGD,8BAUC;AAzFD,gBAAgB;AAChB,gEAA6D;AAQ7D,gBAAgB;AAChB,SAAgB,mBAAmB,CACjC,OAA8C,EAC9C,MAAwD,EACxD,OAAyB;IAEzB,MAAM,KAAK,GAAG;QACZ,IAAI,OAAO;YACT,OAAO,OAAO,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,iBAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IACD,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CACzB,aAAqB;IAErB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACpE,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CACzB,aAAqB,EACrB,OAAsB,EACtB,QAAgD;IAEhD,OAAO;QACL,aAAa;QACb,OAAO;QACP,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KACzD,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CACzB,QAA6C,EAC7C,IAAkB,EAClB,KAIC;IAED,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACtD,iBAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,mBAAmB,IAAI,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAC;IACpD,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,gBAAgB;AAChB,SAAgB,gBAAgB,CAC9B,QAAuC,EACvC,OAAe,EACf,IAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;QACpD,iBAAO,CAAC,IAAI,CACV,8BAA8B,OAAO,mBAAmB,IAAI,EAAE,iCAAiC,CAChG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,SAAgB,SAAS,CACvB,OAA2C,EAC3C,IAAkB,EAClB,EAAU,EACV,IAA+C;IAE/C,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,iBAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,IAAI,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"component-builder.js","sourceRoot":"","sources":["../../src/internal/component-builder.ts"],"names":[],"mappings":";;AAWA,kDAeC;AAGD,kCAIC;AAGD,kCAUC;AAGD,kCAeC;AAGD,4CAUC;AAGD,8BAUC;AA1FD,gBAAgB;AAChB,gEAA6D;AAC7D,2CAAuC;AAQvC,gBAAgB;AAChB,SAAgB,mBAAmB,CACjC,OAA8C,EAC9C,MAAwD,EACxD,OAAyB;IAEzB,MAAM,KAAK,GAAG;QACZ,IAAI,OAAO;YACT,OAAO,OAAO,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,iBAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IACD,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CACzB,aAAqB;IAErB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACpE,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CACzB,aAAqB,EACrB,OAAsB,EACtB,QAAgD;IAEhD,OAAO;QACL,aAAa;QACb,OAAO;QACP,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KACzD,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,SAAgB,WAAW,CACzB,QAA6C,EAC7C,IAAkB,EAClB,KAIC;IAED,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACtD,iBAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,mBAAmB,IAAI,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAC;IACpD,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,gBAAgB;AAChB,SAAgB,gBAAgB,CAC9B,QAAuC,EACvC,OAAe,EACf,IAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;QACpD,iBAAO,CAAC,IAAI,CACV,8BAA8B,OAAO,mBAAmB,IAAI,EAAE,iCAAiC,CAChG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,SAAgB,SAAS,CACvB,OAA2C,EAC3C,IAAkB,EAClB,EAAU,EACV,IAA+C;IAE/C,IAAI,IAAA,oBAAQ,EAAC,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5B,iBAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,IAAI,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;AAClC,CAAC"}
@@ -1,10 +1,8 @@
1
1
  /** @internal */
2
- import type { ChildSerialized, ComponentAnchor, ComponentInfoPromise, ComponentInfoSerialized } from "../component";
2
+ import type { ComponentAnchor, ComponentInfoPromise, ComponentInfoSerialized } from "../component";
3
3
  /** @internal */
4
4
  export declare function normalizeComponentAnchor(anchor: ComponentAnchor): readonly string[];
5
5
  /** @internal */
6
- export declare function serializedInfo<T>(componentInfo: Awaited<ComponentInfoPromise<T>>, options: T | undefined, children: ChildSerialized[] | undefined): ComponentInfoSerialized<T>;
7
- /** @internal */
8
- export declare function serializeChild(child: NonNullable<Awaited<ComponentInfoPromise>["children"]>[number]): Promise<ChildSerialized>;
6
+ export declare function serializedInfo<T>(componentInfo: Awaited<ComponentInfoPromise<T>>, options: T | undefined): Promise<ComponentInfoSerialized<T>>;
9
7
  /** @internal */
10
8
  export declare function serializeInfoSync<T>(info: ComponentInfoPromise<T>): ComponentInfoSerialized<T>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeComponentAnchor = normalizeComponentAnchor;
4
4
  exports.serializedInfo = serializedInfo;
5
- exports.serializeChild = serializeChild;
6
5
  exports.serializeInfoSync = serializeInfoSync;
7
6
  /** @internal */
8
7
  function normalizeComponentAnchor(anchor) {
@@ -10,10 +9,12 @@ function normalizeComponentAnchor(anchor) {
10
9
  return typeof anchor === "string" ? anchor.split(".") : [...anchor];
11
10
  }
12
11
  /** @internal */
13
- function serializedInfo(componentInfo, options, children) {
12
+ async function serializedInfo(componentInfo, options) {
13
+ const children = componentInfo.children
14
+ ? await Promise.all(componentInfo.children.map(serializeChild))
15
+ : undefined;
14
16
  return { ...componentInfo, options, children: children ?? [] };
15
17
  }
16
- /** @internal */
17
18
  async function serializeChild(child) {
18
19
  const { id, component, ...additionalProps } = child;
19
20
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"component-serialization.js","sourceRoot":"","sources":["../../src/internal/component-serialization.ts"],"names":[],"mappings":";;AAUA,4DAKC;AAGD,wCAMC;AAGD,wCASC;AAGD,8CAiBC;AA/CD,gBAAgB;AAChB,SAAgB,wBAAwB,CACtC,MAAuB;IAEvB,uIAAuI;IACvI,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,gBAAgB;AAChB,SAAgB,cAAc,CAC5B,aAA+C,EAC/C,OAAsB,EACtB,QAAuC;IAEvC,OAAO,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;AACjE,CAAC;AAED,gBAAgB;AACT,KAAK,UAAU,cAAc,CAClC,KAAqE;IAErE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,GAAG,KAAK,CAAC;IACpD,OAAO;QACL,EAAE;QACF,SAAS,EAAE,MAAM,SAAS,CAAC,SAAS,EAAE;QACtC,GAAG,eAAe;KACnB,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,SAAgB,iBAAiB,CAC/B,IAA6B;IAE7B,8NAA8N;IAC9N,MAAM,aAAa,GAAG,IAAwB,CAAC;IAC/C,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9D,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,GAAG,KAAK,CAAC;YACpD,OAAO;gBACL,EAAE;gBACF,SAAS,EAAE,SAAS,CAAC,aAAa,EAAE;gBACpC,GAAG,eAAe;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"component-serialization.js","sourceRoot":"","sources":["../../src/internal/component-serialization.ts"],"names":[],"mappings":";;AAUA,4DAKC;AAGD,wCAQC;AAcD,8CAiBC;AAhDD,gBAAgB;AAChB,SAAgB,wBAAwB,CACtC,MAAuB;IAEvB,uIAAuI;IACvI,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,gBAAgB;AACT,KAAK,UAAU,cAAc,CAClC,aAA+C,EAC/C,OAAsB;IAEtB,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ;QACrC,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/D,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,KAAqE;IAErE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,GAAG,KAAK,CAAC;IACpD,OAAO;QACL,EAAE;QACF,SAAS,EAAE,MAAM,SAAS,CAAC,SAAS,EAAE;QACtC,GAAG,eAAe;KACnB,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,SAAgB,iBAAiB,CAC/B,IAA6B;IAE7B,8NAA8N;IAC9N,MAAM,aAAa,GAAG,IAAwB,CAAC;IAC/C,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9D,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,GAAG,KAAK,CAAC;YACpD,OAAO;gBACL,EAAE;gBACF,SAAS,EAAE,SAAS,CAAC,aAAa,EAAE;gBACpC,GAAG,eAAe;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC5C,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { ComponentSlotResolver } from "../component-slots";
1
+ import type { MaybePromise } from "../types";
2
+ import type { WatchAction } from "../watch-actions";
2
3
  /**
3
4
  * Property a serialized component's options carry to open an extension point.
4
5
  * A component that declares one says "whoever owns this slot may rewrite my
@@ -13,8 +14,23 @@ import type { ComponentSlotResolver } from "../component-slots";
13
14
  * @internal
14
15
  */
15
16
  export declare const COMPONENT_SLOT_KEY = "slotId";
17
+ /**
18
+ * What the walker checks of a form's options before it hands them to a
19
+ * resolver: a `fields` array and, on the node it resolves, a registered slot
20
+ * id. `SlotOptions` is the full contract a resolver sees.
21
+ */
22
+ interface SlotFormInput {
23
+ slotId?: string;
24
+ fields: unknown[];
25
+ }
26
+ /** What a resolver answers: a form's options, with its watch actions. */
27
+ interface SlotFormOptions extends SlotFormInput {
28
+ watchActions?: WatchAction[];
29
+ }
30
+ /** @internal */
31
+ export type SlotFormResolver = (options: SlotFormInput) => MaybePromise<SlotFormOptions>;
16
32
  /** @internal */
17
- export declare const slotResolvers: Map<string, ComponentSlotResolver>;
33
+ export declare const slotResolvers: Map<string, SlotFormResolver>;
18
34
  /**
19
35
  * Resolve every registered slot found in a serialized options tree.
20
36
  *
@@ -25,3 +41,4 @@ export declare const slotResolvers: Map<string, ComponentSlotResolver>;
25
41
  * @internal
26
42
  */
27
43
  export declare function ResolveComponentSlots<T>(options: T): Promise<T>;
44
+ export {};
@@ -17,21 +17,42 @@ const logging_1 = require("@antelopejs/interface-core/logging");
17
17
  * @internal
18
18
  */
19
19
  exports.COMPONENT_SLOT_KEY = "slotId";
20
+ /**
21
+ * The component name `Form` serializes under. A copy: the form's own module
22
+ * sits above this one in the layering, and the walker tests resolve forms built
23
+ * by `Form`, so the two cannot drift apart.
24
+ */
25
+ const SLOT_FORM_COMPONENT_NAME = "dms-form";
20
26
  /** @internal */
21
27
  exports.slotResolvers = new Map();
22
- function resolvableSlotIdOf(node) {
28
+ function isSlotFormOptions(options) {
29
+ if (typeof options !== "object" || options === null)
30
+ return false;
31
+ if (!("fields" in options) || !Array.isArray(options.fields))
32
+ return false;
33
+ return (exports.COMPONENT_SLOT_KEY in options &&
34
+ typeof options[exports.COMPONENT_SLOT_KEY] === "string" &&
35
+ exports.slotResolvers.has(options[exports.COMPONENT_SLOT_KEY]));
36
+ }
37
+ /**
38
+ * The options of a serialized form that opens a slot someone owns. Only a
39
+ * form declares `slotId`, and it always serializes a `fields` array, so a node
40
+ * that is anything else is left alone, whatever its options say.
41
+ */
42
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters -- Takes one node of the serialized options tree ResolveComponentSlots walks over a page's cached layout, any primitive, array or object, and narrows it with Array.isArray and typeof before reading it.
43
+ function slotFormOptionsOf(node) {
23
44
  // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Serialized option trees contain primitives and arrays as well as slot-bearing objects.
24
45
  if (!node || typeof node !== "object" || Array.isArray(node)) {
25
46
  return undefined;
26
47
  }
27
- const slot = node;
28
- const slotId = slot[exports.COMPONENT_SLOT_KEY];
29
- // oxlint-disable-next-line anti-slop/no-runtime-typeof -- A serialized slot id must be a registered string; other option values remain ordinary data.
30
- if (typeof slotId !== "string" || !exports.slotResolvers.has(slotId)) {
48
+ if (!("componentName" in node) ||
49
+ node.componentName !== SLOT_FORM_COMPONENT_NAME) {
31
50
  return undefined;
32
51
  }
33
- return slotId;
52
+ const options = "options" in node ? node.options : undefined;
53
+ return isSlotFormOptions(options) ? options : undefined;
34
54
  }
55
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters -- Takes one node of the serialized options tree ResolveComponentSlots walks over a page's cached layout, any primitive, array or object, and narrows it with Array.isArray and typeof before reading it.
35
56
  function hasResolvableSlot(node) {
36
57
  if (Array.isArray(node)) {
37
58
  return node.some(hasResolvableSlot);
@@ -40,7 +61,7 @@ function hasResolvableSlot(node) {
40
61
  if (!node || typeof node !== "object") {
41
62
  return false;
42
63
  }
43
- if (resolvableSlotIdOf(node)) {
64
+ if (slotFormOptionsOf(node)) {
44
65
  return true;
45
66
  }
46
67
  return Object.values(node).some(hasResolvableSlot);
@@ -50,6 +71,7 @@ function hasResolvableSlot(node) {
50
71
  * what a resolver contributes is never walked again, which would let a
51
72
  * contribution declaring the slot it was contributed to loop forever.
52
73
  */
74
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters -- Takes one node of the serialized options tree ResolveComponentSlots walks over a page's cached layout, any primitive, array or object, and narrows it with Array.isArray and typeof before reading it.
53
75
  async function resolveNode(node) {
54
76
  if (Array.isArray(node)) {
55
77
  for (const item of node)
@@ -62,18 +84,19 @@ async function resolveNode(node) {
62
84
  }
63
85
  for (const value of Object.values(node))
64
86
  await resolveNode(value);
65
- const slotId = resolvableSlotIdOf(node);
66
- const resolver = slotId ? exports.slotResolvers.get(slotId) : undefined;
87
+ const target = slotFormOptionsOf(node);
88
+ if (!target)
89
+ return;
90
+ const { slotId } = target;
91
+ const resolver = exports.slotResolvers.get(slotId);
67
92
  if (!resolver)
68
93
  return;
69
- // SAFETY: node is a non-null object and SlotOptions imposes no value constraint on its keys.
70
- const target = node;
71
94
  try {
72
95
  const resolved = await resolver(target);
73
96
  if (resolved === target)
74
97
  return;
75
98
  for (const key of Object.keys(target))
76
- delete target[key];
99
+ Reflect.deleteProperty(target, key);
77
100
  Object.assign(target, resolved);
78
101
  }
79
102
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"component-slots.js","sourceRoot":"","sources":["../../src/internal/component-slots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-slots.js","sourceRoot":"","sources":["../../src/internal/component-slots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { WatchAction } from "../watch-actions";
2
+ import type { MaybePromise } from "../types";
3
+ /** @internal The callback `ComponentBuilder.watchFilter` installs. */
4
+ export type WatchFilter = (permissions: Set<string>, watches: WatchAction[], permissionId: string) => MaybePromise<WatchAction[]>;
5
+ /**
6
+ * `options` with its `watchActions` narrowed by `filter`; untouched when there
7
+ * is no filter or the options declare no watch.
8
+ *
9
+ * @internal
10
+ */
11
+ export declare function applyWatchFilter<O, R>(owner: R, filter: ((this: R, ...args: Parameters<WatchFilter>) => ReturnType<WatchFilter>) | undefined, permissions: Set<string>, options: O, permissionId: string): Promise<O>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyWatchFilter = applyWatchFilter;
4
+ const component_watches_1 = require("./component-watches");
5
+ /**
6
+ * `options` with its `watchActions` narrowed by `filter`; untouched when there
7
+ * is no filter or the options declare no watch.
8
+ *
9
+ * @internal
10
+ */
11
+ async function applyWatchFilter(owner, filter, permissions, options, permissionId) {
12
+ if (!options || !filter) {
13
+ return options;
14
+ }
15
+ const watches = (0, component_watches_1.readWatchActions)(options);
16
+ if (watches.length === 0) {
17
+ return options;
18
+ }
19
+ const filtered = await filter.call(owner, permissions, watches, permissionId);
20
+ return { ...options, watchActions: filtered };
21
+ }
22
+ //# sourceMappingURL=component-watch-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-watch-filter.js","sourceRoot":"","sources":["../../src/internal/component-watch-filter.ts"],"names":[],"mappings":";;AAiBA,4CAkBC;AAjCD,2DAAuD;AASvD;;;;;GAKG;AACI,KAAK,UAAU,gBAAgB,CACpC,KAAQ,EACR,MAEa,EACb,WAAwB,EACxB,OAAU,EACV,YAAoB;IAEpB,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,oCAAgB,EAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9E,OAAO,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAChD,CAAC"}
@@ -49,7 +49,6 @@ function buildWatchAction(event, functionId, opts) {
49
49
  functionId,
50
50
  };
51
51
  if (opts?.params !== undefined) {
52
- // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion -- Consumer declaration merging can supply watch parameter interfaces without dictionary index signatures; transport preserves those values without parsing.
53
52
  watch.params = opts.params;
54
53
  }
55
54
  if (opts?.onParam !== undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"component-watches.js","sourceRoot":"","sources":["../../src/internal/component-watches.ts"],"names":[],"mappings":";;AAWA,8CAwBC;AAGD,4CAGC;AAGD,4CAQC;AAGD,4CAmBC;AAGD,8CAQC;AAGD,0DAcC;AAGD,gDA8BC;AArID,oDAA+C;AAQ/C,gBAAgB;AAChB,SAAgB,iBAAiB,CAC/B,KAA0B,EAC1B,UAAsD,EACtD,iBAA2D;IAE3D,MAAM,OAAO,GAAG;QACd,IAAI,IAAI;YACN,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;IACF,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QAC3D,IAAI,IAAI,GAAM,OAAO,CAAC;QACtB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,4IAA4I;YAC5I,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;gBAC9C,WAAW;gBACX,IAAI;gBACJ,YAAY;gBACZ,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QACD,IAAI,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,SAAgB,gBAAgB,CAAI,OAAuB;IACzD,MAAM,YAAY,GAAqC,OAAO,CAAC;IAC/D,OAAO,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,gBAAgB;AAChB,SAAgB,gBAAgB,CAC9B,YAAqD,EACrD,OAAe,EACf,KAAkB;IAElB,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,gBAAgB;AAChB,SAAgB,gBAAgB,CAC9B,KAAa,EACb,UAAa,EACb,IAAiC;IAEjC,MAAM,KAAK,GAAgB;QACzB,SAAS,EAAE,2BAAW,CAAC,IAAI;QAC3B,KAAK;QACL,UAAU;KACX,CAAC;IACF,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,4OAA4O;QAC5O,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAA+B,CAAC;IACtD,CAAC;IACD,IAAI,IAAI,EAAE,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9D,IAAI,IAAI,EAAE,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC1C,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gBAAgB;AAChB,SAAgB,iBAAiB,CAAI,IAAO;IAC1C,0JAA0J;IAC1J,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACjD,2MAA2M;IAC3M,OAAO,IAAS,CAAC;AACnB,CAAC;AAED,gBAAgB;AAChB,SAAgB,uBAAuB,CACrC,OAAsB,EACtB,OAAsB;IAEtB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,UAAU,GAEZ,OAAO,IAAI,EAAE,CAAC;IAClB,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;IACzC,kLAAkL;IAClL,OAAO,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,MAAM,EAAO,CAAC;AACtD,CAAC;AAED,gBAAgB;AAChB,SAAgB,kBAAkB,CAChC,MAAkC,EAClC,YAAwD;IAExD,IAAI,YAAY,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,YAAY,GAEd,KAAK,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC;YACjD,OAAO;gBACL,GAAG,KAAK;gBACR,SAAS,EAAE;oBACT,GAAG,KAAK,CAAC,SAAS;oBAClB,OAAO,EAAE;wBACP,GAAG,YAAY;wBACf,YAAY,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;qBACxC;iBACF;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"component-watches.js","sourceRoot":"","sources":["../../src/internal/component-watches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The entry `table` holds under `key` itself. A key `Object.prototype`
3
+ * supplies (`constructor`, `toString`) is not an entry.
4
+ *
5
+ * @internal
6
+ */
7
+ export declare function ownEntry<Entry>(table: Readonly<Record<string, Entry>>, key: string): Entry | undefined;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ownEntry = ownEntry;
4
+ /**
5
+ * The entry `table` holds under `key` itself. A key `Object.prototype`
6
+ * supplies (`constructor`, `toString`) is not an entry.
7
+ *
8
+ * @internal
9
+ */
10
+ function ownEntry(table, key) {
11
+ return Object.hasOwn(table, key) ? table[key] : undefined;
12
+ }
13
+ //# sourceMappingURL=own-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"own-entry.js","sourceRoot":"","sources":["../../src/internal/own-entry.ts"],"names":[],"mappings":";;AAMA,4BAKC;AAXD;;;;;GAKG;AACH,SAAgB,QAAQ,CACtB,KAAsC,EACtC,GAAW;IAEX,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC"}
@@ -1,2 +1,14 @@
1
- /** Payloads stored on an invitation, keyed by extension key. */
2
- export type InviteExtensionPayloads = Record<string, unknown>;
1
+ import type { JsonPrimitive } from "./json";
2
+ /**
3
+ * A JSON value an invitation stores for an extension. It is only read back, so
4
+ * read-only arrays and objects are accepted where it is passed in.
5
+ */
6
+ export type InviteExtensionJson = JsonPrimitive | readonly InviteExtensionJson[] | {
7
+ readonly [key: string]: InviteExtensionJson;
8
+ };
9
+ /**
10
+ * Payloads stored on an invitation, keyed by extension key: the JSON an admin
11
+ * submitted for each extension's fields, kept as submitted until the
12
+ * extension's own schema runs at delivery.
13
+ */
14
+ export type InviteExtensionPayloads = Record<string, InviteExtensionJson>;
@@ -27,8 +27,7 @@ const registry_1 = require("./registry");
27
27
  function CollectInviteExtensionPayloads(
28
28
  // oxlint-disable-next-line anti-slop/no-unknown-parameters -- The published submission boundary accepts arbitrary bodies; each extension slice is validated below without replacing its stored input.
29
29
  body) {
30
- // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, anti-slop/no-unsafe-dictionary-type -- This legacy boundary treats any non-null body as an enumerable form dictionary without validation; the published unknown-input contract and current behavior must stay intact.
31
- const source = (body ?? {});
30
+ const source = (0, payload_slices_1.isInviteFieldValues)(body) ? body : {};
32
31
  const payloads = {};
33
32
  for (const info of (0, registry_1.listInviteExtensions)()) {
34
33
  const slice = (0, payload_slices_1.sliceOf)(info.key, source);
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/invite-extensions/internal/delivery.ts"],"names":[],"mappings":";;AA6BA,wEAeC;AAWD,0DAmBC;AAYD,0DAoBC;AAzGD,qDAA0E;AAC1E,yCAA6E;AAQ7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,8BAA8B;AAC5C,sMAAsM;AACtM,IAAa;IAEb,sSAAsS;IACtS,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IACvD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAA,wBAAO,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxC,IAAA,iCAAgB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,MAAoB,EACpB,OAA+B,EAC/B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,OAA6B,EAC7B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,SAAS;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAClB,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAC3C,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/invite-extensions/internal/delivery.ts"],"names":[],"mappings":";;AAkCA,wEAcC;AAWD,0DAmBC;AAYD,0DAoBC;AA7GD,qDAK0B;AAC1B,yCAA6E;AAQ7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,8BAA8B;AAC5C,sMAAsM;AACtM,IAAa;IAEb,MAAM,MAAM,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAA,wBAAO,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxC,IAAA,iCAAgB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,MAAoB,EACpB,OAA+B,EAC/B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAoD,EACpD,OAA6B,EAC7B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAoB,GAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,SAAS;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAClB,IAAA,4BAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAC3C,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,oCAAyB,EAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM;QAC3C,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AAChE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { InviteExtensionContext, InviteExtensionPayloads } from "../types";
2
+ import type { InviteFieldValues } from "./types";
2
3
  /**
3
4
  * The payloads stored on a pending invitation as values of its edit form: each
4
5
  * registered extension's stored slice, under the prefixed ids its fields carry
@@ -7,7 +8,7 @@ import type { InviteExtensionContext, InviteExtensionPayloads } from "../types";
7
8
  *
8
9
  * @internal
9
10
  */
10
- export declare function ReadInviteExtensionFields(payloads: InviteExtensionPayloads | null | undefined): Record<string, unknown>;
11
+ export declare function ReadInviteExtensionFields(payloads: InviteExtensionPayloads | null | undefined): InviteFieldValues;
11
12
  /**
12
13
  * Pull the slices an admin changed out of the edit form of a pending
13
14
  * invitation, each validated against its extension's schema.
@@ -5,11 +5,11 @@ exports.CollectInviteExtensionEdits = CollectInviteExtensionEdits;
5
5
  exports.NotifyInviteExtensionUpdates = NotifyInviteExtensionUpdates;
6
6
  const node_util_1 = require("node:util");
7
7
  const field_ids_1 = require("./field-ids");
8
+ const type_check_1 = require("../../utils/internal/type-check");
8
9
  const payload_slices_1 = require("./payload-slices");
9
10
  const registry_1 = require("./registry");
10
- function isRecord(value) {
11
- // oxlint-disable-next-line anti-slop/no-runtime-typeof -- This guard is the raw submission boundary and preserves the existing object-but-not-array classification.
12
- return !!value && typeof value === "object" && !Array.isArray(value);
11
+ function isStoredSlice(value) {
12
+ return (0, type_check_1.isObject)(value) && !(0, type_check_1.isNull)(value) && !Array.isArray(value);
13
13
  }
14
14
  function isSamePayload(a, b) {
15
15
  return (0, node_util_1.isDeepStrictEqual)(JSON.parse(JSON.stringify(a ?? null)), JSON.parse(JSON.stringify(b ?? null)));
@@ -25,14 +25,13 @@ function isSamePayload(a, b) {
25
25
  function ReadInviteExtensionFields(payloads) {
26
26
  const values = {};
27
27
  for (const info of (0, registry_1.listInviteExtensions)()) {
28
- const stored = payloads?.[info.key];
29
- if (!isRecord(stored))
28
+ const stored = (0, payload_slices_1.payloadOf)(payloads, info.key);
29
+ if (!isStoredSlice(stored))
30
30
  continue;
31
31
  for (const [fieldId, value] of Object.entries(stored)) {
32
32
  values[(0, field_ids_1.inviteExtensionFieldId)(info.key, fieldId)] = value;
33
33
  }
34
34
  }
35
- // oxlint-disable-next-line anti-slop/no-known-value-widening -- Preserve the published raw-field dictionary return contract rather than narrow the stored extension values.
36
35
  return values;
37
36
  }
38
37
  /**
@@ -52,7 +51,7 @@ function ReadInviteExtensionFields(payloads) {
52
51
  function CollectInviteExtensionEdits(
53
52
  // oxlint-disable-next-line anti-slop/no-unknown-parameters -- This published submission boundary accepts arbitrary bodies and validates each present slice with its extension schema.
54
53
  body) {
55
- const source = isRecord(body) ? body : {};
54
+ const source = (0, payload_slices_1.isInviteFieldValues)(body) ? body : {};
56
55
  const edits = {};
57
56
  for (const info of (0, registry_1.listInviteExtensions)()) {
58
57
  if (info.editable === false)
@@ -68,9 +67,9 @@ body) {
68
67
  async function notifyUpdate(info, previous, edits, context) {
69
68
  if (!info.onUpdate)
70
69
  return;
71
- if (!(info.key in edits))
70
+ if (!Object.hasOwn(edits, info.key))
72
71
  return;
73
- if (isSamePayload(previous?.[info.key], edits[info.key]))
72
+ if (isSamePayload((0, payload_slices_1.payloadOf)(previous, info.key), (0, payload_slices_1.payloadOf)(edits, info.key)))
74
73
  return;
75
74
  const payload = (0, payload_slices_1.readPayload)(info, edits, {});
76
75
  if (!payload)