@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,75 @@
|
|
|
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
|
+
*/ /**
|
|
18
|
+
* The media CDN's scope grammar and the verdict it reaches under it
|
|
19
|
+
* (AGL-1043), as pure functions.
|
|
20
|
+
*
|
|
21
|
+
* `serveMediaCdn` enforces them and re-exports them, so the handler remains
|
|
22
|
+
* the authority. They live here, in a module with no server dependency,
|
|
23
|
+
* because two other readers have to reach the verdict the handler reaches
|
|
24
|
+
* before it serves a file:
|
|
25
|
+
*
|
|
26
|
+
* - the tenant composition, which lays a placed asset's current facts over its
|
|
27
|
+
* node only when the page's own URL would be served
|
|
28
|
+
* (`libs/tenant/runtime/src/lib/get-media-asset-facts.ts`);
|
|
29
|
+
* - the besigner canvas and Preview, which read the same document in the
|
|
30
|
+
* browser so an author is shown what a visitor gets.
|
|
31
|
+
*
|
|
32
|
+
* Both reach it through `mediaAssetFactsFromDocument` in
|
|
33
|
+
* `media-asset-facts.ts`. A copy in either would be a second rule, free to
|
|
34
|
+
* disagree with the one that refuses the bytes.
|
|
35
|
+
*
|
|
36
|
+
* Out of every barrel: the handler, the composition and the editor import it
|
|
37
|
+
* by path, and nothing here has a reason to reach a published page's bundle.
|
|
38
|
+
*/ import { isOrgWideScope, visibleToHost } from "./scope-tokens.js";
|
|
39
|
+
/** One CDN path segment: a host id, an org id, a media id or a content hash. */ export const MEDIA_CDN_SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
|
|
40
|
+
export function parseMediaCdnScope(scopeSegment) {
|
|
41
|
+
if (!scopeSegment.startsWith('org:')) {
|
|
42
|
+
return MEDIA_CDN_SEGMENT.test(scopeSegment) ? {
|
|
43
|
+
isOrg: false,
|
|
44
|
+
scopeId: scopeSegment
|
|
45
|
+
} : null;
|
|
46
|
+
}
|
|
47
|
+
const parts = scopeSegment.slice('org:'.length).split(':');
|
|
48
|
+
if (parts.length > 2) return null;
|
|
49
|
+
const [scopeId, contextHostId] = parts;
|
|
50
|
+
if (!MEDIA_CDN_SEGMENT.test(scopeId != null ? scopeId : '')) return null;
|
|
51
|
+
if (contextHostId !== undefined && !MEDIA_CDN_SEGMENT.test(contextHostId)) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return _extends({
|
|
55
|
+
isOrg: true,
|
|
56
|
+
scopeId
|
|
57
|
+
}, contextHostId ? {
|
|
58
|
+
contextHostId
|
|
59
|
+
} : {});
|
|
60
|
+
}
|
|
61
|
+
/** Why the asset is refused under this URL; `null` when it is not. */ export function mediaCdnScopeRefusal(scope, visibleTo) {
|
|
62
|
+
// Host-library assets are private by construction and carry no
|
|
63
|
+
// `visibleTo`, so only the org branch is scoped at all.
|
|
64
|
+
if (!scope.isOrg) return null;
|
|
65
|
+
if (!Array.isArray(visibleTo)) return 'unscoped';
|
|
66
|
+
if (!visibleTo.length) return 'no-sites';
|
|
67
|
+
const scoped = visibleTo;
|
|
68
|
+
const allowed = scope.contextHostId ? visibleToHost(scoped, scope.contextHostId) : isOrgWideScope(scoped);
|
|
69
|
+
return allowed ? null : 'restricted';
|
|
70
|
+
}
|
|
71
|
+
/** Whether the asset may be served under this URL. */ export function mediaCdnAllows(scope, visibleTo) {
|
|
72
|
+
return mediaCdnScopeRefusal(scope, visibleTo) === null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=media-cdn-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/media-cdn-scope.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\n/**\n * The media CDN's scope grammar and the verdict it reaches under it\n * (AGL-1043), as pure functions.\n *\n * `serveMediaCdn` enforces them and re-exports them, so the handler remains\n * the authority. They live here, in a module with no server dependency,\n * because two other readers have to reach the verdict the handler reaches\n * before it serves a file:\n *\n * - the tenant composition, which lays a placed asset's current facts over its\n * node only when the page's own URL would be served\n * (`libs/tenant/runtime/src/lib/get-media-asset-facts.ts`);\n * - the besigner canvas and Preview, which read the same document in the\n * browser so an author is shown what a visitor gets.\n *\n * Both reach it through `mediaAssetFactsFromDocument` in\n * `media-asset-facts.ts`. A copy in either would be a second rule, free to\n * disagree with the one that refuses the bytes.\n *\n * Out of every barrel: the handler, the composition and the editor import it\n * by path, and nothing here has a reason to reach a published page's bundle.\n */\n\nimport { isOrgWideScope, visibleToHost } from './scope-tokens'\n\n/** One CDN path segment: a host id, an org id, a media id or a content hash. */\nexport const MEDIA_CDN_SEGMENT = /^[A-Za-z0-9_-]{1,64}$/\n\n/**\n * The parsed CDN scope segment (AGL-1043). Shapes:\n *\n * - `{hostId}` — that host's own library\n * - `org:{orgId}` — the org library, ORG-WIDE assets only\n * - `org:{orgId}:{hostId}` — an org asset in one site's context\n *\n * The host is in the URL rather than sniffed from the `Host` header on\n * purpose. A header is the requester's CHOICE: anyone holding a restricted\n * asset's id could fetch it through a domain that IS permitted and get the\n * bytes, so header-based enforcement stops accidents while looking like a\n * boundary. Here the decision is a pure function of (URL, doc), and since\n * the cache key IS the URL, one host's answer can never reach another.\n */\nexport interface MediaCdnScope {\n isOrg: boolean\n scopeId: string\n /** Only on the `org:{orgId}:{hostId}` form. */\n contextHostId?: string\n}\n\nexport function parseMediaCdnScope(\n scopeSegment: string,\n): MediaCdnScope | null {\n if (!scopeSegment.startsWith('org:')) {\n return MEDIA_CDN_SEGMENT.test(scopeSegment)\n ? { isOrg: false, scopeId: scopeSegment }\n : null\n }\n const parts = scopeSegment.slice('org:'.length).split(':')\n if (parts.length > 2) return null\n const [scopeId, contextHostId] = parts\n if (!MEDIA_CDN_SEGMENT.test(scopeId ?? '')) return null\n if (contextHostId !== undefined && !MEDIA_CDN_SEGMENT.test(contextHostId)) {\n return null\n }\n return {\n isOrg: true,\n scopeId,\n ...(contextHostId ? { contextHostId } : {}),\n }\n}\n\n/**\n * The three ways an org asset can be refused under a CDN URL.\n *\n * They are one 404 on the wire — whether a restricted asset exists is not\n * something an anonymous caller has standing to learn — and three different\n * faults to whoever is looking at the broken page:\n *\n * - `restricted` — the asset carries a scope and this URL is not in it. The\n * URL is what is wrong: a restricted asset has to be requested through the\n * form that names the site (`hostQualifiedCdnPath`), and the same asset\n * serves normally from the site it is shared with.\n * - `unscoped` — no `visibleTo` at all, so the asset is undeliverable under\n * EVERY URL form there is. The document is what is wrong, and it means a\n * creation path wrote it without a scope: `newResourceScopeFields` is what\n * stops that at compile time, and the scope backfill is what repairs the\n * documents already written (`docs/SCOPE_DRIFT.md`).\n * - `no-sites` — a stored empty array: somebody chose nobody. Equally\n * undeliverable, and NOT repairable by the backfill, which leaves an empty\n * array alone rather than widening a resource nobody asked to widen — so\n * this one needs a person either way.\n */\nexport type MediaCdnScopeRefusal = 'restricted' | 'unscoped' | 'no-sites'\n\n/** Why the asset is refused under this URL; `null` when it is not. */\nexport function mediaCdnScopeRefusal(\n scope: MediaCdnScope,\n visibleTo: unknown,\n): MediaCdnScopeRefusal | null {\n // Host-library assets are private by construction and carry no\n // `visibleTo`, so only the org branch is scoped at all.\n if (!scope.isOrg) return null\n if (!Array.isArray(visibleTo)) return 'unscoped'\n if (!visibleTo.length) return 'no-sites'\n const scoped = visibleTo as string[]\n const allowed = scope.contextHostId\n ? visibleToHost(scoped, scope.contextHostId)\n : isOrgWideScope(scoped)\n return allowed ? null : 'restricted'\n}\n\n/** Whether the asset may be served under this URL. */\nexport function mediaCdnAllows(\n scope: MediaCdnScope,\n visibleTo: unknown,\n): boolean {\n return mediaCdnScopeRefusal(scope, visibleTo) === null\n}\n"],"names":["isOrgWideScope","visibleToHost","MEDIA_CDN_SEGMENT","parseMediaCdnScope","scopeSegment","startsWith","test","isOrg","scopeId","parts","slice","length","split","contextHostId","undefined","mediaCdnScopeRefusal","scope","visibleTo","Array","isArray","scoped","allowed","mediaCdnAllows"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;CAqBC,GAED,SAASA,cAAc,EAAEC,aAAa,QAAQ,oBAAgB;AAE9D,8EAA8E,GAC9E,OAAO,MAAMC,oBAAoB,wBAAuB;AAuBxD,OAAO,SAASC,mBACdC,YAAoB;IAEpB,IAAI,CAACA,aAAaC,UAAU,CAAC,SAAS;QACpC,OAAOH,kBAAkBI,IAAI,CAACF,gBAC1B;YAAEG,OAAO;YAAOC,SAASJ;QAAa,IACtC;IACN;IACA,MAAMK,QAAQL,aAAaM,KAAK,CAAC,OAAOC,MAAM,EAAEC,KAAK,CAAC;IACtD,IAAIH,MAAME,MAAM,GAAG,GAAG,OAAO;IAC7B,MAAM,CAACH,SAASK,cAAc,GAAGJ;IACjC,IAAI,CAACP,kBAAkBI,IAAI,CAACE,kBAAAA,UAAW,KAAK,OAAO;IACnD,IAAIK,kBAAkBC,aAAa,CAACZ,kBAAkBI,IAAI,CAACO,gBAAgB;QACzE,OAAO;IACT;IACA,OAAO;QACLN,OAAO;QACPC;OACIK,gBAAgB;QAAEA;IAAc,IAAI,CAAC;AAE7C;AAyBA,oEAAoE,GACpE,OAAO,SAASE,qBACdC,KAAoB,EACpBC,SAAkB;IAElB,+DAA+D;IAC/D,wDAAwD;IACxD,IAAI,CAACD,MAAMT,KAAK,EAAE,OAAO;IACzB,IAAI,CAACW,MAAMC,OAAO,CAACF,YAAY,OAAO;IACtC,IAAI,CAACA,UAAUN,MAAM,EAAE,OAAO;IAC9B,MAAMS,SAASH;IACf,MAAMI,UAAUL,MAAMH,aAAa,GAC/BZ,cAAcmB,QAAQJ,MAAMH,aAAa,IACzCb,eAAeoB;IACnB,OAAOC,UAAU,OAAO;AAC1B;AAEA,oDAAoD,GACpD,OAAO,SAASC,eACdN,KAAoB,EACpBC,SAAkB;IAElB,OAAOF,qBAAqBC,OAAOC,eAAe;AACpD"}
|
|
@@ -0,0 +1,161 @@
|
|
|
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
|
+
* Media folder hierarchy (AGL-171): first-class folders at
|
|
19
|
+
* `hosts/{hostId}/mediaFolders/{folderId}` replacing the AGL-124 free-text
|
|
20
|
+
* `folder` string on media docs. Console UI and any future API share these
|
|
21
|
+
* helpers so depth/cycle/name rules can't disagree.
|
|
22
|
+
*
|
|
23
|
+
* Delete policy (documented per the issue): deleting a folder re-parents
|
|
24
|
+
* its child folders and assets to the deleted folder's parent — nothing is
|
|
25
|
+
* ever orphaned and no delete is blocked.
|
|
26
|
+
*/
|
|
27
|
+
import type { ScopeToken } from './scope-tokens';
|
|
28
|
+
export interface AglynMediaFolder {
|
|
29
|
+
name: string;
|
|
30
|
+
/** Parent folder id; null/undefined = root. */
|
|
31
|
+
parentId?: string | null;
|
|
32
|
+
/** Sibling sort position. */
|
|
33
|
+
order?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface NewMediaFolderInput {
|
|
36
|
+
name: string;
|
|
37
|
+
parentId: string | null;
|
|
38
|
+
/**
|
|
39
|
+
* `serverTimestamp()` from whichever SDK the caller holds — this module
|
|
40
|
+
* stays free of both the client and admin Firestore packages.
|
|
41
|
+
*/
|
|
42
|
+
createdAt: unknown;
|
|
43
|
+
/**
|
|
44
|
+
* Who may see the folder (AGL-1037). **Required**, with no default: the
|
|
45
|
+
* whole of AGL-1466 was two call sites that each built the document
|
|
46
|
+
* inline and each forgot the field, so the type is what stops a third.
|
|
47
|
+
*
|
|
48
|
+
* `null` means a SITE library — `hosts/{hostId}/mediaFolders` is private
|
|
49
|
+
* by construction and stores no scope, the same rule the site-export
|
|
50
|
+
* import path follows and the reason `scopedToHost` refuses a host ref.
|
|
51
|
+
*/
|
|
52
|
+
visibleTo: readonly ScopeToken[] | null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The document a media folder is created with (AGL-1466).
|
|
56
|
+
*
|
|
57
|
+
* Every `mediaFolders` create goes through here. Before it, the console
|
|
58
|
+
* wrote `{ name, parentId, createdAt }` from the NEW FOLDER button and from
|
|
59
|
+
* the legacy-string migration, so a folder in an ORG library landed with no
|
|
60
|
+
* `visibleTo` — and both enforcement layers fail closed on a missing field
|
|
61
|
+
* (`array-contains-any` matches nothing, the rules' `hasAny` errors). The
|
|
62
|
+
* result was a library that looked right on the org page and collapsed into
|
|
63
|
+
* "No folder" the moment it was opened for a site, because the folders were
|
|
64
|
+
* gone and only their files remained.
|
|
65
|
+
*/
|
|
66
|
+
export declare function newMediaFolderDoc(input: NewMediaFolderInput): Record<string, unknown>;
|
|
67
|
+
/** What separates the segments of a folder path in a picker row. */
|
|
68
|
+
export declare const MEDIA_FOLDER_PATH_SEPARATOR = " / ";
|
|
69
|
+
/** One row of a folder picker (AGL-1470). */
|
|
70
|
+
export interface MediaFolderChoice {
|
|
71
|
+
$id: string;
|
|
72
|
+
/** The folder's own name, for a caller that indents instead. */
|
|
73
|
+
name: string;
|
|
74
|
+
/** Ancestors then self: `['Blog', 'Covers']`. */
|
|
75
|
+
path: string[];
|
|
76
|
+
/** `Blog / Covers` — what a picker row must show. */
|
|
77
|
+
label: string;
|
|
78
|
+
/** 0 for a root folder; an indent level. */
|
|
79
|
+
depth: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The folder list a PICKER may show (AGL-1470).
|
|
83
|
+
*
|
|
84
|
+
* A picker that shows bare names is not merely terse. Duplicate names across
|
|
85
|
+
* parents are normal — `Covers`, `Images`, `Archive`, `2026` — and with
|
|
86
|
+
* `Blog/Covers` and `Press/Covers` both present, MOVE TO FOLDER… drew two
|
|
87
|
+
* rows reading exactly `Covers`. Choosing the wrong one is **silent**: a move
|
|
88
|
+
* is copy-then-delete, so the object is rewritten under a different prefix,
|
|
89
|
+
* and because every reference to it is by id, nothing breaks. No error, no
|
|
90
|
+
* missing image — the file is simply filed where nobody will look for it, and
|
|
91
|
+
* the mistake is undetectable from the site.
|
|
92
|
+
*
|
|
93
|
+
* So the label carries the whole path, and the order is the sidebar's:
|
|
94
|
+
* depth-first, each child directly under its parent, siblings by `order` then
|
|
95
|
+
* name. The rail computed that hierarchy correctly the whole time; the
|
|
96
|
+
* pickers beside it threw it away.
|
|
97
|
+
*
|
|
98
|
+
* Two robustness rules, both chosen to keep a destination REACHABLE rather
|
|
99
|
+
* than tidy:
|
|
100
|
+
*
|
|
101
|
+
* - **A folder whose parent is missing is kept, at the root.** A scoped
|
|
102
|
+
* collaborator's read set can admit a child and refuse its parent
|
|
103
|
+
* (AGL-1466), and dropping the child would remove a real destination from
|
|
104
|
+
* the menu — a worse failure than an unindented row.
|
|
105
|
+
* - **A cycle terminates.** This runs on every render of an open picker.
|
|
106
|
+
*/
|
|
107
|
+
export declare function mediaFolderChoices(folders: ReadonlyArray<AglynMediaFolder & {
|
|
108
|
+
$id: string;
|
|
109
|
+
}>): MediaFolderChoice[];
|
|
110
|
+
/** Nesting cap, enforced in UI and validation (root children = depth 1). */
|
|
111
|
+
export declare const MEDIA_FOLDER_MAX_DEPTH = 5;
|
|
112
|
+
export declare const MEDIA_FOLDER_NAME_MAX_LENGTH = 60;
|
|
113
|
+
/**
|
|
114
|
+
* Trims and collapses whitespace; null when empty or over the length cap
|
|
115
|
+
* so callers reject rather than store junk.
|
|
116
|
+
*/
|
|
117
|
+
export declare function normalizeFolderName(input: string): string | null;
|
|
118
|
+
/**
|
|
119
|
+
* Depth of a folder (root children = 1). Broken parent links and cycles
|
|
120
|
+
* both terminate: unknown parents count as root, and a revisited id stops
|
|
121
|
+
* the walk (treated as max depth so validation refuses to make it worse).
|
|
122
|
+
*/
|
|
123
|
+
export declare function folderDepth(folderId: string, foldersById: Record<string, AglynMediaFolder>): number;
|
|
124
|
+
/**
|
|
125
|
+
* True when re-parenting `folderId` under `newParentId` would create a
|
|
126
|
+
* cycle — i.e. the new parent is the folder itself or one of its
|
|
127
|
+
* descendants (the parent chain from `newParentId` reaches `folderId`).
|
|
128
|
+
*/
|
|
129
|
+
export declare function wouldCreateCycle(folderId: string, newParentId: string | null | undefined, foldersById: Record<string, AglynMediaFolder>): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Case-insensitive sibling-name uniqueness per parent. `excludeId` skips
|
|
132
|
+
* the folder being renamed/moved itself.
|
|
133
|
+
*/
|
|
134
|
+
export declare function isSiblingNameTaken(name: string, parentId: string | null | undefined, folders: Array<AglynMediaFolder & {
|
|
135
|
+
$id: string;
|
|
136
|
+
}>, excludeId?: string): boolean;
|
|
137
|
+
export interface LegacyFolderMigrationPlan {
|
|
138
|
+
/** Root-level folder names that must be created (deduped, ordered). */
|
|
139
|
+
foldersToCreate: string[];
|
|
140
|
+
/**
|
|
141
|
+
* Media doc id → legacy folder name (lower-cased key match against
|
|
142
|
+
* created/existing root folders happens at execution time).
|
|
143
|
+
*/
|
|
144
|
+
assignments: Array<{
|
|
145
|
+
mediaId: string;
|
|
146
|
+
folderName: string;
|
|
147
|
+
}>;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Migration plan from flat AGL-124 `folder` strings: one root folder per
|
|
151
|
+
* distinct legacy string (case-insensitive; existing root folders with a
|
|
152
|
+
* matching name are reused, not duplicated), and a `folderId` stamp for
|
|
153
|
+
* every media doc that still carries a legacy string but no `folderId`.
|
|
154
|
+
*/
|
|
155
|
+
export declare function planLegacyFolderMigration(mediaDocs: Array<{
|
|
156
|
+
$id: string;
|
|
157
|
+
folder?: string;
|
|
158
|
+
folderId?: string | null;
|
|
159
|
+
}>, existingFolders: Array<AglynMediaFolder & {
|
|
160
|
+
$id: string;
|
|
161
|
+
}>): LegacyFolderMigrationPlan;
|
|
@@ -0,0 +1,230 @@
|
|
|
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
|
+
* Media folder hierarchy (AGL-171): first-class folders at
|
|
18
|
+
* `hosts/{hostId}/mediaFolders/{folderId}` replacing the AGL-124 free-text
|
|
19
|
+
* `folder` string on media docs. Console UI and any future API share these
|
|
20
|
+
* helpers so depth/cycle/name rules can't disagree.
|
|
21
|
+
*
|
|
22
|
+
* Delete policy (documented per the issue): deleting a folder re-parents
|
|
23
|
+
* its child folders and assets to the deleted folder's parent — nothing is
|
|
24
|
+
* ever orphaned and no delete is blocked.
|
|
25
|
+
*/ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
26
|
+
/**
|
|
27
|
+
* The document a media folder is created with (AGL-1466).
|
|
28
|
+
*
|
|
29
|
+
* Every `mediaFolders` create goes through here. Before it, the console
|
|
30
|
+
* wrote `{ name, parentId, createdAt }` from the NEW FOLDER button and from
|
|
31
|
+
* the legacy-string migration, so a folder in an ORG library landed with no
|
|
32
|
+
* `visibleTo` — and both enforcement layers fail closed on a missing field
|
|
33
|
+
* (`array-contains-any` matches nothing, the rules' `hasAny` errors). The
|
|
34
|
+
* result was a library that looked right on the org page and collapsed into
|
|
35
|
+
* "No folder" the moment it was opened for a site, because the folders were
|
|
36
|
+
* gone and only their files remained.
|
|
37
|
+
*/ export function newMediaFolderDoc(input) {
|
|
38
|
+
const { name, parentId, createdAt, visibleTo } = input;
|
|
39
|
+
// An EMPTY array is the one value that must never be stored. Unlike a
|
|
40
|
+
// missing field it is a written "visible to nobody" — the backfill leaves
|
|
41
|
+
// it alone by design and no read path treats it as legacy — so it is
|
|
42
|
+
// permanent rather than repairable. Getting here means a caller computed
|
|
43
|
+
// a scope and came back with nothing, which is a bug worth a stack trace
|
|
44
|
+
// rather than a folder nobody will ever see again.
|
|
45
|
+
if (visibleTo && !visibleTo.length) {
|
|
46
|
+
throw new Error('A media folder cannot be created with an empty scope');
|
|
47
|
+
}
|
|
48
|
+
return _extends({
|
|
49
|
+
name,
|
|
50
|
+
parentId,
|
|
51
|
+
createdAt
|
|
52
|
+
}, visibleTo ? {
|
|
53
|
+
visibleTo: [
|
|
54
|
+
...visibleTo
|
|
55
|
+
]
|
|
56
|
+
} : {});
|
|
57
|
+
}
|
|
58
|
+
/** What separates the segments of a folder path in a picker row. */ export const MEDIA_FOLDER_PATH_SEPARATOR = ' / ';
|
|
59
|
+
/**
|
|
60
|
+
* The folder list a PICKER may show (AGL-1470).
|
|
61
|
+
*
|
|
62
|
+
* A picker that shows bare names is not merely terse. Duplicate names across
|
|
63
|
+
* parents are normal — `Covers`, `Images`, `Archive`, `2026` — and with
|
|
64
|
+
* `Blog/Covers` and `Press/Covers` both present, MOVE TO FOLDER… drew two
|
|
65
|
+
* rows reading exactly `Covers`. Choosing the wrong one is **silent**: a move
|
|
66
|
+
* is copy-then-delete, so the object is rewritten under a different prefix,
|
|
67
|
+
* and because every reference to it is by id, nothing breaks. No error, no
|
|
68
|
+
* missing image — the file is simply filed where nobody will look for it, and
|
|
69
|
+
* the mistake is undetectable from the site.
|
|
70
|
+
*
|
|
71
|
+
* So the label carries the whole path, and the order is the sidebar's:
|
|
72
|
+
* depth-first, each child directly under its parent, siblings by `order` then
|
|
73
|
+
* name. The rail computed that hierarchy correctly the whole time; the
|
|
74
|
+
* pickers beside it threw it away.
|
|
75
|
+
*
|
|
76
|
+
* Two robustness rules, both chosen to keep a destination REACHABLE rather
|
|
77
|
+
* than tidy:
|
|
78
|
+
*
|
|
79
|
+
* - **A folder whose parent is missing is kept, at the root.** A scoped
|
|
80
|
+
* collaborator's read set can admit a child and refuse its parent
|
|
81
|
+
* (AGL-1466), and dropping the child would remove a real destination from
|
|
82
|
+
* the menu — a worse failure than an unindented row.
|
|
83
|
+
* - **A cycle terminates.** This runs on every render of an open picker.
|
|
84
|
+
*/ export function mediaFolderChoices(folders) {
|
|
85
|
+
const byId = new Map(folders.map((folder)=>[
|
|
86
|
+
folder.$id,
|
|
87
|
+
folder
|
|
88
|
+
]));
|
|
89
|
+
/** True when the parent link leads somewhere real and does not loop back. */ const hasUsableParent = (folder)=>{
|
|
90
|
+
var _folder_parentId;
|
|
91
|
+
const seen = new Set([
|
|
92
|
+
folder.$id
|
|
93
|
+
]);
|
|
94
|
+
let cursor = (_folder_parentId = folder.parentId) != null ? _folder_parentId : null;
|
|
95
|
+
while(cursor){
|
|
96
|
+
var _parent_parentId;
|
|
97
|
+
if (seen.has(cursor)) return false;
|
|
98
|
+
const parent = byId.get(cursor);
|
|
99
|
+
if (!parent) return false;
|
|
100
|
+
seen.add(cursor);
|
|
101
|
+
cursor = (_parent_parentId = parent.parentId) != null ? _parent_parentId : null;
|
|
102
|
+
}
|
|
103
|
+
return Boolean(folder.parentId);
|
|
104
|
+
};
|
|
105
|
+
const childrenOf = new Map();
|
|
106
|
+
for (const folder of folders){
|
|
107
|
+
var _childrenOf_get;
|
|
108
|
+
// Same normalisation the rail applies: anything without a resolvable
|
|
109
|
+
// parent chain is drawn as a root rather than dropped.
|
|
110
|
+
const parent = hasUsableParent(folder) ? folder.parentId : null;
|
|
111
|
+
childrenOf.set(parent, [
|
|
112
|
+
...(_childrenOf_get = childrenOf.get(parent)) != null ? _childrenOf_get : [],
|
|
113
|
+
folder
|
|
114
|
+
]);
|
|
115
|
+
}
|
|
116
|
+
for (const siblings of childrenOf.values()){
|
|
117
|
+
siblings.sort((a, b)=>{
|
|
118
|
+
var _a_order, _b_order;
|
|
119
|
+
return ((_a_order = a.order) != null ? _a_order : 0) - ((_b_order = b.order) != null ? _b_order : 0) || String(a.name).localeCompare(String(b.name));
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const choices = [];
|
|
123
|
+
const walk = (parentId, path)=>{
|
|
124
|
+
var _childrenOf_get;
|
|
125
|
+
for (const folder of (_childrenOf_get = childrenOf.get(parentId)) != null ? _childrenOf_get : []){
|
|
126
|
+
const nextPath = [
|
|
127
|
+
...path,
|
|
128
|
+
folder.name
|
|
129
|
+
];
|
|
130
|
+
choices.push({
|
|
131
|
+
$id: folder.$id,
|
|
132
|
+
name: folder.name,
|
|
133
|
+
path: nextPath,
|
|
134
|
+
label: nextPath.join(MEDIA_FOLDER_PATH_SEPARATOR),
|
|
135
|
+
depth: nextPath.length - 1
|
|
136
|
+
});
|
|
137
|
+
walk(folder.$id, nextPath);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
walk(null, []);
|
|
141
|
+
return choices;
|
|
142
|
+
}
|
|
143
|
+
/** Nesting cap, enforced in UI and validation (root children = depth 1). */ export const MEDIA_FOLDER_MAX_DEPTH = 5;
|
|
144
|
+
export const MEDIA_FOLDER_NAME_MAX_LENGTH = 60;
|
|
145
|
+
/**
|
|
146
|
+
* Trims and collapses whitespace; null when empty or over the length cap
|
|
147
|
+
* so callers reject rather than store junk.
|
|
148
|
+
*/ export function normalizeFolderName(input) {
|
|
149
|
+
const name = String(input != null ? input : '').replace(/\s+/g, ' ').trim();
|
|
150
|
+
if (!name || name.length > MEDIA_FOLDER_NAME_MAX_LENGTH) return null;
|
|
151
|
+
return name;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Depth of a folder (root children = 1). Broken parent links and cycles
|
|
155
|
+
* both terminate: unknown parents count as root, and a revisited id stops
|
|
156
|
+
* the walk (treated as max depth so validation refuses to make it worse).
|
|
157
|
+
*/ export function folderDepth(folderId, foldersById) {
|
|
158
|
+
let depth = 0;
|
|
159
|
+
const seen = new Set();
|
|
160
|
+
let current = folderId;
|
|
161
|
+
while(current && foldersById[current]){
|
|
162
|
+
if (seen.has(current)) return MEDIA_FOLDER_MAX_DEPTH;
|
|
163
|
+
seen.add(current);
|
|
164
|
+
depth += 1;
|
|
165
|
+
current = foldersById[current].parentId;
|
|
166
|
+
}
|
|
167
|
+
return depth;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* True when re-parenting `folderId` under `newParentId` would create a
|
|
171
|
+
* cycle — i.e. the new parent is the folder itself or one of its
|
|
172
|
+
* descendants (the parent chain from `newParentId` reaches `folderId`).
|
|
173
|
+
*/ export function wouldCreateCycle(folderId, newParentId, foldersById) {
|
|
174
|
+
const seen = new Set();
|
|
175
|
+
let current = newParentId;
|
|
176
|
+
while(current){
|
|
177
|
+
var _foldersById_current;
|
|
178
|
+
if (current === folderId) return true;
|
|
179
|
+
if (seen.has(current)) return true;
|
|
180
|
+
seen.add(current);
|
|
181
|
+
current = (_foldersById_current = foldersById[current]) == null ? void 0 : _foldersById_current.parentId;
|
|
182
|
+
}
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Case-insensitive sibling-name uniqueness per parent. `excludeId` skips
|
|
187
|
+
* the folder being renamed/moved itself.
|
|
188
|
+
*/ export function isSiblingNameTaken(name, parentId, folders, excludeId) {
|
|
189
|
+
const target = name.trim().toLowerCase();
|
|
190
|
+
const parent = parentId != null ? parentId : null;
|
|
191
|
+
return folders.some((folder)=>{
|
|
192
|
+
var _folder_parentId;
|
|
193
|
+
return folder.$id !== excludeId && ((_folder_parentId = folder.parentId) != null ? _folder_parentId : null) === parent && folder.name.trim().toLowerCase() === target;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Migration plan from flat AGL-124 `folder` strings: one root folder per
|
|
198
|
+
* distinct legacy string (case-insensitive; existing root folders with a
|
|
199
|
+
* matching name are reused, not duplicated), and a `folderId` stamp for
|
|
200
|
+
* every media doc that still carries a legacy string but no `folderId`.
|
|
201
|
+
*/ export function planLegacyFolderMigration(mediaDocs, existingFolders) {
|
|
202
|
+
const existingRootNames = new Set(existingFolders.filter((folder)=>{
|
|
203
|
+
var _folder_parentId;
|
|
204
|
+
return ((_folder_parentId = folder.parentId) != null ? _folder_parentId : null) === null;
|
|
205
|
+
}).map((folder)=>folder.name.trim().toLowerCase()));
|
|
206
|
+
const toCreate = new Map();
|
|
207
|
+
const assignments = [];
|
|
208
|
+
for (const media of mediaDocs){
|
|
209
|
+
var _media_folder;
|
|
210
|
+
if (media.folderId) continue;
|
|
211
|
+
const name = normalizeFolderName((_media_folder = media.folder) != null ? _media_folder : '');
|
|
212
|
+
if (!name) continue;
|
|
213
|
+
const key = name.toLowerCase();
|
|
214
|
+
if (!existingRootNames.has(key) && !toCreate.has(key)) {
|
|
215
|
+
toCreate.set(key, name);
|
|
216
|
+
}
|
|
217
|
+
assignments.push({
|
|
218
|
+
mediaId: media.$id,
|
|
219
|
+
folderName: name
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
foldersToCreate: [
|
|
224
|
+
...toCreate.values()
|
|
225
|
+
].sort(),
|
|
226
|
+
assignments
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
//# sourceMappingURL=media-folders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/media-folders.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\n/**\n * Media folder hierarchy (AGL-171): first-class folders at\n * `hosts/{hostId}/mediaFolders/{folderId}` replacing the AGL-124 free-text\n * `folder` string on media docs. Console UI and any future API share these\n * helpers so depth/cycle/name rules can't disagree.\n *\n * Delete policy (documented per the issue): deleting a folder re-parents\n * its child folders and assets to the deleted folder's parent — nothing is\n * ever orphaned and no delete is blocked.\n */\n\nimport type { ScopeToken } from './scope-tokens'\n\nexport interface AglynMediaFolder {\n name: string\n /** Parent folder id; null/undefined = root. */\n parentId?: string | null\n /** Sibling sort position. */\n order?: number\n}\n\nexport interface NewMediaFolderInput {\n name: string\n parentId: string | null\n /**\n * `serverTimestamp()` from whichever SDK the caller holds — this module\n * stays free of both the client and admin Firestore packages.\n */\n createdAt: unknown\n /**\n * Who may see the folder (AGL-1037). **Required**, with no default: the\n * whole of AGL-1466 was two call sites that each built the document\n * inline and each forgot the field, so the type is what stops a third.\n *\n * `null` means a SITE library — `hosts/{hostId}/mediaFolders` is private\n * by construction and stores no scope, the same rule the site-export\n * import path follows and the reason `scopedToHost` refuses a host ref.\n */\n visibleTo: readonly ScopeToken[] | null\n}\n\n/**\n * The document a media folder is created with (AGL-1466).\n *\n * Every `mediaFolders` create goes through here. Before it, the console\n * wrote `{ name, parentId, createdAt }` from the NEW FOLDER button and from\n * the legacy-string migration, so a folder in an ORG library landed with no\n * `visibleTo` — and both enforcement layers fail closed on a missing field\n * (`array-contains-any` matches nothing, the rules' `hasAny` errors). The\n * result was a library that looked right on the org page and collapsed into\n * \"No folder\" the moment it was opened for a site, because the folders were\n * gone and only their files remained.\n */\nexport function newMediaFolderDoc(\n input: NewMediaFolderInput,\n): Record<string, unknown> {\n const { name, parentId, createdAt, visibleTo } = input\n // An EMPTY array is the one value that must never be stored. Unlike a\n // missing field it is a written \"visible to nobody\" — the backfill leaves\n // it alone by design and no read path treats it as legacy — so it is\n // permanent rather than repairable. Getting here means a caller computed\n // a scope and came back with nothing, which is a bug worth a stack trace\n // rather than a folder nobody will ever see again.\n if (visibleTo && !visibleTo.length) {\n throw new Error('A media folder cannot be created with an empty scope')\n }\n return {\n name,\n parentId,\n createdAt,\n ...(visibleTo ? { visibleTo: [...visibleTo] } : {}),\n }\n}\n\n/** What separates the segments of a folder path in a picker row. */\nexport const MEDIA_FOLDER_PATH_SEPARATOR = ' / '\n\n/** One row of a folder picker (AGL-1470). */\nexport interface MediaFolderChoice {\n $id: string\n /** The folder's own name, for a caller that indents instead. */\n name: string\n /** Ancestors then self: `['Blog', 'Covers']`. */\n path: string[]\n /** `Blog / Covers` — what a picker row must show. */\n label: string\n /** 0 for a root folder; an indent level. */\n depth: number\n}\n\n/**\n * The folder list a PICKER may show (AGL-1470).\n *\n * A picker that shows bare names is not merely terse. Duplicate names across\n * parents are normal — `Covers`, `Images`, `Archive`, `2026` — and with\n * `Blog/Covers` and `Press/Covers` both present, MOVE TO FOLDER… drew two\n * rows reading exactly `Covers`. Choosing the wrong one is **silent**: a move\n * is copy-then-delete, so the object is rewritten under a different prefix,\n * and because every reference to it is by id, nothing breaks. No error, no\n * missing image — the file is simply filed where nobody will look for it, and\n * the mistake is undetectable from the site.\n *\n * So the label carries the whole path, and the order is the sidebar's:\n * depth-first, each child directly under its parent, siblings by `order` then\n * name. The rail computed that hierarchy correctly the whole time; the\n * pickers beside it threw it away.\n *\n * Two robustness rules, both chosen to keep a destination REACHABLE rather\n * than tidy:\n *\n * - **A folder whose parent is missing is kept, at the root.** A scoped\n * collaborator's read set can admit a child and refuse its parent\n * (AGL-1466), and dropping the child would remove a real destination from\n * the menu — a worse failure than an unindented row.\n * - **A cycle terminates.** This runs on every render of an open picker.\n */\nexport function mediaFolderChoices(\n folders: ReadonlyArray<AglynMediaFolder & { $id: string }>,\n): MediaFolderChoice[] {\n const byId = new Map(folders.map((folder) => [folder.$id, folder]))\n /** True when the parent link leads somewhere real and does not loop back. */\n const hasUsableParent = (folder: AglynMediaFolder & { $id: string }) => {\n const seen = new Set<string>([folder.$id])\n let cursor = folder.parentId ?? null\n while (cursor) {\n if (seen.has(cursor)) return false\n const parent = byId.get(cursor)\n if (!parent) return false\n seen.add(cursor)\n cursor = parent.parentId ?? null\n }\n return Boolean(folder.parentId)\n }\n const childrenOf = new Map<string | null, Array<AglynMediaFolder & { $id: string }>>()\n for (const folder of folders) {\n // Same normalisation the rail applies: anything without a resolvable\n // parent chain is drawn as a root rather than dropped.\n const parent = hasUsableParent(folder) ? (folder.parentId as string) : null\n childrenOf.set(parent, [...(childrenOf.get(parent) ?? []), folder])\n }\n for (const siblings of childrenOf.values()) {\n siblings.sort(\n (a, b) =>\n (a.order ?? 0) - (b.order ?? 0) ||\n String(a.name).localeCompare(String(b.name)),\n )\n }\n const choices: MediaFolderChoice[] = []\n const walk = (parentId: string | null, path: string[]) => {\n for (const folder of childrenOf.get(parentId) ?? []) {\n const nextPath = [...path, folder.name]\n choices.push({\n $id: folder.$id,\n name: folder.name,\n path: nextPath,\n label: nextPath.join(MEDIA_FOLDER_PATH_SEPARATOR),\n depth: nextPath.length - 1,\n })\n walk(folder.$id, nextPath)\n }\n }\n walk(null, [])\n return choices\n}\n\n/** Nesting cap, enforced in UI and validation (root children = depth 1). */\nexport const MEDIA_FOLDER_MAX_DEPTH = 5\n\nexport const MEDIA_FOLDER_NAME_MAX_LENGTH = 60\n\n/**\n * Trims and collapses whitespace; null when empty or over the length cap\n * so callers reject rather than store junk.\n */\nexport function normalizeFolderName(input: string): string | null {\n const name = String(input ?? '')\n .replace(/\\s+/g, ' ')\n .trim()\n if (!name || name.length > MEDIA_FOLDER_NAME_MAX_LENGTH) return null\n return name\n}\n\n/**\n * Depth of a folder (root children = 1). Broken parent links and cycles\n * both terminate: unknown parents count as root, and a revisited id stops\n * the walk (treated as max depth so validation refuses to make it worse).\n */\nexport function folderDepth(\n folderId: string,\n foldersById: Record<string, AglynMediaFolder>,\n): number {\n let depth = 0\n const seen = new Set<string>()\n let current: string | null | undefined = folderId\n while (current && foldersById[current]) {\n if (seen.has(current)) return MEDIA_FOLDER_MAX_DEPTH\n seen.add(current)\n depth += 1\n current = foldersById[current].parentId\n }\n return depth\n}\n\n/**\n * True when re-parenting `folderId` under `newParentId` would create a\n * cycle — i.e. the new parent is the folder itself or one of its\n * descendants (the parent chain from `newParentId` reaches `folderId`).\n */\nexport function wouldCreateCycle(\n folderId: string,\n newParentId: string | null | undefined,\n foldersById: Record<string, AglynMediaFolder>,\n): boolean {\n const seen = new Set<string>()\n let current: string | null | undefined = newParentId\n while (current) {\n if (current === folderId) return true\n if (seen.has(current)) return true\n seen.add(current)\n current = foldersById[current]?.parentId\n }\n return false\n}\n\n/**\n * Case-insensitive sibling-name uniqueness per parent. `excludeId` skips\n * the folder being renamed/moved itself.\n */\nexport function isSiblingNameTaken(\n name: string,\n parentId: string | null | undefined,\n folders: Array<AglynMediaFolder & { $id: string }>,\n excludeId?: string,\n): boolean {\n const target = name.trim().toLowerCase()\n const parent = parentId ?? null\n return folders.some(\n (folder) =>\n folder.$id !== excludeId &&\n (folder.parentId ?? null) === parent &&\n folder.name.trim().toLowerCase() === target,\n )\n}\n\nexport interface LegacyFolderMigrationPlan {\n /** Root-level folder names that must be created (deduped, ordered). */\n foldersToCreate: string[]\n /**\n * Media doc id → legacy folder name (lower-cased key match against\n * created/existing root folders happens at execution time).\n */\n assignments: Array<{ mediaId: string; folderName: string }>\n}\n\n/**\n * Migration plan from flat AGL-124 `folder` strings: one root folder per\n * distinct legacy string (case-insensitive; existing root folders with a\n * matching name are reused, not duplicated), and a `folderId` stamp for\n * every media doc that still carries a legacy string but no `folderId`.\n */\nexport function planLegacyFolderMigration(\n mediaDocs: Array<{ $id: string; folder?: string; folderId?: string | null }>,\n existingFolders: Array<AglynMediaFolder & { $id: string }>,\n): LegacyFolderMigrationPlan {\n const existingRootNames = new Set(\n existingFolders\n .filter((folder) => (folder.parentId ?? null) === null)\n .map((folder) => folder.name.trim().toLowerCase()),\n )\n const toCreate = new Map<string, string>()\n const assignments: LegacyFolderMigrationPlan['assignments'] = []\n for (const media of mediaDocs) {\n if (media.folderId) continue\n const name = normalizeFolderName(media.folder ?? '')\n if (!name) continue\n const key = name.toLowerCase()\n if (!existingRootNames.has(key) && !toCreate.has(key)) {\n toCreate.set(key, name)\n }\n assignments.push({ mediaId: media.$id, folderName: name })\n }\n return {\n foldersToCreate: [...toCreate.values()].sort(),\n assignments,\n }\n}\n"],"names":["newMediaFolderDoc","input","name","parentId","createdAt","visibleTo","length","Error","MEDIA_FOLDER_PATH_SEPARATOR","mediaFolderChoices","folders","byId","Map","map","folder","$id","hasUsableParent","seen","Set","cursor","parent","has","get","add","Boolean","childrenOf","set","siblings","values","sort","a","b","order","String","localeCompare","choices","walk","path","nextPath","push","label","join","depth","MEDIA_FOLDER_MAX_DEPTH","MEDIA_FOLDER_NAME_MAX_LENGTH","normalizeFolderName","replace","trim","folderDepth","folderId","foldersById","current","wouldCreateCycle","newParentId","isSiblingNameTaken","excludeId","target","toLowerCase","some","planLegacyFolderMigration","mediaDocs","existingFolders","existingRootNames","filter","toCreate","assignments","media","key","mediaId","folderName","foldersToCreate"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;CASC;AAgCD;;;;;;;;;;;CAWC,GACD,OAAO,SAASA,kBACdC,KAA0B;IAE1B,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGJ;IACjD,sEAAsE;IACtE,0EAA0E;IAC1E,qEAAqE;IACrE,yEAAyE;IACzE,yEAAyE;IACzE,mDAAmD;IACnD,IAAII,aAAa,CAACA,UAAUC,MAAM,EAAE;QAClC,MAAM,IAAIC,MAAM;IAClB;IACA,OAAO;QACLL;QACAC;QACAC;OACIC,YAAY;QAAEA,WAAW;eAAIA;SAAU;IAAC,IAAI,CAAC;AAErD;AAEA,kEAAkE,GAClE,OAAO,MAAMG,8BAA8B,MAAK;AAehD;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,SAASC,mBACdC,OAA0D;IAE1D,MAAMC,OAAO,IAAIC,IAAIF,QAAQG,GAAG,CAAC,CAACC,SAAW;YAACA,OAAOC,GAAG;YAAED;SAAO;IACjE,2EAA2E,GAC3E,MAAME,kBAAkB,CAACF;YAEVA;QADb,MAAMG,OAAO,IAAIC,IAAY;YAACJ,OAAOC,GAAG;SAAC;QACzC,IAAII,UAASL,mBAAAA,OAAOX,QAAQ,YAAfW,mBAAmB;QAChC,MAAOK,OAAQ;gBAKJC;YAJT,IAAIH,KAAKI,GAAG,CAACF,SAAS,OAAO;YAC7B,MAAMC,SAAST,KAAKW,GAAG,CAACH;YACxB,IAAI,CAACC,QAAQ,OAAO;YACpBH,KAAKM,GAAG,CAACJ;YACTA,UAASC,mBAAAA,OAAOjB,QAAQ,YAAfiB,mBAAmB;QAC9B;QACA,OAAOI,QAAQV,OAAOX,QAAQ;IAChC;IACA,MAAMsB,aAAa,IAAIb;IACvB,KAAK,MAAME,UAAUJ,QAAS;YAIAe;QAH5B,qEAAqE;QACrE,uDAAuD;QACvD,MAAML,SAASJ,gBAAgBF,UAAWA,OAAOX,QAAQ,GAAc;QACvEsB,WAAWC,GAAG,CAACN,QAAQ;gBAAKK,kBAAAA,WAAWH,GAAG,CAACF,mBAAfK,kBAA0B,EAAE;YAAGX;SAAO;IACpE;IACA,KAAK,MAAMa,YAAYF,WAAWG,MAAM,GAAI;QAC1CD,SAASE,IAAI,CACX,CAACC,GAAGC;gBACDD,UAAiBC;mBAAlB,EAACD,WAAAA,EAAEE,KAAK,YAAPF,WAAW,OAAMC,WAAAA,EAAEC,KAAK,YAAPD,WAAW,MAC7BE,OAAOH,EAAE5B,IAAI,EAAEgC,aAAa,CAACD,OAAOF,EAAE7B,IAAI;;IAEhD;IACA,MAAMiC,UAA+B,EAAE;IACvC,MAAMC,OAAO,CAACjC,UAAyBkC;YAChBZ;QAArB,KAAK,MAAMX,WAAUW,kBAAAA,WAAWH,GAAG,CAACnB,qBAAfsB,kBAA4B,EAAE,CAAE;YACnD,MAAMa,WAAW;mBAAID;gBAAMvB,OAAOZ,IAAI;aAAC;YACvCiC,QAAQI,IAAI,CAAC;gBACXxB,KAAKD,OAAOC,GAAG;gBACfb,MAAMY,OAAOZ,IAAI;gBACjBmC,MAAMC;gBACNE,OAAOF,SAASG,IAAI,CAACjC;gBACrBkC,OAAOJ,SAAShC,MAAM,GAAG;YAC3B;YACA8B,KAAKtB,OAAOC,GAAG,EAAEuB;QACnB;IACF;IACAF,KAAK,MAAM,EAAE;IACb,OAAOD;AACT;AAEA,0EAA0E,GAC1E,OAAO,MAAMQ,yBAAyB,EAAC;AAEvC,OAAO,MAAMC,+BAA+B,GAAE;AAE9C;;;CAGC,GACD,OAAO,SAASC,oBAAoB5C,KAAa;IAC/C,MAAMC,OAAO+B,OAAOhC,gBAAAA,QAAS,IAC1B6C,OAAO,CAAC,QAAQ,KAChBC,IAAI;IACP,IAAI,CAAC7C,QAAQA,KAAKI,MAAM,GAAGsC,8BAA8B,OAAO;IAChE,OAAO1C;AACT;AAEA;;;;CAIC,GACD,OAAO,SAAS8C,YACdC,QAAgB,EAChBC,WAA6C;IAE7C,IAAIR,QAAQ;IACZ,MAAMzB,OAAO,IAAIC;IACjB,IAAIiC,UAAqCF;IACzC,MAAOE,WAAWD,WAAW,CAACC,QAAQ,CAAE;QACtC,IAAIlC,KAAKI,GAAG,CAAC8B,UAAU,OAAOR;QAC9B1B,KAAKM,GAAG,CAAC4B;QACTT,SAAS;QACTS,UAAUD,WAAW,CAACC,QAAQ,CAAChD,QAAQ;IACzC;IACA,OAAOuC;AACT;AAEA;;;;CAIC,GACD,OAAO,SAASU,iBACdH,QAAgB,EAChBI,WAAsC,EACtCH,WAA6C;IAE7C,MAAMjC,OAAO,IAAIC;IACjB,IAAIiC,UAAqCE;IACzC,MAAOF,QAAS;YAIJD;QAHV,IAAIC,YAAYF,UAAU,OAAO;QACjC,IAAIhC,KAAKI,GAAG,CAAC8B,UAAU,OAAO;QAC9BlC,KAAKM,GAAG,CAAC4B;QACTA,WAAUD,uBAAAA,WAAW,CAACC,QAAQ,qBAApBD,qBAAsB/C,QAAQ;IAC1C;IACA,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,SAASmD,mBACdpD,IAAY,EACZC,QAAmC,EACnCO,OAAkD,EAClD6C,SAAkB;IAElB,MAAMC,SAAStD,KAAK6C,IAAI,GAAGU,WAAW;IACtC,MAAMrC,SAASjB,mBAAAA,WAAY;IAC3B,OAAOO,QAAQgD,IAAI,CACjB,CAAC5C;YAEEA;eADDA,OAAOC,GAAG,KAAKwC,aACf,EAACzC,mBAAAA,OAAOX,QAAQ,YAAfW,mBAAmB,UAAUM,UAC9BN,OAAOZ,IAAI,CAAC6C,IAAI,GAAGU,WAAW,OAAOD;;AAE3C;AAYA;;;;;CAKC,GACD,OAAO,SAASG,0BACdC,SAA4E,EAC5EC,eAA0D;IAE1D,MAAMC,oBAAoB,IAAI5C,IAC5B2C,gBACGE,MAAM,CAAC,CAACjD;YAAYA;eAAD,EAACA,mBAAAA,OAAOX,QAAQ,YAAfW,mBAAmB,UAAU;OACjDD,GAAG,CAAC,CAACC,SAAWA,OAAOZ,IAAI,CAAC6C,IAAI,GAAGU,WAAW;IAEnD,MAAMO,WAAW,IAAIpD;IACrB,MAAMqD,cAAwD,EAAE;IAChE,KAAK,MAAMC,SAASN,UAAW;YAEIM;QADjC,IAAIA,MAAMjB,QAAQ,EAAE;QACpB,MAAM/C,OAAO2C,qBAAoBqB,gBAAAA,MAAMpD,MAAM,YAAZoD,gBAAgB;QACjD,IAAI,CAAChE,MAAM;QACX,MAAMiE,MAAMjE,KAAKuD,WAAW;QAC5B,IAAI,CAACK,kBAAkBzC,GAAG,CAAC8C,QAAQ,CAACH,SAAS3C,GAAG,CAAC8C,MAAM;YACrDH,SAAStC,GAAG,CAACyC,KAAKjE;QACpB;QACA+D,YAAY1B,IAAI,CAAC;YAAE6B,SAASF,MAAMnD,GAAG;YAAEsD,YAAYnE;QAAK;IAC1D;IACA,OAAO;QACLoE,iBAAiB;eAAIN,SAASpC,MAAM;SAAG,CAACC,IAAI;QAC5CoC;IACF;AACF"}
|