@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,451 @@
|
|
|
1
|
+
// bundle — three bundles (main / preload / renderer), built in parallel.
|
|
2
|
+
// Each one gets `OMEGA_BUILD_JSON` baked in as a define.
|
|
3
|
+
//
|
|
4
|
+
// The bundler is esbuild since [#737](https://github.com/Omega-JS-Stack/omega/issues/737),
|
|
5
|
+
// and the file, the gulp task, the log tag and `npm run gulp -- bundle` were
|
|
6
|
+
// renamed off `webpack` with it — a task named after a bundler it no longer
|
|
7
|
+
// runs is a lie every reader has to unlearn.
|
|
8
|
+
//
|
|
9
|
+
// Every shared part comes from @omega.js/devkit's ONE bundle wrapper: the
|
|
10
|
+
// framework-deps resolve hook (#87 — a consumer requires a framework
|
|
11
|
+
// dependency by bare name and gets the FRAMEWORK's copy), the production
|
|
12
|
+
// `@dev-only` strip (#18), the minify/sourcemap rules by mode, and one timing
|
|
13
|
+
// line per build. What lives here is only what is genuinely desktop's: the
|
|
14
|
+
// three entry shapes, the Electron platform/target pair, the externals, the
|
|
15
|
+
// renderer's Node-builtin shim, and the OMEGA_BUILD_JSON bake.
|
|
16
|
+
|
|
17
|
+
const Manager = new (require('../../build.js'));
|
|
18
|
+
const logger = Manager.logger('bundle');
|
|
19
|
+
const path = require('path');
|
|
20
|
+
const glob = require('glob').globSync;
|
|
21
|
+
const jetpack = require('fs-jetpack');
|
|
22
|
+
const { readSiblingPorts, readSiblingOrigin, envPorts } = require('../../vendor/config/index.js');
|
|
23
|
+
const { bakeKeys } = require('../../vendor/config/env-delivery.js');
|
|
24
|
+
const { checkEnvRules } = require('../../vendor/config/env-rules.js');
|
|
25
|
+
const { resolveLicenseStamp } = require('../../vendor/devkit/license.js');
|
|
26
|
+
const { bundle, formatBytes } = require('../../vendor/devkit/bundle.js');
|
|
27
|
+
const { emptyModulesPlugin } = require('../../vendor/devkit/empty-modules-plugin.js');
|
|
28
|
+
const electronTargets = require('../../utils/electron-targets.js');
|
|
29
|
+
|
|
30
|
+
const projectRoot = Manager.getRootPath('project');
|
|
31
|
+
const frameworkRoot = Manager.getRootPath();
|
|
32
|
+
const outputRoot = require('../../utils/dist-root.js')(projectRoot);
|
|
33
|
+
|
|
34
|
+
// The renderer runs with contextIsolation on: a browser-like environment with
|
|
35
|
+
// no Node globals. Libraries bundled through @omega.js/client (firebase and
|
|
36
|
+
// friends) still IMPORT Node built-ins on code paths their browser builds never
|
|
37
|
+
// take, so a browser bundle has to answer those imports with something. webpack
|
|
38
|
+
// answered `resolve.fallback: { fs: false, ... }`; esbuild has no such option,
|
|
39
|
+
// so the same list goes to @omega.js/devkit's `emptyModulesPlugin` — the shared
|
|
40
|
+
// hook, because @omega.js/extension's browser bundles need the same answer.
|
|
41
|
+
//
|
|
42
|
+
// `electron` is on the list for the same reason and a sharper one: a renderer
|
|
43
|
+
// that reached the real electron module would be a security hole, not a missing
|
|
44
|
+
// polyfill. That is why the hook answers UNCONDITIONALLY and never resolves
|
|
45
|
+
// first — `electron` DOES resolve from a desktop project.
|
|
46
|
+
const RENDERER_EMPTY_MODULES = [
|
|
47
|
+
'fs', 'path', 'os', 'crypto', 'http', 'https', 'http2', 'net', 'tls', 'dns',
|
|
48
|
+
'child_process', 'stream', 'zlib', 'util', 'url', 'assert', 'events', 'buffer',
|
|
49
|
+
'querystring', 'string_decoder', 'electron',
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
// The blob every bundle reads as OMEGA_BUILD_JSON.config — and the ONLY thing
|
|
53
|
+
// the renderer hands @omega.js/client (renderer.js merges `buildJson.config`
|
|
54
|
+
// with the runtime overrides). The app's VERSION rides INSIDE it for that
|
|
55
|
+
// reason: the client tags every error report `<brand.id>@<version>` and falls
|
|
56
|
+
// back to the build stamp without one (#380), and it never sees the sibling
|
|
57
|
+
// `package` key. The dev map (#300) is a dev-build key only.
|
|
58
|
+
function composeBuildConfig(config, dev, pkg) {
|
|
59
|
+
return { ...config, version: pkg.version, ...(dev ? { dev } : {}) };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// OMEGA_BUILD_JSON itself — the build's own record of what it produced. The
|
|
63
|
+
// `license` stamp ([#320](https://github.com/Omega-JS-Stack/omega/issues/320))
|
|
64
|
+
// rides HERE and not inside `config`: it is a fact about the build, not part
|
|
65
|
+
// of the client contract the renderer hands @omega.js/client. Nothing in the
|
|
66
|
+
// app reads it today (a packaged app has no attribution surface, and payments
|
|
67
|
+
// ride the backend's own gate) — it is what makes an artifact say which
|
|
68
|
+
// verdict it was packaged under.
|
|
69
|
+
function composeBuildJson({ config, dev, pkg, mode, license }) {
|
|
70
|
+
return {
|
|
71
|
+
config: composeBuildConfig(config, dev, pkg),
|
|
72
|
+
package: pkg,
|
|
73
|
+
mode,
|
|
74
|
+
license,
|
|
75
|
+
builtAt: new Date().toISOString(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
module.exports = function bundleTask(done) {
|
|
80
|
+
const mode = Manager.getMode();
|
|
81
|
+
const isProd = mode.environment === 'production';
|
|
82
|
+
const config = Manager.getConfig();
|
|
83
|
+
|
|
84
|
+
// The renderer's @omega.js/client reads `config.dev` to reach the local
|
|
85
|
+
// stack (N7). A renderer has no env and no filesystem walk of its own, so
|
|
86
|
+
// the map has to be BAKED — the sibling backend's published map (this
|
|
87
|
+
// brand's live emulator suite) plus anything a parent injected on the env
|
|
88
|
+
// channel, resolved on every build so a rebuild picks up a restarted
|
|
89
|
+
// emulator ([#300](https://github.com/Omega-JS-Stack/omega/issues/300)).
|
|
90
|
+
// The sibling website's published dev ORIGIN rides the same bake
|
|
91
|
+
// ([#262](https://github.com/Omega-JS-Stack/omega/issues/262)); a key
|
|
92
|
+
// present is a resolved fact, absent means the client assumes and warns.
|
|
93
|
+
// Never in production: a packaged app has no local stack.
|
|
94
|
+
const devOrigin = isProd ? null : readSiblingOrigin(projectRoot);
|
|
95
|
+
const dev = isProd ? null : {
|
|
96
|
+
ports: { ...readSiblingPorts(projectRoot), ...envPorts() },
|
|
97
|
+
...(devOrigin ? { origin: devOrigin } : {}),
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// The license check (#320), once per build: a PRODUCTION build asks the
|
|
101
|
+
// license server (a key that cannot be answered for THROWS, which is what
|
|
102
|
+
// gates a bad-key release); a dev build is keyless by definition and never
|
|
103
|
+
// phones home. The answer is stamped into the build blob below.
|
|
104
|
+
const projectPackage = Manager.getPackage('project');
|
|
105
|
+
resolveLicenseStamp({ config, production: isProd })
|
|
106
|
+
.then((license) => {
|
|
107
|
+
// OMEGA_BUILD_JSON — frozen at build time, accessible at runtime as window/globalThis.OMEGA_BUILD_JSON.
|
|
108
|
+
const buildJson = composeBuildJson({ config, dev, pkg: projectPackage, mode, license });
|
|
109
|
+
|
|
110
|
+
logger.log(`bundling — environment=${mode.environment}, license=${license.status}`);
|
|
111
|
+
runBundles(buildJson, isProd).then(() => done()).catch(done);
|
|
112
|
+
})
|
|
113
|
+
.catch(done);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Build the bundles the consumer has entries for, in parallel.
|
|
118
|
+
* @param {object} buildJson - The blob every bundle bakes.
|
|
119
|
+
* @param {boolean} isProd - Production build.
|
|
120
|
+
* @returns {Promise<void>}
|
|
121
|
+
*/
|
|
122
|
+
async function runBundles(buildJson, isProd) {
|
|
123
|
+
// Composed ONCE and handed down: `buildJsonDefines` runs the env-schema bake
|
|
124
|
+
// guard, so building it per bundle repeated the same warning three times for
|
|
125
|
+
// one missing key, and `resolveTargets` spawns the Electron probe.
|
|
126
|
+
const shared = {
|
|
127
|
+
define: buildJsonDefines(buildJson, isProd),
|
|
128
|
+
banner: buildJsonBanner(buildJson),
|
|
129
|
+
targets: resolveTargets(),
|
|
130
|
+
dev: !isProd,
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const builds = [
|
|
134
|
+
mainBundle(shared),
|
|
135
|
+
preloadBundle(shared),
|
|
136
|
+
rendererBundle(shared),
|
|
137
|
+
].filter(Boolean);
|
|
138
|
+
|
|
139
|
+
if (builds.length === 0) {
|
|
140
|
+
logger.warn('No bundles to build.');
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// esbuild rejects with every error already formatted, so a failed build
|
|
145
|
+
// surfaces through gulp's own callback rather than a hand-rolled reporter.
|
|
146
|
+
const results = await Promise.all(builds.map(async (build) => ({
|
|
147
|
+
name: build.name,
|
|
148
|
+
result: await bundle(build.options),
|
|
149
|
+
})));
|
|
150
|
+
|
|
151
|
+
// The metafile is what the wrapper turns on for exactly this: what each
|
|
152
|
+
// bundle produced, and how big.
|
|
153
|
+
results.forEach(({ name, result }) => {
|
|
154
|
+
logger.log(`built ${name}:`);
|
|
155
|
+
Object.entries(result.metafile.outputs).forEach(([file, meta]) => {
|
|
156
|
+
logger.log(` ${path.basename(file)} (${formatBytes(meta.bytes)})`);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// The Electron the CONSUMER pinned decides the syntax floor of all three
|
|
162
|
+
// bundles — see utils/electron-targets.js. The binary is resolved from the
|
|
163
|
+
// FRAMEWORK's module context, which is the same lookup build-config pins
|
|
164
|
+
// `electronVersion` with: the version that ends up RUNNING the bundles is the
|
|
165
|
+
// version they must compile for.
|
|
166
|
+
function resolveTargets() {
|
|
167
|
+
try {
|
|
168
|
+
return electronTargets(Manager.require('electron'), { logger });
|
|
169
|
+
} catch (e) {
|
|
170
|
+
logger.warn(`Could not resolve electron (${e.message}) — bundles compile with no syntax floor.`);
|
|
171
|
+
return { node: null, chrome: null, electron: null };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Inject OMEGA_BUILD_JSON into every bundle two ways:
|
|
176
|
+
// 1. `define` replaces the bare `OMEGA_BUILD_JSON` identifier with the literal at build time
|
|
177
|
+
// (so framework code can reference it without globals).
|
|
178
|
+
// 2. `banner` prepends a tiny IIFE that assigns the same value to globalThis.OMEGA_BUILD_JSON
|
|
179
|
+
// (so it's reachable from DevTools and consumer code via window.OMEGA_BUILD_JSON).
|
|
180
|
+
//
|
|
181
|
+
// Also: bake the schema's build-time secrets into the bundle as `process.env.<KEY>`
|
|
182
|
+
// replacements. Packaged apps don't ship .env, so without this the analytics
|
|
183
|
+
// module would have no secret at runtime in production. Local dev still reads
|
|
184
|
+
// from process.env (the replacement only fires when the build runs with the key
|
|
185
|
+
// set; otherwise the reference is left intact).
|
|
186
|
+
function buildJsonDefines(buildJson, isProd) {
|
|
187
|
+
return {
|
|
188
|
+
OMEGA_BUILD_JSON: JSON.stringify(buildJson),
|
|
189
|
+
// webpack derived this from its `mode`; esbuild has no modes, so the switch
|
|
190
|
+
// every bundled library reads is stated here instead. Dropping it would
|
|
191
|
+
// ship every library's DEVELOPMENT branch into a packaged app.
|
|
192
|
+
'process.env.NODE_ENV': isProd ? '"production"' : '"development"',
|
|
193
|
+
// The bake is guarded by the schema's presence rules (#626): the brand's
|
|
194
|
+
// own resolved config says which keys it owes, and the mode says what a
|
|
195
|
+
// violation costs.
|
|
196
|
+
...bakeDefinitions(process.env, { config: buildJson.config, mode: buildJson.mode }),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* The globalThis/window assignment every bundle carries.
|
|
202
|
+
* @param {object} buildJson - The blob every bundle bakes.
|
|
203
|
+
* @returns {object} an esbuild banner
|
|
204
|
+
*/
|
|
205
|
+
function buildJsonBanner(buildJson) {
|
|
206
|
+
const literal = JSON.stringify(buildJson);
|
|
207
|
+
return {
|
|
208
|
+
js: `(function(){var __em=${literal};if(typeof globalThis!=='undefined'){globalThis.OMEGA_BUILD_JSON=__em;}if(typeof window!=='undefined'){window.OMEGA_BUILD_JSON=__em;}})();`,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// The keys the env schema says this build writes INTO the shipped artifact
|
|
213
|
+
// ([#627](https://github.com/Omega-JS-Stack/omega/issues/627)) — the hardcoded
|
|
214
|
+
// GOOGLE_ANALYTICS_SECRET read this replaced was one of three hand-kept lists
|
|
215
|
+
// for one concern. A new baked key is one schema entry and nothing here.
|
|
216
|
+
const BAKED_KEYS = bakeKeys('desktop');
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* The schema's presence rules at the BAKE seam
|
|
220
|
+
* ([#626](https://github.com/Omega-JS-Stack/omega/issues/626)) — the last
|
|
221
|
+
* moment a missing key is still fixable.
|
|
222
|
+
*
|
|
223
|
+
* A packaged app ships no `.env`, so what the bundle holds is what the app
|
|
224
|
+
* holds forever: a brand with a GA4 stream id and no Measurement Protocol
|
|
225
|
+
* secret used to bundle NO replacement at all and ship an app that sends no
|
|
226
|
+
* events, silently — and a CI build, which has no `.env` on the runner, is
|
|
227
|
+
* exactly where that happens. A build/publish run refuses; a development build
|
|
228
|
+
* warns and keeps going, because a half-configured brand is a normal step on
|
|
229
|
+
* the way to a configured one.
|
|
230
|
+
*
|
|
231
|
+
* @param {object} config - The target's resolved omega.json5 config.
|
|
232
|
+
* @param {object} env - The build env.
|
|
233
|
+
* @param {object} [options]
|
|
234
|
+
* @param {object} [options.mode] - The Manager's mode (`{ build, publish, … }`).
|
|
235
|
+
* @param {object} [options.logger] - Logger with `warn` (default: this task's).
|
|
236
|
+
* @throws {Error} in build/publish mode, naming every brand-level key and the config path that requires it.
|
|
237
|
+
*/
|
|
238
|
+
function assertBakeRules(config, env, options) {
|
|
239
|
+
options = options || {};
|
|
240
|
+
const mode = options.mode || Manager.getMode();
|
|
241
|
+
const warn = (options.logger || logger).warn.bind(options.logger || logger);
|
|
242
|
+
|
|
243
|
+
const violations = checkEnvRules(config, env, { target: 'desktop' })
|
|
244
|
+
.filter((violation) => violation.rule === 'requiredWhen');
|
|
245
|
+
if (violations.length === 0) return;
|
|
246
|
+
|
|
247
|
+
// The BRAND-LEVEL key name (GOOGLE_ANALYTICS_SECRET_DESKTOP, not the
|
|
248
|
+
// GOOGLE_ANALYTICS_SECRET it is delivered as): that is the name a human puts
|
|
249
|
+
// in the brand .env and in the repo's Actions secrets.
|
|
250
|
+
const named = violations.map(({ key, path }) => `${key} (required by ${path})`).join(', ');
|
|
251
|
+
const message = `${violations.length} env ${violations.length === 1 ? 'key this brand\'s config requires is' : 'keys this brand\'s config requires are'} missing from the build env: ${named}. `
|
|
252
|
+
+ 'Set it in the brand .env (and as a repo Actions secret for a CI build — `omega push-secrets` sends them), then build again.';
|
|
253
|
+
|
|
254
|
+
if (mode.build || mode.publish) {
|
|
255
|
+
throw new Error(message);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
warn(message);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* The `define` replacements for the baked keys the build env carries. A key
|
|
263
|
+
* with no value is left OUT, so the bundle keeps its live `process.env` read —
|
|
264
|
+
* that is how a local dev run still picks the value up from the cascade.
|
|
265
|
+
*
|
|
266
|
+
* The presence guard runs FIRST: a build that would ship an unreplaced
|
|
267
|
+
* reference over a configured stream refuses here rather than shipping the hole.
|
|
268
|
+
*
|
|
269
|
+
* @param {object} [env] - Env map (default: process.env).
|
|
270
|
+
* @param {object} [options] - `{ config, mode, logger }` — the guard's inputs; without a config there is no rule to answer.
|
|
271
|
+
* @returns {Object<string, string>} `process.env.KEY` → JSON literal.
|
|
272
|
+
*/
|
|
273
|
+
function bakeDefinitions(env, options) {
|
|
274
|
+
env = env || process.env;
|
|
275
|
+
|
|
276
|
+
if (options && options.config) {
|
|
277
|
+
assertBakeRules(options.config, env, options);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const definitions = {};
|
|
281
|
+
for (const key of BAKED_KEYS) {
|
|
282
|
+
if (env[key]) definitions[`process.env.${key}`] = JSON.stringify(env[key]);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return definitions;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* The main process bundle: CommonJS on Node, electron and every native module
|
|
290
|
+
* left external.
|
|
291
|
+
* @param {object} shared - `{ define, banner, targets, dev }`, composed once per run
|
|
292
|
+
* @returns {object|null} `{ name, options }`, or null when the consumer has no entry
|
|
293
|
+
*/
|
|
294
|
+
function mainBundle(shared) {
|
|
295
|
+
const entry = path.join(projectRoot, 'src', 'main.js');
|
|
296
|
+
if (!jetpack.exists(entry)) {
|
|
297
|
+
logger.warn('No src/main.js in consumer — skipping main bundle.');
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
name: 'main',
|
|
303
|
+
options: {
|
|
304
|
+
frameworkRoot,
|
|
305
|
+
entries: [entry],
|
|
306
|
+
outfile: path.join(outputRoot, 'main.bundle.js'),
|
|
307
|
+
platform: 'node',
|
|
308
|
+
format: 'cjs',
|
|
309
|
+
target: shared.targets.node,
|
|
310
|
+
// Native modules stay OUT of the bundle so electron-builder's afterPack
|
|
311
|
+
// rebuilds them; electron is provided by the runtime itself.
|
|
312
|
+
external: ['electron', ...nativeExternals()],
|
|
313
|
+
dev: shared.dev,
|
|
314
|
+
define: shared.define,
|
|
315
|
+
banner: shared.banner,
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* The preload bundle: same shape as main. `platform: 'node'` leaves every Node
|
|
322
|
+
* built-in external exactly as it does for main, so the only name worth stating
|
|
323
|
+
* is electron — and a preload rebuilds no native module of its own.
|
|
324
|
+
* @param {object} shared - `{ define, banner, targets, dev }`, composed once per run
|
|
325
|
+
* @returns {object|null} `{ name, options }`, or null when the consumer has no entry
|
|
326
|
+
*/
|
|
327
|
+
function preloadBundle(shared) {
|
|
328
|
+
const entry = path.join(projectRoot, 'src', 'preload.js');
|
|
329
|
+
if (!jetpack.exists(entry)) {
|
|
330
|
+
logger.warn('No src/preload.js in consumer — skipping preload bundle.');
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return {
|
|
335
|
+
name: 'preload',
|
|
336
|
+
options: {
|
|
337
|
+
frameworkRoot,
|
|
338
|
+
entries: [entry],
|
|
339
|
+
outfile: path.join(outputRoot, 'preload.bundle.js'),
|
|
340
|
+
platform: 'node',
|
|
341
|
+
format: 'cjs',
|
|
342
|
+
target: shared.targets.node,
|
|
343
|
+
external: ['electron'],
|
|
344
|
+
dev: shared.dev,
|
|
345
|
+
define: shared.define,
|
|
346
|
+
banner: shared.banner,
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* The output name of a component entry: the directory holding its `index.js`.
|
|
353
|
+
* Either separator, because glob answers `settings/index.js` on macOS and
|
|
354
|
+
* Linux and `settings\index.js` on Windows, and a strip that assumed the
|
|
355
|
+
* forward slash keyed EVERY Windows entry `index.js`, collapsing all three
|
|
356
|
+
* renderer bundles onto one output file
|
|
357
|
+
* ([#806](https://github.com/Omega-JS-Stack/omega/issues/806)).
|
|
358
|
+
* @param {string} rel - The entry's path relative to the components dir, as glob returned it
|
|
359
|
+
* @returns {string} the key esbuild's `[name]` writes the bundle under
|
|
360
|
+
*/
|
|
361
|
+
function rendererEntryKey(rel) {
|
|
362
|
+
return rel.replace(/[\\/]index\.js$/, '');
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* One browser bundle per `src/assets/js/components/<name>/index.js`, loaded by
|
|
367
|
+
* the page template as a plain `<script src>` — so iife, not esm.
|
|
368
|
+
* @param {object} shared - `{ define, banner, targets, dev }`, composed once per run
|
|
369
|
+
* @returns {object|null} `{ name, options }`, or null when the consumer has no entries
|
|
370
|
+
*/
|
|
371
|
+
function rendererBundle(shared) {
|
|
372
|
+
const componentsDir = path.join(projectRoot, 'src', 'assets', 'js', 'components');
|
|
373
|
+
if (!jetpack.exists(componentsDir)) {
|
|
374
|
+
logger.warn('No src/assets/js/components/ in consumer — skipping renderer bundles.');
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// One bundle per components/<name>/index.js
|
|
379
|
+
const indexFiles = glob('*/index.js', { cwd: componentsDir });
|
|
380
|
+
if (indexFiles.length === 0) {
|
|
381
|
+
logger.warn('No component index.js entries found.');
|
|
382
|
+
return null;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Keys name the outputs: components/settings/index.js → settings.bundle.js,
|
|
386
|
+
// which is the file the page template's <script src> asks for.
|
|
387
|
+
const entries = {};
|
|
388
|
+
indexFiles.forEach((rel) => {
|
|
389
|
+
entries[rendererEntryKey(rel)] = path.join(componentsDir, rel);
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
return {
|
|
393
|
+
name: 'renderer',
|
|
394
|
+
options: {
|
|
395
|
+
frameworkRoot,
|
|
396
|
+
entries,
|
|
397
|
+
outdir: path.join(outputRoot, 'assets', 'js', 'components'),
|
|
398
|
+
entryNames: '[name].bundle',
|
|
399
|
+
platform: 'browser',
|
|
400
|
+
format: 'iife',
|
|
401
|
+
target: shared.targets.chrome,
|
|
402
|
+
dev: shared.dev,
|
|
403
|
+
// Vendored core assets (#111) — mirrors the alias BXM/UJM use, so
|
|
404
|
+
// renderer code imports shared core modules by a stable name:
|
|
405
|
+
// import appShell from '__main_assets__/js/core/app-shell.js';
|
|
406
|
+
alias: {
|
|
407
|
+
'__main_assets__': path.join(frameworkRoot, 'dist', 'assets'),
|
|
408
|
+
},
|
|
409
|
+
define: {
|
|
410
|
+
...shared.define,
|
|
411
|
+
// Libraries like lodash/@firebase/util reference the Node-ism `global`;
|
|
412
|
+
// a browser bundle leaves it undefined, so it is rewritten textually.
|
|
413
|
+
global: 'globalThis',
|
|
414
|
+
},
|
|
415
|
+
banner: shared.banner,
|
|
416
|
+
plugins: [emptyModulesPlugin(RENDERER_EMPTY_MODULES)],
|
|
417
|
+
},
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* The consumer's truly native (C++) modules — they must stay out of the bundle
|
|
423
|
+
* so electron-builder's afterPack rebuilds them against Electron's ABI.
|
|
424
|
+
* electron-store is pure JS (ESM) so it bundles fine.
|
|
425
|
+
* @returns {string[]} module names to leave external
|
|
426
|
+
*/
|
|
427
|
+
function nativeExternals() {
|
|
428
|
+
const NATIVE = [
|
|
429
|
+
'better-sqlite3',
|
|
430
|
+
'keytar',
|
|
431
|
+
'node-mac-permissions',
|
|
432
|
+
'node-notifier',
|
|
433
|
+
'sharp',
|
|
434
|
+
'sqlite3',
|
|
435
|
+
];
|
|
436
|
+
|
|
437
|
+
const consumerPkg = Manager.getPackage('project');
|
|
438
|
+
const declared = Object.assign({}, consumerPkg.dependencies || {}, consumerPkg.devDependencies || {});
|
|
439
|
+
|
|
440
|
+
return Object.keys(declared).filter((name) => NATIVE.includes(name));
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// The list behind the renderer's Node-builtin shim (#737) — pinned by
|
|
444
|
+
// src/test/suites/build/renderer-node-shims.test.js.
|
|
445
|
+
module.exports.RENDERER_EMPTY_MODULES = RENDERER_EMPTY_MODULES;
|
|
446
|
+
module.exports.composeBuildConfig = composeBuildConfig;
|
|
447
|
+
module.exports.composeBuildJson = composeBuildJson;
|
|
448
|
+
module.exports.rendererEntryKey = rendererEntryKey;
|
|
449
|
+
// The schema-derived bake set and its reader (#627).
|
|
450
|
+
module.exports.BAKED_KEYS = BAKED_KEYS;
|
|
451
|
+
module.exports.bakeDefinitions = bakeDefinitions;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// The LOCAL half of the retired `omega setup`, on the gulp lane
|
|
2
|
+
// ([#675](https://github.com/Omega-JS-Stack/omega/issues/675)).
|
|
3
|
+
//
|
|
4
|
+
// This task is the first step of the gulp `build` series, so `npm start` (the
|
|
5
|
+
// dev lane, which is gulp and nothing else) and every gulp-driven verb heal the
|
|
6
|
+
// consumer tree on the way past — scripts, .nvmrc, peer deps, the defaults
|
|
7
|
+
// tree, the locality warning. Idempotent and quiet: a converged target writes
|
|
8
|
+
// nothing. The non-gulp verbs (`omega test`, `omega deploy`) call ensureTarget
|
|
9
|
+
// themselves.
|
|
10
|
+
const Manager = new (require('../../build.js'));
|
|
11
|
+
const logger = Manager.logger('defaults');
|
|
12
|
+
const { ensureTarget } = require('../../commands/lib/ensure-target.js');
|
|
13
|
+
|
|
14
|
+
module.exports = async function defaults() {
|
|
15
|
+
await ensureTarget({
|
|
16
|
+
projectDir: Manager.getRootPath('project'),
|
|
17
|
+
log: (line) => logger.log(line),
|
|
18
|
+
warn: (line) => logger.warn(line),
|
|
19
|
+
});
|
|
20
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// STUB — stage consumer src/ + @omega.js/desktop dist/ into .desktop-build/ for the `bundle` task to consume.
|
|
2
|
+
const Manager = new (require('../../build.js'));
|
|
3
|
+
const logger = Manager.logger('distribute');
|
|
4
|
+
|
|
5
|
+
module.exports = function distribute(done) {
|
|
6
|
+
logger.log('distribute (stub)');
|
|
7
|
+
done();
|
|
8
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// html — read each consumer view at src/views/<name>/index.html, treat it as the BODY of the
|
|
2
|
+
// outer page-template, render with templating vars, write to dist/views/<name>/index.html.
|
|
3
|
+
//
|
|
4
|
+
// Page template is FRAMEWORK-INTERNAL (`<framework>/dist/config/page-template.html`). Consumers don't ship
|
|
5
|
+
// their own — every view goes through the same shell so the inset titlebar / draggable region /
|
|
6
|
+
// css/js wiring stay consistent. If a consumer needs a different template they can fork via
|
|
7
|
+
// `manager.windows` config, but we no longer look at `<consumer>/config/page-template.html`.
|
|
8
|
+
//
|
|
9
|
+
// Body content is itself templated FIRST (so you can use {{ brand.name }} etc. inside the view),
|
|
10
|
+
// then the result is injected into the page template's `{{ content }}` slot.
|
|
11
|
+
//
|
|
12
|
+
// The page name (passed to templating as page.name) is derived from the view's directory:
|
|
13
|
+
// src/views/main/index.html -> page.name = 'main'
|
|
14
|
+
// src/views/settings/index.html -> page.name = 'settings'
|
|
15
|
+
// This lines up with the `bundle` task's entry naming so /assets/js/components/<page.name>.bundle.js
|
|
16
|
+
// and /assets/css/components/<page.name>.bundle.css resolve correctly.
|
|
17
|
+
|
|
18
|
+
const Manager = new (require('../../build.js'));
|
|
19
|
+
const logger = Manager.logger('html');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
const jetpack = require('fs-jetpack');
|
|
22
|
+
|
|
23
|
+
const projectRoot = Manager.getRootPath('project');
|
|
24
|
+
const packageRoot = Manager.getRootPath('main');
|
|
25
|
+
const outputRoot = require('../../utils/dist-root.js')(projectRoot);
|
|
26
|
+
|
|
27
|
+
// We require the templating lib directly (rather than going through a Manager singleton)
|
|
28
|
+
// because gulp tasks run pre-Electron, with only the build-time Manager available.
|
|
29
|
+
const templating = require('../../lib/templating.js');
|
|
30
|
+
|
|
31
|
+
module.exports = function htmlTask(done) {
|
|
32
|
+
const viewsDir = path.join(projectRoot, 'src', 'views');
|
|
33
|
+
|
|
34
|
+
if (!jetpack.exists(viewsDir)) {
|
|
35
|
+
logger.warn(`No views dir at ${viewsDir} — skipping.`);
|
|
36
|
+
return done();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const files = jetpack.find(viewsDir, { matching: '**/*.html', recursive: true });
|
|
40
|
+
if (files.length === 0) {
|
|
41
|
+
logger.warn('No HTML files found.');
|
|
42
|
+
return done();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// framework-internal page template — single source of truth. Lives at
|
|
46
|
+
// <em>/dist/config/page-template.html (copied from src/config/page-template.html
|
|
47
|
+
// by prepare-package). Consumers do not override this anymore.
|
|
48
|
+
const templatePath = path.join(packageRoot, 'dist', 'config', 'page-template.html');
|
|
49
|
+
|
|
50
|
+
if (!jetpack.exists(templatePath)) {
|
|
51
|
+
logger.warn(`No @omega.js/desktop page template at ${templatePath}. Falling back to raw view copy.`);
|
|
52
|
+
files.forEach((src) => {
|
|
53
|
+
const rel = path.relative(viewsDir, src);
|
|
54
|
+
const dest = path.join(outputRoot, 'views', rel);
|
|
55
|
+
jetpack.copy(src, dest, { overwrite: true });
|
|
56
|
+
logger.log(`emitted dist/views/${rel} (raw)`);
|
|
57
|
+
});
|
|
58
|
+
return done();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const pageTemplateContent = jetpack.read(templatePath);
|
|
62
|
+
const cacheBust = String(Date.now());
|
|
63
|
+
|
|
64
|
+
files.forEach((src) => {
|
|
65
|
+
const rel = path.relative(viewsDir, src);
|
|
66
|
+
// Page name = directory under views/, OR the file basename if at views/ root.
|
|
67
|
+
// src/views/main/index.html -> 'main'
|
|
68
|
+
// src/views/main.html -> 'main'
|
|
69
|
+
// src/views/blog/post.html -> 'blog/post'
|
|
70
|
+
let pageName;
|
|
71
|
+
const dir = path.dirname(rel);
|
|
72
|
+
const base = path.basename(src, '.html');
|
|
73
|
+
if (dir === '.' || dir === '') {
|
|
74
|
+
pageName = base;
|
|
75
|
+
} else if (base === 'index') {
|
|
76
|
+
pageName = dir.replace(/\\/g, '/');
|
|
77
|
+
} else {
|
|
78
|
+
pageName = `${dir.replace(/\\/g, '/')}/${base}`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const bodyContent = jetpack.read(src);
|
|
82
|
+
|
|
83
|
+
// Two-pass render: first the body (so it can use {{ brand.name }} etc.), then the outer page.
|
|
84
|
+
const innerVars = templating.buildPageVars(pageName, { cacheBust }, Manager);
|
|
85
|
+
const renderedBody = templating.render(bodyContent, innerVars);
|
|
86
|
+
const outerVars = templating.buildPageVars(pageName, { cacheBust, content: renderedBody }, Manager);
|
|
87
|
+
const final = templating.render(pageTemplateContent, outerVars);
|
|
88
|
+
|
|
89
|
+
const dest = path.join(outputRoot, 'views', rel);
|
|
90
|
+
jetpack.write(dest, final);
|
|
91
|
+
logger.log(`emitted dist/views/${rel} (page=${pageName})`);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
done();
|
|
95
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// Quick local package: produces a runnable .app/.exe-folder/linux-unpacked dir for the host
|
|
2
|
+
// platform + host arch only, with NO DMG, NO universal stitching, NO notarization. ~20-30s
|
|
3
|
+
// vs ~3min for the full `package`. Output: release/<platform>-<arch>/<ProductName>.app|.exe.
|
|
4
|
+
//
|
|
5
|
+
// Trade-offs vs `package`:
|
|
6
|
+
// - Mac: skips DMG + zip + universal binary (host arch only). Code signing still runs if
|
|
7
|
+
// the cert is available — the .app launches normally on the dev machine. No notarization.
|
|
8
|
+
// - Win: skips NSIS installer. Output is `release/win-unpacked/<ProductName>.exe` you run directly.
|
|
9
|
+
// - Linux: skips deb + AppImage. Output is `release/linux-unpacked/<ProductName>` binary.
|
|
10
|
+
//
|
|
11
|
+
// Why bypass gulp/package: we need to override `mac.target`, `win.target`, `linux.target`,
|
|
12
|
+
// `mac.notarize` for this run only without mutating dist/electron-builder.yml. Cleanest is
|
|
13
|
+
// to programmatically call electron-builder.build() with a config override layered on top.
|
|
14
|
+
|
|
15
|
+
const path = require('path');
|
|
16
|
+
const jetpack = require('fs-jetpack');
|
|
17
|
+
const yaml = require('js-yaml');
|
|
18
|
+
const Manager = new (require('../../build.js'));
|
|
19
|
+
|
|
20
|
+
const logger = Manager.logger('package-quick');
|
|
21
|
+
|
|
22
|
+
module.exports = function packageQuick(done) {
|
|
23
|
+
const projectRoot = process.cwd();
|
|
24
|
+
const configPath = path.join(require('../../utils/dist-root.js')(projectRoot), 'electron-builder.yml');
|
|
25
|
+
|
|
26
|
+
if (!jetpack.exists(configPath)) {
|
|
27
|
+
return done(new Error(`Missing ${configPath}. Run gulp/build-config first.`));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let builder;
|
|
31
|
+
try {
|
|
32
|
+
builder = Manager.require('electron-builder');
|
|
33
|
+
} catch (e) {
|
|
34
|
+
return done(new Error(`Could not resolve electron-builder: ${e.message}`));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Load the materialized config + override target lists for fast/dir output.
|
|
38
|
+
const baseConfig = yaml.load(jetpack.read(configPath));
|
|
39
|
+
|
|
40
|
+
baseConfig.mac = baseConfig.mac || {};
|
|
41
|
+
baseConfig.mac.target = ['dir'];
|
|
42
|
+
baseConfig.mac.notarize = false;
|
|
43
|
+
|
|
44
|
+
baseConfig.win = baseConfig.win || {};
|
|
45
|
+
baseConfig.win.target = ['dir'];
|
|
46
|
+
|
|
47
|
+
baseConfig.linux = baseConfig.linux || {};
|
|
48
|
+
baseConfig.linux.target = ['dir'];
|
|
49
|
+
|
|
50
|
+
// Strip the publish block — we never want this build leaking to GitHub.
|
|
51
|
+
delete baseConfig.publish;
|
|
52
|
+
|
|
53
|
+
// Strip afterSign — no notarization on quick builds.
|
|
54
|
+
delete baseConfig.afterSign;
|
|
55
|
+
|
|
56
|
+
// Pick host platform + host arch.
|
|
57
|
+
const platform = process.platform; // 'darwin' | 'win32' | 'linux'
|
|
58
|
+
const arch = process.arch; // 'arm64' | 'x64'
|
|
59
|
+
|
|
60
|
+
const opts = {
|
|
61
|
+
config: baseConfig,
|
|
62
|
+
publish: 'never',
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// Map host to electron-builder's targets parameter.
|
|
66
|
+
const targets = {};
|
|
67
|
+
if (platform === 'darwin') {
|
|
68
|
+
targets.mac = builder.Platform.MAC.createTarget('dir', builder.Arch[arch] || builder.Arch.x64);
|
|
69
|
+
} else if (platform === 'win32') {
|
|
70
|
+
targets.win = builder.Platform.WINDOWS.createTarget('dir', builder.Arch[arch] || builder.Arch.x64);
|
|
71
|
+
} else if (platform === 'linux') {
|
|
72
|
+
targets.linux = builder.Platform.LINUX.createTarget('dir', builder.Arch[arch] || builder.Arch.x64);
|
|
73
|
+
} else {
|
|
74
|
+
return done(new Error(`Unsupported host platform: ${platform}`));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// electron-builder.build accepts `targets` as a Map<Platform, Map<Arch, string[]>>.
|
|
78
|
+
// The createTarget() helper returns that structure for one platform; merge them into
|
|
79
|
+
// the opts when more than one is desired (we only build one here, for the host).
|
|
80
|
+
opts.targets = Object.values(targets)[0];
|
|
81
|
+
|
|
82
|
+
logger.log(`Quick-packaging for ${platform}-${arch} (--dir, no installer, no notarize)...`);
|
|
83
|
+
|
|
84
|
+
builder.build(opts)
|
|
85
|
+
.then((artifacts) => {
|
|
86
|
+
const list = (artifacts || []).map((a) => path.relative(projectRoot, a));
|
|
87
|
+
logger.log(`Produced ${list.length} artifact(s):`);
|
|
88
|
+
list.forEach((a) => logger.log(` • ${a}`));
|
|
89
|
+
|
|
90
|
+
// Print the runnable path explicitly — it's what the user actually wants.
|
|
91
|
+
const runnable = list.find((a) => a.endsWith('.app') || a.endsWith('.exe') || (!path.extname(a) && a.includes('linux-unpacked')));
|
|
92
|
+
if (runnable) {
|
|
93
|
+
logger.log('');
|
|
94
|
+
logger.log(`▶ Launch: open "${runnable}"`);
|
|
95
|
+
}
|
|
96
|
+
done();
|
|
97
|
+
})
|
|
98
|
+
.catch((e) => {
|
|
99
|
+
logger.error(`electron-builder failed: ${e.message}`);
|
|
100
|
+
done(e);
|
|
101
|
+
});
|
|
102
|
+
};
|