@galaxy-foundry/content-reader 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -3
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -10
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -31,6 +31,8 @@ export const contentReader = createContentReader({
|
|
|
31
31
|
|
|
32
32
|
contentReader.noteFiles('papers');
|
|
33
33
|
contentReader.noteIds('papers');
|
|
34
|
+
contentReader.noteTargets('papers');
|
|
35
|
+
contentReader.contentIndex();
|
|
34
36
|
contentReader.wikiLinkMap();
|
|
35
37
|
contentReader.remarkWikiLinks({ base: '/my-foundry' });
|
|
36
38
|
contentReader.resolveMarkdown(source, { base: '/my-foundry' });
|
|
@@ -49,7 +51,7 @@ Address precedence is deterministic:
|
|
|
49
51
|
|
|
50
52
|
1. Primary note addresses are registered in collection property order, then sorted note-path
|
|
51
53
|
order. A later primary overwrites an earlier primary, so collection declaration order is a
|
|
52
|
-
contractual part of a
|
|
54
|
+
contractual part of a content catalog with basename collisions.
|
|
53
55
|
2. Aliases fill empty addresses and never overwrite a primary. The first routed note wins when
|
|
54
56
|
two aliases collide.
|
|
55
57
|
3. Explicit `extraTargets` are applied last and may deliberately override either.
|
|
@@ -57,6 +59,32 @@ Address precedence is deterministic:
|
|
|
57
59
|
Only files admitted by the collection table become primary or alias targets. Markdown companions
|
|
58
60
|
and other adjacent files remain visible to `markdownFiles()` but cannot leak into `wikiLinkMap()`.
|
|
59
61
|
|
|
62
|
+
`noteTargets()` is the complete routed-note view before wiki-link addressing. It returns each
|
|
63
|
+
note's collection, id, and instance-supplied target in deterministic collection/path order; pass a
|
|
64
|
+
collection name to narrow it. Unlike `wikiLinkMap()`, it does not collapse primary-address
|
|
65
|
+
collisions, add aliases, or include explicit extra targets. Use it when every routed note matters,
|
|
66
|
+
such as checking that a static build emitted a page for each one.
|
|
67
|
+
|
|
68
|
+
`contentIndex()` exposes the richer build-time view from one walk. Its `notes` retain each routed
|
|
69
|
+
note's content-relative source file, parsed frontmatter when enabled, and route target.
|
|
70
|
+
`notesByAddress` applies the same primary and alias precedence as `wikiLinkMap()`, but its values
|
|
71
|
+
point back to those note records rather than only their site targets. A caster can therefore
|
|
72
|
+
project both source maps without walking or parsing the content tree again:
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
const index = contentReader.contentIndex();
|
|
76
|
+
const sourcePath = (file: string) => `content/${file}`;
|
|
77
|
+
|
|
78
|
+
const slugMap = new Map(
|
|
79
|
+
[...index.notesByAddress].map(([address, note]) => [address, sourcePath(note.file)]),
|
|
80
|
+
);
|
|
81
|
+
const metaByPath = new Map(index.notes.map((note) => [sourcePath(note.file), note.meta ?? {}]));
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Configure `aliases` or `readFrontmatter: true` when a projection needs metadata. Explicit extra
|
|
85
|
+
targets remain exclusive to `wikiLinkMap()` because they are addresses without collection-backed
|
|
86
|
+
source records.
|
|
87
|
+
|
|
60
88
|
## Boundary
|
|
61
89
|
|
|
62
90
|
This package deliberately does not assemble zod schemas or Astro collections. Astro preserves the
|
|
@@ -64,8 +92,9 @@ frontmatter type of a collection only when each schema-bearing export is written
|
|
|
64
92
|
heterogeneous catalog collapses the inferred shapes. It also does not decide how a Package differs
|
|
65
93
|
from a Paper or how either is rendered. Those are the instance's content model.
|
|
66
94
|
|
|
67
|
-
The package touches the filesystem, so it belongs in build, validation,
|
|
68
|
-
browser bundles. Reusable Astro presentation lives in
|
|
95
|
+
The package touches the filesystem, so it belongs in build, validation, casting composition, and
|
|
96
|
+
Astro server code—not browser bundles. Reusable Astro presentation lives in
|
|
97
|
+
`@galaxy-foundry/site-kit`.
|
|
69
98
|
|
|
70
99
|
See the [content-reader boundary](../../docs/architecture/content-reader-boundary.md) for the
|
|
71
100
|
cross-package and instance ownership map.
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,28 @@ export interface ContentTarget {
|
|
|
6
6
|
/** Optional tooltip carried by rendered wiki links. */
|
|
7
7
|
title?: string;
|
|
8
8
|
}
|
|
9
|
+
/** One routed note before wiki-link addresses, aliases, or extra targets are applied. */
|
|
10
|
+
export interface ContentNoteTarget<Collection extends string = string, Target extends ContentTarget = ContentTarget> {
|
|
11
|
+
collection: Collection;
|
|
12
|
+
id: string;
|
|
13
|
+
target: Target;
|
|
14
|
+
}
|
|
9
15
|
/** A note's YAML frontmatter before an instance schema has parsed it. */
|
|
10
16
|
export type Frontmatter = Record<string, unknown>;
|
|
17
|
+
/** One routed note with the source and metadata projections build-time consumers need. */
|
|
18
|
+
export interface ContentNoteRecord<Collection extends string = string, Target extends ContentTarget = ContentTarget> extends ContentNoteTarget<Collection, Target> {
|
|
19
|
+
/** Path relative to the content root supplied through `contentPath`. */
|
|
20
|
+
file: string;
|
|
21
|
+
/** Parsed when aliases or `readFrontmatter` opt the reader into content reads. */
|
|
22
|
+
meta: Frontmatter | undefined;
|
|
23
|
+
}
|
|
24
|
+
/** One content-tree walk, exposed before consumers project it into routes or cast inputs. */
|
|
25
|
+
export interface ContentIndex<Collection extends string = string, Target extends ContentTarget = ContentTarget> {
|
|
26
|
+
/** Every routed note in deterministic collection and path order. */
|
|
27
|
+
notes: readonly ContentNoteRecord<Collection, Target>[];
|
|
28
|
+
/** Primary and alias wiki-link addresses pointing back to those same note records. */
|
|
29
|
+
notesByAddress: ReadonlyMap<string, ContentNoteRecord<Collection, Target>>;
|
|
30
|
+
}
|
|
11
31
|
/** Extra wiki-link addresses derived from an instance's own note vocabulary. */
|
|
12
32
|
export type ContentAliases<Collections extends CollectionTable> = (meta: Frontmatter, id: string, collection: keyof Collections & string) => readonly string[];
|
|
13
33
|
export interface ExtraContentTarget<Target extends ContentTarget = ContentTarget> {
|
|
@@ -45,6 +65,8 @@ export interface ContentReader<Collections extends CollectionTable, Target exten
|
|
|
45
65
|
markdownFiles(): string[];
|
|
46
66
|
noteFiles<Name extends keyof Collections & string>(name: Name): string[];
|
|
47
67
|
noteIds<Name extends keyof Collections & string>(name: Name): string[];
|
|
68
|
+
contentIndex(): ContentIndex<keyof Collections & string, Target>;
|
|
69
|
+
noteTargets<Name extends keyof Collections & string = keyof Collections & string>(name?: Name): ContentNoteTarget<Name, Target>[];
|
|
48
70
|
wikiLinkMap(extraTargets?: readonly ExtraContentTarget<Target>[]): Map<string, Target>;
|
|
49
71
|
resolveLink(value: string, options?: ContentLinkOptions<Target>): ContentLink;
|
|
50
72
|
remarkWikiLinks(options?: ContentLinkOptions<Target>): ReturnType<typeof remarkWikiLinks>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -91,22 +91,31 @@ export function createContentReader(options) {
|
|
|
91
91
|
const prefix = `${collections[name].base}/`;
|
|
92
92
|
return noteFiles(name).map((relativePath) => noteIdFromPath(relativePath.slice(prefix.length)));
|
|
93
93
|
};
|
|
94
|
-
const
|
|
95
|
-
const map = new Map();
|
|
96
|
-
// Object property order is the collection-precedence contract. Keep primary registration in
|
|
97
|
-
// this first pass so no alias can take an address that belongs to a routed note. Within a
|
|
98
|
-
// collection noteFiles is sorted, making the full precedence deterministic.
|
|
94
|
+
const notesFor = (names) => {
|
|
99
95
|
const notes = [];
|
|
100
|
-
for (const name of
|
|
96
|
+
for (const name of names) {
|
|
101
97
|
const prefix = `${collections[name].base}/`;
|
|
102
98
|
for (const relativePath of noteFiles(name)) {
|
|
103
99
|
const id = noteIdFromPath(relativePath.slice(prefix.length));
|
|
104
100
|
const meta = aliases || readFrontmatter ? readNoteFrontmatter(contentPath(relativePath)) : undefined;
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
notes.push({
|
|
102
|
+
collection: name,
|
|
103
|
+
id,
|
|
104
|
+
file: relativePath,
|
|
105
|
+
meta,
|
|
106
|
+
target: targetOf(name, id, meta),
|
|
107
|
+
});
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
+
return notes;
|
|
111
|
+
};
|
|
112
|
+
const notesByAddress = (notes) => {
|
|
113
|
+
const map = new Map();
|
|
114
|
+
// Object property order is the collection-precedence contract. Keep primary registration in
|
|
115
|
+
// this first pass so no alias can take an address that belongs to a routed note. Within a
|
|
116
|
+
// collection noteFiles is sorted, making the full precedence deterministic.
|
|
117
|
+
for (const note of notes)
|
|
118
|
+
map.set(slugify(note.id.replace(/\//g, '-')), note);
|
|
110
119
|
// Aliases fill empty addresses only. In an alias/alias collision, the first routed note wins;
|
|
111
120
|
// in an alias/primary collision, the primary wins regardless of collection order.
|
|
112
121
|
if (aliases) {
|
|
@@ -114,10 +123,26 @@ export function createContentReader(options) {
|
|
|
114
123
|
for (const alias of aliases(note.meta, note.id, note.collection)) {
|
|
115
124
|
const key = slugify(alias);
|
|
116
125
|
if (!map.has(key))
|
|
117
|
-
map.set(key, note
|
|
126
|
+
map.set(key, note);
|
|
118
127
|
}
|
|
119
128
|
}
|
|
120
129
|
}
|
|
130
|
+
return map;
|
|
131
|
+
};
|
|
132
|
+
const contentIndex = () => {
|
|
133
|
+
const notes = notesFor(Object.keys(collections));
|
|
134
|
+
return { notes, notesByAddress: notesByAddress(notes) };
|
|
135
|
+
};
|
|
136
|
+
const noteTargets = (name) => {
|
|
137
|
+
const names = name === undefined ? Object.keys(collections) : [name];
|
|
138
|
+
return notesFor(names).map(({ collection, id, target }) => ({
|
|
139
|
+
collection: collection,
|
|
140
|
+
id,
|
|
141
|
+
target,
|
|
142
|
+
}));
|
|
143
|
+
};
|
|
144
|
+
const wikiLinkMap = (extraTargets = []) => {
|
|
145
|
+
const map = new Map([...contentIndex().notesByAddress].map(([address, note]) => [address, note.target]));
|
|
121
146
|
// Explicit extra targets are the caller's escape hatch and retain their existing final-write
|
|
122
147
|
// behavior, including the ability to override a routed target deliberately.
|
|
123
148
|
for (const { key, target } of extraTargets)
|
|
@@ -130,6 +155,8 @@ export function createContentReader(options) {
|
|
|
130
155
|
.sort(),
|
|
131
156
|
noteFiles,
|
|
132
157
|
noteIds,
|
|
158
|
+
contentIndex,
|
|
159
|
+
noteTargets,
|
|
133
160
|
wikiLinkMap,
|
|
134
161
|
resolveLink: (value, linkOptions = {}) => resolveContentLink(value, wikiLinkMap(linkOptions.extraTargets), linkOptions.base),
|
|
135
162
|
remarkWikiLinks: (linkOptions = {}) => remarkContentWikiLinks(wikiLinkMap(linkOptions.extraTargets), linkOptions.base),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAwB,MAAM,yCAAyC,CAAC;AAClG,OAAO,EACL,aAAa,EACb,eAAe,EACf,0BAA0B,EAC1B,OAAO,GACR,MAAM,4BAA4B,CAAC;AACpC,OAAO,eAAe,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@galaxy-foundry/content-reader",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Collection-backed content and wiki-link plumbing
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Collection-backed content records and wiki-link plumbing for Foundry build-time consumers; schemas, routes, and domain presentation stay per-instance.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|