From 59b5fec7be203e53f5c4fcb43f2d3d81f4377282 Mon Sep 17 00:00:00 2001 From: Tony Sullivan Date: Thu, 15 Sep 2022 12:32:12 -0500 Subject: [PATCH] adds a new `astro:build:generated` hook for SSG builds --- packages/astro/src/@types/astro.ts | 1 + packages/astro/src/core/build/static-build.ts | 3 ++- packages/astro/src/integrations/index.ts | 22 +++++++++++++++++++ packages/integrations/image/src/index.ts | 2 +- .../image/src/vendor/squoosh/image-pool.ts | 5 +++-- 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/packages/astro/src/@types/astro.ts b/packages/astro/src/@types/astro.ts index c358d63e7..37a8abdb7 100644 --- a/packages/astro/src/@types/astro.ts +++ b/packages/astro/src/@types/astro.ts @@ -1149,6 +1149,7 @@ export interface AstroIntegration { 'astro:server:start'?: (options: { address: AddressInfo }) => void | Promise; 'astro:server:done'?: () => void | Promise; 'astro:build:ssr'?: (options: { manifest: SerializedSSRManifest }) => void | Promise; + 'astro:build:generated'?: (options: { dir: URL }) => void | Promise; 'astro:build:start'?: (options: { buildConfig: BuildConfig }) => void | Promise; 'astro:build:setup'?: (options: { vite: ViteConfigWithSSR; diff --git a/packages/astro/src/core/build/static-build.ts b/packages/astro/src/core/build/static-build.ts index 0e91dc548..6f1957d66 100644 --- a/packages/astro/src/core/build/static-build.ts +++ b/packages/astro/src/core/build/static-build.ts @@ -6,7 +6,7 @@ import * as vite from 'vite'; import { BuildInternals, createBuildInternals } from '../../core/build/internal.js'; import { prependForwardSlash } from '../../core/path.js'; import { emptyDir, isModeServerWithNoAdapter, removeDir } from '../../core/util.js'; -import { runHookBuildSetup } from '../../integrations/index.js'; +import { runHookBuildGenerated, runHookBuildSetup } from '../../integrations/index.js'; import { PAGE_SCRIPT_ID } from '../../vite-plugin-scripts/index.js'; import type { ViteConfigWithSSR } from '../create-vite'; import { info } from '../logger/core.js'; @@ -98,6 +98,7 @@ Learn more: https://docs.astro.build/en/guides/server-side-rendering/ timer.generate = performance.now(); if (astroConfig.output === 'static') { await generatePages(opts, internals); + await runHookBuildGenerated({ config: opts.astroConfig, buildConfig: opts.buildConfig, logging: opts.logging }); await cleanSsrOutput(opts); } else { // Inject the manifest diff --git a/packages/astro/src/integrations/index.ts b/packages/astro/src/integrations/index.ts index 68d2a23ae..422497fe0 100644 --- a/packages/astro/src/integrations/index.ts +++ b/packages/astro/src/integrations/index.ts @@ -243,6 +243,28 @@ export async function runHookBuildSetup({ } } +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 runHookBuildSsr({ config, manifest, diff --git a/packages/integrations/image/src/index.ts b/packages/integrations/image/src/index.ts index 4d149c805..a4d457759 100644 --- a/packages/integrations/image/src/index.ts +++ b/packages/integrations/image/src/index.ts @@ -105,7 +105,7 @@ export default function integration(options: IntegrationOptions = {}): AstroInte } : {}; }, - 'astro:build:done': async ({ dir }) => { + 'astro:build:generated': async ({ dir }) => { if (resolvedOptions.serviceEntryPoint === '@astrojs/image/squoosh') { await copyWasmFiles(_config.output === 'static' ? dir : _buildConfig.server); } diff --git a/packages/integrations/image/src/vendor/squoosh/image-pool.ts b/packages/integrations/image/src/vendor/squoosh/image-pool.ts index f888f00c9..c51024e16 100644 --- a/packages/integrations/image/src/vendor/squoosh/image-pool.ts +++ b/packages/integrations/image/src/vendor/squoosh/image-pool.ts @@ -1,4 +1,5 @@ -import { cpus } from 'os' +import { cpus } from 'node:os' +import { fileURLToPath } from 'node:url'; import { isMainThread } from 'node:worker_threads'; import WorkerPool from '../../utils/workerPool.js'; import * as impl from './impl.js'; @@ -22,7 +23,7 @@ const getWorker = execOnce( // There will be at most 7 workers needed since each worker will take // at least 1 operation type. Math.max(1, Math.min(cpus().length - 1, 7)), - './node_modules/@astrojs/image/dist/vendor/squoosh/image-pool.js' + fileURLToPath(import.meta.url) ); } )