UNPKG

@inox-tools/content-utils

Version:

Utilities to work with content collections on an Astro project from an integration or library.

48 lines (39 loc) 1.35 kB
import type { AstroConfig } from 'astro'; import { createResolver } from 'astro-integration-kit'; import { existsSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; // https://github.com/withastro/astro/blob/fd508a0f/packages/astro/src/content/utils.ts#L456 const possibleConfigs = [ 'content.config.ts', 'content.config.mjs', 'content.config.js', 'content.config.mts', 'content/config.ts', 'content/config.mjs', 'content/config.js', 'content/config.mts', ]; export type ResolvedContentPaths = { projectRoot: string; contentPath: string; configPath: string; configExists: boolean; resolve: ReturnType<typeof createResolver>['resolve']; }; export function resolveContentPaths(config: AstroConfig): ResolvedContentPaths { const baseResolver = createResolver(fileURLToPath(config.srcDir)); const contentPath = baseResolver.resolve('content'); const resolver = createResolver(contentPath); const validConfigPaths = possibleConfigs.map((configPath) => baseResolver.resolve(`${configPath}`) ); const existingConfig = validConfigPaths.find((configPath) => existsSync(configPath)); const configFile = existingConfig ?? validConfigPaths[0]; return { projectRoot: fileURLToPath(config.root), contentPath, configPath: configFile, configExists: existingConfig !== undefined, resolve: resolver.resolve, }; }