studiocms 0.3.0 → 0.4.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 (263) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/dist/cli/add/index.d.ts +2 -2
  3. package/dist/cli/add/npm-utils.d.ts +6 -6
  4. package/dist/cli/add/tryToInstallPlugins.d.ts +1 -1
  5. package/dist/cli/add/updateStudioCMSConfig.d.ts +1 -1
  6. package/dist/cli/add/validatePlugins.d.ts +1 -1
  7. package/dist/cli/crypto/genJWT/index.d.ts +1 -1
  8. package/dist/cli/crypto/index.d.ts +1 -1
  9. package/dist/cli/init/steps/env.js +12 -2
  10. package/dist/cli/init/steps/next.d.ts +1 -1
  11. package/dist/cli/migrator/index.d.ts +1 -1
  12. package/dist/cli/users/index.d.ts +1 -1
  13. package/dist/cli/users/steps/createUsers.js +3 -3
  14. package/dist/cli/users/steps/next.d.ts +1 -1
  15. package/dist/cli/utils/context.d.ts +1 -1
  16. package/dist/cli/utils/getCliDbClient.d.ts +1 -1
  17. package/dist/cli/utils/intro.d.ts +1 -1
  18. package/dist/cli/utils/loadConfig.d.ts +54 -49
  19. package/dist/cli/utils/loadConfig.js +5 -8
  20. package/dist/cli/utils/user-utils.d.ts +1 -1
  21. package/dist/client/apiClient.d.ts +4923 -0
  22. package/dist/client/apiClient.js +72 -0
  23. package/dist/config.d.ts +1734 -1
  24. package/dist/consts.d.ts +5 -5
  25. package/dist/consts.js +3 -2
  26. package/dist/db/plugins.d.ts +1 -1
  27. package/dist/db/plugins.js +5 -8
  28. package/dist/handlers/frontend/routes.d.ts +4 -18
  29. package/dist/handlers/frontend/routes.js +13 -152
  30. package/dist/handlers/frontend/types.d.ts +1 -1
  31. package/dist/handlers/frontend/utils.js +0 -18
  32. package/dist/handlers/pluginHandler.d.ts +34 -257
  33. package/dist/handlers/pluginHandler.js +92 -46
  34. package/dist/handlers/routeHandler.js +32 -11
  35. package/dist/handlers/setupDbStudio.d.ts +1 -1
  36. package/dist/handlers/storage-manager/core/effectify-astro-context.d.ts +25 -0
  37. package/dist/handlers/storage-manager/core/effectify-astro-context.js +78 -0
  38. package/dist/handlers/storage-manager/no-op.d.ts +2 -2
  39. package/dist/handlers/storage-manager/no-op.js +2 -3
  40. package/dist/index.d.ts +0 -1
  41. package/dist/index.js +9 -5
  42. package/dist/integrations/robots/index.d.ts +2 -2
  43. package/dist/integrations/robots/index.js +1 -3
  44. package/dist/integrations/robots/schema.d.ts +102 -273
  45. package/dist/integrations/robots/schema.js +220 -209
  46. package/dist/plugins/analytics/assets/schemas.d.ts +14 -9
  47. package/dist/plugins/analytics/assets/schemas.js +25 -17
  48. package/dist/plugins/analytics/db-client.d.ts +1 -1
  49. package/dist/plugins/analytics/index.d.ts +823 -3
  50. package/dist/plugins/analytics/index.js +4 -5
  51. package/dist/plugins/analytics/schemas.d.ts +54 -62
  52. package/dist/plugins/analytics/schemas.js +64 -13
  53. package/dist/plugins/analytics/table.d.ts +1 -1
  54. package/dist/plugins.d.ts +0 -1
  55. package/dist/schemas/config/api.d.ts +17 -0
  56. package/dist/schemas/config/api.js +14 -0
  57. package/dist/schemas/config/auth.d.ts +55 -59
  58. package/dist/schemas/config/auth.js +34 -11
  59. package/dist/schemas/config/dashboard.d.ts +43 -79
  60. package/dist/schemas/config/dashboard.js +43 -12
  61. package/dist/schemas/config/db.d.ts +15 -17
  62. package/dist/schemas/config/db.js +13 -5
  63. package/dist/schemas/config/developer.d.ts +33 -45
  64. package/dist/schemas/config/developer.js +22 -5
  65. package/dist/schemas/config/index.d.ts +398 -521
  66. package/dist/schemas/config/index.js +115 -57
  67. package/dist/schemas/config/sdk.d.ts +50 -196
  68. package/dist/schemas/config/sdk.js +61 -73
  69. package/dist/schemas/custom.d.ts +40 -0
  70. package/dist/schemas/custom.js +41 -0
  71. package/dist/schemas/external-schemas.d.ts +171 -0
  72. package/dist/schemas/external-schemas.js +179 -0
  73. package/dist/schemas/index.d.ts +2 -0
  74. package/dist/schemas/index.js +2 -0
  75. package/dist/schemas/plugins/i18n.d.ts +59 -39
  76. package/dist/schemas/plugins/i18n.js +42 -5
  77. package/dist/schemas/plugins/index.d.ts +7126 -10296
  78. package/dist/schemas/plugins/index.js +260 -276
  79. package/dist/schemas/plugins/shared.d.ts +1293 -3718
  80. package/dist/schemas/plugins/shared.js +320 -329
  81. package/dist/test-utils.d.ts +15 -4
  82. package/dist/test-utils.js +27 -11
  83. package/dist/toolbar/db-viewer/db-shared-types.d.ts +6 -6
  84. package/dist/toolbar/db-viewer/viewer.js +20 -21
  85. package/dist/types.d.ts +30 -0
  86. package/dist/utils/effects/smtp.d.ts +1 -1
  87. package/dist/utils/lang-helper.d.ts +10 -2
  88. package/dist/virtual.d.ts +23 -0
  89. package/dist/virtuals/auth/core.d.ts +5 -5
  90. package/dist/virtuals/auth/verify-email.d.ts +6 -6
  91. package/dist/virtuals/components/Generator.astro +2 -2
  92. package/dist/virtuals/components/Renderer.astro +9 -1
  93. package/dist/virtuals/components/renderFn.d.ts +3 -1
  94. package/dist/virtuals/components/renderFn.js +18 -0
  95. package/dist/virtuals/lib/headDefaults.d.ts +4 -2
  96. package/dist/virtuals/lib/headDefaults.js +0 -2
  97. package/dist/virtuals/lib/routeMap.d.ts +0 -12
  98. package/dist/virtuals/lib/routeMap.js +2 -14
  99. package/dist/virtuals/mailer/index.d.ts +3 -3
  100. package/dist/virtuals/notifier/index.d.ts +5 -5
  101. package/dist/virtuals/plugins/dashboard-pages.d.ts +2 -64
  102. package/dist/virtuals/scripts/StorageFileBrowser.d.ts +1 -172
  103. package/dist/virtuals/scripts/StorageFileBrowser.js +216 -119
  104. package/dist/virtuals/template-engine/index.d.ts +4 -4
  105. package/frontend/components/dashboard/configuration/ConfigForm.astro +218 -110
  106. package/frontend/components/dashboard/content-mgmt/ContentSearch.astro +21 -22
  107. package/frontend/components/dashboard/content-mgmt/CreateFolder.astro +66 -54
  108. package/frontend/components/dashboard/content-mgmt/CreatePage.astro +58 -104
  109. package/frontend/components/dashboard/content-mgmt/EditFolder.astro +65 -67
  110. package/frontend/components/dashboard/content-mgmt/EditPage.astro +86 -134
  111. package/frontend/components/dashboard/content-mgmt/InnerSidebarElement.astro +0 -1
  112. package/frontend/components/dashboard/content-mgmt/PageHeader.astro +33 -52
  113. package/frontend/components/dashboard/content-mgmt/PageTypeHandler.astro +2 -2
  114. package/frontend/components/dashboard/profile/APITokens.astro +219 -158
  115. package/frontend/components/dashboard/profile/BasicInfo.astro +165 -106
  116. package/frontend/components/dashboard/profile/Notifications.astro +27 -18
  117. package/frontend/components/dashboard/profile/UpdatePassword.astro +134 -94
  118. package/frontend/components/dashboard/sidebar/VersionCheck.astro +31 -16
  119. package/frontend/components/dashboard/sidebar/VersionCheckChangelog.astro +18 -11
  120. package/frontend/components/dashboard/sidebar-modals/VersionModal.astro +2 -2
  121. package/frontend/components/dashboard/smtp-config/TemplateEditor.astro +14 -14
  122. package/frontend/components/dashboard/taxonomy/InnerSidebarElement.astro +0 -1
  123. package/frontend/components/dashboard/taxonomy/MetaContainer.astro +0 -2
  124. package/frontend/components/dashboard/taxonomy/PageHeader.astro +16 -24
  125. package/frontend/components/dashboard/taxonomy/TaxonomySearch.astro +23 -27
  126. package/frontend/components/dashboard/user-mgmt/InnerSidebarElement.astro +111 -104
  127. package/frontend/components/dashboard/user-mgmt/UserListItem.astro +9 -22
  128. package/frontend/components/dashboard/user-mgmt/UserListItems.astro +18 -0
  129. package/frontend/components/first-time-setup/snippets/{opt2-studiocms.config.diff → studiocms.config.diff} +1 -0
  130. package/frontend/components/shared/Code.astro +1 -4
  131. package/frontend/components/shared/DynamicSettingsRenderer.astro +1 -1
  132. package/frontend/components/shared/SSRUser.astro +2 -4
  133. package/frontend/components/shared/foldertree/FolderTreeNode.astro +0 -6
  134. package/frontend/components/shared/storage-manager/StorageCopyOutput.astro +0 -1
  135. package/frontend/components/shared/taxonomy/TaxonomyTreeNode.astro +0 -6
  136. package/frontend/layouts/DashboardLayout.astro +0 -9
  137. package/frontend/layouts/TaxonomyLayout.astro +0 -1
  138. package/frontend/middleware/index.ts +102 -61
  139. package/frontend/pages/404.astro +0 -1
  140. package/frontend/pages/[dashboard]/[...pluginPage].astro +10 -1
  141. package/frontend/pages/[dashboard]/configuration.astro +10 -1
  142. package/frontend/pages/[dashboard]/content-management/createfolder.astro +10 -1
  143. package/frontend/pages/[dashboard]/content-management/createpage.astro +10 -1
  144. package/frontend/pages/[dashboard]/content-management/diff.astro +39 -14
  145. package/frontend/pages/[dashboard]/content-management/editfolder.astro +10 -1
  146. package/frontend/pages/[dashboard]/content-management/editpage.astro +10 -1
  147. package/frontend/pages/[dashboard]/content-management/index.astro +10 -1
  148. package/frontend/pages/[dashboard]/index.astro +10 -1
  149. package/frontend/pages/[dashboard]/login.astro +86 -25
  150. package/frontend/pages/[dashboard]/password-reset.astro +22 -16
  151. package/frontend/pages/[dashboard]/plugins/[plugin].astro +10 -1
  152. package/frontend/pages/[dashboard]/profile.astro +10 -1
  153. package/frontend/pages/[dashboard]/signup.astro +153 -52
  154. package/frontend/pages/[dashboard]/smtp-configuration.astro +77 -75
  155. package/frontend/pages/[dashboard]/system-management.astro +10 -1
  156. package/frontend/pages/[dashboard]/taxonomy/categories.astro +30 -41
  157. package/frontend/pages/[dashboard]/taxonomy/index.astro +10 -0
  158. package/frontend/pages/[dashboard]/taxonomy/tags.astro +33 -43
  159. package/frontend/pages/[dashboard]/unverified-email.astro +29 -21
  160. package/frontend/pages/[dashboard]/user-management/edit.astro +170 -90
  161. package/frontend/pages/[dashboard]/user-management/index.astro +10 -1
  162. package/frontend/pages/studiocms_api/[...all].ts +106 -0
  163. package/frontend/pages/studiocms_api/_handlers/_utils/auth.ts +26 -0
  164. package/frontend/pages/studiocms_api/_handlers/_utils/changelog.ts +147 -0
  165. package/frontend/pages/studiocms_api/_handlers/_utils/db-studio-driver.ts +46 -0
  166. package/frontend/pages/studiocms_api/_handlers/_utils/parseLogLevel.ts +27 -0
  167. package/frontend/pages/studiocms_api/_handlers/auth/auth.ts +459 -0
  168. package/frontend/pages/studiocms_api/_handlers/auth/index.ts +17 -0
  169. package/frontend/pages/studiocms_api/_handlers/auth/oauth.ts +91 -0
  170. package/frontend/pages/studiocms_api/_handlers/dashboard/_shared.ts +57 -0
  171. package/frontend/pages/studiocms_api/_handlers/dashboard/apiTokens.ts +134 -0
  172. package/frontend/pages/studiocms_api/_handlers/dashboard/config.ts +64 -0
  173. package/frontend/pages/studiocms_api/_handlers/dashboard/content.ts +741 -0
  174. package/frontend/pages/studiocms_api/_handlers/dashboard/create.ts +480 -0
  175. package/frontend/pages/studiocms_api/_handlers/dashboard/emailNotifications.ts +49 -0
  176. package/frontend/pages/studiocms_api/_handlers/dashboard/index.ts +45 -0
  177. package/frontend/pages/studiocms_api/_handlers/dashboard/mailer.ts +136 -0
  178. package/frontend/pages/studiocms_api/_handlers/dashboard/plugins.ts +80 -0
  179. package/frontend/pages/studiocms_api/_handlers/dashboard/profile.ts +275 -0
  180. package/frontend/pages/studiocms_api/_handlers/dashboard/resetPassword.ts +140 -0
  181. package/frontend/pages/studiocms_api/_handlers/dashboard/search.ts +63 -0
  182. package/frontend/pages/studiocms_api/_handlers/dashboard/taxonomy.ts +285 -0
  183. package/frontend/pages/studiocms_api/_handlers/dashboard/templates.ts +75 -0
  184. package/frontend/pages/studiocms_api/_handlers/dashboard/users.ts +312 -0
  185. package/frontend/pages/studiocms_api/_handlers/dashboard/verifyEndpoints.ts +307 -0
  186. package/frontend/pages/studiocms_api/_handlers/integration/dbStudio.ts +98 -0
  187. package/frontend/pages/studiocms_api/_handlers/integration/index.ts +17 -0
  188. package/frontend/pages/studiocms_api/_handlers/integration/storageManager.ts +107 -0
  189. package/frontend/pages/studiocms_api/_handlers/rest-api/index.ts +8 -0
  190. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/_shared.ts +41 -0
  191. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/index.ts +17 -0
  192. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/public.ts +195 -0
  193. package/frontend/pages/studiocms_api/_handlers/rest-api/v1/secure.ts +1726 -0
  194. package/frontend/pages/studiocms_api/_handlers/sdk.ts +129 -0
  195. package/frontend/pages/studiocms_api/_middleware/astroLocals.ts +36 -0
  196. package/frontend/pages/studiocms_api/_middleware/restApi.ts +56 -0
  197. package/frontend/pages/studiocms_api/integrations/[...all].ts +8 -0
  198. package/frontend/scripts/formdata.ts +219 -0
  199. package/frontend/setup-pages/3-done.astro +4 -20
  200. package/frontend/setup-pages/studiocms_api/dashboard/step-2.ts +3 -6
  201. package/frontend/styles/dashboard-base.css +0 -1
  202. package/frontend/web-vitals/endpoint.ts +2 -1
  203. package/package.json +34 -29
  204. package/dist/global.d.ts +0 -9
  205. package/frontend/components/dashboard/LoginChecker.astro +0 -68
  206. package/frontend/components/dashboard/user-mgmt/RankCheck.astro +0 -57
  207. package/frontend/components/first-time-setup/snippets/opt1-astro.config.diff +0 -14
  208. package/frontend/components/first-time-setup/snippets/opt2-astro.config.diff +0 -9
  209. package/frontend/middleware/_authmap.ts +0 -63
  210. package/frontend/pages/studiocms_api/auth/[path].ts +0 -384
  211. package/frontend/pages/studiocms_api/auth/[provider]/[...id].ts +0 -64
  212. package/frontend/pages/studiocms_api/auth/[provider]/_effects/index.ts +0 -101
  213. package/frontend/pages/studiocms_api/auth/_shared.ts +0 -52
  214. package/frontend/pages/studiocms_api/dashboard/api-tokens.ts +0 -115
  215. package/frontend/pages/studiocms_api/dashboard/config.ts +0 -74
  216. package/frontend/pages/studiocms_api/dashboard/content/diff.ts +0 -73
  217. package/frontend/pages/studiocms_api/dashboard/content/folder.ts +0 -220
  218. package/frontend/pages/studiocms_api/dashboard/content/page.ts +0 -359
  219. package/frontend/pages/studiocms_api/dashboard/create-reset-link.ts +0 -77
  220. package/frontend/pages/studiocms_api/dashboard/create-user-invite.ts +0 -231
  221. package/frontend/pages/studiocms_api/dashboard/create-user.ts +0 -186
  222. package/frontend/pages/studiocms_api/dashboard/email-notification-settings-site.ts +0 -74
  223. package/frontend/pages/studiocms_api/dashboard/mailer/check-email.ts +0 -75
  224. package/frontend/pages/studiocms_api/dashboard/mailer/config.ts +0 -136
  225. package/frontend/pages/studiocms_api/dashboard/plugins/[plugin].ts +0 -80
  226. package/frontend/pages/studiocms_api/dashboard/profile.ts +0 -245
  227. package/frontend/pages/studiocms_api/dashboard/resend-verify-email.ts +0 -77
  228. package/frontend/pages/studiocms_api/dashboard/reset-password.ts +0 -124
  229. package/frontend/pages/studiocms_api/dashboard/search-list.ts +0 -59
  230. package/frontend/pages/studiocms_api/dashboard/taxonomy-search.ts +0 -47
  231. package/frontend/pages/studiocms_api/dashboard/taxonomy.ts +0 -230
  232. package/frontend/pages/studiocms_api/dashboard/templates.ts +0 -74
  233. package/frontend/pages/studiocms_api/dashboard/update-user-notifications.ts +0 -86
  234. package/frontend/pages/studiocms_api/dashboard/users.ts +0 -236
  235. package/frontend/pages/studiocms_api/dashboard/verify-email.ts +0 -83
  236. package/frontend/pages/studiocms_api/dashboard/verify-session.ts +0 -187
  237. package/frontend/pages/studiocms_api/integrations/[type]/[...id].ts +0 -15
  238. package/frontend/pages/studiocms_api/integrations/[type]/_routes/db-studio.ts +0 -173
  239. package/frontend/pages/studiocms_api/integrations/[type]/_routes/storage.ts +0 -88
  240. package/frontend/pages/studiocms_api/partials/editor.astro +0 -74
  241. package/frontend/pages/studiocms_api/partials/render.astro +0 -39
  242. package/frontend/pages/studiocms_api/partials/user-list-items.astro +0 -43
  243. package/frontend/pages/studiocms_api/rest/utils/auth-token.ts +0 -59
  244. package/frontend/pages/studiocms_api/rest/v1/[type]/[...id].ts +0 -23
  245. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/categories.ts +0 -267
  246. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/folders.ts +0 -283
  247. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/pages.ts +0 -505
  248. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/settings.ts +0 -100
  249. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/tags.ts +0 -229
  250. package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/users.ts +0 -553
  251. package/frontend/pages/studiocms_api/rest/v1/public/[type]/[...id].ts +0 -19
  252. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/categories.ts +0 -74
  253. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/folders.ts +0 -85
  254. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/pages.ts +0 -103
  255. package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/tags.ts +0 -67
  256. package/frontend/pages/studiocms_api/sdk/[...path].ts +0 -97
  257. package/frontend/pages/studiocms_api/sdk/utils/changelog.ts +0 -119
  258. package/frontend/scripts/auth/formListener.ts +0 -81
  259. package/frontend/scripts/formdata-utils.ts +0 -116
  260. package/frontend/utils/build-partial-schema.ts +0 -46
  261. package/frontend/utils/errors.ts +0 -6
  262. package/frontend/utils/param-extractor.ts +0 -83
  263. package/frontend/utils/rest-router.ts +0 -444
