{"version":3,"file":"geometricpanda-ng-storyblok-router.mjs","sources":["../../../../projects/geometricpanda/ng-storyblok/router/preload-components.guard.ts","../../../../projects/geometricpanda/ng-storyblok/router/resolve-story.guard.ts","../../../../projects/geometricpanda/ng-storyblok/router/storyblok-route.can-match.ts","../../../../projects/geometricpanda/ng-storyblok/router/resolve-title.guard.ts","../../../../projects/geometricpanda/ng-storyblok/router/provide-route.config.ts","../../../../projects/geometricpanda/ng-storyblok/router/geometricpanda-ng-storyblok-router.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport { NG_STORYBLOK_FALLBACK_LOADER, NG_STORYBLOK_LOADERS } from '@geometricpanda/ng-storyblok/tokens';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getComponentNames = (acc: Set<string>, block: any): Set<string> => {\n    if (!block) {\n        return acc;\n    }\n\n    if (Array.isArray(block)) {\n        block.forEach((item) => getComponentNames(acc, item));\n    }\n\n    if (typeof block === 'object') {\n        // If it's a storyblok link to another document\n        if (block['linktype'] && block['uuid']) {\n            return acc;\n        }\n\n        if (block.component) {\n            acc.add(block.component);\n        }\n\n        Object.values(block).forEach((child) => getComponentNames(acc, child));\n    }\n\n    return acc;\n};\n\nexport const preloadComponentsGuard: CanActivateFn = async (route) => {\n    const blockLoaders = inject(NG_STORYBLOK_LOADERS);\n    const fallbackLoader = inject(NG_STORYBLOK_FALLBACK_LOADER);\n\n    const storyData = route.data!['ɵNgStoryblokStoryData'];\n    const { data } = storyData;\n    const { story } = data;\n    const { content } = story;\n\n    const components = getComponentNames(new Set<string>(), content);\n\n    const loaders = Array.from(components).map((component) => {\n        const loader = blockLoaders[component];\n\n        if (!loader) {\n            return fallbackLoader();\n        }\n\n        return loader();\n    });\n\n    await Promise.all(loaders);\n\n    route.data = {\n        ...route.data,\n        ɵNgStoryblokComponents: components,\n    };\n\n    return true;\n};\n","import { ResolveFn } from '@angular/router';\nimport { ISbStory } from '@storyblok/js';\nimport { ISbStoryData } from 'storyblok-js-client/src/interfaces';\n\nexport const resolveStory: ResolveFn<ISbStoryData> = (route) => {\n    const storyData = route.data!['ɵNgStoryblokStoryData'] as ISbStory;\n    return storyData.data.story;\n};\n","import { inject } from '@angular/core';\nimport { CanMatchFn } from '@angular/router';\nimport { Storyblok } from '@geometricpanda/ng-storyblok/services';\nimport {\n    NG_STORYBLOK_PREVIEW,\n    NG_STORYBLOK_RESOLVE_LINKS,\n    NG_STORYBLOK_RESOLVE_RELATIONS,\n    NG_STORYBLOK_SLUG_REWRITE,\n} from '@geometricpanda/ng-storyblok/tokens';\nimport { firstValueFrom } from 'rxjs';\n\nexport const matchStoryblokRoute: CanMatchFn = async (route, segments) => {\n    const storyblok = inject(Storyblok);\n    const slugRewrite = inject(NG_STORYBLOK_SLUG_REWRITE, { optional: true });\n    const preview = inject(NG_STORYBLOK_PREVIEW, { optional: true });\n    const resolveLinks = inject(NG_STORYBLOK_RESOLVE_LINKS, { optional: true }) ?? undefined;\n    const resolveRelations = inject(NG_STORYBLOK_RESOLVE_RELATIONS, { optional: true }) ?? undefined;\n\n    const slug = segments.map((segment) => segment.path).join('/');\n    const finalSlug = slugRewrite?.toStory(slug) || slug;\n\n    if (finalSlug) {\n        const previewMode = await preview?.preview();\n        const req = storyblok.getStory(finalSlug, {\n            ...previewMode,\n            resolve_links: resolveLinks,\n            resolve_relations: resolveRelations,\n        });\n        return firstValueFrom(req)\n            .then((story) => {\n                route.data = {\n                    ...route.data,\n                    ɵNgStoryblokStoryData: story,\n                };\n                return !!story;\n            })\n            .catch(() => false);\n    }\n\n    return false;\n};\n","import { inject } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport { NG_STORYBLOK_TITLE_TEMPLATE } from '@geometricpanda/ng-storyblok/tokens';\n\nexport const resolveTitle: ResolveFn<string> = async (route) => {\n    const storyData = route.data!['ɵNgStoryblokStoryData'];\n    const titleTemplate = inject(NG_STORYBLOK_TITLE_TEMPLATE, { optional: true });\n\n    if (!titleTemplate) {\n        return storyData.data.story.name;\n    }\n\n    const { template, render, env, cb } = titleTemplate;\n    return render(template, storyData.data.story, env, cb);\n};\n","import { Route } from '@angular/router';\nimport { preloadComponentsGuard } from './preload-components.guard';\nimport { resolveStory } from './resolve-story.guard';\nimport { matchStoryblokRoute } from './storyblok-route.can-match';\n\nimport { StoryblokRootComponent } from '@geometricpanda/ng-storyblok/render';\nimport { resolveTitle } from './resolve-title.guard';\n\nexport type StoryblokRoute = Omit<Route, 'loadComponent' | 'loadChildren' | 'component'>;\n\nexport const storyblokRoute = ({ canMatch = [], canActivate = [], resolve = {}, ...props }: StoryblokRoute): Route => ({\n    component: StoryblokRootComponent,\n    title: resolveTitle,\n    canMatch: [...canMatch, matchStoryblokRoute],\n    canActivate: [...canActivate, preloadComponentsGuard],\n    resolve: { ...resolve, story: resolveStory },\n    ...props,\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}