@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,272 @@
1
+ /**
2
+ * USER_SCHEMA — the canonical OMEGA user/account schema (pure data, no logic).
3
+ *
4
+ * Extracted verbatim from @omega.js/backend's src/manager/helpers/user.js, which is
5
+ * the authoritative shape (@omega.js/client's DEFAULT_ACCOUNT had drifted from it).
6
+ *
7
+ * Each leaf field is { type, default, nullable }
8
+ * Special keys:
9
+ * $passthrough — preserve all existing keys from input, don't strip unknowns
10
+ * $template — shape applied to every dynamic key in a $passthrough object
11
+ * '$template' — (string value) reference to parent's $template
12
+ * '$timestamp' — shorthand for { timestamp, timestampUNIX } defaulting to epoch
13
+ * '$timestamp:now' — same but defaults to current time
14
+ * '$uuid', '$randomId', '$apiKey', '$oldDate' — resolved at runtime (generators
15
+ * are injected by the host — see engine.js; absent generators resolve to null)
16
+ */
17
+
18
+ /**
19
+ * One attribution TOUCH — a single visit's campaign context, shared by
20
+ * `attribution.first` and `attribution.last`
21
+ * ([#384](https://github.com/Omega-JS-Stack/omega/issues/384)). `tags` holds the
22
+ * utm set and `clickIds` the ad-platform click ids (fbclid/gclid/…), both
23
+ * passthrough because the platforms keep adding params. The schema is read-only
24
+ * to the engine, so one object serves both slots.
25
+ */
26
+ const ATTRIBUTION_TOUCH = {
27
+ tags: { $passthrough: true },
28
+ clickIds: { $passthrough: true },
29
+ referrer: { type: 'string', default: null, nullable: true },
30
+ url: { type: 'string', default: null, nullable: true },
31
+ page: { type: 'string', default: null, nullable: true },
32
+ timestamp: { type: 'string', default: null, nullable: true },
33
+ };
34
+
35
+ const USER_SCHEMA = {
36
+ auth: {
37
+ uid: { type: 'string', default: null, nullable: true },
38
+ email: { type: 'string', default: null, nullable: true },
39
+ temporary: { type: 'boolean', default: false },
40
+ },
41
+ subscription: {
42
+ product: {
43
+ id: { type: 'string', default: 'basic' },
44
+ name: { type: 'string', default: 'Basic' },
45
+ },
46
+ status: { type: 'string', default: 'active' },
47
+ expires: '$timestamp',
48
+ trial: {
49
+ claimed: { type: 'boolean', default: false },
50
+ expires: '$timestamp',
51
+ // How the trial ENDED: 'converted' | 'lapsed' | null (still running, or never
52
+ // answered). `claimed` says only that a trial happened — a converted trial and a
53
+ // lapsed one carry identical dates — so this is the one stored conversion signal.
54
+ // Stamped by the trial-lapse sweep once the provider confirms which it was.
55
+ outcome: { type: 'string', default: null, nullable: true },
56
+ },
57
+ cancellation: {
58
+ pending: { type: 'boolean', default: false },
59
+ date: '$timestamp',
60
+ },
61
+ payment: {
62
+ provider: { type: 'string', default: null, nullable: true },
63
+ orderId: { type: 'string', default: null, nullable: true },
64
+ resourceId: { type: 'string', default: null, nullable: true },
65
+ frequency: { type: 'string', default: null, nullable: true },
66
+ price: { type: 'number', default: 0 },
67
+ startDate: '$timestamp',
68
+ updatedBy: {
69
+ event: {
70
+ name: { type: 'string', default: null, nullable: true },
71
+ id: { type: 'string', default: null, nullable: true },
72
+ },
73
+ date: '$timestamp',
74
+ },
75
+ },
76
+ // The discount riding the subscription right now
77
+ // ([#325](https://github.com/Omega-JS-Stack/omega/issues/325)). Shaped as a
78
+ // discount-codes validate() RESULT — the one shape the whole payment stack
79
+ // already speaks — so the billing card reads exactly what the apply route
80
+ // wrote, and neither side learns a second spelling. `valid: false` (the
81
+ // default) IS "no discount": absent and denied read the same everywhere.
82
+ //
83
+ // Both shapes are always present and default to 0, unlike a fresh validate()
84
+ // result which omits the one it is not: this node is MERGED onto a document
85
+ // that may already carry a discount, and a percent claim landing on a stored
86
+ // amount would otherwise be read as the older, wrong number.
87
+ //
88
+ // `source` is what makes it safe to read as a CLAIM. Today only the winback
89
+ // claim writes this node; a code typed at checkout will set the same node
90
+ // when checkout starts writing it, and a winback pitch suppressed by someone
91
+ // else's promo is an offer silently withheld — so the node says which system
92
+ // applied it ('winback' | 'checkout'), and only 'winback' is the claimed
93
+ // signal the cancel flow gates on.
94
+ //
95
+ // `resourceId` is the subscription the discount was applied TO, stamped at
96
+ // claim time ([#333](https://github.com/Omega-JS-Stack/omega/issues/333)).
97
+ // It is what makes the node clearable: the unified webhook write carries no
98
+ // discount key, so a merge preserves this node forever, and a customer who
99
+ // churned and resubscribed carried a spent claim into the NEW subscription,
100
+ // where `source: 'winback'` reads as "already claimed" and silently retires
101
+ // an offer the backend would grant again. The webhook pipeline compares the
102
+ // stamp against the subscription each event is about and CLEARS the node
103
+ // (back to these defaults) on a mismatch: a new subscription is a clean
104
+ // slate. An unstamped node (written before the stamp existed) is read as
105
+ // belonging to the subscription it is found on, because nothing can prove
106
+ // otherwise and no live discount is ever taken away on a guess, and the
107
+ // pipeline stamps it there, so it clears on the next resubscribe like any
108
+ // other.
109
+ discount: {
110
+ valid: { type: 'boolean', default: false },
111
+ code: { type: 'string', default: null, nullable: true },
112
+ percent: { type: 'number', default: 0 },
113
+ amount: { type: 'number', default: 0 },
114
+ duration: { type: 'string', default: null, nullable: true },
115
+ source: { type: 'string', default: null, nullable: true },
116
+ resourceId: { type: 'string', default: null, nullable: true },
117
+ },
118
+ },
119
+ roles: {
120
+ $passthrough: true,
121
+ admin: { type: 'boolean', default: false },
122
+ betaTester: { type: 'boolean', default: false },
123
+ developer: { type: 'boolean', default: false },
124
+ },
125
+ flags: {
126
+ $passthrough: true,
127
+ signupProcessed: { type: 'boolean', default: false },
128
+ },
129
+ affiliate: {
130
+ code: { type: 'string', default: '$randomId' },
131
+ referrals: { type: 'array', default: [] },
132
+ },
133
+ metadata: {
134
+ created: '$timestamp:now',
135
+ updated: '$timestamp:now',
136
+ },
137
+ activity: {
138
+ geolocation: {
139
+ ip: { type: 'string', default: null, nullable: true },
140
+ continent: { type: 'string', default: null, nullable: true },
141
+ country: { type: 'string', default: null, nullable: true },
142
+ region: { type: 'string', default: null, nullable: true },
143
+ city: { type: 'string', default: null, nullable: true },
144
+ latitude: { type: 'number', default: 0 },
145
+ longitude: { type: 'number', default: 0 },
146
+ },
147
+ client: {
148
+ language: { type: 'string', default: null, nullable: true },
149
+ mobile: { type: 'boolean', default: false },
150
+ device: { type: 'string', default: null, nullable: true },
151
+ platform: { type: 'string', default: null, nullable: true },
152
+ browser: { type: 'string', default: null, nullable: true },
153
+ vendor: { type: 'string', default: null, nullable: true },
154
+ runtime: { type: 'string', default: null, nullable: true },
155
+ userAgent: { type: 'string', default: null, nullable: true },
156
+ url: { type: 'string', default: null, nullable: true },
157
+ },
158
+ },
159
+ api: {
160
+ clientId: { type: 'string', default: '$uuid' },
161
+ privateKey: { type: 'string', default: '$apiKey' },
162
+ },
163
+ // The documents this account owns, by KIND: `{ teams: ['team-abc'] }`
164
+ // ([#647](https://github.com/Omega-JS-Stack/omega/issues/647)). A counted
165
+ // feature's catalog entry names the kinds its counters mirror onto
166
+ // (`usage: { mirror: ['teams'] }`), and this is what resolves a kind to real
167
+ // document paths — so a mirror is declared once in config instead of
168
+ // re-derived at every call site. Server-written like `usage`: a client that
169
+ // could write it could point another account's counters at its own doc.
170
+ owns: {
171
+ $passthrough: true,
172
+ },
173
+ usage: {
174
+ $passthrough: true,
175
+ // Admin-granted extra credits, feature id → number
176
+ // ([#647](https://github.com/Omega-JS-Stack/omega/issues/647)). Declared
177
+ // HERE so the sibling `$template` never resolves it as a counter block:
178
+ // it is a map of limits, not a map of counts. `usage` is a framework field
179
+ // the security rules deny every client, so an override can only ever be
180
+ // server-written — which is what makes it trustworthy as a limit.
181
+ overrides: { $passthrough: true },
182
+ $template: {
183
+ monthly: { type: 'number', default: 0 },
184
+ daily: { type: 'number', default: 0 },
185
+ total: { type: 'number', default: 0 },
186
+ // When the counter last moved. The old `id` field went with the retired
187
+ // `increment(name, value, { id })` option (#647): nothing writes it now,
188
+ // and a schema field nothing fills reads as a fact that is always null.
189
+ last: {
190
+ timestamp: { type: 'string', default: '$oldDate' },
191
+ timestampUNIX: { type: 'number', default: 0 },
192
+ },
193
+ },
194
+ },
195
+ personal: {
196
+ birthday: '$timestamp',
197
+ gender: { type: 'string', default: null, nullable: true },
198
+ location: {
199
+ country: { type: 'string', default: null, nullable: true },
200
+ region: { type: 'string', default: null, nullable: true },
201
+ city: { type: 'string', default: null, nullable: true },
202
+ postalCode: { type: 'string', default: null, nullable: true },
203
+ street: { type: 'string', default: null, nullable: true },
204
+ },
205
+ name: {
206
+ first: { type: 'string', default: null, nullable: true },
207
+ last: { type: 'string', default: null, nullable: true },
208
+ },
209
+ company: {
210
+ name: { type: 'string', default: null, nullable: true },
211
+ position: { type: 'string', default: null, nullable: true },
212
+ },
213
+ telephone: {
214
+ countryCode: { type: 'number', default: 0 },
215
+ national: { type: 'number', default: 0 },
216
+ },
217
+ },
218
+ connections: {
219
+ $passthrough: true,
220
+ },
221
+ attribution: {
222
+ affiliate: {
223
+ code: { type: 'string', default: null, nullable: true },
224
+ timestamp: { type: 'string', default: null, nullable: true },
225
+ url: { type: 'string', default: null, nullable: true },
226
+ page: { type: 'string', default: null, nullable: true },
227
+ },
228
+ // The touch model: `first` is the visit that first brought the user here,
229
+ // written once and never overwritten; `last` is the newest TAGGED visit. No
230
+ // expiry — the timestamps carry any read-time lookback window. Replaces the
231
+ // single `utm` blob outright (no dual-read).
232
+ first: ATTRIBUTION_TOUCH,
233
+ last: ATTRIBUTION_TOUCH,
234
+ },
235
+ // The tracking-consent snapshot the client captured, stored verbatim: passthrough
236
+ // because this layer never interprets it — the consent module owns its shape. NOT
237
+ // the same thing as `consent` below, which is the legal/marketing decision.
238
+ trackingConsent: {
239
+ $passthrough: true,
240
+ },
241
+ consent: {
242
+ legal: {
243
+ status: { type: 'string', default: 'revoked' },
244
+ grantedAt: {
245
+ timestamp: { type: 'string', default: null, nullable: true },
246
+ timestampUNIX: { type: 'number', default: null, nullable: true },
247
+ source: { type: 'string', default: null, nullable: true },
248
+ ip: { type: 'string', default: null, nullable: true },
249
+ text: { type: 'string', default: null, nullable: true },
250
+ },
251
+ },
252
+ marketing: {
253
+ status: { type: 'string', default: 'revoked' },
254
+ grantedAt: {
255
+ timestamp: { type: 'string', default: null, nullable: true },
256
+ timestampUNIX: { type: 'number', default: null, nullable: true },
257
+ source: { type: 'string', default: null, nullable: true },
258
+ ip: { type: 'string', default: null, nullable: true },
259
+ text: { type: 'string', default: null, nullable: true },
260
+ },
261
+ revokedAt: {
262
+ timestamp: { type: 'string', default: null, nullable: true },
263
+ timestampUNIX: { type: 'number', default: null, nullable: true },
264
+ source: { type: 'string', default: null, nullable: true },
265
+ ip: { type: 'string', default: null, nullable: true },
266
+ text: { type: 'string', default: null, nullable: true },
267
+ },
268
+ },
269
+ },
270
+ };
271
+
272
+ module.exports = USER_SCHEMA;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * resolveSubscription — extracted verbatim from @omega.js/backend's User.resolveSubscription
3
+ * (the superset: @omega.js/client's drifted copy lacked `everPaid`).
4
+ *
5
+ * Resolves calculated subscription fields that require derivation logic.
6
+ * Raw data (product.id, status, trial, cancellation) is on the account directly.
7
+ * Returns: { plan, active, trialing, cancelling, everPaid }
8
+ * - plan: the plan ID the user effectively has access to RIGHT NOW ('basic' if cancelled/suspended)
9
+ * - active: user has active access (active, trialing, or cancelling)
10
+ * - trialing: user is in an active trial (status is 'active' but trial hasn't expired)
11
+ * - cancelling: cancellation is pending (status is 'active' but cancellation.pending is true)
12
+ * - everPaid: user has had a paid subscription at some point (payment.startDate exists)
13
+ */
14
+ function resolveSubscription(account) {
15
+ const subscription = (account?.subscription || account?.properties?.subscription) || {};
16
+ const productId = subscription.product?.id || 'basic';
17
+
18
+ let trialing = false;
19
+ let cancelling = false;
20
+
21
+ if (productId !== 'basic' && subscription.status === 'active') {
22
+ trialing = !!(subscription.trial?.claimed
23
+ && subscription.trial?.expires?.timestampUNIX > Math.floor(Date.now() / 1000));
24
+ cancelling = !trialing && !!subscription.cancellation?.pending;
25
+ }
26
+
27
+ const active = (productId !== 'basic' && subscription.status === 'active');
28
+
29
+ return {
30
+ plan: active ? productId : 'basic',
31
+ active,
32
+ trialing,
33
+ cancelling,
34
+ everPaid: (subscription.payment?.startDate?.timestampUNIX || 0) > 0,
35
+ };
36
+ }
37
+
38
+ module.exports = resolveSubscription;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The company layer's ONE discovery rule.
3
+ *
4
+ * A brand managed by a company workspace carries `.omega/company.json` at its
5
+ * root (stamped idempotently by company manage runs) pointing at the company
6
+ * root. Everything that cascades — the config chain (load.js), the .env chain
7
+ * (env.js), owner hooks (hooks.js) — resolves the company root through here,
8
+ * so the stamp is read exactly one way.
9
+ */
10
+
11
+ const fs = require('node:fs');
12
+ const path = require('node:path');
13
+
14
+ // A brand's pointer at its company root.
15
+ const COMPANY_MARKER = path.join('.omega', 'company.json');
16
+
17
+ /**
18
+ * The company root a brand points at via its .omega/company.json marker.
19
+ * @param {string} brandRoot
20
+ * @returns {string|null} Absolute company root, or null when unstamped/unreadable.
21
+ */
22
+ function readCompanyRoot(brandRoot) {
23
+ try {
24
+ const marker = JSON.parse(fs.readFileSync(path.join(brandRoot, COMPANY_MARKER), 'utf8'));
25
+ return typeof marker.root === 'string' && marker.root ? marker.root : null;
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ module.exports = { readCompanyRoot, COMPANY_MARKER };
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Schema-derived defaults — the ONE home of every config default
3
+ * ([#478](https://github.com/Omega-JS-Stack/omega/issues/478)).
4
+ *
5
+ * Defaults used to be scattered: a per-framework `options.defaults` blob, the
6
+ * manager's DEFAULTS layer, read-site fallbacks, and prose in the schema
7
+ * descriptions. Now a schema entry declares its own `default:` and everything
8
+ * derives from that:
9
+ *
10
+ * - `schemaDefaults(target)` builds the merge chain's LOWEST layer
11
+ * (load.js). A framework still passes `options.defaults` on top, but only
12
+ * where that framework genuinely differs from the schema answer.
13
+ * - `missingDefaults(config)` names the blocks a brand's omega.json5 has yet
14
+ * to materialize — the manage walk writes exactly those, with each block's
15
+ * schema description as its guiding comment, and never touches a key the
16
+ * brand already authored (a new subsystem simply appears on the next run).
17
+ *
18
+ * A key with no sane framework answer carries no `default:` and is never
19
+ * materialized: owner decisions, tri-states that mean "ask", ids the services
20
+ * provision, anything secret-shaped (secrets live in .env regardless).
21
+ *
22
+ * A rule may also carry `materialize: false`
23
+ * ([#793](https://github.com/Omega-JS-Stack/omega/issues/793)): its `default:`
24
+ * still RESOLVES (schemaDefaults, so every reader sees the value) but is never
25
+ * WRITTEN into a brand's file. That is for framework facts a brand may override
26
+ * and rarely does — presentation the framework owns — where a copy in every
27
+ * brand config is a copy that drifts from the thing it came from.
28
+ */
29
+
30
+ const { SHARED_SCHEMA, TARGET_SCHEMAS } = require('./schema.js');
31
+ const { isPlainObject } = require('./merge.js');
32
+
33
+ function hasDefault(rule) {
34
+ return Object.prototype.hasOwnProperty.call(rule, 'default');
35
+ }
36
+
37
+ /**
38
+ * Whether a rule's default is WRITTEN into a brand's file, not merely resolved
39
+ * ([#793](https://github.com/Omega-JS-Stack/omega/issues/793)). `materialize:
40
+ * false` means resolution-only: the fact stays at the layer that owns it.
41
+ * @param {object} rule
42
+ * @returns {boolean}
43
+ */
44
+ function isMaterialized(rule) {
45
+ return rule.materialize !== false;
46
+ }
47
+
48
+ /**
49
+ * The rules that carry a default: SHARED_SCHEMA always, plus that target's
50
+ * refinements (they overlay the same top-level namespace loadConfig resolves).
51
+ * @param {string} [target] - Canonical target name ('web', 'backend', ...).
52
+ * @returns {object[]}
53
+ */
54
+ function defaultRules(target) {
55
+ const rules = target && TARGET_SCHEMAS[target]
56
+ ? [...SHARED_SCHEMA, ...TARGET_SCHEMAS[target]]
57
+ : SHARED_SCHEMA;
58
+
59
+ return rules.filter(hasDefault);
60
+ }
61
+
62
+ function setAtPath(target, dotted, value) {
63
+ const names = dotted.split('.');
64
+ const leaf = names.pop();
65
+ let node = target;
66
+
67
+ for (const name of names) {
68
+ if (!isPlainObject(node[name])) node[name] = {};
69
+ node = node[name];
70
+ }
71
+
72
+ node[leaf] = value;
73
+ }
74
+
75
+ /**
76
+ * The default config a brand that authors nothing gets — every schema
77
+ * `default:` at its own dot-path. A fresh deep copy per call: a caller that
78
+ * mutates the result can never reach back into the schema.
79
+ * @param {string} [target] - Canonical target name; adds that target's refinements.
80
+ * @returns {object}
81
+ */
82
+ function schemaDefaults(target) {
83
+ return defaultsFrom(defaultRules(target));
84
+ }
85
+
86
+ /**
87
+ * The default config a given rule set describes — every `default:` at its own
88
+ * dot-path, deep-copied per call.
89
+ * @param {object[]} rules - Rules that carry a default.
90
+ * @returns {object}
91
+ */
92
+ function defaultsFrom(rules) {
93
+ const defaults = {};
94
+
95
+ for (const rule of rules) {
96
+ setAtPath(defaults, rule.path, structuredClone(rule.default));
97
+ }
98
+
99
+ return defaults;
100
+ }
101
+
102
+ /**
103
+ * The guiding comments a materialized block travels with: dot-path →
104
+ * description, for every defaulted key and for the container entries above
105
+ * them (a `marketing` block insert is documented, and so is each key it
106
+ * carries). The editor writes a comment only where it INSERTS that path, so
107
+ * the map covers the whole default set and the file gets what it lacks.
108
+ *
109
+ * @param {string} [target] - Canonical target name; adds that target's refinements.
110
+ * @returns {Object<string, string>}
111
+ */
112
+ function defaultComments(target) {
113
+ const rules = target && TARGET_SCHEMAS[target]
114
+ ? [...SHARED_SCHEMA, ...TARGET_SCHEMAS[target]]
115
+ : SHARED_SCHEMA;
116
+
117
+ const defaulted = rules.filter(hasDefault).filter(isMaterialized).map((rule) => rule.path);
118
+ const comments = {};
119
+
120
+ for (const rule of rules) {
121
+ const documents = defaulted.some((dotted) => dotted === rule.path || dotted.startsWith(`${rule.path}.`));
122
+ if (documents && rule.description) {
123
+ comments[rule.path] = rule.description;
124
+ }
125
+ }
126
+
127
+ return comments;
128
+ }
129
+
130
+ function collectMissing(defaults, present, prefix, target, found) {
131
+ for (const [key, value] of Object.entries(defaults)) {
132
+ const dotted = prefix ? `${prefix}.${key}` : key;
133
+ const authored = isPlainObject(present) && Object.prototype.hasOwnProperty.call(present, key);
134
+
135
+ if (!authored) {
136
+ found.push({ path: dotted, value });
137
+ continue;
138
+ }
139
+
140
+ // Present and still a container on both sides → look for holes inside it.
141
+ // A brand that authored anything else at this path (a scalar, false, null)
142
+ // made a decision: never dive in, never overwrite.
143
+ if (isPlainObject(value) && isPlainObject(present[key])) {
144
+ collectMissing(value, present[key], dotted, target, found);
145
+ }
146
+ }
147
+
148
+ return found;
149
+ }
150
+
151
+ /**
152
+ * The schema-defaulted blocks a config does not carry yet, each at the HIGHEST
153
+ * path that is missing (a brand with no `marketing` at all gets one
154
+ * `marketing` block, not one edit per key inside it).
155
+ *
156
+ * Run against the RAW file contents the heal is about to edit, never a
157
+ * resolved config — resolution already merged the defaults in, so every block
158
+ * would read as present.
159
+ *
160
+ * @param {object} config - Parsed omega.json5 contents.
161
+ * @param {string} [target] - Canonical target name; adds that target's refinements.
162
+ * @returns {Array<{ path: string, value: * }>}
163
+ */
164
+ function missingDefaults(config, target) {
165
+ // Resolution-only defaults are skipped whole: a `materialize: false` rule's
166
+ // value belongs to the framework, and writing it here would hand a brand a
167
+ // copy to drift ([#793](https://github.com/Omega-JS-Stack/omega/issues/793))
168
+ const writable = defaultsFrom(defaultRules(target).filter(isMaterialized));
169
+
170
+ return collectMissing(writable, config || {}, '', target, []);
171
+ }
172
+
173
+ module.exports = { schemaDefaults, missingDefaults, defaultComments, defaultRules };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @omega.js/config demo — the shared demo-project test. Firebase's own
3
+ * convention: `demo-*` project ids are emulator-only (no real GCP project
4
+ * exists or ever will). Cloud-touching services and commands short-circuit
5
+ * on it instead of aiming real Google APIs at a project that 403s.
6
+ */
7
+
8
+ /**
9
+ * Whether a Firebase project id is a demo-* (emulator-only) project.
10
+ *
11
+ * @param {string} projectId - e.g. 'demo-omega'
12
+ * @returns {boolean}
13
+ */
14
+ function isDemoProject(projectId) {
15
+ return String(projectId || '').startsWith('demo-');
16
+ }
17
+
18
+ module.exports = { isDemoProject };
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @omega.js/config desktop-artifacts — the SINGLE naming rule for a desktop
3
+ * target's release assets ([#620](https://github.com/Omega-JS-Stack/omega/issues/620)).
4
+ *
5
+ * Two readers, one rule: @omega.js/desktop's `gulp/build-config` writes these
6
+ * names into `dist/electron-builder.yml`'s artifactName templates, and
7
+ * [site-global.js](site-global.js) derives the website's direct-download URLs
8
+ * from them (`<releasesUrl>/download/<name>`). A second spelling anywhere is a
9
+ * dead download button on a live site, so the derivation lives here and both
10
+ * sides call it.
11
+ *
12
+ * Names carry NO version. That is the whole point: GitHub's
13
+ * `/releases/latest/download/<asset>` only resolves when the asset name is the
14
+ * same in every release, so releasing a desktop version never touches the
15
+ * website and the published URLs never change. electron-updater is unaffected —
16
+ * it reads the feed files (`latest-mac.yml`, `latest.yml`), which name whatever
17
+ * artifact the build produced.
18
+ *
19
+ * Nothing puts an arch back into a name that omits one: electron-builder's
20
+ * macro expander only REPLACES a `${arch}` token where it appears. So these
21
+ * names support exactly the default build — a UNIVERSAL mac, a SINGLE linux
22
+ * arch, and windows' multi-arch NSIS installer (which merges every arch into
23
+ * one file anyway). @omega.js/desktop's build-config refuses any other arch set
24
+ * rather than let two builds collide on one name; per-arch names are a future
25
+ * additive change.
26
+ */
27
+
28
+ // Every artifact a release publishes as a user-facing download, per platform,
29
+ // in the order the platform offers them — the FIRST is the platform's default
30
+ // (`/download/<platform>` leads with it, legacy UJM parity). The artifact keys
31
+ // ARE the website's URL vocabulary (`/download/<platform>/<artifact>`).
32
+ //
33
+ // Deliberately absent: the mac auto-update ZIP (electron-updater fetches it
34
+ // from the feed; nobody links it) and the snap (the Snap Store publishes it,
35
+ // so it is never a release asset).
36
+ const DESKTOP_ARTIFACTS = {
37
+ mac: { universal: { ext: 'dmg' } },
38
+ windows: { universal: { ext: 'exe' } },
39
+ linux: { debian: { ext: 'deb' }, appimage: { ext: 'AppImage' } },
40
+ };
41
+
42
+ /**
43
+ * The product name a desktop target packages under — the same derivation
44
+ * @omega.js/desktop's `Manager.getConfig()` applies (`app.productName` ←
45
+ * `brand.name`), so the website reads the name the packager actually used.
46
+ *
47
+ * @param {object} config - Desktop-shaped config (`{ app, brand }`).
48
+ * @returns {string} Product name ('' when neither key resolves).
49
+ */
50
+ function desktopProductName(config) {
51
+ return config?.app?.productName || config?.brand?.name || '';
52
+ }
53
+
54
+ /**
55
+ * A product name reduced to filename-safe characters. electron-builder's
56
+ * `${productName}` keeps spaces, which become dots in NSIS output and behave
57
+ * inconsistently across targets; hyphens are consistent everywhere.
58
+ *
59
+ * @param {string} productName - Raw product name ("Deployment Playground").
60
+ * @returns {string} Sanitized name ("Deployment-Playground"), '' when empty.
61
+ */
62
+ function sanitizeProductName(productName) {
63
+ return String(productName || '')
64
+ .replace(/[^A-Za-z0-9._-]+/g, '-')
65
+ .replace(/-+/g, '-')
66
+ .replace(/^-|-$/g, '');
67
+ }
68
+
69
+ /**
70
+ * One artifact's versionless filename: `<Product>-<platform>-<artifact>.<ext>`.
71
+ *
72
+ * @param {string} productName - Raw product name (sanitized here).
73
+ * @param {string} platform - Platform key (mac, windows, linux).
74
+ * @param {string} artifact - Artifact key (universal, debian, appimage, …).
75
+ * @param {string} [ext] - Extension override — pass electron-builder's literal
76
+ * `${ext}` to get a TEMPLATE that covers every target sharing the platform's
77
+ * fallback (mac's dmg + auto-update zip).
78
+ * @returns {string} The filename ('' with no product name to build it from).
79
+ */
80
+ function desktopArtifactName(productName, platform, artifact, ext) {
81
+ const product = sanitizeProductName(productName);
82
+ const extension = ext || DESKTOP_ARTIFACTS[platform]?.[artifact]?.ext;
83
+ if (!product || !extension) return '';
84
+
85
+ return `${product}-${platform}-${artifact}.${extension}`;
86
+ }
87
+
88
+ /**
89
+ * Every published artifact's filename, keyed platform → artifact, in offer
90
+ * order.
91
+ *
92
+ * @param {string} productName - Raw product name.
93
+ * @returns {object} `{ mac: { universal: 'App-mac-universal.dmg' }, … }`, or
94
+ * `{}` when there is no product name to derive from.
95
+ */
96
+ function desktopArtifactNames(productName) {
97
+ if (!sanitizeProductName(productName)) return {};
98
+
99
+ const names = {};
100
+ for (const [platform, artifacts] of Object.entries(DESKTOP_ARTIFACTS)) {
101
+ names[platform] = {};
102
+ for (const artifact of Object.keys(artifacts)) {
103
+ names[platform][artifact] = desktopArtifactName(productName, platform, artifact);
104
+ }
105
+ }
106
+
107
+ return names;
108
+ }
109
+
110
+ module.exports = { DESKTOP_ARTIFACTS, desktopProductName, sanitizeProductName, desktopArtifactName, desktopArtifactNames };