@aglyn/aglyn 1.0.0-beta.143
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/LICENSE +201 -0
- package/README.md +11 -0
- package/package.json +66 -0
- package/src/index.d.ts +25 -0
- package/src/index.js +26 -0
- package/src/index.js.map +1 -0
- package/src/lib/aglyn.d.ts +31 -0
- package/src/lib/aglyn.js +114 -0
- package/src/lib/aglyn.js.map +1 -0
- package/src/lib/app-utils/abuse-report.d.ts +193 -0
- package/src/lib/app-utils/abuse-report.js +321 -0
- package/src/lib/app-utils/abuse-report.js.map +1 -0
- package/src/lib/app-utils/accept-negotiation.d.ts +129 -0
- package/src/lib/app-utils/accept-negotiation.js +266 -0
- package/src/lib/app-utils/accept-negotiation.js.map +1 -0
- package/src/lib/app-utils/account-emails.d.ts +263 -0
- package/src/lib/app-utils/account-emails.js +264 -0
- package/src/lib/app-utils/account-emails.js.map +1 -0
- package/src/lib/app-utils/actions.d.ts +717 -0
- package/src/lib/app-utils/actions.js +1031 -0
- package/src/lib/app-utils/actions.js.map +1 -0
- package/src/lib/app-utils/activity-presenter.d.ts +152 -0
- package/src/lib/app-utils/activity-presenter.js +326 -0
- package/src/lib/app-utils/activity-presenter.js.map +1 -0
- package/src/lib/app-utils/advertising-tag-mounts.d.ts +133 -0
- package/src/lib/app-utils/advertising-tag-mounts.js +118 -0
- package/src/lib/app-utils/advertising-tag-mounts.js.map +1 -0
- package/src/lib/app-utils/advertising-tags.d.ts +307 -0
- package/src/lib/app-utils/advertising-tags.js +525 -0
- package/src/lib/app-utils/advertising-tags.js.map +1 -0
- package/src/lib/app-utils/agent-api-catalog.d.ts +94 -0
- package/src/lib/app-utils/agent-api-catalog.js +106 -0
- package/src/lib/app-utils/agent-api-catalog.js.map +1 -0
- package/src/lib/app-utils/agent-openapi.d.ts +103 -0
- package/src/lib/app-utils/agent-openapi.js +1128 -0
- package/src/lib/app-utils/agent-openapi.js.map +1 -0
- package/src/lib/app-utils/analytics-beacon.d.ts +154 -0
- package/src/lib/app-utils/analytics-beacon.js +152 -0
- package/src/lib/app-utils/analytics-beacon.js.map +1 -0
- package/src/lib/app-utils/analytics-environment.d.ts +133 -0
- package/src/lib/app-utils/analytics-environment.js +152 -0
- package/src/lib/app-utils/analytics-environment.js.map +1 -0
- package/src/lib/app-utils/analytics-events.d.ts +744 -0
- package/src/lib/app-utils/analytics-events.js +650 -0
- package/src/lib/app-utils/analytics-events.js.map +1 -0
- package/src/lib/app-utils/analytics-link-clicks.d.ts +102 -0
- package/src/lib/app-utils/analytics-link-clicks.js +267 -0
- package/src/lib/app-utils/analytics-link-clicks.js.map +1 -0
- package/src/lib/app-utils/analytics-path-key.d.ts +46 -0
- package/src/lib/app-utils/analytics-path-key.js +46 -0
- package/src/lib/app-utils/analytics-path-key.js.map +1 -0
- package/src/lib/app-utils/api-adapter.d.ts +47 -0
- package/src/lib/app-utils/api-adapter.js +367 -0
- package/src/lib/app-utils/api-adapter.js.map +1 -0
- package/src/lib/app-utils/api-idempotency.d.ts +169 -0
- package/src/lib/app-utils/api-idempotency.js +213 -0
- package/src/lib/app-utils/api-idempotency.js.map +1 -0
- package/src/lib/app-utils/api-plugins.d.ts +210 -0
- package/src/lib/app-utils/api-plugins.js +221 -0
- package/src/lib/app-utils/api-plugins.js.map +1 -0
- package/src/lib/app-utils/assist-credits.d.ts +482 -0
- package/src/lib/app-utils/assist-credits.js +509 -0
- package/src/lib/app-utils/assist-credits.js.map +1 -0
- package/src/lib/app-utils/attribution-attribute.d.ts +34 -0
- package/src/lib/app-utils/attribution-attribute.js +34 -0
- package/src/lib/app-utils/attribution-attribute.js.map +1 -0
- package/src/lib/app-utils/attribution-guard.d.ts +130 -0
- package/src/lib/app-utils/attribution-guard.js +410 -0
- package/src/lib/app-utils/attribution-guard.js.map +1 -0
- package/src/lib/app-utils/author-css.d.ts +123 -0
- package/src/lib/app-utils/author-css.js +275 -0
- package/src/lib/app-utils/author-css.js.map +1 -0
- package/src/lib/app-utils/author-html-markdown.d.ts +31 -0
- package/src/lib/app-utils/author-html-markdown.js +497 -0
- package/src/lib/app-utils/author-html-markdown.js.map +1 -0
- package/src/lib/app-utils/author-html.d.ts +135 -0
- package/src/lib/app-utils/author-html.js +1037 -0
- package/src/lib/app-utils/author-html.js.map +1 -0
- package/src/lib/app-utils/automation-placeholders.d.ts +72 -0
- package/src/lib/app-utils/automation-placeholders.js +207 -0
- package/src/lib/app-utils/automation-placeholders.js.map +1 -0
- package/src/lib/app-utils/bandwidth-cap.d.ts +183 -0
- package/src/lib/app-utils/bandwidth-cap.js +193 -0
- package/src/lib/app-utils/bandwidth-cap.js.map +1 -0
- package/src/lib/app-utils/binding-token-catalog.d.ts +82 -0
- package/src/lib/app-utils/binding-token-catalog.js +293 -0
- package/src/lib/app-utils/binding-token-catalog.js.map +1 -0
- package/src/lib/app-utils/binding-tokens.d.ts +157 -0
- package/src/lib/app-utils/binding-tokens.js +251 -0
- package/src/lib/app-utils/binding-tokens.js.map +1 -0
- package/src/lib/app-utils/breadcrumb-json-ld.d.ts +57 -0
- package/src/lib/app-utils/breadcrumb-json-ld.js +67 -0
- package/src/lib/app-utils/breadcrumb-json-ld.js.map +1 -0
- package/src/lib/app-utils/campaign-attribution.d.ts +117 -0
- package/src/lib/app-utils/campaign-attribution.js +162 -0
- package/src/lib/app-utils/campaign-attribution.js.map +1 -0
- package/src/lib/app-utils/campaign-forwarding.d.ts +220 -0
- package/src/lib/app-utils/campaign-forwarding.js +332 -0
- package/src/lib/app-utils/campaign-forwarding.js.map +1 -0
- package/src/lib/app-utils/campaign-membership.d.ts +109 -0
- package/src/lib/app-utils/campaign-membership.js +176 -0
- package/src/lib/app-utils/campaign-membership.js.map +1 -0
- package/src/lib/app-utils/campaign-touch.d.ts +206 -0
- package/src/lib/app-utils/campaign-touch.js +326 -0
- package/src/lib/app-utils/campaign-touch.js.map +1 -0
- package/src/lib/app-utils/child-contract-compose.d.ts +28 -0
- package/src/lib/app-utils/child-contract-compose.js +140 -0
- package/src/lib/app-utils/child-contract-compose.js.map +1 -0
- package/src/lib/app-utils/child-contract.d.ts +129 -0
- package/src/lib/app-utils/child-contract.js +153 -0
- package/src/lib/app-utils/child-contract.js.map +1 -0
- package/src/lib/app-utils/collection-delete.d.ts +113 -0
- package/src/lib/app-utils/collection-delete.js +120 -0
- package/src/lib/app-utils/collection-delete.js.map +1 -0
- package/src/lib/app-utils/collection-entries.d.ts +833 -0
- package/src/lib/app-utils/collection-entries.js +1285 -0
- package/src/lib/app-utils/collection-entries.js.map +1 -0
- package/src/lib/app-utils/collection-entry-date.d.ts +129 -0
- package/src/lib/app-utils/collection-entry-date.js +183 -0
- package/src/lib/app-utils/collection-entry-date.js.map +1 -0
- package/src/lib/app-utils/collection-kind.d.ts +55 -0
- package/src/lib/app-utils/collection-kind.js +69 -0
- package/src/lib/app-utils/collection-kind.js.map +1 -0
- package/src/lib/app-utils/collection-slug.d.ts +79 -0
- package/src/lib/app-utils/collection-slug.js +70 -0
- package/src/lib/app-utils/collection-slug.js.map +1 -0
- package/src/lib/app-utils/compose-layout-nodes.d.ts +147 -0
- package/src/lib/app-utils/compose-layout-nodes.js +261 -0
- package/src/lib/app-utils/compose-layout-nodes.js.map +1 -0
- package/src/lib/app-utils/compose-layout-props.d.ts +71 -0
- package/src/lib/app-utils/compose-layout-props.js +61 -0
- package/src/lib/app-utils/compose-layout-props.js.map +1 -0
- package/src/lib/app-utils/compose-reusable-components.d.ts +504 -0
- package/src/lib/app-utils/compose-reusable-components.js +1366 -0
- package/src/lib/app-utils/compose-reusable-components.js.map +1 -0
- package/src/lib/app-utils/compress.d.ts +35 -0
- package/src/lib/app-utils/compress.js +38 -0
- package/src/lib/app-utils/compress.js.map +1 -0
- package/src/lib/app-utils/consent-banner-ui.d.ts +226 -0
- package/src/lib/app-utils/consent-banner-ui.js +583 -0
- package/src/lib/app-utils/consent-banner-ui.js.map +1 -0
- package/src/lib/app-utils/consent-groups.d.ts +189 -0
- package/src/lib/app-utils/consent-groups.js +219 -0
- package/src/lib/app-utils/consent-groups.js.map +1 -0
- package/src/lib/app-utils/consent-preferences-dialog.d.ts +58 -0
- package/src/lib/app-utils/consent-preferences-dialog.js +106 -0
- package/src/lib/app-utils/consent-preferences-dialog.js.map +1 -0
- package/src/lib/app-utils/console-record-links.d.ts +163 -0
- package/src/lib/app-utils/console-record-links.js +178 -0
- package/src/lib/app-utils/console-record-links.js.map +1 -0
- package/src/lib/app-utils/console-routes.d.ts +658 -0
- package/src/lib/app-utils/console-routes.js +489 -0
- package/src/lib/app-utils/console-routes.js.map +1 -0
- package/src/lib/app-utils/console-widget-slot-context.d.ts +46 -0
- package/src/lib/app-utils/console-widget-slot-context.js +23 -0
- package/src/lib/app-utils/console-widget-slot-context.js.map +1 -0
- package/src/lib/app-utils/contact-custom-fields.d.ts +191 -0
- package/src/lib/app-utils/contact-custom-fields.js +349 -0
- package/src/lib/app-utils/contact-custom-fields.js.map +1 -0
- package/src/lib/app-utils/contact-holder.d.ts +52 -0
- package/src/lib/app-utils/contact-holder.js +98 -0
- package/src/lib/app-utils/contact-holder.js.map +1 -0
- package/src/lib/app-utils/contact-merge.d.ts +136 -0
- package/src/lib/app-utils/contact-merge.js +379 -0
- package/src/lib/app-utils/contact-merge.js.map +1 -0
- package/src/lib/app-utils/contacts.d.ts +554 -0
- package/src/lib/app-utils/contacts.js +401 -0
- package/src/lib/app-utils/contacts.js.map +1 -0
- package/src/lib/app-utils/content-author-profile.d.ts +68 -0
- package/src/lib/app-utils/content-author-profile.js +118 -0
- package/src/lib/app-utils/content-author-profile.js.map +1 -0
- package/src/lib/app-utils/content-authors.d.ts +662 -0
- package/src/lib/app-utils/content-authors.js +771 -0
- package/src/lib/app-utils/content-authors.js.map +1 -0
- package/src/lib/app-utils/content-schema-type.d.ts +81 -0
- package/src/lib/app-utils/content-schema-type.js +87 -0
- package/src/lib/app-utils/content-schema-type.js.map +1 -0
- package/src/lib/app-utils/contexts.d.ts +35 -0
- package/src/lib/app-utils/contexts.js +35 -0
- package/src/lib/app-utils/contexts.js.map +1 -0
- package/src/lib/app-utils/create-resource-uid.d.ts +18 -0
- package/src/lib/app-utils/create-resource-uid.js +23 -0
- package/src/lib/app-utils/create-resource-uid.js.map +1 -0
- package/src/lib/app-utils/crm-booking.d.ts +75 -0
- package/src/lib/app-utils/crm-booking.js +133 -0
- package/src/lib/app-utils/crm-booking.js.map +1 -0
- package/src/lib/app-utils/crm-csv.d.ts +232 -0
- package/src/lib/app-utils/crm-csv.js +432 -0
- package/src/lib/app-utils/crm-csv.js.map +1 -0
- package/src/lib/app-utils/crm-digest.d.ts +179 -0
- package/src/lib/app-utils/crm-digest.js +271 -0
- package/src/lib/app-utils/crm-digest.js.map +1 -0
- package/src/lib/app-utils/crm-email-templates.d.ts +172 -0
- package/src/lib/app-utils/crm-email-templates.js +382 -0
- package/src/lib/app-utils/crm-email-templates.js.map +1 -0
- package/src/lib/app-utils/crm-inbound.d.ts +245 -0
- package/src/lib/app-utils/crm-inbound.js +407 -0
- package/src/lib/app-utils/crm-inbound.js.map +1 -0
- package/src/lib/app-utils/crm-kinds.d.ts +73 -0
- package/src/lib/app-utils/crm-kinds.js +92 -0
- package/src/lib/app-utils/crm-kinds.js.map +1 -0
- package/src/lib/app-utils/crm-next-activity.d.ts +107 -0
- package/src/lib/app-utils/crm-next-activity.js +140 -0
- package/src/lib/app-utils/crm-next-activity.js.map +1 -0
- package/src/lib/app-utils/crm-reports.d.ts +479 -0
- package/src/lib/app-utils/crm-reports.js +680 -0
- package/src/lib/app-utils/crm-reports.js.map +1 -0
- package/src/lib/app-utils/crm-task-reminders.d.ts +129 -0
- package/src/lib/app-utils/crm-task-reminders.js +139 -0
- package/src/lib/app-utils/crm-task-reminders.js.map +1 -0
- package/src/lib/app-utils/crm.d.ts +1546 -0
- package/src/lib/app-utils/crm.js +1814 -0
- package/src/lib/app-utils/crm.js.map +1 -0
- package/src/lib/app-utils/csp-report.d.ts +84 -0
- package/src/lib/app-utils/csp-report.js +177 -0
- package/src/lib/app-utils/csp-report.js.map +1 -0
- package/src/lib/app-utils/csv-import.d.ts +192 -0
- package/src/lib/app-utils/csv-import.js +279 -0
- package/src/lib/app-utils/csv-import.js.map +1 -0
- package/src/lib/app-utils/dataset-csv.d.ts +109 -0
- package/src/lib/app-utils/dataset-csv.js +235 -0
- package/src/lib/app-utils/dataset-csv.js.map +1 -0
- package/src/lib/app-utils/dataset-models.d.ts +194 -0
- package/src/lib/app-utils/dataset-models.js +409 -0
- package/src/lib/app-utils/dataset-models.js.map +1 -0
- package/src/lib/app-utils/dataset-query.d.ts +57 -0
- package/src/lib/app-utils/dataset-query.js +126 -0
- package/src/lib/app-utils/dataset-query.js.map +1 -0
- package/src/lib/app-utils/datasets.d.ts +136 -0
- package/src/lib/app-utils/datasets.js +177 -0
- package/src/lib/app-utils/datasets.js.map +1 -0
- package/src/lib/app-utils/decompress.d.ts +36 -0
- package/src/lib/app-utils/decompress.js +32 -0
- package/src/lib/app-utils/decompress.js.map +1 -0
- package/src/lib/app-utils/dedicated-sending-domain.d.ts +47 -0
- package/src/lib/app-utils/dedicated-sending-domain.js +114 -0
- package/src/lib/app-utils/dedicated-sending-domain.js.map +1 -0
- package/src/lib/app-utils/deferred-image.d.ts +86 -0
- package/src/lib/app-utils/deferred-image.js +83 -0
- package/src/lib/app-utils/deferred-image.js.map +1 -0
- package/src/lib/app-utils/definition-canvas-tree.d.ts +61 -0
- package/src/lib/app-utils/definition-canvas-tree.js +126 -0
- package/src/lib/app-utils/definition-canvas-tree.js.map +1 -0
- package/src/lib/app-utils/deployment-shape.d.ts +167 -0
- package/src/lib/app-utils/deployment-shape.js +238 -0
- package/src/lib/app-utils/deployment-shape.js.map +1 -0
- package/src/lib/app-utils/detect-template-placeholders.d.ts +30 -0
- package/src/lib/app-utils/detect-template-placeholders.js +53 -0
- package/src/lib/app-utils/detect-template-placeholders.js.map +1 -0
- package/src/lib/app-utils/dmca-counter-notice.d.ts +185 -0
- package/src/lib/app-utils/dmca-counter-notice.js +277 -0
- package/src/lib/app-utils/dmca-counter-notice.js.map +1 -0
- package/src/lib/app-utils/docs-deflection.d.ts +156 -0
- package/src/lib/app-utils/docs-deflection.js +547 -0
- package/src/lib/app-utils/docs-deflection.js.map +1 -0
- package/src/lib/app-utils/docs-help.d.ts +57 -0
- package/src/lib/app-utils/docs-help.generated.d.ts +303 -0
- package/src/lib/app-utils/docs-help.generated.js +867 -0
- package/src/lib/app-utils/docs-help.generated.js.map +1 -0
- package/src/lib/app-utils/docs-help.js +46 -0
- package/src/lib/app-utils/docs-help.js.map +1 -0
- package/src/lib/app-utils/docs-index.generated.d.ts +29 -0
- package/src/lib/app-utils/docs-index.generated.js +8388 -0
- package/src/lib/app-utils/docs-index.generated.js.map +1 -0
- package/src/lib/app-utils/docs-retrieval.d.ts +67 -0
- package/src/lib/app-utils/docs-retrieval.js +188 -0
- package/src/lib/app-utils/docs-retrieval.js.map +1 -0
- package/src/lib/app-utils/document-landmark.d.ts +50 -0
- package/src/lib/app-utils/document-landmark.js +100 -0
- package/src/lib/app-utils/document-landmark.js.map +1 -0
- package/src/lib/app-utils/duplicate-resource.d.ts +101 -0
- package/src/lib/app-utils/duplicate-resource.js +206 -0
- package/src/lib/app-utils/duplicate-resource.js.map +1 -0
- package/src/lib/app-utils/dynamic-list-rule.d.ts +471 -0
- package/src/lib/app-utils/dynamic-list-rule.js +914 -0
- package/src/lib/app-utils/dynamic-list-rule.js.map +1 -0
- package/src/lib/app-utils/element-animation.d.ts +200 -0
- package/src/lib/app-utils/element-animation.js +233 -0
- package/src/lib/app-utils/element-animation.js.map +1 -0
- package/src/lib/app-utils/element-hidden-style.d.ts +46 -0
- package/src/lib/app-utils/element-hidden-style.js +48 -0
- package/src/lib/app-utils/element-hidden-style.js.map +1 -0
- package/src/lib/app-utils/element-ui.d.ts +243 -0
- package/src/lib/app-utils/element-ui.js +459 -0
- package/src/lib/app-utils/element-ui.js.map +1 -0
- package/src/lib/app-utils/email-starter-policy.d.ts +160 -0
- package/src/lib/app-utils/email-starter-policy.js +327 -0
- package/src/lib/app-utils/email-starter-policy.js.map +1 -0
- package/src/lib/app-utils/email-topics.d.ts +310 -0
- package/src/lib/app-utils/email-topics.js +336 -0
- package/src/lib/app-utils/email-topics.js.map +1 -0
- package/src/lib/app-utils/enabled-plugins-context.d.ts +100 -0
- package/src/lib/app-utils/enabled-plugins-context.js +113 -0
- package/src/lib/app-utils/enabled-plugins-context.js.map +1 -0
- package/src/lib/app-utils/ensure-canvas-root.d.ts +38 -0
- package/src/lib/app-utils/ensure-canvas-root.js +61 -0
- package/src/lib/app-utils/ensure-canvas-root.js.map +1 -0
- package/src/lib/app-utils/entity-picker-context.d.ts +199 -0
- package/src/lib/app-utils/entity-picker-context.js +93 -0
- package/src/lib/app-utils/entity-picker-context.js.map +1 -0
- package/src/lib/app-utils/error-beacon.d.ts +107 -0
- package/src/lib/app-utils/error-beacon.js +296 -0
- package/src/lib/app-utils/error-beacon.js.map +1 -0
- package/src/lib/app-utils/expand-repeatables.d.ts +172 -0
- package/src/lib/app-utils/expand-repeatables.js +299 -0
- package/src/lib/app-utils/expand-repeatables.js.map +1 -0
- package/src/lib/app-utils/foreign-script.d.ts +82 -0
- package/src/lib/app-utils/foreign-script.js +102 -0
- package/src/lib/app-utils/foreign-script.js.map +1 -0
- package/src/lib/app-utils/form-abuse-ceiling.d.ts +146 -0
- package/src/lib/app-utils/form-abuse-ceiling.js +158 -0
- package/src/lib/app-utils/form-abuse-ceiling.js.map +1 -0
- package/src/lib/app-utils/form-contract.d.ts +198 -0
- package/src/lib/app-utils/form-contract.js +282 -0
- package/src/lib/app-utils/form-contract.js.map +1 -0
- package/src/lib/app-utils/form-dataset-binding.d.ts +50 -0
- package/src/lib/app-utils/form-dataset-binding.js +74 -0
- package/src/lib/app-utils/form-dataset-binding.js.map +1 -0
- package/src/lib/app-utils/forms.d.ts +727 -0
- package/src/lib/app-utils/forms.js +777 -0
- package/src/lib/app-utils/forms.js.map +1 -0
- package/src/lib/app-utils/functions.d.ts +188 -0
- package/src/lib/app-utils/functions.js +529 -0
- package/src/lib/app-utils/functions.js.map +1 -0
- package/src/lib/app-utils/guarded-version-save.d.ts +91 -0
- package/src/lib/app-utils/guarded-version-save.js +131 -0
- package/src/lib/app-utils/guarded-version-save.js.map +1 -0
- package/src/lib/app-utils/health-report.d.ts +1766 -0
- package/src/lib/app-utils/health-report.js +2072 -0
- package/src/lib/app-utils/health-report.js.map +1 -0
- package/src/lib/app-utils/host-naming.d.ts +135 -0
- package/src/lib/app-utils/host-naming.js +188 -0
- package/src/lib/app-utils/host-naming.js.map +1 -0
- package/src/lib/app-utils/host-permissions.d.ts +76 -0
- package/src/lib/app-utils/host-permissions.js +119 -0
- package/src/lib/app-utils/host-permissions.js.map +1 -0
- package/src/lib/app-utils/host-tokens.d.ts +228 -0
- package/src/lib/app-utils/host-tokens.js +304 -0
- package/src/lib/app-utils/host-tokens.js.map +1 -0
- package/src/lib/app-utils/idp-profile.d.ts +83 -0
- package/src/lib/app-utils/idp-profile.js +268 -0
- package/src/lib/app-utils/idp-profile.js.map +1 -0
- package/src/lib/app-utils/image-upload-types.d.ts +49 -0
- package/src/lib/app-utils/image-upload-types.js +86 -0
- package/src/lib/app-utils/image-upload-types.js.map +1 -0
- package/src/lib/app-utils/index.d.ts +18 -0
- package/src/lib/app-utils/index.js +23 -0
- package/src/lib/app-utils/index.js.map +1 -0
- package/src/lib/app-utils/internal-traffic.d.ts +197 -0
- package/src/lib/app-utils/internal-traffic.js +288 -0
- package/src/lib/app-utils/internal-traffic.js.map +1 -0
- package/src/lib/app-utils/lineal-order.d.ts +62 -0
- package/src/lib/app-utils/lineal-order.js +65 -0
- package/src/lib/app-utils/lineal-order.js.map +1 -0
- package/src/lib/app-utils/link-references.d.ts +36 -0
- package/src/lib/app-utils/link-references.js +89 -0
- package/src/lib/app-utils/link-references.js.map +1 -0
- package/src/lib/app-utils/link-target-search-context.d.ts +123 -0
- package/src/lib/app-utils/link-target-search-context.js +221 -0
- package/src/lib/app-utils/link-target-search-context.js.map +1 -0
- package/src/lib/app-utils/list-assignment-policy.d.ts +169 -0
- package/src/lib/app-utils/list-assignment-policy.js +170 -0
- package/src/lib/app-utils/list-assignment-policy.js.map +1 -0
- package/src/lib/app-utils/list-import.d.ts +158 -0
- package/src/lib/app-utils/list-import.js +332 -0
- package/src/lib/app-utils/list-import.js.map +1 -0
- package/src/lib/app-utils/llms-txt.d.ts +104 -0
- package/src/lib/app-utils/llms-txt.js +144 -0
- package/src/lib/app-utils/llms-txt.js.map +1 -0
- package/src/lib/app-utils/local-storage-budget.d.ts +75 -0
- package/src/lib/app-utils/local-storage-budget.js +153 -0
- package/src/lib/app-utils/local-storage-budget.js.map +1 -0
- package/src/lib/app-utils/lockdown.d.ts +698 -0
- package/src/lib/app-utils/lockdown.js +929 -0
- package/src/lib/app-utils/lockdown.js.map +1 -0
- package/src/lib/app-utils/margin-utilization.d.ts +267 -0
- package/src/lib/app-utils/margin-utilization.js +351 -0
- package/src/lib/app-utils/margin-utilization.js.map +1 -0
- package/src/lib/app-utils/markdown-lite.d.ts +297 -0
- package/src/lib/app-utils/markdown-lite.js +705 -0
- package/src/lib/app-utils/markdown-lite.js.map +1 -0
- package/src/lib/app-utils/marketing-consent.d.ts +704 -0
- package/src/lib/app-utils/marketing-consent.js +783 -0
- package/src/lib/app-utils/marketing-consent.js.map +1 -0
- package/src/lib/app-utils/marketplace-listing-visibility.d.ts +120 -0
- package/src/lib/app-utils/marketplace-listing-visibility.js +139 -0
- package/src/lib/app-utils/marketplace-listing-visibility.js.map +1 -0
- package/src/lib/app-utils/marketplace-overrides.d.ts +271 -0
- package/src/lib/app-utils/marketplace-overrides.js +462 -0
- package/src/lib/app-utils/marketplace-overrides.js.map +1 -0
- package/src/lib/app-utils/marketplace-provenance.d.ts +150 -0
- package/src/lib/app-utils/marketplace-provenance.js +136 -0
- package/src/lib/app-utils/marketplace-provenance.js.map +1 -0
- package/src/lib/app-utils/marketplace-theme.d.ts +237 -0
- package/src/lib/app-utils/marketplace-theme.js +525 -0
- package/src/lib/app-utils/marketplace-theme.js.map +1 -0
- package/src/lib/app-utils/marketplace-update-state.d.ts +119 -0
- package/src/lib/app-utils/marketplace-update-state.js +132 -0
- package/src/lib/app-utils/marketplace-update-state.js.map +1 -0
- package/src/lib/app-utils/marketplace-verification.d.ts +95 -0
- package/src/lib/app-utils/marketplace-verification.js +81 -0
- package/src/lib/app-utils/marketplace-verification.js.map +1 -0
- package/src/lib/app-utils/measure-node-map.d.ts +76 -0
- package/src/lib/app-utils/measure-node-map.js +111 -0
- package/src/lib/app-utils/measure-node-map.js.map +1 -0
- package/src/lib/app-utils/media-alt.d.ts +55 -0
- package/src/lib/app-utils/media-alt.js +58 -0
- package/src/lib/app-utils/media-alt.js.map +1 -0
- package/src/lib/app-utils/media-asset-facts.d.ts +125 -0
- package/src/lib/app-utils/media-asset-facts.js +467 -0
- package/src/lib/app-utils/media-asset-facts.js.map +1 -0
- package/src/lib/app-utils/media-cdn-scope.d.ts +65 -0
- package/src/lib/app-utils/media-cdn-scope.js +75 -0
- package/src/lib/app-utils/media-cdn-scope.js.map +1 -0
- package/src/lib/app-utils/media-folders.d.ts +161 -0
- package/src/lib/app-utils/media-folders.js +230 -0
- package/src/lib/app-utils/media-folders.js.map +1 -0
- package/src/lib/app-utils/media-metadata.d.ts +277 -0
- package/src/lib/app-utils/media-metadata.js +388 -0
- package/src/lib/app-utils/media-metadata.js.map +1 -0
- package/src/lib/app-utils/media-picker-context.d.ts +93 -0
- package/src/lib/app-utils/media-picker-context.js +26 -0
- package/src/lib/app-utils/media-picker-context.js.map +1 -0
- package/src/lib/app-utils/media-quarantine.d.ts +247 -0
- package/src/lib/app-utils/media-quarantine.js +323 -0
- package/src/lib/app-utils/media-quarantine.js.map +1 -0
- package/src/lib/app-utils/media-ref.d.ts +661 -0
- package/src/lib/app-utils/media-ref.js +1055 -0
- package/src/lib/app-utils/media-ref.js.map +1 -0
- package/src/lib/app-utils/media-takedown-reach.d.ts +126 -0
- package/src/lib/app-utils/media-takedown-reach.js +143 -0
- package/src/lib/app-utils/media-takedown-reach.js.map +1 -0
- package/src/lib/app-utils/member-email-aliases.d.ts +180 -0
- package/src/lib/app-utils/member-email-aliases.js +217 -0
- package/src/lib/app-utils/member-email-aliases.js.map +1 -0
- package/src/lib/app-utils/merge-node-sx.d.ts +47 -0
- package/src/lib/app-utils/merge-node-sx.js +123 -0
- package/src/lib/app-utils/merge-node-sx.js.map +1 -0
- package/src/lib/app-utils/name-match.d.ts +155 -0
- package/src/lib/app-utils/name-match.js +175 -0
- package/src/lib/app-utils/name-match.js.map +1 -0
- package/src/lib/app-utils/name-search.d.ts +117 -0
- package/src/lib/app-utils/name-search.js +145 -0
- package/src/lib/app-utils/name-search.js.map +1 -0
- package/src/lib/app-utils/node-capabilities.d.ts +85 -0
- package/src/lib/app-utils/node-capabilities.js +88 -0
- package/src/lib/app-utils/node-capabilities.js.map +1 -0
- package/src/lib/app-utils/node-definition-sanitizer.d.ts +164 -0
- package/src/lib/app-utils/node-definition-sanitizer.js +402 -0
- package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -0
- package/src/lib/app-utils/node-identity.d.ts +47 -0
- package/src/lib/app-utils/node-identity.js +50 -0
- package/src/lib/app-utils/node-identity.js.map +1 -0
- package/src/lib/app-utils/node-interactions.d.ts +102 -0
- package/src/lib/app-utils/node-interactions.js +192 -0
- package/src/lib/app-utils/node-interactions.js.map +1 -0
- package/src/lib/app-utils/node-url-policy.d.ts +54 -0
- package/src/lib/app-utils/node-url-policy.js +72 -0
- package/src/lib/app-utils/node-url-policy.js.map +1 -0
- package/src/lib/app-utils/notifications.d.ts +71 -0
- package/src/lib/app-utils/notifications.js +101 -0
- package/src/lib/app-utils/notifications.js.map +1 -0
- package/src/lib/app-utils/onboarding-deep-link.d.ts +120 -0
- package/src/lib/app-utils/onboarding-deep-link.js +142 -0
- package/src/lib/app-utils/onboarding-deep-link.js.map +1 -0
- package/src/lib/app-utils/operator-identity.d.ts +207 -0
- package/src/lib/app-utils/operator-identity.js +186 -0
- package/src/lib/app-utils/operator-identity.js.map +1 -0
- package/src/lib/app-utils/org-billing-doc.d.ts +231 -0
- package/src/lib/app-utils/org-billing-doc.js +238 -0
- package/src/lib/app-utils/org-billing-doc.js.map +1 -0
- package/src/lib/app-utils/org-override-reason.d.ts +100 -0
- package/src/lib/app-utils/org-override-reason.js +116 -0
- package/src/lib/app-utils/org-override-reason.js.map +1 -0
- package/src/lib/app-utils/org-permissions.d.ts +194 -0
- package/src/lib/app-utils/org-permissions.js +357 -0
- package/src/lib/app-utils/org-permissions.js.map +1 -0
- package/src/lib/app-utils/org-roles.d.ts +72 -0
- package/src/lib/app-utils/org-roles.js +131 -0
- package/src/lib/app-utils/org-roles.js.map +1 -0
- package/src/lib/app-utils/organizations.d.ts +407 -0
- package/src/lib/app-utils/organizations.js +511 -0
- package/src/lib/app-utils/organizations.js.map +1 -0
- package/src/lib/app-utils/page-header-actions-context.d.ts +83 -0
- package/src/lib/app-utils/page-header-actions-context.js +58 -0
- package/src/lib/app-utils/page-header-actions-context.js.map +1 -0
- package/src/lib/app-utils/page-header-record-context.d.ts +80 -0
- package/src/lib/app-utils/page-header-record-context.js +64 -0
- package/src/lib/app-utils/page-header-record-context.js.map +1 -0
- package/src/lib/app-utils/page-markdown.d.ts +103 -0
- package/src/lib/app-utils/page-markdown.js +385 -0
- package/src/lib/app-utils/page-markdown.js.map +1 -0
- package/src/lib/app-utils/paid-media-source.d.ts +90 -0
- package/src/lib/app-utils/paid-media-source.js +184 -0
- package/src/lib/app-utils/paid-media-source.js.map +1 -0
- package/src/lib/app-utils/palette-sx.d.ts +34 -0
- package/src/lib/app-utils/palette-sx.js +150 -0
- package/src/lib/app-utils/palette-sx.js.map +1 -0
- package/src/lib/app-utils/password-policy.d.ts +47 -0
- package/src/lib/app-utils/password-policy.js +46 -0
- package/src/lib/app-utils/password-policy.js.map +1 -0
- package/src/lib/app-utils/payments-configured.d.ts +84 -0
- package/src/lib/app-utils/payments-configured.js +88 -0
- package/src/lib/app-utils/payments-configured.js.map +1 -0
- package/src/lib/app-utils/person-erasure.d.ts +126 -0
- package/src/lib/app-utils/person-erasure.js +121 -0
- package/src/lib/app-utils/person-erasure.js.map +1 -0
- package/src/lib/app-utils/person-key.d.ts +32 -0
- package/src/lib/app-utils/person-key.js +62 -0
- package/src/lib/app-utils/person-key.js.map +1 -0
- package/src/lib/app-utils/plan-entitlements.d.ts +2756 -0
- package/src/lib/app-utils/plan-entitlements.js +4085 -0
- package/src/lib/app-utils/plan-entitlements.js.map +1 -0
- package/src/lib/app-utils/platform-ad-conversions.d.ts +122 -0
- package/src/lib/app-utils/platform-ad-conversions.js +174 -0
- package/src/lib/app-utils/platform-ad-conversions.js.map +1 -0
- package/src/lib/app-utils/platform-advertising-tags.d.ts +139 -0
- package/src/lib/app-utils/platform-advertising-tags.js +203 -0
- package/src/lib/app-utils/platform-advertising-tags.js.map +1 -0
- package/src/lib/app-utils/platform-brand.d.ts +151 -0
- package/src/lib/app-utils/platform-brand.js +175 -0
- package/src/lib/app-utils/platform-brand.js.map +1 -0
- package/src/lib/app-utils/platform-consent-default.d.ts +142 -0
- package/src/lib/app-utils/platform-consent-default.js +295 -0
- package/src/lib/app-utils/platform-consent-default.js.map +1 -0
- package/src/lib/app-utils/platform-marketing-consent.d.ts +151 -0
- package/src/lib/app-utils/platform-marketing-consent.js +182 -0
- package/src/lib/app-utils/platform-marketing-consent.js.map +1 -0
- package/src/lib/app-utils/platform-marketing-host.d.ts +33 -0
- package/src/lib/app-utils/platform-marketing-host.js +97 -0
- package/src/lib/app-utils/platform-marketing-host.js.map +1 -0
- package/src/lib/app-utils/platform-visitor-consent.d.ts +252 -0
- package/src/lib/app-utils/platform-visitor-consent.js +533 -0
- package/src/lib/app-utils/platform-visitor-consent.js.map +1 -0
- package/src/lib/app-utils/plugin-api-cross-origin.d.ts +61 -0
- package/src/lib/app-utils/plugin-api-cross-origin.js +202 -0
- package/src/lib/app-utils/plugin-api-cross-origin.js.map +1 -0
- package/src/lib/app-utils/plugin-api-rate-limit.d.ts +192 -0
- package/src/lib/app-utils/plugin-api-rate-limit.js +270 -0
- package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -0
- package/src/lib/app-utils/plugin-artifact-path.d.ts +32 -0
- package/src/lib/app-utils/plugin-artifact-path.js +33 -0
- package/src/lib/app-utils/plugin-artifact-path.js.map +1 -0
- package/src/lib/app-utils/plugin-bundle-checks.d.ts +148 -0
- package/src/lib/app-utils/plugin-bundle-checks.js +989 -0
- package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -0
- package/src/lib/app-utils/plugin-manifest.d.ts +516 -0
- package/src/lib/app-utils/plugin-manifest.js +687 -0
- package/src/lib/app-utils/plugin-manifest.js.map +1 -0
- package/src/lib/app-utils/published-legal-pages.d.ts +71 -0
- package/src/lib/app-utils/published-legal-pages.js +90 -0
- package/src/lib/app-utils/published-legal-pages.js.map +1 -0
- package/src/lib/app-utils/publisher-agreement.d.ts +254 -0
- package/src/lib/app-utils/publisher-agreement.js +274 -0
- package/src/lib/app-utils/publisher-agreement.js.map +1 -0
- package/src/lib/app-utils/publisher-attestation.d.ts +99 -0
- package/src/lib/app-utils/publisher-attestation.js +158 -0
- package/src/lib/app-utils/publisher-attestation.js.map +1 -0
- package/src/lib/app-utils/recipient-email-render.d.ts +216 -0
- package/src/lib/app-utils/recipient-email-render.js +221 -0
- package/src/lib/app-utils/recipient-email-render.js.map +1 -0
- package/src/lib/app-utils/redispatch-caught-error.d.ts +38 -0
- package/src/lib/app-utils/redispatch-caught-error.js +46 -0
- package/src/lib/app-utils/redispatch-caught-error.js.map +1 -0
- package/src/lib/app-utils/registering-plugin.d.ts +19 -0
- package/src/lib/app-utils/registering-plugin.js +38 -0
- package/src/lib/app-utils/registering-plugin.js.map +1 -0
- package/src/lib/app-utils/release-flags.d.ts +283 -0
- package/src/lib/app-utils/release-flags.js +518 -0
- package/src/lib/app-utils/release-flags.js.map +1 -0
- package/src/lib/app-utils/repair-canvas-nodes.d.ts +130 -0
- package/src/lib/app-utils/repair-canvas-nodes.js +298 -0
- package/src/lib/app-utils/repair-canvas-nodes.js.map +1 -0
- package/src/lib/app-utils/repeat-infringer.d.ts +166 -0
- package/src/lib/app-utils/repeat-infringer.js +188 -0
- package/src/lib/app-utils/repeat-infringer.js.map +1 -0
- package/src/lib/app-utils/repeat-sources.d.ts +115 -0
- package/src/lib/app-utils/repeat-sources.js +86 -0
- package/src/lib/app-utils/repeat-sources.js.map +1 -0
- package/src/lib/app-utils/request-geo.d.ts +114 -0
- package/src/lib/app-utils/request-geo.js +247 -0
- package/src/lib/app-utils/request-geo.js.map +1 -0
- package/src/lib/app-utils/request-ip.d.ts +213 -0
- package/src/lib/app-utils/request-ip.js +344 -0
- package/src/lib/app-utils/request-ip.js.map +1 -0
- package/src/lib/app-utils/resolve-named-tokens.d.ts +26 -0
- package/src/lib/app-utils/resolve-named-tokens.js +59 -0
- package/src/lib/app-utils/resolve-named-tokens.js.map +1 -0
- package/src/lib/app-utils/responsive-typography-sx.d.ts +77 -0
- package/src/lib/app-utils/responsive-typography-sx.js +122 -0
- package/src/lib/app-utils/responsive-typography-sx.js.map +1 -0
- package/src/lib/app-utils/reusable-component-keys.d.ts +135 -0
- package/src/lib/app-utils/reusable-component-keys.js +140 -0
- package/src/lib/app-utils/reusable-component-keys.js.map +1 -0
- package/src/lib/app-utils/reusable-prop-values.d.ts +199 -0
- package/src/lib/app-utils/reusable-prop-values.js +494 -0
- package/src/lib/app-utils/reusable-prop-values.js.map +1 -0
- package/src/lib/app-utils/safe-json-ld.d.ts +29 -0
- package/src/lib/app-utils/safe-json-ld.js +37 -0
- package/src/lib/app-utils/safe-json-ld.js.map +1 -0
- package/src/lib/app-utils/sanitize-svg.d.ts +55 -0
- package/src/lib/app-utils/sanitize-svg.js +460 -0
- package/src/lib/app-utils/sanitize-svg.js.map +1 -0
- package/src/lib/app-utils/scheme-sx.d.ts +84 -0
- package/src/lib/app-utils/scheme-sx.js +148 -0
- package/src/lib/app-utils/scheme-sx.js.map +1 -0
- package/src/lib/app-utils/scope-tokens.d.ts +249 -0
- package/src/lib/app-utils/scope-tokens.js +331 -0
- package/src/lib/app-utils/scope-tokens.js.map +1 -0
- package/src/lib/app-utils/screen-link-context-value.d.ts +57 -0
- package/src/lib/app-utils/screen-link-context-value.js +43 -0
- package/src/lib/app-utils/screen-link-context-value.js.map +1 -0
- package/src/lib/app-utils/screen-link-context.d.ts +185 -0
- package/src/lib/app-utils/screen-link-context.js +304 -0
- package/src/lib/app-utils/screen-link-context.js.map +1 -0
- package/src/lib/app-utils/screen-link-value.d.ts +269 -0
- package/src/lib/app-utils/screen-link-value.js +384 -0
- package/src/lib/app-utils/screen-link-value.js.map +1 -0
- package/src/lib/app-utils/screen-route.d.ts +669 -0
- package/src/lib/app-utils/screen-route.js +751 -0
- package/src/lib/app-utils/screen-route.js.map +1 -0
- package/src/lib/app-utils/screen-seo-fields.d.ts +37 -0
- package/src/lib/app-utils/screen-seo-fields.js +42 -0
- package/src/lib/app-utils/screen-seo-fields.js.map +1 -0
- package/src/lib/app-utils/search-indexing.d.ts +162 -0
- package/src/lib/app-utils/search-indexing.js +207 -0
- package/src/lib/app-utils/search-indexing.js.map +1 -0
- package/src/lib/app-utils/seo-listing-fields.d.ts +70 -0
- package/src/lib/app-utils/seo-listing-fields.js +75 -0
- package/src/lib/app-utils/seo-listing-fields.js.map +1 -0
- package/src/lib/app-utils/seo-locale.d.ts +119 -0
- package/src/lib/app-utils/seo-locale.js +133 -0
- package/src/lib/app-utils/seo-locale.js.map +1 -0
- package/src/lib/app-utils/seo-title-variables.d.ts +149 -0
- package/src/lib/app-utils/seo-title-variables.js +190 -0
- package/src/lib/app-utils/seo-title-variables.js.map +1 -0
- package/src/lib/app-utils/seo-title.d.ts +70 -0
- package/src/lib/app-utils/seo-title.js +117 -0
- package/src/lib/app-utils/seo-title.js.map +1 -0
- package/src/lib/app-utils/server.d.ts +174 -0
- package/src/lib/app-utils/server.js +314 -0
- package/src/lib/app-utils/server.js.map +1 -0
- package/src/lib/app-utils/site-context.d.ts +106 -0
- package/src/lib/app-utils/site-context.js +100 -0
- package/src/lib/app-utils/site-context.js.map +1 -0
- package/src/lib/app-utils/sitemap.d.ts +117 -0
- package/src/lib/app-utils/sitemap.js +183 -0
- package/src/lib/app-utils/sitemap.js.map +1 -0
- package/src/lib/app-utils/social-image.d.ts +112 -0
- package/src/lib/app-utils/social-image.js +191 -0
- package/src/lib/app-utils/social-image.js.map +1 -0
- package/src/lib/app-utils/starter-templates.d.ts +99 -0
- package/src/lib/app-utils/starter-templates.js +579 -0
- package/src/lib/app-utils/starter-templates.js.map +1 -0
- package/src/lib/app-utils/stored-nodes.d.ts +120 -0
- package/src/lib/app-utils/stored-nodes.js +174 -0
- package/src/lib/app-utils/stored-nodes.js.map +1 -0
- package/src/lib/app-utils/strip-undefined.d.ts +59 -0
- package/src/lib/app-utils/strip-undefined.js +95 -0
- package/src/lib/app-utils/strip-undefined.js.map +1 -0
- package/src/lib/app-utils/stripe-deployment-mode.d.ts +47 -0
- package/src/lib/app-utils/stripe-deployment-mode.js +70 -0
- package/src/lib/app-utils/stripe-deployment-mode.js.map +1 -0
- package/src/lib/app-utils/support-tiers.d.ts +108 -0
- package/src/lib/app-utils/support-tiers.js +201 -0
- package/src/lib/app-utils/support-tiers.js.map +1 -0
- package/src/lib/app-utils/timezone-geo-hint.d.ts +36 -0
- package/src/lib/app-utils/timezone-geo-hint.js +180 -0
- package/src/lib/app-utils/timezone-geo-hint.js.map +1 -0
- package/src/lib/app-utils/upload-cors.d.ts +155 -0
- package/src/lib/app-utils/upload-cors.js +254 -0
- package/src/lib/app-utils/upload-cors.js.map +1 -0
- package/src/lib/app-utils/upload-inspection.d.ts +159 -0
- package/src/lib/app-utils/upload-inspection.js +539 -0
- package/src/lib/app-utils/upload-inspection.js.map +1 -0
- package/src/lib/app-utils/url-slug.d.ts +40 -0
- package/src/lib/app-utils/url-slug.js +42 -0
- package/src/lib/app-utils/url-slug.js.map +1 -0
- package/src/lib/app-utils/usage-budget.d.ts +429 -0
- package/src/lib/app-utils/usage-budget.js +421 -0
- package/src/lib/app-utils/usage-budget.js.map +1 -0
- package/src/lib/app-utils/variables.d.ts +96 -0
- package/src/lib/app-utils/variables.js +233 -0
- package/src/lib/app-utils/variables.js.map +1 -0
- package/src/lib/app-utils/video-asset-facts.d.ts +61 -0
- package/src/lib/app-utils/video-asset-facts.js +70 -0
- package/src/lib/app-utils/video-asset-facts.js.map +1 -0
- package/src/lib/app-utils/video-object.d.ts +89 -0
- package/src/lib/app-utils/video-object.js +245 -0
- package/src/lib/app-utils/video-object.js.map +1 -0
- package/src/lib/app-utils/visitor-consent.d.ts +757 -0
- package/src/lib/app-utils/visitor-consent.js +981 -0
- package/src/lib/app-utils/visitor-consent.js.map +1 -0
- package/src/lib/app-utils/visitor-record-ceiling.d.ts +223 -0
- package/src/lib/app-utils/visitor-record-ceiling.js +215 -0
- package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -0
- package/src/lib/app-utils/web-vitals-rum.d.ts +53 -0
- package/src/lib/app-utils/web-vitals-rum.js +278 -0
- package/src/lib/app-utils/web-vitals-rum.js.map +1 -0
- package/src/lib/app-utils/webhook-delivery.d.ts +324 -0
- package/src/lib/app-utils/webhook-delivery.js +413 -0
- package/src/lib/app-utils/webhook-delivery.js.map +1 -0
- package/src/lib/app-utils/where-used.d.ts +57 -0
- package/src/lib/app-utils/where-used.js +59 -0
- package/src/lib/app-utils/where-used.js.map +1 -0
- package/src/lib/app-utils/wistia-embed.d.ts +86 -0
- package/src/lib/app-utils/wistia-embed.js +119 -0
- package/src/lib/app-utils/wistia-embed.js.map +1 -0
- package/src/lib/app-utils/workflows.d.ts +136 -0
- package/src/lib/app-utils/workflows.js +346 -0
- package/src/lib/app-utils/workflows.js.map +1 -0
- package/src/lib/canvas-manager/canvas-manager-tree.d.ts +109 -0
- package/src/lib/canvas-manager/canvas-manager-tree.js +139 -0
- package/src/lib/canvas-manager/canvas-manager-tree.js.map +1 -0
- package/src/lib/canvas-manager/canvas-manager.d.ts +549 -0
- package/src/lib/canvas-manager/canvas-manager.js +1311 -0
- package/src/lib/canvas-manager/canvas-manager.js.map +1 -0
- package/src/lib/canvas-manager/index.d.ts +20 -0
- package/src/lib/canvas-manager/index.js +21 -0
- package/src/lib/canvas-manager/index.js.map +1 -0
- package/src/lib/canvas-manager/stores/index.d.ts +17 -0
- package/src/lib/canvas-manager/stores/index.js +18 -0
- package/src/lib/canvas-manager/stores/index.js.map +1 -0
- package/src/lib/canvas-manager/stores/node.store.d.ts +30 -0
- package/src/lib/canvas-manager/stores/node.store.js +45 -0
- package/src/lib/canvas-manager/stores/node.store.js.map +1 -0
- package/src/lib/components-manager/components-manager.d.ts +56 -0
- package/src/lib/components-manager/components-manager.js +191 -0
- package/src/lib/components-manager/components-manager.js.map +1 -0
- package/src/lib/components-manager/index.d.ts +18 -0
- package/src/lib/components-manager/index.js +19 -0
- package/src/lib/components-manager/index.js.map +1 -0
- package/src/lib/emit-manager/emit-manager.d.ts +56 -0
- package/src/lib/emit-manager/emit-manager.js +60 -0
- package/src/lib/emit-manager/emit-manager.js.map +1 -0
- package/src/lib/emit-manager/index.d.ts +18 -0
- package/src/lib/emit-manager/index.js +19 -0
- package/src/lib/emit-manager/index.js.map +1 -0
- package/src/lib/foundation/constants/_internal.d.ts +18 -0
- package/src/lib/foundation/constants/_internal.js +62 -0
- package/src/lib/foundation/constants/_internal.js.map +1 -0
- package/src/lib/foundation/constants/app.d.ts +23 -0
- package/src/lib/foundation/constants/app.js +25 -0
- package/src/lib/foundation/constants/app.js.map +1 -0
- package/src/lib/foundation/constants/canvas.d.ts +18 -0
- package/src/lib/foundation/constants/canvas.js +18 -0
- package/src/lib/foundation/constants/canvas.js.map +1 -0
- package/src/lib/foundation/constants/components.d.ts +54 -0
- package/src/lib/foundation/constants/components.js +61 -0
- package/src/lib/foundation/constants/components.js.map +1 -0
- package/src/lib/foundation/constants/shared.d.ts +50 -0
- package/src/lib/foundation/constants/shared.js +49 -0
- package/src/lib/foundation/constants/shared.js.map +1 -0
- package/src/lib/foundation/constants/symbol.d.ts +63 -0
- package/src/lib/foundation/constants/symbol.js +75 -0
- package/src/lib/foundation/constants/symbol.js.map +1 -0
- package/src/lib/foundation/definitions/components.types.d.ts +372 -0
- package/src/lib/foundation/definitions/components.types.js +180 -0
- package/src/lib/foundation/definitions/components.types.js.map +1 -0
- package/src/lib/foundation/definitions/contact.types.d.ts +73 -0
- package/src/lib/foundation/definitions/contact.types.js +107 -0
- package/src/lib/foundation/definitions/contact.types.js.map +1 -0
- package/src/lib/foundation/definitions/host-content-collections.d.ts +137 -0
- package/src/lib/foundation/definitions/host-content-collections.js +219 -0
- package/src/lib/foundation/definitions/host-content-collections.js.map +1 -0
- package/src/lib/foundation/definitions/org-billing.types.d.ts +1361 -0
- package/src/lib/foundation/definitions/org-billing.types.js +77 -0
- package/src/lib/foundation/definitions/org-billing.types.js.map +1 -0
- package/src/lib/foundation/definitions/organization.types.d.ts +307 -0
- package/src/lib/foundation/definitions/organization.types.js +42 -0
- package/src/lib/foundation/definitions/organization.types.js.map +1 -0
- package/src/lib/foundation/definitions/platform.types.d.ts +1326 -0
- package/src/lib/foundation/definitions/platform.types.js +124 -0
- package/src/lib/foundation/definitions/platform.types.js.map +1 -0
- package/src/lib/foundation/definitions/property-kinds.d.ts +189 -0
- package/src/lib/foundation/definitions/property-kinds.js +565 -0
- package/src/lib/foundation/definitions/property-kinds.js.map +1 -0
- package/src/lib/foundation/definitions/shared.d.ts +23 -0
- package/src/lib/foundation/definitions/shared.js +18 -0
- package/src/lib/foundation/definitions/shared.js.map +1 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +249 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js +499 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -0
- package/src/lib/foundation/index.d.ts +32 -0
- package/src/lib/foundation/index.js +67 -0
- package/src/lib/foundation/index.js.map +1 -0
- package/src/lib/lifecycle.d.ts +24 -0
- package/src/lib/lifecycle.js +39 -0
- package/src/lib/lifecycle.js.map +1 -0
- package/src/lib/mst/common.d.ts +17 -0
- package/src/lib/mst/common.js +23 -0
- package/src/lib/mst/common.js.map +1 -0
- package/src/lib/mst/index.d.ts +19 -0
- package/src/lib/mst/index.js +20 -0
- package/src/lib/mst/index.js.map +1 -0
- package/src/lib/mst/json.d.ts +22 -0
- package/src/lib/mst/json.js +23 -0
- package/src/lib/mst/json.js.map +1 -0
- package/src/lib/mst/types.d.ts +20 -0
- package/src/lib/mst/types.js +18 -0
- package/src/lib/mst/types.js.map +1 -0
- package/src/lib/plugin-manager/billing-webhook-hooks.d.ts +77 -0
- package/src/lib/plugin-manager/billing-webhook-hooks.js +55 -0
- package/src/lib/plugin-manager/billing-webhook-hooks.js.map +1 -0
- package/src/lib/plugin-manager/commerce-zone-props.d.ts +172 -0
- package/src/lib/plugin-manager/commerce-zone-props.js +31 -0
- package/src/lib/plugin-manager/commerce-zone-props.js.map +1 -0
- package/src/lib/plugin-manager/custom-fields.d.ts +60 -0
- package/src/lib/plugin-manager/custom-fields.js +39 -0
- package/src/lib/plugin-manager/custom-fields.js.map +1 -0
- package/src/lib/plugin-manager/editor-sessions.d.ts +109 -0
- package/src/lib/plugin-manager/editor-sessions.js +137 -0
- package/src/lib/plugin-manager/editor-sessions.js.map +1 -0
- package/src/lib/plugin-manager/enabled-plugins.d.ts +438 -0
- package/src/lib/plugin-manager/enabled-plugins.js +403 -0
- package/src/lib/plugin-manager/enabled-plugins.js.map +1 -0
- package/src/lib/plugin-manager/feature-plugins.d.ts +1314 -0
- package/src/lib/plugin-manager/feature-plugins.js +609 -0
- package/src/lib/plugin-manager/feature-plugins.js.map +1 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +11 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js +149 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -0
- package/src/lib/plugin-manager/index.d.ts +42 -0
- package/src/lib/plugin-manager/index.js +46 -0
- package/src/lib/plugin-manager/index.js.map +1 -0
- package/src/lib/plugin-manager/install-presets.d.ts +93 -0
- package/src/lib/plugin-manager/install-presets.js +86 -0
- package/src/lib/plugin-manager/install-presets.js.map +1 -0
- package/src/lib/plugin-manager/media-delivery-provider.d.ts +124 -0
- package/src/lib/plugin-manager/media-delivery-provider.js +53 -0
- package/src/lib/plugin-manager/media-delivery-provider.js.map +1 -0
- package/src/lib/plugin-manager/order-fulfilment.d.ts +142 -0
- package/src/lib/plugin-manager/order-fulfilment.js +104 -0
- package/src/lib/plugin-manager/order-fulfilment.js.map +1 -0
- package/src/lib/plugin-manager/plugin-activity-actions.d.ts +122 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js +140 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -0
- package/src/lib/plugin-manager/plugin-bridge.d.ts +98 -0
- package/src/lib/plugin-manager/plugin-bridge.js +154 -0
- package/src/lib/plugin-manager/plugin-bridge.js.map +1 -0
- package/src/lib/plugin-manager/plugin-config.d.ts +148 -0
- package/src/lib/plugin-manager/plugin-config.js +228 -0
- package/src/lib/plugin-manager/plugin-config.js.map +1 -0
- package/src/lib/plugin-manager/plugin-console-crons.d.ts +139 -0
- package/src/lib/plugin-manager/plugin-console-crons.js +177 -0
- package/src/lib/plugin-manager/plugin-console-crons.js.map +1 -0
- package/src/lib/plugin-manager/plugin-contact-capture.d.ts +220 -0
- package/src/lib/plugin-manager/plugin-contact-capture.js +89 -0
- package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -0
- package/src/lib/plugin-manager/plugin-contributions.d.ts +244 -0
- package/src/lib/plugin-manager/plugin-contributions.js +283 -0
- package/src/lib/plugin-manager/plugin-contributions.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entitlement-keys.d.ts +169 -0
- package/src/lib/plugin-manager/plugin-entitlement-keys.js +84 -0
- package/src/lib/plugin-manager/plugin-entitlement-keys.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entitlements.d.ts +181 -0
- package/src/lib/plugin-manager/plugin-entitlements.js +188 -0
- package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -0
- package/src/lib/plugin-manager/plugin-events.d.ts +145 -0
- package/src/lib/plugin-manager/plugin-events.js +79 -0
- package/src/lib/plugin-manager/plugin-events.js.map +1 -0
- package/src/lib/plugin-manager/plugin-figures.d.ts +251 -0
- package/src/lib/plugin-manager/plugin-figures.js +252 -0
- package/src/lib/plugin-manager/plugin-figures.js.map +1 -0
- package/src/lib/plugin-manager/plugin-host-collections.d.ts +146 -0
- package/src/lib/plugin-manager/plugin-host-collections.js +116 -0
- package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -0
- package/src/lib/plugin-manager/plugin-jobs.d.ts +130 -0
- package/src/lib/plugin-manager/plugin-jobs.js +182 -0
- package/src/lib/plugin-manager/plugin-jobs.js.map +1 -0
- package/src/lib/plugin-manager/plugin-loader.d.ts +86 -0
- package/src/lib/plugin-manager/plugin-loader.js +223 -0
- package/src/lib/plugin-manager/plugin-loader.js.map +1 -0
- package/src/lib/plugin-manager/plugin-manager.d.ts +95 -0
- package/src/lib/plugin-manager/plugin-manager.js +343 -0
- package/src/lib/plugin-manager/plugin-manager.js.map +1 -0
- package/src/lib/plugin-manager/plugin-metered-lines.d.ts +97 -0
- package/src/lib/plugin-manager/plugin-metered-lines.js +123 -0
- package/src/lib/plugin-manager/plugin-metered-lines.js.map +1 -0
- package/src/lib/plugin-manager/plugin-org-erasure.d.ts +52 -0
- package/src/lib/plugin-manager/plugin-org-erasure.js +100 -0
- package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -0
- package/src/lib/plugin-manager/plugin-permissions.d.ts +69 -0
- package/src/lib/plugin-manager/plugin-permissions.js +77 -0
- package/src/lib/plugin-manager/plugin-permissions.js.map +1 -0
- package/src/lib/plugin-manager/plugin-person-erasure.d.ts +58 -0
- package/src/lib/plugin-manager/plugin-person-erasure.js +109 -0
- package/src/lib/plugin-manager/plugin-person-erasure.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-cards.d.ts +99 -0
- package/src/lib/plugin-manager/plugin-record-cards.js +59 -0
- package/src/lib/plugin-manager/plugin-record-cards.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-facts.d.ts +111 -0
- package/src/lib/plugin-manager/plugin-record-facts.js +51 -0
- package/src/lib/plugin-manager/plugin-record-facts.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-routes.d.ts +129 -0
- package/src/lib/plugin-manager/plugin-record-routes.js +93 -0
- package/src/lib/plugin-manager/plugin-record-routes.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-timeline.d.ts +147 -0
- package/src/lib/plugin-manager/plugin-record-timeline.js +39 -0
- package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -0
- package/src/lib/plugin-manager/plugin-resource-drafts.d.ts +137 -0
- package/src/lib/plugin-manager/plugin-resource-drafts.js +51 -0
- package/src/lib/plugin-manager/plugin-resource-drafts.js.map +1 -0
- package/src/lib/plugin-manager/plugin-services.d.ts +94 -0
- package/src/lib/plugin-manager/plugin-services.js +153 -0
- package/src/lib/plugin-manager/plugin-services.js.map +1 -0
- package/src/lib/plugin-manager/plugin-styles-ui.d.ts +71 -0
- package/src/lib/plugin-manager/plugin-styles-ui.js +80 -0
- package/src/lib/plugin-manager/plugin-styles-ui.js.map +1 -0
- package/src/lib/plugin-manager/plugin-styles.d.ts +176 -0
- package/src/lib/plugin-manager/plugin-styles.js +186 -0
- package/src/lib/plugin-manager/plugin-styles.js.map +1 -0
- package/src/lib/plugin-manager/plugin-subprocessors.d.ts +135 -0
- package/src/lib/plugin-manager/plugin-subprocessors.js +129 -0
- package/src/lib/plugin-manager/plugin-subprocessors.js.map +1 -0
- package/src/lib/plugin-manager/plugin-tax-profile.d.ts +84 -0
- package/src/lib/plugin-manager/plugin-tax-profile.js +39 -0
- package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -0
- package/src/lib/plugin-manager/plugin-user-erasure.d.ts +53 -0
- package/src/lib/plugin-manager/plugin-user-erasure.js +84 -0
- package/src/lib/plugin-manager/plugin-user-erasure.js.map +1 -0
- package/src/lib/plugin-manager/plugin-zones.d.ts +121 -0
- package/src/lib/plugin-manager/plugin-zones.js +74 -0
- package/src/lib/plugin-manager/plugin-zones.js.map +1 -0
- package/src/lib/plugin-manager/realm-plugins.d.ts +112 -0
- package/src/lib/plugin-manager/realm-plugins.js +196 -0
- package/src/lib/plugin-manager/realm-plugins.js.map +1 -0
- package/src/lib/plugin-manager/realm-server.d.ts +54 -0
- package/src/lib/plugin-manager/realm-server.js +88 -0
- package/src/lib/plugin-manager/realm-server.js.map +1 -0
- package/src/lib/plugin-manager/record-zone-props.d.ts +126 -0
- package/src/lib/plugin-manager/record-zone-props.js +31 -0
- package/src/lib/plugin-manager/record-zone-props.js.map +1 -0
- package/src/lib/plugin-manager/site-page-hooks.d.ts +102 -0
- package/src/lib/plugin-manager/site-page-hooks.js +114 -0
- package/src/lib/plugin-manager/site-page-hooks.js.map +1 -0
- package/src/lib/plugin-manager/site-runtime.d.ts +57 -0
- package/src/lib/plugin-manager/site-runtime.js +25 -0
- package/src/lib/plugin-manager/site-runtime.js.map +1 -0
- package/src/lib/plugin-manager/usage-alert-contributors.d.ts +115 -0
- package/src/lib/plugin-manager/usage-alert-contributors.js +106 -0
- package/src/lib/plugin-manager/usage-alert-contributors.js.map +1 -0
- package/src/lib/types/ast.d.ts +199 -0
- package/src/lib/types/ast.js +20 -0
- package/src/lib/types/ast.js.map +1 -0
- package/src/lib/types/index.d.ts +20 -0
- package/src/lib/types/index.js +21 -0
- package/src/lib/types/index.js.map +1 -0
- package/src/lib/types/nodes.d.ts +608 -0
- package/src/lib/types/nodes.js +28 -0
- package/src/lib/types/nodes.js.map +1 -0
- package/src/lib/types/routing.d.ts +17 -0
- package/src/lib/types/routing.js +18 -0
- package/src/lib/types/routing.js.map +1 -0
- package/src/lib/types/screen.d.ts +23 -0
- package/src/lib/types/screen.js +18 -0
- package/src/lib/types/screen.js.map +1 -0
- package/src/lib/utils.d.ts +25 -0
- package/src/lib/utils.js +42 -0
- package/src/lib/utils.js.map +1 -0
- package/src/server.d.ts +37 -0
- package/src/server.js +55 -0
- package/src/server.js.map +1 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
type Nodes = Record<string, any>;
|
|
18
|
+
/** What was wrong with one node, and what was done about it. */
|
|
19
|
+
export interface CanvasRepairFinding {
|
|
20
|
+
/** The node the finding is about — a map key, or an id listed on a parent. */
|
|
21
|
+
nodeId: string;
|
|
22
|
+
/** Best available human label: the node's name, else its componentId. */
|
|
23
|
+
label?: string;
|
|
24
|
+
kind: 'not-a-node' | 'no-component' | 'unknown-component' | 'dangling-child' | 'orphaned' | 'cycle' | 'unreachable' | 'unlisted';
|
|
25
|
+
action: 'removed' | 'reparented' | 'relisted' | 'unlinked';
|
|
26
|
+
/** One sentence an author can read, written for the preview dialog. */
|
|
27
|
+
detail: string;
|
|
28
|
+
}
|
|
29
|
+
export interface CanvasRepairResult {
|
|
30
|
+
/** The repaired map. Reference-equal to nothing — always a fresh object. */
|
|
31
|
+
nodes: Nodes;
|
|
32
|
+
findings: CanvasRepairFinding[];
|
|
33
|
+
/** Node ids dropped from the document. */
|
|
34
|
+
removed: string[];
|
|
35
|
+
/** Node ids that kept their content but moved. */
|
|
36
|
+
reparented: string[];
|
|
37
|
+
/** How many nodes the repair KEPT, root excluded. */
|
|
38
|
+
kept: number;
|
|
39
|
+
/** True when the document was already sound and `nodes` is unchanged. */
|
|
40
|
+
healthy: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface CanvasRepairOptions {
|
|
43
|
+
/**
|
|
44
|
+
* Whether a `componentId` still resolves to a registered component.
|
|
45
|
+
*
|
|
46
|
+
* OPTIONAL on purpose, and skipped entirely when absent. A resolver that
|
|
47
|
+
* has not finished loading its plugins answers "no" for everything, and a
|
|
48
|
+
* repair that believes it would delete the whole document — the same shape
|
|
49
|
+
* of mistake as a stubbed resolver making every capacity ceiling read zero.
|
|
50
|
+
* Pass it only from a caller that knows the registry is populated.
|
|
51
|
+
*/
|
|
52
|
+
isKnownComponent?: (componentId: string) => boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Strip what a canvas cannot render, keep everything that still works
|
|
56
|
+
* (AGL-2555).
|
|
57
|
+
*
|
|
58
|
+
* ## Why this exists rather than "clear and start again"
|
|
59
|
+
*
|
|
60
|
+
* A besigner document corrupted while `/alternatives/webflow` was being
|
|
61
|
+
* built: the hierarchy rendered literal `'Invalid node'` rows, section order
|
|
62
|
+
* scrambled, two component instances stopped resolving — and the damage
|
|
63
|
+
* survived a reload, so it was persisted in the draft rather than client
|
|
64
|
+
* state. **Most of the document was still fine.** The prose, the FAQ
|
|
65
|
+
* accordions and the layout binding all rendered correctly. Only some nodes
|
|
66
|
+
* were broken, and the only way out of it was to delete the screen and
|
|
67
|
+
* rebuild every one of them.
|
|
68
|
+
*
|
|
69
|
+
* That is the whole case: an author in this position should lose the handful
|
|
70
|
+
* of nodes that are actually broken, not the hours of work around them.
|
|
71
|
+
*
|
|
72
|
+
* ## What counts as broken
|
|
73
|
+
*
|
|
74
|
+
* Every case here is one the canvas already fails on somewhere, not a rule
|
|
75
|
+
* invented for this function:
|
|
76
|
+
*
|
|
77
|
+
* - **not-a-node** — `canvas-manager` throws `Invalid node` on a null or
|
|
78
|
+
* non-object entry.
|
|
79
|
+
* - **no-component** / **unknown-component** — nothing to render. The second
|
|
80
|
+
* is only checked when the caller supplies a resolver it trusts.
|
|
81
|
+
* - **dangling-child** — an id listed on a parent that the map does not
|
|
82
|
+
* hold. This is the one that renders `'Invalid node'`: `node-tree-view`
|
|
83
|
+
* maps over the parent's child ids and prints that string for every id
|
|
84
|
+
* that resolves to nothing. The PARENT is fine; the stale id is dropped.
|
|
85
|
+
* - **orphaned** — `parentId` names a node that is not in the map. Adopted
|
|
86
|
+
* by the root, which is the rule `ensureCanvasRoot` already established:
|
|
87
|
+
* recovering into an editable document beats discarding what is there.
|
|
88
|
+
* - **cycle** — a node that is its own ancestor. Walking `parent` upward is
|
|
89
|
+
* what the hierarchy and the breadcrumb both do, so a loop does not
|
|
90
|
+
* degrade the UI, it hangs the tab. A stored root that is its own parent
|
|
91
|
+
* is the shape this was measured in.
|
|
92
|
+
* - **unreachable** — in the map, but no walk from the root reaches it.
|
|
93
|
+
* These are invisible and still saved, still shipped, still counted
|
|
94
|
+
* against the 1 MiB ceiling — AGL-1363 found 61 of them on `/product`,
|
|
95
|
+
* 26 carrying the only copy of two Hero sections' text. So they are
|
|
96
|
+
* RE-PARENTED, never dropped: an author can see and delete a node that is
|
|
97
|
+
* on the canvas, and cannot do either to one that is not.
|
|
98
|
+
* - **unlisted** — `parentId` agrees, the parent's child list does not. The
|
|
99
|
+
* node is relisted rather than moved.
|
|
100
|
+
*
|
|
101
|
+
* ## What it will not do
|
|
102
|
+
*
|
|
103
|
+
* It removes nodes only for the first three, and every removal takes the
|
|
104
|
+
* subtree hanging off it — a child of an unrenderable node has nowhere to
|
|
105
|
+
* be. Everything else is a link repair that keeps the content, because a
|
|
106
|
+
* repair tool that deletes more than it has to is the corruption with
|
|
107
|
+
* better manners.
|
|
108
|
+
*
|
|
109
|
+
* ⚠️ Not an auto-heal. The result carries a full account of what it would
|
|
110
|
+
* do so a caller can put it in front of the author BEFORE anything is
|
|
111
|
+
* applied; a quiet repair that removes content is worse than the damage.
|
|
112
|
+
*/
|
|
113
|
+
export declare function repairCanvasNodes(nodes: Nodes | undefined, options?: CanvasRepairOptions): CanvasRepairResult;
|
|
114
|
+
/**
|
|
115
|
+
* The document a newly created screen has: a root with nothing in it
|
|
116
|
+
* (AGL-2554).
|
|
117
|
+
*
|
|
118
|
+
* Built from `repairCanvasNodes` rather than `{}` so it works on the
|
|
119
|
+
* document that needs it most. Clearing is wanted precisely when the tree
|
|
120
|
+
* holds nodes the hierarchy cannot render — those rows are not selectable,
|
|
121
|
+
* so `Delete Element` cannot reach them and there is no click-path to empty
|
|
122
|
+
* the document at all. Running the repair first means the root that survives
|
|
123
|
+
* is a sound one whatever shape the map was in, including no root at all.
|
|
124
|
+
*
|
|
125
|
+
* The root's own fields are kept. It carries the document's own styling —
|
|
126
|
+
* background, padding, the page's own `sx` — and an author asking for a
|
|
127
|
+
* blank canvas is asking to remove the CONTENT, not to reset the page.
|
|
128
|
+
*/
|
|
129
|
+
export declare function clearCanvasNodes(nodes: Nodes | undefined): Nodes;
|
|
130
|
+
export default repairCanvasNodes;
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { CANVAS_ROOT_ELEMENT_ID } from "../foundation/constants/canvas.js";
|
|
18
|
+
import { ensureCanvasRoot } from "./ensure-canvas-root.js";
|
|
19
|
+
function labelOf(node) {
|
|
20
|
+
if (!node || typeof node !== 'object') return undefined;
|
|
21
|
+
const name = typeof node.name === 'string' ? node.name.trim() : '';
|
|
22
|
+
if (name) return name;
|
|
23
|
+
return typeof node.componentId === 'string' ? node.componentId : undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Strip what a canvas cannot render, keep everything that still works
|
|
27
|
+
* (AGL-2555).
|
|
28
|
+
*
|
|
29
|
+
* ## Why this exists rather than "clear and start again"
|
|
30
|
+
*
|
|
31
|
+
* A besigner document corrupted while `/alternatives/webflow` was being
|
|
32
|
+
* built: the hierarchy rendered literal `'Invalid node'` rows, section order
|
|
33
|
+
* scrambled, two component instances stopped resolving — and the damage
|
|
34
|
+
* survived a reload, so it was persisted in the draft rather than client
|
|
35
|
+
* state. **Most of the document was still fine.** The prose, the FAQ
|
|
36
|
+
* accordions and the layout binding all rendered correctly. Only some nodes
|
|
37
|
+
* were broken, and the only way out of it was to delete the screen and
|
|
38
|
+
* rebuild every one of them.
|
|
39
|
+
*
|
|
40
|
+
* That is the whole case: an author in this position should lose the handful
|
|
41
|
+
* of nodes that are actually broken, not the hours of work around them.
|
|
42
|
+
*
|
|
43
|
+
* ## What counts as broken
|
|
44
|
+
*
|
|
45
|
+
* Every case here is one the canvas already fails on somewhere, not a rule
|
|
46
|
+
* invented for this function:
|
|
47
|
+
*
|
|
48
|
+
* - **not-a-node** — `canvas-manager` throws `Invalid node` on a null or
|
|
49
|
+
* non-object entry.
|
|
50
|
+
* - **no-component** / **unknown-component** — nothing to render. The second
|
|
51
|
+
* is only checked when the caller supplies a resolver it trusts.
|
|
52
|
+
* - **dangling-child** — an id listed on a parent that the map does not
|
|
53
|
+
* hold. This is the one that renders `'Invalid node'`: `node-tree-view`
|
|
54
|
+
* maps over the parent's child ids and prints that string for every id
|
|
55
|
+
* that resolves to nothing. The PARENT is fine; the stale id is dropped.
|
|
56
|
+
* - **orphaned** — `parentId` names a node that is not in the map. Adopted
|
|
57
|
+
* by the root, which is the rule `ensureCanvasRoot` already established:
|
|
58
|
+
* recovering into an editable document beats discarding what is there.
|
|
59
|
+
* - **cycle** — a node that is its own ancestor. Walking `parent` upward is
|
|
60
|
+
* what the hierarchy and the breadcrumb both do, so a loop does not
|
|
61
|
+
* degrade the UI, it hangs the tab. A stored root that is its own parent
|
|
62
|
+
* is the shape this was measured in.
|
|
63
|
+
* - **unreachable** — in the map, but no walk from the root reaches it.
|
|
64
|
+
* These are invisible and still saved, still shipped, still counted
|
|
65
|
+
* against the 1 MiB ceiling — AGL-1363 found 61 of them on `/product`,
|
|
66
|
+
* 26 carrying the only copy of two Hero sections' text. So they are
|
|
67
|
+
* RE-PARENTED, never dropped: an author can see and delete a node that is
|
|
68
|
+
* on the canvas, and cannot do either to one that is not.
|
|
69
|
+
* - **unlisted** — `parentId` agrees, the parent's child list does not. The
|
|
70
|
+
* node is relisted rather than moved.
|
|
71
|
+
*
|
|
72
|
+
* ## What it will not do
|
|
73
|
+
*
|
|
74
|
+
* It removes nodes only for the first three, and every removal takes the
|
|
75
|
+
* subtree hanging off it — a child of an unrenderable node has nowhere to
|
|
76
|
+
* be. Everything else is a link repair that keeps the content, because a
|
|
77
|
+
* repair tool that deletes more than it has to is the corruption with
|
|
78
|
+
* better manners.
|
|
79
|
+
*
|
|
80
|
+
* ⚠️ Not an auto-heal. The result carries a full account of what it would
|
|
81
|
+
* do so a caller can put it in front of the author BEFORE anything is
|
|
82
|
+
* applied; a quiet repair that removes content is worse than the damage.
|
|
83
|
+
*/ export function repairCanvasNodes(nodes, options = {}) {
|
|
84
|
+
const { isKnownComponent } = options;
|
|
85
|
+
// A rootless map is its own defect, and it has an owner already. Doing it
|
|
86
|
+
// first means every walk below has a root to start from.
|
|
87
|
+
const source = ensureCanvasRoot(nodes);
|
|
88
|
+
const findings = [];
|
|
89
|
+
const removed = [];
|
|
90
|
+
const reparented = [];
|
|
91
|
+
// ── 1. Entries that are not renderable nodes ────────────────────────────
|
|
92
|
+
const map = {};
|
|
93
|
+
for (const [id, node] of Object.entries(source)){
|
|
94
|
+
if (!node || typeof node !== 'object') {
|
|
95
|
+
removed.push(id);
|
|
96
|
+
findings.push({
|
|
97
|
+
nodeId: id,
|
|
98
|
+
kind: 'not-a-node',
|
|
99
|
+
action: 'removed',
|
|
100
|
+
detail: 'Not an element — the canvas cannot render this entry.'
|
|
101
|
+
});
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (id !== CANVAS_ROOT_ELEMENT_ID) {
|
|
105
|
+
const componentId = node.componentId;
|
|
106
|
+
if (typeof componentId !== 'string' || !componentId) {
|
|
107
|
+
removed.push(id);
|
|
108
|
+
findings.push({
|
|
109
|
+
nodeId: id,
|
|
110
|
+
label: labelOf(node),
|
|
111
|
+
kind: 'no-component',
|
|
112
|
+
action: 'removed',
|
|
113
|
+
detail: 'No element type — there is nothing to draw.'
|
|
114
|
+
});
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (isKnownComponent && !isKnownComponent(componentId)) {
|
|
118
|
+
removed.push(id);
|
|
119
|
+
findings.push({
|
|
120
|
+
nodeId: id,
|
|
121
|
+
label: labelOf(node),
|
|
122
|
+
kind: 'unknown-component',
|
|
123
|
+
action: 'removed',
|
|
124
|
+
detail: `"${componentId}" is not an element this site has — it may come from a plugin that is switched off.`
|
|
125
|
+
});
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
map[id] = _extends({}, node, {
|
|
130
|
+
nodes: Array.isArray(node.nodes) ? [
|
|
131
|
+
...node.nodes
|
|
132
|
+
] : []
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// A removed node takes its subtree: a child of something unrenderable has
|
|
136
|
+
// nowhere to be, and re-parenting it to the root would strand a fragment
|
|
137
|
+
// the author never authored at the top of the document.
|
|
138
|
+
let grew = true;
|
|
139
|
+
while(grew){
|
|
140
|
+
grew = false;
|
|
141
|
+
for (const [id, node] of Object.entries(map)){
|
|
142
|
+
if (id === CANVAS_ROOT_ELEMENT_ID) continue;
|
|
143
|
+
const parentId = node.parentId;
|
|
144
|
+
if (typeof parentId === 'string' && removed.includes(parentId)) {
|
|
145
|
+
delete map[id];
|
|
146
|
+
removed.push(id);
|
|
147
|
+
findings.push({
|
|
148
|
+
nodeId: id,
|
|
149
|
+
label: labelOf(node),
|
|
150
|
+
kind: 'not-a-node',
|
|
151
|
+
action: 'removed',
|
|
152
|
+
detail: 'Sat inside an element that had to be removed.'
|
|
153
|
+
});
|
|
154
|
+
grew = true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// ── 2. Child ids that resolve to nothing — the 'Invalid node' rows ──────
|
|
159
|
+
for (const [id, node] of Object.entries(map)){
|
|
160
|
+
const kept = [];
|
|
161
|
+
for (const childId of node.nodes){
|
|
162
|
+
var _labelOf;
|
|
163
|
+
if (typeof childId === 'string' && map[childId]) {
|
|
164
|
+
kept.push(childId);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
findings.push({
|
|
168
|
+
nodeId: typeof childId === 'string' ? childId : String(childId),
|
|
169
|
+
kind: 'dangling-child',
|
|
170
|
+
action: 'unlinked',
|
|
171
|
+
detail: `Listed inside "${(_labelOf = labelOf(node)) != null ? _labelOf : id}" but not present — this is what shows as "Invalid node".`
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
node.nodes = kept;
|
|
175
|
+
}
|
|
176
|
+
// ── 3. Parents that do not exist, and loops ─────────────────────────────
|
|
177
|
+
const adopt = (id, kind, detail)=>{
|
|
178
|
+
const node = map[id];
|
|
179
|
+
const previous = node.parentId;
|
|
180
|
+
node.parentId = CANVAS_ROOT_ELEMENT_ID;
|
|
181
|
+
if (typeof previous === 'string' && map[previous]) {
|
|
182
|
+
map[previous].nodes = map[previous].nodes.filter((child)=>child !== id);
|
|
183
|
+
}
|
|
184
|
+
if (!map[CANVAS_ROOT_ELEMENT_ID].nodes.includes(id)) {
|
|
185
|
+
;
|
|
186
|
+
map[CANVAS_ROOT_ELEMENT_ID].nodes.push(id);
|
|
187
|
+
}
|
|
188
|
+
reparented.push(id);
|
|
189
|
+
findings.push({
|
|
190
|
+
nodeId: id,
|
|
191
|
+
label: labelOf(node),
|
|
192
|
+
kind,
|
|
193
|
+
action: 'reparented',
|
|
194
|
+
detail
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
for (const id of Object.keys(map)){
|
|
198
|
+
if (id === CANVAS_ROOT_ELEMENT_ID) continue;
|
|
199
|
+
const parentId = map[id].parentId;
|
|
200
|
+
if (typeof parentId !== 'string' || !map[parentId]) {
|
|
201
|
+
adopt(id, 'orphaned', 'Its container is gone — moved to the top level so you can put it back.');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
for (const id of Object.keys(map)){
|
|
205
|
+
if (id === CANVAS_ROOT_ELEMENT_ID) continue;
|
|
206
|
+
// Bounded by the map size, so a loop ends rather than hanging the way
|
|
207
|
+
// the hierarchy's own upward walk does.
|
|
208
|
+
const seen = new Set([
|
|
209
|
+
id
|
|
210
|
+
]);
|
|
211
|
+
let cursor = map[id].parentId;
|
|
212
|
+
let looped = false;
|
|
213
|
+
while(typeof cursor === 'string' && map[cursor]){
|
|
214
|
+
if (seen.has(cursor)) {
|
|
215
|
+
looped = true;
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
seen.add(cursor);
|
|
219
|
+
if (cursor === CANVAS_ROOT_ELEMENT_ID) break;
|
|
220
|
+
cursor = map[cursor].parentId;
|
|
221
|
+
}
|
|
222
|
+
if (looped) {
|
|
223
|
+
adopt(id, 'cycle', 'Was inside itself — a loop the hierarchy cannot walk out of. Moved to the top level.');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// ── 4. Reachability, and links that disagree with themselves ───────────
|
|
227
|
+
for (const id of Object.keys(map)){
|
|
228
|
+
if (id === CANVAS_ROOT_ELEMENT_ID) continue;
|
|
229
|
+
const parent = map[map[id].parentId];
|
|
230
|
+
if (!parent) continue;
|
|
231
|
+
if (!parent.nodes.includes(id)) {
|
|
232
|
+
var _labelOf1;
|
|
233
|
+
;
|
|
234
|
+
parent.nodes.push(id);
|
|
235
|
+
findings.push({
|
|
236
|
+
nodeId: id,
|
|
237
|
+
label: labelOf(map[id]),
|
|
238
|
+
kind: 'unlisted',
|
|
239
|
+
action: 'relisted',
|
|
240
|
+
detail: `Belonged to "${(_labelOf1 = labelOf(parent)) != null ? _labelOf1 : map[id].parentId}" but was not listed in it — put back in place.`
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const reachable = new Set();
|
|
245
|
+
const queue = [
|
|
246
|
+
CANVAS_ROOT_ELEMENT_ID
|
|
247
|
+
];
|
|
248
|
+
while(queue.length){
|
|
249
|
+
var _ref;
|
|
250
|
+
var _map_id;
|
|
251
|
+
const id = queue.shift();
|
|
252
|
+
if (reachable.has(id)) continue;
|
|
253
|
+
reachable.add(id);
|
|
254
|
+
for (const childId of (_ref = (_map_id = map[id]) == null ? void 0 : _map_id.nodes) != null ? _ref : []){
|
|
255
|
+
if (map[childId]) queue.push(childId);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
for (const id of Object.keys(map)){
|
|
259
|
+
if (reachable.has(id)) continue;
|
|
260
|
+
adopt(id, 'unreachable', 'Saved with the document but never drawn — moved to the top level so you can see it and decide.');
|
|
261
|
+
}
|
|
262
|
+
const kept = Object.keys(map).length - 1;
|
|
263
|
+
return {
|
|
264
|
+
nodes: map,
|
|
265
|
+
findings,
|
|
266
|
+
removed,
|
|
267
|
+
reparented,
|
|
268
|
+
kept,
|
|
269
|
+
healthy: findings.length === 0
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* The document a newly created screen has: a root with nothing in it
|
|
274
|
+
* (AGL-2554).
|
|
275
|
+
*
|
|
276
|
+
* Built from `repairCanvasNodes` rather than `{}` so it works on the
|
|
277
|
+
* document that needs it most. Clearing is wanted precisely when the tree
|
|
278
|
+
* holds nodes the hierarchy cannot render — those rows are not selectable,
|
|
279
|
+
* so `Delete Element` cannot reach them and there is no click-path to empty
|
|
280
|
+
* the document at all. Running the repair first means the root that survives
|
|
281
|
+
* is a sound one whatever shape the map was in, including no root at all.
|
|
282
|
+
*
|
|
283
|
+
* The root's own fields are kept. It carries the document's own styling —
|
|
284
|
+
* background, padding, the page's own `sx` — and an author asking for a
|
|
285
|
+
* blank canvas is asking to remove the CONTENT, not to reset the page.
|
|
286
|
+
*/ export function clearCanvasNodes(nodes) {
|
|
287
|
+
const { nodes: repaired } = repairCanvasNodes(nodes);
|
|
288
|
+
return {
|
|
289
|
+
[CANVAS_ROOT_ELEMENT_ID]: _extends({}, repaired[CANVAS_ROOT_ELEMENT_ID], {
|
|
290
|
+
$id: CANVAS_ROOT_ELEMENT_ID,
|
|
291
|
+
parentId: null,
|
|
292
|
+
nodes: []
|
|
293
|
+
})
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
export default repairCanvasNodes;
|
|
297
|
+
|
|
298
|
+
//# sourceMappingURL=repair-canvas-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/repair-canvas-nodes.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CANVAS_ROOT_ELEMENT_ID } from '../foundation/constants/canvas'\nimport { ensureCanvasRoot } from './ensure-canvas-root'\n\ntype Nodes = Record<string, any>\n\n/** What was wrong with one node, and what was done about it. */\nexport interface CanvasRepairFinding {\n /** The node the finding is about — a map key, or an id listed on a parent. */\n nodeId: string\n /** Best available human label: the node's name, else its componentId. */\n label?: string\n kind:\n | 'not-a-node'\n | 'no-component'\n | 'unknown-component'\n | 'dangling-child'\n | 'orphaned'\n | 'cycle'\n | 'unreachable'\n | 'unlisted'\n action: 'removed' | 'reparented' | 'relisted' | 'unlinked'\n /** One sentence an author can read, written for the preview dialog. */\n detail: string\n}\n\nexport interface CanvasRepairResult {\n /** The repaired map. Reference-equal to nothing — always a fresh object. */\n nodes: Nodes\n findings: CanvasRepairFinding[]\n /** Node ids dropped from the document. */\n removed: string[]\n /** Node ids that kept their content but moved. */\n reparented: string[]\n /** How many nodes the repair KEPT, root excluded. */\n kept: number\n /** True when the document was already sound and `nodes` is unchanged. */\n healthy: boolean\n}\n\nexport interface CanvasRepairOptions {\n /**\n * Whether a `componentId` still resolves to a registered component.\n *\n * OPTIONAL on purpose, and skipped entirely when absent. A resolver that\n * has not finished loading its plugins answers \"no\" for everything, and a\n * repair that believes it would delete the whole document — the same shape\n * of mistake as a stubbed resolver making every capacity ceiling read zero.\n * Pass it only from a caller that knows the registry is populated.\n */\n isKnownComponent?: (componentId: string) => boolean\n}\n\nfunction labelOf(node: any): string | undefined {\n if (!node || typeof node !== 'object') return undefined\n const name = typeof node.name === 'string' ? node.name.trim() : ''\n if (name) return name\n return typeof node.componentId === 'string' ? node.componentId : undefined\n}\n\n/**\n * Strip what a canvas cannot render, keep everything that still works\n * (AGL-2555).\n *\n * ## Why this exists rather than \"clear and start again\"\n *\n * A besigner document corrupted while `/alternatives/webflow` was being\n * built: the hierarchy rendered literal `'Invalid node'` rows, section order\n * scrambled, two component instances stopped resolving — and the damage\n * survived a reload, so it was persisted in the draft rather than client\n * state. **Most of the document was still fine.** The prose, the FAQ\n * accordions and the layout binding all rendered correctly. Only some nodes\n * were broken, and the only way out of it was to delete the screen and\n * rebuild every one of them.\n *\n * That is the whole case: an author in this position should lose the handful\n * of nodes that are actually broken, not the hours of work around them.\n *\n * ## What counts as broken\n *\n * Every case here is one the canvas already fails on somewhere, not a rule\n * invented for this function:\n *\n * - **not-a-node** — `canvas-manager` throws `Invalid node` on a null or\n * non-object entry.\n * - **no-component** / **unknown-component** — nothing to render. The second\n * is only checked when the caller supplies a resolver it trusts.\n * - **dangling-child** — an id listed on a parent that the map does not\n * hold. This is the one that renders `'Invalid node'`: `node-tree-view`\n * maps over the parent's child ids and prints that string for every id\n * that resolves to nothing. The PARENT is fine; the stale id is dropped.\n * - **orphaned** — `parentId` names a node that is not in the map. Adopted\n * by the root, which is the rule `ensureCanvasRoot` already established:\n * recovering into an editable document beats discarding what is there.\n * - **cycle** — a node that is its own ancestor. Walking `parent` upward is\n * what the hierarchy and the breadcrumb both do, so a loop does not\n * degrade the UI, it hangs the tab. A stored root that is its own parent\n * is the shape this was measured in.\n * - **unreachable** — in the map, but no walk from the root reaches it.\n * These are invisible and still saved, still shipped, still counted\n * against the 1 MiB ceiling — AGL-1363 found 61 of them on `/product`,\n * 26 carrying the only copy of two Hero sections' text. So they are\n * RE-PARENTED, never dropped: an author can see and delete a node that is\n * on the canvas, and cannot do either to one that is not.\n * - **unlisted** — `parentId` agrees, the parent's child list does not. The\n * node is relisted rather than moved.\n *\n * ## What it will not do\n *\n * It removes nodes only for the first three, and every removal takes the\n * subtree hanging off it — a child of an unrenderable node has nowhere to\n * be. Everything else is a link repair that keeps the content, because a\n * repair tool that deletes more than it has to is the corruption with\n * better manners.\n *\n * ⚠️ Not an auto-heal. The result carries a full account of what it would\n * do so a caller can put it in front of the author BEFORE anything is\n * applied; a quiet repair that removes content is worse than the damage.\n */\nexport function repairCanvasNodes(\n nodes: Nodes | undefined,\n options: CanvasRepairOptions = {},\n): CanvasRepairResult {\n const { isKnownComponent } = options\n // A rootless map is its own defect, and it has an owner already. Doing it\n // first means every walk below has a root to start from.\n const source = ensureCanvasRoot(nodes)\n const findings: CanvasRepairFinding[] = []\n const removed: string[] = []\n const reparented: string[] = []\n\n // ── 1. Entries that are not renderable nodes ────────────────────────────\n const map: Nodes = {}\n for (const [id, node] of Object.entries(source)) {\n if (!node || typeof node !== 'object') {\n removed.push(id)\n findings.push({\n nodeId: id,\n kind: 'not-a-node',\n action: 'removed',\n detail: 'Not an element — the canvas cannot render this entry.',\n })\n continue\n }\n if (id !== CANVAS_ROOT_ELEMENT_ID) {\n const componentId = node.componentId\n if (typeof componentId !== 'string' || !componentId) {\n removed.push(id)\n findings.push({\n nodeId: id,\n label: labelOf(node),\n kind: 'no-component',\n action: 'removed',\n detail: 'No element type — there is nothing to draw.',\n })\n continue\n }\n if (isKnownComponent && !isKnownComponent(componentId)) {\n removed.push(id)\n findings.push({\n nodeId: id,\n label: labelOf(node),\n kind: 'unknown-component',\n action: 'removed',\n detail: `\"${componentId}\" is not an element this site has — it may come from a plugin that is switched off.`,\n })\n continue\n }\n }\n map[id] = { ...node, nodes: Array.isArray(node.nodes) ? [...node.nodes] : [] }\n }\n\n // A removed node takes its subtree: a child of something unrenderable has\n // nowhere to be, and re-parenting it to the root would strand a fragment\n // the author never authored at the top of the document.\n let grew = true\n while (grew) {\n grew = false\n for (const [id, node] of Object.entries(map)) {\n if (id === CANVAS_ROOT_ELEMENT_ID) continue\n const parentId = node.parentId\n if (typeof parentId === 'string' && removed.includes(parentId)) {\n delete map[id]\n removed.push(id)\n findings.push({\n nodeId: id,\n label: labelOf(node),\n kind: 'not-a-node',\n action: 'removed',\n detail: 'Sat inside an element that had to be removed.',\n })\n grew = true\n }\n }\n }\n\n // ── 2. Child ids that resolve to nothing — the 'Invalid node' rows ──────\n for (const [id, node] of Object.entries(map)) {\n const kept: string[] = []\n for (const childId of node.nodes as string[]) {\n if (typeof childId === 'string' && map[childId]) {\n kept.push(childId)\n continue\n }\n findings.push({\n nodeId: typeof childId === 'string' ? childId : String(childId),\n kind: 'dangling-child',\n action: 'unlinked',\n detail: `Listed inside \"${labelOf(node) ?? id}\" but not present — this is what shows as \"Invalid node\".`,\n })\n }\n node.nodes = kept\n }\n\n // ── 3. Parents that do not exist, and loops ─────────────────────────────\n const adopt = (\n id: string,\n kind: CanvasRepairFinding['kind'],\n detail: string,\n ) => {\n const node = map[id]\n const previous = node.parentId\n node.parentId = CANVAS_ROOT_ELEMENT_ID\n if (typeof previous === 'string' && map[previous]) {\n map[previous].nodes = (map[previous].nodes as string[]).filter(\n (child) => child !== id,\n )\n }\n if (!(map[CANVAS_ROOT_ELEMENT_ID].nodes as string[]).includes(id)) {\n ;(map[CANVAS_ROOT_ELEMENT_ID].nodes as string[]).push(id)\n }\n reparented.push(id)\n findings.push({ nodeId: id, label: labelOf(node), kind, action: 'reparented', detail })\n }\n\n for (const id of Object.keys(map)) {\n if (id === CANVAS_ROOT_ELEMENT_ID) continue\n const parentId = map[id].parentId\n if (typeof parentId !== 'string' || !map[parentId]) {\n adopt(\n id,\n 'orphaned',\n 'Its container is gone — moved to the top level so you can put it back.',\n )\n }\n }\n\n for (const id of Object.keys(map)) {\n if (id === CANVAS_ROOT_ELEMENT_ID) continue\n // Bounded by the map size, so a loop ends rather than hanging the way\n // the hierarchy's own upward walk does.\n const seen = new Set<string>([id])\n let cursor: string | undefined = map[id].parentId\n let looped = false\n while (typeof cursor === 'string' && map[cursor]) {\n if (seen.has(cursor)) {\n looped = true\n break\n }\n seen.add(cursor)\n if (cursor === CANVAS_ROOT_ELEMENT_ID) break\n cursor = map[cursor].parentId\n }\n if (looped) {\n adopt(\n id,\n 'cycle',\n 'Was inside itself — a loop the hierarchy cannot walk out of. Moved to the top level.',\n )\n }\n }\n\n // ── 4. Reachability, and links that disagree with themselves ───────────\n for (const id of Object.keys(map)) {\n if (id === CANVAS_ROOT_ELEMENT_ID) continue\n const parent = map[map[id].parentId]\n if (!parent) continue\n if (!(parent.nodes as string[]).includes(id)) {\n ;(parent.nodes as string[]).push(id)\n findings.push({\n nodeId: id,\n label: labelOf(map[id]),\n kind: 'unlisted',\n action: 'relisted',\n detail: `Belonged to \"${labelOf(parent) ?? map[id].parentId}\" but was not listed in it — put back in place.`,\n })\n }\n }\n\n const reachable = new Set<string>()\n const queue = [CANVAS_ROOT_ELEMENT_ID]\n while (queue.length) {\n const id = queue.shift()!\n if (reachable.has(id)) continue\n reachable.add(id)\n for (const childId of map[id]?.nodes ?? []) {\n if (map[childId]) queue.push(childId)\n }\n }\n for (const id of Object.keys(map)) {\n if (reachable.has(id)) continue\n adopt(\n id,\n 'unreachable',\n 'Saved with the document but never drawn — moved to the top level so you can see it and decide.',\n )\n }\n\n const kept = Object.keys(map).length - 1\n return {\n nodes: map,\n findings,\n removed,\n reparented,\n kept,\n healthy: findings.length === 0,\n }\n}\n\n/**\n * The document a newly created screen has: a root with nothing in it\n * (AGL-2554).\n *\n * Built from `repairCanvasNodes` rather than `{}` so it works on the\n * document that needs it most. Clearing is wanted precisely when the tree\n * holds nodes the hierarchy cannot render — those rows are not selectable,\n * so `Delete Element` cannot reach them and there is no click-path to empty\n * the document at all. Running the repair first means the root that survives\n * is a sound one whatever shape the map was in, including no root at all.\n *\n * The root's own fields are kept. It carries the document's own styling —\n * background, padding, the page's own `sx` — and an author asking for a\n * blank canvas is asking to remove the CONTENT, not to reset the page.\n */\nexport function clearCanvasNodes(nodes: Nodes | undefined): Nodes {\n const { nodes: repaired } = repairCanvasNodes(nodes)\n return {\n [CANVAS_ROOT_ELEMENT_ID]: {\n ...repaired[CANVAS_ROOT_ELEMENT_ID],\n $id: CANVAS_ROOT_ELEMENT_ID,\n parentId: null,\n nodes: [],\n },\n }\n}\n\nexport default repairCanvasNodes\n"],"names":["CANVAS_ROOT_ELEMENT_ID","ensureCanvasRoot","labelOf","node","undefined","name","trim","componentId","repairCanvasNodes","nodes","options","isKnownComponent","source","findings","removed","reparented","map","id","Object","entries","push","nodeId","kind","action","detail","label","Array","isArray","grew","parentId","includes","kept","childId","String","adopt","previous","filter","child","keys","seen","Set","cursor","looped","has","add","parent","reachable","queue","length","shift","healthy","clearCanvasNodes","repaired","$id"],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* REPEAT-INFRINGER POLICY — the §512(i) condition, with a counter behind it
|
|
19
|
+
* (AGL-1983).
|
|
20
|
+
*
|
|
21
|
+
* §512(i)(1)(A) conditions the ENTIRE safe harbour — every limitation in
|
|
22
|
+
* §512, not just the hosting one — on a provider having "adopted and
|
|
23
|
+
* reasonably implemented" a policy for terminating repeat infringers, and on
|
|
24
|
+
* informing subscribers of it. This is the condition providers most often
|
|
25
|
+
* lose on, and they lose on the second half: courts have declined to credit a
|
|
26
|
+
* policy that existed as prose while nothing in the product counted anything.
|
|
27
|
+
* A policy page alone would not close AGL-1983 and the issue says so.
|
|
28
|
+
*
|
|
29
|
+
* So this module is the counting. It answers three questions and nothing else:
|
|
30
|
+
* what is a strike, when does one go away, and what happens at the threshold.
|
|
31
|
+
*
|
|
32
|
+
* ## A strike is an ACTIONED notice, counted against the ACCOUNT
|
|
33
|
+
*
|
|
34
|
+
* Not a received notice — anyone can send one, and counting receipts would
|
|
35
|
+
* let a competitor terminate a customer by filing three complaints. A strike
|
|
36
|
+
* is recorded when staff action a DMCA report: the point at which a human
|
|
37
|
+
* looked and took content down.
|
|
38
|
+
*
|
|
39
|
+
* Counted against the **org**, not the site. A repeat infringer who loses one
|
|
40
|
+
* site and opens another inside the same workspace has not been terminated in
|
|
41
|
+
* any sense the statute would recognise, and the org is the account we bill,
|
|
42
|
+
* suspend and close. {@link STRIKE_LEDGER_SUBCOLLECTION} therefore hangs off
|
|
43
|
+
* `orgs/{orgId}`.
|
|
44
|
+
*
|
|
45
|
+
* ## A strike is keyed by its report, which is what makes withdrawal work
|
|
46
|
+
*
|
|
47
|
+
* One ledger document per actioned report, with the report's id AS the
|
|
48
|
+
* document id. Two properties fall out of that and both are load-bearing:
|
|
49
|
+
*
|
|
50
|
+
* - **Idempotence.** Staff re-actioning a report they already actioned — or
|
|
51
|
+
* a route retried — cannot inflate the count. A counter that can be pumped
|
|
52
|
+
* by clicking twice is not one anybody should terminate an account on.
|
|
53
|
+
* - **Exact withdrawal.** When a notice is withdrawn, or a counter-notice
|
|
54
|
+
* leads to a restoration, the strike it created has to come off — and only
|
|
55
|
+
* that one. §512(g) restoration means the takedown is being reversed; a
|
|
56
|
+
* strike surviving it would count an infringement the process just
|
|
57
|
+
* declined to affirm, which is the shape of unfairness that makes a policy
|
|
58
|
+
* look unreasonable rather than reasonable. Deleting by report id removes
|
|
59
|
+
* exactly the right strike without recomputing anything.
|
|
60
|
+
*
|
|
61
|
+
* {@link strikeWithdrawalReason} names the three ways a strike comes off, so
|
|
62
|
+
* the ledger records WHY rather than silently shrinking.
|
|
63
|
+
*
|
|
64
|
+
* ## The threshold has to do something
|
|
65
|
+
*
|
|
66
|
+
* "Reasonably implemented" is the whole fight, so the escalation is defined
|
|
67
|
+
* here as data rather than left to whoever reads the queue:
|
|
68
|
+
* {@link repeatInfringerVerdict} maps a count onto a level, and each level
|
|
69
|
+
* names the consequence in terms of levers this product actually has. At
|
|
70
|
+
* `terminate` the staff queue refuses to close a DMCA report without an
|
|
71
|
+
* explicit recorded decision — see the admin route — so the threshold cannot
|
|
72
|
+
* be passed silently. That refusal is the difference between a counter and a
|
|
73
|
+
* policy.
|
|
74
|
+
*
|
|
75
|
+
* What this module deliberately does NOT do is suspend anything by itself. An
|
|
76
|
+
* automatic termination on a third strike would be a product that closes a
|
|
77
|
+
* paying customer's account on three unverified assertions by strangers, with
|
|
78
|
+
* no human in the loop — and §512 nowhere asks for that. The policy is
|
|
79
|
+
* "terminate in appropriate circumstances", and judging the circumstances is
|
|
80
|
+
* exactly the part a person must do. The counter makes the decision
|
|
81
|
+
* unavoidable and recorded; it does not make it automatically.
|
|
82
|
+
*/
|
|
83
|
+
/** Per-org strike ledger. One document per actioned DMCA report. */
|
|
84
|
+
export declare const STRIKE_LEDGER_SUBCOLLECTION = "dmcaStrikes";
|
|
85
|
+
/**
|
|
86
|
+
* Strikes at which each consequence begins.
|
|
87
|
+
*
|
|
88
|
+
* Three is the termination threshold, which is the number the phrase "repeat
|
|
89
|
+
* infringer" is conventionally read against and the number the operator's own
|
|
90
|
+
* published repeat-infringer policy has to state — §512(i)(1)(A) conditions the
|
|
91
|
+
* whole safe harbour on subscribers having been *informed* of the policy, so a
|
|
92
|
+
* threshold this ledger enforces silently earns nothing (AGL-2044, AGL-2007).
|
|
93
|
+
* On a self-host install that policy is the operator's document, not ours: they
|
|
94
|
+
* inherit a working ledger and owe their own text. The two below it exist so
|
|
95
|
+
* termination is never the first
|
|
96
|
+
* thing a customer hears about a problem: a subscriber who does not know they
|
|
97
|
+
* are on a strike cannot correct their behaviour, and a policy that only
|
|
98
|
+
* speaks at the end is one a court can call unreasonable in its
|
|
99
|
+
* implementation.
|
|
100
|
+
*/
|
|
101
|
+
export declare const STRIKE_WARN_AT = 1;
|
|
102
|
+
export declare const STRIKE_FINAL_AT = 2;
|
|
103
|
+
export declare const STRIKE_TERMINATE_AT = 3;
|
|
104
|
+
export type RepeatInfringerLevel = 'none' | 'warn' | 'final' | 'terminate';
|
|
105
|
+
export interface RepeatInfringerVerdict {
|
|
106
|
+
/** Strikes currently standing against the account. */
|
|
107
|
+
strikes: number;
|
|
108
|
+
level: RepeatInfringerLevel;
|
|
109
|
+
/**
|
|
110
|
+
* Does the account-level consequence require a recorded human decision
|
|
111
|
+
* before any further DMCA report on this org can be closed?
|
|
112
|
+
*/
|
|
113
|
+
decisionRequired: boolean;
|
|
114
|
+
/** One line naming the consequence, shown to staff and quoted to the org. */
|
|
115
|
+
consequence: string;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Strikes → verdict.
|
|
119
|
+
*
|
|
120
|
+
* A pure function of the count, so the staff surface, the admin route and the
|
|
121
|
+
* docs cannot disagree about where the line is. Anything at or above
|
|
122
|
+
* {@link STRIKE_TERMINATE_AT} is `terminate`, including a count that somehow
|
|
123
|
+
* ran past it — a fourth strike must not read as less serious than the third.
|
|
124
|
+
*/
|
|
125
|
+
export declare function repeatInfringerVerdict(strikes: unknown): RepeatInfringerVerdict;
|
|
126
|
+
/** Why a strike came off the ledger. Recorded, never silent. */
|
|
127
|
+
export declare const STRIKE_WITHDRAWAL_REASONS: readonly ["noticeWithdrawn", "counterNoticeRestored", "staffReversed"];
|
|
128
|
+
export type StrikeWithdrawalReason = (typeof STRIKE_WITHDRAWAL_REASONS)[number];
|
|
129
|
+
export declare function isStrikeWithdrawalReason(value: unknown): value is StrikeWithdrawalReason;
|
|
130
|
+
/**
|
|
131
|
+
* Does moving a DMCA report to `status` earn a strike?
|
|
132
|
+
*
|
|
133
|
+
* `actioned` only. `dismissed` is staff saying the notice did not hold up, so
|
|
134
|
+
* it must not count — and neither must `open` or `reviewing`, which are a
|
|
135
|
+
* report nobody has adjudicated yet. Counting anything but `actioned` would
|
|
136
|
+
* make the ledger a record of accusations rather than of upheld ones.
|
|
137
|
+
*
|
|
138
|
+
* The category gate matters as much as the status: the queue carries phishing
|
|
139
|
+
* and malware reports too, and a phishing takedown is not a copyright
|
|
140
|
+
* infringement. §512(i) is about infringement, so only `dmca` reports reach
|
|
141
|
+
* the ledger.
|
|
142
|
+
*/
|
|
143
|
+
export declare function strikeEarnedBy(category: unknown, status: unknown): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Does moving a DMCA report to `status` REMOVE a strike it previously earned?
|
|
146
|
+
*
|
|
147
|
+
* The mirror of {@link strikeEarnedBy}, and the reason the pair is written as
|
|
148
|
+
* two functions rather than one: a report that goes `actioned` → `dismissed`
|
|
149
|
+
* has to give its strike back, and a naive "recount the actioned ones"
|
|
150
|
+
* implementation would get that right by accident while getting the
|
|
151
|
+
* counter-notice case wrong, because a restored counter-notice leaves the
|
|
152
|
+
* report `actioned` and reverses it by a different route.
|
|
153
|
+
*/
|
|
154
|
+
export declare function strikeRemovedBy(category: unknown, status: unknown): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Count the strikes standing, given ledger rows.
|
|
157
|
+
*
|
|
158
|
+
* Rows carry a `withdrawnAt` when they have been reversed rather than being
|
|
159
|
+
* deleted, so the ledger stays a complete history — "did we know, and when"
|
|
160
|
+
* is the question the abuse queue exists to answer, and a strike that was
|
|
161
|
+
* lifted is part of that answer. Only rows without one count.
|
|
162
|
+
*/
|
|
163
|
+
export declare function countStandingStrikes(rows: readonly {
|
|
164
|
+
withdrawnAt?: unknown;
|
|
165
|
+
}[] | null | undefined): number;
|
|
166
|
+
export default repeatInfringerVerdict;
|