Skip to content

Commit 9410310

Browse files
committed
add more metadata to collection
1 parent a3cc34a commit 9410310

File tree

7 files changed

+28
-19
lines changed

7 files changed

+28
-19
lines changed

examples/sveltekit/src/routes/index.svelte

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
query PostCategory {
55
allPostCategories (sortBy: "title", order: DESC) {
66
_flatbread {
7-
_filename
8-
_collection
9-
_slug
7+
filename
8+
collection
9+
slug
1010
}
1111
id
1212
title
@@ -20,7 +20,9 @@
2020
timeToRead
2121
}
2222
authors {
23-
_slug
23+
_flatbread {
24+
slug
25+
}
2426
id
2527
name
2628
entity

packages/core/src/generators/schema.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,7 @@ export async function generateSchema(
5959
defaultsDeep(
6060
{},
6161
getFieldOverrides(collection, config),
62-
...nodes.map((node) =>
63-
merge(
64-
{
65-
_flatbread: {
66-
reference: get(node, node?._flatbread?.referenceField),
67-
},
68-
},
69-
node,
70-
preknownSchemaFragments
71-
)
72-
)
62+
...nodes.map((node) => merge({}, node, preknownSchemaFragments))
7363
),
7464
{ schemaComposer }
7565
),
@@ -213,7 +203,11 @@ const optionallyTransformContentNodes = (
213203
if (!transformer?.parse) {
214204
throw new Error(`no transformer found for ${node.path}`);
215205
}
216-
return transformer.parse(node);
206+
console.log({ transformer });
207+
const doc = transformer.parse(node);
208+
doc._flatbread.transformedBy = transformer.id;
209+
doc._flatbread.reference = get(doc, doc._flatbread.referenceField);
210+
return doc;
217211
});
218212
}
219213

packages/core/src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export interface Transformer {
5151
* @param input Node to transform
5252
*/
5353
parse?: (input: VFile) => EntryNode;
54+
id?: string;
5455
preknownSchemaFragments?: () => Record<string, any>;
5556
inspect: (input: EntryNode) => string;
5657
extensions: string[];
@@ -69,6 +70,7 @@ export type EntryNode = Record<string, any>;
6970
*/
7071
export interface Source {
7172
initialize?: (flatbreadConfig: LoadedFlatbreadConfig) => void;
73+
id?: string;
7274
fetch: (
7375
allContentTypes: CollectionEntry[]
7476
) => Promise<Record<string, VFile[]>>;

packages/core/src/utils/initializeConfig.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { cloneDeep, defaultsDeep } from 'lodash-es';
22
import { CollectionEntry } from '../types';
33
import { FlatbreadConfig, LoadedFlatbreadConfig, Transformer } from '../types';
44
import { toArray } from './arrayUtils';
5+
import { createHash } from 'crypto';
6+
import { anyToString } from './stringUtils';
57

68
/**
79
* Processes a config object and returns a normalized version of it.
@@ -10,7 +12,10 @@ export function initializeConfig(
1012
rawConfig: FlatbreadConfig
1113
): LoadedFlatbreadConfig {
1214
const config = cloneDeep(rawConfig);
13-
const transformer = toArray(config.transformer ?? []);
15+
const transformer = toArray(config.transformer ?? []).map((t) => {
16+
t.id = t.id ?? createHash('sha256').update(anyToString(t)).digest('hex');
17+
return t;
18+
});
1419

1520
return {
1621
...config,

packages/source-filesystem/src/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import slugify from '@sindresorhus/slugify';
22
import { defaultsDeep, merge } from 'lodash-es';
33
import { read } from 'to-vfile';
4-
4+
import ownPackage from '../package.json';
55
import type {
66
CollectionEntry,
77
LoadedFlatbreadConfig,
88
SourcePlugin,
99
} from '@flatbread/core';
10+
import { relative } from 'path';
1011
import type { VFile } from 'vfile';
1112
import type {
1213
FileNode,
@@ -39,8 +40,9 @@ async function getNodesFromDirectory(
3940
referenceField: collectionEntry.referenceField,
4041
collection: collectionEntry.collection,
4142
filename: file.basename,
42-
path: file.path,
43+
path: relative(process.cwd(), file.path),
4344
slug: slugify(file.stem ?? ''),
45+
sourcedBy: ownPackage.name,
4446
},
4547
});
4648

packages/transformer-markdown/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import matter from 'gray-matter';
22
import { excerpt, html, timeToRead } from './graphql/schema-helpers';
3+
import ownPackage from '../package.json';
34

45
import type { EntryNode, TransformerPlugin } from '@flatbread/core';
56
import type { VFile } from 'vfile';
@@ -41,6 +42,7 @@ export const transformer: TransformerPlugin = (
4142
);
4243
return {
4344
parse: (input: VFile): EntryNode => parse(input, config),
45+
id: ownPackage.name,
4446
preknownSchemaFragments: () => ({
4547
_content: {
4648
html: html(config),

packages/transformer-yaml/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { EntryNode, TransformerPlugin } from '@flatbread/core';
22
import type { YAMLException } from 'js-yaml';
33
import yaml from 'js-yaml';
44
import { VFile } from 'vfile';
5+
import ownPackage from '../package.json';
56

67
/**
78
* Transforms a yaml file (content node) to JSON.
@@ -42,6 +43,7 @@ export const transformer: TransformerPlugin = () => {
4243
return {
4344
parse: (input: VFile): EntryNode => parse(input),
4445
inspect: (input: EntryNode) => String(input),
46+
id: ownPackage.name,
4547
serialize,
4648
extensions: ['.yaml', '.yml'],
4749
};

0 commit comments

Comments
 (0)