markupress 0.1.0 → 0.4.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 +227 -97
- package/dist/content.d.ts +33 -8
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +174 -255
- package/dist/content.js.map +1 -1
- package/dist/controllers/shell.d.ts +2 -3
- package/dist/controllers/shell.d.ts.map +1 -1
- package/dist/controllers/shell.js +4 -12
- package/dist/controllers/shell.js.map +1 -1
- package/dist/git.d.ts +8 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +27 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/markdown.d.ts +3 -1
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +10 -13
- package/dist/markdown.js.map +1 -1
- package/dist/navigation.d.ts +23 -31
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +48 -59
- package/dist/navigation.js.map +1 -1
- package/dist/site.d.ts +16 -26
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +91 -45
- package/dist/site.js.map +1 -1
- package/dist/versions.d.ts +4 -1
- package/dist/versions.d.ts.map +1 -1
- package/dist/versions.js +21 -41
- package/dist/versions.js.map +1 -1
- package/package.json +8 -7
- package/styles/prose.css +31 -0
- package/theme/chrome.html +38 -0
- package/theme/home.html +28 -0
- package/theme/shell.html +22 -33
- package/theme/theme.css +19 -3
package/dist/site.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ApplicationOptions, type ApplicationServer, type BuildResult, type HtmlKitPlugin, type ServerOptions } from '@nextwebwg/htmlkit';
|
|
2
|
-
import { type
|
|
2
|
+
import { type NavItem } from './navigation.js';
|
|
3
3
|
export interface DocumentationVersion {
|
|
4
4
|
readonly id: string;
|
|
5
5
|
readonly label?: string;
|
|
@@ -11,6 +11,10 @@ export interface MarkupressOptions {
|
|
|
11
11
|
readonly root?: string;
|
|
12
12
|
readonly contentDir?: string;
|
|
13
13
|
readonly base?: string;
|
|
14
|
+
/** The site's origin, such as https://example.com: HTMLKit writes `sitemap.xml` for it, and `robots.txt` links that sitemap. */
|
|
15
|
+
readonly origin?: string;
|
|
16
|
+
/** HTMLKit's `robots.txt`: true allows every crawler, and a string is the file's text. */
|
|
17
|
+
readonly robots?: boolean | string;
|
|
14
18
|
readonly outDir?: string;
|
|
15
19
|
readonly title?: string;
|
|
16
20
|
readonly versions?: readonly DocumentationVersion[];
|
|
@@ -19,36 +23,17 @@ export interface MarkupressOptions {
|
|
|
19
23
|
readonly port?: number;
|
|
20
24
|
/** Number the lines of every highlighted code block unless its fence says `:no-line-numbers`. */
|
|
21
25
|
readonly lineNumbers?: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* An HTML Next layout component, relative to the root, that replaces the Markupress shell. It receives the
|
|
24
|
-
* loader data its `<prop>` declarations name: see "Layout data" in the README.
|
|
25
|
-
*/
|
|
26
|
-
readonly layout?: string;
|
|
27
|
-
/** The logo before the title: one image, or one per theme. Paths starting with `/` are files in `public/`. */
|
|
26
|
+
/** The logo before the title, in place of `public/logo.svg` and `public/logo-dark.svg`: one image, or one per theme. */
|
|
28
27
|
readonly logo?: string | {
|
|
29
28
|
readonly light: string;
|
|
30
29
|
readonly dark?: string;
|
|
31
30
|
};
|
|
32
|
-
/** The site's icon,
|
|
31
|
+
/** The site's icon, in place of `public/favicon.svg`. */
|
|
33
32
|
readonly favicon?: string;
|
|
34
|
-
/**
|
|
33
|
+
/** Links after the sections in the top navigation, each shown as its `icon` image or its label. */
|
|
35
34
|
readonly nav?: readonly NavItem[];
|
|
36
|
-
/**
|
|
37
|
-
readonly
|
|
38
|
-
readonly icon?: string;
|
|
39
|
-
})[];
|
|
40
|
-
/** Text of the badge beside the title. Without it, a site with several versions shows the selected version's label. */
|
|
41
|
-
readonly versionBadge?: string;
|
|
42
|
-
/** Explicit sidebars by section path (`/`, `/editor/`). Every other section's sidebar is generated from its folder. */
|
|
43
|
-
readonly sidebar?: Readonly<Record<string, readonly SidebarItem[]>>;
|
|
44
|
-
/** Footer link columns and a copyright line. */
|
|
45
|
-
readonly footer?: {
|
|
46
|
-
readonly columns?: readonly {
|
|
47
|
-
readonly title: string;
|
|
48
|
-
readonly items: readonly Link[];
|
|
49
|
-
}[];
|
|
50
|
-
readonly copyright?: string;
|
|
51
|
-
};
|
|
35
|
+
/** Every page's "Edit this page" link: this URL, ending in `/`, followed by the page file's path in the project. */
|
|
36
|
+
readonly editLink?: string;
|
|
52
37
|
}
|
|
53
38
|
export interface DocumentationPage {
|
|
54
39
|
readonly id: string;
|
|
@@ -57,6 +42,11 @@ export interface DocumentationPage {
|
|
|
57
42
|
/** Application-relative URL in its version, such as /v/current/guide/install/. */
|
|
58
43
|
readonly pathname: string;
|
|
59
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* A snapshot recorded in `versions/<id>/`, which keeps the project's layout: its content is `versions/<id>/<contentDir>`
|
|
47
|
+
* and its public files `versions/<id>/public`. Snapshots follow the current version, highest number first.
|
|
48
|
+
*/
|
|
49
|
+
export declare function snapshotOf(root: string, id: string, contentDir: string): DocumentationVersion;
|
|
60
50
|
/**
|
|
61
51
|
* Versioned documentation as an HTMLKit plugin. Markdown pages come from the markdown plugin, and
|
|
62
52
|
* HTMLKit routes them: each version's directory serves /v/<id>/, and the default version's also
|
|
@@ -65,7 +55,7 @@ export interface DocumentationPage {
|
|
|
65
55
|
export declare function markupress(options?: MarkupressOptions): HtmlKitPlugin;
|
|
66
56
|
/**
|
|
67
57
|
* HTMLKit options for a Markupress site, as the CLI runs it: the site's own HTMLKit options (its `htmlkit.config.ts`)
|
|
68
|
-
* with `markupress()` added after their plugins. Markupress's own `base` and `outDir`, when set, win over HTMLKit's.
|
|
58
|
+
* with `markupress()` added after their plugins. Markupress's own `base`, `origin`, `robots` and `outDir`, when set, win over HTMLKit's.
|
|
69
59
|
*/
|
|
70
60
|
export declare function siteOptions(options?: MarkupressOptions, htmlkit?: ApplicationOptions): ServerOptions;
|
|
71
61
|
export declare function buildSite(options?: MarkupressOptions): Promise<BuildResult>;
|
package/dist/site.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAClG,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAI7G,OAAO,EAAiD,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI9F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AACD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,gIAAgI;IAChI,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,wHAAwH;IACxH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,yDAAyD;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mGAAmG;IACnG,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAClC,oHAAoH;IACpH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAQD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAE7F;AAmBD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,aAAa,CAgIzE;AAaD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,iBAAsB,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa,CAS5G;AAGD,wBAAsB,SAAS,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAwD;AAC9I,wBAAsB,WAAW,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAA0D;AACxJ,oFAAoF;AACpF,wBAAsB,OAAO,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAsD"}
|
package/dist/site.js
CHANGED
|
@@ -1,24 +1,37 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { readdir } from 'node:fs/promises';
|
|
3
|
+
import { isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { buildApplication, devApplication, loadConfig, previewApplication } from '@nextwebwg/htmlkit';
|
|
6
|
+
import { isIndex } from './content.js';
|
|
7
|
+
import { lastUpdated } from './git.js';
|
|
6
8
|
import { markdown } from './markdown.js';
|
|
7
|
-
import {
|
|
9
|
+
import { footer, generatedSidebar, siteLink } from './navigation.js';
|
|
8
10
|
import { themeScript } from './theme.js';
|
|
9
11
|
import { versionLinks } from './versions.js';
|
|
12
|
+
const optionNames = ['root', 'contentDir', 'base', 'origin', 'robots', 'outDir', 'title', 'versions', 'defaultVersion', 'host', 'port', 'lineNumbers', 'logo', 'favicon', 'nav', 'editLink'];
|
|
10
13
|
function inside(root, path) {
|
|
11
14
|
const part = relative(root, path);
|
|
12
15
|
return part === '' || (!isAbsolute(part) && part !== '..' && !part.startsWith('../') && !part.startsWith('..\\'));
|
|
13
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* A snapshot recorded in `versions/<id>/`, which keeps the project's layout: its content is `versions/<id>/<contentDir>`
|
|
19
|
+
* and its public files `versions/<id>/public`. Snapshots follow the current version, highest number first.
|
|
20
|
+
*/
|
|
21
|
+
export function snapshotOf(root, id, contentDir) {
|
|
22
|
+
return { id, directory: `versions/${id}/${contentDir}`, ...(existsSync(join(root, 'versions', id, 'public')) ? { publicDir: `versions/${id}/public` } : {}) };
|
|
23
|
+
}
|
|
14
24
|
async function versions(options, root) {
|
|
15
25
|
if (options.versions)
|
|
16
26
|
return options.versions;
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
const content = options.contentDir ?? 'docs';
|
|
28
|
+
// A folder whose name starts with "." is a snapshot in progress, or its lock.
|
|
29
|
+
const ids = existsSync(join(root, 'versions')) ? (await readdir(join(root, 'versions'), { withFileTypes: true }))
|
|
30
|
+
.filter(entry => entry.isDirectory() && !entry.name.startsWith('.')).map(entry => entry.name).sort((a, b) => b.localeCompare(a, 'en', { numeric: true })) : [];
|
|
31
|
+
return [{ id: 'current', label: 'Current', directory: content }, ...ids.map(id => snapshotOf(root, id, content))];
|
|
20
32
|
}
|
|
21
33
|
const shell = fileURLToPath(new URL('../theme/shell.html', import.meta.url));
|
|
34
|
+
const homeLayout = fileURLToPath(new URL('../theme/home.html', import.meta.url));
|
|
22
35
|
const own = (path) => fileURLToPath(new URL(`../${path}`, import.meta.url));
|
|
23
36
|
// HTMLKit's css option is page-wide: Looma's :root tokens and its light/dark switch, and document defaults.
|
|
24
37
|
// A component's <style> is scoped to its own region, so these would never reach :root from the shell.
|
|
@@ -33,7 +46,7 @@ const pageStyles = [...['tokens.css', 'theme-light.css', 'theme-dark.css'].map(f
|
|
|
33
46
|
export function markupress(options = {}) {
|
|
34
47
|
const defaultVersion = options.defaultVersion ?? 'current';
|
|
35
48
|
let root = resolve(options.root ?? process.cwd());
|
|
36
|
-
let editions = [];
|
|
49
|
+
let editions = [], siteBase = '/';
|
|
37
50
|
const editionOf = (file) => editions.find(edition => inside(resolve(root, edition.directory), file));
|
|
38
51
|
// Compiled documents by version and source file. HTMLKit recompiles every page when it rediscovers, so a
|
|
39
52
|
// deleted file's stale entry is filtered by existence rather than cleared.
|
|
@@ -44,7 +57,8 @@ export function markupress(options = {}) {
|
|
|
44
57
|
styles: [own('styles/prose.css')],
|
|
45
58
|
...(options.lineNumbers === undefined ? {} : { lineNumbers: options.lineNumbers }),
|
|
46
59
|
publicDir: file => resolve(root, editionOf(file)?.publicDir ?? 'public'),
|
|
47
|
-
|
|
60
|
+
// A root-relative link is a page of the version the file belongs to.
|
|
61
|
+
home: file => { const edition = editionOf(file); return edition ? `${siteBase}v/${edition.id}/` : siteBase; },
|
|
48
62
|
onPage(page) {
|
|
49
63
|
const owners = editions.filter(edition => inside(resolve(root, edition.directory), page.file));
|
|
50
64
|
if (owners.length === 0 || page.href === undefined)
|
|
@@ -58,12 +72,22 @@ export function markupress(options = {}) {
|
|
|
58
72
|
if (twin)
|
|
59
73
|
throw new Error(`Documentation identity collision: ${twin.source} and ${page.file} (${id}).`);
|
|
60
74
|
documents.set(`${edition.id}\0${page.file}`, { id, version: edition.id, source: page.file, pathname: `/v/${edition.id}/${path}`,
|
|
61
|
-
aliases: page.aliases.map(alias => `/v/${edition.id}${alias}`), outline: page.outline,
|
|
62
|
-
page: { ...page.frontmatter, id, title: page.title
|
|
75
|
+
aliases: page.aliases.map(alias => `/v/${edition.id}${alias}`), outline: page.outline, generated: page.generated,
|
|
76
|
+
page: { ...page.frontmatter, id, title: page.title } });
|
|
63
77
|
}
|
|
64
78
|
},
|
|
65
79
|
});
|
|
66
80
|
let layoutFile = shell;
|
|
81
|
+
let logo, favicon;
|
|
82
|
+
let updated = Promise.resolve(new Map());
|
|
83
|
+
/** The page's front matter, with its resolved edit link and the date its file last changed in git. */
|
|
84
|
+
async function pageData(doc) {
|
|
85
|
+
const file = relative(root, doc.source).split(sep).join('/');
|
|
86
|
+
const { editLink, ...page } = doc.page;
|
|
87
|
+
const edit = editLink ?? (options.editLink === undefined ? false : options.editLink + encodeURI(file));
|
|
88
|
+
const date = (await updated).get(file);
|
|
89
|
+
return { ...page, ...(edit === false ? {} : { editLink: edit }), ...(date === undefined ? {} : { lastUpdated: date }) };
|
|
90
|
+
}
|
|
67
91
|
async function load({ navigation, navigationTree, breadcrumbs, pager, url, base, propNames }) {
|
|
68
92
|
const path = '/' + url.pathname.slice(base.length);
|
|
69
93
|
const selected = /^\/v\/([^/]+)\//.exec(path)?.[1] ?? defaultVersion;
|
|
@@ -76,51 +100,60 @@ export function markupress(options = {}) {
|
|
|
76
100
|
const data = { title: options.title ?? 'Documentation', home: base, navigation: items,
|
|
77
101
|
...await chrome(items, navigationTree, catalog.filter(doc => doc.version === selected), selected, within.current, base),
|
|
78
102
|
versions: versionLinks(catalog, editions, page?.id ?? 'index', selected, base),
|
|
79
|
-
crumbs: await breadcrumbs(within), ...await pager(within), outline: page?.outline ?? [], page: page
|
|
103
|
+
crumbs: await breadcrumbs(within), ...await pager(within), outline: page?.outline ?? [], page: page ? await pageData(page) : {},
|
|
104
|
+
contents: page?.generated ? contents(await navigationTree({ ...within, from: page.pathname }), catalog, base, within.current) : [] };
|
|
80
105
|
// HTMLKit rejects props a layout does not declare, so a layout receives the data its contract names, and
|
|
81
106
|
// nested folder layouts' loaders read all of it from parent.markupress.
|
|
82
107
|
return { props: Object.fromEntries(propNames.filter(name => name in data).map(name => [name, data[name]])), data: { markupress: data } };
|
|
83
108
|
}
|
|
84
|
-
/** The shell around the page: top navigation, logo, badge, the section's sidebar and the footer. */
|
|
109
|
+
/** The shell around the page: the sections and links of the top navigation, logo, badge, the section's sidebar and the footer. */
|
|
85
110
|
async function chrome(items, navigationTree, pages, selected, current, base) {
|
|
86
111
|
const home = `${base}v/${selected}/`;
|
|
87
|
-
const href = (to) =>
|
|
112
|
+
const href = (to) => siteLink(to, home);
|
|
88
113
|
const file = (path) => path.startsWith('/') ? base + path.slice(1) : path;
|
|
89
114
|
// A link is the page itself, or an ancestor section of it (aria-current="true").
|
|
90
115
|
const link = ({ label, href: to }) => {
|
|
91
116
|
const target = href(to), path = target.split('#')[0];
|
|
92
117
|
return { label, href: target, current: target === current ? 'page' : path !== home && path.endsWith('/') && current.startsWith(path) ? 'true' : 'false' };
|
|
93
118
|
};
|
|
94
|
-
// The section is the
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
const collapsed = (page) => { const source = sources.get(page); return source !== undefined && isIndex(source) && category(dirname(source)).collapsed === true; };
|
|
103
|
-
const logo = typeof options.logo === 'string' ? { light: options.logo, dark: options.logo } : options.logo;
|
|
119
|
+
// The section is the page's top-level folder, else the root.
|
|
120
|
+
const top = /^([^/]+)\//.exec(current.slice(home.length))?.[1];
|
|
121
|
+
const section = top !== undefined && items.some(item => item.href.startsWith(`${home}${top}/`) && item.href !== `${home}${top}/`) ? `/${top}/` : '/';
|
|
122
|
+
// Each top-level folder with an index page is a section, linked from the top navigation by its index page.
|
|
123
|
+
const sections = (await navigationTree({ from: `/v/${selected}/`, current })).filter(node => node.href !== undefined && node.children.length > 0);
|
|
124
|
+
// Pages recompile after each edit, so a folder's collapsed state follows its index page in development.
|
|
125
|
+
const folded = new Set(pages.filter(doc => doc.page.navigation === 'collapsed').map(doc => base + doc.pathname.slice(1)));
|
|
126
|
+
const collapsed = (page) => folded.has(page);
|
|
104
127
|
const versions = editions.length > 1 ? editions.find(edition => edition.id === selected) : undefined;
|
|
128
|
+
const edition = editions.find(entry => entry.id === selected);
|
|
129
|
+
const { columns, copyright } = footer(resolve(root, edition.directory, '_footer.md'));
|
|
105
130
|
return {
|
|
106
|
-
sidebar:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if (!('items' in item))
|
|
110
|
-
return { ...link(item), items: [] };
|
|
111
|
-
const links = item.items.map(link);
|
|
112
|
-
return { label: item.label, href: '', current: links.some(entry => entry.current !== 'false') ? 'true' : 'false', items: links };
|
|
113
|
-
}),
|
|
131
|
+
sidebar: generatedSidebar(await navigationTree({ from: `/v/${selected}${section}`, current }), collapsed),
|
|
132
|
+
nav: [...sections.map(node => ({ ...link({ label: node.label, href: '/' + node.href.slice(home.length) }), icon: '' })),
|
|
133
|
+
...(options.nav ?? []).map(entry => ({ ...link(entry), icon: entry.icon === undefined ? '' : file(entry.icon) }))],
|
|
114
134
|
logo: logo === undefined ? null : { light: file(logo.light), dark: file(logo.dark ?? logo.light) },
|
|
115
|
-
favicon:
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
footer: { columns: (options.footer?.columns ?? []).map(column => ({ title: column.title, items: column.items.map(link) })), copyright: options.footer?.copyright ?? '' },
|
|
135
|
+
favicon: favicon === undefined ? null : file(favicon),
|
|
136
|
+
badge: versions ? versions.label ?? versions.id : '',
|
|
137
|
+
footer: { columns: columns.map(column => ({ title: column.title, items: column.items.map(link) })), copyright },
|
|
119
138
|
};
|
|
120
139
|
}
|
|
140
|
+
// Config is plain data, so an option from another tool, or a removed one, fails rather than doing nothing.
|
|
141
|
+
for (const name of Object.keys(options))
|
|
142
|
+
if (!optionNames.includes(name))
|
|
143
|
+
throw new Error(`Unknown Markupress option ${name}. Options are ${optionNames.join(', ')}.`);
|
|
144
|
+
if (options.editLink !== undefined && !options.editLink.endsWith('/'))
|
|
145
|
+
throw new Error(`The editLink option ends in /, and each page's path in the project follows it: ${options.editLink}.`);
|
|
121
146
|
return { ...pages, name: 'markupress', async config(htmlkit) {
|
|
122
147
|
root = resolve(htmlkit.root ?? root);
|
|
148
|
+
siteBase = htmlkit.base ?? '/';
|
|
149
|
+
// Conventions first: public/logo.svg, public/logo-dark.svg and public/favicon.svg, which the options override.
|
|
150
|
+
const own = (name) => existsSync(join(root, 'public', name)) ? `/${name}` : undefined;
|
|
151
|
+
const light = own('logo.svg');
|
|
152
|
+
logo = typeof options.logo === 'string' ? { light: options.logo } : options.logo ?? (light === undefined ? undefined : { light, dark: own('logo-dark.svg') ?? light });
|
|
153
|
+
favicon = options.favicon ?? own('favicon.svg');
|
|
123
154
|
editions = await versions(options, root);
|
|
155
|
+
// One git log dates every page, read once per build or development server.
|
|
156
|
+
updated = lastUpdated(root, editions.map(edition => edition.directory));
|
|
124
157
|
const ids = new Set();
|
|
125
158
|
for (const edition of editions) {
|
|
126
159
|
if (!/^[A-Za-z0-9_-]+$/.test(edition.id) || ids.has(edition.id))
|
|
@@ -129,26 +162,38 @@ export function markupress(options = {}) {
|
|
|
129
162
|
const content = resolve(root, edition.directory);
|
|
130
163
|
if (!inside(root, content))
|
|
131
164
|
throw new Error(`Version ${edition.id}: directory must be inside the project.`);
|
|
132
|
-
if (!(await readdir(content)).some(
|
|
165
|
+
if (!(await readdir(content)).some(isIndex))
|
|
133
166
|
throw new Error(`Version ${edition.id}: a root index.md landing page is required.`);
|
|
134
167
|
}
|
|
135
168
|
const home = editions.find(edition => edition.id === defaultVersion);
|
|
136
169
|
if (home === undefined)
|
|
137
170
|
throw new Error(`Unknown defaultVersion: ${defaultVersion}.`);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
layoutFile = resolve(root, options.layout);
|
|
171
|
+
const same = (a, b) => resolve(root, a.directory) === resolve(root, b.directory);
|
|
172
|
+
// The shell is the layout of Markupress's own folders only, so a site's other pages keep theirs. A site's
|
|
173
|
+
// app/layouts/default.html, which HTMLKit gives its other pages, replaces the shell and receives its loader data.
|
|
174
|
+
const replacement = join(root, 'app/layouts/default.html');
|
|
175
|
+
layoutFile = existsSync(replacement) ? replacement : shell;
|
|
144
176
|
const layout = { component: layoutFile, server: { load } };
|
|
145
|
-
|
|
146
|
-
|
|
177
|
+
// layout: home names this layout; a site's app/layouts/home.html takes its place, as HTMLKit resolves a name.
|
|
178
|
+
return { headScript: themeScript, css: pageStyles, layouts: { home: { component: homeLayout, server: { load } } },
|
|
179
|
+
// The root serves the default version's folder as its own; every further mount of a folder, the default's
|
|
180
|
+
// /v/<id>/ included, is an alias, so its pages name the first as canonical and stay out of the sitemap.
|
|
181
|
+
pages: [...editions.map((edition, index) => ({ dir: edition.directory, prefix: `/v/${edition.id}/`, layout,
|
|
182
|
+
...(same(edition, home) || editions.slice(0, index).some(earlier => same(earlier, edition)) ? { alias: true } : {}) })), { dir: home.directory, layout }] };
|
|
147
183
|
} };
|
|
148
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* A generated index's entries: the pages and folders directly in its folder, from HTMLKit's navigation tree below
|
|
187
|
+
* the index page, each with its page's description. A folder without an index page (a route group) adds its pages.
|
|
188
|
+
*/
|
|
189
|
+
function contents(tree, catalog, base, self) {
|
|
190
|
+
const descriptions = new Map(catalog.map(doc => [base + doc.pathname.slice(1), doc.page.description ?? '']));
|
|
191
|
+
const entries = (nodes) => nodes.flatMap(node => node.href === undefined ? entries(node.children) : node.href === self ? [] : [{ label: node.label, href: node.href, description: descriptions.get(node.href) ?? '' }]);
|
|
192
|
+
return entries(tree);
|
|
193
|
+
}
|
|
149
194
|
/**
|
|
150
195
|
* HTMLKit options for a Markupress site, as the CLI runs it: the site's own HTMLKit options (its `htmlkit.config.ts`)
|
|
151
|
-
* with `markupress()` added after their plugins. Markupress's own `base` and `outDir`, when set, win over HTMLKit's.
|
|
196
|
+
* with `markupress()` added after their plugins. Markupress's own `base`, `origin`, `robots` and `outDir`, when set, win over HTMLKit's.
|
|
152
197
|
*/
|
|
153
198
|
export function siteOptions(options = {}, htmlkit = {}) {
|
|
154
199
|
const root = resolve(options.root ?? htmlkit.root ?? process.cwd());
|
|
@@ -158,6 +203,7 @@ export function siteOptions(options = {}, htmlkit = {}) {
|
|
|
158
203
|
throw new Error(`htmlkit.config: the markupress command adds markupress(), which includes markdown(); remove ${listed.name}() from its plugins.`);
|
|
159
204
|
return { ...htmlkit, root, base: options.base ?? htmlkit.base ?? '/', outDir: resolve(root, options.outDir ?? htmlkit.outDir ?? 'site'),
|
|
160
205
|
plugins: [...htmlkit.plugins ?? [], markupress({ ...options, root })],
|
|
206
|
+
...(options.origin === undefined ? {} : { origin: options.origin }), ...(options.robots === undefined ? {} : { robots: options.robots }),
|
|
161
207
|
...(options.host === undefined ? {} : { host: options.host }), ...(options.port === undefined ? {} : { port: options.port }) };
|
|
162
208
|
}
|
|
163
209
|
// Each loads the site's htmlkit.config.ts or .js, as the htmlkit command would, so its plugins compose with Markupress.
|
package/dist/site.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.js","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"site.js","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"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"}
|
package/dist/versions.d.ts
CHANGED
|
@@ -14,6 +14,9 @@ export declare function versionLinks(documents: readonly {
|
|
|
14
14
|
readonly id: string;
|
|
15
15
|
readonly label?: string;
|
|
16
16
|
}[], id: string, selected: string, base: string): readonly VersionLink[];
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Snapshot author content into `versions/<id>/` without overwriting an existing edition. The snapshot is staged in a
|
|
19
|
+
* dot folder and renamed into place, so a version appears whole or not at all.
|
|
20
|
+
*/
|
|
18
21
|
export declare function snapshotVersion(id: string, options?: MarkupressOptions): Promise<DocumentationVersion>;
|
|
19
22
|
//# sourceMappingURL=versions.d.ts.map
|
package/dist/versions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2B,KAAK,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGvG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AACD,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,QAAQ,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAO1Q;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA8DhH"}
|
package/dist/versions.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { cp, mkdir, readFile, realpath, rename, rm } from 'node:fs/promises';
|
|
2
3
|
import { resolve, join, relative, isAbsolute, dirname } from 'node:path';
|
|
3
4
|
import { fileURLToPath } from 'node:url';
|
|
4
5
|
import { buildApplication, createApplication } from '@nextwebwg/htmlkit';
|
|
5
|
-
import { siteOptions } from './site.js';
|
|
6
|
+
import { siteOptions, snapshotOf } from './site.js';
|
|
6
7
|
import { stylesheet } from './styles.js';
|
|
7
8
|
/** URLs are projected from logical identity; renaming a route never changes the switch target. */
|
|
8
9
|
export function versionLinks(documents, versions, id, selected, base) {
|
|
@@ -13,7 +14,10 @@ export function versionLinks(documents, versions, id, selected, base) {
|
|
|
13
14
|
note: target ? '' : `This document is unavailable in ${version.label ?? version.id}; open its documentation home.` };
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Snapshot author content into `versions/<id>/` without overwriting an existing edition. The snapshot is staged in a
|
|
19
|
+
* dot folder and renamed into place, so a version appears whole or not at all.
|
|
20
|
+
*/
|
|
17
21
|
export async function snapshotVersion(id, options = {}) {
|
|
18
22
|
if (!/^[A-Za-z0-9_-]+$/.test(id) || id === 'current')
|
|
19
23
|
throw new Error('Snapshot id must be a URL slug other than current.');
|
|
@@ -23,7 +27,7 @@ export async function snapshotVersion(id, options = {}) {
|
|
|
23
27
|
const relation = relative(root, source);
|
|
24
28
|
if (isAbsolute(relation) || relation.startsWith('..'))
|
|
25
29
|
throw new Error('Snapshot contentDir must be inside the project.');
|
|
26
|
-
const snapshots = join(root, '
|
|
30
|
+
const snapshots = join(root, 'versions');
|
|
27
31
|
await mkdir(snapshots, { recursive: true });
|
|
28
32
|
const lock = join(snapshots, '.snapshot-lock');
|
|
29
33
|
try {
|
|
@@ -31,36 +35,20 @@ export async function snapshotVersion(id, options = {}) {
|
|
|
31
35
|
}
|
|
32
36
|
catch (error) {
|
|
33
37
|
if (error.code === 'EEXIST')
|
|
34
|
-
throw new Error('Another snapshot owns
|
|
38
|
+
throw new Error('Another snapshot owns versions/.snapshot-lock; finish or recover that operation first.');
|
|
35
39
|
throw error;
|
|
36
40
|
}
|
|
37
41
|
const destination = join(snapshots, id);
|
|
38
|
-
|
|
42
|
+
const staging = join(snapshots, `.${id}-pending`);
|
|
39
43
|
try {
|
|
40
|
-
|
|
41
|
-
let versions = [];
|
|
42
|
-
try {
|
|
43
|
-
versions = JSON.parse(await readFile(manifest, 'utf8'));
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
if (error.code !== 'ENOENT')
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
if (versions.some(version => version.id === id))
|
|
44
|
+
if (existsSync(destination))
|
|
50
45
|
throw new Error(`Documentation version ${id} already exists.`);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
owned = true;
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
if (error.code === 'EEXIST')
|
|
57
|
-
throw new Error(`Documentation version ${id} already exists.`);
|
|
58
|
-
throw error;
|
|
59
|
-
}
|
|
46
|
+
await rm(staging, { recursive: true, force: true });
|
|
47
|
+
await mkdir(staging);
|
|
60
48
|
// Let HTMLKit/Vite identify the authored HTML, module, stylesheet and asset closure.
|
|
61
49
|
// Mirroring project-relative paths keeps imports valid without rewriting source code.
|
|
62
50
|
const site = siteOptions({ ...options, versions: [{ id: 'current', directory: relation }], defaultVersion: 'current' });
|
|
63
|
-
const validation = join(
|
|
51
|
+
const validation = join(staging, '.validation');
|
|
64
52
|
const built = await buildApplication({ ...site, outDir: validation });
|
|
65
53
|
const application = await createApplication(site);
|
|
66
54
|
// Files that Markdown references, which HTMLKit serves, belong to the snapshot too.
|
|
@@ -91,39 +79,31 @@ export async function snapshotVersion(id, options = {}) {
|
|
|
91
79
|
for (const dependency of stylesheet(await readFile(input, 'utf8'), input, false).files)
|
|
92
80
|
inputs.add(dependency);
|
|
93
81
|
}
|
|
94
|
-
|
|
95
|
-
await cp(source, join(mirror, relation), { recursive: true, dereference: false });
|
|
82
|
+
await cp(source, join(staging, relation), { recursive: true, dereference: false });
|
|
96
83
|
for (const input of inputs) {
|
|
97
84
|
const file = input.split('?')[0];
|
|
98
85
|
if (file.endsWith('.htmlkit.css'))
|
|
99
86
|
continue; // HTMLKit's virtual inline stylesheet, not an authored file.
|
|
100
87
|
const path = relative(canonicalRoot, await realpath(file));
|
|
101
|
-
if (isAbsolute(path) || path.startsWith('..') || path.split(/[/\\]/).
|
|
88
|
+
if (isAbsolute(path) || path.startsWith('..') || path.split(/[/\\]/).includes('node_modules') || /^versions[/\\]/.test(path))
|
|
102
89
|
continue;
|
|
103
|
-
const target = join(
|
|
90
|
+
const target = join(staging, path);
|
|
104
91
|
await mkdir(dirname(target), { recursive: true });
|
|
105
92
|
await cp(file, target);
|
|
106
93
|
}
|
|
107
|
-
let publicDir;
|
|
108
94
|
try {
|
|
109
|
-
await cp(join(root, 'public'), join(
|
|
110
|
-
publicDir = `versioned_docs/${id}/_source/public`;
|
|
95
|
+
await cp(join(root, 'public'), join(staging, 'public'), { recursive: true, dereference: false });
|
|
111
96
|
}
|
|
112
97
|
catch (error) {
|
|
113
98
|
if (error.code !== 'ENOENT')
|
|
114
99
|
throw error;
|
|
115
100
|
}
|
|
116
101
|
await rm(validation, { recursive: true, force: true });
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
await writeFile(pending, JSON.stringify([...versions, version], null, 2) + '\n');
|
|
120
|
-
await rename(pending, manifest);
|
|
121
|
-
owned = false;
|
|
122
|
-
return version;
|
|
102
|
+
await rename(staging, destination);
|
|
103
|
+
return snapshotOf(root, id, relation.replace(/\\/g, '/'));
|
|
123
104
|
}
|
|
124
105
|
finally {
|
|
125
|
-
|
|
126
|
-
await rm(destination, { recursive: true, force: true });
|
|
106
|
+
await rm(staging, { recursive: true, force: true });
|
|
127
107
|
await rm(lock, { recursive: true, force: true });
|
|
128
108
|
}
|
|
129
109
|
}
|
package/dist/versions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"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"}
|