@webiny/api-website-builder 6.3.0 → 6.4.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/constants.js +4 -3
- package/constants.js.map +1 -1
- package/domain/page/EntryToPageMapper.js +30 -28
- package/domain/page/EntryToPageMapper.js.map +1 -1
- package/domain/page/PagePath.js +20 -30
- package/domain/page/PagePath.js.map +1 -1
- package/domain/page/abstractions.d.ts +13 -0
- package/domain/page/abstractions.js +2 -5
- package/domain/page/abstractions.js.map +1 -1
- package/domain/page/errors.js +46 -51
- package/domain/page/errors.js.map +1 -1
- package/domain/page/page.model.js +33 -29
- package/domain/page/page.model.js.map +1 -1
- package/domain/permissionsSchema.js +49 -28
- package/domain/permissionsSchema.js.map +1 -1
- package/domain/redirect/EntryToRedirectMapper.js +21 -20
- package/domain/redirect/EntryToRedirectMapper.js.map +1 -1
- package/domain/redirect/abstractions.js +2 -9
- package/domain/redirect/abstractions.js.map +1 -1
- package/domain/redirect/errors.js +28 -31
- package/domain/redirect/errors.js.map +1 -1
- package/domain/redirect/redirect.model.js +32 -29
- package/domain/redirect/redirect.model.js.map +1 -1
- package/domain/shared/abstractions.js +0 -3
- package/exports/api/website-builder/nextjs.js +0 -2
- package/exports/api/website-builder/page.js +5 -7
- package/exports/api/website-builder/redirect.js +1 -3
- package/features/installer/ApiKeyInstaller.js +33 -30
- package/features/installer/ApiKeyInstaller.js.map +1 -1
- package/features/installer/feature.js +6 -5
- package/features/installer/feature.js.map +1 -1
- package/features/nextjs/MarkdownContentBuilder.js +67 -76
- package/features/nextjs/MarkdownContentBuilder.js.map +1 -1
- package/features/nextjs/MarkdownContentBuilder.test.js +266 -273
- package/features/nextjs/MarkdownContentBuilder.test.js.map +1 -1
- package/features/nextjs/NextjsConfig.js +43 -46
- package/features/nextjs/NextjsConfig.js.map +1 -1
- package/features/nextjs/abstractions.js +2 -2
- package/features/nextjs/abstractions.js.map +1 -1
- package/features/nextjs/feature.js +6 -5
- package/features/nextjs/feature.js.map +1 -1
- package/features/nextjs/index.js +0 -2
- package/features/pages/CreatePage/CreatePageRepository.js +23 -25
- package/features/pages/CreatePage/CreatePageRepository.js.map +1 -1
- package/features/pages/CreatePage/CreatePageUseCase.js +29 -34
- package/features/pages/CreatePage/CreatePageUseCase.js.map +1 -1
- package/features/pages/CreatePage/abstractions.js +5 -30
- package/features/pages/CreatePage/abstractions.js.map +1 -1
- package/features/pages/CreatePage/events.js +16 -14
- package/features/pages/CreatePage/events.js.map +1 -1
- package/features/pages/CreatePage/feature.js +7 -6
- package/features/pages/CreatePage/feature.js.map +1 -1
- package/features/pages/CreatePage/index.js +1 -3
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromRepository.js +30 -36
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromRepository.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js +33 -41
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/abstractions.js +5 -30
- package/features/pages/CreatePageRevisionFrom/abstractions.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/events.js +16 -14
- package/features/pages/CreatePageRevisionFrom/events.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/feature.js +7 -6
- package/features/pages/CreatePageRevisionFrom/feature.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/index.js +1 -3
- package/features/pages/DeletePage/DeletePageRepository.js +19 -18
- package/features/pages/DeletePage/DeletePageRepository.js.map +1 -1
- package/features/pages/DeletePage/DeletePageUseCase.js +32 -39
- package/features/pages/DeletePage/DeletePageUseCase.js.map +1 -1
- package/features/pages/DeletePage/abstractions.js +5 -30
- package/features/pages/DeletePage/abstractions.js.map +1 -1
- package/features/pages/DeletePage/events.js +16 -14
- package/features/pages/DeletePage/events.js.map +1 -1
- package/features/pages/DeletePage/feature.js +7 -6
- package/features/pages/DeletePage/feature.js.map +1 -1
- package/features/pages/DeletePage/index.js +1 -3
- package/features/pages/DuplicatePage/DuplicatePageRepository.js +50 -53
- package/features/pages/DuplicatePage/DuplicatePageRepository.js.map +1 -1
- package/features/pages/DuplicatePage/DuplicatePageUseCase.js +35 -43
- package/features/pages/DuplicatePage/DuplicatePageUseCase.js.map +1 -1
- package/features/pages/DuplicatePage/abstractions.js +5 -30
- package/features/pages/DuplicatePage/abstractions.js.map +1 -1
- package/features/pages/DuplicatePage/events.js +16 -14
- package/features/pages/DuplicatePage/events.js.map +1 -1
- package/features/pages/DuplicatePage/feature.js +7 -6
- package/features/pages/DuplicatePage/feature.js.map +1 -1
- package/features/pages/DuplicatePage/index.js +1 -3
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdRepository.js +20 -20
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdRepository.js.map +1 -1
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdUseCase.js +19 -21
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdUseCase.js.map +1 -1
- package/features/pages/GetDeletedPageById/abstractions.js +3 -12
- package/features/pages/GetDeletedPageById/abstractions.js.map +1 -1
- package/features/pages/GetDeletedPageById/feature.js +7 -6
- package/features/pages/GetDeletedPageById/feature.js.map +1 -1
- package/features/pages/GetDeletedPageById/index.js +0 -2
- package/features/pages/GetPageById/GetPageByIdRepository.js +20 -18
- package/features/pages/GetPageById/GetPageByIdRepository.js.map +1 -1
- package/features/pages/GetPageById/GetPageByIdUseCase.js +19 -21
- package/features/pages/GetPageById/GetPageByIdUseCase.js.map +1 -1
- package/features/pages/GetPageById/abstractions.js +3 -13
- package/features/pages/GetPageById/abstractions.js.map +1 -1
- package/features/pages/GetPageById/feature.js +7 -6
- package/features/pages/GetPageById/feature.js.map +1 -1
- package/features/pages/GetPageById/index.js +0 -2
- package/features/pages/GetPageByPath/GetPageByPathRepository.js +26 -26
- package/features/pages/GetPageByPath/GetPageByPathRepository.js.map +1 -1
- package/features/pages/GetPageByPath/GetPageByPathUseCase.js +19 -21
- package/features/pages/GetPageByPath/GetPageByPathUseCase.js.map +1 -1
- package/features/pages/GetPageByPath/abstractions.js +3 -13
- package/features/pages/GetPageByPath/abstractions.js.map +1 -1
- package/features/pages/GetPageByPath/feature.js +7 -6
- package/features/pages/GetPageByPath/feature.js.map +1 -1
- package/features/pages/GetPageByPath/index.js +0 -2
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsRepository.js +42 -48
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsRepository.js.map +1 -1
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsUseCase.js +14 -13
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsUseCase.js.map +1 -1
- package/features/pages/GetPageLanguagePaths/abstractions.js +3 -3
- package/features/pages/GetPageLanguagePaths/abstractions.js.map +1 -1
- package/features/pages/GetPageLanguagePaths/feature.js +7 -6
- package/features/pages/GetPageLanguagePaths/feature.js.map +1 -1
- package/features/pages/GetPageLanguagePaths/index.js +0 -2
- package/features/pages/GetPageRevisions/GetPageRevisionsRepository.js +17 -15
- package/features/pages/GetPageRevisions/GetPageRevisionsRepository.js.map +1 -1
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js +22 -24
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js.map +1 -1
- package/features/pages/GetPageRevisions/abstractions.js +3 -13
- package/features/pages/GetPageRevisions/abstractions.js.map +1 -1
- package/features/pages/GetPageRevisions/feature.js +7 -6
- package/features/pages/GetPageRevisions/feature.js.map +1 -1
- package/features/pages/GetPageRevisions/index.js +0 -2
- package/features/pages/ListDeletedPages/ListDeletedPagesRepository.js +37 -36
- package/features/pages/ListDeletedPages/ListDeletedPagesRepository.js.map +1 -1
- package/features/pages/ListDeletedPages/ListDeletedPagesUseCase.js +27 -24
- package/features/pages/ListDeletedPages/ListDeletedPagesUseCase.js.map +1 -1
- package/features/pages/ListDeletedPages/abstractions.js +3 -12
- package/features/pages/ListDeletedPages/abstractions.js.map +1 -1
- package/features/pages/ListDeletedPages/feature.js +7 -6
- package/features/pages/ListDeletedPages/feature.js.map +1 -1
- package/features/pages/ListDeletedPages/index.js +0 -2
- package/features/pages/ListPages/ListPagesRepository.js +37 -36
- package/features/pages/ListPages/ListPagesRepository.js.map +1 -1
- package/features/pages/ListPages/ListPagesUseCase.js +27 -24
- package/features/pages/ListPages/ListPagesUseCase.js.map +1 -1
- package/features/pages/ListPages/abstractions.js +3 -13
- package/features/pages/ListPages/abstractions.js.map +1 -1
- package/features/pages/ListPages/feature.js +7 -6
- package/features/pages/ListPages/feature.js.map +1 -1
- package/features/pages/ListPages/index.js +0 -2
- package/features/pages/MovePage/MovePageRepository.js +25 -27
- package/features/pages/MovePage/MovePageRepository.js.map +1 -1
- package/features/pages/MovePage/MovePageUseCase.js +39 -49
- package/features/pages/MovePage/MovePageUseCase.js.map +1 -1
- package/features/pages/MovePage/abstractions.js +5 -30
- package/features/pages/MovePage/abstractions.js.map +1 -1
- package/features/pages/MovePage/events.js +16 -14
- package/features/pages/MovePage/events.js.map +1 -1
- package/features/pages/MovePage/feature.js +7 -6
- package/features/pages/MovePage/feature.js.map +1 -1
- package/features/pages/MovePage/index.js +1 -3
- package/features/pages/PublishPage/PublishPageRepository.js +26 -28
- package/features/pages/PublishPage/PublishPageRepository.js.map +1 -1
- package/features/pages/PublishPage/PublishPageUseCase.js +36 -46
- package/features/pages/PublishPage/PublishPageUseCase.js.map +1 -1
- package/features/pages/PublishPage/abstractions.js +5 -30
- package/features/pages/PublishPage/abstractions.js.map +1 -1
- package/features/pages/PublishPage/events.js +16 -14
- package/features/pages/PublishPage/events.js.map +1 -1
- package/features/pages/PublishPage/feature.js +7 -6
- package/features/pages/PublishPage/feature.js.map +1 -1
- package/features/pages/PublishPage/index.js +0 -2
- package/features/pages/RestorePage/RestorePageRepository.js +20 -19
- package/features/pages/RestorePage/RestorePageRepository.js.map +1 -1
- package/features/pages/RestorePage/RestorePageUseCase.js +32 -39
- package/features/pages/RestorePage/RestorePageUseCase.js.map +1 -1
- package/features/pages/RestorePage/abstractions.js +5 -27
- package/features/pages/RestorePage/abstractions.js.map +1 -1
- package/features/pages/RestorePage/events.js +16 -14
- package/features/pages/RestorePage/events.js.map +1 -1
- package/features/pages/RestorePage/feature.js +7 -6
- package/features/pages/RestorePage/feature.js.map +1 -1
- package/features/pages/RestorePage/index.js +0 -2
- package/features/pages/TranslatePage/TranslatePageUseCase.js +46 -62
- package/features/pages/TranslatePage/TranslatePageUseCase.js.map +1 -1
- package/features/pages/TranslatePage/abstractions.js +2 -11
- package/features/pages/TranslatePage/abstractions.js.map +1 -1
- package/features/pages/TranslatePage/feature.js +6 -5
- package/features/pages/TranslatePage/feature.js.map +1 -1
- package/features/pages/TranslatePage/index.js +0 -2
- package/features/pages/TrashPage/TrashPageRepository.js +21 -20
- package/features/pages/TrashPage/TrashPageRepository.js.map +1 -1
- package/features/pages/TrashPage/TrashPageUseCase.js +33 -40
- package/features/pages/TrashPage/TrashPageUseCase.js.map +1 -1
- package/features/pages/TrashPage/abstractions.js +5 -27
- package/features/pages/TrashPage/abstractions.js.map +1 -1
- package/features/pages/TrashPage/events.js +16 -14
- package/features/pages/TrashPage/events.js.map +1 -1
- package/features/pages/TrashPage/feature.js +7 -6
- package/features/pages/TrashPage/feature.js.map +1 -1
- package/features/pages/TrashPage/index.js +0 -2
- package/features/pages/UnpublishPage/UnpublishPageRepository.js +26 -28
- package/features/pages/UnpublishPage/UnpublishPageRepository.js.map +1 -1
- package/features/pages/UnpublishPage/UnpublishPageUseCase.js +35 -45
- package/features/pages/UnpublishPage/UnpublishPageUseCase.js.map +1 -1
- package/features/pages/UnpublishPage/abstractions.js +5 -30
- package/features/pages/UnpublishPage/abstractions.js.map +1 -1
- package/features/pages/UnpublishPage/events.js +16 -14
- package/features/pages/UnpublishPage/events.js.map +1 -1
- package/features/pages/UnpublishPage/feature.js +7 -6
- package/features/pages/UnpublishPage/feature.js.map +1 -1
- package/features/pages/UnpublishPage/index.js +0 -2
- package/features/pages/UpdatePage/UpdatePageRepository.js +30 -34
- package/features/pages/UpdatePage/UpdatePageRepository.js.map +1 -1
- package/features/pages/UpdatePage/UpdatePageUseCase.js +44 -54
- package/features/pages/UpdatePage/UpdatePageUseCase.js.map +1 -1
- package/features/pages/UpdatePage/abstractions.js +5 -30
- package/features/pages/UpdatePage/abstractions.js.map +1 -1
- package/features/pages/UpdatePage/events.js +16 -14
- package/features/pages/UpdatePage/events.js.map +1 -1
- package/features/pages/UpdatePage/feature.js +7 -6
- package/features/pages/UpdatePage/feature.js.map +1 -1
- package/features/pages/UpdatePage/index.js +0 -2
- package/features/pages/UpdatePageRevisionDescription/UpdatePageRevisionDescriptionRepository.d.ts +15 -0
- package/features/pages/UpdatePageRevisionDescription/UpdatePageRevisionDescriptionRepository.js +40 -0
- package/features/pages/UpdatePageRevisionDescription/UpdatePageRevisionDescriptionRepository.js.map +1 -0
- package/features/pages/UpdatePageRevisionDescription/UpdatePageRevisionDescriptionUseCase.d.ts +16 -0
- package/features/pages/UpdatePageRevisionDescription/UpdatePageRevisionDescriptionUseCase.js +56 -0
- package/features/pages/UpdatePageRevisionDescription/UpdatePageRevisionDescriptionUseCase.js.map +1 -0
- package/features/pages/UpdatePageRevisionDescription/abstractions.d.ts +67 -0
- package/features/pages/UpdatePageRevisionDescription/abstractions.js +8 -0
- package/features/pages/UpdatePageRevisionDescription/abstractions.js.map +1 -0
- package/features/pages/UpdatePageRevisionDescription/events.d.ts +10 -0
- package/features/pages/UpdatePageRevisionDescription/events.js +21 -0
- package/features/pages/UpdatePageRevisionDescription/events.js.map +1 -0
- package/features/pages/UpdatePageRevisionDescription/feature.d.ts +4 -0
- package/features/pages/UpdatePageRevisionDescription/feature.js +13 -0
- package/features/pages/UpdatePageRevisionDescription/feature.js.map +1 -0
- package/features/pages/UpdatePageRevisionDescription/index.d.ts +1 -0
- package/features/pages/UpdatePageRevisionDescription/index.js +1 -0
- package/features/permissions/abstractions.js +2 -1
- package/features/permissions/abstractions.js.map +1 -1
- package/features/permissions/feature.js +2 -1
- package/features/permissions/feature.js.map +1 -1
- package/features/redirects/CreateRedirect/CreateRedirectRepository.js +23 -21
- package/features/redirects/CreateRedirect/CreateRedirectRepository.js.map +1 -1
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.js +29 -34
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.js.map +1 -1
- package/features/redirects/CreateRedirect/abstractions.js +5 -30
- package/features/redirects/CreateRedirect/abstractions.js.map +1 -1
- package/features/redirects/CreateRedirect/events.js +16 -14
- package/features/redirects/CreateRedirect/events.js.map +1 -1
- package/features/redirects/CreateRedirect/feature.js +7 -6
- package/features/redirects/CreateRedirect/feature.js.map +1 -1
- package/features/redirects/CreateRedirect/index.js +1 -3
- package/features/redirects/DeleteRedirect/DeleteRedirectRepository.js +19 -17
- package/features/redirects/DeleteRedirect/DeleteRedirectRepository.js.map +1 -1
- package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js +34 -41
- package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js.map +1 -1
- package/features/redirects/DeleteRedirect/abstractions.js +5 -30
- package/features/redirects/DeleteRedirect/abstractions.js.map +1 -1
- package/features/redirects/DeleteRedirect/events.js +16 -14
- package/features/redirects/DeleteRedirect/events.js.map +1 -1
- package/features/redirects/DeleteRedirect/feature.js +7 -6
- package/features/redirects/DeleteRedirect/feature.js.map +1 -1
- package/features/redirects/DeleteRedirect/index.js +1 -3
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsRepository.js +22 -21
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsRepository.js.map +1 -1
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js +17 -15
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js.map +1 -1
- package/features/redirects/GetActiveRedirects/abstractions.js +3 -13
- package/features/redirects/GetActiveRedirects/abstractions.js.map +1 -1
- package/features/redirects/GetActiveRedirects/feature.js +7 -6
- package/features/redirects/GetActiveRedirects/feature.js.map +1 -1
- package/features/redirects/GetActiveRedirects/index.js +0 -2
- package/features/redirects/GetRedirectById/GetRedirectByIdRepository.js +20 -18
- package/features/redirects/GetRedirectById/GetRedirectByIdRepository.js.map +1 -1
- package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js +20 -22
- package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js.map +1 -1
- package/features/redirects/GetRedirectById/abstractions.js +3 -13
- package/features/redirects/GetRedirectById/abstractions.js.map +1 -1
- package/features/redirects/GetRedirectById/feature.js +7 -6
- package/features/redirects/GetRedirectById/feature.js.map +1 -1
- package/features/redirects/GetRedirectById/index.js +0 -2
- package/features/redirects/InvalidateRedirectsCache/InvalidateRedirectsCacheUseCase.js +23 -20
- package/features/redirects/InvalidateRedirectsCache/InvalidateRedirectsCacheUseCase.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js +13 -16
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js +13 -16
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js +13 -17
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/abstractions.js +2 -7
- package/features/redirects/InvalidateRedirectsCache/abstractions.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/feature.js +9 -8
- package/features/redirects/InvalidateRedirectsCache/feature.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/index.js +0 -2
- package/features/redirects/ListRedirects/ListRedirectsRepository.js +35 -34
- package/features/redirects/ListRedirects/ListRedirectsRepository.js.map +1 -1
- package/features/redirects/ListRedirects/ListRedirectsUseCase.js +28 -25
- package/features/redirects/ListRedirects/ListRedirectsUseCase.js.map +1 -1
- package/features/redirects/ListRedirects/abstractions.js +3 -17
- package/features/redirects/ListRedirects/abstractions.js.map +1 -1
- package/features/redirects/ListRedirects/feature.js +7 -6
- package/features/redirects/ListRedirects/feature.js.map +1 -1
- package/features/redirects/ListRedirects/index.js +0 -2
- package/features/redirects/MoveRedirect/MoveRedirectRepository.js +25 -27
- package/features/redirects/MoveRedirect/MoveRedirectRepository.js.map +1 -1
- package/features/redirects/MoveRedirect/MoveRedirectUseCase.js +39 -49
- package/features/redirects/MoveRedirect/MoveRedirectUseCase.js.map +1 -1
- package/features/redirects/MoveRedirect/abstractions.js +5 -30
- package/features/redirects/MoveRedirect/abstractions.js.map +1 -1
- package/features/redirects/MoveRedirect/events.js +16 -14
- package/features/redirects/MoveRedirect/events.js.map +1 -1
- package/features/redirects/MoveRedirect/feature.js +7 -6
- package/features/redirects/MoveRedirect/feature.js.map +1 -1
- package/features/redirects/MoveRedirect/index.js +1 -3
- package/features/redirects/UpdateRedirect/UpdateRedirectRepository.js +31 -35
- package/features/redirects/UpdateRedirect/UpdateRedirectRepository.js.map +1 -1
- package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js +44 -54
- package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js.map +1 -1
- package/features/redirects/UpdateRedirect/abstractions.js +5 -30
- package/features/redirects/UpdateRedirect/abstractions.js.map +1 -1
- package/features/redirects/UpdateRedirect/events.js +16 -14
- package/features/redirects/UpdateRedirect/events.js.map +1 -1
- package/features/redirects/UpdateRedirect/feature.js +7 -6
- package/features/redirects/UpdateRedirect/feature.js.map +1 -1
- package/features/redirects/UpdateRedirect/index.js +0 -2
- package/features/tenantManager/TenantModelExtension.js +52 -32
- package/features/tenantManager/TenantModelExtension.js.map +1 -1
- package/features/tenantManager/feature.js +6 -5
- package/features/tenantManager/feature.js.map +1 -1
- package/graphql/createGraphQL.js +15 -12
- package/graphql/createGraphQL.js.map +1 -1
- package/graphql/nextjs/NextjsGraphQLSchema.js +28 -29
- package/graphql/nextjs/NextjsGraphQLSchema.js.map +1 -1
- package/graphql/pages/pages.gql.js +221 -324
- package/graphql/pages/pages.gql.js.map +1 -1
- package/graphql/pages/pages.typeDefs.d.ts +1 -1
- package/graphql/pages/pages.typeDefs.js +7 -1
- package/graphql/pages/pages.typeDefs.js.map +1 -1
- package/graphql/redirects/redirects.gql.js +56 -86
- package/graphql/redirects/redirects.gql.js.map +1 -1
- package/graphql/redirects/redirects.typeDefs.js +3 -4
- package/graphql/redirects/redirects.typeDefs.js.map +1 -1
- package/index.js +57 -62
- package/index.js.map +1 -1
- package/package.json +20 -20
- package/rest/ActiveRedirectDto.js +0 -3
- package/rest/ActiveRedirectRestMapper.js +10 -9
- package/rest/ActiveRedirectRestMapper.js.map +1 -1
- package/rest/getRedirects.js +19 -26
- package/rest/getRedirects.js.map +1 -1
- package/utils/ensureAuthentication.js +6 -9
- package/utils/ensureAuthentication.js.map +1 -1
- package/utils/resolve.js +7 -6
- package/utils/resolve.js.map +1 -1
- package/domain/shared/abstractions.js.map +0 -1
- package/exports/api/website-builder/nextjs.js.map +0 -1
- package/exports/api/website-builder/page.js.map +0 -1
- package/exports/api/website-builder/redirect.js.map +0 -1
- package/features/nextjs/index.js.map +0 -1
- package/features/pages/CreatePage/index.js.map +0 -1
- package/features/pages/CreatePageRevisionFrom/index.js.map +0 -1
- package/features/pages/DeletePage/index.js.map +0 -1
- package/features/pages/DuplicatePage/index.js.map +0 -1
- package/features/pages/GetDeletedPageById/index.js.map +0 -1
- package/features/pages/GetPageById/index.js.map +0 -1
- package/features/pages/GetPageByPath/index.js.map +0 -1
- package/features/pages/GetPageLanguagePaths/index.js.map +0 -1
- package/features/pages/GetPageRevisions/index.js.map +0 -1
- package/features/pages/ListDeletedPages/index.js.map +0 -1
- package/features/pages/ListPages/index.js.map +0 -1
- package/features/pages/MovePage/index.js.map +0 -1
- package/features/pages/PublishPage/index.js.map +0 -1
- package/features/pages/RestorePage/index.js.map +0 -1
- package/features/pages/TranslatePage/index.js.map +0 -1
- package/features/pages/TrashPage/index.js.map +0 -1
- package/features/pages/UnpublishPage/index.js.map +0 -1
- package/features/pages/UpdatePage/index.js.map +0 -1
- package/features/redirects/CreateRedirect/index.js.map +0 -1
- package/features/redirects/DeleteRedirect/index.js.map +0 -1
- package/features/redirects/GetActiveRedirects/index.js.map +0 -1
- package/features/redirects/GetRedirectById/index.js.map +0 -1
- package/features/redirects/InvalidateRedirectsCache/index.js.map +0 -1
- package/features/redirects/ListRedirects/index.js.map +0 -1
- package/features/redirects/MoveRedirect/index.js.map +0 -1
- package/features/redirects/UpdateRedirect/index.js.map +0 -1
- package/rest/ActiveRedirectDto.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["describe","it","expect","beforeEach","vi","MarkdownContentBuilder","builder","add","build","toBe","before","after","remove","replace","current","toUpperCase","setVariable","result","toContain","s","setVariables","API_KEY","HOST","TENANT","getVariable","toBeUndefined","API_HOST","LINK","DESCRIPTION","BASE_URL","API_PATH","FULL_ENDPOINT","STARTER_KIT_LINK","API_TOKEN","ADMIN_HOST","TENANT_ID","not","NAME","GREETING","LEVEL_1","LEVEL_2","LEVEL_3","LEVEL_4","consoleSpy","spyOn","console","mockImplementation","VAR_A","VAR_B","toHaveBeenCalledWith","stringContaining","mockRestore","DEFINED","HAS_UNDEFINED","CONFIG"],"sources":["MarkdownContentBuilder.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { MarkdownContentBuilder } from \"./MarkdownContentBuilder.js\";\n\ndescribe(\"MarkdownContentBuilder\", () => {\n let builder: MarkdownContentBuilder;\n\n beforeEach(() => {\n builder = new MarkdownContentBuilder();\n });\n\n describe(\"add\", () => {\n it(\"should add sections to the end by default\", () => {\n builder.add(\"section1\", \"First section\").add(\"section2\", \"Second section\");\n\n expect(builder.build()).toBe(\"First section\\nSecond section\");\n });\n\n it(\"should add section before specified id\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section-middle\", \"Middle\", { before: \"section2\" });\n\n expect(builder.build()).toBe(\"First\\nMiddle\\nSecond\");\n });\n\n it(\"should add section after specified id\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section-middle\", \"Middle\", { after: \"section1\" });\n\n expect(builder.build()).toBe(\"First\\nMiddle\\nSecond\");\n });\n\n it(\"should append to end if before id not found\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\", { before: \"non-existent\" });\n\n expect(builder.build()).toBe(\"First\\nSecond\");\n });\n\n it(\"should append to end if after id not found\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\", { after: \"non-existent\" });\n\n expect(builder.build()).toBe(\"First\\nSecond\");\n });\n });\n\n describe(\"remove\", () => {\n it(\"should remove section by id\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section3\", \"Third\")\n .remove(\"section2\");\n\n expect(builder.build()).toBe(\"First\\nThird\");\n });\n\n it(\"should handle removing non-existent id gracefully\", () => {\n builder.add(\"section1\", \"First\").remove(\"non-existent\");\n\n expect(builder.build()).toBe(\"First\");\n });\n\n it(\"should handle removing from empty builder\", () => {\n builder.remove(\"section1\");\n expect(builder.build()).toBe(\"\");\n });\n });\n\n describe(\"replace\", () => {\n it(\"should replace section content with string\", () => {\n builder.add(\"section1\", \"Original content\").replace(\"section1\", \"Replaced content\");\n\n expect(builder.build()).toBe(\"Replaced content\");\n });\n\n it(\"should replace section content with callback\", () => {\n builder\n .add(\"section1\", \"Original content\")\n .replace(\"section1\", current => current.toUpperCase());\n\n expect(builder.build()).toBe(\"ORIGINAL CONTENT\");\n });\n\n it(\"should pass current content to callback\", () => {\n builder.add(\"section1\", \"Hello\").replace(\"section1\", current => `${current} World`);\n\n expect(builder.build()).toBe(\"Hello World\");\n });\n\n it(\"should handle callback that transforms content\", () => {\n builder\n .add(\"code\", '```bash\\necho \"test\"\\n```')\n .replace(\"code\", current => current.replace(\"bash\", \"javascript\"));\n\n expect(builder.build()).toBe('```javascript\\necho \"test\"\\n```');\n });\n\n it(\"should handle callback returning empty string\", () => {\n builder.add(\"section1\", \"Original\").replace(\"section1\", () => \"\");\n\n expect(builder.build()).toBe(\"\");\n });\n\n it(\"should handle replacing non-existent id with callback gracefully\", () => {\n builder\n .add(\"section1\", \"First\")\n .replace(\"non-existent\", current => current + \" modified\");\n\n expect(builder.build()).toBe(\"First\");\n });\n\n it(\"should maintain section position when replacing with callback\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section3\", \"Third\")\n .replace(\"section2\", current => current.toUpperCase());\n\n expect(builder.build()).toBe(\"First\\nSECOND\\nThird\");\n });\n });\n\n describe(\"complex scenarios with callbacks\", () => {\n it(\"should support plugin decoration with transformations\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Key: {API_KEY}\")\n .add(\"code\", \"```bash\\nAPI_KEY={API_KEY}\\n```\");\n\n // Plugin adds warning to code section\n builder.replace(\"code\", current => {\n return `⚠️ **Security Warning**: Keep this private!\\n\\n${current}`;\n });\n\n const result = builder.build();\n expect(result).toContain(\"Security Warning\");\n expect(result).toContain(\"```bash\");\n });\n\n it(\"should chain multiple replace operations\", () => {\n builder\n .add(\"text\", \"hello world\")\n .replace(\"text\", s => s.toUpperCase())\n .replace(\"text\", s => `**${s}**`)\n .replace(\"text\", s => `${s}!!!`);\n\n expect(builder.build()).toBe(\"**HELLO WORLD**!!!\");\n });\n });\n\n describe(\"variables\", () => {\n it(\"should set and substitute single variable\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Your API key is {API_KEY}\");\n\n expect(builder.build()).toBe(\"Your API key is wat_12345\");\n });\n\n it(\"should set and substitute multiple variables\", () => {\n builder\n .setVariables({\n API_KEY: \"wat_12345\",\n HOST: \"https://api.example.com\",\n TENANT: \"root\"\n })\n .add(\"section1\", \"Key: {API_KEY}, Host: {HOST}, Tenant: {TENANT}\");\n\n expect(builder.build()).toBe(\n \"Key: wat_12345, Host: https://api.example.com, Tenant: root\"\n );\n });\n\n it(\"should substitute variables in multiple sections\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Section 1: {API_KEY}\")\n .add(\"section2\", \"Section 2: {API_KEY}\");\n\n expect(builder.build()).toBe(\"Section 1: wat_12345\\nSection 2: wat_12345\");\n });\n\n it(\"should handle variable replacement in code blocks\", () => {\n builder\n .setVariables({\n API_KEY: \"wat_12345\",\n HOST: \"https://api.example.com\"\n })\n .add(\"code\", \"```bash\\nAPI_KEY={API_KEY}\\nHOST={HOST}\\n```\");\n\n expect(builder.build()).toBe(\n \"```bash\\nAPI_KEY=wat_12345\\nHOST=https://api.example.com\\n```\"\n );\n });\n\n it(\"should leave unmatched variables unchanged\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Key: {API_KEY}, Unknown: {UNKNOWN}\");\n\n expect(builder.build()).toBe(\"Key: wat_12345, Unknown: {UNKNOWN}\");\n });\n\n it(\"should handle variables with special regex characters\", () => {\n builder\n .setVariable(\"VAR.NAME\", \"value1\")\n .setVariable(\"VAR$NAME\", \"value2\")\n .add(\"section1\", \"{VAR.NAME} and {VAR$NAME}\");\n\n expect(builder.build()).toBe(\"value1 and value2\");\n });\n\n it(\"should get variable value\", () => {\n builder.setVariable(\"API_KEY\", \"wat_12345\");\n expect(builder.getVariable(\"API_KEY\")).toBe(\"wat_12345\");\n });\n\n it(\"should return undefined for non-existent variable\", () => {\n expect(builder.getVariable(\"NON_EXISTENT\")).toBeUndefined();\n });\n\n it(\"should override variable when set multiple times\", () => {\n builder\n .setVariable(\"API_KEY\", \"old_value\")\n .setVariable(\"API_KEY\", \"new_value\")\n .add(\"section1\", \"{API_KEY}\");\n\n expect(builder.build()).toBe(\"new_value\");\n });\n\n it(\"should handle multiple occurrences of same variable\", () => {\n builder.setVariable(\"NAME\", \"John\").add(\"section1\", \"Hello {NAME}, welcome {NAME}!\");\n\n expect(builder.build()).toBe(\"Hello John, welcome John!\");\n });\n });\n\n describe(\"build\", () => {\n it(\"should use default newline separator\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\");\n\n expect(builder.build()).toBe(\"First\\nSecond\");\n });\n\n it(\"should use custom separator\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\");\n\n expect(builder.build(\"\\n\\n\")).toBe(\"First\\n\\nSecond\");\n });\n\n it(\"should return empty string for empty builder\", () => {\n expect(builder.build()).toBe(\"\");\n });\n\n it(\"should handle single section\", () => {\n builder.add(\"section1\", \"Only section\");\n expect(builder.build()).toBe(\"Only section\");\n });\n });\n\n describe(\"method chaining\", () => {\n it(\"should support fluent interface\", () => {\n const result = builder\n .setVariable(\"NAME\", \"Test\")\n .add(\"section1\", \"Hello {NAME}\")\n .add(\"section2\", \"Second\")\n .remove(\"section2\")\n .add(\"section3\", \"Third\")\n .replace(\"section3\", \"Replaced\")\n .build();\n\n expect(result).toBe(\"Hello Test\\nReplaced\");\n });\n });\n\n describe(\"complex scenarios\", () => {\n it(\"should handle Next.js config example\", () => {\n const result = builder\n .setVariables({\n API_KEY: \"wat_12345678\",\n API_HOST: \"https://example.cloudfront.net\",\n TENANT: \"root\"\n })\n .add(\"description\", \"This is a configuration for **Webiny Next.js starter kit**:\")\n .add(\n \"env-vars\",\n \"```bash\\nNEXT_PUBLIC_WEBSITE_BUILDER_API_KEY={API_KEY}\\nNEXT_PUBLIC_WEBSITE_BUILDER_API_HOST={API_HOST}\\nNEXT_PUBLIC_WEBSITE_BUILDER_API_TENANT={TENANT}\\n```\"\n )\n .build();\n\n expect(result).toContain(\"wat_12345678\");\n expect(result).toContain(\"https://example.cloudfront.net\");\n expect(result).toContain(\"root\");\n expect(result).toContain(\"Webiny Next.js starter kit\");\n });\n\n it(\"should support plugin decoration pattern\", () => {\n // Initial builder\n builder.setVariable(\"API_KEY\", \"original_key\").add(\"section1\", \"Key: {API_KEY}\");\n\n // Plugin modifies\n builder\n .setVariable(\"API_KEY\", \"plugin_key\")\n .add(\"plugin-section\", \"Added by plugin: {API_KEY}\", { after: \"section1\" });\n\n const result = builder.build();\n expect(result).toBe(\"Key: plugin_key\\nAdded by plugin: plugin_key\");\n });\n });\n\n describe(\"deep variable interpolation\", () => {\n it(\"should handle single level nested variables\", () => {\n builder\n .setVariables({\n LINK: \"https://example.com\",\n DESCRIPTION: \"Visit {LINK} for more info\"\n })\n .add(\"section1\", \"{DESCRIPTION}\");\n\n expect(builder.build()).toBe(\"Visit https://example.com for more info\");\n });\n\n it(\"should handle multiple levels of nested variables\", () => {\n builder\n .setVariables({\n BASE_URL: \"https://example.com\",\n API_PATH: \"{BASE_URL}/api\",\n FULL_ENDPOINT: \"{API_PATH}/v1/users\"\n })\n .add(\"section1\", \"Endpoint: {FULL_ENDPOINT}\");\n\n expect(builder.build()).toBe(\"Endpoint: https://example.com/api/v1/users\");\n });\n\n it(\"should handle variables in HTML links\", () => {\n builder\n .setVariables({\n STARTER_KIT_LINK: \"https://github.com/webiny/website-builder-nextjs\",\n DESCRIPTION:\n '<a href=\"{STARTER_KIT_LINK}\" target=\"_blank\">Webiny Next.js starter kit</a>'\n })\n .add(\"section1\", \"{DESCRIPTION}\");\n\n expect(builder.build()).toBe(\n '<a href=\"https://github.com/webiny/website-builder-nextjs\" target=\"_blank\">Webiny Next.js starter kit</a>'\n );\n });\n\n it(\"should handle complex nested scenario from example\", () => {\n builder\n .setVariables({\n DESCRIPTION:\n 'This is a configuration for <a href=\"{STARTER_KIT_LINK}\" target=\"_blank\">Webiny Next.js starter kit:</a>',\n STARTER_KIT_LINK: \"https://github.com/webiny/website-builder-nextjs\",\n API_TOKEN: \"wat_12345\",\n API_HOST: \"https://api.example.com\",\n ADMIN_HOST: \"https://admin.example.com\",\n TENANT_ID: \"root\"\n })\n .add(\"description\", \"{DESCRIPTION}\");\n\n const result = builder.build();\n expect(result).toContain(\"https://github.com/webiny/website-builder-nextjs\");\n expect(result).toContain(\"Webiny Next.js starter kit\");\n expect(result).not.toContain(\"{STARTER_KIT_LINK}\");\n });\n\n it(\"should handle variable that references another variable multiple times\", () => {\n builder\n .setVariables({\n NAME: \"John\",\n GREETING: \"Hello {NAME}, welcome {NAME}!\"\n })\n .add(\"section1\", \"{GREETING}\");\n\n expect(builder.build()).toBe(\"Hello John, welcome John!\");\n });\n\n it(\"should handle deep nesting (3+ levels)\", () => {\n builder\n .setVariables({\n LEVEL_1: \"base\",\n LEVEL_2: \"{LEVEL_1}/path\",\n LEVEL_3: \"{LEVEL_2}/more\",\n LEVEL_4: \"{LEVEL_3}/final\"\n })\n .add(\"section1\", \"{LEVEL_4}\");\n\n expect(builder.build()).toBe(\"base/path/more/final\");\n });\n\n it(\"should handle circular references gracefully\", () => {\n const consoleSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n builder\n .setVariables({\n VAR_A: \"Start {VAR_B}\",\n VAR_B: \"{VAR_A} End\"\n })\n .add(\"section1\", \"{VAR_A}\");\n\n builder.build();\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining(\"Maximum interpolation depth reached\")\n );\n\n consoleSpy.mockRestore();\n });\n\n it(\"should stop at undefined variables and leave them as-is\", () => {\n builder\n .setVariables({\n DEFINED: \"value\",\n HAS_UNDEFINED: \"{DEFINED} and {UNDEFINED}\"\n })\n .add(\"section1\", \"{HAS_UNDEFINED}\");\n\n expect(builder.build()).toBe(\"value and {UNDEFINED}\");\n });\n\n it(\"should handle mixed defined and nested variables\", () => {\n builder\n .setVariables({\n API_KEY: \"key123\",\n HOST: \"example.com\",\n CONFIG: \"API_KEY={API_KEY}\\nHOST={HOST}\\nUNDEFINED={UNKNOWN}\"\n })\n .add(\"section1\", \"{CONFIG}\");\n\n const result = builder.build();\n expect(result).toContain(\"API_KEY=key123\");\n expect(result).toContain(\"HOST=example.com\");\n expect(result).toContain(\"UNDEFINED={UNKNOWN}\");\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"features/nextjs/MarkdownContentBuilder.test.js","sources":["../../../src/features/nextjs/MarkdownContentBuilder.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { MarkdownContentBuilder } from \"./MarkdownContentBuilder.js\";\n\ndescribe(\"MarkdownContentBuilder\", () => {\n let builder: MarkdownContentBuilder;\n\n beforeEach(() => {\n builder = new MarkdownContentBuilder();\n });\n\n describe(\"add\", () => {\n it(\"should add sections to the end by default\", () => {\n builder.add(\"section1\", \"First section\").add(\"section2\", \"Second section\");\n\n expect(builder.build()).toBe(\"First section\\nSecond section\");\n });\n\n it(\"should add section before specified id\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section-middle\", \"Middle\", { before: \"section2\" });\n\n expect(builder.build()).toBe(\"First\\nMiddle\\nSecond\");\n });\n\n it(\"should add section after specified id\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section-middle\", \"Middle\", { after: \"section1\" });\n\n expect(builder.build()).toBe(\"First\\nMiddle\\nSecond\");\n });\n\n it(\"should append to end if before id not found\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\", { before: \"non-existent\" });\n\n expect(builder.build()).toBe(\"First\\nSecond\");\n });\n\n it(\"should append to end if after id not found\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\", { after: \"non-existent\" });\n\n expect(builder.build()).toBe(\"First\\nSecond\");\n });\n });\n\n describe(\"remove\", () => {\n it(\"should remove section by id\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section3\", \"Third\")\n .remove(\"section2\");\n\n expect(builder.build()).toBe(\"First\\nThird\");\n });\n\n it(\"should handle removing non-existent id gracefully\", () => {\n builder.add(\"section1\", \"First\").remove(\"non-existent\");\n\n expect(builder.build()).toBe(\"First\");\n });\n\n it(\"should handle removing from empty builder\", () => {\n builder.remove(\"section1\");\n expect(builder.build()).toBe(\"\");\n });\n });\n\n describe(\"replace\", () => {\n it(\"should replace section content with string\", () => {\n builder.add(\"section1\", \"Original content\").replace(\"section1\", \"Replaced content\");\n\n expect(builder.build()).toBe(\"Replaced content\");\n });\n\n it(\"should replace section content with callback\", () => {\n builder\n .add(\"section1\", \"Original content\")\n .replace(\"section1\", current => current.toUpperCase());\n\n expect(builder.build()).toBe(\"ORIGINAL CONTENT\");\n });\n\n it(\"should pass current content to callback\", () => {\n builder.add(\"section1\", \"Hello\").replace(\"section1\", current => `${current} World`);\n\n expect(builder.build()).toBe(\"Hello World\");\n });\n\n it(\"should handle callback that transforms content\", () => {\n builder\n .add(\"code\", '```bash\\necho \"test\"\\n```')\n .replace(\"code\", current => current.replace(\"bash\", \"javascript\"));\n\n expect(builder.build()).toBe('```javascript\\necho \"test\"\\n```');\n });\n\n it(\"should handle callback returning empty string\", () => {\n builder.add(\"section1\", \"Original\").replace(\"section1\", () => \"\");\n\n expect(builder.build()).toBe(\"\");\n });\n\n it(\"should handle replacing non-existent id with callback gracefully\", () => {\n builder\n .add(\"section1\", \"First\")\n .replace(\"non-existent\", current => current + \" modified\");\n\n expect(builder.build()).toBe(\"First\");\n });\n\n it(\"should maintain section position when replacing with callback\", () => {\n builder\n .add(\"section1\", \"First\")\n .add(\"section2\", \"Second\")\n .add(\"section3\", \"Third\")\n .replace(\"section2\", current => current.toUpperCase());\n\n expect(builder.build()).toBe(\"First\\nSECOND\\nThird\");\n });\n });\n\n describe(\"complex scenarios with callbacks\", () => {\n it(\"should support plugin decoration with transformations\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Key: {API_KEY}\")\n .add(\"code\", \"```bash\\nAPI_KEY={API_KEY}\\n```\");\n\n // Plugin adds warning to code section\n builder.replace(\"code\", current => {\n return `⚠️ **Security Warning**: Keep this private!\\n\\n${current}`;\n });\n\n const result = builder.build();\n expect(result).toContain(\"Security Warning\");\n expect(result).toContain(\"```bash\");\n });\n\n it(\"should chain multiple replace operations\", () => {\n builder\n .add(\"text\", \"hello world\")\n .replace(\"text\", s => s.toUpperCase())\n .replace(\"text\", s => `**${s}**`)\n .replace(\"text\", s => `${s}!!!`);\n\n expect(builder.build()).toBe(\"**HELLO WORLD**!!!\");\n });\n });\n\n describe(\"variables\", () => {\n it(\"should set and substitute single variable\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Your API key is {API_KEY}\");\n\n expect(builder.build()).toBe(\"Your API key is wat_12345\");\n });\n\n it(\"should set and substitute multiple variables\", () => {\n builder\n .setVariables({\n API_KEY: \"wat_12345\",\n HOST: \"https://api.example.com\",\n TENANT: \"root\"\n })\n .add(\"section1\", \"Key: {API_KEY}, Host: {HOST}, Tenant: {TENANT}\");\n\n expect(builder.build()).toBe(\n \"Key: wat_12345, Host: https://api.example.com, Tenant: root\"\n );\n });\n\n it(\"should substitute variables in multiple sections\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Section 1: {API_KEY}\")\n .add(\"section2\", \"Section 2: {API_KEY}\");\n\n expect(builder.build()).toBe(\"Section 1: wat_12345\\nSection 2: wat_12345\");\n });\n\n it(\"should handle variable replacement in code blocks\", () => {\n builder\n .setVariables({\n API_KEY: \"wat_12345\",\n HOST: \"https://api.example.com\"\n })\n .add(\"code\", \"```bash\\nAPI_KEY={API_KEY}\\nHOST={HOST}\\n```\");\n\n expect(builder.build()).toBe(\n \"```bash\\nAPI_KEY=wat_12345\\nHOST=https://api.example.com\\n```\"\n );\n });\n\n it(\"should leave unmatched variables unchanged\", () => {\n builder\n .setVariable(\"API_KEY\", \"wat_12345\")\n .add(\"section1\", \"Key: {API_KEY}, Unknown: {UNKNOWN}\");\n\n expect(builder.build()).toBe(\"Key: wat_12345, Unknown: {UNKNOWN}\");\n });\n\n it(\"should handle variables with special regex characters\", () => {\n builder\n .setVariable(\"VAR.NAME\", \"value1\")\n .setVariable(\"VAR$NAME\", \"value2\")\n .add(\"section1\", \"{VAR.NAME} and {VAR$NAME}\");\n\n expect(builder.build()).toBe(\"value1 and value2\");\n });\n\n it(\"should get variable value\", () => {\n builder.setVariable(\"API_KEY\", \"wat_12345\");\n expect(builder.getVariable(\"API_KEY\")).toBe(\"wat_12345\");\n });\n\n it(\"should return undefined for non-existent variable\", () => {\n expect(builder.getVariable(\"NON_EXISTENT\")).toBeUndefined();\n });\n\n it(\"should override variable when set multiple times\", () => {\n builder\n .setVariable(\"API_KEY\", \"old_value\")\n .setVariable(\"API_KEY\", \"new_value\")\n .add(\"section1\", \"{API_KEY}\");\n\n expect(builder.build()).toBe(\"new_value\");\n });\n\n it(\"should handle multiple occurrences of same variable\", () => {\n builder.setVariable(\"NAME\", \"John\").add(\"section1\", \"Hello {NAME}, welcome {NAME}!\");\n\n expect(builder.build()).toBe(\"Hello John, welcome John!\");\n });\n });\n\n describe(\"build\", () => {\n it(\"should use default newline separator\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\");\n\n expect(builder.build()).toBe(\"First\\nSecond\");\n });\n\n it(\"should use custom separator\", () => {\n builder.add(\"section1\", \"First\").add(\"section2\", \"Second\");\n\n expect(builder.build(\"\\n\\n\")).toBe(\"First\\n\\nSecond\");\n });\n\n it(\"should return empty string for empty builder\", () => {\n expect(builder.build()).toBe(\"\");\n });\n\n it(\"should handle single section\", () => {\n builder.add(\"section1\", \"Only section\");\n expect(builder.build()).toBe(\"Only section\");\n });\n });\n\n describe(\"method chaining\", () => {\n it(\"should support fluent interface\", () => {\n const result = builder\n .setVariable(\"NAME\", \"Test\")\n .add(\"section1\", \"Hello {NAME}\")\n .add(\"section2\", \"Second\")\n .remove(\"section2\")\n .add(\"section3\", \"Third\")\n .replace(\"section3\", \"Replaced\")\n .build();\n\n expect(result).toBe(\"Hello Test\\nReplaced\");\n });\n });\n\n describe(\"complex scenarios\", () => {\n it(\"should handle Next.js config example\", () => {\n const result = builder\n .setVariables({\n API_KEY: \"wat_12345678\",\n API_HOST: \"https://example.cloudfront.net\",\n TENANT: \"root\"\n })\n .add(\"description\", \"This is a configuration for **Webiny Next.js starter kit**:\")\n .add(\n \"env-vars\",\n \"```bash\\nNEXT_PUBLIC_WEBSITE_BUILDER_API_KEY={API_KEY}\\nNEXT_PUBLIC_WEBSITE_BUILDER_API_HOST={API_HOST}\\nNEXT_PUBLIC_WEBSITE_BUILDER_API_TENANT={TENANT}\\n```\"\n )\n .build();\n\n expect(result).toContain(\"wat_12345678\");\n expect(result).toContain(\"https://example.cloudfront.net\");\n expect(result).toContain(\"root\");\n expect(result).toContain(\"Webiny Next.js starter kit\");\n });\n\n it(\"should support plugin decoration pattern\", () => {\n // Initial builder\n builder.setVariable(\"API_KEY\", \"original_key\").add(\"section1\", \"Key: {API_KEY}\");\n\n // Plugin modifies\n builder\n .setVariable(\"API_KEY\", \"plugin_key\")\n .add(\"plugin-section\", \"Added by plugin: {API_KEY}\", { after: \"section1\" });\n\n const result = builder.build();\n expect(result).toBe(\"Key: plugin_key\\nAdded by plugin: plugin_key\");\n });\n });\n\n describe(\"deep variable interpolation\", () => {\n it(\"should handle single level nested variables\", () => {\n builder\n .setVariables({\n LINK: \"https://example.com\",\n DESCRIPTION: \"Visit {LINK} for more info\"\n })\n .add(\"section1\", \"{DESCRIPTION}\");\n\n expect(builder.build()).toBe(\"Visit https://example.com for more info\");\n });\n\n it(\"should handle multiple levels of nested variables\", () => {\n builder\n .setVariables({\n BASE_URL: \"https://example.com\",\n API_PATH: \"{BASE_URL}/api\",\n FULL_ENDPOINT: \"{API_PATH}/v1/users\"\n })\n .add(\"section1\", \"Endpoint: {FULL_ENDPOINT}\");\n\n expect(builder.build()).toBe(\"Endpoint: https://example.com/api/v1/users\");\n });\n\n it(\"should handle variables in HTML links\", () => {\n builder\n .setVariables({\n STARTER_KIT_LINK: \"https://github.com/webiny/website-builder-nextjs\",\n DESCRIPTION:\n '<a href=\"{STARTER_KIT_LINK}\" target=\"_blank\">Webiny Next.js starter kit</a>'\n })\n .add(\"section1\", \"{DESCRIPTION}\");\n\n expect(builder.build()).toBe(\n '<a href=\"https://github.com/webiny/website-builder-nextjs\" target=\"_blank\">Webiny Next.js starter kit</a>'\n );\n });\n\n it(\"should handle complex nested scenario from example\", () => {\n builder\n .setVariables({\n DESCRIPTION:\n 'This is a configuration for <a href=\"{STARTER_KIT_LINK}\" target=\"_blank\">Webiny Next.js starter kit:</a>',\n STARTER_KIT_LINK: \"https://github.com/webiny/website-builder-nextjs\",\n API_TOKEN: \"wat_12345\",\n API_HOST: \"https://api.example.com\",\n ADMIN_HOST: \"https://admin.example.com\",\n TENANT_ID: \"root\"\n })\n .add(\"description\", \"{DESCRIPTION}\");\n\n const result = builder.build();\n expect(result).toContain(\"https://github.com/webiny/website-builder-nextjs\");\n expect(result).toContain(\"Webiny Next.js starter kit\");\n expect(result).not.toContain(\"{STARTER_KIT_LINK}\");\n });\n\n it(\"should handle variable that references another variable multiple times\", () => {\n builder\n .setVariables({\n NAME: \"John\",\n GREETING: \"Hello {NAME}, welcome {NAME}!\"\n })\n .add(\"section1\", \"{GREETING}\");\n\n expect(builder.build()).toBe(\"Hello John, welcome John!\");\n });\n\n it(\"should handle deep nesting (3+ levels)\", () => {\n builder\n .setVariables({\n LEVEL_1: \"base\",\n LEVEL_2: \"{LEVEL_1}/path\",\n LEVEL_3: \"{LEVEL_2}/more\",\n LEVEL_4: \"{LEVEL_3}/final\"\n })\n .add(\"section1\", \"{LEVEL_4}\");\n\n expect(builder.build()).toBe(\"base/path/more/final\");\n });\n\n it(\"should handle circular references gracefully\", () => {\n const consoleSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n builder\n .setVariables({\n VAR_A: \"Start {VAR_B}\",\n VAR_B: \"{VAR_A} End\"\n })\n .add(\"section1\", \"{VAR_A}\");\n\n builder.build();\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining(\"Maximum interpolation depth reached\")\n );\n\n consoleSpy.mockRestore();\n });\n\n it(\"should stop at undefined variables and leave them as-is\", () => {\n builder\n .setVariables({\n DEFINED: \"value\",\n HAS_UNDEFINED: \"{DEFINED} and {UNDEFINED}\"\n })\n .add(\"section1\", \"{HAS_UNDEFINED}\");\n\n expect(builder.build()).toBe(\"value and {UNDEFINED}\");\n });\n\n it(\"should handle mixed defined and nested variables\", () => {\n builder\n .setVariables({\n API_KEY: \"key123\",\n HOST: \"example.com\",\n CONFIG: \"API_KEY={API_KEY}\\nHOST={HOST}\\nUNDEFINED={UNKNOWN}\"\n })\n .add(\"section1\", \"{CONFIG}\");\n\n const result = builder.build();\n expect(result).toContain(\"API_KEY=key123\");\n expect(result).toContain(\"HOST=example.com\");\n expect(result).toContain(\"UNDEFINED={UNKNOWN}\");\n });\n });\n});\n"],"names":["describe","builder","beforeEach","MarkdownContentBuilder","it","expect","current","result","s","consoleSpy","vi","console"],"mappings":"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"}
|
|
@@ -1,58 +1,55 @@
|
|
|
1
|
-
import { NextjsConfig
|
|
1
|
+
import { NextjsConfig } from "./abstractions.js";
|
|
2
2
|
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
3
3
|
import { MarkdownContentBuilder } from "./MarkdownContentBuilder.js";
|
|
4
4
|
import { ServiceDiscovery } from "@webiny/api";
|
|
5
5
|
import { ApiKeysRepository } from "@webiny/api-core/features/security/apiKeys/shared/abstractions.js";
|
|
6
6
|
class NextjsConfigImpl {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
async execute() {
|
|
12
|
-
const tenant = this.tenantContext.getTenant();
|
|
13
|
-
const apiKeyResult = await this.apiKeyRepo.getBySlug("website-builder");
|
|
14
|
-
const apiKey = apiKeyResult.isOk() ? apiKeyResult.value : null;
|
|
15
|
-
const domains = await this.getDomains();
|
|
16
|
-
const envVars = [`NEXT_PUBLIC_WEBSITE_BUILDER_API_KEY={API_TOKEN}`, `NEXT_PUBLIC_WEBSITE_BUILDER_API_HOST={API_HOST}`, `NEXT_PUBLIC_WEBSITE_BUILDER_API_TENANT={TENANT_ID}`];
|
|
17
|
-
if (domains.adminHost) {
|
|
18
|
-
envVars.push(`NEXT_PUBLIC_WEBSITE_BUILDER_ADMIN_HOST={ADMIN_HOST}`);
|
|
7
|
+
constructor(tenantContext, apiKeyRepo){
|
|
8
|
+
this.tenantContext = tenantContext;
|
|
9
|
+
this.apiKeyRepo = apiKeyRepo;
|
|
19
10
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
11
|
+
async execute() {
|
|
12
|
+
const tenant = this.tenantContext.getTenant();
|
|
13
|
+
const apiKeyResult = await this.apiKeyRepo.getBySlug("website-builder");
|
|
14
|
+
const apiKey = apiKeyResult.isOk() ? apiKeyResult.value : null;
|
|
15
|
+
const domains = await this.getDomains();
|
|
16
|
+
const envVars = [
|
|
17
|
+
"NEXT_PUBLIC_WEBSITE_BUILDER_API_KEY={API_TOKEN}",
|
|
18
|
+
"NEXT_PUBLIC_WEBSITE_BUILDER_API_HOST={API_HOST}",
|
|
19
|
+
"NEXT_PUBLIC_WEBSITE_BUILDER_API_TENANT={TENANT_ID}"
|
|
20
|
+
];
|
|
21
|
+
if (domains.adminHost) envVars.push("NEXT_PUBLIC_WEBSITE_BUILDER_ADMIN_HOST={ADMIN_HOST}");
|
|
22
|
+
const builder = new MarkdownContentBuilder();
|
|
23
|
+
builder.setVariables({
|
|
24
|
+
DESCRIPTION: 'This is a configuration for <a href="{STARTER_KIT_LINK}" target="_blank">Webiny Next.js starter kit:</a>',
|
|
25
|
+
STARTER_KIT_LINK: "https://github.com/webiny/website-builder-nextjs",
|
|
26
|
+
API_TOKEN: apiKey ? apiKey.token : "{API_KEY_TOKEN}",
|
|
27
|
+
API_HOST: domains.apiHost ?? "",
|
|
28
|
+
ADMIN_HOST: domains.adminHost ?? "",
|
|
29
|
+
TENANT_ID: tenant.id
|
|
30
|
+
}).add("description", "{DESCRIPTION}").add("dotEnvStart", "```dotenv").add("dotEnvBody", envVars.join("\n")).add("dotEnvEnd", "```");
|
|
31
|
+
return builder;
|
|
39
32
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
33
|
+
async getDomains() {
|
|
34
|
+
const manifest = await ServiceDiscovery.load();
|
|
35
|
+
const domains = {
|
|
36
|
+
apiHost: null,
|
|
37
|
+
adminHost: null
|
|
38
|
+
};
|
|
39
|
+
if (!manifest) return domains;
|
|
40
|
+
const { api, admin } = manifest;
|
|
41
|
+
if (api?.cloudfront) domains.apiHost = api.cloudfront.domain;
|
|
42
|
+
if (admin?.cloudfront) domains.adminHost = admin.cloudfront.domain;
|
|
43
|
+
return domains;
|
|
46
44
|
}
|
|
47
|
-
if (admin?.cloudfront) {
|
|
48
|
-
domains.adminHost = admin.cloudfront.domain;
|
|
49
|
-
}
|
|
50
|
-
return domains;
|
|
51
|
-
}
|
|
52
45
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
46
|
+
const NextjsConfig_NextjsConfig = NextjsConfig.createImplementation({
|
|
47
|
+
implementation: NextjsConfigImpl,
|
|
48
|
+
dependencies: [
|
|
49
|
+
TenantContext,
|
|
50
|
+
ApiKeysRepository
|
|
51
|
+
]
|
|
56
52
|
});
|
|
53
|
+
export { NextjsConfig_NextjsConfig as NextjsConfig };
|
|
57
54
|
|
|
58
55
|
//# sourceMappingURL=NextjsConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/nextjs/NextjsConfig.js","sources":["../../../src/features/nextjs/NextjsConfig.ts"],"sourcesContent":["import { NextjsConfig as Abstraction } from \"~/features/nextjs/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { MarkdownContentBuilder } from \"~/features/nextjs/MarkdownContentBuilder.js\";\nimport { ServiceDiscovery } from \"@webiny/api\";\nimport { ApiKeysRepository } from \"@webiny/api-core/features/security/apiKeys/shared/abstractions.js\";\n\nclass NextjsConfigImpl implements Abstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private apiKeyRepo: ApiKeysRepository.Interface\n ) {}\n\n async execute(): Abstraction.Return {\n const tenant = this.tenantContext.getTenant();\n const apiKeyResult = await this.apiKeyRepo.getBySlug(\"website-builder\");\n const apiKey = apiKeyResult.isOk() ? apiKeyResult.value : null;\n const domains = await this.getDomains();\n\n const envVars = [\n `NEXT_PUBLIC_WEBSITE_BUILDER_API_KEY={API_TOKEN}`,\n `NEXT_PUBLIC_WEBSITE_BUILDER_API_HOST={API_HOST}`,\n `NEXT_PUBLIC_WEBSITE_BUILDER_API_TENANT={TENANT_ID}`\n ];\n\n if (domains.adminHost) {\n envVars.push(`NEXT_PUBLIC_WEBSITE_BUILDER_ADMIN_HOST={ADMIN_HOST}`);\n }\n\n const builder = new MarkdownContentBuilder();\n builder\n .setVariables({\n DESCRIPTION: `This is a configuration for <a href=\"{STARTER_KIT_LINK}\" target=\"_blank\">Webiny Next.js starter kit:</a>`,\n STARTER_KIT_LINK: `https://github.com/webiny/website-builder-nextjs`,\n API_TOKEN: apiKey ? apiKey.token : \"{API_KEY_TOKEN}\",\n API_HOST: domains.apiHost ?? \"\",\n ADMIN_HOST: domains.adminHost ?? \"\",\n TENANT_ID: tenant.id\n })\n .add(\"description\", \"{DESCRIPTION}\")\n .add(\"dotEnvStart\", \"```dotenv\")\n .add(\"dotEnvBody\", envVars.join(\"\\n\"))\n .add(\"dotEnvEnd\", \"```\");\n\n return builder;\n }\n\n private async getDomains() {\n const manifest = await ServiceDiscovery.load();\n\n const domains: Record<string, string | null> = {\n apiHost: null,\n adminHost: null\n };\n\n if (!manifest) {\n return domains;\n }\n\n const { api, admin } = manifest;\n\n if (api?.cloudfront) {\n domains.apiHost = api.cloudfront.domain;\n }\n\n if (admin?.cloudfront) {\n domains.adminHost = admin.cloudfront.domain;\n }\n\n return domains;\n }\n}\n\nexport const NextjsConfig = Abstraction.createImplementation({\n implementation: NextjsConfigImpl,\n dependencies: [TenantContext, ApiKeysRepository]\n});\n"],"names":["NextjsConfigImpl","tenantContext","apiKeyRepo","tenant","apiKeyResult","apiKey","domains","envVars","builder","MarkdownContentBuilder","manifest","ServiceDiscovery","api","admin","NextjsConfig","Abstraction","TenantContext","ApiKeysRepository"],"mappings":";;;;;AAMA,MAAMA;IACF,YACYC,aAAsC,EACtCC,UAAuC,CACjD;aAFUD,aAAa,GAAbA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,UAA8B;QAChC,MAAMC,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS;QAC3C,MAAMC,eAAe,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACrD,MAAMC,SAASD,aAAa,IAAI,KAAKA,aAAa,KAAK,GAAG;QAC1D,MAAME,UAAU,MAAM,IAAI,CAAC,UAAU;QAErC,MAAMC,UAAU;YACZ;YACA;YACA;SACH;QAED,IAAID,QAAQ,SAAS,EACjBC,QAAQ,IAAI,CAAC;QAGjB,MAAMC,UAAU,IAAIC;QACpBD,QACK,YAAY,CAAC;YACV,aAAa;YACb,kBAAkB;YAClB,WAAWH,SAASA,OAAO,KAAK,GAAG;YACnC,UAAUC,QAAQ,OAAO,IAAI;YAC7B,YAAYA,QAAQ,SAAS,IAAI;YACjC,WAAWH,OAAO,EAAE;QACxB,GACC,GAAG,CAAC,eAAe,iBACnB,GAAG,CAAC,eAAe,aACnB,GAAG,CAAC,cAAcI,QAAQ,IAAI,CAAC,OAC/B,GAAG,CAAC,aAAa;QAEtB,OAAOC;IACX;IAEA,MAAc,aAAa;QACvB,MAAME,WAAW,MAAMC,iBAAiB,IAAI;QAE5C,MAAML,UAAyC;YAC3C,SAAS;YACT,WAAW;QACf;QAEA,IAAI,CAACI,UACD,OAAOJ;QAGX,MAAM,EAAEM,GAAG,EAAEC,KAAK,EAAE,GAAGH;QAEvB,IAAIE,KAAK,YACLN,QAAQ,OAAO,GAAGM,IAAI,UAAU,CAAC,MAAM;QAG3C,IAAIC,OAAO,YACPP,QAAQ,SAAS,GAAGO,MAAM,UAAU,CAAC,MAAM;QAG/C,OAAOP;IACX;AACJ;AAEO,MAAMQ,4BAAeC,aAAAA,oBAAgC,CAAC;IACzD,gBAAgBf;IAChB,cAAc;QAACgB;QAAeC;KAAkB;AACpD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
const NextjsConfig = createAbstraction("Wb/NextjsConfig");
|
|
3
|
+
export { NextjsConfig };
|
|
4
4
|
|
|
5
5
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/nextjs/abstractions.js","sources":["../../../src/features/nextjs/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IMarkdownContentBuilder } from \"~/features/nextjs/MarkdownContentBuilder.js\";\n\nexport interface INextjsConfig {\n execute(): Promise<IMarkdownContentBuilder>;\n}\n\n/** Configuration for Next.js website rendering. */\nexport const NextjsConfig = createAbstraction<INextjsConfig>(\"Wb/NextjsConfig\");\nexport namespace NextjsConfig {\n export type Interface = INextjsConfig;\n export type Return = Promise<IMarkdownContentBuilder>;\n}\n"],"names":["NextjsConfig","createAbstraction"],"mappings":";AAQO,MAAMA,eAAeC,kBAAiC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { NextjsConfig } from "./NextjsConfig.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const NextjsFeature = createFeature({
|
|
4
|
+
name: "WebsiteBuilder/Nextjs",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(NextjsConfig);
|
|
7
|
+
}
|
|
8
8
|
});
|
|
9
|
+
export { NextjsFeature };
|
|
9
10
|
|
|
10
11
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/nextjs/feature.js","sources":["../../../src/features/nextjs/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { NextjsConfig } from \"./NextjsConfig.js\";\n\nexport const NextjsFeature = createFeature({\n name: \"WebsiteBuilder/Nextjs\",\n register(container) {\n container.register(NextjsConfig);\n }\n});\n"],"names":["NextjsFeature","createFeature","container","NextjsConfig"],"mappings":";;AAGO,MAAMA,gBAAgBC,cAAc;IACvC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
package/features/nextjs/index.js
CHANGED
|
@@ -1,36 +1,34 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
|
|
3
|
-
import { CreatePageRepository
|
|
3
|
+
import { CreatePageRepository } from "./abstractions.js";
|
|
4
4
|
import { PageModel } from "../../../domain/page/abstractions.js";
|
|
5
5
|
import { EntryToPageMapper } from "../../../domain/page/EntryToPageMapper.js";
|
|
6
6
|
import { PagePersistenceError, PageValidationError } from "../../../domain/page/errors.js";
|
|
7
7
|
class CreatePageRepositoryImpl {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return Result.fail(new PagePersistenceError(result.error));
|
|
8
|
+
constructor(createEntry, pageModel){
|
|
9
|
+
this.createEntry = createEntry;
|
|
10
|
+
this.pageModel = pageModel;
|
|
11
|
+
}
|
|
12
|
+
async execute(data) {
|
|
13
|
+
const result = await this.createEntry.execute(this.pageModel, {
|
|
14
|
+
location: data.location,
|
|
15
|
+
values: data
|
|
16
|
+
});
|
|
17
|
+
if (result.isFail()) {
|
|
18
|
+
if ("Cms/Entry/ValidationError" === result.error.code) return Result.fail(new PageValidationError(result.error.message));
|
|
19
|
+
return Result.fail(new PagePersistenceError(result.error));
|
|
20
|
+
}
|
|
21
|
+
const page = EntryToPageMapper.toPage(result.value);
|
|
22
|
+
return Result.ok(page);
|
|
24
23
|
}
|
|
25
|
-
|
|
26
|
-
// Map CmsEntry to WbPage domain type
|
|
27
|
-
const page = EntryToPageMapper.toPage(result.value);
|
|
28
|
-
return Result.ok(page);
|
|
29
|
-
}
|
|
30
24
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
const CreatePageRepository_CreatePageRepository = CreatePageRepository.createImplementation({
|
|
26
|
+
implementation: CreatePageRepositoryImpl,
|
|
27
|
+
dependencies: [
|
|
28
|
+
CreateEntryUseCase,
|
|
29
|
+
PageModel
|
|
30
|
+
]
|
|
34
31
|
});
|
|
32
|
+
export { CreatePageRepository_CreatePageRepository as CreatePageRepository };
|
|
35
33
|
|
|
36
34
|
//# sourceMappingURL=CreatePageRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/pages/CreatePage/CreatePageRepository.js","sources":["../../../../src/features/pages/CreatePage/CreatePageRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry\";\nimport {\n CreatePageRepository as RepositoryAbstraction,\n type ICreatePageRepository\n} from \"./abstractions.js\";\nimport { PageModel } from \"~/domain/page/abstractions.js\";\nimport { EntryToPageMapper } from \"~/domain/page/EntryToPageMapper.js\";\nimport { PagePersistenceError, PageValidationError } from \"~/domain/page/errors.js\";\n\nclass CreatePageRepositoryImpl implements ICreatePageRepository {\n constructor(\n private createEntry: CreateEntryUseCase.Interface,\n private pageModel: PageModel.Interface\n ) {}\n\n async execute(data: RepositoryAbstraction.Params): RepositoryAbstraction.Return {\n // Create the entry using CMS CreateEntry use case\n const result = await this.createEntry.execute(this.pageModel, {\n location: data.location,\n values: data\n });\n\n if (result.isFail()) {\n // Map CMS errors to domain errors\n if (result.error.code === \"Cms/Entry/ValidationError\") {\n return Result.fail(new PageValidationError(result.error.message));\n }\n return Result.fail(new PagePersistenceError(result.error));\n }\n\n // Map CmsEntry to WbPage domain type\n const page = EntryToPageMapper.toPage(result.value);\n return Result.ok(page);\n }\n}\n\nexport const CreatePageRepository = RepositoryAbstraction.createImplementation({\n implementation: CreatePageRepositoryImpl,\n dependencies: [CreateEntryUseCase, PageModel]\n});\n"],"names":["CreatePageRepositoryImpl","createEntry","pageModel","data","result","Result","PageValidationError","PagePersistenceError","page","EntryToPageMapper","CreatePageRepository","RepositoryAbstraction","CreateEntryUseCase","PageModel"],"mappings":";;;;;;AAUA,MAAMA;IACF,YACYC,WAAyC,EACzCC,SAA8B,CACxC;aAFUD,WAAW,GAAXA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,QAAQC,IAAkC,EAAgC;QAE5E,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;YAC1D,UAAUD,KAAK,QAAQ;YACvB,QAAQA;QACZ;QAEA,IAAIC,OAAO,MAAM,IAAI;YAEjB,IAAIA,AAAsB,gCAAtBA,OAAO,KAAK,CAAC,IAAI,EACjB,OAAOC,OAAO,IAAI,CAAC,IAAIC,oBAAoBF,OAAO,KAAK,CAAC,OAAO;YAEnE,OAAOC,OAAO,IAAI,CAAC,IAAIE,qBAAqBH,OAAO,KAAK;QAC5D;QAGA,MAAMI,OAAOC,kBAAkB,MAAM,CAACL,OAAO,KAAK;QAClD,OAAOC,OAAO,EAAE,CAACG;IACrB;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBX;IAChB,cAAc;QAACY;QAAoBC;KAAU;AACjD"}
|
|
@@ -1,45 +1,40 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { CreatePageRepository, CreatePageUseCase } from "./abstractions.js";
|
|
4
|
+
import { PageAfterCreateEvent, PageBeforeCreateEvent } from "./events.js";
|
|
5
5
|
import { WbPermissions } from "../../permissions/abstractions.js";
|
|
6
6
|
import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
7
7
|
class CreatePageUseCaseImpl {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
async execute(data) {
|
|
14
|
-
const hasPermission = await this.permissions.canCreate("page");
|
|
15
|
-
if (!hasPermission) {
|
|
16
|
-
return Result.fail(new PageNotAuthorizedError());
|
|
8
|
+
constructor(permissions, eventPublisher, repository){
|
|
9
|
+
this.permissions = permissions;
|
|
10
|
+
this.eventPublisher = eventPublisher;
|
|
11
|
+
this.repository = repository;
|
|
17
12
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
async execute(data) {
|
|
14
|
+
const hasPermission = await this.permissions.canCreate("page");
|
|
15
|
+
if (!hasPermission) return Result.fail(new PageNotAuthorizedError());
|
|
16
|
+
const beforeCreateEvent = new PageBeforeCreateEvent({
|
|
17
|
+
input: data
|
|
18
|
+
});
|
|
19
|
+
await this.eventPublisher.publish(beforeCreateEvent);
|
|
20
|
+
const result = await this.repository.execute(data);
|
|
21
|
+
if (result.isFail()) return result;
|
|
22
|
+
const page = result.value;
|
|
23
|
+
const afterCreateEvent = new PageAfterCreateEvent({
|
|
24
|
+
page
|
|
25
|
+
});
|
|
26
|
+
await this.eventPublisher.publish(afterCreateEvent);
|
|
27
|
+
return Result.ok(page);
|
|
29
28
|
}
|
|
30
|
-
const page = result.value;
|
|
31
|
-
|
|
32
|
-
// Publish after create event
|
|
33
|
-
const afterCreateEvent = new PageAfterCreateEvent({
|
|
34
|
-
page
|
|
35
|
-
});
|
|
36
|
-
await this.eventPublisher.publish(afterCreateEvent);
|
|
37
|
-
return Result.ok(page);
|
|
38
|
-
}
|
|
39
29
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
const CreatePageUseCase_CreatePageUseCase = CreatePageUseCase.createImplementation({
|
|
31
|
+
implementation: CreatePageUseCaseImpl,
|
|
32
|
+
dependencies: [
|
|
33
|
+
WbPermissions,
|
|
34
|
+
EventPublisher,
|
|
35
|
+
CreatePageRepository
|
|
36
|
+
]
|
|
43
37
|
});
|
|
38
|
+
export { CreatePageUseCase_CreatePageUseCase as CreatePageUseCase };
|
|
44
39
|
|
|
45
40
|
//# sourceMappingURL=CreatePageUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/pages/CreatePage/CreatePageUseCase.js","sources":["../../../../src/features/pages/CreatePage/CreatePageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { CreatePageUseCase as UseCaseAbstraction, CreatePageRepository } from \"./abstractions.js\";\nimport { PageBeforeCreateEvent, PageAfterCreateEvent } from \"./events.js\";\nimport { WbPermissions } from \"~/features/permissions/abstractions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass CreatePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private repository: CreatePageRepository.Interface\n ) {}\n\n async execute(data: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canCreate(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before create event\n const beforeCreateEvent = new PageBeforeCreateEvent({ input: data });\n\n await this.eventPublisher.publish(beforeCreateEvent);\n\n // Execute the create operation\n const result = await this.repository.execute(data);\n\n if (result.isFail()) {\n return result;\n }\n\n const page = result.value;\n\n // Publish after create event\n const afterCreateEvent = new PageAfterCreateEvent({ page });\n\n await this.eventPublisher.publish(afterCreateEvent);\n\n return Result.ok(page);\n }\n}\n\nexport const CreatePageUseCase = UseCaseAbstraction.createImplementation({\n implementation: CreatePageUseCaseImpl,\n dependencies: [WbPermissions, EventPublisher, CreatePageRepository]\n});\n"],"names":["CreatePageUseCaseImpl","permissions","eventPublisher","repository","data","hasPermission","Result","PageNotAuthorizedError","beforeCreateEvent","PageBeforeCreateEvent","result","page","afterCreateEvent","PageAfterCreateEvent","CreatePageUseCase","UseCaseAbstraction","WbPermissions","EventPublisher","CreatePageRepository"],"mappings":";;;;;;AAUA,MAAMA;IACF,YACYC,WAAoC,EACpCC,cAAmD,EACnDC,UAA0C,CACpD;aAHUF,WAAW,GAAXA;aACAC,cAAc,GAAdA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QAAQC,IAA+B,EAA6B;QACtE,MAAMC,gBAAgB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QACvD,IAAI,CAACA,eACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMC,oBAAoB,IAAIC,sBAAsB;YAAE,OAAOL;QAAK;QAElE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAACI;QAGlC,MAAME,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACN;QAE7C,IAAIM,OAAO,MAAM,IACb,OAAOA;QAGX,MAAMC,OAAOD,OAAO,KAAK;QAGzB,MAAME,mBAAmB,IAAIC,qBAAqB;YAAEF;QAAK;QAEzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAACC;QAElC,OAAON,OAAO,EAAE,CAACK;IACrB;AACJ;AAEO,MAAMG,sCAAoBC,kBAAAA,oBAAuC,CAAC;IACrE,gBAAgBf;IAChB,cAAc;QAACgB;QAAeC;QAAgBC;KAAqB;AACvE"}
|
|
@@ -1,33 +1,8 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// Repository Abstraction
|
|
9
|
-
// ============================================================================
|
|
10
|
-
|
|
11
|
-
export const CreatePageRepository = createAbstraction("Wb/CreatePageRepository");
|
|
12
|
-
|
|
13
|
-
// ============================================================================
|
|
14
|
-
// Use Case Abstraction
|
|
15
|
-
// ============================================================================
|
|
16
|
-
|
|
17
|
-
/** Create a new page. */
|
|
18
|
-
export const CreatePageUseCase = createAbstraction("Wb/CreatePageUseCase");
|
|
19
|
-
|
|
20
|
-
// ============================================================================
|
|
21
|
-
// Event Payload Types
|
|
22
|
-
// ============================================================================
|
|
23
|
-
|
|
24
|
-
// ============================================================================
|
|
25
|
-
// Event Handler Abstractions
|
|
26
|
-
// ============================================================================
|
|
27
|
-
|
|
28
|
-
/** Hook into page lifecycle before a page is created. */
|
|
29
|
-
export const PageBeforeCreateEventHandler = createAbstraction("Wb/PageBeforeCreateEventHandler");
|
|
30
|
-
/** Hook into page lifecycle after a page is created. */
|
|
31
|
-
export const PageAfterCreateEventHandler = createAbstraction("Wb/PageAfterCreateEventHandler");
|
|
2
|
+
const CreatePageRepository = createAbstraction("Wb/CreatePageRepository");
|
|
3
|
+
const CreatePageUseCase = createAbstraction("Wb/CreatePageUseCase");
|
|
4
|
+
const PageBeforeCreateEventHandler = createAbstraction("Wb/PageBeforeCreateEventHandler");
|
|
5
|
+
const PageAfterCreateEventHandler = createAbstraction("Wb/PageAfterCreateEventHandler");
|
|
6
|
+
export { CreatePageRepository, CreatePageUseCase, PageAfterCreateEventHandler, PageBeforeCreateEventHandler };
|
|
32
7
|
|
|
33
8
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/pages/CreatePage/abstractions.js","sources":["../../../../src/features/pages/CreatePage/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { DomainEvent, IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport {\n PagePersistenceError,\n PageValidationError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport type ICreateWbPageParams = Pick<\n WbPage,\n \"properties\" | \"metadata\" | \"bindings\" | \"elements\" | \"location\" | \"extensions\"\n>;\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface ICreatePageRepository {\n execute(data: ICreateWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface ICreatePageRepositoryErrors {\n validation: PageValidationError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = ICreatePageRepositoryErrors[keyof ICreatePageRepositoryErrors];\n\nexport const CreatePageRepository =\n createAbstraction<ICreatePageRepository>(\"Wb/CreatePageRepository\");\n\nexport namespace CreatePageRepository {\n export type Interface = ICreatePageRepository;\n export type Params = ICreateWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface ICreatePageUseCase {\n execute(data: ICreateWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface ICreatePageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n validation: PageValidationError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = ICreatePageUseCaseErrors[keyof ICreatePageUseCaseErrors];\n\n/** Create a new page. */\nexport const CreatePageUseCase = createAbstraction<ICreatePageUseCase>(\"Wb/CreatePageUseCase\");\n\nexport namespace CreatePageUseCase {\n export type Interface = ICreatePageUseCase;\n export type Params = ICreateWbPageParams;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforeCreatePayload {\n input: ICreateWbPageParams;\n}\n\nexport interface PageAfterCreatePayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\n/** Hook into page lifecycle before a page is created. */\nexport const PageBeforeCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeCreatePayload>>\n>(\"Wb/PageBeforeCreateEventHandler\");\n\nexport namespace PageBeforeCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeCreatePayload>>;\n export type Event = DomainEvent<PageBeforeCreatePayload>;\n export type Page = WbPage;\n}\n\n/** Hook into page lifecycle after a page is created. */\nexport const PageAfterCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterCreatePayload>>\n>(\"Wb/PageAfterCreateEventHandler\");\n\nexport namespace PageAfterCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterCreatePayload>>;\n export type Event = DomainEvent<PageAfterCreatePayload>;\n export type Page = WbPage;\n}\n"],"names":["CreatePageRepository","createAbstraction","CreatePageUseCase","PageBeforeCreateEventHandler","PageAfterCreateEventHandler"],"mappings":";AAiCO,MAAMA,uBACTC,kBAAyC;AA0BtC,MAAMC,oBAAoBD,kBAAsC;AA2BhE,MAAME,+BAA+BF,kBAE1C;AASK,MAAMG,8BAA8BH,kBAEzC"}
|