@antelopejs/interface-dms 0.10.4 → 0.13.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.
- package/CHANGELOG.md +126 -0
- package/README.md +21 -10
- package/dist/attachments.d.ts +15 -2
- package/dist/attachments.js +14 -1
- package/dist/attachments.js.map +1 -1
- package/dist/auth/db/models/sessions.model.d.ts +7 -5
- package/dist/auth/db/models/sessions.model.js +2 -9
- package/dist/auth/db/models/sessions.model.js.map +1 -1
- package/dist/auth/db/models/userExternalIdentities.model.d.ts +7 -5
- package/dist/auth/db/models/users.model.d.ts +7 -5
- package/dist/auth/db/tables/users.table.d.ts +2 -2
- package/dist/auth/db/tables/users.table.js.map +1 -1
- package/dist/auth/index.d.ts +4 -4
- package/dist/auth/internal/jwt-auth-decorator.d.ts +1 -1
- package/dist/auth/internal/jwt-auth-decorator.js +6 -3
- package/dist/auth/internal/jwt-auth-decorator.js.map +1 -1
- package/dist/auth/internal/request-authenticators.d.ts +12 -0
- package/dist/auth/internal/request-authenticators.js +53 -10
- package/dist/auth/internal/request-authenticators.js.map +1 -1
- package/dist/base/activity-feed.d.ts +34 -32
- package/dist/base/activity-feed.js +2 -0
- package/dist/base/activity-feed.js.map +1 -1
- package/dist/base/banner.d.ts +12 -10
- package/dist/base/banner.js +2 -0
- package/dist/base/banner.js.map +1 -1
- package/dist/base/block-registry/internal/describe.js +4 -12
- package/dist/base/block-registry/internal/describe.js.map +1 -1
- package/dist/base/block-registry/internal/ui.js +1 -1
- package/dist/base/block-registry/internal/ui.js.map +1 -1
- package/dist/base/card.d.ts +11 -9
- package/dist/base/card.js +2 -0
- package/dist/base/card.js.map +1 -1
- package/dist/base/chart-card.d.ts +4 -2
- package/dist/base/chart-card.js +2 -0
- package/dist/base/chart-card.js.map +1 -1
- package/dist/base/chart-schemas.d.ts +148 -148
- package/dist/base/chart.d.ts +65 -0
- package/dist/base/chart.js +65 -0
- package/dist/base/chart.js.map +1 -1
- package/dist/base/code-block.d.ts +5 -3
- package/dist/base/code-block.js +2 -0
- package/dist/base/code-block.js.map +1 -1
- package/dist/base/custom.d.ts +5 -0
- package/dist/base/custom.js +5 -0
- package/dist/base/custom.js.map +1 -1
- package/dist/base/data-types/default/address.d.ts +5 -0
- package/dist/base/data-types/default/address.js +5 -0
- package/dist/base/data-types/default/address.js.map +1 -1
- package/dist/base/data-types/default/choices.d.ts +20 -0
- package/dist/base/data-types/default/choices.js +20 -0
- package/dist/base/data-types/default/choices.js.map +1 -1
- package/dist/base/data-types/default/files.d.ts +22 -5
- package/dist/base/data-types/default/files.js +20 -0
- package/dist/base/data-types/default/files.js.map +1 -1
- package/dist/base/data-types/default/numbers.d.ts +15 -0
- package/dist/base/data-types/default/numbers.js +25 -9
- package/dist/base/data-types/default/numbers.js.map +1 -1
- package/dist/base/data-types/default/relations.d.ts +10 -2
- package/dist/base/data-types/default/relations.js +9 -6
- package/dist/base/data-types/default/relations.js.map +1 -1
- package/dist/base/data-types/default/strings.d.ts +25 -0
- package/dist/base/data-types/default/strings.js +25 -0
- package/dist/base/data-types/default/strings.js.map +1 -1
- package/dist/base/data-types/default-types.d.ts +1 -1
- package/dist/base/data-types/field-types.d.ts +10 -0
- package/dist/base/data-types/field-types.js +10 -0
- package/dist/base/data-types/field-types.js.map +1 -1
- package/dist/base/data-types/internal/relation-endpoints.js +1 -0
- package/dist/base/data-types/internal/relation-endpoints.js.map +1 -1
- package/dist/base/data-types/status-type.d.ts +5 -0
- package/dist/base/data-types/status-type.js +5 -0
- package/dist/base/data-types/status-type.js.map +1 -1
- package/dist/base/display.d.ts +6 -6
- package/dist/base/empty-state.d.ts +15 -13
- package/dist/base/empty-state.js +2 -0
- package/dist/base/empty-state.js.map +1 -1
- package/dist/base/form-block-schema.d.ts +50 -50
- package/dist/base/form-schema.d.ts +2 -0
- package/dist/base/form-schema.js +2 -0
- package/dist/base/form-schema.js.map +1 -1
- package/dist/base/grid.d.ts +4 -0
- package/dist/base/grid.js +4 -0
- package/dist/base/grid.js.map +1 -1
- package/dist/base/guard.d.ts +30 -28
- package/dist/base/guard.js +2 -0
- package/dist/base/guard.js.map +1 -1
- package/dist/base/helpers/archive-mode-helpers.d.ts +1 -1
- package/dist/base/helpers/file-refs.js +15 -15
- package/dist/base/helpers/file-refs.js.map +1 -1
- package/dist/base/internal/form-schema-validation.js +7 -1
- package/dist/base/internal/form-schema-validation.js.map +1 -1
- package/dist/base/internal/realtime-topics.js.map +1 -1
- package/dist/base/internal/searchable.d.ts +2 -1
- package/dist/base/internal/searchable.js +1 -3
- package/dist/base/internal/searchable.js.map +1 -1
- package/dist/base/key-value-list.d.ts +21 -19
- package/dist/base/key-value-list.js +2 -0
- package/dist/base/key-value-list.js.map +1 -1
- package/dist/base/kpi-card.d.ts +4 -2
- package/dist/base/kpi-card.js +2 -0
- package/dist/base/kpi-card.js.map +1 -1
- package/dist/base/live-toggle.d.ts +2 -0
- package/dist/base/live-toggle.js +2 -0
- package/dist/base/live-toggle.js.map +1 -1
- package/dist/base/meter.d.ts +23 -21
- package/dist/base/meter.js +2 -0
- package/dist/base/meter.js.map +1 -1
- package/dist/base/nav-card-grid.d.ts +24 -19
- package/dist/base/nav-card-grid.js +5 -0
- package/dist/base/nav-card-grid.js.map +1 -1
- package/dist/base/page-toolbar.d.ts +2 -0
- package/dist/base/page-toolbar.js +2 -0
- package/dist/base/page-toolbar.js.map +1 -1
- package/dist/base/period-selector.d.ts +3 -1
- package/dist/base/period-selector.js +2 -0
- package/dist/base/period-selector.js.map +1 -1
- package/dist/base/placeholder.d.ts +2 -0
- package/dist/base/placeholder.js +2 -0
- package/dist/base/placeholder.js.map +1 -1
- package/dist/base/resource-form-schema.d.ts +2 -2
- package/dist/base/searchable.d.ts +3 -2
- package/dist/base/searchable.js +2 -2
- package/dist/base/searchable.js.map +1 -1
- package/dist/base/section.d.ts +6 -2
- package/dist/base/section.js +4 -0
- package/dist/base/section.js.map +1 -1
- package/dist/base/stack.d.ts +6 -0
- package/dist/base/stack.js +6 -0
- package/dist/base/stack.js.map +1 -1
- package/dist/base/stat-group.d.ts +16 -14
- package/dist/base/stat-group.js +2 -0
- package/dist/base/stat-group.js.map +1 -1
- package/dist/base/tab.d.ts +10 -8
- package/dist/base/tab.js +2 -0
- package/dist/base/tab.js.map +1 -1
- package/dist/base/table-view/column-display.d.ts +1 -1
- package/dist/base/table-view/column-display.js.map +1 -1
- package/dist/base/table-view/data-functions.d.ts +10 -4
- package/dist/base/table-view/data-functions.js.map +1 -1
- package/dist/base/table-view/factory.d.ts +5 -0
- package/dist/base/table-view/factory.js +8 -4
- package/dist/base/table-view/factory.js.map +1 -1
- package/dist/base/table-view/internal/auth.d.ts +17 -3
- package/dist/base/table-view/internal/auth.js +26 -5
- package/dist/base/table-view/internal/auth.js.map +1 -1
- package/dist/base/table-view/internal/column-conditions.d.ts +8 -1
- package/dist/base/table-view/internal/column-conditions.js +25 -13
- package/dist/base/table-view/internal/column-conditions.js.map +1 -1
- package/dist/base/table-view/internal/column-display.d.ts +1 -2
- package/dist/base/table-view/internal/column-display.js +3 -9
- package/dist/base/table-view/internal/column-display.js.map +1 -1
- package/dist/base/table-view/internal/factory-helpers.d.ts +1 -1
- package/dist/base/table-view/internal/factory-helpers.js +17 -14
- package/dist/base/table-view/internal/factory-helpers.js.map +1 -1
- package/dist/base/table-view/internal/factory-lifecycle-created.d.ts +2 -3
- package/dist/base/table-view/internal/factory-lifecycle-created.js +5 -5
- package/dist/base/table-view/internal/factory-lifecycle-created.js.map +1 -1
- package/dist/base/table-view/internal/factory-lifecycle-filter.d.ts +2 -2
- package/dist/base/table-view/internal/factory-private-actions.d.ts +2 -2
- package/dist/base/table-view/internal/files.d.ts +2 -1
- package/dist/base/table-view/internal/files.js +14 -5
- package/dist/base/table-view/internal/files.js.map +1 -1
- package/dist/base/table-view/internal/footer.d.ts +3 -3
- package/dist/base/table-view/internal/footer.js +16 -15
- package/dist/base/table-view/internal/footer.js.map +1 -1
- package/dist/base/table-view/internal/guards.d.ts +27 -5
- package/dist/base/table-view/internal/guards.js +133 -49
- package/dist/base/table-view/internal/guards.js.map +1 -1
- package/dist/base/table-view/internal/meta-helpers.d.ts +1 -1
- package/dist/base/table-view/internal/meta-helpers.js +3 -4
- package/dist/base/table-view/internal/meta-helpers.js.map +1 -1
- package/dist/base/table-view/internal/meta.js +2 -3
- package/dist/base/table-view/internal/meta.js.map +1 -1
- package/dist/base/table-view/internal/option-contract.d.ts +9 -1
- package/dist/base/table-view/internal/option-footer.d.ts +2 -2
- package/dist/base/table-view/internal/option-row-actions.d.ts +1 -1
- package/dist/base/table-view/internal/realtime.d.ts +52 -11
- package/dist/base/table-view/internal/realtime.js +23 -16
- package/dist/base/table-view/internal/realtime.js.map +1 -1
- package/dist/base/table-view/internal/resource-form.d.ts +1 -1
- package/dist/base/table-view/internal/resource-form.js +1 -1
- package/dist/base/table-view/internal/resource-form.js.map +1 -1
- package/dist/base/table-view/internal/row-actions-schema.d.ts +12 -12
- package/dist/base/table-view/internal/row-rule-shape.d.ts +11 -5
- package/dist/base/table-view/internal/row-rule-shape.js +60 -30
- package/dist/base/table-view/internal/row-rule-shape.js.map +1 -1
- package/dist/base/table-view/internal/row-rules.d.ts +28 -1
- package/dist/base/table-view/internal/row-rules.js +8 -19
- package/dist/base/table-view/internal/row-rules.js.map +1 -1
- package/dist/base/table-view/internal/tabs.d.ts +1 -1
- package/dist/base/table-view/internal/tabs.js +1 -4
- package/dist/base/table-view/internal/tabs.js.map +1 -1
- package/dist/base/table-view/internal/validation.d.ts +2 -2
- package/dist/base/table-view/internal/validation.js +7 -7
- package/dist/base/table-view/internal/validation.js.map +1 -1
- package/dist/base/table-view/meta.d.ts +7 -6
- package/dist/base/table-view/meta.js +12 -7
- package/dist/base/table-view/meta.js.map +1 -1
- package/dist/base/table-view/resource-form.d.ts +3 -1
- package/dist/base/table-view/resource-form.js +2 -0
- package/dist/base/table-view/resource-form.js.map +1 -1
- package/dist/base/table-view/routes.d.ts +73 -21
- package/dist/base/table-view/routes.js +13 -10
- package/dist/base/table-view/routes.js.map +1 -1
- package/dist/base/table-view/schema.d.ts +157 -152
- package/dist/base/table-view/schema.js +2 -1
- package/dist/base/table-view/schema.js.map +1 -1
- package/dist/base/table-view/source.js +4 -1
- package/dist/base/table-view/source.js.map +1 -1
- package/dist/base/table-view.d.ts +1 -1
- package/dist/base/table-view.js.map +1 -1
- package/dist/base/top-list-card.d.ts +35 -33
- package/dist/base/top-list-card.js +2 -0
- package/dist/base/top-list-card.js.map +1 -1
- package/dist/base/types/error.js +5 -2
- package/dist/base/types/error.js.map +1 -1
- package/dist/base/types/guards.d.ts +4 -4
- package/dist/base/types/json.d.ts +1 -10
- package/dist/base/types/row-action.d.ts +7 -7
- package/dist/component-options/confirm-dialog.d.ts +2 -0
- package/dist/component-options/confirm-dialog.js.map +1 -1
- package/dist/component-options/data-type.d.ts +2 -2
- package/dist/component-options/data-type.js +7 -7
- package/dist/component-options/data-type.js.map +1 -1
- package/dist/component-options/page-layout.d.ts +3 -2
- package/dist/component-options/page-layout.js.map +1 -1
- package/dist/component-options/row-action.d.ts +14 -9
- package/dist/component-slots.d.ts +11 -2
- package/dist/component-slots.js +1 -0
- package/dist/component-slots.js.map +1 -1
- package/dist/component.d.ts +7 -8
- package/dist/component.js +17 -25
- package/dist/component.js.map +1 -1
- package/dist/data-controllers/members.d.ts +11 -7
- package/dist/data-controllers/members.js +1 -1
- package/dist/data-controllers/members.js.map +1 -1
- package/dist/data-controllers/roles.d.ts +32 -10
- package/dist/db/internal/exportJobs.model.d.ts +7 -5
- package/dist/db/internal/inviteResolutions.model.d.ts +7 -5
- package/dist/db/internal/tenantLifecycle.model.d.ts +15 -7
- package/dist/db/internal/tenantLifecycle.model.js +16 -7
- package/dist/db/internal/tenantLifecycle.model.js.map +1 -1
- package/dist/db/models/roles.model.d.ts +7 -5
- package/dist/db/models/tenantMembers.model.d.ts +7 -5
- package/dist/db/models/tenants.model.d.ts +7 -5
- package/dist/db/models/user_invites.model.d.ts +7 -5
- package/dist/guards.d.ts +1 -1
- package/dist/hooks.d.ts +1 -2
- package/dist/hooks.js +33 -26
- package/dist/hooks.js.map +1 -1
- package/dist/internal/attachments.d.ts +2 -2
- package/dist/internal/component-builder.js +2 -1
- package/dist/internal/component-builder.js.map +1 -1
- package/dist/internal/component-serialization.d.ts +2 -4
- package/dist/internal/component-serialization.js +4 -3
- package/dist/internal/component-serialization.js.map +1 -1
- package/dist/internal/component-slots.d.ts +19 -2
- package/dist/internal/component-slots.js +35 -12
- package/dist/internal/component-slots.js.map +1 -1
- package/dist/internal/component-watch-filter.d.ts +11 -0
- package/dist/internal/component-watch-filter.js +22 -0
- package/dist/internal/component-watch-filter.js.map +1 -0
- package/dist/internal/component-watches.js +0 -1
- package/dist/internal/component-watches.js.map +1 -1
- package/dist/internal/own-entry.d.ts +7 -0
- package/dist/internal/own-entry.js +13 -0
- package/dist/internal/own-entry.js.map +1 -0
- package/dist/internal/uploads.d.ts +30 -0
- package/dist/internal/uploads.js +19 -0
- package/dist/internal/uploads.js.map +1 -1
- package/dist/invite-extension-payloads.d.ts +14 -2
- package/dist/invite-extensions/internal/delivery.js +1 -2
- package/dist/invite-extensions/internal/delivery.js.map +1 -1
- package/dist/invite-extensions/internal/edit.d.ts +2 -1
- package/dist/invite-extensions/internal/edit.js +8 -9
- package/dist/invite-extensions/internal/edit.js.map +1 -1
- package/dist/invite-extensions/internal/form-slot.js +8 -15
- package/dist/invite-extensions/internal/form-slot.js.map +1 -1
- package/dist/invite-extensions/internal/payload-slices.d.ts +33 -3
- package/dist/invite-extensions/internal/payload-slices.js +84 -19
- package/dist/invite-extensions/internal/payload-slices.js.map +1 -1
- package/dist/invite-extensions/internal/types.d.ts +10 -1
- package/dist/invite-resolution.js +6 -4
- package/dist/invite-resolution.js.map +1 -1
- package/dist/json.d.ts +10 -0
- package/dist/json.js +3 -0
- package/dist/json.js.map +1 -0
- package/dist/layout-banners.d.ts +5 -2
- package/dist/layout-banners.js.map +1 -1
- package/dist/page/controllers.d.ts +2 -2
- package/dist/page/internal/extension-validation.js +3 -2
- package/dist/page/internal/extension-validation.js.map +1 -1
- package/dist/page/internal/metadata-layout.js +1 -1
- package/dist/page/internal/metadata-layout.js.map +1 -1
- package/dist/page/internal/metadata-publish.js +3 -2
- package/dist/page/internal/metadata-publish.js.map +1 -1
- package/dist/page/internal/metadata-registration.js +5 -4
- package/dist/page/internal/metadata-registration.js.map +1 -1
- package/dist/page/internal/metadata-upload-registration.d.ts +4 -2
- package/dist/page/internal/metadata-upload-registration.js +13 -4
- package/dist/page/internal/metadata-upload-registration.js.map +1 -1
- package/dist/page/internal/metadata-uploads.d.ts +5 -5
- package/dist/page/internal/metadata-uploads.js +4 -8
- package/dist/page/internal/metadata-uploads.js.map +1 -1
- package/dist/page/internal/page-record.d.ts +2 -3
- package/dist/page/internal/page-record.js +23 -16
- package/dist/page/internal/page-record.js.map +1 -1
- package/dist/page/layout-filter.js +17 -6
- package/dist/page/layout-filter.js.map +1 -1
- package/dist/page/metadata.js +5 -7
- package/dist/page/metadata.js.map +1 -1
- package/dist/request-tenant.d.ts +10 -4
- package/dist/request-tenant.js +16 -34
- package/dist/request-tenant.js.map +1 -1
- package/dist/tenant-export.d.ts +2 -1
- package/dist/tenant-lifecycle.d.ts +43 -4
- package/dist/tenant-lifecycle.js +97 -18
- package/dist/tenant-lifecycle.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/uploads.d.ts +1 -1
- package/dist/uploads.js +39 -60
- package/dist/uploads.js.map +1 -1
- package/dist/utils/fire-and-forget.js.map +1 -1
- package/dist/utils/internal/decorated-class.d.ts +14 -0
- package/dist/utils/internal/decorated-class.js +37 -0
- package/dist/utils/internal/decorated-class.js.map +1 -0
- package/dist/utils/internal/type-check.d.ts +9 -0
- package/dist/utils/internal/type-check.js +13 -5
- package/dist/utils/internal/type-check.js.map +1 -1
- package/dist/utils/internal/value-parser.d.ts +1 -1
- package/dist/utils/internal/value-parser.js +22 -9
- package/dist/utils/internal/value-parser.js.map +1 -1
- package/dist/watch-actions.d.ts +1 -1
- package/docs/1.core/1.introduction.md +82 -77
- package/docs/1.core/10.layout-banners.md +57 -45
- package/docs/1.core/11.modules-and-dynamic-menus.md +178 -0
- package/docs/1.core/12.frontend-modules-and-request-helpers.md +155 -0
- package/docs/1.core/13.tenant-data-export.md +120 -0
- package/docs/1.core/2.pages-and-modules.md +140 -367
- package/docs/1.core/3.components.md +21 -22
- package/docs/1.core/4.permissions.md +92 -71
- package/docs/1.core/5.tenancy.md +150 -86
- package/docs/1.core/6.invites.md +90 -65
- package/docs/1.core/7.hooks.md +96 -166
- package/docs/1.core/8.realtime.md +44 -45
- package/docs/1.core/9.quick-actions.md +37 -30
- package/docs/2.auth/1.introduction.md +33 -35
- package/docs/2.auth/2.authentication.md +60 -38
- package/docs/2.auth/3.tokens-and-sessions.md +56 -55
- package/docs/2.auth/4.users.md +79 -51
- package/docs/2.auth/5.external-identities.md +25 -26
- package/docs/3.base/1.introduction.md +64 -60
- package/docs/3.base/10.display-blocks.md +15 -16
- package/docs/3.base/11.page-layouts.md +270 -0
- package/docs/3.base/12.table-row-actions.md +122 -0
- package/docs/3.base/13.table-filters-and-forms.md +104 -0
- package/docs/3.base/14.table-events-and-helpers.md +114 -0
- package/docs/3.base/15.table-sources-and-gates.md +24 -0
- package/docs/3.base/2.types.md +44 -41
- package/docs/3.base/3.forms.md +27 -28
- package/docs/3.base/4.tables.md +35 -368
- package/docs/3.base/5.charts-and-widgets.md +28 -29
- package/docs/3.base/6.layout.md +21 -270
- package/docs/3.base/8.data-types.md +39 -40
- package/docs/3.base/9.helpers.md +36 -38
- package/docs/4.notifications/1.introduction.md +22 -26
- package/docs/4.notifications/2.categories-and-subjects.md +58 -55
- package/docs/4.notifications/3.sending.md +72 -68
- package/docs/5.html-render/1.introduction.md +119 -81
- package/docs/5.html-render/2.built-in-emails.md +71 -51
- package/docs/index.md +18 -29
- package/docs/tsconfig.json +4 -0
- package/package.json +11 -11
- package/docs/images/emails-admin-invite.png +0 -0
- package/docs/images/emails-change-notice.png +0 -0
- package/docs/images/emails-change-verification.png +0 -0
- package/docs/images/emails-digest-logo-dark.png +0 -0
- package/docs/images/emails-digest-logo-light.png +0 -0
- package/docs/images/emails-digest.png +0 -0
- package/docs/images/emails-export-partial.png +0 -0
- package/docs/images/emails-export-ready.png +0 -0
- package/docs/images/emails-reset-password.png +0 -0
- package/docs/images/emails-two-factor.png +0 -0
- package/docs/images/emails-user-validation.png +0 -0
package/dist/guards.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare namespace internal {
|
|
|
14
14
|
* @param options Tenant guard options, e.g. to skip the tenant access gate
|
|
15
15
|
* @returns Authentication decorator
|
|
16
16
|
*/
|
|
17
|
-
export declare const AuthUserWithPermission: (target: ComponentTargetInput | ControllerClass | Action, options?: TenantGuardOptions) => import("@antelopejs/interface-core/decorators").
|
|
17
|
+
export declare const AuthUserWithPermission: (target: ComponentTargetInput | ControllerClass | Action, options?: TenantGuardOptions) => import("@antelopejs/interface-core/decorators").PropertyDecorator & import("@antelopejs/interface-core/decorators").ClassDecorator<import("@antelopejs/interface-core/decorators").Class<object, any[]>> & import("@antelopejs/interface-core/decorators").ParameterDecorator;
|
|
18
18
|
export interface TenantGuardOptions {
|
|
19
19
|
/**
|
|
20
20
|
* Skip the tenant access gate for this route. Reserved for routes that must
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { InviteExtensionPayloads } from "./invite-extension-payloads";
|
|
2
2
|
import type { TenantDataExportContribution, TenantExportArchive } from "./tenant-export";
|
|
3
3
|
export * from "./tenant-export";
|
|
4
|
-
export type HookCallback = (...args: any[]) => any;
|
|
5
4
|
export declare enum Hook {
|
|
6
5
|
/**
|
|
7
6
|
* The database schemas are registered and the DMS is about to serve.
|
|
@@ -320,4 +319,4 @@ export declare function SettleHook<H extends StickyHook>(name: H, ...args: HookS
|
|
|
320
319
|
* to be settled again.
|
|
321
320
|
*/
|
|
322
321
|
export declare function UnsettleHook(name: StickyHook): void;
|
|
323
|
-
export declare function CollectHooks<H extends Hook>(name: H, ...args: HookSignatures[H]["args"]): Promise<
|
|
322
|
+
export declare function CollectHooks<H extends Hook>(name: H, ...args: HookSignatures[H]["args"]): Promise<Awaited<HookHandlerResult<H>>[]>;
|
package/dist/hooks.js
CHANGED
|
@@ -92,34 +92,40 @@ var Hook;
|
|
|
92
92
|
*/
|
|
93
93
|
Hook["USER_DELETED"] = "user:deleted";
|
|
94
94
|
})(Hook || (exports.Hook = Hook = {}));
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const existing = hooksRegistry.get(name);
|
|
99
|
-
if (existing)
|
|
100
|
-
return existing;
|
|
101
|
-
const hooks = new owned_registry_1.OwnedRegistry();
|
|
102
|
-
hooksRegistry.set(name, hooks);
|
|
103
|
-
return hooks;
|
|
104
|
-
}
|
|
105
|
-
function logHookFailure(name, error) {
|
|
106
|
-
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();
|
|
107
98
|
}
|
|
108
|
-
|
|
109
|
-
|
|
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;
|
|
110
116
|
}
|
|
111
117
|
/**
|
|
112
118
|
* Runs a handler registered after its hook settled, without blocking the
|
|
113
119
|
* registration: the registering module's `construct()` or `start()` neither
|
|
114
120
|
* waits for it nor sees its failure.
|
|
115
121
|
*/
|
|
116
|
-
function runLateHandler(settled, callback, owner) {
|
|
122
|
+
function runLateHandler(name, settled, callback, owner) {
|
|
117
123
|
const run = async () => callback(...settled.args);
|
|
118
124
|
const runAsOwner = async () => owner ? (0, interface_core_1.RunWithResponsibleModule)(owner, run) : run();
|
|
119
125
|
void Promise.resolve()
|
|
120
126
|
.then(runAsOwner)
|
|
121
127
|
.catch((error) => {
|
|
122
|
-
logging_1.Logging.Error(`Hook '${
|
|
128
|
+
logging_1.Logging.Error(`Hook '${name}' handler of module '${owner ?? "unknown"}' failed:`, error);
|
|
123
129
|
});
|
|
124
130
|
}
|
|
125
131
|
/**
|
|
@@ -140,9 +146,9 @@ function RegisterHook(name, callback, options) {
|
|
|
140
146
|
callback,
|
|
141
147
|
moduleId: options?.moduleId ?? owner,
|
|
142
148
|
});
|
|
143
|
-
const settled =
|
|
149
|
+
const [settled] = hookStates[name].settled.values();
|
|
144
150
|
if (settled)
|
|
145
|
-
runLateHandler(settled, callback, owner);
|
|
151
|
+
runLateHandler(name, settled, callback, owner);
|
|
146
152
|
}
|
|
147
153
|
/**
|
|
148
154
|
* Drop a handler registered with {@link RegisterHook}, for a module that stops
|
|
@@ -175,7 +181,7 @@ function RegisterTenantDataExportContributor(moduleId, handler) {
|
|
|
175
181
|
}
|
|
176
182
|
async function ExecuteHooks(name, ...args) {
|
|
177
183
|
for (const hook of getHooks(name).values()) {
|
|
178
|
-
await hook.callback(...args);
|
|
184
|
+
await Promise.resolve(hook.callback(...args));
|
|
179
185
|
}
|
|
180
186
|
}
|
|
181
187
|
/**
|
|
@@ -193,32 +199,33 @@ async function SettleHook(name, ...args) {
|
|
|
193
199
|
while (pending.length > 0) {
|
|
194
200
|
for (const hook of pending) {
|
|
195
201
|
ran.add(hook);
|
|
196
|
-
await hook.callback(...args);
|
|
202
|
+
await Promise.resolve(hook.callback(...args));
|
|
197
203
|
}
|
|
198
204
|
pending = getHooks(name)
|
|
199
205
|
.values()
|
|
200
206
|
.filter((hook) => !ran.has(hook));
|
|
201
207
|
}
|
|
202
|
-
|
|
208
|
+
hookStates[name].settled.add({ args });
|
|
203
209
|
}
|
|
204
210
|
/**
|
|
205
211
|
* End what {@link SettleHook} started: later registrations wait for the hook
|
|
206
212
|
* to be settled again.
|
|
207
213
|
*/
|
|
208
214
|
function UnsettleHook(name) {
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
215
|
+
const { settled } = hookStates[name];
|
|
216
|
+
const always = () => true;
|
|
217
|
+
while (settled.has(always))
|
|
218
|
+
settled.remove(always);
|
|
212
219
|
}
|
|
213
220
|
async function CollectHooks(name, ...args) {
|
|
214
221
|
const results = [];
|
|
215
222
|
for (const hook of getHooks(name).values()) {
|
|
216
223
|
try {
|
|
217
|
-
const value = await hook.callback(...args);
|
|
224
|
+
const value = await Promise.resolve(hook.callback(...args));
|
|
218
225
|
results.push(value);
|
|
219
226
|
}
|
|
220
227
|
catch (error) {
|
|
221
|
-
|
|
228
|
+
logging_1.Logging.Error(`Hook '${name}' execution failed:`, error);
|
|
222
229
|
}
|
|
223
230
|
}
|
|
224
231
|
return results;
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
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:
|
|
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()
|
|
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":";;
|
|
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 {
|
|
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
|
|
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
|
|
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,
|
|
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 {
|
|
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,
|
|
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
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
|
66
|
-
|
|
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
|
-
|
|
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":";;;
|
|
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,
|
|
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"}
|
|
@@ -17,3 +17,33 @@ export type NativeUploadFieldRegistration = UploadTokenClaims & {
|
|
|
17
17
|
/** The field's own declared constraints, enforced at presign on top of the global ones. */
|
|
18
18
|
constraints?: UploadConstraints;
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* The keys of a native upload field's options that stamping and registration
|
|
22
|
+
* read, and the token they write back. The options carry more keys than these,
|
|
23
|
+
* and none of them is checked until it is read.
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export interface UploadFieldOptions {
|
|
28
|
+
storage?: unknown;
|
|
29
|
+
path?: unknown;
|
|
30
|
+
attachmentField?: unknown;
|
|
31
|
+
visibility?: unknown;
|
|
32
|
+
constraints?: unknown;
|
|
33
|
+
uploadToken?: unknown;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read the component options of a file or image field before a token is
|
|
37
|
+
* stamped into them. Absent options become an empty object that carries the
|
|
38
|
+
* token.
|
|
39
|
+
*
|
|
40
|
+
* @throws TypeError when the options are neither absent nor an object, so the
|
|
41
|
+
* field definition is refused where it is stamped or registered.
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
export declare function readUploadFieldOptions(field: {
|
|
45
|
+
type: string;
|
|
46
|
+
component: {
|
|
47
|
+
options?: unknown;
|
|
48
|
+
};
|
|
49
|
+
}): UploadFieldOptions;
|
package/dist/internal/uploads.js
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readUploadFieldOptions = readUploadFieldOptions;
|
|
4
|
+
/**
|
|
5
|
+
* Read the component options of a file or image field before a token is
|
|
6
|
+
* stamped into them. Absent options become an empty object that carries the
|
|
7
|
+
* token.
|
|
8
|
+
*
|
|
9
|
+
* @throws TypeError when the options are neither absent nor an object, so the
|
|
10
|
+
* field definition is refused where it is stamped or registered.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
function readUploadFieldOptions(field) {
|
|
14
|
+
const options = field.component.options ?? {};
|
|
15
|
+
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- Field options are erased contributor values; a primitive or an array cannot carry the upload token.
|
|
16
|
+
if (typeof options !== "object" || Array.isArray(options)) {
|
|
17
|
+
throw new TypeError(`A ${field.type} field's component options must be an object, got ${JSON.stringify(options)}`);
|
|
18
|
+
}
|
|
19
|
+
field.component.options = options;
|
|
20
|
+
return options;
|
|
21
|
+
}
|
|
3
22
|
//# sourceMappingURL=uploads.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../src/internal/uploads.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../src/internal/uploads.ts"],"names":[],"mappings":";;AA+CA,wDAaC;AAtBD;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CAAC,KAGtC;IACC,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9C,8JAA8J;IAC9J,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CACjB,KAAK,KAAK,CAAC,IAAI,qDAAqD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAC9F,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,2 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
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":";;
|
|
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):
|
|
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.
|