@@ -1,293 +1,248 @@
1
- import { z } from "astro/zod";
2
- import { pluginTranslationsSchema } from "./i18n.js";
1
+ import * as Schema from "effect/Schema";
2
+ import { FunctionSchema, SyncFunctionSchema } from "effectify/schemas";
3
+ import { AstroIntegrationLoggerSchema, AstroIntegrationSchema } from "../external-schemas.js";
4
+ import { PluginTranslationsSchema } from "./i18n.js";
3
5
  import {
4
- astroIntegrationSchema,
5
6
  DashboardPageSchema,
6
7
  FrontendNavigationLinksSchema,
8
+ GridItemInputSchema,
7
9
  PageTypesSchema,
8
10
  SettingsPageSchema
9
11
  } from "./shared.js";
10
- const ComponentRenderAugmentSchema = z.object({
11
- type: z.literal("component"),
12
- id: z.string(),
13
- components: z.record(z.string())
14
- });
15
- const PrefixRenderAugmentSchema = ComponentRenderAugmentSchema.extend({
16
- type: z.literal("prefix"),
17
- html: z.string()
18
- });
19
- const SuffixRenderAugmentSchema = ComponentRenderAugmentSchema.extend({
20
- type: z.literal("suffix"),
21
- html: z.string()
22
- });
23
- const RenderAugmentSchema = z.union([
12
+ class PostProcessorSchema extends Schema.Class("PostProcessorSchema")({
13
+ id: Schema.String,
14
+ postProcessor: Schema.String
15
+ }) {
16
+ }
17
+ class RenderAugmentBaseSchema extends Schema.Class(
18
+ "RenderAugmentBaseSchema"
19
+ )({
20
+ id: Schema.String,
21
+ components: Schema.Record({
22
+ key: Schema.String,
23
+ value: Schema.String
24
+ })
25
+ }) {
26
+ }
27
+ class ComponentRenderAugmentSchema extends RenderAugmentBaseSchema.extend(
28
+ "ComponentRenderAugmentSchema"
29
+ )({
30
+ type: Schema.Literal("component")
31
+ }) {
32
+ }
33
+ class PrefixRenderAugmentSchema extends RenderAugmentBaseSchema.extend(
34
+ "PrefixRenderAugmentSchema"
35
+ )({
36
+ type: Schema.Literal("prefix"),
37
+ html: Schema.String
38
+ }) {
39
+ }
40
+ class SuffixRenderAugmentSchema extends RenderAugmentBaseSchema.extend(
41
+ "SuffixRenderAugmentSchema"
42
+ )({
43
+ type: Schema.Literal("suffix"),
44
+ html: Schema.String
45
+ }) {
46
+ }
47
+ class PostProcessorAugmentSchema extends PostProcessorSchema.extend(
48
+ "PostProcessorAugmentSchema"
49
+ )({
50
+ type: Schema.Literal("post-processor")
51
+ }) {
52
+ }
53
+ const RenderAugmentSchema = Schema.Union(
24
54
  ComponentRenderAugmentSchema,
25
55
  PrefixRenderAugmentSchema,
26
- SuffixRenderAugmentSchema
27
- ]);
28
- const RenderAugmentsSchema = z.array(RenderAugmentSchema).optional();
29
- const StudioCMSSanitizeOptionsSchema = z.object({
30
- /** An Array of strings indicating elements that the sanitizer should not remove. All elements not in the array will be dropped. */
31
- allowElements: z.array(z.string()).optional(),
32
- /** An Array of strings indicating elements that the sanitizer should remove. Children will be kept. */
33
- blockElements: z.array(z.string()).optional(),
34
- /** An Array of strings indicating elements (including nested elements) that the sanitizer should remove. */
35
- dropElements: z.array(z.string()).optional(),
36
- /** An object where each key is the attribute name and the value is an array of allowed tag names. Matching attributes will not be removed. All attributes that are not in the array will be dropped. */
37
- allowAttributes: z.record(z.array(z.string())).optional(),
38
- /** An object where each key is the attribute name and the value is an array of dropped tag names. Matching attributes will be removed. */
39
- dropAttributes: z.record(z.array(z.string())).optional(),
40
- /** A boolean value to remove components and their children. If set to true, components will be subject to built-in and custom configuration checks (and will be retained or dropped based on those checks). Default is `false`. */
41
- allowComponents: z.boolean().optional(),
42
- /** A boolean value to remove custom elements and their children. If set to true, custom elements will be subject to built-in and custom configuration checks (and will be retained or dropped based on those checks). Default is `false` */
43
- allowCustomElements: z.boolean().optional(),
44
- /** A boolean value to remove HTML comments. Set to true in order to keep comments. Default is `false`. */
45
- allowComments: z.boolean().optional()
46
- }).optional();
47
- const dashboardPagesArray = z.array(DashboardPageSchema).optional();
48
- const astroIntegrationLoggerSchema = z.custom();
49
- const SafePluginListItemSchema = z.object({
50
- /**
51
- * Identifier of the plugin from the package.json
52
- */
53
- identifier: z.string(),
54
- /**
55
- * Label of the plugin to be displayed in the StudioCMS Dashboard
56
- */
57
- name: z.string(),
58
- /**
59
- * If this exists, the plugin will have its own setting page
60
- */
61
- settingsPage: SettingsPageSchema.optional(),
62
- /**
63
- * Navigation Links for use with the `@studiocms/frontend` package to display links in the frontend
64
- */
65
- frontendNavigationLinks: FrontendNavigationLinksSchema.optional(),
66
- /**
67
- * Page Type definition. If this is present, the plugin wants to be able to modify the page creation process
68
- */
69
- pageTypes: PageTypesSchema.optional()
56
+ SuffixRenderAugmentSchema,
57
+ PostProcessorAugmentSchema
58
+ );
59
+ const RenderAugmentsSchema = Schema.Array(RenderAugmentSchema);
60
+ const dashboardPagesArray = Schema.Array(DashboardPageSchema);
61
+ const SafePluginListItemSchema = Schema.Struct({
62
+ identifier: Schema.String,
63
+ name: Schema.String,
64
+ settingsPage: SettingsPageSchema,
65
+ frontendNavigationLinks: FrontendNavigationLinksSchema,
66
+ pageTypes: PageTypesSchema
70
67
  });
71
- const SafePluginListSchema = z.array(SafePluginListItemSchema);
72
- const SitemapConfigSchema = z.object({
73
- /**
74
- * If this is true, the plugin will enable the Sitemap
75
- */
76
- triggerSitemap: z.boolean().optional(),
77
- /**
78
- * Allows the plugin to add sitemap endpoints
79
- */
80
- sitemaps: z.array(
81
- z.object({
82
- /**
83
- * The name of the plugin
84
- */
85
- pluginName: z.string(),
86
- /**
87
- * The path to the sitemap XML file
88
- */
89
- sitemapXMLEndpointPath: z.string().or(z.instanceof(URL))
68
+ const SafePluginListSchema = Schema.mutable(Schema.Array(SafePluginListItemSchema));
69
+ const SitemapConfigSchema = Schema.mutable(
70
+ Schema.Struct({
71
+ triggerSitemap: Schema.optional(Schema.Boolean),
72
+ sitemaps: Schema.optional(
73
+ Schema.Array(
74
+ Schema.Struct({
75
+ pluginName: Schema.String,
76
+ sitemapXMLEndpointPath: Schema.Union(Schema.String, Schema.URL)
77
+ })
78
+ )
79
+ )
80
+ })
81
+ );
82
+ const DashboardConfigSchema = Schema.mutable(
83
+ Schema.Struct({
84
+ translations: PluginTranslationsSchema,
85
+ dashboardGridItems: Schema.optional(Schema.Array(GridItemInputSchema)),
86
+ dashboardPages: Schema.optional(
87
+ Schema.Struct({
88
+ user: Schema.optional(dashboardPagesArray),
89
+ admin: Schema.optional(dashboardPagesArray)
90
+ })
91
+ ),
92
+ settingsPage: SettingsPageSchema
93
+ })
94
+ );
95
+ const DashboardAugmentSchema = Schema.mutable(
96
+ Schema.Struct({
97
+ scripts: Schema.optional(Schema.Array(Schema.String)),
98
+ components: Schema.optional(
99
+ Schema.Record({
100
+ key: Schema.String,
101
+ value: Schema.String
102
+ })
103
+ )
104
+ })
105
+ );
106
+ const FrontendConfigSchema = Schema.mutable(
107
+ Schema.Struct({
108
+ frontendNavigationLinks: FrontendNavigationLinksSchema
109
+ })
110
+ );
111
+ const RenderingConfigSchema = Schema.mutable(
112
+ Schema.Struct({
113
+ pageTypes: PageTypesSchema,
114
+ augments: Schema.optional(RenderAugmentsSchema),
115
+ postProcessor: Schema.optional(PostProcessorSchema)
116
+ })
117
+ );
118
+ const ImageServiceConfigSchema = Schema.mutable(
119
+ Schema.Struct({
120
+ imageService: Schema.optional(
121
+ Schema.Struct({
122
+ identifier: Schema.String,
123
+ servicePath: Schema.Union(Schema.String, Schema.URL)
124
+ })
125
+ )
126
+ })
127
+ );
128
+ const AuthServiceConfigSchema = Schema.mutable(
129
+ Schema.Struct({
130
+ oAuthProvider: Schema.Struct({
131
+ name: Schema.String,
132
+ formattedName: Schema.String,
133
+ svg: Schema.String,
134
+ endpointPath: Schema.String,
135
+ requiredEnvVariables: Schema.optional(Schema.Array(Schema.String))
90
136
  })
91
- ).optional()
92
- });
93
- const DashboardConfigSchema = z.object({
94
- /**
95
- * The translations for the plugin in the following format:
96
- *
97
- * ```json
98
- * {
99
- * "en": {
100
- * "component1": {
101
- * "title": "Title",
102
- * "description": "Description"
103
- * },
104
- * "component2": {
105
- * "title": "Title",
106
- * "description": "Description"
107
- * }
108
- * },
109
- * "fr": {
110
- * "component1": {
111
- * "title": "Titre",
112
- * "description": "Description"
113
- * },
114
- * "component2": {
115
- * "title": "Titre",
116
- * "description": "Description"
117
- * }
118
- * }
119
- * }
120
- * ```
121
- */
122
- translations: pluginTranslationsSchema,
123
- /**
124
- * Allows the plugin to add custom dashboard grid items
125
- */
126
- dashboardGridItems: z.custom().optional(),
127
- /**
128
- * Dashboard Pages for the plugin
129
- */
130
- dashboardPages: z.object({
131
- /**
132
- * Pages for the user role
133
- *
134
- * These are shown in the "Dashboard" section of the dashboard sidebar
135
- */
136
- user: dashboardPagesArray,
137
- /**
138
- * Pages for the editor role
139
- *
140
- * These are shown in the "Admin" section of the dashboard sidebar
141
- */
142
- admin: dashboardPagesArray
143
- }).optional(),
144
- /**
145
- * If this exists, the plugin will have its own setting page
146
- */
147
- settingsPage: SettingsPageSchema
148
- });
149
- const DashboardAugmentSchema = z.object({
150
- /**
151
- * Scripts to be added to the dashboard
152
- *
153
- * Scripts should be paths to the client side files that will be loaded in the dashboard
154
- *
155
- * These files should be able to imported as ambient modules
156
- */
157
- scripts: z.array(z.string()).optional(),
158
- /**
159
- * Astro Components to be added to the dashboard
160
- *
161
- * These components should be self-contained and not rely on any external state
162
- *
163
- * The key is the component identifier, and the value is the path to the component file
164
- */
165
- components: z.record(z.string()).optional()
166
- });
167
- const FrontendConfigSchema = z.object({
168
- /**
169
- * Navigation Links for use with the `@studiocms/frontend` package to display links in the frontend
170
- */
171
- frontendNavigationLinks: FrontendNavigationLinksSchema
172
- });
173
- const RenderingConfigSchema = z.object({
174
- /**
175
- * Page Type definition. If this is present, the plugin wants to be able to modify the page creation process
176
- */
177
- pageTypes: PageTypesSchema,
178
- /**
179
- * Augments to modify component rendering
180
- *
181
- * When adding new augments, please ensure that the `id` field is unique across all augments.
182
- *
183
- * the `id` field is also used to identify augment translations from the plugin translations
184
- * schema, below is an example of how to add augment translations:
185
- *
186
- * ```json
187
- * {
188
- * "en": {
189
- * "augments": {
190
- * "augment-id": "This is the augment text"
191
- * }
192
- * },
193
- * "fr": {
194
- * "augments": {
195
- * "augment-id": "Ceci est le texte d'augmentation"
196
- * }
197
- * }
198
- * }
199
- * ```
200
- */
201
- augments: RenderAugmentsSchema
202
- });
203
- const ImageServiceConfigSchema = z.object({
204
- imageService: z.object({
205
- /**
206
- * Identifier used for the `preferredImageService` setting on StudioCMS
207
- */
208
- identifier: z.string(),
209
- /**
210
- * The Service Path to the file that contains your service, the service must be exported as a default export.
211
- *
212
- * For an example of a service, checkout `/src/imageServices/cloudinary-js-service.ts` and its plugin `/src/imageServices/cloudinary-js.ts` within the StudioCMS package on GitHub.
213
- */
214
- servicePath: z.string().or(z.instanceof(URL))
215
- }).optional()
216
- });
217
- const AuthServiceConfigSchema = z.object({
218
- oAuthProvider: z.object({
219
- /**
220
- * The name of the OAuth provider, e.g., 'google', 'github', etc.
221
- */
222
- name: z.string(),
223
- /**
224
- * The formatted name of the OAuth provider, e.g., 'Google', 'GitHub', etc.
225
- */
226
- formattedName: z.string(),
227
- /**
228
- * The inline SVG image for the OAuth provider button.
229
- * This should be a string containing the SVG markup.
230
- *
231
- * Note: Please ensure the class `oauth-logo` is included in the SVG for styling purposes.
232
- *
233
- * @example
234
- * `<svg width="24px" height="24px" viewBox="0 0 98 96" xmlns="http://www.w3.org/2000/svg" class="oauth-logo">...</svg>`,
235
- */
236
- svg: z.string(),
237
- /**
238
- * The path to the endpoint file that handles the OAuth authentication for this provider.
239
- * This should be a string or URL pointing to the endpoint ts file.
240
- *
241
- * Note: The endpoint should export two functions:
242
- * - `initSession`: Initializes the session for the OAuth provider.
243
- * - `initCallback`: Handles the callback from the OAuth provider after authentication.
244
- *
245
- * @example
246
- * `/src/auth/providers/google.ts`
247
- */
248
- endpointPath: z.string(),
249
- /**
250
- * Required environment variables for the OAuth provider.
251
- * This is an optional array of strings that specifies which environment variables are required for the OAuth provider to function correctly.
252
- * If specified, these variables must be set in the environment for the OAuth provider to work.
253
- */
254
- requiredEnvVariables: z.array(z.string()).optional()
255
137
  })
138
+ );
139
+ const StorageManagerConfigSchema = Schema.Struct({
140
+ managerPath: Schema.String
256
141
  });
257
- const StorageManagerConfigSchema = z.object({
258
- managerPath: z.string()
259
- });
260
- const baseHookSchema = z.object({
261
- logger: astroIntegrationLoggerSchema
262
- });
263
- const astroConfigHookSchema = baseHookSchema.extend({
264
- addIntegrations: z.function(
265
- z.tuple([z.union([astroIntegrationSchema, z.array(astroIntegrationSchema)])]),
266
- z.void()
142
+ class BaseHookSchema extends Schema.Class("BaseHookSchema")({
143
+ logger: AstroIntegrationLoggerSchema
144
+ }) {
145
+ }
146
+ class astroConfigHookSchema extends BaseHookSchema.extend(
147
+ "astroConfigHookSchema"
148
+ )({
149
+ addIntegrations: FunctionSchema(
150
+ Schema.Union(AstroIntegrationSchema, Schema.mutable(Schema.Array(AstroIntegrationSchema))),
151
+ Schema.Void
267
152
  )
153
+ }) {
154
+ }
155
+ class SitemapHookSchema extends BaseHookSchema.extend(
156
+ "SitemapHookSchema"
157
+ )({
158
+ setSitemap: FunctionSchema(SitemapConfigSchema, Schema.Void)
159
+ }) {
160
+ }
161
+ class DashboardHookSchema extends BaseHookSchema.extend(
162
+ "DashboardHookSchema"
163
+ )({
164
+ setDashboard: FunctionSchema(DashboardConfigSchema, Schema.Void),
165
+ augmentDashboard: FunctionSchema(DashboardAugmentSchema, Schema.Void)
166
+ }) {
167
+ }
168
+ class FrontendHookSchema extends BaseHookSchema.extend(
169
+ "FrontendHookSchema"
170
+ )({
171
+ setFrontend: FunctionSchema(FrontendConfigSchema, Schema.Void)
172
+ }) {
173
+ }
174
+ class RenderingHookSchema extends BaseHookSchema.extend(
175
+ "RenderingHookSchema"
176
+ )({
177
+ setRendering: FunctionSchema(RenderingConfigSchema, Schema.Void)
178
+ }) {
179
+ }
180
+ class ImageServiceHookSchema extends BaseHookSchema.extend(
181
+ "ImageServiceHookSchema"
182
+ )({
183
+ setImageService: FunctionSchema(ImageServiceConfigSchema, Schema.Void)
184
+ }) {
185
+ }
186
+ class AuthServiceHookSchema extends BaseHookSchema.extend(
187
+ "AuthServiceHookSchema"
188
+ )({
189
+ setAuthService: FunctionSchema(AuthServiceConfigSchema, Schema.Void)
190
+ }) {
191
+ }
192
+ class StorageManagerHookSchema extends BaseHookSchema.extend(
193
+ "StorageManagerHookSchema"
194
+ )({
195
+ setStorageManager: FunctionSchema(StorageManagerConfigSchema, Schema.Void)
196
+ }) {
197
+ }
198
+ const makeHookSchema = (argsSchema) => Schema.optional(
199
+ Schema.Union(
200
+ FunctionSchema(argsSchema, Schema.Void),
201
+ SyncFunctionSchema(argsSchema, Schema.Void)
202
+ )
203
+ ).annotations({
204
+ description: "A hook schema for validating the structure of hooks that plugins can implement to integrate with various aspects of the StudioCMS system."
268
205
  });
269
- const studiocms_SitemapHookSchema = baseHookSchema.extend({
270
- setSitemap: z.function(z.tuple([SitemapConfigSchema]), z.void())
271
- });
272
- const studiocms_DashboardHookSchema = baseHookSchema.extend({
273
- setDashboard: z.function(z.tuple([DashboardConfigSchema]), z.void()),
274
- augmentDashboard: z.function(z.tuple([DashboardAugmentSchema]), z.void())
275
- });
276
- const studiocms_FrontendHookSchema = baseHookSchema.extend({
277
- setFrontend: z.function(z.tuple([FrontendConfigSchema]), z.void())
278
- });
279
- const studiocms_RenderingHookSchema = baseHookSchema.extend({
280
- setRendering: z.function(z.tuple([RenderingConfigSchema]), z.void())
281
- });
282
- const studiocms_ImageServiceHookSchema = baseHookSchema.extend({
283
- setImageService: z.function(z.tuple([ImageServiceConfigSchema]), z.void())
284
- });
285
- const studiocms_AuthHookSchema = baseHookSchema.extend({
286
- setAuthService: z.function(z.tuple([AuthServiceConfigSchema]), z.void())
287
- });
288
- const studiocms_StorageManagerHookSchema = baseHookSchema.extend({
289
- setStorageManager: z.function(z.tuple([StorageManagerConfigSchema]), z.void())
206
+ const InternalPluginHooksSchema = Schema.Struct({
207
+ "studiocms:astro-config": makeHookSchema(astroConfigHookSchema),
208
+ "studiocms:auth": makeHookSchema(AuthServiceHookSchema),
209
+ "studiocms:dashboard": makeHookSchema(DashboardHookSchema),
210
+ "studiocms:frontend": makeHookSchema(FrontendHookSchema),
211
+ "studiocms:rendering": makeHookSchema(RenderingHookSchema),
212
+ "studiocms:image-service": makeHookSchema(ImageServiceHookSchema),
213
+ "studiocms:sitemap": makeHookSchema(SitemapHookSchema)
290
214
  });
215
+ const BasePluginHooksSchema = Schema.mutable(InternalPluginHooksSchema);
216
+ const StorageManagerPluginHooksSchema = Schema.mutable(
217
+ Schema.Struct({
218
+ ...InternalPluginHooksSchema.fields,
219
+ "studiocms:storage-manager": makeHookSchema(StorageManagerHookSchema)
220
+ })
221
+ );
222
+ class StudioCMSPluginBaseSchema extends Schema.Class(
223
+ "StudioCMSPluginBaseSchema"
224
+ )({
225
+ identifier: Schema.String,
226
+ name: Schema.String,
227
+ /**
228
+ * @deprecated The `studiocmsMinimumVersion` property is deprecated and will be removed in a future release. Please ensure that your plugin is compatible with the latest version of StudioCMS and remove this property from your plugin configuration. It is recommended to use `peerDependencies` in your plugin's package.json to specify the compatible versions of StudioCMS instead of relying on this property for version compatibility checks.
229
+ */
230
+ studiocmsMinimumVersion: Schema.optional(Schema.String),
231
+ requires: Schema.optional(Schema.Array(Schema.String))
232
+ }) {
233
+ }
234
+ class StudioCMSPluginSchema extends StudioCMSPluginBaseSchema.extend(
235
+ "StudioCMSPluginSchema"
236
+ )({
237
+ hooks: BasePluginHooksSchema
238
+ }) {
239
+ }
240
+ class StudioCMSStorageManagerSchema extends StudioCMSPluginBaseSchema.extend(
241
+ "StudioCMSStorageManagerSchema"
242
+ )({
243
+ hooks: StorageManagerPluginHooksSchema
244
+ }) {
245
+ }
291
246
  function definePlugin(options) {
292
247
  return options;
293
248
  }
@@ -295,11 +250,40 @@ function defineStorageManager(options) {
295
250
  return options;
296
251
  }
297
252
  export {
253
+ AuthServiceConfigSchema,
254
+ AuthServiceHookSchema,
255
+ BaseHookSchema,
256
+ BasePluginHooksSchema,
257
+ ComponentRenderAugmentSchema,
258
+ DashboardAugmentSchema,
259
+ DashboardConfigSchema,
260
+ DashboardHookSchema,
261
+ FrontendConfigSchema,
262
+ FrontendHookSchema,
263
+ ImageServiceConfigSchema,
264
+ ImageServiceHookSchema,
265
+ InternalPluginHooksSchema,
266
+ PostProcessorAugmentSchema,
267
+ PostProcessorSchema,
268
+ PrefixRenderAugmentSchema,
269
+ RenderAugmentBaseSchema,
298
270
  RenderAugmentSchema,
299
271
  RenderAugmentsSchema,
272
+ RenderingConfigSchema,
273
+ RenderingHookSchema,
300
274
  SafePluginListItemSchema,
301
275
  SafePluginListSchema,
302
- StudioCMSSanitizeOptionsSchema,
276
+ SitemapConfigSchema,
277
+ SitemapHookSchema,
278
+ StorageManagerConfigSchema,
279
+ StorageManagerHookSchema,
280
+ StorageManagerPluginHooksSchema,
281
+ StudioCMSPluginBaseSchema,
282
+ StudioCMSPluginSchema,
283
+ StudioCMSStorageManagerSchema,
284
+ SuffixRenderAugmentSchema,
285
+ astroConfigHookSchema,
286
+ dashboardPagesArray,
303
287
  definePlugin,
304
288
  defineStorageManager
305
289
  };