@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,554 @@
1
+ // Shared test-runner core for the OMEGA frameworks — discovery, suite/group/standalone
2
+ // execution, filtering, skip semantics, init hooks, and reporting. Extracted from UJM's
3
+ // runner (the canonical 3-layer build/page/boot model); BXM/EM/UJM differ only in title,
4
+ // package name, CLI target alias, and their special layers — all injected via config.
5
+ //
6
+ // Test-definition forms supported (see each framework's test/index.js for docs):
7
+ // - Standalone: module.exports = { layer, description, run, cleanup, timeout, skip };
8
+ // - Suite: module.exports = { type: 'suite', layer, description, tests: [...], cleanup, stopOnFailure };
9
+ // - Group: module.exports = { type: 'group', layer, description, tests: [...], cleanup };
10
+ // - Array form: module.exports = [ {name, run}, ... ]; // implicit group
11
+ //
12
+ // Suites stop on first failure (sequential, share state). Groups run all tests regardless.
13
+ //
14
+ // createRunner(config) config surface:
15
+ // title — heading printed at the top of a run ('Browser Extension Manager Tests')
16
+ // packageName — framework npm name; cwd package === this ⇒ framework self-test mode
17
+ // (framework boot/ suites only run in self-test mode — they assert on
18
+ // the framework's own fixture consumer)
19
+ // targetAlias — framework-specific target prefix (e.g. 'desktop' | 'extension');
20
+ // 'framework:'/'omega:'/'mgr:' (framework suite), 'project:'/'brand:'
21
+ // (project tests) and 'full:' (both) are universal — see test/scope.js.
22
+ // C5 semantics: bare/no-target runs PROJECT tests only in a consumer,
23
+ // the framework suite in framework self-test mode.
24
+ // suitesDir — the framework's built default suites dir (dist/test/suites)
25
+ // frameworkTestDir — the framework repo's own test/ dir (for its _init.js hook)
26
+ // middleLayers — ordered special layers between 'build' and 'boot':
27
+ // [{ layers: ['background','view'], run: async ({ byLayer, wants,
28
+ // options, results, projectRoot }) => void }]
29
+ // The callback owns runner loading, skip messaging, and results
30
+ // mutation — framework glue stays framework-side.
31
+ // bootDefaultTimeout — per-test default for boot-layer inspect() (UJM/BXM 20000, EM 15000)
32
+ // boot: { run: async ({ tests, suites, options, results, projectRoot }) => void }
33
+ // Called with the aggregated flat boot test list plus the boot-BOUND
34
+ // suites (at least one of the two is non-empty).
35
+ // Owns runner loading, skip messaging, label, and results mutation.
36
+ // bootBound: (mod) => boolean, a predicate over a loaded test module. True
37
+ // partitions that FILE into the boot layer whatever its `layer` says,
38
+ // and hands it to boot.run WHOLE (`suites: [{ file, mod }]`) instead
39
+ // of flattening it into the inspect list: for suites that need the
40
+ // boot lane's built app but run their own way (EM's `view:` renderer
41
+ // suites). Default: () => false. An array-form file is never bound.
42
+
43
+ const path = require('path');
44
+ const glob = require('glob').globSync;
45
+ const jetpack = require('fs-jetpack');
46
+ const chalk = require('chalk').default;
47
+
48
+ const expect = require('./assert.js');
49
+ const { parseTestScope, isPathTargeted } = require('./scope.js');
50
+ const { markRunnerActive } = require('./define-cases.js');
51
+
52
+ class SkipError extends Error {
53
+ constructor(reason) { super(reason); this.name = 'SkipError'; }
54
+ }
55
+
56
+ // Glob ignore patterns implementing the "underscore = not a suite" convention:
57
+ // `_`-prefixed FILES (e.g. test/_init.js) and everything under a `_`-prefixed
58
+ // DIRECTORY at any depth (helpers, fixtures — e.g. test/_helpers/harness.js).
59
+ const DISCOVERY_IGNORE = ['**/_*.js', '**/_*/**'];
60
+
61
+ function createRunner(config) {
62
+ const middleLayers = config.middleLayers || [];
63
+ const layerNames = ['build', ...middleLayers.flatMap((m) => m.layers), 'boot'];
64
+ const bootDefaultTimeout = config.bootDefaultTimeout || 20000;
65
+ const bootBound = config.bootBound || (() => false);
66
+
67
+ async function run(options = {}) {
68
+ options.layer = options.layer || 'all';
69
+ options.target = options.target || null;
70
+ options.filter = options.filter || null;
71
+ options.reporter = options.reporter || 'pretty';
72
+
73
+ const startTime = Date.now();
74
+
75
+ // Claim the run before any case file is required: defineCases() only lets a
76
+ // spec through once a real runner is loading it (#630).
77
+ markRunnerActive();
78
+
79
+ const sources = discoverTestFiles(options.target);
80
+
81
+ console.log('');
82
+ console.log(chalk.bold(` ${config.title}`));
83
+
84
+ // Run the optional test/_init.js setup() hooks (framework + consumer) ONCE,
85
+ // before any suite. There is no cleanup hook — tests clean up after themselves.
86
+ await runInitSetups();
87
+
88
+ // noMatch carries the target a run named that selected nothing; the CLI
89
+ // turns it into a non-zero exit ([#814](https://github.com/Omega-JS-Stack/omega/issues/814)).
90
+ const results = { passed: 0, failed: 0, skipped: 0, noMatch: null, tests: [] };
91
+
92
+ if (sources.framework.length > 0) {
93
+ console.log('');
94
+ console.log(chalk.bold(' Framework Tests'));
95
+ await runSource(sources.framework, 'framework', options, results);
96
+ }
97
+
98
+ if (sources.project.length > 0) {
99
+ console.log('');
100
+ console.log(chalk.bold(' Project Tests'));
101
+ await runSource(sources.project, 'project', options, results);
102
+ }
103
+
104
+ if (sources.framework.length === 0 && sources.project.length === 0) {
105
+ if (isPathTargeted(sources.scope)) {
106
+ // The run named a path and got nothing: a typo, or a suite that was
107
+ // renamed out from under the target. Reporting "0 passing" and exiting
108
+ // 0 there runs silently green
109
+ // ([#814](https://github.com/Omega-JS-Stack/omega/issues/814)); the
110
+ // caller prints the tagged line and fails the run.
111
+ results.noMatch = options.target;
112
+ } else {
113
+ console.log(chalk.gray(' No test files found.'));
114
+ }
115
+ } else if (options.layer === 'boot'
116
+ && results.passed + results.failed + results.skipped === 0) {
117
+ // Explain the silence: framework boot/ suites are excluded from consumer
118
+ // discovery (they assert on the framework's own fixture consumer), so a
119
+ // consumer asking for the boot layer with no suites of their own runs nothing.
120
+ console.log(chalk.gray(' No boot tests ran. Framework boot suites are self-test only; write yours under test/boot/.'));
121
+ }
122
+
123
+ reportResults(results, Date.now() - startTime);
124
+
125
+ return results;
126
+ }
127
+
128
+ async function runSource(files, source, options, results) {
129
+ // Partition by layer (peek at module.exports without invoking run functions).
130
+ const byLayer = {};
131
+ layerNames.forEach((name) => { byLayer[name] = []; });
132
+ for (const file of files) {
133
+ const layer = peekLayer(file) || 'build';
134
+ if (byLayer[layer]) byLayer[layer].push(file);
135
+ }
136
+
137
+ // Build layer — run inline.
138
+ if ((options.layer === 'all' || options.layer === 'build') && byLayer.build.length > 0) {
139
+ for (const file of byLayer.build) {
140
+ await runBuildFile(file, source, options, results);
141
+ }
142
+ }
143
+
144
+ // Special layers (framework glue owns runner loading + results mutation).
145
+ for (const middle of middleLayers) {
146
+ const wants = {};
147
+ let any = false;
148
+ for (const name of middle.layers) {
149
+ wants[name] = (options.layer === 'all' || options.layer === name) && byLayer[name].length > 0;
150
+ any = any || wants[name];
151
+ }
152
+ if (any) {
153
+ await middle.run({ byLayer, wants, options, results, projectRoot: process.cwd() });
154
+ }
155
+ }
156
+
157
+ // Boot layer — aggregate then hand to framework glue.
158
+ if ((options.layer === 'all' || options.layer === 'boot') && byLayer.boot.length > 0) {
159
+ await runBootLayer(byLayer.boot, source, options, results);
160
+ }
161
+ }
162
+
163
+ async function runBootLayer(files, source, options, results) {
164
+ // Aggregate every boot test (whether standalone or inside a suite) into one flat list.
165
+ // The boot harness runs them sequentially in a single process to keep startup cost
166
+ // amortized. State doesn't carry across boot tests.
167
+ //
168
+ // Boot-BOUND files (config.bootBound) are the exception: they ride this lane for its
169
+ // built app, but the framework glue runs them its own way, so they stay whole.
170
+ const tests = [];
171
+ const suites = [];
172
+
173
+ for (const file of files) {
174
+ let mod;
175
+ try {
176
+ delete require.cache[require.resolve(file)];
177
+ mod = require(file);
178
+ } catch (e) {
179
+ const rel = relativizePath(file, source);
180
+ console.log(chalk.red(` ✗ ${rel}`));
181
+ console.log(chalk.red(` Failed to load: ${e.message}`));
182
+ results.failed += 1;
183
+ continue;
184
+ }
185
+
186
+ if (Array.isArray(mod)) mod = { type: 'group', tests: mod };
187
+
188
+ if (bootBound(mod)) {
189
+ // The filter reads the same way it does for the inspect list below: a test whose
190
+ // own name misses it is dropped, and a suite with nothing left never runs.
191
+ const bound = (mod.tests || []).filter((t) => !options.filter
192
+ || String(t.name || t.description || '').includes(options.filter));
193
+ if (options.filter && bound.length === 0) continue;
194
+ suites.push({
195
+ file,
196
+ mod: bound.length === (mod.tests || []).length ? mod : { ...mod, tests: bound },
197
+ });
198
+ continue;
199
+ }
200
+
201
+ if (Array.isArray(mod.tests)) {/* multi-test */ }
202
+ else if (typeof mod.inspect === 'function') mod = { tests: [mod] };
203
+
204
+ const baseDescription = mod.description || relativizePath(file, source);
205
+
206
+ for (const t of (mod.tests || [])) {
207
+ if (typeof t.inspect !== 'function') continue;
208
+ if (options.filter && !(t.description || baseDescription).includes(options.filter)) continue;
209
+ tests.push({
210
+ description: t.description || baseDescription,
211
+ timeout: t.timeout || mod.timeout || bootDefaultTimeout,
212
+ inspect: t.inspect,
213
+ });
214
+ }
215
+ }
216
+
217
+ if (tests.length === 0 && suites.length === 0) return;
218
+
219
+ await config.boot.run({ tests, suites, options, results, projectRoot: process.cwd() });
220
+ }
221
+
222
+ function peekLayer(file) {
223
+ try {
224
+ delete require.cache[require.resolve(file)];
225
+ let mod = require(file);
226
+ if (Array.isArray(mod)) mod = { type: 'group', tests: mod };
227
+ // A boot-bound file belongs to the boot lane whatever its own layer says.
228
+ if (bootBound(mod)) return 'boot';
229
+ return mod.layer || 'build';
230
+ } catch (e) {
231
+ return null;
232
+ }
233
+ }
234
+
235
+ async function runBuildFile(file, source, options, results) {
236
+ let mod;
237
+ try {
238
+ delete require.cache[require.resolve(file)];
239
+ mod = require(file);
240
+ } catch (e) {
241
+ const rel = relativizePath(file, source);
242
+ console.log(chalk.red(` ✗ ${rel}`));
243
+ console.log(chalk.red(` Failed to load: ${e.message}`));
244
+ results.failed += 1;
245
+ return;
246
+ }
247
+
248
+ if (Array.isArray(mod)) {
249
+ mod = { type: 'group', tests: mod };
250
+ }
251
+
252
+ const rel = relativizePath(file, source);
253
+
254
+ if (mod.skip) {
255
+ const reason = typeof mod.skip === 'string' ? mod.skip : '';
256
+ console.log(`${chalk.yellow(` ○ ${mod.description || rel}`)}${chalk.gray(` (skipped${reason ? `: ${reason}` : ''})`)}`);
257
+ const count = Array.isArray(mod.tests) ? mod.tests.length : 1;
258
+ results.skipped += count;
259
+ return;
260
+ }
261
+
262
+ if (mod.type === 'suite' || mod.type === 'group' || Array.isArray(mod.tests)) {
263
+ await runSuite(mod, rel, options, results);
264
+ } else {
265
+ await runStandalone(mod, rel, options, results);
266
+ }
267
+ }
268
+
269
+ async function runSuite(suite, rel, options, results) {
270
+ const description = suite.description || rel;
271
+ const isGroup = suite.type === 'group';
272
+ const stopOnFailure = !isGroup && suite.stopOnFailure !== false;
273
+ const tests = suite.tests || [];
274
+
275
+ console.log(chalk.cyan(` ⤷ ${description}`));
276
+
277
+ const state = {};
278
+
279
+ for (let i = 0; i < tests.length; i += 1) {
280
+ const t = tests[i];
281
+ const name = t.name || `step-${i + 1}`;
282
+
283
+ if (options.filter && !name.includes(options.filter) && !description.includes(options.filter)) continue;
284
+
285
+ if (t.skip) {
286
+ const reason = typeof t.skip === 'string' ? t.skip : '';
287
+ console.log(`${chalk.yellow(` ○ ${name}`)}${chalk.gray(` (skipped${reason ? `: ${reason}` : ''})`)}`);
288
+ results.skipped += 1;
289
+ continue;
290
+ }
291
+
292
+ const ctx = createContext({ state, layer: suite.layer || 'build' });
293
+ const timeout = t.timeout || suite.timeout || 30000;
294
+
295
+ const start = Date.now();
296
+ try {
297
+ await Promise.race([
298
+ Promise.resolve(t.run(ctx)),
299
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Test timeout')), timeout)),
300
+ ]);
301
+ const duration = Date.now() - start;
302
+ console.log(chalk.green(` ✓ ${name}`) + chalk.gray(` (${duration}ms)`));
303
+ results.passed += 1;
304
+
305
+ if (t.cleanup) {
306
+ try { await t.cleanup(ctx); } catch (e) {
307
+ console.log(chalk.yellow(` ⚠ Cleanup failed: ${e.message}`));
308
+ }
309
+ }
310
+ } catch (e) {
311
+ const duration = Date.now() - start;
312
+ if (e.name === 'SkipError') {
313
+ console.log(chalk.yellow(` ○ ${name}`) + chalk.gray(` (skipped: ${e.message})`));
314
+ results.skipped += 1;
315
+ continue;
316
+ }
317
+ console.log(chalk.red(` ✗ ${name}`) + chalk.gray(` (${duration}ms)`));
318
+ console.log(chalk.red(` ${e.message || e}`));
319
+ results.failed += 1;
320
+
321
+ if (stopOnFailure) {
322
+ const remaining = tests.length - i - 1;
323
+ if (remaining > 0) {
324
+ console.log(chalk.yellow(` Skipping ${remaining} remaining test(s) in suite`));
325
+ results.skipped += remaining;
326
+ }
327
+ break;
328
+ }
329
+ }
330
+ }
331
+
332
+ if (suite.cleanup) {
333
+ try {
334
+ const ctx = createContext({ state, layer: suite.layer || 'build' });
335
+ await suite.cleanup(ctx);
336
+ } catch (e) {
337
+ console.log(chalk.yellow(` ⚠ Suite cleanup failed: ${e.message}`));
338
+ }
339
+ }
340
+ }
341
+
342
+ async function runStandalone(mod, rel, options, results) {
343
+ const description = mod.description || rel;
344
+ if (options.filter && !description.includes(options.filter)) return;
345
+
346
+ const ctx = createContext({ state: {}, layer: mod.layer || 'build' });
347
+ const timeout = mod.timeout || 30000;
348
+
349
+ const start = Date.now();
350
+ try {
351
+ await Promise.race([
352
+ Promise.resolve(mod.run(ctx)),
353
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Test timeout')), timeout)),
354
+ ]);
355
+ const duration = Date.now() - start;
356
+ console.log(chalk.green(` ✓ ${description}`) + chalk.gray(` (${duration}ms)`));
357
+ results.passed += 1;
358
+
359
+ if (mod.cleanup) {
360
+ try { await mod.cleanup(ctx); } catch (e) {
361
+ console.log(chalk.yellow(` ⚠ Cleanup failed: ${e.message}`));
362
+ }
363
+ }
364
+ } catch (e) {
365
+ const duration = Date.now() - start;
366
+ if (e.name === 'SkipError') {
367
+ console.log(chalk.yellow(` ○ ${description}`) + chalk.gray(` (skipped: ${e.message})`));
368
+ results.skipped += 1;
369
+ return;
370
+ }
371
+ console.log(chalk.red(` ✗ ${description}`) + chalk.gray(` (${duration}ms)`));
372
+ console.log(chalk.red(` ${e.message || e}`));
373
+ results.failed += 1;
374
+ }
375
+ }
376
+
377
+ function createContext({ state, layer }) {
378
+ return {
379
+ expect,
380
+ state,
381
+ layer,
382
+ skip(reason) { throw new SkipError(reason || 'skipped at runtime'); },
383
+ };
384
+ }
385
+
386
+ function reportResults(results, durationMs) {
387
+ const total = results.passed + results.failed + results.skipped;
388
+ console.log('');
389
+ console.log(` ${chalk.bold('Results')}`);
390
+ console.log(` ${chalk.green(`${results.passed} passing`)}`);
391
+ if (results.failed > 0) console.log(` ${chalk.red(`${results.failed} failing`)}`);
392
+ if (results.skipped > 0) console.log(` ${chalk.yellow(`${results.skipped} skipped`)}`);
393
+ console.log(chalk.gray(`\n Total: ${total} tests in ${durationMs}ms\n`));
394
+ }
395
+
396
+ // A relative path in the scope grammar's own spelling: forward slashes,
397
+ // whatever separator the OS handed back.
398
+ function toPosix(p) {
399
+ return String(p).split(path.sep).join('/').replace(/\\/g, '/');
400
+ }
401
+
402
+ // Narrow a source's file list by that source's scope filters (C5: source
403
+ // selection already happened in parseTestScope — this only path-matches).
404
+ function filterBySource(source, files, scope) {
405
+ if (!scope.sources.includes(source)) {
406
+ return [];
407
+ }
408
+
409
+ const filters = scope.filters[source];
410
+ if (filters.length === 0) {
411
+ return files;
412
+ }
413
+
414
+ // The scope grammar is written with forward slashes (`desktop:build/runner`)
415
+ // on every platform; path.relative answers with the OS separator, so on
416
+ // Windows `build\runner.test.js` never matched `build/runner` and every
417
+ // scoped run reported "No test files found" ([#337](https://github.com/Omega-JS-Stack/omega/issues/337)).
418
+ // Both sides are compared in slash form.
419
+ return files.filter((file) => {
420
+ const rel = toPosix(relativizePath(file, source));
421
+ const relNoExt = rel.replace(/\.js$/, '').replace(/\.test$/, '');
422
+ return filters.some((rawPart) => {
423
+ const pathPart = toPosix(rawPart);
424
+ const partNoExt = pathPart.replace(/\.js$/, '').replace(/\.test$/, '');
425
+ return rel.startsWith(pathPart)
426
+ || relNoExt === partNoExt
427
+ || relNoExt.startsWith(`${partNoExt}/`)
428
+ || rel.includes(pathPart);
429
+ });
430
+ });
431
+ }
432
+
433
+ function discoverTestFiles(target) {
434
+
435
+ const framework = [];
436
+ const project = [];
437
+
438
+ // Detect whether we're running the framework's own self-tests, vs a consumer
439
+ // who installed it and is running their own tests. Used below to filter the
440
+ // boot/ layer of framework suites — those target the framework's internal
441
+ // fixture consumer, so they only make sense when the framework tests itself.
442
+ const isFrameworkSelfTest = (() => {
443
+ try {
444
+ const cwdPkg = require(path.join(process.cwd(), 'package.json'));
445
+ return cwdPkg.name === config.packageName;
446
+ } catch (_) { return false; }
447
+ })();
448
+
449
+ // Framework default suites. For consumers, we exclude boot/ — those suites
450
+ // assert on the framework's own fixture consumer and would fail noisily when
451
+ // run against a real consumer's build. Consumers write their own boot tests
452
+ // under <cwd>/test/boot/.
453
+ if (jetpack.exists(config.suitesDir)) {
454
+ const ignore = [...DISCOVERY_IGNORE];
455
+ if (!isFrameworkSelfTest) ignore.push('boot/**');
456
+ glob('**/*.js', { cwd: config.suitesDir, ignore }).sort().forEach((rel) => {
457
+ framework.push(path.join(config.suitesDir, rel));
458
+ });
459
+ }
460
+
461
+ // Consumer project suites — CWD/test/**/*.js. Skip when running from inside the
462
+ // framework's own dist tree (where consumer-tests-dir === framework-tests-parent).
463
+ // Excludes `_`-prefixed files and directories (see DISCOVERY_IGNORE).
464
+ const projectTestsDir = path.join(process.cwd(), 'test');
465
+ if (jetpack.exists(projectTestsDir) && projectTestsDir !== path.dirname(config.suitesDir)) {
466
+ glob('**/*.js', { cwd: projectTestsDir, ignore: [...DISCOVERY_IGNORE] }).sort().forEach((rel) => {
467
+ project.push(path.join(projectTestsDir, rel));
468
+ });
469
+ }
470
+
471
+ // C5 scoping: bare/`project:`/`brand:` = project tests only,
472
+ // `framework:`/`omega:`/`mgr:`/`<targetAlias>:` = the framework suite,
473
+ // `full:` = both; framework self context defaults to the framework suite.
474
+ const scope = parseTestScope(target ? [target] : [], {
475
+ frameworkAliases: config.frameworkAliases || [config.targetAlias],
476
+ selfTest: isFrameworkSelfTest,
477
+ });
478
+ for (const bad of scope.invalid) {
479
+ console.log(chalk.yellow(` ⚠ Unknown test scope prefix ignored: ${bad}`));
480
+ }
481
+
482
+ return {
483
+ framework: filterBySource('framework', framework, scope),
484
+ project: filterBySource('project', project, scope),
485
+ scope,
486
+ };
487
+ }
488
+
489
+ function relativizePath(file, source) {
490
+ if (source === 'framework') {
491
+ return path.relative(config.suitesDir, file);
492
+ }
493
+ return path.relative(path.join(process.cwd(), 'test'), file);
494
+ }
495
+
496
+ // ---------------------------------------------------------------------------
497
+ // test/_init.js — pre-test lifecycle hook (setup only)
498
+ //
499
+ // Mirrors the backend framework's hook so all frameworks share one shape.
500
+ // A project may add `<cwd>/test/_init.js` exporting a FUNCTION —
501
+ // `module.exports = (ctx) => ({ setup })` — called with `{ projectRoot }` and
502
+ // returning an object with an async `setup({ projectRoot })` that runs ONCE
503
+ // before any suite (e.g. to scaffold a fixture file the boot layer needs).
504
+ // There is no `cleanup` hook: tests clean up after themselves.
505
+ // ---------------------------------------------------------------------------
506
+
507
+ function loadInit(testDir, label) {
508
+ const initPath = path.join(testDir, '_init.js');
509
+
510
+ if (!jetpack.exists(initPath)) {
511
+ return {};
512
+ }
513
+
514
+ try {
515
+ const fn = require(initPath);
516
+
517
+ if (typeof fn !== 'function') {
518
+ console.log(chalk.red(` ✗ ${label} test/_init.js must export a function: module.exports = (ctx) => ({ ... })`));
519
+ return {};
520
+ }
521
+
522
+ const mod = fn({ projectRoot: process.cwd() });
523
+ return mod && typeof mod === 'object' ? mod : {};
524
+ } catch (e) {
525
+ console.log(chalk.red(` ✗ Failed to load ${label} test/_init.js: ${e.message}`));
526
+ return {};
527
+ }
528
+ }
529
+
530
+ async function runInitSetups() {
531
+ const projectTestsDir = path.join(process.cwd(), 'test');
532
+
533
+ const hooks = [
534
+ loadInit(config.frameworkTestDir, 'framework'),
535
+ loadInit(projectTestsDir, 'project'),
536
+ ];
537
+
538
+ const setups = hooks.filter((h) => typeof h.setup === 'function').map((h) => h.setup);
539
+
540
+ for (const setup of setups) {
541
+ process.stdout.write(chalk.gray(' Running test/_init.js setup... '));
542
+ try {
543
+ await setup({ projectRoot: process.cwd() });
544
+ console.log(chalk.green('✓'));
545
+ } catch (e) {
546
+ console.log(chalk.red(`✗ (${e.message})`));
547
+ }
548
+ }
549
+ }
550
+
551
+ return { run, relativizePath };
552
+ }
553
+
554
+ module.exports = { createRunner, SkipError, DISCOVERY_IGNORE, expect };