@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,128 @@
|
|
|
1
|
+
// Build-time logger — timestamped, tag-scoped console output for CLI commands, gulp
|
|
2
|
+
// tasks, and test runners. `new Logger('setup')` then logger.log/error/warn/info,
|
|
3
|
+
// which prints `[HH:MM:SS] [@omega.js/<package>:setup] message`.
|
|
4
|
+
//
|
|
5
|
+
// NOT for app/runtime logging — frameworks with runtime logging needs (e.g. desktop's
|
|
6
|
+
// Electron file-transport logger-lite) keep their own, and emit the same tag WITHOUT
|
|
7
|
+
// the timestamp (devtools stamps runtime lines).
|
|
8
|
+
|
|
9
|
+
// Libraries
|
|
10
|
+
const chalk = require('chalk').default;
|
|
11
|
+
const path = require('path');
|
|
12
|
+
// Plain fs, not fs-jetpack: this module is VENDORED into every framework, and
|
|
13
|
+
// vendoring requires the host to declare each runtime dependency the vendored
|
|
14
|
+
// code uses (tools/vendor.js) — a logger must not push a dep onto its hosts.
|
|
15
|
+
const fs = require('fs');
|
|
16
|
+
|
|
17
|
+
// The one identity tag: [@omega.js/<package>:<module>]. The package segment is
|
|
18
|
+
// derived from the file that CONSTRUCTED the logger — call sites stay
|
|
19
|
+
// `new Logger('setup')` and never name their own package.
|
|
20
|
+
//
|
|
21
|
+
// KNOWN LIMIT: the derivation reports whatever package owns the constructing
|
|
22
|
+
// file, so a CONSUMER file constructing one (a brand's own build script, a
|
|
23
|
+
// consumer hook) would stamp the consumer's package name — e.g.
|
|
24
|
+
// `[my-brand:deploy]`, not `[@omega.js/web:deploy]`. That is arguably the honest
|
|
25
|
+
// answer (the line really does come from consumer code), and no such call site
|
|
26
|
+
// exists today: every construction is inside a framework here or in its vendored
|
|
27
|
+
// dist copy. It stays a documented limit rather than a check because the repo
|
|
28
|
+
// guard (scripts/log-tags.test.js) cannot see consumer trees at all.
|
|
29
|
+
const FALLBACK_PACKAGE = '@omega.js/devkit';
|
|
30
|
+
|
|
31
|
+
// Cache the directory → package-name lookup; a build constructs many loggers.
|
|
32
|
+
const packageNameCache = new Map();
|
|
33
|
+
|
|
34
|
+
// Walk up from a directory to the nearest package.json and read its name.
|
|
35
|
+
function findPackageName(startDir) {
|
|
36
|
+
if (packageNameCache.has(startDir)) {
|
|
37
|
+
return packageNameCache.get(startDir);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let name = null;
|
|
41
|
+
let dir = startDir;
|
|
42
|
+
while (true) {
|
|
43
|
+
try {
|
|
44
|
+
const manifest = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf8'));
|
|
45
|
+
if (manifest && manifest.name) {
|
|
46
|
+
name = manifest.name;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
} catch (e) {
|
|
50
|
+
// No package.json here (or unreadable) — keep walking up.
|
|
51
|
+
}
|
|
52
|
+
const parent = path.dirname(dir);
|
|
53
|
+
if (parent === dir) { break; }
|
|
54
|
+
dir = parent;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
packageNameCache.set(startDir, name);
|
|
58
|
+
return name;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Derive the package segment from the first stack frame outside this file.
|
|
62
|
+
// A logger must NEVER throw, so every failure path lands on FALLBACK_PACKAGE:
|
|
63
|
+
// stack formats vary by runtime (and vendored/bundled copies can lose paths),
|
|
64
|
+
// and a mislabelled log line is always cheaper than a crashed build.
|
|
65
|
+
function derivePackage() {
|
|
66
|
+
try {
|
|
67
|
+
const frames = (new Error().stack || '').split('\n').slice(1);
|
|
68
|
+
for (const frame of frames) {
|
|
69
|
+
const match = frame.match(/\((.*):\d+:\d+\)\s*$/) || frame.match(/at (.*):\d+:\d+\s*$/);
|
|
70
|
+
if (!match) { continue; }
|
|
71
|
+
const file = match[1].replace(/^file:\/\//, '');
|
|
72
|
+
if (!path.isAbsolute(file)) { continue; }
|
|
73
|
+
if (file === __filename) { continue; }
|
|
74
|
+
return findPackageName(path.dirname(file)) || FALLBACK_PACKAGE;
|
|
75
|
+
}
|
|
76
|
+
} catch (e) {
|
|
77
|
+
// Fall through to the fallback below.
|
|
78
|
+
}
|
|
79
|
+
return FALLBACK_PACKAGE;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Logger class
|
|
83
|
+
function Logger(name) {
|
|
84
|
+
const self = this;
|
|
85
|
+
self.name = name;
|
|
86
|
+
self.package = derivePackage();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Make methods that log to console with the tag and time: [xx:xx:xx] [@omega.js/pkg:name] message
|
|
90
|
+
['log', 'error', 'warn', 'info'].forEach((method) => {
|
|
91
|
+
Logger.prototype[method] = function () {
|
|
92
|
+
const time = new Date().toLocaleTimeString('en-US', {
|
|
93
|
+
hour12: false,
|
|
94
|
+
hour: '2-digit',
|
|
95
|
+
minute: '2-digit',
|
|
96
|
+
second: '2-digit',
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
let color;
|
|
100
|
+
switch (method) {
|
|
101
|
+
case 'warn':
|
|
102
|
+
color = chalk.yellow;
|
|
103
|
+
break;
|
|
104
|
+
case 'error':
|
|
105
|
+
color = chalk.red;
|
|
106
|
+
break;
|
|
107
|
+
default:
|
|
108
|
+
color = (text) => text;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const args = [`[${chalk.magenta(time)}] [${chalk.cyan(`${this.package}:${this.name}`)}]`, ...Array.from(arguments).map((arg) => {
|
|
112
|
+
if (typeof arg === 'string') {
|
|
113
|
+
return color(arg);
|
|
114
|
+
}
|
|
115
|
+
if (arg instanceof Error) {
|
|
116
|
+
return color(arg.stack);
|
|
117
|
+
}
|
|
118
|
+
return arg;
|
|
119
|
+
})];
|
|
120
|
+
|
|
121
|
+
console[method].apply(console, args);
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// Export chalk as format
|
|
126
|
+
Logger.prototype.format = chalk;
|
|
127
|
+
|
|
128
|
+
module.exports = Logger;
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
// Merge line-based files (.env, .gitignore, AGENTS.md) during framework setup —
|
|
2
|
+
// the OMEGA marker-section protocol. Canonical version is EM's (it added .env
|
|
3
|
+
// double-quote normalization and order-safe key substitution over the older
|
|
4
|
+
// BXM/UJM inline copies) plus @omega.js/backend's custom-key promotion (a key the framework
|
|
5
|
+
// newly adopts into its Default section is promoted UP from the user's Custom
|
|
6
|
+
// section with their value, instead of appearing empty in Default and set in
|
|
7
|
+
// Custom).
|
|
8
|
+
//
|
|
9
|
+
// Convention (the ONE OMEGA marker grammar — `<comment> ========== <Label> ==========`,
|
|
10
|
+
// comment token per file type; the rules-file managed block is the `//` flavor of the
|
|
11
|
+
// same family, owned by @omega.js/backend — see _attic/plans/archive/marker-harmonization.md):
|
|
12
|
+
//
|
|
13
|
+
// # ========== Default Values ==========
|
|
14
|
+
// # framework-managed; overwritten on every setup
|
|
15
|
+
// KEY1=
|
|
16
|
+
// KEY2="value with spaces"
|
|
17
|
+
//
|
|
18
|
+
// # ========== Custom Values ==========
|
|
19
|
+
// # user's section; preserved verbatim across setups
|
|
20
|
+
// USER_SECRET="my-secret"
|
|
21
|
+
//
|
|
22
|
+
// Behavior:
|
|
23
|
+
// - The Default section is replaced with the new framework's defaults.
|
|
24
|
+
// - Keys that already had values (in either Default or Custom) keep those values
|
|
25
|
+
// in the same section they were in.
|
|
26
|
+
// - Keys the user added to the Default section that are NOT in the new framework's
|
|
27
|
+
// defaults migrate to the Custom section (so framework cleanups don't lose user data).
|
|
28
|
+
// - .env values are normalized to **double-quoted** form on every merge:
|
|
29
|
+
// KEY=raw-value → KEY="raw-value"
|
|
30
|
+
// KEY="already-quoted" → KEY="already-quoted" (left alone)
|
|
31
|
+
// KEY= → KEY= (empty stays empty/unquoted)
|
|
32
|
+
// This protects values containing spaces, #, $, or other shell-meaningful chars.
|
|
33
|
+
// - .env COMMENTED PLACEHOLDERS (`# KEY=` in the template's Default section)
|
|
34
|
+
// mark keys the framework knows but ships no value for (the env cascade
|
|
35
|
+
// supplies values from stronger layers — dogfood friction #20). On merge:
|
|
36
|
+
// an existing NON-EMPTY value for that key (either section) keeps its line
|
|
37
|
+
// in Default; an existing EMPTY value (`KEY=` / `KEY=""`) converges to the
|
|
38
|
+
// commented placeholder instead of migrating to Custom.
|
|
39
|
+
// - .gitignore: same logic, line-based instead of key-based (no quoting).
|
|
40
|
+
// - AGENTS.md: same logic as .gitignore (line-based, no quoting). The markers
|
|
41
|
+
// render as visible H1 headings in markdown — that's intentional UX.
|
|
42
|
+
// - First setup (no existing file): the framework template lands as-is.
|
|
43
|
+
|
|
44
|
+
const DEFAULT_MARKER = '# ========== Default Values ==========';
|
|
45
|
+
const CUSTOM_MARKER = '# ========== Custom Values ==========';
|
|
46
|
+
|
|
47
|
+
function mergeLineBasedFiles(existingContent, newContent, fileName) {
|
|
48
|
+
const isEnvFile = fileName === '.env';
|
|
49
|
+
|
|
50
|
+
const existingLines = existingContent.split('\n');
|
|
51
|
+
const newLines = newContent.split('\n');
|
|
52
|
+
|
|
53
|
+
// Parse existing into default + custom sections.
|
|
54
|
+
const { defaultLines: existingDefault, customLines: existingCustom, existingDefaultKeys, existingCustomKeys }
|
|
55
|
+
= splitSections(existingLines, isEnvFile);
|
|
56
|
+
|
|
57
|
+
// Parse new content. We only use its default section (custom is the user's domain).
|
|
58
|
+
const { defaultLines: newDefault, customLines: newCustom } = splitSections(newLines, isEnvFile);
|
|
59
|
+
|
|
60
|
+
// Build the merged default section: walk new defaults in order, substituting the
|
|
61
|
+
// user's existing value for any key they had set in either section.
|
|
62
|
+
const newDefaultKeys = new Set();
|
|
63
|
+
const mergedDefault = [];
|
|
64
|
+
const emit = (line) => mergedDefault.push(isEnvFile ? normalizeEnvLine(line) : line);
|
|
65
|
+
|
|
66
|
+
for (const line of newDefault) {
|
|
67
|
+
const trimmed = line.trim();
|
|
68
|
+
|
|
69
|
+
if (isEnvFile && trimmed && !trimmed.startsWith('#')) {
|
|
70
|
+
const key = trimmed.split('=')[0].trim();
|
|
71
|
+
if (key) {
|
|
72
|
+
newDefaultKeys.add(key);
|
|
73
|
+
if (existingDefaultKeys.has(key)) {
|
|
74
|
+
emit(findKeyLine(existingDefault, key));
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (existingCustomKeys.has(key)) {
|
|
78
|
+
// The framework newly adopted a key the user had in their Custom section.
|
|
79
|
+
// Promote it UP into Default with the user's value, and drop the Custom copy
|
|
80
|
+
// (handled below) so the key isn't duplicated / left empty.
|
|
81
|
+
emit(findKeyLine(existingCustom, key));
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
emit(line);
|
|
86
|
+
} else if (!isEnvFile && trimmed && !trimmed.startsWith('#')) {
|
|
87
|
+
// .gitignore: just keep the new line.
|
|
88
|
+
mergedDefault.push(line);
|
|
89
|
+
} else {
|
|
90
|
+
// Comment / blank — for .env, a `# KEY=` placeholder claims the key:
|
|
91
|
+
// an existing set value keeps its line, an empty one converges away.
|
|
92
|
+
const placeholderKey = isEnvFile ? parsePlaceholderKey(trimmed) : null;
|
|
93
|
+
|
|
94
|
+
if (placeholderKey) {
|
|
95
|
+
newDefaultKeys.add(placeholderKey);
|
|
96
|
+
|
|
97
|
+
const existingLine = existingDefaultKeys.has(placeholderKey)
|
|
98
|
+
? findKeyLine(existingDefault, placeholderKey)
|
|
99
|
+
: existingCustomKeys.has(placeholderKey)
|
|
100
|
+
? findKeyLine(existingCustom, placeholderKey)
|
|
101
|
+
: null;
|
|
102
|
+
|
|
103
|
+
if (existingLine && !envValueIsEmpty(existingLine)) {
|
|
104
|
+
emit(existingLine);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
mergedDefault.push(line);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// User-added stuff in their Default section that the new framework doesn't know about
|
|
114
|
+
// → migrate to Custom so it's preserved without being clobbered next setup.
|
|
115
|
+
const migratedToCustom = [];
|
|
116
|
+
for (const line of existingDefault) {
|
|
117
|
+
const trimmed = line.trim();
|
|
118
|
+
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
119
|
+
|
|
120
|
+
if (isEnvFile) {
|
|
121
|
+
const key = trimmed.split('=')[0].trim();
|
|
122
|
+
if (key && !newDefaultKeys.has(key) && !existingCustomKeys.has(key)) {
|
|
123
|
+
migratedToCustom.push(normalizeEnvLine(line));
|
|
124
|
+
}
|
|
125
|
+
} else {
|
|
126
|
+
// .gitignore: line not in new defaults → migrate.
|
|
127
|
+
const inNew = newLines.some((nl) => nl.trim() === trimmed);
|
|
128
|
+
if (!inNew) {
|
|
129
|
+
migratedToCustom.push(line);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// The user's Custom section is preserved — except (a) .env values get normalized
|
|
135
|
+
// to double-quoted form for consistent quoting, and (b) any key that was promoted
|
|
136
|
+
// UP into the Default section above is dropped here so it isn't duplicated. Keys
|
|
137
|
+
// present in BOTH sections are NOT dropped (the Default copy's value won there,
|
|
138
|
+
// so removing the Custom copy would silently change dotenv's effective value).
|
|
139
|
+
const finalCustom = isEnvFile
|
|
140
|
+
? existingCustom
|
|
141
|
+
.filter((line) => {
|
|
142
|
+
const trimmed = line.trim();
|
|
143
|
+
if (!trimmed || trimmed.startsWith('#')) return true;
|
|
144
|
+
const key = trimmed.split('=')[0].trim();
|
|
145
|
+
return !(key && newDefaultKeys.has(key) && !existingDefaultKeys.has(key));
|
|
146
|
+
})
|
|
147
|
+
.map((line) => normalizeEnvLine(line))
|
|
148
|
+
: existingCustom;
|
|
149
|
+
|
|
150
|
+
const result = [];
|
|
151
|
+
result.push(DEFAULT_MARKER);
|
|
152
|
+
result.push(...mergedDefault);
|
|
153
|
+
// Insert a single blank line before CUSTOM_MARKER, but only if the merged default
|
|
154
|
+
// doesn't already end with one (otherwise we'd accumulate an extra blank line on
|
|
155
|
+
// every merge — breaking idempotency on the first re-run after a fresh `jetpack.copy`).
|
|
156
|
+
if (mergedDefault.length === 0 || mergedDefault[mergedDefault.length - 1].trim() !== '') {
|
|
157
|
+
result.push('');
|
|
158
|
+
}
|
|
159
|
+
result.push(CUSTOM_MARKER);
|
|
160
|
+
if (migratedToCustom.length > 0) {
|
|
161
|
+
result.push(...migratedToCustom);
|
|
162
|
+
}
|
|
163
|
+
result.push(...finalCustom);
|
|
164
|
+
|
|
165
|
+
return result.join('\n');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Normalize a single .env line:
|
|
169
|
+
// - Comments / blanks unchanged
|
|
170
|
+
// - KEY= (empty value) unchanged
|
|
171
|
+
// - KEY="..." (already double-quoted) unchanged
|
|
172
|
+
// - KEY=raw-value → KEY="raw-value" (with embedded " and \ escaped)
|
|
173
|
+
// - KEY='single' → KEY="single" (canonicalize single → double)
|
|
174
|
+
function normalizeEnvLine(line) {
|
|
175
|
+
if (typeof line !== 'string') return line;
|
|
176
|
+
|
|
177
|
+
// Preserve comments and blank lines verbatim.
|
|
178
|
+
const trimmed = line.trim();
|
|
179
|
+
if (!trimmed || trimmed.startsWith('#')) return line;
|
|
180
|
+
|
|
181
|
+
// Capture leading whitespace so we don't lose indentation.
|
|
182
|
+
const leadingMatch = line.match(/^(\s*)/);
|
|
183
|
+
const leading = leadingMatch ? leadingMatch[1] : '';
|
|
184
|
+
|
|
185
|
+
const eqIdx = trimmed.indexOf('=');
|
|
186
|
+
if (eqIdx < 0) return line; // no `=` — not a KEY=VALUE line
|
|
187
|
+
|
|
188
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
189
|
+
let value = trimmed.slice(eqIdx + 1);
|
|
190
|
+
|
|
191
|
+
// Strip trailing whitespace + inline comment-after-value (rare; we only strip a # that follows a space).
|
|
192
|
+
// We do NOT strip # inside quoted values. Detect that by checking if value starts with a quote.
|
|
193
|
+
if (value.length === 0) {
|
|
194
|
+
return `${leading}${key}=`;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Already double-quoted? Leave alone (preserves user's exact contents).
|
|
198
|
+
if (value.startsWith('"') && value.endsWith('"') && value.length >= 2) {
|
|
199
|
+
return `${leading}${key}=${value}`;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Single-quoted → canonicalize to double-quoted.
|
|
203
|
+
if (value.startsWith("'") && value.endsWith("'") && value.length >= 2) {
|
|
204
|
+
const inner = value.slice(1, -1);
|
|
205
|
+
return `${leading}${key}="${escapeForDoubleQuote(inner)}"`;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Raw value → wrap.
|
|
209
|
+
return `${leading}${key}="${escapeForDoubleQuote(value)}"`;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function escapeForDoubleQuote(s) {
|
|
213
|
+
return String(s).replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function splitSections(lines, isEnvFile) {
|
|
217
|
+
const defaultLines = [];
|
|
218
|
+
const customLines = [];
|
|
219
|
+
const existingDefaultKeys = new Set();
|
|
220
|
+
const existingCustomKeys = new Set();
|
|
221
|
+
|
|
222
|
+
let mode = null; // null | 'default' | 'custom'
|
|
223
|
+
for (const line of lines) {
|
|
224
|
+
const trimmed = line.trim();
|
|
225
|
+
if (trimmed === DEFAULT_MARKER) { mode = 'default'; continue; }
|
|
226
|
+
if (trimmed === CUSTOM_MARKER) { mode = 'custom'; continue; }
|
|
227
|
+
|
|
228
|
+
// Lines before any marker are treated as default (legacy / fresh files).
|
|
229
|
+
if (mode === 'custom') {
|
|
230
|
+
customLines.push(line);
|
|
231
|
+
if (isEnvFile && trimmed && !trimmed.startsWith('#')) {
|
|
232
|
+
const key = trimmed.split('=')[0].trim();
|
|
233
|
+
if (key) existingCustomKeys.add(key);
|
|
234
|
+
}
|
|
235
|
+
} else {
|
|
236
|
+
defaultLines.push(line);
|
|
237
|
+
if (isEnvFile && trimmed && !trimmed.startsWith('#')) {
|
|
238
|
+
const key = trimmed.split('=')[0].trim();
|
|
239
|
+
if (key) existingDefaultKeys.add(key);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return { defaultLines, customLines, existingDefaultKeys, existingCustomKeys };
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function findKeyLine(lines, key) {
|
|
248
|
+
const re = new RegExp(`^\\s*${key}\\s*=`);
|
|
249
|
+
for (const line of lines) {
|
|
250
|
+
if (re.test(line)) return line;
|
|
251
|
+
}
|
|
252
|
+
return `${key}=`;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// `# KEY=` (nothing after the =) → KEY; any other comment → null.
|
|
256
|
+
function parsePlaceholderKey(trimmed) {
|
|
257
|
+
const match = trimmed.match(/^#\s*([A-Za-z_][A-Za-z0-9_]*)=\s*$/);
|
|
258
|
+
return match ? match[1] : null;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// KEY= / KEY="" / KEY='' (whitespace tolerated) count as empty.
|
|
262
|
+
function envValueIsEmpty(line) {
|
|
263
|
+
const eqIdx = line.indexOf('=');
|
|
264
|
+
if (eqIdx < 0) return true;
|
|
265
|
+
const value = line.slice(eqIdx + 1).trim();
|
|
266
|
+
return value === '' || value === '""' || value === "''";
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Check whether a file already carries both section markers (i.e. has been
|
|
271
|
+
* through the merge protocol at least once). Setup validators use this to
|
|
272
|
+
* distinguish legacy/no-marker files from protocol-managed ones.
|
|
273
|
+
* @param {string} content
|
|
274
|
+
* @returns {boolean}
|
|
275
|
+
*/
|
|
276
|
+
function hasSectionMarkers(content) {
|
|
277
|
+
return typeof content === 'string'
|
|
278
|
+
&& content.includes(DEFAULT_MARKER)
|
|
279
|
+
&& content.includes(CUSTOM_MARKER);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Extract the consumer-owned Custom section of a marker file (everything after
|
|
284
|
+
* the Custom marker), or '' when there is no marker. The defaults engine's
|
|
285
|
+
* `retire` rule uses this to judge whether a per-target doc carries consumer
|
|
286
|
+
* content or is framework-owned-only.
|
|
287
|
+
* @param {string} content
|
|
288
|
+
* @returns {string}
|
|
289
|
+
*/
|
|
290
|
+
function getCustomSection(content) {
|
|
291
|
+
if (typeof content !== 'string') return '';
|
|
292
|
+
const idx = content.indexOf(CUSTOM_MARKER);
|
|
293
|
+
return idx < 0 ? '' : content.slice(idx + CUSTOM_MARKER.length);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
module.exports = { mergeLineBasedFiles, normalizeEnvLine, hasSectionMarkers, getCustomSection, DEFAULT_MARKER, CUSTOM_MARKER };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* npm-registry — minimal npm registry reads shared by every framework CLI
|
|
3
|
+
* (replaces the unmaintained npm-api dependency).
|
|
4
|
+
*
|
|
5
|
+
* Both functions treat network/registry failure as an expected external
|
|
6
|
+
* condition and return null — callers decide their own fallback (skip the
|
|
7
|
+
* check, assume up-to-date, warn). They never throw.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const REGISTRY_URL = 'https://registry.npmjs.org';
|
|
11
|
+
const FETCH_TIMEOUT_MS = 30 * 1000;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Fetch a package's latest-version manifest (the `<registry>/<name>/latest`
|
|
15
|
+
* document: version, dependencies, peerDependencies, …).
|
|
16
|
+
*
|
|
17
|
+
* @param {string} packageName - npm package name (scoped names supported)
|
|
18
|
+
* @param {object} [options]
|
|
19
|
+
* @param {string} [options.registryUrl] - registry base URL (test seam)
|
|
20
|
+
* @param {number} [options.timeout] - fetch timeout in ms
|
|
21
|
+
* @returns {Promise<object|null>} manifest object, or null on any failure
|
|
22
|
+
*/
|
|
23
|
+
async function getPackageManifest(packageName, options = {}) {
|
|
24
|
+
const registryUrl = (options.registryUrl || REGISTRY_URL).replace(/\/$/, '');
|
|
25
|
+
// Scoped names encode the slash but keep the leading @ (registry convention)
|
|
26
|
+
const encoded = encodeURIComponent(packageName).replace(/^%40/, '@');
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
const response = await fetch(`${registryUrl}/${encoded}/latest`, {
|
|
30
|
+
headers: { accept: 'application/json' },
|
|
31
|
+
signal: AbortSignal.timeout(options.timeout || FETCH_TIMEOUT_MS),
|
|
32
|
+
});
|
|
33
|
+
if (!response.ok) return null;
|
|
34
|
+
return await response.json();
|
|
35
|
+
} catch (e) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Fetch a package's latest published version.
|
|
42
|
+
*
|
|
43
|
+
* @param {string} packageName - npm package name
|
|
44
|
+
* @param {object} [options] - same options as getPackageManifest
|
|
45
|
+
* @returns {Promise<string|null>} version string, or null on any failure
|
|
46
|
+
*/
|
|
47
|
+
async function getLatestVersion(packageName, options) {
|
|
48
|
+
const manifest = await getPackageManifest(packageName, options);
|
|
49
|
+
return (manifest && manifest.version) || null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module.exports = { getPackageManifest, getLatestVersion };
|