Skip to content

Commit

Permalink
feat(vite-plugin-nitro): add support for rendering hooks during pre-r…
Browse files Browse the repository at this point in the history
…endering of routes

Made changes based on comments left in the PR.
  • Loading branch information
Q committed Jul 14, 2023
1 parent 5085782 commit 6d62b8d
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 12 deletions.
3 changes: 2 additions & 1 deletion packages/platform/src/lib/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ export interface PrerenderOptions {
*/
routes?: string[] | (() => Promise<(string | undefined)[]>);
sitemap?: SitemapConfig;
postRenderingHooks?: ((routes: PrerenderRoute) => Promise<boolean>)[];
/** List of functions that run for each route after pre-rendering is complete. */
postRenderingHooks?: ((routes: PrerenderRoute) => Promise<void>)[];
}

export interface Options {
Expand Down
4 changes: 2 additions & 2 deletions packages/vite-plugin-nitro/src/lib/build-server.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { loadEsmModule } from '@angular-devkit/build-angular/src/utils/load-esm';
import { NitroConfig } from 'nitropack';
import { Options } from './options';
import { runPostRenderingHooks } from './hooks/post-rendering-hook';
import { addPostRenderingHooks } from './hooks/post-rendering-hook';

export async function buildServer(
options?: Options,
Expand All @@ -17,7 +17,7 @@ export async function buildServer(
});

if (options?.prerender?.postRenderingHooks) {
runPostRenderingHooks(nitro, options.prerender.postRenderingHooks);
addPostRenderingHooks(nitro, options.prerender.postRenderingHooks);
}

await prepare(nitro);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import { Nitro, PrerenderRoute } from 'nitropack';

export function runPostRenderingHooks(
export function addPostRenderingHooks(
nitro: Nitro,
hooks: ((pr: PrerenderRoute) => Promise<boolean>)[]
hooks: ((pr: PrerenderRoute) => Promise<void>)[]
): void {
hooks.forEach((hook: (preRoute: PrerenderRoute) => void) => {
nitro.hooks.hook('prerender:generate', async (route: PrerenderRoute) => {
nitro.hooks.hook('prerender:generate', (route: PrerenderRoute) => {
hook(route);
await Promise.resolve(true);
});
});
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { runPostRenderingHooks } from './post-rendering-hook';
import { addPostRenderingHooks } from './post-rendering-hook';
import { vi } from 'vitest';
import { Nitro } from 'nitropack';

Expand All @@ -20,12 +20,12 @@ describe('postRenderingHook', () => {
const mockFunc2 = vi.fn();

it('should not attempt to call nitro mocks if no callbacks provided', () => {
runPostRenderingHooks(nitroMock, []);
addPostRenderingHooks(nitroMock, []);
expect(nitroMock.hooks.hook).not.toHaveBeenCalled();
});

it('should call provided hooks', () => {
runPostRenderingHooks(nitroMock, [mockFunc1, mockFunc2]);
addPostRenderingHooks(nitroMock, [mockFunc1, mockFunc2]);
expect(mockFunc1).toHaveBeenCalledWith(genRoute);
expect(mockFunc2).toHaveBeenCalled(genRoute);
});
Expand Down
4 changes: 2 additions & 2 deletions packages/vite-plugin-nitro/src/lib/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export interface PrerenderOptions {
*/
routes?: string[] | (() => Promise<(string | undefined)[]>);
sitemap?: SitemapConfig;
/** List of functions that will run after pre-rendering is complete. */
postRenderingHooks?: ((routes: PrerenderRoute) => Promise<boolean>)[];
/** List of functions that run for each route after pre-rendering is complete. */
postRenderingHooks?: ((routes: PrerenderRoute) => Promise<void>)[];
}

export interface SitemapConfig {
Expand Down

0 comments on commit 6d62b8d

Please sign in to comment.