@heroiclands/package-build 23.13.0 → 24.0.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/CHANGELOG.md +36 -0
- package/README.md +2 -1
- package/assets/preview/gitea.ini +12 -7
- package/assets/styles/content-base.css +150 -1
- package/bin/content-commands.mjs +356 -210
- package/bin/package-build.mjs +3 -2
- package/ci/check-banners.mjs +7 -7
- package/config.mjs +21 -6
- package/content-config.mjs +199 -80
- package/docs/api.md +93 -72
- package/docs/authoring/links-and-markup.md +316 -78
- package/docs/commands.md +244 -78
- package/docs/configuration.md +210 -102
- package/docs/content-format.md +2 -2
- package/docs/diagnostics.md +2 -2
- package/docs/getting-started.md +1 -1
- package/docs/guides/icons.md +1 -1
- package/docs/guides/module-project.md +5 -8
- package/docs/guides/release-and-deploy.md +2 -2
- package/docs/guides/site.md +112 -23
- package/docs/guides/system-project.md +1 -1
- package/docs/guides/writing-in-invented-scripts.md +1247 -0
- package/docs/index.md +1 -0
- package/docs/project-setup.md +28 -30
- package/docs/reference/format-details.md +589 -308
- package/docs/reference/note-types.md +40 -10
- package/docs/reference/theme-pages.md +127 -108
- package/docs/source-preview.md +15 -1
- package/engine/asset-shipping.mjs +22 -10
- package/engine/base-compiler.mjs +62 -104
- package/engine/changelog-lint.mjs +1 -1
- package/engine/content-address.mjs +1 -1
- package/engine/content-alerts.mjs +8 -4
- package/engine/content-blocks.mjs +26 -11
- package/engine/content-embeds.mjs +1 -1
- package/engine/content-expand.mjs +376 -0
- package/engine/content-figures.mjs +13 -6
- package/engine/content-format.yaml +8 -0
- package/engine/content-glyphs.mjs +213 -0
- package/engine/content-images.mjs +6 -7
- package/engine/content-links.mjs +3 -3
- package/engine/content-lint.mjs +1 -1
- package/engine/content-render.mjs +453 -0
- package/engine/content-scripts.mjs +326 -27
- package/engine/content-spans.mjs +4 -1
- package/engine/content-styles.mjs +91 -0
- package/engine/content-symbols.mjs +186 -0
- package/engine/content-verse.mjs +6 -18
- package/engine/core-report.mjs +169 -0
- package/engine/core-vocabulary.mjs +208 -0
- package/engine/dictionary-html.mjs +119 -0
- package/engine/field-reference.mjs +1 -1
- package/engine/frontmatter-lint.mjs +1 -1
- package/engine/heading-attributes.mjs +89 -0
- package/engine/helpers.mjs +61 -101
- package/engine/homepage.mjs +17 -29
- package/engine/html-minify.mjs +70 -0
- package/engine/index.mjs +8 -5
- package/engine/language-rows.mjs +8 -2
- package/engine/language-terms.mjs +115 -14
- package/engine/language-words.mjs +12 -0
- package/engine/logographic.mjs +255 -0
- package/engine/map-lexicon.mjs +221 -25
- package/engine/map-places.mjs +5 -4
- package/engine/markdown-expressions.mjs +0 -2
- package/engine/markdownlint-run.mjs +9 -3
- package/engine/markup-validation.mjs +21 -0
- package/engine/metre-declaration.mjs +134 -0
- package/engine/note-matter.mjs +2 -2
- package/engine/note-vocabulary.mjs +187 -3
- package/engine/pdf-build.mjs +68 -133
- package/engine/pdf-render.mjs +102 -44
- package/engine/post-fields.mjs +157 -0
- package/engine/preview-index.mjs +130 -0
- package/engine/preview-source.mjs +450 -0
- package/engine/project-init.mjs +5 -12
- package/engine/prose-config.mjs +3 -3
- package/engine/run-words.mjs +3 -2
- package/engine/script-emphasis-terms.mjs +38 -0
- package/engine/script-emphasis.mjs +295 -0
- package/engine/script-font-delivery.mjs +4 -4
- package/engine/site-build.mjs +259 -314
- package/engine/site-config.mjs +26 -238
- package/engine/site-files.mjs +175 -0
- package/engine/site-index.mjs +9 -4
- package/engine/site-preview.mjs +50 -523
- package/engine/site-render.mjs +593 -0
- package/engine/site-root.mjs +22 -13
- package/engine/site-search.mjs +161 -0
- package/engine/site-serve.mjs +273 -0
- package/engine/site-theme-banner.mjs +154 -0
- package/engine/site-theme-urls.mjs +125 -0
- package/engine/site-theme.mjs +926 -0
- package/engine/text-maps.mjs +57 -10
- package/engine/typographer.mjs +248 -0
- package/engine/verse-metre.mjs +357 -0
- package/engine/wikilink-syntax.mjs +29 -47
- package/engine/wikilinks.mjs +758 -279
- package/engine/word-forms.mjs +39 -24
- package/engine/word-rows.mjs +12 -2
- package/engine/word-terms.mjs +29 -4
- package/manifest.mjs +3 -4
- package/package.json +10 -7
- package/{hugo-theme → site-theme}/data/banners.yaml +6 -10
- package/site-theme/layouts/base.hbs +31 -0
- package/site-theme/layouts/blog-list.hbs +30 -0
- package/site-theme/layouts/blog-post.hbs +40 -0
- package/site-theme/layouts/home.hbs +35 -0
- package/site-theme/layouts/list.hbs +20 -0
- package/site-theme/layouts/not-found.hbs +31 -0
- package/site-theme/layouts/page.hbs +7 -0
- package/site-theme/partials/copy-buttons.hbs +37 -0
- package/site-theme/partials/draft-notice.hbs +5 -0
- package/site-theme/partials/exturl.hbs +2 -0
- package/{hugo-theme/layouts/partials/footer.html → site-theme/partials/footer.hbs} +10 -7
- package/site-theme/partials/header.hbs +44 -0
- package/site-theme/partials/hero-banner.hbs +11 -0
- package/site-theme/partials/infobox-entry.hbs +2 -0
- package/site-theme/partials/infobox-section.hbs +31 -0
- package/site-theme/partials/infobox-value.hbs +2 -0
- package/site-theme/partials/infobox.hbs +18 -0
- package/site-theme/partials/list-members.hbs +9 -0
- package/site-theme/partials/nav-links.hbs +5 -0
- package/site-theme/partials/page-body.hbs +48 -0
- package/site-theme/partials/page-list.hbs +14 -0
- package/site-theme/partials/related.hbs +24 -0
- package/site-theme/partials/search-meta.hbs +6 -0
- package/site-theme/partials/search-names.hbs +2 -0
- package/site-theme/partials/search.hbs +52 -0
- package/site-theme/partials/tags.hbs +4 -0
- package/site-theme/partials/toc.hbs +7 -0
- package/{hugo-theme → site-theme}/static/css/style.css +14 -0
- package/stage.mjs +1 -2
- package/types/config.d.mts +8 -4
- package/types/content-config.d.mts +15 -15
- package/types/engine/asset-shipping.d.mts +5 -2
- package/types/engine/base-compiler.d.mts +20 -2
- package/types/engine/content-address.d.mts +1 -1
- package/types/engine/content-alerts.d.mts +8 -2
- package/types/engine/content-blocks.d.mts +11 -4
- package/types/engine/content-expand.d.mts +288 -0
- package/types/engine/content-figures.d.mts +11 -3
- package/types/engine/content-glyphs.d.mts +85 -0
- package/types/engine/content-images.d.mts +6 -7
- package/types/engine/content-links.d.mts +1 -1
- package/types/engine/content-render.d.mts +199 -0
- package/types/engine/content-scripts.d.mts +62 -0
- package/types/engine/content-spans.d.mts +1 -1
- package/types/engine/content-styles.d.mts +33 -0
- package/types/engine/content-symbols.d.mts +35 -0
- package/types/engine/core-report.d.mts +45 -0
- package/types/engine/core-vocabulary.d.mts +53 -0
- package/types/engine/dictionary-html.d.mts +8 -0
- package/types/engine/field-reference.d.mts +1 -1
- package/types/engine/heading-attributes.d.mts +20 -0
- package/types/engine/helpers.d.mts +3 -10
- package/types/engine/homepage.d.mts +11 -24
- package/types/engine/html-minify.d.mts +9 -0
- package/types/engine/index.d.mts +2 -1
- package/types/engine/language-terms.d.mts +24 -2
- package/types/engine/logographic.d.mts +45 -0
- package/types/engine/map-lexicon.d.mts +48 -8
- package/types/engine/map-places.d.mts +8 -0
- package/types/engine/markdown-expressions.d.mts +0 -2
- package/types/engine/metre-declaration.d.mts +39 -0
- package/types/engine/pdf-render.d.mts +6 -2
- package/types/engine/post-fields.d.mts +44 -0
- package/types/engine/preview-index.d.mts +72 -0
- package/types/engine/preview-source.d.mts +51 -0
- package/types/engine/script-emphasis-terms.d.mts +21 -0
- package/types/engine/script-emphasis.d.mts +84 -0
- package/types/engine/script-font-delivery.d.mts +4 -4
- package/types/engine/site-build.d.mts +71 -113
- package/types/engine/site-config.d.mts +14 -134
- package/types/engine/site-files.d.mts +73 -0
- package/types/engine/site-index.d.mts +11 -3
- package/types/engine/site-preview.d.mts +15 -19
- package/types/engine/site-render.d.mts +171 -0
- package/types/engine/site-root.d.mts +12 -4
- package/types/engine/site-search.d.mts +54 -0
- package/types/engine/site-serve.d.mts +44 -0
- package/types/engine/site-theme-banner.d.mts +51 -0
- package/types/engine/site-theme-urls.d.mts +60 -0
- package/types/engine/site-theme.d.mts +127 -0
- package/types/engine/text-maps.d.mts +17 -3
- package/types/engine/typographer.d.mts +11 -0
- package/types/engine/verse-metre.d.mts +131 -0
- package/types/engine/wikilink-syntax.d.mts +30 -48
- package/types/engine/wikilinks.d.mts +330 -14
- package/types/engine/word-forms.d.mts +3 -2
- package/types/manifest.d.mts +3 -4
- package/types/stage.d.mts +1 -2
- package/types/vendor/markdownlint.d.mts +8 -0
- package/vendor/markdownlint.mjs +20388 -0
- package/engine/web-wikilinks.mjs +0 -594
- package/hugo-theme/layouts/404.html +0 -85
- package/hugo-theme/layouts/_default/baseof.html +0 -67
- package/hugo-theme/layouts/_default/list.html +0 -139
- package/hugo-theme/layouts/_default/single.html +0 -4
- package/hugo-theme/layouts/blog/list.html +0 -54
- package/hugo-theme/layouts/blog-post/single.html +0 -36
- package/hugo-theme/layouts/index.html +0 -75
- package/hugo-theme/layouts/partials/banner-url.html +0 -141
- package/hugo-theme/layouts/partials/cdn-url.html +0 -36
- package/hugo-theme/layouts/partials/dictionary-lists.html +0 -58
- package/hugo-theme/layouts/partials/draft-notice.html +0 -41
- package/hugo-theme/layouts/partials/draft-state.html +0 -26
- package/hugo-theme/layouts/partials/header.html +0 -35
- package/hugo-theme/layouts/partials/hero-banner.html +0 -85
- package/hugo-theme/layouts/partials/infobox/entry.html +0 -18
- package/hugo-theme/layouts/partials/infobox/items.html +0 -26
- package/hugo-theme/layouts/partials/infobox/section.html +0 -56
- package/hugo-theme/layouts/partials/infobox/value.html +0 -43
- package/hugo-theme/layouts/partials/infobox.html +0 -57
- package/hugo-theme/layouts/partials/page-body.html +0 -152
- package/hugo-theme/layouts/partials/related.html +0 -138
- package/hugo-theme/layouts/partials/search.html +0 -84
- package/hugo-theme/layouts/partials/site-url.html +0 -32
- package/hugo-theme/layouts/partials/tags.html +0 -30
- package/hugo-theme/layouts/partials/toc.html +0 -28
- package/hugo-theme/layouts/partials/warn-missing-banner.html +0 -3
- package/hugo-theme/layouts/shortcodes/cartouche.html +0 -64
- package/hugo-theme/layouts/shortcodes/exturl.html +0 -12
- package/hugo-theme/layouts/shortcodes/glyph.html +0 -43
- package/hugo-theme/layouts/shortcodes/pagelist.html +0 -63
- package/hugo-theme/theme.toml +0 -11
- package/types/engine/web-wikilinks.d.mts +0 -107
- /package/{hugo-theme → site-theme}/data/banner-kinds.yaml +0 -0
- /package/{hugo-theme → site-theme}/static/css/sohl-icons.css +0 -0
- /package/{hugo-theme → site-theme}/static/fonts/game-icons-kb.woff2 +0 -0
- /package/{hugo-theme → site-theme}/static/img/banners/takheperu-hieroglyphs.svg +0 -0
- /package/{hugo-theme → site-theme}/static/img/cartouches/takheperu.svg +0 -0
- /package/{hugo-theme → site-theme}/static/js/inline-spoilers.js +0 -0
package/docs/guides/site.md
CHANGED
|
@@ -7,10 +7,9 @@ subType: howto
|
|
|
7
7
|
|
|
8
8
|
# Build a content website
|
|
9
9
|
|
|
10
|
-
`package-build site`
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
note it publishes.
|
|
10
|
+
`package-build site build` renders the package's content notes as a website
|
|
11
|
+
with the shared theme. The build reads the same note addresses used by content
|
|
12
|
+
indexes and links, so a page's URL follows the note it publishes.
|
|
14
13
|
|
|
15
14
|
The site has an authored homepage and one page for each other publishable note
|
|
16
15
|
in the content tree. The [configuration reference](../configuration.md)
|
|
@@ -62,15 +61,13 @@ site:
|
|
|
62
61
|
description: A guide to the setting and its people.
|
|
63
62
|
```
|
|
64
63
|
|
|
65
|
-
The site title
|
|
64
|
+
The site title is the title of every page. `site.description`
|
|
66
65
|
is plain text for the page's metadata. `site.assets` is an absolute HTTP or
|
|
67
66
|
HTTPS host for imagery. `package.json` supplies the homepage URL; it must
|
|
68
67
|
agree with the content package's address. The
|
|
69
68
|
[configuration reference](../configuration.md#site) covers the other site
|
|
70
|
-
keys, including `base`, `packages`,
|
|
69
|
+
keys, including `base`, `packages`, and `notfound`.
|
|
71
70
|
|
|
72
|
-
`site.hugo` can add Hugo options the build does not derive. Keys the build
|
|
73
|
-
owns, such as `baseURL`, `title`, and the generated menu, are refused there.
|
|
74
71
|
The menu comes from the navigation fetched by `package-build deps fetch`.
|
|
75
72
|
The site build reads that cached navigation and reports a missing cache.
|
|
76
73
|
|
|
@@ -107,10 +104,54 @@ record available. A SQL fence queries the content index; the
|
|
|
107
104
|
[content format](../content-format.md) defines its result columns and fence
|
|
108
105
|
options.
|
|
109
106
|
|
|
110
|
-
The build writes no automatic
|
|
111
|
-
the
|
|
112
|
-
|
|
113
|
-
|
|
107
|
+
The build writes no automatic type or listing pages between the homepage and
|
|
108
|
+
the authored pages: a package's navigation above individual notes is a set of
|
|
109
|
+
authored pages, each choosing its own contents. A site writes tag pages only
|
|
110
|
+
with `site.tags`, and section pages only for the sections `site.sections` and
|
|
111
|
+
`site.feed` name.
|
|
112
|
+
|
|
113
|
+
## Write a blog
|
|
114
|
+
|
|
115
|
+
A blog is a section of posts. A post is a `doc` note of `subType: post`, which
|
|
116
|
+
states the day it was published and may name who wrote it; its `tags` are the
|
|
117
|
+
ones any note carries:
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
---
|
|
121
|
+
type: doc
|
|
122
|
+
subType: post
|
|
123
|
+
shortcode: welcome
|
|
124
|
+
name: { full: Welcome to Heroic Lands }
|
|
125
|
+
description: A first post, and a short note on what this blog is for.
|
|
126
|
+
tags: [meta, announcements]
|
|
127
|
+
data:
|
|
128
|
+
date: 2026-04-15
|
|
129
|
+
author: Tom Rodriguez
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
The first post.
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
A post that names no `data.author` carries the site's byline, the first entry
|
|
136
|
+
of `authors`. `site.feed` names the section the posts are published in, and
|
|
137
|
+
`site.sections` can give that section a page of its own, a `doc` note whose
|
|
138
|
+
title and body introduce the list:
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
site:
|
|
142
|
+
sections:
|
|
143
|
+
blog: doc-blog
|
|
144
|
+
feed: blog
|
|
145
|
+
tags: true
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The section's page at `/blog/` lists every post newest first, and
|
|
149
|
+
`/blog/atom.xml` feeds them. A post publishes at its own address,
|
|
150
|
+
`/doc-welcome/`, like any note, and a link to `doc-blog` reaches `/blog/`. With
|
|
151
|
+
`site.tags`, each tag a page carries links to a page listing every page that
|
|
152
|
+
carries it. See [where a site is served, and what it
|
|
153
|
+
lists](../configuration.md#where-a-site-is-served-and-what-it-lists) for every
|
|
154
|
+
key.
|
|
114
155
|
|
|
115
156
|
## Use links, relations, and maps
|
|
116
157
|
|
|
@@ -142,7 +183,7 @@ format and link behavior in the [content format](../content-format.md).
|
|
|
142
183
|
|
|
143
184
|
## What an emitted page carries
|
|
144
185
|
|
|
145
|
-
A
|
|
186
|
+
A page is drawn from its front matter: the note's own
|
|
146
187
|
front matter, plus the values the build derives. Which is which matters,
|
|
147
188
|
because an authored value under a derived key is discarded.
|
|
148
189
|
|
|
@@ -191,7 +232,7 @@ in `devDependencies`, as the
|
|
|
191
232
|
describes. Nothing else is configured: the build reads which faces the notes use
|
|
192
233
|
from their `font=` keys.
|
|
193
234
|
|
|
194
|
-
`package-build site` copies the font stylesheet, the WOFF2 files and the
|
|
235
|
+
`package-build site build` copies the font stylesheet, the WOFF2 files and the
|
|
195
236
|
licence to a path that names the fonts package's version,
|
|
196
237
|
`fonts/heroiclands/<version>/` beside the pages, and the theme links the
|
|
197
238
|
stylesheet from every page. The copied stylesheet lists only the WOFF2
|
|
@@ -206,16 +247,64 @@ package.
|
|
|
206
247
|
```bash
|
|
207
248
|
package-build deps fetch
|
|
208
249
|
package-build content-index
|
|
209
|
-
package-build site
|
|
210
|
-
|
|
250
|
+
package-build site build
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
`package-build site build` renders every page and writes the site under
|
|
254
|
+
`build/site/<contentPackage>/`: the pages, `404.html`, `sitemap.xml`, the
|
|
255
|
+
theme's files and the script fonts, then `_headers` beside it and the search
|
|
256
|
+
index inside it. Nothing else renders the pages: the body of each is the same
|
|
257
|
+
HTML the Foundry journals and the editor preview read, drawn into the site
|
|
258
|
+
theme's layouts and minified.
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
package-build site serve
|
|
211
262
|
```
|
|
212
263
|
|
|
213
|
-
`package-build site`
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
264
|
+
`package-build site serve` builds the site the same way and serves it at
|
|
265
|
+
`http://127.0.0.1:1313/<contentPackage>/`. Edit a note and its page is written
|
|
266
|
+
again and the browser reloads; edit the theme and every page is drawn again.
|
|
267
|
+
A change that moves, renames or adds a note builds the whole site again. See
|
|
268
|
+
[`site serve`](../commands.md#package-build-site-serve) for the whole table.
|
|
218
269
|
|
|
219
270
|
A package created by `package-build init` includes `npm run build:site` for
|
|
220
|
-
|
|
221
|
-
|
|
271
|
+
`site build` and `npm run serve:site` for `site serve`, each preceded by the
|
|
272
|
+
dependency and content-index steps. Neither needs anything installed beyond
|
|
273
|
+
the project's dependencies.
|
|
274
|
+
|
|
275
|
+
## Search
|
|
276
|
+
|
|
277
|
+
A site whose `site.search` is left on carries a search box in its header and a
|
|
278
|
+
[Pagefind](https://pagefind.app) index beside its pages. A search can be
|
|
279
|
+
narrowed by what each page tells it:
|
|
280
|
+
|
|
281
|
+
| Filter | Values |
|
|
282
|
+
| ----------- | -------------------------------------------- |
|
|
283
|
+
| `package` | the package that publishes the note |
|
|
284
|
+
| `type` | the note's `type` |
|
|
285
|
+
| `subtype` | the note's `subType` |
|
|
286
|
+
| `culture` | the name of the culture `data.culture` names |
|
|
287
|
+
| `continent` | the continent the note lies in |
|
|
288
|
+
| `region` | the outermost region beneath that continent |
|
|
289
|
+
|
|
290
|
+
A place lies where its `parents` lead, a being where its `data.homes` are, and
|
|
291
|
+
a scenario where its `data.locations` are. A continent is a `place/region`
|
|
292
|
+
whose parent is the world, and the region a note is found under is the region
|
|
293
|
+
directly beneath its continent, however deep the note sits: a settlement in a
|
|
294
|
+
valley in a march is found under the march. A note that lies in more than one
|
|
295
|
+
place carries every continent and region it reaches, so a being with a home in
|
|
296
|
+
each of two regions is found under both.
|
|
297
|
+
|
|
298
|
+
A note's name and its aliases count ten times a word of its body, so a search
|
|
299
|
+
for a name opens that note first and a search for an alias finds it. A result
|
|
300
|
+
shows the note's `data.icon`, or its hero banner where it has none. A note's
|
|
301
|
+
tags and its draft state are not filters. Secret blocks, inline secrets and
|
|
302
|
+
`.secret` sections are kept out of the index.
|
|
303
|
+
|
|
304
|
+
A post carries `author` and `tags` filters and sorts by its `date`. A site's
|
|
305
|
+
search can read other sites' indexes beside its own: given each package site in
|
|
306
|
+
[`site.mergeIndexes`](../configuration.md#where-a-site-is-served-and-what-it-lists),
|
|
307
|
+
the search box finds every site's pages from one box. Each index is read from
|
|
308
|
+
`/<package>/pagefind/` on the site's own origin, so the merged search works
|
|
309
|
+
where the sites share an origin and finds only the site's own pages under
|
|
310
|
+
`package-build site serve`.
|
|
@@ -40,6 +40,6 @@ npm run build:book
|
|
|
40
40
|
npm run build:noci
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
`build:db` writes the content index, stages assets, and compiles configured packs. `build:site`
|
|
43
|
+
`build:db` writes the content index, stages assets, and compiles configured packs. `build:site` renders the site; `serve:site` serves it locally. `build:book` uses Typst. `build:noci` runs lint, database, and manifest steps without reinstalling dependencies. Inspect `build/packs-json/` for compiled document data and `build/stage/` for what Foundry receives. Everything under `build/` is generated and can be deleted.
|
|
44
44
|
|
|
45
45
|
The [testing guide](e2e.md) covers a disposable Foundry world. The [release guide](release-and-deploy.md) covers packaging and deployment. Site deployment needs its own hosting configuration; local builds do not.
|