@phtngyn/cms 0.2.0-beta.1 → 0.2.0-beta.2

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 (80) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +38 -45
  3. package/package.json +3 -1
  4. package/src/ApplicationTypes.d.ts +7 -5
  5. package/src/{Configuration-CjVUBBwa.js → Configuration-BU-UyGoH.js} +4 -4
  6. package/src/{Configuration-CjVUBBwa.js.map → Configuration-BU-UyGoH.js.map} +1 -1
  7. package/src/Configuration.d.ts +41 -24
  8. package/src/Configuration.js.map +1 -1
  9. package/src/Content.js +1 -1
  10. package/src/{ContentTransfer-CTzGGKFV.js → ContentTransfer-BhF9G56s.js} +2 -2
  11. package/src/{ContentTransfer-CTzGGKFV.js.map → ContentTransfer-BhF9G56s.js.map} +1 -1
  12. package/src/{DocumentEngine-BbhfnTAc.js → DocumentEngine-ClhFXW9M.js} +4 -4
  13. package/src/{DocumentEngine-BbhfnTAc.js.map → DocumentEngine-ClhFXW9M.js.map} +1 -1
  14. package/src/DocumentModel.d.ts +6 -1
  15. package/src/DocumentModel.js +4 -3
  16. package/src/DocumentModel.js.map +1 -1
  17. package/src/{Forms-CfcI3tPU.js → Forms-BbkE7QfC.js} +47 -16
  18. package/src/Forms-BbkE7QfC.js.map +1 -0
  19. package/src/{Forms-02-p8qEw.js → Forms-DoB56hfe.js} +24 -7
  20. package/src/Forms-DoB56hfe.js.map +1 -0
  21. package/src/{Forms-BorTcIlp.d.ts → Forms-R0HoTR-o.d.ts} +30 -9
  22. package/src/Forms.d.ts +16 -15
  23. package/src/Forms.js.map +1 -1
  24. package/src/{I18n-BXlVunfa.d.ts → I18n-zbqpWxki.d.ts} +3 -1
  25. package/src/I18n.d.ts +1 -1
  26. package/src/Module.js +4 -2
  27. package/src/Module.js.map +1 -1
  28. package/src/{S3MediaObjects-DC0c8sYC.js → S3MediaObjects-D5Ns4FM6.js} +14 -12
  29. package/src/S3MediaObjects-D5Ns4FM6.js.map +1 -0
  30. package/src/cli.js +60 -34
  31. package/src/cli.js.map +1 -1
  32. package/src/{connection-BPf4BQUZ.js → connection-D5S9Iph-.js} +2 -2
  33. package/src/{connection-BPf4BQUZ.js.map → connection-D5S9Iph-.js.map} +1 -1
  34. package/src/{dev-lifecycle-vQLxwCFq.js → dev-lifecycle-CZ7iCzG9.js} +129 -42
  35. package/src/dev-lifecycle-CZ7iCzG9.js.map +1 -0
  36. package/src/{installation-DsGst1BH.js → installation-BNuoRDOz.js} +43 -31
  37. package/src/installation-BNuoRDOz.js.map +1 -0
  38. package/src/internal/authoring-catalog.js +2 -2
  39. package/src/internal/authoring-metadata.js +1 -1
  40. package/src/internal/configuration.js +149 -50
  41. package/src/internal/configuration.js.map +1 -1
  42. package/src/internal/dev-lifecycle.js +2 -2
  43. package/src/internal/diagnostics.js +47 -0
  44. package/src/internal/diagnostics.js.map +1 -0
  45. package/src/internal/document-model.js +2 -2
  46. package/src/internal/form-capabilities.js +1 -1
  47. package/src/internal/i18n.js +6 -1
  48. package/src/internal/i18n.js.map +1 -1
  49. package/src/{location-BgYhXEZp.js → location-CPX7oj0o.js} +2 -2
  50. package/src/{location-BgYhXEZp.js.map → location-CPX7oj0o.js.map} +1 -1
  51. package/src/{models-k2nXyD6q.js → models-C9kF9JlQ.js} +2 -2
  52. package/src/{models-k2nXyD6q.js.map → models-C9kF9JlQ.js.map} +1 -1
  53. package/src/{models-DgkGTFus.js → models-ChRxBChy.js} +4 -2
  54. package/src/{models-DgkGTFus.js.map → models-ChRxBChy.js.map} +1 -1
  55. package/src/runtime/delivery/context.js +1 -1
  56. package/src/runtime/delivery/plugin.js +3 -2
  57. package/src/runtime/delivery/plugin.js.map +1 -1
  58. package/src/runtime/forms/document.js +1 -1
  59. package/src/runtime/forms/useCmsForm.js +28 -24
  60. package/src/runtime/forms/useCmsForm.js.map +1 -1
  61. package/src/runtime/i18n/useCmsI18n.d.ts +1 -1
  62. package/src/runtime/installation.js +1 -1
  63. package/src/runtime/plugin.js +12 -4
  64. package/src/runtime/plugin.js.map +1 -1
  65. package/src/runtime/preview/connection.js +1 -1
  66. package/src/runtime/preview/controller.js +2 -2
  67. package/src/runtime/preview/plugin.client.js +3 -3
  68. package/src/runtime/preview/store.js +1 -1
  69. package/src/runtime/sitemap.js +1 -1
  70. package/src/{store-BYgSt7E3.js → store-B49J21NA.js} +3 -3
  71. package/src/{store-BYgSt7E3.js.map → store-B49J21NA.js.map} +1 -1
  72. package/studio/{CreateDocumentDialog-BdiM77bb.js → CreateDocumentDialog-DJ8c0WZb.js} +3 -3
  73. package/studio/{documentPlanning-B7fyUj9r.js → documentPlanning-CDb31mnl.js} +6417 -6358
  74. package/studio/host.css +1 -1
  75. package/studio/host.js +7608 -7250
  76. package/src/Forms-02-p8qEw.js.map +0 -1
  77. package/src/Forms-CfcI3tPU.js.map +0 -1
  78. package/src/S3MediaObjects-DC0c8sYC.js.map +0 -1
  79. package/src/dev-lifecycle-vQLxwCFq.js.map +0 -1
  80. package/src/installation-DsGst1BH.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"models-DgkGTFus.js","names":[],"sources":["../../../../protocol/src/Identity.ts","../../../../protocol/src/internal/configuration/scalars.ts","../../../../protocol/src/Media.ts","../../../../protocol/src/AccessControl.ts","../../../../protocol/src/Seo.ts","../../../../protocol/src/internal/documents/models.ts"],"sourcesContent":["import { Schema } from 'effect'\n\nexport const RequestId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('RequestId'))\n\nexport type RequestId = typeof RequestId.Type\n","import { Schema } from 'effect'\nimport { publicPathPattern } from '../scalars'\n\nconst collectionNamePattern = /^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/u\n\nconst localePattern = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u\n\nconst sourceDirectoryPattern = /^(?:\\.|(?!\\.)[^/?#\\\\]+(?:\\/(?!\\.)[^/?#\\\\]+)*)$/u\n\nexport const AddressPattern = Schema.String.check(Schema.isPattern(publicPathPattern)).pipe(\n Schema.brand('AddressPattern'),\n)\n\nexport type AddressPattern = typeof AddressPattern.Type\n\nexport const CollectionName = Schema.String.check(Schema.isPattern(collectionNamePattern)).pipe(\n Schema.brand('CollectionName'),\n)\n\nexport type CollectionName = typeof CollectionName.Type\n\nexport const Locale = Schema.String.check(Schema.isPattern(localePattern)).pipe(Schema.brand('Locale'))\n\nexport type Locale = typeof Locale.Type\n\nexport const SourceDirectory = Schema.String.check(Schema.isPattern(sourceDirectoryPattern)).pipe(\n Schema.brand('SourceDirectory'),\n)\n\nexport type SourceDirectory = typeof SourceDirectory.Type\n","/**\n * Media wire models. Search pages are newest-first with opaque continuation cursors; only ready\n * assets are public results, and names, folders, and object keys are validated path-safe values.\n */\nimport { Schema } from 'effect'\nimport { DocumentId, PublicPath, SourcePath } from './internal/documents/scalars'\nimport { nonNegativeInt } from './internal/scalars'\n\nconst hasUnsafeMediaCharacter = (value: string): boolean => {\n for (const character of value) {\n const codePoint = character.codePointAt(0)\n\n if (character === '\\\\' || (codePoint !== undefined && (codePoint <= 31 || codePoint === 127))) return true\n }\n\n return false\n}\n\nconst isSafeMediaPath = (value: string, allowEmpty: boolean): boolean => {\n if (value.length === 0) return allowEmpty\n\n if (value !== value.trim() || value.startsWith('/') || value.endsWith('/') || hasUnsafeMediaCharacter(value)) {\n return false\n }\n\n return value.split('/').every((segment) => segment.length > 0 && segment !== '.' && segment !== '..')\n}\n\nconst safeMediaFolder = Schema.makeFilter<string>((value) => isSafeMediaPath(value, true), {\n expected: 'a provider-relative media folder without traversal segments',\n})\n\nconst safeMediaObjectKey = Schema.makeFilter<string>((value) => isSafeMediaPath(value, false), {\n expected: 'a non-empty provider-relative media object key without traversal segments',\n})\n\nconst safeMediaName = Schema.makeFilter<string>(\n (value) =>\n value.length > 0 &&\n value.length <= 255 &&\n value === value.trim() &&\n value !== '.' &&\n value !== '..' &&\n !value.includes('/') &&\n !hasUnsafeMediaCharacter(value),\n { expected: 'a safe media file name of at most 255 characters' },\n)\n\nexport const MediaId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('MediaId'))\n\nexport type MediaId = typeof MediaId.Type\n\nexport const MediaFolder = Schema.String.check(Schema.isMaxLength(512), safeMediaFolder).pipe(\n Schema.brand('MediaFolder'),\n)\n\nexport type MediaFolder = typeof MediaFolder.Type\n\nexport const MediaObjectKey = Schema.String.check(Schema.isMaxLength(1024), safeMediaObjectKey).pipe(\n Schema.brand('MediaObjectKey'),\n)\n\nexport type MediaObjectKey = typeof MediaObjectKey.Type\n\nexport const MediaName = Schema.String.check(safeMediaName).pipe(Schema.brand('MediaName'))\n\nexport type MediaName = typeof MediaName.Type\n\nexport const MediaCursor = Schema.NonEmptyString.pipe(Schema.brand('MediaCursor'))\n\nexport type MediaCursor = typeof MediaCursor.Type\n\nexport const ImageMimeType = Schema.Literals(['image/avif', 'image/gif', 'image/jpeg', 'image/png', 'image/webp'])\n\nexport type ImageMimeType = typeof ImageMimeType.Type\n\nexport const MediaStatus = Schema.Literals(['uploading', 'ready', 'deleting'])\n\nexport type MediaStatus = typeof MediaStatus.Type\n\nexport const MediaByteSize = Schema.Int.check(Schema.isGreaterThan(0))\n\nexport type MediaByteSize = typeof MediaByteSize.Type\n\nexport const MediaAsset = Schema.Struct({\n kind: Schema.tag('image'),\n id: MediaId,\n objectKey: MediaObjectKey,\n url: Schema.NonEmptyString,\n name: MediaName,\n folder: MediaFolder,\n mimeType: ImageMimeType,\n byteSize: MediaByteSize,\n createdAt: Schema.DateTimeUtcFromString,\n updatedAt: Schema.DateTimeUtcFromString,\n status: MediaStatus,\n}).annotate({ identifier: 'MediaAsset' })\n\nexport interface MediaAsset extends Schema.Schema.Type<typeof MediaAsset> {}\n\nexport const MediaUpload = Schema.Struct({\n name: MediaName,\n folder: Schema.optionalKey(MediaFolder),\n declaredMimeType: Schema.optionalKey(Schema.NonEmptyString),\n declaredByteSize: MediaByteSize,\n}).annotate({ identifier: 'MediaUpload' })\n\nexport interface MediaUpload extends Schema.Schema.Type<typeof MediaUpload> {}\n\nexport const MediaQuery = Schema.Struct({\n cursor: Schema.optionalKey(MediaCursor),\n folder: Schema.optionalKey(MediaFolder),\n search: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(200))),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n}).annotate({ identifier: 'MediaQuery' })\n\nexport interface MediaQuery extends Schema.Schema.Type<typeof MediaQuery> {}\n\nconst ReadyMediaAssets = Schema.Array(MediaAsset).check(\n Schema.makeFilter((assets) => assets.every((asset) => asset.status === 'ready'), {\n expected: 'media assets whose lifecycle status is ready',\n }),\n)\n\nexport const MediaPage = Schema.Struct({\n assets: ReadyMediaAssets,\n folders: Schema.Array(MediaFolder),\n nextCursor: Schema.optionalKey(MediaCursor),\n total: nonNegativeInt,\n}).annotate({ identifier: 'MediaPage' })\n\nexport interface MediaPage extends Schema.Schema.Type<typeof MediaPage> {}\n\nexport const MediaReference = Schema.Struct({\n documentId: DocumentId,\n mediaId: Schema.optionalKey(MediaId),\n path: PublicPath,\n sourcePath: SourcePath,\n objectKey: MediaObjectKey,\n nodePath: Schema.Array(nonNegativeInt),\n}).annotate({ identifier: 'MediaReference' })\n\nexport interface MediaReference extends Schema.Schema.Type<typeof MediaReference> {}\n\nconst MediaObjectMismatch = Schema.Struct({\n asset: MediaAsset,\n storedByteSize: MediaByteSize,\n storedMimeType: Schema.optionalKey(ImageMimeType),\n}).annotate({ identifier: 'MediaObjectMismatch' })\n\nexport const MediaIntegrityReport = Schema.Struct({\n missingAssets: Schema.Array(MediaReference),\n missingObjects: Schema.Array(MediaAsset),\n mismatchedObjects: Schema.Array(MediaObjectMismatch),\n orphanedObjectKeys: Schema.Array(MediaObjectKey),\n unusedAssets: Schema.Array(MediaAsset),\n}).annotate({ identifier: 'MediaIntegrityReport' })\n\nexport interface MediaIntegrityReport extends Schema.Schema.Type<typeof MediaIntegrityReport> {}\n\nexport const MediaCleanupReport = Schema.Struct({\n removedObjectKeys: Schema.Array(MediaObjectKey),\n}).annotate({ identifier: 'MediaCleanupReport' })\n\nexport interface MediaCleanupReport extends Schema.Schema.Type<typeof MediaCleanupReport> {}\n\nexport class MediaNotFound extends Schema.TaggedError<MediaNotFound>()('Media.NotFound', {\n mediaId: MediaId,\n}) {}\n\nexport class MediaReferenced extends Schema.TaggedError<MediaReferenced>()('Media.Referenced', {\n mediaId: MediaId,\n references: Schema.Array(MediaReference),\n seoScopes: Schema.optionalKey(Schema.Array(Schema.Literals(['working', 'published']))),\n}) {}\n\nexport class MediaConflict extends Schema.TaggedError<MediaConflict>()('Media.Conflict', {\n mediaId: MediaId,\n}) {}\n\nexport class MediaInvalid extends Schema.TaggedError<MediaInvalid>()('Media.Invalid', {\n message: Schema.NonEmptyString,\n}) {}\n\nexport class MediaTooLarge extends Schema.TaggedError<MediaTooLarge>()('Media.TooLarge', {\n declaredByteSize: MediaByteSize,\n maxUploadBytes: MediaByteSize,\n}) {}\n","import { Schema } from 'effect'\nimport { RequestId } from './Identity'\nimport { CollectionName, Locale } from './internal/configuration/scalars'\nimport { DocumentId } from './internal/documents/scalars'\nimport { MediaFolder, MediaId } from './Media'\n\nexport const ROLES = ['administrator', 'editor', 'viewer'] as const\n\nexport const Role = Schema.Literals(ROLES)\n\nexport type Role = typeof Role.Type\n\nexport const StudioActor = Schema.Struct({\n id: Schema.NonEmptyString,\n email: Schema.NonEmptyString,\n name: Schema.NonEmptyString,\n // Provider roles remain visible, while access control recognizes only Role values.\n roles: Schema.Array(Schema.NonEmptyString),\n}).annotate({ identifier: 'StudioActor' })\n\nexport interface StudioActor extends Schema.Schema.Type<typeof StudioActor> {}\n\nexport const StudioRequestContext = Schema.Struct({\n actor: StudioActor,\n requestId: RequestId,\n}).annotate({ identifier: 'StudioRequestContext' })\n\nexport interface StudioRequestContext extends Schema.Schema.Type<typeof StudioRequestContext> {}\n\nexport const DOCUMENT_ACTIONS = [\n 'document.browse',\n 'document.read',\n 'document.trash',\n 'document.validate',\n 'document.create',\n 'document.update',\n 'document.move',\n 'document.remove',\n 'document.restore',\n 'document.undelete',\n 'document.publish',\n 'document.unpublish',\n 'document.duplicate',\n 'document.history',\n 'document.transfer',\n] as const\n\nconst DocumentAction = Schema.Literals(DOCUMENT_ACTIONS)\n\nconst DocumentCatalogResource = Schema.Struct({\n kind: Schema.tag('catalog'),\n})\n\nconst CollectionResource = Schema.Struct({\n kind: Schema.tag('collection'),\n collection: CollectionName,\n locale: Schema.optionalKey(Locale),\n})\n\nconst DocumentResource = Schema.Struct({\n kind: Schema.tag('document'),\n documentId: DocumentId,\n})\n\nconst DocumentAccessResource = Schema.Union([DocumentCatalogResource, CollectionResource, DocumentResource]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport const DocumentAccessDecision = Schema.Struct({\n action: DocumentAction,\n resource: DocumentAccessResource,\n}).annotate({ identifier: 'DocumentAccessDecision' })\n\nexport interface DocumentAccessDecision extends Schema.Schema.Type<typeof DocumentAccessDecision> {}\n\nexport const MEDIA_ACTIONS = [\n 'media.read',\n 'media.search',\n 'media.integrity',\n 'media.upload',\n 'media.replace',\n 'media.remove',\n 'media.cleanup',\n] as const\n\nconst MediaAction = Schema.Literals(MEDIA_ACTIONS)\n\nconst MediaCatalogResource = Schema.Struct({\n kind: Schema.tag('media-catalog'),\n})\n\nconst MediaAssetResource = Schema.Struct({\n kind: Schema.tag('media-asset'),\n mediaId: MediaId,\n})\n\nconst MediaFolderResource = Schema.Struct({\n kind: Schema.tag('media-folder'),\n folder: MediaFolder,\n})\n\nconst MediaResource = Schema.Union([MediaCatalogResource, MediaAssetResource, MediaFolderResource]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport const MediaAccessDecision = Schema.Struct({\n action: MediaAction,\n resource: MediaResource,\n}).annotate({ identifier: 'MediaAccessDecision' })\n\nexport interface MediaAccessDecision extends Schema.Schema.Type<typeof MediaAccessDecision> {}\n\nconst ActivityResource = Schema.Struct({\n kind: Schema.tag('activity'),\n})\n\nconst ActivityAccessDecision = Schema.Struct({\n action: Schema.Literal('activity.read'),\n resource: ActivityResource,\n}).annotate({ identifier: 'ActivityAccessDecision' })\n\nexport const SEO_ACTIONS = ['seo.read', 'seo.save', 'seo.publish'] as const\n\nconst SeoAction = Schema.Literals(SEO_ACTIONS)\n\nconst SeoResource = Schema.Struct({ kind: Schema.tag('seo') })\n\nexport const SeoAccessDecision = Schema.Struct({\n action: SeoAction,\n resource: SeoResource,\n}).annotate({ identifier: 'SeoAccessDecision' })\n\nexport interface SeoAccessDecision extends Schema.Schema.Type<typeof SeoAccessDecision> {}\n\nconst STUDIO_ACTIONS = [...DOCUMENT_ACTIONS, ...MEDIA_ACTIONS, ...SEO_ACTIONS, 'activity.read'] as const\n\nexport const StudioAction = Schema.Literals(STUDIO_ACTIONS)\n\nexport type StudioAction = typeof StudioAction.Type\n\nconst StudioResource = Schema.Union([DocumentAccessResource, MediaResource, ActivityResource, SeoResource])\n\nexport const StudioAccessDecision = Schema.Union([\n DocumentAccessDecision,\n MediaAccessDecision,\n ActivityAccessDecision,\n SeoAccessDecision,\n])\n\nexport type StudioAccessDecision = typeof StudioAccessDecision.Type\n\nexport class AuthenticationRequired extends Schema.TaggedError<AuthenticationRequired>()(\n 'Studio.AuthenticationRequired',\n {},\n) {}\n\nexport class StudioEntryDenied extends Schema.TaggedError<StudioEntryDenied>()('Studio.EntryDenied', {}) {}\n\nexport class AccessDenied extends Schema.TaggedError<AccessDenied>()('Studio.AccessDenied', {\n action: StudioAction,\n actorId: StudioActor.fields.id,\n resource: StudioResource,\n}) {}\n","import { DateTime, Option, Schema } from 'effect'\nimport { StudioActor } from './AccessControl'\nimport { MediaId } from './Media'\nimport { Locale } from './internal/configuration/scalars'\nimport { PublicPath } from './internal/documents/scalars'\n\nconst absoluteUrl = Schema.makeFilter<string>(\n (value) => {\n try {\n const url = new URL(value)\n\n return url.protocol === 'http:' || url.protocol === 'https:'\n } catch {\n return false\n }\n },\n { expected: 'an absolute HTTP or HTTPS URL' },\n)\n\nconst canonicalOrigin = Schema.makeFilter<string>(\n (value) => {\n try {\n const url = new URL(value)\n\n return (\n (url.protocol === 'http:' || url.protocol === 'https:') &&\n url.origin === value &&\n url.pathname === '/' &&\n url.search === '' &&\n url.hash === ''\n )\n } catch {\n return false\n }\n },\n { expected: 'an HTTP or HTTPS origin without a path, query, hash, or trailing slash' },\n)\n\nconst titleTemplate = Schema.makeFilter<string>((value) => value.includes('%s'), {\n expected: 'a title template containing %s',\n})\n\nconst calendarDate = Schema.makeFilter<string>(\n (value) => {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/u.test(value)) return false\n const parsed = DateTime.make(value)\n\n return Option.isSome(parsed) && DateTime.formatIsoDate(parsed.value) === value\n },\n { expected: 'a valid calendar date in YYYY-MM-DD format' },\n)\n\nexport const SeoUrl = Schema.NonEmptyString.check(absoluteUrl).pipe(Schema.brand('SeoUrl'))\n\nexport type SeoUrl = typeof SeoUrl.Type\n\nexport const SeoCanonicalOrigin = Schema.NonEmptyString.check(canonicalOrigin).pipe(Schema.brand('SeoCanonicalOrigin'))\n\nexport type SeoCanonicalOrigin = typeof SeoCanonicalOrigin.Type\n\nexport const SeoImage = Schema.Struct({\n mediaId: MediaId,\n url: SeoUrl,\n alt: Schema.NonEmptyString,\n}).annotate({ identifier: 'SeoImage' })\n\nexport interface SeoImage extends Schema.Schema.Type<typeof SeoImage> {}\n\nexport const StructuredDataType = Schema.Literals(['WebPage', 'Article'])\n\nexport type StructuredDataType = typeof StructuredDataType.Type\n\nconst WebPageStructuredData = Schema.Struct({\n type: Schema.tag('WebPage'),\n})\n\nconst ArticleStructuredData = Schema.Struct({\n type: Schema.tag('Article'),\n headline: Schema.optionalKey(Schema.NonEmptyString),\n datePublished: Schema.optionalKey(Schema.String.check(calendarDate)),\n dateModified: Schema.optionalKey(Schema.String.check(calendarDate)),\n})\n\nexport const DocumentStructuredData = Schema.Union([WebPageStructuredData, ArticleStructuredData]).pipe(\n Schema.toTaggedUnion('type'),\n)\n\nexport type DocumentStructuredData = typeof DocumentStructuredData.Type\n\nexport const IdentityType = Schema.Literals(['Person', 'Organization', 'LocalBusiness'])\n\nexport type IdentityType = typeof IdentityType.Type\n\nconst identityFields = {\n name: Schema.NonEmptyString,\n url: Schema.optionalKey(SeoUrl),\n}\n\nconst PersonIdentity = Schema.Struct({\n type: Schema.tag('Person'),\n ...identityFields,\n image: Schema.optionalKey(SeoImage),\n})\n\nconst OrganizationIdentity = Schema.Struct({\n type: Schema.tag('Organization'),\n ...identityFields,\n logo: Schema.optionalKey(SeoImage),\n})\n\nexport const PostalAddress = Schema.Struct({\n streetAddress: Schema.optionalKey(Schema.NonEmptyString),\n addressLocality: Schema.optionalKey(Schema.NonEmptyString),\n addressRegion: Schema.optionalKey(Schema.NonEmptyString),\n postalCode: Schema.optionalKey(Schema.NonEmptyString),\n addressCountry: Schema.optionalKey(Schema.NonEmptyString),\n}).annotate({ identifier: 'PostalAddress' })\n\nexport interface PostalAddress extends Schema.Schema.Type<typeof PostalAddress> {}\n\nconst LocalBusinessIdentity = Schema.Struct({\n type: Schema.tag('LocalBusiness'),\n ...identityFields,\n logo: Schema.optionalKey(SeoImage),\n image: Schema.optionalKey(SeoImage),\n telephone: Schema.optionalKey(Schema.NonEmptyString),\n address: Schema.optionalKey(PostalAddress),\n})\n\nexport const SiteIdentity = Schema.Union([PersonIdentity, OrganizationIdentity, LocalBusinessIdentity]).pipe(\n Schema.toTaggedUnion('type'),\n)\n\nexport type SiteIdentity = typeof SiteIdentity.Type\n\nexport const DocumentSeo = Schema.Struct({\n title: Schema.optionalKey(Schema.NonEmptyString),\n description: Schema.optionalKey(Schema.NonEmptyString),\n socialTitle: Schema.optionalKey(Schema.NonEmptyString),\n socialDescription: Schema.optionalKey(Schema.NonEmptyString),\n socialImage: Schema.optionalKey(SeoImage),\n index: Schema.optionalKey(Schema.Boolean),\n follow: Schema.optionalKey(Schema.Boolean),\n canonicalUrl: Schema.optionalKey(SeoUrl),\n structuredData: Schema.optionalKey(DocumentStructuredData),\n}).annotate({ identifier: 'DocumentSeo' })\n\nexport interface DocumentSeo extends Schema.Schema.Type<typeof DocumentSeo> {}\n\nexport const GlobalSeoSettings = Schema.Struct({\n siteName: Schema.NonEmptyString,\n defaultDescription: Schema.optionalKey(Schema.NonEmptyString),\n canonicalOrigin: SeoCanonicalOrigin,\n titleTemplate: Schema.optionalKey(Schema.NonEmptyString.check(titleTemplate)),\n socialTitle: Schema.optionalKey(Schema.NonEmptyString),\n socialDescription: Schema.optionalKey(Schema.NonEmptyString),\n socialImage: Schema.optionalKey(SeoImage),\n index: Schema.Boolean,\n follow: Schema.Boolean,\n identity: Schema.optionalKey(SiteIdentity),\n}).annotate({ identifier: 'GlobalSeoSettings' })\n\nexport interface GlobalSeoSettings extends Schema.Schema.Type<typeof GlobalSeoSettings> {}\n\nexport const SeoCapabilities = Schema.Struct({\n structuredDataTypes: Schema.Array(StructuredDataType),\n identityTypes: Schema.Array(IdentityType),\n generatedSocialImageTemplateIds: Schema.Array(Schema.NonEmptyString),\n}).annotate({ identifier: 'SeoCapabilities' })\n\nexport interface SeoCapabilities extends Schema.Schema.Type<typeof SeoCapabilities> {}\n\nexport const SeoConfiguration = Schema.Struct({\n defaults: GlobalSeoSettings,\n capabilities: SeoCapabilities,\n}).annotate({ identifier: 'SeoConfiguration' })\n\nexport interface SeoConfiguration extends Schema.Schema.Type<typeof SeoConfiguration> {}\n\nexport const ResolvedSeo = Schema.Struct({\n title: Schema.NonEmptyString,\n description: Schema.optionalKey(Schema.NonEmptyString),\n socialTitle: Schema.NonEmptyString,\n socialDescription: Schema.optionalKey(Schema.NonEmptyString),\n socialImage: Schema.optionalKey(SeoImage),\n canonicalUrl: SeoUrl,\n index: Schema.Boolean,\n follow: Schema.Boolean,\n structuredData: Schema.optionalKey(DocumentStructuredData),\n identity: Schema.optionalKey(SiteIdentity),\n}).annotate({ identifier: 'ResolvedSeo' })\n\nexport interface ResolvedSeo extends Schema.Schema.Type<typeof ResolvedSeo> {}\n\nexport const SeoVersion = Schema.NonEmptyString.pipe(Schema.brand('SeoVersion'))\n\nexport type SeoVersion = typeof SeoVersion.Type\n\nexport const SeoRevisionId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('SeoRevisionId'))\n\nexport type SeoRevisionId = typeof SeoRevisionId.Type\n\nexport const SeoRevision = Schema.Struct({\n revisionId: SeoRevisionId,\n version: SeoVersion,\n settings: GlobalSeoSettings,\n editedBy: StudioActor,\n editedAt: Schema.DateTimeUtcFromString,\n}).annotate({ identifier: 'SeoRevision' })\n\nexport interface SeoRevision extends Schema.Schema.Type<typeof SeoRevision> {}\n\nexport const SeoState = Schema.Struct({\n working: SeoRevision,\n published: Schema.optionalKey(SeoRevision),\n capabilities: SeoCapabilities,\n}).annotate({ identifier: 'SeoState' })\n\nexport interface SeoState extends Schema.Schema.Type<typeof SeoState> {}\n\nexport const SeoSnapshot = Schema.Struct({\n revision: SeoRevision,\n capabilities: SeoCapabilities,\n}).annotate({ identifier: 'SeoSnapshot' })\n\nexport interface SeoSnapshot extends Schema.Schema.Type<typeof SeoSnapshot> {}\n\nconst mutationMetadata = {\n reason: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(1_000))),\n confirmedSiteWideChange: Schema.optionalKey(Schema.Boolean),\n}\n\nexport const SaveSeoInput = Schema.Struct({\n expectedVersion: SeoVersion,\n settings: GlobalSeoSettings,\n ...mutationMetadata,\n}).annotate({ identifier: 'SaveSeoInput' })\n\nexport interface SaveSeoInput extends Schema.Schema.Type<typeof SaveSeoInput> {}\n\nexport const PublishSeoInput = Schema.Struct({\n expectedVersion: SeoVersion,\n ...mutationMetadata,\n}).annotate({ identifier: 'PublishSeoInput' })\n\nexport interface PublishSeoInput extends Schema.Schema.Type<typeof PublishSeoInput> {}\n\nexport const SeoMutationResult = Schema.Struct({\n action: Schema.Literals(['seo.save', 'seo.publish']),\n state: SeoState,\n}).annotate({ identifier: 'SeoMutationResult' })\n\nexport interface SeoMutationResult extends Schema.Schema.Type<typeof SeoMutationResult> {}\n\nexport const SitemapAlternative = Schema.Struct({\n locale: Locale,\n loc: PublicPath,\n}).annotate({ identifier: 'SitemapAlternative' })\n\nexport interface SitemapAlternative extends Schema.Schema.Type<typeof SitemapAlternative> {}\n\nexport const SitemapEntry = Schema.Struct({\n loc: PublicPath,\n lastmod: Schema.DateTimeUtcFromString,\n alternatives: Schema.optionalKey(Schema.Array(SitemapAlternative)),\n}).annotate({ identifier: 'SitemapEntry' })\n\nexport interface SitemapEntry extends Schema.Schema.Type<typeof SitemapEntry> {}\n\nexport const SeoConfirmationChange = Schema.Literals(['canonicalOrigin', 'indexability'])\n\nexport type SeoConfirmationChange = typeof SeoConfirmationChange.Type\n\nexport class SeoVersionConflict extends Schema.TaggedError<SeoVersionConflict>()('Seo.VersionConflict', {\n expectedVersion: SeoVersion,\n actualVersion: SeoVersion,\n}) {}\n\nexport class SeoConfirmationRequired extends Schema.TaggedError<SeoConfirmationRequired>()('Seo.ConfirmationRequired', {\n changes: Schema.Array(SeoConfirmationChange),\n}) {}\n\nexport class SeoMediaUnavailable extends Schema.TaggedError<SeoMediaUnavailable>()('Seo.MediaUnavailable', {\n mediaId: MediaId,\n}) {}\n","import { Schema } from 'effect'\nimport { StudioActor } from '../../AccessControl'\nimport { CollectionName, Locale } from '../configuration/scalars'\nimport { nonNegativeInt } from '../scalars'\nimport { DocumentSeo, ResolvedSeo } from '../../Seo'\nimport {\n DocumentGeneration,\n DocumentVersion,\n DocumentId,\n PublicPath,\n RelativeDocumentPath,\n RevisionId,\n Slug,\n SourcePath,\n} from './scalars'\n\nexport const DocumentIssueCode = Schema.Literals([\n 'document.collision',\n 'document.id',\n 'document.invalid',\n 'i18n.missing-translation',\n 'markdown.parse',\n 'reference.document',\n 'reference.component',\n 'seo.invalid',\n 'schema.option',\n 'schema.constraint',\n 'schema.required',\n 'schema.type',\n 'schema.unknown',\n])\n\nexport type DocumentIssueCode = typeof DocumentIssueCode.Type\n\nexport const DocumentIssue = Schema.Struct({\n code: DocumentIssueCode,\n severity: Schema.Literals(['error', 'warning']),\n message: Schema.NonEmptyString,\n sourcePath: Schema.optionalKey(SourcePath),\n collection: Schema.optionalKey(CollectionName),\n field: Schema.optionalKey(Schema.NonEmptyString),\n key: Schema.optionalKey(PublicPath),\n locale: Schema.optionalKey(Locale),\n}).annotate({ identifier: 'DocumentIssue' })\n\nexport interface DocumentIssue extends Schema.Schema.Type<typeof DocumentIssue> {}\n\nexport const DocumentSourcePoint = Schema.Struct({\n offset: nonNegativeInt,\n line: nonNegativeInt,\n column: nonNegativeInt,\n})\n\nexport interface DocumentSourcePoint extends Schema.Schema.Type<typeof DocumentSourcePoint> {}\n\nexport const DocumentSourceRange = Schema.Struct({\n start: DocumentSourcePoint,\n end: DocumentSourcePoint,\n})\n\nexport interface DocumentSourceRange extends Schema.Schema.Type<typeof DocumentSourceRange> {}\n\nexport const DocumentSourceMapping = Schema.Struct({\n nodePath: Schema.Array(nonNegativeInt),\n range: DocumentSourceRange,\n})\n\nexport interface DocumentSourceMapping extends Schema.Schema.Type<typeof DocumentSourceMapping> {}\n\nexport type MarkdownNode =\n | string\n | readonly [null, Schema.JsonObject, string]\n | readonly [string, Schema.JsonObject, ...MarkdownNode[]]\n\nexport const MarkdownNode: Schema.Codec<MarkdownNode> = Schema.suspend(() =>\n Schema.Union([\n Schema.String,\n Schema.Tuple([Schema.Null, Schema.JsonObject, Schema.String]),\n Schema.TupleWithRest(Schema.Tuple([Schema.NonEmptyString, Schema.JsonObject]), [MarkdownNode]),\n ]),\n)\n\nexport const CmsMarkdownDocument = Schema.Struct({\n nodes: Schema.Array(MarkdownNode),\n frontmatter: Schema.JsonObject,\n meta: Schema.JsonObject,\n}).annotate({ identifier: 'CmsMarkdownDocument' })\n\nexport interface CmsMarkdownDocument extends Schema.Schema.Type<typeof CmsMarkdownDocument> {}\n\nexport const CmsDocumentHeading = Schema.Struct({\n depth: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 6 })),\n id: Schema.String,\n text: Schema.String,\n})\n\nexport interface CmsDocumentHeading extends Schema.Schema.Type<typeof CmsDocumentHeading> {}\n\nexport const CmsDocumentAnalysis = Schema.Struct({\n components: Schema.Array(Schema.NonEmptyString),\n headings: Schema.Array(CmsDocumentHeading),\n searchText: Schema.String,\n summary: Schema.String,\n})\n\nexport interface CmsDocumentAnalysis extends Schema.Schema.Type<typeof CmsDocumentAnalysis> {}\n\nexport const CompiledDocumentSource = Schema.Struct({\n path: SourcePath,\n mappings: Schema.Array(DocumentSourceMapping),\n publishedAt: Schema.optionalKey(Schema.DateTimeUtcFromString),\n})\n\nexport interface CompiledDocumentSource extends Schema.Schema.Type<typeof CompiledDocumentSource> {}\n\nexport const DocumentAlternative = Schema.Struct({\n locale: Locale,\n path: PublicPath,\n})\n\nexport interface DocumentAlternative extends Schema.Schema.Type<typeof DocumentAlternative> {}\n\nexport const CompiledDocument = Schema.Struct({\n id: DocumentId,\n key: PublicPath,\n path: PublicPath,\n locale: Schema.optionalKey(Locale),\n collection: CollectionName,\n draft: Schema.Boolean,\n title: Schema.NonEmptyString,\n description: Schema.optionalKey(Schema.String),\n seo: Schema.optionalKey(DocumentSeo),\n resolvedSeo: Schema.optionalKey(ResolvedSeo),\n alternatives: Schema.optionalKey(Schema.Array(DocumentAlternative)),\n data: Schema.JsonObject,\n issues: Schema.Array(DocumentIssue),\n analysis: CmsDocumentAnalysis,\n body: CmsMarkdownDocument,\n engineFingerprint: Schema.NonEmptyString,\n source: CompiledDocumentSource,\n}).annotate({ identifier: 'CompiledDocument' })\n\nexport interface CompiledDocument extends Schema.Schema.Type<typeof CompiledDocument> {}\n\nconst documentAttribution = {\n createdBy: Schema.optionalKey(StudioActor),\n editedBy: Schema.optionalKey(StudioActor),\n editedAt: Schema.optionalKey(Schema.DateTimeUtcFromString),\n}\n\nexport const DocumentSource = Schema.Struct({\n ...documentAttribution,\n documentId: DocumentId,\n sourcePath: SourcePath,\n markdown: Schema.String,\n revisionId: RevisionId,\n version: DocumentVersion,\n publishedVersion: Schema.optionalKey(DocumentVersion),\n}).annotate({ identifier: 'DocumentSource' })\n\nexport interface DocumentSource extends Schema.Schema.Type<typeof DocumentSource> {}\n\nexport const DocumentSummary = Schema.Struct({\n ...documentAttribution,\n publishedVersion: Schema.optionalKey(DocumentVersion),\n publishedPath: Schema.optionalKey(PublicPath),\n sourcePath: SourcePath,\n version: DocumentVersion,\n document: CompiledDocument,\n}).annotate({ identifier: 'DocumentSummary' })\n\nexport interface DocumentSummary extends Schema.Schema.Type<typeof DocumentSummary> {}\n\nexport const DeletedDocument = Schema.Struct({\n title: Schema.optionalKey(Schema.String),\n path: Schema.optionalKey(PublicPath),\n trashBatchId: Schema.optionalKey(DocumentVersion),\n documentId: DocumentId,\n deletedAt: Schema.DateTimeUtcFromString,\n sourcePath: SourcePath,\n version: DocumentVersion,\n}).annotate({ identifier: 'DeletedDocument' })\n\nexport interface DeletedDocument extends Schema.Schema.Type<typeof DeletedDocument> {}\n\nexport const DocumentBrowseQuery = Schema.Struct({\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n}).annotate({ identifier: 'DocumentBrowseQuery' })\n\nexport interface DocumentBrowseQuery extends Schema.Schema.Type<typeof DocumentBrowseQuery> {}\n\nexport const PublishedDocumentLookup = Schema.Union([\n Schema.Struct({\n kind: Schema.tag('id'),\n documentId: DocumentId,\n }),\n Schema.Struct({\n kind: Schema.tag('path'),\n path: PublicPath,\n }),\n Schema.Struct({\n kind: Schema.tag('key'),\n key: PublicPath,\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n }),\n]).pipe(Schema.toTaggedUnion('kind'))\n\nexport type PublishedDocumentLookup = typeof PublishedDocumentLookup.Type\n\nexport const DocumentQueryScalar = Schema.Union([Schema.String, Schema.Finite, Schema.Boolean, Schema.Null])\n\nexport type DocumentQueryScalar = typeof DocumentQueryScalar.Type\n\nconst validDocumentQueryField = Schema.makeFilter<string>(\n (field) => {\n const segments = field.split('.')\n\n return field.length <= 200 && segments.length <= 8 && segments.every((segment) => segment.length > 0)\n },\n { expected: 'a non-empty field path of at most 200 characters and eight non-empty segments' },\n)\n\nexport const DocumentQueryField = Schema.NonEmptyString.check(validDocumentQueryField)\n\nexport type DocumentQueryField = typeof DocumentQueryField.Type\n\nexport const DocumentQueryValue = Schema.Union([\n DocumentQueryScalar,\n Schema.Array(DocumentQueryScalar).check(Schema.isMaxLength(20)),\n])\n\nexport type DocumentQueryValue = typeof DocumentQueryValue.Type\n\nexport const DocumentQuerySort = Schema.Struct({\n field: DocumentQueryField,\n direction: Schema.optionalKey(Schema.Literals(['asc', 'desc'])),\n})\n\nexport interface DocumentQuerySort extends Schema.Schema.Type<typeof DocumentQuerySort> {}\n\nconst DocumentQueryWhere = Schema.Record(Schema.String, DocumentQueryValue).check(\n Schema.makeFilter((where) => Object.keys(where).every((field) => Schema.is(DocumentQueryField)(field)), {\n expected: 'document query keys with valid bounded field paths',\n }),\n Schema.makeFilter((where) => Object.keys(where).length <= 12, {\n expected: 'at most 12 document query filters',\n }),\n)\n\nexport const PublishedDocumentSelection = Schema.Struct({\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n where: Schema.optionalKey(DocumentQueryWhere),\n sort: Schema.optionalKey(Schema.Array(DocumentQuerySort).check(Schema.isMaxLength(4))),\n}).annotate({ identifier: 'PublishedDocumentSelection' })\n\nexport interface PublishedDocumentSelection extends Schema.Schema.Type<typeof PublishedDocumentSelection> {}\n\nexport const PublishedDocumentQuery = Schema.Struct({\n ...PublishedDocumentSelection.fields,\n offset: Schema.optionalKey(nonNegativeInt),\n limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 })),\n}).annotate({ identifier: 'PublishedDocumentQuery' })\n\nexport interface PublishedDocumentQuery extends Schema.Schema.Type<typeof PublishedDocumentQuery> {}\n\nexport const PublishedDocumentSurroundQuery = Schema.Struct({\n ...PublishedDocumentSelection.fields,\n}).annotate({ identifier: 'PublishedDocumentSurroundQuery' })\n\nexport interface PublishedDocumentSurroundQuery extends Schema.Schema.Type<typeof PublishedDocumentSurroundQuery> {}\n\nexport const PublishedDocumentPage = Schema.Struct({\n items: Schema.Array(CompiledDocument),\n total: nonNegativeInt,\n}).annotate({ identifier: 'PublishedDocumentPage' })\n\nexport interface PublishedDocumentPage extends Schema.Schema.Type<typeof PublishedDocumentPage> {}\n\nexport const DocumentNavigationQuery = Schema.Struct({\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n}).annotate({ identifier: 'DocumentNavigationQuery' })\n\nexport interface DocumentNavigationQuery extends Schema.Schema.Type<typeof DocumentNavigationQuery> {}\n\nconst documentMutationMetadata = {\n reason: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(1_000))),\n}\n\nexport interface DocumentNavigationItem {\n readonly key: PublicPath\n readonly title: string\n readonly path?: PublicPath\n readonly locale?: Locale\n readonly documentId?: DocumentId\n readonly children: ReadonlyArray<DocumentNavigationItem>\n}\n\ninterface DocumentNavigationItemEncoded {\n readonly key: string\n readonly title: string\n readonly path?: string\n readonly locale?: string\n readonly documentId?: string\n readonly children: ReadonlyArray<DocumentNavigationItemEncoded>\n}\n\nexport const DocumentNavigationItem: Schema.Codec<DocumentNavigationItem, DocumentNavigationItemEncoded> =\n Schema.suspend(() =>\n Schema.Struct({\n key: PublicPath,\n title: Schema.NonEmptyString,\n path: Schema.optionalKey(PublicPath),\n locale: Schema.optionalKey(Locale),\n documentId: Schema.optionalKey(DocumentId),\n children: Schema.Array(DocumentNavigationItem),\n }),\n )\n\nexport const DocumentSurround = Schema.Struct({\n previous: Schema.NullOr(CompiledDocument),\n next: Schema.NullOr(CompiledDocument),\n}).annotate({ identifier: 'DocumentSurround' })\n\nexport interface DocumentSurround extends Schema.Schema.Type<typeof DocumentSurround> {}\n\nexport const HomeDocumentLocation = Schema.Struct({\n kind: Schema.tag('home'),\n})\n\nexport interface HomeDocumentLocation extends Schema.Schema.Type<typeof HomeDocumentLocation> {}\n\nexport const NestedDocumentLocation = Schema.Struct({\n kind: Schema.tag('entry'),\n parent: Schema.optionalKey(RelativeDocumentPath),\n slug: Slug,\n})\n\nexport interface NestedDocumentLocation extends Schema.Schema.Type<typeof NestedDocumentLocation> {}\n\nexport const DocumentLocation = Schema.Union([HomeDocumentLocation, NestedDocumentLocation]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport type DocumentLocation = typeof DocumentLocation.Type\n\nexport const CreateDocumentInput = Schema.Struct({\n collection: CollectionName,\n locale: Schema.optionalKey(Locale),\n location: DocumentLocation,\n title: Schema.NonEmptyString,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'CreateDocumentInput' })\n\nexport interface CreateDocumentInput extends Schema.Schema.Type<typeof CreateDocumentInput> {}\n\nexport const UpdateDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n markdown: Schema.String,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'UpdateDocumentInput' })\n\nexport interface UpdateDocumentInput extends Schema.Schema.Type<typeof UpdateDocumentInput> {}\n\nexport const MoveDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n location: DocumentLocation,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'MoveDocumentInput' })\n\nexport interface MoveDocumentInput extends Schema.Schema.Type<typeof MoveDocumentInput> {}\n\nexport const DuplicateDocumentInput = Schema.Struct({\n ...MoveDocumentInput.fields,\n includeChildren: Schema.Boolean,\n}).annotate({ identifier: 'DuplicateDocumentInput' })\n\nexport interface DuplicateDocumentInput extends Schema.Schema.Type<typeof DuplicateDocumentInput> {}\n\nexport const UnpublishDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'UnpublishDocumentInput' })\n\nexport interface UnpublishDocumentInput extends Schema.Schema.Type<typeof UnpublishDocumentInput> {}\n\nexport const RemoveDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'RemoveDocumentInput' })\n\nexport interface RemoveDocumentInput extends Schema.Schema.Type<typeof RemoveDocumentInput> {}\n\nexport const PublishDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'PublishDocumentInput' })\n\nexport interface PublishDocumentInput extends Schema.Schema.Type<typeof PublishDocumentInput> {}\n\nexport const RestoreDocumentInput = Schema.Struct({\n documentId: DocumentId,\n revisionId: RevisionId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'RestoreDocumentInput' })\n\nexport interface RestoreDocumentInput extends Schema.Schema.Type<typeof RestoreDocumentInput> {}\n\nexport const UndeleteDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'UndeleteDocumentInput' })\n\nexport interface UndeleteDocumentInput extends Schema.Schema.Type<typeof UndeleteDocumentInput> {}\n\nexport const DOCUMENT_REVISION_ACTIONS = [\n 'document.create',\n 'document.move',\n 'document.remove',\n 'document.restore',\n 'document.undelete',\n 'document.update',\n] as const\n\nexport const DocumentRevisionAction = Schema.Literals(DOCUMENT_REVISION_ACTIONS)\n\nexport type DocumentRevisionAction = typeof DocumentRevisionAction.Type\n\nexport const DocumentMutationAction = Schema.Literals([\n ...DOCUMENT_REVISION_ACTIONS,\n 'document.publish',\n 'document.unpublish',\n])\n\nexport type DocumentMutationAction = typeof DocumentMutationAction.Type\n\nexport const DocumentMutationResult = Schema.Struct({\n action: DocumentMutationAction,\n affectedDocumentIds: Schema.optionalKey(Schema.Array(DocumentId)),\n documentId: DocumentId,\n generation: DocumentGeneration,\n revisionId: RevisionId,\n sourcePath: SourcePath,\n version: DocumentVersion,\n entry: Schema.optionalKey(DocumentSummary),\n}).annotate({ identifier: 'DocumentMutationResult' })\n\nexport interface DocumentMutationResult extends Schema.Schema.Type<typeof DocumentMutationResult> {}\n\nexport const DocumentValidationResult = Schema.Struct({\n valid: Schema.Boolean,\n document: Schema.optionalKey(CompiledDocument),\n issues: Schema.Array(DocumentIssue),\n}).annotate({ identifier: 'DocumentValidationResult' })\n\nexport interface DocumentValidationResult extends Schema.Schema.Type<typeof DocumentValidationResult> {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"models-ChRxBChy.js","names":[],"sources":["../../../../protocol/src/Identity.ts","../../../../protocol/src/internal/configuration/scalars.ts","../../../../protocol/src/Media.ts","../../../../protocol/src/AccessControl.ts","../../../../protocol/src/Seo.ts","../../../../protocol/src/internal/documents/models.ts"],"sourcesContent":["import { Schema } from 'effect'\n\nexport const RequestId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('RequestId'))\n\nexport type RequestId = typeof RequestId.Type\n","import { Schema } from 'effect'\nimport { publicPathPattern } from '../scalars'\n\nconst collectionNamePattern = /^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/u\n\nconst localePattern = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u\n\nconst sourceDirectoryPattern = /^(?:\\.|(?!\\.)[^/?#\\\\]+(?:\\/(?!\\.)[^/?#\\\\]+)*)$/u\n\nexport const AddressPattern = Schema.String.check(Schema.isPattern(publicPathPattern)).pipe(\n Schema.brand('AddressPattern'),\n)\n\nexport type AddressPattern = typeof AddressPattern.Type\n\nexport const CollectionName = Schema.String.check(Schema.isPattern(collectionNamePattern)).pipe(\n Schema.brand('CollectionName'),\n)\n\nexport type CollectionName = typeof CollectionName.Type\n\nexport const Locale = Schema.String.check(Schema.isPattern(localePattern)).pipe(Schema.brand('Locale'))\n\nexport type Locale = typeof Locale.Type\n\nexport const SourceDirectory = Schema.String.check(Schema.isPattern(sourceDirectoryPattern)).pipe(\n Schema.brand('SourceDirectory'),\n)\n\nexport type SourceDirectory = typeof SourceDirectory.Type\n","/**\n * Media wire models. Search pages are newest-first with opaque continuation cursors; only ready\n * assets are public results, and names, folders, and object keys are validated path-safe values.\n */\nimport { Schema } from 'effect'\nimport { DocumentId, PublicPath, SourcePath } from './internal/documents/scalars'\nimport { nonNegativeInt } from './internal/scalars'\n\nconst hasUnsafeMediaCharacter = (value: string): boolean => {\n for (const character of value) {\n const codePoint = character.codePointAt(0)\n\n if (character === '\\\\' || (codePoint !== undefined && (codePoint <= 31 || codePoint === 127))) return true\n }\n\n return false\n}\n\nconst isSafeMediaPath = (value: string, allowEmpty: boolean): boolean => {\n if (value.length === 0) return allowEmpty\n\n if (value !== value.trim() || value.startsWith('/') || value.endsWith('/') || hasUnsafeMediaCharacter(value)) {\n return false\n }\n\n return value.split('/').every((segment) => segment.length > 0 && segment !== '.' && segment !== '..')\n}\n\nconst safeMediaFolder = Schema.makeFilter<string>((value) => isSafeMediaPath(value, true), {\n expected: 'a provider-relative media folder without traversal segments',\n})\n\nconst safeMediaObjectKey = Schema.makeFilter<string>((value) => isSafeMediaPath(value, false), {\n expected: 'a non-empty provider-relative media object key without traversal segments',\n})\n\nconst safeMediaName = Schema.makeFilter<string>(\n (value) =>\n value.length > 0 &&\n value.length <= 255 &&\n value === value.trim() &&\n value !== '.' &&\n value !== '..' &&\n !value.includes('/') &&\n !hasUnsafeMediaCharacter(value),\n { expected: 'a safe media file name of at most 255 characters' },\n)\n\nexport const MediaId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('MediaId'))\n\nexport type MediaId = typeof MediaId.Type\n\nexport const MediaFolder = Schema.String.check(Schema.isMaxLength(512), safeMediaFolder).pipe(\n Schema.brand('MediaFolder'),\n)\n\nexport type MediaFolder = typeof MediaFolder.Type\n\nexport const MediaObjectKey = Schema.String.check(Schema.isMaxLength(1024), safeMediaObjectKey).pipe(\n Schema.brand('MediaObjectKey'),\n)\n\nexport type MediaObjectKey = typeof MediaObjectKey.Type\n\nexport const MediaName = Schema.String.check(safeMediaName).pipe(Schema.brand('MediaName'))\n\nexport type MediaName = typeof MediaName.Type\n\nexport const MediaCursor = Schema.NonEmptyString.pipe(Schema.brand('MediaCursor'))\n\nexport type MediaCursor = typeof MediaCursor.Type\n\nexport const ImageMimeType = Schema.Literals(['image/avif', 'image/gif', 'image/jpeg', 'image/png', 'image/webp'])\n\nexport type ImageMimeType = typeof ImageMimeType.Type\n\nexport const MediaStatus = Schema.Literals(['uploading', 'ready', 'deleting'])\n\nexport type MediaStatus = typeof MediaStatus.Type\n\nexport const MediaByteSize = Schema.Int.check(Schema.isGreaterThan(0))\n\nexport type MediaByteSize = typeof MediaByteSize.Type\n\nexport const MediaAsset = Schema.Struct({\n kind: Schema.tag('image'),\n id: MediaId,\n objectKey: MediaObjectKey,\n url: Schema.NonEmptyString,\n name: MediaName,\n folder: MediaFolder,\n mimeType: ImageMimeType,\n byteSize: MediaByteSize,\n createdAt: Schema.DateTimeUtcFromString,\n updatedAt: Schema.DateTimeUtcFromString,\n status: MediaStatus,\n}).annotate({ identifier: 'MediaAsset' })\n\nexport interface MediaAsset extends Schema.Schema.Type<typeof MediaAsset> {}\n\nexport const MediaUpload = Schema.Struct({\n name: MediaName,\n folder: Schema.optionalKey(MediaFolder),\n declaredMimeType: Schema.optionalKey(Schema.NonEmptyString),\n declaredByteSize: MediaByteSize,\n}).annotate({ identifier: 'MediaUpload' })\n\nexport interface MediaUpload extends Schema.Schema.Type<typeof MediaUpload> {}\n\nexport const MediaQuery = Schema.Struct({\n cursor: Schema.optionalKey(MediaCursor),\n folder: Schema.optionalKey(MediaFolder),\n search: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(200))),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n}).annotate({ identifier: 'MediaQuery' })\n\nexport interface MediaQuery extends Schema.Schema.Type<typeof MediaQuery> {}\n\nconst ReadyMediaAssets = Schema.Array(MediaAsset).check(\n Schema.makeFilter((assets) => assets.every((asset) => asset.status === 'ready'), {\n expected: 'media assets whose lifecycle status is ready',\n }),\n)\n\nexport const MediaPage = Schema.Struct({\n assets: ReadyMediaAssets,\n folders: Schema.Array(MediaFolder),\n nextCursor: Schema.optionalKey(MediaCursor),\n total: nonNegativeInt,\n}).annotate({ identifier: 'MediaPage' })\n\nexport interface MediaPage extends Schema.Schema.Type<typeof MediaPage> {}\n\nexport const MediaReference = Schema.Struct({\n documentId: DocumentId,\n mediaId: Schema.optionalKey(MediaId),\n path: PublicPath,\n sourcePath: SourcePath,\n objectKey: MediaObjectKey,\n nodePath: Schema.Array(nonNegativeInt),\n}).annotate({ identifier: 'MediaReference' })\n\nexport interface MediaReference extends Schema.Schema.Type<typeof MediaReference> {}\n\nconst MediaObjectMismatch = Schema.Struct({\n asset: MediaAsset,\n storedByteSize: MediaByteSize,\n storedMimeType: Schema.optionalKey(ImageMimeType),\n}).annotate({ identifier: 'MediaObjectMismatch' })\n\nexport const MediaIntegrityReport = Schema.Struct({\n missingAssets: Schema.Array(MediaReference),\n missingObjects: Schema.Array(MediaAsset),\n mismatchedObjects: Schema.Array(MediaObjectMismatch),\n orphanedObjectKeys: Schema.Array(MediaObjectKey),\n unusedAssets: Schema.Array(MediaAsset),\n}).annotate({ identifier: 'MediaIntegrityReport' })\n\nexport interface MediaIntegrityReport extends Schema.Schema.Type<typeof MediaIntegrityReport> {}\n\nexport const MediaCleanupReport = Schema.Struct({\n removedObjectKeys: Schema.Array(MediaObjectKey),\n}).annotate({ identifier: 'MediaCleanupReport' })\n\nexport interface MediaCleanupReport extends Schema.Schema.Type<typeof MediaCleanupReport> {}\n\nexport class MediaNotFound extends Schema.TaggedError<MediaNotFound>()('Media.NotFound', {\n mediaId: MediaId,\n}) {}\n\nexport class MediaReferenced extends Schema.TaggedError<MediaReferenced>()('Media.Referenced', {\n mediaId: MediaId,\n references: Schema.Array(MediaReference),\n seoScopes: Schema.optionalKey(Schema.Array(Schema.Literals(['working', 'published']))),\n}) {}\n\nexport class MediaConflict extends Schema.TaggedError<MediaConflict>()('Media.Conflict', {\n mediaId: MediaId,\n}) {}\n\nexport class MediaInvalid extends Schema.TaggedError<MediaInvalid>()('Media.Invalid', {\n message: Schema.NonEmptyString,\n}) {}\n\nexport class MediaTooLarge extends Schema.TaggedError<MediaTooLarge>()('Media.TooLarge', {\n declaredByteSize: MediaByteSize,\n maxUploadBytes: MediaByteSize,\n}) {}\n","import { Schema } from 'effect'\nimport { RequestId } from './Identity'\nimport { CollectionName, Locale } from './internal/configuration/scalars'\nimport { DocumentId } from './internal/documents/scalars'\nimport { MediaFolder, MediaId } from './Media'\n\nexport const ROLES = ['administrator', 'editor', 'viewer'] as const\n\nexport const Role = Schema.Literals(ROLES)\n\nexport type Role = typeof Role.Type\n\nexport const StudioActor = Schema.Struct({\n id: Schema.NonEmptyString,\n email: Schema.NonEmptyString,\n name: Schema.NonEmptyString,\n // Provider roles remain visible, while access control recognizes only Role values.\n roles: Schema.Array(Schema.NonEmptyString),\n}).annotate({ identifier: 'StudioActor' })\n\nexport interface StudioActor extends Schema.Schema.Type<typeof StudioActor> {}\n\nexport const StudioRequestContext = Schema.Struct({\n actor: StudioActor,\n requestId: RequestId,\n}).annotate({ identifier: 'StudioRequestContext' })\n\nexport interface StudioRequestContext extends Schema.Schema.Type<typeof StudioRequestContext> {}\n\nexport const DOCUMENT_ACTIONS = [\n 'document.browse',\n 'document.read',\n 'document.trash',\n 'document.validate',\n 'document.create',\n 'document.update',\n 'document.move',\n 'document.remove',\n 'document.restore',\n 'document.undelete',\n 'document.publish',\n 'document.unpublish',\n 'document.duplicate',\n 'document.history',\n 'document.transfer',\n] as const\n\nconst DocumentAction = Schema.Literals(DOCUMENT_ACTIONS)\n\nconst DocumentCatalogResource = Schema.Struct({\n kind: Schema.tag('catalog'),\n})\n\nconst CollectionResource = Schema.Struct({\n kind: Schema.tag('collection'),\n collection: CollectionName,\n locale: Schema.optionalKey(Locale),\n})\n\nconst DocumentResource = Schema.Struct({\n kind: Schema.tag('document'),\n documentId: DocumentId,\n})\n\nconst DocumentAccessResource = Schema.Union([DocumentCatalogResource, CollectionResource, DocumentResource]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport const DocumentAccessDecision = Schema.Struct({\n action: DocumentAction,\n resource: DocumentAccessResource,\n}).annotate({ identifier: 'DocumentAccessDecision' })\n\nexport interface DocumentAccessDecision extends Schema.Schema.Type<typeof DocumentAccessDecision> {}\n\nexport const MEDIA_ACTIONS = [\n 'media.read',\n 'media.search',\n 'media.integrity',\n 'media.upload',\n 'media.replace',\n 'media.remove',\n 'media.cleanup',\n] as const\n\nconst MediaAction = Schema.Literals(MEDIA_ACTIONS)\n\nconst MediaCatalogResource = Schema.Struct({\n kind: Schema.tag('media-catalog'),\n})\n\nconst MediaAssetResource = Schema.Struct({\n kind: Schema.tag('media-asset'),\n mediaId: MediaId,\n})\n\nconst MediaFolderResource = Schema.Struct({\n kind: Schema.tag('media-folder'),\n folder: MediaFolder,\n})\n\nconst MediaResource = Schema.Union([MediaCatalogResource, MediaAssetResource, MediaFolderResource]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport const MediaAccessDecision = Schema.Struct({\n action: MediaAction,\n resource: MediaResource,\n}).annotate({ identifier: 'MediaAccessDecision' })\n\nexport interface MediaAccessDecision extends Schema.Schema.Type<typeof MediaAccessDecision> {}\n\nconst ActivityResource = Schema.Struct({\n kind: Schema.tag('activity'),\n})\n\nconst ActivityAccessDecision = Schema.Struct({\n action: Schema.Literal('activity.read'),\n resource: ActivityResource,\n}).annotate({ identifier: 'ActivityAccessDecision' })\n\nexport const SEO_ACTIONS = ['seo.read', 'seo.save', 'seo.publish'] as const\n\nconst SeoAction = Schema.Literals(SEO_ACTIONS)\n\nconst SeoResource = Schema.Struct({ kind: Schema.tag('seo') })\n\nexport const SeoAccessDecision = Schema.Struct({\n action: SeoAction,\n resource: SeoResource,\n}).annotate({ identifier: 'SeoAccessDecision' })\n\nexport interface SeoAccessDecision extends Schema.Schema.Type<typeof SeoAccessDecision> {}\n\nconst STUDIO_ACTIONS = [...DOCUMENT_ACTIONS, ...MEDIA_ACTIONS, ...SEO_ACTIONS, 'activity.read'] as const\n\nexport const StudioAction = Schema.Literals(STUDIO_ACTIONS)\n\nexport type StudioAction = typeof StudioAction.Type\n\nconst StudioResource = Schema.Union([DocumentAccessResource, MediaResource, ActivityResource, SeoResource])\n\nexport const StudioAccessDecision = Schema.Union([\n DocumentAccessDecision,\n MediaAccessDecision,\n ActivityAccessDecision,\n SeoAccessDecision,\n])\n\nexport type StudioAccessDecision = typeof StudioAccessDecision.Type\n\nexport class AuthenticationRequired extends Schema.TaggedError<AuthenticationRequired>()(\n 'Studio.AuthenticationRequired',\n {},\n) {}\n\nexport class StudioEntryDenied extends Schema.TaggedError<StudioEntryDenied>()('Studio.EntryDenied', {}) {}\n\nexport class AccessDenied extends Schema.TaggedError<AccessDenied>()('Studio.AccessDenied', {\n action: StudioAction,\n actorId: StudioActor.fields.id,\n resource: StudioResource,\n}) {}\n","import { DateTime, Option, Schema } from 'effect'\nimport { StudioActor } from './AccessControl'\nimport { MediaId } from './Media'\nimport { Locale } from './internal/configuration/scalars'\nimport { PublicPath } from './internal/documents/scalars'\n\nconst absoluteUrl = Schema.makeFilter<string>(\n (value) => {\n try {\n const url = new URL(value)\n\n return url.protocol === 'http:' || url.protocol === 'https:'\n } catch {\n return false\n }\n },\n { expected: 'an absolute HTTP or HTTPS URL' },\n)\n\nconst canonicalOrigin = Schema.makeFilter<string>(\n (value) => {\n try {\n const url = new URL(value)\n\n return (\n (url.protocol === 'http:' || url.protocol === 'https:') &&\n url.origin === value &&\n url.pathname === '/' &&\n url.search === '' &&\n url.hash === ''\n )\n } catch {\n return false\n }\n },\n { expected: 'an HTTP or HTTPS origin without a path, query, hash, or trailing slash' },\n)\n\nconst titleTemplate = Schema.makeFilter<string>((value) => value.includes('%s'), {\n expected: 'a title template containing %s',\n})\n\nconst calendarDate = Schema.makeFilter<string>(\n (value) => {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/u.test(value)) return false\n const parsed = DateTime.make(value)\n\n return Option.isSome(parsed) && DateTime.formatIsoDate(parsed.value) === value\n },\n { expected: 'a valid calendar date in YYYY-MM-DD format' },\n)\n\nexport const SeoUrl = Schema.NonEmptyString.check(absoluteUrl).pipe(Schema.brand('SeoUrl'))\n\nexport type SeoUrl = typeof SeoUrl.Type\n\nexport const SeoCanonicalOrigin = Schema.NonEmptyString.check(canonicalOrigin).pipe(Schema.brand('SeoCanonicalOrigin'))\n\nexport type SeoCanonicalOrigin = typeof SeoCanonicalOrigin.Type\n\nexport const SeoImage = Schema.Struct({\n mediaId: MediaId,\n url: SeoUrl,\n alt: Schema.NonEmptyString,\n}).annotate({ identifier: 'SeoImage' })\n\nexport interface SeoImage extends Schema.Schema.Type<typeof SeoImage> {}\n\nexport const StructuredDataType = Schema.Literals(['WebPage', 'Article'])\n\nexport type StructuredDataType = typeof StructuredDataType.Type\n\nconst WebPageStructuredData = Schema.Struct({\n type: Schema.tag('WebPage'),\n})\n\nconst ArticleStructuredData = Schema.Struct({\n type: Schema.tag('Article'),\n headline: Schema.optionalKey(Schema.NonEmptyString),\n datePublished: Schema.optionalKey(Schema.String.check(calendarDate)),\n dateModified: Schema.optionalKey(Schema.String.check(calendarDate)),\n})\n\nexport const DocumentStructuredData = Schema.Union([WebPageStructuredData, ArticleStructuredData]).pipe(\n Schema.toTaggedUnion('type'),\n)\n\nexport type DocumentStructuredData = typeof DocumentStructuredData.Type\n\nexport const IdentityType = Schema.Literals(['Person', 'Organization', 'LocalBusiness'])\n\nexport type IdentityType = typeof IdentityType.Type\n\nconst identityFields = {\n name: Schema.NonEmptyString,\n url: Schema.optionalKey(SeoUrl),\n}\n\nconst PersonIdentity = Schema.Struct({\n type: Schema.tag('Person'),\n ...identityFields,\n image: Schema.optionalKey(SeoImage),\n})\n\nconst OrganizationIdentity = Schema.Struct({\n type: Schema.tag('Organization'),\n ...identityFields,\n logo: Schema.optionalKey(SeoImage),\n})\n\nexport const PostalAddress = Schema.Struct({\n streetAddress: Schema.optionalKey(Schema.NonEmptyString),\n addressLocality: Schema.optionalKey(Schema.NonEmptyString),\n addressRegion: Schema.optionalKey(Schema.NonEmptyString),\n postalCode: Schema.optionalKey(Schema.NonEmptyString),\n addressCountry: Schema.optionalKey(Schema.NonEmptyString),\n}).annotate({ identifier: 'PostalAddress' })\n\nexport interface PostalAddress extends Schema.Schema.Type<typeof PostalAddress> {}\n\nconst LocalBusinessIdentity = Schema.Struct({\n type: Schema.tag('LocalBusiness'),\n ...identityFields,\n logo: Schema.optionalKey(SeoImage),\n image: Schema.optionalKey(SeoImage),\n telephone: Schema.optionalKey(Schema.NonEmptyString),\n address: Schema.optionalKey(PostalAddress),\n})\n\nexport const SiteIdentity = Schema.Union([PersonIdentity, OrganizationIdentity, LocalBusinessIdentity]).pipe(\n Schema.toTaggedUnion('type'),\n)\n\nexport type SiteIdentity = typeof SiteIdentity.Type\n\nexport const DocumentSeo = Schema.Struct({\n title: Schema.optionalKey(Schema.NonEmptyString),\n description: Schema.optionalKey(Schema.NonEmptyString),\n socialTitle: Schema.optionalKey(Schema.NonEmptyString),\n socialDescription: Schema.optionalKey(Schema.NonEmptyString),\n socialImage: Schema.optionalKey(SeoImage),\n index: Schema.optionalKey(Schema.Boolean),\n follow: Schema.optionalKey(Schema.Boolean),\n canonicalUrl: Schema.optionalKey(SeoUrl),\n structuredData: Schema.optionalKey(DocumentStructuredData),\n}).annotate({ identifier: 'DocumentSeo' })\n\nexport interface DocumentSeo extends Schema.Schema.Type<typeof DocumentSeo> {}\n\nexport const GlobalSeoSettings = Schema.Struct({\n siteName: Schema.NonEmptyString,\n defaultDescription: Schema.optionalKey(Schema.NonEmptyString),\n canonicalOrigin: SeoCanonicalOrigin,\n titleTemplate: Schema.optionalKey(Schema.NonEmptyString.check(titleTemplate)),\n socialTitle: Schema.optionalKey(Schema.NonEmptyString),\n socialDescription: Schema.optionalKey(Schema.NonEmptyString),\n socialImage: Schema.optionalKey(SeoImage),\n index: Schema.Boolean,\n follow: Schema.Boolean,\n identity: Schema.optionalKey(SiteIdentity),\n}).annotate({ identifier: 'GlobalSeoSettings' })\n\nexport interface GlobalSeoSettings extends Schema.Schema.Type<typeof GlobalSeoSettings> {}\n\nexport const SeoCapabilities = Schema.Struct({\n structuredDataTypes: Schema.Array(StructuredDataType),\n identityTypes: Schema.Array(IdentityType),\n generatedSocialImageTemplateIds: Schema.Array(Schema.NonEmptyString),\n}).annotate({ identifier: 'SeoCapabilities' })\n\nexport interface SeoCapabilities extends Schema.Schema.Type<typeof SeoCapabilities> {}\n\nexport const SeoConfiguration = Schema.Struct({\n defaults: GlobalSeoSettings,\n capabilities: SeoCapabilities,\n}).annotate({ identifier: 'SeoConfiguration' })\n\nexport interface SeoConfiguration extends Schema.Schema.Type<typeof SeoConfiguration> {}\n\nexport const ResolvedSeo = Schema.Struct({\n title: Schema.NonEmptyString,\n description: Schema.optionalKey(Schema.NonEmptyString),\n socialTitle: Schema.NonEmptyString,\n socialDescription: Schema.optionalKey(Schema.NonEmptyString),\n socialImage: Schema.optionalKey(SeoImage),\n canonicalUrl: SeoUrl,\n index: Schema.Boolean,\n follow: Schema.Boolean,\n structuredData: Schema.optionalKey(DocumentStructuredData),\n identity: Schema.optionalKey(SiteIdentity),\n}).annotate({ identifier: 'ResolvedSeo' })\n\nexport interface ResolvedSeo extends Schema.Schema.Type<typeof ResolvedSeo> {}\n\nexport const SeoVersion = Schema.NonEmptyString.pipe(Schema.brand('SeoVersion'))\n\nexport type SeoVersion = typeof SeoVersion.Type\n\nexport const SeoRevisionId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('SeoRevisionId'))\n\nexport type SeoRevisionId = typeof SeoRevisionId.Type\n\nexport const SeoRevision = Schema.Struct({\n revisionId: SeoRevisionId,\n version: SeoVersion,\n settings: GlobalSeoSettings,\n editedBy: StudioActor,\n editedAt: Schema.DateTimeUtcFromString,\n}).annotate({ identifier: 'SeoRevision' })\n\nexport interface SeoRevision extends Schema.Schema.Type<typeof SeoRevision> {}\n\nexport const SeoState = Schema.Struct({\n working: SeoRevision,\n published: Schema.optionalKey(SeoRevision),\n capabilities: SeoCapabilities,\n}).annotate({ identifier: 'SeoState' })\n\nexport interface SeoState extends Schema.Schema.Type<typeof SeoState> {}\n\nexport const SeoSnapshot = Schema.Struct({\n revision: SeoRevision,\n capabilities: SeoCapabilities,\n}).annotate({ identifier: 'SeoSnapshot' })\n\nexport interface SeoSnapshot extends Schema.Schema.Type<typeof SeoSnapshot> {}\n\nconst mutationMetadata = {\n reason: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(1_000))),\n confirmedSiteWideChange: Schema.optionalKey(Schema.Boolean),\n}\n\nexport const SaveSeoInput = Schema.Struct({\n expectedVersion: SeoVersion,\n settings: GlobalSeoSettings,\n ...mutationMetadata,\n}).annotate({ identifier: 'SaveSeoInput' })\n\nexport interface SaveSeoInput extends Schema.Schema.Type<typeof SaveSeoInput> {}\n\nexport const PublishSeoInput = Schema.Struct({\n expectedVersion: SeoVersion,\n ...mutationMetadata,\n}).annotate({ identifier: 'PublishSeoInput' })\n\nexport interface PublishSeoInput extends Schema.Schema.Type<typeof PublishSeoInput> {}\n\nexport const SeoMutationResult = Schema.Struct({\n action: Schema.Literals(['seo.save', 'seo.publish']),\n state: SeoState,\n}).annotate({ identifier: 'SeoMutationResult' })\n\nexport interface SeoMutationResult extends Schema.Schema.Type<typeof SeoMutationResult> {}\n\nexport const SitemapAlternative = Schema.Struct({\n locale: Locale,\n loc: PublicPath,\n}).annotate({ identifier: 'SitemapAlternative' })\n\nexport interface SitemapAlternative extends Schema.Schema.Type<typeof SitemapAlternative> {}\n\nexport const SitemapEntry = Schema.Struct({\n loc: PublicPath,\n lastmod: Schema.DateTimeUtcFromString,\n alternatives: Schema.optionalKey(Schema.Array(SitemapAlternative)),\n}).annotate({ identifier: 'SitemapEntry' })\n\nexport interface SitemapEntry extends Schema.Schema.Type<typeof SitemapEntry> {}\n\nexport const SeoConfirmationChange = Schema.Literals(['canonicalOrigin', 'indexability'])\n\nexport type SeoConfirmationChange = typeof SeoConfirmationChange.Type\n\nexport class SeoVersionConflict extends Schema.TaggedError<SeoVersionConflict>()('Seo.VersionConflict', {\n expectedVersion: SeoVersion,\n actualVersion: SeoVersion,\n}) {}\n\nexport class SeoConfirmationRequired extends Schema.TaggedError<SeoConfirmationRequired>()('Seo.ConfirmationRequired', {\n changes: Schema.Array(SeoConfirmationChange),\n}) {}\n\nexport class SeoMediaUnavailable extends Schema.TaggedError<SeoMediaUnavailable>()('Seo.MediaUnavailable', {\n mediaId: MediaId,\n}) {}\n","import { Schema } from 'effect'\nimport { StudioActor } from '../../AccessControl'\nimport { CollectionName, Locale } from '../configuration/scalars'\nimport { nonNegativeInt } from '../scalars'\nimport { DocumentSeo, ResolvedSeo } from '../../Seo'\nimport {\n DocumentGeneration,\n DocumentVersion,\n DocumentId,\n PublicPath,\n RelativeDocumentPath,\n RevisionId,\n Slug,\n SourcePath,\n} from './scalars'\n\nexport const DocumentIssueCode = Schema.Literals([\n 'document.collision',\n 'document.id',\n 'document.invalid',\n 'i18n.missing-translation',\n 'markdown.parse',\n 'reference.document',\n 'reference.component',\n 'seo.invalid',\n 'schema.option',\n 'schema.constraint',\n 'schema.required',\n 'schema.type',\n 'schema.unknown',\n])\n\nexport type DocumentIssueCode = typeof DocumentIssueCode.Type\n\nexport const DocumentIssue = Schema.Struct({\n code: DocumentIssueCode,\n severity: Schema.Literals(['error', 'warning']),\n message: Schema.NonEmptyString,\n sourcePath: Schema.optionalKey(SourcePath),\n collection: Schema.optionalKey(CollectionName),\n field: Schema.optionalKey(Schema.NonEmptyString),\n key: Schema.optionalKey(PublicPath),\n locale: Schema.optionalKey(Locale),\n}).annotate({ identifier: 'DocumentIssue' })\n\nexport interface DocumentIssue extends Schema.Schema.Type<typeof DocumentIssue> {}\n\nexport const DocumentSourcePoint = Schema.Struct({\n offset: nonNegativeInt,\n line: nonNegativeInt,\n column: nonNegativeInt,\n})\n\nexport interface DocumentSourcePoint extends Schema.Schema.Type<typeof DocumentSourcePoint> {}\n\nexport const DocumentSourceRange = Schema.Struct({\n start: DocumentSourcePoint,\n end: DocumentSourcePoint,\n})\n\nexport interface DocumentSourceRange extends Schema.Schema.Type<typeof DocumentSourceRange> {}\n\nexport const DocumentSourceMapping = Schema.Struct({\n nodePath: Schema.Array(nonNegativeInt),\n range: DocumentSourceRange,\n})\n\nexport interface DocumentSourceMapping extends Schema.Schema.Type<typeof DocumentSourceMapping> {}\n\nexport type MarkdownNode =\n | string\n | readonly [null, Schema.JsonObject, string]\n | readonly [string, Schema.JsonObject, ...MarkdownNode[]]\n\nexport const MarkdownNode: Schema.Codec<MarkdownNode> = Schema.suspend(() =>\n Schema.Union([\n Schema.String,\n Schema.Tuple([Schema.Null, Schema.JsonObject, Schema.String]),\n Schema.TupleWithRest(Schema.Tuple([Schema.NonEmptyString, Schema.JsonObject]), [MarkdownNode]),\n ]),\n)\n\nexport const CmsMarkdownDocument = Schema.Struct({\n nodes: Schema.Array(MarkdownNode),\n frontmatter: Schema.JsonObject,\n meta: Schema.JsonObject,\n}).annotate({ identifier: 'CmsMarkdownDocument' })\n\nexport interface CmsMarkdownDocument extends Schema.Schema.Type<typeof CmsMarkdownDocument> {}\n\nexport const CmsDocumentHeading = Schema.Struct({\n depth: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 6 })),\n id: Schema.String,\n text: Schema.String,\n})\n\nexport interface CmsDocumentHeading extends Schema.Schema.Type<typeof CmsDocumentHeading> {}\n\nexport const CmsDocumentAnalysis = Schema.Struct({\n components: Schema.Array(Schema.NonEmptyString),\n headings: Schema.Array(CmsDocumentHeading),\n searchText: Schema.String,\n summary: Schema.String,\n})\n\nexport interface CmsDocumentAnalysis extends Schema.Schema.Type<typeof CmsDocumentAnalysis> {}\n\nexport const CompiledDocumentSource = Schema.Struct({\n path: SourcePath,\n mappings: Schema.Array(DocumentSourceMapping),\n publishedAt: Schema.optionalKey(Schema.DateTimeUtcFromString),\n})\n\nexport interface CompiledDocumentSource extends Schema.Schema.Type<typeof CompiledDocumentSource> {}\n\nexport const DocumentAlternative = Schema.Struct({\n locale: Locale,\n path: PublicPath,\n})\n\nexport interface DocumentAlternative extends Schema.Schema.Type<typeof DocumentAlternative> {}\n\nexport const CompiledDocument = Schema.Struct({\n id: DocumentId,\n key: PublicPath,\n path: PublicPath,\n locale: Schema.optionalKey(Locale),\n collection: CollectionName,\n draft: Schema.Boolean,\n title: Schema.NonEmptyString,\n description: Schema.optionalKey(Schema.String),\n seo: Schema.optionalKey(DocumentSeo),\n resolvedSeo: Schema.optionalKey(ResolvedSeo),\n alternatives: Schema.optionalKey(Schema.Array(DocumentAlternative)),\n data: Schema.JsonObject,\n issues: Schema.Array(DocumentIssue),\n analysis: CmsDocumentAnalysis,\n body: CmsMarkdownDocument,\n engineFingerprint: Schema.NonEmptyString,\n source: CompiledDocumentSource,\n}).annotate({ identifier: 'CompiledDocument' })\n\nexport interface CompiledDocument extends Schema.Schema.Type<typeof CompiledDocument> {}\n\nconst documentAttribution = {\n createdBy: Schema.optionalKey(StudioActor),\n editedBy: Schema.optionalKey(StudioActor),\n editedAt: Schema.optionalKey(Schema.DateTimeUtcFromString),\n}\n\nexport const DocumentSource = Schema.Struct({\n ...documentAttribution,\n documentId: DocumentId,\n sourcePath: SourcePath,\n markdown: Schema.String,\n revisionId: RevisionId,\n version: DocumentVersion,\n publishedVersion: Schema.optionalKey(DocumentVersion),\n}).annotate({ identifier: 'DocumentSource' })\n\nexport interface DocumentSource extends Schema.Schema.Type<typeof DocumentSource> {}\n\nexport const DocumentSummary = Schema.Struct({\n ...documentAttribution,\n publishedVersion: Schema.optionalKey(DocumentVersion),\n publishedPath: Schema.optionalKey(PublicPath),\n sourcePath: SourcePath,\n version: DocumentVersion,\n document: CompiledDocument,\n}).annotate({ identifier: 'DocumentSummary' })\n\nexport interface DocumentSummary extends Schema.Schema.Type<typeof DocumentSummary> {}\n\nexport const DeletedDocument = Schema.Struct({\n title: Schema.optionalKey(Schema.String),\n path: Schema.optionalKey(PublicPath),\n trashBatchId: Schema.optionalKey(DocumentVersion),\n documentId: DocumentId,\n deletedAt: Schema.DateTimeUtcFromString,\n sourcePath: SourcePath,\n version: DocumentVersion,\n}).annotate({ identifier: 'DeletedDocument' })\n\nexport interface DeletedDocument extends Schema.Schema.Type<typeof DeletedDocument> {}\n\nexport const DocumentBrowseQuery = Schema.Struct({\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n}).annotate({ identifier: 'DocumentBrowseQuery' })\n\nexport interface DocumentBrowseQuery extends Schema.Schema.Type<typeof DocumentBrowseQuery> {}\n\nexport const PublishedDocumentLookup = Schema.Union([\n Schema.Struct({\n kind: Schema.tag('id'),\n documentId: DocumentId,\n }),\n Schema.Struct({\n kind: Schema.tag('path'),\n path: PublicPath,\n }),\n Schema.Struct({\n kind: Schema.tag('key'),\n key: PublicPath,\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n }),\n]).pipe(Schema.toTaggedUnion('kind'))\n\nexport type PublishedDocumentLookup = typeof PublishedDocumentLookup.Type\n\nexport const DocumentQueryScalar = Schema.Union([Schema.String, Schema.Finite, Schema.Boolean, Schema.Null])\n\nexport type DocumentQueryScalar = typeof DocumentQueryScalar.Type\n\nconst validDocumentQueryField = Schema.makeFilter<string>(\n (field) => {\n const segments = field.split('.')\n\n return field.length <= 200 && segments.length <= 8 && segments.every((segment) => segment.length > 0)\n },\n { expected: 'a non-empty field path of at most 200 characters and eight non-empty segments' },\n)\n\nexport const DocumentQueryField = Schema.NonEmptyString.check(validDocumentQueryField)\n\nexport type DocumentQueryField = typeof DocumentQueryField.Type\n\nexport const DocumentQueryValue = Schema.Union([\n DocumentQueryScalar,\n Schema.Array(DocumentQueryScalar).check(Schema.isMaxLength(20)),\n])\n\nexport type DocumentQueryValue = typeof DocumentQueryValue.Type\n\nexport const DocumentQuerySort = Schema.Struct({\n field: DocumentQueryField,\n direction: Schema.optionalKey(Schema.Literals(['asc', 'desc'])),\n})\n\nexport interface DocumentQuerySort extends Schema.Schema.Type<typeof DocumentQuerySort> {}\n\nconst DocumentQueryWhere = Schema.Record(Schema.String, DocumentQueryValue).check(\n Schema.makeFilter((where) => Object.keys(where).every((field) => Schema.is(DocumentQueryField)(field)), {\n expected: 'document query keys with valid bounded field paths',\n }),\n Schema.makeFilter((where) => Object.keys(where).length <= 12, {\n expected: 'at most 12 document query filters',\n }),\n)\n\nexport const PublishedDocumentSelection = Schema.Struct({\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n where: Schema.optionalKey(DocumentQueryWhere),\n sort: Schema.optionalKey(Schema.Array(DocumentQuerySort).check(Schema.isMaxLength(4))),\n}).annotate({ identifier: 'PublishedDocumentSelection' })\n\nexport interface PublishedDocumentSelection extends Schema.Schema.Type<typeof PublishedDocumentSelection> {}\n\nexport const PublishedDocumentQuery = Schema.Struct({\n ...PublishedDocumentSelection.fields,\n offset: Schema.optionalKey(nonNegativeInt),\n limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 })),\n}).annotate({ identifier: 'PublishedDocumentQuery' })\n\nexport interface PublishedDocumentQuery extends Schema.Schema.Type<typeof PublishedDocumentQuery> {}\n\nexport const PublishedDocumentSurroundQuery = Schema.Struct({\n ...PublishedDocumentSelection.fields,\n}).annotate({ identifier: 'PublishedDocumentSurroundQuery' })\n\nexport interface PublishedDocumentSurroundQuery extends Schema.Schema.Type<typeof PublishedDocumentSurroundQuery> {}\n\nexport const PublishedDocumentPage = Schema.Struct({\n items: Schema.Array(CompiledDocument),\n total: nonNegativeInt,\n}).annotate({ identifier: 'PublishedDocumentPage' })\n\nexport interface PublishedDocumentPage extends Schema.Schema.Type<typeof PublishedDocumentPage> {}\n\nexport const DocumentNavigationQuery = Schema.Struct({\n collection: Schema.optionalKey(CollectionName),\n locale: Schema.optionalKey(Locale),\n}).annotate({ identifier: 'DocumentNavigationQuery' })\n\nexport interface DocumentNavigationQuery extends Schema.Schema.Type<typeof DocumentNavigationQuery> {}\n\nconst documentMutationMetadata = {\n reason: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(1_000))),\n}\n\nexport interface DocumentNavigationItem {\n readonly key: PublicPath\n readonly title: string\n readonly path?: PublicPath\n readonly locale?: Locale\n readonly documentId?: DocumentId\n readonly children: ReadonlyArray<DocumentNavigationItem>\n}\n\ninterface DocumentNavigationItemEncoded {\n readonly key: string\n readonly title: string\n readonly path?: string\n readonly locale?: string\n readonly documentId?: string\n readonly children: ReadonlyArray<DocumentNavigationItemEncoded>\n}\n\nexport const DocumentNavigationItem: Schema.Codec<DocumentNavigationItem, DocumentNavigationItemEncoded> =\n Schema.suspend(() =>\n Schema.Struct({\n key: PublicPath,\n title: Schema.NonEmptyString,\n path: Schema.optionalKey(PublicPath),\n locale: Schema.optionalKey(Locale),\n documentId: Schema.optionalKey(DocumentId),\n children: Schema.Array(DocumentNavigationItem),\n }),\n )\n\nexport const DocumentSurround = Schema.Struct({\n previous: Schema.NullOr(CompiledDocument),\n next: Schema.NullOr(CompiledDocument),\n}).annotate({ identifier: 'DocumentSurround' })\n\nexport interface DocumentSurround extends Schema.Schema.Type<typeof DocumentSurround> {}\n\nexport const HomeDocumentLocation = Schema.Struct({\n kind: Schema.tag('home'),\n})\n\nexport interface HomeDocumentLocation extends Schema.Schema.Type<typeof HomeDocumentLocation> {}\n\nexport const NestedDocumentLocation = Schema.Struct({\n kind: Schema.tag('entry'),\n parent: Schema.optionalKey(RelativeDocumentPath),\n slug: Slug,\n})\n\nexport interface NestedDocumentLocation extends Schema.Schema.Type<typeof NestedDocumentLocation> {}\n\nexport const DocumentLocation = Schema.Union([HomeDocumentLocation, NestedDocumentLocation]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport type DocumentLocation = typeof DocumentLocation.Type\n\nexport const CreateDocumentInput = Schema.Struct({\n collection: CollectionName,\n locale: Schema.optionalKey(Locale),\n location: DocumentLocation,\n title: Schema.NonEmptyString,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'CreateDocumentInput' })\n\nexport interface CreateDocumentInput extends Schema.Schema.Type<typeof CreateDocumentInput> {}\n\nexport const UpdateDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n markdown: Schema.String,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'UpdateDocumentInput' })\n\nexport interface UpdateDocumentInput extends Schema.Schema.Type<typeof UpdateDocumentInput> {}\n\nexport const MoveDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n location: DocumentLocation,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'MoveDocumentInput' })\n\nexport interface MoveDocumentInput extends Schema.Schema.Type<typeof MoveDocumentInput> {}\n\nexport const DuplicateDocumentInput = Schema.Struct({\n ...MoveDocumentInput.fields,\n includeChildren: Schema.Boolean,\n /** Copies into another independent locale variant when supplied. */\n locale: Schema.optionalKey(Locale),\n}).annotate({ identifier: 'DuplicateDocumentInput' })\n\nexport interface DuplicateDocumentInput extends Schema.Schema.Type<typeof DuplicateDocumentInput> {}\n\nexport const UnpublishDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'UnpublishDocumentInput' })\n\nexport interface UnpublishDocumentInput extends Schema.Schema.Type<typeof UnpublishDocumentInput> {}\n\nexport const RemoveDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'RemoveDocumentInput' })\n\nexport interface RemoveDocumentInput extends Schema.Schema.Type<typeof RemoveDocumentInput> {}\n\nexport const PublishDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'PublishDocumentInput' })\n\nexport interface PublishDocumentInput extends Schema.Schema.Type<typeof PublishDocumentInput> {}\n\nexport const RestoreDocumentInput = Schema.Struct({\n documentId: DocumentId,\n revisionId: RevisionId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'RestoreDocumentInput' })\n\nexport interface RestoreDocumentInput extends Schema.Schema.Type<typeof RestoreDocumentInput> {}\n\nexport const UndeleteDocumentInput = Schema.Struct({\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n ...documentMutationMetadata,\n}).annotate({ identifier: 'UndeleteDocumentInput' })\n\nexport interface UndeleteDocumentInput extends Schema.Schema.Type<typeof UndeleteDocumentInput> {}\n\nexport const DOCUMENT_REVISION_ACTIONS = [\n 'document.create',\n 'document.move',\n 'document.remove',\n 'document.restore',\n 'document.undelete',\n 'document.update',\n] as const\n\nexport const DocumentRevisionAction = Schema.Literals(DOCUMENT_REVISION_ACTIONS)\n\nexport type DocumentRevisionAction = typeof DocumentRevisionAction.Type\n\nexport const DocumentMutationAction = Schema.Literals([\n ...DOCUMENT_REVISION_ACTIONS,\n 'document.publish',\n 'document.unpublish',\n])\n\nexport type DocumentMutationAction = typeof DocumentMutationAction.Type\n\nexport const DocumentMutationResult = Schema.Struct({\n action: DocumentMutationAction,\n affectedDocumentIds: Schema.optionalKey(Schema.Array(DocumentId)),\n documentId: DocumentId,\n generation: DocumentGeneration,\n revisionId: RevisionId,\n sourcePath: SourcePath,\n version: DocumentVersion,\n entry: Schema.optionalKey(DocumentSummary),\n}).annotate({ identifier: 'DocumentMutationResult' })\n\nexport interface DocumentMutationResult extends Schema.Schema.Type<typeof DocumentMutationResult> {}\n\nexport const DocumentValidationResult = Schema.Struct({\n valid: Schema.Boolean,\n document: Schema.optionalKey(CompiledDocument),\n issues: Schema.Array(DocumentIssue),\n}).annotate({ identifier: 'DocumentValidationResult' })\n\nexport interface DocumentValidationResult extends Schema.Schema.Type<typeof DocumentValidationResult> {}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { n as readPreviewLocation } from "../../location-BgYhXEZp.js";
1
+ import { n as readPreviewLocation } from "../../location-CPX7oj0o.js";
2
2
  import { useRequestURL, useState } from "nuxt/app";
3
3
 
4
4
  //#region src/runtime/delivery/context.ts
@@ -1,4 +1,5 @@
1
- import { n as readPreviewLocation, t as previewRedirect } from "../../location-BgYhXEZp.js";
1
+ import { ownsCmsLocale } from "../../internal/i18n.js";
2
+ import { n as readPreviewLocation, t as previewRedirect } from "../../location-CPX7oj0o.js";
2
3
  import { usePreviewDelivery } from "./context.js";
3
4
  import { installCmsDocumentSeoAdapters } from "./useCmsDocumentSeo.js";
4
5
  import { localeFromPath } from "../i18n/translator.js";
@@ -12,7 +13,7 @@ var plugin_default = defineNuxtPlugin(() => {
12
13
  const route = useRoute();
13
14
  const documentLocale = useState("cms-document-locale", () => void 0);
14
15
  if (configuration.defaultLocale) {
15
- const ownsRoute = computed(() => route.name === "cms-document-page");
16
+ const ownsRoute = computed(() => ownsCmsLocale(configuration, route.meta.cmsDocument === true));
16
17
  const locale = computed(() => documentLocale.value ?? localeFromPath(configuration, route.path));
17
18
  watch(() => route.fullPath, () => {
18
19
  documentLocale.value = void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","names":[],"sources":["../../../../../src/runtime/delivery/plugin.ts"],"sourcesContent":["import configuration from '#cms/i18n'\nimport {\n addRouteMiddleware,\n defineNuxtPlugin,\n useHead,\n useRequestURL,\n useResponseHeader,\n useRoute,\n useSeoMeta,\n useState,\n} from 'nuxt/app'\nimport { updateSiteConfig, useRobotsRule, useSchemaOrg } from '#imports'\nimport { previewRedirect, readPreviewLocation } from '@internal/protocol/Preview'\nimport { computed, watch } from 'vue'\nimport { usePreviewDelivery } from './context'\nimport { installCmsDocumentSeoAdapters } from './useCmsDocumentSeo'\nimport { localeFromPath } from '../i18n/translator'\n\nexport default defineNuxtPlugin(() => {\n const route = useRoute()\n const documentLocale = useState<string | undefined>('cms-document-locale', () => undefined)\n\n if (configuration.defaultLocale) {\n const ownsRoute = computed(() => route.name === 'cms-document-page')\n const locale = computed(() => documentLocale.value ?? localeFromPath(configuration, route.path))\n\n watch(\n () => route.fullPath,\n () => {\n documentLocale.value = undefined\n },\n { flush: 'sync' },\n )\n useHead({ htmlAttrs: { lang: computed(() => (ownsRoute.value ? locale.value : undefined)) } })\n updateSiteConfig({\n _context: '@phtngyn/cms',\n _priority: 0,\n currentLocale: computed(() => (ownsRoute.value ? locale.value : undefined)),\n defaultLocale: computed(() => (ownsRoute.value ? configuration.defaultLocale : undefined)),\n locales: computed(() =>\n ownsRoute.value\n ? Object.entries(configuration.locales).map(([code, value]) => ({ code, name: value.name }))\n : undefined,\n ),\n })\n }\n\n installCmsDocumentSeoAdapters({\n head: (input) => {\n useHead(input)\n },\n robots: (input) => {\n const robots = useRobotsRule(input)\n\n if (import.meta.server) {\n watch(\n input,\n (value) => {\n robots.value = value\n },\n { flush: 'sync' },\n )\n }\n },\n schema: (input) => {\n useSchemaOrg(input)\n },\n seoMeta: (input) => {\n useSeoMeta(input)\n },\n locale: (input) => {\n watch(input, (value) => (documentLocale.value = value), { immediate: true, flush: 'sync' })\n },\n })\n\n const url = useRequestURL()\n const parameters = readPreviewLocation(url)\n const preview = usePreviewDelivery()\n\n if (!preview.value || !parameters) return\n\n if (import.meta.server) {\n useResponseHeader('cache-control').value = 'private, no-store'\n useResponseHeader('x-frame-options').value = 'SAMEORIGIN'\n }\n\n addRouteMiddleware(\n 'cms-preview',\n (to) => {\n return previewRedirect(new URL(to.fullPath, url.origin), parameters)\n },\n { global: true },\n )\n})\n"],"mappings":";;;;;;;;;;AAkBA,qBAAe,uBAAuB;CACpC,MAAM,QAAQ,SAAS;CACvB,MAAM,iBAAiB,SAA6B,6BAA6B,MAAS;CAE1F,IAAI,cAAc,eAAe;EAC/B,MAAM,YAAY,eAAe,MAAM,SAAS,mBAAmB;EACnE,MAAM,SAAS,eAAe,eAAe,SAAS,eAAe,eAAe,MAAM,IAAI,CAAC;EAE/F,YACQ,MAAM,gBACN;GACJ,eAAe,QAAQ;EACzB,GACA,EAAE,OAAO,OAAO,CAClB;EACA,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAgB,UAAU,QAAQ,OAAO,QAAQ,MAAU,EAAE,EAAE,CAAC;EAC7F,iBAAiB;GACf,UAAU;GACV,WAAW;GACX,eAAe,eAAgB,UAAU,QAAQ,OAAO,QAAQ,MAAU;GAC1E,eAAe,eAAgB,UAAU,QAAQ,cAAc,gBAAgB,MAAU;GACzF,SAAS,eACP,UAAU,QACN,OAAO,QAAQ,cAAc,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY;IAAE;IAAM,MAAM,MAAM;GAAK,EAAE,IACzF,MACN;EACF,CAAC;CACH;CAEA,8BAA8B;EAC5B,OAAO,UAAU;GACf,QAAQ,KAAK;EACf;EACA,SAAS,UAAU;GACjB,MAAM,SAAS,cAAc,KAAK;GAElC,IAAI,YAAY,QACd,MACE,QACC,UAAU;IACT,OAAO,QAAQ;GACjB,GACA,EAAE,OAAO,OAAO,CAClB;EAEJ;EACA,SAAS,UAAU;GACjB,aAAa,KAAK;EACpB;EACA,UAAU,UAAU;GAClB,WAAW,KAAK;EAClB;EACA,SAAS,UAAU;GACjB,MAAM,QAAQ,UAAW,eAAe,QAAQ,OAAQ;IAAE,WAAW;IAAM,OAAO;GAAO,CAAC;EAC5F;CACF,CAAC;CAED,MAAM,MAAM,cAAc;CAC1B,MAAM,aAAa,oBAAoB,GAAG;CAG1C,IAAI,CAFY,mBAEL,CAAC,CAAC,SAAS,CAAC,YAAY;CAEnC,IAAI,YAAY,QAAQ;EACtB,kBAAkB,eAAe,CAAC,CAAC,QAAQ;EAC3C,kBAAkB,iBAAiB,CAAC,CAAC,QAAQ;CAC/C;CAEA,mBACE,gBACC,OAAO;EACN,OAAO,gBAAgB,IAAI,IAAI,GAAG,UAAU,IAAI,MAAM,GAAG,UAAU;CACrE,GACA,EAAE,QAAQ,KAAK,CACjB;AACF,CAAC"}
1
+ {"version":3,"file":"plugin.js","names":[],"sources":["../../../../../src/runtime/delivery/plugin.ts"],"sourcesContent":["import configuration from '#cms/i18n'\nimport {\n addRouteMiddleware,\n defineNuxtPlugin,\n useHead,\n useRequestURL,\n useResponseHeader,\n useRoute,\n useSeoMeta,\n useState,\n} from 'nuxt/app'\nimport { updateSiteConfig, useRobotsRule, useSchemaOrg } from '#imports'\nimport { previewRedirect, readPreviewLocation } from '@internal/protocol/Preview'\nimport { computed, watch } from 'vue'\nimport { usePreviewDelivery } from './context'\nimport { installCmsDocumentSeoAdapters } from './useCmsDocumentSeo'\nimport { ownsCmsLocale } from '../../internal/i18n'\nimport { localeFromPath } from '../i18n/translator'\n\nexport default defineNuxtPlugin(() => {\n const route = useRoute()\n const documentLocale = useState<string | undefined>('cms-document-locale', () => undefined)\n\n if (configuration.defaultLocale) {\n const ownsRoute = computed(() => ownsCmsLocale(configuration, route.meta.cmsDocument === true))\n const locale = computed(() => documentLocale.value ?? localeFromPath(configuration, route.path))\n\n watch(\n () => route.fullPath,\n () => {\n documentLocale.value = undefined\n },\n { flush: 'sync' },\n )\n useHead({ htmlAttrs: { lang: computed(() => (ownsRoute.value ? locale.value : undefined)) } })\n updateSiteConfig({\n _context: '@phtngyn/cms',\n _priority: 0,\n currentLocale: computed(() => (ownsRoute.value ? locale.value : undefined)),\n defaultLocale: computed(() => (ownsRoute.value ? configuration.defaultLocale : undefined)),\n locales: computed(() =>\n ownsRoute.value\n ? Object.entries(configuration.locales).map(([code, value]) => ({ code, name: value.name }))\n : undefined,\n ),\n })\n }\n\n installCmsDocumentSeoAdapters({\n head: (input) => {\n useHead(input)\n },\n robots: (input) => {\n const robots = useRobotsRule(input)\n\n if (import.meta.server) {\n watch(\n input,\n (value) => {\n robots.value = value\n },\n { flush: 'sync' },\n )\n }\n },\n schema: (input) => {\n useSchemaOrg(input)\n },\n seoMeta: (input) => {\n useSeoMeta(input)\n },\n locale: (input) => {\n watch(input, (value) => (documentLocale.value = value), { immediate: true, flush: 'sync' })\n },\n })\n\n const url = useRequestURL()\n const parameters = readPreviewLocation(url)\n const preview = usePreviewDelivery()\n\n if (!preview.value || !parameters) return\n\n if (import.meta.server) {\n useResponseHeader('cache-control').value = 'private, no-store'\n useResponseHeader('x-frame-options').value = 'SAMEORIGIN'\n }\n\n addRouteMiddleware(\n 'cms-preview',\n (to) => {\n return previewRedirect(new URL(to.fullPath, url.origin), parameters)\n },\n { global: true },\n )\n})\n"],"mappings":";;;;;;;;;;;AAmBA,qBAAe,uBAAuB;CACpC,MAAM,QAAQ,SAAS;CACvB,MAAM,iBAAiB,SAA6B,6BAA6B,MAAS;CAE1F,IAAI,cAAc,eAAe;EAC/B,MAAM,YAAY,eAAe,cAAc,eAAe,MAAM,KAAK,gBAAgB,IAAI,CAAC;EAC9F,MAAM,SAAS,eAAe,eAAe,SAAS,eAAe,eAAe,MAAM,IAAI,CAAC;EAE/F,YACQ,MAAM,gBACN;GACJ,eAAe,QAAQ;EACzB,GACA,EAAE,OAAO,OAAO,CAClB;EACA,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAgB,UAAU,QAAQ,OAAO,QAAQ,MAAU,EAAE,EAAE,CAAC;EAC7F,iBAAiB;GACf,UAAU;GACV,WAAW;GACX,eAAe,eAAgB,UAAU,QAAQ,OAAO,QAAQ,MAAU;GAC1E,eAAe,eAAgB,UAAU,QAAQ,cAAc,gBAAgB,MAAU;GACzF,SAAS,eACP,UAAU,QACN,OAAO,QAAQ,cAAc,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY;IAAE;IAAM,MAAM,MAAM;GAAK,EAAE,IACzF,MACN;EACF,CAAC;CACH;CAEA,8BAA8B;EAC5B,OAAO,UAAU;GACf,QAAQ,KAAK;EACf;EACA,SAAS,UAAU;GACjB,MAAM,SAAS,cAAc,KAAK;GAElC,IAAI,YAAY,QACd,MACE,QACC,UAAU;IACT,OAAO,QAAQ;GACjB,GACA,EAAE,OAAO,OAAO,CAClB;EAEJ;EACA,SAAS,UAAU;GACjB,aAAa,KAAK;EACpB;EACA,UAAU,UAAU;GAClB,WAAW,KAAK;EAClB;EACA,SAAS,UAAU;GACjB,MAAM,QAAQ,UAAW,eAAe,QAAQ,OAAQ;IAAE,WAAW;IAAM,OAAO;GAAO,CAAC;EAC5F;CACF,CAAC;CAED,MAAM,MAAM,cAAc;CAC1B,MAAM,aAAa,oBAAoB,GAAG;CAG1C,IAAI,CAFY,mBAEL,CAAC,CAAC,SAAS,CAAC,YAAY;CAEnC,IAAI,YAAY,QAAQ;EACtB,kBAAkB,eAAe,CAAC,CAAC,QAAQ;EAC3C,kBAAkB,iBAAiB,CAAC,CAAC,QAAQ;CAC/C;CAEA,mBACE,gBACC,OAAO;EACN,OAAO,gBAAgB,IAAI,IAAI,GAAG,UAAU,IAAI,MAAM,GAAG,UAAU;CACrE,GACA,EAAE,QAAQ,KAAK,CACjB;AACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { r as DocumentId } from "../../scalars-B2lgGUnj.js";
2
- import { t as documentForms } from "../../Forms-02-p8qEw.js";
2
+ import { t as documentForms } from "../../Forms-DoB56hfe.js";
3
3
  import { Predicate, Result, Schema } from "effect";
4
4
 
5
5
  //#region src/runtime/forms/document.ts
@@ -1,8 +1,8 @@
1
1
  import { a as CMS_FORM_SUBMIT_PATH } from "../../HttpPaths-c9nLZ9H2.js";
2
- import { i as FormResult } from "../../Forms-CfcI3tPU.js";
3
- import { i as validateFormValues } from "../../Forms-02-p8qEw.js";
2
+ import { o as FormResult } from "../../Forms-BbkE7QfC.js";
3
+ import { i as validateFormValues } from "../../Forms-DoB56hfe.js";
4
4
  import { Result, Schema } from "effect";
5
- import { computed, getCurrentInstance, getCurrentScope, onScopeDispose, readonly, ref, shallowRef, toValue, useId, watch } from "vue";
5
+ import { computed, getCurrentInstance, getCurrentScope, onScopeDispose, reactive, readonly, ref, shallowRef, toValue, useId, watch } from "vue";
6
6
 
7
7
  //#region src/runtime/forms/useCmsForm.ts
8
8
  /** Headless, per-instance form state. Definition changes preserve answers for unchanged field types. */
@@ -22,7 +22,7 @@ function useCmsForm(input, options = {}) {
22
22
  const isPreview = computed(() => definition.value.preview);
23
23
  const submitError = shallowRef();
24
24
  const touched = ref(/* @__PURE__ */ new Set());
25
- const controllers = /* @__PURE__ */ new Map();
25
+ const controls = /* @__PURE__ */ new Map();
26
26
  let controller;
27
27
  let generation = 0;
28
28
  let previousFields = /* @__PURE__ */ new Map();
@@ -48,9 +48,9 @@ function useCmsForm(input, options = {}) {
48
48
  errors.value = validateFormValues(fields.value, values.value);
49
49
  return Object.keys(errors.value).length === 0;
50
50
  }
51
- function field(input) {
51
+ function control(input) {
52
52
  const fieldId = Schema.is(Schema.String)(input) ? input : input.id;
53
- const existing = controllers.get(fieldId);
53
+ const existing = controls.get(fieldId);
54
54
  if (existing) return existing;
55
55
  if (!fields.value.some((candidate) => candidate.id === fieldId)) throw new Error(`Unknown CMS form field ${fieldId}.`);
56
56
  const current = computed(() => {
@@ -61,6 +61,11 @@ function useCmsForm(input, options = {}) {
61
61
  const controlId = `${fieldIdPrefix}-${encodeURIComponent(fieldId)}`;
62
62
  const helpId = `${controlId}-help`;
63
63
  const errorId = `${controlId}-error`;
64
+ const helpAttrs = { id: helpId };
65
+ const errorAttrs = {
66
+ id: errorId,
67
+ role: "alert"
68
+ };
64
69
  const refreshError = () => {
65
70
  const issue = validateFormValues([current.value], values.value)[fieldId];
66
71
  const nextErrors = { ...errors.value };
@@ -68,7 +73,7 @@ function useCmsForm(input, options = {}) {
68
73
  else delete nextErrors[fieldId];
69
74
  errors.value = nextErrors;
70
75
  };
71
- const controller = {
76
+ const state = reactive({
72
77
  field: current,
73
78
  value: computed({
74
79
  get: () => values.value[fieldId] ?? emptyFormValue(current.value),
@@ -80,8 +85,8 @@ function useCmsForm(input, options = {}) {
80
85
  dirty: computed(() => values.value[fieldId] !== emptyFormValue(current.value)),
81
86
  touched: computed(() => touched.value.has(fieldId)),
82
87
  valid: computed(() => validateFormValues([current.value], values.value)[fieldId] === void 0),
83
- errors: computed(() => errors.value[fieldId] ? [errors.value[fieldId]] : []),
84
- controlAttrs: computed(() => {
88
+ error: computed(() => errors.value[fieldId]),
89
+ attrs: computed(() => {
85
90
  const fieldError = errors.value[fieldId];
86
91
  const describedBy = [current.value.help ? helpId : void 0, fieldError ? errorId : void 0].filter((part) => part !== void 0).join(" ");
87
92
  return {
@@ -92,18 +97,15 @@ function useCmsForm(input, options = {}) {
92
97
  "aria-describedby": describedBy || void 0
93
98
  };
94
99
  }),
95
- helpAttrs: { id: helpId },
96
- errorAttrs: {
97
- id: errorId,
98
- role: "alert"
99
- },
100
+ helpAttrs,
101
+ errorAttrs,
100
102
  touch: () => {
101
103
  touched.value = /* @__PURE__ */ new Set([...touched.value, fieldId]);
102
104
  refreshError();
103
105
  }
104
- };
105
- controllers.set(fieldId, controller);
106
- return controller;
106
+ });
107
+ controls.set(fieldId, state);
108
+ return state;
107
109
  }
108
110
  function next() {
109
111
  if (submitting.value || isLastStep.value) return false;
@@ -155,7 +157,7 @@ function useCmsForm(input, options = {}) {
155
157
  values: { ...values.value }
156
158
  }, controller.signal);
157
159
  if (generation !== currentGeneration) return false;
158
- errors.value = { ...result.errors };
160
+ errors.value = result.status === "invalid" ? { ...result.errors } : {};
159
161
  isSuccess.value = result.status === "accepted";
160
162
  if (result.status === "invalid") stepIndex.value = Math.max(0, steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])));
161
163
  if (result.status !== "accepted" && result.status !== "invalid") submitError.value = result.status === "stale" ? "This form has changed. Reload the page before submitting." : "Submission failed. Please try again.";
@@ -172,9 +174,10 @@ function useCmsForm(input, options = {}) {
172
174
  controller?.abort();
173
175
  stop();
174
176
  });
175
- const invalidFields = computed(() => fields.value.map((entry) => field(entry)).filter((entry) => !entry.valid.value));
176
- const firstInvalidFieldId = computed(() => invalidFields.value[0]?.controlAttrs.value.id);
177
- const canSubmit = computed(() => !submitting.value && !isSuccess.value && invalidFields.value.length === 0);
177
+ const visibleControls = computed(() => currentStep.value?.fields.map((entry) => control(entry)) ?? []);
178
+ const invalidControls = computed(() => fields.value.map((entry) => control(entry)).filter((entry) => !entry.valid));
179
+ const firstInvalidControlId = computed(() => invalidControls.value[0]?.attrs.id);
180
+ const canSubmit = computed(() => !submitting.value && !isSuccess.value && invalidControls.value.length === 0);
178
181
  return {
179
182
  fields,
180
183
  steps,
@@ -189,9 +192,10 @@ function useCmsForm(input, options = {}) {
189
192
  isPreview,
190
193
  submitError: readonly(submitError),
191
194
  canSubmit,
192
- invalidFields,
193
- firstInvalidFieldId,
194
- field,
195
+ visibleControls,
196
+ invalidControls,
197
+ firstInvalidControlId,
198
+ control,
195
199
  next,
196
200
  previous,
197
201
  validate,
@@ -1 +1 @@
1
- {"version":3,"file":"useCmsForm.js","names":[],"sources":["../../../../../src/runtime/forms/useCmsForm.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, ComputedRef, WritableComputedRef } from 'vue'\nimport type { FormDefinition, FormField, FormStep, FormSubmission, FormValues } from '@internal/protocol/Forms'\nimport { FormResult } from '@internal/protocol/Forms'\nimport { validateFormValues } from '@internal/document/Forms'\nimport { Result, Schema } from 'effect'\nimport {\n computed,\n getCurrentInstance,\n getCurrentScope,\n onScopeDispose,\n readonly,\n ref,\n shallowRef,\n toValue,\n useId,\n watch,\n} from 'vue'\nimport { CMS_FORM_SUBMIT_PATH } from '@internal/protocol/HttpPaths'\n\nexport interface UseCmsFormOptions {\n /** Replace the HTTP transport, retaining validation and submission state. */\n readonly submit?: (submission: FormSubmission, signal: AbortSignal) => Promise<FormResult>\n}\n\nexport interface CmsFormFieldController {\n readonly field: ComputedRef<FormField>\n readonly value: WritableComputedRef<FormValues[string]>\n readonly dirty: ComputedRef<boolean>\n readonly touched: ComputedRef<boolean>\n readonly valid: ComputedRef<boolean>\n readonly errors: ComputedRef<ReadonlyArray<string>>\n readonly controlAttrs: ComputedRef<{\n readonly id: string\n readonly name: string\n readonly required: boolean\n readonly 'aria-invalid': 'true' | undefined\n readonly 'aria-describedby': string | undefined\n }>\n readonly helpAttrs: { readonly id: string }\n readonly errorAttrs: { readonly id: string; readonly role: 'alert' }\n readonly touch: () => void\n}\n\nexport interface UseCmsFormReturn {\n readonly fields: ComputedRef<ReadonlyArray<FormField>>\n readonly steps: ComputedRef<ReadonlyArray<FormStep>>\n readonly values: Ref<Record<string, FormValues[string]>>\n readonly errors: Readonly<Ref<Readonly<Record<string, string>>>>\n readonly currentStep: ComputedRef<FormStep | undefined>\n readonly stepIndex: Readonly<Ref<number>>\n readonly isFirstStep: ComputedRef<boolean>\n readonly isLastStep: ComputedRef<boolean>\n readonly submitting: Readonly<Ref<boolean>>\n readonly isSuccess: Readonly<Ref<boolean>>\n readonly isPreview: ComputedRef<boolean>\n readonly submitError: Readonly<Ref<string | undefined>>\n readonly canSubmit: ComputedRef<boolean>\n readonly invalidFields: ComputedRef<ReadonlyArray<CmsFormFieldController>>\n readonly firstInvalidFieldId: ComputedRef<string | undefined>\n readonly field: (field: string | FormField) => CmsFormFieldController\n readonly next: () => boolean\n readonly previous: () => void\n readonly validate: () => boolean\n readonly submit: () => Promise<boolean>\n readonly reset: () => void\n}\n\n/** Headless, per-instance form state. Definition changes preserve answers for unchanged field types. */\nexport function useCmsForm(input: MaybeRefOrGetter<FormDefinition>, options: UseCmsFormOptions = {}): UseCmsFormReturn {\n const fieldIdPrefix = getCurrentInstance() ? useId() : 'cms-form'\n const definition = computed(() => toValue(input))\n const steps = computed(() => definition.value.steps)\n const fields = computed(() => steps.value.flatMap((step) => step.fields))\n const values = ref<Record<string, FormValues[string]>>({})\n const errors = shallowRef<Record<string, string>>({})\n const stepIndex = ref(0)\n const currentStep = computed(() => steps.value[stepIndex.value])\n const isFirstStep = computed(() => stepIndex.value === 0)\n const isLastStep = computed(() => stepIndex.value === steps.value.length - 1)\n const submitting = ref(false)\n const isSuccess = ref(false)\n const isPreview = computed(() => definition.value.preview)\n const submitError = shallowRef<string>()\n const touched = ref(new Set<string>())\n const controllers = new Map<string, CmsFormFieldController>()\n let controller: AbortController | undefined\n let generation = 0\n let previousFields = new Map<string, string>()\n\n const stop = watch(\n definition,\n (next, before) => {\n generation++\n controller?.abort()\n submitting.value = false\n\n const sameForm =\n before?.documentId === next.documentId &&\n JSON.stringify(before.nodePath) === JSON.stringify(next.nodePath) &&\n before.name === next.name\n\n values.value = Object.fromEntries(\n next.steps\n .flatMap((step) => step.fields)\n .map((field) => [\n field.id,\n sameForm && previousFields.get(field.id) === field.type\n ? (values.value[field.id] ?? null)\n : field.type === 'checkbox'\n ? false\n : field.type === 'number'\n ? null\n : '',\n ]),\n )\n previousFields = new Map(next.steps.flatMap((step) => step.fields).map((field) => [field.id, field.type]))\n stepIndex.value = Math.max(\n 0,\n next.steps.findIndex((step) => step.id === before?.steps[stepIndex.value]?.id),\n )\n errors.value = {}\n touched.value = new Set()\n submitError.value = undefined\n isSuccess.value = false\n },\n { immediate: true, deep: true, flush: 'sync' },\n )\n\n function validate(): boolean {\n touched.value = new Set(fields.value.map((field) => field.id))\n errors.value = validateFormValues(fields.value, values.value)\n\n return Object.keys(errors.value).length === 0\n }\n\n function field(input: string | FormField): CmsFormFieldController {\n const fieldId = Schema.is(Schema.String)(input) ? input : input.id\n const existing = controllers.get(fieldId)\n\n if (existing) return existing\n\n if (!fields.value.some((candidate) => candidate.id === fieldId))\n throw new Error(`Unknown CMS form field ${fieldId}.`)\n\n const current = computed(() => {\n const candidate = fields.value.find((field) => field.id === fieldId)\n\n if (!candidate) throw new Error(`CMS form field ${fieldId} no longer exists.`)\n\n return candidate\n })\n\n const controlId = `${fieldIdPrefix}-${encodeURIComponent(fieldId)}`\n const helpId = `${controlId}-help`\n const errorId = `${controlId}-error`\n\n const refreshError = () => {\n const issue = validateFormValues([current.value], values.value)[fieldId]\n const nextErrors = { ...errors.value }\n\n if (issue) nextErrors[fieldId] = issue\n else delete nextErrors[fieldId]\n errors.value = nextErrors\n }\n\n const controller: CmsFormFieldController = {\n field: current,\n value: computed({\n get: () => values.value[fieldId] ?? emptyFormValue(current.value),\n set: (value) => {\n values.value[fieldId] = normalizeFormValue(current.value, value)\n\n if (touched.value.has(fieldId) || errors.value[fieldId]) refreshError()\n },\n }),\n dirty: computed(() => values.value[fieldId] !== emptyFormValue(current.value)),\n touched: computed(() => touched.value.has(fieldId)),\n valid: computed(() => validateFormValues([current.value], values.value)[fieldId] === undefined),\n errors: computed(() => (errors.value[fieldId] ? [errors.value[fieldId]] : [])),\n controlAttrs: computed(() => {\n const fieldError = errors.value[fieldId]\n\n const describedBy = [current.value.help ? helpId : undefined, fieldError ? errorId : undefined]\n .filter((part) => part !== undefined)\n .join(' ')\n\n return {\n id: controlId,\n name: fieldId,\n required: current.value.required === true,\n 'aria-invalid': fieldError ? 'true' : undefined,\n 'aria-describedby': describedBy || undefined,\n }\n }),\n helpAttrs: { id: helpId },\n errorAttrs: { id: errorId, role: 'alert' },\n touch: () => {\n touched.value = new Set([...touched.value, fieldId])\n refreshError()\n },\n }\n\n controllers.set(fieldId, controller)\n\n return controller\n }\n\n function next(): boolean {\n if (submitting.value || isLastStep.value) return false\n const stepFields = currentStep.value?.fields ?? []\n touched.value = new Set([...touched.value, ...stepFields.map((field) => field.id)])\n const issues = validateFormValues(stepFields, values.value)\n errors.value = {\n ...Object.fromEntries(\n Object.entries(errors.value).filter(([id]) => !stepFields.some((field) => field.id === id)),\n ),\n ...issues,\n }\n\n if (Object.keys(issues).length) return false\n stepIndex.value++\n\n return true\n }\n\n function previous(): void {\n if (!submitting.value && !isFirstStep.value) stepIndex.value--\n }\n\n function reset(): void {\n generation++\n controller?.abort()\n submitting.value = false\n values.value = Object.fromEntries(fields.value.map((field) => [field.id, emptyFormValue(field)]))\n errors.value = {}\n touched.value = new Set()\n submitError.value = undefined\n isSuccess.value = false\n stepIndex.value = 0\n }\n\n async function submit(): Promise<boolean> {\n if (submitting.value || isSuccess.value) return false\n submitError.value = undefined\n\n if (!validate()) {\n stepIndex.value = Math.max(\n 0,\n steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])),\n )\n\n return false\n }\n\n if (isPreview.value) {\n isSuccess.value = true\n\n return true\n }\n\n const currentGeneration = ++generation\n controller = new AbortController()\n submitting.value = true\n\n try {\n const { documentId, nodePath, revision } = definition.value\n\n const result = await (options.submit ?? send)(\n { documentId, nodePath, revision, values: { ...values.value } },\n controller.signal,\n )\n\n if (generation !== currentGeneration) return false\n errors.value = { ...result.errors }\n isSuccess.value = result.status === 'accepted'\n\n if (result.status === 'invalid')\n stepIndex.value = Math.max(\n 0,\n steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])),\n )\n\n if (result.status !== 'accepted' && result.status !== 'invalid')\n submitError.value =\n result.status === 'stale'\n ? 'This form has changed. Reload the page before submitting.'\n : 'Submission failed. Please try again.'\n\n return isSuccess.value\n } catch {\n if (generation === currentGeneration) submitError.value = 'Submission failed. Please try again.'\n\n return false\n } finally {\n if (generation === currentGeneration) submitting.value = false\n }\n }\n\n if (getCurrentScope())\n onScopeDispose(() => {\n generation++\n controller?.abort()\n stop()\n })\n\n const invalidFields = computed(() => fields.value.map((entry) => field(entry)).filter((entry) => !entry.valid.value))\n const firstInvalidFieldId = computed(() => invalidFields.value[0]?.controlAttrs.value.id)\n const canSubmit = computed(() => !submitting.value && !isSuccess.value && invalidFields.value.length === 0)\n\n return {\n fields,\n steps,\n values,\n errors: readonly(errors),\n currentStep,\n stepIndex: readonly(stepIndex),\n isFirstStep,\n isLastStep,\n submitting: readonly(submitting),\n isSuccess: readonly(isSuccess),\n isPreview,\n submitError: readonly(submitError),\n canSubmit,\n invalidFields,\n firstInvalidFieldId,\n field,\n next,\n previous,\n validate,\n submit,\n reset,\n }\n}\n\nfunction normalizeFormValue(field: FormField, input: FormValues[string] | undefined): FormValues[string] {\n if (field.type === 'checkbox') return input === true\n\n if (field.type === 'number') {\n if (input === '' || input == null) return null\n const value = Schema.is(Schema.Finite)(input) || Schema.is(Schema.String)(input) ? Number(input) : Number.NaN\n\n if (Number.isFinite(value)) return value\n\n return Schema.is(Schema.String)(input) ? input : null\n }\n\n return Schema.is(Schema.String)(input) ? input : ''\n}\n\nfunction emptyFormValue(field: FormField): FormValues[string] {\n if (field.type === 'checkbox') return false\n\n if (field.type === 'number') return null\n\n return ''\n}\n\nasync function send(submission: FormSubmission, signal: AbortSignal): Promise<FormResult> {\n const response = await fetch(CMS_FORM_SUBMIT_PATH, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(submission),\n signal,\n })\n\n if (!response.ok) throw new Error('Submission failed.')\n\n return Result.getOrThrow(Schema.decodeUnknownResult(FormResult)(await response.json()))\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useCmsForm.js","names":[],"sources":["../../../../../src/runtime/forms/useCmsForm.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, ComputedRef } from 'vue'\nimport type { FormDefinition, FormField, FormStep, FormSubmission, FormValues } from '@internal/protocol/Forms'\nimport { FormResult } from '@internal/protocol/Forms'\nimport { validateFormValues } from '@internal/document/Forms'\nimport { Result, Schema } from 'effect'\nimport {\n computed,\n getCurrentInstance,\n getCurrentScope,\n onScopeDispose,\n reactive,\n readonly,\n ref,\n shallowRef,\n toValue,\n useId,\n watch,\n} from 'vue'\nimport { CMS_FORM_SUBMIT_PATH } from '@internal/protocol/HttpPaths'\n\nexport interface UseCmsFormOptions {\n /** Replace the HTTP transport, retaining validation and submission state. */\n readonly submit?: (submission: FormSubmission, signal: AbortSignal) => Promise<FormResult>\n}\n\nexport interface CmsFormControl {\n readonly field: FormField\n value: FormValues[string]\n readonly dirty: boolean\n readonly touched: boolean\n readonly valid: boolean\n readonly error: string | undefined\n readonly attrs: {\n readonly id: string\n readonly name: string\n readonly required: boolean\n readonly 'aria-invalid': 'true' | undefined\n readonly 'aria-describedby': string | undefined\n }\n readonly helpAttrs: { readonly id: string }\n readonly errorAttrs: { readonly id: string; readonly role: 'alert' }\n readonly touch: () => void\n}\n\nexport interface UseCmsFormReturn {\n readonly fields: ComputedRef<ReadonlyArray<FormField>>\n readonly steps: ComputedRef<ReadonlyArray<FormStep>>\n readonly values: Ref<Record<string, FormValues[string]>>\n readonly errors: Readonly<Ref<Readonly<Record<string, string>>>>\n readonly currentStep: ComputedRef<FormStep | undefined>\n readonly stepIndex: Readonly<Ref<number>>\n readonly isFirstStep: ComputedRef<boolean>\n readonly isLastStep: ComputedRef<boolean>\n readonly submitting: Readonly<Ref<boolean>>\n readonly isSuccess: Readonly<Ref<boolean>>\n readonly isPreview: ComputedRef<boolean>\n readonly submitError: Readonly<Ref<string | undefined>>\n readonly canSubmit: ComputedRef<boolean>\n readonly visibleControls: ComputedRef<ReadonlyArray<CmsFormControl>>\n readonly invalidControls: ComputedRef<ReadonlyArray<CmsFormControl>>\n readonly firstInvalidControlId: ComputedRef<string | undefined>\n readonly control: (field: string | FormField) => CmsFormControl\n readonly next: () => boolean\n readonly previous: () => void\n readonly validate: () => boolean\n readonly submit: () => Promise<boolean>\n readonly reset: () => void\n}\n\n/** Headless, per-instance form state. Definition changes preserve answers for unchanged field types. */\nexport function useCmsForm(input: MaybeRefOrGetter<FormDefinition>, options: UseCmsFormOptions = {}): UseCmsFormReturn {\n const fieldIdPrefix = getCurrentInstance() ? useId() : 'cms-form'\n const definition = computed(() => toValue(input))\n const steps = computed(() => definition.value.steps)\n const fields = computed(() => steps.value.flatMap((step) => step.fields))\n const values = ref<Record<string, FormValues[string]>>({})\n const errors = shallowRef<Record<string, string>>({})\n const stepIndex = ref(0)\n const currentStep = computed(() => steps.value[stepIndex.value])\n const isFirstStep = computed(() => stepIndex.value === 0)\n const isLastStep = computed(() => stepIndex.value === steps.value.length - 1)\n const submitting = ref(false)\n const isSuccess = ref(false)\n const isPreview = computed(() => definition.value.preview)\n const submitError = shallowRef<string>()\n const touched = ref(new Set<string>())\n const controls = new Map<string, CmsFormControl>()\n let controller: AbortController | undefined\n let generation = 0\n let previousFields = new Map<string, string>()\n\n const stop = watch(\n definition,\n (next, before) => {\n generation++\n controller?.abort()\n submitting.value = false\n\n const sameForm =\n before?.documentId === next.documentId &&\n JSON.stringify(before.nodePath) === JSON.stringify(next.nodePath) &&\n before.name === next.name\n\n values.value = Object.fromEntries(\n next.steps\n .flatMap((step) => step.fields)\n .map((field) => [\n field.id,\n sameForm && previousFields.get(field.id) === field.type\n ? (values.value[field.id] ?? null)\n : field.type === 'checkbox'\n ? false\n : field.type === 'number'\n ? null\n : '',\n ]),\n )\n previousFields = new Map(next.steps.flatMap((step) => step.fields).map((field) => [field.id, field.type]))\n stepIndex.value = Math.max(\n 0,\n next.steps.findIndex((step) => step.id === before?.steps[stepIndex.value]?.id),\n )\n errors.value = {}\n touched.value = new Set()\n submitError.value = undefined\n isSuccess.value = false\n },\n { immediate: true, deep: true, flush: 'sync' },\n )\n\n function validate(): boolean {\n touched.value = new Set(fields.value.map((field) => field.id))\n errors.value = validateFormValues(fields.value, values.value)\n\n return Object.keys(errors.value).length === 0\n }\n\n function control(input: string | FormField): CmsFormControl {\n const fieldId = Schema.is(Schema.String)(input) ? input : input.id\n const existing = controls.get(fieldId)\n\n if (existing) return existing\n\n if (!fields.value.some((candidate) => candidate.id === fieldId))\n throw new Error(`Unknown CMS form field ${fieldId}.`)\n\n const current = computed(() => {\n const candidate = fields.value.find((field) => field.id === fieldId)\n\n if (!candidate) throw new Error(`CMS form field ${fieldId} no longer exists.`)\n\n return candidate\n })\n\n const controlId = `${fieldIdPrefix}-${encodeURIComponent(fieldId)}`\n const helpId = `${controlId}-help`\n const errorId = `${controlId}-error`\n const helpAttrs: CmsFormControl['helpAttrs'] = { id: helpId }\n const errorAttrs: CmsFormControl['errorAttrs'] = { id: errorId, role: 'alert' }\n\n const refreshError = () => {\n const issue = validateFormValues([current.value], values.value)[fieldId]\n const nextErrors = { ...errors.value }\n\n if (issue) nextErrors[fieldId] = issue\n else delete nextErrors[fieldId]\n errors.value = nextErrors\n }\n\n const state = reactive({\n field: current,\n value: computed({\n get: () => values.value[fieldId] ?? emptyFormValue(current.value),\n set: (value) => {\n values.value[fieldId] = normalizeFormValue(current.value, value)\n\n if (touched.value.has(fieldId) || errors.value[fieldId]) refreshError()\n },\n }),\n dirty: computed(() => values.value[fieldId] !== emptyFormValue(current.value)),\n touched: computed(() => touched.value.has(fieldId)),\n valid: computed(() => validateFormValues([current.value], values.value)[fieldId] === undefined),\n error: computed(() => errors.value[fieldId]),\n attrs: computed<CmsFormControl['attrs']>(() => {\n const fieldError = errors.value[fieldId]\n\n const describedBy = [current.value.help ? helpId : undefined, fieldError ? errorId : undefined]\n .filter((part) => part !== undefined)\n .join(' ')\n\n return {\n id: controlId,\n name: fieldId,\n required: current.value.required === true,\n 'aria-invalid': fieldError ? 'true' : undefined,\n 'aria-describedby': describedBy || undefined,\n }\n }),\n helpAttrs,\n errorAttrs,\n touch: () => {\n touched.value = new Set([...touched.value, fieldId])\n refreshError()\n },\n })\n\n controls.set(fieldId, state)\n\n return state\n }\n\n function next(): boolean {\n if (submitting.value || isLastStep.value) return false\n const stepFields = currentStep.value?.fields ?? []\n touched.value = new Set([...touched.value, ...stepFields.map((field) => field.id)])\n const issues = validateFormValues(stepFields, values.value)\n errors.value = {\n ...Object.fromEntries(\n Object.entries(errors.value).filter(([id]) => !stepFields.some((field) => field.id === id)),\n ),\n ...issues,\n }\n\n if (Object.keys(issues).length) return false\n stepIndex.value++\n\n return true\n }\n\n function previous(): void {\n if (!submitting.value && !isFirstStep.value) stepIndex.value--\n }\n\n function reset(): void {\n generation++\n controller?.abort()\n submitting.value = false\n values.value = Object.fromEntries(fields.value.map((field) => [field.id, emptyFormValue(field)]))\n errors.value = {}\n touched.value = new Set()\n submitError.value = undefined\n isSuccess.value = false\n stepIndex.value = 0\n }\n\n async function submit(): Promise<boolean> {\n if (submitting.value || isSuccess.value) return false\n submitError.value = undefined\n\n if (!validate()) {\n stepIndex.value = Math.max(\n 0,\n steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])),\n )\n\n return false\n }\n\n if (isPreview.value) {\n isSuccess.value = true\n\n return true\n }\n\n const currentGeneration = ++generation\n controller = new AbortController()\n submitting.value = true\n\n try {\n const { documentId, nodePath, revision } = definition.value\n\n const result = await (options.submit ?? send)(\n { documentId, nodePath, revision, values: { ...values.value } },\n controller.signal,\n )\n\n if (generation !== currentGeneration) return false\n errors.value = result.status === 'invalid' ? { ...result.errors } : {}\n isSuccess.value = result.status === 'accepted'\n\n if (result.status === 'invalid')\n stepIndex.value = Math.max(\n 0,\n steps.value.findIndex((step) => step.fields.some((field) => errors.value[field.id])),\n )\n\n if (result.status !== 'accepted' && result.status !== 'invalid')\n submitError.value =\n result.status === 'stale'\n ? 'This form has changed. Reload the page before submitting.'\n : 'Submission failed. Please try again.'\n\n return isSuccess.value\n } catch {\n if (generation === currentGeneration) submitError.value = 'Submission failed. Please try again.'\n\n return false\n } finally {\n if (generation === currentGeneration) submitting.value = false\n }\n }\n\n if (getCurrentScope())\n onScopeDispose(() => {\n generation++\n controller?.abort()\n stop()\n })\n\n const visibleControls = computed(() => currentStep.value?.fields.map((entry) => control(entry)) ?? [])\n const invalidControls = computed(() => fields.value.map((entry) => control(entry)).filter((entry) => !entry.valid))\n const firstInvalidControlId = computed(() => invalidControls.value[0]?.attrs.id)\n const canSubmit = computed(() => !submitting.value && !isSuccess.value && invalidControls.value.length === 0)\n\n return {\n fields,\n steps,\n values,\n errors: readonly(errors),\n currentStep,\n stepIndex: readonly(stepIndex),\n isFirstStep,\n isLastStep,\n submitting: readonly(submitting),\n isSuccess: readonly(isSuccess),\n isPreview,\n submitError: readonly(submitError),\n canSubmit,\n visibleControls,\n invalidControls,\n firstInvalidControlId,\n control,\n next,\n previous,\n validate,\n submit,\n reset,\n }\n}\n\nfunction normalizeFormValue(field: FormField, input: FormValues[string] | undefined): FormValues[string] {\n if (field.type === 'checkbox') return input === true\n\n if (field.type === 'number') {\n if (input === '' || input == null) return null\n const value = Schema.is(Schema.Finite)(input) || Schema.is(Schema.String)(input) ? Number(input) : Number.NaN\n\n if (Number.isFinite(value)) return value\n\n return Schema.is(Schema.String)(input) ? input : null\n }\n\n return Schema.is(Schema.String)(input) ? input : ''\n}\n\nfunction emptyFormValue(field: FormField): FormValues[string] {\n if (field.type === 'checkbox') return false\n\n if (field.type === 'number') return null\n\n return ''\n}\n\nasync function send(submission: FormSubmission, signal: AbortSignal): Promise<FormResult> {\n const response = await fetch(CMS_FORM_SUBMIT_PATH, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(submission),\n signal,\n })\n\n if (!response.ok) throw new Error('Submission failed.')\n\n return Result.getOrThrow(Schema.decodeUnknownResult(FormResult)(await response.json()))\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as CmsMessageParameters, i as CmsMessageKey, r as CmsLocale } from "../../I18n-BXlVunfa.js";
1
+ import { a as CmsMessageParameters, i as CmsMessageKey, r as CmsLocale } from "../../I18n-zbqpWxki.js";
2
2
  import { ComputedRef } from "vue";
3
3
  //#region src/runtime/i18n/useCmsI18n.d.ts
4
4
  export interface UseCmsI18nReturn {
@@ -1,3 +1,3 @@
1
- import { n as scopedDatabaseUrl, r as toS3MediaObjectStoreOptions, t as installCms } from "../installation-DsGst1BH.js";
1
+ import { n as scopedDatabaseUrl, r as toS3MediaObjectStoreOptions, t as installCms } from "../installation-BNuoRDOz.js";
2
2
 
3
3
  export { installCms, scopedDatabaseUrl, toS3MediaObjectStoreOptions };
@@ -1,14 +1,22 @@
1
1
  import { resolveCmsInstallation } from "../internal/configuration.js";
2
- import { t as installCms } from "../installation-DsGst1BH.js";
2
+ import { t as installCms } from "../installation-BNuoRDOz.js";
3
+ import { diagnosticFromCause, renderDiagnostic } from "../internal/diagnostics.js";
3
4
  import { Effect } from "effect";
4
- import { defineNitroPlugin, useNitroApp } from "nitropack/runtime";
5
+ import { defineNitroPlugin, useNitroApp, useRuntimeConfig } from "nitropack/runtime";
5
6
 
6
7
  //#region src/runtime/plugin.ts
7
8
  function createInstallationPlugin(authored, authoring) {
8
9
  return defineNitroPlugin((nitro) => {
9
10
  if (nitro.cmsInstallation) throw new Error("The CMS installation is already registered with Nitro.");
10
- const configuration = resolveCmsInstallation(authored, authoring);
11
- const installation = Effect.runPromise(installCms(configuration));
11
+ let configuration;
12
+ try {
13
+ configuration = resolveCmsInstallation(authored, useRuntimeConfig().cms, authoring);
14
+ } catch (cause) {
15
+ throw new Error(renderDiagnostic(diagnosticFromCause("startup.configuration", cause), false), { cause });
16
+ }
17
+ const installation = Effect.runPromise(installCms(configuration)).catch((cause) => {
18
+ throw new Error(renderDiagnostic(diagnosticFromCause("startup.installation", cause), false), { cause });
19
+ });
12
20
  nitro.cmsInstallation = installation;
13
21
  installation.catch((cause) => {
14
22
  nitro.captureError(cause instanceof Error ? cause : new Error(String(cause)), {