diff --git a/.changeset/early-spies-bow.md b/.changeset/early-spies-bow.md new file mode 100644 index 0000000000..8141484cc0 --- /dev/null +++ b/.changeset/early-spies-bow.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes a performance issue with JSON schema generation diff --git a/packages/astro/src/content/types-generator.ts b/packages/astro/src/content/types-generator.ts index 31c1e67e70..f1ce6edfb8 100644 --- a/packages/astro/src/content/types-generator.ts +++ b/packages/astro/src/content/types-generator.ts @@ -449,41 +449,42 @@ async function writeContentFiles({ for (const entryKey of Object.keys(collection.entries).sort()) { const dataType = collectionConfig?.schema ? `InferEntrySchema<${collectionKey}>` : 'any'; dataTypesStr += `${entryKey}: {\n id: ${entryKey};\n collection: ${collectionKey};\n data: ${dataType}\n};\n`; - if ( - settings.config.experimental.contentCollectionJsonSchema && - collectionConfig?.schema - ) { - let zodSchemaForJson = - typeof collectionConfig.schema === 'function' - ? collectionConfig.schema({ image: () => z.string() }) - : collectionConfig.schema; - if (zodSchemaForJson instanceof z.ZodObject) { - zodSchemaForJson = zodSchemaForJson.extend({ - $schema: z.string().optional(), - }); - } - try { - await fs.promises.writeFile( - new URL(`./${collectionKey.replace(/"/g, '')}.schema.json`, collectionSchemasDir), - JSON.stringify( - zodToJsonSchema(zodSchemaForJson, { - name: collectionKey.replace(/"/g, ''), - markdownDescription: true, - errorMessages: true, - }), - null, - 2 - ) - ); - } catch (err) { - logger.warn( - 'content', - `An error was encountered while creating the JSON schema for the ${entryKey} entry in ${collectionKey} collection. Proceeding without it. Error: ${err}` - ); - } + dataTypesStr += `};\n`; + } + + if ( + settings.config.experimental.contentCollectionJsonSchema && + collectionConfig?.schema + ) { + let zodSchemaForJson = + typeof collectionConfig.schema === 'function' + ? collectionConfig.schema({ image: () => z.string() }) + : collectionConfig.schema; + if (zodSchemaForJson instanceof z.ZodObject) { + zodSchemaForJson = zodSchemaForJson.extend({ + $schema: z.string().optional(), + }); + } + try { + await fs.promises.writeFile( + new URL(`./${collectionKey.replace(/"/g, '')}.schema.json`, collectionSchemasDir), + JSON.stringify( + zodToJsonSchema(zodSchemaForJson, { + name: collectionKey.replace(/"/g, ''), + markdownDescription: true, + errorMessages: true, + }), + null, + 2 + ) + ); + } catch (err) { + logger.warn( + 'content', + `An error was encountered while creating the JSON schema for the ${collectionKey} collection. Proceeding without it. Error: ${err}` + ); } } - dataTypesStr += `};\n`; break; } }