@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,180 @@
1
+ /**
2
+ * The per-brand deploy record — `<target>` under the `deploy` section of
3
+ * `.omega/state.json` (gitignored, per-machine). Multi-instance targets key
4
+ * per target: the primary stays `<target>`, other instances record under
5
+ * `<target>:<id>` (see deployKey).
6
+ *
7
+ * Written by every framework's deploy verb on success; read by the
8
+ * manager's testing service to tell "never deployed" (live-URL checks skip
9
+ * with a nudge) from "deployed but down" (an honest error). A record-less
10
+ * brand whose live URL answers gets ADOPTED — recorded on the spot — so
11
+ * fresh clones of long-deployed brands self-heal on their first manage run
12
+ * (Ian 2026-07-17).
13
+ *
14
+ * state.json is the ONE per-machine record file, sectioned per fact kind
15
+ * (#479): future record-shaped facts join it as sibling top-level sections, so
16
+ * this module reads and writes ONLY `deploy` and passes every other section
17
+ * through verbatim — including the config-shaped keys an unmigrated brand
18
+ * still carries from the retired state CONTENT (#434), which belong to the
19
+ * state-retirement migration and to nothing here.
20
+ *
21
+ * The record spent 0.45.0 in a `.omega/deploys.json` of its own (#449); a
22
+ * brand still carrying that file has it adopted here, once and loudly.
23
+ */
24
+ const fs = require('node:fs');
25
+ const path = require('node:path');
26
+ const jetpack = require('fs-jetpack');
27
+
28
+ const Logger = require('./logger.js');
29
+ const { findBrandRoot } = require('./local.js');
30
+
31
+ const logger = new Logger('deploy-record');
32
+
33
+ function stateFile(dir) {
34
+ return path.join(findBrandRoot(dir), '.omega', 'state.json');
35
+ }
36
+
37
+ /**
38
+ * Read the machine state with its `deploy` section resolved, folding in the
39
+ * interim `.omega/deploys.json` (#449) on the way — one-time and LOUD, so a
40
+ * brand that deployed on 0.45.0 keeps its stamps and the operator sees where
41
+ * they went. Records already in state.json WIN: newest write, newest home.
42
+ *
43
+ * A brand whose state.json already carries a `deploy` key is home — the
44
+ * records are read in place, silently, whatever else the file still holds.
45
+ *
46
+ * Rewrites the files it touches, so callers hold the lock.
47
+ *
48
+ * @param {string} file - The state.json path.
49
+ * @returns {Object} The machine state, `deploy` section included.
50
+ */
51
+ function loadState(file) {
52
+ const state = jetpack.read(file, 'json') || {};
53
+ const records = state.deploy || {};
54
+
55
+ const deploysFile = path.join(path.dirname(file), 'deploys.json');
56
+ const deploys = jetpack.read(deploysFile, 'json');
57
+
58
+ state.deploy = deploys ? { ...deploys, ...records } : records;
59
+ if (!deploys) return state;
60
+
61
+ // The new home lands before the old file goes: a crash between the two
62
+ // writes must never leave the records with no file at all.
63
+ jetpack.write(file, state, { jsonIndent: 2 });
64
+ jetpack.remove(deploysFile);
65
+
66
+ if (Object.keys(deploys).length > 0) {
67
+ logger.log(`Adopted ${describe(deploys)} from .omega/deploys.json into .omega/state.json — the old file was removed.`);
68
+ }
69
+
70
+ return state;
71
+ }
72
+
73
+ /**
74
+ * "1 deploy record" / "3 deploy records" — the adoption line's subject.
75
+ * @param {Object} records - key → record.
76
+ * @returns {string}
77
+ */
78
+ function describe(records) {
79
+ const count = Object.keys(records).length;
80
+ return `${count} deploy record${count === 1 ? '' : 's'}`;
81
+ }
82
+
83
+ /**
84
+ * Record key for a target's instance (multi-instance targets): the primary
85
+ * keeps today's bare target key (zero breaking change — existing records
86
+ * stay valid); any other instance keys `<target>:<id>`, matching the
87
+ * per-target deploy model (each target deploys its own instance).
88
+ * @param {string} target - Target key (web/backend/desktop/extension)
89
+ * @param {string} [instance] - Instance id ('main' or absent = the primary)
90
+ * @returns {string} The deploy-record key
91
+ */
92
+ function deployKey(target, instance) {
93
+ return instance && instance !== 'main' ? `${target}:${instance}` : target;
94
+ }
95
+
96
+ /**
97
+ * Run fn under a best-effort cross-process lock on the records file, so two
98
+ * targets deploying in parallel can't drop each other's record in the
99
+ * read-modify-write. Lock contention waits briefly; a stale lock (owner
100
+ * crashed) is stolen after 5s; on timeout we proceed unlocked — a deploy
101
+ * must never fail over its bookkeeping.
102
+ * @param {string} file - Records file path.
103
+ * @param {function} fn - Critical section.
104
+ * @returns {*} fn's result.
105
+ */
106
+ function withStateLock(file, fn) {
107
+ const lockDir = `${file}.lock`;
108
+ fs.mkdirSync(path.dirname(file), { recursive: true });
109
+
110
+ const deadline = Date.now() + 2000;
111
+ let locked = false;
112
+ while (Date.now() < deadline) {
113
+ try {
114
+ fs.mkdirSync(lockDir);
115
+ locked = true;
116
+ break;
117
+ } catch (e) {
118
+ try {
119
+ if (Date.now() - fs.statSync(lockDir).mtimeMs > 5000) {
120
+ fs.rmSync(lockDir, { recursive: true, force: true });
121
+ continue;
122
+ }
123
+ } catch (statError) {
124
+ continue; // Lock vanished between mkdir and stat — retry immediately
125
+ }
126
+ // Synchronous 25ms wait (no async surface here by design)
127
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 25);
128
+ }
129
+ }
130
+
131
+ try {
132
+ return fn();
133
+ } finally {
134
+ if (locked) {
135
+ fs.rmSync(lockDir, { recursive: true, force: true });
136
+ }
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Record a successful deploy for a target.
142
+ *
143
+ * @param {Object} options
144
+ * @param {string} options.dir - Any directory inside the brand (target or root)
145
+ * @param {string} options.target - Target key (web/backend/desktop/extension)
146
+ * @param {string} [options.instance] - Instance id; non-main instances record
147
+ * under their own `<target>:<id>` key (per-target deploy records)
148
+ * @param {Object} [options.detail] - Extra fields (method, adopted, …)
149
+ * @returns {Object} The written record
150
+ */
151
+ function recordDeploy(options) {
152
+ const file = stateFile(options.dir);
153
+ const key = deployKey(options.target, options.instance);
154
+
155
+ return withStateLock(file, () => {
156
+ const state = loadState(file);
157
+
158
+ state.deploy[key] = { at: new Date().toISOString(), ...(options.detail || {}) };
159
+ jetpack.write(file, state, { jsonIndent: 2 });
160
+
161
+ return state.deploy[key];
162
+ });
163
+ }
164
+
165
+ /**
166
+ * The recorded deploy for a target's instance — null when the brand has
167
+ * never deployed it from this machine (and no manage run has adopted a live
168
+ * site yet).
169
+ *
170
+ * @param {Object} options - { dir, target, instance? }
171
+ * @returns {Object|null}
172
+ */
173
+ function readDeployRecord(options) {
174
+ const file = stateFile(options.dir);
175
+ // Under the lock because the read is also where a legacy record is adopted
176
+ const state = withStateLock(file, () => loadState(file));
177
+ return state.deploy[deployKey(options.target, options.instance)] || null;
178
+ }
179
+
180
+ module.exports = { recordDeploy, readDeployRecord, deployKey };
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Deploy executor — the ONE dispatch path for deliberate deploys (D13/D9).
3
+ *
4
+ * Commits never auto-publish: scaffolded workflows carry no push triggers, so
5
+ * publishing is an explicit dispatch of the SAME CI build — from the local
6
+ * CLI (`omega deploy`), a server-side action (the admin post route's
7
+ * content-publish), or any plain HTTP caller. All three converge here: a
8
+ * GitHub REST `workflow_dispatch` call (native fetch, no gh-CLI dependency —
9
+ * Cloud Functions and laptops share the code path; locally the token can
10
+ * still come from `gh auth token`).
11
+ */
12
+ const path = require('node:path');
13
+ const { execSync, execFileSync } = require('node:child_process');
14
+
15
+ const { findBrandRoot, discoverTargets, frameworkPackagesOf } = require('./local.js');
16
+
17
+ const API_BASE = 'https://api.github.com';
18
+
19
+ /**
20
+ * Parse a git remote URL into { owner, repo }.
21
+ * Handles ssh (git@github.com:o/r.git), https (https://github.com/o/r.git),
22
+ * and .git-less forms.
23
+ * @param {string} url - remote URL
24
+ * @returns {{ owner: string, repo: string }|null}
25
+ */
26
+ function parseRemoteUrl(url) {
27
+ const match = (url || '').trim().match(/github\.com[/:]([^/]+)\/([^/\s]+?)(?:\.git)?$/);
28
+ if (!match) return null;
29
+ return { owner: match[1], repo: match[2] };
30
+ }
31
+
32
+ /**
33
+ * The repo a CI dispatch addresses: the BRAND's own repo, from its config
34
+ * ([#799](https://github.com/Omega-JS-Stack/omega/issues/799)). Every framework's
35
+ * deploy verb asks this instead of `resolveRepo` above, because a git remote
36
+ * answers the repo the working tree sits in: inside a brand monorepo nested in
37
+ * another repo (a brand inside the framework monorepo, a target checked out
38
+ * under someone else's tree) that is the ENCLOSING repo, so the dispatch went to
39
+ * a workflow that was never there.
40
+ *
41
+ * Half an address addresses nothing, so it throws rather than POST to
42
+ * `undefined/<name>`.
43
+ *
44
+ * @param {object} config - Composed omega config for the target being deployed.
45
+ * @returns {{ owner: string, repo: string }} the brand repo's owner and bare name
46
+ * @throws {Error} when the config names no repo
47
+ */
48
+ function dispatchRepo(config) {
49
+ const { brandRepo } = require('../config/index.js');
50
+ const { owner, name } = brandRepo(config);
51
+
52
+ if (!owner || !name) {
53
+ throw new Error('Could not determine the brand repo to dispatch on. Set repo.providers.github.org (and repo.providers.github.repo when the repo name is not <brand.id>-omega) in config/omega.json5.');
54
+ }
55
+
56
+ return { owner, repo: name };
57
+ }
58
+
59
+ /**
60
+ * Resolve the GitHub repo for a working directory from its origin remote.
61
+ * @param {object} [options]
62
+ * @param {string} [options.cwd] - repo directory (default: process.cwd())
63
+ * @param {string} [options.remote] - remote name (default: origin)
64
+ * @param {function} [options.execFn] - injectable exec (tests)
65
+ * @returns {{ owner: string, repo: string }}
66
+ */
67
+ function resolveRepo(options = {}) {
68
+ const execFn = options.execFn || ((cmd, opts) => execSync(cmd, opts).toString());
69
+ const url = execFn(`git config --get remote.${options.remote || 'origin'}.url`, {
70
+ cwd: options.cwd || process.cwd(),
71
+ stdio: ['ignore', 'pipe', 'ignore'],
72
+ });
73
+ const parsed = parseRemoteUrl(url);
74
+ if (!parsed) {
75
+ throw new Error(`Cannot parse a GitHub repo from remote url: ${String(url).trim() || '(none)'}`);
76
+ }
77
+ return parsed;
78
+ }
79
+
80
+ /**
81
+ * Resolve a GitHub token: GH_TOKEN → GITHUB_TOKEN → `gh auth token`.
82
+ * @param {object} [options]
83
+ * @param {object} [options.env] - env map (default: process.env)
84
+ * @param {function} [options.execFn] - injectable exec (tests)
85
+ * @returns {string|null}
86
+ */
87
+ function resolveToken(options = {}) {
88
+ const env = options.env || process.env;
89
+ if (env.GH_TOKEN) return env.GH_TOKEN;
90
+ if (env.GITHUB_TOKEN) return env.GITHUB_TOKEN;
91
+
92
+ const execFn = options.execFn || ((cmd, opts) => execSync(cmd, opts).toString());
93
+ try {
94
+ const token = execFn('gh auth token', { stdio: ['ignore', 'pipe', 'ignore'] }).trim();
95
+ return token || null;
96
+ } catch (e) {
97
+ return null;
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Build a workflow_dispatch plan — the exact REST call a deploy will make.
103
+ * This IS the dry-run output: everything except the send.
104
+ * @param {object} options
105
+ * @param {string} options.owner - repo owner
106
+ * @param {string} options.repo - repo name
107
+ * @param {string} options.workflow - workflow file name (e.g. build.yml)
108
+ * @param {string} [options.ref] - branch/tag to run on (default: main)
109
+ * @param {object} [options.inputs] - workflow_dispatch inputs
110
+ * @returns {{ method: string, url: string, body: object, runsUrl: string }}
111
+ */
112
+ function buildDispatch(options) {
113
+ for (const key of ['owner', 'repo', 'workflow']) {
114
+ if (!options[key]) throw new Error(`buildDispatch: missing ${key}`);
115
+ }
116
+ const body = { ref: options.ref || 'main' };
117
+ if (options.inputs && Object.keys(options.inputs).length > 0) body.inputs = options.inputs;
118
+
119
+ return {
120
+ method: 'POST',
121
+ url: `${API_BASE}/repos/${options.owner}/${options.repo}/actions/workflows/${options.workflow}/dispatches`,
122
+ body: body,
123
+ runsUrl: `https://github.com/${options.owner}/${options.repo}/actions/workflows/${options.workflow}`,
124
+ };
125
+ }
126
+
127
+ /**
128
+ * Send a dispatch plan to GitHub (204 = accepted).
129
+ * @param {object} plan - buildDispatch() result
130
+ * @param {object} options
131
+ * @param {string} options.token - GitHub token
132
+ * @param {function} [options.fetchFn] - injectable fetch (tests)
133
+ * @returns {Promise<object>} the plan, on success
134
+ */
135
+ async function dispatchWorkflow(plan, options = {}) {
136
+ if (!options.token) {
137
+ throw new Error('No GitHub token — set GH_TOKEN in .env or sign in with `gh auth login`');
138
+ }
139
+ const fetchFn = options.fetchFn || fetch;
140
+ const response = await fetchFn(plan.url, {
141
+ method: plan.method,
142
+ headers: {
143
+ Accept: 'application/vnd.github+json',
144
+ Authorization: `Bearer ${options.token}`,
145
+ 'X-GitHub-Api-Version': '2022-11-28',
146
+ 'User-Agent': 'omega-deploy',
147
+ },
148
+ body: JSON.stringify(plan.body),
149
+ });
150
+
151
+ if (response.status !== 204) {
152
+ const text = await response.text().catch(() => '');
153
+ throw new Error(`workflow_dispatch failed (${response.status}): ${text || response.statusText || 'unknown error'}`);
154
+ }
155
+ return plan;
156
+ }
157
+
158
+ /**
159
+ * The one deploy path: resolve repo + token, build the plan, dispatch — or
160
+ * return the plan untouched when dryRun is set.
161
+ * @param {object} options
162
+ * @param {string} options.workflow - workflow file name
163
+ * @param {string} [options.cwd] - repo dir for remote resolution
164
+ * @param {string} [options.owner] - explicit owner (skips git resolution)
165
+ * @param {string} [options.repo] - explicit repo (skips git resolution)
166
+ * @param {string} [options.ref] - branch (default main)
167
+ * @param {object} [options.inputs] - workflow inputs
168
+ * @param {boolean} [options.dryRun] - build the plan but never send
169
+ * @param {object} [options.env] - env map for token resolution
170
+ * @param {function} [options.fetchFn] - injectable fetch
171
+ * @param {function} [options.execFn] - injectable exec
172
+ * @returns {Promise<{ plan: object, dispatched: boolean }>}
173
+ */
174
+ async function deployViaDispatch(options) {
175
+ const target = options.owner && options.repo
176
+ ? { owner: options.owner, repo: options.repo }
177
+ : resolveRepo({ cwd: options.cwd, execFn: options.execFn });
178
+
179
+ const plan = buildDispatch({
180
+ owner: target.owner,
181
+ repo: target.repo,
182
+ workflow: options.workflow,
183
+ ref: options.ref,
184
+ inputs: options.inputs,
185
+ });
186
+
187
+ if (options.dryRun) {
188
+ return { plan, dispatched: false };
189
+ }
190
+
191
+ const token = options.token || resolveToken({ env: options.env, execFn: options.execFn });
192
+ await dispatchWorkflow(plan, { token, fetchFn: options.fetchFn });
193
+ return { plan, dispatched: true };
194
+ }
195
+
196
+ /**
197
+ * Find every `file:` @omega.js spec in the brand tree. npm resolves the
198
+ * WHOLE workspace tree on any install, so one linked sibling target breaks a
199
+ * CI install even when the deploying target is clean (the cp194 lesson —
200
+ * linking is tree-wide, so detection is too). Deploy verbs use this to
201
+ * AUTO-SELECT their local-artifact lane (mirrored rule, Ian 2026-07-20:
202
+ * a linked brand ships the LOCAL framework — build here, ship the artifact;
203
+ * CI dispatch is only for registry-clean trees).
204
+ * @param {object} [options]
205
+ * @param {string} [options.dir] - Any directory inside the brand (default cwd).
206
+ * @returns {string[]} One line per offender: `<manifest> → <name>: <spec>`.
207
+ */
208
+ function findLocalSpecs(options = {}) {
209
+ const brandRoot = findBrandRoot(options.dir || process.cwd());
210
+ const offenders = [];
211
+
212
+ for (const targetDir of discoverTargets(brandRoot)) {
213
+ for (const entry of frameworkPackagesOf(targetDir)) {
214
+ if (entry.spec.startsWith('file:')) {
215
+ const manifest = path.relative(brandRoot, path.join(targetDir, 'package.json')) || 'package.json';
216
+ offenders.push(`${manifest} → ${entry.name}: ${entry.spec}`);
217
+ }
218
+ }
219
+ }
220
+
221
+ return offenders;
222
+ }
223
+
224
+ /**
225
+ * Throw when the brand tree carries `file:` @omega.js specs — for lanes with
226
+ * no local-artifact fallback where dispatching would only burn a CI run.
227
+ * @param {object} [options]
228
+ * @param {string} [options.dir] - Any directory inside the brand (default cwd).
229
+ * @throws {Error} Listing every file:-spec'd @omega.js dependency, per target.
230
+ */
231
+ function assertNoLocalSpecs(options = {}) {
232
+ const offenders = findLocalSpecs(options);
233
+ if (offenders.length > 0) {
234
+ throw new Error(
235
+ 'Local file: packages are linked somewhere in this brand — CI cannot install them.\n'
236
+ + ` ${offenders.join('\n ')}\n`
237
+ + 'Deploy from the local-artifact lane, or restore registry specs first (omega i live).'
238
+ );
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Commit + push the working tree before a dispatch deploy (D13: the push
244
+ * itself triggers NOTHING — scaffolded workflows carry no push triggers).
245
+ * Plain git via argument arrays: universal on consumer machines and
246
+ * injection-safe for the message.
247
+ * @param {object} [options]
248
+ * @param {string} [options.cwd] - Repo directory (default process.cwd()).
249
+ * @param {string} [options.message] - Commit message (default 'Deploy').
250
+ * @param {object} [options.logger] - Logger with log (silent when omitted).
251
+ */
252
+ function syncWorkingTree(options = {}) {
253
+ const cwd = options.cwd || process.cwd();
254
+ const message = options.message || 'Deploy';
255
+
256
+ execFileSync('git', ['add', '-A'], { cwd, stdio: 'inherit' });
257
+
258
+ // `git diff --cached --quiet` exits 1 exactly when something is staged
259
+ let hasStaged = false;
260
+ try {
261
+ execFileSync('git', ['diff', '--cached', '--quiet'], { cwd, stdio: 'ignore' });
262
+ } catch (e) {
263
+ hasStaged = true;
264
+ }
265
+
266
+ if (hasStaged) {
267
+ execFileSync('git', ['commit', '-m', message], { cwd, stdio: 'inherit' });
268
+ } else if (options.logger) {
269
+ options.logger.log('Working tree clean — nothing to commit');
270
+ }
271
+
272
+ execFileSync('git', ['push'], { cwd, stdio: 'inherit' });
273
+ }
274
+
275
+ module.exports = {
276
+ parseRemoteUrl,
277
+ dispatchRepo,
278
+ resolveRepo,
279
+ resolveToken,
280
+ buildDispatch,
281
+ dispatchWorkflow,
282
+ deployViaDispatch,
283
+ findLocalSpecs,
284
+ assertNoLocalSpecs,
285
+ syncWorkingTree,
286
+ };
@@ -0,0 +1,64 @@
1
+ /**
2
+ * emptyModulesPlugin — every specifier in the list answers ONE empty CommonJS
3
+ * module ([#737](https://github.com/Omega-JS-Stack/omega/issues/737), part of
4
+ * [#128](https://github.com/Omega-JS-Stack/omega/issues/128)).
5
+ *
6
+ * A BROWSER bundle still receives imports of things a browser has no version
7
+ * of: libraries reach for `fs`, `path` or `crypto` on code paths their browser
8
+ * builds never take, and esbuild has no answer for them, so the build fails on
9
+ * an import nothing will ever execute. webpack spelled the answer
10
+ * `resolve.fallback: { fs: false, … }`; this is the same answer as an esbuild
11
+ * resolve hook, and it is shared because every browser-targeting framework
12
+ * needs it (@omega.js/desktop's renderer and @omega.js/extension's browser
13
+ * bundles both pass their own list).
14
+ *
15
+ * The substitution is UNCONDITIONAL: a listed name is answered, never resolved
16
+ * first. That is the whole point for a name that WOULD resolve — `electron`
17
+ * resolves fine from a desktop project, and resolving it would inline the real
18
+ * package into a renderer that must never reach it. A name on this list is a
19
+ * name the caller has decided the bundle may not contain, whatever is installed.
20
+ *
21
+ * Anything NOT on the list is untouched and fails with esbuild's normal
22
+ * resolution error, which is what a genuine missing dependency should do.
23
+ */
24
+
25
+ const NAMESPACE = 'omega-empty-module';
26
+
27
+ /**
28
+ * Regex-escape a module name so a specifier is matched literally.
29
+ * @param {string} name - the module name
30
+ * @returns {string}
31
+ */
32
+ function escape(name) {
33
+ return name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
34
+ }
35
+
36
+ /**
37
+ * @param {string[]} names - the specifiers to answer with an empty module
38
+ * @returns {object} the esbuild plugin
39
+ */
40
+ function emptyModulesPlugin(names) {
41
+ if (!Array.isArray(names) || names.length === 0) {
42
+ // Registering the hook with nothing to answer means the caller believes it
43
+ // shimmed something and did not — the exact bug this plugin exists to stop.
44
+ throw new Error('[devkit empty-modules] names must be a non-empty array of specifiers to answer with an empty module');
45
+ }
46
+
47
+ // `node:` prefixed specifiers name the same built-ins and must shim the same.
48
+ const filter = new RegExp(`^(node:)?(${names.map(escape).join('|')})$`);
49
+
50
+ return {
51
+ name: 'omega-empty-modules',
52
+ setup(build) {
53
+ build.onResolve({ filter }, (args) => ({ path: args.path, namespace: NAMESPACE }));
54
+ // CommonJS, so a named import of anything reads as undefined at runtime
55
+ // rather than failing the build — webpack's `false` fallback did the same.
56
+ build.onLoad({ filter: /.*/, namespace: NAMESPACE }, () => ({
57
+ contents: 'module.exports = {};',
58
+ loader: 'js',
59
+ }));
60
+ },
61
+ };
62
+ }
63
+
64
+ module.exports = { emptyModulesPlugin, NAMESPACE };
@@ -0,0 +1,132 @@
1
+ /**
2
+ * env-watch — the `.env` chain as a WATCH INPUT for the dev lanes
3
+ * ([#681](https://github.com/Omega-JS-Stack/omega/issues/681)).
4
+ *
5
+ * The backend's stage watch has treated the cascade as an input since #678: an
6
+ * edit to the brand root's `.env` re-stages `dist/.env` and the running
7
+ * emulator picks it up (`envWatchInputs`,
8
+ * packages/backend/src/cli/utils/stage-functions.js). Web, desktop and
9
+ * extension read the cascade once at CLI/gulp boot and never noticed an edit —
10
+ * one target live-reloaded env, three did not. This is that same resolution for
11
+ * the three process.env lanes.
12
+ *
13
+ * Every layer of the chain is watched — company ← brand ← target — and each
14
+ * layer is TWO files, its `.env` and the `.env.<environment>` overlay that wins
15
+ * over it (#586), exactly the set `loadEnv` reads. DIRECTORIES are watched, not
16
+ * the files: an editor's save replaces the inode (a file watch does not survive
17
+ * it), and a layer's `.env` may not exist yet.
18
+ *
19
+ * Values NEVER reach a log line — a `.env` is all secrets, so the one line a
20
+ * reload prints names the FILE that changed.
21
+ */
22
+
23
+ const fs = require('node:fs');
24
+ const path = require('node:path');
25
+ const { resolveEnvChain, envLayerFiles, envEnvironment, reloadEnv } = require('../config/index.js');
26
+
27
+ // Long enough to collapse an editor's save burst into one reload — the same
28
+ // settle the other dev watchers use.
29
+ const DEBOUNCE_MS = 250;
30
+
31
+ /**
32
+ * The `.env` files a dev watcher treats as inputs, weakest layer first: each
33
+ * layer of the chain and the `.env.<environment>` overlay that wins over it.
34
+ * Existence is not checked here — a layer's file can appear mid-session.
35
+ *
36
+ * Named for the CHAIN it resolves, because the backend's stage watch has its
37
+ * own `envWatchInputs` (stage-functions.js) with a different contract — brand
38
+ * and company only, no overlays, no target layer
39
+ * ([#723](https://github.com/Omega-JS-Stack/omega/issues/723)).
40
+ *
41
+ * @param {string} projectDir - The target root (its .env is the local layer).
42
+ * @param {object} [options]
43
+ * @param {string} [options.environment] - The environment whose overlay counts
44
+ * (defaults to the running one, the same answer loadEnv resolves).
45
+ * @returns {Array<{ layer: 'company'|'brand'|'target', path: string }>} Absolute paths.
46
+ */
47
+ function envChainWatchInputs(projectDir, { environment = envEnvironment() } = {}) {
48
+ const chain = resolveEnvChain(projectDir);
49
+
50
+ return [
51
+ ...envLayerFiles(chain.company, environment).map((file) => ({ layer: 'company', path: file })),
52
+ ...envLayerFiles(chain.brand, environment).map((file) => ({ layer: 'brand', path: file })),
53
+ ...envLayerFiles(chain.local, environment).map((file) => ({ layer: 'target', path: file })),
54
+ ];
55
+ }
56
+
57
+ /**
58
+ * Watch the whole `.env` chain and reload the cascade into process.env on a
59
+ * change, so the NEXT rebuild reads the new values.
60
+ *
61
+ * SCOPE, exactly: a NEW key AND an EDITED value both land on that next rebuild,
62
+ * and a key dropped from the file is dropped from the process — what a file
63
+ * layer owns, the reload re-reads. A SHELL-set value always wins, whatever any
64
+ * file now says ([#724](https://github.com/Omega-JS-Stack/omega/issues/724)).
65
+ *
66
+ * One `fs.watch` per DIRECTORY (a standalone brand's layers can share one),
67
+ * filtered to the file names that directory contributes — a sibling file's
68
+ * churn never reloads anything. A directory that does not exist is skipped, the
69
+ * same rule the backend's stage watch applies.
70
+ *
71
+ * The reload is `reloadEnv`, which keeps the cascade's own precedence: the shell
72
+ * wins over every file, and a strictly stronger layer wins over a weaker one.
73
+ *
74
+ * @param {object} options
75
+ * @param {string} options.projectDir - The target root.
76
+ * @param {string} [options.target] - Target name ('web', 'desktop', 'extension')
77
+ * — delivers the schema's `deliverAs` renames, exactly as the boot load did.
78
+ * @param {string} [options.environment] - The environment whose overlay is an
79
+ * input (defaults to the running one).
80
+ * @param {function} [options.log] - Line logger (silent by default).
81
+ * @param {number} [options.debounceMs]
82
+ * @returns {{ inputs: Array<{ layer: string, path: string }>, close: function }}
83
+ */
84
+ function watchEnvChain(options) {
85
+ const projectDir = options.projectDir;
86
+ const environment = options.environment || envEnvironment();
87
+ const log = options.log || (() => {});
88
+ const debounceMs = options.debounceMs || DEBOUNCE_MS;
89
+ const inputs = envChainWatchInputs(projectDir, { environment });
90
+
91
+ // dir → the file names that dir contributes to the chain
92
+ const byDir = new Map();
93
+ for (const input of inputs) {
94
+ const dir = path.dirname(input.path);
95
+ if (!byDir.has(dir)) byDir.set(dir, new Set());
96
+ byDir.get(dir).add(path.basename(input.path));
97
+ }
98
+
99
+ const watchers = [];
100
+ let timer = null;
101
+
102
+ for (const [dir, names] of byDir) {
103
+ if (!fs.existsSync(dir)) continue;
104
+
105
+ const watcher = fs.watch(dir, (event, filename) => {
106
+ if (!names.has(filename)) return;
107
+
108
+ clearTimeout(timer);
109
+ timer = setTimeout(() => {
110
+ reloadEnv(projectDir, { target: options.target, environment });
111
+ log(`Reloaded the .env cascade — ${path.join(dir, filename)} changed`);
112
+ }, debounceMs);
113
+ });
114
+
115
+ // UNREF'd: this watch rides ALONG with a dev lane, it never IS one. An
116
+ // open fs.watch holds the event loop, so a ref'd handle would leave gulp
117
+ // running forever after the app it served quits (desktop's `serve` ends
118
+ // its task on electron's exit, and nothing else keeps that process up).
119
+ watcher.unref();
120
+ watchers.push(watcher);
121
+ }
122
+
123
+ return {
124
+ inputs,
125
+ close: () => {
126
+ clearTimeout(timer);
127
+ for (const watcher of watchers) watcher.close();
128
+ },
129
+ };
130
+ }
131
+
132
+ module.exports = { envChainWatchInputs, watchEnvChain, DEBOUNCE_MS };