@omega.js/web 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 +640 -0
- package/bin/omega +2 -0
- package/bin/omega-web +2 -0
- package/bin/omg +2 -0
- package/core/_includes/admin/sections/sidebar.json +100 -0
- package/core/_includes/admin/sections/topbar.json +11 -0
- package/core/_includes/backend/sections/sidebar.json +39 -0
- package/core/_includes/backend/sections/topbar.json +16 -0
- package/core/_includes/core/body.html +102 -0
- package/core/_includes/core/foot.html +536 -0
- package/core/_includes/core/head.html +423 -0
- package/core/_includes/core/pricing/price-per-unit.html +33 -0
- package/core/_includes/core/showcase/entry-body.html +94 -0
- package/core/_includes/core/showcase/index-body.html +43 -0
- package/core/_includes/core/showcase/nav.html +60 -0
- package/core/_includes/frontend/sections/footer.json +74 -0
- package/core/_includes/frontend/sections/nav.json +70 -0
- package/core/_includes/global/sections/account.json +31 -0
- package/core/_includes/modules/engagement/giscus.html +26 -0
- package/core/_layouts/blueprint/404.html +10 -0
- package/core/_layouts/blueprint/about.html +10 -0
- package/core/_layouts/blueprint/account/index.html +11 -0
- package/core/_layouts/blueprint/admin/calendar/index.html +590 -0
- package/core/_layouts/blueprint/admin/dashboard/index.html +301 -0
- package/core/_layouts/blueprint/admin/firebase/index.html +214 -0
- package/core/_layouts/blueprint/admin/posts/editor.html +157 -0
- package/core/_layouts/blueprint/admin/posts/index.html +126 -0
- package/core/_layouts/blueprint/admin/stackblitz/index.html +30 -0
- package/core/_layouts/blueprint/admin/studio/index.html +85 -0
- package/core/_layouts/blueprint/admin/users/index.html +272 -0
- package/core/_layouts/blueprint/admin/users/new.html +82 -0
- package/core/_layouts/blueprint/admin/verts/index.html +204 -0
- package/core/_layouts/blueprint/alternatives/alternative.html +15 -0
- package/core/_layouts/blueprint/alternatives/index.html +10 -0
- package/core/_layouts/blueprint/app.html +10 -0
- package/core/_layouts/blueprint/auth/reset.html +19 -0
- package/core/_layouts/blueprint/auth/signin.html +19 -0
- package/core/_layouts/blueprint/auth/signup.html +19 -0
- package/core/_layouts/blueprint/auth/token.html +19 -0
- package/core/_layouts/blueprint/blog/categories/category.html +8 -0
- package/core/_layouts/blueprint/blog/categories/index.html +11 -0
- package/core/_layouts/blueprint/blog/index.html +10 -0
- package/core/_layouts/blueprint/blog/post.html +5 -0
- package/core/_layouts/blueprint/blog/tags/index.html +11 -0
- package/core/_layouts/blueprint/blog/tags/tag.html +8 -0
- package/core/_layouts/blueprint/careers.md +13 -0
- package/core/_layouts/blueprint/collection/category.html +9 -0
- package/core/_layouts/blueprint/collection/document.html +9 -0
- package/core/_layouts/blueprint/collection/index.html +9 -0
- package/core/_layouts/blueprint/connections/callback.html +11 -0
- package/core/_layouts/blueprint/contact.html +14 -0
- package/core/_layouts/blueprint/dashboard/index.html +10 -0
- package/core/_layouts/blueprint/download.html +20 -0
- package/core/_layouts/blueprint/extension/index.html +14 -0
- package/core/_layouts/blueprint/extension/installed.html +11 -0
- package/core/_layouts/blueprint/feedback.html +10 -0
- package/core/_layouts/blueprint/index.html +16 -0
- package/core/_layouts/blueprint/legal/cookies.md +57 -0
- package/core/_layouts/blueprint/legal/privacy.md +109 -0
- package/core/_layouts/blueprint/legal/terms.md +155 -0
- package/core/_layouts/blueprint/payment/checkout.html +15 -0
- package/core/_layouts/blueprint/payment/confirmation.html +14 -0
- package/core/_layouts/blueprint/portal/email-preferences.html +15 -0
- package/core/_layouts/blueprint/pricing.html +20 -0
- package/core/_layouts/blueprint/status.html +10 -0
- package/core/_layouts/blueprint/team/index.html +10 -0
- package/core/_layouts/blueprint/team/member.html +5 -0
- package/core/_layouts/blueprint/updates/index.html +10 -0
- package/core/_layouts/blueprint/updates/update.html +10 -0
- package/core/_layouts/core/root.html +45 -0
- package/core/_layouts/modules/utilities/redirect.html +129 -0
- package/core/css/_studio.scss +237 -0
- package/core/css/components/_index.scss +146 -0
- package/core/css/core/_.scss +0 -0
- package/core/css/core/_alert.scss +87 -0
- package/core/css/core/_animations.scss +343 -0
- package/core/css/core/_bindings.scss +116 -0
- package/core/css/core/_blog-search.scss +57 -0
- package/core/css/core/_chatsy.scss +61 -0
- package/core/css/core/_consent.scss +424 -0
- package/core/css/core/_custom-font-awesome.scss +146 -0
- package/core/css/core/_exit-popup.scss +42 -0
- package/core/css/core/_generated-badge.scss +33 -0
- package/core/css/core/_initialize.scss +29 -0
- package/core/css/core/_lazy-loading.scss +104 -0
- package/core/css/core/_social-sharing.scss +41 -0
- package/core/css/core/_tones.scss +32 -0
- package/core/css/core/_utilities.scss +157 -0
- package/core/css/main.scss +54 -0
- package/core/css/motion/_index.scss +368 -0
- package/core/css/pages/404/index.scss +0 -0
- package/core/css/pages/admin/calendar/index.scss +692 -0
- package/core/css/pages/admin/firebase/index.scss +33 -0
- package/core/css/pages/admin/index.scss +9 -0
- package/core/css/pages/admin/users/index.scss +9 -0
- package/core/css/pages/admin/verts/index.scss +9 -0
- package/core/css/pages/alternatives/[alternative]/index.scss +0 -0
- package/core/css/pages/blog/[slug].scss +55 -0
- package/core/css/pages/dashboard/account/index.scss +242 -0
- package/core/css/pages/download/index.scss +480 -0
- package/core/css/pages/extension/installed/index.scss +317 -0
- package/core/css/pages/feedback/index.scss +31 -0
- package/core/css/pages/payment/confirmation/index.scss +14 -0
- package/core/css/pages/pricing/index.scss +0 -0
- package/core/css/pages/status/index.scss +162 -0
- package/core/css/pages/test/libraries/layers/index.scss +28 -0
- package/core/css/pages/updates/[update].scss +46 -0
- package/core/css/pages/updates/index.scss +13 -0
- package/core/css/shell/_index.scss +207 -0
- package/core/css/tokens/_index.scss +166 -0
- package/core/icons/flags/ar.svg +1 -0
- package/core/icons/flags/bd.svg +1 -0
- package/core/icons/flags/ca.svg +1 -0
- package/core/icons/flags/ch.svg +1 -0
- package/core/icons/flags/cn.svg +1 -0
- package/core/icons/flags/co.svg +1 -0
- package/core/icons/flags/cw.svg +1 -0
- package/core/icons/flags/cz.svg +1 -0
- package/core/icons/flags/de.svg +1 -0
- package/core/icons/flags/dk.svg +1 -0
- package/core/icons/flags/eg.svg +1 -0
- package/core/icons/flags/es.svg +1 -0
- package/core/icons/flags/fi.svg +1 -0
- package/core/icons/flags/fr.svg +1 -0
- package/core/icons/flags/gb.svg +1 -0
- package/core/icons/flags/gq.svg +1 -0
- package/core/icons/flags/gr.svg +1 -0
- package/core/icons/flags/gt.svg +1 -0
- package/core/icons/flags/hn.svg +1 -0
- package/core/icons/flags/id.svg +1 -0
- package/core/icons/flags/ie.svg +1 -0
- package/core/icons/flags/in.svg +1 -0
- package/core/icons/flags/ir.svg +1 -0
- package/core/icons/flags/it.svg +1 -0
- package/core/icons/flags/jp.svg +1 -0
- package/core/icons/flags/kp.svg +1 -0
- package/core/icons/flags/kr.svg +1 -0
- package/core/icons/flags/ly.svg +1 -0
- package/core/icons/flags/ma.svg +1 -0
- package/core/icons/flags/mu.svg +1 -0
- package/core/icons/flags/mx.svg +1 -0
- package/core/icons/flags/ng.svg +1 -0
- package/core/icons/flags/pa.svg +1 -0
- package/core/icons/flags/ph.svg +1 -0
- package/core/icons/flags/pk.svg +1 -0
- package/core/icons/flags/pt.svg +1 -0
- package/core/icons/flags/ru.svg +1 -0
- package/core/icons/flags/sa.svg +1 -0
- package/core/icons/flags/sd.svg +1 -0
- package/core/icons/flags/se.svg +1 -0
- package/core/icons/flags/th.svg +1 -0
- package/core/icons/flags/tm.svg +1 -0
- package/core/icons/flags/tr.svg +1 -0
- package/core/icons/flags/us.svg +1 -0
- package/core/icons/flags/uy.svg +1 -0
- package/core/icons/flags/vn.svg +1 -0
- package/core/icons/flags/za.svg +1 -0
- package/core/images/exit-popup/subscriber-1.jpg +0 -0
- package/core/images/exit-popup/subscriber-2.jpg +0 -0
- package/core/images/exit-popup/subscriber-3.jpg +0 -0
- package/core/images/exit-popup/subscriber-4.jpg +0 -0
- package/core/images/placeholder/photo-1.jpg +0 -0
- package/core/images/placeholder/photo-2.jpg +0 -0
- package/core/images/placeholder/photo-3.jpg +0 -0
- package/core/js/core/analytics-loader.js +253 -0
- package/core/js/core/app-shell.js +136 -0
- package/core/js/core/appearance.js +195 -0
- package/core/js/core/auth.js +457 -0
- package/core/js/core/complete.js +72 -0
- package/core/js/core/consent.js +384 -0
- package/core/js/core/dev-icon-audit.js +63 -0
- package/core/js/core/dev-palette.js +670 -0
- package/core/js/core/dev-sections.js +53 -0
- package/core/js/core/exit-popup.js +276 -0
- package/core/js/core/initialize.js +8 -0
- package/core/js/core/language-switcher.js +167 -0
- package/core/js/core/lazy-loading.js +479 -0
- package/core/js/core/motion.js +28 -0
- package/core/js/core/query-strings.js +146 -0
- package/core/js/core/service-worker.js +28 -0
- package/core/js/core/social-sharing.js +293 -0
- package/core/js/first-paint.js +35 -0
- package/core/js/layouts/modules/utilities/redirect.js +122 -0
- package/core/js/libs/admin-helpers.js +62 -0
- package/core/js/libs/alert-dismiss.js +35 -0
- package/core/js/libs/analytics.js +368 -0
- package/core/js/libs/auth/email.js +144 -0
- package/core/js/libs/auth/errors.js +119 -0
- package/core/js/libs/auth/forms.js +206 -0
- package/core/js/libs/auth/index.js +181 -0
- package/core/js/libs/auth/oauth.js +394 -0
- package/core/js/libs/auth/orphan.js +110 -0
- package/core/js/libs/auth/password-toggle.js +44 -0
- package/core/js/libs/auth/session-params.js +266 -0
- package/core/js/libs/auth/tracking.js +41 -0
- package/core/js/libs/charts.js +516 -0
- package/core/js/libs/consent-region.js +127 -0
- package/core/js/libs/dev.js +150 -0
- package/core/js/libs/graph.js +201 -0
- package/core/js/libs/initialize-tooltips.js +31 -0
- package/core/js/libs/logger.js +38 -0
- package/core/js/libs/omega-copy.js +89 -0
- package/core/js/libs/path-prefix.js +44 -0
- package/core/js/libs/payment-config.js +76 -0
- package/core/js/libs/recaptcha.js +94 -0
- package/core/js/libs/sale-name.js +295 -0
- package/core/js/libs/showcase-frames.js +37 -0
- package/core/js/libs/srcset.js +69 -0
- package/core/js/libs/tracking-consent.js +161 -0
- package/core/js/main.js +144 -0
- package/core/js/pages/404/index.js +57 -0
- package/core/js/pages/admin/calendar/calendar-core.js +701 -0
- package/core/js/pages/admin/calendar/calendar-events.js +853 -0
- package/core/js/pages/admin/calendar/calendar-renderer.js +807 -0
- package/core/js/pages/admin/calendar/campaign-preview.js +105 -0
- package/core/js/pages/admin/calendar/index.js +40 -0
- package/core/js/pages/admin/firebase/index.js +727 -0
- package/core/js/pages/admin/index.js +531 -0
- package/core/js/pages/admin/posts/editor/index.js +230 -0
- package/core/js/pages/admin/posts/index.js +237 -0
- package/core/js/pages/admin/studio/index.js +538 -0
- package/core/js/pages/admin/users/index.js +669 -0
- package/core/js/pages/admin/users/new/index.js +65 -0
- package/core/js/pages/admin/verts/index.js +407 -0
- package/core/js/pages/alternatives/[alternative]/index.js +17 -0
- package/core/js/pages/app/index.js +135 -0
- package/core/js/pages/blog/[slug].js +132 -0
- package/core/js/pages/blog/_search.mjs +108 -0
- package/core/js/pages/blog/index.js +193 -0
- package/core/js/pages/blog/page/[num]/index.js +7 -0
- package/core/js/pages/connections/callback/index.js +148 -0
- package/core/js/pages/contact/index.js +170 -0
- package/core/js/pages/cookies.js +2 -0
- package/core/js/pages/dashboard/account/index.js +366 -0
- package/core/js/pages/dashboard/account/modules/orders.js +82 -0
- package/core/js/pages/dashboard/account/sections/api-keys.js +149 -0
- package/core/js/pages/dashboard/account/sections/billing.js +1667 -0
- package/core/js/pages/dashboard/account/sections/connections.js +333 -0
- package/core/js/pages/dashboard/account/sections/data-request.js +225 -0
- package/core/js/pages/dashboard/account/sections/delete.js +80 -0
- package/core/js/pages/dashboard/account/sections/notifications.js +167 -0
- package/core/js/pages/dashboard/account/sections/orders.js +151 -0
- package/core/js/pages/dashboard/account/sections/profile.js +200 -0
- package/core/js/pages/dashboard/account/sections/referrals.js +217 -0
- package/core/js/pages/dashboard/account/sections/refund.js +253 -0
- package/core/js/pages/dashboard/account/sections/security.js +726 -0
- package/core/js/pages/dashboard/account/sections/team.js +247 -0
- package/core/js/pages/download/index.js +418 -0
- package/core/js/pages/extension/index.js +164 -0
- package/core/js/pages/extension/installed/index.js +135 -0
- package/core/js/pages/feedback/index.js +193 -0
- package/core/js/pages/legal/_document.js +91 -0
- package/core/js/pages/payment/checkout/index.js +420 -0
- package/core/js/pages/payment/checkout/modules/api.js +139 -0
- package/core/js/pages/payment/checkout/modules/dev-section.js +175 -0
- package/core/js/pages/payment/checkout/modules/discount.js +69 -0
- package/core/js/pages/payment/checkout/modules/pricing.js +73 -0
- package/core/js/pages/payment/checkout/modules/state.js +339 -0
- package/core/js/pages/payment/checkout/modules/tracking.js +54 -0
- package/core/js/pages/payment/confirmation/index.js +91 -0
- package/core/js/pages/payment/confirmation/modules/celebration.js +45 -0
- package/core/js/pages/payment/confirmation/modules/state.js +112 -0
- package/core/js/pages/payment/confirmation/modules/tracking.js +133 -0
- package/core/js/pages/payment/confirmation/modules/verify.js +142 -0
- package/core/js/pages/portal/email-preferences/index.js +183 -0
- package/core/js/pages/pricing/index.js +425 -0
- package/core/js/pages/privacy.js +2 -0
- package/core/js/pages/reset/index.js +12 -0
- package/core/js/pages/signin/index.js +22 -0
- package/core/js/pages/signup/index.js +23 -0
- package/core/js/pages/status/index.js +687 -0
- package/core/js/pages/terms.js +2 -0
- package/core/js/pages/test/components/[category]/[name]/index.js +26 -0
- package/core/js/pages/test/libraries/appearance/index.js +220 -0
- package/core/js/pages/test/libraries/form-manager/index.js +328 -0
- package/core/js/pages/test/libraries/layers/index.js +16 -0
- package/core/js/pages/test/libraries/verts/index.js +68 -0
- package/core/js/pages/test/sections/[category]/[name]/index.js +28 -0
- package/core/js/pages/test/styleguide/index.js +35 -0
- package/core/js/pages/token/index.js +203 -0
- package/core/logos/brandmarks/original/apple-app-store.svg +1 -0
- package/core/logos/brandmarks/original/apple.svg +6 -0
- package/core/logos/brandmarks/original/bitbucket.svg +14 -0
- package/core/logos/brandmarks/original/bitcoin.svg +1 -0
- package/core/logos/brandmarks/original/bluesky.svg +7 -0
- package/core/logos/brandmarks/original/bootstrap.svg +43 -0
- package/core/logos/brandmarks/original/brave.svg +1 -0
- package/core/logos/brandmarks/original/chrome.svg +1 -0
- package/core/logos/brandmarks/original/discord.svg +1 -0
- package/core/logos/brandmarks/original/dropbox.svg +10 -0
- package/core/logos/brandmarks/original/edge.svg +1 -0
- package/core/logos/brandmarks/original/facebook-f.svg +1 -0
- package/core/logos/brandmarks/original/facebook.svg +8 -0
- package/core/logos/brandmarks/original/figma.svg +10 -0
- package/core/logos/brandmarks/original/firefox.svg +1 -0
- package/core/logos/brandmarks/original/github.svg +6 -0
- package/core/logos/brandmarks/original/gitlab.svg +17 -0
- package/core/logos/brandmarks/original/google-a-s.svg +1 -0
- package/core/logos/brandmarks/original/google-chrome-webstore.svg +49 -0
- package/core/logos/brandmarks/original/google-play-store.svg +1 -0
- package/core/logos/brandmarks/original/google-web-search.svg +1 -0
- package/core/logos/brandmarks/original/google.svg +1 -0
- package/core/logos/brandmarks/original/gulp.svg +4 -0
- package/core/logos/brandmarks/original/html-5.svg +1 -0
- package/core/logos/brandmarks/original/instagram.svg +1 -0
- package/core/logos/brandmarks/original/javascript.svg +1 -0
- package/core/logos/brandmarks/original/jira.svg +18 -0
- package/core/logos/brandmarks/original/kick.svg +7 -0
- package/core/logos/brandmarks/original/linkedin.svg +1 -0
- package/core/logos/brandmarks/original/linux.svg +28 -0
- package/core/logos/brandmarks/original/messenger.svg +16 -0
- package/core/logos/brandmarks/original/microsoft.svg +1 -0
- package/core/logos/brandmarks/original/npm.svg +8 -0
- package/core/logos/brandmarks/original/opera.svg +1 -0
- package/core/logos/brandmarks/original/patreon.svg +6 -0
- package/core/logos/brandmarks/original/pinterest.svg +6 -0
- package/core/logos/brandmarks/original/reddit.svg +1 -0
- package/core/logos/brandmarks/original/safari.svg +31 -0
- package/core/logos/brandmarks/original/sass.svg +3 -0
- package/core/logos/brandmarks/original/signal.svg +6 -0
- package/core/logos/brandmarks/original/skype.svg +47 -0
- package/core/logos/brandmarks/original/slack.svg +33 -0
- package/core/logos/brandmarks/original/soundcloud.svg +1 -0
- package/core/logos/brandmarks/original/spotify.svg +5 -0
- package/core/logos/brandmarks/original/steam.svg +6 -0
- package/core/logos/brandmarks/original/telegram.svg +14 -0
- package/core/logos/brandmarks/original/tiktok.svg +1 -0
- package/core/logos/brandmarks/original/trello.svg +16 -0
- package/core/logos/brandmarks/original/tumblr.svg +1 -0
- package/core/logos/brandmarks/original/twitch.svg +6 -0
- package/core/logos/brandmarks/original/twitter.svg +6 -0
- package/core/logos/brandmarks/original/unity.svg +6 -0
- package/core/logos/brandmarks/original/x.svg +7 -0
- package/core/logos/brandmarks/original/yahoo-y.svg +1 -0
- package/core/logos/brandmarks/original/youtube-square.svg +1 -0
- package/core/logos/brandmarks/original/youtube.svg +1 -0
- package/core/logos/combomarks/dark/airbnb.svg +30 -0
- package/core/logos/combomarks/dark/slack.svg +38 -0
- package/core/logos/combomarks/dark/spotify.svg +35 -0
- package/core/logos/combomarks/dark/twilio.svg +26 -0
- package/core/logos/combomarks/dark/weebly.svg +35 -0
- package/core/logos/combomarks/gray/airbnb.svg +33 -0
- package/core/logos/combomarks/gray/alphabet.svg +23 -0
- package/core/logos/combomarks/gray/amazon.svg +38 -0
- package/core/logos/combomarks/gray/boring-company.svg +91 -0
- package/core/logos/combomarks/gray/burberry.svg +239 -0
- package/core/logos/combomarks/gray/embark.svg +21 -0
- package/core/logos/combomarks/gray/fitbit.svg +61 -0
- package/core/logos/combomarks/gray/fred-perry.svg +94 -0
- package/core/logos/combomarks/gray/google.svg +27 -0
- package/core/logos/combomarks/gray/hollister.svg +34 -0
- package/core/logos/combomarks/gray/hubspot.svg +27 -0
- package/core/logos/combomarks/gray/kaplan.svg +33 -0
- package/core/logos/combomarks/gray/lenovo.svg +27 -0
- package/core/logos/combomarks/gray/levis.svg +25 -0
- package/core/logos/combomarks/gray/mapbox.svg +37 -0
- package/core/logos/combomarks/gray/netflix.svg +15 -0
- package/core/logos/combomarks/gray/new-balance.svg +32 -0
- package/core/logos/combomarks/gray/nike.svg +17 -0
- package/core/logos/combomarks/gray/paypal.svg +41 -0
- package/core/logos/combomarks/gray/puma.svg +82 -0
- package/core/logos/combomarks/gray/samsung.svg +26 -0
- package/core/logos/combomarks/gray/shopify.svg +36 -0
- package/core/logos/combomarks/gray/slack.svg +42 -0
- package/core/logos/combomarks/gray/spotify.svg +38 -0
- package/core/logos/combomarks/gray/stripe.svg +24 -0
- package/core/logos/combomarks/gray/tnf.svg +30 -0
- package/core/logos/combomarks/gray/twilio.svg +29 -0
- package/core/logos/combomarks/gray/uber.svg +24 -0
- package/core/logos/combomarks/gray/weebly.svg +38 -0
- package/core/logos/combomarks/original/airbnb.svg +33 -0
- package/core/logos/combomarks/original/alphabet.svg +23 -0
- package/core/logos/combomarks/original/amazon.svg +38 -0
- package/core/logos/combomarks/original/asana.svg +8 -0
- package/core/logos/combomarks/original/boring-company.svg +91 -0
- package/core/logos/combomarks/original/discord.svg +6 -0
- package/core/logos/combomarks/original/embark.svg +24 -0
- package/core/logos/combomarks/original/fitbit.svg +60 -0
- package/core/logos/combomarks/original/github.svg +6 -0
- package/core/logos/combomarks/original/gitlab.svg +20 -0
- package/core/logos/combomarks/original/google.svg +28 -0
- package/core/logos/combomarks/original/hubspot.svg +29 -0
- package/core/logos/combomarks/original/instagram.svg +7 -0
- package/core/logos/combomarks/original/kickstarter.svg +6 -0
- package/core/logos/combomarks/original/lenovo.svg +24 -0
- package/core/logos/combomarks/original/linkedin.svg +6 -0
- package/core/logos/combomarks/original/mapbox.svg +39 -0
- package/core/logos/combomarks/original/mastodon.svg +7 -0
- package/core/logos/combomarks/original/medium.svg +6 -0
- package/core/logos/combomarks/original/meta.svg +22 -0
- package/core/logos/combomarks/original/microsoft.svg +13 -0
- package/core/logos/combomarks/original/monday.svg +12 -0
- package/core/logos/combomarks/original/netflix.svg +15 -0
- package/core/logos/combomarks/original/notion.svg +9 -0
- package/core/logos/combomarks/original/paypal.svg +41 -0
- package/core/logos/combomarks/original/reddit.svg +13 -0
- package/core/logos/combomarks/original/samsung.svg +25 -0
- package/core/logos/combomarks/original/shopify.svg +35 -0
- package/core/logos/combomarks/original/slack.svg +47 -0
- package/core/logos/combomarks/original/spotify.svg +37 -0
- package/core/logos/combomarks/original/stackoverflow.svg +28 -0
- package/core/logos/combomarks/original/stripe.svg +24 -0
- package/core/logos/combomarks/original/tiktok.svg +12 -0
- package/core/logos/combomarks/original/tumblr.svg +6 -0
- package/core/logos/combomarks/original/uber.svg +24 -0
- package/core/logos/combomarks/original/weebly.svg +34 -0
- package/core/logos/combomarks/original/whatsapp.svg +20 -0
- package/core/logos/combomarks/original/youtube.svg +10 -0
- package/core/logos/combomarks/original/zoom.svg +7 -0
- package/core/logos/combomarks/white/airbnb.svg +33 -0
- package/core/logos/combomarks/white/alphabet.svg +23 -0
- package/core/logos/combomarks/white/amazon.svg +38 -0
- package/core/logos/combomarks/white/boring-company.svg +91 -0
- package/core/logos/combomarks/white/embark.svg +21 -0
- package/core/logos/combomarks/white/fitbit.svg +61 -0
- package/core/logos/combomarks/white/google.svg +27 -0
- package/core/logos/combomarks/white/hubspot.svg +27 -0
- package/core/logos/combomarks/white/kaplan.svg +33 -0
- package/core/logos/combomarks/white/lenovo.svg +27 -0
- package/core/logos/combomarks/white/mapbox.svg +37 -0
- package/core/logos/combomarks/white/netflix.svg +15 -0
- package/core/logos/combomarks/white/paypal.svg +40 -0
- package/core/logos/combomarks/white/samsung.svg +26 -0
- package/core/logos/combomarks/white/shopify.svg +36 -0
- package/core/logos/combomarks/white/slack.svg +42 -0
- package/core/logos/combomarks/white/spotify.svg +38 -0
- package/core/logos/combomarks/white/stripe.svg +24 -0
- package/core/logos/combomarks/white/twilio.svg +29 -0
- package/core/logos/combomarks/white/uber.svg +24 -0
- package/core/logos/combomarks/white/weebly.svg +38 -0
- package/defaults/pages/404.md +4 -0
- package/defaults/pages/about.md +4 -0
- package/defaults/pages/admin/calendar/index.html +4 -0
- package/defaults/pages/admin/firebase/index.html +4 -0
- package/defaults/pages/admin/index.md +4 -0
- package/defaults/pages/admin/posts/editor.html +4 -0
- package/defaults/pages/admin/posts/index.html +4 -0
- package/defaults/pages/admin/stackblitz/index.html +4 -0
- package/defaults/pages/admin/studio/index.html +4 -0
- package/defaults/pages/admin/users/index.html +4 -0
- package/defaults/pages/admin/users/new.html +4 -0
- package/defaults/pages/admin/verts/index.html +4 -0
- package/defaults/pages/ads-txt.html +11 -0
- package/defaults/pages/alternatives/index.md +4 -0
- package/defaults/pages/app.md +4 -0
- package/defaults/pages/auth/reset.md +4 -0
- package/defaults/pages/auth/signin.md +4 -0
- package/defaults/pages/auth/signup.md +4 -0
- package/defaults/pages/auth/token.md +4 -0
- package/defaults/pages/blog/categories/category.html +21 -0
- package/defaults/pages/blog/categories.md +4 -0
- package/defaults/pages/blog/index-json.html +27 -0
- package/defaults/pages/blog/tags/tag.html +21 -0
- package/defaults/pages/blog/tags.md +4 -0
- package/defaults/pages/blog.md +22 -0
- package/defaults/pages/careers.md +4 -0
- package/defaults/pages/connections/callback.md +4 -0
- package/defaults/pages/contact.md +4 -0
- package/defaults/pages/dashboard/account.md +4 -0
- package/defaults/pages/dashboard/index.md +12 -0
- package/defaults/pages/download.md +4 -0
- package/defaults/pages/extension/index.html +4 -0
- package/defaults/pages/extension/installed.html +4 -0
- package/defaults/pages/feedback.md +4 -0
- package/defaults/pages/feeds/posts-json.html +40 -0
- package/defaults/pages/feeds/posts-xml.html +38 -0
- package/defaults/pages/humans.html +25 -0
- package/defaults/pages/index.md +4 -0
- package/defaults/pages/legal/cookies.md +4 -0
- package/defaults/pages/legal/privacy.md +4 -0
- package/defaults/pages/legal/terms.md +4 -0
- package/defaults/pages/llms-txt.html +46 -0
- package/defaults/pages/opensearch.html +16 -0
- package/defaults/pages/pages-json.html +42 -0
- package/defaults/pages/payment/checkout.md +4 -0
- package/defaults/pages/payment/confirmation.md +4 -0
- package/defaults/pages/portal/email-preferences.md +4 -0
- package/defaults/pages/pricing.md +4 -0
- package/defaults/pages/redirects/account.md +12 -0
- package/defaults/pages/redirects/admin/dashboard.md +11 -0
- package/defaults/pages/redirects/auth/change-password.md +9 -0
- package/defaults/pages/redirects/auth/forgot.md +9 -0
- package/defaults/pages/redirects/auth/join.md +9 -0
- package/defaults/pages/redirects/auth/login.md +9 -0
- package/defaults/pages/redirects/auth/recover.md +9 -0
- package/defaults/pages/redirects/auth/register.md +9 -0
- package/defaults/pages/redirects/auth/reset-password.md +9 -0
- package/defaults/pages/redirects/billing/cancel.md +9 -0
- package/defaults/pages/redirects/billing/refund.md +9 -0
- package/defaults/pages/robots.html +36 -0
- package/defaults/pages/security-txt.html +11 -0
- package/defaults/pages/sitemap.html +37 -0
- package/defaults/pages/status.md +4 -0
- package/defaults/pages/team/index.md +4 -0
- package/defaults/pages/test/account/dashboard.html +16 -0
- package/defaults/pages/test/index.md +12 -0
- package/defaults/pages/test/libraries/appearance.html +268 -0
- package/defaults/pages/test/libraries/cover.html +50 -0
- package/defaults/pages/test/libraries/error.html +30 -0
- package/defaults/pages/test/libraries/firestore.html +202 -0
- package/defaults/pages/test/libraries/form-manager.html +374 -0
- package/defaults/pages/test/libraries/layers.html +52 -0
- package/defaults/pages/test/libraries/lazy-loading.html +450 -0
- package/defaults/pages/test/libraries/verts.html +149 -0
- package/defaults/pages/test/redirect/external.md +13 -0
- package/defaults/pages/test/redirect/internal.md +13 -0
- package/defaults/pages/test/styleguide/index.html +588 -0
- package/defaults/pages/test/translation/index.md +50 -0
- package/defaults/pages/updates/index.md +4 -0
- package/defaults/sample-posts/2026-01-12-welcome-to-the-blog.md +26 -0
- package/defaults/sample-posts/2026-02-03-a-field-guide-to-good-defaults.md +50 -0
- package/defaults/sample-posts/2026-02-24-shipping-week-notes.md +37 -0
- package/defaults/sample-posts/2026-03-17-the-case-for-one-config.md +36 -0
- package/defaults/sample-posts/2026-04-09-write-release-notes-people-read.md +34 -0
- package/defaults/sample-posts/2026-05-21-dark-mode-done-properly.md +38 -0
- package/defaults/sample-posts/2026-06-02-the-boring-deploy-is-the-good-deploy.md +30 -0
- package/defaults/sample-posts/2026-06-11-naming-things-a-survival-guide.md +30 -0
- package/defaults/sample-posts/2026-06-19-your-pricing-page-is-a-product.md +28 -0
- package/defaults/sample-posts/2026-06-30-email-is-an-api-with-feelings.md +28 -0
- package/defaults/sample-posts/2026-07-08-ship-the-docs-with-the-diff.md +30 -0
- package/defaults/sample-team/avery-quinn.md +22 -0
- package/defaults/sample-team/jordan-reyes.md +25 -0
- package/defaults/sample-team/riley-nakamura.md +22 -0
- package/defaults/sample-team/sam-okafor.md +22 -0
- package/defaults/sample-updates/v1.0.0.md +28 -0
- package/defaults/sample-updates/v1.1.0.md +27 -0
- package/defaults/sample-updates/v1.2.0.md +27 -0
- package/defaults/sample-updates/v1.3.0.md +28 -0
- package/defaults/showcase/components.html +62 -0
- package/defaults/showcase/entry.html +76 -0
- package/defaults/showcase/frame.html +62 -0
- package/defaults/showcase/index.html +59 -0
- package/dist/assets.js +1349 -0
- package/dist/brand-tokens.js +195 -0
- package/dist/build.js +192 -0
- package/dist/cachebreak-html.js +71 -0
- package/dist/cli-run.js +25 -0
- package/dist/cli.js +47 -0
- package/dist/collections.js +183 -0
- package/dist/commands/audit.js +470 -0
- package/dist/commands/build.js +197 -0
- package/dist/commands/clean.js +18 -0
- package/dist/commands/customize.js +125 -0
- package/dist/commands/deploy.js +441 -0
- package/dist/commands/dev.js +1067 -0
- package/dist/commands/install.js +31 -0
- package/dist/commands/lib/deploy-precheck.js +43 -0
- package/dist/commands/lib/ensure-target.js +115 -0
- package/dist/commands/migrate.js +86 -0
- package/dist/commands/purge.js +31 -0
- package/dist/commands/test.js +237 -0
- package/dist/commands/translate.js +57 -0
- package/dist/commands/update.js +22 -0
- package/dist/commands/version.js +11 -0
- package/dist/config-sections.js +245 -0
- package/dist/consumer-scan.js +118 -0
- package/dist/consumer.js +49 -0
- package/dist/customize.js +328 -0
- package/dist/decisions.js +153 -0
- package/dist/dist-audit.js +417 -0
- package/dist/dynamic-pages.js +357 -0
- package/dist/engine.js +1402 -0
- package/dist/firebase-auth-helpers.js +198 -0
- package/dist/font-metrics.js +420 -0
- package/dist/frontmatter-liquid.js +253 -0
- package/dist/github-secrets.js +80 -0
- package/dist/hero-animations.js +170 -0
- package/dist/imagemin.js +261 -0
- package/dist/index.js +41 -0
- package/dist/inline-icons.js +65 -0
- package/dist/language-flags.js +55 -0
- package/dist/layers.js +80 -0
- package/dist/layouts.js +44 -0
- package/dist/limit-collections.js +199 -0
- package/dist/link-resolver.js +303 -0
- package/dist/markdown-images.js +85 -0
- package/dist/merge.js +20 -0
- package/dist/migrate/codemod.js +172 -0
- package/dist/migrate/config-convert.js +448 -0
- package/dist/migrate/consumer-assets.js +130 -0
- package/dist/migrate/index.js +223 -0
- package/dist/migrate/lint.js +108 -0
- package/dist/migrate/rules.js +1929 -0
- package/dist/minify-html.js +148 -0
- package/dist/mode-helpers.js +96 -0
- package/dist/omega-bin.js +7 -0
- package/dist/overrides.js +190 -0
- package/dist/path-prefix.js +167 -0
- package/dist/paths.js +37 -0
- package/dist/pricing.js +301 -0
- package/dist/purge.js +95 -0
- package/dist/redirect-page.js +45 -0
- package/dist/sample-content.js +210 -0
- package/dist/scaffold.js +123 -0
- package/dist/sections.js +810 -0
- package/dist/service-worker.js +200 -0
- package/dist/social-pages.js +142 -0
- package/dist/srcset.js +67 -0
- package/dist/static-assets.js +154 -0
- package/dist/target-shortlinks.js +123 -0
- package/dist/theme-vocabulary.js +76 -0
- package/dist/translate/collect-text-nodes.js +93 -0
- package/dist/translate/default-routes.js +152 -0
- package/dist/translate/generate-defaults.js +297 -0
- package/dist/translate/index.js +568 -0
- package/dist/translate/packaged-defaults.js +127 -0
- package/dist/translate/sitemap.js +108 -0
- package/dist/vendor/account/engine.js +182 -0
- package/dist/vendor/account/features.js +220 -0
- package/dist/vendor/account/index.js +53 -0
- package/dist/vendor/account/schema.js +272 -0
- package/dist/vendor/account/subscription.js +38 -0
- package/dist/vendor/config/company.js +31 -0
- package/dist/vendor/config/defaults.js +173 -0
- package/dist/vendor/config/demo.js +18 -0
- package/dist/vendor/config/desktop-artifacts.js +110 -0
- package/dist/vendor/config/edit.js +769 -0
- package/dist/vendor/config/env-delivery.js +145 -0
- package/dist/vendor/config/env-rules.js +93 -0
- package/dist/vendor/config/env-schema.js +1078 -0
- package/dist/vendor/config/env.js +445 -0
- package/dist/vendor/config/hooks.js +97 -0
- package/dist/vendor/config/index.js +237 -0
- package/dist/vendor/config/instances.js +208 -0
- package/dist/vendor/config/load.js +490 -0
- package/dist/vendor/config/merge.js +68 -0
- package/dist/vendor/config/order.js +139 -0
- package/dist/vendor/config/ports.js +374 -0
- package/dist/vendor/config/providers.js +32 -0
- package/dist/vendor/config/repo.js +142 -0
- package/dist/vendor/config/retired-keys.js +430 -0
- package/dist/vendor/config/schema.js +1610 -0
- package/dist/vendor/config/secrets.js +50 -0
- package/dist/vendor/config/seed.js +34 -0
- package/dist/vendor/config/site-global.js +205 -0
- package/dist/vendor/config/validate.js +554 -0
- package/dist/vendor/config/winback.js +61 -0
- package/dist/vendor/devkit/actions-secrets.js +145 -0
- package/dist/vendor/devkit/attach-log-file.js +262 -0
- package/dist/vendor/devkit/bare-requires.js +153 -0
- package/dist/vendor/devkit/bundle.js +292 -0
- package/dist/vendor/devkit/ci-workflows.js +520 -0
- package/dist/vendor/devkit/cli-router.js +156 -0
- package/dist/vendor/devkit/command-path.js +46 -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/env-watch.js +132 -0
- package/dist/vendor/devkit/framework-deps.js +46 -0
- package/dist/vendor/devkit/icons.js +178 -0
- package/dist/vendor/devkit/license.js +155 -0
- package/dist/vendor/devkit/local-https.js +360 -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/omega-bin.js +345 -0
- package/dist/vendor/devkit/reads.js +274 -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-secrets.js +165 -0
- package/dist/vendor/devkit/test/scope.js +162 -0
- package/dist/vendor/devkit/translate/cache.js +84 -0
- package/dist/vendor/devkit/translate/engine.js +243 -0
- package/dist/vendor/devkit/translate/index.js +49 -0
- package/dist/vendor/devkit/translate/languages.js +134 -0
- package/dist/vendor/devkit/translate/providers.js +188 -0
- package/dist/vendor/devkit/update.js +569 -0
- package/dist/vendor/template-kit/data/language-flags.js +54 -0
- package/dist/vendor/template-kit/data/languages.js +195 -0
- package/dist/vendor/template-kit/data/social-urls.js +26 -0
- package/dist/vendor/template-kit/filters.js +227 -0
- package/dist/vendor/template-kit/index.js +28 -0
- package/dist/vendor/template-kit/jekyll-compat.js +268 -0
- package/dist/vendor/template-kit/register-liquid.js +0 -0
- package/dist/vendor/template-kit/tags/collections.js +191 -0
- package/dist/vendor/template-kit/tags/conditionals.js +101 -0
- package/dist/vendor/template-kit/tags/content.js +175 -0
- package/dist/vendor/template-kit/tags/index.js +33 -0
- package/dist/vendor/template-kit/tags/media.js +376 -0
- package/dist/vendor/template-kit/variable-resolver.js +163 -0
- package/docs/ads-system.md +109 -0
- package/docs/classy-v2/DIRECTION.md +92 -0
- package/docs/classy-v2/draft-1.html +1932 -0
- package/docs/classy-v2/draft-2.html +1956 -0
- package/docs/frontmatter.md +153 -0
- package/docs/index.md +254 -0
- package/docs/libs.md +298 -0
- package/docs/omega-sections-spec.md +159 -0
- package/docs/page-contract.md +112 -0
- package/docs/sections.md +845 -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/template-kit.md +128 -0
- package/docs/test-framework.md +163 -0
- package/package.json +122 -0
- package/runtime/boot.js +149 -0
- package/runtime/icons.js +77 -0
- package/runtime/manager.js +36 -0
- package/scaffold/.github/workflows/build.yml +139 -0
- package/scaffold/.nvmrc +1 -0
- package/scaffold/AGENTS.md +55 -0
- package/scaffold/CLAUDE.md +1 -0
- package/scaffold/_.gitattributes +4 -0
- package/scaffold/_.gitignore +27 -0
- package/scaffold/config/omega.json5 +20 -0
- package/scaffold/src/assets/css/pages/.gitkeep +0 -0
- package/scaffold/src/assets/images/.gitkeep +0 -0
- package/scaffold/src/assets/js/pages/.gitkeep +0 -0
- package/scaffold/src/pages/.gitkeep +0 -0
- package/scaffold/src/pages/example.md.txt +94 -0
- package/scaffold/src/service-worker.js +16 -0
- package/sw/entry.js +19 -0
- package/sw/manager.js +281 -0
- package/themes/_template/README.md +115 -0
- package/themes/_template/_config.scss +60 -0
- package/themes/_template/_theme.js +14 -0
- package/themes/_template/_theme.scss +28 -0
- package/themes/_template/css/base/_root.scss +19 -0
- package/themes/_template/css/components/_components.scss +23 -0
- package/themes/base/README.md +5 -0
- package/themes/base/_components/data/org-chart/component.html +33 -0
- package/themes/base/_components/data/org-chart/component.json5 +33 -0
- package/themes/base/_components/data/org-chart/component.scss +183 -0
- package/themes/base/_components/heading/masthead/component.html +22 -0
- package/themes/base/_components/heading/masthead/component.json5 +30 -0
- package/themes/base/_components/heading/section-head/component.html +18 -0
- package/themes/base/_components/heading/section-head/component.json5 +27 -0
- package/themes/base/_components/pricing/features/component.html +29 -0
- package/themes/base/_components/pricing/features/component.json5 +30 -0
- package/themes/base/_hero/orbit/index.html +30 -0
- package/themes/base/_hero/orbit/script.js +33 -0
- package/themes/base/_hero/orbit/style.scss +133 -0
- package/themes/base/_includes/admin/sections/sidebar.html +3 -0
- package/themes/base/_includes/admin/sections/topbar.html +3 -0
- package/themes/base/_includes/backend/sections/sidebar.html +3 -0
- package/themes/base/_includes/backend/sections/topbar.html +3 -0
- package/themes/base/_includes/frontend/components/connection-card.html +49 -0
- package/themes/base/_includes/frontend/components/post-card.html +54 -0
- package/themes/base/_includes/frontend/sections/account-connections.html +42 -0
- package/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
- package/themes/base/_includes/frontend/sections/footer.html +154 -0
- package/themes/base/_includes/frontend/sections/nav.html +276 -0
- package/themes/base/_includes/global/sections/account.html +72 -0
- package/themes/base/_includes/global/sections/app-sidebar.html +248 -0
- package/themes/base/_includes/global/sections/app-topbar.html +228 -0
- package/themes/base/_includes/global/sections/page-header.html +99 -0
- package/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
- package/themes/base/_layouts/admin/core/minimal.html +23 -0
- package/themes/base/_layouts/backend/core/base.html +57 -0
- package/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
- package/themes/base/_layouts/backend/core/minimal.html +32 -0
- package/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
- package/themes/base/_layouts/frontend/core/base.html +31 -0
- package/themes/base/_layouts/frontend/core/cover.html +40 -0
- package/themes/base/_layouts/frontend/core/minimal.html +47 -0
- package/themes/base/_layouts/frontend/pages/404.html +54 -0
- package/themes/base/_layouts/frontend/pages/about.html +144 -0
- package/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
- package/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
- package/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
- package/themes/base/_layouts/frontend/pages/app.html +142 -0
- package/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
- package/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
- package/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
- package/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
- package/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
- package/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
- package/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
- package/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
- package/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
- package/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
- package/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
- package/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
- package/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
- package/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
- package/themes/base/_layouts/frontend/pages/contact.html +214 -0
- package/themes/base/_layouts/frontend/pages/download.html +793 -0
- package/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
- package/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
- package/themes/base/_layouts/frontend/pages/feedback.html +171 -0
- package/themes/base/_layouts/frontend/pages/index.html +66 -0
- package/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
- package/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
- package/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
- package/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
- package/themes/base/_layouts/frontend/pages/pricing.html +596 -0
- package/themes/base/_layouts/frontend/pages/status.html +361 -0
- package/themes/base/_layouts/frontend/pages/team/index.html +210 -0
- package/themes/base/_layouts/frontend/pages/team/member.html +125 -0
- package/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
- package/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
- package/themes/base/_sections/about/hero/section.html +68 -0
- package/themes/base/_sections/about/hero/section.json5 +58 -0
- package/themes/base/_sections/about/letter/section.html +60 -0
- package/themes/base/_sections/about/letter/section.json5 +56 -0
- package/themes/base/_sections/about/photo-band/section.html +24 -0
- package/themes/base/_sections/about/photo-band/section.json5 +23 -0
- package/themes/base/_sections/about/principles/section.html +17 -0
- package/themes/base/_sections/about/principles/section.json5 +34 -0
- package/themes/base/_sections/about/timeline/section.html +20 -0
- package/themes/base/_sections/about/timeline/section.json5 +34 -0
- package/themes/base/_sections/marketing/bento/section.html +91 -0
- package/themes/base/_sections/marketing/bento/section.json5 +152 -0
- package/themes/base/_sections/marketing/cta/section.html +44 -0
- package/themes/base/_sections/marketing/cta/section.json5 +47 -0
- package/themes/base/_sections/marketing/faq/section.html +52 -0
- package/themes/base/_sections/marketing/faq/section.json5 +68 -0
- package/themes/base/_sections/marketing/hero/section.html +349 -0
- package/themes/base/_sections/marketing/hero/section.json5 +335 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
- package/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
- package/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
- package/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
- package/themes/base/_sections/marketing/product-demo/section.html +62 -0
- package/themes/base/_sections/marketing/product-demo/section.js +44 -0
- package/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
- package/themes/base/_sections/marketing/prose/section.html +22 -0
- package/themes/base/_sections/marketing/prose/section.json5 +41 -0
- package/themes/base/_sections/marketing/showcase/section.html +35 -0
- package/themes/base/_sections/marketing/showcase/section.json5 +52 -0
- package/themes/base/_sections/marketing/stats/section.html +32 -0
- package/themes/base/_sections/marketing/stats/section.json5 +44 -0
- package/themes/base/_sections/marketing/testimonials/section.html +54 -0
- package/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
- package/themes/base/_sections/marketing/trusted-by/section.html +30 -0
- package/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
- package/themes/base/_sections/verts/unit/section.html +7 -0
- package/themes/base/_sections/verts/unit/section.js +22 -0
- package/themes/base/_sections/verts/unit/section.json5 +24 -0
- package/themes/base/_sections/verts/unit/section.scss +24 -0
- package/themes/base/_theme.js +13 -0
- package/themes/base/_theme.scss +4 -0
- package/themes/bootstrap/_theme.js +16 -0
- package/themes/bootstrap/_theme.scss +11 -0
- package/themes/bootstrap/js/index.esm.js +19 -0
- package/themes/bootstrap/js/index.umd.js +34 -0
- package/themes/bootstrap/js/src/alert.js +87 -0
- package/themes/bootstrap/js/src/base-component.js +86 -0
- package/themes/bootstrap/js/src/button.js +72 -0
- package/themes/bootstrap/js/src/carousel.js +474 -0
- package/themes/bootstrap/js/src/collapse.js +297 -0
- package/themes/bootstrap/js/src/dom/data.js +55 -0
- package/themes/bootstrap/js/src/dom/event-handler.js +317 -0
- package/themes/bootstrap/js/src/dom/manipulator.js +71 -0
- package/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
- package/themes/bootstrap/js/src/dropdown.js +458 -0
- package/themes/bootstrap/js/src/modal.js +378 -0
- package/themes/bootstrap/js/src/offcanvas.js +282 -0
- package/themes/bootstrap/js/src/popover.js +97 -0
- package/themes/bootstrap/js/src/scrollspy.js +296 -0
- package/themes/bootstrap/js/src/tab.js +315 -0
- package/themes/bootstrap/js/src/toast.js +224 -0
- package/themes/bootstrap/js/src/tooltip.js +632 -0
- package/themes/bootstrap/js/src/util/backdrop.js +151 -0
- package/themes/bootstrap/js/src/util/component-functions.js +35 -0
- package/themes/bootstrap/js/src/util/config.js +65 -0
- package/themes/bootstrap/js/src/util/focustrap.js +115 -0
- package/themes/bootstrap/js/src/util/index.js +306 -0
- package/themes/bootstrap/js/src/util/sanitizer.js +117 -0
- package/themes/bootstrap/js/src/util/scrollbar.js +114 -0
- package/themes/bootstrap/js/src/util/swipe.js +146 -0
- package/themes/bootstrap/js/src/util/template-factory.js +160 -0
- package/themes/bootstrap/overrides/_accordion.scss +21 -0
- package/themes/bootstrap/overrides/_avatars.scss +51 -0
- package/themes/bootstrap/overrides/_blog-images.scss +45 -0
- package/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
- package/themes/bootstrap/overrides/_color-shades.scss +25 -0
- package/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
- package/themes/bootstrap/overrides/_index.scss +30 -0
- package/themes/bootstrap/overrides/_links.scss +26 -0
- package/themes/bootstrap/overrides/_soft-colors.scss +99 -0
- package/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
- package/themes/bootstrap/overrides/_spinners.scss +22 -0
- package/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
- package/themes/bootstrap/scss/_accordion.scss +153 -0
- package/themes/bootstrap/scss/_alert.scss +68 -0
- package/themes/bootstrap/scss/_badge.scss +38 -0
- package/themes/bootstrap/scss/_breadcrumb.scss +40 -0
- package/themes/bootstrap/scss/_button-group.scss +147 -0
- package/themes/bootstrap/scss/_buttons.scss +216 -0
- package/themes/bootstrap/scss/_card.scss +238 -0
- package/themes/bootstrap/scss/_carousel.scss +226 -0
- package/themes/bootstrap/scss/_close.scss +66 -0
- package/themes/bootstrap/scss/_containers.scss +41 -0
- package/themes/bootstrap/scss/_dropdown.scss +250 -0
- package/themes/bootstrap/scss/_forms.scss +9 -0
- package/themes/bootstrap/scss/_functions.scss +302 -0
- package/themes/bootstrap/scss/_grid.scss +39 -0
- package/themes/bootstrap/scss/_helpers.scss +12 -0
- package/themes/bootstrap/scss/_images.scss +42 -0
- package/themes/bootstrap/scss/_list-group.scss +199 -0
- package/themes/bootstrap/scss/_maps.scss +174 -0
- package/themes/bootstrap/scss/_mixins.scss +42 -0
- package/themes/bootstrap/scss/_modal.scss +240 -0
- package/themes/bootstrap/scss/_nav.scss +197 -0
- package/themes/bootstrap/scss/_navbar.scss +289 -0
- package/themes/bootstrap/scss/_offcanvas.scss +147 -0
- package/themes/bootstrap/scss/_pagination.scss +109 -0
- package/themes/bootstrap/scss/_placeholders.scss +51 -0
- package/themes/bootstrap/scss/_popover.scss +196 -0
- package/themes/bootstrap/scss/_progress.scss +68 -0
- package/themes/bootstrap/scss/_reboot.scss +611 -0
- package/themes/bootstrap/scss/_root.scss +187 -0
- package/themes/bootstrap/scss/_spinners.scss +85 -0
- package/themes/bootstrap/scss/_tables.scss +171 -0
- package/themes/bootstrap/scss/_toasts.scss +73 -0
- package/themes/bootstrap/scss/_tooltip.scss +119 -0
- package/themes/bootstrap/scss/_transitions.scss +27 -0
- package/themes/bootstrap/scss/_type.scss +106 -0
- package/themes/bootstrap/scss/_utilities.scss +806 -0
- package/themes/bootstrap/scss/_variables-dark.scss +102 -0
- package/themes/bootstrap/scss/_variables.scss +1753 -0
- package/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
- package/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
- package/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
- package/themes/bootstrap/scss/bootstrap.scss +52 -0
- package/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
- package/themes/bootstrap/scss/forms/_form-check.scss +189 -0
- package/themes/bootstrap/scss/forms/_form-control.scss +214 -0
- package/themes/bootstrap/scss/forms/_form-range.scss +91 -0
- package/themes/bootstrap/scss/forms/_form-select.scss +80 -0
- package/themes/bootstrap/scss/forms/_form-text.scss +11 -0
- package/themes/bootstrap/scss/forms/_input-group.scss +132 -0
- package/themes/bootstrap/scss/forms/_labels.scss +36 -0
- package/themes/bootstrap/scss/forms/_validation.scss +12 -0
- package/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
- package/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
- package/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
- package/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
- package/themes/bootstrap/scss/helpers/_position.scss +36 -0
- package/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/themes/bootstrap/scss/helpers/_vr.scss +8 -0
- package/themes/bootstrap/scss/mixins/_alert.scss +18 -0
- package/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/themes/bootstrap/scss/mixins/_banner.scss +7 -0
- package/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/themes/bootstrap/scss/mixins/_caret.scss +69 -0
- package/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
- package/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/themes/bootstrap/scss/mixins/_container.scss +11 -0
- package/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/themes/bootstrap/scss/mixins/_forms.scss +163 -0
- package/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/themes/bootstrap/scss/mixins/_grid.scss +151 -0
- package/themes/bootstrap/scss/mixins/_image.scss +16 -0
- package/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
- package/themes/bootstrap/scss/mixins/_lists.scss +7 -0
- package/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/themes/bootstrap/scss/mixins/_resize.scss +6 -0
- package/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/themes/bootstrap/scss/mixins/_transition.scss +26 -0
- package/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
- package/themes/bootstrap/scss/tests/jasmine.js +16 -0
- package/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
- package/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
- package/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
- package/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
- package/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
- package/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
- package/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
- package/themes/bootstrap/scss/utilities/_api.scss +47 -0
- package/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
- package/themes/classy/README.md +89 -0
- package/themes/classy/_config.scss +245 -0
- package/themes/classy/_theme.js +31 -0
- package/themes/classy/_theme.scss +57 -0
- package/themes/classy/css/app/_panels.scss +183 -0
- package/themes/classy/css/base/_fonts.scss +79 -0
- package/themes/classy/css/base/_no-raise.scss +49 -0
- package/themes/classy/css/base/_root.scss +113 -0
- package/themes/classy/css/base/_typography.scss +154 -0
- package/themes/classy/css/base/_utilities.scss +284 -0
- package/themes/classy/css/components/_alerts.scss +51 -0
- package/themes/classy/css/components/_badges.scss +46 -0
- package/themes/classy/css/components/_buttons.scss +175 -0
- package/themes/classy/css/components/_cards.scss +41 -0
- package/themes/classy/css/components/_dropdowns.scss +48 -0
- package/themes/classy/css/components/_forms.scss +171 -0
- package/themes/classy/css/components/_receipt.scss +45 -0
- package/themes/classy/css/layout/_footer.scss +298 -0
- package/themes/classy/css/layout/_general.scss +209 -0
- package/themes/classy/css/layout/_nav.scss +154 -0
- package/themes/classy/css/layout/_shell.scss +458 -0
- package/themes/classy/css/marketing/_bento.scss +238 -0
- package/themes/classy/css/marketing/_content.scss +1328 -0
- package/themes/classy/css/marketing/_downloads.scss +246 -0
- package/themes/classy/css/marketing/_hero.scss +311 -0
- package/themes/classy/css/marketing/_sections.scss +649 -0
- package/themes/classy/css/pages/404/index.scss +67 -0
- package/themes/classy/css/pages/_auth.scss +235 -0
- package/themes/classy/css/pages/admin/firebase/index.scss +22 -0
- package/themes/classy/css/pages/blog/[slug].scss +56 -0
- package/themes/classy/css/pages/cookies.scss +2 -0
- package/themes/classy/css/pages/dashboard/account/index.scss +31 -0
- package/themes/classy/css/pages/feedback/index.scss +39 -0
- package/themes/classy/css/pages/legal/_document.scss +192 -0
- package/themes/classy/css/pages/payment/checkout/index.scss +585 -0
- package/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
- package/themes/classy/css/pages/privacy.scss +2 -0
- package/themes/classy/css/pages/status/index.scss +164 -0
- package/themes/classy/css/pages/terms.scss +2 -0
- package/themes/classy/css/pages/updates/index.scss +128 -0
- package/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
- package/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
- package/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
- package/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
- package/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
- package/themes/classy/js/hero-demo-form.js +56 -0
- package/themes/neobrutalism/README.md +118 -0
- package/themes/neobrutalism/_config.scss +139 -0
- package/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
- package/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
- package/themes/neobrutalism/_theme.js +24 -0
- package/themes/neobrutalism/_theme.scss +61 -0
- package/themes/neobrutalism/css/base/_mixins.scss +46 -0
- package/themes/neobrutalism/css/base/_root.scss +169 -0
- package/themes/neobrutalism/css/base/_typography.scss +61 -0
- package/themes/neobrutalism/css/base/_utilities.scss +89 -0
- package/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
- package/themes/neobrutalism/css/components/_buttons.scss +148 -0
- package/themes/neobrutalism/css/components/_cards.scss +47 -0
- package/themes/neobrutalism/css/components/_forms.scss +88 -0
- package/themes/neobrutalism/css/components/_marketing.scss +244 -0
- package/themes/neobrutalism/css/layout/_general.scss +213 -0
- package/themes/neobrutalism/css/layout/_navigation.scss +171 -0
- package/themes/neobrutalism/css/pages/index.scss +203 -0
- package/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
- package/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
- package/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
- package/themes/newsflash/README.md +117 -0
- package/themes/newsflash/_components/heading/lede/component.html +14 -0
- package/themes/newsflash/_components/heading/lede/component.json5 +23 -0
- package/themes/newsflash/_components/heading/rule-head/component.html +17 -0
- package/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
- package/themes/newsflash/_components/news/byline/component.html +12 -0
- package/themes/newsflash/_components/news/byline/component.json5 +18 -0
- package/themes/newsflash/_components/news/story-card/component.html +25 -0
- package/themes/newsflash/_components/news/story-card/component.json5 +21 -0
- package/themes/newsflash/_config.scss +147 -0
- package/themes/newsflash/_layouts/frontend/core/base.html +51 -0
- package/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
- package/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
- package/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
- package/themes/newsflash/_sections/marketing/desks/section.html +39 -0
- package/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
- package/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
- package/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
- package/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
- package/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
- package/themes/newsflash/_theme.js +24 -0
- package/themes/newsflash/_theme.scss +70 -0
- package/themes/newsflash/css/base/_fonts.scss +80 -0
- package/themes/newsflash/css/base/_mixins.scss +51 -0
- package/themes/newsflash/css/base/_root.scss +257 -0
- package/themes/newsflash/css/base/_typography.scss +49 -0
- package/themes/newsflash/css/base/_utilities.scss +122 -0
- package/themes/newsflash/css/components/_badges.scss +65 -0
- package/themes/newsflash/css/components/_billing-toggle.scss +61 -0
- package/themes/newsflash/css/components/_buttons.scss +139 -0
- package/themes/newsflash/css/components/_cards.scss +47 -0
- package/themes/newsflash/css/components/_editorial.scss +173 -0
- package/themes/newsflash/css/components/_forms.scss +75 -0
- package/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
- package/themes/newsflash/css/components/_panels.scss +156 -0
- package/themes/newsflash/css/components/_ticker.scss +67 -0
- package/themes/newsflash/css/layout/_general.scss +330 -0
- package/themes/newsflash/css/layout/_navigation.scss +168 -0
- package/themes/newsflash/css/pages/404/index.scss +79 -0
- package/themes/newsflash/css/pages/blog/[slug].scss +186 -0
- package/themes/newsflash/css/pages/blog/index.scss +17 -0
- package/themes/newsflash/css/pages/index.scss +157 -0
- package/themes/newsflash/css/pages/pricing/index.scss +55 -0
- package/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
- package/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
- package/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
- package/themes/newsflash/js/pages/blog/[slug].js +29 -0
- package/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
- package/translations/es/pages/404.json +86 -0
- package/translations/es/pages/account.json +36 -0
- package/translations/es/pages/app.json +44 -0
- package/translations/es/pages/cancel.json +36 -0
- package/translations/es/pages/change-password.json +36 -0
- package/translations/es/pages/connections/callback.json +41 -0
- package/translations/es/pages/dashboard/account.json +475 -0
- package/translations/es/pages/dashboard.json +36 -0
- package/translations/es/pages/forgot.json +36 -0
- package/translations/es/pages/join.json +36 -0
- package/translations/es/pages/login.json +36 -0
- package/translations/es/pages/payment/checkout.json +83 -0
- package/translations/es/pages/payment/confirmation.json +62 -0
- package/translations/es/pages/portal/email-preferences.json +46 -0
- package/translations/es/pages/recover.json +36 -0
- package/translations/es/pages/refund.json +36 -0
- package/translations/es/pages/register.json +36 -0
- package/translations/es/pages/reset-password.json +36 -0
- package/translations/es/pages/reset.json +42 -0
- package/translations/es/pages/signin.json +45 -0
- package/translations/es/pages/signup.json +60 -0
- package/translations/es/pages/token.json +39 -0
- package/translations/fa/pages/404.json +86 -0
- package/translations/fa/pages/account.json +36 -0
- package/translations/fa/pages/app.json +44 -0
- package/translations/fa/pages/cancel.json +36 -0
- package/translations/fa/pages/change-password.json +36 -0
- package/translations/fa/pages/connections/callback.json +41 -0
- package/translations/fa/pages/dashboard/account.json +475 -0
- package/translations/fa/pages/dashboard.json +36 -0
- package/translations/fa/pages/forgot.json +36 -0
- package/translations/fa/pages/join.json +36 -0
- package/translations/fa/pages/login.json +36 -0
- package/translations/fa/pages/payment/checkout.json +83 -0
- package/translations/fa/pages/payment/confirmation.json +62 -0
- package/translations/fa/pages/portal/email-preferences.json +46 -0
- package/translations/fa/pages/recover.json +36 -0
- package/translations/fa/pages/refund.json +36 -0
- package/translations/fa/pages/register.json +36 -0
- package/translations/fa/pages/reset-password.json +36 -0
- package/translations/fa/pages/reset.json +42 -0
- package/translations/fa/pages/signin.json +45 -0
- package/translations/fa/pages/signup.json +60 -0
- package/translations/fa/pages/token.json +39 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codemod.js — walk a consumer's Liquid-bearing sources and apply the
|
|
3
|
+
* migration rules (rules.js). One pass per file: rules run in order over the
|
|
4
|
+
* full text; edits and findings accumulate per file for the report.
|
|
5
|
+
*
|
|
6
|
+
* THREE walks, because the rule tables answer to different file shapes:
|
|
7
|
+
* - templates: `src/**` (.html, .md, .markdown, .liquid, .xml), assets skipped
|
|
8
|
+
* - scripts: `src/**` .js — the consumer asset layer (src/assets/js) plus the
|
|
9
|
+
* service-worker entry at the src root, carrying the client-runtime imports
|
|
10
|
+
* (#248). Template rules never run here (`page.title` in a script is an
|
|
11
|
+
* object property, not a frontmatter read).
|
|
12
|
+
* - descriptors: EVERY `src/**` .json (assets included) — section descriptors
|
|
13
|
+
* (`_includes/**\/sections/*.json`) are the motivating case: they declare
|
|
14
|
+
* the client bindings and the signout class as DATA. Only the exact-token
|
|
15
|
+
* markup rule runs (JSON_RULES): skipping them left a HALF-rename — the
|
|
16
|
+
* JS selectors renamed, the descriptor that emits the class not (#248).
|
|
17
|
+
*
|
|
18
|
+
* The asset layer's OTHER concerns — the seed main.js deletion, the scss
|
|
19
|
+
* package reference — stay in consumer-assets.js; this walk only rewrites text.
|
|
20
|
+
* Build output and archive dirs are never touched by either walk.
|
|
21
|
+
*/
|
|
22
|
+
const fs = require('node:fs');
|
|
23
|
+
const path = require('node:path');
|
|
24
|
+
const { RULES, JS_RULES, JSON_RULES } = require('./rules.js');
|
|
25
|
+
|
|
26
|
+
const TEMPLATE_EXTENSIONS = ['.html', '.md', '.markdown', '.liquid', '.xml'];
|
|
27
|
+
const SCRIPT_EXTENSIONS = ['.js'];
|
|
28
|
+
const JSON_EXTENSIONS = ['.json'];
|
|
29
|
+
const SKIP_DIRS = ['assets', 'node_modules', 'dist', '_site', '_legacy', '_backup', '.git'];
|
|
30
|
+
// The script walk keeps `assets` — that IS the consumer's JS
|
|
31
|
+
const SCRIPT_SKIP_DIRS = SKIP_DIRS.filter((dir) => dir !== 'assets');
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Collect the files under a dir with the given extensions, skipping the named
|
|
35
|
+
* directories.
|
|
36
|
+
* @param {string} dir
|
|
37
|
+
* @param {string[]} extensions
|
|
38
|
+
* @param {string[]} skipDirs
|
|
39
|
+
* @returns {string[]} absolute paths
|
|
40
|
+
*/
|
|
41
|
+
function collectFiles(dir, extensions, skipDirs) {
|
|
42
|
+
const files = [];
|
|
43
|
+
const walk = (current) => {
|
|
44
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
45
|
+
const full = path.join(current, entry.name);
|
|
46
|
+
if (entry.isDirectory()) {
|
|
47
|
+
if (skipDirs.includes(entry.name)) continue;
|
|
48
|
+
walk(full);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (entry.isFile() && extensions.includes(path.extname(entry.name))) files.push(full);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
if (fs.existsSync(dir)) walk(dir);
|
|
55
|
+
return files.sort();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Collect the template files under a consumer's src/ dir.
|
|
60
|
+
* @param {string} srcDir
|
|
61
|
+
* @returns {string[]} absolute paths
|
|
62
|
+
*/
|
|
63
|
+
function collectTemplateFiles(srcDir) {
|
|
64
|
+
return collectFiles(srcDir, TEMPLATE_EXTENSIONS, SKIP_DIRS);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Collect the consumer JS files under a consumer's src/ dir.
|
|
69
|
+
* @param {string} srcDir
|
|
70
|
+
* @returns {string[]} absolute paths
|
|
71
|
+
*/
|
|
72
|
+
function collectScriptFiles(srcDir) {
|
|
73
|
+
return collectFiles(srcDir, SCRIPT_EXTENSIONS, SCRIPT_SKIP_DIRS);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Collect the JSON descriptors under a consumer's src/ dir.
|
|
78
|
+
* @param {string} srcDir
|
|
79
|
+
* @returns {string[]} absolute paths
|
|
80
|
+
*/
|
|
81
|
+
function collectJsonFiles(srcDir) {
|
|
82
|
+
return collectFiles(srcDir, JSON_EXTENSIONS, SCRIPT_SKIP_DIRS);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Run one rule table over a file's text.
|
|
87
|
+
* @param {object[]} rules
|
|
88
|
+
* @param {string} text
|
|
89
|
+
* @param {string} filePath - for reporting
|
|
90
|
+
* @returns {{ text: string, edits: object[], findings: object[] }}
|
|
91
|
+
*/
|
|
92
|
+
function applyRuleTable(rules, text, filePath) {
|
|
93
|
+
let current = text;
|
|
94
|
+
const edits = [];
|
|
95
|
+
const findings = [];
|
|
96
|
+
for (const rule of rules) {
|
|
97
|
+
const result = rule.apply(current, { filePath });
|
|
98
|
+
current = result.text;
|
|
99
|
+
edits.push(...result.edits);
|
|
100
|
+
findings.push(...result.findings.map((finding) => ({ ...finding, file: filePath })));
|
|
101
|
+
}
|
|
102
|
+
return { text: current, edits, findings };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Run every TEMPLATE rule over one file's text.
|
|
107
|
+
* @param {string} text
|
|
108
|
+
* @param {string} filePath - for reporting
|
|
109
|
+
* @returns {{ text: string, edits: object[], findings: object[] }}
|
|
110
|
+
*/
|
|
111
|
+
function applyRules(text, filePath) {
|
|
112
|
+
return applyRuleTable(RULES, text, filePath);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Run every consumer-JS rule over one file's text.
|
|
117
|
+
* @param {string} text
|
|
118
|
+
* @param {string} filePath - for reporting
|
|
119
|
+
* @returns {{ text: string, edits: object[], findings: object[] }}
|
|
120
|
+
*/
|
|
121
|
+
function applyJsRules(text, filePath) {
|
|
122
|
+
return applyRuleTable(JS_RULES, text, filePath);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Run every JSON-descriptor rule over one file's text.
|
|
127
|
+
* @param {string} text
|
|
128
|
+
* @param {string} filePath - for reporting
|
|
129
|
+
* @returns {{ text: string, edits: object[], findings: object[] }}
|
|
130
|
+
*/
|
|
131
|
+
function applyJsonRules(text, filePath) {
|
|
132
|
+
return applyRuleTable(JSON_RULES, text, filePath);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Apply the codemod across a consumer's src/ tree.
|
|
137
|
+
* @param {string} root - consumer project root
|
|
138
|
+
* @param {object} [options]
|
|
139
|
+
* @param {boolean} [options.write] - write changed files (false = report only)
|
|
140
|
+
* @returns {{ files: object[], findings: object[], totalEdits: number }}
|
|
141
|
+
*/
|
|
142
|
+
function runCodemod(root, options = {}) {
|
|
143
|
+
const srcDir = path.join(root, 'src');
|
|
144
|
+
const results = [];
|
|
145
|
+
const findings = [];
|
|
146
|
+
let totalEdits = 0;
|
|
147
|
+
|
|
148
|
+
const passes = [
|
|
149
|
+
[collectTemplateFiles(srcDir), applyRules],
|
|
150
|
+
[collectScriptFiles(srcDir), applyJsRules],
|
|
151
|
+
[collectJsonFiles(srcDir), applyJsonRules],
|
|
152
|
+
];
|
|
153
|
+
|
|
154
|
+
for (const [filePaths, apply] of passes) {
|
|
155
|
+
for (const filePath of filePaths) {
|
|
156
|
+
const original = fs.readFileSync(filePath, 'utf8');
|
|
157
|
+
const { text, edits, findings: fileFindings } = apply(original, path.relative(root, filePath));
|
|
158
|
+
findings.push(...fileFindings);
|
|
159
|
+
// The WRITE answers to the text, not to the bookkeeping: a rule that
|
|
160
|
+
// changes a file and reports no edit still has to reach the disk, or the
|
|
161
|
+
// run prints a repair it never made.
|
|
162
|
+
if (options.write && text !== original) fs.writeFileSync(filePath, text);
|
|
163
|
+
if (edits.length === 0) continue;
|
|
164
|
+
totalEdits += edits.length;
|
|
165
|
+
results.push({ path: path.relative(root, filePath), edits });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return { files: results, findings, totalEdits };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
module.exports = { runCodemod, applyRules, applyJsRules, applyJsonRules, collectTemplateFiles, collectScriptFiles, TEMPLATE_EXTENSIONS };
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* config-convert.js — legacy UJM config → omega.json5.
|
|
3
|
+
*
|
|
4
|
+
* Reads `src/_config.yml` + `config/ultimate-jekyll-manager.json` and
|
|
5
|
+
* produces ONE omega.json5 object per the mapping table in docs/shared/config.md:
|
|
6
|
+
*
|
|
7
|
+
* - Shared sections to the TOP LEVEL with unified spellings:
|
|
8
|
+
* `brand` (+ merged `url`), `socials` (#483), `translation` (#526), `theme`, `connections`,
|
|
9
|
+
* `web_manager.firebase.app.config` → `cloud.{provider,config}`,
|
|
10
|
+
* `web_manager.payment` → `payment` (`processors` → `providers` — #425),
|
|
11
|
+
* `web_manager.sentry` → `monitoring.providers.sentry` (#485),
|
|
12
|
+
* flat `analytics.{google,meta,tiktok}` → `analytics.providers.<p>.id`,
|
|
13
|
+
* flat `advertising.<provider>` → `advertising.providers.<provider>`
|
|
14
|
+
* (`google-adsense` → `adsense` + camelCase slots — #23),
|
|
15
|
+
* `recaptcha` → `captcha.providers.recaptcha` (camelCase sub-keys),
|
|
16
|
+
* `cloudflare` → `edge.providers.cloudflare`.
|
|
17
|
+
* - Everything web-only under `targets.web`: presentation sections (favicon,
|
|
18
|
+
* manifest, icons),
|
|
19
|
+
* blog/engine config (permalink, pagination,
|
|
20
|
+
* defaults, generators — codemod rule 8's home), the
|
|
21
|
+
* remaining `web_manager` client-settings blob (renamed `client` on the way
|
|
22
|
+
* out — #1: WebManager is not an OMEGA concept), and the UJM-json build
|
|
23
|
+
* settings (distribute, purgecss, imagemin, workflows).
|
|
24
|
+
* - Dropped with notes: Jekyll machinery keys, the legacy `meta` block (#607 —
|
|
25
|
+
* omega.json5 has NO meta section; the site-wide default is brand.name /
|
|
26
|
+
* brand.description and per-page meta is page frontmatter), the legacy
|
|
27
|
+
* `download` / `extension` page maps (#610 — derived from
|
|
28
|
+
* targets.desktop.releases and targets.extension.listings now), `webpack`
|
|
29
|
+
* (esbuild now), `gems` (Ruby is gone), the legacy `collections` block
|
|
30
|
+
* (#589 — an OMEGA collection needs a grouping `field` no Jekyll collection
|
|
31
|
+
* carries), secret-shaped keys (they belong in .env).
|
|
32
|
+
*
|
|
33
|
+
* The engine composes the runtime shape back together (cloud.config →
|
|
34
|
+
* client.firebase.app.config, payment → client.payment) in
|
|
35
|
+
* engine.js, so templates and the client keep their contract.
|
|
36
|
+
*/
|
|
37
|
+
const fs = require('node:fs');
|
|
38
|
+
const path = require('node:path');
|
|
39
|
+
const yaml = require('js-yaml');
|
|
40
|
+
const JSON5 = require('json5');
|
|
41
|
+
const { findSecretKeys } = require('../vendor/config/index.js');
|
|
42
|
+
|
|
43
|
+
// _config.yml sections that were Jekyll/UJM machinery — gone with Jekyll
|
|
44
|
+
const DROPPED_JEKYLL_KEYS = [
|
|
45
|
+
'exclude', 'include', 'plugins', 'plugins_dir', 'markdown', 'highlighter',
|
|
46
|
+
'sass', 'compress_html', 'timezone', 'encoding', 'incremental', 'profile',
|
|
47
|
+
'liquid', 'kramdown', 'destination', 'source', 'safe', 'keep_files',
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
// _config.yml sections that stay web-scoped (targets.web), in output order
|
|
51
|
+
const WEB_SECTION_ORDER = [
|
|
52
|
+
'favicon', 'manifest', 'icons',
|
|
53
|
+
'permalink', 'pagination',
|
|
54
|
+
'defaults', 'generators', 'client',
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
// The UJM page maps #610 retired: the /download page, the /extension page and
|
|
59
|
+
// their shortlinks derive from `targets.desktop.releases` and
|
|
60
|
+
// `targets.extension.listings`, so carrying these would be a second home for
|
|
61
|
+
// the same links — and the validator refuses them.
|
|
62
|
+
const RETIRED_PAGE_MAPS = {
|
|
63
|
+
download: 'targets.desktop.releases (curated onto site.targets.desktop.releasesUrl)',
|
|
64
|
+
extension: 'targets.extension.listings',
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// Legacy kebab-case sub-keys → the camelCase names every OMEGA config key uses (#23)
|
|
68
|
+
const ADSENSE_SLOT_KEYS = {
|
|
69
|
+
'display-slot': 'displaySlot',
|
|
70
|
+
'in-article-slot': 'inArticleSlot',
|
|
71
|
+
'in-feed-slot': 'inFeedSlot',
|
|
72
|
+
'multiplex-slot': 'multiplexSlot',
|
|
73
|
+
};
|
|
74
|
+
const RECAPTCHA_KEYS = { 'site-key': 'siteKey' };
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Copy an object with the named keys renamed, order preserved.
|
|
78
|
+
* @param {object} object - source object
|
|
79
|
+
* @param {Record<string, string>} map - old key → new key
|
|
80
|
+
* @returns {object}
|
|
81
|
+
*/
|
|
82
|
+
function renameKeys(object, map) {
|
|
83
|
+
const out = {};
|
|
84
|
+
for (const [key, value] of Object.entries(object)) {
|
|
85
|
+
out[map[key] || key] = value;
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* True for values that carry no information (null/undefined/{}/[]).
|
|
92
|
+
*/
|
|
93
|
+
function isEmpty(value) {
|
|
94
|
+
if (value === null || value === undefined) return true;
|
|
95
|
+
if (Array.isArray(value)) return value.length === 0;
|
|
96
|
+
if (typeof value === 'object') return Object.keys(value).length === 0;
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Convert the legacy configs of a consumer into an omega.json5 object.
|
|
102
|
+
* @param {object} sources
|
|
103
|
+
* @param {object|null} sources.jekyll - parsed _config.yml (or null)
|
|
104
|
+
* @param {object|null} sources.ujm - parsed ultimate-jekyll-manager.json (or null)
|
|
105
|
+
* @returns {{ omega: object, notes: string[] }}
|
|
106
|
+
*/
|
|
107
|
+
function convertConfig({ jekyll, ujm }) {
|
|
108
|
+
const config = { ...(jekyll || {}) };
|
|
109
|
+
const notes = [];
|
|
110
|
+
const omega = {};
|
|
111
|
+
const web = {};
|
|
112
|
+
|
|
113
|
+
const take = (key) => {
|
|
114
|
+
const value = config[key];
|
|
115
|
+
delete config[key];
|
|
116
|
+
return value;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// ---- brand (+ url folded in — site.url derives from brand.url)
|
|
120
|
+
const brand = take('brand') || {};
|
|
121
|
+
const url = take('url');
|
|
122
|
+
if (url && !brand.url) brand.url = url;
|
|
123
|
+
omega.brand = brand;
|
|
124
|
+
|
|
125
|
+
const baseurl = take('baseurl');
|
|
126
|
+
if (!isEmpty(baseurl) && baseurl !== '') omega.baseurl = baseurl;
|
|
127
|
+
|
|
128
|
+
// ---- socials: a SHARED_SCHEMA key, so the TOP LEVEL is its home (#483).
|
|
129
|
+
// A web load resolves `targets.web.socials` identically, but the handles are
|
|
130
|
+
// brand identity — the scaffold emits them at the root and every surface
|
|
131
|
+
// beyond the website reads them there.
|
|
132
|
+
const socials = take('socials');
|
|
133
|
+
if (!isEmpty(socials)) omega.socials = socials;
|
|
134
|
+
|
|
135
|
+
// ---- translation: a SHARED_SECTIONS key, so the TOP LEVEL is its home (#526).
|
|
136
|
+
// Legacy UJM translation was website-only and a web load resolves
|
|
137
|
+
// `targets.web.translation` identically, but disperse copies the SHARED
|
|
138
|
+
// sections — left in the target, the engine config is invisible to every
|
|
139
|
+
// other target that translates (the extension's `_locales`).
|
|
140
|
+
const translation = take('translation');
|
|
141
|
+
if (!isEmpty(translation)) omega.translation = translation;
|
|
142
|
+
|
|
143
|
+
// ---- theme (verbatim — templates read theme.nav.enabled etc.)
|
|
144
|
+
const theme = take('theme');
|
|
145
|
+
if (!isEmpty(theme)) omega.theme = theme;
|
|
146
|
+
|
|
147
|
+
// ---- web_manager: extract the shared sections, keep the client blob
|
|
148
|
+
// (legacyWebManager = the LEGACY config blob being migrated — the identifier
|
|
149
|
+
// deliberately keeps the old product name; `omega` is the OUTPUT object.)
|
|
150
|
+
const legacyWebManager = take('web_manager') || {};
|
|
151
|
+
const firebaseConfig = legacyWebManager.firebase && legacyWebManager.firebase.app && legacyWebManager.firebase.app.config;
|
|
152
|
+
if (!isEmpty(firebaseConfig)) {
|
|
153
|
+
omega.cloud = { provider: 'firebase', config: firebaseConfig };
|
|
154
|
+
delete legacyWebManager.firebase.app.config;
|
|
155
|
+
if (isEmpty(legacyWebManager.firebase.app)) delete legacyWebManager.firebase.app;
|
|
156
|
+
if (isEmpty(legacyWebManager.firebase)) delete legacyWebManager.firebase;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// ---- analytics: flat scalars → providers shape
|
|
160
|
+
const analytics = take('analytics');
|
|
161
|
+
if (!isEmpty(analytics)) {
|
|
162
|
+
const providers = {};
|
|
163
|
+
for (const [provider, id] of Object.entries(analytics)) {
|
|
164
|
+
if (isEmpty(id) || id === '') continue;
|
|
165
|
+
if (typeof id === 'object') providers[provider] = id; // already structured
|
|
166
|
+
else providers[provider] = { id: String(id) };
|
|
167
|
+
}
|
|
168
|
+
if (!isEmpty(providers)) omega.analytics = { providers };
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// ---- advertising: legacy flat providers → role-keyed providers shape.
|
|
172
|
+
// The provider id drops its vendor prefix and every slot key goes camelCase
|
|
173
|
+
// (#23) — the legacy world spelled both the other way.
|
|
174
|
+
const advertising = take('advertising');
|
|
175
|
+
if (!isEmpty(advertising)) {
|
|
176
|
+
const providers = advertising.providers ? { ...advertising.providers } : { ...advertising };
|
|
177
|
+
if (providers['google-adsense']) {
|
|
178
|
+
providers.adsense = providers['google-adsense'];
|
|
179
|
+
delete providers['google-adsense'];
|
|
180
|
+
}
|
|
181
|
+
if (providers.adsense) {
|
|
182
|
+
providers.adsense = renameKeys(providers.adsense, ADSENSE_SLOT_KEYS);
|
|
183
|
+
|
|
184
|
+
// The two retired gates are DROPPED, one note each (#628). Carried
|
|
185
|
+
// through, an `enabled: false` emitted a config that is retired on
|
|
186
|
+
// arrival (#527 deleted the manager's skip and never shipped `units`)
|
|
187
|
+
// while the `client` id beside it manages the account and renders the
|
|
188
|
+
// units — the gate reading exactly like it still works.
|
|
189
|
+
let dropped = false;
|
|
190
|
+
for (const key of ['enabled', 'units']) {
|
|
191
|
+
if (!(key in providers.adsense)) continue;
|
|
192
|
+
delete providers.adsense[key];
|
|
193
|
+
dropped = true;
|
|
194
|
+
notes.push(
|
|
195
|
+
`_config.yml adsense \`${key}\` dropped (#527) — there is no \`advertising.providers.adsense.${key}\`: `
|
|
196
|
+
+ '`client` presence is the ONE adsense switch (the managed account, the rendered units and the ads.txt '
|
|
197
|
+
+ 'record together). Omit the block to serve no ads and manage the account by hand',
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// A gates-ONLY block converts to NOTHING — the note's own instruction.
|
|
202
|
+
// Left behind, the emptied `adsense: {}` reads as an authored opt-in to
|
|
203
|
+
// the managed account, the exact outcome the dropped gate meant to
|
|
204
|
+
// refuse. An adsense block that arrived empty on its own IS that opt-in,
|
|
205
|
+
// so only a block the drop emptied is pruned.
|
|
206
|
+
if (dropped && isEmpty(providers.adsense)) delete providers.adsense;
|
|
207
|
+
}
|
|
208
|
+
const section = { ...(advertising.providers ? advertising : {}), providers };
|
|
209
|
+
if (isEmpty(providers)) delete section.providers;
|
|
210
|
+
if (!isEmpty(section)) omega.advertising = section;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// ---- recaptcha → captcha.providers.recaptcha (camelCase sub-keys, #23)
|
|
214
|
+
const recaptcha = take('recaptcha');
|
|
215
|
+
if (!isEmpty(recaptcha)) {
|
|
216
|
+
omega.captcha = { providers: { recaptcha: renameKeys(recaptcha, RECAPTCHA_KEYS) } };
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// ---- cloudflare → edge.providers.cloudflare (#23)
|
|
220
|
+
const cloudflare = take('cloudflare');
|
|
221
|
+
if (!isEmpty(cloudflare)) {
|
|
222
|
+
omega.edge = { providers: { cloudflare } };
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// ---- web_manager.payment → payment, with `processors` → `providers` (#425:
|
|
226
|
+
// every role names its vendors under `providers`, payment included)
|
|
227
|
+
if (!isEmpty(legacyWebManager.payment)) {
|
|
228
|
+
omega.payment = legacyWebManager.payment;
|
|
229
|
+
delete legacyWebManager.payment;
|
|
230
|
+
|
|
231
|
+
if (!isEmpty(omega.payment.processors)) {
|
|
232
|
+
omega.payment = renameKeys(omega.payment, { processors: 'providers' });
|
|
233
|
+
notes.push('`payment.processors` renamed to `payment.providers` (#425 — one provider shape per role)');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Legacy "disabled" idiom: credential keys set to `false` (somiibo ships
|
|
237
|
+
// `stripe.publishableKey: false`). The schema types them as strings —
|
|
238
|
+
// absent means not configured, so drop the false-valued keys.
|
|
239
|
+
for (const provider of Object.values(omega.payment.providers || {})) {
|
|
240
|
+
for (const [key, value] of Object.entries(provider)) {
|
|
241
|
+
if (value === false && key !== 'enabled') {
|
|
242
|
+
delete provider[key];
|
|
243
|
+
notes.push(`payment credential \`${key}: false\` dropped (absent = not configured)`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// ---- web_manager.sentry → monitoring.providers.sentry (#485). The schema
|
|
250
|
+
// picked the home: the manager's monitoring service reads that block's
|
|
251
|
+
// presence as the brand's pick of Sentry, so a converted brand that left the
|
|
252
|
+
// settings in the client blob had NO `monitoring` key and never provisioned a
|
|
253
|
+
// project. The legacy shape is a client-module toggle — `{ enabled, config }`
|
|
254
|
+
// — and the SDK knobs inside `config` are exactly the provider block.
|
|
255
|
+
if (!isEmpty(legacyWebManager.sentry)) {
|
|
256
|
+
const legacySentry = legacyWebManager.sentry;
|
|
257
|
+
delete legacyWebManager.sentry;
|
|
258
|
+
|
|
259
|
+
const monitoring = {};
|
|
260
|
+
if (typeof legacySentry.enabled === 'boolean') monitoring.enabled = legacySentry.enabled;
|
|
261
|
+
monitoring.providers = { sentry: legacySentry.config || {} };
|
|
262
|
+
|
|
263
|
+
omega.monitoring = monitoring;
|
|
264
|
+
notes.push('`web_manager.sentry` → `monitoring.providers.sentry` (#485) — the one error-reporting contract\'s config seam, which the manager\'s monitoring service reconciles');
|
|
265
|
+
|
|
266
|
+
// The two `enabled` flags do NOT mean the same thing: the legacy one gated
|
|
267
|
+
// the client module, while `monitoring.enabled` is only the manager's skip
|
|
268
|
+
// switch — at runtime, DSN presence IS the signal. So a legacy-disabled
|
|
269
|
+
// block that still carries a DSN starts reporting after the migration.
|
|
270
|
+
if (legacySentry.enabled === false && monitoring.providers.sentry.dsn) {
|
|
271
|
+
notes.push('`web_manager.sentry.enabled: false` carried a DSN — `monitoring.enabled: false` only skips the manager\'s provisioning service; DSN presence is the RUNTIME switch, so remove the dsn to keep reporting off');
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// ---- cookieConsent → consent (#383). The banner became a real gate, so the
|
|
276
|
+
// block was renamed and most of its settings stopped existing: `palette` and
|
|
277
|
+
// `theme` (the panel paints from the --omega-* tokens, which is the only way
|
|
278
|
+
// it is right in both color modes), `type` (the visitor's region picks opt-in
|
|
279
|
+
// vs opt-out — never a config key), and the copy, whose buttons no longer
|
|
280
|
+
// mean what they meant ("I Understand" is not an Accept). `enabled` and
|
|
281
|
+
// `position` are the two that survive unchanged. Carrying the old name would
|
|
282
|
+
// emit a config that fails validation on the retired-key guard.
|
|
283
|
+
if (!isEmpty(legacyWebManager.cookieConsent)) {
|
|
284
|
+
const legacyConsent = legacyWebManager.cookieConsent;
|
|
285
|
+
delete legacyWebManager.cookieConsent;
|
|
286
|
+
|
|
287
|
+
const consent = {};
|
|
288
|
+
if (typeof legacyConsent.enabled === 'boolean') consent.enabled = legacyConsent.enabled;
|
|
289
|
+
|
|
290
|
+
const position = legacyConsent.config && legacyConsent.config.position;
|
|
291
|
+
if (!isEmpty(position)) consent.config = { position };
|
|
292
|
+
|
|
293
|
+
if (!isEmpty(consent)) legacyWebManager.consent = consent;
|
|
294
|
+
notes.push('`web_manager.cookieConsent` → `client.consent` (#383); palette/theme/type and the banner copy are gone — the panel paints from tokens and the visitor\'s region picks opt-in vs opt-out');
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const connections = take('oauth2');
|
|
298
|
+
if (!isEmpty(connections)) {
|
|
299
|
+
omega.connections = connections;
|
|
300
|
+
notes.push('`oauth2` → `connections` (#788) — the per-provider block is unchanged; rename the `OAUTH2_<PROVIDER>_CLIENT_ID`/`_SECRET` pair in the .env to `CONNECTIONS_<PROVIDER>_*`, move `targets/backend/src/oauth2/` to `src/connections/`, and register `<site>/connections/callback` as the redirect URI at each provider');
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// ---- the UJM page maps #610 retired — dropped with the block that replaced them
|
|
304
|
+
for (const [key, replacement] of Object.entries(RETIRED_PAGE_MAPS)) {
|
|
305
|
+
const value = take(key);
|
|
306
|
+
if (isEmpty(value)) continue;
|
|
307
|
+
notes.push(`_config.yml \`${key}\` dropped (#610) — the page and its shortlinks derive from \`${replacement}\`; declare the target and delete the hand-written links`);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// ---- Jekyll collections DROPPED, one note each (#589). A Jekyll collection
|
|
311
|
+
// declares `{ output, permalink, title }`; `targets.web.collections` declares
|
|
312
|
+
// a GROUPING — `field`, the dotted frontmatter path its category pages group
|
|
313
|
+
// on — and readCollections hard-fails without it. Nothing in the legacy block
|
|
314
|
+
// says what that field is, so carrying it verbatim wrote a config whose FIRST
|
|
315
|
+
// build died, and deriving one would be a guess wearing a fact's clothes. The
|
|
316
|
+
// #696 ruling: drop it and NAME the manual step.
|
|
317
|
+
const collections = take('collections');
|
|
318
|
+
if (!isEmpty(collections)) {
|
|
319
|
+
// Jekyll takes a LIST of names as well as a mapping (`collections: [recipes,
|
|
320
|
+
// docs]` — the documented shorthand for the block form). Normalized to the
|
|
321
|
+
// names, or every note below is about a collection called "0".
|
|
322
|
+
const names = Array.isArray(collections) ? collections.map(String) : Object.keys(collections);
|
|
323
|
+
for (const name of names) {
|
|
324
|
+
notes.push(
|
|
325
|
+
`_config.yml \`collections.${name}\` dropped (#589) — a Jekyll collection carries no grouping field and `
|
|
326
|
+
+ `\`targets.web.collections\` requires one. Declare \`targets.web.collections.${name}\` by hand with its `
|
|
327
|
+
+ '`field` (the dotted frontmatter path its category pages group on, e.g. `doc.category`), then move the '
|
|
328
|
+
+ `documents to \`src/_${name}/\``,
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// ---- the legacy `meta` block DROPPED (#607, Ian 2026-08-26). omega.json5
|
|
334
|
+
// has no meta section: the site-wide default is the brand block the head
|
|
335
|
+
// falls back to, and everything per-page lives in that page's frontmatter.
|
|
336
|
+
// Carrying it would write a config the validator refuses (retired-keys.js)
|
|
337
|
+
// — and a silently ignored one before that.
|
|
338
|
+
const legacyMeta = take('meta');
|
|
339
|
+
if (!isEmpty(legacyMeta)) {
|
|
340
|
+
notes.push(
|
|
341
|
+
'_config.yml `meta` dropped (#607) — omega.json5 has no meta section. Put the site-wide title/description in '
|
|
342
|
+
+ '`brand.name` / `brand.description` (the head falls back to them), and anything per-page in that page\'s own `meta:` frontmatter',
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// ---- web-scoped sections from _config.yml
|
|
347
|
+
for (const key of WEB_SECTION_ORDER) {
|
|
348
|
+
if (key === 'client') {
|
|
349
|
+
if (!isEmpty(legacyWebManager)) web.client = legacyWebManager;
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
const value = take(key);
|
|
353
|
+
if (!isEmpty(value)) web[key] = value;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// ---- leftovers: Jekyll machinery dropped, unknown keys carried web-scoped
|
|
357
|
+
for (const [key, value] of Object.entries(config)) {
|
|
358
|
+
if (DROPPED_JEKYLL_KEYS.includes(key)) {
|
|
359
|
+
notes.push(`_config.yml \`${key}\` dropped (Jekyll machinery)`);
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
if (isEmpty(value)) continue;
|
|
363
|
+
web[key] = value;
|
|
364
|
+
notes.push(`_config.yml \`${key}\` carried to targets.web.${key} (unrecognized section — verify)`);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
if (web.generators) notes.push('dynamic-page generators carried to targets.web.generators — verify engine coverage');
|
|
368
|
+
if (web.defaults) notes.push('Jekyll per-collection defaults carried to targets.web.defaults (codemod rule 8)');
|
|
369
|
+
|
|
370
|
+
// The sitemap delta (#564). Unconditional: every UJM site shipped the blog
|
|
371
|
+
// taxonomy and its pagination in sitemap.xml, and OMEGA's index posture
|
|
372
|
+
// leaves them out, so the `<loc>` count drops on the first build. Named here
|
|
373
|
+
// so a brand's changelog can record it instead of filing it as a regression.
|
|
374
|
+
notes.push(
|
|
375
|
+
'sitemap.xml shrinks: the blog taxonomy (/blog/tags/*, /blog/categories/*) and every listing\'s /page/N '
|
|
376
|
+
+ 'are noindex AND unlisted in OMEGA (#564 — one flag, both signals); posts, pages and /blog itself stay listed',
|
|
377
|
+
);
|
|
378
|
+
|
|
379
|
+
// ---- ultimate-jekyll-manager.json → build settings
|
|
380
|
+
if (ujm) {
|
|
381
|
+
if (!isEmpty(ujm.distribute)) web.distribute = ujm.distribute;
|
|
382
|
+
if (ujm.sass && !isEmpty(ujm.sass.purgecss)) web.purgecss = ujm.sass.purgecss;
|
|
383
|
+
if (!isEmpty(ujm.imagemin)) web.imagemin = ujm.imagemin;
|
|
384
|
+
if (ujm.github && !isEmpty(ujm.github.workflows)) web.workflows = ujm.github.workflows;
|
|
385
|
+
if (ujm.webpack && ujm.webpack.target && ujm.webpack.target !== 'default') {
|
|
386
|
+
notes.push(`ultimate-jekyll-manager.json \`webpack.target: ${ujm.webpack.target}\` dropped (esbuild pipeline has no target override)`);
|
|
387
|
+
}
|
|
388
|
+
if (Array.isArray(ujm.gems) && ujm.gems.length > 0) {
|
|
389
|
+
notes.push(`ultimate-jekyll-manager.json \`gems\` dropped (${ujm.gems.join(', ')}) — Ruby is gone; port the gem's behavior if still needed`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
omega.targets = { web };
|
|
394
|
+
|
|
395
|
+
// ---- secrets never land in omega.json5
|
|
396
|
+
const secretPaths = findSecretKeys(omega);
|
|
397
|
+
for (const dotPath of secretPaths) {
|
|
398
|
+
const segments = dotPath.split('.');
|
|
399
|
+
const key = segments.pop();
|
|
400
|
+
let node = omega;
|
|
401
|
+
for (const segment of segments) node = node && node[segment];
|
|
402
|
+
if (node) delete node[key];
|
|
403
|
+
notes.push(`secret-shaped key \`${dotPath}\` dropped — move the value to .env`);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
return { omega, notes };
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Read + parse the legacy config files of a consumer.
|
|
411
|
+
* @param {string} root - consumer project root
|
|
412
|
+
* @returns {{ jekyll: object|null, ujm: object|null, files: string[] }}
|
|
413
|
+
*/
|
|
414
|
+
function readLegacyConfigs(root) {
|
|
415
|
+
const files = [];
|
|
416
|
+
let jekyll = null;
|
|
417
|
+
let ujm = null;
|
|
418
|
+
|
|
419
|
+
const jekyllPath = path.join(root, 'src', '_config.yml');
|
|
420
|
+
if (fs.existsSync(jekyllPath)) {
|
|
421
|
+
jekyll = yaml.load(fs.readFileSync(jekyllPath, 'utf8')) || {};
|
|
422
|
+
files.push(jekyllPath);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const ujmPath = path.join(root, 'config', 'ultimate-jekyll-manager.json');
|
|
426
|
+
if (fs.existsSync(ujmPath)) {
|
|
427
|
+
ujm = JSON5.parse(fs.readFileSync(ujmPath, 'utf8'));
|
|
428
|
+
files.push(ujmPath);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return { jekyll, ujm, files };
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Serialize an omega config object to JSON5 text with the migration header.
|
|
436
|
+
* @param {object} omega
|
|
437
|
+
* @returns {string}
|
|
438
|
+
*/
|
|
439
|
+
function serializeOmega(omega) {
|
|
440
|
+
const header = [
|
|
441
|
+
'// omega.json5 — generated by `omega migrate` from src/_config.yml +',
|
|
442
|
+
'// config/ultimate-jekyll-manager.json. Mapping: docs/shared/config.md.',
|
|
443
|
+
'// Comments and trailing commas are welcome (JSON5).',
|
|
444
|
+
].join('\n');
|
|
445
|
+
return `${header}\n${JSON5.stringify(omega, null, 2)}\n`;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
module.exports = { convertConfig, readLegacyConfigs, serializeOmega };
|