@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
|
@@ -1,35 +1,111 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createGuardedWriteRoute = exports.createGuardedConfirmRoute = exports.guardedGetRoute = exports.parseGuardBody = void 0;
|
|
4
4
|
const interface_api_1 = require("@antelopejs/interface-api");
|
|
5
5
|
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
6
6
|
const interface_core_1 = require("@antelopejs/interface-core");
|
|
7
7
|
const interface_data_api_1 = require("@antelopejs/interface-data-api");
|
|
8
|
+
const components_1 = require("@antelopejs/interface-data-api/components");
|
|
8
9
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
10
|
+
const zod_1 = require("zod");
|
|
9
11
|
const data_functions_1 = require("../data-functions");
|
|
10
12
|
const meta_1 = require("../meta");
|
|
11
13
|
const options_1 = require("../options");
|
|
12
14
|
const meta_2 = require("./meta");
|
|
13
15
|
const row_rules_1 = require("./row-rules");
|
|
16
|
+
/** The deepest nesting of arrays and objects a guard body may have, the body itself counted. */
|
|
17
|
+
const MAX_BODY_DEPTH = 64;
|
|
18
|
+
const JSON_PRIMITIVE = zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean(), zod_1.z.null()]);
|
|
19
|
+
const JSON_FIELDS = zod_1.z.record(zod_1.z.string(), zod_1.z.unknown());
|
|
20
|
+
/**
|
|
21
|
+
* Whether the arrays and objects below `members` nest more than `limit` levels
|
|
22
|
+
* deep, `members` being the values of the level-1 container. It walks one level
|
|
23
|
+
* at a time and stops at level `limit + 1`, so it neither recurses nor visits
|
|
24
|
+
* what lies below that level.
|
|
25
|
+
*/
|
|
26
|
+
const nestsDeeperThan = (members, limit) => {
|
|
27
|
+
let level = [members];
|
|
28
|
+
for (let depth = 1; level.length > 0; depth += 1) {
|
|
29
|
+
if (depth > limit)
|
|
30
|
+
return true;
|
|
31
|
+
const below = [];
|
|
32
|
+
for (const values of level) {
|
|
33
|
+
for (const value of values) {
|
|
34
|
+
if (value instanceof Object)
|
|
35
|
+
below.push(Object.values(value));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
level = below;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* A copy of the arrays and objects below `entries`, the entries of the level-1
|
|
44
|
+
* object, without recursion. A key named `__proto__` is left out at every depth,
|
|
45
|
+
* as the top-level record parse leaves it out.
|
|
46
|
+
*/
|
|
47
|
+
const copyJsonFields = (entries) => {
|
|
48
|
+
const fields = {};
|
|
49
|
+
const pending = [[entries, fields]];
|
|
50
|
+
for (let item = pending.pop(); item; item = pending.pop()) {
|
|
51
|
+
const [members, target] = item;
|
|
52
|
+
for (const [key, child] of members) {
|
|
53
|
+
if (key === "__proto__")
|
|
54
|
+
continue;
|
|
55
|
+
let value;
|
|
56
|
+
if (Array.isArray(child)) {
|
|
57
|
+
value = [];
|
|
58
|
+
pending.push([Object.entries(child), value]);
|
|
59
|
+
}
|
|
60
|
+
else if (child instanceof Object) {
|
|
61
|
+
value = {};
|
|
62
|
+
pending.push([Object.entries(child), value]);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
value = JSON_PRIMITIVE.parse(child);
|
|
66
|
+
}
|
|
67
|
+
if (Array.isArray(target))
|
|
68
|
+
target.push(value);
|
|
69
|
+
else
|
|
70
|
+
target[key] = value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return fields;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* The fields of a JSON object sent as text.
|
|
77
|
+
*
|
|
78
|
+
* @throws An HTTP 400 result when `text` is not JSON, when it is JSON but not
|
|
79
|
+
* an object, and when it nests arrays and objects more than
|
|
80
|
+
* {@link MAX_BODY_DEPTH} levels deep. The first two carry the messages
|
|
81
|
+
* `Validation.ParseBody` answers a write with.
|
|
82
|
+
*/
|
|
83
|
+
const parseJsonObject = (text) => {
|
|
84
|
+
let json;
|
|
85
|
+
try {
|
|
86
|
+
json = JSON.parse(text);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
(0, interface_api_util_1.assert)(false, 400, "Invalid JSON body.");
|
|
90
|
+
}
|
|
91
|
+
const fields = JSON_FIELDS.safeParse(json);
|
|
92
|
+
(0, interface_api_util_1.assert)(fields.success, 400, "The request body must be a JSON object.");
|
|
93
|
+
(0, interface_api_util_1.assert)(!nestsDeeperThan(Object.values(fields.data), MAX_BODY_DEPTH), 400, `The JSON body nests more than ${MAX_BODY_DEPTH} levels deep.`);
|
|
94
|
+
return copyJsonFields(Object.entries(fields.data));
|
|
95
|
+
};
|
|
14
96
|
/**
|
|
15
97
|
* The values of a confirmation's fields, sent as the body of a delete,
|
|
16
98
|
* archive or restore; unset when the request carried none.
|
|
17
99
|
*/
|
|
18
|
-
const parseConfirmValues = (raw) =>
|
|
19
|
-
const isEmpty = raw === undefined ||
|
|
20
|
-
raw === null ||
|
|
21
|
-
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- RawBody may supply bytes, a string, or decoded data; this detects empty transport bodies before decoding.
|
|
22
|
-
((Buffer.isBuffer(raw) || typeof raw === "string") && raw.length === 0);
|
|
23
|
-
return isEmpty ? undefined : (0, exports.parseGuardBody)(raw);
|
|
24
|
-
};
|
|
100
|
+
const parseConfirmValues = (raw) => raw.length === 0 ? undefined : parseJsonObject(raw.toString());
|
|
25
101
|
/** @internal */
|
|
26
102
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters, anti-slop/no-unsafe-dictionary-type -- The published permissive body decoder accepts transport values and returns module-owned fields without a fixed schema; narrowing either side would change its contract.
|
|
27
103
|
const parseGuardBody = (raw) => {
|
|
28
104
|
if (Buffer.isBuffer(raw))
|
|
29
|
-
return
|
|
105
|
+
return parseJsonObject(raw.toString());
|
|
30
106
|
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- This published decoder distinguishes the string transport representation from already decoded values.
|
|
31
107
|
if (typeof raw === "string" && raw.length > 0)
|
|
32
|
-
return
|
|
108
|
+
return parseJsonObject(raw);
|
|
33
109
|
// oxlint-disable-next-line anti-slop/no-runtime-typeof, anti-slop/require-safety-comment-for-type-assertion, anti-slop/no-unsafe-dictionary-type -- The published decoder accepts any non-null object, including arrays, without proving an indexed row contract; preserve that unchecked compatibility behavior.
|
|
34
110
|
if (raw && typeof raw === "object")
|
|
35
111
|
return raw;
|
|
@@ -39,44 +115,42 @@ exports.parseGuardBody = parseGuardBody;
|
|
|
39
115
|
const ACTION_GUARD_CONFIGS = {
|
|
40
116
|
edit: {
|
|
41
117
|
// oxlint-disable-next-line eslint/max-params -- The edit adapter consumes the six positional inputs declared by GuardInvocationConfig.
|
|
42
|
-
invokeGuard: async (controller, ctx, params,
|
|
118
|
+
invokeGuard: async (controller, ctx, params, body, guard, idField) => {
|
|
43
119
|
const id = String(params.id);
|
|
44
|
-
const body = (0, exports.parseGuardBody)(args[0]);
|
|
45
120
|
const current = await (0, data_functions_1.fetchRowForGuard)(controller, id, idField);
|
|
46
121
|
(0, interface_api_util_1.assert)(current, 404, "Not Found");
|
|
47
122
|
return guard.call(controller, ctx, { id, body, current });
|
|
48
123
|
},
|
|
49
124
|
},
|
|
50
125
|
delete: {
|
|
51
|
-
invokeGuard: async (controller, ctx, params,
|
|
126
|
+
invokeGuard: async (controller, ctx, params, body, guard) => {
|
|
52
127
|
const ids = (0, row_rules_1.normalizeToArray)(params.id);
|
|
53
128
|
return guard.call(controller, ctx, {
|
|
54
129
|
ids,
|
|
55
|
-
values: parseConfirmValues(
|
|
130
|
+
values: parseConfirmValues(body),
|
|
56
131
|
});
|
|
57
132
|
},
|
|
58
133
|
},
|
|
59
134
|
archive: {
|
|
60
|
-
invokeGuard: async (controller, ctx, params,
|
|
135
|
+
invokeGuard: async (controller, ctx, params, body, guard) => {
|
|
61
136
|
const ids = (0, row_rules_1.normalizeToArray)(params);
|
|
62
137
|
return guard.call(controller, ctx, {
|
|
63
138
|
ids,
|
|
64
|
-
values: parseConfirmValues(
|
|
139
|
+
values: parseConfirmValues(body),
|
|
65
140
|
});
|
|
66
141
|
},
|
|
67
142
|
},
|
|
68
143
|
restore: {
|
|
69
|
-
invokeGuard: async (controller, ctx, params,
|
|
144
|
+
invokeGuard: async (controller, ctx, params, body, guard) => {
|
|
70
145
|
const ids = (0, row_rules_1.normalizeToArray)(params);
|
|
71
146
|
return guard.call(controller, ctx, {
|
|
72
147
|
ids,
|
|
73
|
-
values: parseConfirmValues(
|
|
148
|
+
values: parseConfirmValues(body),
|
|
74
149
|
});
|
|
75
150
|
},
|
|
76
151
|
},
|
|
77
152
|
new: {
|
|
78
|
-
invokeGuard: async (controller, ctx, _params,
|
|
79
|
-
const body = (0, exports.parseGuardBody)(args[0]);
|
|
153
|
+
invokeGuard: async (controller, ctx, _params, body, guard) => {
|
|
80
154
|
return guard.call(controller, ctx, { body });
|
|
81
155
|
},
|
|
82
156
|
},
|
|
@@ -104,45 +178,55 @@ async function runAfterWrite(afterWrite, actionName) {
|
|
|
104
178
|
logging_1.Logging.Error(`[dms] the ${actionName} guard's after-write work failed: ${String(error)}`);
|
|
105
179
|
}
|
|
106
180
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
"edit",
|
|
115
|
-
]);
|
|
116
|
-
/** @internal */
|
|
117
|
-
const createGuardedRoute = (baseRoute, actionName) => {
|
|
181
|
+
/**
|
|
182
|
+
* `baseRoute` behind the `actionName` guard, given the body the confirmation
|
|
183
|
+
* answered: the route takes it after the arguments of `baseRoute`.
|
|
184
|
+
*
|
|
185
|
+
* @internal
|
|
186
|
+
*/
|
|
187
|
+
const createGuardedConfirmRoute = (baseRoute, actionName) => {
|
|
118
188
|
const config = ACTION_GUARD_CONFIGS[actionName];
|
|
119
|
-
const readsConfirmBody = CONFIRM_BODY_ACTIONS.has(actionName);
|
|
120
189
|
return {
|
|
121
|
-
func: async function (ctx, params,
|
|
122
|
-
const confirmBody = readsConfirmBody ? routeArgs.pop() : undefined;
|
|
190
|
+
func: async function (ctx, params, confirmBody) {
|
|
123
191
|
const guard = getGuardForAction(this, actionName);
|
|
124
|
-
const writtenBody = guard && WRITE_BODY_ACTIONS.has(actionName)
|
|
125
|
-
? (0, exports.parseGuardBody)(routeArgs[0])
|
|
126
|
-
: undefined;
|
|
127
|
-
const args = readsConfirmBody
|
|
128
|
-
? [confirmBody]
|
|
129
|
-
: writtenBody
|
|
130
|
-
? [writtenBody, ...routeArgs.slice(1)]
|
|
131
|
-
: routeArgs;
|
|
132
192
|
const afterWrite = guard
|
|
133
|
-
? await config.invokeGuard(this, ctx, params,
|
|
193
|
+
? await config.invokeGuard(this, ctx, params, confirmBody, guard, getIdField(this))
|
|
134
194
|
: undefined;
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
195
|
+
const result = await baseRoute.func.call(this, ctx, params);
|
|
196
|
+
if (afterWrite)
|
|
197
|
+
await runAfterWrite(afterWrite, actionName);
|
|
198
|
+
return result;
|
|
199
|
+
},
|
|
200
|
+
args: [...baseRoute.args, (0, interface_api_1.RawBody)()],
|
|
201
|
+
method: baseRoute.method,
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
exports.createGuardedConfirmRoute = createGuardedConfirmRoute;
|
|
205
|
+
/**
|
|
206
|
+
* `baseRoute` behind the `actionName` guard. A guard receives the body
|
|
207
|
+
* parsed by `Validation.ParseBody`, so one that is not a JSON object is
|
|
208
|
+
* refused with 400 before the guard runs, and the route then writes the body
|
|
209
|
+
* as the guard left it.
|
|
210
|
+
*
|
|
211
|
+
* @internal
|
|
212
|
+
*/
|
|
213
|
+
const createGuardedWriteRoute = (baseRoute, actionName) => {
|
|
214
|
+
const config = ACTION_GUARD_CONFIGS[actionName];
|
|
215
|
+
return {
|
|
216
|
+
func: async function (ctx, params, body, ...rest) {
|
|
217
|
+
const guard = getGuardForAction(this, actionName);
|
|
218
|
+
if (!guard)
|
|
219
|
+
return baseRoute.func.call(this, ctx, params, body, ...rest);
|
|
220
|
+
const writtenBody = components_1.Validation.ParseBody(body);
|
|
221
|
+
const afterWrite = await config.invokeGuard(this, ctx, params, writtenBody, guard, getIdField(this));
|
|
222
|
+
const result = await baseRoute.func.call(this, ctx, params, writtenBody, ...rest);
|
|
139
223
|
if (afterWrite)
|
|
140
224
|
await runAfterWrite(afterWrite, actionName);
|
|
141
225
|
return result;
|
|
142
226
|
},
|
|
143
|
-
args:
|
|
227
|
+
args: baseRoute.args,
|
|
144
228
|
method: baseRoute.method,
|
|
145
229
|
};
|
|
146
230
|
};
|
|
147
|
-
exports.
|
|
231
|
+
exports.createGuardedWriteRoute = createGuardedWriteRoute;
|
|
148
232
|
//# sourceMappingURL=guards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/guards.ts"],"names":[],"mappings":";;;AAAA,6DAAyE;AACzE,uEAA2E;AAC3E,+DAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { ColumnOptions, TableViewMeta } from "../meta";
|
|
|
4
4
|
type FieldDecoratorArguments = Parameters<Parameters<typeof MakeMethodAndPropertyDecorator>[0]>;
|
|
5
5
|
/** @internal */
|
|
6
6
|
export declare function buildTableConfig(view: TableViewMeta, serialize: typeof serializeType): {
|
|
7
|
-
location: string;
|
|
7
|
+
location: string | undefined;
|
|
8
8
|
columns: {
|
|
9
9
|
id: string;
|
|
10
10
|
header: string;
|
|
@@ -14,13 +14,12 @@ const interface_database_decorators_1 = require("@antelopejs/interface-database-
|
|
|
14
14
|
const form_schema_1 = require("../../form-schema");
|
|
15
15
|
const types_1 = require("../../types");
|
|
16
16
|
const column_display_1 = require("./column-display");
|
|
17
|
+
const decorated_class_1 = require("../../../utils/internal/decorated-class");
|
|
17
18
|
/** @internal */
|
|
18
19
|
function buildTableConfig(view, serialize) {
|
|
19
|
-
// oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion -- The published target constructor type does not establish ControllerClass.location; registration is assumed rather than validated here.
|
|
20
|
-
const apimeta = (0, interface_core_1.GetMetadata)(view.target, interface_api_1.ControllerMeta);
|
|
21
20
|
const datameta = (0, interface_core_1.GetMetadata)(view.target, metadata_1.DataAPIMeta);
|
|
22
21
|
return {
|
|
23
|
-
location:
|
|
22
|
+
location: (0, interface_core_1.GetMetadata)(view.target, interface_api_1.ControllerMeta).location,
|
|
24
23
|
columns: Object.entries(view.columns)
|
|
25
24
|
.sort((a, b) => (a[1].order ?? 0) - (b[1].order ?? 0))
|
|
26
25
|
.map(([key, options]) => {
|
|
@@ -52,7 +51,7 @@ function decorateColumn(target, key, descriptor, options, meta) {
|
|
|
52
51
|
if (options.validate !== false) {
|
|
53
52
|
// oxlint-disable-next-line typescript/unbound-method -- This assertion checks method presence without calling it; getValidation is called through options.type below.
|
|
54
53
|
(0, node_assert_1.default)(options.type.getValidation, "Type has no getValidation method");
|
|
55
|
-
const dataMeta = (0, interface_core_1.GetMetadata)(target
|
|
54
|
+
const dataMeta = (0, interface_core_1.GetMetadata)((0, decorated_class_1.decoratedClass)(target), metadata_1.DataAPIMeta);
|
|
56
55
|
const localizedFields = (0, interface_database_decorators_1.getModifiedFields)(dataMeta.tableClass.prototype, interface_database_decorators_1.LocalizationModifier);
|
|
57
56
|
const isLocalized = localizedFields.includes(key);
|
|
58
57
|
const baseSchema = options.type.getValidation();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-helpers.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/meta-helpers.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"meta-helpers.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/meta-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getControllerLocation = exports.getTableViewMetaFor = void 0;
|
|
4
|
-
const interface_api_1 = require("@antelopejs/interface-api");
|
|
5
4
|
const interface_core_1 = require("@antelopejs/interface-core");
|
|
6
5
|
const meta_1 = require("../meta");
|
|
7
6
|
/** @internal */
|
|
@@ -12,8 +11,8 @@ target.constructor, meta_1.TableViewMeta);
|
|
|
12
11
|
exports.getTableViewMetaFor = getTableViewMetaFor;
|
|
13
12
|
/** @internal */
|
|
14
13
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters -- This published metadata adapter accepts arbitrary controller receivers; narrowing its input would change that contract.
|
|
15
|
-
const getControllerLocation = (target) =>
|
|
14
|
+
const getControllerLocation = (target) =>
|
|
16
15
|
// oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion -- The published unknown receiver does not verify its constructor; route dispatch remains responsible for supplying a controller instance.
|
|
17
|
-
target.constructor
|
|
16
|
+
target.constructor.location;
|
|
18
17
|
exports.getControllerLocation = getControllerLocation;
|
|
19
18
|
//# sourceMappingURL=meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/meta.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/meta.ts"],"names":[],"mappings":";;;AACA,+DAAyD;AACzD,kCAAwC;AAExC,gBAAgB;AAChB,+MAA+M;AACxM,MAAM,mBAAmB,GAAG,CAAC,MAAe,EAAiB,EAAE,CACpE,IAAA,4BAAW;AACT,2OAA2O;AAC1O,MAA2C,CAAC,WAAW,EACxD,oBAAa,CACd,CAAC;AALS,QAAA,mBAAmB,uBAK5B;AAEJ,gBAAgB;AAChB,sLAAsL;AAC/K,MAAM,qBAAqB,GAAG,CAAC,MAAe,EAAU,EAAE;AAC/D,0NAA0N;AACzN,MAA2C,CAAC,WAAW,CAAC,QAAQ,CAAC;AAFvD,QAAA,qBAAqB,yBAEkC"}
|
|
@@ -64,6 +64,14 @@ export interface TableViewOptionsSerialized extends Omit<TableViewOptions, "colu
|
|
|
64
64
|
* the rows once again when the hold ends, if it missed any.
|
|
65
65
|
*/
|
|
66
66
|
export interface TableViewLiveHoldOptions {
|
|
67
|
+
/**
|
|
68
|
+
* While its rows are on screen or scrolled past: a new row landing at the
|
|
69
|
+
* top would push down the rows the user reads, so the new ones wait behind
|
|
70
|
+
* the "N new · Show" pill. `false` lets the table follow its feed while its
|
|
71
|
+
* page is in Direct, holding only while paused or for a reason it names.
|
|
72
|
+
* Defaults to true.
|
|
73
|
+
*/
|
|
74
|
+
whileOnScreen?: boolean;
|
|
67
75
|
/** While one of its rows is open in the side panel. Defaults to false. */
|
|
68
76
|
whileRowOpen?: boolean;
|
|
69
77
|
/** While the user has scrolled its first row out of view. Defaults to false. */
|
|
@@ -86,7 +94,7 @@ export interface TableViewLiveHoldOptions {
|
|
|
86
94
|
*/
|
|
87
95
|
missedLabel?: string;
|
|
88
96
|
}
|
|
89
|
-
export interface TableViewOptions<T extends
|
|
97
|
+
export interface TableViewOptions<T extends object = Record<string, unknown>> {
|
|
90
98
|
caption?: string;
|
|
91
99
|
/**
|
|
92
100
|
* Row density the table opens with: "compact" gives 36px rows under a 32px
|
|
@@ -20,7 +20,7 @@ export interface TableViewSummaryFormat {
|
|
|
20
20
|
* server over every row the table's filters, search and tab list — not only
|
|
21
21
|
* the page shown.
|
|
22
22
|
*/
|
|
23
|
-
export interface TableViewFooterSummary<T extends
|
|
23
|
+
export interface TableViewFooterSummary<T extends object = Record<string, unknown>> {
|
|
24
24
|
/** Shown before the figure. `$`-prefixed: an i18n key. */
|
|
25
25
|
label: string;
|
|
26
26
|
/** Column summed; required by `sum`. */
|
|
@@ -39,7 +39,7 @@ export interface TableViewFooterSummarySerialized extends Omit<TableViewFooterSu
|
|
|
39
39
|
id: string;
|
|
40
40
|
}
|
|
41
41
|
/** Texts and figures of the footer band. */
|
|
42
|
-
export interface TableViewFooterOptions<T extends
|
|
42
|
+
export interface TableViewFooterOptions<T extends object = Record<string, unknown>> {
|
|
43
43
|
/**
|
|
44
44
|
* Row count text, an i18n key with `$` receiving `{ count }` and pluralized
|
|
45
45
|
* on it ("7 members"). Defaults to "{count} items".
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @internal @packageDocumentation */
|
|
2
2
|
import type { BulkRowActionConfig, RowActionConfig, AddRowActionConfig, CustomRowAction, RowActionConfigSerialized, CustomRowActionSerialized } from "../../types/row-action";
|
|
3
|
-
export interface TableViewRowActionOptions<T extends
|
|
3
|
+
export interface TableViewRowActionOptions<T extends object = Record<string, unknown>> {
|
|
4
4
|
/**
|
|
5
5
|
* Delete action configuration
|
|
6
6
|
* @example true
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { type RequestContext } from "@antelopejs/interface-api";
|
|
1
2
|
import type { DataControllerCallback } from "@antelopejs/interface-data-api";
|
|
3
|
+
import type { User } from "../../../auth/db";
|
|
2
4
|
import { type RealtimeMutationEventType } from "../realtime";
|
|
3
5
|
/** @internal */
|
|
4
6
|
export declare const REALTIME_PRESENCE_QUERY = "_presence";
|
|
@@ -19,15 +21,23 @@ export declare function registerTableViewPageTopics(pageId: string, controllerLo
|
|
|
19
21
|
* @internal
|
|
20
22
|
*/
|
|
21
23
|
export declare function registerTableViewCustomTopics(pageId: string, topic: string | string[] | undefined): void;
|
|
22
|
-
|
|
24
|
+
/**
|
|
25
|
+
* The ids a write changed, read from the route's arguments (the request
|
|
26
|
+
* context, the route's parameters, then the rest) or from its answer.
|
|
27
|
+
*/
|
|
28
|
+
type IdExtractor<P> = (args: readonly [RequestContext, P, ...unknown[]], result: unknown, idKey: string) => string[];
|
|
23
29
|
/** @internal */
|
|
24
|
-
export declare const extractFromResult: IdExtractor
|
|
30
|
+
export declare const extractFromResult: IdExtractor<unknown>;
|
|
25
31
|
/** @internal */
|
|
26
|
-
export declare const extractSingleParamId: IdExtractor
|
|
32
|
+
export declare const extractSingleParamId: IdExtractor<{
|
|
33
|
+
id?: string;
|
|
34
|
+
} | undefined>;
|
|
27
35
|
/** @internal */
|
|
28
|
-
export declare const extractMultiParamId: IdExtractor
|
|
36
|
+
export declare const extractMultiParamId: IdExtractor<{
|
|
37
|
+
id?: string | string[];
|
|
38
|
+
} | undefined>;
|
|
29
39
|
/** @internal */
|
|
30
|
-
export declare const extractBulkArgIds: IdExtractor
|
|
40
|
+
export declare const extractBulkArgIds: IdExtractor<string | string[] | undefined>;
|
|
31
41
|
/**
|
|
32
42
|
* Whether a write reports changing no row: its row rules refused every id,
|
|
33
43
|
* or none existed. Broadcasting its ids would have every session watching
|
|
@@ -35,12 +45,43 @@ export declare const extractBulkArgIds: IdExtractor;
|
|
|
35
45
|
*/
|
|
36
46
|
/** @internal */
|
|
37
47
|
export declare const reportsNoChange: (result: unknown) => boolean;
|
|
38
|
-
interface MutationConfig {
|
|
48
|
+
interface MutationConfig<P> {
|
|
39
49
|
eventType: RealtimeMutationEventType;
|
|
40
|
-
extractIds: IdExtractor
|
|
50
|
+
extractIds: IdExtractor<P>;
|
|
41
51
|
}
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
/**
|
|
53
|
+
* `baseRoute` (a write behind its permission check) followed by the realtime
|
|
54
|
+
* broadcast of the rows it changed: the route takes the request context, the
|
|
55
|
+
* realtime session header and the user after the arguments of `baseRoute`.
|
|
56
|
+
*
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
export declare function withRealtimeMutation<O, R, P, B>(config: MutationConfig<P>, baseRoute: DataControllerCallback<O, R, [RequestContext, P, B, User]>): DataControllerCallback<O, R, [
|
|
60
|
+
RequestContext,
|
|
61
|
+
P,
|
|
62
|
+
B,
|
|
63
|
+
User,
|
|
64
|
+
RequestContext,
|
|
65
|
+
string | undefined,
|
|
66
|
+
User
|
|
67
|
+
]>;
|
|
68
|
+
/**
|
|
69
|
+
* `baseRoute` (a read behind its permission check) that also takes the
|
|
70
|
+
* presence of the session on the row it reads when the request asks: the
|
|
71
|
+
* route takes the request context, the realtime session header, the presence
|
|
72
|
+
* query and the user after the arguments of `baseRoute`.
|
|
73
|
+
*
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
export declare function withPresenceAcquire<O, R, P extends {
|
|
77
|
+
id?: string;
|
|
78
|
+
}>(baseRoute: DataControllerCallback<O, R, [RequestContext, P, User]>): DataControllerCallback<O, R, [
|
|
79
|
+
RequestContext,
|
|
80
|
+
P,
|
|
81
|
+
User,
|
|
82
|
+
RequestContext,
|
|
83
|
+
string | undefined,
|
|
84
|
+
string | undefined,
|
|
85
|
+
User
|
|
86
|
+
]>;
|
|
46
87
|
export {};
|
|
@@ -125,7 +125,13 @@ const reportsNoChange = (result) => {
|
|
|
125
125
|
return counts.length > 0 && counts.every((count) => count === 0);
|
|
126
126
|
};
|
|
127
127
|
exports.reportsNoChange = reportsNoChange;
|
|
128
|
-
/**
|
|
128
|
+
/**
|
|
129
|
+
* `baseRoute` (a write behind its permission check) followed by the realtime
|
|
130
|
+
* broadcast of the rows it changed: the route takes the request context, the
|
|
131
|
+
* realtime session header and the user after the arguments of `baseRoute`.
|
|
132
|
+
*
|
|
133
|
+
* @internal
|
|
134
|
+
*/
|
|
129
135
|
function withRealtimeMutation(config, baseRoute) {
|
|
130
136
|
return {
|
|
131
137
|
method: baseRoute.method,
|
|
@@ -135,16 +141,14 @@ function withRealtimeMutation(config, baseRoute) {
|
|
|
135
141
|
(0, interface_api_1.Parameter)(REALTIME_SESSION_HEADER, "header"),
|
|
136
142
|
(0, auth_1.AuthUser)(),
|
|
137
143
|
],
|
|
138
|
-
func: async function (...
|
|
139
|
-
const user =
|
|
140
|
-
const
|
|
141
|
-
const ctx = allArgs.pop();
|
|
142
|
-
const result = await baseRoute.func.apply(this, allArgs);
|
|
144
|
+
func: async function (...routeArgs) {
|
|
145
|
+
const [routeCtx, params, body, routeUser, ctx, sessionId, user] = routeArgs;
|
|
146
|
+
const result = await baseRoute.func.call(this, routeCtx, params, body, routeUser);
|
|
143
147
|
if (!isRealtimeEnabled(this))
|
|
144
148
|
return result;
|
|
145
149
|
const meta = (0, meta_1.getTableViewMetaFor)(this);
|
|
146
150
|
const idKey = meta.options.rowIdKey || "_id";
|
|
147
|
-
const ids = config.extractIds(
|
|
151
|
+
const ids = config.extractIds([routeCtx, params, body, routeUser], result, idKey);
|
|
148
152
|
if (ids.length === 0 && config.eventType !== "created")
|
|
149
153
|
return result;
|
|
150
154
|
if (config.eventType !== "created" && (0, exports.reportsNoChange)(result)) {
|
|
@@ -163,7 +167,14 @@ function withRealtimeMutation(config, baseRoute) {
|
|
|
163
167
|
},
|
|
164
168
|
};
|
|
165
169
|
}
|
|
166
|
-
/**
|
|
170
|
+
/**
|
|
171
|
+
* `baseRoute` (a read behind its permission check) that also takes the
|
|
172
|
+
* presence of the session on the row it reads when the request asks: the
|
|
173
|
+
* route takes the request context, the realtime session header, the presence
|
|
174
|
+
* query and the user after the arguments of `baseRoute`.
|
|
175
|
+
*
|
|
176
|
+
* @internal
|
|
177
|
+
*/
|
|
167
178
|
function withPresenceAcquire(baseRoute) {
|
|
168
179
|
return {
|
|
169
180
|
method: baseRoute.method,
|
|
@@ -174,19 +185,15 @@ function withPresenceAcquire(baseRoute) {
|
|
|
174
185
|
(0, interface_api_1.Parameter)(exports.REALTIME_PRESENCE_QUERY, "query"),
|
|
175
186
|
(0, auth_1.AuthUser)(),
|
|
176
187
|
],
|
|
177
|
-
func: async function (...
|
|
178
|
-
const user =
|
|
179
|
-
const
|
|
180
|
-
const sessionId = allArgs.pop();
|
|
181
|
-
const ctx = allArgs.pop();
|
|
182
|
-
const result = await baseRoute.func.apply(this, allArgs);
|
|
188
|
+
func: async function (...routeArgs) {
|
|
189
|
+
const [routeCtx, params, routeUser, ctx, sessionId, presenceFlag, user] = routeArgs;
|
|
190
|
+
const result = await baseRoute.func.call(this, routeCtx, params, routeUser);
|
|
183
191
|
if (presenceFlag !== exports.REALTIME_PRESENCE_ACQUIRE_VALUE ||
|
|
184
192
|
!sessionId ||
|
|
185
193
|
!isRealtimeEnabled(this)) {
|
|
186
194
|
return result;
|
|
187
195
|
}
|
|
188
|
-
|
|
189
|
-
if (!params?.id)
|
|
196
|
+
if (!params.id)
|
|
190
197
|
return result;
|
|
191
198
|
const meta = (0, meta_1.getTableViewMetaFor)(this);
|
|
192
199
|
await realtime_2.internal.AcquirePresence({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/realtime.ts"],"names":[],"mappings":";;;AAuCA,kEAMC;AAQD,sEAQC;
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../../../src/base/table-view/internal/realtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,4 +22,4 @@ export declare function stampAttachmentFields(meta: TableViewMeta, location: str
|
|
|
22
22
|
*
|
|
23
23
|
* @internal
|
|
24
24
|
*/
|
|
25
|
-
export declare function resourceForm
|
|
25
|
+
export declare function resourceForm(controller: ControllerClass, mode: ResourceFormMode, options?: ResourceFormOptions): FormBuilder | undefined;
|