@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,82 @@
|
|
|
1
|
+
// Audit — fail-fast schema + filesystem checks for the consumer's config/omega.json5.
|
|
2
|
+
//
|
|
3
|
+
// Runs as part of `gulp build` between sass/bundle/html and build-config. Catches the
|
|
4
|
+
// "I forgot to set X" / "icon path is wrong" / "main entry was renamed" footguns at build time
|
|
5
|
+
// rather than letting them reach electron-builder (where the error messages are useless).
|
|
6
|
+
//
|
|
7
|
+
// Failure mode: collects every problem into a single thrown Error with a numbered list.
|
|
8
|
+
// One error per problem so the consumer can fix them all in one shot instead of fix-rebuild-fix.
|
|
9
|
+
//
|
|
10
|
+
// Categories of check:
|
|
11
|
+
// - REQUIRED config keys present (brand.id, brand.name).
|
|
12
|
+
// app.appId / app.productName are optional — derived from brand.id / brand.name if unset.
|
|
13
|
+
// - File existence for any path-shaped config value (brand.images.icon).
|
|
14
|
+
// - Format checks for fields with constrained shapes (brand.id as URL scheme, startup.mode, signing strategy).
|
|
15
|
+
// - Consumer entrypoints exist (src/main.js, src/preload.js) — these are what the `bundle` task hands to esbuild.
|
|
16
|
+
// - In publish mode, the releases repo RESOLVES (@omega.js/config's releasesRepo:
|
|
17
|
+
// `<brand.id>-releases` under the brand repo owner unless config names another)
|
|
18
|
+
// and electron-builder.yml exists.
|
|
19
|
+
|
|
20
|
+
const path = require('path');
|
|
21
|
+
const jetpack = require('fs-jetpack');
|
|
22
|
+
const Manager = new (require('../../build.js'));
|
|
23
|
+
const { validateConfig, releasesRepo } = require('../../vendor/config/index.js');
|
|
24
|
+
|
|
25
|
+
const logger = Manager.logger('audit');
|
|
26
|
+
|
|
27
|
+
module.exports = function audit(done) {
|
|
28
|
+
const cwd = process.cwd();
|
|
29
|
+
const config = Manager.getConfig();
|
|
30
|
+
const errors = [];
|
|
31
|
+
const warnings = [];
|
|
32
|
+
|
|
33
|
+
function fileMustExist(rel, label) {
|
|
34
|
+
if (!rel) return;
|
|
35
|
+
const abs = path.isAbsolute(rel) ? rel : path.join(cwd, rel);
|
|
36
|
+
if (!jetpack.exists(abs)) errors.push(`${label} not found at ${rel}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// 1. Schema-driven config validation. Single source of truth in @omega.js/config
|
|
40
|
+
// (shared schema + the desktop target refinements).
|
|
41
|
+
const { errors: schemaErrors } = validateConfig(config, { target: 'desktop' });
|
|
42
|
+
errors.push(...schemaErrors);
|
|
43
|
+
|
|
44
|
+
// 2. File existence for paths the build references (not in schema because these are
|
|
45
|
+
// tied to the build pipeline, not the config shape).
|
|
46
|
+
fileMustExist('src/main.js', 'src/main.js');
|
|
47
|
+
fileMustExist('src/preload.js', 'src/preload.js');
|
|
48
|
+
if (Manager.isPublishMode() || Manager.isBuildMode()) {
|
|
49
|
+
// Icon must exist when packaging — dev runs fine with the default Electron icon.
|
|
50
|
+
fileMustExist(config.brand.images?.icon, 'config.brand.images.icon');
|
|
51
|
+
}
|
|
52
|
+
// Publishing needs an ADDRESS for the releases repo, not a hand-written name:
|
|
53
|
+
// @omega.js/config's releasesRepo defaults it to `<brand.id>-releases` under the
|
|
54
|
+
// brand repo owner, so only a missing owner (or brand.id) leaves it unaddressable.
|
|
55
|
+
if (Manager.isPublishMode() && config.releases?.enabled !== false && !releasesRepo(config).repo) {
|
|
56
|
+
errors.push('the releases repo is unaddressable: set repo.providers.github.org (or targets.desktop.releases.owner) and brand.id. The repo name defaults to "<brand.id>-releases"');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 3. Soft warnings — not fatal but worth surfacing.
|
|
60
|
+
if (config.brand.id === 'myapp' || config.brand.name === 'MyApp') {
|
|
61
|
+
warnings.push('config still uses the scaffold defaults ("myapp" / "MyApp") — set brand.id and brand.name before publishing.');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// MAS distribution — currently STUBBED. Surface a warning if a consumer tries to
|
|
65
|
+
// turn it on so they know it's not yet wired up.
|
|
66
|
+
if (config.platforms?.mac?.mas?.enabled === true) {
|
|
67
|
+
warnings.push('platforms.mac.mas.enabled is true but Mac App Store distribution is not yet implemented in @omega.js/desktop (the config keys are reserved for a future release). The standard mac DMG/zip targets will still build normally — the MAS variant is silently skipped.');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Report.
|
|
71
|
+
for (const w of warnings) {
|
|
72
|
+
logger.warn(w);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (errors.length > 0) {
|
|
76
|
+
const numbered = errors.map((e, i) => ` ${i + 1}. ${e}`).join('\n');
|
|
77
|
+
return done(new Error(`audit failed — fix the following before continuing:\n${numbered}`));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
logger.log(`audit ok (${warnings.length} warning${warnings.length === 1 ? '' : 's'})`);
|
|
81
|
+
done();
|
|
82
|
+
};
|
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
// Generate dist/electron-builder.yml entirely from @omega.js/desktop defaults + the consumer's
|
|
2
|
+
// config/omega.json5. The consumer NEVER ships an electron-builder.yml.
|
|
3
|
+
//
|
|
4
|
+
// Why:
|
|
5
|
+
// - Single source of truth: consumer config (omega.json5) drives everything.
|
|
6
|
+
// - Stops consumers from drifting into electron-builder-config-fork-of-our-defaults hell.
|
|
7
|
+
// - Lets @omega.js/desktop evolve packaging defaults centrally (e.g. switch from NSIS to MSIX someday)
|
|
8
|
+
// without per-consumer migrations.
|
|
9
|
+
//
|
|
10
|
+
// Consumer overrides:
|
|
11
|
+
// `electronBuilder` block (under targets.desktop in omega.json5) gets shallow-merged
|
|
12
|
+
// onto our defaults for genuine special cases. Most apps will never set this.
|
|
13
|
+
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const jetpack = require('fs-jetpack');
|
|
16
|
+
const yaml = require('js-yaml');
|
|
17
|
+
const { deepMerge, desktopArtifactName, sanitizeProductName, releasesRepo } = require('../../vendor/config/index.js');
|
|
18
|
+
const Manager = new (require('../../build.js'));
|
|
19
|
+
|
|
20
|
+
const { writeMacEntitlements } = require('../../lib/sign-helpers/entitlements.js');
|
|
21
|
+
const { resolveAndCopy } = require('../../lib/sign-helpers/resolve-icons.js');
|
|
22
|
+
|
|
23
|
+
const logger = Manager.logger('build-config');
|
|
24
|
+
|
|
25
|
+
module.exports = function buildConfig(done) {
|
|
26
|
+
Promise.resolve().then(async () => {
|
|
27
|
+
const projectRoot = process.cwd();
|
|
28
|
+
const distRoot = require('../../utils/dist-root.js')(projectRoot);
|
|
29
|
+
const distPath = path.join(distRoot, 'electron-builder.yml');
|
|
30
|
+
|
|
31
|
+
const config = Manager.getConfig();
|
|
32
|
+
const startupMode = config.startup?.mode || 'normal';
|
|
33
|
+
|
|
34
|
+
// 1. Generate entitlements.mac.plist into dist/config/. Consumer overrides live at
|
|
35
|
+
// `platforms.mac.entitlements` (an object map of plist key → value, with `null` to
|
|
36
|
+
// remove an @omega.js/desktop default). Top-level `entitlements.mac` is no longer read.
|
|
37
|
+
const entitlementsPath = writeMacEntitlements(distRoot, config.platforms?.mac?.entitlements);
|
|
38
|
+
logger.log(`wrote ${entitlementsPath}`);
|
|
39
|
+
|
|
40
|
+
// 2. Resolve + copy icons (3-tier waterfall) into dist/config/icons/.
|
|
41
|
+
const emDefaultsRoot = path.join(__dirname, '..', '..', 'defaults', 'config');
|
|
42
|
+
const icons = await resolveAndCopy({ config, projectRoot, distRoot, emDefaultsRoot });
|
|
43
|
+
logger.log(`resolved icons: mac=${Object.keys(icons.macos).length}, win=${Object.keys(icons.windows).length}, linux=${Object.keys(icons.linux).length}`);
|
|
44
|
+
|
|
45
|
+
// Build the full config object from @omega.js/desktop defaults + consumer overrides.
|
|
46
|
+
let builderConfig = baseConfig(config, { entitlementsPath, icons, distRoot, projectRoot });
|
|
47
|
+
|
|
48
|
+
// Pin the exact electron version for electron-builder. It refuses semver
|
|
49
|
+
// ranges and resolves node_modules only from the project dir — in a brand
|
|
50
|
+
// monorepo electron hoists to the workspace root, so the lookup fails
|
|
51
|
+
// (the cp142 rehearsal catch). The framework resolves the INSTALLED
|
|
52
|
+
// electron from its own module context instead.
|
|
53
|
+
try {
|
|
54
|
+
builderConfig.electronVersion = Manager.require('electron/package.json').version;
|
|
55
|
+
logger.log(`electronVersion → ${builderConfig.electronVersion} (resolved from the installed electron)`);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
logger.log('electronVersion not injected (electron unresolved) — electron-builder falls back to its own detection');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Mode-dependent injections. LSUIElement=true in Info.plist → on macOS the
|
|
61
|
+
// app launches with no dock icon, no Cmd+Tab presence, completely invisible.
|
|
62
|
+
// Tray/notifications/networking still work; every window-surface path calls
|
|
63
|
+
// app.dock.show() (window-manager._ensureDockVisible), so the dock icon
|
|
64
|
+
// appears the moment a window actually shows. Baked for `hidden` mode AND
|
|
65
|
+
// for openAtLogin.mode='hidden' — without the plist key, a login launch
|
|
66
|
+
// flashes the dock before applyEarly()'s dock.hide() can run (the bounce
|
|
67
|
+
// is a native animation that starts before any JS executes).
|
|
68
|
+
if (shouldInjectLSUIElement(config)) {
|
|
69
|
+
builderConfig.mac = builderConfig.mac || {};
|
|
70
|
+
builderConfig.mac.extendInfo = builderConfig.mac.extendInfo || {};
|
|
71
|
+
builderConfig.mac.extendInfo.LSUIElement = true;
|
|
72
|
+
logger.log(`${startupMode === 'hidden' ? 'startup.mode' : 'startup.openAtLogin.mode'}=hidden → injected mac.extendInfo.LSUIElement=true`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Inject `publish` from config. This is the feed URL electron-updater bakes
|
|
76
|
+
// into the shipped app, so it comes from the config alone (#799).
|
|
77
|
+
const publish = publishConfig(config);
|
|
78
|
+
if (publish) {
|
|
79
|
+
builderConfig.publish = publish;
|
|
80
|
+
logger.log(`releases → publish block: github ${publish.owner}/${publish.repo}`);
|
|
81
|
+
} else if (config.releases?.enabled !== false) {
|
|
82
|
+
logger.warn('Could not address the releases repo (no github org and no releases.owner); leaving publish block off.');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Inject afterSign → @omega.js/desktop's built-in notarize hook.
|
|
86
|
+
builderConfig.afterSign = require.resolve('@omega.js/desktop/hooks/notarize');
|
|
87
|
+
logger.log(`afterSign → ${builderConfig.afterSign}`);
|
|
88
|
+
|
|
89
|
+
// Apply consumer overrides last so they win.
|
|
90
|
+
if (config.electronBuilder && typeof config.electronBuilder === 'object') {
|
|
91
|
+
builderConfig = deepMerge(builderConfig, config.electronBuilder);
|
|
92
|
+
logger.log('Applied electronBuilder overrides from omega.json5');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Serialize to YAML and write.
|
|
96
|
+
const yml = yaml.dump(builderConfig, { lineWidth: -1, noRefs: true });
|
|
97
|
+
jetpack.write(distPath, yml);
|
|
98
|
+
logger.log(`wrote ${distPath} (mode=${startupMode})`);
|
|
99
|
+
}).then(() => done(), done);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// Generic-category → per-platform mapping. Consumer sets `app.category` to one of these
|
|
103
|
+
// keys; @omega.js/desktop emits the corresponding mac UTI string and Linux freedesktop category.
|
|
104
|
+
//
|
|
105
|
+
// macOS: https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW8
|
|
106
|
+
// Linux: https://specifications.freedesktop.org/menu-spec/latest/apa.html
|
|
107
|
+
const CATEGORY_MAP = {
|
|
108
|
+
'productivity': { mac: 'public.app-category.productivity', linux: 'Utility' },
|
|
109
|
+
'developer-tools': { mac: 'public.app-category.developer-tools', linux: 'Development' },
|
|
110
|
+
'utilities': { mac: 'public.app-category.utilities', linux: 'Utility' },
|
|
111
|
+
'media': { mac: 'public.app-category.entertainment', linux: 'AudioVideo' },
|
|
112
|
+
'social': { mac: 'public.app-category.social-networking', linux: 'Network' },
|
|
113
|
+
'network': { mac: 'public.app-category.business', linux: 'Network' },
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
function resolveCategory(category) {
|
|
117
|
+
return CATEGORY_MAP[category] || CATEGORY_MAP.productivity;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Substitute the {YEAR} token in a copyright string with the current year. Idempotent
|
|
121
|
+
// when no token is present. Called at YAML generation time so the year stays current
|
|
122
|
+
// across releases without consumers ever editing config.
|
|
123
|
+
function expandYear(str) {
|
|
124
|
+
if (typeof str !== 'string') return str;
|
|
125
|
+
return str.replace(/\{YEAR\}/g, String(new Date().getFullYear()));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// @omega.js/desktop's canonical electron-builder config. Driven by the consumer's omega.json5
|
|
129
|
+
// where it makes sense (appId, productName, copyright, category, languages, platform archs,
|
|
130
|
+
// installer flags); everything else (target list, file globs, signing) is @omega.js/desktop's opinionated
|
|
131
|
+
// default.
|
|
132
|
+
//
|
|
133
|
+
// Optional `extras` argument carries resolved icon paths + entitlements path from the
|
|
134
|
+
// build-config task. When called from tests with no extras, the bare config is returned
|
|
135
|
+
// (paths are left as project-relative defaults that may not exist on disk — fine for
|
|
136
|
+
// test assertions).
|
|
137
|
+
function baseConfig(config, extras = {}) {
|
|
138
|
+
// Seed `app` + `brand` so callers (including tests passing bare {}) can deref without
|
|
139
|
+
// optional-chaining at every site. Matches Manager.getConfig()'s own seeding.
|
|
140
|
+
config.app = config.app || {};
|
|
141
|
+
config.brand = config.brand || {};
|
|
142
|
+
|
|
143
|
+
// Manager.getConfig() derives appId from the brand url/id; the literal here
|
|
144
|
+
// only backstops bare test configs. Copyright derives from the BRAND, never
|
|
145
|
+
// a hardcoded company (friction #18).
|
|
146
|
+
const appId = config.app.appId || 'app.omega.consumer';
|
|
147
|
+
const productName = config.app.productName || 'App';
|
|
148
|
+
const copyright = expandYear(config.app.copyright || (config.brand.name ? `© {YEAR}, ${config.brand.name}` : '© {YEAR}'));
|
|
149
|
+
|
|
150
|
+
// Generic category → per-platform values via lookup table. Default 'productivity' is
|
|
151
|
+
// a safe baseline that fits ~80% of business + utility apps.
|
|
152
|
+
const category = resolveCategory(config.app.category || 'productivity');
|
|
153
|
+
const languages = Array.isArray(config.app.languages) ? config.app.languages : ['en'];
|
|
154
|
+
const darkModeSupport = config.app.darkModeSupport !== false; // default true
|
|
155
|
+
|
|
156
|
+
// Per-platform config blocks. Each is fully optional — every key has a default.
|
|
157
|
+
const macTargetCfg = config.platforms?.mac || {};
|
|
158
|
+
const winTargetCfg = config.platforms?.win || {};
|
|
159
|
+
const linuxTargetCfg = config.platforms?.linux || {};
|
|
160
|
+
|
|
161
|
+
const macArch = Array.isArray(macTargetCfg.arch) && macTargetCfg.arch.length ? macTargetCfg.arch : ['universal'];
|
|
162
|
+
const winArch = Array.isArray(winTargetCfg.arch) && winTargetCfg.arch.length ? winTargetCfg.arch : ['x64', 'ia32'];
|
|
163
|
+
const linuxArch = Array.isArray(linuxTargetCfg.arch) && linuxTargetCfg.arch.length ? linuxTargetCfg.arch : ['x64'];
|
|
164
|
+
|
|
165
|
+
// The arch sets the versionless names can spell (#620) — checked HERE, the
|
|
166
|
+
// last moment a colliding build is still fixable.
|
|
167
|
+
assertArchRules({ mac: macArch, linux: linuxArch }, extras);
|
|
168
|
+
|
|
169
|
+
// NSIS installer UX. Defaults match Slack/Discord-style "no friction" install:
|
|
170
|
+
// one-click (no wizard), shortcut everywhere, launch on finish, per-user.
|
|
171
|
+
const nsisOneClick = winTargetCfg.oneClick !== false;
|
|
172
|
+
const nsisDesktopShortcut = winTargetCfg.desktopShortcut !== false;
|
|
173
|
+
const nsisStartMenuShortcut = winTargetCfg.startMenuShortcut !== false;
|
|
174
|
+
const nsisRunAfterFinish = winTargetCfg.runAfterFinish !== false;
|
|
175
|
+
const nsisPerMachine = winTargetCfg.perMachine === true;
|
|
176
|
+
|
|
177
|
+
// Snap publishing — opt-in via explicit `platforms.linux.snap.enabled: true` in
|
|
178
|
+
// config. The framework scaffold ships with that field set to true by default
|
|
179
|
+
// (so new consumers get snap publishing out of the box once their credentials
|
|
180
|
+
// are wired up), but if the field is missing entirely we default to OFF — that
|
|
181
|
+
// way callers who never knew about snap don't suddenly start emitting a snap
|
|
182
|
+
// target. Even when enabled, the snap target is auto-skipped when
|
|
183
|
+
// SNAPCRAFT_STORE_CREDENTIALS isn't set, so a fresh project doesn't fail CI
|
|
184
|
+
// before the user wires up snapcraft auth.
|
|
185
|
+
const snapCfg = linuxTargetCfg.snap || {};
|
|
186
|
+
const snapConfigEnabled = snapCfg.enabled === true;
|
|
187
|
+
const haveSnapCreds = !!process.env.SNAPCRAFT_STORE_CREDENTIALS;
|
|
188
|
+
const snapEnabled = snapConfigEnabled && haveSnapCreds;
|
|
189
|
+
if (snapConfigEnabled && !haveSnapCreds) {
|
|
190
|
+
logger.log('Snap target enabled in config but SNAPCRAFT_STORE_CREDENTIALS not set — skipping snap target. Run `snapcraft export-login -` and add to .env to enable.');
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const { entitlementsPath, icons, distRoot, projectRoot } = extras;
|
|
194
|
+
// Paths in dist/electron-builder.yml must be project-relative because electron-builder
|
|
195
|
+
// resolves them against the cwd it was invoked from (which is projectRoot, not distRoot).
|
|
196
|
+
// Falling back to distRoot for older callers, but projectRoot is correct.
|
|
197
|
+
const rel = (abs) => {
|
|
198
|
+
if (!abs) return abs;
|
|
199
|
+
if (projectRoot) return path.relative(projectRoot, abs);
|
|
200
|
+
if (distRoot) return path.relative(distRoot, abs);
|
|
201
|
+
return abs;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// Artifact filenames come from @omega.js/config's desktop-artifacts — the ONE
|
|
205
|
+
// naming rule (#620), shared with the website's direct-download URLs
|
|
206
|
+
// (`site.targets.desktop.downloads`). They carry no version, which is what
|
|
207
|
+
// makes `/releases/latest/download/<asset>` a link that never changes, and
|
|
208
|
+
// they sanitize the productName (electron-builder's `${productName}` keeps
|
|
209
|
+
// spaces, which become dots in NSIS output). Passing electron-builder's
|
|
210
|
+
// literal `${ext}` yields a TEMPLATE, for the platform fallbacks that serve
|
|
211
|
+
// more than one target (mac's dmg + auto-update zip).
|
|
212
|
+
const artifactTemplate = (platform, artifact) => desktopArtifactName(productName, platform, artifact, '${ext}');
|
|
213
|
+
const safeProductName = sanitizeProductName(productName);
|
|
214
|
+
|
|
215
|
+
// Build linux target list — `deb` + `AppImage` always; `snap` if enabled.
|
|
216
|
+
const linuxTargets = [
|
|
217
|
+
{ target: 'deb', arch: linuxArch },
|
|
218
|
+
{ target: 'AppImage', arch: linuxArch },
|
|
219
|
+
];
|
|
220
|
+
if (snapEnabled) {
|
|
221
|
+
linuxTargets.push({ target: 'snap', arch: linuxArch });
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const out = {
|
|
225
|
+
appId,
|
|
226
|
+
productName,
|
|
227
|
+
copyright,
|
|
228
|
+
|
|
229
|
+
directories: {
|
|
230
|
+
output: 'release',
|
|
231
|
+
buildResources: 'config', // dist/config/ (relative to dist/electron-builder.yml)
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
files: [
|
|
235
|
+
'**/*',
|
|
236
|
+
'!**/*.map',
|
|
237
|
+
'!.env',
|
|
238
|
+
'!.env.*',
|
|
239
|
+
'!**/*.env',
|
|
240
|
+
// Exclude project logs/ — gulp writes dev.log here during build, which
|
|
241
|
+
// (a) shouldn't ship to end users, and (b) breaks @electron/universal's
|
|
242
|
+
// merge step ("Can't reconcile two non-macho files logs/dev.log") when
|
|
243
|
+
// the file content differs between the x64 and arm64 builds.
|
|
244
|
+
'!logs/**',
|
|
245
|
+
'!**/logs/**',
|
|
246
|
+
],
|
|
247
|
+
|
|
248
|
+
asar: true,
|
|
249
|
+
|
|
250
|
+
mac: {
|
|
251
|
+
category: category.mac,
|
|
252
|
+
electronLanguages: languages,
|
|
253
|
+
darkModeSupport: darkModeSupport,
|
|
254
|
+
// Universal binary — one .dmg + one .zip that runs on both Intel and Apple
|
|
255
|
+
// Silicon. Trade-off: ~2x file size (~225MB vs ~117MB single-arch), ~2x mac
|
|
256
|
+
// build time (electron-builder builds both archs then stitches them with lipo).
|
|
257
|
+
// Win: one user-facing download, no "which one do I pick?" choice for end users.
|
|
258
|
+
target: [
|
|
259
|
+
{ target: 'dmg', arch: macArch },
|
|
260
|
+
{ target: 'zip', arch: macArch },
|
|
261
|
+
],
|
|
262
|
+
hardenedRuntime: true,
|
|
263
|
+
gatekeeperAssess: false,
|
|
264
|
+
notarize: false, // notarization runs via afterSign hook
|
|
265
|
+
// mac.artifactName is the FALLBACK template for mac targets that don't
|
|
266
|
+
// have their own, and it serves BOTH mac targets: the .dmg the site links
|
|
267
|
+
// (`Product-mac-universal.dmg`) and the .zip electron-updater fetches
|
|
268
|
+
// from the feed (`Product-mac-universal.zip`). One template, so the dmg
|
|
269
|
+
// needs no override of its own. No ${arch}: with arch=universal there is
|
|
270
|
+
// one artifact per target — and a non-universal mac arch is refused
|
|
271
|
+
// outright (assertArchRules), because nothing appends the arch back.
|
|
272
|
+
artifactName: artifactTemplate('mac', 'universal'),
|
|
273
|
+
},
|
|
274
|
+
|
|
275
|
+
dmg: {},
|
|
276
|
+
|
|
277
|
+
win: {
|
|
278
|
+
target: [
|
|
279
|
+
{ target: 'nsis', arch: winArch },
|
|
280
|
+
],
|
|
281
|
+
signtoolOptions: {
|
|
282
|
+
signingHashAlgorithms: ['sha256'],
|
|
283
|
+
},
|
|
284
|
+
legalTrademarks: copyright,
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
nsis: {
|
|
288
|
+
// ONE installer for every winArch (electron-builder merges them), so the
|
|
289
|
+
// name says `universal` like the site's `/download/windows/universal`.
|
|
290
|
+
artifactName: artifactTemplate('windows', 'universal'),
|
|
291
|
+
oneClick: nsisOneClick,
|
|
292
|
+
perMachine: nsisPerMachine,
|
|
293
|
+
// `createDesktopShortcut: 'always'` ensures the icon is created even when the
|
|
294
|
+
// installer detects an upgrade (electron-builder's default is 'never' on upgrade).
|
|
295
|
+
createDesktopShortcut: nsisDesktopShortcut ? 'always' : false,
|
|
296
|
+
createStartMenuShortcut: nsisStartMenuShortcut,
|
|
297
|
+
runAfterFinish: nsisRunAfterFinish,
|
|
298
|
+
// Standard wizard mode: let the user pick install dir; one-click skips this.
|
|
299
|
+
allowToChangeInstallationDirectory: !nsisOneClick,
|
|
300
|
+
},
|
|
301
|
+
|
|
302
|
+
linux: {
|
|
303
|
+
target: linuxTargets,
|
|
304
|
+
category: category.linux,
|
|
305
|
+
// The FALLBACK, which only the snap reaches — deb and AppImage are the
|
|
306
|
+
// two published artifacts and carry their own names below. The snap is
|
|
307
|
+
// never a release asset (the Snap Store publishes it), so it keeps ${arch}.
|
|
308
|
+
artifactName: `${safeProductName}-linux-\${arch}.\${ext}`,
|
|
309
|
+
},
|
|
310
|
+
|
|
311
|
+
// The two linux artifacts the site links, each its own name (they share
|
|
312
|
+
// linux.artifactName otherwise, and one template cannot say both). One
|
|
313
|
+
// target apiece, so these are the finished filenames, not templates.
|
|
314
|
+
deb: {
|
|
315
|
+
artifactName: desktopArtifactName(productName, 'linux', 'debian'),
|
|
316
|
+
},
|
|
317
|
+
|
|
318
|
+
appImage: {
|
|
319
|
+
artifactName: desktopArtifactName(productName, 'linux', 'appimage'),
|
|
320
|
+
},
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
// Snap-specific block — only emitted when enabled to keep the YAML clean.
|
|
324
|
+
if (snapEnabled) {
|
|
325
|
+
out.snap = {
|
|
326
|
+
confinement: snapCfg.confinement || 'strict',
|
|
327
|
+
grade: snapCfg.grade || 'stable',
|
|
328
|
+
autoStart: snapCfg.autoStart !== false,
|
|
329
|
+
publish: {
|
|
330
|
+
provider: 'snapStore',
|
|
331
|
+
channels: Array.isArray(snapCfg.channels) && snapCfg.channels.length ? snapCfg.channels : ['stable'],
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// fileAssociations + protocols passthrough. framework-side `protocols` is ADDITIVE — the
|
|
337
|
+
// brand.id:// scheme is registered automatically (handled by lib/protocol.js at runtime
|
|
338
|
+
// and by Info.plist generation at build time elsewhere); this is for additional schemes.
|
|
339
|
+
if (Array.isArray(config.fileAssociations) && config.fileAssociations.length > 0) {
|
|
340
|
+
out.fileAssociations = config.fileAssociations;
|
|
341
|
+
}
|
|
342
|
+
if (Array.isArray(config.protocols) && config.protocols.length > 0) {
|
|
343
|
+
out.protocols = config.protocols;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Wire entitlements.
|
|
347
|
+
if (entitlementsPath) {
|
|
348
|
+
out.mac.entitlements = rel(entitlementsPath);
|
|
349
|
+
out.mac.entitlementsInherit = rel(entitlementsPath);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Wire icons. electron-builder resolves these as paths relative to the cwd it was invoked from (projectRoot).
|
|
353
|
+
if (icons?.macos?.app) out.mac.icon = rel(icons.macos.app);
|
|
354
|
+
if (icons?.macos?.dmg) out.dmg.background = rel(icons.macos.dmg);
|
|
355
|
+
if (icons?.windows?.app) out.win.icon = rel(icons.windows.app);
|
|
356
|
+
if (icons?.linux?.app) out.linux.icon = rel(icons.linux.app);
|
|
357
|
+
|
|
358
|
+
return out;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* The arch rules the versionless artifact names impose
|
|
363
|
+
* ([#620](https://github.com/Omega-JS-Stack/omega/issues/620)).
|
|
364
|
+
*
|
|
365
|
+
* A name with no `${arch}` token gets no arch back: electron-builder's
|
|
366
|
+
* macro expander only REPLACES the token where it appears, and the
|
|
367
|
+
* `getArchSuffix()` a suffix could come from is staging-dir and NSIS-internal.
|
|
368
|
+
* So two linux archs write over one deb name, and a non-universal mac build
|
|
369
|
+
* ships under a name that says `universal`. Windows is exempt — NSIS merges
|
|
370
|
+
* every arch into ONE installer, which is why its multi-arch default is safe.
|
|
371
|
+
*
|
|
372
|
+
* A build/publish run refuses; anything else warns and keeps going, because the
|
|
373
|
+
* collision only lands when a build actually publishes those files.
|
|
374
|
+
*
|
|
375
|
+
* @param {object} arch - The resolved per-platform arch lists (`{ mac, linux }`).
|
|
376
|
+
* @param {object} [options]
|
|
377
|
+
* @param {object} [options.mode] - The Manager's mode (`{ build, publish, … }`).
|
|
378
|
+
* @param {object} [options.logger] - Logger with `warn` (default: this task's).
|
|
379
|
+
* @throws {Error} in build/publish mode, naming the offending config key.
|
|
380
|
+
*/
|
|
381
|
+
function assertArchRules(arch, options) {
|
|
382
|
+
options = options || {};
|
|
383
|
+
const mode = options.mode || Manager.getMode();
|
|
384
|
+
const warn = (options.logger || logger).warn.bind(options.logger || logger);
|
|
385
|
+
|
|
386
|
+
const violations = [];
|
|
387
|
+
if (arch.mac.length !== 1 || arch.mac[0] !== 'universal') {
|
|
388
|
+
violations.push(`platforms.mac.arch (${arch.mac.join(', ')}) — the mac artifact is named \`-mac-universal\`, so a non-universal build ships mislabelled`);
|
|
389
|
+
}
|
|
390
|
+
if (arch.linux.length > 1) {
|
|
391
|
+
violations.push(`platforms.linux.arch (${arch.linux.join(', ')}) — the deb and the AppImage carry ONE name each, so the second arch overwrites the first`);
|
|
392
|
+
}
|
|
393
|
+
if (violations.length === 0) return;
|
|
394
|
+
|
|
395
|
+
const message = `The versionless artifact names (#620) cannot spell this build's arch set: ${violations.join('; ')}. `
|
|
396
|
+
+ 'They support a universal mac and a single linux arch (windows is unaffected — NSIS merges every arch into one installer); '
|
|
397
|
+
+ 'per-arch names are a future additive change.';
|
|
398
|
+
|
|
399
|
+
if (mode.build || mode.publish) {
|
|
400
|
+
throw new Error(message);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
warn(message);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// The electron-builder `publish` block: the brand's ONE public releases repo,
|
|
407
|
+
// resolved by @omega.js/config's releasesRepo (`<brand.id>-releases` under the
|
|
408
|
+
// brand repo owner unless the config names another). Config-only on purpose:
|
|
409
|
+
// this address is baked into app-update.yml and polled by every installed copy
|
|
410
|
+
// forever, and a brand-monorepo app's git remote is the repo it is NESTED in
|
|
411
|
+
// (the playground inside the framework monorepo), which would bake a feed that
|
|
412
|
+
// 404s. `releases.enabled: false` publishes nowhere, and an unaddressable repo
|
|
413
|
+
// emits no block at all rather than half an address.
|
|
414
|
+
function publishConfig(config) {
|
|
415
|
+
if (config?.releases?.enabled === false) {
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
const { owner, name } = releasesRepo(config);
|
|
420
|
+
if (!owner || !name) {
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
return { provider: 'github', owner, repo: name, releaseType: 'release' };
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Whether the packaged app gets LSUIElement=true in Info.plist. True for
|
|
428
|
+
// hidden-mode apps AND for normal-mode apps whose login launch is hidden —
|
|
429
|
+
// the dock bounce is a native animation that starts before any JS runs, so
|
|
430
|
+
// runtime dock.hide() can never fully suppress it.
|
|
431
|
+
function shouldInjectLSUIElement(config) {
|
|
432
|
+
return config?.startup?.mode === 'hidden'
|
|
433
|
+
|| config?.startup?.openAtLogin?.mode === 'hidden';
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Exported for tests. deepMerge is @omega.js/config's (cp73c consolidation) —
|
|
437
|
+
// same contract the local copy had: objects merge per-key, arrays REPLACE
|
|
438
|
+
// (consumer `mac.target: [...]` fully replaces ours, never concatenates).
|
|
439
|
+
module.exports.baseConfig = baseConfig;
|
|
440
|
+
module.exports.deepMerge = deepMerge;
|
|
441
|
+
module.exports.shouldInjectLSUIElement = shouldInjectLSUIElement;
|
|
442
|
+
module.exports.publishConfig = publishConfig;
|
|
443
|
+
module.exports.expandYear = expandYear;
|
|
444
|
+
module.exports.resolveCategory = resolveCategory;
|
|
445
|
+
module.exports.CATEGORY_MAP = CATEGORY_MAP;
|