fix(images): Move emitESMImage util to another file (#6505)
* fix(images): Move emitESMImage util to another file, so we don't import it by accident in contexts we shouldn.t * fix(images): Fix import paths
This commit is contained in:
parent
f6eddffa04
commit
f55b4829bf
4 changed files with 46 additions and 44 deletions
|
@ -1,13 +1,8 @@
|
|||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { pathToFileURL } from 'node:url';
|
||||
import type { AstroSettings } from '../@types/astro.js';
|
||||
import type { StaticBuildOptions } from '../core/build/types.js';
|
||||
import { AstroError, AstroErrorData } from '../core/errors/index.js';
|
||||
import { rootRelativePath } from '../core/util.js';
|
||||
import { ImageService, isLocalService, LocalImageService } from './services/service.js';
|
||||
import type { ImageMetadata, ImageTransform } from './types.js';
|
||||
import { imageMetadata } from './utils/metadata.js';
|
||||
|
||||
export function isESMImportedImage(src: ImageMetadata | string): src is ImageMetadata {
|
||||
return typeof src === 'object';
|
||||
|
@ -120,40 +115,3 @@ export async function generateImage(
|
|||
},
|
||||
};
|
||||
}
|
||||
|
||||
export async function emitESMImage(
|
||||
id: string,
|
||||
watchMode: boolean,
|
||||
fileEmitter: any,
|
||||
settings: AstroSettings
|
||||
) {
|
||||
const url = pathToFileURL(id);
|
||||
const meta = await imageMetadata(url);
|
||||
|
||||
if (!meta) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Build
|
||||
if (!watchMode) {
|
||||
const pathname = decodeURI(url.pathname);
|
||||
const filename = path.basename(pathname, path.extname(pathname) + `.${meta.format}`);
|
||||
|
||||
const handle = fileEmitter({
|
||||
name: filename,
|
||||
source: await fs.promises.readFile(url),
|
||||
type: 'asset',
|
||||
});
|
||||
|
||||
meta.src = `__ASTRO_ASSET_IMAGE__${handle}__`;
|
||||
} else {
|
||||
// Pass the original file information through query params so we don't have to load the file twice
|
||||
url.searchParams.append('origWidth', meta.width.toString());
|
||||
url.searchParams.append('origHeight', meta.height.toString());
|
||||
url.searchParams.append('origFormat', meta.format);
|
||||
|
||||
meta.src = rootRelativePath(settings.config, url);
|
||||
}
|
||||
|
||||
return meta;
|
||||
}
|
||||
|
|
43
packages/astro/src/assets/utils/emitAsset.ts
Normal file
43
packages/astro/src/assets/utils/emitAsset.ts
Normal file
|
@ -0,0 +1,43 @@
|
|||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { pathToFileURL } from 'node:url';
|
||||
import type { AstroSettings } from '../../@types/astro';
|
||||
import { rootRelativePath } from '../../core/util.js';
|
||||
import { imageMetadata } from './metadata.js';
|
||||
|
||||
export async function emitESMImage(
|
||||
id: string,
|
||||
watchMode: boolean,
|
||||
fileEmitter: any,
|
||||
settings: AstroSettings
|
||||
) {
|
||||
const url = pathToFileURL(id);
|
||||
const meta = await imageMetadata(url);
|
||||
|
||||
if (!meta) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Build
|
||||
if (!watchMode) {
|
||||
const pathname = decodeURI(url.pathname);
|
||||
const filename = path.basename(pathname, path.extname(pathname) + `.${meta.format}`);
|
||||
|
||||
const handle = fileEmitter({
|
||||
name: filename,
|
||||
source: await fs.promises.readFile(url),
|
||||
type: 'asset',
|
||||
});
|
||||
|
||||
meta.src = `__ASTRO_ASSET_IMAGE__${handle}__`;
|
||||
} else {
|
||||
// Pass the original file information through query params so we don't have to load the file twice
|
||||
url.searchParams.append('origWidth', meta.width.toString());
|
||||
url.searchParams.append('origHeight', meta.height.toString());
|
||||
url.searchParams.append('origFormat', meta.format);
|
||||
|
||||
meta.src = rootRelativePath(settings.config, url);
|
||||
}
|
||||
|
||||
return meta;
|
||||
}
|
|
@ -9,9 +9,10 @@ import type { AstroPluginOptions, ImageTransform } from '../@types/astro';
|
|||
import { error } from '../core/logger/core.js';
|
||||
import { joinPaths, prependForwardSlash } from '../core/path.js';
|
||||
import { VIRTUAL_MODULE_ID, VIRTUAL_SERVICE_ID } from './consts.js';
|
||||
import { emitESMImage, isESMImportedImage } from './internal.js';
|
||||
import { isESMImportedImage } from './internal.js';
|
||||
import { isLocalService } from './services/service.js';
|
||||
import { copyWasmFiles } from './services/vendor/squoosh/copy-wasm.js';
|
||||
import { emitESMImage } from './utils/emitAsset.js';
|
||||
import { imageMetadata } from './utils/metadata.js';
|
||||
import { getOrigQueryParams } from './utils/queryParams.js';
|
||||
import { propsToFilename } from './utils/transformToPath.js';
|
||||
|
|
|
@ -7,7 +7,7 @@ import type { EmitFile } from 'rollup';
|
|||
import { ErrorPayload as ViteErrorPayload, normalizePath, ViteDevServer } from 'vite';
|
||||
import { z } from 'zod';
|
||||
import type { AstroConfig, AstroSettings } from '../@types/astro.js';
|
||||
import { emitESMImage } from '../assets/internal.js';
|
||||
import { emitESMImage } from '../assets/utils/emitAsset.js';
|
||||
import { AstroError, AstroErrorData } from '../core/errors/index.js';
|
||||
import { CONTENT_TYPES_FILE } from './consts.js';
|
||||
|
||||
|
|
Loading…
Reference in a new issue