@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,156 @@
|
|
|
1
|
+
// createCliRouter(config) — the shared OMEGA framework CLI dispatcher.
|
|
2
|
+
//
|
|
3
|
+
// Every framework bin parses argv (yargs) and hands the result to a Main class
|
|
4
|
+
// whose process() resolves a command name and runs commands/<name>.js from the
|
|
5
|
+
// framework's dist. That router was copy-pasted per framework (UJM/BXM/EM,
|
|
6
|
+
// drift-identical); this is the single implementation. @omega.js/backend's CLI is a different
|
|
7
|
+
// design (colon-style utility commands dispatching stateful command classes)
|
|
8
|
+
// and does not use this.
|
|
9
|
+
//
|
|
10
|
+
// Resolution order (unchanged from the framework copies):
|
|
11
|
+
// 1. Positional command (`mgr build`) — matched against command names and
|
|
12
|
+
// their aliases; unknown names pass through as-is (missing file = error).
|
|
13
|
+
// 2. Flag-style alias (`mgr --build`, `mgr -b`) — first alias-table hit wins.
|
|
14
|
+
// 3. The default command (OMEGA convention: help — `setup` is retired,
|
|
15
|
+
// #675, and every verb runs its own local scaffold).
|
|
16
|
+
//
|
|
17
|
+
// dotenv loading and any process-env fixups (e.g. EM's ELECTRON_RUN_AS_NODE
|
|
18
|
+
// strip) stay in the framework's cli.js/bin — they're framework concerns, not
|
|
19
|
+
// dispatch.
|
|
20
|
+
|
|
21
|
+
const path = require('path');
|
|
22
|
+
const jetpack = require('fs-jetpack');
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Build a framework CLI Main class.
|
|
26
|
+
*
|
|
27
|
+
* @param {object} config
|
|
28
|
+
* @param {string} config.commandsDir - Absolute directory of command modules — <name>.js exporting `async (options) => {}`
|
|
29
|
+
* @param {Object<string, string[]>} [config.aliases] - Command name → positional/flag aliases (e.g. `{ install: ['-i', 'i', '--install'] }`)
|
|
30
|
+
* @param {string} [config.defaultCommand='help'] - Command used when no positional or flag alias matches
|
|
31
|
+
* @returns {Function} Main class — bins do `new Main(argv)` then `await main.process(argv)`
|
|
32
|
+
*/
|
|
33
|
+
function createCliRouter(config) {
|
|
34
|
+
config = config || {};
|
|
35
|
+
|
|
36
|
+
const commandsDir = config.commandsDir;
|
|
37
|
+
const aliases = config.aliases || {};
|
|
38
|
+
const defaultCommand = config.defaultCommand || 'help';
|
|
39
|
+
|
|
40
|
+
if (!commandsDir) {
|
|
41
|
+
throw new Error('[devkit cli-router] commandsDir is required');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Resolve command name from positional args or flag-style aliases
|
|
45
|
+
function resolveCommand(options) {
|
|
46
|
+
// `--help`/`-h` route to the built-in help FIRST — before positionals, so
|
|
47
|
+
// `omega deploy --help` prints help instead of RUNNING deploy, and never
|
|
48
|
+
// the default command (the old fallthrough ran setup/manage on a help
|
|
49
|
+
// request). Frameworks must disable yargs' built-in help so the flag
|
|
50
|
+
// reaches the router.
|
|
51
|
+
if (options.help || options.h) {
|
|
52
|
+
return 'help';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Check if a command was explicitly passed via positional argument
|
|
56
|
+
if (options._.length > 0) {
|
|
57
|
+
const command = options._[0];
|
|
58
|
+
for (const [key, names] of Object.entries(aliases)) {
|
|
59
|
+
if (command === key || names.includes(command)) {
|
|
60
|
+
return key;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return command; // If not found in aliases, return as-is
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check if any alias was passed as a flag (e.g., -v)
|
|
67
|
+
for (const [key, names] of Object.entries(aliases)) {
|
|
68
|
+
for (const alias of names) {
|
|
69
|
+
if (options[alias.replace(/^-+/, '')]) { // Remove leading `-`
|
|
70
|
+
return key;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return defaultCommand; // Fallback to default if no match is found
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Command names = the dispatchable surface: commands/<name>.js files.
|
|
79
|
+
function listCommands() {
|
|
80
|
+
return (jetpack.list(commandsDir) || [])
|
|
81
|
+
.filter((f) => f.endsWith('.js'))
|
|
82
|
+
.map((f) => f.replace(/\.js$/, ''))
|
|
83
|
+
.sort();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Built-in help — generated from the alias table + the commands directory so
|
|
87
|
+
// it can never drift from what actually dispatches. A framework can override
|
|
88
|
+
// it by shipping its own commands/help.js.
|
|
89
|
+
function printHelp() {
|
|
90
|
+
const lines = listCommands().map((name) => {
|
|
91
|
+
const parts = [` ${name}`];
|
|
92
|
+
const aliasNames = (aliases[name] || []).join(', ');
|
|
93
|
+
if (aliasNames) parts.push(`(${aliasNames})`);
|
|
94
|
+
if (name === defaultCommand) parts.push('[default]');
|
|
95
|
+
return parts.join(' ');
|
|
96
|
+
});
|
|
97
|
+
console.log(`Usage: omega <command> [options]\n\nCommands:\n${lines.join('\n')}`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Main Function
|
|
101
|
+
function Main() {}
|
|
102
|
+
|
|
103
|
+
// Expose the resolved dispatch table for introspection — framework structure
|
|
104
|
+
// tests verify every aliased command has a command file without scraping
|
|
105
|
+
// the cli.js source.
|
|
106
|
+
Main.config = { commandsDir, aliases, defaultCommand };
|
|
107
|
+
|
|
108
|
+
Main.prototype.process = async function (options) {
|
|
109
|
+
// Fix options
|
|
110
|
+
options = options || {};
|
|
111
|
+
options._ = options._ || [];
|
|
112
|
+
|
|
113
|
+
// Determine the command (use default if not provided)
|
|
114
|
+
const command = resolveCommand(options);
|
|
115
|
+
|
|
116
|
+
// Get the command file path
|
|
117
|
+
const commandFile = path.join(commandsDir, `${command}.js`);
|
|
118
|
+
|
|
119
|
+
if (!jetpack.exists(commandFile)) {
|
|
120
|
+
// Built-in help (a framework's own commands/help.js would have won above)
|
|
121
|
+
if (command === 'help') {
|
|
122
|
+
printHelp();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Unknown command: name the valid surface and fail loud — the old path
|
|
127
|
+
// threw a doubled "Error executing… Error: Command…" with no listing.
|
|
128
|
+
// An empty listing means the dist itself is broken, not a typo — say so.
|
|
129
|
+
const available = listCommands();
|
|
130
|
+
if (available.length === 0) {
|
|
131
|
+
console.error(`No commands found in ${commandsDir} — the framework dist is missing or broken (rebuild/reinstall it).`);
|
|
132
|
+
} else {
|
|
133
|
+
console.error(`Unknown command "${command}". Available: ${available.join(', ')}`);
|
|
134
|
+
}
|
|
135
|
+
process.exitCode = 1;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
try {
|
|
140
|
+
// Execute the command
|
|
141
|
+
const Command = require(commandFile);
|
|
142
|
+
await Command(options);
|
|
143
|
+
} catch (e) {
|
|
144
|
+
// The command's own error is the only surface — no wrapper prefix, no
|
|
145
|
+
// rethrow (which double-printed via the unhandled-rejection handler).
|
|
146
|
+
// A crafted refusal (devkit scaffold-guard.js) prints its message alone:
|
|
147
|
+
// the stack belongs to a bug, and a refusal is not one (#706).
|
|
148
|
+
console.error(e && e.refusal ? e.message : (e.stack || String(e)));
|
|
149
|
+
process.exitCode = 1;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
return Main;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
module.exports = { createCliRouter };
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
// applyDefaults(config) — the shared OMEGA defaults-scaffolding engine.
|
|
2
|
+
//
|
|
3
|
+
// Every framework ships a defaults tree (src/defaults/ → dist/defaults/) that
|
|
4
|
+
// setup copies into the consumer project. The copy rules lived as two divergent
|
|
5
|
+
// implementations (BXM's gulp FILE_MAP task — the real one — and EM's plain-fs
|
|
6
|
+
// copyDefaults; UJM carries a third copy of the BXM shape). This is the single
|
|
7
|
+
// plain-fs engine, a normalized superset of both.
|
|
8
|
+
//
|
|
9
|
+
// File-map rules: minimatch patterns (dot:true) matched against the RAW path
|
|
10
|
+
// relative to defaultsDir, last-match-wins option merging. Per-rule options:
|
|
11
|
+
// overwrite bool|fn(item) default true — write even if the destination exists
|
|
12
|
+
// skip bool|fn(item) default false — never process this file
|
|
13
|
+
// name fn(item) rename the output file
|
|
14
|
+
// path fn(item) re-destination the output (relative dir)
|
|
15
|
+
// template object render `{{ key.path }}` tokens with this data
|
|
16
|
+
// (tolerant: unknown keys survive verbatim, so GitHub
|
|
17
|
+
// Actions' `${{ secrets.X }}` passes through)
|
|
18
|
+
// merge bool JSON5 defaults-merge with the existing file
|
|
19
|
+
// mergeLines bool OMEGA marker-section line merge (.env/.gitignore/AGENTS.md)
|
|
20
|
+
// retire bool brand-context per-target doc retirement: NEVER scaffold
|
|
21
|
+
// the file; an existing framework-owned-only copy is
|
|
22
|
+
// DELETED (one-time heal — the brand root is the doc
|
|
23
|
+
// home), a copy carrying consumer content stays with a
|
|
24
|
+
// loud move-it warning (never destroyed)
|
|
25
|
+
//
|
|
26
|
+
// Engine built-ins (not expressed in the file map):
|
|
27
|
+
// - `_.name` segments lose the leading `_` (dotfiles ship past npm's filter)
|
|
28
|
+
// - non-final segments starting `_` (but not `_.`) are ARCHIVE dirs — skipped
|
|
29
|
+
// (reference material that ships in the framework package, e.g. EM's `_mas/`)
|
|
30
|
+
// - `.gitkeep` creates the destination directory, the file itself never copies
|
|
31
|
+
// - `.DS_Store` never copies
|
|
32
|
+
// - text writes are skipped when the destination is byte-identical (idempotent
|
|
33
|
+
// re-runs report zero writes)
|
|
34
|
+
// - a destination carrying the OMEGA section markers when the current template
|
|
35
|
+
// no longer does is a PRIOR-GENERATION generated file: framework-owned, so
|
|
36
|
+
// `retire` sweeps it and `overwrite: false` still heals it
|
|
37
|
+
// - binary files (by extension) copy verbatim — never templated/merged/transformed
|
|
38
|
+
|
|
39
|
+
const path = require('path');
|
|
40
|
+
const fs = require('fs');
|
|
41
|
+
const jetpack = require('fs-jetpack');
|
|
42
|
+
const { minimatch } = require('minimatch');
|
|
43
|
+
const { mergeLineBasedFiles, hasSectionMarkers, getCustomSection } = require('./merge-line-files');
|
|
44
|
+
|
|
45
|
+
// Files with these extensions copy byte-for-byte and never go through
|
|
46
|
+
// template/merge/transform (matches BXM's binary detection list).
|
|
47
|
+
const BINARY_EXTENSIONS = /\.(jpg|jpeg|png|gif|webp|svg|ico|woff|woff2|ttf|otf|eot|pdf|zip|tar|gz|mp3|mp4|avi|mov)$/i;
|
|
48
|
+
|
|
49
|
+
const RULE_DEFAULTS = {
|
|
50
|
+
overwrite: true,
|
|
51
|
+
skip: false,
|
|
52
|
+
name: null,
|
|
53
|
+
path: null,
|
|
54
|
+
template: null,
|
|
55
|
+
merge: false,
|
|
56
|
+
mergeLines: false,
|
|
57
|
+
retire: false,
|
|
58
|
+
rule: null,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Scaffold a framework defaults tree into a consumer project.
|
|
63
|
+
*
|
|
64
|
+
* @param {object} config
|
|
65
|
+
* @param {string} config.defaultsDir - Absolute root of the defaults tree (e.g. <framework>/dist/defaults)
|
|
66
|
+
* @param {string} config.outputDir - Absolute consumer project root to scaffold into
|
|
67
|
+
* @param {Object<string, object>} [config.fileMap] - minimatch pattern → rule options (see header)
|
|
68
|
+
* @param {string[]} [config.files] - Only process these absolute source paths (watch single-file mode)
|
|
69
|
+
* @param {Function} [config.transform] - `(contents, item) => contents` global hook, run on every
|
|
70
|
+
* non-binary file after per-rule processing (BXM's site-token templating pass)
|
|
71
|
+
* @param {object} [config.logger] - `{ log, warn, error }` (defaults to console)
|
|
72
|
+
* @returns {{ written: string[], merged: string[], skipped: string[], removed: string[] }} destination-relative paths per outcome
|
|
73
|
+
*/
|
|
74
|
+
function applyDefaults(config) {
|
|
75
|
+
config = config || {};
|
|
76
|
+
|
|
77
|
+
const defaultsDir = config.defaultsDir;
|
|
78
|
+
const outputDir = config.outputDir;
|
|
79
|
+
const fileMap = config.fileMap || {};
|
|
80
|
+
const only = config.files ? config.files.map((f) => path.resolve(f)) : null;
|
|
81
|
+
const transform = config.transform || null;
|
|
82
|
+
const logger = config.logger || console;
|
|
83
|
+
|
|
84
|
+
if (!defaultsDir || !outputDir) {
|
|
85
|
+
throw new Error('[devkit defaults-engine] defaultsDir and outputDir are required');
|
|
86
|
+
}
|
|
87
|
+
if (!jetpack.exists(defaultsDir)) {
|
|
88
|
+
throw new Error(`[devkit defaults-engine] defaultsDir does not exist: ${defaultsDir}`);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const result = { written: [], merged: [], skipped: [], removed: [] };
|
|
92
|
+
|
|
93
|
+
for (const source of walkFiles(defaultsDir)) {
|
|
94
|
+
if (only && !only.includes(source)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const relative = path.relative(defaultsDir, source).split(path.sep).join('/');
|
|
99
|
+
const segments = relative.split('/');
|
|
100
|
+
const basename = segments[segments.length - 1];
|
|
101
|
+
|
|
102
|
+
// Archive dirs: any non-final `_x` segment (but `_.x` files are renames, not archives).
|
|
103
|
+
const dirSegments = segments.slice(0, -1);
|
|
104
|
+
if (dirSegments.some((s) => s.startsWith('_') && !s.startsWith('_.'))) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (basename === '.DS_Store') {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// `.gitkeep` → ensure the directory exists, never copy the file itself.
|
|
113
|
+
if (basename === '.gitkeep') {
|
|
114
|
+
jetpack.dir(path.join(outputDir, ...strippedSegments(segments).slice(0, -1)));
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const options = resolveOptions(relative, fileMap);
|
|
119
|
+
|
|
120
|
+
// Item passed to rule functions — built from the `_.`-stripped path.
|
|
121
|
+
const stripped = strippedSegments(segments);
|
|
122
|
+
const item = {
|
|
123
|
+
source: path.dirname(source),
|
|
124
|
+
name: stripped[stripped.length - 1],
|
|
125
|
+
destination: stripped.slice(0, -1).join('/'),
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
if (typeof options.name === 'function') {
|
|
129
|
+
item.name = options.name(item);
|
|
130
|
+
}
|
|
131
|
+
if (typeof options.path === 'function') {
|
|
132
|
+
item.destination = options.path(item);
|
|
133
|
+
}
|
|
134
|
+
if (typeof options.skip === 'function') {
|
|
135
|
+
options.skip = options.skip(item);
|
|
136
|
+
}
|
|
137
|
+
if (typeof options.overwrite === 'function') {
|
|
138
|
+
options.overwrite = options.overwrite(item);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const finalRelative = path.join(item.destination, item.name);
|
|
142
|
+
const destination = path.join(outputDir, finalRelative);
|
|
143
|
+
const exists = jetpack.exists(destination);
|
|
144
|
+
const isBinary = BINARY_EXTENSIONS.test(item.name);
|
|
145
|
+
|
|
146
|
+
if (options.skip) {
|
|
147
|
+
result.skipped.push(finalRelative);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Retire: the file never scaffolds. An existing framework-owned-only copy
|
|
152
|
+
// is deleted (one-time heal); consumer content is never destroyed.
|
|
153
|
+
if (options.retire) {
|
|
154
|
+
if (!exists) {
|
|
155
|
+
result.skipped.push(finalRelative);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
let owned;
|
|
160
|
+
if (isBinary) {
|
|
161
|
+
owned = jetpack.read(source, 'buffer').equals(jetpack.read(destination, 'buffer'));
|
|
162
|
+
} else {
|
|
163
|
+
// Render the template through the same pipeline the scaffold used, so
|
|
164
|
+
// an untouched consumer copy compares equal.
|
|
165
|
+
let rendered = jetpack.read(source);
|
|
166
|
+
if (options.template) {
|
|
167
|
+
rendered = renderTemplate(rendered, options.template);
|
|
168
|
+
}
|
|
169
|
+
if (transform) {
|
|
170
|
+
rendered = transform(rendered, item);
|
|
171
|
+
}
|
|
172
|
+
owned = isFrameworkOwned(jetpack.read(destination), rendered);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (owned) {
|
|
176
|
+
jetpack.remove(destination);
|
|
177
|
+
pruneEmptyDirs(path.dirname(destination), outputDir);
|
|
178
|
+
result.removed.push(finalRelative);
|
|
179
|
+
logger.warn(`Retired ${finalRelative} — framework-owned per-target doc; in a brand monorepo the BRAND ROOT (AGENTS.md / CHANGELOG.md / docs/) is the one doc home`);
|
|
180
|
+
} else {
|
|
181
|
+
result.skipped.push(finalRelative);
|
|
182
|
+
logger.warn(`Kept ${finalRelative} — it carries consumer content. Per-target docs are retired in brand monorepos: move that content to the brand root (AGENTS.md notes / brand CHANGELOG.md / brand docs/), then delete the file`);
|
|
183
|
+
}
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Binary: copy or preserve — no content processing.
|
|
188
|
+
if (isBinary) {
|
|
189
|
+
if (exists && !options.overwrite) {
|
|
190
|
+
result.skipped.push(finalRelative);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
jetpack.copy(source, destination, { overwrite: true });
|
|
194
|
+
result.written.push(finalRelative);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
let contents = jetpack.read(source);
|
|
199
|
+
let didMerge = false;
|
|
200
|
+
|
|
201
|
+
// Per-rule template render happens BEFORE merging, so merges compare
|
|
202
|
+
// rendered framework defaults against the consumer's file (EM semantic).
|
|
203
|
+
if (options.template) {
|
|
204
|
+
contents = renderTemplate(contents, options.template);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (options.merge && exists) {
|
|
208
|
+
try {
|
|
209
|
+
const JSON5 = require('json5');
|
|
210
|
+
const merged = mergeJson5Defaults(JSON5.parse(jetpack.read(destination)), JSON5.parse(contents));
|
|
211
|
+
contents = JSON5.stringify(merged, null, 2);
|
|
212
|
+
didMerge = true;
|
|
213
|
+
} catch (error) {
|
|
214
|
+
logger.error(`Error merging config file ${finalRelative}: ${error.message}`);
|
|
215
|
+
// Fall through to normal processing.
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (options.mergeLines && exists) {
|
|
220
|
+
try {
|
|
221
|
+
contents = mergeLineBasedFiles(jetpack.read(destination), contents, item.name);
|
|
222
|
+
didMerge = true;
|
|
223
|
+
} catch (error) {
|
|
224
|
+
logger.error(`Error merging line-based file ${finalRelative}: ${error.message}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Preserve the consumer's file unless a rule says otherwise — except a
|
|
229
|
+
// prior-generation marker artifact, which the framework owns and heals to
|
|
230
|
+
// the current template even under `overwrite: false` (the standalone twin
|
|
231
|
+
// of the retire sweep below).
|
|
232
|
+
if (exists && !options.overwrite && !didMerge && !isLegacyMarkerArtifact(jetpack.read(destination), contents)) {
|
|
233
|
+
result.skipped.push(finalRelative);
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (transform) {
|
|
238
|
+
contents = transform(contents, item);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Idempotency: identical content is not a write.
|
|
242
|
+
if (exists && jetpack.read(destination) === contents) {
|
|
243
|
+
result.skipped.push(finalRelative);
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
jetpack.write(destination, contents);
|
|
248
|
+
(didMerge ? result.merged : result.written).push(finalRelative);
|
|
249
|
+
logger.log(`${didMerge ? 'Merged' : 'Scaffolded'} → ${finalRelative}`);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return result;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Judge whether an existing consumer file is framework-owned-only (safe to
|
|
256
|
+
// retire). Marker files are judged by their Custom section — empty,
|
|
257
|
+
// whitespace-only, or exactly the template's shipped boilerplate all count as
|
|
258
|
+
// untouched. Marker-less files must match the rendered template outright.
|
|
259
|
+
function isFrameworkOwned(existing, rendered) {
|
|
260
|
+
if (hasSectionMarkers(existing)) {
|
|
261
|
+
if (isLegacyMarkerArtifact(existing, rendered)) return true;
|
|
262
|
+
const existingCustom = getCustomSection(existing).trim();
|
|
263
|
+
return existingCustom === '' || existingCustom === getCustomSection(rendered).trim();
|
|
264
|
+
}
|
|
265
|
+
return existing.trim() === rendered.trim();
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// A generation change: the destination carries the OMEGA marker grammar — which
|
|
269
|
+
// only this framework's own scaffold writes — while the current template has
|
|
270
|
+
// dropped it. That file is a PRIOR GENERATION's generated copy (e.g. the
|
|
271
|
+
// content-bearing CLAUDE.md written before it became the one-line `@AGENTS.md`
|
|
272
|
+
// pointer), so comparing it against the current render can never match and the
|
|
273
|
+
// framework, not the consumer, owns it.
|
|
274
|
+
function isLegacyMarkerArtifact(existing, rendered) {
|
|
275
|
+
return hasSectionMarkers(existing) && !hasSectionMarkers(rendered);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Remove now-empty ancestor dirs of a retired file, stopping at (and never
|
|
279
|
+
// removing) rootDir — a retired docs/README.md takes its empty docs/ with it.
|
|
280
|
+
function pruneEmptyDirs(dir, rootDir) {
|
|
281
|
+
const root = path.resolve(rootDir);
|
|
282
|
+
let current = path.resolve(dir);
|
|
283
|
+
while (current !== root && current.startsWith(root + path.sep)) {
|
|
284
|
+
if ((jetpack.list(current) || []).length > 0) return;
|
|
285
|
+
jetpack.remove(current);
|
|
286
|
+
current = path.dirname(current);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Depth-first file walk that never follows symlinks.
|
|
291
|
+
function* walkFiles(dir) {
|
|
292
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
293
|
+
for (const entry of entries) {
|
|
294
|
+
const abs = path.join(dir, entry.name);
|
|
295
|
+
if (entry.isSymbolicLink()) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (entry.isDirectory()) {
|
|
299
|
+
yield* walkFiles(abs);
|
|
300
|
+
} else if (entry.isFile()) {
|
|
301
|
+
yield abs;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// `_.name` → `.name` on every segment (dotfiles ship past npm's tarball filter).
|
|
307
|
+
function strippedSegments(segments) {
|
|
308
|
+
return segments.map((s) => (s.startsWith('_.') ? s.slice(1) : s));
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Last-match-wins option resolution across the file map (BXM's getFileOptions).
|
|
312
|
+
function resolveOptions(relativePath, fileMap) {
|
|
313
|
+
let options = { ...RULE_DEFAULTS };
|
|
314
|
+
|
|
315
|
+
for (const pattern in fileMap) {
|
|
316
|
+
if (minimatch(relativePath, pattern, { dot: true })) {
|
|
317
|
+
options = { ...options, ...fileMap[pattern] };
|
|
318
|
+
options.rule = pattern;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return options;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Minimal `{{ key.path }}` substitution (EM's tolerant renderer — the standard).
|
|
326
|
+
// Unknown keys render as the original `{{ ... }}` string, so non-template content
|
|
327
|
+
// with literal braces (e.g. GitHub Actions `${{ secrets.X }}`) survives.
|
|
328
|
+
function renderTemplate(content, context) {
|
|
329
|
+
if (typeof content !== 'string' || !content.includes('{{')) return content;
|
|
330
|
+
return content.replace(/\{\{\s*([\w.]+)\s*\}\}/g, (full, keyPath) => {
|
|
331
|
+
const value = keyPath.split('.').reduce((acc, k) => (acc == null ? acc : acc[k]), context);
|
|
332
|
+
return (value === undefined || value === null) ? full : String(value);
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// JSON5 defaults merge (BXM's mergeConfigs): framework defaults provide shape and
|
|
337
|
+
// order; the consumer's values win unless they're the literal string 'default';
|
|
338
|
+
// consumer-only keys survive at every nesting level.
|
|
339
|
+
function mergeJson5Defaults(existingConfig, newConfig) {
|
|
340
|
+
const merged = { ...newConfig };
|
|
341
|
+
|
|
342
|
+
function mergeNested(target, source, newDefaults) {
|
|
343
|
+
for (const key in newDefaults) {
|
|
344
|
+
if (Object.prototype.hasOwnProperty.call(newDefaults, key)) {
|
|
345
|
+
const newValue = newDefaults[key];
|
|
346
|
+
const existingValue = source[key];
|
|
347
|
+
|
|
348
|
+
if (typeof newValue === 'object' && newValue !== null && !Array.isArray(newValue)) {
|
|
349
|
+
target[key] = target[key] || {};
|
|
350
|
+
mergeNested(target[key], existingValue || {}, newValue);
|
|
351
|
+
} else if (Object.prototype.hasOwnProperty.call(source, key) && existingValue !== 'default') {
|
|
352
|
+
target[key] = existingValue;
|
|
353
|
+
} else {
|
|
354
|
+
target[key] = newValue;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Consumer-only keys survive at every level.
|
|
360
|
+
for (const key in source) {
|
|
361
|
+
if (!Object.prototype.hasOwnProperty.call(newDefaults, key)) {
|
|
362
|
+
target[key] = source[key];
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
mergeNested(merged, existingConfig, newConfig);
|
|
368
|
+
|
|
369
|
+
return merged;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
module.exports = { applyDefaults, mergeJson5Defaults, renderTemplate };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runDeployPrecheck — the shared runner for the NETWORK half `omega setup`
|
|
3
|
+
* used to own ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)).
|
|
4
|
+
*
|
|
5
|
+
* Setup's local half rides every verb (each framework's ensure-target); what
|
|
6
|
+
* needs the network rides the ONE verb that needs the remote side right —
|
|
7
|
+
* `omega deploy` — as a precheck before the dispatch. The STEPS differ per
|
|
8
|
+
* framework (desktop signs and provisions release repos, extension checks its
|
|
9
|
+
* own freshness, web publishes Actions secrets); the RUNNER does not, so it
|
|
10
|
+
* lives here and every framework file is its list.
|
|
11
|
+
*
|
|
12
|
+
* The contract the runner guarantees:
|
|
13
|
+
* - `--no-secrets` (yargs: `secrets: false`) skips the whole precheck — the
|
|
14
|
+
* same opt-out name on web, desktop and extension (parity; desktop's old
|
|
15
|
+
* `--quick` is gone).
|
|
16
|
+
* - Every step is SOFT: a throwing step is reported as a warning and the run
|
|
17
|
+
* continues. A precheck reports; the deploy is the caller's decision.
|
|
18
|
+
* - Steps run in list order and `ran` names the ones that finished, so a test
|
|
19
|
+
* hands its own recorder in and reads back exactly what happened.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {object} input
|
|
24
|
+
* @param {string} input.projectDir - The target root.
|
|
25
|
+
* @param {object} [input.options] - The parsed CLI options (`secrets: false` = opted out).
|
|
26
|
+
* @param {object} input.logger - `{ log, warn, error }`.
|
|
27
|
+
* @param {Array<{ name: string, run: function }>} input.steps - The framework's step list.
|
|
28
|
+
* @returns {Promise<{ skipped: string }|{ ran: string[] }>} The steps that ran, or the opt-out marker.
|
|
29
|
+
*/
|
|
30
|
+
async function runDeployPrecheck({ projectDir, options, logger, steps }) {
|
|
31
|
+
// yargs turns `--no-secrets` into `secrets: false`.
|
|
32
|
+
if (options && options.secrets === false) {
|
|
33
|
+
logger.log('Skipping the network prechecks (--no-secrets)');
|
|
34
|
+
return { skipped: 'opt-out' };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const log = (line) => logger.log(line);
|
|
38
|
+
const warn = (line) => logger.warn(line);
|
|
39
|
+
const ran = [];
|
|
40
|
+
|
|
41
|
+
for (const step of steps) {
|
|
42
|
+
try {
|
|
43
|
+
await step.run({ projectDir, log, warn });
|
|
44
|
+
ran.push(step.name);
|
|
45
|
+
} catch (e) {
|
|
46
|
+
// A precheck REPORTS; the deploy is the caller's decision.
|
|
47
|
+
warn(`${step.name} failed during the deploy precheck (non-fatal): ${e.message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return { ran };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = { runDeployPrecheck };
|