0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-30 22:03:56 -05:00

fix: don't strip "slug" from content layer data (#12168)

* fix: don't strip "slug" from content layer data

* fix: catch fallback case
This commit is contained in:
Matt Kane 2024-10-09 12:42:29 +01:00 committed by GitHub
parent 676b2c66ee
commit 1cd30852a3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 23 additions and 6 deletions

View file

@ -0,0 +1,5 @@
---
'astro': patch
---
Allows "slug" as a field in content layer data

View file

@ -167,11 +167,12 @@ export async function getEntryDataAndImages<
pluginContext?: PluginContext,
): Promise<{ data: TOutputData; imageImports: Array<string> }> {
let data: TOutputData;
if (collectionConfig.type === 'data') {
data = entry.unvalidatedData as TOutputData;
} else {
// Legacy content collections have 'slug' removed
if (collectionConfig.type === 'content' || (collectionConfig as any)._legacy) {
const { slug, ...unvalidatedData } = entry.unvalidatedData;
data = unvalidatedData as TOutputData;
} else {
data = entry.unvalidatedData as TOutputData;
}
let schema = collectionConfig.schema;

View file

@ -260,6 +260,10 @@ describe('Content Layer', () => {
});
});
it('allows "slug" as a field', async () => {
assert.equal(json.increment.data.slug, 'slimy');
});
it('updates the store on new builds', async () => {
assert.equal(json.increment.data.lastValue, 1);
assert.equal(json.entryWithReference.data.something?.content, 'transform me');

View file

@ -198,16 +198,22 @@ const images = defineCollection({
const increment = defineCollection({
loader: {
name: 'increment-loader',
load: async ({ store, refreshContextData }) => {
load: async ({ store, refreshContextData, parseData }) => {
const entry = store.get<{ lastValue: number }>('value');
const lastValue = entry?.data.lastValue ?? 0;
store.set({
const raw = {
id: 'value',
data: {
lastValue: lastValue + 1,
lastUpdated: new Date(),
refreshContextData,
slug: 'slimy'
},
}
const parsed = await parseData(raw)
store.set({
id: raw.id,
data: parsed,
});
},
// Example of a loader that returns an async schema function
@ -215,7 +221,8 @@ const increment = defineCollection({
z.object({
lastValue: z.number(),
lastUpdated: z.date(),
refreshContextData: z.record(z.unknown()),
refreshContextData: z.record(z.unknown()).optional(),
slug: z.string().optional(),
}),
},
});