@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,107 @@
|
|
|
1
|
+
// Renderer-layer suite — asserts the `window.desktop` surface exposed by preload is shaped
|
|
2
|
+
// correctly and that the storage proxy round-trips through IPC into the main store.
|
|
3
|
+
//
|
|
4
|
+
// Runs inside a hidden BrowserWindow spawned by the test harness. The renderer harness
|
|
5
|
+
// reconstructs each `run` function via `new Function('ctx', body)` so the function bodies
|
|
6
|
+
// here can only reference `ctx` and `window` — no closures over module scope.
|
|
7
|
+
|
|
8
|
+
const defineCases = require('../../../vendor/devkit/test/define-cases.js');
|
|
9
|
+
|
|
10
|
+
module.exports = defineCases({
|
|
11
|
+
type: 'suite',
|
|
12
|
+
layer: 'renderer',
|
|
13
|
+
description: 'window.desktop surface + storage proxy roundtrip',
|
|
14
|
+
tests: [
|
|
15
|
+
{
|
|
16
|
+
name: 'window.desktop is exposed and is an object',
|
|
17
|
+
run: (ctx) => {
|
|
18
|
+
ctx.expect(typeof window.desktop).toBe('object');
|
|
19
|
+
ctx.expect(window.desktop).toBeTruthy();
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'window.desktop.ipc has invoke / on / send',
|
|
24
|
+
run: (ctx) => {
|
|
25
|
+
ctx.expect(typeof window.desktop.ipc.invoke).toBe('function');
|
|
26
|
+
ctx.expect(typeof window.desktop.ipc.on).toBe('function');
|
|
27
|
+
ctx.expect(typeof window.desktop.ipc.send).toBe('function');
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
// wave-5 F4: ipc.on used to return ipcRenderer (stripped to a useless
|
|
32
|
+
// object across the contextBridge) — docs/ipc.md promises an unsubscribe fn.
|
|
33
|
+
name: 'ipc.on returns an unsubscribe function (docs contract)',
|
|
34
|
+
run: (ctx) => {
|
|
35
|
+
const off = window.desktop.ipc.on('em-test:noop-channel', () => {});
|
|
36
|
+
ctx.expect(typeof off).toBe('function');
|
|
37
|
+
off(); // must not throw
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'window.desktop.storage has get / set / delete / has / clear',
|
|
42
|
+
run: (ctx) => {
|
|
43
|
+
ctx.expect(typeof window.desktop.storage.get).toBe('function');
|
|
44
|
+
ctx.expect(typeof window.desktop.storage.set).toBe('function');
|
|
45
|
+
ctx.expect(typeof window.desktop.storage.delete).toBe('function');
|
|
46
|
+
ctx.expect(typeof window.desktop.storage.has).toBe('function');
|
|
47
|
+
ctx.expect(typeof window.desktop.storage.clear).toBe('function');
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'window.desktop.logger has log / warn / error',
|
|
52
|
+
run: (ctx) => {
|
|
53
|
+
ctx.expect(typeof window.desktop.logger.log).toBe('function');
|
|
54
|
+
ctx.expect(typeof window.desktop.logger.warn).toBe('function');
|
|
55
|
+
ctx.expect(typeof window.desktop.logger.error).toBe('function');
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'window.desktop.autoUpdater has getStatus / checkNow / installNow',
|
|
60
|
+
run: (ctx) => {
|
|
61
|
+
ctx.expect(typeof window.desktop.autoUpdater.getStatus).toBe('function');
|
|
62
|
+
ctx.expect(typeof window.desktop.autoUpdater.checkNow).toBe('function');
|
|
63
|
+
ctx.expect(typeof window.desktop.autoUpdater.installNow).toBe('function');
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'storage.set + storage.get round-trips through IPC',
|
|
68
|
+
run: async (ctx) => {
|
|
69
|
+
const key = '__em_renderer_test_value';
|
|
70
|
+
await window.desktop.storage.set(key, { hello: 'world', n: 42 });
|
|
71
|
+
const value = await window.desktop.storage.get(key);
|
|
72
|
+
ctx.expect(value).toEqual({ hello: 'world', n: 42 });
|
|
73
|
+
await window.desktop.storage.delete(key);
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'storage.has reports correctly',
|
|
78
|
+
run: async (ctx) => {
|
|
79
|
+
const key = '__em_renderer_has_test';
|
|
80
|
+
await window.desktop.storage.set(key, 'x');
|
|
81
|
+
const yes = await window.desktop.storage.has(key);
|
|
82
|
+
ctx.expect(yes).toBe(true);
|
|
83
|
+
await window.desktop.storage.delete(key);
|
|
84
|
+
const no = await window.desktop.storage.has(key);
|
|
85
|
+
ctx.expect(no).toBe(false);
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'storage.delete removes the key',
|
|
90
|
+
run: async (ctx) => {
|
|
91
|
+
const key = '__em_renderer_delete_test';
|
|
92
|
+
await window.desktop.storage.set(key, 'gone');
|
|
93
|
+
await window.desktop.storage.delete(key);
|
|
94
|
+
const value = await window.desktop.storage.get(key, 'fallback');
|
|
95
|
+
ctx.expect(value).toBe('fallback');
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'autoUpdater.getStatus returns a status object',
|
|
100
|
+
run: async (ctx) => {
|
|
101
|
+
const status = await window.desktop.autoUpdater.getStatus();
|
|
102
|
+
ctx.expect(status).toBeDefined();
|
|
103
|
+
ctx.expect(typeof status.code).toBe('string');
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Fingerprint a build-output tree: one line per file — relative path, size, mtime.
|
|
2
|
+
//
|
|
3
|
+
// Used by the boot layer to prove a boot-test run leaves the project's REAL dist/
|
|
4
|
+
// untouched (#110): the runner records the snapshot before the test build, ships it in
|
|
5
|
+
// the boot spec, and the boot suite re-reads the same tree from inside the booted app
|
|
6
|
+
// and compares. A missing tree snapshots as the empty string, so "absent before, absent
|
|
7
|
+
// after" passes and "absent before, written during the run" fails.
|
|
8
|
+
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
|
|
12
|
+
module.exports = function distSnapshot(dir) {
|
|
13
|
+
const lines = [];
|
|
14
|
+
walk(dir, dir, lines);
|
|
15
|
+
return lines.sort().join('\n');
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
function walk(root, current, out) {
|
|
19
|
+
let entries;
|
|
20
|
+
try {
|
|
21
|
+
entries = fs.readdirSync(current, { withFileTypes: true });
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return; // absent (or unreadable) tree — nothing to fingerprint
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
const abs = path.join(current, entry.name);
|
|
28
|
+
if (entry.isDirectory()) {
|
|
29
|
+
walk(root, abs, out);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// lstat, not stat — a symlink is recorded as itself, never followed.
|
|
33
|
+
const stats = fs.lstatSync(abs);
|
|
34
|
+
out.push(`${path.relative(root, abs)}\t${stats.size}\t${stats.mtimeMs}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// TEST_EXTENDED_MODE warning — SSOT for consistent messaging.
|
|
2
|
+
//
|
|
3
|
+
// The headline + shape live in @omega.js/devkit (mirrored across @omega.js/backend/BXM/UJM); these
|
|
4
|
+
// detail lines describe @omega.js/desktop's blast radius. Used by the test command (printed to
|
|
5
|
+
// console + teed to logs/test.log).
|
|
6
|
+
const { makeExtendedModeWarning } = require('../../vendor/devkit/test/extended-mode-warning.js');
|
|
7
|
+
|
|
8
|
+
const EXTENDED_MODE_WARNING = makeExtendedModeWarning([
|
|
9
|
+
'Tests that hit real external services (Firebase, analytics, update feeds) are ENABLED!',
|
|
10
|
+
'This will make real network calls against live backends.',
|
|
11
|
+
]);
|
|
12
|
+
|
|
13
|
+
module.exports = { EXTENDED_MODE_WARNING };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Resolve the consumer app's root directory at runtime.
|
|
2
|
+
//
|
|
3
|
+
// Why this exists:
|
|
4
|
+
// `process.cwd()` is the project directory in dev (when launched via `npm start` /
|
|
5
|
+
// gulp/serve), but in a PACKAGED .app it's `/` (or the user's home dir, depending on
|
|
6
|
+
// how the app was launched). That breaks every `path.join(process.cwd(), 'dist', ...)`
|
|
7
|
+
// call in lib/* — they end up trying to read `/dist/views/main/index.html` and fail
|
|
8
|
+
// with ERR_FILE_NOT_FOUND.
|
|
9
|
+
//
|
|
10
|
+
// What it returns:
|
|
11
|
+
// - In Electron context: `app.getAppPath()` — the consumer's app dir, which is the
|
|
12
|
+
// extracted asar mount point in production and the project root in dev.
|
|
13
|
+
// - Outside Electron (tests, scaffolding scripts): falls back to `process.cwd()`.
|
|
14
|
+
//
|
|
15
|
+
// Always prefer this over `process.cwd()` for runtime path resolution in lib/*.
|
|
16
|
+
|
|
17
|
+
module.exports = function appRoot() {
|
|
18
|
+
// In main, `electron.app.getAppPath` is the right answer. In renderer/preload
|
|
19
|
+
// / plain Node, `app` is undefined — fall through to cwd.
|
|
20
|
+
// In renderer bundles (target: 'web'), require is not available — skip.
|
|
21
|
+
if (typeof require !== 'undefined') {
|
|
22
|
+
try {
|
|
23
|
+
const electron = require('electron');
|
|
24
|
+
if (electron?.app?.getAppPath) return electron.app.getAppPath();
|
|
25
|
+
} catch (_) {}
|
|
26
|
+
}
|
|
27
|
+
return typeof process !== 'undefined' ? process.cwd() : '/';
|
|
28
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Shared devkit module — vendored into dist/vendor/devkit at prepare time by the
|
|
2
|
+
// preparePackage `after` hook. This shim keeps the framework's internal require
|
|
3
|
+
// paths stable while the implementation lives in @omega.js/devkit.
|
|
4
|
+
module.exports = require('../vendor/devkit/attach-log-file.js');
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// The build-mode pipeline shared by the `build`, `package`, and `publish` verbs.
|
|
2
|
+
//
|
|
3
|
+
// The CLI verbs are canonical and the synced projectScripts are thin
|
|
4
|
+
// `omega <verb>` aliases, so a verb must run the pipeline ITSELF and never
|
|
5
|
+
// shell back to `npm run build` / `npm run publish` — that would recurse. Each
|
|
6
|
+
// verb declares its plan as data (env flags + ordered steps) and this runner
|
|
7
|
+
// executes it; `npm run gulp -- <task>` is the one safe shell-out (the consumer's
|
|
8
|
+
// `gulp` script is bare `gulp`, so there's no alias to recurse through).
|
|
9
|
+
|
|
10
|
+
// Libraries
|
|
11
|
+
const { execute } = require('node-powertools');
|
|
12
|
+
|
|
13
|
+
function gulpCommand(task) {
|
|
14
|
+
return `npm run gulp -- ${task}`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Default step implementations — required lazily so requiring a plan never
|
|
18
|
+
// loads the whole command surface.
|
|
19
|
+
//
|
|
20
|
+
// There is no `setup` step any more (#675): the local half runs inside the gulp
|
|
21
|
+
// `defaults` task, which is the first step of every gulp build. What the plans
|
|
22
|
+
// still need before signing is the Apple artifacts (#678) — `certs`.
|
|
23
|
+
const RUNNERS = {
|
|
24
|
+
clean: (options) => require('../commands/clean.js')(options),
|
|
25
|
+
certs: () => {
|
|
26
|
+
const Manager = new (require('../build.js'));
|
|
27
|
+
require('./deliver-certs.js').deliverTargetCerts({
|
|
28
|
+
projectDir: Manager.getRootPath('project'),
|
|
29
|
+
logger: Manager.logger('certs'),
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
'validate-certs': (options) => require('../commands/validate-certs.js')(options),
|
|
33
|
+
gulp: (options, step) => execute(gulpCommand(step.task), { log: true }),
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
async function runPipeline(plan, options, runners) {
|
|
37
|
+
options = options || {};
|
|
38
|
+
runners = runners || RUNNERS;
|
|
39
|
+
|
|
40
|
+
// Set in-process so every child (gulp → esbuild → electron-builder) inherits them.
|
|
41
|
+
Object.entries(plan.env || {}).forEach(([key, value]) => {
|
|
42
|
+
process.env[key] = value;
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
for (const step of plan.steps) {
|
|
46
|
+
const runner = runners[step.type];
|
|
47
|
+
|
|
48
|
+
// Plans are authored in this package alongside the runner table — an
|
|
49
|
+
// unknown type is a programmer error, never consumer input.
|
|
50
|
+
if (!runner) {
|
|
51
|
+
throw new Error(`Unknown pipeline step type: ${step.type}`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
await runner(options, step);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = { runPipeline, gulpCommand, RUNNERS };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signing-artifact delivery on the desktop verbs
|
|
3
|
+
* ([#678](https://github.com/Omega-JS-Stack/omega/issues/678)).
|
|
4
|
+
*
|
|
5
|
+
* The copy itself is devkit's (`@omega.js/devkit/certs`) — the ONE delivery
|
|
6
|
+
* step, the same rules the manager's disperse writer rides. What lives here is
|
|
7
|
+
* the desktop FRAMING: which root holds the signing tree, the brand block the
|
|
8
|
+
* `{brand.id}` rules resolve from, and this framework's own voice.
|
|
9
|
+
*
|
|
10
|
+
* The source root is the COMPANY root when the brand is company-managed (the
|
|
11
|
+
* `.omega/company.json` stamp @omega.js/config reads), the brand root
|
|
12
|
+
* otherwise — the same rule disperse used, read through the same one reader.
|
|
13
|
+
* A target outside a brand has no tree and no delivery.
|
|
14
|
+
*/
|
|
15
|
+
const jetpack = require('fs-jetpack');
|
|
16
|
+
const { findBrandRoot, readCompanyRoot, loadConfig } = require('../vendor/config/index.js');
|
|
17
|
+
const { deliverCerts, certsSourceDir } = require('../vendor/devkit/certs.js');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The root holding `.omega/certificates/apple/` for a target: the company
|
|
21
|
+
* workspace when one is stamped, else the brand root.
|
|
22
|
+
*
|
|
23
|
+
* @param {string} projectDir - The target root.
|
|
24
|
+
* @returns {string|null} The source root, or null when the target is not in a brand.
|
|
25
|
+
*/
|
|
26
|
+
function resolveSourceRoot(projectDir) {
|
|
27
|
+
const brandRoot = findBrandRoot(projectDir);
|
|
28
|
+
if (!brandRoot) return null;
|
|
29
|
+
|
|
30
|
+
return readCompanyRoot(brandRoot) || brandRoot;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Deliver this target's Apple artifacts into its own certs dir, so signing
|
|
35
|
+
* finds them on every verb rather than only after a manage run.
|
|
36
|
+
*
|
|
37
|
+
* Reports and returns; it never throws. A brandless target, a tree that was
|
|
38
|
+
* never produced, or a missing artifact are all normal states — the signing
|
|
39
|
+
* lookup and validate-certs are what judge them.
|
|
40
|
+
*
|
|
41
|
+
* @param {object} input
|
|
42
|
+
* @param {string} input.projectDir - The target root.
|
|
43
|
+
* @param {object} input.logger - `{ log, warn, error }`.
|
|
44
|
+
* @returns {{ copied: string[], current: string[], missing: string[] }|null} null when there is no tree.
|
|
45
|
+
*/
|
|
46
|
+
function deliverTargetCerts({ projectDir, logger }) {
|
|
47
|
+
const sourceRoot = resolveSourceRoot(projectDir);
|
|
48
|
+
if (!sourceRoot || !jetpack.exists(certsSourceDir(sourceRoot))) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let brand = null;
|
|
53
|
+
try {
|
|
54
|
+
brand = loadConfig(projectDir, 'desktop').config.brand || null;
|
|
55
|
+
} catch (e) {
|
|
56
|
+
// Unloadable config — the `{brand.id}` rules simply resolve empty; the
|
|
57
|
+
// required rules below still deliver.
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const result = deliverCerts({ sourceRoot, targetDir: projectDir, target: 'desktop', brand });
|
|
61
|
+
|
|
62
|
+
if (result.copied.length > 0) {
|
|
63
|
+
logger.log(`Delivered signing artifacts: ${result.copied.join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = { deliverTargetCerts, resolveSourceRoot };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Where CSC_LINK and APPLE_API_KEY come from when nothing has answered yet
|
|
2
|
+
// ([#678](https://github.com/Omega-JS-Stack/omega/issues/678)).
|
|
3
|
+
//
|
|
4
|
+
// The manager's disperse service used to stamp both into the target's .env as
|
|
5
|
+
// target-relative paths, and only when the file was there. No machine writes a
|
|
6
|
+
// target .env any more, so the build derives them instead: the artifacts are
|
|
7
|
+
// delivered into config/certs/ by every verb (deliver-certs.js), and a delivered
|
|
8
|
+
// file that nothing has pointed at IS the answer.
|
|
9
|
+
//
|
|
10
|
+
// Rules, per key: an env value that is already set always wins (an explicit
|
|
11
|
+
// answer is never overridden), and a file that is not there sets nothing (an
|
|
12
|
+
// unset key lets electron-builder's own skip/auto-discovery logic apply — the
|
|
13
|
+
// same reason sanitize-signing-env.js deletes empty placeholders).
|
|
14
|
+
//
|
|
15
|
+
// APPLE_API_KEY's filename carries the key id, so an unset APPLE_API_KEY_ID
|
|
16
|
+
// means there is no path to derive.
|
|
17
|
+
|
|
18
|
+
const path = require('node:path');
|
|
19
|
+
const jetpack = require('fs-jetpack');
|
|
20
|
+
|
|
21
|
+
const CERTS_DIR = path.join('config', 'certs');
|
|
22
|
+
const DEVELOPER_ID_APPLICATION = 'developer-id-application.p12';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Set the signing paths the delivered artifacts imply. Mutates `env`.
|
|
26
|
+
*
|
|
27
|
+
* @param {object} input
|
|
28
|
+
* @param {object} input.env - The env map to derive into (the build's process env).
|
|
29
|
+
* @param {string} input.projectDir - The target root (paths are written relative to it).
|
|
30
|
+
* @returns {Array<{ key: string, value: string }>} What was derived — empty when nothing was.
|
|
31
|
+
*/
|
|
32
|
+
function deriveSigningEnv({ env, projectDir }) {
|
|
33
|
+
const derived = [];
|
|
34
|
+
|
|
35
|
+
const candidates = [
|
|
36
|
+
{ key: 'CSC_LINK', file: DEVELOPER_ID_APPLICATION },
|
|
37
|
+
{ key: 'APPLE_API_KEY', file: env.APPLE_API_KEY_ID ? `AuthKey_${env.APPLE_API_KEY_ID}.p8` : null },
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
for (const { key, file } of candidates) {
|
|
41
|
+
if (!file) continue;
|
|
42
|
+
if (typeof env[key] === 'string' && env[key].trim() !== '') continue;
|
|
43
|
+
|
|
44
|
+
const relative = path.join(CERTS_DIR, file);
|
|
45
|
+
if (!jetpack.exists(path.join(projectDir, relative))) continue;
|
|
46
|
+
|
|
47
|
+
env[key] = relative;
|
|
48
|
+
derived.push({ key, value: relative });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return derived;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = deriveSigningEnv;
|
|
55
|
+
module.exports.CERTS_DIR = CERTS_DIR;
|
|
56
|
+
module.exports.DEVELOPER_ID_APPLICATION = DEVELOPER_ID_APPLICATION;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Resolve the build OUTPUT directory for a project root.
|
|
2
|
+
//
|
|
3
|
+
// Default `<root>/dist` — what every gulp task joined by hand until #110. The ONE seam:
|
|
4
|
+
// `OMEGA_BUILD_OUTPUT` redirects the whole build output elsewhere, so a boot-test build
|
|
5
|
+
// never interleaves writes with a concurrent `npm start` watcher's dist/. An absolute
|
|
6
|
+
// value is used as-is; a relative one resolves against the project root.
|
|
7
|
+
//
|
|
8
|
+
// Build-time only — the runtime (window-manager, tray) still reads `<appRoot>/dist`,
|
|
9
|
+
// because the boot runner stages an app root whose dist IS the redirected output.
|
|
10
|
+
|
|
11
|
+
const path = require('path');
|
|
12
|
+
|
|
13
|
+
module.exports = function distRoot(root) {
|
|
14
|
+
const override = process.env.OMEGA_BUILD_OUTPUT;
|
|
15
|
+
|
|
16
|
+
if (!override) {
|
|
17
|
+
return path.join(root, 'dist');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return path.isAbsolute(override) ? override : path.resolve(root, override);
|
|
21
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Resolve the Node.js version that Electron's bundled runtime ships with, by querying the
|
|
2
|
+
// official electron releases feed. Returns the major version (e.g. "24") so we can write
|
|
3
|
+
// `.nvmrc` and `engines.node` from it.
|
|
4
|
+
//
|
|
5
|
+
// Same pattern as legacy @omega.js/desktop's `process_checkNodeVersion` — fetch releases.electronjs.org once
|
|
6
|
+
// per setup, find the entry matching the consumer's installed electron version, return its
|
|
7
|
+
// `node` field's major.
|
|
8
|
+
|
|
9
|
+
const wonderfulFetch = require('wonderful-fetch');
|
|
10
|
+
const wonderfulVersion = require('wonderful-version');
|
|
11
|
+
|
|
12
|
+
const RELEASES_URL = 'https://releases.electronjs.org/releases.json';
|
|
13
|
+
|
|
14
|
+
let cachedReleases = null;
|
|
15
|
+
|
|
16
|
+
async function fetchReleases() {
|
|
17
|
+
if (cachedReleases) return cachedReleases;
|
|
18
|
+
const data = await wonderfulFetch(RELEASES_URL, { response: 'json', tries: 3 });
|
|
19
|
+
cachedReleases = Array.isArray(data) ? data : [];
|
|
20
|
+
return cachedReleases;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Resolve the Node major for a given electron version (e.g. '41.0.0' or '^41.0.0' → '24').
|
|
24
|
+
// Returns null on miss / network failure — caller should fall back gracefully.
|
|
25
|
+
async function resolveNodeMajorForElectron(electronVersion) {
|
|
26
|
+
if (!electronVersion) return null;
|
|
27
|
+
const electronMajor = wonderfulVersion.major(electronVersion);
|
|
28
|
+
if (!electronMajor) return null;
|
|
29
|
+
|
|
30
|
+
let releases;
|
|
31
|
+
try {
|
|
32
|
+
releases = await fetchReleases();
|
|
33
|
+
} catch (e) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Find the *.0.0 release for this electron major (matches legacy @omega.js/desktop's behavior — the .0.0 of
|
|
38
|
+
// each major is the canonical Node version for the line; later patch/minor electrons may bump
|
|
39
|
+
// Node within the line but the major-Node mapping is stable).
|
|
40
|
+
const match = releases.find((r) => r.version === `${electronMajor}.0.0`);
|
|
41
|
+
if (!match || !match.node) return null;
|
|
42
|
+
return wonderfulVersion.major(match.node);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
module.exports = {
|
|
46
|
+
resolveNodeMajorForElectron,
|
|
47
|
+
fetchReleases,
|
|
48
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// The esbuild targets the three bundles compile to — read from the PINNED
|
|
2
|
+
// Electron itself ([#737](https://github.com/Omega-JS-Stack/omega/issues/737)).
|
|
3
|
+
//
|
|
4
|
+
// webpack encoded this as `target: 'electron-main' | 'electron-preload' | 'web'`
|
|
5
|
+
// and guessed a conservative syntax floor from its own tables. esbuild splits
|
|
6
|
+
// the same fact into `platform` (which the build task states) and `target` (the
|
|
7
|
+
// syntax floor), and the floor is a REAL number: the Node the main process runs
|
|
8
|
+
// and the Chromium the renderer runs, both compiled into the binary a consumer
|
|
9
|
+
// has pinned. Asking the binary is the only answer that stays right when the
|
|
10
|
+
// consumer bumps Electron — a hand-kept Electron→Node/Chromium table drifts on
|
|
11
|
+
// every release, and the releases feed
|
|
12
|
+
// ([electron-node-version.js](electron-node-version.js)) needs a network a
|
|
13
|
+
// build must never need.
|
|
14
|
+
//
|
|
15
|
+
// `ELECTRON_RUN_AS_NODE` runs the binary as plain Node: no window, no dock icon,
|
|
16
|
+
// no focus stolen. The probe costs one spawn per build and is memoized per
|
|
17
|
+
// binary path.
|
|
18
|
+
//
|
|
19
|
+
// A binary that cannot be run is an EXPECTED external condition, not a broken
|
|
20
|
+
// invariant: a CI job with ELECTRON_SKIP_BINARY_DOWNLOAD set has a package and
|
|
21
|
+
// no executable. That build gets `null` targets, which the caller reads as "no
|
|
22
|
+
// syntax floor" (esbuild's default), and a warn line saying so — never a
|
|
23
|
+
// silently-invented version.
|
|
24
|
+
|
|
25
|
+
const { execFileSync } = require('child_process');
|
|
26
|
+
|
|
27
|
+
const cache = new Map();
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The pinned Electron's own Node and Chromium versions, as esbuild targets.
|
|
31
|
+
* @param {string} binary - path to the Electron executable (`require('electron')`)
|
|
32
|
+
* @param {object} [options]
|
|
33
|
+
* @param {object} [options.logger] - logger with `warn` (a failed probe explains itself)
|
|
34
|
+
* @returns {{ node: string|null, chrome: string|null, electron: string|null }} esbuild target strings
|
|
35
|
+
*/
|
|
36
|
+
module.exports = function electronTargets(binary, options) {
|
|
37
|
+
if (cache.has(binary)) return cache.get(binary);
|
|
38
|
+
|
|
39
|
+
let targets = { node: null, chrome: null, electron: null };
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
const output = execFileSync(binary, ['-p', 'JSON.stringify(process.versions)'], {
|
|
43
|
+
encoding: 'utf8',
|
|
44
|
+
env: { ...process.env, ELECTRON_RUN_AS_NODE: '1' },
|
|
45
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
46
|
+
timeout: 60000,
|
|
47
|
+
});
|
|
48
|
+
// The LAST line, not the whole output: Electron writes its own diagnostics
|
|
49
|
+
// to stdout before running the script (a GPU or sandbox notice on Linux, a
|
|
50
|
+
// Squirrel line on Windows), and `-p` prints the value last. Parsing the
|
|
51
|
+
// whole buffer would fail on exactly the machines that talk the most.
|
|
52
|
+
const versions = JSON.parse(output.trim().split('\n').pop());
|
|
53
|
+
targets = {
|
|
54
|
+
// Node takes the full version (esbuild reads `node24.18.0`); Chromium
|
|
55
|
+
// ships four parts and esbuild reads at most three, so it takes the major
|
|
56
|
+
// — which is the only part a syntax floor turns on anyway.
|
|
57
|
+
node: versions.node ? `node${versions.node}` : null,
|
|
58
|
+
chrome: versions.chrome ? `chrome${versions.chrome.split('.')[0]}` : null,
|
|
59
|
+
electron: versions.electron || null,
|
|
60
|
+
};
|
|
61
|
+
} catch (e) {
|
|
62
|
+
// Called ON the logger, never as a detached reference: the devkit Logger
|
|
63
|
+
// reads its `[@omega.js/<package>:<module>]` tag off `this`, so a bare
|
|
64
|
+
// `const warn = logger.warn` prints `[undefined:undefined]`.
|
|
65
|
+
if (options && options.logger) {
|
|
66
|
+
options.logger.warn(`Could not read the Electron runtime versions from ${binary} (${e.message}) — bundles compile with no syntax floor.`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
cache.set(binary, targets);
|
|
71
|
+
return targets;
|
|
72
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// format-fetch-error — flatten a fetch/network error into one short, log-safe line.
|
|
2
|
+
//
|
|
3
|
+
// wonderful-fetch's buildError() uses the ENTIRE response body as `error.message`.
|
|
4
|
+
// When a brand-site endpoint is missing (remote-config, remote-scripts), that body
|
|
5
|
+
// is a full HTML 404 page — dumping it into the console/runtime.log buries real
|
|
6
|
+
// output, and re-spams on every periodic poll. This helper:
|
|
7
|
+
// 1. Swaps HTML bodies for a short human description (markup is noise in a log).
|
|
8
|
+
// 2. Prefixes the HTTP status when the error carries one (`error.status`).
|
|
9
|
+
// 3. Collapses whitespace to a single line and caps the length.
|
|
10
|
+
//
|
|
11
|
+
// Usage:
|
|
12
|
+
// const formatFetchError = require('../utils/format-fetch-error.js');
|
|
13
|
+
// fetch(url, opts).catch((e) => logger.warn(`fetch failed: ${formatFetchError(e)}`));
|
|
14
|
+
|
|
15
|
+
const MAX_LENGTH = 200;
|
|
16
|
+
|
|
17
|
+
function formatFetchError(error, maxLength) {
|
|
18
|
+
const max = maxLength || MAX_LENGTH;
|
|
19
|
+
const status = (error && typeof error.status === 'number') ? `HTTP ${error.status}: ` : '';
|
|
20
|
+
|
|
21
|
+
// Flatten to one line — embedded newlines break grep and bury adjacent log lines.
|
|
22
|
+
let message = String((error && error.message) || error || 'Unknown error')
|
|
23
|
+
.replace(/\s+/g, ' ')
|
|
24
|
+
.trim();
|
|
25
|
+
|
|
26
|
+
// An HTML page in the message is pure noise — name it instead of printing it.
|
|
27
|
+
if (/^<!doctype\b|^<html\b/i.test(message)) {
|
|
28
|
+
message = 'response was an HTML page, not the expected resource';
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (message.length > max) {
|
|
32
|
+
message = `${message.slice(0, max)}… [truncated]`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return `${status}${message}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = formatFetchError;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Shared GitHub helpers used by push-secrets and the release pipeline.
|
|
2
|
+
//
|
|
3
|
+
// WHICH repo a verb addresses is not decided here: the app repo is
|
|
4
|
+
// @omega.js/config's `brandRepo` and the releases repo its `releasesRepo`, from
|
|
5
|
+
// config/omega.json5 alone (#799). The old package.json/git-remote discovery is
|
|
6
|
+
// gone: a brand nested in another repo (a target inside a brand monorepo, the
|
|
7
|
+
// playground inside the framework monorepo) resolved to the ENCLOSING repo.
|
|
8
|
+
//
|
|
9
|
+
// Octokit factory: returns an authenticated client when GH_TOKEN is set. Returns null otherwise so
|
|
10
|
+
// callers can choose to no-op or bail with a friendly message.
|
|
11
|
+
//
|
|
12
|
+
// Repo ensure: idempotently create a repo under <owner> if it doesn't exist. Used by the
|
|
13
|
+
// deploy precheck to auto-provision the brand's public releases repo.
|
|
14
|
+
|
|
15
|
+
// silent: true — pass a no-op logger so transient 404s during polling (e.g. fetching
|
|
16
|
+
// in-progress job logs) don't spam the console. Errors still surface via thrown rejections.
|
|
17
|
+
function getOctokit(opts = {}) {
|
|
18
|
+
const token = process.env.GH_TOKEN;
|
|
19
|
+
if (!token) return null;
|
|
20
|
+
const { Octokit } = require('@octokit/rest');
|
|
21
|
+
const config = { auth: token };
|
|
22
|
+
if (opts.silent) {
|
|
23
|
+
const noop = () => {};
|
|
24
|
+
config.log = { debug: noop, info: noop, warn: noop, error: noop };
|
|
25
|
+
}
|
|
26
|
+
return new Octokit(config);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Idempotent: returns true if the repo exists (created or already there), false on failure.
|
|
30
|
+
// Honors the `owner` distinction between user vs. org — the API endpoints differ.
|
|
31
|
+
async function ensureRepo(octokit, owner, repo, opts = {}) {
|
|
32
|
+
const description = opts.description || '';
|
|
33
|
+
const isPrivate = opts.private === true;
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
await octokit.rest.repos.get({ owner, repo });
|
|
37
|
+
return { created: false, exists: true };
|
|
38
|
+
} catch (err) {
|
|
39
|
+
if (err.status !== 404) throw err;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Need to create. Check if owner is the authenticated user or an org.
|
|
43
|
+
let isOrg = false;
|
|
44
|
+
try {
|
|
45
|
+
const { data: me } = await octokit.rest.users.getAuthenticated();
|
|
46
|
+
isOrg = me.login.toLowerCase() !== owner.toLowerCase();
|
|
47
|
+
} catch (e) {
|
|
48
|
+
isOrg = true;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const params = {
|
|
52
|
+
name: repo,
|
|
53
|
+
description,
|
|
54
|
+
private: isPrivate,
|
|
55
|
+
has_issues: true,
|
|
56
|
+
has_projects: false,
|
|
57
|
+
has_wiki: false,
|
|
58
|
+
auto_init: true,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
if (isOrg) {
|
|
62
|
+
await octokit.rest.repos.createInOrg({ org: owner, ...params });
|
|
63
|
+
} else {
|
|
64
|
+
await octokit.rest.repos.createForAuthenticatedUser(params);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return { created: true, exists: true };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
module.exports = {
|
|
71
|
+
getOctokit,
|
|
72
|
+
ensureRepo,
|
|
73
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Loads a JS module from an arbitrary path on disk (e.g. consumer's src/tray/index.js).
|
|
2
|
+
//
|
|
3
|
+
// Used by tray/menu/context-menu to load consumer-defined definition files. A bundler would
|
|
4
|
+
// normally try to resolve `require(<dynamicPath>)` at build time, which can never work for a
|
|
5
|
+
// runtime path, so we use Node's `module.createRequire(...)` to get a real require function.
|
|
6
|
+
// (In the webpack era this also drew a noisy "Critical dependency" warning at build time; the
|
|
7
|
+
// runtime behavior was correct then too.)
|
|
8
|
+
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const Module = require('module');
|
|
11
|
+
|
|
12
|
+
// Returns the module.exports of the file, or null if the file doesn't exist.
|
|
13
|
+
// THROWS if the file exists but fails to load (syntax error, throws at module-eval, etc.).
|
|
14
|
+
// Callers can decide whether to treat load errors as fatal — most should.
|
|
15
|
+
// On success, also clears Node's require cache for the file so subsequent reloads pick up edits.
|
|
16
|
+
function loadConsumerFile(absPath) {
|
|
17
|
+
const fs = require('fs');
|
|
18
|
+
if (!fs.existsSync(absPath)) return null;
|
|
19
|
+
|
|
20
|
+
const consumerRequire = Module.createRequire(path.join(process.cwd(), 'package.json'));
|
|
21
|
+
const resolved = consumerRequire.resolve(absPath);
|
|
22
|
+
delete consumerRequire.cache[resolved];
|
|
23
|
+
return consumerRequire(resolved);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = loadConsumerFile;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Shared devkit module — vendored into dist/vendor/devkit at prepare time by the
|
|
2
|
+
// preparePackage `after` hook. This shim keeps the framework's internal require
|
|
3
|
+
// paths stable while the implementation lives in @omega.js/devkit (@omega.js/desktop's copy was
|
|
4
|
+
// the canonical seed — quote normalization + order-safe key substitution).
|
|
5
|
+
module.exports = require('../vendor/devkit/merge-line-files.js');
|