@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,742 @@
1
+ // Libraries
2
+ const Manager = new (require('../../build.js'));
3
+ const logger = Manager.logger('package');
4
+ const watcherLogger = Manager.logger('package:watcher');
5
+ const operaLogger = Manager.logger('package:opera');
6
+ const path = require('path');
7
+ const jetpack = require('fs-jetpack');
8
+ const { series, parallel, watch } = require('gulp');
9
+ const { execute, getKeys, template } = require('node-powertools');
10
+ const JSON5 = require('json5');
11
+ const { CLASSIC_DEV_ORIGIN } = require('../../vendor/config/index.js');
12
+
13
+ // Load package
14
+ const project = Manager.getPackage('project');
15
+ const config = Manager.getConfig('project');
16
+ const rootPathPackage = Manager.getRootPath('main');
17
+
18
+ // Glob
19
+ const input = [
20
+ // Files to include
21
+ 'dist/**/*',
22
+
23
+ // Files to exclude
24
+ // '!dist/**',
25
+ ];
26
+ const output = 'dist';
27
+ const delay = 250;
28
+
29
+ // Build targets with browser-specific configurations
30
+ const TARGETS = {
31
+ chromium: {
32
+ // Chrome, Edge, Brave, etc. - uses service_worker
33
+ adjustManifest: (manifest) => {
34
+ if (manifest.background) {
35
+ delete manifest.background.scripts;
36
+ }
37
+ return manifest;
38
+ },
39
+ },
40
+ firefox: {
41
+ // Firefox - uses scripts array, no service_worker
42
+ adjustManifest: (manifest) => {
43
+ // Firefox REFUSES an add-on it cannot identify, and an id assigned at
44
+ // submission time can never be updated from a self-hosted build — a
45
+ // packaged, submittable-looking artifact that is dead on arrival (#264).
46
+ // A declared id is authoritative. Missing, it is DERIVED from the brand
47
+ // config (deterministic per brand) so a fresh scaffold builds out of the
48
+ // box; only a project with no brand facts at all still fails loudly.
49
+ if (!manifest.browser_specific_settings?.gecko?.id) {
50
+ let host = null;
51
+ try { host = new URL(config.brand?.url).hostname; } catch (e) { /* no brand url — fall through to brand.id */ }
52
+ host = host || (config.brand?.id ? `${config.brand.id}.extension` : null);
53
+
54
+ if (!host) {
55
+ throw new Error('Cannot package the firefox artifact: browser_specific_settings.gecko.id is missing — declare it in src/manifest.json (e.g. { browser_specific_settings: { gecko: { id: \'my-extension@example.com\' } } })');
56
+ }
57
+
58
+ manifest.browser_specific_settings = manifest.browser_specific_settings || {};
59
+ manifest.browser_specific_settings.gecko = manifest.browser_specific_settings.gecko || {};
60
+ manifest.browser_specific_settings.gecko.id = `extension@${host}`;
61
+ logger.log(`firefox: no gecko id declared; derived ${manifest.browser_specific_settings.gecko.id} from the brand config. Declare browser_specific_settings.gecko.id in src/manifest.json before publishing — the id must stay stable across releases.`);
62
+ }
63
+
64
+ if (manifest.background) {
65
+ if (manifest.background.service_worker) {
66
+ if (!manifest.background.scripts) {
67
+ manifest.background.scripts = [manifest.background.service_worker];
68
+ }
69
+ delete manifest.background.service_worker;
70
+ }
71
+ }
72
+
73
+ // Chrome's side panel is `side_panel` + the `sidePanel` permission;
74
+ // Firefox has neither — it ships the same surface as `sidebar_action`.
75
+ // Shipping the chrome keys packaged fine and left the panel unreachable (#264).
76
+ if (manifest.side_panel) {
77
+ if (manifest.side_panel.default_path && !manifest.sidebar_action) {
78
+ manifest.sidebar_action = {
79
+ default_panel: manifest.side_panel.default_path,
80
+ default_title: manifest.action?.default_title || manifest.name,
81
+ };
82
+ }
83
+ delete manifest.side_panel;
84
+ }
85
+
86
+ if (Array.isArray(manifest.permissions)) {
87
+ manifest.permissions = manifest.permissions.filter((permission) => permission !== 'sidePanel');
88
+ }
89
+
90
+ return manifest;
91
+ },
92
+ },
93
+ opera: {
94
+ // Opera - like chromium but with stricter requirements
95
+ // Opera enforces 12-char limit on short_name INCLUDING placeholder text
96
+ adjustManifest: (manifest) => {
97
+ // Same as chromium for background
98
+ if (manifest.background) {
99
+ delete manifest.background.scripts;
100
+ }
101
+
102
+ // Opera requires static short_name (12 char limit includes placeholder text)
103
+ // __MSG_appNameShort__ is 19 chars, so we must use actual value
104
+ if (manifest.short_name && manifest.short_name.startsWith('__MSG_')) {
105
+ // Try to get the value from default locale
106
+ const localesDir = path.join('dist', '_locales');
107
+ const defaultLocale = manifest.default_locale || 'en';
108
+ const messagesPath = path.join(localesDir, defaultLocale, 'messages.json');
109
+
110
+ if (jetpack.exists(messagesPath)) {
111
+ try {
112
+ const messages = JSON5.parse(jetpack.read(messagesPath));
113
+ // Extract key from __MSG_keyName__
114
+ const key = manifest.short_name.replace(/^__MSG_/, '').replace(/__$/, '');
115
+ if (messages[key]?.message) {
116
+ manifest.short_name = messages[key].message;
117
+ operaLogger.log(`Resolved short_name to "${manifest.short_name}"`);
118
+ }
119
+ } catch (e) {
120
+ operaLogger.warn(`Could not resolve short_name from locale: ${e.message}`);
121
+ }
122
+ }
123
+ }
124
+
125
+ return manifest;
126
+ },
127
+ },
128
+ };
129
+
130
+ // Recursively remove empty arrays and objects from an object
131
+ function removeEmptyValues(obj) {
132
+ if (Array.isArray(obj)) {
133
+ return obj;
134
+ }
135
+
136
+ if (obj && typeof obj === 'object') {
137
+ const result = {};
138
+ for (const [key, value] of Object.entries(obj)) {
139
+ // Recursively clean nested objects
140
+ const cleaned = removeEmptyValues(value);
141
+
142
+ // Skip empty arrays
143
+ if (Array.isArray(cleaned) && cleaned.length === 0) {
144
+ continue;
145
+ }
146
+
147
+ // Skip empty objects (after cleaning)
148
+ if (cleaned && typeof cleaned === 'object' && !Array.isArray(cleaned) && Object.keys(cleaned).length === 0) {
149
+ continue;
150
+ }
151
+
152
+ result[key] = cleaned;
153
+ }
154
+ return result;
155
+ }
156
+
157
+ return obj;
158
+ }
159
+
160
+ // The origins the framework default lets message this extension. A packaged
161
+ // build needs the BRAND's own origin — it shipped the localhost dev origin
162
+ // alone, so the live site could not message the published extension (#583).
163
+ // The dev origin rides along in dev only. A consumer that DECLARES
164
+ // `externally_connectable` still wins outright (#260) — this is only the default.
165
+ function externallyConnectableOrigins() {
166
+ const origins = [];
167
+
168
+ let brandOrigin = null;
169
+ try { brandOrigin = new URL(config.brand?.url).origin; } catch (e) { /* no brand url — dev origin only */ }
170
+
171
+ if (brandOrigin) {
172
+ origins.push(`${brandOrigin}/*`);
173
+ } else if (Manager.isBuildMode()) {
174
+ logger.warn('externally_connectable: no brand.url in config/omega.json5, so the packaged extension declares no messaging origin — your site will not be able to message it');
175
+ }
176
+
177
+ // The dev-website origin is BUILD-TIME-BAKED by design (N7 non-goal: a shipped
178
+ // extension can't probe ports): the origin the LIVE sibling website published,
179
+ // or the classic default when nothing is up (#262).
180
+ if (!Manager.isBuildMode()) {
181
+ origins.push(`${Manager.getDevWebsiteOrigin() || CLASSIC_DEV_ORIGIN}/*`);
182
+ }
183
+
184
+ return origins;
185
+ }
186
+
187
+ // Special Compilation Task for manifest.json with default settings
188
+ async function compileManifest(outputDir, target) {
189
+ try {
190
+ const manifestPath = path.join('dist', 'manifest.json');
191
+ const outputPath = path.join(outputDir, 'manifest.json');
192
+ const configPath = path.join(rootPathPackage, 'dist', 'config', 'manifest.json');
193
+
194
+ // Read and parse using JSON5. The framework defaults carry build-time
195
+ // tokens (the same `%%%name%%%` idiom the bundle task's replacements speak) —
196
+ // the messaging origins are resolved facts now, never literals (#262, #583).
197
+ let manifest = JSON5.parse(jetpack.read(manifestPath));
198
+ const defaultConfig = JSON5.parse(template(jetpack.read(configPath), {
199
+ externallyConnectableOrigins: externallyConnectableOrigins()
200
+ .map((origin) => `'${origin}'`)
201
+ .join(', '),
202
+ }, {
203
+ brackets: ['%%%', '%%%'],
204
+ }));
205
+
206
+ // ═══════════════════════════════════════════════════════════════════════════
207
+ // STEP 1: Apply defaults (shared across all targets)
208
+ // ═══════════════════════════════════════════════════════════════════════════
209
+ // A declared consumer value is AUTHORITATIVE — the defaults only fill keys
210
+ // the consumer never wrote. Arrays used to UNION with the default, so a
211
+ // framework-default entry could never be removed: an extension declaring an
212
+ // empty `externally_connectable` still shipped the dev origin in every
213
+ // production build (#260). An empty array is a decision, not an omission.
214
+ getKeys(defaultConfig).forEach(key => {
215
+ const defaultValue = key.split('.').reduce((o, k) => (o || {})[k], defaultConfig);
216
+ const userValue = key.split('.').reduce((o, k) => (o || {})[k], manifest);
217
+
218
+ if (userValue === undefined) {
219
+ // Apply default if user value doesn't exist
220
+ key.split('.').reduce((o, k, i, arr) => {
221
+ if (i === arr.length - 1) o[k] = defaultValue;
222
+ else o[k] = o[k] || {};
223
+ return o[k];
224
+ }, manifest);
225
+ }
226
+ });
227
+
228
+ // Add package version to manifest. Chrome REFUSES a manifest with no
229
+ // version — a target whose package.json has none used to build a perfectly
230
+ // normal-looking extension that no browser would load (#46). Fail here.
231
+ if (!project.version) {
232
+ throw new Error('Cannot build the manifest: the extension app\'s package.json has no "version" (Chrome refuses to load a manifest without one)');
233
+ }
234
+ manifest.version = project.version;
235
+
236
+ // Chrome and Firefox both link the store listing's developer-site link from
237
+ // `homepage_url`, and nothing emitted it — the brand's site is right there in
238
+ // the config (#576). A DECLARED value is authoritative; missing, it is
239
+ // derived from the brand config, the same mechanism as the firefox gecko id.
240
+ if (manifest.homepage_url === undefined && config.brand?.url) {
241
+ manifest.homepage_url = config.brand.url;
242
+ }
243
+
244
+ // ═══════════════════════════════════════════════════════════════════════════
245
+ // STEP 2: Apply target-specific adjustments
246
+ // ═══════════════════════════════════════════════════════════════════════════
247
+ const targetConfig = TARGETS[target];
248
+ if (targetConfig?.adjustManifest) {
249
+ manifest = targetConfig.adjustManifest(manifest);
250
+ }
251
+
252
+ // ═══════════════════════════════════════════════════════════════════════════
253
+ // STEP 3: Clean up (shared across all targets)
254
+ // ═══════════════════════════════════════════════════════════════════════════
255
+ // Declare only icons the build actually produced. The defaults name the
256
+ // full size ladder, but the icons task mints nothing without a
257
+ // `config/icon.{png,svg}` — and Chrome REFUSES to load an extension whose
258
+ // manifest points at an icon that isn't there, silently (#46).
259
+ const iconMissing = (relative) => !jetpack.exists(path.join('dist', relative));
260
+ const prunedIcons = [];
261
+
262
+ for (const [size, file] of Object.entries(manifest.icons || {})) {
263
+ if (iconMissing(file)) {
264
+ delete manifest.icons[size];
265
+ prunedIcons.push(file);
266
+ }
267
+ }
268
+
269
+ // `action.default_icon` is legally EITHER a path string or a size→path map
270
+ // (both shapes ship in dist/config/manifest.json) — prune the map per entry
271
+ // and drop the key only when nothing survives.
272
+ const defaultIcon = manifest.action?.default_icon;
273
+
274
+ if (typeof defaultIcon === 'string') {
275
+ if (iconMissing(defaultIcon)) {
276
+ prunedIcons.push(defaultIcon);
277
+ delete manifest.action.default_icon;
278
+ }
279
+ } else if (defaultIcon && typeof defaultIcon === 'object') {
280
+ for (const [size, file] of Object.entries(defaultIcon)) {
281
+ if (iconMissing(file)) {
282
+ delete defaultIcon[size];
283
+ prunedIcons.push(file);
284
+ }
285
+ }
286
+
287
+ if (Object.keys(defaultIcon).length === 0) {
288
+ delete manifest.action.default_icon;
289
+ }
290
+ }
291
+
292
+ if (prunedIcons.length > 0) {
293
+ logger.warn(`[${target}] Dropped ${prunedIcons.length} missing icon reference(s) from the manifest — add config/icon.png to ship icons`);
294
+ }
295
+
296
+ // Remove empty arrays and objects from manifest
297
+ const cleanedManifest = removeEmptyValues(manifest);
298
+
299
+ // Save as regular JSON
300
+ jetpack.write(outputPath, JSON.stringify(cleanedManifest, null, 2));
301
+
302
+ logger.log(`[${target}] Manifest compiled with defaults`);
303
+ } catch (e) {
304
+ // Report, then FAIL the build. A swallowed error here shipped the raw JSON5
305
+ // source manifest as `manifest.json` and finished green — including the
306
+ // versionless case the guard above exists to catch (#46).
307
+ logger.error(`Error compiling manifest`, e);
308
+ throw e;
309
+ }
310
+ }
311
+
312
+ // Special Compilation Task for _locales
313
+ async function compileLocales(outputDir) {
314
+ try {
315
+ const localesDir = path.join('dist', '_locales');
316
+ const outputLocalesDir = path.join(outputDir, '_locales');
317
+
318
+ // Ensure the directory exists
319
+ jetpack.dir(outputLocalesDir);
320
+
321
+ // Process each locale file
322
+ jetpack.find(localesDir, { matching: '**/*.json' }).forEach(filePath => {
323
+ const relativePath = path.relative(localesDir, filePath);
324
+ const outputPath = path.join(outputLocalesDir, relativePath);
325
+
326
+ // Read and parse using JSON5
327
+ const localeData = JSON5.parse(jetpack.read(filePath));
328
+
329
+ // Save as regular JSON
330
+ jetpack.write(outputPath, JSON.stringify(localeData, null, 2));
331
+
332
+ logger.log(`Locale compiled and saved: ${outputPath}`);
333
+ });
334
+ } catch (e) {
335
+ // Report, then re-throw — a broken locale finishing green loads as a
336
+ // Chrome refusal when default_locale is declared (#46).
337
+ logger.error(`Error compiling locales`, e);
338
+ throw e;
339
+ }
340
+ }
341
+
342
+ // Package Task for raw - creates builds for all browser targets
343
+ async function packageRaw() {
344
+ // Log
345
+ logger.log(`Starting raw packaging...`);
346
+
347
+ try {
348
+ // Build for each target
349
+ for (const target of Object.keys(TARGETS)) {
350
+ await packageRawForTarget(target);
351
+ }
352
+
353
+ // Log completion
354
+ logger.log(`Finished raw packaging for all targets`);
355
+ } catch (e) {
356
+ // Report, then re-throw so packageFn's handler fails the gulp task — a
357
+ // half-packaged target is never a green build (#46).
358
+ logger.error(`Error during raw packaging`, e);
359
+ throw e;
360
+ }
361
+ }
362
+
363
+ // Files to exclude from packaged output (development/source files)
364
+ const PACKAGE_EXCLUDE_PATTERNS = [
365
+ '**/*.scss',
366
+ '**/*.sass',
367
+ '**/*.ts',
368
+ '**/.DS_Store',
369
+ ];
370
+
371
+ // Package raw for a specific target (chromium or firefox)
372
+ async function packageRawForTarget(target) {
373
+ logger.log(`[${target}] Starting raw packaging...`);
374
+
375
+ const outputDir = `packaged/${target}/raw`;
376
+
377
+ // Ensure the directory exists (this also cleans it)
378
+ jetpack.dir(outputDir, { empty: true });
379
+
380
+ // Copy files to raw package directory
381
+ await execute(`cp -r dist/* ${outputDir}`);
382
+
383
+ // Remove development/source files that shouldn't be in the package
384
+ const filesToRemove = jetpack.find(outputDir, { matching: PACKAGE_EXCLUDE_PATTERNS });
385
+ filesToRemove.forEach(file => {
386
+ jetpack.remove(file);
387
+ logger.log(`[${target}] Removed dev file: ${path.relative(outputDir, file)}`);
388
+ });
389
+
390
+ // Loop thru outputDir/assets/js all JS files for redactions
391
+ const jsFiles = jetpack.find(path.join(outputDir, 'assets', 'js'), { matching: '*.js' });
392
+ const redactions = getRedactions();
393
+
394
+ jsFiles.forEach(filePath => {
395
+ // Load the content
396
+ let content = jetpack.read(filePath);
397
+
398
+ // Replace keys with their corresponding values
399
+ Object.keys(redactions).forEach(key => {
400
+ const value = redactions[key];
401
+ const regex = new RegExp(key, 'g'); // Create a global regex for the key
402
+ content = content.replace(regex, value);
403
+
404
+ // Log replacement
405
+ logger.log(`[${target}] Redacted ${key} in ${filePath}`);
406
+ });
407
+
408
+ // Write the new content to the file
409
+ jetpack.write(filePath, content);
410
+ });
411
+
412
+ // Compile manifest (target-specific) and locales
413
+ await compileManifest(outputDir, target);
414
+ await compileLocales(outputDir);
415
+
416
+ logger.log(`[${target}] Finished raw packaging`);
417
+ }
418
+
419
+ // Create zipped version of raw packages for each target
420
+ async function packageZip() {
421
+ // Log
422
+ logger.log(`Zipping raw packages...`);
423
+
424
+ // Skip if not in build mode
425
+ if (!Manager.isBuildMode()) {
426
+ logger.log(`Skipping zip (not in build mode)`);
427
+ return;
428
+ }
429
+
430
+ try {
431
+ // Create zip for each target
432
+ for (const target of Object.keys(TARGETS)) {
433
+ const inputDir = `packaged/${target}/raw`;
434
+ const zipPath = `packaged/${target}/extension.zip`;
435
+
436
+ // Remove existing zip if it exists
437
+ jetpack.remove(zipPath);
438
+
439
+ // Zip contents of raw directory (not the directory itself)
440
+ // This ensures manifest.json is at the root of the zip
441
+ await execute(`cd ${inputDir} && zip -r ../extension.zip .`);
442
+ logger.log(`[${target}] Zipped package created at ${zipPath}`);
443
+ }
444
+ } catch (e) {
445
+ // Report, then re-throw — a build-mode run without its zip artifact is
446
+ // never a green build (#46).
447
+ logger.error(`Error zipping package`, e);
448
+ throw e;
449
+ }
450
+ }
451
+
452
+ // Create source code zip for Firefox review
453
+ async function packageSource() {
454
+ const { template } = require('node-powertools');
455
+ const os = require('os');
456
+
457
+ // Log
458
+ logger.log(`Zipping source code...`);
459
+
460
+ try {
461
+ const sourceZipPath = 'packaged/source.zip';
462
+
463
+ // Only in build mode
464
+ if (!Manager.isBuildMode()) {
465
+ logger.log(`Skipping source zip (not in build mode)`);
466
+ return;
467
+ }
468
+
469
+ // Remove existing zip if it exists
470
+ jetpack.remove(sourceZipPath);
471
+
472
+ // Get system info
473
+ const platform = os.platform();
474
+ const platformName = {
475
+ darwin: 'macOS',
476
+ win32: 'Windows',
477
+ linux: 'Linux',
478
+ }[platform] || platform;
479
+
480
+ // Read template and replace variables
481
+ const templatePath = path.join(rootPathPackage, 'dist', 'gulp', 'templates', 'BUILD_INSTRUCTIONS.md');
482
+ const templateContent = jetpack.read(templatePath);
483
+ const instructions = template(templateContent, {
484
+ system: {
485
+ platform: platformName,
486
+ release: os.release(),
487
+ arch: os.arch(),
488
+ nodeVersion: process.version,
489
+ },
490
+ });
491
+
492
+ // Create source zip using git archive (respects .gitignore)
493
+ await execute(`git archive --format=zip --output=${sourceZipPath} HEAD`);
494
+
495
+ // Write build instructions to .temp/README.md
496
+ const tempReadmePath = path.join(process.cwd(), '.temp', 'README.md');
497
+ jetpack.write(tempReadmePath, instructions);
498
+
499
+ // Update the zip - replace README.md with build instructions
500
+ await execute(`cd .temp && zip -u ../${sourceZipPath} README.md`);
501
+
502
+ // Clean up temp file
503
+ jetpack.remove(tempReadmePath);
504
+
505
+ logger.log(`Source code zip created at ${sourceZipPath}`);
506
+ } catch (e) {
507
+ // Report, then re-throw — a build-mode run without its source zip is
508
+ // never a green build (#46).
509
+ logger.error(`Error zipping source code`, e);
510
+ throw e;
511
+ }
512
+ }
513
+
514
+ function liveReload() {
515
+ // Log
516
+ logger.log('Reloading live server clients...');
517
+
518
+ // Quit if in build mode
519
+ if (Manager.isBuildMode()) {
520
+ return logger.log('Skipping live reload in build mode');
521
+ }
522
+
523
+ // Quit if no websocket server
524
+ if (!global.websocket) {
525
+ return logger.log('No live reload server found');
526
+ }
527
+
528
+ // Reload each client
529
+ global.websocket.clients.forEach((client) => {
530
+ // Get client IP
531
+ const clientIp = client._socket?.remoteAddress || 'Unknown IP';
532
+
533
+ // Log
534
+ logger.log(`Sending to client at IP: ${clientIp}`);
535
+
536
+ // Send
537
+ client.send(JSON.stringify({ command: 'reload' }))
538
+ })
539
+
540
+ // Complete
541
+ return;
542
+ }
543
+
544
+ // Deploy store submission assets to packaged/assets/
545
+ async function deployStoreAssets() {
546
+ const assetsDir = path.join('packaged', 'assets');
547
+
548
+ // Copy 128x128 icon for store submission
549
+ const iconSrc = path.join('dist', 'assets', 'images', 'icons', 'icon-128x.png');
550
+ if (jetpack.exists(iconSrc)) {
551
+ const iconDest = path.join(assetsDir, 'icon', 'icon-128x.png');
552
+ jetpack.dir(path.dirname(iconDest));
553
+ jetpack.copy(iconSrc, iconDest, { overwrite: true });
554
+ logger.log('Store asset: icon-128x.png');
555
+ }
556
+
557
+ // Render brand tokens the same way the html task templates a view — a store
558
+ // listing ships the resolved brand, never a literal `{{ brand.name }}` (#289)
559
+ const renderDescription = (contents, label) => {
560
+ const rendered = template(contents, {
561
+ brand: config.brand || {},
562
+ }, {
563
+ brackets: ['{{', '}}'],
564
+ });
565
+
566
+ // An unresolvable token (typo, missing config key) passes through literally
567
+ // and would ship to the live store listing — say so instead of shipping quiet
568
+ const leftover = rendered.match(/\{\{[^}]*\}\}/g);
569
+ if (leftover) {
570
+ logger.warn(`Store description ${label}: unresolved token(s) ship literally: ${[...new Set(leftover)].join(', ')} — check config/omega.json5`);
571
+ }
572
+
573
+ return rendered;
574
+ };
575
+
576
+ // Write English description (brand tokens rendered)
577
+ const enDescSrc = path.join(process.cwd(), 'config', 'description.md');
578
+ if (jetpack.exists(enDescSrc)) {
579
+ const descDir = path.join(assetsDir, 'description');
580
+ jetpack.dir(descDir);
581
+ jetpack.write(path.join(descDir, 'en.md'), renderDescription(jetpack.read(enDescSrc), 'en'));
582
+ logger.log('Store asset: description/en.md');
583
+ }
584
+
585
+ // Write translated descriptions (committed translations/, source marker stripped)
586
+ const translationsDir = path.join(process.cwd(), 'translations');
587
+ if (jetpack.exists(translationsDir)) {
588
+ const { readTranslatedDescription } = require('./translate.js');
589
+ const descDir = path.join(assetsDir, 'description');
590
+
591
+ let count = 0;
592
+ for (const file of jetpack.find(translationsDir, { matching: '*/description.md' })) {
593
+ const lang = path.basename(path.dirname(file));
594
+ const content = readTranslatedDescription(lang);
595
+
596
+ if (content) {
597
+ jetpack.dir(descDir);
598
+ jetpack.write(path.join(descDir, `${lang}.md`), renderDescription(content, lang));
599
+ count++;
600
+ }
601
+ }
602
+
603
+ if (count > 0) {
604
+ logger.log(`Store asset: ${count} translated descriptions`);
605
+ }
606
+ }
607
+ }
608
+
609
+ // Package Task
610
+ async function packageFn(complete) {
611
+ try {
612
+ // Log
613
+ logger.log('Starting...');
614
+
615
+ // Run build:pre hook
616
+ await hook('build:pre');
617
+
618
+ // Run packageRaw
619
+ await packageRaw();
620
+
621
+ // Run packageZip
622
+ await packageZip();
623
+
624
+ // Run packageSource
625
+ await packageSource();
626
+
627
+ // Deploy store submission assets
628
+ await deployStoreAssets();
629
+
630
+ // Run build:post hook
631
+ await hook('build:post');
632
+
633
+ // Run liveReload
634
+ liveReload();
635
+
636
+ // Log
637
+ logger.log('Finished!');
638
+
639
+ // Complete
640
+ return complete();
641
+ } catch (error) {
642
+ // Handle any errors that occur during package build
643
+ return Manager.reportBuildError(Object.assign(error, { plugin: 'Package' }), complete);
644
+ }
645
+ }
646
+
647
+ // Watcher Task
648
+ function packageFnWatcher(complete) {
649
+ // Quit if in build mode
650
+ if (Manager.isBuildMode()) {
651
+ watcherLogger.log('Skipping watcher in build mode');
652
+ return complete();
653
+ }
654
+
655
+ // Log
656
+ watcherLogger.log('Watching for changes...');
657
+
658
+ // Watch for changes in the dist folder
659
+ watch(input, { delay: delay, dot: true }, packageFn)
660
+ .on('change', function (path) {
661
+ watcherLogger.log(`File ${path} was changed`);
662
+ });
663
+
664
+ // Complete
665
+ return complete();
666
+ }
667
+
668
+ // Export tasks
669
+ module.exports = series(packageFn, packageFnWatcher);
670
+ module.exports.packageFn = packageFn;
671
+ module.exports.compileManifest = compileManifest;
672
+ module.exports.compileLocales = compileLocales;
673
+ module.exports.deployStoreAssets = deployStoreAssets;
674
+ module.exports.hook = hook;
675
+ // The browser targets the package lane builds — the one list the CI workflow's
676
+ // artifact upload is checked against (it ships packaged/<target>/extension.zip).
677
+ module.exports.TARGETS = TARGETS;
678
+
679
+ // Run hooks
680
+ async function hook(file) {
681
+ // Candidate paths, in order: the NESTED form the defaults scaffold writes and
682
+ // setup's migration moves flat files to (`hooks/build/pre.js`), then the flat
683
+ // pre-migration form (`hooks/build:pre.js`) as a transition fallback. Resolving
684
+ // only the flat one left every migrated consumer's hooks dead (#571).
685
+ const candidates = [
686
+ path.join(process.cwd(), 'hooks', `${file.split(':').join(path.sep)}.js`),
687
+ path.join(process.cwd(), 'hooks', `${file}.js`),
688
+ ];
689
+
690
+ // Find the first one that exists
691
+ const fullPath = candidates.find((candidate) => jetpack.exists(candidate));
692
+
693
+ // Quit if there is none — a consumer may delete a scaffolded hook, so the
694
+ // miss is an informational line through the framework logger (the bare
695
+ // console.warn it replaces carried no tag and read as build noise, #571)
696
+ if (!fullPath) {
697
+ return logger.log(`No ${file} hook found at ${candidates[0]}`);
698
+ }
699
+
700
+ // Log
701
+ logger.log(`Running hook: ${fullPath}`);
702
+
703
+ // Load hook
704
+ let hook;
705
+ try {
706
+ // Load the hook
707
+ hook = require(fullPath);
708
+ } catch (e) {
709
+ throw new Error(`Error loading hook: ${fullPath} ${e.stack}`);
710
+ }
711
+
712
+ // Execute hook — the ONE hook-argument shape across OMEGA frameworks: the same
713
+ // `{ manager, projectRoot, mode }` ctx @omega.js/desktop hands its lifecycle
714
+ // hooks. This used to pass the package task's internal watch counter while both
715
+ // docs described a build-info object nothing ever built, so a hook written from
716
+ // the docs read `undefined` at its first property (#591). Everything those docs
717
+ // promised is reachable through `manager` (getManifest/getConfig/getPackage).
718
+ try {
719
+ return await hook({
720
+ manager: Manager,
721
+ projectRoot: process.cwd(),
722
+ mode: Manager.isBuildMode() ? 'production' : 'development',
723
+ });
724
+ } catch (e) {
725
+ throw new Error(`Error running hook: ${fullPath} ${e.stack}`);
726
+ }
727
+ }
728
+
729
+ // Get redactions
730
+ function getRedactions() {
731
+ const REDACTED = './REDACTED_REMOTE_CODE';
732
+
733
+ return {
734
+ 'https://app.chatsy.ai/resources/script.js': REDACTED + 1,
735
+ // '/https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js\\?[^"\'\\s]*/g': REDACTED + 2,
736
+ 'https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js': REDACTED + 2,
737
+ 'https://www.google.com/recaptcha/enterprise.js': REDACTED + 3,
738
+ 'https://apis.google.com/js/api.js': REDACTED + 4,
739
+ 'https://www.google.com/recaptcha/api.js': REDACTED + 5,
740
+ 'https://browser.sentry-cdn.com': REDACTED + 6,
741
+ }
742
+ }