@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,48 @@
|
|
|
1
|
+
// Build-layer test of the test framework's own expect() matchers. Self-test —
|
|
2
|
+
// if this doesn't pass, the test framework itself is broken and downstream
|
|
3
|
+
// suites can't be trusted.
|
|
4
|
+
|
|
5
|
+
const path = require('path');
|
|
6
|
+
|
|
7
|
+
const expect = require(path.join(__dirname, '..', '..', 'assert.js'));
|
|
8
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
9
|
+
|
|
10
|
+
module.exports = defineCases({
|
|
11
|
+
type: 'group',
|
|
12
|
+
layer: 'build',
|
|
13
|
+
description: 'expect() — matcher self-test',
|
|
14
|
+
tests: [
|
|
15
|
+
{ name: 'toBe passes on ===', run: () => expect(1).toBe(1) },
|
|
16
|
+
{ name: 'toBe.not passes on !==', run: () => expect(1).not.toBe(2) },
|
|
17
|
+
{ name: 'toEqual deep-equals objects', run: () => expect({ a: [1, 2] }).toEqual({ a: [1, 2] }) },
|
|
18
|
+
{ name: 'toEqual fails on shape diff', run: () => {
|
|
19
|
+
let threw = false;
|
|
20
|
+
try { expect({ a: 1 }).toEqual({ a: 2 }); } catch (_) { threw = true; }
|
|
21
|
+
if (!threw) throw new Error('expected toEqual to throw');
|
|
22
|
+
} },
|
|
23
|
+
{ name: 'toBeTruthy / toBeFalsy', run: () => {
|
|
24
|
+
expect(1).toBeTruthy();
|
|
25
|
+
expect(0).toBeFalsy();
|
|
26
|
+
expect('').toBeFalsy();
|
|
27
|
+
expect('x').toBeTruthy();
|
|
28
|
+
} },
|
|
29
|
+
{ name: 'toBeDefined / toBeUndefined', run: () => {
|
|
30
|
+
expect(null).toBeDefined();
|
|
31
|
+
expect(undefined).toBeUndefined();
|
|
32
|
+
} },
|
|
33
|
+
{ name: 'toContain (string)', run: () => expect('hello world').toContain('world') },
|
|
34
|
+
{ name: 'toContain (array)', run: () => expect([1, 2, 3]).toContain(2) },
|
|
35
|
+
{ name: 'toHaveProperty', run: () => expect({ foo: 1 }).toHaveProperty('foo') },
|
|
36
|
+
{ name: 'toMatch (regex)', run: () => expect('abc123').toMatch(/^abc\d+$/) },
|
|
37
|
+
{ name: 'toBeGreaterThan / toBeLessThan', run: () => {
|
|
38
|
+
expect(10).toBeGreaterThan(5);
|
|
39
|
+
expect(5).toBeLessThan(10);
|
|
40
|
+
} },
|
|
41
|
+
{ name: 'toThrow on sync function', run: async () => {
|
|
42
|
+
await expect(() => { throw new Error('boom'); }).toThrow();
|
|
43
|
+
} },
|
|
44
|
+
{ name: 'toThrow with regex matcher', run: async () => {
|
|
45
|
+
await expect(() => { throw new Error('boom: 42'); }).toThrow(/42$/);
|
|
46
|
+
} },
|
|
47
|
+
],
|
|
48
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Build-layer test that every entry in package.json#exports is require()-able from
|
|
2
|
+
// the built dist/ tree (or src/ if dist hasn't been built yet — the test resolves
|
|
3
|
+
// relative to whichever directory THIS file lives in).
|
|
4
|
+
//
|
|
5
|
+
// The dist/ paths in package.json#exports point to dist/foo.js — when running the
|
|
6
|
+
// test framework, this file IS the one shipped into dist/test/suites/build/exports.test.js,
|
|
7
|
+
// so the relative path back to dist root via `../../../..` lands at <bxm>/dist, and
|
|
8
|
+
// each export key resolves correctly.
|
|
9
|
+
|
|
10
|
+
const path = require('path');
|
|
11
|
+
|
|
12
|
+
// Each export key (e.g. './main' / './lib/logger-lite') maps to a relative dist path.
|
|
13
|
+
// We strip the './dist/' prefix and resolve against `<bxm>/dist` (this file's grandparent
|
|
14
|
+
// chain: dist/test/suites/build → ../../../ → dist).
|
|
15
|
+
const BXM_ROOT_FROM_SUITE = path.resolve(__dirname, '..', '..', '..', '..');
|
|
16
|
+
const DIST_ROOT = path.resolve(__dirname, '..', '..', '..');
|
|
17
|
+
const pkg = require(path.join(BXM_ROOT_FROM_SUITE, 'package.json'));
|
|
18
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
19
|
+
|
|
20
|
+
// Browser-context modules can't be plain-required from Node (they touch chrome.* /
|
|
21
|
+
// window.* without try/catch around the top-level usage). Skip those — the build-layer
|
|
22
|
+
// only asserts the "node-safe" surface of BXM. Browser-context modules are exercised
|
|
23
|
+
// by the background/view test layers.
|
|
24
|
+
const BROWSER_CONTEXT_KEYS = new Set([
|
|
25
|
+
'.',
|
|
26
|
+
'./background',
|
|
27
|
+
'./content',
|
|
28
|
+
'./popup',
|
|
29
|
+
'./sidepanel',
|
|
30
|
+
'./options',
|
|
31
|
+
'./page',
|
|
32
|
+
'./offscreen',
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
module.exports = defineCases({
|
|
36
|
+
type: 'group',
|
|
37
|
+
layer: 'build',
|
|
38
|
+
description: 'package.json#exports — node-safe entries resolve',
|
|
39
|
+
tests: Object.entries(pkg.exports || {})
|
|
40
|
+
.filter(([key]) => !BROWSER_CONTEXT_KEYS.has(key))
|
|
41
|
+
.map(([key, relDistPath]) => ({
|
|
42
|
+
name: `${key} → ${relDistPath}`,
|
|
43
|
+
run: (ctx) => {
|
|
44
|
+
// relDistPath looks like "./dist/lib/logger-lite.js" — strip the leading
|
|
45
|
+
// "./dist/" and resolve against the suite's actual dist root.
|
|
46
|
+
const rel = relDistPath.replace(/^\.\/dist\//, '');
|
|
47
|
+
const abs = path.join(DIST_ROOT, rel);
|
|
48
|
+
delete require.cache[abs];
|
|
49
|
+
const mod = require(abs);
|
|
50
|
+
ctx.expect(mod).toBeDefined();
|
|
51
|
+
},
|
|
52
|
+
})),
|
|
53
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// Build-layer test for lib/extension.js — verifies the safe-fallback behavior.
|
|
2
|
+
// When `chrome` / `window` / `browser` globals are absent (Node context), the
|
|
3
|
+
// module's per-API try/catch blocks must swallow the ReferenceError and leave
|
|
4
|
+
// every API property set to null. This is how the same module imports cleanly
|
|
5
|
+
// in background SW, content scripts, AND build-time Node tooling.
|
|
6
|
+
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
const ext = require(path.join(__dirname, '..', '..', '..', 'lib', 'extension.js'));
|
|
10
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
11
|
+
|
|
12
|
+
module.exports = defineCases({
|
|
13
|
+
type: 'group',
|
|
14
|
+
layer: 'build',
|
|
15
|
+
description: 'lib/extension — safe-fallback in Node context',
|
|
16
|
+
tests: [
|
|
17
|
+
{
|
|
18
|
+
name: 'module exports an object',
|
|
19
|
+
run: (ctx) => {
|
|
20
|
+
ctx.expect(typeof ext).toBe('object');
|
|
21
|
+
ctx.expect(ext).not.toBeNull();
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'common API slots are null when no chrome global is present',
|
|
26
|
+
run: (ctx) => {
|
|
27
|
+
ctx.expect(ext.runtime).toBeNull();
|
|
28
|
+
ctx.expect(ext.storage).toBeNull();
|
|
29
|
+
ctx.expect(ext.tabs).toBeNull();
|
|
30
|
+
ctx.expect(ext.action).toBeNull();
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'requiring the module did not throw (smoke)',
|
|
35
|
+
run: (ctx) => {
|
|
36
|
+
// The fact that we reached this test means require() didn't throw —
|
|
37
|
+
// record an explicit pass so the suite output documents the property.
|
|
38
|
+
ctx.expect(true).toBe(true);
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
// wave-5 F8: the window[api] probe ran AFTER the chrome probe and won —
|
|
43
|
+
// in any DOM context window.history (the page's History object) shadowed
|
|
44
|
+
// chrome.history even when the extension held the permission.
|
|
45
|
+
name: 'chrome API wins over a window global of the same name (history shadow)',
|
|
46
|
+
run: (ctx) => {
|
|
47
|
+
const modPath = require.resolve(path.join(__dirname, '..', '..', '..', 'lib', 'extension.js'));
|
|
48
|
+
const chromeHistory = { search: () => [] };
|
|
49
|
+
global.chrome = { history: chromeHistory };
|
|
50
|
+
global.window = { history: { back: () => {} } }; // DOM History imposter
|
|
51
|
+
delete require.cache[modPath];
|
|
52
|
+
try {
|
|
53
|
+
const fresh = require(modPath);
|
|
54
|
+
ctx.expect(fresh.history).toBe(chromeHistory);
|
|
55
|
+
} finally {
|
|
56
|
+
delete global.chrome;
|
|
57
|
+
delete global.window;
|
|
58
|
+
delete require.cache[modPath]; // next require re-resolves in a clean Node context
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
// wave-5 F8: `self.api = browser.extension[api]` (literal `.api` typo) —
|
|
64
|
+
// the browser.extension fallback never landed on the named slot.
|
|
65
|
+
name: 'browser.extension fallback lands on the named API slot (typo pin)',
|
|
66
|
+
run: (ctx) => {
|
|
67
|
+
const modPath = require.resolve(path.join(__dirname, '..', '..', '..', 'lib', 'extension.js'));
|
|
68
|
+
const extTabs = { query: () => [] };
|
|
69
|
+
global.browser = { extension: { tabs: extTabs } };
|
|
70
|
+
delete require.cache[modPath];
|
|
71
|
+
try {
|
|
72
|
+
const fresh = require(modPath);
|
|
73
|
+
ctx.expect(fresh.tabs).toBe(extTabs);
|
|
74
|
+
ctx.expect(fresh.api).toBeUndefined(); // the junk `.api` property must not exist
|
|
75
|
+
} finally {
|
|
76
|
+
delete global.browser;
|
|
77
|
+
delete require.cache[modPath];
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
});
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// Framework-provided dependencies (#87), extension half: a CONSUMER module requires any
|
|
2
|
+
// library @omega.js/extension declares by BARE specifier and it resolves from the
|
|
3
|
+
// FRAMEWORK's own installation — the framework's copy wins even when the consumer
|
|
4
|
+
// installed its own. The mechanism is the resolve hook @omega.js/devkit's bundle
|
|
5
|
+
// wrapper composes from the framework's declared dependency set
|
|
6
|
+
// ([#738](https://github.com/Omega-JS-Stack/omega/issues/738), replacing the ordered
|
|
7
|
+
// `resolve.modules` webpack used), so these tests build a real consumer entry through
|
|
8
|
+
// the wrapper and read the resolved paths back out of the metafile.
|
|
9
|
+
//
|
|
10
|
+
// Both consumer layers live in a temp dir OUTSIDE this monorepo and carry their own
|
|
11
|
+
// node_modules — the same layouts npm produces for a real brand: shared/hoisted copies
|
|
12
|
+
// in the consumer's node_modules, and a framework-private nested copy exactly when the
|
|
13
|
+
// consumer declares a conflicting version. Mirrors
|
|
14
|
+
// @omega.js/desktop's src/test/suites/build/framework-deps.test.js.
|
|
15
|
+
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const os = require('os');
|
|
18
|
+
const path = require('path');
|
|
19
|
+
|
|
20
|
+
const FRAMEWORK_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
|
|
21
|
+
const { bundle } = require('../../../vendor/devkit/bundle.js');
|
|
22
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
23
|
+
|
|
24
|
+
// Framework-declared deps sampled by the first test: two bare packages plus a subpath
|
|
25
|
+
// import, all of them real `dependencies` of @omega.js/extension and all browser-safe
|
|
26
|
+
// (the extension bundles target the web).
|
|
27
|
+
const SAMPLE = ['json5', 'lodash', 'lodash/merge'];
|
|
28
|
+
|
|
29
|
+
function write(file, contents) {
|
|
30
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
31
|
+
fs.writeFileSync(file, contents);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function writePackage(dir, name, version, extra) {
|
|
35
|
+
write(path.join(dir, 'package.json'), JSON.stringify({ name, version, main: 'index.js', ...extra }));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function packageName(spec) {
|
|
39
|
+
return spec.startsWith('@') ? spec.split('/').slice(0, 2).join('/') : spec.split('/')[0];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// The installed COPY a specifier resolves to from `fromRoot` — the package directory,
|
|
43
|
+
// not the entry file: which FILE inside it a bundle lands on is chosen by the target's
|
|
44
|
+
// export conditions (a web build takes the browser entry where node's require takes the
|
|
45
|
+
// CJS one), while the contract here is about which copy.
|
|
46
|
+
function packageDirFor(spec, fromRoot) {
|
|
47
|
+
const name = packageName(spec);
|
|
48
|
+
const marker = `${path.sep}node_modules${path.sep}${name}${path.sep}`;
|
|
49
|
+
const entry = require.resolve(spec, { paths: [fromRoot] });
|
|
50
|
+
return entry.slice(0, entry.indexOf(marker) + marker.length - 1);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Build `src/entry.js` the way the extension lane builds a component bundle, and
|
|
54
|
+
// return every input path the bundle pulled in (absolute, real).
|
|
55
|
+
async function compile({ projectRoot, frameworkRoot }) {
|
|
56
|
+
const result = await bundle({
|
|
57
|
+
frameworkRoot,
|
|
58
|
+
entries: [path.join(projectRoot, 'src', 'entry.js')],
|
|
59
|
+
outfile: path.join(projectRoot, 'dist', 'entry.bundle.js'),
|
|
60
|
+
platform: 'browser',
|
|
61
|
+
format: 'iife',
|
|
62
|
+
dev: true,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
return Object.keys(result.metafile.inputs).map((input) => path.resolve(input));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Whether the bundle pulled a file out of exactly this package directory.
|
|
69
|
+
function bundledFrom(inputs, dir) {
|
|
70
|
+
return inputs.some((input) => input.startsWith(dir + path.sep));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// A real consumer install: the framework's deps hoisted into the consumer's own
|
|
74
|
+
// node_modules (symlinked to the real installed copies), no nested copies anywhere.
|
|
75
|
+
function stageHoistedConsumer(specs) {
|
|
76
|
+
// realpath: macOS' /var is a symlink to /private/var, and the resolved module
|
|
77
|
+
// paths a bundler reports are real paths.
|
|
78
|
+
const root = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'omega-extension-framework-deps-')));
|
|
79
|
+
writePackage(root, 'consumer-extension', '1.0.0');
|
|
80
|
+
|
|
81
|
+
specs.forEach((spec) => {
|
|
82
|
+
const link = path.join(root, 'node_modules', packageName(spec));
|
|
83
|
+
fs.mkdirSync(path.dirname(link), { recursive: true });
|
|
84
|
+
if (!fs.existsSync(link)) fs.symlinkSync(packageDirFor(spec, FRAMEWORK_ROOT), link, 'dir');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
write(path.join(root, 'src', 'entry.js'), specs.map((s) => `require(${JSON.stringify(s)});`).join('\n'));
|
|
88
|
+
return root;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// A real consumer install with a CONFLICT: the consumer declares its own version of
|
|
92
|
+
// `dupe-pkg`, so npm keeps that copy hoisted and nests the framework's version under
|
|
93
|
+
// the framework package. `shared-pkg` has no conflict — one hoisted copy for both.
|
|
94
|
+
function stageConflictInstall() {
|
|
95
|
+
const root = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'omega-extension-framework-deps-dupe-')));
|
|
96
|
+
const consumerNm = path.join(root, 'node_modules');
|
|
97
|
+
const frameworkRoot = path.join(consumerNm, '@omega.js', 'extension');
|
|
98
|
+
|
|
99
|
+
writePackage(root, 'consumer-extension', '1.0.0', { dependencies: { 'dupe-pkg': '^1.0.0' } });
|
|
100
|
+
|
|
101
|
+
writePackage(path.join(consumerNm, 'dupe-pkg'), 'dupe-pkg', '1.0.0');
|
|
102
|
+
write(path.join(consumerNm, 'dupe-pkg', 'index.js'), 'module.exports = "CONSUMER_COPY";');
|
|
103
|
+
write(path.join(consumerNm, 'dupe-pkg', 'sub.js'), 'module.exports = "CONSUMER_SUBPATH";');
|
|
104
|
+
|
|
105
|
+
writePackage(path.join(consumerNm, 'shared-pkg'), 'shared-pkg', '1.0.0');
|
|
106
|
+
write(path.join(consumerNm, 'shared-pkg', 'index.js'), 'module.exports = "SHARED_COPY";');
|
|
107
|
+
|
|
108
|
+
// The fixture framework must resolve esbuild the way the real one does — it
|
|
109
|
+
// has no node_modules of its own, so the monorepo's hoisted copy is what a
|
|
110
|
+
// walk up from a temp dir must find. Staging it under the CONSUMER's
|
|
111
|
+
// node_modules is that walk.
|
|
112
|
+
fs.symlinkSync(packageDirFor('esbuild', FRAMEWORK_ROOT), path.join(consumerNm, 'esbuild'), 'dir');
|
|
113
|
+
|
|
114
|
+
writePackage(frameworkRoot, '@omega.js/extension', '1.0.0', {
|
|
115
|
+
dependencies: { 'dupe-pkg': '^2.0.0', 'shared-pkg': '^1.0.0' },
|
|
116
|
+
});
|
|
117
|
+
const nested = path.join(frameworkRoot, 'node_modules', 'dupe-pkg');
|
|
118
|
+
writePackage(nested, 'dupe-pkg', '2.0.0');
|
|
119
|
+
write(path.join(nested, 'index.js'), 'module.exports = "FRAMEWORK_COPY";');
|
|
120
|
+
write(path.join(nested, 'sub.js'), 'module.exports = "FRAMEWORK_SUBPATH";');
|
|
121
|
+
|
|
122
|
+
write(path.join(root, 'src', 'entry.js'), [
|
|
123
|
+
"require('dupe-pkg');",
|
|
124
|
+
"require('dupe-pkg/sub');",
|
|
125
|
+
"require('shared-pkg');",
|
|
126
|
+
].join('\n'));
|
|
127
|
+
|
|
128
|
+
return { root, frameworkRoot };
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
module.exports = defineCases({
|
|
132
|
+
type: 'suite',
|
|
133
|
+
layer: 'build',
|
|
134
|
+
description: 'framework-deps — a consumer bundle resolves framework-declared deps from the framework',
|
|
135
|
+
timeout: 60000,
|
|
136
|
+
tests: [
|
|
137
|
+
{
|
|
138
|
+
name: 'bare specifiers (and subpaths) of framework-declared deps resolve from the framework installation',
|
|
139
|
+
run: async (ctx) => {
|
|
140
|
+
const projectRoot = stageHoistedConsumer(SAMPLE);
|
|
141
|
+
try {
|
|
142
|
+
const inputs = await compile({ projectRoot, frameworkRoot: FRAMEWORK_ROOT });
|
|
143
|
+
SAMPLE.forEach((spec) => {
|
|
144
|
+
ctx.expect(bundledFrom(inputs, packageDirFor(spec, FRAMEWORK_ROOT))).toBe(true);
|
|
145
|
+
});
|
|
146
|
+
} finally {
|
|
147
|
+
fs.rmSync(projectRoot, { recursive: true, force: true });
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
{
|
|
153
|
+
name: "the framework's copy wins over a consumer-declared duplicate, subpaths included",
|
|
154
|
+
run: async (ctx) => {
|
|
155
|
+
const { root, frameworkRoot } = stageConflictInstall();
|
|
156
|
+
try {
|
|
157
|
+
const inputs = await compile({ projectRoot: root, frameworkRoot });
|
|
158
|
+
const built = fs.readFileSync(path.join(root, 'dist', 'entry.bundle.js'), 'utf8');
|
|
159
|
+
|
|
160
|
+
// Both the bare specifier and the subpath land on the framework's nested copy…
|
|
161
|
+
ctx.expect(built).toContain('FRAMEWORK_COPY');
|
|
162
|
+
ctx.expect(built).toContain('FRAMEWORK_SUBPATH');
|
|
163
|
+
ctx.expect(built.includes('CONSUMER_COPY')).toBe(false);
|
|
164
|
+
ctx.expect(built.includes('CONSUMER_SUBPATH')).toBe(false);
|
|
165
|
+
ctx.expect(bundledFrom(inputs, path.join(frameworkRoot, 'node_modules', 'dupe-pkg'))).toBe(true);
|
|
166
|
+
|
|
167
|
+
// …while a dep with no conflict keeps resolving to the single hoisted copy,
|
|
168
|
+
// shared by the framework and the consumer alike.
|
|
169
|
+
ctx.expect(bundledFrom(inputs, path.join(root, 'node_modules', 'shared-pkg'))).toBe(true);
|
|
170
|
+
} finally {
|
|
171
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Build-layer pin for setupGlobalHandlers(): it is called BARE at top level
|
|
2
|
+
// (before any Manager exists) so that MV3 registers the SW listeners before any
|
|
3
|
+
// async work. In an ES module `this` is undefined there, so every `this.<x>`
|
|
4
|
+
// inside that function is a TypeError the moment its listener fires — which is
|
|
5
|
+
// exactly what broke the fresh-install welcome tab ([#90]): the install logger
|
|
6
|
+
// was read off `this`.
|
|
7
|
+
//
|
|
8
|
+
// background.js is a browser-context ES module (top-level importScripts +
|
|
9
|
+
// firebase imports), so node cannot import it — this pins the SOURCE, like
|
|
10
|
+
// cache-warming.test.js does. The whole class of bug is covered, not just the
|
|
11
|
+
// two lines that regressed: NOTHING inside the function body may touch `this`.
|
|
12
|
+
|
|
13
|
+
const fs = require('fs');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
16
|
+
|
|
17
|
+
const SOURCE = fs.readFileSync(path.join(__dirname, '..', '..', '..', 'background.js'), 'utf8');
|
|
18
|
+
|
|
19
|
+
// The body of `function setupGlobalHandlers() { … }`, by brace matching.
|
|
20
|
+
function globalHandlersBody() {
|
|
21
|
+
const start = SOURCE.indexOf('function setupGlobalHandlers() {');
|
|
22
|
+
if (start === -1) { return null; }
|
|
23
|
+
let depth = 0;
|
|
24
|
+
for (let i = SOURCE.indexOf('{', start); i < SOURCE.length; i++) {
|
|
25
|
+
if (SOURCE[i] === '{') { depth++; }
|
|
26
|
+
if (SOURCE[i] === '}') {
|
|
27
|
+
depth--;
|
|
28
|
+
if (depth === 0) { return SOURCE.slice(start, i + 1); }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = defineCases({
|
|
35
|
+
type: 'suite',
|
|
36
|
+
layer: 'build',
|
|
37
|
+
description: 'background.js setupGlobalHandlers — no `this` in a bare-called function (#90)',
|
|
38
|
+
tests: [
|
|
39
|
+
{
|
|
40
|
+
name: 'it is called bare at top level, before the Manager class',
|
|
41
|
+
run: (ctx) => {
|
|
42
|
+
ctx.expect(SOURCE).toMatch(/^setupGlobalHandlers\(\);$/m);
|
|
43
|
+
ctx.expect(SOURCE.indexOf('setupGlobalHandlers();')).toBeLessThan(SOURCE.indexOf('class Manager'));
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'its body never references `this` — every listener there would throw',
|
|
48
|
+
run: (ctx) => {
|
|
49
|
+
const body = globalHandlersBody();
|
|
50
|
+
ctx.expect(typeof body).toBe('string');
|
|
51
|
+
const offenders = (body.match(/\bthis\s*[.[]/g) || []);
|
|
52
|
+
ctx.expect(offenders.length).toBe(0);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'the install listener logs through the module-level installLogger',
|
|
57
|
+
run: (ctx) => {
|
|
58
|
+
// Module scope, not an instance property
|
|
59
|
+
ctx.expect(SOURCE).toMatch(/^const installLogger = new LoggerLite\('install'\);$/m);
|
|
60
|
+
ctx.expect(/this\.installLogger/.test(SOURCE)).toBe(false);
|
|
61
|
+
|
|
62
|
+
const body = globalHandlersBody();
|
|
63
|
+
// Both fresh-install lines, and the tab open they guard
|
|
64
|
+
ctx.expect(body).toMatch(/installLogger\.log\('No website configured, skipping install page'\)/);
|
|
65
|
+
ctx.expect(body).toMatch(/installLogger\.log\('Opening install page:', installedUrl\)/);
|
|
66
|
+
ctx.expect(body).toMatch(/extension\.tabs\.create\(\{ url: installedUrl \}\)/);
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Build-layer pins for the shared icon sheet (#183): icon presentation lives
|
|
2
|
+
// ONCE in @omega.js/web and is vendored here at prepare (package.json
|
|
3
|
+
// omega.vendorAssets → dist/assets/css/core/_fontawesome.scss), so extension
|
|
4
|
+
// surfaces ship the same square glyph-centered box and animation utilities web
|
|
5
|
+
// has instead of the commented-out stub that shipped no icon css at all.
|
|
6
|
+
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const os = require('os');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
11
|
+
|
|
12
|
+
const PACKAGE_ROOT = path.join(__dirname, '..', '..', '..', '..');
|
|
13
|
+
|
|
14
|
+
module.exports = defineCases({
|
|
15
|
+
type: 'suite',
|
|
16
|
+
layer: 'build',
|
|
17
|
+
description: 'icon sheet: vendored cross-target sheet + entry wiring',
|
|
18
|
+
tests: [
|
|
19
|
+
{
|
|
20
|
+
// Fidelity to the web source is the devkit vendor unit test's job (and
|
|
21
|
+
// the prepare hook fails loud on a missing source). Here we pin that
|
|
22
|
+
// the shipped sheet carries the contract. No @omega.js/web reference:
|
|
23
|
+
// dist code never names publishable packages it doesn't depend on.
|
|
24
|
+
name: 'vendored icon sheet ships the box and the parked animations',
|
|
25
|
+
run: (ctx) => {
|
|
26
|
+
const vendored = path.join(PACKAGE_ROOT, 'dist', 'assets', 'css', 'core', '_fontawesome.scss');
|
|
27
|
+
ctx.expect(fs.existsSync(vendored)).toBe(true);
|
|
28
|
+
|
|
29
|
+
const sheet = fs.readFileSync(vendored, 'utf8');
|
|
30
|
+
ctx.expect(sheet.includes('i[data-omega-fa]')).toBe(true);
|
|
31
|
+
ctx.expect(sheet.includes('@keyframes fa-spin')).toBe(true);
|
|
32
|
+
ctx.expect(sheet.includes('prefers-reduced-motion')).toBe(true);
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'entry compiles the box rule and the reduced-motion park into the output',
|
|
37
|
+
run: (ctx) => {
|
|
38
|
+
const sass = require('sass');
|
|
39
|
+
|
|
40
|
+
// The entry pulls '_component-specific' from the CONSUMER's dist at
|
|
41
|
+
// build time (the sass task generates a stub there), so stub it here.
|
|
42
|
+
const stubDir = fs.mkdtempSync(path.join(os.tmpdir(), 'omega-ext-icons-'));
|
|
43
|
+
fs.writeFileSync(path.join(stubDir, '_component-specific.scss'), '// test stub\n');
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const css = sass.compile(path.join(PACKAGE_ROOT, 'dist', 'assets', 'css', 'omega-extension.scss'), {
|
|
47
|
+
loadPaths: [
|
|
48
|
+
path.join(PACKAGE_ROOT, 'dist', 'assets', 'css'),
|
|
49
|
+
path.join(PACKAGE_ROOT, 'dist', 'assets', 'themes', 'classy'),
|
|
50
|
+
stubDir,
|
|
51
|
+
],
|
|
52
|
+
quietDeps: true,
|
|
53
|
+
silenceDeprecations: ['import', 'global-builtin', 'color-functions'],
|
|
54
|
+
}).css;
|
|
55
|
+
|
|
56
|
+
// The shared client renderer stamps data-omega-fa on the <i> it fills
|
|
57
|
+
// (src/lib/icons.js), so that is the hook the box keys on.
|
|
58
|
+
const box = css.match(/i\[data-omega-fa\] \{[^}]*\}/);
|
|
59
|
+
ctx.expect(box !== null).toBe(true);
|
|
60
|
+
ctx.expect(box[0].includes('display: inline-flex')).toBe(true);
|
|
61
|
+
ctx.expect(box[0].includes('width: 1em')).toBe(true);
|
|
62
|
+
ctx.expect(box[0].includes('height: 1em')).toBe(true);
|
|
63
|
+
|
|
64
|
+
ctx.expect(css.includes('@keyframes fa-spin')).toBe(true);
|
|
65
|
+
|
|
66
|
+
// Its own park block, not just any reduced-motion at-rule the theme ships.
|
|
67
|
+
ctx.expect(/@media \(prefers-reduced-motion: reduce\) \{\s*\.fa-spin,[^{]*\{\s*animation: none/.test(css)).toBe(true);
|
|
68
|
+
} finally {
|
|
69
|
+
fs.rmSync(stubDir, { recursive: true, force: true });
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Build-layer test for lib/logger-lite.js — verifies the runtime identity tag
|
|
2
|
+
// [@omega.js/extension:name] (no timestamp — devtools stamps runtime lines, #12)
|
|
3
|
+
// and the five method surface (log/error/warn/info/debug).
|
|
4
|
+
|
|
5
|
+
const path = require('path');
|
|
6
|
+
|
|
7
|
+
const Logger = require(path.join(__dirname, '..', '..', '..', 'lib', 'logger-lite.js'));
|
|
8
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
9
|
+
|
|
10
|
+
function captureConsole(method, fn) {
|
|
11
|
+
const captured = [];
|
|
12
|
+
const orig = console[method];
|
|
13
|
+
console[method] = function (...args) { captured.push(args); };
|
|
14
|
+
try { fn(); } finally { console[method] = orig; }
|
|
15
|
+
return captured;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = defineCases({
|
|
19
|
+
type: 'suite',
|
|
20
|
+
layer: 'build',
|
|
21
|
+
description: 'lib/logger-lite — identity tag prefix + five-method surface',
|
|
22
|
+
tests: [
|
|
23
|
+
{
|
|
24
|
+
name: 'constructor stores name',
|
|
25
|
+
run: (ctx) => {
|
|
26
|
+
const log = new Logger('my-component');
|
|
27
|
+
ctx.expect(log.name).toBe('my-component');
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'log() prefixes with [@omega.js/extension:name] and no timestamp',
|
|
32
|
+
run: (ctx) => {
|
|
33
|
+
const log = new Logger('feature-x');
|
|
34
|
+
const captured = captureConsole('log', () => log.log('hello', 'world'));
|
|
35
|
+
ctx.expect(captured.length).toBe(1);
|
|
36
|
+
const [prefix, ...rest] = captured[0];
|
|
37
|
+
ctx.expect(prefix).toBe('[@omega.js/extension:feature-x]');
|
|
38
|
+
ctx.expect(rest).toEqual(['hello', 'world']);
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'exposes log/error/warn/info/debug',
|
|
43
|
+
run: (ctx) => {
|
|
44
|
+
const log = new Logger('s');
|
|
45
|
+
for (const m of ['log', 'error', 'warn', 'info', 'debug']) {
|
|
46
|
+
ctx.expect(typeof log[m]).toBe('function');
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'error() routes through console.error',
|
|
52
|
+
run: (ctx) => {
|
|
53
|
+
const log = new Logger('err-comp');
|
|
54
|
+
const captured = captureConsole('error', () => log.error('boom'));
|
|
55
|
+
ctx.expect(captured.length).toBe(1);
|
|
56
|
+
ctx.expect(captured[0][0]).toBe('[@omega.js/extension:err-comp]');
|
|
57
|
+
ctx.expect(captured[0][1]).toBe('boom');
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
});
|