Skip to content

Commit

Permalink
Adds a new "astro:build:generated" hook for SSG builds (#4775)
Browse files Browse the repository at this point in the history
* Revert "Revert "Adds a new "astro:build:generated" hook for SSG builds (#4772)" (#4774)"

This reverts commit 13a4b0d.

* fix: updating for latest merge with main
  • Loading branch information
Tony Sullivan committed Sep 21, 2022
1 parent bcc5254 commit b0cc939
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .changeset/four-eggs-compare.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': minor
---

Adds a new "astro:build:generated" hook that runs after SSG builds finish but **before** build artifacts are cleaned up. This is a very specific use case, "astro:build:done" is probably what you're looking for.
1 change: 1 addition & 0 deletions packages/astro/src/@types/astro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1160,6 +1160,7 @@ export interface AstroIntegration {
target: 'client' | 'server';
updateConfig: (newConfig: ViteConfigWithSSR) => void;
}) => void | Promise<void>;
'astro:build:generated'?: (options: { dir: URL }) => void | Promise<void>;
'astro:build:done'?: (options: {
pages: { pathname: string }[];
dir: URL;
Expand Down
7 changes: 7 additions & 0 deletions packages/astro/src/core/build/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
removeTrailingForwardSlash,
} from '../../core/path.js';
import type { RenderOptions } from '../../core/render/core';
import { runHookBuildGenerated } from '../../integrations/index.js';
import { BEFORE_HYDRATION_SCRIPT_ID, PAGE_SCRIPT_ID } from '../../vite-plugin-scripts/index.js';
import { call as callEndpoint } from '../endpoint/index.js';
import { debug, info } from '../logger/core.js';
Expand Down Expand Up @@ -113,6 +114,12 @@ export async function generatePages(opts: StaticBuildOptions, internals: BuildIn
await generatePage(opts, internals, pageData, ssrEntry, builtPaths);
}

await runHookBuildGenerated({
config: opts.settings.config,
buildConfig: opts.buildConfig,
logging: opts.logging,
});

info(opts.logging, null, dim(`Completed in ${getTimeStat(timer, performance.now())}.\n`));
}

Expand Down
22 changes: 22 additions & 0 deletions packages/astro/src/integrations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,28 @@ export async function runHookBuildSsr({
}
}

export async function runHookBuildGenerated({
config,
buildConfig,
logging,
}: {
config: AstroConfig;
buildConfig: BuildConfig;
logging: LogOptions;
}) {
const dir = config.output === 'server' ? buildConfig.client : config.outDir;

for (const integration of config.integrations) {
if (integration?.hooks?.['astro:build:generated']) {
await withTakingALongTimeMsg({
name: integration.name,
hookResult: integration.hooks['astro:build:generated']({ dir }),
logging,
});
}
}
}

export async function runHookBuildDone({
config,
buildConfig,
Expand Down
6 changes: 6 additions & 0 deletions packages/astro/test/static-build-dir.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,18 @@ import { loadFixture } from './test-utils.js';
describe('Static build: dir takes the URL path to the output directory', () => {
/** @type {URL} */
let checkDir;
/** @type {URL} */
let checkGeneratedDir;
before(async () => {
const fixture = await loadFixture({
root: './fixtures/static-build-dir/',
integrations: [
{
name: '@astrojs/dir',
hooks: {
'astro:build:generated': ({ dir }) => {
checkGeneratedDir = dir;
},
'astro:build:done': ({ dir }) => {
checkDir = dir;
},
Expand All @@ -25,5 +30,6 @@ describe('Static build: dir takes the URL path to the output directory', () => {
expect(removeTrailingSlash(checkDir.toString())).to.be.equal(
removeTrailingSlash(new URL('./fixtures/static-build-dir/dist', import.meta.url).toString())
);
expect(checkDir.toString()).to.be.equal(checkGeneratedDir.toString());
});
});

0 comments on commit b0cc939

Please sign in to comment.