@aglyn/aglyn 1.0.0-beta.218 → 1.0.0-beta.220
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/package.json +12 -12
- package/src/lib/app-utils/actions.d.ts +26 -433
- package/src/lib/app-utils/actions.js +108 -633
- package/src/lib/app-utils/actions.js.map +1 -1
- package/src/lib/app-utils/activity-presenter.d.ts +3 -3
- package/src/lib/app-utils/activity-presenter.js +36 -52
- package/src/lib/app-utils/activity-presenter.js.map +1 -1
- package/src/lib/app-utils/analytics-events.d.ts +1 -1
- package/src/lib/app-utils/analytics-events.js.map +1 -1
- package/src/lib/app-utils/analytics-provider.d.ts +182 -0
- package/src/lib/app-utils/analytics-provider.js +133 -0
- package/src/lib/app-utils/analytics-provider.js.map +1 -0
- package/src/lib/app-utils/api-plugins.d.ts +46 -0
- package/src/lib/app-utils/api-plugins.js +19 -0
- package/src/lib/app-utils/api-plugins.js.map +1 -1
- package/src/lib/app-utils/{marketplace-overrides.d.ts → artifact-overrides.d.ts} +9 -6
- package/src/lib/app-utils/{marketplace-overrides.js → artifact-overrides.js} +10 -7
- package/src/lib/app-utils/artifact-overrides.js.map +1 -0
- package/src/lib/app-utils/{marketplace-provenance.d.ts → artifact-provenance.d.ts} +12 -10
- package/src/lib/app-utils/{marketplace-provenance.js → artifact-provenance.js} +9 -7
- package/src/lib/app-utils/artifact-provenance.js.map +1 -0
- package/src/lib/app-utils/binding-token-catalog.d.ts +5 -13
- package/src/lib/app-utils/binding-token-catalog.js +17 -41
- package/src/lib/app-utils/binding-token-catalog.js.map +1 -1
- package/src/lib/app-utils/brand-support-line.d.ts +36 -0
- package/src/lib/app-utils/brand-support-line.js +38 -0
- package/src/lib/app-utils/brand-support-line.js.map +1 -0
- package/src/lib/app-utils/collection-entries.d.ts +2 -2
- package/src/lib/app-utils/collection-entries.js.map +1 -1
- package/src/lib/app-utils/consent-group-change.d.ts +4 -0
- package/src/lib/app-utils/consent-group-change.js.map +1 -1
- package/src/lib/app-utils/consent-groups.d.ts +1 -1
- package/src/lib/app-utils/consent-groups.js.map +1 -1
- package/src/lib/app-utils/console-routes.d.ts +15 -42
- package/src/lib/app-utils/console-routes.js +10 -39
- package/src/lib/app-utils/console-routes.js.map +1 -1
- package/src/lib/app-utils/contacts.d.ts +24 -2
- package/src/lib/app-utils/contacts.js +21 -5
- package/src/lib/app-utils/contacts.js.map +1 -1
- package/src/lib/app-utils/container-membership.d.ts +93 -0
- package/src/lib/app-utils/container-membership.js +165 -0
- package/src/lib/app-utils/container-membership.js.map +1 -0
- package/src/lib/app-utils/crm-task-reminders.d.ts +23 -6
- package/src/lib/app-utils/crm-task-reminders.js +32 -11
- package/src/lib/app-utils/crm-task-reminders.js.map +1 -1
- package/src/lib/app-utils/crm.d.ts +24 -4
- package/src/lib/app-utils/crm.js +23 -0
- package/src/lib/app-utils/crm.js.map +1 -1
- package/src/lib/app-utils/cross-pool-desync.d.ts +39 -0
- package/src/lib/app-utils/cross-pool-desync.js +47 -0
- package/src/lib/app-utils/cross-pool-desync.js.map +1 -0
- package/src/lib/app-utils/csv-upload.d.ts +29 -0
- package/src/lib/app-utils/csv-upload.js +29 -0
- package/src/lib/app-utils/csv-upload.js.map +1 -0
- package/src/lib/app-utils/{dataset-csv.d.ts → csv.d.ts} +10 -43
- package/src/lib/app-utils/{dataset-csv.js → csv.js} +10 -81
- package/src/lib/app-utils/csv.js.map +1 -0
- package/src/lib/app-utils/dataset-models.d.ts +5 -5
- package/src/lib/app-utils/dataset-models.js +19 -2
- package/src/lib/app-utils/dataset-models.js.map +1 -1
- package/src/lib/app-utils/datasets.d.ts +65 -30
- package/src/lib/app-utils/datasets.js +74 -24
- package/src/lib/app-utils/datasets.js.map +1 -1
- package/src/lib/app-utils/docs-deflection.d.ts +6 -6
- package/src/lib/app-utils/docs-deflection.js.map +1 -1
- package/src/lib/app-utils/docs-help.generated.d.ts +14 -8
- package/src/lib/app-utils/docs-help.generated.js +23 -6
- package/src/lib/app-utils/docs-help.generated.js.map +1 -1
- package/src/lib/app-utils/docs-index.generated.d.ts +2 -2
- package/src/lib/app-utils/docs-index.generated.js +570 -346
- package/src/lib/app-utils/docs-index.generated.js.map +1 -1
- package/src/lib/app-utils/docs-retrieval.d.ts +3 -3
- package/src/lib/app-utils/docs-retrieval.js +14 -10
- package/src/lib/app-utils/docs-retrieval.js.map +1 -1
- package/src/lib/app-utils/duplicate-resource.d.ts +4 -1
- package/src/lib/app-utils/duplicate-resource.js +7 -4
- package/src/lib/app-utils/duplicate-resource.js.map +1 -1
- package/src/lib/app-utils/dynamic-list-rule.d.ts +1 -1
- package/src/lib/app-utils/dynamic-list-rule.js +3 -3
- package/src/lib/app-utils/dynamic-list-rule.js.map +1 -1
- package/src/lib/app-utils/element-ui.d.ts +1 -1
- package/src/lib/app-utils/element-ui.js +1 -1
- package/src/lib/app-utils/element-ui.js.map +1 -1
- package/src/lib/app-utils/email-starter-policy.js +3 -3
- package/src/lib/app-utils/email-starter-policy.js.map +1 -1
- package/src/lib/app-utils/email-text.d.ts +80 -0
- package/src/lib/app-utils/email-text.js +189 -0
- package/src/lib/app-utils/email-text.js.map +1 -0
- package/src/lib/app-utils/{list-assignment-policy.d.ts → enrollment-basis.d.ts} +4 -0
- package/src/lib/app-utils/{list-assignment-policy.js → enrollment-basis.js} +5 -1
- package/src/lib/app-utils/enrollment-basis.js.map +1 -0
- package/src/lib/app-utils/entity-picker-context.d.ts +10 -5
- package/src/lib/app-utils/entity-picker-context.js.map +1 -1
- package/src/lib/app-utils/error-beacon.d.ts +75 -6
- package/src/lib/app-utils/error-beacon.js +160 -21
- package/src/lib/app-utils/error-beacon.js.map +1 -1
- package/src/lib/app-utils/expand-repeatables.d.ts +10 -10
- package/src/lib/app-utils/expand-repeatables.js +14 -14
- package/src/lib/app-utils/expand-repeatables.js.map +1 -1
- package/src/lib/app-utils/forms.js +2 -2
- package/src/lib/app-utils/forms.js.map +1 -1
- package/src/lib/app-utils/health-report.d.ts +2 -3
- package/src/lib/app-utils/health-report.js +8 -6
- package/src/lib/app-utils/health-report.js.map +1 -1
- package/src/lib/app-utils/host-events.d.ts +82 -0
- package/src/lib/app-utils/host-events.js +62 -0
- package/src/lib/app-utils/host-events.js.map +1 -0
- package/src/lib/app-utils/inbound-mail-domain.d.ts +27 -0
- package/src/lib/app-utils/inbound-mail-domain.js +31 -0
- package/src/lib/app-utils/inbound-mail-domain.js.map +1 -0
- package/src/lib/app-utils/lockdown.d.ts +11 -0
- package/src/lib/app-utils/lockdown.js +33 -3
- package/src/lib/app-utils/lockdown.js.map +1 -1
- package/src/lib/app-utils/margin-utilization.d.ts +4 -69
- package/src/lib/app-utils/margin-utilization.js +82 -69
- package/src/lib/app-utils/margin-utilization.js.map +1 -1
- package/src/lib/app-utils/member-email-aliases.d.ts +25 -0
- package/src/lib/app-utils/member-email-aliases.js +29 -0
- package/src/lib/app-utils/member-email-aliases.js.map +1 -1
- package/src/lib/app-utils/node-definition-sanitizer.d.ts +16 -16
- package/src/lib/app-utils/node-definition-sanitizer.js +24 -20
- package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -1
- package/src/lib/app-utils/node-interactions.d.ts +7 -7
- package/src/lib/app-utils/node-interactions.js.map +1 -1
- package/src/lib/app-utils/notifications.d.ts +147 -47
- package/src/lib/app-utils/notifications.js +182 -44
- package/src/lib/app-utils/notifications.js.map +1 -1
- package/src/lib/app-utils/operator-alerts.d.ts +15 -1
- package/src/lib/app-utils/operator-alerts.js +47 -10
- package/src/lib/app-utils/operator-alerts.js.map +1 -1
- package/src/lib/app-utils/payments-configured.d.ts +8 -21
- package/src/lib/app-utils/payments-configured.js +8 -23
- package/src/lib/app-utils/payments-configured.js.map +1 -1
- package/src/lib/app-utils/plan-entitlements.d.ts +207 -306
- package/src/lib/app-utils/plan-entitlements.js +345 -528
- package/src/lib/app-utils/plan-entitlements.js.map +1 -1
- package/src/lib/app-utils/platform-brand.d.ts +10 -0
- package/src/lib/app-utils/platform-brand.js +14 -3
- package/src/lib/app-utils/platform-brand.js.map +1 -1
- package/src/lib/app-utils/platform-marketing-consent.d.ts +56 -2
- package/src/lib/app-utils/platform-marketing-consent.js +6 -5
- package/src/lib/app-utils/platform-marketing-consent.js.map +1 -1
- package/src/lib/app-utils/plugin-api-rate-limit.d.ts +7 -1
- package/src/lib/app-utils/plugin-api-rate-limit.js +11 -3
- package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -1
- package/src/lib/app-utils/plugin-bundle-checks.js +2 -2
- package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -1
- package/src/lib/app-utils/plugin-host-events.generated.d.ts +12 -0
- package/src/lib/app-utils/plugin-host-events.generated.js +169 -0
- package/src/lib/app-utils/plugin-host-events.generated.js.map +1 -0
- package/src/lib/app-utils/plugin-release-flags.generated.d.ts +12 -0
- package/src/lib/app-utils/plugin-release-flags.generated.js +106 -0
- package/src/lib/app-utils/plugin-release-flags.generated.js.map +1 -0
- package/src/lib/app-utils/plugin-starter-templates.generated.d.ts +12 -0
- package/src/lib/app-utils/plugin-starter-templates.generated.js +711 -0
- package/src/lib/app-utils/plugin-starter-templates.generated.js.map +1 -0
- package/src/lib/app-utils/realm-host-surface.generated.js +2 -0
- package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
- package/src/lib/app-utils/release-flags.d.ts +14 -5
- package/src/lib/app-utils/release-flags.js +21 -125
- package/src/lib/app-utils/release-flags.js.map +1 -1
- package/src/lib/app-utils/repeat-query.d.ts +56 -0
- package/src/lib/app-utils/{dataset-query.js → repeat-query.js} +16 -16
- package/src/lib/app-utils/repeat-query.js.map +1 -0
- package/src/lib/app-utils/repeat-sources.d.ts +9 -0
- package/src/lib/app-utils/repeat-sources.js.map +1 -1
- package/src/lib/app-utils/retained-refusals.d.ts +73 -0
- package/src/lib/app-utils/retained-refusals.js +186 -0
- package/src/lib/app-utils/retained-refusals.js.map +1 -0
- package/src/lib/app-utils/scope-tokens.d.ts +27 -0
- package/src/lib/app-utils/scope-tokens.js +61 -0
- package/src/lib/app-utils/scope-tokens.js.map +1 -1
- package/src/lib/app-utils/screen-link-context.js +3 -3
- package/src/lib/app-utils/screen-link-context.js.map +1 -1
- package/src/lib/app-utils/screen-route.js +1 -1
- package/src/lib/app-utils/screen-route.js.map +1 -1
- package/src/lib/app-utils/seo-audit.d.ts +132 -0
- package/src/lib/app-utils/seo-audit.js +246 -0
- package/src/lib/app-utils/seo-audit.js.map +1 -0
- package/src/lib/app-utils/seo-keywords.d.ts +48 -0
- package/src/lib/app-utils/seo-keywords.js +60 -0
- package/src/lib/app-utils/seo-keywords.js.map +1 -0
- package/src/lib/app-utils/seo-page-facts.d.ts +66 -0
- package/src/lib/app-utils/seo-page-facts.js +155 -0
- package/src/lib/app-utils/seo-page-facts.js.map +1 -0
- package/src/lib/app-utils/seo-site-scan.d.ts +126 -0
- package/src/lib/app-utils/seo-site-scan.js +162 -0
- package/src/lib/app-utils/seo-site-scan.js.map +1 -0
- package/src/lib/app-utils/seo-title-variables.js +1 -1
- package/src/lib/app-utils/seo-title-variables.js.map +1 -1
- package/src/lib/app-utils/server.d.ts +13 -18
- package/src/lib/app-utils/server.js +33 -51
- package/src/lib/app-utils/server.js.map +1 -1
- package/src/lib/app-utils/site-interactions.d.ts +501 -0
- package/src/lib/app-utils/site-interactions.js +554 -0
- package/src/lib/app-utils/site-interactions.js.map +1 -0
- package/src/lib/app-utils/{marketplace-theme.d.ts → site-theme.d.ts} +13 -2
- package/src/lib/app-utils/{marketplace-theme.js → site-theme.js} +2 -2
- package/src/lib/app-utils/site-theme.js.map +1 -0
- package/src/lib/app-utils/sitemap.d.ts +4 -3
- package/src/lib/app-utils/sitemap.js +9 -7
- package/src/lib/app-utils/sitemap.js.map +1 -1
- package/src/lib/app-utils/stale-build-error.d.ts +51 -0
- package/src/lib/app-utils/stale-build-error.js +100 -1
- package/src/lib/app-utils/stale-build-error.js.map +1 -1
- package/src/lib/app-utils/starter-template-nodes.d.ts +137 -0
- package/src/lib/app-utils/starter-template-nodes.js +129 -0
- package/src/lib/app-utils/starter-template-nodes.js.map +1 -0
- package/src/lib/app-utils/starter-templates.d.ts +11 -34
- package/src/lib/app-utils/starter-templates.js +19 -230
- package/src/lib/app-utils/starter-templates.js.map +1 -1
- package/src/lib/app-utils/{email-topics.d.ts → subscription-topics.d.ts} +64 -48
- package/src/lib/app-utils/{email-topics.js → subscription-topics.js} +39 -109
- package/src/lib/app-utils/subscription-topics.js.map +1 -0
- package/src/lib/app-utils/tax-jurisdiction-figures.d.ts +118 -0
- package/src/lib/app-utils/tax-jurisdiction-figures.js +123 -0
- package/src/lib/app-utils/tax-jurisdiction-figures.js.map +1 -0
- package/src/lib/app-utils/theme-library.d.ts +10 -3
- package/src/lib/app-utils/theme-library.js +13 -4
- package/src/lib/app-utils/theme-library.js.map +1 -1
- package/src/lib/app-utils/usage-budget.d.ts +73 -188
- package/src/lib/app-utils/usage-budget.js +58 -194
- package/src/lib/app-utils/usage-budget.js.map +1 -1
- package/src/lib/app-utils/{campaign-attribution.d.ts → utm-attribution.d.ts} +11 -6
- package/src/lib/app-utils/{campaign-attribution.js → utm-attribution.js} +13 -8
- package/src/lib/app-utils/utm-attribution.js.map +1 -0
- package/src/lib/app-utils/{campaign-forwarding.d.ts → utm-forwarding.d.ts} +14 -14
- package/src/lib/app-utils/{campaign-forwarding.js → utm-forwarding.js} +26 -26
- package/src/lib/app-utils/utm-forwarding.js.map +1 -0
- package/src/lib/app-utils/{campaign-touch.d.ts → utm-touch.d.ts} +25 -17
- package/src/lib/app-utils/{campaign-touch.js → utm-touch.js} +38 -30
- package/src/lib/app-utils/utm-touch.js.map +1 -0
- package/src/lib/app-utils/variables.d.ts +9 -9
- package/src/lib/app-utils/variables.js.map +1 -1
- package/src/lib/app-utils/video-object.js +6 -5
- package/src/lib/app-utils/video-object.js.map +1 -1
- package/src/lib/app-utils/visitor-consent.d.ts +41 -164
- package/src/lib/app-utils/visitor-consent.js +66 -277
- package/src/lib/app-utils/visitor-consent.js.map +1 -1
- package/src/lib/app-utils/visitor-record-ceiling.d.ts +32 -0
- package/src/lib/app-utils/visitor-record-ceiling.js +39 -0
- package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -1
- package/src/lib/app-utils/web-vitals-rum.d.ts +7 -7
- package/src/lib/app-utils/web-vitals-rum.js +31 -63
- package/src/lib/app-utils/web-vitals-rum.js.map +1 -1
- package/src/lib/app-utils/where-used.d.ts +11 -6
- package/src/lib/app-utils/where-used.js +3 -8
- package/src/lib/app-utils/where-used.js.map +1 -1
- package/src/lib/foundation/definitions/components.types.d.ts +1 -1
- package/src/lib/foundation/definitions/components.types.js +1 -1
- package/src/lib/foundation/definitions/components.types.js.map +1 -1
- package/src/lib/foundation/definitions/org-billing.types.d.ts +11 -137
- package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
- package/src/lib/foundation/definitions/organization.types.d.ts +1 -3
- package/src/lib/foundation/definitions/organization.types.js.map +1 -1
- package/src/lib/foundation/definitions/platform.types.d.ts +11 -5
- package/src/lib/foundation/definitions/platform.types.js.map +1 -1
- package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +16 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js +20 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -1
- package/src/lib/foundation/index.d.ts +1 -1
- package/src/lib/foundation/index.js.map +1 -1
- package/src/lib/plugin-manager/besigner-documents.d.ts +96 -0
- package/src/lib/plugin-manager/besigner-documents.js +61 -0
- package/src/lib/plugin-manager/besigner-documents.js.map +1 -0
- package/src/lib/plugin-manager/computed-variables.d.ts +71 -0
- package/src/lib/plugin-manager/computed-variables.js +74 -0
- package/src/lib/plugin-manager/computed-variables.js.map +1 -0
- package/src/lib/plugin-manager/custom-fields.d.ts +29 -2
- package/src/lib/plugin-manager/custom-fields.js +47 -1
- package/src/lib/plugin-manager/custom-fields.js.map +1 -1
- package/src/lib/plugin-manager/feature-plugins.d.ts +372 -99
- package/src/lib/plugin-manager/feature-plugins.js +126 -51
- package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +134 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js +840 -10
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
- package/src/lib/plugin-manager/index.d.ts +0 -1
- package/src/lib/plugin-manager/index.js +0 -1
- package/src/lib/plugin-manager/index.js.map +1 -1
- package/src/lib/plugin-manager/plugin-activity-actions.d.ts +12 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js +25 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -1
- package/src/lib/plugin-manager/plugin-contact-capture.d.ts +9 -4
- package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
- package/src/lib/plugin-manager/plugin-containers.d.ts +68 -0
- package/src/lib/plugin-manager/plugin-containers.generated.d.ts +10 -0
- package/src/lib/plugin-manager/plugin-containers.generated.js +20 -0
- package/src/lib/plugin-manager/plugin-containers.generated.js.map +1 -0
- package/src/lib/plugin-manager/plugin-containers.js +27 -0
- package/src/lib/plugin-manager/plugin-containers.js.map +1 -0
- package/src/lib/plugin-manager/plugin-contributions.d.ts +1 -1
- package/src/lib/plugin-manager/plugin-contributions.js.map +1 -1
- package/src/lib/plugin-manager/plugin-declarations-repair.d.ts +36 -0
- package/src/lib/plugin-manager/plugin-declarations-repair.js +64 -0
- package/src/lib/plugin-manager/plugin-declarations-repair.js.map +1 -0
- package/src/lib/plugin-manager/plugin-dependents.d.ts +101 -0
- package/src/lib/plugin-manager/plugin-dependents.js +75 -0
- package/src/lib/plugin-manager/plugin-dependents.js.map +1 -0
- package/src/lib/plugin-manager/plugin-distribution.d.ts +55 -0
- package/src/lib/plugin-manager/plugin-distribution.js +45 -0
- package/src/lib/plugin-manager/plugin-distribution.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entitlements.d.ts +8 -0
- package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -1
- package/src/lib/plugin-manager/plugin-host-collections.d.ts +17 -0
- package/src/lib/plugin-manager/plugin-host-collections.js +6 -0
- package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -1
- package/src/lib/plugin-manager/plugin-host-resources.d.ts +133 -0
- package/src/lib/plugin-manager/plugin-host-resources.js +52 -0
- package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-membership-detach.js +1 -1
- package/src/lib/plugin-manager/plugin-membership-detach.js.map +1 -1
- package/src/lib/plugin-manager/plugin-org-erasure.d.ts +28 -2
- package/src/lib/plugin-manager/plugin-org-erasure.js +61 -2
- package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
- package/src/lib/plugin-manager/plugin-plan-entitlements.d.ts +123 -0
- package/src/lib/plugin-manager/plugin-plan-entitlements.js +101 -0
- package/src/lib/plugin-manager/plugin-plan-entitlements.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-email-state.d.ts +69 -0
- package/src/lib/plugin-manager/plugin-record-email-state.js +32 -0
- package/src/lib/plugin-manager/plugin-record-email-state.js.map +1 -1
- package/src/lib/plugin-manager/plugin-record-index.d.ts +95 -0
- package/src/lib/plugin-manager/plugin-record-index.js +51 -0
- package/src/lib/plugin-manager/plugin-record-index.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-lists.d.ts +115 -0
- package/src/lib/plugin-manager/plugin-record-lists.js +75 -0
- package/src/lib/plugin-manager/plugin-record-lists.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-timeline.d.ts +42 -8
- package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
- package/src/lib/plugin-manager/plugin-record-written.d.ts +58 -0
- package/src/lib/plugin-manager/plugin-record-written.js +42 -0
- package/src/lib/plugin-manager/plugin-record-written.js.map +1 -0
- package/src/lib/plugin-manager/plugin-revenue-sources.d.ts +213 -0
- package/src/lib/plugin-manager/plugin-revenue-sources.js +194 -0
- package/src/lib/plugin-manager/plugin-revenue-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-site-beacons.d.ts +71 -0
- package/src/lib/plugin-manager/plugin-site-beacons.js +54 -0
- package/src/lib/plugin-manager/plugin-site-beacons.js.map +1 -0
- package/src/lib/plugin-manager/plugin-site-bundle.d.ts +145 -0
- package/src/lib/plugin-manager/plugin-site-bundle.js +78 -0
- package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -0
- package/src/lib/plugin-manager/plugin-site-cache.d.ts +12 -0
- package/src/lib/plugin-manager/plugin-site-cache.js.map +1 -1
- package/src/lib/plugin-manager/plugin-site-export.d.ts +81 -0
- package/src/lib/plugin-manager/plugin-site-export.js +40 -0
- package/src/lib/plugin-manager/plugin-site-export.js.map +1 -0
- package/src/lib/plugin-manager/plugin-sitemap-sections.d.ts +88 -0
- package/src/lib/plugin-manager/plugin-sitemap-sections.js +29 -0
- package/src/lib/plugin-manager/plugin-sitemap-sections.js.map +1 -0
- package/src/lib/plugin-manager/plugin-subscription-topics.generated.d.ts +11 -0
- package/src/lib/plugin-manager/plugin-subscription-topics.generated.js +41 -0
- package/src/lib/plugin-manager/plugin-subscription-topics.generated.js.map +1 -0
- package/src/lib/plugin-manager/plugin-tax-profile.d.ts +20 -4
- package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -1
- package/src/lib/plugin-manager/plugin-tax-return-sources.d.ts +255 -0
- package/src/lib/plugin-manager/plugin-tax-return-sources.js +191 -0
- package/src/lib/plugin-manager/plugin-tax-return-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-template-sources.d.ts +75 -0
- package/src/lib/plugin-manager/plugin-template-sources.js +37 -0
- package/src/lib/plugin-manager/plugin-template-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-usage-axes.d.ts +319 -0
- package/src/lib/plugin-manager/plugin-usage-axes.js +186 -0
- package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -0
- package/src/lib/plugin-manager/plugin-usage-meters.d.ts +108 -0
- package/src/lib/plugin-manager/plugin-usage-meters.js +105 -0
- package/src/lib/plugin-manager/plugin-usage-meters.js.map +1 -0
- package/src/lib/plugin-manager/plugin-zones.d.ts +4 -5
- package/src/lib/plugin-manager/plugin-zones.js.map +1 -1
- package/src/lib/plugin-manager/realm-host-aglyn.generated.js +2 -0
- package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
- package/src/lib/plugin-manager/record-captured-contact.d.ts +1 -14
- package/src/lib/plugin-manager/record-captured-contact.js +10 -32
- package/src/lib/plugin-manager/record-captured-contact.js.map +1 -1
- package/src/lib/plugin-manager/repeat-rows.d.ts +124 -0
- package/src/lib/plugin-manager/repeat-rows.js +108 -0
- package/src/lib/plugin-manager/repeat-rows.js.map +1 -0
- package/src/lib/plugin-manager/submission-record-target.d.ts +144 -0
- package/src/lib/plugin-manager/submission-record-target.js +125 -0
- package/src/lib/plugin-manager/submission-record-target.js.map +1 -0
- package/src/lib/plugin-manager/usage-alert-contributors.d.ts +76 -6
- package/src/lib/plugin-manager/usage-alert-contributors.js +23 -10
- package/src/lib/plugin-manager/usage-alert-contributors.js.map +1 -1
- package/src/lib/plugin-manager/video-embed-provider.d.ts +108 -0
- package/src/lib/plugin-manager/video-embed-provider.js +165 -0
- package/src/lib/plugin-manager/video-embed-provider.js.map +1 -0
- package/src/lib/types/nodes.d.ts +2 -2
- package/src/lib/types/nodes.js.map +1 -1
- package/src/lib/app-utils/assist-credits.d.ts +0 -482
- package/src/lib/app-utils/assist-credits.js +0 -509
- package/src/lib/app-utils/assist-credits.js.map +0 -1
- package/src/lib/app-utils/campaign-attribution.js.map +0 -1
- package/src/lib/app-utils/campaign-forwarding.js.map +0 -1
- package/src/lib/app-utils/campaign-membership.d.ts +0 -121
- package/src/lib/app-utils/campaign-membership.js +0 -189
- package/src/lib/app-utils/campaign-membership.js.map +0 -1
- package/src/lib/app-utils/campaign-touch.js.map +0 -1
- package/src/lib/app-utils/console-record-links.d.ts +0 -163
- package/src/lib/app-utils/console-record-links.js +0 -180
- package/src/lib/app-utils/console-record-links.js.map +0 -1
- package/src/lib/app-utils/contact-holder.d.ts +0 -68
- package/src/lib/app-utils/contact-holder.js +0 -129
- package/src/lib/app-utils/contact-holder.js.map +0 -1
- package/src/lib/app-utils/contact-merge.d.ts +0 -136
- package/src/lib/app-utils/contact-merge.js +0 -412
- package/src/lib/app-utils/contact-merge.js.map +0 -1
- package/src/lib/app-utils/crm-booking.d.ts +0 -75
- package/src/lib/app-utils/crm-booking.js +0 -133
- package/src/lib/app-utils/crm-booking.js.map +0 -1
- package/src/lib/app-utils/crm-csv.d.ts +0 -239
- package/src/lib/app-utils/crm-csv.js +0 -467
- package/src/lib/app-utils/crm-csv.js.map +0 -1
- package/src/lib/app-utils/crm-digest.d.ts +0 -185
- package/src/lib/app-utils/crm-digest.js +0 -272
- package/src/lib/app-utils/crm-digest.js.map +0 -1
- package/src/lib/app-utils/crm-inbound.d.ts +0 -245
- package/src/lib/app-utils/crm-inbound.js +0 -407
- package/src/lib/app-utils/crm-inbound.js.map +0 -1
- package/src/lib/app-utils/crm-reports.d.ts +0 -479
- package/src/lib/app-utils/crm-reports.js +0 -680
- package/src/lib/app-utils/crm-reports.js.map +0 -1
- package/src/lib/app-utils/dataset-csv.js.map +0 -1
- package/src/lib/app-utils/dataset-query.d.ts +0 -57
- package/src/lib/app-utils/dataset-query.js.map +0 -1
- package/src/lib/app-utils/email-topics.js.map +0 -1
- package/src/lib/app-utils/form-dataset-binding.d.ts +0 -50
- package/src/lib/app-utils/form-dataset-binding.js +0 -74
- package/src/lib/app-utils/form-dataset-binding.js.map +0 -1
- package/src/lib/app-utils/list-assignment-policy.js.map +0 -1
- package/src/lib/app-utils/list-import.d.ts +0 -158
- package/src/lib/app-utils/list-import.js +0 -332
- package/src/lib/app-utils/list-import.js.map +0 -1
- package/src/lib/app-utils/marketplace-listing-visibility.d.ts +0 -122
- package/src/lib/app-utils/marketplace-listing-visibility.js +0 -147
- package/src/lib/app-utils/marketplace-listing-visibility.js.map +0 -1
- package/src/lib/app-utils/marketplace-overrides.js.map +0 -1
- package/src/lib/app-utils/marketplace-provenance.js.map +0 -1
- package/src/lib/app-utils/marketplace-theme.js.map +0 -1
- package/src/lib/app-utils/marketplace-update-state.d.ts +0 -119
- package/src/lib/app-utils/marketplace-update-state.js +0 -132
- package/src/lib/app-utils/marketplace-update-state.js.map +0 -1
- package/src/lib/app-utils/publisher-agreement.d.ts +0 -289
- package/src/lib/app-utils/publisher-agreement.js +0 -321
- package/src/lib/app-utils/publisher-agreement.js.map +0 -1
- package/src/lib/app-utils/wistia-embed.d.ts +0 -104
- package/src/lib/app-utils/wistia-embed.js +0 -138
- package/src/lib/app-utils/wistia-embed.js.map +0 -1
- package/src/lib/app-utils/workflows.d.ts +0 -136
- package/src/lib/app-utils/workflows.js +0 -346
- package/src/lib/app-utils/workflows.js.map +0 -1
- package/src/lib/plugin-manager/commerce-zone-props.d.ts +0 -172
- package/src/lib/plugin-manager/commerce-zone-props.js +0 -31
- package/src/lib/plugin-manager/commerce-zone-props.js.map +0 -1
- package/src/lib/plugin-manager/plugin-metered-lines.d.ts +0 -97
- package/src/lib/plugin-manager/plugin-metered-lines.js +0 -123
- package/src/lib/plugin-manager/plugin-metered-lines.js.map +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
* Recognizes the rejection Firebase raises when another tab signs in to a
|
|
19
|
+
* DIFFERENT account pool (AGL-3280).
|
|
20
|
+
*
|
|
21
|
+
* The console recovers from it (`apps/console/utils/cross-pool-desync.ts`
|
|
22
|
+
* holds the reload and its fences) and the error beacon labels it, so the
|
|
23
|
+
* two must agree on what it is. One definition, here, because a second copy
|
|
24
|
+
* fails silently: a shape learned by the recovery would go on paging from the
|
|
25
|
+
* beacon, or the other way round.
|
|
26
|
+
*
|
|
27
|
+
* Pure and framework-free — the beacon ships in every page's client bundle.
|
|
28
|
+
*/
|
|
29
|
+
/** The SDK's code for "the incoming user is not in this instance's pool". */
|
|
30
|
+
export declare const CROSS_POOL_DESYNC_CODE = "auth/tenant-id-mismatch";
|
|
31
|
+
/**
|
|
32
|
+
* Is this the cross-pool desync? Matched on `code` first, which is the field
|
|
33
|
+
* Firebase promises; the message is the fallback for a rejection that arrived
|
|
34
|
+
* as something plainer.
|
|
35
|
+
*
|
|
36
|
+
* Nothing here may throw: it runs inside rejection handlers, where a getter
|
|
37
|
+
* that throws would lose the event it was asked about.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isCrossPoolDesync(reason: unknown): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
* Recognizes the rejection Firebase raises when another tab signs in to a
|
|
18
|
+
* DIFFERENT account pool (AGL-3280).
|
|
19
|
+
*
|
|
20
|
+
* The console recovers from it (`apps/console/utils/cross-pool-desync.ts`
|
|
21
|
+
* holds the reload and its fences) and the error beacon labels it, so the
|
|
22
|
+
* two must agree on what it is. One definition, here, because a second copy
|
|
23
|
+
* fails silently: a shape learned by the recovery would go on paging from the
|
|
24
|
+
* beacon, or the other way round.
|
|
25
|
+
*
|
|
26
|
+
* Pure and framework-free — the beacon ships in every page's client bundle.
|
|
27
|
+
*/ /** The SDK's code for "the incoming user is not in this instance's pool". */ export const CROSS_POOL_DESYNC_CODE = 'auth/tenant-id-mismatch';
|
|
28
|
+
/**
|
|
29
|
+
* Is this the cross-pool desync? Matched on `code` first, which is the field
|
|
30
|
+
* Firebase promises; the message is the fallback for a rejection that arrived
|
|
31
|
+
* as something plainer.
|
|
32
|
+
*
|
|
33
|
+
* Nothing here may throw: it runs inside rejection handlers, where a getter
|
|
34
|
+
* that throws would lose the event it was asked about.
|
|
35
|
+
*/ export function isCrossPoolDesync(reason) {
|
|
36
|
+
try {
|
|
37
|
+
var _error_code, _error_message;
|
|
38
|
+
if (!reason || typeof reason !== 'object') return false;
|
|
39
|
+
const error = reason;
|
|
40
|
+
if (String((_error_code = error.code) != null ? _error_code : '') === CROSS_POOL_DESYNC_CODE) return true;
|
|
41
|
+
return String((_error_message = error.message) != null ? _error_message : '').includes(CROSS_POOL_DESYNC_CODE);
|
|
42
|
+
} catch (unused) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=cross-pool-desync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/cross-pool-desync.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 * Recognizes the rejection Firebase raises when another tab signs in to a\n * DIFFERENT account pool (AGL-3280).\n *\n * The console recovers from it (`apps/console/utils/cross-pool-desync.ts`\n * holds the reload and its fences) and the error beacon labels it, so the\n * two must agree on what it is. One definition, here, because a second copy\n * fails silently: a shape learned by the recovery would go on paging from the\n * beacon, or the other way round.\n *\n * Pure and framework-free — the beacon ships in every page's client bundle.\n */\n\n/** The SDK's code for \"the incoming user is not in this instance's pool\". */\nexport const CROSS_POOL_DESYNC_CODE = 'auth/tenant-id-mismatch'\n\n/**\n * Is this the cross-pool desync? Matched on `code` first, which is the field\n * Firebase promises; the message is the fallback for a rejection that arrived\n * as something plainer.\n *\n * Nothing here may throw: it runs inside rejection handlers, where a getter\n * that throws would lose the event it was asked about.\n */\nexport function isCrossPoolDesync(reason: unknown): boolean {\n try {\n if (!reason || typeof reason !== 'object') return false\n const error = reason as { code?: unknown; message?: unknown }\n if (String(error.code ?? '') === CROSS_POOL_DESYNC_CODE) return true\n return String(error.message ?? '').includes(CROSS_POOL_DESYNC_CODE)\n } catch {\n return false\n }\n}\n"],"names":["CROSS_POOL_DESYNC_CODE","isCrossPoolDesync","reason","error","String","code","message","includes"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;CAWC,GAED,2EAA2E,GAC3E,OAAO,MAAMA,yBAAyB,0BAAyB;AAE/D;;;;;;;CAOC,GACD,OAAO,SAASC,kBAAkBC,MAAe;IAC/C,IAAI;YAGSC,aACGA;QAHd,IAAI,CAACD,UAAU,OAAOA,WAAW,UAAU,OAAO;QAClD,MAAMC,QAAQD;QACd,IAAIE,QAAOD,cAAAA,MAAME,IAAI,YAAVF,cAAc,QAAQH,wBAAwB,OAAO;QAChE,OAAOI,QAAOD,iBAAAA,MAAMG,OAAO,YAAbH,iBAAiB,IAAII,QAAQ,CAACP;IAC9C,EAAE,eAAM;QACN,OAAO;IACT;AACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
* The most characters one uploaded CSV may carry, whoever reads it.
|
|
19
|
+
*
|
|
20
|
+
* A file a person uploads is parsed in one pass by `parseCsv` (`csv.ts`), in the
|
|
21
|
+
* browser that picked it and again on the server that imports it. This bounds
|
|
22
|
+
* that pass: it is checked before the parse rather than after, because the
|
|
23
|
+
* parse is what the ceiling is protecting — a refusal answered on the byte
|
|
24
|
+
* count costs nothing, where discovering the file was too big by
|
|
25
|
+
* materializing all of its cells has already spent the memory the limit
|
|
26
|
+
* exists to bound. Every importer that reads a CSV in one go shares it, so a
|
|
27
|
+
* file one importer accepts is never one another refuses for its size.
|
|
28
|
+
*/
|
|
29
|
+
export declare const CSV_UPLOAD_MAX_CHARACTERS = 8000000;
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
* The most characters one uploaded CSV may carry, whoever reads it.
|
|
18
|
+
*
|
|
19
|
+
* A file a person uploads is parsed in one pass by `parseCsv` (`csv.ts`), in the
|
|
20
|
+
* browser that picked it and again on the server that imports it. This bounds
|
|
21
|
+
* that pass: it is checked before the parse rather than after, because the
|
|
22
|
+
* parse is what the ceiling is protecting — a refusal answered on the byte
|
|
23
|
+
* count costs nothing, where discovering the file was too big by
|
|
24
|
+
* materializing all of its cells has already spent the memory the limit
|
|
25
|
+
* exists to bound. Every importer that reads a CSV in one go shares it, so a
|
|
26
|
+
* file one importer accepts is never one another refuses for its size.
|
|
27
|
+
*/ export const CSV_UPLOAD_MAX_CHARACTERS = 8000000;
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=csv-upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/csv-upload.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 most characters one uploaded CSV may carry, whoever reads it.\n *\n * A file a person uploads is parsed in one pass by `parseCsv` (`csv.ts`), in the\n * browser that picked it and again on the server that imports it. This bounds\n * that pass: it is checked before the parse rather than after, because the\n * parse is what the ceiling is protecting — a refusal answered on the byte\n * count costs nothing, where discovering the file was too big by\n * materializing all of its cells has already spent the memory the limit\n * exists to bound. Every importer that reads a CSV in one go shares it, so a\n * file one importer accepts is never one another refuses for its size.\n */\nexport const CSV_UPLOAD_MAX_CHARACTERS = 8_000_000\n"],"names":["CSV_UPLOAD_MAX_CHARACTERS"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;CAWC,GACD,OAAO,MAAMA,4BAA4B,QAAS"}
|
|
@@ -15,49 +15,18 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
* `coerceDocumentValues`: ISO dates, `lat, lon` coordinates, comma-joined
|
|
20
|
-
* lists, JSON maps, reference ids — so an export re-imports losslessly
|
|
21
|
-
* through the same coercion.
|
|
18
|
+
* CSV, read and written the one way the platform does it (AGL-2335).
|
|
22
19
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* `aglyn:addons` — apps reach plugins only through the generated loader
|
|
31
|
-
* manifests (AGL-417/419). The choice was a second copy of the escaper in
|
|
32
|
-
* the console or one copy somewhere both may reach. There are already five
|
|
33
|
-
* divergent hand-rolled CSV escapers in this repo; this is not becoming the
|
|
34
|
-
* sixth. `dataset-io.ts` re-exports every name below, so the plugin's own
|
|
35
|
-
* imports are unchanged.
|
|
36
|
-
*
|
|
37
|
-
* READING one is shared for the same reason. The email list importer parses
|
|
38
|
-
* a merchant's contact file, and it lives in `@aglyn/plugins-email`, which
|
|
39
|
-
* may not import `@aglyn/plugins-data` either. So {@link parseCsv} sits here
|
|
40
|
-
* beside the escaper that is its inverse, and `dataset-io.ts` re-exports it
|
|
41
|
-
* exactly as it re-exports the writing half.
|
|
42
|
-
*/
|
|
43
|
-
import type { DatasetFieldDefinition, DatasetModel } from './dataset-models';
|
|
44
|
-
/** Storage value → portable string (CSV cell / JSON value). */
|
|
45
|
-
export declare function serializeDatasetValue(field: DatasetFieldDefinition, value: unknown): string;
|
|
46
|
-
/**
|
|
47
|
-
* The header line — field ids, in model order (AGL-2335).
|
|
48
|
-
*
|
|
49
|
-
* Split out of {@link datasetRecordsToCsv} so a server export can emit the
|
|
50
|
-
* file a page at a time. The whole point of that export is that it is not
|
|
51
|
-
* bounded by what one process can hold in memory, and a helper that only
|
|
52
|
-
* takes a complete `rows` array cannot serve it. Everything below shares
|
|
53
|
-
* one escaper: there are already five divergent hand-rolled CSV escapers in
|
|
54
|
-
* this repo and this is not becoming the sixth.
|
|
20
|
+
* There were five divergent hand-rolled CSV escapers in this repo; this is
|
|
21
|
+
* the one escaper and the one parser every plugin and app reaches — the data
|
|
22
|
+
* plugin's dataset export and import, the email list import, the commerce
|
|
23
|
+
* catalog import, the CRM's contact import — and the check a download runs
|
|
24
|
+
* against the row count its server promised. Nothing here knows what the rows
|
|
25
|
+
* are; a plugin that writes its own records into a file formats each value
|
|
26
|
+
* itself and escapes it here.
|
|
55
27
|
*/
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
export declare function datasetCsvRow(model: DatasetModel, row: Record<string, unknown>): string;
|
|
59
|
-
/** One record's values → the portable JSON object the JSON export emits. */
|
|
60
|
-
export declare function datasetRecordToJson(model: DatasetModel, row: Record<string, unknown>): Record<string, string>;
|
|
28
|
+
/** One cell, quoted when it has to be: a comma, a quote or a line break. */
|
|
29
|
+
export declare const escapeCsvCell: (cell: string) => string;
|
|
61
30
|
/**
|
|
62
31
|
* Data rows in a CSV document — the header excluded, quoted newlines not
|
|
63
32
|
* counted as row breaks (AGL-2335).
|
|
@@ -93,8 +62,6 @@ export declare function exportShortfall(promisedHeader: string | null | undefine
|
|
|
93
62
|
received: number;
|
|
94
63
|
short: boolean;
|
|
95
64
|
};
|
|
96
|
-
/** Rows (storage-form value maps) → CSV with a fieldId header row. */
|
|
97
|
-
export declare function datasetRecordsToCsv(model: DatasetModel, rows: Array<Record<string, unknown>>): string;
|
|
98
65
|
/**
|
|
99
66
|
* Minimal RFC-4180 CSV parser (quoted fields, escaped quotes, CRLF).
|
|
100
67
|
*
|
|
@@ -14,81 +14,16 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/ /**
|
|
17
|
-
*
|
|
18
|
-
* `coerceDocumentValues`: ISO dates, `lat, lon` coordinates, comma-joined
|
|
19
|
-
* lists, JSON maps, reference ids — so an export re-imports losslessly
|
|
20
|
-
* through the same coercion.
|
|
17
|
+
* CSV, read and written the one way the platform does it (AGL-2335).
|
|
21
18
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
|
|
30
|
-
* manifests (AGL-417/419). The choice was a second copy of the escaper in
|
|
31
|
-
* the console or one copy somewhere both may reach. There are already five
|
|
32
|
-
* divergent hand-rolled CSV escapers in this repo; this is not becoming the
|
|
33
|
-
* sixth. `dataset-io.ts` re-exports every name below, so the plugin's own
|
|
34
|
-
* imports are unchanged.
|
|
35
|
-
*
|
|
36
|
-
* READING one is shared for the same reason. The email list importer parses
|
|
37
|
-
* a merchant's contact file, and it lives in `@aglyn/plugins-email`, which
|
|
38
|
-
* may not import `@aglyn/plugins-data` either. So {@link parseCsv} sits here
|
|
39
|
-
* beside the escaper that is its inverse, and `dataset-io.ts` re-exports it
|
|
40
|
-
* exactly as it re-exports the writing half.
|
|
41
|
-
*/ /** Storage value → portable string (CSV cell / JSON value). */ export function serializeDatasetValue(field, value) {
|
|
42
|
-
if (value == null) return '';
|
|
43
|
-
switch(field.type){
|
|
44
|
-
case 'timestamp':
|
|
45
|
-
return typeof value === 'number' && Number.isFinite(value) ? new Date(value).toISOString() : String(value);
|
|
46
|
-
case 'coordinates':
|
|
47
|
-
{
|
|
48
|
-
const coordinates = value;
|
|
49
|
-
return coordinates && typeof coordinates.latitude === 'number' && typeof coordinates.longitude === 'number' ? `${coordinates.latitude}, ${coordinates.longitude}` : String(value);
|
|
50
|
-
}
|
|
51
|
-
case 'sorted':
|
|
52
|
-
case 'reference':
|
|
53
|
-
return Array.isArray(value) ? value.join(', ') : String(value);
|
|
54
|
-
case 'map':
|
|
55
|
-
try {
|
|
56
|
-
return JSON.stringify(value);
|
|
57
|
-
} catch (unused) {
|
|
58
|
-
return String(value);
|
|
59
|
-
}
|
|
60
|
-
default:
|
|
61
|
-
return String(value);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
const csvEscape = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"` : cell;
|
|
65
|
-
/**
|
|
66
|
-
* The header line — field ids, in model order (AGL-2335).
|
|
67
|
-
*
|
|
68
|
-
* Split out of {@link datasetRecordsToCsv} so a server export can emit the
|
|
69
|
-
* file a page at a time. The whole point of that export is that it is not
|
|
70
|
-
* bounded by what one process can hold in memory, and a helper that only
|
|
71
|
-
* takes a complete `rows` array cannot serve it. Everything below shares
|
|
72
|
-
* one escaper: there are already five divergent hand-rolled CSV escapers in
|
|
73
|
-
* this repo and this is not becoming the sixth.
|
|
74
|
-
*/ export function datasetCsvHeader(model) {
|
|
75
|
-
return model.order.map(csvEscape).join(',');
|
|
76
|
-
}
|
|
77
|
-
/** One record's values (storage form) → one CSV line, no terminator. */ export function datasetCsvRow(model, row) {
|
|
78
|
-
return model.order.map((fieldId)=>{
|
|
79
|
-
const field = model.fields[fieldId];
|
|
80
|
-
return csvEscape(field ? serializeDatasetValue(field, row[fieldId]) : '');
|
|
81
|
-
}).join(',');
|
|
82
|
-
}
|
|
83
|
-
/** One record's values → the portable JSON object the JSON export emits. */ export function datasetRecordToJson(model, row) {
|
|
84
|
-
return Object.fromEntries(model.order.map((fieldId)=>{
|
|
85
|
-
const field = model.fields[fieldId];
|
|
86
|
-
return [
|
|
87
|
-
fieldId,
|
|
88
|
-
field ? serializeDatasetValue(field, row[fieldId]) : ''
|
|
89
|
-
];
|
|
90
|
-
}));
|
|
91
|
-
}
|
|
19
|
+
* There were five divergent hand-rolled CSV escapers in this repo; this is
|
|
20
|
+
* the one escaper and the one parser every plugin and app reaches — the data
|
|
21
|
+
* plugin's dataset export and import, the email list import, the commerce
|
|
22
|
+
* catalog import, the CRM's contact import — and the check a download runs
|
|
23
|
+
* against the row count its server promised. Nothing here knows what the rows
|
|
24
|
+
* are; a plugin that writes its own records into a file formats each value
|
|
25
|
+
* itself and escapes it here.
|
|
26
|
+
*/ /** One cell, quoted when it has to be: a comma, a quote or a line break. */ export const escapeCsvCell = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"` : cell;
|
|
92
27
|
/**
|
|
93
28
|
* Data rows in a CSV document — the header excluded, quoted newlines not
|
|
94
29
|
* counted as row breaks (AGL-2335).
|
|
@@ -173,12 +108,6 @@ const csvEscape = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"
|
|
|
173
108
|
short: Number.isFinite(promised) && promisedHeader != null && received < promised
|
|
174
109
|
};
|
|
175
110
|
}
|
|
176
|
-
/** Rows (storage-form value maps) → CSV with a fieldId header row. */ export function datasetRecordsToCsv(model, rows) {
|
|
177
|
-
return [
|
|
178
|
-
datasetCsvHeader(model),
|
|
179
|
-
...rows.map((row)=>datasetCsvRow(model, row))
|
|
180
|
-
].join('\n');
|
|
181
|
-
}
|
|
182
111
|
/**
|
|
183
112
|
* Minimal RFC-4180 CSV parser (quoted fields, escaped quotes, CRLF).
|
|
184
113
|
*
|
|
@@ -232,4 +161,4 @@ const csvEscape = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"
|
|
|
232
161
|
return rows.filter((cells)=>cells.some((value)=>value.trim() !== ''));
|
|
233
162
|
}
|
|
234
163
|
|
|
235
|
-
//# sourceMappingURL=
|
|
164
|
+
//# sourceMappingURL=csv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/csv.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 * CSV, read and written the one way the platform does it (AGL-2335).\n *\n * There were five divergent hand-rolled CSV escapers in this repo; this is\n * the one escaper and the one parser every plugin and app reaches — the data\n * plugin's dataset export and import, the email list import, the commerce\n * catalog import, the CRM's contact import — and the check a download runs\n * against the row count its server promised. Nothing here knows what the rows\n * are; a plugin that writes its own records into a file formats each value\n * itself and escapes it here.\n */\n\n/** One cell, quoted when it has to be: a comma, a quote or a line break. */\nexport const escapeCsvCell = (cell: string): string =>\n /[\",\\r\\n]/.test(cell) ? `\"${cell.replace(/\"/g, '\"\"')}\"` : cell\n\n/**\n * Data rows in a CSV document — the header excluded, quoted newlines not\n * counted as row breaks (AGL-2335).\n *\n * This exists so a download can be CHECKED against the row count the server\n * promised, rather than trusted. A truncated export is the defect this whole\n * area is about, and a stream that dies halfway produces a perfectly\n * well-formed shorter file: nothing about the bytes says they are short.\n *\n * Single pass, no array building — {@link parseCsv} answers the same\n * question but materializes every cell, which is the wrong trade when the\n * file may be hundreds of thousands of rows and the only thing wanted is\n * how many there are.\n */\nexport function countCsvDataRows(text: string): number {\n const source = String(text ?? '')\n if (!source) return 0\n let rows = 0\n let quoted = false\n let cellsSeen = false\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index]\n if (quoted) {\n if (char === '\"') {\n if (source[index + 1] === '\"') index += 1\n else quoted = false\n }\n cellsSeen = true\n continue\n }\n if (char === '\"') {\n quoted = true\n cellsSeen = true\n continue\n }\n if (char === '\\n') {\n rows += 1\n cellsSeen = false\n continue\n }\n if (char !== '\\r') cellsSeen = true\n }\n // A file that does not end in a newline still has a final row.\n if (cellsSeen) rows += 1\n // The header is not data.\n return Math.max(0, rows - 1)\n}\n\n/**\n * Did a downloaded export arrive whole? (AGL-2335)\n *\n * The server streams and reports its `count()` aggregate in a header, so the\n * client can CHECK rather than trust. This is the check, kept here as a pure\n * function because a guard living inline in a component is a guard nobody\n * can force red — and this one exists precisely to catch a silent shortfall.\n *\n * `short` is only true when the count is both KNOWN and lower. A missing or\n * unparseable header is not evidence of truncation, and refusing a download\n * on the strength of a header that never arrived would fail the user for the\n * server's bookkeeping. More rows than promised is not short either — the\n * count is a snapshot taken before the first page, so a concurrent insert\n * can legitimately overtake it.\n */\nexport function exportShortfall(\n promisedHeader: string | null | undefined,\n body: string,\n format: 'csv' | 'json',\n): { promised: number; received: number; short: boolean } {\n const promised = Number(promisedHeader)\n let received: number\n if (format === 'csv') {\n received = countCsvDataRows(body)\n } else {\n try {\n const parsed = JSON.parse(body) as unknown\n received = Array.isArray(parsed) ? parsed.length : 0\n } catch {\n // A body that is not JSON at all did not arrive whole.\n return { promised, received: 0, short: true }\n }\n }\n return {\n promised,\n received,\n short: Number.isFinite(promised) && promisedHeader != null && received < promised,\n }\n}\n\n/**\n * Minimal RFC-4180 CSV parser (quoted fields, escaped quotes, CRLF).\n *\n * The inverse of the escaper above, and the one parser in the repo — see the\n * module note for why the email list importer reaches this rather than\n * writing its own.\n *\n * A wholly blank row is dropped. Every spreadsheet writes a trailing newline\n * and a row of empty cells is not a record; carrying it through would give\n * every caller the same off-by-one to remember.\n */\nexport function parseCsv(text: string): string[][] {\n const rows: string[][] = []\n let row: string[] = []\n let cell = ''\n let quoted = false\n const source = String(text ?? '')\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index]\n if (quoted) {\n if (char === '\"') {\n if (source[index + 1] === '\"') {\n cell += '\"'\n index += 1\n } else {\n quoted = false\n }\n } else {\n cell += char\n }\n continue\n }\n if (char === '\"') {\n quoted = true\n } else if (char === ',') {\n row.push(cell)\n cell = ''\n } else if (char === '\\n' || char === '\\r') {\n if (char === '\\r' && source[index + 1] === '\\n') index += 1\n row.push(cell)\n cell = ''\n rows.push(row)\n row = []\n } else {\n cell += char\n }\n }\n if (cell !== '' || row.length) {\n row.push(cell)\n rows.push(row)\n }\n return rows.filter((cells) => cells.some((value) => value.trim() !== ''))\n}\n"],"names":["escapeCsvCell","cell","test","replace","countCsvDataRows","text","source","String","rows","quoted","cellsSeen","index","length","char","Math","max","exportShortfall","promisedHeader","body","format","promised","Number","received","parsed","JSON","parse","Array","isArray","short","isFinite","parseCsv","row","push","filter","cells","some","value","trim"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;CAUC,GAED,0EAA0E,GAC1E,OAAO,MAAMA,gBAAgB,CAACC,OAC5B,WAAWC,IAAI,CAACD,QAAQ,CAAC,CAAC,EAAEA,KAAKE,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,GAAGF,KAAI;AAEhE;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASG,iBAAiBC,IAAY;IAC3C,MAAMC,SAASC,OAAOF,eAAAA,OAAQ;IAC9B,IAAI,CAACC,QAAQ,OAAO;IACpB,IAAIE,OAAO;IACX,IAAIC,SAAS;IACb,IAAIC,YAAY;IAChB,IAAK,IAAIC,QAAQ,GAAGA,QAAQL,OAAOM,MAAM,EAAED,SAAS,EAAG;QACrD,MAAME,OAAOP,MAAM,CAACK,MAAM;QAC1B,IAAIF,QAAQ;YACV,IAAII,SAAS,KAAK;gBAChB,IAAIP,MAAM,CAACK,QAAQ,EAAE,KAAK,KAAKA,SAAS;qBACnCF,SAAS;YAChB;YACAC,YAAY;YACZ;QACF;QACA,IAAIG,SAAS,KAAK;YAChBJ,SAAS;YACTC,YAAY;YACZ;QACF;QACA,IAAIG,SAAS,MAAM;YACjBL,QAAQ;YACRE,YAAY;YACZ;QACF;QACA,IAAIG,SAAS,MAAMH,YAAY;IACjC;IACA,+DAA+D;IAC/D,IAAIA,WAAWF,QAAQ;IACvB,0BAA0B;IAC1B,OAAOM,KAAKC,GAAG,CAAC,GAAGP,OAAO;AAC5B;AAEA;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASQ,gBACdC,cAAyC,EACzCC,IAAY,EACZC,MAAsB;IAEtB,MAAMC,WAAWC,OAAOJ;IACxB,IAAIK;IACJ,IAAIH,WAAW,OAAO;QACpBG,WAAWlB,iBAAiBc;IAC9B,OAAO;QACL,IAAI;YACF,MAAMK,SAASC,KAAKC,KAAK,CAACP;YAC1BI,WAAWI,MAAMC,OAAO,CAACJ,UAAUA,OAAOX,MAAM,GAAG;QACrD,EAAE,eAAM;YACN,uDAAuD;YACvD,OAAO;gBAAEQ;gBAAUE,UAAU;gBAAGM,OAAO;YAAK;QAC9C;IACF;IACA,OAAO;QACLR;QACAE;QACAM,OAAOP,OAAOQ,QAAQ,CAACT,aAAaH,kBAAkB,QAAQK,WAAWF;IAC3E;AACF;AAEA;;;;;;;;;;CAUC,GACD,OAAO,SAASU,SAASzB,IAAY;IACnC,MAAMG,OAAmB,EAAE;IAC3B,IAAIuB,MAAgB,EAAE;IACtB,IAAI9B,OAAO;IACX,IAAIQ,SAAS;IACb,MAAMH,SAASC,OAAOF,eAAAA,OAAQ;IAC9B,IAAK,IAAIM,QAAQ,GAAGA,QAAQL,OAAOM,MAAM,EAAED,SAAS,EAAG;QACrD,MAAME,OAAOP,MAAM,CAACK,MAAM;QAC1B,IAAIF,QAAQ;YACV,IAAII,SAAS,KAAK;gBAChB,IAAIP,MAAM,CAACK,QAAQ,EAAE,KAAK,KAAK;oBAC7BV,QAAQ;oBACRU,SAAS;gBACX,OAAO;oBACLF,SAAS;gBACX;YACF,OAAO;gBACLR,QAAQY;YACV;YACA;QACF;QACA,IAAIA,SAAS,KAAK;YAChBJ,SAAS;QACX,OAAO,IAAII,SAAS,KAAK;YACvBkB,IAAIC,IAAI,CAAC/B;YACTA,OAAO;QACT,OAAO,IAAIY,SAAS,QAAQA,SAAS,MAAM;YACzC,IAAIA,SAAS,QAAQP,MAAM,CAACK,QAAQ,EAAE,KAAK,MAAMA,SAAS;YAC1DoB,IAAIC,IAAI,CAAC/B;YACTA,OAAO;YACPO,KAAKwB,IAAI,CAACD;YACVA,MAAM,EAAE;QACV,OAAO;YACL9B,QAAQY;QACV;IACF;IACA,IAAIZ,SAAS,MAAM8B,IAAInB,MAAM,EAAE;QAC7BmB,IAAIC,IAAI,CAAC/B;QACTO,KAAKwB,IAAI,CAACD;IACZ;IACA,OAAOvB,KAAKyB,MAAM,CAAC,CAACC,QAAUA,MAAMC,IAAI,CAAC,CAACC,QAAUA,MAAMC,IAAI,OAAO;AACvE"}
|
|
@@ -21,11 +21,11 @@ import { type DatasetFieldEntry } from './datasets';
|
|
|
21
21
|
* referenced design doc — this module is the single runtime source of
|
|
22
22
|
* truth). A model lives on the dataset doc
|
|
23
23
|
* (`orgs/{orgId}/datasets/{id}.model`) and drives the typed editor, import
|
|
24
|
-
* and site-restore validation, and the console
|
|
25
|
-
*
|
|
26
|
-
* can't disagree.
|
|
27
|
-
*
|
|
28
|
-
*
|
|
24
|
+
* and site-restore validation, and every record write — the console, `/v1`,
|
|
25
|
+
* a bound form's submission and an automation step — through the shared
|
|
26
|
+
* `validateDocument`/`coerceDocumentValues` pair so they can't disagree. The
|
|
27
|
+
* form and the automation step reach the pair through
|
|
28
|
+
* `prepareDatasetRecordWrite` (AGL-2773).
|
|
29
29
|
*
|
|
30
30
|
* Storage conventions (Firestore-safe): timestamps as epoch millis
|
|
31
31
|
* numbers, coordinates as `{ latitude, longitude }`, `sorted` as arrays,
|
|
@@ -251,6 +251,18 @@ const isFiniteNumber = (value)=>typeof value === 'number' && Number.isFinite(val
|
|
|
251
251
|
if (field.type === 'map') return formatDatasetValue(field, value);
|
|
252
252
|
return String(value);
|
|
253
253
|
}
|
|
254
|
+
const BOOL_TRUE_WORDS = new Set([
|
|
255
|
+
'true',
|
|
256
|
+
'yes',
|
|
257
|
+
'on',
|
|
258
|
+
'1'
|
|
259
|
+
]);
|
|
260
|
+
const BOOL_FALSE_WORDS = new Set([
|
|
261
|
+
'false',
|
|
262
|
+
'no',
|
|
263
|
+
'off',
|
|
264
|
+
'0'
|
|
265
|
+
]);
|
|
254
266
|
/**
|
|
255
267
|
* Coerces user-input strings (form fields, CSV cells) into storage form
|
|
256
268
|
* per the field type. Unparseable input is passed through untouched so
|
|
@@ -267,8 +279,13 @@ const isFiniteNumber = (value)=>typeof value === 'number' && Number.isFinite(val
|
|
|
267
279
|
}
|
|
268
280
|
switch(field.type){
|
|
269
281
|
case 'bool':
|
|
270
|
-
|
|
271
|
-
|
|
282
|
+
{
|
|
283
|
+
// The words a form control or a CSV cell says yes and no with: a
|
|
284
|
+
// lone checkbox posts `on`, a spreadsheet exports `TRUE` or `1`.
|
|
285
|
+
const word = raw.trim().toLowerCase();
|
|
286
|
+
values[fieldId] = BOOL_TRUE_WORDS.has(word) ? true : BOOL_FALSE_WORDS.has(word) ? false : raw;
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
272
289
|
case 'int32':
|
|
273
290
|
case 'int64':
|
|
274
291
|
{
|