@omega.js/extension 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.
Files changed (684) hide show
  1. package/LICENSE +98 -0
  2. package/README.md +194 -0
  3. package/bin/omega +2 -0
  4. package/bin/omega-extension +2 -0
  5. package/bin/omg +2 -0
  6. package/dist/assets/css/bundles/.gitkeep +0 -0
  7. package/dist/assets/css/components/content/index.scss +5 -0
  8. package/dist/assets/css/components/options/index.scss +9 -0
  9. package/dist/assets/css/components/pages/index.scss +5 -0
  10. package/dist/assets/css/components/popup/index.scss +9 -0
  11. package/dist/assets/css/core/_animations.scss +64 -0
  12. package/dist/assets/css/core/_fontawesome.scss +146 -0
  13. package/dist/assets/css/core/_initialize.scss +23 -0
  14. package/dist/assets/css/core/_utilities.scss +80 -0
  15. package/dist/assets/css/omega-extension.scss +43 -0
  16. package/dist/assets/css/shell/_index.scss +207 -0
  17. package/dist/assets/css/tokens/_index.scss +166 -0
  18. package/dist/assets/js/core/app-shell.js +136 -0
  19. package/dist/assets/js/libs/initialize-tooltips.js +31 -0
  20. package/dist/assets/js/libs/recaptcha.js +94 -0
  21. package/dist/assets/js/main.js +4 -0
  22. package/dist/assets/themes/_template/README.md +115 -0
  23. package/dist/assets/themes/_template/_config.scss +60 -0
  24. package/dist/assets/themes/_template/_theme.js +14 -0
  25. package/dist/assets/themes/_template/_theme.scss +28 -0
  26. package/dist/assets/themes/_template/css/base/_root.scss +19 -0
  27. package/dist/assets/themes/_template/css/components/_components.scss +23 -0
  28. package/dist/assets/themes/base/README.md +5 -0
  29. package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
  30. package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
  31. package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
  32. package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
  33. package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
  34. package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
  35. package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
  36. package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
  37. package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
  38. package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
  39. package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
  40. package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
  41. package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
  42. package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
  43. package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
  44. package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
  45. package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
  46. package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
  47. package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
  48. package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
  49. package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
  50. package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
  51. package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
  52. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
  53. package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
  54. package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
  55. package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
  56. package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
  57. package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
  58. package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
  59. package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
  60. package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
  61. package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
  62. package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
  63. package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
  64. package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
  65. package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
  66. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
  67. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
  68. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
  69. package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
  70. package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
  71. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
  72. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
  73. package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
  74. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
  75. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
  76. package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
  77. package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
  78. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
  79. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
  80. package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
  81. package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
  82. package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
  83. package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
  84. package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
  85. package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
  86. package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
  87. package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
  88. package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
  89. package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
  90. package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
  91. package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
  92. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
  93. package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
  94. package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
  95. package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
  96. package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
  97. package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
  98. package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
  99. package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
  100. package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
  101. package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
  102. package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
  103. package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
  104. package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
  105. package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
  106. package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
  107. package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
  108. package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
  109. package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
  110. package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
  111. package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
  112. package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
  113. package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
  114. package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
  115. package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
  116. package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
  117. package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
  118. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
  119. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
  120. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
  121. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
  122. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
  123. package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
  124. package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
  125. package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
  126. package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
  127. package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
  128. package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
  129. package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
  130. package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
  131. package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
  132. package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
  133. package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
  134. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
  135. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
  136. package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
  137. package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
  138. package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
  139. package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
  140. package/dist/assets/themes/base/_theme.js +13 -0
  141. package/dist/assets/themes/base/_theme.scss +4 -0
  142. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  143. package/dist/assets/themes/bootstrap/_theme.scss +11 -0
  144. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  145. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  146. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  147. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  148. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  149. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  150. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  151. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  152. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  153. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  154. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  155. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  156. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  157. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  158. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  159. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  160. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  161. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  162. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  163. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  164. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  165. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  166. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  167. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  168. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  169. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  170. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  171. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  172. package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
  173. package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
  174. package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
  175. package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
  176. package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
  177. package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
  178. package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
  179. package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
  180. package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
  181. package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
  182. package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
  183. package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
  184. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  185. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  186. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  187. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  188. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  189. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  190. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  191. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  192. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  193. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  194. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  195. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  196. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  197. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  198. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  199. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  200. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  201. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  202. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  203. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  204. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  205. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  206. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  207. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  208. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  209. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  210. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  211. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  212. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  213. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  214. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  215. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  216. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  217. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  218. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  219. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  220. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  221. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  222. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  223. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  224. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  225. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  226. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  227. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  228. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  229. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  230. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  231. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  232. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  233. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  234. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  235. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  236. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  237. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  238. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  239. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  240. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  241. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  242. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  243. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  244. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  245. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  246. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  247. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  248. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  249. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  250. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  251. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  252. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  253. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  254. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  255. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  256. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  257. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  258. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  259. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  260. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  261. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  262. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  263. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  264. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  265. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  266. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  267. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  268. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  269. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  270. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  271. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  272. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  273. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  274. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  275. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  276. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  277. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  278. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  279. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  280. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  281. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  282. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  283. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  284. package/dist/assets/themes/classy/README.md +89 -0
  285. package/dist/assets/themes/classy/_config.scss +245 -0
  286. package/dist/assets/themes/classy/_theme.js +31 -0
  287. package/dist/assets/themes/classy/_theme.scss +57 -0
  288. package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
  289. package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
  290. package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
  291. package/dist/assets/themes/classy/css/base/_root.scss +113 -0
  292. package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
  293. package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
  294. package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
  295. package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
  296. package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
  297. package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
  298. package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
  299. package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
  300. package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
  301. package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
  302. package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
  303. package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
  304. package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
  305. package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
  306. package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
  307. package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
  308. package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
  309. package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
  310. package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
  311. package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
  312. package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
  313. package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
  314. package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
  315. package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
  316. package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
  317. package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
  318. package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
  319. package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
  320. package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
  321. package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
  322. package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
  323. package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
  324. package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
  325. package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
  326. package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
  327. package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
  328. package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
  329. package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
  330. package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
  331. package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
  332. package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
  333. package/dist/assets/themes/neobrutalism/README.md +118 -0
  334. package/dist/assets/themes/neobrutalism/_config.scss +139 -0
  335. package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
  336. package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
  337. package/dist/assets/themes/neobrutalism/_theme.js +24 -0
  338. package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
  339. package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
  340. package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
  341. package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
  342. package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
  343. package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
  344. package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
  345. package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
  346. package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
  347. package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
  348. package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
  349. package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
  350. package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
  351. package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
  352. package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
  353. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
  354. package/dist/assets/themes/newsflash/README.md +117 -0
  355. package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
  356. package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
  357. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
  358. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
  359. package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
  360. package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
  361. package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
  362. package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
  363. package/dist/assets/themes/newsflash/_config.scss +147 -0
  364. package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
  365. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
  366. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
  367. package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
  368. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
  369. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
  370. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
  371. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
  372. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
  373. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
  374. package/dist/assets/themes/newsflash/_theme.js +24 -0
  375. package/dist/assets/themes/newsflash/_theme.scss +70 -0
  376. package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
  377. package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
  378. package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
  379. package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
  380. package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
  381. package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
  382. package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
  383. package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
  384. package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
  385. package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
  386. package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
  387. package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
  388. package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
  389. package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
  390. package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
  391. package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
  392. package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
  393. package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
  394. package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
  395. package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
  396. package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
  397. package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
  398. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
  399. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
  400. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
  401. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
  402. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
  403. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
  404. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
  405. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
  406. package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
  407. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
  408. package/dist/background.js +684 -0
  409. package/dist/build.js +268 -0
  410. package/dist/cli-run.js +25 -0
  411. package/dist/cli.js +30 -0
  412. package/dist/commands/build.js +67 -0
  413. package/dist/commands/clean.js +29 -0
  414. package/dist/commands/deploy.js +97 -0
  415. package/dist/commands/install.js +58 -0
  416. package/dist/commands/lib/dependencies.js +33 -0
  417. package/dist/commands/lib/deploy-precheck.js +57 -0
  418. package/dist/commands/lib/ensure-target.js +151 -0
  419. package/dist/commands/lib/push-secrets.js +60 -0
  420. package/dist/commands/migrate.js +77 -0
  421. package/dist/commands/test.js +110 -0
  422. package/dist/commands/update.js +21 -0
  423. package/dist/commands/version.js +12 -0
  424. package/dist/config/manifest.json +117 -0
  425. package/dist/config/page-template.html +21 -0
  426. package/dist/content.js +37 -0
  427. package/dist/defaults/.github/workflows/publish.yml +86 -0
  428. package/dist/defaults/.nvmrc +1 -0
  429. package/dist/defaults/.vscode/settings.json +8 -0
  430. package/dist/defaults/AGENTS.md +113 -0
  431. package/dist/defaults/CHANGELOG.md +15 -0
  432. package/dist/defaults/CLAUDE.md +1 -0
  433. package/dist/defaults/_.gitignore +75 -0
  434. package/dist/defaults/config/description.md +46 -0
  435. package/dist/defaults/config/messages.json +20 -0
  436. package/dist/defaults/config/omega.json5 +64 -0
  437. package/dist/defaults/docs/README.md +17 -0
  438. package/dist/defaults/gulpfile.js +6 -0
  439. package/dist/defaults/hooks/build/post.js +8 -0
  440. package/dist/defaults/hooks/build/pre.js +8 -0
  441. package/dist/defaults/src/assets/css/bundles/.gitkeep +0 -0
  442. package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
  443. package/dist/defaults/src/assets/css/components/offscreen/index.scss +4 -0
  444. package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
  445. package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
  446. package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
  447. package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
  448. package/dist/defaults/src/assets/css/main.scss +32 -0
  449. package/dist/defaults/src/assets/images/.gitkeep +0 -0
  450. package/dist/defaults/src/assets/js/components/background/index.js +25 -0
  451. package/dist/defaults/src/assets/js/components/content/index.js +22 -0
  452. package/dist/defaults/src/assets/js/components/offscreen/index.js +25 -0
  453. package/dist/defaults/src/assets/js/components/options/index.js +22 -0
  454. package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
  455. package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
  456. package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
  457. package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
  458. package/dist/defaults/src/manifest.json +131 -0
  459. package/dist/defaults/src/views/offscreen/index.html +3 -0
  460. package/dist/defaults/src/views/options/index.html +8 -0
  461. package/dist/defaults/src/views/pages/index.html +10 -0
  462. package/dist/defaults/src/views/popup/index.html +4 -0
  463. package/dist/defaults/src/views/sidepanel/index.html +4 -0
  464. package/dist/defaults/test/README.md +41 -0
  465. package/dist/defaults/test/_init.js +10 -0
  466. package/dist/defaults/test/boot/externally-connectable.test.js +28 -0
  467. package/dist/gulp/config/locales.js +12 -0
  468. package/dist/gulp/main.js +78 -0
  469. package/dist/gulp/tasks/_.js +18 -0
  470. package/dist/gulp/tasks/audit.js +222 -0
  471. package/dist/gulp/tasks/bundle.js +687 -0
  472. package/dist/gulp/tasks/defaults.js +281 -0
  473. package/dist/gulp/tasks/distribute.js +172 -0
  474. package/dist/gulp/tasks/fontawesome.js +25 -0
  475. package/dist/gulp/tasks/html.js +163 -0
  476. package/dist/gulp/tasks/icons.js +126 -0
  477. package/dist/gulp/tasks/package.js +742 -0
  478. package/dist/gulp/tasks/publish.js +417 -0
  479. package/dist/gulp/tasks/sass.js +252 -0
  480. package/dist/gulp/tasks/serve.js +103 -0
  481. package/dist/gulp/tasks/translate.js +252 -0
  482. package/dist/gulp/tasks/utils/build-json.js +43 -0
  483. package/dist/gulp/tasks/utils/template-transform.js +50 -0
  484. package/dist/gulp/templates/BUILD_INSTRUCTIONS.md +69 -0
  485. package/dist/index.js +46 -0
  486. package/dist/lib/affiliatizer.js +224 -0
  487. package/dist/lib/analytics.js +26 -0
  488. package/dist/lib/auth-helpers.js +213 -0
  489. package/dist/lib/extension.js +116 -0
  490. package/dist/lib/icons.js +36 -0
  491. package/dist/lib/logger-lite.js +35 -0
  492. package/dist/lib/logger.js +4 -0
  493. package/dist/lib/messaging.js +48 -0
  494. package/dist/lib/safe-install.js +4 -0
  495. package/dist/lib/theme.js +73 -0
  496. package/dist/lib/verts.js +68 -0
  497. package/dist/offscreen.js +31 -0
  498. package/dist/omega-bin.js +6 -0
  499. package/dist/options.js +80 -0
  500. package/dist/page.js +80 -0
  501. package/dist/popup.js +80 -0
  502. package/dist/sidepanel.js +80 -0
  503. package/dist/test/assert.js +4 -0
  504. package/dist/test/fixtures/consumer-extension/dist/background.js +23 -0
  505. package/dist/test/fixtures/consumer-extension/dist/manifest.json +20 -0
  506. package/dist/test/fixtures/consumer-extension/dist/options.html +10 -0
  507. package/dist/test/fixtures/consumer-extension/dist/popup.bundle.js +5 -0
  508. package/dist/test/fixtures/consumer-extension/dist/popup.html +12 -0
  509. package/dist/test/harness/extension/background.js +26 -0
  510. package/dist/test/harness/extension/manifest.json +27 -0
  511. package/dist/test/harness/extension/options.html +12 -0
  512. package/dist/test/harness/extension/popup.html +12 -0
  513. package/dist/test/harness/extension/sidepanel.html +12 -0
  514. package/dist/test/index.js +63 -0
  515. package/dist/test/runner.js +99 -0
  516. package/dist/test/runners/boot.js +221 -0
  517. package/dist/test/runners/chromium.js +391 -0
  518. package/dist/test/runners/helpers.js +24 -0
  519. package/dist/test/suites/background/messaging.test.js +44 -0
  520. package/dist/test/suites/background/storage.test.js +46 -0
  521. package/dist/test/suites/background/sw-context.test.js +49 -0
  522. package/dist/test/suites/boot/build-json-bake.test.js +80 -0
  523. package/dist/test/suites/boot/extension-loads.test.js +58 -0
  524. package/dist/test/suites/build/affiliatizer.test.js +64 -0
  525. package/dist/test/suites/build/app-launch.test.js +65 -0
  526. package/dist/test/suites/build/attach-log-file.test.js +99 -0
  527. package/dist/test/suites/build/auth-emulator-gate.test.js +118 -0
  528. package/dist/test/suites/build/auth-triggers.test.js +71 -0
  529. package/dist/test/suites/build/boot-discovery.test.js +134 -0
  530. package/dist/test/suites/build/boot-timeout.test.js +92 -0
  531. package/dist/test/suites/build/build-error-notification.test.js +122 -0
  532. package/dist/test/suites/build/build-json-bake.test.js +302 -0
  533. package/dist/test/suites/build/build-verb.test.js +138 -0
  534. package/dist/test/suites/build/bundle-targets.test.js +66 -0
  535. package/dist/test/suites/build/cache-warming.test.js +44 -0
  536. package/dist/test/suites/build/cli.test.js +150 -0
  537. package/dist/test/suites/build/default-boot-test.test.js +100 -0
  538. package/dist/test/suites/build/defaults-scaffold.test.js +287 -0
  539. package/dist/test/suites/build/deploy-dispatch.test.js +76 -0
  540. package/dist/test/suites/build/distribute-task.test.js +111 -0
  541. package/dist/test/suites/build/ensure-target.test.js +141 -0
  542. package/dist/test/suites/build/env-delivery.test.js +239 -0
  543. package/dist/test/suites/build/env-watch.test.js +86 -0
  544. package/dist/test/suites/build/expect.test.js +48 -0
  545. package/dist/test/suites/build/exports.test.js +53 -0
  546. package/dist/test/suites/build/extension-fallback.test.js +82 -0
  547. package/dist/test/suites/build/framework-deps.test.js +176 -0
  548. package/dist/test/suites/build/global-handlers.test.js +70 -0
  549. package/dist/test/suites/build/icon-sheet.test.js +74 -0
  550. package/dist/test/suites/build/logger-lite.test.js +61 -0
  551. package/dist/test/suites/build/manager.test.js +249 -0
  552. package/dist/test/suites/build/mode-helpers.test.js +136 -0
  553. package/dist/test/suites/build/omega-shell.test.js +103 -0
  554. package/dist/test/suites/build/omega-tokens.test.js +76 -0
  555. package/dist/test/suites/build/package-task.test.js +831 -0
  556. package/dist/test/suites/build/setup-scripts.test.js +172 -0
  557. package/dist/test/suites/build/strip-dev-blocks.test.js +122 -0
  558. package/dist/test/suites/build/template-replace.test.js +116 -0
  559. package/dist/test/suites/build/test-discovery.test.js +64 -0
  560. package/dist/test/suites/build/test-target-no-match.test.js +119 -0
  561. package/dist/test/suites/build/theme-resolve.test.js +115 -0
  562. package/dist/test/suites/build/translate.test.js +85 -0
  563. package/dist/test/suites/build/url-helpers.test.js +119 -0
  564. package/dist/test/suites/build/verb-logs.test.js +43 -0
  565. package/dist/test/suites/build/verts-binding.test.js +67 -0
  566. package/dist/test/suites/build/wakeup-ping.test.js +90 -0
  567. package/dist/test/suites/build/wave5-messenger.test.js +80 -0
  568. package/dist/test/suites/view/options-and-sidepanel.test.js +16 -0
  569. package/dist/test/suites/view/popup-context.test.js +53 -0
  570. package/dist/test/suites/view/sidepanel.test.js +16 -0
  571. package/dist/test/utils/extended-mode-warning.js +13 -0
  572. package/dist/utils/attach-log-file.js +4 -0
  573. package/dist/utils/mode-helpers.js +117 -0
  574. package/dist/utils/url-helpers.js +69 -0
  575. package/dist/vendor/account/engine.js +182 -0
  576. package/dist/vendor/account/features.js +220 -0
  577. package/dist/vendor/account/index.js +53 -0
  578. package/dist/vendor/account/schema.js +272 -0
  579. package/dist/vendor/account/subscription.js +38 -0
  580. package/dist/vendor/config/company.js +31 -0
  581. package/dist/vendor/config/defaults.js +173 -0
  582. package/dist/vendor/config/demo.js +18 -0
  583. package/dist/vendor/config/desktop-artifacts.js +110 -0
  584. package/dist/vendor/config/edit.js +769 -0
  585. package/dist/vendor/config/env-delivery.js +145 -0
  586. package/dist/vendor/config/env-rules.js +93 -0
  587. package/dist/vendor/config/env-schema.js +1078 -0
  588. package/dist/vendor/config/env.js +445 -0
  589. package/dist/vendor/config/hooks.js +97 -0
  590. package/dist/vendor/config/index.js +237 -0
  591. package/dist/vendor/config/instances.js +208 -0
  592. package/dist/vendor/config/load.js +490 -0
  593. package/dist/vendor/config/merge.js +68 -0
  594. package/dist/vendor/config/order.js +139 -0
  595. package/dist/vendor/config/ports.js +374 -0
  596. package/dist/vendor/config/providers.js +32 -0
  597. package/dist/vendor/config/repo.js +142 -0
  598. package/dist/vendor/config/retired-keys.js +430 -0
  599. package/dist/vendor/config/schema.js +1610 -0
  600. package/dist/vendor/config/secrets.js +50 -0
  601. package/dist/vendor/config/seed.js +34 -0
  602. package/dist/vendor/config/site-global.js +205 -0
  603. package/dist/vendor/config/validate.js +554 -0
  604. package/dist/vendor/config/winback.js +61 -0
  605. package/dist/vendor/devkit/actions-secrets.js +145 -0
  606. package/dist/vendor/devkit/attach-log-file.js +262 -0
  607. package/dist/vendor/devkit/bundle.js +292 -0
  608. package/dist/vendor/devkit/ci-workflows.js +520 -0
  609. package/dist/vendor/devkit/clean-dirs.js +28 -0
  610. package/dist/vendor/devkit/cli-router.js +156 -0
  611. package/dist/vendor/devkit/defaults-engine.js +372 -0
  612. package/dist/vendor/devkit/deploy-precheck.js +54 -0
  613. package/dist/vendor/devkit/deploy-record.js +180 -0
  614. package/dist/vendor/devkit/deploy.js +286 -0
  615. package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
  616. package/dist/vendor/devkit/env-watch.js +132 -0
  617. package/dist/vendor/devkit/framework-deps.js +46 -0
  618. package/dist/vendor/devkit/icons.js +178 -0
  619. package/dist/vendor/devkit/license.js +155 -0
  620. package/dist/vendor/devkit/local.js +1905 -0
  621. package/dist/vendor/devkit/logger.js +128 -0
  622. package/dist/vendor/devkit/merge-line-files.js +296 -0
  623. package/dist/vendor/devkit/npm-registry.js +52 -0
  624. package/dist/vendor/devkit/omega-bin.js +345 -0
  625. package/dist/vendor/devkit/safe-install.js +18 -0
  626. package/dist/vendor/devkit/scaffold-guard.js +96 -0
  627. package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
  628. package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
  629. package/dist/vendor/devkit/target-dependencies.js +137 -0
  630. package/dist/vendor/devkit/target-secrets.js +165 -0
  631. package/dist/vendor/devkit/test/assert.js +120 -0
  632. package/dist/vendor/devkit/test/define-cases.js +104 -0
  633. package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
  634. package/dist/vendor/devkit/test/runner-core.js +554 -0
  635. package/dist/vendor/devkit/test/scope.js +162 -0
  636. package/dist/vendor/devkit/translate/cache.js +84 -0
  637. package/dist/vendor/devkit/translate/engine.js +243 -0
  638. package/dist/vendor/devkit/translate/index.js +49 -0
  639. package/dist/vendor/devkit/translate/languages.js +134 -0
  640. package/dist/vendor/devkit/translate/providers.js +188 -0
  641. package/dist/vendor/devkit/update.js +569 -0
  642. package/docs/affiliatizer.md +81 -0
  643. package/docs/audit.md +67 -0
  644. package/docs/auth.md +149 -0
  645. package/docs/build-system.md +176 -0
  646. package/docs/cdp-debugging.md +42 -0
  647. package/docs/cli.md +73 -0
  648. package/docs/common-mistakes.md +10 -0
  649. package/docs/components.md +87 -0
  650. package/docs/css.md +133 -0
  651. package/docs/defaults.md +72 -0
  652. package/docs/environment-detection.md +79 -0
  653. package/docs/extension.md +93 -0
  654. package/docs/hooks.md +111 -0
  655. package/docs/icons.md +47 -0
  656. package/docs/index.md +291 -0
  657. package/docs/logging.md +33 -0
  658. package/docs/managers.md +100 -0
  659. package/docs/offscreen.md +57 -0
  660. package/docs/publishing.md +182 -0
  661. package/docs/shared/agent-docs.md +89 -0
  662. package/docs/shared/analytics.md +612 -0
  663. package/docs/shared/brands.md +51 -0
  664. package/docs/shared/breaking-changes.md +497 -0
  665. package/docs/shared/config.md +1387 -0
  666. package/docs/shared/deploys.md +215 -0
  667. package/docs/shared/icons.md +201 -0
  668. package/docs/shared/local-dev.md +147 -0
  669. package/docs/shared/logging.md +202 -0
  670. package/docs/shared/monitoring.md +153 -0
  671. package/docs/shared/publishing.md +183 -0
  672. package/docs/shared/rulings.md +34 -0
  673. package/docs/shared/testing.md +147 -0
  674. package/docs/shared/theming.md +604 -0
  675. package/docs/shared/translation.md +291 -0
  676. package/docs/shared/updates.md +61 -0
  677. package/docs/templating.md +66 -0
  678. package/docs/test-boot-layer.md +143 -0
  679. package/docs/test-framework.md +411 -0
  680. package/docs/themes.md +89 -0
  681. package/docs/translations.md +73 -0
  682. package/docs/verts.md +67 -0
  683. package/docs/xss-prevention.md +95 -0
  684. package/package.json +159 -0
