@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,278 +1,271 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
2
|
import { MarkdownContentBuilder } from "./MarkdownContentBuilder.js";
|
|
3
|
-
describe("MarkdownContentBuilder", ()
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
describe("MarkdownContentBuilder", ()=>{
|
|
4
|
+
let builder;
|
|
5
|
+
beforeEach(()=>{
|
|
6
|
+
builder = new MarkdownContentBuilder();
|
|
7
|
+
});
|
|
8
|
+
describe("add", ()=>{
|
|
9
|
+
it("should add sections to the end by default", ()=>{
|
|
10
|
+
builder.add("section1", "First section").add("section2", "Second section");
|
|
11
|
+
expect(builder.build()).toBe("First section\nSecond section");
|
|
12
|
+
});
|
|
13
|
+
it("should add section before specified id", ()=>{
|
|
14
|
+
builder.add("section1", "First").add("section2", "Second").add("section-middle", "Middle", {
|
|
15
|
+
before: "section2"
|
|
16
|
+
});
|
|
17
|
+
expect(builder.build()).toBe("First\nMiddle\nSecond");
|
|
18
|
+
});
|
|
19
|
+
it("should add section after specified id", ()=>{
|
|
20
|
+
builder.add("section1", "First").add("section2", "Second").add("section-middle", "Middle", {
|
|
21
|
+
after: "section1"
|
|
22
|
+
});
|
|
23
|
+
expect(builder.build()).toBe("First\nMiddle\nSecond");
|
|
24
|
+
});
|
|
25
|
+
it("should append to end if before id not found", ()=>{
|
|
26
|
+
builder.add("section1", "First").add("section2", "Second", {
|
|
27
|
+
before: "non-existent"
|
|
28
|
+
});
|
|
29
|
+
expect(builder.build()).toBe("First\nSecond");
|
|
30
|
+
});
|
|
31
|
+
it("should append to end if after id not found", ()=>{
|
|
32
|
+
builder.add("section1", "First").add("section2", "Second", {
|
|
33
|
+
after: "non-existent"
|
|
34
|
+
});
|
|
35
|
+
expect(builder.build()).toBe("First\nSecond");
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe("remove", ()=>{
|
|
39
|
+
it("should remove section by id", ()=>{
|
|
40
|
+
builder.add("section1", "First").add("section2", "Second").add("section3", "Third").remove("section2");
|
|
41
|
+
expect(builder.build()).toBe("First\nThird");
|
|
42
|
+
});
|
|
43
|
+
it("should handle removing non-existent id gracefully", ()=>{
|
|
44
|
+
builder.add("section1", "First").remove("non-existent");
|
|
45
|
+
expect(builder.build()).toBe("First");
|
|
46
|
+
});
|
|
47
|
+
it("should handle removing from empty builder", ()=>{
|
|
48
|
+
builder.remove("section1");
|
|
49
|
+
expect(builder.build()).toBe("");
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe("replace", ()=>{
|
|
53
|
+
it("should replace section content with string", ()=>{
|
|
54
|
+
builder.add("section1", "Original content").replace("section1", "Replaced content");
|
|
55
|
+
expect(builder.build()).toBe("Replaced content");
|
|
56
|
+
});
|
|
57
|
+
it("should replace section content with callback", ()=>{
|
|
58
|
+
builder.add("section1", "Original content").replace("section1", (current)=>current.toUpperCase());
|
|
59
|
+
expect(builder.build()).toBe("ORIGINAL CONTENT");
|
|
60
|
+
});
|
|
61
|
+
it("should pass current content to callback", ()=>{
|
|
62
|
+
builder.add("section1", "Hello").replace("section1", (current)=>`${current} World`);
|
|
63
|
+
expect(builder.build()).toBe("Hello World");
|
|
64
|
+
});
|
|
65
|
+
it("should handle callback that transforms content", ()=>{
|
|
66
|
+
builder.add("code", '```bash\necho "test"\n```').replace("code", (current)=>current.replace("bash", "javascript"));
|
|
67
|
+
expect(builder.build()).toBe('```javascript\necho "test"\n```');
|
|
68
|
+
});
|
|
69
|
+
it("should handle callback returning empty string", ()=>{
|
|
70
|
+
builder.add("section1", "Original").replace("section1", ()=>"");
|
|
71
|
+
expect(builder.build()).toBe("");
|
|
72
|
+
});
|
|
73
|
+
it("should handle replacing non-existent id with callback gracefully", ()=>{
|
|
74
|
+
builder.add("section1", "First").replace("non-existent", (current)=>current + " modified");
|
|
75
|
+
expect(builder.build()).toBe("First");
|
|
76
|
+
});
|
|
77
|
+
it("should maintain section position when replacing with callback", ()=>{
|
|
78
|
+
builder.add("section1", "First").add("section2", "Second").add("section3", "Third").replace("section2", (current)=>current.toUpperCase());
|
|
79
|
+
expect(builder.build()).toBe("First\nSECOND\nThird");
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe("complex scenarios with callbacks", ()=>{
|
|
83
|
+
it("should support plugin decoration with transformations", ()=>{
|
|
84
|
+
builder.setVariable("API_KEY", "wat_12345").add("section1", "Key: {API_KEY}").add("code", "```bash\nAPI_KEY={API_KEY}\n```");
|
|
85
|
+
builder.replace("code", (current)=>`⚠️ **Security Warning**: Keep this private!\n\n${current}`);
|
|
86
|
+
const result = builder.build();
|
|
87
|
+
expect(result).toContain("Security Warning");
|
|
88
|
+
expect(result).toContain("```bash");
|
|
89
|
+
});
|
|
90
|
+
it("should chain multiple replace operations", ()=>{
|
|
91
|
+
builder.add("text", "hello world").replace("text", (s)=>s.toUpperCase()).replace("text", (s)=>`**${s}**`).replace("text", (s)=>`${s}!!!`);
|
|
92
|
+
expect(builder.build()).toBe("**HELLO WORLD**!!!");
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe("variables", ()=>{
|
|
96
|
+
it("should set and substitute single variable", ()=>{
|
|
97
|
+
builder.setVariable("API_KEY", "wat_12345").add("section1", "Your API key is {API_KEY}");
|
|
98
|
+
expect(builder.build()).toBe("Your API key is wat_12345");
|
|
99
|
+
});
|
|
100
|
+
it("should set and substitute multiple variables", ()=>{
|
|
101
|
+
builder.setVariables({
|
|
102
|
+
API_KEY: "wat_12345",
|
|
103
|
+
HOST: "https://api.example.com",
|
|
104
|
+
TENANT: "root"
|
|
105
|
+
}).add("section1", "Key: {API_KEY}, Host: {HOST}, Tenant: {TENANT}");
|
|
106
|
+
expect(builder.build()).toBe("Key: wat_12345, Host: https://api.example.com, Tenant: root");
|
|
107
|
+
});
|
|
108
|
+
it("should substitute variables in multiple sections", ()=>{
|
|
109
|
+
builder.setVariable("API_KEY", "wat_12345").add("section1", "Section 1: {API_KEY}").add("section2", "Section 2: {API_KEY}");
|
|
110
|
+
expect(builder.build()).toBe("Section 1: wat_12345\nSection 2: wat_12345");
|
|
111
|
+
});
|
|
112
|
+
it("should handle variable replacement in code blocks", ()=>{
|
|
113
|
+
builder.setVariables({
|
|
114
|
+
API_KEY: "wat_12345",
|
|
115
|
+
HOST: "https://api.example.com"
|
|
116
|
+
}).add("code", "```bash\nAPI_KEY={API_KEY}\nHOST={HOST}\n```");
|
|
117
|
+
expect(builder.build()).toBe("```bash\nAPI_KEY=wat_12345\nHOST=https://api.example.com\n```");
|
|
118
|
+
});
|
|
119
|
+
it("should leave unmatched variables unchanged", ()=>{
|
|
120
|
+
builder.setVariable("API_KEY", "wat_12345").add("section1", "Key: {API_KEY}, Unknown: {UNKNOWN}");
|
|
121
|
+
expect(builder.build()).toBe("Key: wat_12345, Unknown: {UNKNOWN}");
|
|
122
|
+
});
|
|
123
|
+
it("should handle variables with special regex characters", ()=>{
|
|
124
|
+
builder.setVariable("VAR.NAME", "value1").setVariable("VAR$NAME", "value2").add("section1", "{VAR.NAME} and {VAR$NAME}");
|
|
125
|
+
expect(builder.build()).toBe("value1 and value2");
|
|
126
|
+
});
|
|
127
|
+
it("should get variable value", ()=>{
|
|
128
|
+
builder.setVariable("API_KEY", "wat_12345");
|
|
129
|
+
expect(builder.getVariable("API_KEY")).toBe("wat_12345");
|
|
130
|
+
});
|
|
131
|
+
it("should return undefined for non-existent variable", ()=>{
|
|
132
|
+
expect(builder.getVariable("NON_EXISTENT")).toBeUndefined();
|
|
133
|
+
});
|
|
134
|
+
it("should override variable when set multiple times", ()=>{
|
|
135
|
+
builder.setVariable("API_KEY", "old_value").setVariable("API_KEY", "new_value").add("section1", "{API_KEY}");
|
|
136
|
+
expect(builder.build()).toBe("new_value");
|
|
137
|
+
});
|
|
138
|
+
it("should handle multiple occurrences of same variable", ()=>{
|
|
139
|
+
builder.setVariable("NAME", "John").add("section1", "Hello {NAME}, welcome {NAME}!");
|
|
140
|
+
expect(builder.build()).toBe("Hello John, welcome John!");
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe("build", ()=>{
|
|
144
|
+
it("should use default newline separator", ()=>{
|
|
145
|
+
builder.add("section1", "First").add("section2", "Second");
|
|
146
|
+
expect(builder.build()).toBe("First\nSecond");
|
|
147
|
+
});
|
|
148
|
+
it("should use custom separator", ()=>{
|
|
149
|
+
builder.add("section1", "First").add("section2", "Second");
|
|
150
|
+
expect(builder.build("\n\n")).toBe("First\n\nSecond");
|
|
151
|
+
});
|
|
152
|
+
it("should return empty string for empty builder", ()=>{
|
|
153
|
+
expect(builder.build()).toBe("");
|
|
154
|
+
});
|
|
155
|
+
it("should handle single section", ()=>{
|
|
156
|
+
builder.add("section1", "Only section");
|
|
157
|
+
expect(builder.build()).toBe("Only section");
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe("method chaining", ()=>{
|
|
161
|
+
it("should support fluent interface", ()=>{
|
|
162
|
+
const result = builder.setVariable("NAME", "Test").add("section1", "Hello {NAME}").add("section2", "Second").remove("section2").add("section3", "Third").replace("section3", "Replaced").build();
|
|
163
|
+
expect(result).toBe("Hello Test\nReplaced");
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe("complex scenarios", ()=>{
|
|
167
|
+
it("should handle Next.js config example", ()=>{
|
|
168
|
+
const result = builder.setVariables({
|
|
169
|
+
API_KEY: "wat_12345678",
|
|
170
|
+
API_HOST: "https://example.cloudfront.net",
|
|
171
|
+
TENANT: "root"
|
|
172
|
+
}).add("description", "This is a configuration for **Webiny Next.js starter kit**:").add("env-vars", "```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```").build();
|
|
173
|
+
expect(result).toContain("wat_12345678");
|
|
174
|
+
expect(result).toContain("https://example.cloudfront.net");
|
|
175
|
+
expect(result).toContain("root");
|
|
176
|
+
expect(result).toContain("Webiny Next.js starter kit");
|
|
177
|
+
});
|
|
178
|
+
it("should support plugin decoration pattern", ()=>{
|
|
179
|
+
builder.setVariable("API_KEY", "original_key").add("section1", "Key: {API_KEY}");
|
|
180
|
+
builder.setVariable("API_KEY", "plugin_key").add("plugin-section", "Added by plugin: {API_KEY}", {
|
|
181
|
+
after: "section1"
|
|
182
|
+
});
|
|
183
|
+
const result = builder.build();
|
|
184
|
+
expect(result).toBe("Key: plugin_key\nAdded by plugin: plugin_key");
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe("deep variable interpolation", ()=>{
|
|
188
|
+
it("should handle single level nested variables", ()=>{
|
|
189
|
+
builder.setVariables({
|
|
190
|
+
LINK: "https://example.com",
|
|
191
|
+
DESCRIPTION: "Visit {LINK} for more info"
|
|
192
|
+
}).add("section1", "{DESCRIPTION}");
|
|
193
|
+
expect(builder.build()).toBe("Visit https://example.com for more info");
|
|
194
|
+
});
|
|
195
|
+
it("should handle multiple levels of nested variables", ()=>{
|
|
196
|
+
builder.setVariables({
|
|
197
|
+
BASE_URL: "https://example.com",
|
|
198
|
+
API_PATH: "{BASE_URL}/api",
|
|
199
|
+
FULL_ENDPOINT: "{API_PATH}/v1/users"
|
|
200
|
+
}).add("section1", "Endpoint: {FULL_ENDPOINT}");
|
|
201
|
+
expect(builder.build()).toBe("Endpoint: https://example.com/api/v1/users");
|
|
202
|
+
});
|
|
203
|
+
it("should handle variables in HTML links", ()=>{
|
|
204
|
+
builder.setVariables({
|
|
205
|
+
STARTER_KIT_LINK: "https://github.com/webiny/website-builder-nextjs",
|
|
206
|
+
DESCRIPTION: '<a href="{STARTER_KIT_LINK}" target="_blank">Webiny Next.js starter kit</a>'
|
|
207
|
+
}).add("section1", "{DESCRIPTION}");
|
|
208
|
+
expect(builder.build()).toBe('<a href="https://github.com/webiny/website-builder-nextjs" target="_blank">Webiny Next.js starter kit</a>');
|
|
209
|
+
});
|
|
210
|
+
it("should handle complex nested scenario from example", ()=>{
|
|
211
|
+
builder.setVariables({
|
|
212
|
+
DESCRIPTION: 'This is a configuration for <a href="{STARTER_KIT_LINK}" target="_blank">Webiny Next.js starter kit:</a>',
|
|
213
|
+
STARTER_KIT_LINK: "https://github.com/webiny/website-builder-nextjs",
|
|
214
|
+
API_TOKEN: "wat_12345",
|
|
215
|
+
API_HOST: "https://api.example.com",
|
|
216
|
+
ADMIN_HOST: "https://admin.example.com",
|
|
217
|
+
TENANT_ID: "root"
|
|
218
|
+
}).add("description", "{DESCRIPTION}");
|
|
219
|
+
const result = builder.build();
|
|
220
|
+
expect(result).toContain("https://github.com/webiny/website-builder-nextjs");
|
|
221
|
+
expect(result).toContain("Webiny Next.js starter kit");
|
|
222
|
+
expect(result).not.toContain("{STARTER_KIT_LINK}");
|
|
223
|
+
});
|
|
224
|
+
it("should handle variable that references another variable multiple times", ()=>{
|
|
225
|
+
builder.setVariables({
|
|
226
|
+
NAME: "John",
|
|
227
|
+
GREETING: "Hello {NAME}, welcome {NAME}!"
|
|
228
|
+
}).add("section1", "{GREETING}");
|
|
229
|
+
expect(builder.build()).toBe("Hello John, welcome John!");
|
|
230
|
+
});
|
|
231
|
+
it("should handle deep nesting (3+ levels)", ()=>{
|
|
232
|
+
builder.setVariables({
|
|
233
|
+
LEVEL_1: "base",
|
|
234
|
+
LEVEL_2: "{LEVEL_1}/path",
|
|
235
|
+
LEVEL_3: "{LEVEL_2}/more",
|
|
236
|
+
LEVEL_4: "{LEVEL_3}/final"
|
|
237
|
+
}).add("section1", "{LEVEL_4}");
|
|
238
|
+
expect(builder.build()).toBe("base/path/more/final");
|
|
239
|
+
});
|
|
240
|
+
it("should handle circular references gracefully", ()=>{
|
|
241
|
+
const consoleSpy = vi.spyOn(console, "warn").mockImplementation(()=>{});
|
|
242
|
+
builder.setVariables({
|
|
243
|
+
VAR_A: "Start {VAR_B}",
|
|
244
|
+
VAR_B: "{VAR_A} End"
|
|
245
|
+
}).add("section1", "{VAR_A}");
|
|
246
|
+
builder.build();
|
|
247
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Maximum interpolation depth reached"));
|
|
248
|
+
consoleSpy.mockRestore();
|
|
249
|
+
});
|
|
250
|
+
it("should stop at undefined variables and leave them as-is", ()=>{
|
|
251
|
+
builder.setVariables({
|
|
252
|
+
DEFINED: "value",
|
|
253
|
+
HAS_UNDEFINED: "{DEFINED} and {UNDEFINED}"
|
|
254
|
+
}).add("section1", "{HAS_UNDEFINED}");
|
|
255
|
+
expect(builder.build()).toBe("value and {UNDEFINED}");
|
|
256
|
+
});
|
|
257
|
+
it("should handle mixed defined and nested variables", ()=>{
|
|
258
|
+
builder.setVariables({
|
|
259
|
+
API_KEY: "key123",
|
|
260
|
+
HOST: "example.com",
|
|
261
|
+
CONFIG: "API_KEY={API_KEY}\nHOST={HOST}\nUNDEFINED={UNKNOWN}"
|
|
262
|
+
}).add("section1", "{CONFIG}");
|
|
263
|
+
const result = builder.build();
|
|
264
|
+
expect(result).toContain("API_KEY=key123");
|
|
265
|
+
expect(result).toContain("HOST=example.com");
|
|
266
|
+
expect(result).toContain("UNDEFINED={UNKNOWN}");
|
|
267
|
+
});
|
|
12
268
|
});
|
|
13
|
-
it("should add section before specified id", () => {
|
|
14
|
-
builder.add("section1", "First").add("section2", "Second").add("section-middle", "Middle", {
|
|
15
|
-
before: "section2"
|
|
16
|
-
});
|
|
17
|
-
expect(builder.build()).toBe("First\nMiddle\nSecond");
|
|
18
|
-
});
|
|
19
|
-
it("should add section after specified id", () => {
|
|
20
|
-
builder.add("section1", "First").add("section2", "Second").add("section-middle", "Middle", {
|
|
21
|
-
after: "section1"
|
|
22
|
-
});
|
|
23
|
-
expect(builder.build()).toBe("First\nMiddle\nSecond");
|
|
24
|
-
});
|
|
25
|
-
it("should append to end if before id not found", () => {
|
|
26
|
-
builder.add("section1", "First").add("section2", "Second", {
|
|
27
|
-
before: "non-existent"
|
|
28
|
-
});
|
|
29
|
-
expect(builder.build()).toBe("First\nSecond");
|
|
30
|
-
});
|
|
31
|
-
it("should append to end if after id not found", () => {
|
|
32
|
-
builder.add("section1", "First").add("section2", "Second", {
|
|
33
|
-
after: "non-existent"
|
|
34
|
-
});
|
|
35
|
-
expect(builder.build()).toBe("First\nSecond");
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
describe("remove", () => {
|
|
39
|
-
it("should remove section by id", () => {
|
|
40
|
-
builder.add("section1", "First").add("section2", "Second").add("section3", "Third").remove("section2");
|
|
41
|
-
expect(builder.build()).toBe("First\nThird");
|
|
42
|
-
});
|
|
43
|
-
it("should handle removing non-existent id gracefully", () => {
|
|
44
|
-
builder.add("section1", "First").remove("non-existent");
|
|
45
|
-
expect(builder.build()).toBe("First");
|
|
46
|
-
});
|
|
47
|
-
it("should handle removing from empty builder", () => {
|
|
48
|
-
builder.remove("section1");
|
|
49
|
-
expect(builder.build()).toBe("");
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
describe("replace", () => {
|
|
53
|
-
it("should replace section content with string", () => {
|
|
54
|
-
builder.add("section1", "Original content").replace("section1", "Replaced content");
|
|
55
|
-
expect(builder.build()).toBe("Replaced content");
|
|
56
|
-
});
|
|
57
|
-
it("should replace section content with callback", () => {
|
|
58
|
-
builder.add("section1", "Original content").replace("section1", current => current.toUpperCase());
|
|
59
|
-
expect(builder.build()).toBe("ORIGINAL CONTENT");
|
|
60
|
-
});
|
|
61
|
-
it("should pass current content to callback", () => {
|
|
62
|
-
builder.add("section1", "Hello").replace("section1", current => `${current} World`);
|
|
63
|
-
expect(builder.build()).toBe("Hello World");
|
|
64
|
-
});
|
|
65
|
-
it("should handle callback that transforms content", () => {
|
|
66
|
-
builder.add("code", '```bash\necho "test"\n```').replace("code", current => current.replace("bash", "javascript"));
|
|
67
|
-
expect(builder.build()).toBe('```javascript\necho "test"\n```');
|
|
68
|
-
});
|
|
69
|
-
it("should handle callback returning empty string", () => {
|
|
70
|
-
builder.add("section1", "Original").replace("section1", () => "");
|
|
71
|
-
expect(builder.build()).toBe("");
|
|
72
|
-
});
|
|
73
|
-
it("should handle replacing non-existent id with callback gracefully", () => {
|
|
74
|
-
builder.add("section1", "First").replace("non-existent", current => current + " modified");
|
|
75
|
-
expect(builder.build()).toBe("First");
|
|
76
|
-
});
|
|
77
|
-
it("should maintain section position when replacing with callback", () => {
|
|
78
|
-
builder.add("section1", "First").add("section2", "Second").add("section3", "Third").replace("section2", current => current.toUpperCase());
|
|
79
|
-
expect(builder.build()).toBe("First\nSECOND\nThird");
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
describe("complex scenarios with callbacks", () => {
|
|
83
|
-
it("should support plugin decoration with transformations", () => {
|
|
84
|
-
builder.setVariable("API_KEY", "wat_12345").add("section1", "Key: {API_KEY}").add("code", "```bash\nAPI_KEY={API_KEY}\n```");
|
|
85
|
-
|
|
86
|
-
// Plugin adds warning to code section
|
|
87
|
-
builder.replace("code", current => {
|
|
88
|
-
return `⚠️ **Security Warning**: Keep this private!\n\n${current}`;
|
|
89
|
-
});
|
|
90
|
-
const result = builder.build();
|
|
91
|
-
expect(result).toContain("Security Warning");
|
|
92
|
-
expect(result).toContain("```bash");
|
|
93
|
-
});
|
|
94
|
-
it("should chain multiple replace operations", () => {
|
|
95
|
-
builder.add("text", "hello world").replace("text", s => s.toUpperCase()).replace("text", s => `**${s}**`).replace("text", s => `${s}!!!`);
|
|
96
|
-
expect(builder.build()).toBe("**HELLO WORLD**!!!");
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
describe("variables", () => {
|
|
100
|
-
it("should set and substitute single variable", () => {
|
|
101
|
-
builder.setVariable("API_KEY", "wat_12345").add("section1", "Your API key is {API_KEY}");
|
|
102
|
-
expect(builder.build()).toBe("Your API key is wat_12345");
|
|
103
|
-
});
|
|
104
|
-
it("should set and substitute multiple variables", () => {
|
|
105
|
-
builder.setVariables({
|
|
106
|
-
API_KEY: "wat_12345",
|
|
107
|
-
HOST: "https://api.example.com",
|
|
108
|
-
TENANT: "root"
|
|
109
|
-
}).add("section1", "Key: {API_KEY}, Host: {HOST}, Tenant: {TENANT}");
|
|
110
|
-
expect(builder.build()).toBe("Key: wat_12345, Host: https://api.example.com, Tenant: root");
|
|
111
|
-
});
|
|
112
|
-
it("should substitute variables in multiple sections", () => {
|
|
113
|
-
builder.setVariable("API_KEY", "wat_12345").add("section1", "Section 1: {API_KEY}").add("section2", "Section 2: {API_KEY}");
|
|
114
|
-
expect(builder.build()).toBe("Section 1: wat_12345\nSection 2: wat_12345");
|
|
115
|
-
});
|
|
116
|
-
it("should handle variable replacement in code blocks", () => {
|
|
117
|
-
builder.setVariables({
|
|
118
|
-
API_KEY: "wat_12345",
|
|
119
|
-
HOST: "https://api.example.com"
|
|
120
|
-
}).add("code", "```bash\nAPI_KEY={API_KEY}\nHOST={HOST}\n```");
|
|
121
|
-
expect(builder.build()).toBe("```bash\nAPI_KEY=wat_12345\nHOST=https://api.example.com\n```");
|
|
122
|
-
});
|
|
123
|
-
it("should leave unmatched variables unchanged", () => {
|
|
124
|
-
builder.setVariable("API_KEY", "wat_12345").add("section1", "Key: {API_KEY}, Unknown: {UNKNOWN}");
|
|
125
|
-
expect(builder.build()).toBe("Key: wat_12345, Unknown: {UNKNOWN}");
|
|
126
|
-
});
|
|
127
|
-
it("should handle variables with special regex characters", () => {
|
|
128
|
-
builder.setVariable("VAR.NAME", "value1").setVariable("VAR$NAME", "value2").add("section1", "{VAR.NAME} and {VAR$NAME}");
|
|
129
|
-
expect(builder.build()).toBe("value1 and value2");
|
|
130
|
-
});
|
|
131
|
-
it("should get variable value", () => {
|
|
132
|
-
builder.setVariable("API_KEY", "wat_12345");
|
|
133
|
-
expect(builder.getVariable("API_KEY")).toBe("wat_12345");
|
|
134
|
-
});
|
|
135
|
-
it("should return undefined for non-existent variable", () => {
|
|
136
|
-
expect(builder.getVariable("NON_EXISTENT")).toBeUndefined();
|
|
137
|
-
});
|
|
138
|
-
it("should override variable when set multiple times", () => {
|
|
139
|
-
builder.setVariable("API_KEY", "old_value").setVariable("API_KEY", "new_value").add("section1", "{API_KEY}");
|
|
140
|
-
expect(builder.build()).toBe("new_value");
|
|
141
|
-
});
|
|
142
|
-
it("should handle multiple occurrences of same variable", () => {
|
|
143
|
-
builder.setVariable("NAME", "John").add("section1", "Hello {NAME}, welcome {NAME}!");
|
|
144
|
-
expect(builder.build()).toBe("Hello John, welcome John!");
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
describe("build", () => {
|
|
148
|
-
it("should use default newline separator", () => {
|
|
149
|
-
builder.add("section1", "First").add("section2", "Second");
|
|
150
|
-
expect(builder.build()).toBe("First\nSecond");
|
|
151
|
-
});
|
|
152
|
-
it("should use custom separator", () => {
|
|
153
|
-
builder.add("section1", "First").add("section2", "Second");
|
|
154
|
-
expect(builder.build("\n\n")).toBe("First\n\nSecond");
|
|
155
|
-
});
|
|
156
|
-
it("should return empty string for empty builder", () => {
|
|
157
|
-
expect(builder.build()).toBe("");
|
|
158
|
-
});
|
|
159
|
-
it("should handle single section", () => {
|
|
160
|
-
builder.add("section1", "Only section");
|
|
161
|
-
expect(builder.build()).toBe("Only section");
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
describe("method chaining", () => {
|
|
165
|
-
it("should support fluent interface", () => {
|
|
166
|
-
const result = builder.setVariable("NAME", "Test").add("section1", "Hello {NAME}").add("section2", "Second").remove("section2").add("section3", "Third").replace("section3", "Replaced").build();
|
|
167
|
-
expect(result).toBe("Hello Test\nReplaced");
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
describe("complex scenarios", () => {
|
|
171
|
-
it("should handle Next.js config example", () => {
|
|
172
|
-
const result = builder.setVariables({
|
|
173
|
-
API_KEY: "wat_12345678",
|
|
174
|
-
API_HOST: "https://example.cloudfront.net",
|
|
175
|
-
TENANT: "root"
|
|
176
|
-
}).add("description", "This is a configuration for **Webiny Next.js starter kit**:").add("env-vars", "```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```").build();
|
|
177
|
-
expect(result).toContain("wat_12345678");
|
|
178
|
-
expect(result).toContain("https://example.cloudfront.net");
|
|
179
|
-
expect(result).toContain("root");
|
|
180
|
-
expect(result).toContain("Webiny Next.js starter kit");
|
|
181
|
-
});
|
|
182
|
-
it("should support plugin decoration pattern", () => {
|
|
183
|
-
// Initial builder
|
|
184
|
-
builder.setVariable("API_KEY", "original_key").add("section1", "Key: {API_KEY}");
|
|
185
|
-
|
|
186
|
-
// Plugin modifies
|
|
187
|
-
builder.setVariable("API_KEY", "plugin_key").add("plugin-section", "Added by plugin: {API_KEY}", {
|
|
188
|
-
after: "section1"
|
|
189
|
-
});
|
|
190
|
-
const result = builder.build();
|
|
191
|
-
expect(result).toBe("Key: plugin_key\nAdded by plugin: plugin_key");
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
describe("deep variable interpolation", () => {
|
|
195
|
-
it("should handle single level nested variables", () => {
|
|
196
|
-
builder.setVariables({
|
|
197
|
-
LINK: "https://example.com",
|
|
198
|
-
DESCRIPTION: "Visit {LINK} for more info"
|
|
199
|
-
}).add("section1", "{DESCRIPTION}");
|
|
200
|
-
expect(builder.build()).toBe("Visit https://example.com for more info");
|
|
201
|
-
});
|
|
202
|
-
it("should handle multiple levels of nested variables", () => {
|
|
203
|
-
builder.setVariables({
|
|
204
|
-
BASE_URL: "https://example.com",
|
|
205
|
-
API_PATH: "{BASE_URL}/api",
|
|
206
|
-
FULL_ENDPOINT: "{API_PATH}/v1/users"
|
|
207
|
-
}).add("section1", "Endpoint: {FULL_ENDPOINT}");
|
|
208
|
-
expect(builder.build()).toBe("Endpoint: https://example.com/api/v1/users");
|
|
209
|
-
});
|
|
210
|
-
it("should handle variables in HTML links", () => {
|
|
211
|
-
builder.setVariables({
|
|
212
|
-
STARTER_KIT_LINK: "https://github.com/webiny/website-builder-nextjs",
|
|
213
|
-
DESCRIPTION: '<a href="{STARTER_KIT_LINK}" target="_blank">Webiny Next.js starter kit</a>'
|
|
214
|
-
}).add("section1", "{DESCRIPTION}");
|
|
215
|
-
expect(builder.build()).toBe('<a href="https://github.com/webiny/website-builder-nextjs" target="_blank">Webiny Next.js starter kit</a>');
|
|
216
|
-
});
|
|
217
|
-
it("should handle complex nested scenario from example", () => {
|
|
218
|
-
builder.setVariables({
|
|
219
|
-
DESCRIPTION: 'This is a configuration for <a href="{STARTER_KIT_LINK}" target="_blank">Webiny Next.js starter kit:</a>',
|
|
220
|
-
STARTER_KIT_LINK: "https://github.com/webiny/website-builder-nextjs",
|
|
221
|
-
API_TOKEN: "wat_12345",
|
|
222
|
-
API_HOST: "https://api.example.com",
|
|
223
|
-
ADMIN_HOST: "https://admin.example.com",
|
|
224
|
-
TENANT_ID: "root"
|
|
225
|
-
}).add("description", "{DESCRIPTION}");
|
|
226
|
-
const result = builder.build();
|
|
227
|
-
expect(result).toContain("https://github.com/webiny/website-builder-nextjs");
|
|
228
|
-
expect(result).toContain("Webiny Next.js starter kit");
|
|
229
|
-
expect(result).not.toContain("{STARTER_KIT_LINK}");
|
|
230
|
-
});
|
|
231
|
-
it("should handle variable that references another variable multiple times", () => {
|
|
232
|
-
builder.setVariables({
|
|
233
|
-
NAME: "John",
|
|
234
|
-
GREETING: "Hello {NAME}, welcome {NAME}!"
|
|
235
|
-
}).add("section1", "{GREETING}");
|
|
236
|
-
expect(builder.build()).toBe("Hello John, welcome John!");
|
|
237
|
-
});
|
|
238
|
-
it("should handle deep nesting (3+ levels)", () => {
|
|
239
|
-
builder.setVariables({
|
|
240
|
-
LEVEL_1: "base",
|
|
241
|
-
LEVEL_2: "{LEVEL_1}/path",
|
|
242
|
-
LEVEL_3: "{LEVEL_2}/more",
|
|
243
|
-
LEVEL_4: "{LEVEL_3}/final"
|
|
244
|
-
}).add("section1", "{LEVEL_4}");
|
|
245
|
-
expect(builder.build()).toBe("base/path/more/final");
|
|
246
|
-
});
|
|
247
|
-
it("should handle circular references gracefully", () => {
|
|
248
|
-
const consoleSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
249
|
-
builder.setVariables({
|
|
250
|
-
VAR_A: "Start {VAR_B}",
|
|
251
|
-
VAR_B: "{VAR_A} End"
|
|
252
|
-
}).add("section1", "{VAR_A}");
|
|
253
|
-
builder.build();
|
|
254
|
-
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Maximum interpolation depth reached"));
|
|
255
|
-
consoleSpy.mockRestore();
|
|
256
|
-
});
|
|
257
|
-
it("should stop at undefined variables and leave them as-is", () => {
|
|
258
|
-
builder.setVariables({
|
|
259
|
-
DEFINED: "value",
|
|
260
|
-
HAS_UNDEFINED: "{DEFINED} and {UNDEFINED}"
|
|
261
|
-
}).add("section1", "{HAS_UNDEFINED}");
|
|
262
|
-
expect(builder.build()).toBe("value and {UNDEFINED}");
|
|
263
|
-
});
|
|
264
|
-
it("should handle mixed defined and nested variables", () => {
|
|
265
|
-
builder.setVariables({
|
|
266
|
-
API_KEY: "key123",
|
|
267
|
-
HOST: "example.com",
|
|
268
|
-
CONFIG: "API_KEY={API_KEY}\nHOST={HOST}\nUNDEFINED={UNKNOWN}"
|
|
269
|
-
}).add("section1", "{CONFIG}");
|
|
270
|
-
const result = builder.build();
|
|
271
|
-
expect(result).toContain("API_KEY=key123");
|
|
272
|
-
expect(result).toContain("HOST=example.com");
|
|
273
|
-
expect(result).toContain("UNDEFINED={UNKNOWN}");
|
|
274
|
-
});
|
|
275
|
-
});
|
|
276
269
|
});
|
|
277
270
|
|
|
278
271
|
//# sourceMappingURL=MarkdownContentBuilder.test.js.map
|