@woodsportal/hubspot-kit 1.0.41 → 1.0.42-dev.1

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 (613) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/README.md +191 -157
  3. package/dist/chunk-4UFWXPQG.js +554 -0
  4. package/dist/chunk-4UFWXPQG.js.map +1 -0
  5. package/dist/{chunk-4GOJPOW3.js → chunk-GXYUGXF5.js} +82 -23
  6. package/dist/chunk-GXYUGXF5.js.map +1 -0
  7. package/dist/{chunk-S2YJDWZU.js → chunk-NWBK3XBZ.js} +1 -1
  8. package/dist/chunk-NWBK3XBZ.js.map +1 -0
  9. package/dist/cli.js +1826 -877
  10. package/dist/cli.js.map +1 -1
  11. package/dist/{exec-VY6BGWF3.js → exec-NS4GKXZS.js} +2 -2
  12. package/dist/index.d.ts +12 -0
  13. package/dist/index.js +6 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/scaffold-page-lifecycle-53AWWGFR.js +194 -0
  16. package/dist/scaffold-page-lifecycle-53AWWGFR.js.map +1 -0
  17. package/dist/vite/index.js +1 -1
  18. package/examples/greenfield/module-hybrid-cdn/README.md +2 -1
  19. package/examples/greenfield/module-hybrid-cdn/public/fields.json +73 -28
  20. package/examples/greenfield/module-hybrid-cdn/public/module.html +21 -5
  21. package/examples/greenfield/module-hybrid-cdn/src/assets/css/main.dev.css +15 -0
  22. package/examples/greenfield/module-hybrid-cdn/src/components/layout/starter-nav.tsx +12 -15
  23. package/examples/greenfield/module-hybrid-cdn/src/config/starter-nav.ts +9 -0
  24. package/examples/greenfield/module-hybrid-cdn/src/features/starter/components/starter-home.tsx +25 -29
  25. package/examples/greenfield/module-hybrid-cdn/src/features/starter/hooks/starter-preview-values.ts +60 -0
  26. package/examples/greenfield/module-hybrid-cdn/src/features/starter/hooks/use-starter-preview.dev.ts +18 -0
  27. package/examples/greenfield/module-hybrid-cdn/src/features/starter/hooks/use-starter-preview.ts +20 -37
  28. package/examples/greenfield/module-hybrid-cdn-auth-full/.env.dev.example +3 -0
  29. package/examples/greenfield/module-hybrid-cdn-auth-full/.env.local.example +6 -0
  30. package/examples/greenfield/module-hybrid-cdn-auth-full/.env.prod.example +5 -0
  31. package/examples/greenfield/module-hybrid-cdn-auth-full/.env.stg.example +3 -0
  32. package/examples/greenfield/module-hybrid-cdn-auth-full/.wphs/README.md +17 -0
  33. package/examples/greenfield/module-hybrid-cdn-auth-full/README.md +60 -0
  34. package/examples/greenfield/module-hybrid-cdn-auth-full/hubspot.config.yml.example +10 -0
  35. package/examples/greenfield/module-hybrid-cdn-auth-full/index.html +12 -0
  36. package/examples/greenfield/module-hybrid-cdn-auth-full/package.json +34 -0
  37. package/examples/greenfield/module-hybrid-cdn-auth-full/portal.cdn.json.example +8 -0
  38. package/examples/greenfield/module-hybrid-cdn-auth-full/public/fields.json +100 -0
  39. package/examples/greenfield/module-hybrid-cdn-auth-full/public/meta.json +9 -0
  40. package/examples/greenfield/module-hybrid-cdn-auth-full/public/module.html +38 -0
  41. package/examples/greenfield/module-hybrid-cdn-auth-full/src/app.tsx +172 -0
  42. package/examples/greenfield/module-hybrid-cdn-auth-full/src/assets/css/main.dev.css +23 -0
  43. package/examples/greenfield/module-hybrid-cdn-auth-full/src/assets/css/main.prod.css +12 -0
  44. package/examples/greenfield/module-hybrid-cdn-auth-full/src/assets/css/tailwind.css.config.css +7 -0
  45. package/examples/greenfield/module-hybrid-cdn-auth-full/src/cdn/app-entry.ts +48 -0
  46. package/examples/greenfield/module-hybrid-cdn-auth-full/src/cdn/vendor-entry.ts +28 -0
  47. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/Layouts/AppLayoutWrapper.tsx +38 -0
  48. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/Layouts/AuthLayout.tsx +7 -0
  49. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/Layouts/DefaultLayout.tsx +5 -0
  50. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/Layouts/MainLayout.tsx +42 -0
  51. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/Layouts/UnauthorizedLayout.tsx +5 -0
  52. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/Layouts/index.ts +13 -0
  53. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/layout/section-card.tsx +20 -0
  54. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/layout/starter-nav.tsx +28 -0
  55. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/layout/starter-shell.tsx +18 -0
  56. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/ui/Button.tsx +22 -0
  57. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/ui/Form.tsx +22 -0
  58. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/ui/Input.tsx +12 -0
  59. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/ui/Toaster.tsx +5 -0
  60. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/ui/auth/SsoLoginButton.tsx +34 -0
  61. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/ui/link.tsx +10 -0
  62. package/examples/greenfield/module-hybrid-cdn-auth-full/src/components/ui/loader/loader.tsx +18 -0
  63. package/examples/greenfield/module-hybrid-cdn-auth-full/src/config/auth-tier.ts +4 -0
  64. package/examples/greenfield/module-hybrid-cdn-auth-full/src/config/nav-scaffold.ts +4 -0
  65. package/examples/greenfield/module-hybrid-cdn-auth-full/src/config/portal-nav.ts +9 -0
  66. package/examples/greenfield/module-hybrid-cdn-auth-full/src/config/router.ts +1 -0
  67. package/examples/greenfield/module-hybrid-cdn-auth-full/src/config/routes.ts +10 -0
  68. package/examples/greenfield/module-hybrid-cdn-auth-full/src/data/hubSpotContext.ts +57 -0
  69. package/examples/greenfield/module-hybrid-cdn-auth-full/src/data/sync-sdk-hub-context.ts +44 -0
  70. package/examples/greenfield/module-hybrid-cdn-auth-full/src/defaultData.ts +2 -0
  71. package/examples/greenfield/module-hybrid-cdn-auth-full/src/env.ts +59 -0
  72. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/app-bootstrap-guards.ts +14 -0
  73. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/auth-navigation.ts +81 -0
  74. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/auth-route-paths.ts +29 -0
  75. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/auth-session-events.ts +2 -0
  76. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/auth-session.ts +51 -0
  77. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/clear-client-auth-session.ts +62 -0
  78. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/components/starter-login.tsx +79 -0
  79. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/login-email-storage.ts +64 -0
  80. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/login-session-bridge.ts +74 -0
  81. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/mfa-otp-utils.ts +24 -0
  82. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/mfa-pending-storage.ts +108 -0
  83. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/mfa-portal.ts +45 -0
  84. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/post-login-path.ts +17 -0
  85. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/resolve-auth-login-error-message.ts +52 -0
  86. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/resolve-post-login-path.ts +21 -0
  87. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/sso-callback.ts +126 -0
  88. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/use-mfa-login-otp-flow.ts +78 -0
  89. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/use-portal-session.ts +25 -0
  90. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/use-signed-in-email.ts +55 -0
  91. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/auth/use-sso-callback-handler.ts +92 -0
  92. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/components/starter-guide-page.tsx +210 -0
  93. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/components/starter-home-page.tsx +21 -0
  94. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/components/starter-home.tsx +48 -0
  95. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/components/starter-page-frame.tsx +25 -0
  96. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/components/starter-protected-page.tsx +54 -0
  97. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/components/starter-single-page.tsx +17 -0
  98. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/content/auth-guide-content.ts +85 -0
  99. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/content/woodscli-guide-content.ts +86 -0
  100. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/hooks/starter-preview-values.ts +60 -0
  101. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/hooks/use-starter-preview.dev.ts +18 -0
  102. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/hooks/use-starter-preview.ts +30 -0
  103. package/examples/greenfield/module-hybrid-cdn-auth-full/src/features/starter/index.ts +6 -0
  104. package/examples/greenfield/module-hybrid-cdn-auth-full/src/hubspot/bootstrap.ts +16 -0
  105. package/examples/greenfield/module-hybrid-cdn-auth-full/src/hubspot/default-data.ts +7 -0
  106. package/examples/greenfield/module-hybrid-cdn-auth-full/src/hubspot/is-cms-editor.ts +78 -0
  107. package/examples/greenfield/module-hybrid-cdn-auth-full/src/hubspot/module-entry.tsx +9 -0
  108. package/examples/greenfield/module-hybrid-cdn-auth-full/src/hubspot/types.ts +17 -0
  109. package/examples/greenfield/module-hybrid-cdn-auth-full/src/integrations/configure-woodsportal-sdk.ts +98 -0
  110. package/examples/greenfield/module-hybrid-cdn-auth-full/src/integrations/tanstack-query/root-provider.tsx +18 -0
  111. package/examples/greenfield/module-hybrid-cdn-auth-full/src/integrations/tanstack-router/router.tsx +39 -0
  112. package/examples/greenfield/module-hybrid-cdn-auth-full/src/integrations/woodsportal-sdk.ts +37 -0
  113. package/examples/greenfield/module-hybrid-cdn-auth-full/src/main.tsx +5 -0
  114. package/examples/greenfield/module-hybrid-cdn-auth-full/src/portal/api-endpoint.ts +11 -0
  115. package/examples/greenfield/module-hybrid-cdn-auth-full/src/portal/ensure-portal-cdn-stylesheet.ts +115 -0
  116. package/examples/greenfield/module-hybrid-cdn-auth-full/src/portal/mount-dev-preview.tsx +12 -0
  117. package/examples/greenfield/module-hybrid-cdn-auth-full/src/portal/mount-portal.tsx +57 -0
  118. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routeTree.gen.ts +182 -0
  119. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/__root.tsx +12 -0
  120. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/_app/portal.tsx +10 -0
  121. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/_auth/login/sso.tsx +27 -0
  122. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/_auth/login.tsx +10 -0
  123. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/_auth/two-fa.tsx +91 -0
  124. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/guide.tsx +9 -0
  125. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/index.tsx +8 -0
  126. package/examples/greenfield/module-hybrid-cdn-auth-full/src/routes/unauthorized.tsx +50 -0
  127. package/examples/greenfield/module-hybrid-cdn-auth-full/src/utils/ValidationSchema.ts +1 -0
  128. package/examples/greenfield/module-hybrid-cdn-auth-full/src/utils/cookie.ts +23 -0
  129. package/examples/greenfield/module-hybrid-cdn-auth-full/src/utils/normalize-router-path.ts +10 -0
  130. package/examples/greenfield/module-hybrid-cdn-auth-full/src/utils/private-route.tsx +100 -0
  131. package/examples/greenfield/module-hybrid-cdn-auth-full/src/utils/public-route.tsx +64 -0
  132. package/examples/greenfield/module-hybrid-cdn-auth-full/src/utils/resolve-api-base-url.ts +44 -0
  133. package/examples/greenfield/module-hybrid-cdn-auth-full/src/utils/safe-router-navigation.ts +82 -0
  134. package/examples/greenfield/module-hybrid-cdn-auth-full/tsconfig.json +20 -0
  135. package/examples/greenfield/module-hybrid-cdn-auth-full/vite.config.cdn-app.mjs +1 -0
  136. package/examples/greenfield/module-hybrid-cdn-auth-full/vite.config.cdn-esm.mjs +1 -0
  137. package/examples/greenfield/module-hybrid-cdn-auth-full/vite.config.cdn-vendor.mjs +1 -0
  138. package/examples/greenfield/module-hybrid-cdn-auth-full/vite.config.dev.mjs +1 -0
  139. package/examples/greenfield/module-hybrid-cdn-auth-full/vite.config.hubspot.mjs +1 -0
  140. package/examples/greenfield/module-hybrid-cdn-auth-full/vite.config.monolith.mjs +8 -0
  141. package/examples/greenfield/module-hybrid-cdn-auth-full/woodscli.json +38 -0
  142. package/examples/greenfield/module-hybrid-cdn-auth-full/wphs.adapter.ts +7 -0
  143. package/examples/greenfield/module-hybrid-cdn-auth-sso/.env.dev.example +3 -0
  144. package/examples/greenfield/module-hybrid-cdn-auth-sso/.env.local.example +6 -0
  145. package/examples/greenfield/module-hybrid-cdn-auth-sso/.env.prod.example +5 -0
  146. package/examples/greenfield/module-hybrid-cdn-auth-sso/.env.stg.example +3 -0
  147. package/examples/greenfield/module-hybrid-cdn-auth-sso/.wphs/README.md +17 -0
  148. package/examples/greenfield/module-hybrid-cdn-auth-sso/README.md +60 -0
  149. package/examples/greenfield/module-hybrid-cdn-auth-sso/hubspot.config.yml.example +10 -0
  150. package/examples/greenfield/module-hybrid-cdn-auth-sso/index.html +12 -0
  151. package/examples/greenfield/module-hybrid-cdn-auth-sso/package.json +34 -0
  152. package/examples/greenfield/module-hybrid-cdn-auth-sso/portal.cdn.json.example +8 -0
  153. package/examples/greenfield/module-hybrid-cdn-auth-sso/public/fields.json +100 -0
  154. package/examples/greenfield/module-hybrid-cdn-auth-sso/public/meta.json +9 -0
  155. package/examples/greenfield/module-hybrid-cdn-auth-sso/public/module.html +38 -0
  156. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/app.tsx +180 -0
  157. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/assets/css/main.dev.css +23 -0
  158. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/assets/css/main.prod.css +12 -0
  159. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/assets/css/tailwind.css.config.css +7 -0
  160. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/cdn/app-entry.ts +48 -0
  161. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/cdn/vendor-entry.ts +28 -0
  162. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/Layouts/AppLayoutWrapper.tsx +38 -0
  163. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/Layouts/AuthLayout.tsx +7 -0
  164. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/Layouts/DefaultLayout.tsx +5 -0
  165. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/Layouts/MainLayout.tsx +42 -0
  166. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/Layouts/UnauthorizedLayout.tsx +5 -0
  167. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/Layouts/index.ts +13 -0
  168. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/layout/section-card.tsx +20 -0
  169. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/layout/starter-nav.tsx +28 -0
  170. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/layout/starter-shell.tsx +18 -0
  171. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/ui/Button.tsx +22 -0
  172. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/ui/Form.tsx +22 -0
  173. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/ui/Input.tsx +12 -0
  174. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/ui/Toaster.tsx +5 -0
  175. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/ui/auth/SsoLoginButton.tsx +34 -0
  176. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/ui/link.tsx +10 -0
  177. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/components/ui/loader/loader.tsx +18 -0
  178. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/config/auth-tier.ts +4 -0
  179. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/config/nav-scaffold.ts +4 -0
  180. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/config/portal-nav.ts +9 -0
  181. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/config/router.ts +1 -0
  182. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/config/routes.ts +10 -0
  183. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/data/hubSpotContext.ts +57 -0
  184. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/data/sync-sdk-hub-context.ts +44 -0
  185. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/defaultData.ts +2 -0
  186. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/env.ts +59 -0
  187. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/app-bootstrap-guards.ts +14 -0
  188. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/auth-navigation.ts +81 -0
  189. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/auth-route-paths.ts +29 -0
  190. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/auth-session-events.ts +2 -0
  191. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/auth-session.ts +26 -0
  192. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/clear-client-auth-session.ts +62 -0
  193. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/components/starter-login.tsx +83 -0
  194. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/login-email-storage.ts +64 -0
  195. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/login-session-bridge.ts +72 -0
  196. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/post-login-path.ts +17 -0
  197. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/resolve-auth-login-error-message.ts +52 -0
  198. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/resolve-post-login-path.ts +21 -0
  199. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/sso-callback.ts +126 -0
  200. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/use-portal-session.ts +25 -0
  201. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/use-signed-in-email.ts +55 -0
  202. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/auth/use-sso-callback-handler.ts +92 -0
  203. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/components/starter-guide-page.tsx +210 -0
  204. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/components/starter-home-page.tsx +21 -0
  205. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/components/starter-home.tsx +48 -0
  206. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/components/starter-page-frame.tsx +25 -0
  207. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/components/starter-protected-page.tsx +54 -0
  208. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/components/starter-single-page.tsx +17 -0
  209. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/content/auth-guide-content.ts +85 -0
  210. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/content/woodscli-guide-content.ts +86 -0
  211. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/hooks/starter-preview-values.ts +60 -0
  212. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/hooks/use-starter-preview.dev.ts +18 -0
  213. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/hooks/use-starter-preview.ts +30 -0
  214. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/features/starter/index.ts +6 -0
  215. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/hubspot/bootstrap.ts +16 -0
  216. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/hubspot/default-data.ts +7 -0
  217. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/hubspot/is-cms-editor.ts +78 -0
  218. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/hubspot/module-entry.tsx +9 -0
  219. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/hubspot/types.ts +17 -0
  220. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/integrations/configure-woodsportal-sdk.ts +94 -0
  221. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/integrations/tanstack-query/root-provider.tsx +18 -0
  222. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/integrations/tanstack-router/router.tsx +39 -0
  223. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/integrations/woodsportal-sdk.ts +37 -0
  224. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/main.tsx +5 -0
  225. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/portal/api-endpoint.ts +11 -0
  226. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/portal/ensure-portal-cdn-stylesheet.ts +115 -0
  227. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/portal/mount-dev-preview.tsx +12 -0
  228. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/portal/mount-portal.tsx +57 -0
  229. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routeTree.gen.ts +155 -0
  230. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routes/__root.tsx +12 -0
  231. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routes/_app/portal.tsx +10 -0
  232. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routes/_auth/login/sso.tsx +27 -0
  233. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routes/_auth/login.tsx +10 -0
  234. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routes/guide.tsx +9 -0
  235. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routes/index.tsx +8 -0
  236. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/routes/unauthorized.tsx +50 -0
  237. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/utils/ValidationSchema.ts +1 -0
  238. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/utils/cookie.ts +23 -0
  239. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/utils/normalize-router-path.ts +10 -0
  240. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/utils/private-route.tsx +100 -0
  241. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/utils/public-route.tsx +64 -0
  242. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/utils/resolve-api-base-url.ts +44 -0
  243. package/examples/greenfield/module-hybrid-cdn-auth-sso/src/utils/safe-router-navigation.ts +82 -0
  244. package/examples/greenfield/module-hybrid-cdn-auth-sso/tsconfig.json +20 -0
  245. package/examples/greenfield/module-hybrid-cdn-auth-sso/vite.config.cdn-app.mjs +1 -0
  246. package/examples/greenfield/module-hybrid-cdn-auth-sso/vite.config.cdn-esm.mjs +1 -0
  247. package/examples/greenfield/module-hybrid-cdn-auth-sso/vite.config.cdn-vendor.mjs +1 -0
  248. package/examples/greenfield/module-hybrid-cdn-auth-sso/vite.config.dev.mjs +1 -0
  249. package/examples/greenfield/module-hybrid-cdn-auth-sso/vite.config.hubspot.mjs +1 -0
  250. package/examples/greenfield/module-hybrid-cdn-auth-sso/vite.config.monolith.mjs +8 -0
  251. package/examples/greenfield/module-hybrid-cdn-auth-sso/woodscli.json +38 -0
  252. package/examples/greenfield/module-hybrid-cdn-auth-sso/wphs.adapter.ts +7 -0
  253. package/examples/greenfield/module-hybrid-cdn-auth-starter/.env.dev.example +3 -0
  254. package/examples/greenfield/module-hybrid-cdn-auth-starter/.env.local.example +6 -0
  255. package/examples/greenfield/module-hybrid-cdn-auth-starter/.env.prod.example +5 -0
  256. package/examples/greenfield/module-hybrid-cdn-auth-starter/.env.stg.example +3 -0
  257. package/examples/greenfield/module-hybrid-cdn-auth-starter/.wphs/README.md +17 -0
  258. package/examples/greenfield/module-hybrid-cdn-auth-starter/README.md +60 -0
  259. package/examples/greenfield/module-hybrid-cdn-auth-starter/hubspot.config.yml.example +10 -0
  260. package/examples/greenfield/module-hybrid-cdn-auth-starter/index.html +12 -0
  261. package/examples/greenfield/module-hybrid-cdn-auth-starter/package.json +34 -0
  262. package/examples/greenfield/module-hybrid-cdn-auth-starter/portal.cdn.json.example +8 -0
  263. package/examples/greenfield/module-hybrid-cdn-auth-starter/public/fields.json +100 -0
  264. package/examples/greenfield/module-hybrid-cdn-auth-starter/public/meta.json +9 -0
  265. package/examples/greenfield/module-hybrid-cdn-auth-starter/public/module.html +38 -0
  266. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/app.tsx +173 -0
  267. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/assets/css/main.dev.css +23 -0
  268. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/assets/css/main.prod.css +12 -0
  269. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/assets/css/tailwind.css.config.css +7 -0
  270. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/cdn/app-entry.ts +48 -0
  271. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/cdn/vendor-entry.ts +28 -0
  272. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/Layouts/AppLayoutWrapper.tsx +38 -0
  273. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/Layouts/AuthLayout.tsx +7 -0
  274. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/Layouts/DefaultLayout.tsx +5 -0
  275. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/Layouts/MainLayout.tsx +42 -0
  276. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/Layouts/UnauthorizedLayout.tsx +5 -0
  277. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/Layouts/index.ts +13 -0
  278. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/layout/section-card.tsx +20 -0
  279. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/layout/starter-nav.tsx +28 -0
  280. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/layout/starter-shell.tsx +18 -0
  281. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/ui/Button.tsx +22 -0
  282. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/ui/Form.tsx +22 -0
  283. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/ui/Input.tsx +12 -0
  284. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/ui/Toaster.tsx +5 -0
  285. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/ui/link.tsx +10 -0
  286. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/components/ui/loader/loader.tsx +18 -0
  287. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/config/auth-tier.ts +4 -0
  288. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/config/nav-scaffold.ts +4 -0
  289. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/config/portal-nav.ts +9 -0
  290. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/config/router.ts +1 -0
  291. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/config/routes.ts +10 -0
  292. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/data/hubSpotContext.ts +57 -0
  293. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/data/sync-sdk-hub-context.ts +44 -0
  294. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/defaultData.ts +2 -0
  295. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/env.ts +59 -0
  296. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/app-bootstrap-guards.ts +14 -0
  297. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/auth-navigation.ts +81 -0
  298. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/auth-route-paths.ts +29 -0
  299. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/auth-session-events.ts +2 -0
  300. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/auth-session.ts +26 -0
  301. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/clear-client-auth-session.ts +62 -0
  302. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/components/starter-login.tsx +76 -0
  303. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/login-email-storage.ts +64 -0
  304. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/login-session-bridge.ts +72 -0
  305. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/post-login-path.ts +17 -0
  306. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/resolve-auth-login-error-message.ts +52 -0
  307. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/resolve-post-login-path.ts +21 -0
  308. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/use-portal-session.ts +25 -0
  309. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/auth/use-signed-in-email.ts +55 -0
  310. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/components/starter-guide-page.tsx +218 -0
  311. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/components/starter-home-page.tsx +21 -0
  312. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/components/starter-home.tsx +48 -0
  313. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/components/starter-page-frame.tsx +25 -0
  314. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/components/starter-protected-page.tsx +54 -0
  315. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/components/starter-single-page.tsx +17 -0
  316. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/content/auth-guide-content.ts +91 -0
  317. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/content/woodscli-guide-content.ts +86 -0
  318. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/hooks/starter-preview-values.ts +60 -0
  319. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/hooks/use-starter-preview.dev.ts +18 -0
  320. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/hooks/use-starter-preview.ts +30 -0
  321. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/features/starter/index.ts +6 -0
  322. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/hubspot/bootstrap.ts +16 -0
  323. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/hubspot/default-data.ts +7 -0
  324. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/hubspot/is-cms-editor.ts +78 -0
  325. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/hubspot/module-entry.tsx +9 -0
  326. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/hubspot/types.ts +17 -0
  327. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/integrations/configure-woodsportal-sdk.ts +94 -0
  328. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/integrations/tanstack-query/root-provider.tsx +18 -0
  329. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/integrations/tanstack-router/router.tsx +39 -0
  330. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/integrations/woodsportal-sdk.ts +37 -0
  331. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/main.tsx +5 -0
  332. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/portal/api-endpoint.ts +11 -0
  333. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/portal/ensure-portal-cdn-stylesheet.ts +115 -0
  334. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/portal/mount-dev-preview.tsx +12 -0
  335. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/portal/mount-portal.tsx +52 -0
  336. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/routeTree.gen.ts +134 -0
  337. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/routes/__root.tsx +12 -0
  338. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/routes/_app/portal.tsx +10 -0
  339. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/routes/_auth/login.tsx +10 -0
  340. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/routes/guide.tsx +9 -0
  341. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/routes/index.tsx +8 -0
  342. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/routes/unauthorized.tsx +50 -0
  343. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/utils/ValidationSchema.ts +1 -0
  344. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/utils/cookie.ts +23 -0
  345. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/utils/normalize-router-path.ts +10 -0
  346. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/utils/private-route.tsx +100 -0
  347. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/utils/public-route.tsx +64 -0
  348. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/utils/resolve-api-base-url.ts +44 -0
  349. package/examples/greenfield/module-hybrid-cdn-auth-starter/src/utils/safe-router-navigation.ts +82 -0
  350. package/examples/greenfield/module-hybrid-cdn-auth-starter/tsconfig.json +20 -0
  351. package/examples/greenfield/module-hybrid-cdn-auth-starter/vite.config.cdn-app.mjs +1 -0
  352. package/examples/greenfield/module-hybrid-cdn-auth-starter/vite.config.cdn-esm.mjs +1 -0
  353. package/examples/greenfield/module-hybrid-cdn-auth-starter/vite.config.cdn-vendor.mjs +1 -0
  354. package/examples/greenfield/module-hybrid-cdn-auth-starter/vite.config.dev.mjs +1 -0
  355. package/examples/greenfield/module-hybrid-cdn-auth-starter/vite.config.hubspot.mjs +1 -0
  356. package/examples/greenfield/module-hybrid-cdn-auth-starter/vite.config.monolith.mjs +8 -0
  357. package/examples/greenfield/module-hybrid-cdn-auth-starter/woodscli.json +38 -0
  358. package/examples/greenfield/module-hybrid-cdn-auth-starter/wphs.adapter.ts +7 -0
  359. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/.env.dev.example +3 -0
  360. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/.env.local.example +6 -0
  361. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/.env.prod.example +5 -0
  362. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/.env.stg.example +3 -0
  363. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/.wphs/README.md +17 -0
  364. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/README.md +60 -0
  365. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/hubspot.config.yml.example +10 -0
  366. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/index.html +12 -0
  367. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/package.json +34 -0
  368. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/portal.cdn.json.example +8 -0
  369. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/public/fields.json +100 -0
  370. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/public/meta.json +9 -0
  371. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/public/module.html +38 -0
  372. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/app.tsx +173 -0
  373. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/assets/css/main.dev.css +23 -0
  374. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/assets/css/main.prod.css +12 -0
  375. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/assets/css/tailwind.css.config.css +7 -0
  376. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/cdn/app-entry.ts +48 -0
  377. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/cdn/vendor-entry.ts +28 -0
  378. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/Layouts/AppLayoutWrapper.tsx +38 -0
  379. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/Layouts/AuthLayout.tsx +7 -0
  380. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/Layouts/DefaultLayout.tsx +5 -0
  381. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/Layouts/MainLayout.tsx +7 -0
  382. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/Layouts/UnauthorizedLayout.tsx +5 -0
  383. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/Layouts/index.ts +13 -0
  384. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/layout/portal-sidebar-nav.tsx +33 -0
  385. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/layout/portal-sidebar.tsx +139 -0
  386. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/layout/section-card.tsx +20 -0
  387. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/layout/starter-nav.tsx +28 -0
  388. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/layout/starter-shell.tsx +18 -0
  389. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/ui/Button.tsx +22 -0
  390. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/ui/Form.tsx +22 -0
  391. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/ui/Input.tsx +12 -0
  392. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/ui/Toaster.tsx +5 -0
  393. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/ui/link.tsx +10 -0
  394. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/components/ui/loader/loader.tsx +18 -0
  395. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/config/auth-tier.ts +4 -0
  396. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/config/nav-scaffold.ts +4 -0
  397. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/config/portal-nav.ts +9 -0
  398. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/config/router.ts +1 -0
  399. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/config/routes.ts +10 -0
  400. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/data/hubSpotContext.ts +57 -0
  401. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/data/sync-sdk-hub-context.ts +44 -0
  402. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/defaultData.ts +2 -0
  403. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/env.ts +59 -0
  404. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/app-bootstrap-guards.ts +14 -0
  405. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/auth-navigation.ts +81 -0
  406. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/auth-route-paths.ts +29 -0
  407. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/auth-session-events.ts +2 -0
  408. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/auth-session.ts +26 -0
  409. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/clear-client-auth-session.ts +62 -0
  410. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/components/starter-login.tsx +76 -0
  411. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/login-email-storage.ts +64 -0
  412. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/login-session-bridge.ts +72 -0
  413. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/post-login-path.ts +17 -0
  414. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/resolve-auth-login-error-message.ts +52 -0
  415. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/resolve-post-login-path.ts +21 -0
  416. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/use-portal-session.ts +25 -0
  417. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/auth/use-signed-in-email.ts +55 -0
  418. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/components/starter-guide-page.tsx +210 -0
  419. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/components/starter-home-page.tsx +21 -0
  420. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/components/starter-home.tsx +48 -0
  421. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/components/starter-page-frame.tsx +25 -0
  422. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/components/starter-protected-page.tsx +54 -0
  423. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/components/starter-single-page.tsx +17 -0
  424. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/content/auth-guide-content.ts +85 -0
  425. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/content/woodscli-guide-content.ts +86 -0
  426. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/hooks/starter-preview-values.ts +60 -0
  427. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/hooks/use-starter-preview.dev.ts +18 -0
  428. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/hooks/use-starter-preview.ts +30 -0
  429. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/features/starter/index.ts +6 -0
  430. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/hubspot/bootstrap.ts +16 -0
  431. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/hubspot/default-data.ts +7 -0
  432. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/hubspot/is-cms-editor.ts +78 -0
  433. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/hubspot/module-entry.tsx +9 -0
  434. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/hubspot/types.ts +17 -0
  435. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/integrations/configure-woodsportal-sdk.ts +94 -0
  436. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/integrations/tanstack-query/root-provider.tsx +18 -0
  437. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/integrations/tanstack-router/router.tsx +39 -0
  438. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/integrations/woodsportal-sdk.ts +37 -0
  439. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/main.tsx +5 -0
  440. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/portal/api-endpoint.ts +11 -0
  441. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/portal/ensure-portal-cdn-stylesheet.ts +115 -0
  442. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/portal/mount-dev-preview.tsx +12 -0
  443. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/portal/mount-portal.tsx +52 -0
  444. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/routeTree.gen.ts +134 -0
  445. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/routes/__root.tsx +12 -0
  446. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/routes/_app/portal.tsx +10 -0
  447. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/routes/_auth/login.tsx +10 -0
  448. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/routes/guide.tsx +9 -0
  449. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/routes/index.tsx +8 -0
  450. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/routes/unauthorized.tsx +50 -0
  451. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/utils/ValidationSchema.ts +1 -0
  452. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/utils/cookie.ts +23 -0
  453. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/utils/normalize-router-path.ts +10 -0
  454. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/utils/private-route.tsx +100 -0
  455. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/utils/public-route.tsx +64 -0
  456. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/utils/resolve-api-base-url.ts +44 -0
  457. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/src/utils/safe-router-navigation.ts +82 -0
  458. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/tsconfig.json +20 -0
  459. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/vite.config.cdn-app.mjs +1 -0
  460. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/vite.config.cdn-esm.mjs +1 -0
  461. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/vite.config.cdn-vendor.mjs +1 -0
  462. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/vite.config.dev.mjs +1 -0
  463. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/vite.config.hubspot.mjs +1 -0
  464. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/vite.config.monolith.mjs +8 -0
  465. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/woodscli.json +38 -0
  466. package/examples/greenfield/module-hybrid-cdn-auth-starter-sidebar/wphs.adapter.ts +7 -0
  467. package/examples/greenfield/module-monolith/public/fields.json +66 -16
  468. package/examples/greenfield/module-monolith/src/assets/css/main.dev.css +7 -0
  469. package/examples/greenfield/module-monolith/src/components/layout/starter-nav.tsx +12 -15
  470. package/examples/greenfield/module-monolith/src/config/starter-nav.ts +9 -0
  471. package/examples/greenfield/module-monolith/src/features/starter/components/starter-home.tsx +25 -29
  472. package/examples/greenfield/module-monolith/src/features/starter/hooks/starter-preview-values.ts +60 -0
  473. package/examples/greenfield/module-monolith/src/features/starter/hooks/use-starter-preview.dev.ts +18 -0
  474. package/examples/greenfield/module-monolith/src/features/starter/hooks/use-starter-preview.ts +20 -37
  475. package/examples/manifest.json +5 -1
  476. package/examples/smoke/run-matrix.mjs +37 -0
  477. package/package.json +30 -13
  478. package/scripts/audit-tdz-split.mjs +11 -5
  479. package/scripts/build-cdn.mjs +6 -5
  480. package/scripts/check-cdn-size-regression.mjs +49 -0
  481. package/scripts/check-hubspot-bundle-size.mjs +18 -4
  482. package/scripts/cli-smoke-helpers.mjs +150 -0
  483. package/scripts/dist-cli-pack-smoke.test.mjs +79 -0
  484. package/scripts/ensure-wphs-workspace.mjs +7 -2
  485. package/scripts/generate-cdn-bundle-breakdown.mjs +61 -0
  486. package/scripts/generate-cdn-manifest.mjs +23 -8
  487. package/scripts/portal-vite-env.mjs +76 -2
  488. package/scripts/publish-cdn-github.mjs +79 -14
  489. package/scripts/refresh-artifact-sizes.mjs +77 -0
  490. package/scripts/regenerate-route-tree.mjs +71 -0
  491. package/scripts/resolve-hubspot-cli.mjs +51 -0
  492. package/scripts/resolve-vite-config.mjs +2 -3
  493. package/scripts/resolve-vite-spawn.mjs +48 -0
  494. package/scripts/run-vite-build.mjs +5 -6
  495. package/scripts/sync-auth-scaffold-from-client.mjs +41 -0
  496. package/scripts/verify-cdn-api-endpoint.mjs +17 -10
  497. package/scripts/vite/create-dev-server-config.mjs +7 -1
  498. package/scripts/vite/portal-build-shared.js +62 -2
  499. package/scripts/watch-hubspot.mjs +11 -13
  500. package/scripts/wp-cli-smoke.test.mjs +263 -0
  501. package/src/dev/bootstrap-greenfield.tsx +6 -0
  502. package/src/dev-module-config/ui/module-config-overlay-side.ts +13 -3
  503. package/src/dev-module-config/ui/module-config-toolbar-theme.ts +12 -3
  504. package/templates/module-hybrid-cdn/README.md +2 -1
  505. package/templates/module-hybrid-cdn/public/fields.json +47 -7
  506. package/templates/module-hybrid-cdn/public/module.html +7 -6
  507. package/templates/module-hybrid-cdn/src/assets/css/main.dev.css +7 -0
  508. package/templates/module-hybrid-cdn/src/components/layout/starter-nav.tsx +12 -15
  509. package/templates/module-hybrid-cdn/src/config/starter-nav.ts +9 -0
  510. package/templates/module-hybrid-cdn/src/features/starter/components/starter-home.tsx +25 -27
  511. package/templates/module-hybrid-cdn/src/features/starter/hooks/starter-preview-values.ts +5 -5
  512. package/templates/module-monolith/README.md +2 -1
  513. package/templates/module-monolith/public/fields.json +49 -6
  514. package/templates/module-monolith/src/assets/css/main.dev.css +7 -0
  515. package/templates/module-monolith/src/components/layout/starter-nav.tsx +12 -15
  516. package/templates/module-monolith/src/config/starter-nav.ts +9 -0
  517. package/templates/module-monolith/src/features/starter/components/starter-home.tsx +25 -27
  518. package/templates/module-monolith/src/features/starter/hooks/starter-preview-values.ts +5 -5
  519. package/templates/scaffold/auth/_full/src/app.tsx +172 -0
  520. package/templates/scaffold/auth/_full/src/config/auth-tier.ts +4 -0
  521. package/templates/scaffold/auth/_full/src/features/auth/auth-session.ts +51 -0
  522. package/templates/scaffold/auth/_full/src/features/auth/components/starter-login.tsx +79 -0
  523. package/templates/scaffold/auth/_full/src/features/auth/login-session-bridge.ts +74 -0
  524. package/templates/scaffold/auth/_full/src/features/auth/mfa-otp-utils.ts +24 -0
  525. package/templates/scaffold/auth/_full/src/features/auth/mfa-pending-storage.ts +108 -0
  526. package/templates/scaffold/auth/_full/src/features/auth/mfa-portal.ts +45 -0
  527. package/templates/scaffold/auth/_full/src/features/auth/use-mfa-login-otp-flow.ts +78 -0
  528. package/templates/scaffold/auth/_full/src/routeTree.gen.ts +182 -0
  529. package/templates/scaffold/auth/_full/src/routes/_auth/two-fa.tsx +91 -0
  530. package/templates/scaffold/auth/_nav-sidebar/src/components/Layouts/MainLayout.tsx +7 -0
  531. package/templates/scaffold/auth/_nav-sidebar/src/components/layout/portal-sidebar-nav.tsx +33 -0
  532. package/templates/scaffold/auth/_nav-sidebar/src/components/layout/portal-sidebar.tsx +139 -0
  533. package/templates/scaffold/auth/_nav-top/src/components/Layouts/MainLayout.tsx +42 -0
  534. package/templates/scaffold/auth/_shared/src/app.tsx +178 -0
  535. package/templates/scaffold/auth/_shared/src/components/Layouts/AppLayoutWrapper.tsx +38 -0
  536. package/templates/scaffold/auth/_shared/src/components/Layouts/AuthLayout.tsx +7 -0
  537. package/templates/scaffold/auth/_shared/src/components/Layouts/DefaultLayout.tsx +5 -0
  538. package/templates/scaffold/auth/_shared/src/components/Layouts/UnauthorizedLayout.tsx +5 -0
  539. package/templates/scaffold/auth/_shared/src/components/Layouts/index.ts +13 -0
  540. package/templates/scaffold/auth/_shared/src/components/ui/Button.tsx +22 -0
  541. package/templates/scaffold/auth/_shared/src/components/ui/Form.tsx +22 -0
  542. package/templates/scaffold/auth/_shared/src/components/ui/Input.tsx +12 -0
  543. package/templates/scaffold/auth/_shared/src/components/ui/Toaster.tsx +5 -0
  544. package/templates/scaffold/auth/_shared/src/components/ui/link.tsx +10 -0
  545. package/templates/scaffold/auth/_shared/src/components/ui/loader/loader.tsx +18 -0
  546. package/templates/scaffold/auth/_shared/src/config/auth-tier.ts +4 -0
  547. package/templates/scaffold/auth/_shared/src/config/nav-scaffold.ts +4 -0
  548. package/templates/scaffold/auth/_shared/src/config/portal-nav.ts +9 -0
  549. package/templates/scaffold/auth/_shared/src/config/router.ts +1 -0
  550. package/templates/scaffold/auth/_shared/src/config/routes.ts +10 -0
  551. package/templates/scaffold/auth/_shared/src/data/hubSpotContext.ts +57 -0
  552. package/templates/scaffold/auth/_shared/src/data/sync-sdk-hub-context.ts +44 -0
  553. package/templates/scaffold/auth/_shared/src/env.ts +59 -0
  554. package/templates/scaffold/auth/_shared/src/features/auth/app-bootstrap-guards.ts +14 -0
  555. package/templates/scaffold/auth/_shared/src/features/auth/auth-navigation.ts +81 -0
  556. package/templates/scaffold/auth/_shared/src/features/auth/auth-route-paths.ts +29 -0
  557. package/templates/scaffold/auth/_shared/src/features/auth/auth-session-events.ts +2 -0
  558. package/templates/scaffold/auth/_shared/src/features/auth/auth-session.ts +26 -0
  559. package/templates/scaffold/auth/_shared/src/features/auth/clear-client-auth-session.ts +62 -0
  560. package/templates/scaffold/auth/_shared/src/features/auth/components/starter-login.tsx +83 -0
  561. package/templates/scaffold/auth/_shared/src/features/auth/login-email-storage.ts +64 -0
  562. package/templates/scaffold/auth/_shared/src/features/auth/login-session-bridge.ts +72 -0
  563. package/templates/scaffold/auth/_shared/src/features/auth/post-login-path.ts +17 -0
  564. package/templates/scaffold/auth/_shared/src/features/auth/resolve-auth-login-error-message.ts +52 -0
  565. package/templates/scaffold/auth/_shared/src/features/auth/resolve-post-login-path.ts +21 -0
  566. package/templates/scaffold/auth/_shared/src/features/auth/use-portal-session.ts +25 -0
  567. package/templates/scaffold/auth/_shared/src/features/auth/use-signed-in-email.ts +55 -0
  568. package/templates/scaffold/auth/_shared/src/features/starter/components/starter-guide-page.tsx +218 -0
  569. package/templates/scaffold/auth/_shared/src/features/starter/components/starter-page-frame.tsx +25 -0
  570. package/templates/scaffold/auth/_shared/src/features/starter/components/starter-protected-page.tsx +54 -0
  571. package/templates/scaffold/auth/_shared/src/features/starter/content/auth-guide-content.ts +91 -0
  572. package/templates/scaffold/auth/_shared/src/hubspot/is-cms-editor.ts +78 -0
  573. package/templates/scaffold/auth/_shared/src/integrations/configure-woodsportal-sdk.ts +100 -0
  574. package/templates/scaffold/auth/_shared/src/integrations/tanstack-query/root-provider.tsx +18 -0
  575. package/templates/scaffold/auth/_shared/src/integrations/tanstack-router/router.tsx +39 -0
  576. package/templates/scaffold/auth/_shared/src/integrations/woodsportal-sdk.ts +37 -0
  577. package/templates/scaffold/auth/_shared/src/portal/mount-portal.tsx +59 -0
  578. package/templates/scaffold/auth/_shared/src/routeTree.gen.ts +134 -0
  579. package/templates/scaffold/auth/_shared/src/routes/__root.tsx +12 -0
  580. package/templates/scaffold/auth/_shared/src/routes/_app/portal.tsx +10 -0
  581. package/templates/scaffold/auth/_shared/src/routes/_auth/login.tsx +10 -0
  582. package/templates/scaffold/auth/_shared/src/routes/guide.tsx +9 -0
  583. package/templates/scaffold/auth/_shared/src/routes/index.tsx +8 -0
  584. package/templates/scaffold/auth/_shared/src/routes/unauthorized.tsx +50 -0
  585. package/templates/scaffold/auth/_shared/src/utils/ValidationSchema.ts +1 -0
  586. package/templates/scaffold/auth/_shared/src/utils/cookie.ts +23 -0
  587. package/templates/scaffold/auth/_shared/src/utils/normalize-router-path.ts +10 -0
  588. package/templates/scaffold/auth/_shared/src/utils/private-route.tsx +100 -0
  589. package/templates/scaffold/auth/_shared/src/utils/public-route.tsx +64 -0
  590. package/templates/scaffold/auth/_shared/src/utils/resolve-api-base-url.ts +44 -0
  591. package/templates/scaffold/auth/_shared/src/utils/safe-router-navigation.ts +82 -0
  592. package/templates/scaffold/auth/_sso/src/app.tsx +180 -0
  593. package/templates/scaffold/auth/_sso/src/components/ui/auth/SsoLoginButton.tsx +34 -0
  594. package/templates/scaffold/auth/_sso/src/config/auth-tier.ts +4 -0
  595. package/templates/scaffold/auth/_sso/src/features/auth/components/starter-login.tsx +90 -0
  596. package/templates/scaffold/auth/_sso/src/features/auth/sso-callback.ts +126 -0
  597. package/templates/scaffold/auth/_sso/src/features/auth/use-sso-callback-handler.ts +92 -0
  598. package/templates/scaffold/auth/_sso/src/routeTree.gen.ts +155 -0
  599. package/templates/scaffold/auth/_sso/src/routes/_auth/login/sso.tsx +27 -0
  600. package/templates/scaffold/auth/nav-manifest.json +8 -0
  601. package/templates/scaffold/auth/sync-manifest.json +16 -0
  602. package/templates/scaffold/auth/tier-manifest.json +18 -0
  603. package/templates/scaffold/page/page-component-auth.tsx.tpl +10 -0
  604. package/templates/scaffold/page/page-component-plain.tsx.tpl +11 -0
  605. package/templates/scaffold/page/route-protected-auth.tsx.tpl +10 -0
  606. package/templates/scaffold/page/route-public-auth.tsx.tpl +9 -0
  607. package/templates/scaffold/page/route-public-plain.tsx.tpl +6 -0
  608. package/vite/vite.config.cdn-app.mjs +43 -30
  609. package/vite/vite.config.cdn-audit.mjs +34 -0
  610. package/vite/vite.config.cdn-esm.mjs +1 -1
  611. package/dist/chunk-4GOJPOW3.js.map +0 -1
  612. package/dist/chunk-S2YJDWZU.js.map +0 -1
  613. /package/dist/{exec-VY6BGWF3.js.map → exec-NS4GKXZS.js.map} +0 -0