@@ -0,0 +1,687 @@
1
+ // bundle — one esbuild pass over every browser entry point the project has.
2
+ //
3
+ // The bundler is esbuild since [#738](https://github.com/Omega-JS-Stack/omega/issues/738),
4
+ // and the file, the gulp task and the log tag were renamed off `webpack` with
5
+ // it — a task named after a bundler it no longer runs is a lie every reader has
6
+ // to unlearn. @babel/preset-env went with webpack: esbuild's `target` IS the
7
+ // syntax floor, stated once below.
8
+ //
9
+ // Every shared part comes from @omega.js/devkit's ONE bundle wrapper: the
10
+ // framework-deps resolve hook (#87 — a consumer requires a framework dependency
11
+ // by bare name and gets the FRAMEWORK's copy), the production `@dev-only` strip
12
+ // (#18), the minify/sourcemap rules by mode, and one timing line per build.
13
+ // What lives here is only what is genuinely the extension's: the entry
14
+ // discovery, the browser syntax floor, the asset/theme aliases, the Node-builtin
15
+ // shim, the `%%%key%%%` substitution, and the OMEGA_BUILD_JSON bake.
16
+ //
17
+ // The bake ([#743](https://github.com/Omega-JS-Stack/omega/issues/743)) is
18
+ // @omega.js/desktop's, key for key: `define` replaces the bare identifier at
19
+ // compile time and `banner` prepends the global assignment, so every emitted
20
+ // bundle carries its own copy. package.js used to write the snapshot as a
21
+ // `packaged/<target>/raw/build.js` JSONP file (plus a `build.json` sidecar
22
+ // nothing read) that the service worker importScripts()'d and every page loaded
23
+ // with its own <script> tag — one baked config, two techniques on sibling
24
+ // frameworks. Neither file is written any more.
25
+ //
26
+ // ONE call covers every lane. webpack needed three configs because code
27
+ // SPLITTING had to be switched off per lane (a service worker and a content
28
+ // script cannot fetch a chunk under MV3's CSP); esbuild's `iife` format has no
29
+ // splitting at all, so background, content scripts and the extension pages all
30
+ // take the same options and each bundle is one self-contained file.
31
+
32
+ // Libraries
33
+ const Manager = new (require('../../build.js'));
34
+ const logger = Manager.logger('bundle');
35
+ const watcherLogger = Manager.logger('bundle:watcher');
36
+ const { watch, series } = require('gulp');
37
+ const glob = require('glob').globSync;
38
+ const path = require('path');
39
+ const jetpack = require('fs-jetpack');
40
+ const { template } = require('node-powertools');
41
+ const version = require('wonderful-version');
42
+ const { bundle, formatBytes } = require('../../vendor/devkit/bundle.js');
43
+ const { emptyModulesPlugin } = require('../../vendor/devkit/empty-modules-plugin.js');
44
+ const { resolveThemeId } = require('../../lib/theme.js');
45
+ const { readSiblingPorts, envPorts } = require('../../vendor/config/index.js');
46
+ const { bakeKeys } = require('../../vendor/config/env-delivery.js');
47
+ const { checkEnvRules } = require('../../vendor/config/env-rules.js');
48
+ const { resolveLicenseStamp } = require('../../vendor/devkit/license.js');
49
+
50
+ // Load package
51
+ const project = Manager.getPackage('project');
52
+ const frameworkPackage = Manager.getPackage('main');
53
+ const manifest = Manager.getManifest();
54
+ const config = Manager.getConfig();
55
+ const rootPathPackage = Manager.getRootPath('main');
56
+ const rootPathProject = Manager.getRootPath('project');
57
+
58
+ // Themes are per-framework (#261) — a shared theme.id naming a WEB theme falls
59
+ // back to the extension's default instead of aliasing a directory that isn't there.
60
+ const themesDir = path.resolve(rootPathPackage, 'dist/assets/themes');
61
+ const themeId = resolveThemeId(config.theme?.id, { themesDir, logger });
62
+
63
+ // Chrome 88 is where MV3 shipped — nothing older can load the artifact at all.
64
+ const CHROME_MV3_FLOOR = 88;
65
+ // Firefox 91 is the `strict_min_version` the framework's default manifest
66
+ // (src/config/manifest.json) ships, so it is the floor of an extension that
67
+ // declares none of its own.
68
+ const FIREFOX_MV3_FLOOR = 91;
69
+
70
+ /**
71
+ * The syntax floor, READ from the manifest (it was @babel/preset-env's
72
+ * browserslist guess before #738). The project already declares its floor in
73
+ * the one place a browser reads — `minimum_chrome_version` and
74
+ * `browser_specific_settings.gecko.strict_min_version` — so the bundler takes
75
+ * it from there and moves whenever the consumer moves it. Undeclared, each
76
+ * side falls back to its MV3 minimum above. esbuild compiles SYNTAX down to
77
+ * this pair and leaves everything newer alone; it never polyfills a runtime
78
+ * API, which is the one thing preset-env's core-js path could have done and
79
+ * this build never asked it to.
80
+ * @param {object} manifest - the project's manifest (`Manager.getManifest()`)
81
+ * @returns {string[]} esbuild targets, `['chrome<n>', 'firefox<n>']`
82
+ */
83
+ function resolveSyntaxTarget(manifest) {
84
+ const chrome = majorVersion(manifest.minimum_chrome_version);
85
+ const firefox = majorVersion(manifest.browser_specific_settings?.gecko?.strict_min_version);
86
+
87
+ return [
88
+ `chrome${chrome || CHROME_MV3_FLOOR}`,
89
+ `firefox${firefox || FIREFOX_MV3_FLOOR}`,
90
+ ];
91
+ }
92
+
93
+ /**
94
+ * The major of a declared manifest version (`'91.0'`, `'110'`), or null when
95
+ * the value is not one — a floor nobody can parse must not become an invented
96
+ * esbuild target.
97
+ * @param {string|number} [declared] - the manifest value
98
+ * @returns {number|null}
99
+ */
100
+ function majorVersion(declared) {
101
+ const major = parseInt(String(declared).split('.')[0], 10);
102
+ return Number.isInteger(major) ? major : null;
103
+ }
104
+
105
+ const SYNTAX_TARGET = resolveSyntaxTarget(manifest);
106
+
107
+ // Extension pages, content scripts and the service worker are all browser
108
+ // environments with no Node built-ins, but libraries bundled through
109
+ // @omega.js/client (firebase and friends) still IMPORT them on code paths their
110
+ // browser builds never take. webpack answered `resolve.fallback: { fs: false, … }`;
111
+ // esbuild has no such option, so the same list goes to @omega.js/devkit's
112
+ // `emptyModulesPlugin` — the shared hook, the same one @omega.js/desktop's
113
+ // renderer passes its own list to.
114
+ const BROWSER_EMPTY_MODULES = [
115
+ 'fs', 'path', 'crypto', 'os', 'util', 'assert', 'stream', 'buffer', 'process',
116
+ ];
117
+
118
+ // The build-time tokens consumer and framework browser code writes, and the
119
+ // brackets they are spelled with (`%%%version%%%`). package.js speaks the same
120
+ // idiom over the manifest.
121
+ const TEMPLATE_BRACKETS = ['%%%', '%%%'];
122
+
123
+ // Define bundle files separately for easier tracking
124
+ const bundleFiles = [
125
+ // Main bundles (if any exist in bundles/ directory)
126
+ `${rootPathPackage}/dist/assets/js/bundles/*.js`,
127
+
128
+ // Project bundles
129
+ 'src/assets/js/bundles/*.js',
130
+ ];
131
+
132
+ // Entry points to compile (only index.js files)
133
+ const input = [
134
+ // Bundle files (if any exist)
135
+ ...bundleFiles,
136
+
137
+ // Component-specific JS (only index.js entry points)
138
+ `${rootPathPackage}/dist/assets/js/components/**/index.js`,
139
+ 'src/assets/js/components/**/index.js',
140
+ ];
141
+
142
+ // Additional files to watch (but not compile as entry points)
143
+ const watchInput = [
144
+ // Watch the paths we're compiling
145
+ ...input,
146
+
147
+ // Core JS - watch for changes but don't compile as entry points
148
+ `${rootPathPackage}/dist/assets/js/**/*.js`,
149
+ `${rootPathProject}/src/assets/js/**/*.js`,
150
+
151
+ // Theme js - watch for changes but don't compile as entry points
152
+ `${rootPathPackage}/dist/assets/themes/**/*.js`,
153
+ 'src/assets/themes/**/*.js',
154
+
155
+ // All project assets js - watch for changes but don't compile as entry points
156
+ 'src/assets/js/**/*.js',
157
+
158
+ // All BXM package src files - watch for changes (includes background.js, popup.js, etc.)
159
+ `${rootPathPackage}/src/**/*.js`,
160
+
161
+ // So we can watch for changes while we're developing @omega.js/client
162
+ `${rootPathPackage}/../client/src`,
163
+ ];
164
+
165
+ const delay = 250;
166
+ const compiled = {};
167
+
168
+ /**
169
+ * The one esbuild build: every discovered entry, one self-contained iife each.
170
+ * @returns {Promise<object|null>} esbuild's result (metafile on), or null when the project has no entries
171
+ */
172
+ async function runBundle() {
173
+ const entries = updateEntryPoints(input);
174
+
175
+ if (Object.keys(entries).length === 0) {
176
+ logger.warn('No entry points found.');
177
+ return null;
178
+ }
179
+
180
+ // OMEGA_BUILD_JSON — frozen at build time and carried by EVERY emitted bundle,
181
+ // the service worker and the pages alike ([#743](https://github.com/Omega-JS-Stack/omega/issues/743)).
182
+ const buildJson = await composeBuildJson();
183
+
184
+ const result = await bundle({
185
+ frameworkRoot: rootPathPackage,
186
+ // The KEY is the output path under `outdir`, extension included by
187
+ // entryNames' absence: `components/popup.bundle` → components/popup.bundle.js,
188
+ // which is the file the page template's <script src> and the manifest's
189
+ // `background.service_worker` ask for.
190
+ entries,
191
+ outdir: path.resolve(process.cwd(), 'dist/assets/js'),
192
+ platform: 'browser',
193
+ // iife, never esm: every bundle is loaded as a plain <script src>, a
194
+ // content script, or an MV3 service worker registered as a classic script.
195
+ format: 'iife',
196
+ target: SYNTAX_TARGET,
197
+ dev: !Manager.actLikeProduction(),
198
+ alias: {
199
+ // For importing assets
200
+ '__main_assets__': path.resolve(rootPathPackage, 'dist/assets'),
201
+ '__project_assets__': path.resolve(process.cwd(), 'src/assets'),
202
+
203
+ // For importing the theme
204
+ '__theme__': path.resolve(themesDir, themeId),
205
+ },
206
+ define: buildJsonDefines(buildJson),
207
+ banner: buildJsonBanner(buildJson),
208
+ plugins: [emptyModulesPlugin(BROWSER_EMPTY_MODULES)],
209
+ });
210
+
211
+ // What each entry cost, from the metafile the wrapper turns on. Printed
212
+ // BEFORE the substitution below, because the metafile's byte counts are what
213
+ // esbuild emitted — reading them after a rewrite would report stale numbers.
214
+ Object.entries(result.metafile.outputs).forEach(([file, meta]) => {
215
+ logger.log(` ${path.relative(process.cwd(), file)} (${formatBytes(meta.bytes)})`);
216
+ });
217
+
218
+ // The `%%%key%%%` pass, over what the build just emitted. webpack ran it as a
219
+ // processAssets hook; esbuild has no mutate-then-rewrite stage, so it happens
220
+ // here — after minification, which is the only ordering that matters (the
221
+ // tokens live inside string literals and survive it intact).
222
+ const emitted = Object.keys(result.metafile.outputs)
223
+ .filter((file) => file.endsWith('.js'))
224
+ .map((file) => path.resolve(file));
225
+ substituteTemplates(emitted, getTemplateReplaceOptions());
226
+
227
+ return result;
228
+ }
229
+
230
+ /**
231
+ * Fill every `%%%key%%%` token in the given files from the replacement set. A
232
+ * key nothing answers is LEFT INTACT (node-powertools' template semantics), so
233
+ * a consumer's own unrelated `%%%` text is never emptied out.
234
+ * @param {string[]} files - absolute paths of the emitted JS files
235
+ * @param {object} replacements - the replacement set (see getTemplateReplaceOptions)
236
+ * @returns {number} how many files changed
237
+ */
238
+ function substituteTemplates(files, replacements) {
239
+ let changed = 0;
240
+
241
+ files.forEach((file) => {
242
+ const contents = jetpack.read(file);
243
+ if (!contents) return;
244
+
245
+ const replaced = template(contents, replacements, { brackets: TEMPLATE_BRACKETS });
246
+ if (replaced === contents) return;
247
+
248
+ jetpack.write(file, replaced);
249
+ changed++;
250
+ });
251
+
252
+ return changed;
253
+ }
254
+
255
+ // The blob every bundle reads as `OMEGA_BUILD_JSON.config` — and the ONLY thing
256
+ // the extension contexts hand @omega.js/client. An extension page and a service
257
+ // worker have no env and no filesystem walk of their own, so the bake is their
258
+ // one channel; it lived in package.js as a `build.js` JSONP file the SW
259
+ // importScripts()'d and every page loaded with its own <script> tag until
260
+ // [#743](https://github.com/Omega-JS-Stack/omega/issues/743) moved it into the
261
+ // bundles themselves, the shape @omega.js/desktop has always used.
262
+ function composeBuildConfig() {
263
+ // omega.json5 `monitoring.providers.sentry` → the client's sentry contract
264
+ // (#425). The provider block feeds Sentry.init directly; the role level
265
+ // (`enabled`) never rides along.
266
+ const sentryConfig = { ...(config.monitoring?.providers?.sentry || {}) };
267
+
268
+ // The live sibling website's published origin, or null when none is up (#262)
269
+ const devWebsiteOrigin = Manager.getDevWebsiteOrigin();
270
+
271
+ // The Measurement Protocol secret (.env — secrets never live in omega.json5).
272
+ const googleAnalyticsId = config.analytics?.providers?.google?.id || '';
273
+ const googleAnalyticsSecret = readBakedEnv(process.env, { config }).GOOGLE_ANALYTICS_SECRET;
274
+
275
+ return {
276
+ // Core metadata
277
+ runtime: 'browser-extension',
278
+ version: project.version,
279
+ environment: Manager.getEnvironment(),
280
+ buildTime: Date.now(),
281
+
282
+ // Brand configuration (from config/omega.json5 or manifest)
283
+ brand: config.brand || {},
284
+
285
+ // The local stack's resolved facts (N7). An extension context has no
286
+ // env and no filesystem, so this bake is its ONLY channel: the sibling
287
+ // backend's published map plus anything a parent injected on the env
288
+ // channel, and the sibling WEBSITE's published origin
289
+ // ([#262](https://github.com/Omega-JS-Stack/omega/issues/262)) —
290
+ // resolved per build so a rebuild follows a restarted emulator
291
+ // ([#300](https://github.com/Omega-JS-Stack/omega/issues/300)).
292
+ // Production packages carry none — there is no local stack to reach.
293
+ // A key present is a resolved fact; absent, @omega.js/client assumes the
294
+ // classic and warns — so an unpublished origin ships no origin at all.
295
+ ...(Manager.getEnvironment() === 'production'
296
+ ? {}
297
+ : { dev: {
298
+ ports: { ...readSiblingPorts(rootPathProject), ...envPorts() },
299
+ ...(devWebsiteOrigin ? { origin: devWebsiteOrigin } : {}),
300
+ } }),
301
+
302
+ // Cloud (firebase) config in the CANONICAL `cloud.config` shape —
303
+ // what @omega.js/client prefers and the only shape background.js
304
+ // reads. Without it the SW's Firebase auth never initializes (#46).
305
+ cloud: config.cloud || {},
306
+
307
+ // OMEGA build metadata
308
+ omega: {
309
+ environment: Manager.getEnvironment(),
310
+ cache_breaker: Math.round(new Date().getTime() / 1000),
311
+ // Resolved at serve time (N7) — the getter reads the allocator's
312
+ // OMEGA_LIVERELOAD_PORT, so a bumped server and the baked client
313
+ // agree. Packaged (non-serve) builds bake the classic default.
314
+ liveReloadPort: config.liveReloadPort || Manager.getLiveReloadPort(),
315
+ },
316
+
317
+ // Web-manager features (matching expected structure)
318
+ auth: { enabled: true, config: {} },
319
+
320
+ firebase: {
321
+ app: {
322
+ enabled: !!(config.cloud?.config?.apiKey),
323
+ config: config.cloud?.config || {},
324
+ },
325
+ appCheck: { enabled: false, config: {} },
326
+ },
327
+
328
+ consent: { enabled: true, config: {} },
329
+ inbound: (() => {
330
+ // Curated to the leaves the client runtime reads (#23) — the provisioning-only
331
+ // siblings (template ids, plan, update flags) never ship in the bundle
332
+ const chatsy = config.inbound?.chat?.providers?.chatsy;
333
+ return { chat: { providers: { chatsy: chatsy
334
+ ? { enabled: chatsy.enabled, agentId: chatsy.agentId, settings: chatsy.settings }
335
+ : { enabled: false } } } };
336
+ })(),
337
+ sentry: {
338
+ enabled: !!(sentryConfig.dsn),
339
+ config: sentryConfig,
340
+ },
341
+ exitPopup: { enabled: false, config: {} },
342
+ lazyLoading: { enabled: true, config: {} },
343
+ socialSharing: { enabled: false, config: {} },
344
+ pushNotifications: { enabled: false, config: {} },
345
+ validRedirectHosts: [],
346
+ refreshNewVersion: { enabled: true, config: {} },
347
+ serviceWorker: { enabled: false, config: {} },
348
+
349
+ // Analytics (canonical providers shape — C4 cp106a). The Measurement
350
+ // Protocol API secret comes from .env (GOOGLE_ANALYTICS_SECRET —
351
+ // matches @omega.js/backend/EM convention; secrets never live in
352
+ // omega.json5) and is baked into the snapshot here at build time.
353
+ analytics: {
354
+ providers: {
355
+ google: {
356
+ id: googleAnalyticsId,
357
+ secret: googleAnalyticsSecret,
358
+ },
359
+ },
360
+ },
361
+
362
+ // Theme config
363
+ theme: config.theme || {},
364
+
365
+ // Advertising (ads-system phase 4) — feeds the client verts module's
366
+ // house/company lane (extension surfaces never run AdSense; lib/verts.js
367
+ // pins the house type). company carries the parent's url so the
368
+ // inhouse source 'company' can resolve.
369
+ advertising: config.advertising || {},
370
+ company: config.company || {},
371
+ };
372
+ }
373
+
374
+ // OMEGA_BUILD_JSON itself — the build's own record of what it produced. The
375
+ // `license` stamp ([#320](https://github.com/Omega-JS-Stack/omega/issues/320))
376
+ // rides HERE and not inside `config`: it is a fact about the BUILD, not part of
377
+ // the client contract the extension contexts hand @omega.js/client. A packaged
378
+ // extension has no attribution surface and its payments ride the backend's own
379
+ // gate — this is the artifact's record of what it was packaged as.
380
+ async function composeBuildJson() {
381
+ // Resolved ONCE per build: a PRODUCTION build asks the license server (a key
382
+ // that cannot be answered THROWS, which is what gates a bad-key publish), and
383
+ // a dev build is keyless by definition and never phones home. It used to be
384
+ // memoized because packageRaw ran per browser target; one bundle pass bakes
385
+ // the one snapshot every target then copies, so one call is the whole run.
386
+ const license = await resolveLicenseStamp({ config, production: Manager.getEnvironment() === 'production' });
387
+
388
+ // The verdict a run built under, said ONCE — web/backend/desktop all print theirs.
389
+ logger.log(`bundling — environment=${Manager.getEnvironment()}, license=${license.status}`);
390
+
391
+ return {
392
+ timestamp: new Date().toISOString(),
393
+ repo: getGitInfo(),
394
+ environment: Manager.getEnvironment(),
395
+ license,
396
+ packages: {
397
+ [frameworkPackage.name]: frameworkPackage.version,
398
+ '@omega.js/client': getPackageVersion('@omega.js/client'),
399
+ },
400
+ config: composeBuildConfig(),
401
+ };
402
+ }
403
+
404
+ /**
405
+ * The compile-time replacement: a bare `OMEGA_BUILD_JSON` identifier becomes the
406
+ * literal, so framework and consumer code can reference the snapshot without
407
+ * reaching for a global.
408
+ * @param {object} buildJson - The blob every bundle bakes.
409
+ * @returns {object} an esbuild define map
410
+ */
411
+ function buildJsonDefines(buildJson) {
412
+ return {
413
+ OMEGA_BUILD_JSON: JSON.stringify(buildJson),
414
+ // webpack derived this from its `mode`; esbuild has no modes, so the
415
+ // switch every bundled library reads is stated here instead. Dropping it
416
+ // would ship every library's DEVELOPMENT branch to a store.
417
+ 'process.env.NODE_ENV': Manager.actLikeProduction() ? '"production"' : '"development"',
418
+ // Libraries like lodash/@firebase/util reference the Node-ism `global`;
419
+ // a browser bundle leaves it undefined, so it is rewritten textually.
420
+ global: 'globalThis',
421
+ };
422
+ }
423
+
424
+ /**
425
+ * The global assignment every bundle carries, prepended ahead of its own code so
426
+ * the snapshot is there before anything reads it — the load order the SW's
427
+ * `importScripts('/build.js')` and the page template's `<script src="/build.js">`
428
+ * used to buy. All three scopes are assigned because all three are read:
429
+ * `serviceWorker.OMEGA_BUILD_JSON` in background.js, `window.OMEGA_BUILD_JSON`
430
+ * in every page context, and `globalThis` from DevTools and consumer code.
431
+ * @param {object} buildJson - The blob every bundle bakes.
432
+ * @returns {object} an esbuild banner
433
+ */
434
+ function buildJsonBanner(buildJson) {
435
+ const literal = JSON.stringify(buildJson);
436
+ return {
437
+ js: `(function(){var __omegaBuildJson=${literal};if(typeof globalThis!=='undefined'){globalThis.OMEGA_BUILD_JSON=__omegaBuildJson;}if(typeof self!=='undefined'){self.OMEGA_BUILD_JSON=__omegaBuildJson;}if(typeof window!=='undefined'){window.OMEGA_BUILD_JSON=__omegaBuildJson;}})();`,
438
+ };
439
+ }
440
+
441
+ // The keys the env schema says this build writes INTO the shipped artifact
442
+ // ([#627](https://github.com/Omega-JS-Stack/omega/issues/627)): a packaged
443
+ // extension runs with no `.env`, so a `delivery: { extension: 'bake' }` key is
444
+ // read from the build env here and baked into the bundles. The list is the
445
+ // schema's — the hardcoded GOOGLE_ANALYTICS_SECRET read this replaced was one of
446
+ // three hand-kept lists for one concern.
447
+ const BAKED_KEYS = bakeKeys('extension');
448
+
449
+ /**
450
+ * The schema's presence rules at the BAKE seam
451
+ * ([#626](https://github.com/Omega-JS-Stack/omega/issues/626)) — the last
452
+ * moment a missing key is still fixable.
453
+ *
454
+ * A packaged extension runs with no `.env`, so what the bake holds is what the
455
+ * artifact holds forever: a brand with a GA4 stream id and no Measurement
456
+ * Protocol secret used to bake an empty string and ship an extension that sends
457
+ * no events, silently — #582's failure mode, and the CI publish that has no
458
+ * `.env` at all is exactly where it happens. A BUILD refuses; development
459
+ * warns and keeps going, because a half-configured brand is a normal step on
460
+ * the way to a configured one.
461
+ *
462
+ * @param {object} config - The target's resolved omega.json5 config.
463
+ * @param {object} env - The build env.
464
+ * @param {object} [options]
465
+ * @param {boolean} [options.build] - Build/publish mode (default: the Manager's).
466
+ * @param {object} [options.logger] - Logger with `warn` (default: this task's).
467
+ * @throws {Error} in build mode, naming every brand-level key and the config path that requires it.
468
+ */
469
+ function assertBakeRules(config, env, options) {
470
+ options = options || {};
471
+ const build = options.build === undefined ? Manager.isBuildMode() : options.build;
472
+ const warn = (options.logger || logger).warn.bind(options.logger || logger);
473
+
474
+ const violations = checkEnvRules(config, env, { target: 'extension' })
475
+ .filter((violation) => violation.rule === 'requiredWhen');
476
+ if (violations.length === 0) return;
477
+
478
+ // The BRAND-LEVEL key name (GOOGLE_ANALYTICS_SECRET_EXTENSION, not the
479
+ // GOOGLE_ANALYTICS_SECRET it is delivered as): that is the name a human puts
480
+ // in the brand .env and in the repo's Actions secrets.
481
+ const named = violations.map(({ key, path }) => `${key} (required by ${path})`).join(', ');
482
+ const message = `${violations.length} env ${violations.length === 1 ? 'key this brand\'s config requires is' : 'keys this brand\'s config requires are'} missing from the build env: ${named}. `
483
+ + 'Set it in the brand .env (and as a repo Actions secret for a CI publish — `omega deploy` pushes them), then build again.';
484
+
485
+ if (build) {
486
+ throw new Error(message);
487
+ }
488
+
489
+ warn(message);
490
+ }
491
+
492
+ // The baked keys' values from the build env. Absent reads as the empty string,
493
+ // never undefined: the snapshot is JSON, and a missing key would read to the
494
+ // client as "no analytics configured" rather than "configured, no secret".
495
+ //
496
+ // The presence guard runs FIRST: a build that would bake an empty secret over a
497
+ // configured stream refuses here rather than shipping the hole.
498
+ function readBakedEnv(env, options) {
499
+ env = env || process.env;
500
+
501
+ if (options && options.config) {
502
+ assertBakeRules(options.config, env, options);
503
+ }
504
+
505
+ return Object.fromEntries(BAKED_KEYS.map((key) => [key, env[key] || '']));
506
+ }
507
+
508
+ // Get git info
509
+ function getGitInfo() {
510
+ try {
511
+ const { execSync } = require('child_process');
512
+ const user = execSync('git config user.name', { encoding: 'utf8' }).trim();
513
+ const repo = execSync('git config --get remote.origin.url', { encoding: 'utf8' })
514
+ .trim()
515
+ .replace(/.*[\/:]([\w-]+)\/([\w-]+)(\.git)?$/, '$2');
516
+
517
+ return { user, name: repo };
518
+ } catch (e) {
519
+ return { user: 'unknown', name: 'unknown' };
520
+ }
521
+ }
522
+
523
+ // Get package version
524
+ function getPackageVersion(packageName) {
525
+ try {
526
+ const pkgPath = require.resolve(`${packageName}/package.json`, {
527
+ paths: [process.cwd()]
528
+ });
529
+ const pkg = require(pkgPath);
530
+ return pkg.version;
531
+ } catch (e) {
532
+ return 'unknown';
533
+ }
534
+ }
535
+
536
+ // Task
537
+ function bundleTask(complete) {
538
+ // Log
539
+ logger.log('Starting...');
540
+ Manager.logMemory(logger, 'Start');
541
+ logger.log(`Mode: ${Manager.actLikeProduction() ? 'production' : 'development'}`);
542
+ logger.log(`Target: ${SYNTAX_TARGET.join(', ')}`);
543
+
544
+ runBundle()
545
+ .then(() => {
546
+ // Log
547
+ logger.log('Finished!');
548
+
549
+ // Trigger rebuild
550
+ Manager.triggerRebuild(compiled);
551
+
552
+ // Complete successfully
553
+ return complete();
554
+ })
555
+ // esbuild rejects with every error already formatted, so a failed build
556
+ // surfaces through the same reporter webpack's did.
557
+ .catch((e) => Manager.reportBuildError(Object.assign(e, { plugin: 'Bundle' }), complete));
558
+ }
559
+
560
+ // Watcher task
561
+ function bundleWatcher(complete) {
562
+ // Quit if in build mode
563
+ if (Manager.isBuildMode()) {
564
+ watcherLogger.log('Skipping watcher in build mode');
565
+ return complete();
566
+ }
567
+
568
+ // Log
569
+ watcherLogger.log('Watching for changes...');
570
+
571
+ // Watch for changes
572
+ watch(watchInput, { delay: delay, dot: true }, bundleTask)
573
+ .on('change', (path) => {
574
+ // Log
575
+ watcherLogger.log(`File changed (${path})`);
576
+ });
577
+
578
+ // Complete
579
+ return complete();
580
+ }
581
+
582
+ function updateEntryPoints(inputArray) {
583
+ // Get all JS files
584
+ const files = glob(inputArray).map((f) => path.resolve(f));
585
+
586
+ // Sort: main files first
587
+ files.sort((a, b) => {
588
+ const aIsMain = a.startsWith(rootPathPackage);
589
+ const bIsMain = b.startsWith(rootPathPackage);
590
+ return aIsMain === bIsMain ? 0 : aIsMain ? -1 : 1;
591
+ });
592
+
593
+ // Update from src
594
+ const entries = files.reduce((acc, file) => {
595
+ let name;
596
+
597
+ // Determine naming based on file type
598
+ if (file.includes('/assets/js/bundles/')) {
599
+ // Bundle files: bundles/my-bundle.js -> bundles/my-bundle
600
+ name = file.split('/assets/js/')[1];
601
+ } else if (file.includes('/assets/js/components/')) {
602
+ // Component files: special handling for pages vs other components
603
+ // Pages can have multiple files (index, pricing, login, etc.)
604
+ // Other components (popup, options, etc.) only have index
605
+ const componentPath = file.split('/assets/js/')[1];
606
+ const isInPages = componentPath.includes('/pages/');
607
+
608
+ if (componentPath.endsWith('/index.js') && !isInPages) {
609
+ // For non-pages components: strip /index.js
610
+ // components/popup/index.js -> components/popup
611
+ const parts = componentPath.split('/');
612
+ parts.pop(); // remove index.js
613
+ name = parts.join('/');
614
+ } else {
615
+ // For pages or non-index files: keep full path
616
+ // components/pages/index.js -> components/pages/index
617
+ // components/pages/pricing.js -> components/pages/pricing
618
+ name = componentPath.replace(/\.js$/, '');
619
+ }
620
+ } else if (file.includes('/assets/js/pages/')) {
621
+ // Page files: keep full path
622
+ name = file.split('/assets/js/')[1].replace(/\.js$/, '');
623
+ } else {
624
+ // Everything else: just use the base filename
625
+ name = path.basename(file);
626
+ name = name.replace(/\.js$/, '');
627
+ }
628
+
629
+ // Track the full output path
630
+ const fullPath = path.resolve(process.cwd(), 'dist/assets/js', `${name}.bundle.js`);
631
+ compiled[fullPath] = true;
632
+
633
+ // Update entry points
634
+ acc[`${name}.bundle`] = file;
635
+
636
+ // Return
637
+ return acc;
638
+ }, {});
639
+
640
+ // Log
641
+ logger.log('Updated entry points:', entries);
642
+ return entries;
643
+ }
644
+
645
+ function getTemplateReplaceOptions() {
646
+ // Setup options
647
+ const options = {
648
+ // App & Project
649
+ ...project,
650
+ ...manifest,
651
+ ...config,
652
+
653
+ // Additional
654
+ environment: Manager.getEnvironment(),
655
+
656
+ // Specific
657
+ firebaseVersion: version.clean(require('@omega.js/client/package.json').dependencies.firebase),
658
+ liveReloadPort: Manager.getLiveReloadPort(),
659
+ }
660
+
661
+ // Return
662
+ return options;
663
+ }
664
+
665
+ // Default Task
666
+ module.exports = series(bundleTask, bundleWatcher);
667
+
668
+ // The syntax floor and the browser Node-builtin shim list — pinned by
669
+ // src/test/suites/build/bundle-targets.test.js. The `%%%key%%%` pass and the
670
+ // replacement set — pinned by src/test/suites/build/template-replace.test.js.
671
+ module.exports.BROWSER_EMPTY_MODULES = BROWSER_EMPTY_MODULES;
672
+ module.exports.SYNTAX_TARGET = SYNTAX_TARGET;
673
+ module.exports.resolveSyntaxTarget = resolveSyntaxTarget;
674
+ module.exports.substituteTemplates = substituteTemplates;
675
+ module.exports.getTemplateReplaceOptions = getTemplateReplaceOptions;
676
+ // The OMEGA_BUILD_JSON bake (#743) — pinned by
677
+ // src/test/suites/build/build-json-bake.test.js and auth-emulator-gate.test.js.
678
+ // `bundleTask` is exported so that suite can drive the REAL build and read the
679
+ // bake back out of the files it emitted, rather than a stand-in esbuild call.
680
+ module.exports.bundleTask = bundleTask;
681
+ module.exports.composeBuildConfig = composeBuildConfig;
682
+ module.exports.composeBuildJson = composeBuildJson;
683
+ module.exports.buildJsonDefines = buildJsonDefines;
684
+ module.exports.buildJsonBanner = buildJsonBanner;
685
+ // The schema-derived bake set and its reader (#627).
686
+ module.exports.BAKED_KEYS = BAKED_KEYS;
687
+ module.exports.readBakedEnv = readBakedEnv;