@heroiclands/package-build 20.3.1 → 20.5.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 +351 -0
- package/CONTENT.md +322 -110
- package/README.md +21 -10
- package/bin/content-build.mjs +204 -92
- package/bin/package-build.mjs +48 -15
- package/config.mjs +6 -8
- package/content-config.mjs +518 -151
- package/docs/api.md +1352 -0
- package/docs/commands.md +1609 -0
- package/docs/configuration.md +1432 -0
- package/docs/content-format.md +73 -74
- package/docs/diagnostics.md +356 -0
- package/docs/getting-started.md +813 -0
- package/docs/project-setup.md +469 -0
- package/e2e.mjs +4 -4
- package/engine/actor-compiler.mjs +64 -61
- package/engine/address-charset.mjs +6 -6
- package/engine/address-diff.mjs +57 -52
- package/engine/anchored-sections.mjs +1 -1
- package/engine/anchors.mjs +1 -1
- package/engine/base-compiler.mjs +42 -38
- package/engine/bundle-notes.mjs +4 -4
- package/engine/bundles.mjs +17 -8
- package/engine/code-fences.mjs +3 -3
- package/engine/compendiums.mjs +8 -8
- package/engine/compile-corpus.mjs +4 -5
- package/engine/content-address.mjs +24 -24
- package/engine/content-charset.mjs +1 -1
- package/engine/content-format-check.mjs +24 -25
- package/engine/content-format.mjs +8 -8
- package/engine/content-html.mjs +202 -0
- package/engine/content-icons.mjs +196 -165
- package/engine/content-index.mjs +61 -40
- package/engine/content-links.mjs +74 -41
- package/engine/content-lint.mjs +64 -34
- package/engine/content-package.mjs +7 -9
- package/engine/content-slug.mjs +2 -2
- package/engine/content-tables.mjs +38 -34
- package/engine/content-tree.mjs +1 -1
- package/engine/derived-fields.mjs +174 -0
- package/engine/diagnostics.mjs +3 -4
- package/engine/document-subtypes.mjs +6 -7
- package/engine/field-reference.mjs +8 -8
- package/engine/field-spec.mjs +29 -30
- package/engine/folder-notes.mjs +18 -16
- package/engine/foreign-catalog.mjs +8 -9
- package/engine/foundry-entries.mjs +19 -20
- package/engine/frontmatter-lint.mjs +95 -103
- package/engine/frontmatter.mjs +11 -11
- package/engine/generate.mjs +44 -39
- package/engine/helpers.mjs +147 -84
- package/engine/homepage.mjs +20 -22
- package/engine/ids.mjs +15 -15
- package/engine/index-records.mjs +4 -4
- package/engine/index.mjs +26 -10
- package/engine/item-compiler.mjs +54 -29
- package/engine/item-docs.mjs +11 -13
- package/engine/item-registry.mjs +13 -13
- package/engine/journals.mjs +24 -15
- package/engine/macros.mjs +3 -3
- package/engine/map-notes.mjs +6 -6
- package/engine/metadata-index.mjs +5 -5
- package/engine/note-claims.mjs +51 -41
- package/engine/note-ids.mjs +5 -5
- package/engine/note-package.mjs +4 -4
- package/engine/note-renames.mjs +3 -3
- package/engine/note-schemas.mjs +3 -8
- package/engine/note-vocabulary.mjs +56 -54
- package/engine/pack-config.mjs +39 -25
- package/engine/pack-router.mjs +0 -0
- package/engine/pdf-build.mjs +464 -0
- package/engine/pdf-fonts.mjs +420 -0
- package/engine/pdf-render.mjs +798 -0
- package/engine/pdf-toc.mjs +525 -0
- package/engine/prose-config.mjs +9 -9
- package/engine/prose-lint.mjs +12 -13
- package/engine/region-events.mjs +2 -2
- package/engine/retired-fields.mjs +24 -22
- package/engine/runtime-only-fields.mjs +1 -1
- package/engine/scene-levels.mjs +1 -1
- package/engine/scenes.mjs +33 -25
- package/engine/schema-check.mjs +21 -21
- package/engine/schema-extract.mjs +1 -1
- package/engine/site-build.mjs +66 -50
- package/engine/site-index.mjs +17 -18
- package/engine/sql-tables.mjs +21 -13
- package/engine/subtype-registry.mjs +5 -4
- package/engine/system-block.mjs +18 -19
- package/engine/systems.mjs +2 -2
- package/engine/web-wikilinks.mjs +41 -38
- package/engine/wikilink-syntax.mjs +16 -16
- package/engine/wikilinks.mjs +40 -42
- package/hm3/actors.mjs +30 -22
- package/hm3/document-subtypes.mjs +5 -5
- package/hm3/index.mjs +2 -2
- package/hm3/item-builders.mjs +1 -1
- package/hm3/item-fields.mjs +3 -3
- package/hm3/items.mjs +28 -8
- package/hm3/template-priority.mjs +2 -2
- package/lang.mjs +3 -3
- package/manifest.mjs +17 -20
- package/package.json +1 -2
- package/release.mjs +66 -6
- package/sohl/actors.mjs +36 -28
- package/sohl/affiliation-standings.mjs +2 -2
- package/sohl/being-info.mjs +5 -5
- package/sohl/default-item-art.mjs +5 -5
- package/sohl/document-subtypes.mjs +5 -5
- package/sohl/index.mjs +3 -3
- package/sohl/item-builders.mjs +7 -7
- package/sohl/item-fields.mjs +8 -9
- package/sohl/items.mjs +28 -6
- package/sohl/kb-passes.mjs +5 -5
- package/sohl/note-schemas.mjs +12 -12
- package/sohl/skill-base.mjs +1 -1
- package/types/content-config.d.mts +91 -39
- package/types/e2e.d.mts +3 -3
- package/types/engine/actor-compiler.d.mts +45 -40
- package/types/engine/address-charset.d.mts +6 -6
- package/types/engine/address-diff.d.mts +60 -6
- package/types/engine/base-compiler.d.mts +27 -21
- package/types/engine/bundle-notes.d.mts +3 -3
- package/types/engine/bundles.d.mts +10 -1
- package/types/engine/code-fences.d.mts +3 -3
- package/types/engine/compendiums.d.mts +3 -3
- package/types/engine/compile-corpus.d.mts +1 -1
- package/types/engine/content-address.d.mts +20 -20
- package/types/engine/content-format-check.d.mts +6 -6
- package/types/engine/content-format.d.mts +2 -2
- package/types/engine/content-html.d.mts +78 -0
- package/types/engine/content-icons.d.mts +139 -92
- package/types/engine/content-index.d.mts +59 -15
- package/types/engine/content-links.d.mts +8 -8
- package/types/engine/content-lint.d.mts +8 -6
- package/types/engine/content-package.d.mts +6 -8
- package/types/engine/content-tables.d.mts +49 -18
- package/types/engine/derived-fields.d.mts +101 -0
- package/types/engine/diagnostics.d.mts +2 -2
- package/types/engine/document-subtypes.d.mts +3 -3
- package/types/engine/field-spec.d.mts +37 -39
- package/types/engine/folder-notes.d.mts +4 -5
- package/types/engine/foreign-catalog.d.mts +3 -3
- package/types/engine/foundry-entries.d.mts +6 -7
- package/types/engine/frontmatter-lint.d.mts +10 -9
- package/types/engine/frontmatter.d.mts +7 -7
- package/types/engine/generate.d.mts +7 -7
- package/types/engine/helpers.d.mts +128 -56
- package/types/engine/homepage.d.mts +16 -18
- package/types/engine/ids.d.mts +13 -13
- package/types/engine/index-records.d.mts +3 -3
- package/types/engine/index.d.mts +6 -0
- package/types/engine/item-compiler.d.mts +21 -5
- package/types/engine/item-docs.d.mts +2 -2
- package/types/engine/item-registry.d.mts +6 -6
- package/types/engine/journals.d.mts +12 -3
- package/types/engine/map-notes.d.mts +2 -2
- package/types/engine/metadata-index.d.mts +4 -4
- package/types/engine/note-claims.d.mts +30 -22
- package/types/engine/note-ids.d.mts +4 -4
- package/types/engine/note-package.d.mts +1 -1
- package/types/engine/note-renames.d.mts +3 -3
- package/types/engine/note-vocabulary.d.mts +31 -203
- package/types/engine/pack-config.d.mts +7 -7
- package/types/engine/pack-router.d.mts +1 -1
- package/types/engine/pdf-build.d.mts +42 -0
- package/types/engine/pdf-fonts.d.mts +30 -0
- package/types/engine/pdf-render.d.mts +144 -0
- package/types/engine/pdf-toc.d.mts +114 -0
- package/types/engine/prose-config.d.mts +9 -9
- package/types/engine/prose-lint.d.mts +3 -4
- package/types/engine/region-events.d.mts +2 -2
- package/types/engine/retired-fields.d.mts +10 -9
- package/types/engine/scenes.d.mts +10 -1
- package/types/engine/schema-check.d.mts +13 -13
- package/types/engine/site-build.d.mts +52 -25
- package/types/engine/site-index.d.mts +3 -4
- package/types/engine/sql-tables.d.mts +11 -5
- package/types/engine/subtype-registry.d.mts +3 -3
- package/types/engine/system-block.d.mts +3 -3
- package/types/engine/web-wikilinks.d.mts +7 -7
- package/types/engine/wikilink-syntax.d.mts +17 -17
- package/types/engine/wikilinks.d.mts +14 -14
- package/types/hm3/actors.d.mts +9 -1
- package/types/hm3/document-subtypes.d.mts +1 -1
- package/types/hm3/items.d.mts +9 -2
- package/types/hm3/template-priority.d.mts +1 -1
- package/types/manifest.d.mts +8 -8
- package/types/release.d.mts +15 -4
- package/types/sohl/actors.d.mts +12 -4
- package/types/sohl/affiliation-standings.d.mts +2 -2
- package/types/sohl/being-info.d.mts +2 -2
- package/types/sohl/document-subtypes.d.mts +1 -1
- package/types/sohl/items.d.mts +9 -2
- package/types/sohl/note-schemas.d.mts +1 -1
- package/MIGRATING.md +0 -608
|
@@ -27,7 +27,7 @@ export function folderAddress(pkg: string, shortcode: string): string;
|
|
|
27
27
|
* never run this build. Deriving it twice is how the index came to publish a
|
|
28
28
|
* plausible-looking id that resolved to nothing — the general id rule hashes a
|
|
29
29
|
* note's address under the `document` namespace, and a folder's is hashed under
|
|
30
|
-
* {@link FOLDER_ID_NAMESPACE}
|
|
30
|
+
* {@link FOLDER_ID_NAMESPACE}.
|
|
31
31
|
*
|
|
32
32
|
* An **authored `id` still wins**, and is applied by the caller: this is the
|
|
33
33
|
* derivation, not the resolution, so the pin rule stays stated once, where
|
|
@@ -42,8 +42,7 @@ export function folderDocId(pkg: string, shortcode: string): string;
|
|
|
42
42
|
* Collect every folder note in a content tree.
|
|
43
43
|
*
|
|
44
44
|
* The walk is the caller's to supply, so this stays testable without a tree on
|
|
45
|
-
* disk and so one build cannot disagree with another about what the corpus is
|
|
46
|
-
* (#243).
|
|
45
|
+
* disk and so one build cannot disagree with another about what the corpus is.
|
|
47
46
|
*
|
|
48
47
|
* @param {Iterable<{frontmatter: object|null, absPath: string}>} notes - As
|
|
49
48
|
* yielded by `walkMarkdownTree`.
|
|
@@ -62,7 +61,7 @@ export function collectFolderNotes(notes: Iterable<{
|
|
|
62
61
|
*
|
|
63
62
|
* Three keys per folder, and no more: the canonical address, the
|
|
64
63
|
* `folder-<shortcode>` short form, and the bare shortcode. They are the
|
|
65
|
-
* suffixes of the canonical address the grammar admits
|
|
64
|
+
* suffixes of the canonical address the grammar admits — a `packFolder`
|
|
66
65
|
* or `parent` field supplies the type itself, so a bare shortcode is a complete
|
|
67
66
|
* address there.
|
|
68
67
|
*
|
|
@@ -101,7 +100,7 @@ export function folderDocument(folder: FolderNote, parent: FolderNote | null, do
|
|
|
101
100
|
* Refuse a note that declares the retired `folder:` spelling.
|
|
102
101
|
*
|
|
103
102
|
* `folder:` named a compendium folder by the raw Foundry id declared in a
|
|
104
|
-
* per-pack `*-folders.yaml`. Both halves are retired together
|
|
103
|
+
* per-pack `*-folders.yaml`. Both halves are retired together: the id
|
|
105
104
|
* spelling has nothing left to resolve against once the YAML is gone, and the
|
|
106
105
|
* YAML has no reader once the spelling is refused.
|
|
107
106
|
*
|
|
@@ -112,7 +112,7 @@ export function fetchCatalogFromPath(config: object, rel: {
|
|
|
112
112
|
id: string;
|
|
113
113
|
}, source: string): Promise<string>;
|
|
114
114
|
/**
|
|
115
|
-
* Fetch one dependency's published content index
|
|
115
|
+
* Fetch one dependency's published content index.
|
|
116
116
|
*
|
|
117
117
|
* **The chain is entirely declared.** The relationship names the dependency's
|
|
118
118
|
* manifest, the manifest advertises `flags.metadataUrl`, and that URL is the
|
|
@@ -178,7 +178,7 @@ export function fetchAllCatalogs(config: object): Promise<number>;
|
|
|
178
178
|
* Reads the cache only. A cold cache is an error naming the command that fills
|
|
179
179
|
* it, rather than a download nobody asked for.
|
|
180
180
|
*
|
|
181
|
-
* **Scoped to one system when the caller compiles for one
|
|
181
|
+
* **Scoped to one system when the caller compiles for one**, exactly as
|
|
182
182
|
* {@link module:engine/generate.itemPackJsonDirs} scopes the local half. The
|
|
183
183
|
* two halves answer the same lookup — `loadItemsMap` merges them into one
|
|
184
184
|
* address space keyed by `subType:shortcode` — so scoping only the local one
|
|
@@ -200,7 +200,7 @@ export function foreignItemCatalogDirs(config: object, system?: string | null):
|
|
|
200
200
|
package: string;
|
|
201
201
|
}>;
|
|
202
202
|
/**
|
|
203
|
-
* The file a system publishes its `system` field sets as
|
|
203
|
+
* The file a system publishes its `system` field sets as.
|
|
204
204
|
*
|
|
205
205
|
* @type {string}
|
|
206
206
|
*/
|
|
@@ -20,8 +20,8 @@ export function anchorsOf(entryUuid: string, entryId: string, body: string, name
|
|
|
20
20
|
* An item note produces **two**: the item, and separately the JournalEntry its
|
|
21
21
|
* prose compiles into. They are two documents with two UUIDs, so they get two
|
|
22
22
|
* addresses; the item's entry points at the other by address rather than
|
|
23
|
-
* repeating its UUID, because the doc entry owns that fact
|
|
24
|
-
* note is the same arrangement
|
|
23
|
+
* repeating its UUID, because the doc entry owns that fact. A `macro`
|
|
24
|
+
* note is the same arrangement, which is why the type set comes from
|
|
25
25
|
* {@link hasDocEntry} rather than being spelled here — the journals compiler
|
|
26
26
|
* reads the same one, so a manifest cannot claim documentation nothing compiled.
|
|
27
27
|
*
|
|
@@ -33,7 +33,7 @@ export function anchorsOf(entryUuid: string, entryId: string, body: string, name
|
|
|
33
33
|
* UUID. The two are one fact — a UUID ends in the id — but only the entry knows
|
|
34
34
|
* which derivation produced it: an item's is its note's `fm.id`, and its
|
|
35
35
|
* documentation journal's is {@link itemDocEntryId} of that. Stating it here is
|
|
36
|
-
* what lets the content index publish an identity it did not re-derive
|
|
36
|
+
* what lets the content index publish an identity it did not re-derive.
|
|
37
37
|
*
|
|
38
38
|
* @param {object} ctx - Resolved identities: `{ contentPackage,
|
|
39
39
|
* foundryPackageId, packRouter }`.
|
|
@@ -44,12 +44,11 @@ export function entriesForNote(fm: object, name: string, address: string, body:
|
|
|
44
44
|
* Every note this package publishes, as manifest entries.
|
|
45
45
|
*
|
|
46
46
|
* Every note in the tree is this package's, so nothing here selects by package:
|
|
47
|
-
* the key's first segment is `contentPackage
|
|
47
|
+
* the key's first segment is `contentPackage`. A note still declaring the
|
|
48
48
|
* retired `package:` or `draft:` field **throws** rather than being skipped —
|
|
49
49
|
* skipping one silently is how a whole tree came to be filtered out of a
|
|
50
50
|
* manifest that then claimed the package published nothing, and it is what let
|
|
51
|
-
* a drafted note's inbound links look like links to a note that never existed
|
|
52
|
-
* (#69).
|
|
51
|
+
* a drafted note's inbound links look like links to a note that never existed.
|
|
53
52
|
*
|
|
54
53
|
* A note that has no address is **reported, not guessed** — the finding carries
|
|
55
54
|
* the file and the reason, so a caller can print it or fail on it. Inventing an
|
|
@@ -93,7 +92,7 @@ export function foundryIdentities(config?: object): {
|
|
|
93
92
|
* {@link foundryIdentities} plus what only a *manifest* emission needs. The
|
|
94
93
|
* split is what lets the content index derive the same Foundry addresses from
|
|
95
94
|
* the same code without also depending on whether the package publishes pages,
|
|
96
|
-
* which is no part of a UUID
|
|
95
|
+
* which is no part of a UUID.
|
|
97
96
|
*
|
|
98
97
|
* @param {object} [config] - A resolved configuration; loaded when omitted.
|
|
99
98
|
* @returns {{contentPackage: string, foundryPackageId: string, packRouter: object,
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
* than reported wholesale.
|
|
12
12
|
*/
|
|
13
13
|
/**
|
|
14
|
-
* Every system a configuration says its tree carries
|
|
14
|
+
* Every system a configuration says its tree carries.
|
|
15
15
|
*
|
|
16
16
|
* **Which systems a package ships for is already declared**, in three places
|
|
17
17
|
* that answer different questions, so this reads all three rather than asking a
|
|
18
18
|
* new one:
|
|
19
19
|
*
|
|
20
|
-
* - `systems:`
|
|
20
|
+
* - `systems:` declares them without requiring one, which is how a
|
|
21
21
|
* package ships for several;
|
|
22
22
|
* - a **pack's** `system:` is the same statement made per pack, and it is the
|
|
23
23
|
* one some trees make: `harn-ensemble` declares an `actors-sohl` and an
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
export function declaredSystems(config?: object): string[];
|
|
41
41
|
/**
|
|
42
42
|
* The system blocks a configuration says its tree carries, and what each
|
|
43
|
-
* accepts
|
|
43
|
+
* accepts.
|
|
44
44
|
*
|
|
45
45
|
* The lint checks the blocks its caller names, and for as long as there was one
|
|
46
46
|
* system the only caller named none — so every tree took the `sohl:` of
|
|
@@ -112,10 +112,11 @@ export function matchesKind(value: unknown, kind: string): boolean;
|
|
|
112
112
|
* @param {object} note - A note from the link index (`{fm, file, raw, type}`).
|
|
113
113
|
* @param {object} opts
|
|
114
114
|
* @param {Record<string, readonly object[]>} opts.schemas - Type → declaration.
|
|
115
|
-
* @param {object} [opts.index] - The link index, for the reference check
|
|
116
|
-
* absence skips that check rather than
|
|
115
|
+
* @param {object} [opts.index] - The link index, for the reference check, which
|
|
116
|
+
* runs through its `referenceHit`. Its absence skips that check rather than
|
|
117
|
+
* reporting every reference as dead.
|
|
117
118
|
* @param {Record<string, object>} [opts.vocabulary] - Type → the closed regions
|
|
118
|
-
* it declares, as `engine/note-vocabulary.mjs` states them
|
|
119
|
+
* it declares, as `engine/note-vocabulary.mjs` states them. Supplied
|
|
119
120
|
* by the caller for the same reason `schemas` is: this module validates a
|
|
120
121
|
* note against whatever its type declares and knows no type names of its
|
|
121
122
|
* own. Its absence skips the `data:` and `subType` checks rather than
|
|
@@ -125,7 +126,7 @@ export function matchesKind(value: unknown, kind: string): boolean;
|
|
|
125
126
|
* declaration, asked through `engine/generate.mjs`'s `emittedArtFor`.
|
|
126
127
|
* Supplied by the caller like `schemas`, so this module states no list of
|
|
127
128
|
* iconless types of its own; absent it, an inert `img:` goes unreported
|
|
128
|
-
* rather than every note's being
|
|
129
|
+
* rather than every note's being.
|
|
129
130
|
* @param {Readonly<Record<string, SystemBlockSpec>>} [opts.systems]
|
|
130
131
|
* The system blocks to check, and what each accepts. Supplied by the caller
|
|
131
132
|
* for the same reason `schemas` is — a build derives them from its
|
|
@@ -155,7 +156,7 @@ export function lintNote(note: object, { schemas, index, vocabulary, packs, emit
|
|
|
155
156
|
* @param {object} opts
|
|
156
157
|
* @param {Record<string, readonly object[]>} opts.schemas - Type → declaration.
|
|
157
158
|
* @param {Record<string, object>} [opts.vocabulary] - Type → the closed regions
|
|
158
|
-
* it declares
|
|
159
|
+
* it declares; see {@link lintNote}.
|
|
159
160
|
* @param {boolean} [opts.references=true] - Whether to check references.
|
|
160
161
|
* @param {Readonly<Record<string, SystemBlockSpec>>} [opts.systems]
|
|
161
162
|
* The system blocks to check; see {@link lintNote} and
|
|
@@ -191,7 +192,7 @@ export function lintFrontmatter(index: object, { schemas, vocabulary, packs, emi
|
|
|
191
192
|
*
|
|
192
193
|
* - `folder` — the compendium folder the document is filed in.
|
|
193
194
|
* - `pack` — which compendium of the note's document type receives it, for a
|
|
194
|
-
* repository shipping several
|
|
195
|
+
* repository shipping several.
|
|
195
196
|
* - `archetype` — the archetype flag, read for any note by the walk itself.
|
|
196
197
|
* - `kbcat` — the knowledgebase category a note is grouped under.
|
|
197
198
|
*
|
|
@@ -10,7 +10,7 @@ export function getFrontmatter(fm: any, key: any, defaultValue?: undefined): any
|
|
|
10
10
|
*/
|
|
11
11
|
export function sohlField(fm: any, key: any, defaultValue?: undefined): any;
|
|
12
12
|
/**
|
|
13
|
-
* Read a `sohl:` field, seeing the **destination** position as well
|
|
13
|
+
* Read a `sohl:` field, seeing the **destination** position as well.
|
|
14
14
|
*
|
|
15
15
|
* Five declarations resolve their value by re-reading the note rather than by
|
|
16
16
|
* taking the one {@link module:engine/system-block.resolveFieldValue} handed
|
|
@@ -29,8 +29,8 @@ export function sohlField(fm: any, key: any, defaultValue?: undefined): any;
|
|
|
29
29
|
*
|
|
30
30
|
* `legacyKey` is for the one pair whose two positions are spelled differently:
|
|
31
31
|
* a projectile authors `impact.die` and stores `impactBase.die`, so the reader
|
|
32
|
-
* has to be told both. It is the same split `FieldSpec.name`/`legacyKey` makes
|
|
33
|
-
*
|
|
32
|
+
* has to be told both. It is the same split `FieldSpec.name`/`legacyKey` makes,
|
|
33
|
+
* for the same reason — one name cannot key two positions.
|
|
34
34
|
*
|
|
35
35
|
* @param {object} fm - The note's frontmatter.
|
|
36
36
|
* @param {string} to - The key at the destination, dotted for a nested one.
|
|
@@ -46,7 +46,7 @@ export function sohlSystemField(fm: object, to: string, defaultValue?: any, { le
|
|
|
46
46
|
/**
|
|
47
47
|
* Resolve the `charges` block shared by Mystery and Mystical Ability items.
|
|
48
48
|
*
|
|
49
|
-
* Charge usage is carried by the **maximum** alone
|
|
49
|
+
* Charge usage is carried by the **maximum** alone: a `null` max means
|
|
50
50
|
* the item does not use charges at all, `0` means it is counted but uncapped,
|
|
51
51
|
* and a positive number is a real cap. `value` is the current count, with
|
|
52
52
|
* `null` meaning "infinite remaining". Both persist as nullable NumberFields,
|
|
@@ -87,7 +87,7 @@ export function resolveCharges(fm: object): {
|
|
|
87
87
|
export function resolveSkillAptitudes(fm: object, ctx?: string): Record<string, number>;
|
|
88
88
|
/**
|
|
89
89
|
* Resolve an affiliation's `relation` map — the shortcode of another
|
|
90
|
-
* affiliation → this one's standing toward it
|
|
90
|
+
* affiliation → this one's standing toward it.
|
|
91
91
|
*
|
|
92
92
|
* An unrecognized standing would fail the schema's `choices` validation at load
|
|
93
93
|
* and be dropped silently, shipping an affiliation whose authored hostility had
|
|
@@ -138,12 +138,12 @@ export function parseValueDesc(raw: any): {
|
|
|
138
138
|
* (`folder-poisonsandtoxins`), resolved through the address index the whole
|
|
139
139
|
* build shares. The `folder:` Foundry-id spelling this function once read
|
|
140
140
|
* beside it, and the per-pack `*-folders.yaml` that id was resolved against,
|
|
141
|
-
* are retired together
|
|
141
|
+
* are retired together — a note declaring `folder:` is refused by
|
|
142
142
|
* {@link module:engine/folder-notes.assertNoDeclaredFolder} rather than
|
|
143
143
|
* reaching here, so there is no second source for a value to come from.
|
|
144
144
|
*
|
|
145
145
|
* **`packFolder` was a path for one release** (`Possessions/Misc_Gear/Cooking`)
|
|
146
|
-
* and is an address now
|
|
146
|
+
* and is an address now. A path encoded the hierarchy *in the value*, so
|
|
147
147
|
* reparenting a folder made every note naming it wrong — a structural edit
|
|
148
148
|
* became a corpus-wide rewrite. An address is stable under reparenting, which
|
|
149
149
|
* is exactly why a note is addressed by `(type, shortcode)` and never by
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
export function compilerFor(docType: string, system?: string | null): Function | undefined;
|
|
11
11
|
/**
|
|
12
12
|
* The art fields a note of one content type reaches its document through, and
|
|
13
|
-
* the document it reaches
|
|
13
|
+
* the document it reaches.
|
|
14
14
|
*
|
|
15
15
|
* **Derived, never listed.** A note's type routes to a document type
|
|
16
16
|
* ({@link packForType}), a document type routes to the pass that compiles it
|
|
@@ -39,7 +39,7 @@ export function emittedArtFor(type: string): {
|
|
|
39
39
|
* The generated JSON of **every** configured Item pack — what the actors pass
|
|
40
40
|
* reads its predefined items from.
|
|
41
41
|
*
|
|
42
|
-
* All of them, not the first: a repository may ship several Item packs
|
|
42
|
+
* All of them, not the first: a repository may ship several Item packs,
|
|
43
43
|
* and an actor's embedded items may be sourced from any of them. Finding one
|
|
44
44
|
* pack and stopping is how embedded-item resolution would silently miss every
|
|
45
45
|
* item that landed in another. Returned in configured order, which is also the
|
|
@@ -47,7 +47,7 @@ export function emittedArtFor(type: string): {
|
|
|
47
47
|
* order among packs of one type — and every one of them is written before the
|
|
48
48
|
* actors pass that reads them.
|
|
49
49
|
*
|
|
50
|
-
* **Scoped to one system when the caller has one
|
|
50
|
+
* **Scoped to one system when the caller has one.** A being addresses an
|
|
51
51
|
* item by `(type, shortcode)`, and that address is unique within one system and
|
|
52
52
|
* not across two: `skill:sword` is an HM3 skill *and* a SoHL skill, with
|
|
53
53
|
* different data models behind them. The reference itself is unambiguous — it
|
|
@@ -65,7 +65,7 @@ export function emittedArtFor(type: string): {
|
|
|
65
65
|
* @returns {string[]} Each Item pack's JSON directory. Empty when the
|
|
66
66
|
* repository ships no items at all, which is a legitimate package: the actors
|
|
67
67
|
* pass accepts an empty list and reports an item it cannot resolve per
|
|
68
|
-
* `(type, shortcode)` instead, naming the being
|
|
68
|
+
* `(type, shortcode)` instead, naming the being.
|
|
69
69
|
*/
|
|
70
70
|
export function itemPackJsonDirs(config?: object, system?: string | null): string[];
|
|
71
71
|
/**
|
|
@@ -74,7 +74,7 @@ export function itemPackJsonDirs(config?: object, system?: string | null): strin
|
|
|
74
74
|
* An `Adventure` carries **copies**, not references, so a bundle resolves its
|
|
75
75
|
* `contents` against compiled output rather than against the content tree — the
|
|
76
76
|
* same arrangement the actors pass has for `itemsSourceDirs`, generalised to
|
|
77
|
-
* every document class an Adventure can hold
|
|
77
|
+
* every document class an Adventure can hold.
|
|
78
78
|
*
|
|
79
79
|
* Two kinds of pack are left out, each because it holds nothing a note
|
|
80
80
|
* addresses. A **prebuilt** pack's JSON is checked in rather than compiled, so
|
|
@@ -99,7 +99,7 @@ export function bundleSourceJsonDirs(config?: object, system?: string | null): R
|
|
|
99
99
|
/**
|
|
100
100
|
* The passes to run, ordered so that each one follows the output it reads.
|
|
101
101
|
*
|
|
102
|
-
* **Declaration order is presentation, not compile order
|
|
102
|
+
* **Declaration order is presentation, not compile order.** The same
|
|
103
103
|
* `packs:` list is the manifest's `packs` array, which a consumer orders for a
|
|
104
104
|
* reader browsing compendiums; the actors pass, meanwhile, resolves each
|
|
105
105
|
* being's embedded items against the item passes' *output*. Making one list
|
|
@@ -149,7 +149,7 @@ export function unsatisfiedPassDependencies(running: readonly object[], config:
|
|
|
149
149
|
*
|
|
150
150
|
* A pack ships blank whenever every note in a full tree was rejected — by a
|
|
151
151
|
* `selects` that claims nothing, or a `pack:` that routes everything elsewhere
|
|
152
|
-
* — and the build then exits 0
|
|
152
|
+
* — and the build then exits 0. The empty-tree guard in
|
|
153
153
|
* {@link generatePacksJson} cannot see that: the tree is full, it is the
|
|
154
154
|
* *output* that is empty.
|
|
155
155
|
*
|