@@ -83,6 +83,52 @@ function isWpHsError(error) {
83
83
  return error instanceof WpHsError;
84
84
  }
85
85
 
86
+ // src/lib/resolve-external-cli.ts
87
+ import { existsSync } from "fs";
88
+ import { platform } from "os";
89
+ import { resolve } from "path";
90
+ function resolveBin(name, projectRoot) {
91
+ const roots = projectRoot ? [projectRoot] : [];
92
+ if (!roots.includes(process.cwd())) {
93
+ roots.push(process.cwd());
94
+ }
95
+ for (const root of roots) {
96
+ const binDir = resolve(root, "node_modules", ".bin");
97
+ if (platform() === "win32") {
98
+ const cmd = resolve(binDir, `${name}.cmd`);
99
+ if (existsSync(cmd)) {
100
+ return { command: cmd, prefixArgs: [] };
101
+ }
102
+ }
103
+ const shim = resolve(binDir, name);
104
+ if (existsSync(shim)) {
105
+ return { command: shim, prefixArgs: [] };
106
+ }
107
+ }
108
+ return null;
109
+ }
110
+ function resolveHubSpotCliSpawn(projectRoot) {
111
+ const local = resolveBin("hs", projectRoot);
112
+ if (local) {
113
+ return local;
114
+ }
115
+ if (platform() === "win32") {
116
+ return { command: "hs", prefixArgs: [], shell: true };
117
+ }
118
+ return { command: "hs", prefixArgs: [] };
119
+ }
120
+ function applyExternalCliSpawn(command, args, options) {
121
+ if (command === "hs") {
122
+ const spawn2 = resolveHubSpotCliSpawn(options.projectRoot ?? options.cwd);
123
+ return {
124
+ command: spawn2.command,
125
+ args: [...spawn2.prefixArgs, ...args],
126
+ shell: spawn2.shell
127
+ };
128
+ }
129
+ return { command, args };
130
+ }
131
+
86
132
  // src/lib/exec.ts
