@webiny/api-website-builder 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9
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 -26
- package/domain/page/EntryToPageMapper.js.map +1 -1
- package/domain/page/PagePath.d.ts +7 -0
- package/domain/page/PagePath.js +26 -0
- package/domain/page/PagePath.js.map +1 -0
- package/domain/page/abstractions.d.ts +22 -3
- package/domain/page/abstractions.js +2 -5
- package/domain/page/abstractions.js.map +1 -1
- package/domain/page/errors.d.ts +12 -0
- package/domain/page/errors.js +48 -31
- package/domain/page/errors.js.map +1 -1
- package/domain/page/page.model.d.ts +8 -1
- package/domain/page/page.model.js +25 -30
- package/domain/page/page.model.js.map +1 -1
- package/domain/permissionsSchema.d.ts +29 -0
- package/domain/permissionsSchema.js +53 -0
- package/domain/permissionsSchema.js.map +1 -0
- 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.d.ts +8 -1
- package/domain/redirect/redirect.model.js +24 -30
- 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.d.ts +12 -8
- package/exports/api/website-builder/page.js +12 -10
- package/exports/api/website-builder/redirect.d.ts +4 -4
- package/exports/api/website-builder/redirect.js +4 -6
- package/features/installer/ApiKeyInstaller.d.ts +1 -1
- package/features/installer/ApiKeyInstaller.js +34 -28
- package/features/installer/ApiKeyInstaller.js.map +1 -1
- package/features/installer/feature.d.ts +4 -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.d.ts +1 -0
- package/features/nextjs/abstractions.js +2 -1
- package/features/nextjs/abstractions.js.map +1 -1
- package/features/nextjs/feature.d.ts +4 -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.d.ts +4 -2
- package/features/pages/CreatePage/CreatePageUseCase.js +33 -30
- package/features/pages/CreatePage/CreatePageUseCase.js.map +1 -1
- package/features/pages/CreatePage/abstractions.d.ts +10 -6
- package/features/pages/CreatePage/abstractions.js +5 -27
- package/features/pages/CreatePage/abstractions.js.map +1 -1
- package/features/pages/CreatePage/events.d.ts +3 -3
- package/features/pages/CreatePage/events.js +17 -15
- package/features/pages/CreatePage/events.js.map +1 -1
- package/features/pages/CreatePage/feature.d.ts +4 -1
- package/features/pages/CreatePage/feature.js +7 -6
- package/features/pages/CreatePage/feature.js.map +1 -1
- package/features/pages/CreatePage/index.d.ts +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.d.ts +6 -2
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js +38 -30
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/abstractions.d.ts +11 -7
- package/features/pages/CreatePageRevisionFrom/abstractions.js +5 -27
- package/features/pages/CreatePageRevisionFrom/abstractions.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/events.d.ts +3 -3
- package/features/pages/CreatePageRevisionFrom/events.js +17 -15
- package/features/pages/CreatePageRevisionFrom/events.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/feature.d.ts +4 -1
- package/features/pages/CreatePageRevisionFrom/feature.js +7 -6
- package/features/pages/CreatePageRevisionFrom/feature.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/index.d.ts +1 -1
- package/features/pages/CreatePageRevisionFrom/index.js +1 -3
- package/features/pages/DeletePage/DeletePageRepository.d.ts +1 -3
- package/features/pages/DeletePage/DeletePageRepository.js +18 -28
- package/features/pages/DeletePage/DeletePageRepository.js.map +1 -1
- package/features/pages/DeletePage/DeletePageUseCase.d.ts +7 -5
- package/features/pages/DeletePage/DeletePageUseCase.js +37 -37
- package/features/pages/DeletePage/DeletePageUseCase.js.map +1 -1
- package/features/pages/DeletePage/abstractions.d.ts +12 -7
- package/features/pages/DeletePage/abstractions.js +5 -27
- package/features/pages/DeletePage/abstractions.js.map +1 -1
- package/features/pages/DeletePage/events.d.ts +3 -3
- package/features/pages/DeletePage/events.js +17 -15
- package/features/pages/DeletePage/events.js.map +1 -1
- package/features/pages/DeletePage/feature.d.ts +4 -1
- package/features/pages/DeletePage/feature.js +7 -6
- package/features/pages/DeletePage/feature.js.map +1 -1
- package/features/pages/DeletePage/index.d.ts +1 -1
- package/features/pages/DeletePage/index.js +1 -3
- package/features/pages/DuplicatePage/DuplicatePageRepository.d.ts +2 -2
- package/features/pages/DuplicatePage/DuplicatePageRepository.js +50 -45
- package/features/pages/DuplicatePage/DuplicatePageRepository.js.map +1 -1
- package/features/pages/DuplicatePage/DuplicatePageUseCase.d.ts +4 -2
- package/features/pages/DuplicatePage/DuplicatePageUseCase.js +38 -38
- package/features/pages/DuplicatePage/DuplicatePageUseCase.js.map +1 -1
- package/features/pages/DuplicatePage/abstractions.d.ts +18 -8
- package/features/pages/DuplicatePage/abstractions.js +5 -27
- package/features/pages/DuplicatePage/abstractions.js.map +1 -1
- package/features/pages/DuplicatePage/events.d.ts +3 -3
- package/features/pages/DuplicatePage/events.js +17 -15
- package/features/pages/DuplicatePage/events.js.map +1 -1
- package/features/pages/DuplicatePage/feature.d.ts +4 -1
- package/features/pages/DuplicatePage/feature.js +7 -6
- package/features/pages/DuplicatePage/feature.js.map +1 -1
- package/features/pages/DuplicatePage/index.d.ts +2 -1
- package/features/pages/DuplicatePage/index.js +1 -3
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdRepository.d.ts +13 -0
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdRepository.js +32 -0
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdRepository.js.map +1 -0
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdUseCase.d.ts +12 -0
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdUseCase.js +29 -0
- package/features/pages/GetDeletedPageById/GetDeletedPageByIdUseCase.js.map +1 -0
- package/features/pages/GetDeletedPageById/abstractions.d.ts +42 -0
- package/features/pages/GetDeletedPageById/abstractions.js +6 -0
- package/features/pages/GetDeletedPageById/abstractions.js.map +1 -0
- package/features/pages/GetDeletedPageById/feature.d.ts +4 -0
- package/features/pages/GetDeletedPageById/feature.js +13 -0
- package/features/pages/GetDeletedPageById/feature.js.map +1 -0
- package/features/pages/GetDeletedPageById/index.d.ts +1 -0
- package/features/pages/GetDeletedPageById/index.js +1 -0
- package/features/pages/GetPageById/GetPageByIdRepository.js +20 -18
- package/features/pages/GetPageById/GetPageByIdRepository.js.map +1 -1
- package/features/pages/GetPageById/GetPageByIdUseCase.d.ts +3 -1
- package/features/pages/GetPageById/GetPageByIdUseCase.js +24 -10
- package/features/pages/GetPageById/GetPageByIdUseCase.js.map +1 -1
- package/features/pages/GetPageById/abstractions.d.ts +3 -1
- package/features/pages/GetPageById/abstractions.js +3 -12
- package/features/pages/GetPageById/abstractions.js.map +1 -1
- package/features/pages/GetPageById/feature.d.ts +4 -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.d.ts +3 -1
- package/features/pages/GetPageByPath/GetPageByPathUseCase.js +24 -10
- package/features/pages/GetPageByPath/GetPageByPathUseCase.js.map +1 -1
- package/features/pages/GetPageByPath/abstractions.d.ts +3 -1
- package/features/pages/GetPageByPath/abstractions.js +3 -12
- package/features/pages/GetPageByPath/abstractions.js.map +1 -1
- package/features/pages/GetPageByPath/feature.d.ts +4 -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.d.ts +15 -0
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsRepository.js +55 -0
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsRepository.js.map +1 -0
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsUseCase.d.ts +10 -0
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsUseCase.js +21 -0
- package/features/pages/GetPageLanguagePaths/GetPageLanguagePathsUseCase.js.map +1 -0
- package/features/pages/GetPageLanguagePaths/abstractions.d.ts +20 -0
- package/features/pages/GetPageLanguagePaths/abstractions.js +6 -0
- package/features/pages/GetPageLanguagePaths/abstractions.js.map +1 -0
- package/features/pages/GetPageLanguagePaths/feature.d.ts +4 -0
- package/features/pages/GetPageLanguagePaths/feature.js +13 -0
- package/features/pages/GetPageLanguagePaths/feature.js.map +1 -0
- package/features/pages/GetPageLanguagePaths/index.d.ts +1 -0
- package/features/pages/GetPageLanguagePaths/index.js +1 -0
- package/features/pages/GetPageRevisions/GetPageRevisionsRepository.js +17 -15
- package/features/pages/GetPageRevisions/GetPageRevisionsRepository.js.map +1 -1
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.d.ts +3 -1
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js +27 -10
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js.map +1 -1
- package/features/pages/GetPageRevisions/abstractions.d.ts +3 -1
- package/features/pages/GetPageRevisions/abstractions.js +3 -12
- package/features/pages/GetPageRevisions/abstractions.js.map +1 -1
- package/features/pages/GetPageRevisions/feature.d.ts +4 -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.d.ts +17 -0
- package/features/pages/ListDeletedPages/ListDeletedPagesRepository.js +50 -0
- package/features/pages/ListDeletedPages/ListDeletedPagesRepository.js.map +1 -0
- package/features/pages/ListDeletedPages/ListDeletedPagesUseCase.d.ts +14 -0
- package/features/pages/ListDeletedPages/ListDeletedPagesUseCase.js +38 -0
- package/features/pages/ListDeletedPages/ListDeletedPagesUseCase.js.map +1 -0
- package/features/pages/ListDeletedPages/abstractions.d.ts +56 -0
- package/features/pages/ListDeletedPages/abstractions.js +6 -0
- package/features/pages/ListDeletedPages/abstractions.js.map +1 -0
- package/features/pages/ListDeletedPages/feature.d.ts +4 -0
- package/features/pages/ListDeletedPages/feature.js +13 -0
- package/features/pages/ListDeletedPages/feature.js.map +1 -0
- package/features/pages/ListDeletedPages/index.d.ts +1 -0
- package/features/pages/ListDeletedPages/index.js +1 -0
- package/features/pages/ListPages/ListPagesRepository.d.ts +5 -1
- package/features/pages/ListPages/ListPagesRepository.js +39 -28
- package/features/pages/ListPages/ListPagesRepository.js.map +1 -1
- package/features/pages/ListPages/ListPagesUseCase.d.ts +5 -1
- package/features/pages/ListPages/ListPagesUseCase.js +33 -10
- package/features/pages/ListPages/ListPagesUseCase.js.map +1 -1
- package/features/pages/ListPages/abstractions.d.ts +3 -1
- package/features/pages/ListPages/abstractions.js +3 -12
- package/features/pages/ListPages/abstractions.js.map +1 -1
- package/features/pages/ListPages/feature.d.ts +4 -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.d.ts +4 -2
- package/features/pages/MovePage/MovePageUseCase.js +42 -40
- package/features/pages/MovePage/MovePageUseCase.js.map +1 -1
- package/features/pages/MovePage/abstractions.d.ts +11 -7
- package/features/pages/MovePage/abstractions.js +5 -27
- package/features/pages/MovePage/abstractions.js.map +1 -1
- package/features/pages/MovePage/events.d.ts +3 -3
- package/features/pages/MovePage/events.js +17 -15
- package/features/pages/MovePage/events.js.map +1 -1
- package/features/pages/MovePage/feature.d.ts +4 -1
- package/features/pages/MovePage/feature.js +7 -6
- package/features/pages/MovePage/feature.js.map +1 -1
- package/features/pages/MovePage/index.d.ts +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.d.ts +4 -2
- package/features/pages/PublishPage/PublishPageUseCase.js +39 -37
- package/features/pages/PublishPage/PublishPageUseCase.js.map +1 -1
- package/features/pages/PublishPage/abstractions.d.ts +11 -7
- package/features/pages/PublishPage/abstractions.js +5 -27
- package/features/pages/PublishPage/abstractions.js.map +1 -1
- package/features/pages/PublishPage/events.d.ts +3 -3
- package/features/pages/PublishPage/events.js +17 -15
- package/features/pages/PublishPage/events.js.map +1 -1
- package/features/pages/PublishPage/feature.d.ts +4 -1
- package/features/pages/PublishPage/feature.js +7 -6
- package/features/pages/PublishPage/feature.js.map +1 -1
- package/features/pages/PublishPage/index.d.ts +1 -1
- package/features/pages/PublishPage/index.js +1 -3
- package/features/pages/RestorePage/RestorePageRepository.d.ts +13 -0
- package/features/pages/RestorePage/RestorePageRepository.js +31 -0
- package/features/pages/RestorePage/RestorePageRepository.js.map +1 -0
- package/features/pages/RestorePage/RestorePageUseCase.d.ts +16 -0
- package/features/pages/RestorePage/RestorePageUseCase.js +45 -0
- package/features/pages/RestorePage/RestorePageUseCase.js.map +1 -0
- package/features/pages/RestorePage/abstractions.d.ts +59 -0
- package/features/pages/RestorePage/abstractions.js +8 -0
- package/features/pages/RestorePage/abstractions.js.map +1 -0
- package/features/pages/RestorePage/events.d.ts +10 -0
- package/features/pages/RestorePage/events.js +21 -0
- package/features/pages/RestorePage/events.js.map +1 -0
- package/features/pages/RestorePage/feature.d.ts +4 -0
- package/features/pages/RestorePage/feature.js +13 -0
- package/features/pages/RestorePage/feature.js.map +1 -0
- package/features/pages/RestorePage/index.d.ts +1 -0
- package/features/pages/RestorePage/index.js +1 -0
- package/features/pages/TranslatePage/TranslatePageUseCase.d.ts +17 -0
- package/features/pages/TranslatePage/TranslatePageUseCase.js +58 -0
- package/features/pages/TranslatePage/TranslatePageUseCase.js.map +1 -0
- package/features/pages/TranslatePage/abstractions.d.ts +29 -0
- package/features/pages/TranslatePage/abstractions.js +5 -0
- package/features/pages/TranslatePage/abstractions.js.map +1 -0
- package/features/pages/TranslatePage/feature.d.ts +4 -0
- package/features/pages/TranslatePage/feature.js +11 -0
- package/features/pages/TranslatePage/feature.js.map +1 -0
- package/features/pages/TranslatePage/index.d.ts +1 -0
- package/features/pages/TranslatePage/index.js +1 -0
- package/features/pages/TrashPage/TrashPageRepository.d.ts +13 -0
- package/features/pages/TrashPage/TrashPageRepository.js +31 -0
- package/features/pages/TrashPage/TrashPageRepository.js.map +1 -0
- package/features/pages/TrashPage/TrashPageUseCase.d.ts +16 -0
- package/features/pages/TrashPage/TrashPageUseCase.js +45 -0
- package/features/pages/TrashPage/TrashPageUseCase.js.map +1 -0
- package/features/pages/TrashPage/abstractions.d.ts +58 -0
- package/features/pages/TrashPage/abstractions.js +8 -0
- package/features/pages/TrashPage/abstractions.js.map +1 -0
- package/features/pages/TrashPage/events.d.ts +10 -0
- package/features/pages/TrashPage/events.js +21 -0
- package/features/pages/TrashPage/events.js.map +1 -0
- package/features/pages/TrashPage/feature.d.ts +4 -0
- package/features/pages/TrashPage/feature.js +13 -0
- package/features/pages/TrashPage/feature.js.map +1 -0
- package/features/pages/TrashPage/index.d.ts +1 -0
- package/features/pages/TrashPage/index.js +1 -0
- package/features/pages/UnpublishPage/UnpublishPageRepository.js +26 -28
- package/features/pages/UnpublishPage/UnpublishPageRepository.js.map +1 -1
- package/features/pages/UnpublishPage/UnpublishPageUseCase.d.ts +4 -2
- package/features/pages/UnpublishPage/UnpublishPageUseCase.js +38 -36
- package/features/pages/UnpublishPage/UnpublishPageUseCase.js.map +1 -1
- package/features/pages/UnpublishPage/abstractions.d.ts +11 -7
- package/features/pages/UnpublishPage/abstractions.js +5 -27
- package/features/pages/UnpublishPage/abstractions.js.map +1 -1
- package/features/pages/UnpublishPage/events.d.ts +3 -3
- package/features/pages/UnpublishPage/events.js +17 -15
- package/features/pages/UnpublishPage/events.js.map +1 -1
- package/features/pages/UnpublishPage/feature.d.ts +4 -1
- package/features/pages/UnpublishPage/feature.js +7 -6
- package/features/pages/UnpublishPage/feature.js.map +1 -1
- package/features/pages/UnpublishPage/index.d.ts +1 -1
- package/features/pages/UnpublishPage/index.js +1 -3
- package/features/pages/UpdatePage/UpdatePageRepository.js +30 -34
- package/features/pages/UpdatePage/UpdatePageRepository.js.map +1 -1
- package/features/pages/UpdatePage/UpdatePageUseCase.d.ts +4 -2
- package/features/pages/UpdatePage/UpdatePageUseCase.js +47 -45
- package/features/pages/UpdatePage/UpdatePageUseCase.js.map +1 -1
- package/features/pages/UpdatePage/abstractions.d.ts +12 -9
- package/features/pages/UpdatePage/abstractions.js +5 -27
- package/features/pages/UpdatePage/abstractions.js.map +1 -1
- package/features/pages/UpdatePage/events.d.ts +3 -3
- package/features/pages/UpdatePage/events.js +17 -15
- package/features/pages/UpdatePage/events.js.map +1 -1
- package/features/pages/UpdatePage/feature.d.ts +4 -1
- package/features/pages/UpdatePage/feature.js +7 -6
- package/features/pages/UpdatePage/feature.js.map +1 -1
- package/features/pages/UpdatePage/index.d.ts +1 -1
- package/features/pages/UpdatePage/index.js +1 -3
- 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.d.ts +34 -0
- package/features/permissions/abstractions.js +6 -0
- package/features/permissions/abstractions.js.map +1 -0
- package/features/permissions/feature.d.ts +4 -0
- package/features/permissions/feature.js +7 -0
- package/features/permissions/feature.js.map +1 -0
- package/features/redirects/CreateRedirect/CreateRedirectRepository.js +23 -21
- package/features/redirects/CreateRedirect/CreateRedirectRepository.js.map +1 -1
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.d.ts +4 -2
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.js +33 -30
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.js.map +1 -1
- package/features/redirects/CreateRedirect/abstractions.d.ts +11 -7
- package/features/redirects/CreateRedirect/abstractions.js +5 -27
- package/features/redirects/CreateRedirect/abstractions.js.map +1 -1
- package/features/redirects/CreateRedirect/events.d.ts +3 -3
- package/features/redirects/CreateRedirect/events.js +17 -15
- package/features/redirects/CreateRedirect/events.js.map +1 -1
- package/features/redirects/CreateRedirect/feature.d.ts +4 -1
- package/features/redirects/CreateRedirect/feature.js +7 -6
- package/features/redirects/CreateRedirect/feature.js.map +1 -1
- package/features/redirects/CreateRedirect/index.d.ts +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.d.ts +4 -2
- package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js +37 -37
- package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js.map +1 -1
- package/features/redirects/DeleteRedirect/abstractions.d.ts +11 -7
- package/features/redirects/DeleteRedirect/abstractions.js +5 -27
- package/features/redirects/DeleteRedirect/abstractions.js.map +1 -1
- package/features/redirects/DeleteRedirect/events.d.ts +3 -3
- package/features/redirects/DeleteRedirect/events.js +17 -15
- package/features/redirects/DeleteRedirect/events.js.map +1 -1
- package/features/redirects/DeleteRedirect/feature.d.ts +4 -1
- package/features/redirects/DeleteRedirect/feature.js +7 -6
- package/features/redirects/DeleteRedirect/feature.js.map +1 -1
- package/features/redirects/DeleteRedirect/index.d.ts +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.d.ts +3 -1
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js +21 -12
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js.map +1 -1
- package/features/redirects/GetActiveRedirects/abstractions.d.ts +3 -1
- package/features/redirects/GetActiveRedirects/abstractions.js +3 -12
- package/features/redirects/GetActiveRedirects/abstractions.js.map +1 -1
- package/features/redirects/GetActiveRedirects/feature.d.ts +4 -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.d.ts +3 -1
- package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js +25 -12
- package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js.map +1 -1
- package/features/redirects/GetRedirectById/abstractions.d.ts +3 -1
- package/features/redirects/GetRedirectById/abstractions.js +3 -12
- package/features/redirects/GetRedirectById/abstractions.js.map +1 -1
- package/features/redirects/GetRedirectById/feature.d.ts +4 -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.d.ts +3 -3
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js +14 -17
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.d.ts +3 -3
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js +14 -17
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.d.ts +3 -3
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js +14 -18
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/abstractions.d.ts +1 -0
- package/features/redirects/InvalidateRedirectsCache/abstractions.js +2 -6
- package/features/redirects/InvalidateRedirectsCache/abstractions.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/feature.d.ts +4 -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.d.ts +5 -1
- package/features/redirects/ListRedirects/ListRedirectsUseCase.js +34 -12
- package/features/redirects/ListRedirects/ListRedirectsUseCase.js.map +1 -1
- package/features/redirects/ListRedirects/abstractions.d.ts +8 -5
- package/features/redirects/ListRedirects/abstractions.js +3 -16
- package/features/redirects/ListRedirects/abstractions.js.map +1 -1
- package/features/redirects/ListRedirects/feature.d.ts +4 -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.d.ts +4 -2
- package/features/redirects/MoveRedirect/MoveRedirectUseCase.js +42 -40
- package/features/redirects/MoveRedirect/MoveRedirectUseCase.js.map +1 -1
- package/features/redirects/MoveRedirect/abstractions.d.ts +11 -7
- package/features/redirects/MoveRedirect/abstractions.js +5 -27
- package/features/redirects/MoveRedirect/abstractions.js.map +1 -1
- package/features/redirects/MoveRedirect/events.d.ts +3 -3
- package/features/redirects/MoveRedirect/events.js +17 -15
- package/features/redirects/MoveRedirect/events.js.map +1 -1
- package/features/redirects/MoveRedirect/feature.d.ts +4 -1
- package/features/redirects/MoveRedirect/feature.js +7 -6
- package/features/redirects/MoveRedirect/feature.js.map +1 -1
- package/features/redirects/MoveRedirect/index.d.ts +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.d.ts +4 -2
- package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js +47 -45
- package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js.map +1 -1
- package/features/redirects/UpdateRedirect/abstractions.d.ts +11 -7
- package/features/redirects/UpdateRedirect/abstractions.js +5 -27
- package/features/redirects/UpdateRedirect/abstractions.js.map +1 -1
- package/features/redirects/UpdateRedirect/events.d.ts +3 -3
- package/features/redirects/UpdateRedirect/events.js +17 -15
- package/features/redirects/UpdateRedirect/events.js.map +1 -1
- package/features/redirects/UpdateRedirect/feature.d.ts +4 -1
- package/features/redirects/UpdateRedirect/feature.js +7 -6
- package/features/redirects/UpdateRedirect/feature.js.map +1 -1
- package/features/redirects/UpdateRedirect/index.d.ts +1 -1
- package/features/redirects/UpdateRedirect/index.js +1 -3
- package/features/tenantManager/TenantModelExtension.js +52 -32
- package/features/tenantManager/TenantModelExtension.js.map +1 -1
- package/features/tenantManager/feature.d.ts +4 -1
- package/features/tenantManager/feature.js +6 -5
- package/features/tenantManager/feature.js.map +1 -1
- package/features/webhooks/WbWebhookEventProvider.d.ts +8 -0
- package/features/webhooks/WbWebhookEventProvider.js +95 -0
- package/features/webhooks/WbWebhookEventProvider.js.map +1 -0
- package/features/webhooks/constants.d.ts +12 -0
- package/features/webhooks/constants.js +16 -0
- package/features/webhooks/constants.js.map +1 -0
- package/features/webhooks/feature.d.ts +4 -0
- package/features/webhooks/feature.js +31 -0
- package/features/webhooks/feature.js.map +1 -0
- package/features/webhooks/handlers/OnPageCreatedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnPageCreatedHandler.js +22 -0
- package/features/webhooks/handlers/OnPageCreatedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnPageDeletedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnPageDeletedHandler.js +22 -0
- package/features/webhooks/handlers/OnPageDeletedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnPagePublishedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnPagePublishedHandler.js +22 -0
- package/features/webhooks/handlers/OnPagePublishedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnPageRestoredHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnPageRestoredHandler.js +22 -0
- package/features/webhooks/handlers/OnPageRestoredHandler.js.map +1 -0
- package/features/webhooks/handlers/OnPageTrashedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnPageTrashedHandler.js +22 -0
- package/features/webhooks/handlers/OnPageTrashedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnPageUnpublishedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnPageUnpublishedHandler.js +22 -0
- package/features/webhooks/handlers/OnPageUnpublishedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnPageUpdatedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnPageUpdatedHandler.js +23 -0
- package/features/webhooks/handlers/OnPageUpdatedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnRedirectCreatedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnRedirectCreatedHandler.js +22 -0
- package/features/webhooks/handlers/OnRedirectCreatedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnRedirectDeletedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnRedirectDeletedHandler.js +22 -0
- package/features/webhooks/handlers/OnRedirectDeletedHandler.js.map +1 -0
- package/features/webhooks/handlers/OnRedirectUpdatedHandler.d.ts +11 -0
- package/features/webhooks/handlers/OnRedirectUpdatedHandler.js +23 -0
- package/features/webhooks/handlers/OnRedirectUpdatedHandler.js.map +1 -0
- 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 +226 -254
- package/graphql/pages/pages.gql.js.map +1 -1
- package/graphql/pages/pages.typeDefs.d.ts +1 -1
- package/graphql/pages/pages.typeDefs.js +24 -2
- 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.d.ts +1 -1
- package/index.js +73 -55
- package/index.js.map +1 -1
- package/package.json +30 -27
- 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/GetPageById/index.js.map +0 -1
- package/features/pages/GetPageByPath/index.js.map +0 -1
- package/features/pages/GetPageRevisions/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/PagePermissions/feature.d.ts +0 -1
- package/features/pages/PagePermissions/feature.js +0 -53
- package/features/pages/PagePermissions/feature.js.map +0 -1
- package/features/pages/PublishPage/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/RedirectPermissions/feature.d.ts +0 -1
- package/features/redirects/RedirectPermissions/feature.js +0 -45
- package/features/redirects/RedirectPermissions/feature.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":";;AAGAA,SAAS,0BAA0B;IAC/B,IAAIC;IAEJC,WAAW;QACPD,UAAU,IAAIE;IAClB;IAEAH,SAAS,OAAO;QACZI,GAAG,6CAA6C;YAC5CH,QAAQ,GAAG,CAAC,YAAY,iBAAiB,GAAG,CAAC,YAAY;YAEzDI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,0CAA0C;YACzCH,QACK,GAAG,CAAC,YAAY,SAChB,GAAG,CAAC,YAAY,UAChB,GAAG,CAAC,kBAAkB,UAAU;gBAAE,QAAQ;YAAW;YAE1DI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,yCAAyC;YACxCH,QACK,GAAG,CAAC,YAAY,SAChB,GAAG,CAAC,YAAY,UAChB,GAAG,CAAC,kBAAkB,UAAU;gBAAE,OAAO;YAAW;YAEzDI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,+CAA+C;YAC9CH,QAAQ,GAAG,CAAC,YAAY,SAAS,GAAG,CAAC,YAAY,UAAU;gBAAE,QAAQ;YAAe;YAEpFI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,8CAA8C;YAC7CH,QAAQ,GAAG,CAAC,YAAY,SAAS,GAAG,CAAC,YAAY,UAAU;gBAAE,OAAO;YAAe;YAEnFI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;IACJ;IAEAD,SAAS,UAAU;QACfI,GAAG,+BAA+B;YAC9BH,QACK,GAAG,CAAC,YAAY,SAChB,GAAG,CAAC,YAAY,UAChB,GAAG,CAAC,YAAY,SAChB,MAAM,CAAC;YAEZI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,qDAAqD;YACpDH,QAAQ,GAAG,CAAC,YAAY,SAAS,MAAM,CAAC;YAExCI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,6CAA6C;YAC5CH,QAAQ,MAAM,CAAC;YACfI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;IACJ;IAEAD,SAAS,WAAW;QAChBI,GAAG,8CAA8C;YAC7CH,QAAQ,GAAG,CAAC,YAAY,oBAAoB,OAAO,CAAC,YAAY;YAEhEI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,gDAAgD;YAC/CH,QACK,GAAG,CAAC,YAAY,oBAChB,OAAO,CAAC,YAAYK,CAAAA,UAAWA,QAAQ,WAAW;YAEvDD,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,2CAA2C;YAC1CH,QAAQ,GAAG,CAAC,YAAY,SAAS,OAAO,CAAC,YAAYK,CAAAA,UAAW,GAAGA,QAAQ,MAAM,CAAC;YAElFD,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,kDAAkD;YACjDH,QACK,GAAG,CAAC,QAAQ,6BACZ,OAAO,CAAC,QAAQK,CAAAA,UAAWA,QAAQ,OAAO,CAAC,QAAQ;YAExDD,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,iDAAiD;YAChDH,QAAQ,GAAG,CAAC,YAAY,YAAY,OAAO,CAAC,YAAY,IAAM;YAE9DI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,oEAAoE;YACnEH,QACK,GAAG,CAAC,YAAY,SAChB,OAAO,CAAC,gBAAgBK,CAAAA,UAAWA,UAAU;YAElDD,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,iEAAiE;YAChEH,QACK,GAAG,CAAC,YAAY,SAChB,GAAG,CAAC,YAAY,UAChB,GAAG,CAAC,YAAY,SAChB,OAAO,CAAC,YAAYK,CAAAA,UAAWA,QAAQ,WAAW;YAEvDD,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;IACJ;IAEAD,SAAS,oCAAoC;QACzCI,GAAG,yDAAyD;YACxDH,QACK,WAAW,CAAC,WAAW,aACvB,GAAG,CAAC,YAAY,kBAChB,GAAG,CAAC,QAAQ;YAGjBA,QAAQ,OAAO,CAAC,QAAQK,CAAAA,UACb,CAAC,+CAA+C,EAAEA,SAAS;YAGtE,MAAMC,SAASN,QAAQ,KAAK;YAC5BI,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,SAAS,CAAC;QAC7B;QAEAH,GAAG,4CAA4C;YAC3CH,QACK,GAAG,CAAC,QAAQ,eACZ,OAAO,CAAC,QAAQO,CAAAA,IAAKA,EAAE,WAAW,IAClC,OAAO,CAAC,QAAQA,CAAAA,IAAK,CAAC,EAAE,EAAEA,EAAE,EAAE,CAAC,EAC/B,OAAO,CAAC,QAAQA,CAAAA,IAAK,GAAGA,EAAE,GAAG,CAAC;YAEnCH,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;IACJ;IAEAD,SAAS,aAAa;QAClBI,GAAG,6CAA6C;YAC5CH,QACK,WAAW,CAAC,WAAW,aACvB,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,gDAAgD;YAC/CH,QACK,YAAY,CAAC;gBACV,SAAS;gBACT,MAAM;gBACN,QAAQ;YACZ,GACC,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CACxB;QAER;QAEAG,GAAG,oDAAoD;YACnDH,QACK,WAAW,CAAC,WAAW,aACvB,GAAG,CAAC,YAAY,wBAChB,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,qDAAqD;YACpDH,QACK,YAAY,CAAC;gBACV,SAAS;gBACT,MAAM;YACV,GACC,GAAG,CAAC,QAAQ;YAEjBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CACxB;QAER;QAEAG,GAAG,8CAA8C;YAC7CH,QACK,WAAW,CAAC,WAAW,aACvB,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,yDAAyD;YACxDH,QACK,WAAW,CAAC,YAAY,UACxB,WAAW,CAAC,YAAY,UACxB,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,6BAA6B;YAC5BH,QAAQ,WAAW,CAAC,WAAW;YAC/BI,OAAOJ,QAAQ,WAAW,CAAC,YAAY,IAAI,CAAC;QAChD;QAEAG,GAAG,qDAAqD;YACpDC,OAAOJ,QAAQ,WAAW,CAAC,iBAAiB,aAAa;QAC7D;QAEAG,GAAG,oDAAoD;YACnDH,QACK,WAAW,CAAC,WAAW,aACvB,WAAW,CAAC,WAAW,aACvB,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,uDAAuD;YACtDH,QAAQ,WAAW,CAAC,QAAQ,QAAQ,GAAG,CAAC,YAAY;YAEpDI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;IACJ;IAEAD,SAAS,SAAS;QACdI,GAAG,wCAAwC;YACvCH,QAAQ,GAAG,CAAC,YAAY,SAAS,GAAG,CAAC,YAAY;YAEjDI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,+BAA+B;YAC9BH,QAAQ,GAAG,CAAC,YAAY,SAAS,GAAG,CAAC,YAAY;YAEjDI,OAAOJ,QAAQ,KAAK,CAAC,SAAS,IAAI,CAAC;QACvC;QAEAG,GAAG,gDAAgD;YAC/CC,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,gCAAgC;YAC/BH,QAAQ,GAAG,CAAC,YAAY;YACxBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;IACJ;IAEAD,SAAS,mBAAmB;QACxBI,GAAG,mCAAmC;YAClC,MAAMG,SAASN,QACV,WAAW,CAAC,QAAQ,QACpB,GAAG,CAAC,YAAY,gBAChB,GAAG,CAAC,YAAY,UAChB,MAAM,CAAC,YACP,GAAG,CAAC,YAAY,SAChB,OAAO,CAAC,YAAY,YACpB,KAAK;YAEVI,OAAOE,QAAQ,IAAI,CAAC;QACxB;IACJ;IAEAP,SAAS,qBAAqB;QAC1BI,GAAG,wCAAwC;YACvC,MAAMG,SAASN,QACV,YAAY,CAAC;gBACV,SAAS;gBACT,UAAU;gBACV,QAAQ;YACZ,GACC,GAAG,CAAC,eAAe,+DACnB,GAAG,CACA,YACA,iKAEH,KAAK;YAEVI,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,SAAS,CAAC;QAC7B;QAEAH,GAAG,4CAA4C;YAE3CH,QAAQ,WAAW,CAAC,WAAW,gBAAgB,GAAG,CAAC,YAAY;YAG/DA,QACK,WAAW,CAAC,WAAW,cACvB,GAAG,CAAC,kBAAkB,8BAA8B;gBAAE,OAAO;YAAW;YAE7E,MAAMM,SAASN,QAAQ,KAAK;YAC5BI,OAAOE,QAAQ,IAAI,CAAC;QACxB;IACJ;IAEAP,SAAS,+BAA+B;QACpCI,GAAG,+CAA+C;YAC9CH,QACK,YAAY,CAAC;gBACV,MAAM;gBACN,aAAa;YACjB,GACC,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,qDAAqD;YACpDH,QACK,YAAY,CAAC;gBACV,UAAU;gBACV,UAAU;gBACV,eAAe;YACnB,GACC,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,yCAAyC;YACxCH,QACK,YAAY,CAAC;gBACV,kBAAkB;gBAClB,aACI;YACR,GACC,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CACxB;QAER;QAEAG,GAAG,sDAAsD;YACrDH,QACK,YAAY,CAAC;gBACV,aACI;gBACJ,kBAAkB;gBAClB,WAAW;gBACX,UAAU;gBACV,YAAY;gBACZ,WAAW;YACf,GACC,GAAG,CAAC,eAAe;YAExB,MAAMM,SAASN,QAAQ,KAAK;YAC5BI,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,GAAG,CAAC,SAAS,CAAC;QACjC;QAEAH,GAAG,0EAA0E;YACzEH,QACK,YAAY,CAAC;gBACV,MAAM;gBACN,UAAU;YACd,GACC,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,0CAA0C;YACzCH,QACK,YAAY,CAAC;gBACV,SAAS;gBACT,SAAS;gBACT,SAAS;gBACT,SAAS;YACb,GACC,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,gDAAgD;YAC/C,MAAMK,aAAaC,GAAG,KAAK,CAACC,SAAS,QAAQ,kBAAkB,CAAC,KAAO;YAEvEV,QACK,YAAY,CAAC;gBACV,OAAO;gBACP,OAAO;YACX,GACC,GAAG,CAAC,YAAY;YAErBA,QAAQ,KAAK;YAEbI,OAAOI,YAAY,oBAAoB,CACnCJ,OAAO,gBAAgB,CAAC;YAG5BI,WAAW,WAAW;QAC1B;QAEAL,GAAG,2DAA2D;YAC1DH,QACK,YAAY,CAAC;gBACV,SAAS;gBACT,eAAe;YACnB,GACC,GAAG,CAAC,YAAY;YAErBI,OAAOJ,QAAQ,KAAK,IAAI,IAAI,CAAC;QACjC;QAEAG,GAAG,oDAAoD;YACnDH,QACK,YAAY,CAAC;gBACV,SAAS;gBACT,MAAM;gBACN,QAAQ;YACZ,GACC,GAAG,CAAC,YAAY;YAErB,MAAMM,SAASN,QAAQ,KAAK;YAC5BI,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,SAAS,CAAC;YACzBF,OAAOE,QAAQ,SAAS,CAAC;QAC7B;IACJ;AACJ"}
|
|
@@ -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"}
|
|
@@ -2,6 +2,7 @@ import type { IMarkdownContentBuilder } from "../../features/nextjs/MarkdownCont
|
|
|
2
2
|
export interface INextjsConfig {
|
|
3
3
|
execute(): Promise<IMarkdownContentBuilder>;
|
|
4
4
|
}
|
|
5
|
+
/** Configuration for Next.js website rendering. */
|
|
5
6
|
export declare const NextjsConfig: import("@webiny/di").Abstraction<INextjsConfig>;
|
|
6
7
|
export declare namespace NextjsConfig {
|
|
7
8
|
type Interface = INextjsConfig;
|
|
@@ -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,9 +1,11 @@
|
|
|
1
|
-
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/
|
|
1
|
+
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
2
|
import { CreatePageUseCase as UseCaseAbstraction, CreatePageRepository } from "./abstractions.js";
|
|
3
|
+
import { WbPermissions } from "../../../features/permissions/abstractions.js";
|
|
3
4
|
declare class CreatePageUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
5
|
+
private permissions;
|
|
4
6
|
private eventPublisher;
|
|
5
7
|
private repository;
|
|
6
|
-
constructor(eventPublisher: EventPublisherAbstraction.Interface, repository: CreatePageRepository.Interface);
|
|
8
|
+
constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, repository: CreatePageRepository.Interface);
|
|
7
9
|
execute(data: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
|
|
8
10
|
}
|
|
9
11
|
export declare const CreatePageUseCase: typeof CreatePageUseCaseImpl & {
|
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
|
+
import { CreatePageRepository, CreatePageUseCase } from "./abstractions.js";
|
|
4
|
+
import { PageAfterCreateEvent, PageBeforeCreateEvent } from "./events.js";
|
|
5
|
+
import { WbPermissions } from "../../permissions/abstractions.js";
|
|
6
|
+
import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
5
7
|
class CreatePageUseCaseImpl {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
8
|
+
constructor(permissions, eventPublisher, repository){
|
|
9
|
+
this.permissions = permissions;
|
|
10
|
+
this.eventPublisher = eventPublisher;
|
|
11
|
+
this.repository = repository;
|
|
12
|
+
}
|
|
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);
|
|
21
28
|
}
|
|
22
|
-
const page = result.value;
|
|
23
|
-
|
|
24
|
-
// Publish after create event
|
|
25
|
-
const afterCreateEvent = new PageAfterCreateEvent({
|
|
26
|
-
page
|
|
27
|
-
});
|
|
28
|
-
await this.eventPublisher.publish(afterCreateEvent);
|
|
29
|
-
return Result.ok(page);
|
|
30
|
-
}
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
const CreatePageUseCase_CreatePageUseCase = CreatePageUseCase.createImplementation({
|
|
31
|
+
implementation: CreatePageUseCaseImpl,
|
|
32
|
+
dependencies: [
|
|
33
|
+
WbPermissions,
|
|
34
|
+
EventPublisher,
|
|
35
|
+
CreatePageRepository
|
|
36
|
+
]
|
|
35
37
|
});
|
|
38
|
+
export { CreatePageUseCase_CreatePageUseCase as CreatePageUseCase };
|
|
36
39
|
|
|
37
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,7 +1,7 @@
|
|
|
1
1
|
import { type Result } from "@webiny/feature/api";
|
|
2
|
-
import type { DomainEvent, IEventHandler } from "@webiny/api-core/features/
|
|
2
|
+
import type { DomainEvent, IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import type { WbPage } from "../../../domain/page/abstractions.js";
|
|
4
|
-
import { PagePersistenceError, PageValidationError } from "../../../domain/page/errors.js";
|
|
4
|
+
import { PagePersistenceError, PageValidationError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
5
5
|
export type ICreateWbPageParams = Pick<WbPage, "properties" | "metadata" | "bindings" | "elements" | "location" | "extensions">;
|
|
6
6
|
export interface ICreatePageRepository {
|
|
7
7
|
execute(data: ICreateWbPageParams): Promise<Result<WbPage, RepositoryError>>;
|
|
@@ -22,10 +22,12 @@ export interface ICreatePageUseCase {
|
|
|
22
22
|
execute(data: ICreateWbPageParams): Promise<Result<WbPage, UseCaseError>>;
|
|
23
23
|
}
|
|
24
24
|
export interface ICreatePageUseCaseErrors {
|
|
25
|
+
notAuthorized: PageNotAuthorizedError;
|
|
25
26
|
validation: PageValidationError;
|
|
26
27
|
persistence: PagePersistenceError;
|
|
27
28
|
}
|
|
28
29
|
type UseCaseError = ICreatePageUseCaseErrors[keyof ICreatePageUseCaseErrors];
|
|
30
|
+
/** Create a new page. */
|
|
29
31
|
export declare const CreatePageUseCase: import("@webiny/di").Abstraction<ICreatePageUseCase>;
|
|
30
32
|
export declare namespace CreatePageUseCase {
|
|
31
33
|
type Interface = ICreatePageUseCase;
|
|
@@ -40,14 +42,16 @@ export interface PageBeforeCreatePayload {
|
|
|
40
42
|
export interface PageAfterCreatePayload {
|
|
41
43
|
page: WbPage;
|
|
42
44
|
}
|
|
43
|
-
|
|
44
|
-
export declare
|
|
45
|
+
/** Hook into page lifecycle before a page is created. */
|
|
46
|
+
export declare const PageBeforeCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeCreatePayload>>>;
|
|
47
|
+
export declare namespace PageBeforeCreateEventHandler {
|
|
45
48
|
type Interface = IEventHandler<DomainEvent<PageBeforeCreatePayload>>;
|
|
46
49
|
type Event = DomainEvent<PageBeforeCreatePayload>;
|
|
47
50
|
type Page = WbPage;
|
|
48
51
|
}
|
|
49
|
-
|
|
50
|
-
export declare
|
|
52
|
+
/** Hook into page lifecycle after a page is created. */
|
|
53
|
+
export declare const PageAfterCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterCreatePayload>>>;
|
|
54
|
+
export declare namespace PageAfterCreateEventHandler {
|
|
51
55
|
type Interface = IEventHandler<DomainEvent<PageAfterCreatePayload>>;
|
|
52
56
|
type Event = DomainEvent<PageAfterCreatePayload>;
|
|
53
57
|
type Page = WbPage;
|