@omega.js/extension 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +98 -0
- package/README.md +194 -0
- package/bin/omega +2 -0
- package/bin/omega-extension +2 -0
- package/bin/omg +2 -0
- package/dist/assets/css/bundles/.gitkeep +0 -0
- package/dist/assets/css/components/content/index.scss +5 -0
- package/dist/assets/css/components/options/index.scss +9 -0
- package/dist/assets/css/components/pages/index.scss +5 -0
- package/dist/assets/css/components/popup/index.scss +9 -0
- package/dist/assets/css/core/_animations.scss +64 -0
- package/dist/assets/css/core/_fontawesome.scss +146 -0
- package/dist/assets/css/core/_initialize.scss +23 -0
- package/dist/assets/css/core/_utilities.scss +80 -0
- package/dist/assets/css/omega-extension.scss +43 -0
- package/dist/assets/css/shell/_index.scss +207 -0
- package/dist/assets/css/tokens/_index.scss +166 -0
- package/dist/assets/js/core/app-shell.js +136 -0
- package/dist/assets/js/libs/initialize-tooltips.js +31 -0
- package/dist/assets/js/libs/recaptcha.js +94 -0
- package/dist/assets/js/main.js +4 -0
- package/dist/assets/themes/_template/README.md +115 -0
- package/dist/assets/themes/_template/_config.scss +60 -0
- package/dist/assets/themes/_template/_theme.js +14 -0
- package/dist/assets/themes/_template/_theme.scss +28 -0
- package/dist/assets/themes/_template/css/base/_root.scss +19 -0
- package/dist/assets/themes/_template/css/components/_components.scss +23 -0
- package/dist/assets/themes/base/README.md +5 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
- package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
- package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
- package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
- package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
- package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
- package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
- package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
- package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
- package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
- package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
- package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
- package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
- package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
- package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
- package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
- package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
- package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
- package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
- package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
- package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
- package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
- package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
- package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
- package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
- package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
- package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
- package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
- package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
- package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
- package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
- package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
- package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
- package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
- package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
- package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
- package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
- package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
- package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
- package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
- package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
- package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
- package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
- package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
- package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
- package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
- package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
- package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
- package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
- package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
- package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
- package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
- package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
- package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
- package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
- package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
- package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
- package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
- package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
- package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
- package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
- package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
- package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
- package/dist/assets/themes/base/_theme.js +13 -0
- package/dist/assets/themes/base/_theme.scss +4 -0
- package/dist/assets/themes/bootstrap/_theme.js +16 -0
- package/dist/assets/themes/bootstrap/_theme.scss +11 -0
- package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
- package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
- package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
- package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
- package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
- package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
- package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
- package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
- package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
- package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
- package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
- package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
- package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
- package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
- package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
- package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
- package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
- package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
- package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
- package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
- package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
- package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
- package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
- package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
- package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
- package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
- package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
- package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
- package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
- package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
- package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
- package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
- package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
- package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
- package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
- package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
- package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
- package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
- package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
- package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
- package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
- package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
- package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
- package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
- package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
- package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
- package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
- package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
- package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
- package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
- package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
- package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
- package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
- package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
- package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
- package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
- package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
- package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
- package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
- package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
- package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
- package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
- package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
- package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
- package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
- package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
- package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
- package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
- package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
- package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
- package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
- package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
- package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
- package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
- package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
- package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
- package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
- package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
- package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
- package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
- package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
- package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
- package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
- package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
- package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
- package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
- package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
- package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
- package/dist/assets/themes/classy/README.md +89 -0
- package/dist/assets/themes/classy/_config.scss +245 -0
- package/dist/assets/themes/classy/_theme.js +31 -0
- package/dist/assets/themes/classy/_theme.scss +57 -0
- package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
- package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
- package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
- package/dist/assets/themes/classy/css/base/_root.scss +113 -0
- package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
- package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
- package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
- package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
- package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
- package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
- package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
- package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
- package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
- package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
- package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
- package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
- package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
- package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
- package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
- package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
- package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
- package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
- package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
- package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
- package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
- package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
- package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
- package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
- package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
- package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
- package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
- package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
- package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
- package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
- package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
- package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
- package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
- package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
- package/dist/assets/themes/neobrutalism/README.md +118 -0
- package/dist/assets/themes/neobrutalism/_config.scss +139 -0
- package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
- package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
- package/dist/assets/themes/neobrutalism/_theme.js +24 -0
- package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
- package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
- package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
- package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
- package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
- package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
- package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
- package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
- package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
- package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
- package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
- package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
- package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
- package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
- package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
- package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
- package/dist/assets/themes/newsflash/README.md +117 -0
- package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
- package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
- package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
- package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
- package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
- package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
- package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
- package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
- package/dist/assets/themes/newsflash/_config.scss +147 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
- package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
- package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
- package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
- package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
- package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
- package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
- package/dist/assets/themes/newsflash/_theme.js +24 -0
- package/dist/assets/themes/newsflash/_theme.scss +70 -0
- package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
- package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
- package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
- package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
- package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
- package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
- package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
- package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
- package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
- package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
- package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
- package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
- package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
- package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
- package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
- package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
- package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
- package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
- package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
- package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
- package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
- package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
- package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
- package/dist/background.js +684 -0
- package/dist/build.js +268 -0
- package/dist/cli-run.js +25 -0
- package/dist/cli.js +30 -0
- package/dist/commands/build.js +67 -0
- package/dist/commands/clean.js +29 -0
- package/dist/commands/deploy.js +97 -0
- package/dist/commands/install.js +58 -0
- package/dist/commands/lib/dependencies.js +33 -0
- package/dist/commands/lib/deploy-precheck.js +57 -0
- package/dist/commands/lib/ensure-target.js +151 -0
- package/dist/commands/lib/push-secrets.js +60 -0
- package/dist/commands/migrate.js +77 -0
- package/dist/commands/test.js +110 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/version.js +12 -0
- package/dist/config/manifest.json +117 -0
- package/dist/config/page-template.html +21 -0
- package/dist/content.js +37 -0
- package/dist/defaults/.github/workflows/publish.yml +86 -0
- package/dist/defaults/.nvmrc +1 -0
- package/dist/defaults/.vscode/settings.json +8 -0
- package/dist/defaults/AGENTS.md +113 -0
- package/dist/defaults/CHANGELOG.md +15 -0
- package/dist/defaults/CLAUDE.md +1 -0
- package/dist/defaults/_.gitignore +75 -0
- package/dist/defaults/config/description.md +46 -0
- package/dist/defaults/config/messages.json +20 -0
- package/dist/defaults/config/omega.json5 +64 -0
- package/dist/defaults/docs/README.md +17 -0
- package/dist/defaults/gulpfile.js +6 -0
- package/dist/defaults/hooks/build/post.js +8 -0
- package/dist/defaults/hooks/build/pre.js +8 -0
- package/dist/defaults/src/assets/css/bundles/.gitkeep +0 -0
- package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
- package/dist/defaults/src/assets/css/components/offscreen/index.scss +4 -0
- package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
- package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
- package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
- package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
- package/dist/defaults/src/assets/css/main.scss +32 -0
- package/dist/defaults/src/assets/images/.gitkeep +0 -0
- package/dist/defaults/src/assets/js/components/background/index.js +25 -0
- package/dist/defaults/src/assets/js/components/content/index.js +22 -0
- package/dist/defaults/src/assets/js/components/offscreen/index.js +25 -0
- package/dist/defaults/src/assets/js/components/options/index.js +22 -0
- package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
- package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
- package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
- package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
- package/dist/defaults/src/manifest.json +131 -0
- package/dist/defaults/src/views/offscreen/index.html +3 -0
- package/dist/defaults/src/views/options/index.html +8 -0
- package/dist/defaults/src/views/pages/index.html +10 -0
- package/dist/defaults/src/views/popup/index.html +4 -0
- package/dist/defaults/src/views/sidepanel/index.html +4 -0
- package/dist/defaults/test/README.md +41 -0
- package/dist/defaults/test/_init.js +10 -0
- package/dist/defaults/test/boot/externally-connectable.test.js +28 -0
- package/dist/gulp/config/locales.js +12 -0
- package/dist/gulp/main.js +78 -0
- package/dist/gulp/tasks/_.js +18 -0
- package/dist/gulp/tasks/audit.js +222 -0
- package/dist/gulp/tasks/bundle.js +687 -0
- package/dist/gulp/tasks/defaults.js +281 -0
- package/dist/gulp/tasks/distribute.js +172 -0
- package/dist/gulp/tasks/fontawesome.js +25 -0
- package/dist/gulp/tasks/html.js +163 -0
- package/dist/gulp/tasks/icons.js +126 -0
- package/dist/gulp/tasks/package.js +742 -0
- package/dist/gulp/tasks/publish.js +417 -0
- package/dist/gulp/tasks/sass.js +252 -0
- package/dist/gulp/tasks/serve.js +103 -0
- package/dist/gulp/tasks/translate.js +252 -0
- package/dist/gulp/tasks/utils/build-json.js +43 -0
- package/dist/gulp/tasks/utils/template-transform.js +50 -0
- package/dist/gulp/templates/BUILD_INSTRUCTIONS.md +69 -0
- package/dist/index.js +46 -0
- package/dist/lib/affiliatizer.js +224 -0
- package/dist/lib/analytics.js +26 -0
- package/dist/lib/auth-helpers.js +213 -0
- package/dist/lib/extension.js +116 -0
- package/dist/lib/icons.js +36 -0
- package/dist/lib/logger-lite.js +35 -0
- package/dist/lib/logger.js +4 -0
- package/dist/lib/messaging.js +48 -0
- package/dist/lib/safe-install.js +4 -0
- package/dist/lib/theme.js +73 -0
- package/dist/lib/verts.js +68 -0
- package/dist/offscreen.js +31 -0
- package/dist/omega-bin.js +6 -0
- package/dist/options.js +80 -0
- package/dist/page.js +80 -0
- package/dist/popup.js +80 -0
- package/dist/sidepanel.js +80 -0
- package/dist/test/assert.js +4 -0
- package/dist/test/fixtures/consumer-extension/dist/background.js +23 -0
- package/dist/test/fixtures/consumer-extension/dist/manifest.json +20 -0
- package/dist/test/fixtures/consumer-extension/dist/options.html +10 -0
- package/dist/test/fixtures/consumer-extension/dist/popup.bundle.js +5 -0
- package/dist/test/fixtures/consumer-extension/dist/popup.html +12 -0
- package/dist/test/harness/extension/background.js +26 -0
- package/dist/test/harness/extension/manifest.json +27 -0
- package/dist/test/harness/extension/options.html +12 -0
- package/dist/test/harness/extension/popup.html +12 -0
- package/dist/test/harness/extension/sidepanel.html +12 -0
- package/dist/test/index.js +63 -0
- package/dist/test/runner.js +99 -0
- package/dist/test/runners/boot.js +221 -0
- package/dist/test/runners/chromium.js +391 -0
- package/dist/test/runners/helpers.js +24 -0
- package/dist/test/suites/background/messaging.test.js +44 -0
- package/dist/test/suites/background/storage.test.js +46 -0
- package/dist/test/suites/background/sw-context.test.js +49 -0
- package/dist/test/suites/boot/build-json-bake.test.js +80 -0
- package/dist/test/suites/boot/extension-loads.test.js +58 -0
- package/dist/test/suites/build/affiliatizer.test.js +64 -0
- package/dist/test/suites/build/app-launch.test.js +65 -0
- package/dist/test/suites/build/attach-log-file.test.js +99 -0
- package/dist/test/suites/build/auth-emulator-gate.test.js +118 -0
- package/dist/test/suites/build/auth-triggers.test.js +71 -0
- package/dist/test/suites/build/boot-discovery.test.js +134 -0
- package/dist/test/suites/build/boot-timeout.test.js +92 -0
- package/dist/test/suites/build/build-error-notification.test.js +122 -0
- package/dist/test/suites/build/build-json-bake.test.js +302 -0
- package/dist/test/suites/build/build-verb.test.js +138 -0
- package/dist/test/suites/build/bundle-targets.test.js +66 -0
- package/dist/test/suites/build/cache-warming.test.js +44 -0
- package/dist/test/suites/build/cli.test.js +150 -0
- package/dist/test/suites/build/default-boot-test.test.js +100 -0
- package/dist/test/suites/build/defaults-scaffold.test.js +287 -0
- package/dist/test/suites/build/deploy-dispatch.test.js +76 -0
- package/dist/test/suites/build/distribute-task.test.js +111 -0
- package/dist/test/suites/build/ensure-target.test.js +141 -0
- package/dist/test/suites/build/env-delivery.test.js +239 -0
- package/dist/test/suites/build/env-watch.test.js +86 -0
- package/dist/test/suites/build/expect.test.js +48 -0
- package/dist/test/suites/build/exports.test.js +53 -0
- package/dist/test/suites/build/extension-fallback.test.js +82 -0
- package/dist/test/suites/build/framework-deps.test.js +176 -0
- package/dist/test/suites/build/global-handlers.test.js +70 -0
- package/dist/test/suites/build/icon-sheet.test.js +74 -0
- package/dist/test/suites/build/logger-lite.test.js +61 -0
- package/dist/test/suites/build/manager.test.js +249 -0
- package/dist/test/suites/build/mode-helpers.test.js +136 -0
- package/dist/test/suites/build/omega-shell.test.js +103 -0
- package/dist/test/suites/build/omega-tokens.test.js +76 -0
- package/dist/test/suites/build/package-task.test.js +831 -0
- package/dist/test/suites/build/setup-scripts.test.js +172 -0
- package/dist/test/suites/build/strip-dev-blocks.test.js +122 -0
- package/dist/test/suites/build/template-replace.test.js +116 -0
- package/dist/test/suites/build/test-discovery.test.js +64 -0
- package/dist/test/suites/build/test-target-no-match.test.js +119 -0
- package/dist/test/suites/build/theme-resolve.test.js +115 -0
- package/dist/test/suites/build/translate.test.js +85 -0
- package/dist/test/suites/build/url-helpers.test.js +119 -0
- package/dist/test/suites/build/verb-logs.test.js +43 -0
- package/dist/test/suites/build/verts-binding.test.js +67 -0
- package/dist/test/suites/build/wakeup-ping.test.js +90 -0
- package/dist/test/suites/build/wave5-messenger.test.js +80 -0
- package/dist/test/suites/view/options-and-sidepanel.test.js +16 -0
- package/dist/test/suites/view/popup-context.test.js +53 -0
- package/dist/test/suites/view/sidepanel.test.js +16 -0
- package/dist/test/utils/extended-mode-warning.js +13 -0
- package/dist/utils/attach-log-file.js +4 -0
- package/dist/utils/mode-helpers.js +117 -0
- package/dist/utils/url-helpers.js +69 -0
- package/dist/vendor/account/engine.js +182 -0
- package/dist/vendor/account/features.js +220 -0
- package/dist/vendor/account/index.js +53 -0
- package/dist/vendor/account/schema.js +272 -0
- package/dist/vendor/account/subscription.js +38 -0
- package/dist/vendor/config/company.js +31 -0
- package/dist/vendor/config/defaults.js +173 -0
- package/dist/vendor/config/demo.js +18 -0
- package/dist/vendor/config/desktop-artifacts.js +110 -0
- package/dist/vendor/config/edit.js +769 -0
- package/dist/vendor/config/env-delivery.js +145 -0
- package/dist/vendor/config/env-rules.js +93 -0
- package/dist/vendor/config/env-schema.js +1078 -0
- package/dist/vendor/config/env.js +445 -0
- package/dist/vendor/config/hooks.js +97 -0
- package/dist/vendor/config/index.js +237 -0
- package/dist/vendor/config/instances.js +208 -0
- package/dist/vendor/config/load.js +490 -0
- package/dist/vendor/config/merge.js +68 -0
- package/dist/vendor/config/order.js +139 -0
- package/dist/vendor/config/ports.js +374 -0
- package/dist/vendor/config/providers.js +32 -0
- package/dist/vendor/config/repo.js +142 -0
- package/dist/vendor/config/retired-keys.js +430 -0
- package/dist/vendor/config/schema.js +1610 -0
- package/dist/vendor/config/secrets.js +50 -0
- package/dist/vendor/config/seed.js +34 -0
- package/dist/vendor/config/site-global.js +205 -0
- package/dist/vendor/config/validate.js +554 -0
- package/dist/vendor/config/winback.js +61 -0
- package/dist/vendor/devkit/actions-secrets.js +145 -0
- package/dist/vendor/devkit/attach-log-file.js +262 -0
- package/dist/vendor/devkit/bundle.js +292 -0
- package/dist/vendor/devkit/ci-workflows.js +520 -0
- package/dist/vendor/devkit/clean-dirs.js +28 -0
- package/dist/vendor/devkit/cli-router.js +156 -0
- package/dist/vendor/devkit/defaults-engine.js +372 -0
- package/dist/vendor/devkit/deploy-precheck.js +54 -0
- package/dist/vendor/devkit/deploy-record.js +180 -0
- package/dist/vendor/devkit/deploy.js +286 -0
- package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
- package/dist/vendor/devkit/env-watch.js +132 -0
- package/dist/vendor/devkit/framework-deps.js +46 -0
- package/dist/vendor/devkit/icons.js +178 -0
- package/dist/vendor/devkit/license.js +155 -0
- package/dist/vendor/devkit/local.js +1905 -0
- package/dist/vendor/devkit/logger.js +128 -0
- package/dist/vendor/devkit/merge-line-files.js +296 -0
- package/dist/vendor/devkit/npm-registry.js +52 -0
- package/dist/vendor/devkit/omega-bin.js +345 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/scaffold-guard.js +96 -0
- package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
- package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
- package/dist/vendor/devkit/target-dependencies.js +137 -0
- package/dist/vendor/devkit/target-secrets.js +165 -0
- package/dist/vendor/devkit/test/assert.js +120 -0
- package/dist/vendor/devkit/test/define-cases.js +104 -0
- package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
- package/dist/vendor/devkit/test/runner-core.js +554 -0
- package/dist/vendor/devkit/test/scope.js +162 -0
- package/dist/vendor/devkit/translate/cache.js +84 -0
- package/dist/vendor/devkit/translate/engine.js +243 -0
- package/dist/vendor/devkit/translate/index.js +49 -0
- package/dist/vendor/devkit/translate/languages.js +134 -0
- package/dist/vendor/devkit/translate/providers.js +188 -0
- package/dist/vendor/devkit/update.js +569 -0
- package/docs/affiliatizer.md +81 -0
- package/docs/audit.md +67 -0
- package/docs/auth.md +149 -0
- package/docs/build-system.md +176 -0
- package/docs/cdp-debugging.md +42 -0
- package/docs/cli.md +73 -0
- package/docs/common-mistakes.md +10 -0
- package/docs/components.md +87 -0
- package/docs/css.md +133 -0
- package/docs/defaults.md +72 -0
- package/docs/environment-detection.md +79 -0
- package/docs/extension.md +93 -0
- package/docs/hooks.md +111 -0
- package/docs/icons.md +47 -0
- package/docs/index.md +291 -0
- package/docs/logging.md +33 -0
- package/docs/managers.md +100 -0
- package/docs/offscreen.md +57 -0
- package/docs/publishing.md +182 -0
- package/docs/shared/agent-docs.md +89 -0
- package/docs/shared/analytics.md +612 -0
- package/docs/shared/brands.md +51 -0
- package/docs/shared/breaking-changes.md +497 -0
- package/docs/shared/config.md +1387 -0
- package/docs/shared/deploys.md +215 -0
- package/docs/shared/icons.md +201 -0
- package/docs/shared/local-dev.md +147 -0
- package/docs/shared/logging.md +202 -0
- package/docs/shared/monitoring.md +153 -0
- package/docs/shared/publishing.md +183 -0
- package/docs/shared/rulings.md +34 -0
- package/docs/shared/testing.md +147 -0
- package/docs/shared/theming.md +604 -0
- package/docs/shared/translation.md +291 -0
- package/docs/shared/updates.md +61 -0
- package/docs/templating.md +66 -0
- package/docs/test-boot-layer.md +143 -0
- package/docs/test-framework.md +411 -0
- package/docs/themes.md +89 -0
- package/docs/translations.md +73 -0
- package/docs/verts.md +67 -0
- package/docs/xss-prevention.md +95 -0
- package/package.json +159 -0
|
@@ -0,0 +1,687 @@
|
|
|
1
|
+
// bundle — one esbuild pass over every browser entry point the project has.
|
|
2
|
+
//
|
|
3
|
+
// The bundler is esbuild since [#738](https://github.com/Omega-JS-Stack/omega/issues/738),
|
|
4
|
+
// and the file, the gulp task and the log tag were renamed off `webpack` with
|
|
5
|
+
// it — a task named after a bundler it no longer runs is a lie every reader has
|
|
6
|
+
// to unlearn. @babel/preset-env went with webpack: esbuild's `target` IS the
|
|
7
|
+
// syntax floor, stated once below.
|
|
8
|
+
//
|
|
9
|
+
// Every shared part comes from @omega.js/devkit's ONE bundle wrapper: the
|
|
10
|
+
// framework-deps resolve hook (#87 — a consumer requires a framework dependency
|
|
11
|
+
// by bare name and gets the FRAMEWORK's copy), the production `@dev-only` strip
|
|
12
|
+
// (#18), the minify/sourcemap rules by mode, and one timing line per build.
|
|
13
|
+
// What lives here is only what is genuinely the extension's: the entry
|
|
14
|
+
// discovery, the browser syntax floor, the asset/theme aliases, the Node-builtin
|
|
15
|
+
// shim, the `%%%key%%%` substitution, and the OMEGA_BUILD_JSON bake.
|
|
16
|
+
//
|
|
17
|
+
// The bake ([#743](https://github.com/Omega-JS-Stack/omega/issues/743)) is
|
|
18
|
+
// @omega.js/desktop's, key for key: `define` replaces the bare identifier at
|
|
19
|
+
// compile time and `banner` prepends the global assignment, so every emitted
|
|
20
|
+
// bundle carries its own copy. package.js used to write the snapshot as a
|
|
21
|
+
// `packaged/<target>/raw/build.js` JSONP file (plus a `build.json` sidecar
|
|
22
|
+
// nothing read) that the service worker importScripts()'d and every page loaded
|
|
23
|
+
// with its own <script> tag — one baked config, two techniques on sibling
|
|
24
|
+
// frameworks. Neither file is written any more.
|
|
25
|
+
//
|
|
26
|
+
// ONE call covers every lane. webpack needed three configs because code
|
|
27
|
+
// SPLITTING had to be switched off per lane (a service worker and a content
|
|
28
|
+
// script cannot fetch a chunk under MV3's CSP); esbuild's `iife` format has no
|
|
29
|
+
// splitting at all, so background, content scripts and the extension pages all
|
|
30
|
+
// take the same options and each bundle is one self-contained file.
|
|
31
|
+
|
|
32
|
+
// Libraries
|
|
33
|
+
const Manager = new (require('../../build.js'));
|
|
34
|
+
const logger = Manager.logger('bundle');
|
|
35
|
+
const watcherLogger = Manager.logger('bundle:watcher');
|
|
36
|
+
const { watch, series } = require('gulp');
|
|
37
|
+
const glob = require('glob').globSync;
|
|
38
|
+
const path = require('path');
|
|
39
|
+
const jetpack = require('fs-jetpack');
|
|
40
|
+
const { template } = require('node-powertools');
|
|
41
|
+
const version = require('wonderful-version');
|
|
42
|
+
const { bundle, formatBytes } = require('../../vendor/devkit/bundle.js');
|
|
43
|
+
const { emptyModulesPlugin } = require('../../vendor/devkit/empty-modules-plugin.js');
|
|
44
|
+
const { resolveThemeId } = require('../../lib/theme.js');
|
|
45
|
+
const { readSiblingPorts, envPorts } = require('../../vendor/config/index.js');
|
|
46
|
+
const { bakeKeys } = require('../../vendor/config/env-delivery.js');
|
|
47
|
+
const { checkEnvRules } = require('../../vendor/config/env-rules.js');
|
|
48
|
+
const { resolveLicenseStamp } = require('../../vendor/devkit/license.js');
|
|
49
|
+
|
|
50
|
+
// Load package
|
|
51
|
+
const project = Manager.getPackage('project');
|
|
52
|
+
const frameworkPackage = Manager.getPackage('main');
|
|
53
|
+
const manifest = Manager.getManifest();
|
|
54
|
+
const config = Manager.getConfig();
|
|
55
|
+
const rootPathPackage = Manager.getRootPath('main');
|
|
56
|
+
const rootPathProject = Manager.getRootPath('project');
|
|
57
|
+
|
|
58
|
+
// Themes are per-framework (#261) — a shared theme.id naming a WEB theme falls
|
|
59
|
+
// back to the extension's default instead of aliasing a directory that isn't there.
|
|
60
|
+
const themesDir = path.resolve(rootPathPackage, 'dist/assets/themes');
|
|
61
|
+
const themeId = resolveThemeId(config.theme?.id, { themesDir, logger });
|
|
62
|
+
|
|
63
|
+
// Chrome 88 is where MV3 shipped — nothing older can load the artifact at all.
|
|
64
|
+
const CHROME_MV3_FLOOR = 88;
|
|
65
|
+
// Firefox 91 is the `strict_min_version` the framework's default manifest
|
|
66
|
+
// (src/config/manifest.json) ships, so it is the floor of an extension that
|
|
67
|
+
// declares none of its own.
|
|
68
|
+
const FIREFOX_MV3_FLOOR = 91;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The syntax floor, READ from the manifest (it was @babel/preset-env's
|
|
72
|
+
* browserslist guess before #738). The project already declares its floor in
|
|
73
|
+
* the one place a browser reads — `minimum_chrome_version` and
|
|
74
|
+
* `browser_specific_settings.gecko.strict_min_version` — so the bundler takes
|
|
75
|
+
* it from there and moves whenever the consumer moves it. Undeclared, each
|
|
76
|
+
* side falls back to its MV3 minimum above. esbuild compiles SYNTAX down to
|
|
77
|
+
* this pair and leaves everything newer alone; it never polyfills a runtime
|
|
78
|
+
* API, which is the one thing preset-env's core-js path could have done and
|
|
79
|
+
* this build never asked it to.
|
|
80
|
+
* @param {object} manifest - the project's manifest (`Manager.getManifest()`)
|
|
81
|
+
* @returns {string[]} esbuild targets, `['chrome<n>', 'firefox<n>']`
|
|
82
|
+
*/
|
|
83
|
+
function resolveSyntaxTarget(manifest) {
|
|
84
|
+
const chrome = majorVersion(manifest.minimum_chrome_version);
|
|
85
|
+
const firefox = majorVersion(manifest.browser_specific_settings?.gecko?.strict_min_version);
|
|
86
|
+
|
|
87
|
+
return [
|
|
88
|
+
`chrome${chrome || CHROME_MV3_FLOOR}`,
|
|
89
|
+
`firefox${firefox || FIREFOX_MV3_FLOOR}`,
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The major of a declared manifest version (`'91.0'`, `'110'`), or null when
|
|
95
|
+
* the value is not one — a floor nobody can parse must not become an invented
|
|
96
|
+
* esbuild target.
|
|
97
|
+
* @param {string|number} [declared] - the manifest value
|
|
98
|
+
* @returns {number|null}
|
|
99
|
+
*/
|
|
100
|
+
function majorVersion(declared) {
|
|
101
|
+
const major = parseInt(String(declared).split('.')[0], 10);
|
|
102
|
+
return Number.isInteger(major) ? major : null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const SYNTAX_TARGET = resolveSyntaxTarget(manifest);
|
|
106
|
+
|
|
107
|
+
// Extension pages, content scripts and the service worker are all browser
|
|
108
|
+
// environments with no Node built-ins, but libraries bundled through
|
|
109
|
+
// @omega.js/client (firebase and friends) still IMPORT them on code paths their
|
|
110
|
+
// browser builds never take. webpack answered `resolve.fallback: { fs: false, … }`;
|
|
111
|
+
// esbuild has no such option, so the same list goes to @omega.js/devkit's
|
|
112
|
+
// `emptyModulesPlugin` — the shared hook, the same one @omega.js/desktop's
|
|
113
|
+
// renderer passes its own list to.
|
|
114
|
+
const BROWSER_EMPTY_MODULES = [
|
|
115
|
+
'fs', 'path', 'crypto', 'os', 'util', 'assert', 'stream', 'buffer', 'process',
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
// The build-time tokens consumer and framework browser code writes, and the
|
|
119
|
+
// brackets they are spelled with (`%%%version%%%`). package.js speaks the same
|
|
120
|
+
// idiom over the manifest.
|
|
121
|
+
const TEMPLATE_BRACKETS = ['%%%', '%%%'];
|
|
122
|
+
|
|
123
|
+
// Define bundle files separately for easier tracking
|
|
124
|
+
const bundleFiles = [
|
|
125
|
+
// Main bundles (if any exist in bundles/ directory)
|
|
126
|
+
`${rootPathPackage}/dist/assets/js/bundles/*.js`,
|
|
127
|
+
|
|
128
|
+
// Project bundles
|
|
129
|
+
'src/assets/js/bundles/*.js',
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
// Entry points to compile (only index.js files)
|
|
133
|
+
const input = [
|
|
134
|
+
// Bundle files (if any exist)
|
|
135
|
+
...bundleFiles,
|
|
136
|
+
|
|
137
|
+
// Component-specific JS (only index.js entry points)
|
|
138
|
+
`${rootPathPackage}/dist/assets/js/components/**/index.js`,
|
|
139
|
+
'src/assets/js/components/**/index.js',
|
|
140
|
+
];
|
|
141
|
+
|
|
142
|
+
// Additional files to watch (but not compile as entry points)
|
|
143
|
+
const watchInput = [
|
|
144
|
+
// Watch the paths we're compiling
|
|
145
|
+
...input,
|
|
146
|
+
|
|
147
|
+
// Core JS - watch for changes but don't compile as entry points
|
|
148
|
+
`${rootPathPackage}/dist/assets/js/**/*.js`,
|
|
149
|
+
`${rootPathProject}/src/assets/js/**/*.js`,
|
|
150
|
+
|
|
151
|
+
// Theme js - watch for changes but don't compile as entry points
|
|
152
|
+
`${rootPathPackage}/dist/assets/themes/**/*.js`,
|
|
153
|
+
'src/assets/themes/**/*.js',
|
|
154
|
+
|
|
155
|
+
// All project assets js - watch for changes but don't compile as entry points
|
|
156
|
+
'src/assets/js/**/*.js',
|
|
157
|
+
|
|
158
|
+
// All BXM package src files - watch for changes (includes background.js, popup.js, etc.)
|
|
159
|
+
`${rootPathPackage}/src/**/*.js`,
|
|
160
|
+
|
|
161
|
+
// So we can watch for changes while we're developing @omega.js/client
|
|
162
|
+
`${rootPathPackage}/../client/src`,
|
|
163
|
+
];
|
|
164
|
+
|
|
165
|
+
const delay = 250;
|
|
166
|
+
const compiled = {};
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The one esbuild build: every discovered entry, one self-contained iife each.
|
|
170
|
+
* @returns {Promise<object|null>} esbuild's result (metafile on), or null when the project has no entries
|
|
171
|
+
*/
|
|
172
|
+
async function runBundle() {
|
|
173
|
+
const entries = updateEntryPoints(input);
|
|
174
|
+
|
|
175
|
+
if (Object.keys(entries).length === 0) {
|
|
176
|
+
logger.warn('No entry points found.');
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// OMEGA_BUILD_JSON — frozen at build time and carried by EVERY emitted bundle,
|
|
181
|
+
// the service worker and the pages alike ([#743](https://github.com/Omega-JS-Stack/omega/issues/743)).
|
|
182
|
+
const buildJson = await composeBuildJson();
|
|
183
|
+
|
|
184
|
+
const result = await bundle({
|
|
185
|
+
frameworkRoot: rootPathPackage,
|
|
186
|
+
// The KEY is the output path under `outdir`, extension included by
|
|
187
|
+
// entryNames' absence: `components/popup.bundle` → components/popup.bundle.js,
|
|
188
|
+
// which is the file the page template's <script src> and the manifest's
|
|
189
|
+
// `background.service_worker` ask for.
|
|
190
|
+
entries,
|
|
191
|
+
outdir: path.resolve(process.cwd(), 'dist/assets/js'),
|
|
192
|
+
platform: 'browser',
|
|
193
|
+
// iife, never esm: every bundle is loaded as a plain <script src>, a
|
|
194
|
+
// content script, or an MV3 service worker registered as a classic script.
|
|
195
|
+
format: 'iife',
|
|
196
|
+
target: SYNTAX_TARGET,
|
|
197
|
+
dev: !Manager.actLikeProduction(),
|
|
198
|
+
alias: {
|
|
199
|
+
// For importing assets
|
|
200
|
+
'__main_assets__': path.resolve(rootPathPackage, 'dist/assets'),
|
|
201
|
+
'__project_assets__': path.resolve(process.cwd(), 'src/assets'),
|
|
202
|
+
|
|
203
|
+
// For importing the theme
|
|
204
|
+
'__theme__': path.resolve(themesDir, themeId),
|
|
205
|
+
},
|
|
206
|
+
define: buildJsonDefines(buildJson),
|
|
207
|
+
banner: buildJsonBanner(buildJson),
|
|
208
|
+
plugins: [emptyModulesPlugin(BROWSER_EMPTY_MODULES)],
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
// What each entry cost, from the metafile the wrapper turns on. Printed
|
|
212
|
+
// BEFORE the substitution below, because the metafile's byte counts are what
|
|
213
|
+
// esbuild emitted — reading them after a rewrite would report stale numbers.
|
|
214
|
+
Object.entries(result.metafile.outputs).forEach(([file, meta]) => {
|
|
215
|
+
logger.log(` ${path.relative(process.cwd(), file)} (${formatBytes(meta.bytes)})`);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// The `%%%key%%%` pass, over what the build just emitted. webpack ran it as a
|
|
219
|
+
// processAssets hook; esbuild has no mutate-then-rewrite stage, so it happens
|
|
220
|
+
// here — after minification, which is the only ordering that matters (the
|
|
221
|
+
// tokens live inside string literals and survive it intact).
|
|
222
|
+
const emitted = Object.keys(result.metafile.outputs)
|
|
223
|
+
.filter((file) => file.endsWith('.js'))
|
|
224
|
+
.map((file) => path.resolve(file));
|
|
225
|
+
substituteTemplates(emitted, getTemplateReplaceOptions());
|
|
226
|
+
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Fill every `%%%key%%%` token in the given files from the replacement set. A
|
|
232
|
+
* key nothing answers is LEFT INTACT (node-powertools' template semantics), so
|
|
233
|
+
* a consumer's own unrelated `%%%` text is never emptied out.
|
|
234
|
+
* @param {string[]} files - absolute paths of the emitted JS files
|
|
235
|
+
* @param {object} replacements - the replacement set (see getTemplateReplaceOptions)
|
|
236
|
+
* @returns {number} how many files changed
|
|
237
|
+
*/
|
|
238
|
+
function substituteTemplates(files, replacements) {
|
|
239
|
+
let changed = 0;
|
|
240
|
+
|
|
241
|
+
files.forEach((file) => {
|
|
242
|
+
const contents = jetpack.read(file);
|
|
243
|
+
if (!contents) return;
|
|
244
|
+
|
|
245
|
+
const replaced = template(contents, replacements, { brackets: TEMPLATE_BRACKETS });
|
|
246
|
+
if (replaced === contents) return;
|
|
247
|
+
|
|
248
|
+
jetpack.write(file, replaced);
|
|
249
|
+
changed++;
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
return changed;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// The blob every bundle reads as `OMEGA_BUILD_JSON.config` — and the ONLY thing
|
|
256
|
+
// the extension contexts hand @omega.js/client. An extension page and a service
|
|
257
|
+
// worker have no env and no filesystem walk of their own, so the bake is their
|
|
258
|
+
// one channel; it lived in package.js as a `build.js` JSONP file the SW
|
|
259
|
+
// importScripts()'d and every page loaded with its own <script> tag until
|
|
260
|
+
// [#743](https://github.com/Omega-JS-Stack/omega/issues/743) moved it into the
|
|
261
|
+
// bundles themselves, the shape @omega.js/desktop has always used.
|
|
262
|
+
function composeBuildConfig() {
|
|
263
|
+
// omega.json5 `monitoring.providers.sentry` → the client's sentry contract
|
|
264
|
+
// (#425). The provider block feeds Sentry.init directly; the role level
|
|
265
|
+
// (`enabled`) never rides along.
|
|
266
|
+
const sentryConfig = { ...(config.monitoring?.providers?.sentry || {}) };
|
|
267
|
+
|
|
268
|
+
// The live sibling website's published origin, or null when none is up (#262)
|
|
269
|
+
const devWebsiteOrigin = Manager.getDevWebsiteOrigin();
|
|
270
|
+
|
|
271
|
+
// The Measurement Protocol secret (.env — secrets never live in omega.json5).
|
|
272
|
+
const googleAnalyticsId = config.analytics?.providers?.google?.id || '';
|
|
273
|
+
const googleAnalyticsSecret = readBakedEnv(process.env, { config }).GOOGLE_ANALYTICS_SECRET;
|
|
274
|
+
|
|
275
|
+
return {
|
|
276
|
+
// Core metadata
|
|
277
|
+
runtime: 'browser-extension',
|
|
278
|
+
version: project.version,
|
|
279
|
+
environment: Manager.getEnvironment(),
|
|
280
|
+
buildTime: Date.now(),
|
|
281
|
+
|
|
282
|
+
// Brand configuration (from config/omega.json5 or manifest)
|
|
283
|
+
brand: config.brand || {},
|
|
284
|
+
|
|
285
|
+
// The local stack's resolved facts (N7). An extension context has no
|
|
286
|
+
// env and no filesystem, so this bake is its ONLY channel: the sibling
|
|
287
|
+
// backend's published map plus anything a parent injected on the env
|
|
288
|
+
// channel, and the sibling WEBSITE's published origin
|
|
289
|
+
// ([#262](https://github.com/Omega-JS-Stack/omega/issues/262)) —
|
|
290
|
+
// resolved per build so a rebuild follows a restarted emulator
|
|
291
|
+
// ([#300](https://github.com/Omega-JS-Stack/omega/issues/300)).
|
|
292
|
+
// Production packages carry none — there is no local stack to reach.
|
|
293
|
+
// A key present is a resolved fact; absent, @omega.js/client assumes the
|
|
294
|
+
// classic and warns — so an unpublished origin ships no origin at all.
|
|
295
|
+
...(Manager.getEnvironment() === 'production'
|
|
296
|
+
? {}
|
|
297
|
+
: { dev: {
|
|
298
|
+
ports: { ...readSiblingPorts(rootPathProject), ...envPorts() },
|
|
299
|
+
...(devWebsiteOrigin ? { origin: devWebsiteOrigin } : {}),
|
|
300
|
+
} }),
|
|
301
|
+
|
|
302
|
+
// Cloud (firebase) config in the CANONICAL `cloud.config` shape —
|
|
303
|
+
// what @omega.js/client prefers and the only shape background.js
|
|
304
|
+
// reads. Without it the SW's Firebase auth never initializes (#46).
|
|
305
|
+
cloud: config.cloud || {},
|
|
306
|
+
|
|
307
|
+
// OMEGA build metadata
|
|
308
|
+
omega: {
|
|
309
|
+
environment: Manager.getEnvironment(),
|
|
310
|
+
cache_breaker: Math.round(new Date().getTime() / 1000),
|
|
311
|
+
// Resolved at serve time (N7) — the getter reads the allocator's
|
|
312
|
+
// OMEGA_LIVERELOAD_PORT, so a bumped server and the baked client
|
|
313
|
+
// agree. Packaged (non-serve) builds bake the classic default.
|
|
314
|
+
liveReloadPort: config.liveReloadPort || Manager.getLiveReloadPort(),
|
|
315
|
+
},
|
|
316
|
+
|
|
317
|
+
// Web-manager features (matching expected structure)
|
|
318
|
+
auth: { enabled: true, config: {} },
|
|
319
|
+
|
|
320
|
+
firebase: {
|
|
321
|
+
app: {
|
|
322
|
+
enabled: !!(config.cloud?.config?.apiKey),
|
|
323
|
+
config: config.cloud?.config || {},
|
|
324
|
+
},
|
|
325
|
+
appCheck: { enabled: false, config: {} },
|
|
326
|
+
},
|
|
327
|
+
|
|
328
|
+
consent: { enabled: true, config: {} },
|
|
329
|
+
inbound: (() => {
|
|
330
|
+
// Curated to the leaves the client runtime reads (#23) — the provisioning-only
|
|
331
|
+
// siblings (template ids, plan, update flags) never ship in the bundle
|
|
332
|
+
const chatsy = config.inbound?.chat?.providers?.chatsy;
|
|
333
|
+
return { chat: { providers: { chatsy: chatsy
|
|
334
|
+
? { enabled: chatsy.enabled, agentId: chatsy.agentId, settings: chatsy.settings }
|
|
335
|
+
: { enabled: false } } } };
|
|
336
|
+
})(),
|
|
337
|
+
sentry: {
|
|
338
|
+
enabled: !!(sentryConfig.dsn),
|
|
339
|
+
config: sentryConfig,
|
|
340
|
+
},
|
|
341
|
+
exitPopup: { enabled: false, config: {} },
|
|
342
|
+
lazyLoading: { enabled: true, config: {} },
|
|
343
|
+
socialSharing: { enabled: false, config: {} },
|
|
344
|
+
pushNotifications: { enabled: false, config: {} },
|
|
345
|
+
validRedirectHosts: [],
|
|
346
|
+
refreshNewVersion: { enabled: true, config: {} },
|
|
347
|
+
serviceWorker: { enabled: false, config: {} },
|
|
348
|
+
|
|
349
|
+
// Analytics (canonical providers shape — C4 cp106a). The Measurement
|
|
350
|
+
// Protocol API secret comes from .env (GOOGLE_ANALYTICS_SECRET —
|
|
351
|
+
// matches @omega.js/backend/EM convention; secrets never live in
|
|
352
|
+
// omega.json5) and is baked into the snapshot here at build time.
|
|
353
|
+
analytics: {
|
|
354
|
+
providers: {
|
|
355
|
+
google: {
|
|
356
|
+
id: googleAnalyticsId,
|
|
357
|
+
secret: googleAnalyticsSecret,
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
|
|
362
|
+
// Theme config
|
|
363
|
+
theme: config.theme || {},
|
|
364
|
+
|
|
365
|
+
// Advertising (ads-system phase 4) — feeds the client verts module's
|
|
366
|
+
// house/company lane (extension surfaces never run AdSense; lib/verts.js
|
|
367
|
+
// pins the house type). company carries the parent's url so the
|
|
368
|
+
// inhouse source 'company' can resolve.
|
|
369
|
+
advertising: config.advertising || {},
|
|
370
|
+
company: config.company || {},
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// OMEGA_BUILD_JSON itself — the build's own record of what it produced. The
|
|
375
|
+
// `license` stamp ([#320](https://github.com/Omega-JS-Stack/omega/issues/320))
|
|
376
|
+
// rides HERE and not inside `config`: it is a fact about the BUILD, not part of
|
|
377
|
+
// the client contract the extension contexts hand @omega.js/client. A packaged
|
|
378
|
+
// extension has no attribution surface and its payments ride the backend's own
|
|
379
|
+
// gate — this is the artifact's record of what it was packaged as.
|
|
380
|
+
async function composeBuildJson() {
|
|
381
|
+
// Resolved ONCE per build: a PRODUCTION build asks the license server (a key
|
|
382
|
+
// that cannot be answered THROWS, which is what gates a bad-key publish), and
|
|
383
|
+
// a dev build is keyless by definition and never phones home. It used to be
|
|
384
|
+
// memoized because packageRaw ran per browser target; one bundle pass bakes
|
|
385
|
+
// the one snapshot every target then copies, so one call is the whole run.
|
|
386
|
+
const license = await resolveLicenseStamp({ config, production: Manager.getEnvironment() === 'production' });
|
|
387
|
+
|
|
388
|
+
// The verdict a run built under, said ONCE — web/backend/desktop all print theirs.
|
|
389
|
+
logger.log(`bundling — environment=${Manager.getEnvironment()}, license=${license.status}`);
|
|
390
|
+
|
|
391
|
+
return {
|
|
392
|
+
timestamp: new Date().toISOString(),
|
|
393
|
+
repo: getGitInfo(),
|
|
394
|
+
environment: Manager.getEnvironment(),
|
|
395
|
+
license,
|
|
396
|
+
packages: {
|
|
397
|
+
[frameworkPackage.name]: frameworkPackage.version,
|
|
398
|
+
'@omega.js/client': getPackageVersion('@omega.js/client'),
|
|
399
|
+
},
|
|
400
|
+
config: composeBuildConfig(),
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* The compile-time replacement: a bare `OMEGA_BUILD_JSON` identifier becomes the
|
|
406
|
+
* literal, so framework and consumer code can reference the snapshot without
|
|
407
|
+
* reaching for a global.
|
|
408
|
+
* @param {object} buildJson - The blob every bundle bakes.
|
|
409
|
+
* @returns {object} an esbuild define map
|
|
410
|
+
*/
|
|
411
|
+
function buildJsonDefines(buildJson) {
|
|
412
|
+
return {
|
|
413
|
+
OMEGA_BUILD_JSON: JSON.stringify(buildJson),
|
|
414
|
+
// webpack derived this from its `mode`; esbuild has no modes, so the
|
|
415
|
+
// switch every bundled library reads is stated here instead. Dropping it
|
|
416
|
+
// would ship every library's DEVELOPMENT branch to a store.
|
|
417
|
+
'process.env.NODE_ENV': Manager.actLikeProduction() ? '"production"' : '"development"',
|
|
418
|
+
// Libraries like lodash/@firebase/util reference the Node-ism `global`;
|
|
419
|
+
// a browser bundle leaves it undefined, so it is rewritten textually.
|
|
420
|
+
global: 'globalThis',
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* The global assignment every bundle carries, prepended ahead of its own code so
|
|
426
|
+
* the snapshot is there before anything reads it — the load order the SW's
|
|
427
|
+
* `importScripts('/build.js')` and the page template's `<script src="/build.js">`
|
|
428
|
+
* used to buy. All three scopes are assigned because all three are read:
|
|
429
|
+
* `serviceWorker.OMEGA_BUILD_JSON` in background.js, `window.OMEGA_BUILD_JSON`
|
|
430
|
+
* in every page context, and `globalThis` from DevTools and consumer code.
|
|
431
|
+
* @param {object} buildJson - The blob every bundle bakes.
|
|
432
|
+
* @returns {object} an esbuild banner
|
|
433
|
+
*/
|
|
434
|
+
function buildJsonBanner(buildJson) {
|
|
435
|
+
const literal = JSON.stringify(buildJson);
|
|
436
|
+
return {
|
|
437
|
+
js: `(function(){var __omegaBuildJson=${literal};if(typeof globalThis!=='undefined'){globalThis.OMEGA_BUILD_JSON=__omegaBuildJson;}if(typeof self!=='undefined'){self.OMEGA_BUILD_JSON=__omegaBuildJson;}if(typeof window!=='undefined'){window.OMEGA_BUILD_JSON=__omegaBuildJson;}})();`,
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// The keys the env schema says this build writes INTO the shipped artifact
|
|
442
|
+
// ([#627](https://github.com/Omega-JS-Stack/omega/issues/627)): a packaged
|
|
443
|
+
// extension runs with no `.env`, so a `delivery: { extension: 'bake' }` key is
|
|
444
|
+
// read from the build env here and baked into the bundles. The list is the
|
|
445
|
+
// schema's — the hardcoded GOOGLE_ANALYTICS_SECRET read this replaced was one of
|
|
446
|
+
// three hand-kept lists for one concern.
|
|
447
|
+
const BAKED_KEYS = bakeKeys('extension');
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* The schema's presence rules at the BAKE seam
|
|
451
|
+
* ([#626](https://github.com/Omega-JS-Stack/omega/issues/626)) — the last
|
|
452
|
+
* moment a missing key is still fixable.
|
|
453
|
+
*
|
|
454
|
+
* A packaged extension runs with no `.env`, so what the bake holds is what the
|
|
455
|
+
* artifact holds forever: a brand with a GA4 stream id and no Measurement
|
|
456
|
+
* Protocol secret used to bake an empty string and ship an extension that sends
|
|
457
|
+
* no events, silently — #582's failure mode, and the CI publish that has no
|
|
458
|
+
* `.env` at all is exactly where it happens. A BUILD refuses; development
|
|
459
|
+
* warns and keeps going, because a half-configured brand is a normal step on
|
|
460
|
+
* the way to a configured one.
|
|
461
|
+
*
|
|
462
|
+
* @param {object} config - The target's resolved omega.json5 config.
|
|
463
|
+
* @param {object} env - The build env.
|
|
464
|
+
* @param {object} [options]
|
|
465
|
+
* @param {boolean} [options.build] - Build/publish mode (default: the Manager's).
|
|
466
|
+
* @param {object} [options.logger] - Logger with `warn` (default: this task's).
|
|
467
|
+
* @throws {Error} in build mode, naming every brand-level key and the config path that requires it.
|
|
468
|
+
*/
|
|
469
|
+
function assertBakeRules(config, env, options) {
|
|
470
|
+
options = options || {};
|
|
471
|
+
const build = options.build === undefined ? Manager.isBuildMode() : options.build;
|
|
472
|
+
const warn = (options.logger || logger).warn.bind(options.logger || logger);
|
|
473
|
+
|
|
474
|
+
const violations = checkEnvRules(config, env, { target: 'extension' })
|
|
475
|
+
.filter((violation) => violation.rule === 'requiredWhen');
|
|
476
|
+
if (violations.length === 0) return;
|
|
477
|
+
|
|
478
|
+
// The BRAND-LEVEL key name (GOOGLE_ANALYTICS_SECRET_EXTENSION, not the
|
|
479
|
+
// GOOGLE_ANALYTICS_SECRET it is delivered as): that is the name a human puts
|
|
480
|
+
// in the brand .env and in the repo's Actions secrets.
|
|
481
|
+
const named = violations.map(({ key, path }) => `${key} (required by ${path})`).join(', ');
|
|
482
|
+
const message = `${violations.length} env ${violations.length === 1 ? 'key this brand\'s config requires is' : 'keys this brand\'s config requires are'} missing from the build env: ${named}. `
|
|
483
|
+
+ 'Set it in the brand .env (and as a repo Actions secret for a CI publish — `omega deploy` pushes them), then build again.';
|
|
484
|
+
|
|
485
|
+
if (build) {
|
|
486
|
+
throw new Error(message);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
warn(message);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// The baked keys' values from the build env. Absent reads as the empty string,
|
|
493
|
+
// never undefined: the snapshot is JSON, and a missing key would read to the
|
|
494
|
+
// client as "no analytics configured" rather than "configured, no secret".
|
|
495
|
+
//
|
|
496
|
+
// The presence guard runs FIRST: a build that would bake an empty secret over a
|
|
497
|
+
// configured stream refuses here rather than shipping the hole.
|
|
498
|
+
function readBakedEnv(env, options) {
|
|
499
|
+
env = env || process.env;
|
|
500
|
+
|
|
501
|
+
if (options && options.config) {
|
|
502
|
+
assertBakeRules(options.config, env, options);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
return Object.fromEntries(BAKED_KEYS.map((key) => [key, env[key] || '']));
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// Get git info
|
|
509
|
+
function getGitInfo() {
|
|
510
|
+
try {
|
|
511
|
+
const { execSync } = require('child_process');
|
|
512
|
+
const user = execSync('git config user.name', { encoding: 'utf8' }).trim();
|
|
513
|
+
const repo = execSync('git config --get remote.origin.url', { encoding: 'utf8' })
|
|
514
|
+
.trim()
|
|
515
|
+
.replace(/.*[\/:]([\w-]+)\/([\w-]+)(\.git)?$/, '$2');
|
|
516
|
+
|
|
517
|
+
return { user, name: repo };
|
|
518
|
+
} catch (e) {
|
|
519
|
+
return { user: 'unknown', name: 'unknown' };
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
// Get package version
|
|
524
|
+
function getPackageVersion(packageName) {
|
|
525
|
+
try {
|
|
526
|
+
const pkgPath = require.resolve(`${packageName}/package.json`, {
|
|
527
|
+
paths: [process.cwd()]
|
|
528
|
+
});
|
|
529
|
+
const pkg = require(pkgPath);
|
|
530
|
+
return pkg.version;
|
|
531
|
+
} catch (e) {
|
|
532
|
+
return 'unknown';
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// Task
|
|
537
|
+
function bundleTask(complete) {
|
|
538
|
+
// Log
|
|
539
|
+
logger.log('Starting...');
|
|
540
|
+
Manager.logMemory(logger, 'Start');
|
|
541
|
+
logger.log(`Mode: ${Manager.actLikeProduction() ? 'production' : 'development'}`);
|
|
542
|
+
logger.log(`Target: ${SYNTAX_TARGET.join(', ')}`);
|
|
543
|
+
|
|
544
|
+
runBundle()
|
|
545
|
+
.then(() => {
|
|
546
|
+
// Log
|
|
547
|
+
logger.log('Finished!');
|
|
548
|
+
|
|
549
|
+
// Trigger rebuild
|
|
550
|
+
Manager.triggerRebuild(compiled);
|
|
551
|
+
|
|
552
|
+
// Complete successfully
|
|
553
|
+
return complete();
|
|
554
|
+
})
|
|
555
|
+
// esbuild rejects with every error already formatted, so a failed build
|
|
556
|
+
// surfaces through the same reporter webpack's did.
|
|
557
|
+
.catch((e) => Manager.reportBuildError(Object.assign(e, { plugin: 'Bundle' }), complete));
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// Watcher task
|
|
561
|
+
function bundleWatcher(complete) {
|
|
562
|
+
// Quit if in build mode
|
|
563
|
+
if (Manager.isBuildMode()) {
|
|
564
|
+
watcherLogger.log('Skipping watcher in build mode');
|
|
565
|
+
return complete();
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// Log
|
|
569
|
+
watcherLogger.log('Watching for changes...');
|
|
570
|
+
|
|
571
|
+
// Watch for changes
|
|
572
|
+
watch(watchInput, { delay: delay, dot: true }, bundleTask)
|
|
573
|
+
.on('change', (path) => {
|
|
574
|
+
// Log
|
|
575
|
+
watcherLogger.log(`File changed (${path})`);
|
|
576
|
+
});
|
|
577
|
+
|
|
578
|
+
// Complete
|
|
579
|
+
return complete();
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
function updateEntryPoints(inputArray) {
|
|
583
|
+
// Get all JS files
|
|
584
|
+
const files = glob(inputArray).map((f) => path.resolve(f));
|
|
585
|
+
|
|
586
|
+
// Sort: main files first
|
|
587
|
+
files.sort((a, b) => {
|
|
588
|
+
const aIsMain = a.startsWith(rootPathPackage);
|
|
589
|
+
const bIsMain = b.startsWith(rootPathPackage);
|
|
590
|
+
return aIsMain === bIsMain ? 0 : aIsMain ? -1 : 1;
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
// Update from src
|
|
594
|
+
const entries = files.reduce((acc, file) => {
|
|
595
|
+
let name;
|
|
596
|
+
|
|
597
|
+
// Determine naming based on file type
|
|
598
|
+
if (file.includes('/assets/js/bundles/')) {
|
|
599
|
+
// Bundle files: bundles/my-bundle.js -> bundles/my-bundle
|
|
600
|
+
name = file.split('/assets/js/')[1];
|
|
601
|
+
} else if (file.includes('/assets/js/components/')) {
|
|
602
|
+
// Component files: special handling for pages vs other components
|
|
603
|
+
// Pages can have multiple files (index, pricing, login, etc.)
|
|
604
|
+
// Other components (popup, options, etc.) only have index
|
|
605
|
+
const componentPath = file.split('/assets/js/')[1];
|
|
606
|
+
const isInPages = componentPath.includes('/pages/');
|
|
607
|
+
|
|
608
|
+
if (componentPath.endsWith('/index.js') && !isInPages) {
|
|
609
|
+
// For non-pages components: strip /index.js
|
|
610
|
+
// components/popup/index.js -> components/popup
|
|
611
|
+
const parts = componentPath.split('/');
|
|
612
|
+
parts.pop(); // remove index.js
|
|
613
|
+
name = parts.join('/');
|
|
614
|
+
} else {
|
|
615
|
+
// For pages or non-index files: keep full path
|
|
616
|
+
// components/pages/index.js -> components/pages/index
|
|
617
|
+
// components/pages/pricing.js -> components/pages/pricing
|
|
618
|
+
name = componentPath.replace(/\.js$/, '');
|
|
619
|
+
}
|
|
620
|
+
} else if (file.includes('/assets/js/pages/')) {
|
|
621
|
+
// Page files: keep full path
|
|
622
|
+
name = file.split('/assets/js/')[1].replace(/\.js$/, '');
|
|
623
|
+
} else {
|
|
624
|
+
// Everything else: just use the base filename
|
|
625
|
+
name = path.basename(file);
|
|
626
|
+
name = name.replace(/\.js$/, '');
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// Track the full output path
|
|
630
|
+
const fullPath = path.resolve(process.cwd(), 'dist/assets/js', `${name}.bundle.js`);
|
|
631
|
+
compiled[fullPath] = true;
|
|
632
|
+
|
|
633
|
+
// Update entry points
|
|
634
|
+
acc[`${name}.bundle`] = file;
|
|
635
|
+
|
|
636
|
+
// Return
|
|
637
|
+
return acc;
|
|
638
|
+
}, {});
|
|
639
|
+
|
|
640
|
+
// Log
|
|
641
|
+
logger.log('Updated entry points:', entries);
|
|
642
|
+
return entries;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
function getTemplateReplaceOptions() {
|
|
646
|
+
// Setup options
|
|
647
|
+
const options = {
|
|
648
|
+
// App & Project
|
|
649
|
+
...project,
|
|
650
|
+
...manifest,
|
|
651
|
+
...config,
|
|
652
|
+
|
|
653
|
+
// Additional
|
|
654
|
+
environment: Manager.getEnvironment(),
|
|
655
|
+
|
|
656
|
+
// Specific
|
|
657
|
+
firebaseVersion: version.clean(require('@omega.js/client/package.json').dependencies.firebase),
|
|
658
|
+
liveReloadPort: Manager.getLiveReloadPort(),
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// Return
|
|
662
|
+
return options;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// Default Task
|
|
666
|
+
module.exports = series(bundleTask, bundleWatcher);
|
|
667
|
+
|
|
668
|
+
// The syntax floor and the browser Node-builtin shim list — pinned by
|
|
669
|
+
// src/test/suites/build/bundle-targets.test.js. The `%%%key%%%` pass and the
|
|
670
|
+
// replacement set — pinned by src/test/suites/build/template-replace.test.js.
|
|
671
|
+
module.exports.BROWSER_EMPTY_MODULES = BROWSER_EMPTY_MODULES;
|
|
672
|
+
module.exports.SYNTAX_TARGET = SYNTAX_TARGET;
|
|
673
|
+
module.exports.resolveSyntaxTarget = resolveSyntaxTarget;
|
|
674
|
+
module.exports.substituteTemplates = substituteTemplates;
|
|
675
|
+
module.exports.getTemplateReplaceOptions = getTemplateReplaceOptions;
|
|
676
|
+
// The OMEGA_BUILD_JSON bake (#743) — pinned by
|
|
677
|
+
// src/test/suites/build/build-json-bake.test.js and auth-emulator-gate.test.js.
|
|
678
|
+
// `bundleTask` is exported so that suite can drive the REAL build and read the
|
|
679
|
+
// bake back out of the files it emitted, rather than a stand-in esbuild call.
|
|
680
|
+
module.exports.bundleTask = bundleTask;
|
|
681
|
+
module.exports.composeBuildConfig = composeBuildConfig;
|
|
682
|
+
module.exports.composeBuildJson = composeBuildJson;
|
|
683
|
+
module.exports.buildJsonDefines = buildJsonDefines;
|
|
684
|
+
module.exports.buildJsonBanner = buildJsonBanner;
|
|
685
|
+
// The schema-derived bake set and its reader (#627).
|
|
686
|
+
module.exports.BAKED_KEYS = BAKED_KEYS;
|
|
687
|
+
module.exports.readBakedEnv = readBakedEnv;
|