studiocms 0.1.0-beta.10

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 (582) hide show
  1. package/CHANGELOG.md +501 -0
  2. package/LICENSE +21 -0
  3. package/README.md +59 -0
  4. package/custom-renderers/index.ts +4 -0
  5. package/custom-renderers/markdocRenderers/markdocReact-components/MarkDocReactRenderer.tsx +8 -0
  6. package/custom-renderers/markdocRenderers/markdocReact-components/MarkDocReactWrapper.astro +13 -0
  7. package/custom-renderers/markdocRenderers/markdocReact.ts +56 -0
  8. package/dist/auth.d.js +0 -0
  9. package/dist/auth.d.ts +397 -0
  10. package/dist/cli/cmds/get-turso.d.ts +1 -0
  11. package/dist/cli/cmds/get-turso.js +10 -0
  12. package/dist/cli/cmds/init/index.d.ts +4 -0
  13. package/dist/cli/cmds/init/index.js +52 -0
  14. package/dist/cli/cmds/init/steps/data/studiocmsEnv.d.ts +3 -0
  15. package/dist/cli/cmds/init/steps/data/studiocmsEnv.js +71 -0
  16. package/dist/cli/cmds/init/steps/envBuilder.d.ts +21 -0
  17. package/dist/cli/cmds/init/steps/envBuilder.js +368 -0
  18. package/dist/cli/cmds/init/steps/nextSteps.d.ts +2 -0
  19. package/dist/cli/cmds/init/steps/nextSteps.js +38 -0
  20. package/dist/cli/cmds/init.d.ts +1 -0
  21. package/dist/cli/cmds/init.js +4 -0
  22. package/dist/cli/index.d.ts +1 -0
  23. package/dist/cli/index.js +9 -0
  24. package/dist/cli/lib/commander.d.ts +39 -0
  25. package/dist/cli/lib/commander.js +87 -0
  26. package/dist/cli/lib/context.d.ts +28 -0
  27. package/dist/cli/lib/context.js +55 -0
  28. package/dist/cli/lib/pathUtil.d.ts +5 -0
  29. package/dist/cli/lib/pathUtil.js +14 -0
  30. package/dist/cli/lib/runExternal.d.ts +20 -0
  31. package/dist/cli/lib/runExternal.js +40 -0
  32. package/dist/cli/lib/seasonal.d.ts +5 -0
  33. package/dist/cli/lib/seasonal.js +88 -0
  34. package/dist/cli/lib/utils.d.ts +55 -0
  35. package/dist/cli/lib/utils.js +310 -0
  36. package/dist/cli/shared/intro.d.ts +2 -0
  37. package/dist/cli/shared/intro.js +24 -0
  38. package/dist/components/DefaultEditor.astro +138 -0
  39. package/dist/components/FormattedDate.astro +12 -0
  40. package/dist/components/Generator.astro +7 -0
  41. package/dist/components/Renderer.astro +13 -0
  42. package/dist/components/auth/OAuthButton.astro +21 -0
  43. package/dist/components/auth/OAuthButtonStack.astro +36 -0
  44. package/dist/components/auth/StaticAuthCheck.astro +20 -0
  45. package/dist/components/auth/StudioCMSLogoSVG.astro +13 -0
  46. package/dist/components/auth/oAuthButtonProviders.d.ts +8 -0
  47. package/dist/components/auth/oAuthButtonProviders.js +35 -0
  48. package/dist/components/dashboard/AstroCodeDiffsScript.astro +25 -0
  49. package/dist/components/dashboard/BaseHead.astro +41 -0
  50. package/dist/components/dashboard/Code.astro +23 -0
  51. package/dist/components/dashboard/DashboardPageHeader.astro +77 -0
  52. package/dist/components/dashboard/DoubleSidebar.astro +26 -0
  53. package/dist/components/dashboard/Footer.astro +16 -0
  54. package/dist/components/dashboard/MainSidebarContent.astro +317 -0
  55. package/dist/components/dashboard/PageHeader.astro +52 -0
  56. package/dist/components/dashboard/SidebarLink.astro +61 -0
  57. package/dist/components/dashboard/SidebarModals.astro +6 -0
  58. package/dist/components/dashboard/SidebarPluginLink.astro +45 -0
  59. package/dist/components/dashboard/SingleSidebar.astro +23 -0
  60. package/dist/components/dashboard/StudioCMSLogo.astro +12 -0
  61. package/dist/components/dashboard/ThemeManager.astro +53 -0
  62. package/dist/components/dashboard/component-scripts/TinyMDE.astro +6 -0
  63. package/dist/components/dashboard/component-scripts/dateTimeListener.d.ts +1 -0
  64. package/dist/components/dashboard/component-scripts/dateTimeListener.js +14 -0
  65. package/dist/components/dashboard/component-scripts/dateWithTimeAndZone.d.ts +1 -0
  66. package/dist/components/dashboard/component-scripts/dateWithTimeAndZone.js +12 -0
  67. package/dist/components/dashboard/component-scripts/makeClientRoutable.d.ts +1 -0
  68. package/dist/components/dashboard/component-scripts/makeClientRoutable.js +9 -0
  69. package/dist/components/dashboard/component-scripts/timeAgo.d.ts +1 -0
  70. package/dist/components/dashboard/component-scripts/timeAgo.js +21 -0
  71. package/dist/components/dashboard/islands/LoginChecker.astro +52 -0
  72. package/dist/components/dashboard/islands/configuration/ConfigForm.astro +317 -0
  73. package/dist/components/dashboard/islands/configuration/LightVsDark.astro +67 -0
  74. package/dist/components/dashboard/islands/content-mgmt/CreateFolder.astro +118 -0
  75. package/dist/components/dashboard/islands/content-mgmt/CreatePage.astro +380 -0
  76. package/dist/components/dashboard/islands/content-mgmt/EditFolder.astro +138 -0
  77. package/dist/components/dashboard/islands/content-mgmt/EditPage.astro +432 -0
  78. package/dist/components/dashboard/islands/content-mgmt/InnerSidebarElement.astro +299 -0
  79. package/dist/components/dashboard/islands/content-mgmt/PageHeader.astro +455 -0
  80. package/dist/components/dashboard/islands/content-mgmt/PageList.astro +49 -0
  81. package/dist/components/dashboard/islands/content-mgmt/PluginFields.astro +29 -0
  82. package/dist/components/dashboard/islands/content-mgmt/TreeRenderer.astro +75 -0
  83. package/dist/components/dashboard/islands/content-mgmt/TreeSidebarFolder.astro +53 -0
  84. package/dist/components/dashboard/islands/content-mgmt/TreeSidebarLink.astro +51 -0
  85. package/dist/components/dashboard/islands/content-mgmt/runtime.d.ts +10 -0
  86. package/dist/components/dashboard/islands/content-mgmt/runtime.js +33 -0
  87. package/dist/components/dashboard/islands/content-mgmt/shared.d.ts +27 -0
  88. package/dist/components/dashboard/islands/content-mgmt/shared.js +31 -0
  89. package/dist/components/dashboard/islands/dashboard/DashboardGrid.astro +39 -0
  90. package/dist/components/dashboard/islands/dashboard/DashboardGridItem.astro +34 -0
  91. package/dist/components/dashboard/islands/dashboard/Test.astro +5 -0
  92. package/dist/components/dashboard/islands/dashboard/UserName.astro +6 -0
  93. package/dist/components/dashboard/islands/dashboard/shared.d.ts +2 -0
  94. package/dist/components/dashboard/islands/dashboard/shared.js +0 -0
  95. package/dist/components/dashboard/islands/plugins/SettingsRenderer.astro +29 -0
  96. package/dist/components/dashboard/islands/profile/APITokens.astro +306 -0
  97. package/dist/components/dashboard/islands/profile/BasicInfo.astro +140 -0
  98. package/dist/components/dashboard/islands/profile/BasicInfoFallback.astro +43 -0
  99. package/dist/components/dashboard/islands/profile/SocialSignin.astro +181 -0
  100. package/dist/components/dashboard/islands/profile/SocialSigninFallback.astro +83 -0
  101. package/dist/components/dashboard/islands/profile/UpdatePassword.astro +166 -0
  102. package/dist/components/dashboard/islands/profile/UpdatePasswordFallback.astro +47 -0
  103. package/dist/components/dashboard/islands/profile/oAuthButtonProviders.d.ts +8 -0
  104. package/dist/components/dashboard/islands/profile/oAuthButtonProviders.js +35 -0
  105. package/dist/components/dashboard/islands/sidebar/UserAccount.astro +23 -0
  106. package/dist/components/dashboard/islands/sidebar/VersionCheck.astro +127 -0
  107. package/dist/components/dashboard/islands/sidebar/VersionCheckChangelog.astro +107 -0
  108. package/dist/components/dashboard/islands/user-mgmt/InnerSidebarElement.astro +348 -0
  109. package/dist/components/dashboard/islands/user-mgmt/RankCheck.astro +49 -0
  110. package/dist/components/dashboard/islands/user-mgmt/SocialSignin.astro +109 -0
  111. package/dist/components/dashboard/islands/user-mgmt/UserListItem.astro +60 -0
  112. package/dist/components/dashboard/sidebar-modals/UserManagementModals.astro +103 -0
  113. package/dist/components/dashboard/sidebar-modals/VersionModal.astro +267 -0
  114. package/dist/components/dashboard/sidebarConfig.d.ts +32 -0
  115. package/dist/components/dashboard/sidebarConfig.js +88 -0
  116. package/dist/components/default-grid-items/Recently-created-pages.astro +91 -0
  117. package/dist/components/default-grid-items/Recently-signed-up.astro +71 -0
  118. package/dist/components/default-grid-items/Recently-updated-pages.astro +96 -0
  119. package/dist/components/default-grid-items/Totals.astro +107 -0
  120. package/dist/components/default-grid-items/utils.d.ts +17 -0
  121. package/dist/components/default-grid-items/utils.js +26 -0
  122. package/dist/components/image/CustomImage.astro +90 -0
  123. package/dist/components/user-quick-tools.d.ts +42 -0
  124. package/dist/components/user-quick-tools.js +312 -0
  125. package/dist/config.d.ts +3 -0
  126. package/dist/config.js +4 -0
  127. package/dist/consts.d.ts +61 -0
  128. package/dist/consts.js +39 -0
  129. package/dist/core.d.js +0 -0
  130. package/dist/core.d.ts +226 -0
  131. package/dist/db/config.d.ts +4 -0
  132. package/dist/db/config.js +6 -0
  133. package/dist/db/tables.js +168 -0
  134. package/dist/errors.d.ts +19 -0
  135. package/dist/errors.js +11 -0
  136. package/dist/index.d.ts +152 -0
  137. package/dist/index.js +1179 -0
  138. package/dist/layouts/auth/AuthLayout.astro +74 -0
  139. package/dist/layouts/auth/FallbackCanvas.astro +123 -0
  140. package/dist/layouts/auth/ThemeManager.astro +53 -0
  141. package/dist/layouts/auth/ThreeCanvasLoader.astro +18 -0
  142. package/dist/layouts/dashboard/Layout.astro +64 -0
  143. package/dist/lib/auth/encryption.d.ts +30 -0
  144. package/dist/lib/auth/encryption.js +39 -0
  145. package/dist/lib/auth/password.d.ts +27 -0
  146. package/dist/lib/auth/password.js +42 -0
  147. package/dist/lib/auth/rate-limit.d.ts +136 -0
  148. package/dist/lib/auth/rate-limit.js +214 -0
  149. package/dist/lib/auth/session.d.ts +85 -0
  150. package/dist/lib/auth/session.js +93 -0
  151. package/dist/lib/auth/types.d.ts +83 -0
  152. package/dist/lib/auth/types.js +0 -0
  153. package/dist/lib/auth/user.d.ts +148 -0
  154. package/dist/lib/auth/user.js +133 -0
  155. package/dist/lib/dashboardGrid.d.ts +119 -0
  156. package/dist/lib/dashboardGrid.js +0 -0
  157. package/dist/lib/dynamic-sitemap/index.d.ts +42 -0
  158. package/dist/lib/dynamic-sitemap/index.js +45 -0
  159. package/dist/lib/dynamic-sitemap/sitemap-index.xml.d.ts +8 -0
  160. package/dist/lib/dynamic-sitemap/sitemap-index.xml.js +20 -0
  161. package/dist/lib/dynamic-sitemap/sitemap-index.xml.ts +45 -0
  162. package/dist/lib/head.d.ts +9 -0
  163. package/dist/lib/head.js +65 -0
  164. package/dist/lib/headDefaults.d.ts +18 -0
  165. package/dist/lib/headDefaults.js +75 -0
  166. package/dist/lib/i18n/LanguageSelector.astro +114 -0
  167. package/dist/lib/i18n/client.d.ts +591 -0
  168. package/dist/lib/i18n/client.js +83 -0
  169. package/dist/lib/i18n/config.d.ts +16 -0
  170. package/dist/lib/i18n/config.js +8 -0
  171. package/dist/lib/i18n/index.d.ts +578 -0
  172. package/dist/lib/i18n/index.js +63 -0
  173. package/dist/lib/i18n/translations/de.json +64 -0
  174. package/dist/lib/i18n/translations/en-us.json +238 -0
  175. package/dist/lib/i18n/translations/es.json +64 -0
  176. package/dist/lib/i18n/translations/fr.json +64 -0
  177. package/dist/lib/index.d.ts +7 -0
  178. package/dist/lib/index.js +7 -0
  179. package/dist/lib/jsonUtils.d.ts +2 -0
  180. package/dist/lib/jsonUtils.js +11 -0
  181. package/dist/lib/makeAPIRoute.d.ts +45 -0
  182. package/dist/lib/makeAPIRoute.js +16 -0
  183. package/dist/lib/makePublicRoute.d.ts +7 -0
  184. package/dist/lib/makePublicRoute.js +6 -0
  185. package/dist/lib/pathGenerators.d.ts +20 -0
  186. package/dist/lib/pathGenerators.js +66 -0
  187. package/dist/lib/plugins/dashboard-pages.d.ts +71 -0
  188. package/dist/lib/plugins/dashboard-pages.js +11 -0
  189. package/dist/lib/plugins/frontend-navigation.d.ts +18 -0
  190. package/dist/lib/plugins/frontend-navigation.js +39 -0
  191. package/dist/lib/plugins/index.d.ts +2 -0
  192. package/dist/lib/plugins/index.js +2 -0
  193. package/dist/lib/removeLeadingTrailingSlashes.d.ts +7 -0
  194. package/dist/lib/removeLeadingTrailingSlashes.js +13 -0
  195. package/dist/lib/renderer/astro-remark.d.ts +13 -0
  196. package/dist/lib/renderer/astro-remark.js +11 -0
  197. package/dist/lib/renderer/contentRenderer.d.ts +13 -0
  198. package/dist/lib/renderer/contentRenderer.js +31 -0
  199. package/dist/lib/renderer/errors.d.ts +5 -0
  200. package/dist/lib/renderer/errors.js +25 -0
  201. package/dist/lib/renderer/markdoc-renderers/markdocHTML.d.ts +3 -0
  202. package/dist/lib/renderer/markdoc-renderers/markdocHTML.js +14 -0
  203. package/dist/lib/renderer/markdoc-renderers/markdocReactStatic.d.ts +3 -0
  204. package/dist/lib/renderer/markdoc-renderers/markdocReactStatic.js +14 -0
  205. package/dist/lib/renderer/markdoc.d.ts +11 -0
  206. package/dist/lib/renderer/markdoc.js +28 -0
  207. package/dist/lib/renderer/mdx.d.ts +10 -0
  208. package/dist/lib/renderer/mdx.js +37 -0
  209. package/dist/lib/renderer/runtime.d.ts +8 -0
  210. package/dist/lib/renderer/runtime.js +30 -0
  211. package/dist/lib/renderer/shared.d.ts +15 -0
  212. package/dist/lib/renderer/shared.js +13 -0
  213. package/dist/lib/renderer/studiocms.d.ts +11 -0
  214. package/dist/lib/renderer/studiocms.js +22 -0
  215. package/dist/lib/renderer/types.d.ts +12 -0
  216. package/dist/lib/renderer/types.js +0 -0
  217. package/dist/lib/robots/core.d.ts +24 -0
  218. package/dist/lib/robots/core.js +187 -0
  219. package/dist/lib/robots/index.d.ts +11 -0
  220. package/dist/lib/robots/index.js +47 -0
  221. package/dist/lib/robots/types.d.ts +185 -0
  222. package/dist/lib/robots/types.js +0 -0
  223. package/dist/lib/robots/utils.d.ts +22 -0
  224. package/dist/lib/robots/utils.js +22 -0
  225. package/dist/lib/routeMap.d.ts +257 -0
  226. package/dist/lib/routeMap.js +249 -0
  227. package/dist/lib/urlGen.d.ts +11 -0
  228. package/dist/lib/urlGen.js +26 -0
  229. package/dist/lib/webVitals/checkForWebVitalsPlugin.d.ts +18 -0
  230. package/dist/lib/webVitals/checkForWebVitalsPlugin.js +82 -0
  231. package/dist/lib/webVitals/consts.d.ts +240 -0
  232. package/dist/lib/webVitals/consts.js +40 -0
  233. package/dist/lib/webVitals/dashboard-grid-items/CoreVitals.astro +66 -0
  234. package/dist/lib/webVitals/dashboard-grid-items/MetricCard.astro +24 -0
  235. package/dist/lib/webVitals/dashboard-grid-items/SummaryCard.astro +56 -0
  236. package/dist/lib/webVitals/dashboard-grid-items/metric.css +103 -0
  237. package/dist/lib/webVitals/dashboard-grid-items/shared.d.ts +29 -0
  238. package/dist/lib/webVitals/dashboard-grid-items/shared.js +35 -0
  239. package/dist/lib/webVitals/pages/analytics/body.astro +186 -0
  240. package/dist/lib/webVitals/pages/analytics/header.astro +42 -0
  241. package/dist/lib/webVitals/schemas.d.ts +78 -0
  242. package/dist/lib/webVitals/schemas.js +37 -0
  243. package/dist/lib/webVitals/types.d.ts +156 -0
  244. package/dist/lib/webVitals/types.js +0 -0
  245. package/dist/lib/webVitals/utils/buildDataObject.d.ts +8 -0
  246. package/dist/lib/webVitals/utils/buildDataObject.js +28 -0
  247. package/dist/lib/webVitals/utils/buildPageRouteDataObject.d.ts +15 -0
  248. package/dist/lib/webVitals/utils/buildPageRouteDataObject.js +70 -0
  249. package/dist/lib/webVitals/utils/buildPerPageDataObject.d.ts +23 -0
  250. package/dist/lib/webVitals/utils/buildPerPageDataObject.js +209 -0
  251. package/dist/lib/webVitals/utils/checkDate.d.ts +5 -0
  252. package/dist/lib/webVitals/utils/checkDate.js +19 -0
  253. package/dist/lib/webVitals/utils/webVitalsUtils.d.ts +24 -0
  254. package/dist/lib/webVitals/utils/webVitalsUtils.js +234 -0
  255. package/dist/lib/webVitals/webVital.d.ts +20 -0
  256. package/dist/lib/webVitals/webVital.js +40 -0
  257. package/dist/lib/webVitals/webVitalsRouteSummary.d.ts +19 -0
  258. package/dist/lib/webVitals/webVitalsRouteSummary.js +59 -0
  259. package/dist/lib/webVitals/webVitalsSummary.d.ts +19 -0
  260. package/dist/lib/webVitals/webVitalsSummary.js +49 -0
  261. package/dist/plugins.d.ts +2 -0
  262. package/dist/plugins.js +6 -0
  263. package/dist/renderer.d.js +0 -0
  264. package/dist/renderer.d.ts +23 -0
  265. package/dist/routes/api/render.astro +25 -0
  266. package/dist/routes/auth/api/auth0/callback.d.ts +4 -0
  267. package/dist/routes/auth/api/auth0/callback.js +117 -0
  268. package/dist/routes/auth/api/auth0/index.d.ts +4 -0
  269. package/dist/routes/auth/api/auth0/index.js +36 -0
  270. package/dist/routes/auth/api/auth0/shared.d.ts +13 -0
  271. package/dist/routes/auth/api/auth0/shared.js +24 -0
  272. package/dist/routes/auth/api/discord/callback.d.ts +4 -0
  273. package/dist/routes/auth/api/discord/callback.js +112 -0
  274. package/dist/routes/auth/api/discord/index.d.ts +4 -0
  275. package/dist/routes/auth/api/discord/index.js +36 -0
  276. package/dist/routes/auth/api/discord/shared.d.ts +12 -0
  277. package/dist/routes/auth/api/discord/shared.js +17 -0
  278. package/dist/routes/auth/api/github/callback.d.ts +4 -0
  279. package/dist/routes/auth/api/github/callback.js +112 -0
  280. package/dist/routes/auth/api/github/index.d.ts +4 -0
  281. package/dist/routes/auth/api/github/index.js +36 -0
  282. package/dist/routes/auth/api/github/shared.d.ts +13 -0
  283. package/dist/routes/auth/api/github/shared.js +14 -0
  284. package/dist/routes/auth/api/google/callback.d.ts +4 -0
  285. package/dist/routes/auth/api/google/callback.js +115 -0
  286. package/dist/routes/auth/api/google/index.d.ts +4 -0
  287. package/dist/routes/auth/api/google/index.js +38 -0
  288. package/dist/routes/auth/api/google/shared.d.ts +12 -0
  289. package/dist/routes/auth/api/google/shared.js +19 -0
  290. package/dist/routes/auth/api/login.d.ts +4 -0
  291. package/dist/routes/auth/api/login.js +46 -0
  292. package/dist/routes/auth/api/logout.d.ts +5 -0
  293. package/dist/routes/auth/api/logout.js +55 -0
  294. package/dist/routes/auth/api/register.d.ts +4 -0
  295. package/dist/routes/auth/api/register.js +64 -0
  296. package/dist/routes/auth/api/shared.d.ts +2 -0
  297. package/dist/routes/auth/api/shared.js +21 -0
  298. package/dist/routes/auth/login.astro +118 -0
  299. package/dist/routes/auth/logout.astro +28 -0
  300. package/dist/routes/auth/signup.astro +124 -0
  301. package/dist/routes/dashboard/[...pluginPage].astro +88 -0
  302. package/dist/routes/dashboard/configuration.astro +61 -0
  303. package/dist/routes/dashboard/content-management/createfolder.astro +83 -0
  304. package/dist/routes/dashboard/content-management/createpage.astro +86 -0
  305. package/dist/routes/dashboard/content-management/diff.astro +135 -0
  306. package/dist/routes/dashboard/content-management/editfolder.astro +67 -0
  307. package/dist/routes/dashboard/content-management/editpage.astro +71 -0
  308. package/dist/routes/dashboard/content-management/index.astro +91 -0
  309. package/dist/routes/dashboard/index.astro +56 -0
  310. package/dist/routes/dashboard/password-reset.astro +206 -0
  311. package/dist/routes/dashboard/plugins/[plugin].astro +104 -0
  312. package/dist/routes/dashboard/profile.astro +87 -0
  313. package/dist/routes/dashboard/studiocms_api/dashboard/api-tokens.d.ts +5 -0
  314. package/dist/routes/dashboard/studiocms_api/dashboard/api-tokens.js +90 -0
  315. package/dist/routes/dashboard/studiocms_api/dashboard/config.d.ts +4 -0
  316. package/dist/routes/dashboard/studiocms_api/dashboard/config.js +63 -0
  317. package/dist/routes/dashboard/studiocms_api/dashboard/content/folder.d.ts +6 -0
  318. package/dist/routes/dashboard/studiocms_api/dashboard/content/folder.js +121 -0
  319. package/dist/routes/dashboard/studiocms_api/dashboard/content/page.d.ts +6 -0
  320. package/dist/routes/dashboard/studiocms_api/dashboard/content/page.js +258 -0
  321. package/dist/routes/dashboard/studiocms_api/dashboard/create-reset-link.d.ts +4 -0
  322. package/dist/routes/dashboard/studiocms_api/dashboard/create-reset-link.js +59 -0
  323. package/dist/routes/dashboard/studiocms_api/dashboard/create-user-invite.d.ts +4 -0
  324. package/dist/routes/dashboard/studiocms_api/dashboard/create-user-invite.js +105 -0
  325. package/dist/routes/dashboard/studiocms_api/dashboard/create-user.d.ts +4 -0
  326. package/dist/routes/dashboard/studiocms_api/dashboard/create-user.js +100 -0
  327. package/dist/routes/dashboard/studiocms_api/dashboard/partials/Editor.astro +61 -0
  328. package/dist/routes/dashboard/studiocms_api/dashboard/partials/LiveRender.astro +30 -0
  329. package/dist/routes/dashboard/studiocms_api/dashboard/partials/UserListItems.astro +39 -0
  330. package/dist/routes/dashboard/studiocms_api/dashboard/plugins/[plugin].d.ts +2 -0
  331. package/dist/routes/dashboard/studiocms_api/dashboard/plugins/[plugin].js +32 -0
  332. package/dist/routes/dashboard/studiocms_api/dashboard/profile.d.ts +4 -0
  333. package/dist/routes/dashboard/studiocms_api/dashboard/profile.js +130 -0
  334. package/dist/routes/dashboard/studiocms_api/dashboard/reset-password.d.ts +4 -0
  335. package/dist/routes/dashboard/studiocms_api/dashboard/reset-password.js +105 -0
  336. package/dist/routes/dashboard/studiocms_api/dashboard/search-list.d.ts +4 -0
  337. package/dist/routes/dashboard/studiocms_api/dashboard/search-list.js +55 -0
  338. package/dist/routes/dashboard/studiocms_api/dashboard/users.d.ts +5 -0
  339. package/dist/routes/dashboard/studiocms_api/dashboard/users.js +92 -0
  340. package/dist/routes/dashboard/studiocms_api/dashboard/verify-session.d.ts +2 -0
  341. package/dist/routes/dashboard/studiocms_api/dashboard/verify-session.js +72 -0
  342. package/dist/routes/dashboard/user-management/edit.astro +631 -0
  343. package/dist/routes/dashboard/user-management/index.astro +103 -0
  344. package/dist/routes/error-pages/404.astro +66 -0
  345. package/dist/routes/firstTimeSetupRoutes/1-start.astro +253 -0
  346. package/dist/routes/firstTimeSetupRoutes/2-next.astro +208 -0
  347. package/dist/routes/firstTimeSetupRoutes/3-done.astro +95 -0
  348. package/dist/routes/firstTimeSetupRoutes/api/step-1.d.ts +2 -0
  349. package/dist/routes/firstTimeSetupRoutes/api/step-1.js +126 -0
  350. package/dist/routes/firstTimeSetupRoutes/api/step-2.d.ts +2 -0
  351. package/dist/routes/firstTimeSetupRoutes/api/step-2.js +110 -0
  352. package/dist/routes/firstTimeSetupRoutes/components/Layout.astro +41 -0
  353. package/dist/routes/firstTimeSetupRoutes/components/PageHeader.astro +60 -0
  354. package/dist/routes/firstTimeSetupRoutes/components/TabItem.astro +44 -0
  355. package/dist/routes/firstTimeSetupRoutes/components/Tabs.astro +170 -0
  356. package/dist/routes/firstTimeSetupRoutes/snippets/opt1-astro.config.diff +14 -0
  357. package/dist/routes/firstTimeSetupRoutes/snippets/opt2-astro.config.diff +9 -0
  358. package/dist/routes/firstTimeSetupRoutes/snippets/opt2-studiocms.config.diff +5 -0
  359. package/dist/routes/rest/utils/auth-token.d.ts +17 -0
  360. package/dist/routes/rest/utils/auth-token.js +31 -0
  361. package/dist/routes/rest/v1/folders/[id].d.ts +6 -0
  362. package/dist/routes/rest/v1/folders/[id].js +106 -0
  363. package/dist/routes/rest/v1/folders/index.d.ts +5 -0
  364. package/dist/routes/rest/v1/folders/index.js +88 -0
  365. package/dist/routes/rest/v1/pages/[id]/history/[diffid].d.ts +4 -0
  366. package/dist/routes/rest/v1/pages/[id]/history/[diffid].js +55 -0
  367. package/dist/routes/rest/v1/pages/[id]/history/index.d.ts +4 -0
  368. package/dist/routes/rest/v1/pages/[id]/history/index.js +61 -0
  369. package/dist/routes/rest/v1/pages/[id]/index.d.ts +6 -0
  370. package/dist/routes/rest/v1/pages/[id]/index.js +165 -0
  371. package/dist/routes/rest/v1/pages/index.d.ts +5 -0
  372. package/dist/routes/rest/v1/pages/index.js +113 -0
  373. package/dist/routes/rest/v1/public/folders/[id].d.ts +4 -0
  374. package/dist/routes/rest/v1/public/folders/[id].js +43 -0
  375. package/dist/routes/rest/v1/public/folders/index.d.ts +4 -0
  376. package/dist/routes/rest/v1/public/folders/index.js +49 -0
  377. package/dist/routes/rest/v1/public/pages/[id].d.ts +4 -0
  378. package/dist/routes/rest/v1/public/pages/[id].js +46 -0
  379. package/dist/routes/rest/v1/public/pages/index.d.ts +4 -0
  380. package/dist/routes/rest/v1/public/pages/index.js +61 -0
  381. package/dist/routes/rest/v1/settings/index.d.ts +5 -0
  382. package/dist/routes/rest/v1/settings/index.js +75 -0
  383. package/dist/routes/rest/v1/users/[id].d.ts +6 -0
  384. package/dist/routes/rest/v1/users/[id].js +212 -0
  385. package/dist/routes/rest/v1/users/index.d.ts +5 -0
  386. package/dist/routes/rest/v1/users/index.js +138 -0
  387. package/dist/routes/sdk/fallback-list-pages.json.d.ts +2 -0
  388. package/dist/routes/sdk/fallback-list-pages.json.js +19 -0
  389. package/dist/routes/sdk/fallback-list-pages.json.ts +22 -0
  390. package/dist/routes/sdk/full-changelog.json.d.ts +16 -0
  391. package/dist/routes/sdk/full-changelog.json.js +170 -0
  392. package/dist/routes/sdk/full-changelog.json.ts +224 -0
  393. package/dist/routes/sdk/list-pages.d.ts +4 -0
  394. package/dist/routes/sdk/list-pages.js +34 -0
  395. package/dist/routes/sdk/update-latest-version-cache.d.ts +4 -0
  396. package/dist/routes/sdk/update-latest-version-cache.js +41 -0
  397. package/dist/runtime/AstroComponentProxy.d.ts +29 -0
  398. package/dist/runtime/AstroComponentProxy.js +47 -0
  399. package/dist/runtime/decoder/decode-codepoint.d.ts +18 -0
  400. package/dist/runtime/decoder/decode-codepoint.js +58 -0
  401. package/dist/runtime/decoder/decode-data-html.d.ts +1 -0
  402. package/dist/runtime/decoder/decode-data-html.js +7 -0
  403. package/dist/runtime/decoder/decode-data-xml.d.ts +1 -0
  404. package/dist/runtime/decoder/decode-data-xml.js +7 -0
  405. package/dist/runtime/decoder/index.d.ts +34 -0
  406. package/dist/runtime/decoder/index.js +18 -0
  407. package/dist/runtime/decoder/util.d.ts +208 -0
  408. package/dist/runtime/decoder/util.js +415 -0
  409. package/dist/schemas/config/auth.d.ts +175 -0
  410. package/dist/schemas/config/auth.js +65 -0
  411. package/dist/schemas/config/componentoverrides.d.ts +17 -0
  412. package/dist/schemas/config/componentoverrides.js +14 -0
  413. package/dist/schemas/config/dashboard.d.ts +154 -0
  414. package/dist/schemas/config/dashboard.js +59 -0
  415. package/dist/schemas/config/defaultFrontend.d.ts +125 -0
  416. package/dist/schemas/config/defaultFrontend.js +57 -0
  417. package/dist/schemas/config/developer.d.ts +15 -0
  418. package/dist/schemas/config/developer.js +14 -0
  419. package/dist/schemas/config/imageService.d.ts +13 -0
  420. package/dist/schemas/config/imageService.js +12 -0
  421. package/dist/schemas/config/index.d.ts +1153 -0
  422. package/dist/schemas/config/index.js +95 -0
  423. package/dist/schemas/config/integrations.d.ts +14 -0
  424. package/dist/schemas/config/integrations.js +12 -0
  425. package/dist/schemas/config/markdoc.d.ts +172 -0
  426. package/dist/schemas/config/markdoc.js +68 -0
  427. package/dist/schemas/config/mdx.d.ts +455 -0
  428. package/dist/schemas/config/mdx.js +71 -0
  429. package/dist/schemas/config/rendererConfig.d.ts +659 -0
  430. package/dist/schemas/config/rendererConfig.js +51 -0
  431. package/dist/schemas/config/sdk.d.ts +167 -0
  432. package/dist/schemas/config/sdk.js +85 -0
  433. package/dist/schemas/config/studiocms-markdown-remark.d.ts +292 -0
  434. package/dist/schemas/config/studiocms-markdown-remark.js +63 -0
  435. package/dist/schemas/index.d.ts +2 -0
  436. package/dist/schemas/index.js +2 -0
  437. package/dist/schemas/plugins/index.d.ts +7373 -0
  438. package/dist/schemas/plugins/index.js +192 -0
  439. package/dist/schemas/plugins/shared.d.ts +1752 -0
  440. package/dist/schemas/plugins/shared.js +221 -0
  441. package/dist/scripts/formListener.d.ts +16 -0
  442. package/dist/scripts/formListener.js +46 -0
  443. package/dist/scripts/three.d.ts +1 -0
  444. package/dist/scripts/three.js +278 -0
  445. package/dist/scripts/utils/fitModelToViewport.d.ts +8 -0
  446. package/dist/scripts/utils/fitModelToViewport.js +19 -0
  447. package/dist/sdk/StudioCMSVirtualCache.d.ts +283 -0
  448. package/dist/sdk/StudioCMSVirtualCache.js +685 -0
  449. package/dist/sdk/cache.d.ts +11 -0
  450. package/dist/sdk/cache.js +12 -0
  451. package/dist/sdk/core.d.ts +865 -0
  452. package/dist/sdk/core.js +1966 -0
  453. package/dist/sdk/errors.d.ts +21 -0
  454. package/dist/sdk/errors.js +11 -0
  455. package/dist/sdk/index.d.ts +371 -0
  456. package/dist/sdk/index.js +8 -0
  457. package/dist/sdk/lib/foldertree.d.ts +50 -0
  458. package/dist/sdk/lib/foldertree.js +123 -0
  459. package/dist/sdk/lib/generators.d.ts +30 -0
  460. package/dist/sdk/lib/generators.js +25 -0
  461. package/dist/sdk/lib/packages.d.ts +8 -0
  462. package/dist/sdk/lib/packages.js +14 -0
  463. package/dist/sdk/lib/parsers.d.ts +14 -0
  464. package/dist/sdk/lib/parsers.js +10 -0
  465. package/dist/sdk/lib/users.d.ts +19 -0
  466. package/dist/sdk/lib/users.js +26 -0
  467. package/dist/sdk/tables.d.ts +1198 -0
  468. package/dist/sdk/tables.js +55 -0
  469. package/dist/sdk/types/index.d.ts +175 -0
  470. package/dist/sdk/types/index.js +0 -0
  471. package/dist/sdk/types/tableDefs.d.ts +75 -0
  472. package/dist/sdk/types/tableDefs.js +0 -0
  473. package/dist/sdk/types/tsAlias.d.ts +155 -0
  474. package/dist/sdk/types/tsAlias.js +0 -0
  475. package/dist/sdk/utils/db.d.ts +5 -0
  476. package/dist/sdk/utils/db.js +15 -0
  477. package/dist/stubs/auth-lib.d.ts +2 -0
  478. package/dist/stubs/auth-lib.js +519 -0
  479. package/dist/stubs/auth-scripts.d.ts +2 -0
  480. package/dist/stubs/auth-scripts.js +29 -0
  481. package/dist/stubs/auth-utils.d.ts +2 -0
  482. package/dist/stubs/auth-utils.js +36 -0
  483. package/dist/stubs/changelog.d.ts +2 -0
  484. package/dist/stubs/changelog.js +16 -0
  485. package/dist/stubs/components.d.ts +2 -0
  486. package/dist/stubs/components.js +67 -0
  487. package/dist/stubs/core.d.ts +2 -0
  488. package/dist/stubs/core.js +49 -0
  489. package/dist/stubs/i18n-dts.d.ts +2 -0
  490. package/dist/stubs/i18n-dts.js +117 -0
  491. package/dist/stubs/images.d.ts +1 -0
  492. package/dist/stubs/images.js +30 -0
  493. package/dist/stubs/index.d.ts +1 -0
  494. package/dist/stubs/index.js +40 -0
  495. package/dist/stubs/lib.d.ts +2 -0
  496. package/dist/stubs/lib.js +123 -0
  497. package/dist/stubs/plugins.d.ts +2 -0
  498. package/dist/stubs/plugins.js +60 -0
  499. package/dist/stubs/proxy.d.ts +2 -0
  500. package/dist/stubs/proxy.js +40 -0
  501. package/dist/stubs/renderer-config.d.ts +2 -0
  502. package/dist/stubs/renderer-config.js +18 -0
  503. package/dist/stubs/renderer-markdownConfig.d.ts +2 -0
  504. package/dist/stubs/renderer-markdownConfig.js +17 -0
  505. package/dist/stubs/renderer.d.ts +2 -0
  506. package/dist/stubs/renderer.js +44 -0
  507. package/dist/stubs/sdk.d.ts +2 -0
  508. package/dist/stubs/sdk.js +202 -0
  509. package/dist/stubs/webVitals.d.ts +2 -0
  510. package/dist/stubs/webVitals.js +40 -0
  511. package/dist/styles/404.css +47 -0
  512. package/dist/styles/SyntaxFont.woff2 +0 -0
  513. package/dist/styles/authlayout.css +138 -0
  514. package/dist/styles/dashboard-base.css +493 -0
  515. package/dist/styles/dashboard-code.css +33 -0
  516. package/dist/styles/dashboard-diff.css +389 -0
  517. package/dist/styles/dashboard-tiny-mde.css +224 -0
  518. package/dist/styles/md-remark-callouts/github.css +56 -0
  519. package/dist/styles/md-remark-callouts/obsidian.css +66 -0
  520. package/dist/styles/md-remark-callouts/vitepress.css +58 -0
  521. package/dist/styles/md-remark-headings.css +48 -0
  522. package/dist/types.d.ts +43 -0
  523. package/dist/types.js +0 -0
  524. package/dist/utils/addAPIRoutes.d.ts +9 -0
  525. package/dist/utils/addAPIRoutes.js +33 -0
  526. package/dist/utils/addIntegrationArray.d.ts +24 -0
  527. package/dist/utils/addIntegrationArray.js +11 -0
  528. package/dist/utils/addIntegrationArrayWithCheck.d.ts +11 -0
  529. package/dist/utils/addIntegrationArrayWithCheck.js +24 -0
  530. package/dist/utils/astroConfigCheck.d.ts +8 -0
  531. package/dist/utils/astroConfigCheck.js +31 -0
  532. package/dist/utils/astroEnvConfig.d.ts +45 -0
  533. package/dist/utils/astroEnvConfig.js +9 -0
  534. package/dist/utils/authEnvCheck.d.ts +38 -0
  535. package/dist/utils/authEnvCheck.js +82 -0
  536. package/dist/utils/changelog.d.ts +1 -0
  537. package/dist/utils/changelog.js +53 -0
  538. package/dist/utils/changelogLoader.d.ts +15 -0
  539. package/dist/utils/changelogLoader.js +104 -0
  540. package/dist/utils/checkENV.d.ts +27 -0
  541. package/dist/utils/checkENV.js +115 -0
  542. package/dist/utils/configManager.d.ts +22 -0
  543. package/dist/utils/configManager.js +98 -0
  544. package/dist/utils/configResolver.d.ts +283 -0
  545. package/dist/utils/configResolver.js +105 -0
  546. package/dist/utils/defineStudioCMSConfig.d.ts +165 -0
  547. package/dist/utils/defineStudioCMSConfig.js +6 -0
  548. package/dist/utils/getLabelForPermissionLevel.d.ts +2 -0
  549. package/dist/utils/getLabelForPermissionLevel.js +17 -0
  550. package/dist/utils/injectRouteArray.d.ts +19 -0
  551. package/dist/utils/injectRouteArray.js +75 -0
  552. package/dist/utils/integrationLogger.d.ts +7 -0
  553. package/dist/utils/integrationLogger.js +18 -0
  554. package/dist/utils/integrations.d.ts +4 -0
  555. package/dist/utils/integrations.js +32 -0
  556. package/dist/utils/isDashboardRoute.d.ts +7 -0
  557. package/dist/utils/isDashboardRoute.js +10 -0
  558. package/dist/utils/loginBackgrounds/studiocms-blobs-dark.png +0 -0
  559. package/dist/utils/loginBackgrounds/studiocms-blobs-light.png +0 -0
  560. package/dist/utils/loginBackgrounds/studiocms-blocks-dark.png +0 -0
  561. package/dist/utils/loginBackgrounds/studiocms-blocks-light.png +0 -0
  562. package/dist/utils/loginBackgrounds/studiocms-curves-dark.png +0 -0
  563. package/dist/utils/loginBackgrounds/studiocms-curves-light.png +0 -0
  564. package/dist/utils/makePageTitle.d.ts +3 -0
  565. package/dist/utils/makePageTitle.js +7 -0
  566. package/dist/utils/pageListPackageLabel.d.ts +4 -0
  567. package/dist/utils/pageListPackageLabel.js +12 -0
  568. package/dist/utils/readJson.d.ts +1 -0
  569. package/dist/utils/readJson.js +7 -0
  570. package/dist/utils/routeBuilder.d.ts +18 -0
  571. package/dist/utils/routeBuilder.js +96 -0
  572. package/dist/utils/safeString.d.ts +1 -0
  573. package/dist/utils/safeString.js +6 -0
  574. package/dist/utils/simpleResponse.d.ts +1 -0
  575. package/dist/utils/simpleResponse.js +29 -0
  576. package/dist/utils/validImages.d.ts +13 -0
  577. package/dist/utils/validImages.js +39 -0
  578. package/dist/virtual.d.js +0 -0
  579. package/dist/virtual.d.ts +9 -0
  580. package/package.json +219 -0
  581. package/studiocms-cli.mjs +13 -0
  582. package/ui.d.ts +291 -0