87
133
  var SECRET_PATTERN = /(token|secret|password|pat|key)=/i;
88
134
  function logExec(logger, command, args, options) {
@@ -98,29 +144,35 @@ function runCommand(command, args, options) {
98
144
  logger?.info(`[dry-run] ${formatExecDebugLine(command, args, cwd, env, options.projectRoot)}`);
99
145
  return { status: 0, stdout: "", stderr: "" };
100
146
  }
101
- logExec(logger, command, args, options);
147
+ const resolved = applyExternalCliSpawn(command, args, {
148
+ projectRoot: options.projectRoot,
149
+ cwd
150
+ });
151
+ logExec(logger, resolved.command, resolved.args, options);
102
152
  if (streamOutput) {
103
- const result2 = spawnSync(command, args, {
153
+ const result2 = spawnSync(resolved.command, resolved.args, {
104
154
  cwd,
105
155
  env,
106
156
  encoding: "utf8",
107
- stdio: "inherit"
157
+ stdio: "inherit",
158
+ shell: resolved.shell
108
159
  });
109
160
  const status2 = result2.status ?? 1;
110
- throwOnBadExit(command, args, status2, "", "", okCodes);
161
+ throwOnBadExit(resolved.command, resolved.args, status2, "", "", okCodes);
111
162
  return { status: status2, stdout: "", stderr: "" };
112
163
  }
113
164
  const spawnOpts = {
114
165
  cwd,
115
166
  env,
116
167
  encoding: "utf8",
117
- stdio: ["inherit", "pipe", "pipe"]
168
+ stdio: ["inherit", "pipe", "pipe"],
169
+ shell: resolved.shell
118
170
  };
119
- const result = spawnSync(command, args, spawnOpts);
171
+ const result = spawnSync(resolved.command, resolved.args, spawnOpts);
120
172
  const status = result.status ?? 1;
121
173
  const stdout = typeof result.stdout === "string" ? result.stdout : "";
122
174
  const stderr = typeof result.stderr === "string" ? result.stderr : "";
123
- throwOnBadExit(command, args, status, stdout, stderr, okCodes);
175
+ throwOnBadExit(resolved.command, resolved.args, status, stdout, stderr, okCodes);
124
176
  return { status, stdout, stderr };
125
177
  }
126
178
  function runNodeScript(scriptPath, args, options) {
@@ -148,13 +200,18 @@ function runCommandAsync(command, args, options) {
148
200
  logger?.info(`[dry-run] ${formatExecDebugLine(command, args, cwd, env, options.projectRoot)}`);
149
201
  return Promise.resolve({ status: 0, stdout: "", stderr: "" });
150
202
  }
151
- logExec(logger, command, args, options);
203
+ const resolved = applyExternalCliSpawn(command, args, {
204
+ projectRoot: options.projectRoot,
205
+ cwd
206
+ });
207
+ logExec(logger, resolved.command, resolved.args, options);
152
208
  if (streamOutput) {
153
- return new Promise((resolve, reject) => {
154
- const child = spawn(command, args, {
209
+ return new Promise((resolve2, reject) => {
210
+ const child = spawn(resolved.command, resolved.args, {
155
211
  cwd,
156
212
  env,
157
- stdio: "inherit"
213
+ stdio: "inherit",
214
+ shell: resolved.shell
158
215
  });
159
216
  child.on("error", (error) => {
160
217
  reject(error);
@@ -162,19 +219,20 @@ function runCommandAsync(command, args, options) {
162
219
  child.on("close", (code) => {
163
220
  const status = code ?? 1;
164
221
  try {
165
- throwOnBadExit(command, args, status, "", "", okCodes);
166
- resolve({ status, stdout: "", stderr: "" });
222
+ throwOnBadExit(resolved.command, resolved.args, status, "", "", okCodes);
223
+ resolve2({ status, stdout: "", stderr: "" });
167
224
  } catch (error) {
168
225
  reject(error);
169
226
  }
170
227
  });
171
228
  });
172
229
  }
173
- return new Promise((resolve, reject) => {
174
- const child = spawn(command, args, {
230
+ return new Promise((resolve2, reject) => {
231
+ const child = spawn(resolved.command, resolved.args, {
175
232
  cwd,
176
233
  env,
177
- stdio: ["inherit", "pipe", "pipe"]
234
+ stdio: ["inherit", "pipe", "pipe"],
235
+ shell: resolved.shell
178
236
  });
179
237
  let stdout = "";
180
238
  let stderr = "";
@@ -192,8 +250,8 @@ function runCommandAsync(command, args, options) {
192
250
  child.on("close", (code) => {
193
251
  const status = code ?? 1;
194
252
  try {
195
- throwOnBadExit(command, args, status, stdout, stderr, okCodes);
196
- resolve({ status, stdout, stderr });
253
+ throwOnBadExit(resolved.command, resolved.args, status, stdout, stderr, okCodes);
254
+ resolve2({ status, stdout, stderr });
197
255
  } catch (error) {
198
256
  reject(error);
199
257
  }
@@ -211,7 +269,7 @@ function runNodeScriptLongRunning(scriptPath, args, options) {
211
269
  );
212
270
  return Promise.resolve(0);
213
271
  }
214
- return new Promise((resolve, reject) => {
272
+ return new Promise((resolve2, reject) => {
215
273
  const child = spawn(process.execPath, [scriptPath, ...args], {
216
274
  cwd,
217
275
  env,
@@ -233,14 +291,14 @@ function runNodeScriptLongRunning(scriptPath, args, options) {
233
291
  process.off("SIGINT", forwardSignal);
234
292
  process.off("SIGTERM", forwardSignal);
235
293
  if (signal === "SIGINT") {
236
- resolve(130);
294
+ resolve2(130);
237
295
  return;
238
296
  }
239
297
  if (signal === "SIGTERM") {
240
- resolve(143);
298
+ resolve2(143);
241
299
  return;
242
300
  }
243
- resolve(code ?? 1);
301
+ resolve2(code ?? 1);
244
302
  });
245
303
  });
246
304
  }
@@ -249,10 +307,11 @@ export {
249
307
  ExitCode,
250
308
  WpHsError,
251
309
  isWpHsError,
310
+ resolveHubSpotCliSpawn,
252
311
  runCommand,
253
312
  runNodeScript,
254
313
  runCommandAsync,
255
314
  runNodeScriptAsync,
256
315
  runNodeScriptLongRunning
257
316
  };
258
- //# sourceMappingURL=chunk-4GOJPOW3.js.map
317
+ //# sourceMappingURL=chunk-GXYUGXF5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/exec.ts","../src/lib/exec-debug.ts","../src/lib/errors.ts","../src/lib/resolve-external-cli.ts"],"sourcesContent":["import { spawn, spawnSync, type SpawnSyncOptions } from 'node:child_process'\n\nimport { formatExecDebugLine } from './exec-debug.js'\nimport { WpHsError, ExitCode } from './errors.js'\nimport { applyExternalCliSpawn } from './resolve-external-cli.js'\nimport type { Logger } from './logger.js'\n\nconst SECRET_PATTERN = /(token|secret|password|pat|key)=/i\n\nexport type RunOptions = {\n cwd: string\n env?: NodeJS.ProcessEnv\n logger?: Logger\n dryRun?: boolean\n timeoutMs?: number\n /** Expected exit code on success (default 0) */\n okCodes?: number[]\n /** Stream child stdout/stderr to the terminal (verbose mode). */\n streamOutput?: boolean\n /** Shorten cwd paths in debug logs. */\n projectRoot?: string\n}\n\nfunction logExec(logger: Logger | undefined, command: string, args: string[], options: RunOptions): void {\n if (!logger) return\n const env = options.env ?? process.env\n logger.debug(\n formatExecDebugLine(command, args, options.cwd, env, options.projectRoot),\n )\n}\n\nexport function runCommand(\n command: string,\n args: string[],\n options: RunOptions,\n): { status: number; stdout: string; stderr: string } {\n const { cwd, env = process.env, logger, dryRun = false, okCodes = [0], streamOutput = false } =\n options\n\n if (dryRun) {\n logger?.info(`[dry-run] ${formatExecDebugLine(command, args, cwd, env, options.projectRoot)}`)\n return { status: 0, stdout: '', stderr: '' }\n }\n\n const resolved = applyExternalCliSpawn(command, args, {\n projectRoot: options.projectRoot,\n cwd,\n })\n\n logExec(logger, resolved.command, resolved.args, options)\n\n if (streamOutput) {\n const result = spawnSync(resolved.command, resolved.args, {\n cwd,\n env,\n encoding: 'utf8',\n stdio: 'inherit',\n shell: resolved.shell,\n })\n const status = result.status ?? 1\n throwOnBadExit(resolved.command, resolved.args, status, '', '', okCodes)\n return { status, stdout: '', stderr: '' }\n }\n\n const spawnOpts: SpawnSyncOptions = {\n cwd,\n env,\n encoding: 'utf8',\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: resolved.shell,\n }\n\n const result = spawnSync(resolved.command, resolved.args, spawnOpts)\n const status = result.status ?? 1\n const stdout = typeof result.stdout === 'string' ? result.stdout : ''\n const stderr = typeof result.stderr === 'string' ? result.stderr : ''\n\n throwOnBadExit(resolved.command, resolved.args, status, stdout, stderr, okCodes)\n\n return { status, stdout, stderr }\n}\n\nexport function runNodeScript(\n scriptPath: string,\n args: string[],\n options: RunOptions,\n): void {\n runCommand(process.execPath, [scriptPath, ...args], options)\n}\n\nfunction throwOnBadExit(\n command: string,\n args: string[],\n status: number,\n stdout: string,\n stderr: string,\n okCodes: number[],\n): void {\n if (okCodes.includes(status)) {\n return\n }\n const detail = stderr.trim() || stdout.trim() || `exit ${status}`\n if (SECRET_PATTERN.test(detail)) {\n throw new WpHsError(`Command failed: ${command}`, {\n exitCode: ExitCode.USER_ERROR,\n remediation: 'Re-run with --verbose for details (secrets are never logged).',\n })\n }\n throw new WpHsError(`Command failed: ${command} ${args.join(' ')}\\n${detail}`, {\n exitCode: ExitCode.USER_ERROR,\n })\n}\n\n/**\n * Non-blocking spawn — keeps the Node event loop alive so @clack spinners animate.\n */\nexport function runCommandAsync(\n command: string,\n args: string[],\n options: RunOptions,\n): Promise<{ status: number; stdout: string; stderr: string }> {\n const { cwd, env = process.env, logger, dryRun = false, okCodes = [0], streamOutput = false } =\n options\n\n if (dryRun) {\n logger?.info(`[dry-run] ${formatExecDebugLine(command, args, cwd, env, options.projectRoot)}`)\n return Promise.resolve({ status: 0, stdout: '', stderr: '' })\n }\n\n const resolved = applyExternalCliSpawn(command, args, {\n projectRoot: options.projectRoot,\n cwd,\n })\n\n logExec(logger, resolved.command, resolved.args, options)\n\n if (streamOutput) {\n return new Promise((resolve, reject) => {\n const child = spawn(resolved.command, resolved.args, {\n cwd,\n env,\n stdio: 'inherit',\n shell: resolved.shell,\n })\n\n child.on('error', (error) => {\n reject(error)\n })\n\n child.on('close', (code) => {\n const status = code ?? 1\n try {\n throwOnBadExit(resolved.command, resolved.args, status, '', '', okCodes)\n resolve({ status, stdout: '', stderr: '' })\n } catch (error) {\n reject(error)\n }\n })\n })\n }\n\n return new Promise((resolve, reject) => {\n const child = spawn(resolved.command, resolved.args, {\n cwd,\n env,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: resolved.shell,\n })\n\n let stdout = ''\n let stderr = ''\n\n child.stdout?.setEncoding('utf8')\n child.stderr?.setEncoding('utf8')\n child.stdout?.on('data', (chunk: string) => {\n stdout += chunk\n })\n child.stderr?.on('data', (chunk: string) => {\n stderr += chunk\n })\n\n child.on('error', (error) => {\n reject(error)\n })\n\n child.on('close', (code) => {\n const status = code ?? 1\n try {\n throwOnBadExit(resolved.command, resolved.args, status, stdout, stderr, okCodes)\n resolve({ status, stdout, stderr })\n } catch (error) {\n reject(error)\n }\n })\n })\n}\n\nexport function runNodeScriptAsync(\n scriptPath: string,\n args: string[],\n options: RunOptions,\n): Promise<void> {\n return runCommandAsync(process.execPath, [scriptPath, ...args], options).then(() => undefined)\n}\n\n/**\n * Spawn a Node script with inherited stdio and forward SIGINT/SIGTERM (wp watch, long-running tools).\n * Unlike spawnSync, the parent event loop stays alive so Ctrl+C works while the child runs.\n */\nexport function runNodeScriptLongRunning(\n scriptPath: string,\n args: string[],\n options: RunOptions,\n): Promise<number> {\n const { cwd, env = process.env, logger, dryRun = false } = options\n\n if (dryRun) {\n logger?.info(\n `[dry-run] ${formatExecDebugLine(process.execPath, [scriptPath, ...args], cwd, env, options.projectRoot)}`,\n )\n return Promise.resolve(0)\n }\n\n return new Promise((resolve, reject) => {\n const child = spawn(process.execPath, [scriptPath, ...args], {\n cwd,\n env,\n stdio: 'inherit',\n })\n\n const forwardSignal = (signal: NodeJS.Signals) => {\n if (!child.killed) {\n child.kill(signal)\n }\n }\n\n process.on('SIGINT', forwardSignal)\n process.on('SIGTERM', forwardSignal)\n\n child.on('error', (error) => {\n process.off('SIGINT', forwardSignal)\n process.off('SIGTERM', forwardSignal)\n reject(error)\n })\n\n child.on('exit', (code, signal) => {\n process.off('SIGINT', forwardSignal)\n process.off('SIGTERM', forwardSignal)\n\n if (signal === 'SIGINT') {\n resolve(130)\n return\n }\n if (signal === 'SIGTERM') {\n resolve(143)\n return\n }\n\n resolve(code ?? 1)\n })\n })\n}\n","import { basename, relative } from 'node:path'\n\nconst SECRET_ENV_KEY =\n /(_KEY|_TOKEN|_SECRET|_PASSWORD|_PAT|AUTH|CREDENTIAL|GITHUB|NPM_|ERASER|LINEAR|AWS_|SSH_)/i\n\nconst RELEVANT_ENV_PREFIX = /^WP_HS_|^WP_/\n\nexport function isSecretEnvKey(key: string): boolean {\n return SECRET_ENV_KEY.test(key)\n}\n\nexport function maskEnvForLog(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const masked: NodeJS.ProcessEnv = {}\n for (const [key, value] of Object.entries(env)) {\n if (value === undefined) continue\n masked[key] = isSecretEnvKey(key) ? '[redacted]' : value\n }\n return masked\n}\n\nexport function formatRelevantEnv(env: NodeJS.ProcessEnv): string | undefined {\n const pairs = Object.entries(env)\n .filter(([key, value]) => value !== undefined && RELEVANT_ENV_PREFIX.test(key))\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, value]) => {\n const shown = isSecretEnvKey(key) ? '[redacted]' : value\n return `${key}=${shown}`\n })\n\n return pairs.length > 0 ? pairs.join(' ') : undefined\n}\n\nfunction shortenScriptPath(scriptPath: string): string {\n const marker = '/scripts/'\n const idx = scriptPath.lastIndexOf(marker)\n if (idx >= 0) {\n return `scripts/${scriptPath.slice(idx + marker.length)}`\n }\n return basename(scriptPath)\n}\n\nexport function formatExecCommand(command: string, args: string[]): string {\n if (command === process.execPath && args.length > 0) {\n const rest = args.slice(1).join(' ')\n return `node ${shortenScriptPath(args[0])}${rest ? ` ${rest}` : ''}`\n }\n return [command, ...args].join(' ')\n}\n\nexport function formatExecCwd(cwd: string, projectRoot?: string): string {\n if (projectRoot) {\n try {\n const rel = relative(projectRoot, cwd)\n if (!rel.startsWith('..')) {\n return rel === '' ? '.' : rel\n }\n } catch {\n // fall through\n }\n }\n const parts = cwd.split('/')\n if (parts.length > 3) {\n return `…/${parts.slice(-2).join('/')}`\n }\n return cwd\n}\n\n/** One-line verbose exec label for developers (no full env dump). */\nexport function formatExecDebugLine(\n command: string,\n args: string[],\n cwd: string,\n env: NodeJS.ProcessEnv,\n projectRoot?: string,\n): string {\n const cmd = formatExecCommand(command, args)\n const cwdLabel = formatExecCwd(cwd, projectRoot)\n const envLabel = formatRelevantEnv(env)\n const parts = [cmd, `cwd=${cwdLabel}`]\n if (envLabel) {\n parts.push(envLabel)\n }\n return parts.join(' ')\n}\n","export const ExitCode = {\n SUCCESS: 0,\n USER_ERROR: 1,\n PREREQUISITE: 2,\n BUILD_FAILED: 3,\n PUBLISH_FAILED: 4,\n AUDIT_FAILED: 5,\n INTERNAL: 10,\n} as const\n\nexport type ExitCodeValue = (typeof ExitCode)[keyof typeof ExitCode]\n\nexport class WpHsError extends Error {\n readonly exitCode: ExitCodeValue\n readonly remediation?: string\n\n constructor(\n message: string,\n options: { exitCode?: ExitCodeValue; remediation?: string; cause?: unknown } = {},\n ) {\n super(message, { cause: options.cause })\n this.name = 'WpHsError'\n this.exitCode = options.exitCode ?? ExitCode.USER_ERROR\n this.remediation = options.remediation\n }\n}\n\nexport function isWpHsError(error: unknown): error is WpHsError {\n return error instanceof WpHsError\n}\n","import { existsSync } from 'node:fs'\nimport { platform } from 'node:os'\nimport { resolve } from 'node:path'\n\nexport type ExternalCliSpawn = {\n command: string\n prefixArgs: string[]\n shell?: boolean\n}\n\nfunction resolveBin(name: string, projectRoot?: string): ExternalCliSpawn | null {\n const roots = projectRoot ? [projectRoot] : []\n if (!roots.includes(process.cwd())) {\n roots.push(process.cwd())\n }\n\n for (const root of roots) {\n const binDir = resolve(root, 'node_modules', '.bin')\n if (platform() === 'win32') {\n const cmd = resolve(binDir, `${name}.cmd`)\n if (existsSync(cmd)) {\n return { command: cmd, prefixArgs: [] }\n }\n }\n const shim = resolve(binDir, name)\n if (existsSync(shim)) {\n return { command: shim, prefixArgs: [] }\n }\n }\n\n return null\n}\n\n/** Resolve HubSpot CLI (`hs`) for cross-platform spawn (Windows `.cmd` shims). */\nexport function resolveHubSpotCliSpawn(projectRoot?: string): ExternalCliSpawn {\n const local = resolveBin('hs', projectRoot)\n if (local) {\n return local\n }\n\n if (platform() === 'win32') {\n return { command: 'hs', prefixArgs: [], shell: true }\n }\n\n return { command: 'hs', prefixArgs: [] }\n}\n\n/** Resolve consumer `wp` binary for watch rebuild subprocesses. */\nexport function resolveWpBinSpawn(projectRoot: string, kitCliPath?: string): ExternalCliSpawn {\n if (kitCliPath && existsSync(kitCliPath)) {\n return { command: process.execPath, prefixArgs: [kitCliPath] }\n }\n\n const local = resolveBin('wp', projectRoot)\n if (local) {\n return local\n }\n\n if (platform() === 'win32') {\n return { command: 'wp', prefixArgs: [], shell: true }\n }\n\n return { command: 'wp', prefixArgs: [] }\n}\n\nexport function applyExternalCliSpawn(\n command: string,\n args: string[],\n options: { projectRoot?: string; cwd?: string },\n): { command: string; args: string[]; shell?: boolean } {\n if (command === 'hs') {\n const spawn = resolveHubSpotCliSpawn(options.projectRoot ?? options.cwd)\n return {\n command: spawn.command,\n args: [...spawn.prefixArgs, ...args],\n shell: spawn.shell,\n }\n }\n\n return { command, args }\n}\n"],"mappings":"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","names":["spawn","result","status","resolve"]}
@@ -133,4 +133,4 @@ export {
133
133
  getViteConfigPath,
134
134
  createViteConfig
135
135
  };
136
- //# sourceMappingURL=chunk-S2YJDWZU.js.map
136
+ //# sourceMappingURL=chunk-NWBK3XBZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/paths.ts","../src/lib/config-files.ts","../src/lib/errors.ts","../src/vite/paths.ts","../src/vite/create-vite-config.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport { findProjectRoot as findConfigProjectRoot } from './config-files.js'\nimport { WpHsError, ExitCode } from './errors.js'\n\nconst KIT_PACKAGE_NAME = '@woodsportal/hubspot-kit'\n\nexport { KIT_PACKAGE_NAME }\n\nfunction resolveKitRoot(): string {\n let dir = dirname(fileURLToPath(import.meta.url))\n while (true) {\n const pkgPath = resolve(dir, 'package.json')\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as { name?: string }\n if (pkg.name === KIT_PACKAGE_NAME) {\n return dir\n }\n } catch {\n // keep walking\n }\n }\n const parent = dirname(dir)\n if (parent === dir) {\n break\n }\n dir = parent\n }\n\n throw new WpHsError('Could not resolve @woodsportal/hubspot-kit package root.', {\n exitCode: ExitCode.INTERNAL,\n })\n}\n\nconst kitRoot = resolveKitRoot()\n\nexport function getKitRoot(): string {\n return kitRoot\n}\n\nexport function findProjectRoot(from = process.cwd()): string {\n const resolved = findConfigProjectRoot(from)\n\n if (!resolved) {\n throw new WpHsError('Could not find woodscli.json in this directory or any parent.', {\n exitCode: ExitCode.USER_ERROR,\n remediation: 'Run wp init, or pass --project <path>. Legacy config: wp migrate --yes.',\n })\n }\n return resolved\n}\n\nexport function kitPath(...segments: string[]): string {\n return resolve(kitRoot, ...segments)\n}\n\nexport { resolveProjectConfig, WOODSCLI_CONFIG_FILE, LEGACY_WOODSPORTAL_HS_FILE } from './config-files.js'\n","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\n/** Canonical WoodsCLI project config — the only supported filename. */\nexport const WOODSCLI_CONFIG_FILE = 'woodscli.json'\n\n/** Removed in v1.0.2+ — detected only for migrate/doctor messaging. */\nexport const LEGACY_WOODSPORTAL_HS_FILE = 'woodsportal.hs.json'\n\nexport type ResolvedProjectConfig = {\n path: string\n fileName: typeof WOODSCLI_CONFIG_FILE\n}\n\nfunction envConfigPath(projectRoot: string): string | null {\n const fromEnv = process.env.WOODSCLI_CONFIG?.trim() || process.env.WP_HS_CONFIG?.trim() || null\n if (!fromEnv) return null\n return resolve(projectRoot, fromEnv)\n}\n\nexport function legacyConfigPath(projectRoot: string): string {\n return resolve(projectRoot, LEGACY_WOODSPORTAL_HS_FILE)\n}\n\nexport function woodscliConfigPath(projectRoot: string): string {\n return resolve(projectRoot, WOODSCLI_CONFIG_FILE)\n}\n\n/** @returns null | 'legacy-only' | 'duplicate' */\nexport function legacyConfigConflict(projectRoot: string): 'legacy-only' | 'duplicate' | null {\n const hasWoodscli = existsSync(woodscliConfigPath(projectRoot))\n const hasLegacy = existsSync(legacyConfigPath(projectRoot))\n if (hasLegacy && hasWoodscli) return 'duplicate'\n if (hasLegacy && !hasWoodscli) return 'legacy-only'\n return null\n}\n\n/**\n * Resolve the active project config file (`woodscli.json` only).\n */\nexport function resolveProjectConfig(projectRoot: string): ResolvedProjectConfig | null {\n const envPath = envConfigPath(projectRoot)\n if (envPath) {\n if (!existsSync(envPath)) return null\n return { path: envPath, fileName: WOODSCLI_CONFIG_FILE }\n }\n\n const path = woodscliConfigPath(projectRoot)\n if (existsSync(path)) {\n return { path, fileName: WOODSCLI_CONFIG_FILE }\n }\n\n return null\n}\n\nexport function findProjectRoot(from = process.cwd()): string | null {\n if (process.env.WP_HS_PROJECT_ROOT?.trim()) {\n return resolve(process.env.WP_HS_PROJECT_ROOT.trim())\n }\n\n let dir = resolve(from)\n while (true) {\n if (resolveProjectConfig(dir)) {\n return dir\n }\n const parent = resolve(dir, '..')\n if (parent === dir) {\n return null\n }\n dir = parent\n }\n}\n","export const ExitCode = {\n SUCCESS: 0,\n USER_ERROR: 1,\n PREREQUISITE: 2,\n BUILD_FAILED: 3,\n PUBLISH_FAILED: 4,\n AUDIT_FAILED: 5,\n INTERNAL: 10,\n} as const\n\nexport type ExitCodeValue = (typeof ExitCode)[keyof typeof ExitCode]\n\nexport class WpHsError extends Error {\n readonly exitCode: ExitCodeValue\n readonly remediation?: string\n\n constructor(\n message: string,\n options: { exitCode?: ExitCodeValue; remediation?: string; cause?: unknown } = {},\n ) {\n super(message, { cause: options.cause })\n this.name = 'WpHsError'\n this.exitCode = options.exitCode ?? ExitCode.USER_ERROR\n this.remediation = options.remediation\n }\n}\n\nexport function isWpHsError(error: unknown): error is WpHsError {\n return error instanceof WpHsError\n}\n","import { kitPath } from '../lib/paths.js'\n\nexport type VitePreset = 'dev' | 'hubspot' | 'cdn-vendor' | 'cdn-app' | 'cdn-esm'\n\nexport function getViteConfigPath(preset: VitePreset): string {\n return kitPath('vite', `vite.config.${preset}.mjs`)\n}\n","import { getViteConfigPath, type VitePreset } from './paths.js'\n\nexport type CreateViteConfigOptions = {\n /** Vite preset shipped with @woodsportal/hubspot-kit */\n preset: VitePreset\n /** Consumer project root (sets WP_HS_PROJECT_ROOT for kit scripts) */\n projectRoot?: string\n}\n\n/**\n * Returns the absolute path to a kit Vite config preset.\n * Consumer repos typically re-export: `export { default } from '@woodsportal/hubspot-kit/vite/vite.config.hubspot.mjs'`\n * or use this helper in a thin wrapper config.\n */\nexport function createViteConfig(\n presetOrOptions: VitePreset | CreateViteConfigOptions,\n): string {\n const options: CreateViteConfigOptions =\n typeof presetOrOptions === 'string' ? { preset: presetOrOptions } : presetOrOptions\n\n if (options.projectRoot?.trim()) {\n process.env.WP_HS_PROJECT_ROOT = options.projectRoot.trim()\n }\n\n return getViteConfigPath(options.preset)\n}\n"],"mappings":"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","names":["existsSync","resolve","resolve","existsSync","findProjectRoot"]}