diff --git a/packages/astro/src/core/config.ts b/packages/astro/src/core/config.ts index 27550c313..c6a26f096 100644 --- a/packages/astro/src/core/config.ts +++ b/packages/astro/src/core/config.ts @@ -23,6 +23,38 @@ interface PostCSSConfigResult { plugins: Postcss.Plugin[]; } +const ASTRO_CONFIG_DEFAULTS: AstroUserConfig & any = { + root: '.', + srcDir: './src', + publicDir: './public', + outDir: './dist', + base: '/', + trailingSlash: 'ignore', + build: { format: 'directory' }, + server: { + host: false, + port: 3000, + }, + style: { postcss: { options: {}, plugins: [] }}, + integrations: [], + markdown: { + drafts: false, + syntaxHighlight: 'shiki', + shikiConfig: { + langs: [], + theme: 'github-dark', + wrap: false, + }, + remarkPlugins: [], + rehypePlugins: [], + }, + vite: {}, + experimental: { + ssr: false, + integrations: false, + }, +} + async function resolvePostcssConfig(inlineOptions: any, root: URL): Promise { if (isObject(inlineOptions)) { const options = { ...inlineOptions }; @@ -65,22 +97,22 @@ export const AstroConfigSchema = z.object({ root: z .string() .optional() - .default('.') + .default(ASTRO_CONFIG_DEFAULTS.root) .transform((val) => new URL(val)), srcDir: z .string() .optional() - .default('./src') + .default(ASTRO_CONFIG_DEFAULTS.srcDir) .transform((val) => new URL(val)), publicDir: z .string() .optional() - .default('./public') + .default(ASTRO_CONFIG_DEFAULTS.publicDir) .transform((val) => new URL(val)), outDir: z .string() .optional() - .default('./dist') + .default(ASTRO_CONFIG_DEFAULTS.outDir) .transform((val) => new URL(val)), site: z .string() @@ -94,18 +126,18 @@ export const AstroConfigSchema = z.object({ base: z .string() .optional() - .default('/') + .default(ASTRO_CONFIG_DEFAULTS.base) .transform((val) => prependForwardSlash(appendForwardSlash(trimSlashes(val)))), trailingSlash: z .union([z.literal('always'), z.literal('never'), z.literal('ignore')]) .optional() - .default('ignore'), + .default(ASTRO_CONFIG_DEFAULTS.trailingSlash), build: z .object({ format: z .union([z.literal('file'), z.literal('directory')]) .optional() - .default('directory'), + .default(ASTRO_CONFIG_DEFAULTS.build.format), }) .optional() .default({}), @@ -117,8 +149,8 @@ export const AstroConfigSchema = z.object({ // validate z .object({ - host: z.union([z.string(), z.boolean()]).optional().default(false), - port: z.number().optional().default(3000), + host: z.union([z.string(), z.boolean()]).optional().default(ASTRO_CONFIG_DEFAULTS.server.host), + port: z.number().optional().default(ASTRO_CONFIG_DEFAULTS.server.port), }) .optional() .default({}) @@ -129,7 +161,7 @@ export const AstroConfigSchema = z.object({ // validate z .array(z.object({ name: z.string(), hooks: z.object({}).passthrough().default({}) })) - .default([]) + .default(ASTRO_CONFIG_DEFAULTS.integrations) ), style: z .object({ @@ -139,7 +171,7 @@ export const AstroConfigSchema = z.object({ plugins: z.array(z.any()), }) .optional() - .default({ options: {}, plugins: [] }), + .default(ASTRO_CONFIG_DEFAULTS.style.postcss), }) .optional() .default({}), @@ -151,15 +183,15 @@ export const AstroConfigSchema = z.object({ drafts: z.boolean().default(false), syntaxHighlight: z .union([z.literal('shiki'), z.literal('prism'), z.literal(false)]) - .default('shiki'), + .default(ASTRO_CONFIG_DEFAULTS.markdown.syntaxHighlight), shikiConfig: z .object({ langs: z.custom().array().default([]), theme: z .enum(BUNDLED_THEMES as [Theme, ...Theme[]]) .or(z.custom()) - .default('github-dark'), - wrap: z.boolean().or(z.null()).default(false), + .default(ASTRO_CONFIG_DEFAULTS.markdown.shikiConfig.theme), + wrap: z.boolean().or(z.null()).default(ASTRO_CONFIG_DEFAULTS.markdown.shikiConfig.wrap), }) .default({}), remarkPlugins: z @@ -170,7 +202,7 @@ export const AstroConfigSchema = z.object({ z.tuple([z.custom((data) => typeof data === 'function'), z.any()]), ]) .array() - .default([]), + .default(ASTRO_CONFIG_DEFAULTS.markdown.remarkPlugins), rehypePlugins: z .union([ z.string(), @@ -179,16 +211,16 @@ export const AstroConfigSchema = z.object({ z.tuple([z.custom((data) => typeof data === 'function'), z.any()]), ]) .array() - .default([]), + .default(ASTRO_CONFIG_DEFAULTS.markdown.rehypePlugins), }) .default({}), vite: z .custom((data) => data instanceof Object && !Array.isArray(data)) - .default({}), + .default(ASTRO_CONFIG_DEFAULTS.vite), experimental: z .object({ - ssr: z.boolean().optional().default(false), - integrations: z.boolean().optional().default(false), + ssr: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.experimental.ssr), + integrations: z.boolean().optional().default(ASTRO_CONFIG_DEFAULTS.experimental.integrations), }) .optional() .default({}), @@ -254,19 +286,19 @@ export async function validateConfig( const AstroConfigRelativeSchema = AstroConfigSchema.extend({ root: z .string() - .default('.') + .default(ASTRO_CONFIG_DEFAULTS.root) .transform((val) => new URL(appendForwardSlash(val), fileProtocolRoot)), srcDir: z .string() - .default('./src') + .default(ASTRO_CONFIG_DEFAULTS.srcDir) .transform((val) => new URL(appendForwardSlash(val), fileProtocolRoot)), publicDir: z .string() - .default('./public') + .default(ASTRO_CONFIG_DEFAULTS.publicDir) .transform((val) => new URL(appendForwardSlash(val), fileProtocolRoot)), outDir: z .string() - .default('./dist') + .default(ASTRO_CONFIG_DEFAULTS.outDir) .transform((val) => new URL(appendForwardSlash(val), fileProtocolRoot)), server: z.preprocess( // preprocess @@ -275,8 +307,8 @@ export async function validateConfig( // validate z .object({ - host: z.union([z.string(), z.boolean()]).optional().default(false), - port: z.number().optional().default(3000), + host: z.union([z.string(), z.boolean()]).optional().default(ASTRO_CONFIG_DEFAULTS.server.host), + port: z.number().optional().default(ASTRO_CONFIG_DEFAULTS.server.port), }) .optional() .default({}) @@ -291,7 +323,7 @@ export async function validateConfig( plugins: z.array(z.any()), }) .optional() - .default({ options: {}, plugins: [] }) + .default(ASTRO_CONFIG_DEFAULTS.style.postcss) ), }) .optional()