Skip to content

Commit b45a963

Browse files
committed
remove alias pages + add alias status indicators
1 parent 2b395fc commit b45a963

2 files changed

Lines changed: 34 additions & 26 deletions

File tree

src/apiPage/shared/Topic.ts

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,7 @@ import * as BindingInfo from './BindingInfo';
88
// linkification
99
// ----------------------------------------------------------------------------
1010

11-
const aliasPath = (doc: AliasCopy) => {
12-
if (doc.doctype === 'constant') return doc.enum + '/' + doc.partialName;
13-
if (doc.doctype === 'namespace') return doc.name;
14-
return (
15-
(O.isSome(doc.namespace) ? doc.namespace.value + '/' : '') + doc.partialName
16-
);
17-
};
18-
19-
export const mainUrl = (doc: sf.Topic) =>
11+
export const url = (doc: sf.Topic) =>
2012
pipe(
2113
doc.filepath,
2214
// slice to remove the '.yml' extension
@@ -26,11 +18,6 @@ export const mainUrl = (doc: sf.Topic) =>
2618
O.getOrElse(() => '#')
2719
);
2820

29-
export const url = (doc: sf.Topic) =>
30-
'source' in doc && isAliasCopy(doc)
31-
? '/api/' + doc.doctype + 's/' + aliasPath(doc)
32-
: mainUrl(doc);
33-
3421
export const linkify =
3522
(content: md.Children<md.Link>) =>
3623
(doc: sf.Topic): md.Link =>
@@ -60,7 +47,9 @@ export const tagsSection =
6047

6148
const summaryListItem = (doc: sf.Topic): md.ListItem =>
6249
pipe(
63-
doc.summary,
50+
'source' in doc && isAliasCopy(doc)
51+
? O.some(aliasSummary(doc))
52+
: doc.summary,
6453
O.map((a) =>
6554
md.paragraph([linkedNameCode(doc), md.text(' - '), ...a.children])
6655
),
@@ -108,18 +97,33 @@ export const getAliasCopies = <T extends Aliasable>(
10897
);
10998
};
11099

100+
export const aliasSummary = (alias: AliasCopy) => {
101+
const status =
102+
(alias.status.index === 'stable' ? '' : alias.status.index + ' ') +
103+
'alias of';
104+
return md.paragraph([
105+
md.text(status[0]!.toUpperCase() + status.slice(1)),
106+
md.link(url(alias), O.none, [md.inlineCode(alias.aliasOf.value)]),
107+
md.text('.'),
108+
]);
109+
};
110+
111+
// TODO: remove this and its calls
111112
export const aliasPage = (alias: AliasCopy): md.Root =>
112113
md.root([
113114
md.simpleHeading(1)(alias.name),
114115
md.paragraph([
115116
md.text('This is an alias of '),
116-
md.link(mainUrl(alias), O.none, [md.inlineCode(alias.aliasOf.value)]),
117+
md.link(url(alias), O.none, [md.inlineCode(alias.aliasOf.value)]),
117118
md.text('.'),
118119
]),
119120
]);
120121

121-
const aliasNameString = (doc: sf.BindingInfo): md.PhrasingContent =>
122-
BindingInfo.strikeBasedOnStatus(doc)(md.text(doc.name));
122+
const aliasNameString = (doc: sf.BindingInfo): md.Children<md.Paragraph> => {
123+
const name = BindingInfo.strikeBasedOnStatus(doc)(md.inlineCode(doc.name));
124+
if (doc.status.index === 'stable') return [name];
125+
return [name, ...md.superscript([md.text(doc.status.index)])];
126+
};
123127

124128
export const aliasesSection =
125129
(allEntries: RR.ReadonlyRecord<string, Aliasable>) =>
@@ -128,7 +132,8 @@ export const aliasesSection =
128132
aliases,
129133
RA.filterMap((a) => RR.lookup(a.name)(allEntries)),
130134
RA.map(aliasNameString),
131-
RA.intersperse<md.PhrasingContent>(md.text(', ')),
135+
RA.intersperse<md.Children<md.Paragraph>>([md.text(', ')]),
136+
RA.flatten,
132137
RNEA.fromReadonlyArray,
133138
O.map((a) =>
134139
md.paragraph([md.bold([md.text('aliases:')]), md.text(' '), ...a])

src/book.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as sf from '@that-hatter/scrapi-factory';
2-
import { R, RA, TE, flow, pipe } from '@that-hatter/scrapi-factory/fp';
2+
import { O, R, RA, TE, flow, pipe } from '@that-hatter/scrapi-factory/fp';
33
import * as md from '@that-hatter/scrapi-factory/markdown';
44
import fs from 'node:fs/promises';
55
import path from 'node:path';
@@ -35,19 +35,22 @@ const generateAPIPages = <T extends sf.Topic>(
3535
pageFn: (t: T) => R.Reader<sf.API, md.Root>
3636
) =>
3737
flow(
38-
RA.map((topic: T) =>
39-
pipe(
40-
pageFn(topic),
38+
RA.filterMap((topic: T) => {
39+
if ('source' in topic && Topic.isAliasCopy(topic)) return O.none;
40+
return pipe(
41+
topic,
42+
pageFn,
4143
R.map(md.compile),
4244
R.map(
4345
(content): APIPage<sf.Topic> => ({
4446
topic,
4547
content,
4648
link: Topic.url(topic),
4749
})
48-
)
49-
)
50-
),
50+
),
51+
O.some
52+
);
53+
}),
5154
R.sequenceArray,
5255
R.map(RA.map(generatePageFile))
5356
);

0 commit comments

Comments
 (0)