@omega.js/desktop 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 +166 -0
- package/bin/omega +2 -0
- package/bin/omega-desktop +2 -0
- package/bin/omg +2 -0
- package/dist/assets/css/core/_fontawesome.scss +146 -0
- package/dist/assets/css/core/_initialize.scss +38 -0
- package/dist/assets/css/omega-desktop.scss +39 -0
- package/dist/assets/css/shell/_index.scss +207 -0
- package/dist/assets/css/tokens/_index.scss +166 -0
- package/dist/assets/js/bootstrap.bundle.js +1 -0
- package/dist/assets/js/core/app-shell.js +136 -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/build.js +249 -0
- package/dist/cli-run.js +34 -0
- package/dist/cli.js +49 -0
- package/dist/commands/build.js +32 -0
- package/dist/commands/cdp/capture.js +91 -0
- package/dist/commands/cdp/client.js +140 -0
- package/dist/commands/cdp/eval.js +20 -0
- package/dist/commands/cdp/quit.js +84 -0
- package/dist/commands/cdp/relaunch.js +62 -0
- package/dist/commands/cdp/shot.js +20 -0
- package/dist/commands/cdp/status.js +38 -0
- package/dist/commands/cdp/theme.js +21 -0
- package/dist/commands/cdp.js +53 -0
- package/dist/commands/clean.js +34 -0
- package/dist/commands/deploy.js +75 -0
- package/dist/commands/finalize-release.js +238 -0
- package/dist/commands/install.js +37 -0
- package/dist/commands/launch.js +150 -0
- package/dist/commands/lib/dependencies.js +35 -0
- package/dist/commands/lib/deploy-precheck.js +117 -0
- package/dist/commands/lib/ensure-target.js +300 -0
- package/dist/commands/logs.js +185 -0
- package/dist/commands/package.js +31 -0
- package/dist/commands/publish.js +34 -0
- package/dist/commands/push-secrets.js +141 -0
- package/dist/commands/release.js +286 -0
- package/dist/commands/runner.js +1874 -0
- package/dist/commands/sign-windows.js +563 -0
- package/dist/commands/test.js +121 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/validate-certs.js +238 -0
- package/dist/commands/version.js +9 -0
- package/dist/config/page-template.html +35 -0
- package/dist/defaults/.github/workflows/build.yml +276 -0
- package/dist/defaults/AGENTS.md +109 -0
- package/dist/defaults/CHANGELOG.md +15 -0
- package/dist/defaults/CLAUDE.md +1 -0
- package/dist/defaults/_.gitignore +24 -0
- package/dist/defaults/_mas/README.md +49 -0
- package/dist/defaults/_mas/entitlements.mas.inherit.plist +12 -0
- package/dist/defaults/_mas/entitlements.mas.loginhelper.plist +8 -0
- package/dist/defaults/_mas/entitlements.mas.plist +33 -0
- package/dist/defaults/config/certs/.gitkeep +0 -0
- package/dist/defaults/config/certs/README.md +60 -0
- package/dist/defaults/config/icons/macos/dmg.png +0 -0
- package/dist/defaults/config/icons/macos/icon.png +0 -0
- package/dist/defaults/config/icons/macos/tray.png +0 -0
- package/dist/defaults/config/icons/windows/icon.png +0 -0
- package/dist/defaults/config/omega.json5 +279 -0
- package/dist/defaults/docs/README.md +17 -0
- package/dist/defaults/gulpfile.js +6 -0
- package/dist/defaults/hooks/build/post.js +9 -0
- package/dist/defaults/hooks/build/pre.js +9 -0
- package/dist/defaults/hooks/notarize/post.js +16 -0
- package/dist/defaults/hooks/release/post.js +9 -0
- package/dist/defaults/hooks/release/pre.js +9 -0
- package/dist/defaults/src/assets/js/components/about/index.js +10 -0
- package/dist/defaults/src/assets/js/components/main/index.js +14 -0
- package/dist/defaults/src/assets/js/components/settings/index.js +10 -0
- package/dist/defaults/src/assets/scss/main.scss +34 -0
- package/dist/defaults/src/assets/scss/pages/about.scss +3 -0
- package/dist/defaults/src/assets/scss/pages/main.scss +4 -0
- package/dist/defaults/src/assets/scss/pages/settings.scss +3 -0
- package/dist/defaults/src/integrations/context-menu/index.js +60 -0
- package/dist/defaults/src/integrations/menu/index.js +58 -0
- package/dist/defaults/src/integrations/tray/index.js +60 -0
- package/dist/defaults/src/main.js +78 -0
- package/dist/defaults/src/preload.js +15 -0
- package/dist/defaults/src/views/about/index.html +3 -0
- package/dist/defaults/src/views/main/index.html +8 -0
- package/dist/defaults/src/views/settings/index.html +3 -0
- package/dist/defaults/test/README.md +41 -0
- package/dist/defaults/test/_init.js +10 -0
- package/dist/gulp/main.js +144 -0
- package/dist/gulp/tasks/audit.js +82 -0
- package/dist/gulp/tasks/build-config.js +445 -0
- package/dist/gulp/tasks/bundle.js +451 -0
- package/dist/gulp/tasks/defaults.js +20 -0
- package/dist/gulp/tasks/distribute.js +8 -0
- package/dist/gulp/tasks/html.js +95 -0
- package/dist/gulp/tasks/package-quick.js +102 -0
- package/dist/gulp/tasks/package.js +53 -0
- package/dist/gulp/tasks/release.js +57 -0
- package/dist/gulp/tasks/sass.js +82 -0
- package/dist/gulp/tasks/serve.js +191 -0
- package/dist/hooks/notarize.js +70 -0
- package/dist/index.js +14 -0
- package/dist/lib/_menu-mixin.js +199 -0
- package/dist/lib/analytics.js +360 -0
- package/dist/lib/app-state.js +220 -0
- package/dist/lib/auth-flow.js +160 -0
- package/dist/lib/auth-persistence.js +207 -0
- package/dist/lib/auto-updater.js +752 -0
- package/dist/lib/client-bridge.js +371 -0
- package/dist/lib/context-menu.js +302 -0
- package/dist/lib/context.js +162 -0
- package/dist/lib/deep-link.js +370 -0
- package/dist/lib/fontawesome.js +203 -0
- package/dist/lib/ipc.js +169 -0
- package/dist/lib/logger-lite.js +259 -0
- package/dist/lib/logger.js +4 -0
- package/dist/lib/menu.js +521 -0
- package/dist/lib/protocol.js +85 -0
- package/dist/lib/remote-config.js +224 -0
- package/dist/lib/remote-scripts.js +158 -0
- package/dist/lib/restart-manager/index.js +550 -0
- package/dist/lib/restart-manager/install.js +353 -0
- package/dist/lib/restart-manager/protocol.js +274 -0
- package/dist/lib/sign-helpers/auto-unlock.js +95 -0
- package/dist/lib/sign-helpers/entitlements.js +98 -0
- package/dist/lib/sign-helpers/resolve-icons.js +171 -0
- package/dist/lib/sign-helpers/sign-events.js +75 -0
- package/dist/lib/sign-helpers/update-info.js +186 -0
- package/dist/lib/startup.js +214 -0
- package/dist/lib/storage.js +193 -0
- package/dist/lib/templating.js +85 -0
- package/dist/lib/theme.js +173 -0
- package/dist/lib/tray.js +414 -0
- package/dist/lib/usage.js +141 -0
- package/dist/lib/window-manager.js +509 -0
- package/dist/main.js +542 -0
- package/dist/omega-bin.js +6 -0
- package/dist/preload.js +241 -0
- package/dist/renderer.js +456 -0
- package/dist/test/assert.js +4 -0
- package/dist/test/fixtures/consumer-app/config/omega.json5 +39 -0
- package/dist/test/fixtures/consumer-app/package.json +13 -0
- package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +11 -0
- package/dist/test/fixtures/consumer-app/src/assets/scss/main.scss +3 -0
- package/dist/test/fixtures/consumer-app/src/main.js +17 -0
- package/dist/test/fixtures/consumer-app/src/preload.js +4 -0
- package/dist/test/fixtures/consumer-app/src/views/main/index.html +4 -0
- package/dist/test/harness/boot-entry.js +237 -0
- package/dist/test/harness/main-entry.js +494 -0
- package/dist/test/harness/package.json +6 -0
- package/dist/test/harness/renderer-entry.js +173 -0
- package/dist/test/harness/renderer-preload.js +310 -0
- package/dist/test/harness/renderer.html +12 -0
- package/dist/test/index.js +65 -0
- package/dist/test/runner.js +99 -0
- package/dist/test/runners/boot.js +414 -0
- package/dist/test/runners/electron.js +92 -0
- package/dist/test/runners/render-event.js +46 -0
- package/dist/test/suites/boot/build-isolation.test.js +54 -0
- package/dist/test/suites/boot/consumer-app-boots.test.js +99 -0
- package/dist/test/suites/boot/restart-manager.test.js +38 -0
- package/dist/test/suites/boot/storage-bundled.test.js +59 -0
- package/dist/test/suites/boot/theme.test.js +68 -0
- package/dist/test/suites/boot/view-suite.test.js +47 -0
- package/dist/test/suites/build/attach-log-file.test.js +99 -0
- package/dist/test/suites/build/audit.test.js +271 -0
- package/dist/test/suites/build/boot-fixture.test.js +48 -0
- package/dist/test/suites/build/build-config.test.js +457 -0
- package/dist/test/suites/build/build-verbs.test.js +156 -0
- package/dist/test/suites/build/build-workflow-jobs.test.js +55 -0
- package/dist/test/suites/build/cdp.test.js +89 -0
- package/dist/test/suites/build/cli.test.js +135 -0
- package/dist/test/suites/build/config-schema.test.js +133 -0
- package/dist/test/suites/build/defaults-scaffold.test.js +192 -0
- package/dist/test/suites/build/deliver-certs.test.js +95 -0
- package/dist/test/suites/build/derive-signing-env.test.js +122 -0
- package/dist/test/suites/build/electron-node-version.test.js +49 -0
- package/dist/test/suites/build/electron-targets.test.js +92 -0
- package/dist/test/suites/build/ensure-target.test.js +131 -0
- package/dist/test/suites/build/entitlements.test.js +107 -0
- package/dist/test/suites/build/env-delivery.test.js +166 -0
- package/dist/test/suites/build/env-watch.test.js +86 -0
- package/dist/test/suites/build/exports.test.js +63 -0
- package/dist/test/suites/build/finalize-release.test.js +152 -0
- package/dist/test/suites/build/format-fetch-error.test.js +85 -0
- package/dist/test/suites/build/framework-deps.test.js +173 -0
- package/dist/test/suites/build/get-config.test.js +137 -0
- package/dist/test/suites/build/github-utils.test.js +54 -0
- package/dist/test/suites/build/icon-sheet.test.js +62 -0
- package/dist/test/suites/build/license-stamp.test.js +63 -0
- package/dist/test/suites/build/logger-lite.test.js +148 -0
- package/dist/test/suites/build/logs-command.test.js +226 -0
- package/dist/test/suites/build/manager.test.js +193 -0
- package/dist/test/suites/build/menu-mixin.test.js +130 -0
- package/dist/test/suites/build/merge-line-files.test.js +230 -0
- package/dist/test/suites/build/omega-shell.test.js +94 -0
- package/dist/test/suites/build/omega-tokens.test.js +64 -0
- package/dist/test/suites/build/project-scripts-deps.test.js +90 -0
- package/dist/test/suites/build/push-secrets.test.js +226 -0
- package/dist/test/suites/build/release-pipeline.test.js +365 -0
- package/dist/test/suites/build/renderer-auth-bridge.test.js +158 -0
- package/dist/test/suites/build/renderer-entry-key.test.js +37 -0
- package/dist/test/suites/build/renderer-node-shims.test.js +125 -0
- package/dist/test/suites/build/resolve-icons.test.js +296 -0
- package/dist/test/suites/build/resolve-signing-cert.test.js +342 -0
- package/dist/test/suites/build/restart-manager-install.test.js +178 -0
- package/dist/test/suites/build/restart-manager-protocol.test.js +158 -0
- package/dist/test/suites/build/run-consumer-hook.test.js +137 -0
- package/dist/test/suites/build/runner.test.js +2599 -0
- package/dist/test/suites/build/sanitize-signing-env.test.js +98 -0
- package/dist/test/suites/build/sanitize-url.test.js +78 -0
- package/dist/test/suites/build/secure-remote-url.test.js +42 -0
- package/dist/test/suites/build/sentry.test.js +89 -0
- package/dist/test/suites/build/serve-resolve-electron.test.js +58 -0
- package/dist/test/suites/build/setup-scripts.test.js +172 -0
- package/dist/test/suites/build/sign-events.test.js +90 -0
- package/dist/test/suites/build/sign-windows-e2e.test.js +302 -0
- package/dist/test/suites/build/sign-windows.test.js +313 -0
- package/dist/test/suites/build/strip-dev-blocks.test.js +116 -0
- package/dist/test/suites/build/templating.test.js +95 -0
- package/dist/test/suites/build/test-discovery.test.js +64 -0
- package/dist/test/suites/build/test-stealth.test.js +83 -0
- package/dist/test/suites/build/test-target-no-match.test.js +119 -0
- package/dist/test/suites/build/update-info.test.js +224 -0
- package/dist/test/suites/build/url-helpers.test.js +289 -0
- package/dist/test/suites/build/validate-certs.test.js +103 -0
- package/dist/test/suites/build/validate-config.test.js +90 -0
- package/dist/test/suites/build/verb-logs.test.js +43 -0
- package/dist/test/suites/build/wave5-pins.test.js +35 -0
- package/dist/test/suites/main/analytics.test.js +364 -0
- package/dist/test/suites/main/app-state.test.js +197 -0
- package/dist/test/suites/main/auth-flow.test.js +196 -0
- package/dist/test/suites/main/auth-persistence.test.js +167 -0
- package/dist/test/suites/main/auto-updater.test.js +1138 -0
- package/dist/test/suites/main/boot-sequence.test.js +77 -0
- package/dist/test/suites/main/client-bridge.integration.test.js +134 -0
- package/dist/test/suites/main/client-bridge.test.js +249 -0
- package/dist/test/suites/main/context-menu.test.js +365 -0
- package/dist/test/suites/main/context.test.js +155 -0
- package/dist/test/suites/main/deep-link.test.js +288 -0
- package/dist/test/suites/main/epipe-handler.test.js +40 -0
- package/dist/test/suites/main/fontawesome.test.js +147 -0
- package/dist/test/suites/main/harness-cdp.test.js +49 -0
- package/dist/test/suites/main/ipc.test.js +165 -0
- package/dist/test/suites/main/menu.test.js +419 -0
- package/dist/test/suites/main/protocol.test.js +77 -0
- package/dist/test/suites/main/remote-config.test.js +189 -0
- package/dist/test/suites/main/remote-scripts.test.js +276 -0
- package/dist/test/suites/main/restart-manager.test.js +328 -0
- package/dist/test/suites/main/startup-paths-and-ua.test.js +99 -0
- package/dist/test/suites/main/startup.test.js +129 -0
- package/dist/test/suites/main/stealth-window.test.js +74 -0
- package/dist/test/suites/main/storage.test.js +89 -0
- package/dist/test/suites/main/theme.test.js +137 -0
- package/dist/test/suites/main/tray.test.js +322 -0
- package/dist/test/suites/main/truncate-on-boot.test.js +22 -0
- package/dist/test/suites/main/url-helpers.test.js +429 -0
- package/dist/test/suites/main/usage.test.js +127 -0
- package/dist/test/suites/main/window-bounds.test.js +169 -0
- package/dist/test/suites/main/window-manager.test.js +233 -0
- package/dist/test/suites/renderer/analytics-bridge.test.js +128 -0
- package/dist/test/suites/renderer/cross-context-helpers.test.js +131 -0
- package/dist/test/suites/renderer/fontawesome.test.js +190 -0
- package/dist/test/suites/renderer/round-trip.test.js +107 -0
- package/dist/test/suites/renderer/theme.test.js +118 -0
- package/dist/test/suites/renderer/tooltips.test.js +166 -0
- package/dist/test/suites/renderer/verts.test.js +100 -0
- package/dist/test/suites/renderer/window-em-surface.test.js +107 -0
- package/dist/test/utils/dist-snapshot.js +36 -0
- package/dist/test/utils/extended-mode-warning.js +13 -0
- package/dist/utils/app-root.js +28 -0
- package/dist/utils/attach-log-file.js +4 -0
- package/dist/utils/build-pipeline.js +58 -0
- package/dist/utils/deliver-certs.js +69 -0
- package/dist/utils/derive-signing-env.js +56 -0
- package/dist/utils/dist-root.js +21 -0
- package/dist/utils/electron-node-version.js +48 -0
- package/dist/utils/electron-targets.js +72 -0
- package/dist/utils/format-fetch-error.js +38 -0
- package/dist/utils/github.js +73 -0
- package/dist/utils/load-consumer-file.js +26 -0
- package/dist/utils/merge-line-files.js +5 -0
- package/dist/utils/mode-helpers.js +147 -0
- package/dist/utils/resolve-signing-cert.js +175 -0
- package/dist/utils/run-consumer-hook.js +38 -0
- package/dist/utils/runner-env.js +687 -0
- package/dist/utils/safe-install.js +4 -0
- package/dist/utils/sanitize-signing-env.js +45 -0
- package/dist/utils/sanitize-url.js +28 -0
- package/dist/utils/secure-remote-url.js +25 -0
- package/dist/utils/stealth-window.js +37 -0
- package/dist/utils/test-stealth.js +29 -0
- package/dist/utils/url-helpers.js +169 -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/analytics/adapters/ga4.js +26 -0
- package/dist/vendor/analytics/adapters/meta.js +26 -0
- package/dist/vendor/analytics/adapters/resolve.js +130 -0
- package/dist/vendor/analytics/adapters/tiktok.js +27 -0
- package/dist/vendor/analytics/catalog.js +908 -0
- package/dist/vendor/analytics/consent.js +49 -0
- package/dist/vendor/analytics/core.js +141 -0
- package/dist/vendor/analytics/identity.js +136 -0
- package/dist/vendor/analytics/index.js +170 -0
- package/dist/vendor/analytics/logger.js +40 -0
- package/dist/vendor/analytics/transports/browser.js +110 -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/certs.js +199 -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/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/prompt.js +187 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/scaffold-guard.js +96 -0
- package/dist/vendor/devkit/stop-signals.js +28 -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/update.js +569 -0
- package/dist/vendor/monitoring/core.js +180 -0
- package/dist/vendor/monitoring/env.js +49 -0
- package/dist/vendor/monitoring/index.js +28 -0
- package/dist/vendor/monitoring/logger.js +39 -0
- package/dist/vendor/monitoring/main.js +99 -0
- package/dist/vendor/monitoring/preload.js +45 -0
- package/dist/vendor/monitoring/renderer.js +87 -0
- package/docs/analytics.md +140 -0
- package/docs/app-state.md +92 -0
- package/docs/audit.md +69 -0
- package/docs/auto-updater.md +243 -0
- package/docs/boot-sequence.md +39 -0
- package/docs/build-system.md +161 -0
- package/docs/cdp-debugging.md +169 -0
- package/docs/client-bridge.md +267 -0
- package/docs/common-mistakes.md +21 -0
- package/docs/config-schema.md +120 -0
- package/docs/context-menu.md +112 -0
- package/docs/context.md +81 -0
- package/docs/css.md +84 -0
- package/docs/deep-link.md +178 -0
- package/docs/environment-detection.md +104 -0
- package/docs/fontawesome.md +107 -0
- package/docs/hooks.md +87 -0
- package/docs/icons.md +79 -0
- package/docs/index.md +279 -0
- package/docs/installer-options.md +162 -0
- package/docs/ipc.md +61 -0
- package/docs/lib-modules.md +53 -0
- package/docs/logging.md +229 -0
- package/docs/menu.md +160 -0
- package/docs/releasing.md +229 -0
- package/docs/remote-config.md +118 -0
- package/docs/remote-scripts.md +144 -0
- package/docs/restart-manager.md +144 -0
- package/docs/runner.md +253 -0
- package/docs/sentry.md +97 -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/signing.md +267 -0
- package/docs/startup.md +142 -0
- package/docs/storage.md +59 -0
- package/docs/templating.md +101 -0
- package/docs/test-boot-layer.md +157 -0
- package/docs/test-framework.md +357 -0
- package/docs/themes.md +135 -0
- package/docs/tooltips.md +99 -0
- package/docs/tray.md +164 -0
- package/docs/usage.md +58 -0
- package/docs/verts.md +62 -0
- package/docs/windows.md +149 -0
- package/package.json +184 -0
- package/scripts/sync-nvmrc.js +100 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// `npx omega launch [app-path] [--args ...]` — open a packaged Electron app with a clean
|
|
2
|
+
// environment (specifically: ELECTRON_RUN_AS_NODE stripped from inherited env).
|
|
3
|
+
//
|
|
4
|
+
// Why this exists:
|
|
5
|
+
// When @omega.js/desktop is running inside a host process that has ELECTRON_RUN_AS_NODE=1 set
|
|
6
|
+
// (e.g., VS Code's Claude Code extension, which lives in a `node.mojom.NodeService`
|
|
7
|
+
// utility process), every shell @omega.js/desktop spawns inherits that variable. Launching a
|
|
8
|
+
// packaged Electron app from such a shell — via `open .../MyApp.app` or by running
|
|
9
|
+
// the binary directly — propagates the variable to the app, which Electron then
|
|
10
|
+
// honors by running as plain Node: no `app` API, no BrowserWindow, no window. The
|
|
11
|
+
// app exits cleanly with code 0 and no error. Total invisible silent failure.
|
|
12
|
+
//
|
|
13
|
+
// `bin/omega-desktop` and `src/gulp/main.js` already strip ELECTRON_RUN_AS_NODE
|
|
14
|
+
// at the boundary so anything launched THROUGH mgr or gulp is fine. But the manual
|
|
15
|
+
// smoke-test flow (`open -n release/mac-arm64/MyApp.app`) bypasses both. This
|
|
16
|
+
// command is the manual-launch equivalent of those boundary strips.
|
|
17
|
+
//
|
|
18
|
+
// Usage:
|
|
19
|
+
// npx omega launch # auto-find a .app/.exe under release/<host-platform>-<host-arch>/
|
|
20
|
+
// npx omega launch ./release/mac-arm64/MyApp.app # explicit path
|
|
21
|
+
// npx omega launch /Applications/MyApp.app # an installed .app
|
|
22
|
+
//
|
|
23
|
+
// Forwarding argv to the app (for hidden-mode tests, custom flags, etc.):
|
|
24
|
+
// npx omega launch --args="--omega-launched-at-login" # single flag (quoted to keep yargs from eating it)
|
|
25
|
+
// npx omega launch --args="--foo=bar --baz" # multiple, space-separated inside the quotes
|
|
26
|
+
//
|
|
27
|
+
// Aliases: `npx omega open`, `npx omega --launch`.
|
|
28
|
+
|
|
29
|
+
const path = require('path');
|
|
30
|
+
const fs = require('fs');
|
|
31
|
+
const jetpack = require('fs-jetpack');
|
|
32
|
+
const { spawn } = require('child_process');
|
|
33
|
+
|
|
34
|
+
const Manager = new (require('../build.js'));
|
|
35
|
+
const logger = Manager.logger('launch');
|
|
36
|
+
|
|
37
|
+
module.exports = async function (options) {
|
|
38
|
+
options = options || {};
|
|
39
|
+
options._ = options._ || [];
|
|
40
|
+
|
|
41
|
+
// Positional app path (after the `launch` subcommand). e.g. `mgr launch ./foo.app`
|
|
42
|
+
// → options._ = ['launch', './foo.app']. Resolution order:
|
|
43
|
+
// 1. Explicit positional argument
|
|
44
|
+
// 2. Auto-discover under release/<platform>-<arch>/ (output of `mgr package:quick`)
|
|
45
|
+
// 3. Error
|
|
46
|
+
let appPath = options._[1] ? path.resolve(process.cwd(), options._[1]) : null;
|
|
47
|
+
if (!appPath) {
|
|
48
|
+
appPath = autoDiscoverApp();
|
|
49
|
+
if (!appPath) {
|
|
50
|
+
throw new Error(`No app path supplied and could not auto-discover a packaged app. Tried release/<platform>-<arch>/. Pass an explicit path: \`npx omega launch ./release/...\``);
|
|
51
|
+
}
|
|
52
|
+
logger.log(`auto-discovered: ${path.relative(process.cwd(), appPath)}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (!jetpack.exists(appPath)) {
|
|
56
|
+
throw new Error(`App not found: ${appPath}`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Strip ELECTRON_RUN_AS_NODE from the env we hand to the child. (The CLI entry already
|
|
60
|
+
// strips it from this process — we strip again at spawn time as defense-in-depth in case
|
|
61
|
+
// some intermediate code re-set it.)
|
|
62
|
+
const childEnv = { ...process.env };
|
|
63
|
+
delete childEnv.ELECTRON_RUN_AS_NODE;
|
|
64
|
+
|
|
65
|
+
// Forward extra argv to the app via `--args`. yargs splits the rest of argv into
|
|
66
|
+
// options._ when no flag matches; everything after the app path goes through.
|
|
67
|
+
const extraArgs = options._.slice(2);
|
|
68
|
+
// Also accept --args as an explicit array/string.
|
|
69
|
+
if (typeof options.args === 'string') extraArgs.push(...options.args.split(/\s+/).filter(Boolean));
|
|
70
|
+
else if (Array.isArray(options.args)) extraArgs.push(...options.args);
|
|
71
|
+
|
|
72
|
+
const platform = process.platform;
|
|
73
|
+
let cmd;
|
|
74
|
+
let args;
|
|
75
|
+
let logHint;
|
|
76
|
+
|
|
77
|
+
if (platform === 'darwin' && appPath.endsWith('.app')) {
|
|
78
|
+
// macOS .app — use `open -n` (new instance, LaunchServices-aware so dock-click
|
|
79
|
+
// routes to this instance for activate events). Pass extra argv via --args.
|
|
80
|
+
cmd = 'open';
|
|
81
|
+
args = ['-n', appPath, ...(extraArgs.length ? ['--args', ...extraArgs] : [])];
|
|
82
|
+
logHint = `open -n ${shellEscape(appPath)}${extraArgs.length ? ' --args ' + extraArgs.map(shellEscape).join(' ') : ''}`;
|
|
83
|
+
} else {
|
|
84
|
+
// Direct binary launch — Windows .exe, Linux binary, or running the .app's MacOS
|
|
85
|
+
// binary directly (rare, used to bypass LaunchServices for diagnosis).
|
|
86
|
+
cmd = appPath;
|
|
87
|
+
if (platform === 'darwin' && appPath.endsWith('.app')) {
|
|
88
|
+
cmd = path.join(appPath, 'Contents', 'MacOS', path.basename(appPath, '.app'));
|
|
89
|
+
}
|
|
90
|
+
args = extraArgs;
|
|
91
|
+
logHint = `${shellEscape(cmd)}${args.length ? ' ' + args.map(shellEscape).join(' ') : ''}`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
logger.log(`launching with clean env (ELECTRON_RUN_AS_NODE stripped)...`);
|
|
95
|
+
logger.log(` ${logHint}`);
|
|
96
|
+
|
|
97
|
+
// Detached so the launched app outlives the mgr process. Inherit stdio so any
|
|
98
|
+
// immediate-exit error (e.g. a crash in main.bundle.js) shows up in the user's
|
|
99
|
+
// terminal — defeats the whole "silent exit" symptom we're trying to make easy
|
|
100
|
+
// to debug.
|
|
101
|
+
const child = spawn(cmd, args, {
|
|
102
|
+
env: childEnv,
|
|
103
|
+
detached: true,
|
|
104
|
+
stdio: 'inherit',
|
|
105
|
+
});
|
|
106
|
+
child.unref();
|
|
107
|
+
|
|
108
|
+
// Give the child ~500ms to print any immediate failure before we return.
|
|
109
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
110
|
+
|
|
111
|
+
logger.log('launched.');
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// Auto-discover a packaged app under release/<platform>-<arch>/ — matches the output
|
|
115
|
+
// directory of `mgr package:quick` for the host platform/arch.
|
|
116
|
+
function autoDiscoverApp() {
|
|
117
|
+
const projectRoot = process.cwd();
|
|
118
|
+
const platform = process.platform === 'darwin' ? 'mac' : process.platform === 'win32' ? 'win' : 'linux';
|
|
119
|
+
const arch = process.arch;
|
|
120
|
+
const releaseDir = path.join(projectRoot, 'release', `${platform}-${arch}`);
|
|
121
|
+
|
|
122
|
+
if (!jetpack.exists(releaseDir)) return null;
|
|
123
|
+
|
|
124
|
+
// mac: look for *.app
|
|
125
|
+
if (platform === 'mac') {
|
|
126
|
+
const apps = jetpack.find(releaseDir, { matching: '*.app', recursive: false, files: false, directories: true });
|
|
127
|
+
if (apps.length > 0) return apps[0];
|
|
128
|
+
}
|
|
129
|
+
// win: look for *.exe at the root (electron-builder --dir output is `win-unpacked/<App>.exe`)
|
|
130
|
+
if (platform === 'win') {
|
|
131
|
+
const exes = jetpack.find(releaseDir, { matching: '*.exe', recursive: false, files: true });
|
|
132
|
+
if (exes.length > 0) return exes[0];
|
|
133
|
+
}
|
|
134
|
+
// linux: look for the binary (no extension) inside linux-unpacked/
|
|
135
|
+
if (platform === 'linux') {
|
|
136
|
+
const dirs = jetpack.list(releaseDir) || [];
|
|
137
|
+
for (const d of dirs) {
|
|
138
|
+
const full = path.join(releaseDir, d);
|
|
139
|
+
if (jetpack.exists(full) === 'dir') return full;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Minimal shell-escape for log readability. Not used for actual exec (spawn args bypass shell).
|
|
147
|
+
function shellEscape(s) {
|
|
148
|
+
if (!/[\s'"\\$]/.test(s)) return s;
|
|
149
|
+
return `"${s.replace(/(["\\$])/g, '\\$1')}"`;
|
|
150
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @omega.js/desktop's half of the shared dependency checks
|
|
3
|
+
* ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)) — the logic is
|
|
4
|
+
* `@omega.js/devkit/target-dependencies` (one copy for every framework); this
|
|
5
|
+
* file is the DATA: which peer deps install as devDependencies, and the
|
|
6
|
+
* framework's own `safeInstall`.
|
|
7
|
+
*
|
|
8
|
+
* ensurePeerDependencies the target cannot build without them — LOCAL half,
|
|
9
|
+
* ensure-target.js runs it on every verb
|
|
10
|
+
* updateManager asks the npm registry whether the framework itself
|
|
11
|
+
* is stale — NETWORK half, deploy-precheck.js runs it
|
|
12
|
+
*/
|
|
13
|
+
const shared = require('../../vendor/devkit/target-dependencies.js');
|
|
14
|
+
const { safeInstall } = require('../../utils/safe-install');
|
|
15
|
+
|
|
16
|
+
// Peer-dep install location overrides
|
|
17
|
+
const DEPENDENCY_MAP = {
|
|
18
|
+
gulp: 'dev',
|
|
19
|
+
electron: 'dev',
|
|
20
|
+
'electron-builder': 'dev',
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const readProject = shared.readProject;
|
|
24
|
+
|
|
25
|
+
/** See `@omega.js/devkit/target-dependencies` — bound to desktop's map + installer. */
|
|
26
|
+
function ensurePeerDependencies(input) {
|
|
27
|
+
return shared.ensurePeerDependencies({ ...input, dependencyMap: DEPENDENCY_MAP, safeInstall });
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** See `@omega.js/devkit/target-dependencies` — bound to desktop's installer. */
|
|
31
|
+
function updateManager(input) {
|
|
32
|
+
return shared.updateManager({ ...input, safeInstall });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = { ensurePeerDependencies, updateManager, readProject, DEPENDENCY_MAP };
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deploy-precheck — the NETWORK half `omega setup` used to own
|
|
3
|
+
* ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)).
|
|
4
|
+
*
|
|
5
|
+
* Setup's local half now rides every verb (ensure-target.js); what needs the
|
|
6
|
+
* network rides the ONE verb that needs the remote side right —
|
|
7
|
+
* `omega deploy` — as a precheck before the dispatch:
|
|
8
|
+
*
|
|
9
|
+
* framework freshness the npm registry's latest vs the installed version
|
|
10
|
+
* validate-certs the signing prereqs, soft (a warning, never fatal)
|
|
11
|
+
* provision-repos the public releases repo the config names (idempotent)
|
|
12
|
+
* push-secrets the composed target env → GitHub Actions repo secrets
|
|
13
|
+
*
|
|
14
|
+
* Every step is soft: a precheck reports, the deploy proceeds. `--no-secrets`
|
|
15
|
+
* skips the whole precheck — the same opt-out name on web, desktop and
|
|
16
|
+
* extension (parity; desktop's old `--quick` is gone).
|
|
17
|
+
*
|
|
18
|
+
* The RUNNER is `@omega.js/devkit/deploy-precheck` (one copy for every
|
|
19
|
+
* framework); this file is desktop's STEPS.
|
|
20
|
+
*/
|
|
21
|
+
const Manager = new (require('../../build.js'));
|
|
22
|
+
const { runDeployPrecheck } = require('../../vendor/devkit/deploy-precheck.js');
|
|
23
|
+
const { releasesRepo } = require('../../vendor/config/index.js');
|
|
24
|
+
const { updateManager } = require('./dependencies.js');
|
|
25
|
+
const { publishEnvSecrets } = require('../push-secrets.js');
|
|
26
|
+
|
|
27
|
+
const package = Manager.getPackage('main');
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Auto-provision the brand's ONE public releases repo, addressed by
|
|
31
|
+
* @omega.js/config's `releasesRepo` (`<brand.id>-releases` under the brand repo
|
|
32
|
+
* owner unless the config names another). Idempotent: only creates if missing.
|
|
33
|
+
* Config-only, never the git remote: a brand nested in another repo would
|
|
34
|
+
* provision under the enclosing repo's owner (#799).
|
|
35
|
+
*
|
|
36
|
+
* @param {object} input
|
|
37
|
+
* @param {Function} input.log - Progress line sink.
|
|
38
|
+
* @param {Function} input.warn - Warning sink.
|
|
39
|
+
* @param {object} [input.octokit] - Injectable client (tests); defaults to the GH_TOKEN one.
|
|
40
|
+
* @param {object} [input.config] - Injectable resolved config (tests).
|
|
41
|
+
*/
|
|
42
|
+
async function provisionReleaseRepos({ log, warn, octokit, config }) {
|
|
43
|
+
const { getOctokit, ensureRepo } = require('../../utils/github.js');
|
|
44
|
+
const client = octokit || getOctokit();
|
|
45
|
+
if (!client) return;
|
|
46
|
+
|
|
47
|
+
const resolved = config || Manager.getConfig() || {};
|
|
48
|
+
if (resolved.releases?.enabled === false) return;
|
|
49
|
+
|
|
50
|
+
const { owner, name, repo } = releasesRepo(resolved);
|
|
51
|
+
if (!repo) {
|
|
52
|
+
warn('provision-repos: could not address the releases repo. Set repo.providers.github.org (or targets.desktop.releases.owner) and brand.id in config/omega.json5.');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const description = `Public release artifacts + auto-update feed for ${owner}'s @omega.js/desktop apps. Managed by @omega.js/desktop.`;
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
const result = await ensureRepo(client, owner, name, { description, private: false });
|
|
60
|
+
log(`provision-repos: ✓ ${result.created ? 'created ' : ''}${repo}${result.created ? '' : ' already exists'} — releases (auto-update feed + the site's download links)`);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
warn(`provision-repos: ✗ ${repo} (releases) — ${e.message}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The default steps, in order. Named so a test can hand its own recorder in
|
|
68
|
+
* and read back exactly which ones ran.
|
|
69
|
+
*/
|
|
70
|
+
const STEPS = [
|
|
71
|
+
{
|
|
72
|
+
name: 'framework-freshness',
|
|
73
|
+
run: ({ projectDir, log, warn }) => updateManager({ projectDir, package, log, error: warn }),
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'validate-certs',
|
|
77
|
+
run: async ({ log }) => {
|
|
78
|
+
const validateCerts = require('../validate-certs.js');
|
|
79
|
+
const result = await validateCerts({ strict: false });
|
|
80
|
+
if (result?.ok === false) {
|
|
81
|
+
log('(Run `npx omega validate-certs` after wiring up your signing assets to re-check.)');
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'provision-repos',
|
|
87
|
+
run: async ({ projectDir, log, warn }) => {
|
|
88
|
+
require('../../vendor/config/index.js').loadEnv(projectDir);
|
|
89
|
+
if (!process.env.GH_TOKEN) {
|
|
90
|
+
return log('(Skipping repo provisioning: GH_TOKEN not set.)');
|
|
91
|
+
}
|
|
92
|
+
await provisionReleaseRepos({ log, warn });
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'push-secrets',
|
|
97
|
+
// No .env check and no PAT: the keys come from the composed target env (the
|
|
98
|
+
// brand root's .env, #678) and the transport is `gh`'s own auth session
|
|
99
|
+
// ([#682](https://github.com/Omega-JS-Stack/omega/issues/682)) — the same
|
|
100
|
+
// one-line call web and the extension make.
|
|
101
|
+
run: ({ projectDir, log, warn }) => publishEnvSecrets({ targetDir: projectDir, logger: { log, warn, error: warn } }),
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @param {object} input
|
|
107
|
+
* @param {string} input.projectDir - The target root.
|
|
108
|
+
* @param {object} input.options - The parsed CLI options (`secrets: false` = opted out).
|
|
109
|
+
* @param {object} input.logger - `{ log, warn, error }`.
|
|
110
|
+
* @param {Array} [input.steps] - Injectable step list (tests).
|
|
111
|
+
* @returns {Promise<{ skipped: string }|{ ran: string[] }>} The steps that ran, or the opt-out marker.
|
|
112
|
+
*/
|
|
113
|
+
function deployPrecheck({ projectDir, options, logger, steps }) {
|
|
114
|
+
return runDeployPrecheck({ projectDir, options, logger, steps: steps || STEPS });
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
module.exports = { deployPrecheck, STEPS, provisionReleaseRepos };
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ensure-target — the LOCAL, idempotent scaffold every verb runs
|
|
3
|
+
* ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)).
|
|
4
|
+
*
|
|
5
|
+
* `omega setup` used to own this half and nothing ran it for you, so a target
|
|
6
|
+
* drifted until someone remembered the command per target. It is retired: the
|
|
7
|
+
* "write it if missing" steps live here and build/package/publish/test/deploy
|
|
8
|
+
* all call it first, so every verb heals the tree on the way past.
|
|
9
|
+
*
|
|
10
|
+
* What it guarantees, in this order:
|
|
11
|
+
*
|
|
12
|
+
* package.json the omega verb scripts, `private`, and the electron main
|
|
13
|
+
* entry — pure manifest edits, so they land before anything
|
|
14
|
+
* that can throw
|
|
15
|
+
* .nvmrc SEEDED from the framework's pinned Electron runtime when
|
|
16
|
+
* the file is missing; the postinstall sync-nvmrc script is
|
|
17
|
+
* the one live reader of the Electron releases feed and
|
|
18
|
+
* keeps it current from there (one writer per fact)
|
|
19
|
+
* node version a WARNING when the running major is not the pin
|
|
20
|
+
* peer dependencies installed when missing or behind (a satisfied target
|
|
21
|
+
* installs nothing)
|
|
22
|
+
* defaults tree src/defaults/** — copy-if-missing, marker merges for
|
|
23
|
+
* .env/.gitignore/AGENTS.md, workflows re-rendered
|
|
24
|
+
* locality a WARNING when the framework is a `file:` link
|
|
25
|
+
*
|
|
26
|
+
* Everything here is copy-if-missing, marker-merge or write-if-changed. What
|
|
27
|
+
* needs the network is NOT here — cert validation, repo provisioning, secret
|
|
28
|
+
* publication and the framework freshness check are `omega deploy` prechecks
|
|
29
|
+
* (deploy-precheck.js).
|
|
30
|
+
*/
|
|
31
|
+
const path = require('path');
|
|
32
|
+
const jetpack = require('fs-jetpack');
|
|
33
|
+
const version = require('wonderful-version');
|
|
34
|
+
const Manager = new (require('../../build.js'));
|
|
35
|
+
const { ensurePeerDependencies, readProject } = require('./dependencies.js');
|
|
36
|
+
const { renderSecretsBlock } = require('../../vendor/config/env-delivery.js');
|
|
37
|
+
const { composeTargetWorkflows } = require('../../vendor/devkit/ci-workflows.js');
|
|
38
|
+
const { assertScaffoldable } = require('../../vendor/devkit/scaffold-guard.js');
|
|
39
|
+
|
|
40
|
+
const logger = Manager.logger('ensure-target');
|
|
41
|
+
const package = Manager.getPackage('main');
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Sync the consumer manifest: the omega verb scripts, the npm-private latch,
|
|
45
|
+
* and the electron main entry (the gulp `bundle` task's output bundle).
|
|
46
|
+
* Identical content is not a write (#590).
|
|
47
|
+
*/
|
|
48
|
+
function setupScripts(projectDir, result) {
|
|
49
|
+
projectDir = projectDir || Manager.getRootPath('project');
|
|
50
|
+
result = result || { changed: [] };
|
|
51
|
+
|
|
52
|
+
const project = readProject(projectDir);
|
|
53
|
+
|
|
54
|
+
project.scripts = project.scripts || {};
|
|
55
|
+
|
|
56
|
+
Object.keys(package.projectScripts || {}).forEach((key) => {
|
|
57
|
+
project.scripts[key] = package.projectScripts[key];
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Electron consumer projects should not be published to npm
|
|
61
|
+
project.private = true;
|
|
62
|
+
|
|
63
|
+
// Point electron at the built main bundle.
|
|
64
|
+
// The gulp `bundle` task emits dist/main.bundle.js; the consumer's src/main.js is the *source* entry.
|
|
65
|
+
project.main = 'dist/main.bundle.js';
|
|
66
|
+
|
|
67
|
+
// Save the project — npm's own shape, trailing newline included. `jetpack.write`
|
|
68
|
+
// emits none, and this used to write unconditionally, so every build re-stripped
|
|
69
|
+
// the newline a consumer's editor or lint hook put back.
|
|
70
|
+
const projectPath = path.join(projectDir, 'package.json');
|
|
71
|
+
const contents = `${JSON.stringify(project, null, 2)}\n`;
|
|
72
|
+
|
|
73
|
+
if (jetpack.read(projectPath) === contents) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
jetpack.write(projectPath, contents);
|
|
78
|
+
result.changed.push('package.json (scripts + main + private)');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Seed .nvmrc from the framework's pinned Electron runtime when it is missing.
|
|
83
|
+
* An existing pin is left alone: `scripts/sync-nvmrc.js` (the consumer's
|
|
84
|
+
* postinstall) is the ONE reader of the Electron releases feed and owns keeping
|
|
85
|
+
* it current, so this offline seed can never fight it.
|
|
86
|
+
*/
|
|
87
|
+
function ensureNvmrc(projectDir, requiredMajor, result) {
|
|
88
|
+
const nvmrcPath = path.join(projectDir, '.nvmrc');
|
|
89
|
+
|
|
90
|
+
if (jetpack.exists(nvmrcPath)) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
jetpack.write(nvmrcPath, `v${requiredMajor}/*\n`);
|
|
95
|
+
result.written.push('.nvmrc');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Warn when the running Node major is not the target's pin. Never fatal (#15):
|
|
100
|
+
* the pin is written, the remaining steps complete, and manage runs spawn
|
|
101
|
+
* verbs under the app's own Node anyway.
|
|
102
|
+
*/
|
|
103
|
+
function checkNodeVersion(projectDir, requiredMajor, warn) {
|
|
104
|
+
const installedMajor = version.clean(process.version).split('.')[0];
|
|
105
|
+
|
|
106
|
+
if (String(installedMajor) === String(requiredMajor)) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
warn(
|
|
111
|
+
`Node version mismatch: running v${installedMajor} but Electron requires v${requiredMajor} (matches Electron's bundled Node). `
|
|
112
|
+
+ `Standalone shells: run \`nvm use\` (the .nvmrc is pinned to v${requiredMajor}/*) before the next build.`,
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Apply the framework's defaults tree (src/defaults/**) to the target root via
|
|
118
|
+
* the shared devkit engine.
|
|
119
|
+
*
|
|
120
|
+
* @param {string} projectDir - The target root.
|
|
121
|
+
* @param {object} log - `{ log, warn, error }` handed to the engine.
|
|
122
|
+
*/
|
|
123
|
+
async function copyDefaults(projectDir, engineLogger) {
|
|
124
|
+
projectDir = projectDir || Manager.getRootPath('project');
|
|
125
|
+
engineLogger = engineLogger || logger;
|
|
126
|
+
|
|
127
|
+
const defaultsDir = path.resolve(__dirname, '..', '..', 'defaults');
|
|
128
|
+
|
|
129
|
+
if (!jetpack.exists(defaultsDir)) {
|
|
130
|
+
engineLogger.warn(`Defaults directory not found at ${defaultsDir}`);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Template substitution context — `{{ versions.node }}` etc. resolved at scaffold time.
|
|
135
|
+
// Source of truth is @omega.js/desktop's pinned `omega.nodeRuntime` (the Electron-bundled
|
|
136
|
+
// Node major; consumers' .nvmrc additionally self-syncs from the live Electron feed via
|
|
137
|
+
// scripts/sync-nvmrc.js). `engines.node` is deliberately NOT used here — it's the honest
|
|
138
|
+
// dev floor (`>=22`), not a renderable version.
|
|
139
|
+
// `githubSecrets` is the build workflow's env block, GENERATED from the env
|
|
140
|
+
// schema ([#627](https://github.com/Omega-JS-Stack/omega/issues/627)): one
|
|
141
|
+
// `KEY: ${{ secrets.KEY }}` line per key the schema delivers to desktop, at
|
|
142
|
+
// the token's two-space indent. The yml rule below re-renders on every verb,
|
|
143
|
+
// so the block tracks the schema like the node version tracks the pin.
|
|
144
|
+
const templateContext = {
|
|
145
|
+
versions: { ...(package.engines || {}), node: package.omega.nodeRuntime },
|
|
146
|
+
githubSecrets: renderSecretsBlock('desktop', { indent: ' ' }),
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// Scaffolding runs through the shared devkit engine (vendored at prepare time).
|
|
150
|
+
// Engine built-ins cover @omega.js/desktop's structural rules: `_.` renames (`_.gitignore` → `.gitignore`),
|
|
151
|
+
// archive-dir skips (`_mas/` reference plists ship in the package, never to
|
|
152
|
+
// consumers — `_`-prefixed FILENAMES like `test/_init.js` still copy), and
|
|
153
|
+
// write-only-if-changed.
|
|
154
|
+
const { applyDefaults, renderTemplate } = require('../../vendor/devkit/defaults-engine.js');
|
|
155
|
+
|
|
156
|
+
// Layer-aware config (cp121c/cp122d): brand targets carry NO local-layer
|
|
157
|
+
// omega.json5 — the brand file's `targets.*` is the per-target home, and
|
|
158
|
+
// the local file is the STANDALONE escape hatch only. Inside a brand
|
|
159
|
+
// monorepo the template's config must not scaffold at all (the old
|
|
160
|
+
// targets-only seed kept resurrecting deleted local files on every run).
|
|
161
|
+
const { resolveSeedMode } = require('../../vendor/config/index.js');
|
|
162
|
+
const seed = resolveSeedMode(projectDir);
|
|
163
|
+
const isBrandTarget = !seed.standalone;
|
|
164
|
+
|
|
165
|
+
const applied = applyDefaults({
|
|
166
|
+
defaultsDir,
|
|
167
|
+
outputDir: projectDir,
|
|
168
|
+
fileMap: {
|
|
169
|
+
// Consumers own their files — never overwrite what exists.
|
|
170
|
+
'**/*': { overwrite: false },
|
|
171
|
+
...(isBrandTarget ? { 'config/omega.json5': { skip: true } } : {}),
|
|
172
|
+
// Marker-section merges: framework owns the Default section, consumer owns
|
|
173
|
+
// everything below the Custom marker. Every verb keeps the framework
|
|
174
|
+
// section live-synced without clobbering the consumer's values.
|
|
175
|
+
// The target-root .env is NOT scaffolded ([#678](https://github.com/Omega-JS-Stack/omega/issues/678)):
|
|
176
|
+
// the brand root's .env is the one file humans and the manager edit, a
|
|
177
|
+
// target .env is an optional per-key override a HUMAN writes, and no
|
|
178
|
+
// machine writes a target .env — so the template is gone.
|
|
179
|
+
'_.gitignore': { mergeLines: true, template: templateContext },
|
|
180
|
+
// The agent-docs chain (#63): AGENTS.md carries the content (marker-merged
|
|
181
|
+
// like .gitignore), CLAUDE.md is the one-line `@AGENTS.md` pointer — copied
|
|
182
|
+
// when missing by the `**/*` rule above, never clobbered.
|
|
183
|
+
'AGENTS.md': { mergeLines: true, template: templateContext },
|
|
184
|
+
// Brand doc unification (Ian 2026-07-20): inside a brand monorepo the
|
|
185
|
+
// BRAND ROOT is the one doc home — per-target AGENTS.md/CLAUDE.md/CHANGELOG.md/docs/
|
|
186
|
+
// never scaffold, and existing framework-owned-only copies are swept
|
|
187
|
+
// (retire rules; consumer content is never destroyed). Standalone projects
|
|
188
|
+
// keep them. Last-match-wins: these override the rules above.
|
|
189
|
+
...(isBrandTarget ? {
|
|
190
|
+
'AGENTS.md': { retire: true, template: templateContext },
|
|
191
|
+
'CLAUDE.md': { retire: true, template: templateContext },
|
|
192
|
+
'CHANGELOG.md': { retire: true },
|
|
193
|
+
'docs/**/*': { retire: true },
|
|
194
|
+
} : {}),
|
|
195
|
+
// Workflow YAMLs are framework-owned: always re-rendered so they track changes in
|
|
196
|
+
// @omega.js/desktop's defaults (e.g. engines.node bumping when Electron updates). The
|
|
197
|
+
// renderer is tolerant — GitHub Actions' `${{ secrets.X }}` survives — and
|
|
198
|
+
// the engine skips the write when the rendered content is byte-identical.
|
|
199
|
+
'**/*.{yml,yaml}': { overwrite: true, template: templateContext },
|
|
200
|
+
// CI (#265): GitHub runs workflows from the REPO ROOT only, so a per-target
|
|
201
|
+
// .github/workflows/ in a brand monorepo can never fire — the #627 secrets
|
|
202
|
+
// block was rendering into a file Actions would never execute. It is
|
|
203
|
+
// composed into the brand root below instead, scoped to this target's
|
|
204
|
+
// path, exactly as web and the extension do. Last-match-wins over the yml
|
|
205
|
+
// rule above; a STANDALONE target (its own git root) keeps its own copy.
|
|
206
|
+
...(isBrandTarget ? { '.github/**/*': { skip: true } } : {}),
|
|
207
|
+
},
|
|
208
|
+
logger: engineLogger,
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
if (isBrandTarget) {
|
|
212
|
+
// The same templateContext the yml rule uses, so the composed copy carries
|
|
213
|
+
// the generated `githubSecrets` block — a composed workflow with the raw
|
|
214
|
+
// token in it would be the only file CI actually runs, and broken.
|
|
215
|
+
composeTargetWorkflows({
|
|
216
|
+
sourceDir: path.join(defaultsDir, '.github', 'workflows'),
|
|
217
|
+
targetDir: projectDir,
|
|
218
|
+
brandRoot: seed.brandRoot,
|
|
219
|
+
transform: (contents) => renderTemplate(contents, templateContext),
|
|
220
|
+
logger: engineLogger,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return applied;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** Warn when the framework is a `file:` link — that install never publishes. */
|
|
228
|
+
function checkLocality(projectDir, warn) {
|
|
229
|
+
const project = readProject(projectDir);
|
|
230
|
+
const installedVersion = project.devDependencies[package.name] || project.dependencies[package.name];
|
|
231
|
+
|
|
232
|
+
if (!installedVersion) {
|
|
233
|
+
throw new Error(`No installed version of ${package.name} found in dependencies or devDependencies.`);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (installedVersion.startsWith('file:')) {
|
|
237
|
+
warn(`⚠️ You are using the local version of ${package.name}. This WILL NOT WORK when published.`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Make the target whole — idempotent, offline, and quiet when there is
|
|
243
|
+
* nothing to do.
|
|
244
|
+
*
|
|
245
|
+
* @param {object} [options]
|
|
246
|
+
* @param {string} [options.projectDir] - The target root (default: cwd).
|
|
247
|
+
* @param {function} [options.log] - Line logger (silent by default).
|
|
248
|
+
* @param {function} [options.warn] - Warning logger (silent by default).
|
|
249
|
+
* @returns {Promise<{ written: string[], merged: string[], changed: string[] }>}
|
|
250
|
+
* Target-relative paths per outcome — empty on a no-op run.
|
|
251
|
+
*/
|
|
252
|
+
async function ensureTarget(options) {
|
|
253
|
+
options = options || {};
|
|
254
|
+
const projectDir = options.projectDir || Manager.getRootPath('project');
|
|
255
|
+
const log = options.log || (() => {});
|
|
256
|
+
const warn = options.warn || (() => {});
|
|
257
|
+
const result = { written: [], merged: [], changed: [] };
|
|
258
|
+
|
|
259
|
+
// The framework's own tree is not a consumer target. Running the framework's
|
|
260
|
+
// suite from packages/desktop puts the framework at the cwd, and a verb that
|
|
261
|
+
// scaffolds unconditionally would install its own peer deps into itself and
|
|
262
|
+
// scatter the consumer defaults through the package. Refuse, quietly: this is
|
|
263
|
+
// a normal state, not a broken one.
|
|
264
|
+
if (readProject(projectDir).name === package.name) {
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// A workspace ROOT is not a target either — and unlike the case above, landing
|
|
269
|
+
// there is an accident (a verb run from the wrong cwd), so it fails LOUD (#699).
|
|
270
|
+
assertScaffoldable(projectDir);
|
|
271
|
+
|
|
272
|
+
// The Electron-bundled Node major, offline: the framework's pinned runtime.
|
|
273
|
+
// `engines.node` is the honest dev FLOOR (`>=22`), never a version.
|
|
274
|
+
const requiredMajor = version.clean(package.omega.nodeRuntime).split('.')[0];
|
|
275
|
+
|
|
276
|
+
// Manifest edits FIRST — they don't depend on the Node version or the peer
|
|
277
|
+
// deps being right, and the consumer needs the postinstall script wired up
|
|
278
|
+
// regardless of what the steps below find.
|
|
279
|
+
setupScripts(projectDir, result);
|
|
280
|
+
ensureNvmrc(projectDir, requiredMajor, result);
|
|
281
|
+
checkNodeVersion(projectDir, requiredMajor, warn);
|
|
282
|
+
|
|
283
|
+
await ensurePeerDependencies({ projectDir, package, log });
|
|
284
|
+
|
|
285
|
+
const applied = await copyDefaults(projectDir, { log: () => {}, warn, error: warn });
|
|
286
|
+
if (applied) {
|
|
287
|
+
result.written.push(...applied.written);
|
|
288
|
+
result.merged.push(...applied.merged);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
checkLocality(projectDir, warn);
|
|
292
|
+
|
|
293
|
+
for (const [label, files] of [['Created', result.written], ['Merged', result.merged], ['Synced', result.changed]]) {
|
|
294
|
+
if (files.length > 0) log(`${label} ${files.join(', ')}`);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return result;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
module.exports = { ensureTarget, setupScripts, copyDefaults };
|