@@ -0,0 +1,133 @@
1
+ import studioCMS_SDK from "studiocms:sdk";
2
+ import { hashPassword } from "./password.js";
3
+ import { deleteSessionTokenCookie, sessionCookieName, validateSessionToken } from "./session.js";
4
+ function verifyUsernameInput(username) {
5
+ if (username.length < 3 || username.length > 32) {
6
+ return false;
7
+ }
8
+ if (!/^[a-z0-9_-]+$/.test(username)) {
9
+ return false;
10
+ }
11
+ return true;
12
+ }
13
+ async function createUserAvatar(email) {
14
+ const safeEmail = email.trim().toLowerCase();
15
+ const msgUint8 = new TextEncoder().encode(safeEmail);
16
+ const hashBuffer = await crypto.subtle.digest("SHA-256", msgUint8);
17
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
18
+ const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
19
+ return `https://seccdn.libravatar.org/avatar/${hashHex}?s=400&d=retro`;
20
+ }
21
+ async function createLocalUser(name, username, email, password) {
22
+ const passwordHash = await hashPassword(password);
23
+ const avatar = await createUserAvatar(email);
24
+ const newUser = await studioCMS_SDK.AUTH.user.create({
25
+ id: crypto.randomUUID(),
26
+ name,
27
+ username,
28
+ email,
29
+ password: passwordHash,
30
+ createdAt: /* @__PURE__ */ new Date(),
31
+ avatar
32
+ });
33
+ return newUser;
34
+ }
35
+ async function createOAuthUser(userFields, oAuthFields) {
36
+ try {
37
+ const newUser = await studioCMS_SDK.AUTH.user.create(userFields);
38
+ await studioCMS_SDK.AUTH.oAuth.create({
39
+ userId: newUser.id,
40
+ provider: oAuthFields.provider,
41
+ providerUserId: oAuthFields.providerUserId
42
+ });
43
+ return newUser;
44
+ } catch (error) {
45
+ console.error(error);
46
+ return { error: "Error creating user" };
47
+ }
48
+ }
49
+ const LinkNewOAuthCookieName = "link-new-o-auth";
50
+ async function updateUserPassword(userId, password) {
51
+ const passwordHash = await hashPassword(password);
52
+ await studioCMS_SDK.AUTH.user.update(userId, { password: passwordHash });
53
+ }
54
+ async function getUserPasswordHash(userId) {
55
+ const user = await studioCMS_SDK.GET.databaseEntry.users.byId(userId);
56
+ if (!user) {
57
+ throw new Error("User not found");
58
+ }
59
+ if (!user.password) {
60
+ throw new Error("User has no password");
61
+ }
62
+ return user.password;
63
+ }
64
+ async function getUserFromEmail(email) {
65
+ return await studioCMS_SDK.GET.databaseEntry.users.byEmail(email) ?? null;
66
+ }
67
+ async function getUserData(Astro) {
68
+ const { cookies } = Astro;
69
+ const sessionToken = cookies.get(sessionCookieName)?.value ?? null;
70
+ if (!sessionToken) {
71
+ return { isLoggedIn: false, user: null, permissionLevel: "unknown" };
72
+ }
73
+ const { session, user } = await validateSessionToken(sessionToken);
74
+ if (session === null) {
75
+ deleteSessionTokenCookie(Astro);
76
+ return { isLoggedIn: false, user: null, permissionLevel: "unknown" };
77
+ }
78
+ if (!user || user === null) {
79
+ return { isLoggedIn: false, user: null, permissionLevel: "unknown" };
80
+ }
81
+ const result = await studioCMS_SDK.AUTH.permission.currentStatus(user.id);
82
+ if (!result) {
83
+ return { isLoggedIn: true, user, permissionLevel: "unknown" };
84
+ }
85
+ let permissionLevel = "unknown";
86
+ switch (result.rank) {
87
+ case "owner":
88
+ permissionLevel = "owner";
89
+ break;
90
+ case "admin":
91
+ permissionLevel = "admin";
92
+ break;
93
+ case "editor":
94
+ permissionLevel = "editor";
95
+ break;
96
+ case "visitor":
97
+ permissionLevel = "visitor";
98
+ break;
99
+ default:
100
+ permissionLevel = "unknown";
101
+ break;
102
+ }
103
+ return {
104
+ isLoggedIn: true,
105
+ user,
106
+ permissionLevel
107
+ };
108
+ }
109
+ const availablePermissionRanks = ["owner", "admin", "editor", "visitor", "unknown"];
110
+ const permissionRanksMap = {
111
+ owner: ["owner"],
112
+ admin: ["owner", "admin"],
113
+ editor: ["owner", "admin", "editor"],
114
+ visitor: ["owner", "admin", "editor", "visitor"],
115
+ unknown: ["owner", "admin", "editor", "visitor", "unknown"]
116
+ };
117
+ async function verifyUserPermissionLevel(userData, requiredPermission) {
118
+ const { permissionLevel } = userData;
119
+ return permissionRanksMap[requiredPermission].includes(permissionLevel);
120
+ }
121
+ export {
122
+ LinkNewOAuthCookieName,
123
+ createLocalUser,
124
+ createOAuthUser,
125
+ createUserAvatar,
126
+ getUserData,
127
+ getUserFromEmail,
128
+ getUserPasswordHash,
129
+ permissionRanksMap,
130
+ updateUserPassword,
131
+ verifyUserPermissionLevel,
132
+ verifyUsernameInput
133
+ };
@@ -0,0 +1,119 @@
1
+ import type { HeroIconName } from '@studiocms/ui/components/Icon/iconType.js';
2
+ import type { SanitizeOptions } from 'ultrahtml/transformers/sanitize';
3
+ /**
4
+ * Represents the input for a grid item in the dashboard.
5
+ */
6
+ export interface GridItemInput {
7
+ /**
8
+ * The name of the grid item.
9
+ */
10
+ name: string;
11
+ /**
12
+ * The span of the grid item, which can be 1, 2, or 3.
13
+ */
14
+ span: 1 | 2 | 3;
15
+ /**
16
+ * The variant of the grid item, which can be 'default' or 'filled'.
17
+ */
18
+ variant: 'default' | 'filled';
19
+ /**
20
+ * The required permission level to view the grid item.
21
+ * Optional. Can be 'owner', 'admin', 'editor', or 'visitor'.
22
+ */
23
+ requiresPermission?: 'owner' | 'admin' | 'editor' | 'visitor';
24
+ /**
25
+ * The header of the grid item.
26
+ * Optional.
27
+ */
28
+ header?: {
29
+ /**
30
+ * The title of the header.
31
+ */
32
+ title: string;
33
+ /**
34
+ * The icon of the header.
35
+ * Optional.
36
+ */
37
+ icon?: HeroIconName;
38
+ };
39
+ /**
40
+ * The body of the grid item.
41
+ * Optional.
42
+ */
43
+ body?: {
44
+ /**
45
+ * The HTML content of the body.
46
+ */
47
+ html: string;
48
+ /**
49
+ * The components within the body.
50
+ * Optional.
51
+ */
52
+ components?: Record<string, string>;
53
+ /**
54
+ * The options for sanitizing the HTML content.
55
+ * Optional.
56
+ */
57
+ sanitizeOpts?: SanitizeOptions;
58
+ };
59
+ }
60
+ /**
61
+ * Represents an item that can be used in a dashboard grid.
62
+ */
63
+ export interface GridItemUsable {
64
+ /**
65
+ * The name of the grid item.
66
+ */
67
+ name: string;
68
+ /**
69
+ * The span of the grid item, which can be 1, 2, or 3.
70
+ */
71
+ span: 1 | 2 | 3;
72
+ /**
73
+ * The variant of the grid item, which can be 'default' or 'filled'.
74
+ */
75
+ variant: 'default' | 'filled';
76
+ /**
77
+ * Optional. The permission required to use the grid item.
78
+ * Can be 'owner', 'admin', 'editor', or 'visitor'.
79
+ */
80
+ requiresPermission?: 'owner' | 'admin' | 'editor' | 'visitor';
81
+ /**
82
+ * Optional. The header of the grid item.
83
+ */
84
+ header?: {
85
+ /**
86
+ * The title of the header.
87
+ */
88
+ title: string;
89
+ /**
90
+ * Optional. The icon of the header.
91
+ */
92
+ icon?: HeroIconName;
93
+ };
94
+ /**
95
+ * Optional. The body of the grid item.
96
+ */
97
+ body?: {
98
+ /**
99
+ * The HTML content of the body.
100
+ */
101
+ html: string;
102
+ /**
103
+ * Optional. The components of the body.
104
+ *
105
+ */
106
+ components?: Record<string, any>;
107
+ /**
108
+ * Optional. The options for sanitizing the HTML content.
109
+ */
110
+ sanitizeOpts?: SanitizeOptions;
111
+ };
112
+ }
113
+ /**
114
+ * Represents an item in the dashboard grid.
115
+ * Extends the properties of `GridItemUsable` and adds an `enabled` flag.
116
+ */
117
+ export interface GridItem extends GridItemUsable {
118
+ enabled: boolean;
119
+ }
File without changes
@@ -0,0 +1,42 @@
1
+ import type { AstroIntegration } from 'astro';
2
+ /**
3
+ * Options for configuring the dynamic sitemap.
4
+ */
5
+ interface DynamicSitemapOptions {
6
+ /**
7
+ * An array of sitemap configurations.
8
+ */
9
+ sitemaps: {
10
+ /**
11
+ * The name of the plugin that generates the sitemap.
12
+ */
13
+ pluginName: string;
14
+ /**
15
+ * The endpoint path or URL where the sitemap XML can be accessed.
16
+ */
17
+ sitemapXMLEndpointPath: string | URL;
18
+ }[];
19
+ }
20
+ /**
21
+ * Generates a dynamic sitemap integration for Astro.
22
+ *
23
+ * @param {DynamicSitemapOptions} options - Configuration options for the dynamic sitemap.
24
+ * @returns {AstroIntegration} The Astro integration object.
25
+ *
26
+ * The integration adds virtual imports for sitemaps and injects routes for the sitemap index and individual sitemaps.
27
+ *
28
+ * The `options` parameter should include:
29
+ * - `sitemaps`: An array of objects, each containing:
30
+ * - `pluginName`: The name of the plugin.
31
+ * - `sitemapXMLEndpointPath`: The entry point path for the sitemap XML.
32
+ *
33
+ * The function performs the following steps:
34
+ * 1. Creates a resolver using the current module URL.
35
+ * 2. Adds virtual imports for the sitemaps.
36
+ * 3. Injects a route for the sitemap index.
37
+ * 4. Iterates over the provided sitemaps and injects routes for each sitemap.
38
+ *
39
+ * If multiple sitemaps have the same pattern, a unique pattern is generated by appending an index.
40
+ */
41
+ export declare function dynamicSitemap(options: DynamicSitemapOptions): AstroIntegration;
42
+ export {};
@@ -0,0 +1,45 @@
1
+ import { addVirtualImports, createResolver } from "astro-integration-kit";
2
+ import { convertToSafeString } from "../../utils/safeString.js";
3
+ function safeString(str) {
4
+ return convertToSafeString(str).replace(/^_+/, "").replace(/_+$/, "").replace("studiocms_", "");
5
+ }
6
+ function dynamicSitemap(options) {
7
+ const { resolve } = createResolver(import.meta.url);
8
+ return {
9
+ name: "studiocms/dynamic-sitemap",
10
+ hooks: {
11
+ "astro:config:setup": (params) => {
12
+ const { injectRoute } = params;
13
+ const { sitemaps } = options;
14
+ addVirtualImports(params, {
15
+ name: "studiocms/dynamic-sitemap",
16
+ imports: {
17
+ "virtual:studiocms/sitemaps": `
18
+ export const sitemaps = ${JSON.stringify([...sitemaps.map(({ pluginName }) => `./sitemap-${safeString(pluginName)}.xml`)])};
19
+ `
20
+ }
21
+ });
22
+ injectRoute({
23
+ entrypoint: resolve("./sitemap-index.xml.js"),
24
+ pattern: "/sitemap-index.xml",
25
+ prerender: false
26
+ });
27
+ const existingSitemaps = [];
28
+ for (const { pluginName, sitemapXMLEndpointPath: entrypoint } of sitemaps) {
29
+ let pattern = `/sitemap-${safeString(pluginName)}.xml`;
30
+ if (existingSitemaps.includes(pattern)) {
31
+ pattern = `/sitemap-${safeString(pluginName)}-${existingSitemaps.length}.xml`;
32
+ }
33
+ injectRoute({
34
+ entrypoint,
35
+ pattern,
36
+ prerender: false
37
+ });
38
+ }
39
+ }
40
+ }
41
+ };
42
+ }
43
+ export {
44
+ dynamicSitemap
45
+ };
@@ -0,0 +1,8 @@
1
+ import type { APIRoute } from 'astro';
2
+ /**
3
+ * Handles the GET request for generating a dynamic sitemap index.
4
+ *
5
+ * @param context - The API context containing the request information.
6
+ * @returns A Response object containing the generated sitemap index in XML format.
7
+ */
8
+ export declare const GET: APIRoute;
@@ -0,0 +1,20 @@
1
+ import { sitemaps } from "virtual:studiocms/sitemaps";
2
+ const template = (entries) => `<?xml version="1.0" encoding="UTF-8"?>
3
+ <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
4
+ ${entries.map((entry) => `<sitemap><loc>${entry.location}</loc></sitemap>`).join("")}
5
+ </sitemapindex>`;
6
+ const GET = async (context) => {
7
+ const CurrentUrl = context.url;
8
+ const sitemap = template(
9
+ sitemaps.map((sitemap2) => ({ location: new URL(sitemap2, CurrentUrl).toString() }))
10
+ );
11
+ return new Response(sitemap, {
12
+ status: 200,
13
+ headers: {
14
+ "Content-Type": "application/xml"
15
+ }
16
+ });
17
+ };
18
+ export {
19
+ GET
20
+ };
@@ -0,0 +1,45 @@
1
+ import { sitemaps } from 'virtual:studiocms/sitemaps';
2
+ import type { APIContext, APIRoute } from 'astro';
3
+
4
+ /**
5
+ * Generates an XML sitemap index from an array of entries.
6
+ *
7
+ * @param entries - An array of objects containing the location URLs for the sitemap.
8
+ * @returns A string representing the XML sitemap index.
9
+ *
10
+ * @example
11
+ * const entries = [{ location: 'https://example.com/sitemap1.xml' }, { location: 'https://example.com/sitemap2.xml' }];
12
+ * const sitemapIndex = template(entries);
13
+ * console.log(sitemapIndex);
14
+ * // Output:
15
+ * // <?xml version="1.0" encoding="UTF-8"?>
16
+ * // <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
17
+ * // <sitemap><loc>https://example.com/sitemap1.xml</loc></sitemap>
18
+ * // <sitemap><loc>https://example.com/sitemap2.xml</loc></sitemap>
19
+ * // </sitemapindex>
20
+ */
21
+ const template = (entries: { location: string }[]) => `<?xml version="1.0" encoding="UTF-8"?>
22
+ <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
23
+ ${entries.map((entry) => `<sitemap><loc>${entry.location}</loc></sitemap>`).join('')}
24
+ </sitemapindex>`;
25
+
26
+ /**
27
+ * Handles the GET request for generating a dynamic sitemap index.
28
+ *
29
+ * @param context - The API context containing the request information.
30
+ * @returns A Response object containing the generated sitemap index in XML format.
31
+ */
32
+ export const GET: APIRoute = async (context: APIContext) => {
33
+ const CurrentUrl = context.url;
34
+
35
+ const sitemap = template(
36
+ sitemaps.map((sitemap) => ({ location: new URL(sitemap, CurrentUrl).toString() }))
37
+ );
38
+
39
+ return new Response(sitemap, {
40
+ status: 200,
41
+ headers: {
42
+ 'Content-Type': 'application/xml',
43
+ },
44
+ });
45
+ };
@@ -0,0 +1,9 @@
1
+ import { type HeadConfig, HeadConfigSchema, type HeadUserConfig } from '../schemas/config/defaultFrontend.js';
2
+ export { HeadConfigSchema };
3
+ export type { HeadConfig, HeadUserConfig };
4
+ /** Create a fully parsed, merged, and sorted head entry array from multiple sources. */
5
+ export declare function createHead(defaults: HeadUserConfig, ...heads: HeadConfig[]): {
6
+ content: string;
7
+ tag: "base" | "link" | "meta" | "noscript" | "script" | "style" | "template" | "title";
8
+ attrs: Record<string, string | boolean | undefined>;
9
+ }[];
@@ -0,0 +1,65 @@
1
+ import {
2
+ HeadConfigSchema
3
+ } from "../schemas/config/defaultFrontend.js";
4
+ const HeadSchema = HeadConfigSchema();
5
+ function createHead(defaults, ...heads) {
6
+ let head = HeadSchema.parse(defaults);
7
+ for (const next of heads) {
8
+ head = mergeHead(head, next);
9
+ }
10
+ return sortHead(head);
11
+ }
12
+ function hasTag(head, entry) {
13
+ switch (entry.tag) {
14
+ case "title":
15
+ return head.some(({ tag }) => tag === "title");
16
+ case "meta":
17
+ return hasOneOf(head, entry, ["name", "property", "http-equiv"]);
18
+ default:
19
+ return false;
20
+ }
21
+ }
22
+ function hasOneOf(head, entry, keys) {
23
+ const attr = getAttr(keys, entry);
24
+ if (!attr) return false;
25
+ const [key, val] = attr;
26
+ return head.some(({ tag, attrs }) => tag === entry.tag && attrs[key] === val);
27
+ }
28
+ function getAttr(keys, entry) {
29
+ let attr;
30
+ for (const key of keys) {
31
+ const val = entry.attrs[key];
32
+ if (val) {
33
+ attr = [key, val];
34
+ break;
35
+ }
36
+ }
37
+ return attr;
38
+ }
39
+ function mergeHead(oldHead, newHead) {
40
+ return [...oldHead.filter((tag) => !hasTag(newHead, tag)), ...newHead];
41
+ }
42
+ function sortHead(head) {
43
+ return head.sort((a, b) => {
44
+ const aImportance = getImportance(a);
45
+ const bImportance = getImportance(b);
46
+ return aImportance > bImportance ? -1 : bImportance > aImportance ? 1 : 0;
47
+ });
48
+ }
49
+ function getImportance(entry) {
50
+ if (entry.tag === "meta" && ("charset" in entry.attrs || "http-equiv" in entry.attrs || entry.attrs.name === "viewport")) {
51
+ return 100;
52
+ }
53
+ if (entry.tag === "title") return 90;
54
+ if (entry.tag !== "meta") {
55
+ if (entry.tag === "link" && "rel" in entry.attrs && entry.attrs.rel === "shortcut icon") {
56
+ return 70;
57
+ }
58
+ return 80;
59
+ }
60
+ return 0;
61
+ }
62
+ export {
63
+ HeadConfigSchema,
64
+ createHead
65
+ };
@@ -0,0 +1,18 @@
1
+ import type { AstroGlobalPartial } from 'astro';
2
+ /**
3
+ * Default Head Tags for use with createHead() helper
4
+ *
5
+ * @param title
6
+ * @param description
7
+ * @param lang
8
+ * @param Astro
9
+ * @param favicon
10
+ * @param ogImage
11
+ * @param canonical
12
+ * @returns
13
+ */
14
+ export declare const headDefaults: (title: string, description: string, lang: string, Astro: AstroGlobalPartial, favicon: string, ogImage: string | undefined, canonical: URL | undefined) => {
15
+ tag: "base" | "link" | "meta" | "noscript" | "script" | "style" | "template" | "title";
16
+ content?: string | undefined;
17
+ attrs?: Record<string, string | boolean | undefined> | undefined;
18
+ }[];
@@ -0,0 +1,75 @@
1
+ import { extname } from "node:path";
2
+ import version from "studiocms:version";
3
+ import { lookup } from "mrmime";
4
+ import { StudioCMSCoreError } from "../errors.js";
5
+ const faviconTypes = [".ico", ".gif", ".jpeg", ".jpg", ".png", ".svg"];
6
+ function isFaviconExt(ext) {
7
+ if (faviconTypes.includes(ext)) {
8
+ return true;
9
+ }
10
+ return false;
11
+ }
12
+ const makeFavicon = (favicon) => {
13
+ const ext = extname(favicon).toLocaleLowerCase();
14
+ if (isFaviconExt(ext)) {
15
+ const faviconHref = favicon;
16
+ const faviconType = lookup(ext);
17
+ return { href: faviconHref, type: faviconType };
18
+ }
19
+ throw new StudioCMSCoreError(
20
+ `Unsupported favicon extension: ${ext}`,
21
+ `The favicon must be one of the following types: ${faviconTypes.join(", ")}`
22
+ );
23
+ };
24
+ const headDefaults = (title, description, lang, Astro, favicon, ogImage, canonical) => {
25
+ const headDefaults2 = [
26
+ { tag: "meta", attrs: { charset: "utf-8" } },
27
+ {
28
+ tag: "meta",
29
+ attrs: { name: "viewport", content: "width=device-width, initial-scale=1" }
30
+ },
31
+ { tag: "title", content: `${title}` },
32
+ { tag: "meta", attrs: { name: "title", content: title } },
33
+ { tag: "meta", attrs: { name: "description", content: description } },
34
+ { tag: "link", attrs: { rel: "canonical", href: canonical?.href } },
35
+ { tag: "meta", attrs: { name: "generator", content: Astro.generator } },
36
+ {
37
+ tag: "meta",
38
+ attrs: { name: "generator", content: `StudioCMS v${version}` }
39
+ },
40
+ // Favicon
41
+ {
42
+ tag: "link",
43
+ attrs: {
44
+ rel: "shortcut icon",
45
+ href: makeFavicon(favicon).href,
46
+ type: makeFavicon(favicon).type
47
+ }
48
+ },
49
+ // OpenGraph Tags
50
+ { tag: "meta", attrs: { property: "og:title", content: title } },
51
+ { tag: "meta", attrs: { property: "og:type", content: "website" } },
52
+ { tag: "meta", attrs: { property: "og:url", content: canonical?.href } },
53
+ { tag: "meta", attrs: { property: "og:locale", content: lang } },
54
+ { tag: "meta", attrs: { property: "og:description", content: description } },
55
+ { tag: "meta", attrs: { property: "og:site_name", content: title } },
56
+ // Twitter Tags
57
+ {
58
+ tag: "meta",
59
+ attrs: { name: "twitter:card", content: "summary_large_image" }
60
+ },
61
+ { tag: "meta", attrs: { name: "twitter:url", content: canonical?.href } },
62
+ { tag: "meta", attrs: { name: "twitter:title", content: title } },
63
+ { tag: "meta", attrs: { name: "twitter:description", content: description } }
64
+ ];
65
+ if (ogImage) {
66
+ headDefaults2.push(
67
+ { tag: "meta", attrs: { property: "og:image", content: ogImage } },
68
+ { tag: "meta", attrs: { name: "twitter:image", content: ogImage } }
69
+ );
70
+ }
71
+ return headDefaults2;
72
+ };
73
+ export {
74
+ headDefaults
75
+ };