@u1f992/vivliostyle-index 0.2.4 → 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.
Files changed (102) hide show
  1. package/README.md +230 -24
  2. package/dist/document-renderer.d.ts +7 -0
  3. package/dist/document-renderer.d.ts.map +1 -0
  4. package/dist/document-renderer.js +86 -0
  5. package/dist/document-renderer.js.map +1 -0
  6. package/dist/file-system.d.ts +11 -0
  7. package/dist/file-system.d.ts.map +1 -0
  8. package/dist/file-system.js +93 -0
  9. package/dist/file-system.js.map +1 -0
  10. package/dist/html.d.ts +4 -0
  11. package/dist/html.d.ts.map +1 -0
  12. package/dist/html.js +9 -0
  13. package/dist/html.js.map +1 -0
  14. package/dist/id.d.ts +5 -0
  15. package/dist/id.d.ts.map +1 -0
  16. package/dist/id.js +30 -0
  17. package/dist/id.js.map +1 -0
  18. package/dist/index-builder.d.ts +15 -0
  19. package/dist/index-builder.d.ts.map +1 -0
  20. package/dist/index-builder.js +138 -0
  21. package/dist/index-builder.js.map +1 -0
  22. package/dist/index-state.d.ts +29 -0
  23. package/dist/index-state.d.ts.map +1 -0
  24. package/dist/index-state.js +95 -0
  25. package/dist/index-state.js.map +1 -0
  26. package/dist/index.d.ts +45 -15
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +53 -122
  29. package/dist/index.js.map +1 -1
  30. package/dist/instruction.d.ts +37 -0
  31. package/dist/instruction.d.ts.map +1 -0
  32. package/dist/instruction.js +267 -0
  33. package/dist/instruction.js.map +1 -0
  34. package/dist/location.d.ts +2 -0
  35. package/dist/location.d.ts.map +1 -0
  36. package/dist/location.js +17 -0
  37. package/dist/location.js.map +1 -0
  38. package/dist/messages.d.ts +24 -0
  39. package/dist/messages.d.ts.map +1 -0
  40. package/dist/messages.js +114 -0
  41. package/dist/messages.js.map +1 -0
  42. package/dist/model.d.ts +77 -36
  43. package/dist/model.d.ts.map +1 -1
  44. package/dist/model.js +112 -148
  45. package/dist/model.js.map +1 -1
  46. package/dist/platform.d.ts +4 -0
  47. package/dist/platform.d.ts.map +1 -0
  48. package/dist/platform.js +13 -0
  49. package/dist/platform.js.map +1 -0
  50. package/dist/profile.d.ts +11 -0
  51. package/dist/profile.d.ts.map +1 -0
  52. package/dist/profile.js +17 -0
  53. package/dist/profile.js.map +1 -0
  54. package/dist/render.d.ts +175 -0
  55. package/dist/render.d.ts.map +1 -0
  56. package/dist/render.js +285 -0
  57. package/dist/render.js.map +1 -0
  58. package/dist/sort.d.ts +22 -16
  59. package/dist/sort.d.ts.map +1 -1
  60. package/dist/sort.js +91 -53
  61. package/dist/sort.js.map +1 -1
  62. package/dist/source-snapshot.d.ts +21 -0
  63. package/dist/source-snapshot.d.ts.map +1 -0
  64. package/dist/source-snapshot.js +76 -0
  65. package/dist/source-snapshot.js.map +1 -0
  66. package/dist/target.d.ts +9 -0
  67. package/dist/target.d.ts.map +1 -0
  68. package/dist/target.js +17 -0
  69. package/dist/target.js.map +1 -0
  70. package/dist/template.d.ts +4 -0
  71. package/dist/template.d.ts.map +1 -0
  72. package/dist/template.js +15 -0
  73. package/dist/template.js.map +1 -0
  74. package/package.json +25 -17
  75. package/dist/command/expand.d.ts +0 -5
  76. package/dist/command/expand.d.ts.map +0 -1
  77. package/dist/command/expand.js +0 -193
  78. package/dist/command/expand.js.map +0 -1
  79. package/dist/command/insert-page.d.ts +0 -5
  80. package/dist/command/insert-page.d.ts.map +0 -1
  81. package/dist/command/insert-page.js +0 -32
  82. package/dist/command/insert-page.js.map +0 -1
  83. package/dist/command/insert-range.d.ts +0 -21
  84. package/dist/command/insert-range.d.ts.map +0 -1
  85. package/dist/command/insert-range.js +0 -61
  86. package/dist/command/insert-range.js.map +0 -1
  87. package/dist/command/insert-reference.d.ts +0 -4
  88. package/dist/command/insert-reference.d.ts.map +0 -1
  89. package/dist/command/insert-reference.js +0 -58
  90. package/dist/command/insert-reference.js.map +0 -1
  91. package/dist/command.d.ts +0 -25
  92. package/dist/command.d.ts.map +0 -1
  93. package/dist/command.js +0 -159
  94. package/dist/command.js.map +0 -1
  95. package/dist/resolve.d.ts +0 -3
  96. package/dist/resolve.d.ts.map +0 -1
  97. package/dist/resolve.js +0 -95
  98. package/dist/resolve.js.map +0 -1
  99. package/dist/util.d.ts +0 -10
  100. package/dist/util.d.ts.map +0 -1
  101. package/dist/util.js +0 -27
  102. package/dist/util.js.map +0 -1
@@ -0,0 +1,267 @@
1
+ import { createKey, ensureEntry, insertLocator, insertXref, } from "./model.js";
2
+ import { identityTemplate } from "./template.js";
3
+ export class InstructionSyntaxError extends SyntaxError {
4
+ offset;
5
+ constructor(input, offset, reason) {
6
+ super(`${reason} at grapheme offset ${offset}: ${JSON.stringify(input)}`);
7
+ this.name = "InstructionSyntaxError";
8
+ this.offset = offset;
9
+ }
10
+ }
11
+ const graphemeSegmenter = new Intl.Segmenter("en", { granularity: "grapheme" });
12
+ const escapableCharacters = new Set(["\\", "@", "!", "|", "(", ")", "{", "}"]);
13
+ const tokenLexemes = {
14
+ related: ["|", "s", "e", "e", "a", "l", "s", "o", "{"],
15
+ preferred: ["|", "s", "e", "e", "{"],
16
+ "range-start": ["|", "("],
17
+ "range-end": ["|", ")"],
18
+ display: ["@"],
19
+ heading: ["!"],
20
+ template: ["|"],
21
+ "xref-end": ["}"],
22
+ };
23
+ const tokenTypes = [
24
+ "related",
25
+ "preferred",
26
+ "range-start",
27
+ "range-end",
28
+ "display",
29
+ "heading",
30
+ "template",
31
+ "xref-end",
32
+ ];
33
+ const instructionTerminators = new Set([
34
+ "template",
35
+ "range-start",
36
+ "range-end",
37
+ "preferred",
38
+ "related",
39
+ ]);
40
+ const xrefTerminators = new Set(["xref-end"]);
41
+ function createParserInput(source) {
42
+ return {
43
+ source,
44
+ graphemes: [...graphemeSegmenter.segment(source)].map(({ segment }) => segment),
45
+ };
46
+ }
47
+ function syntaxError(input, offset, reason) {
48
+ throw new InstructionSyntaxError(input.source, offset, reason);
49
+ }
50
+ function unescapeAt(input, offset) {
51
+ const escapedCharacter = input.graphemes[offset + 1];
52
+ if (escapedCharacter === undefined || !escapableCharacters.has(escapedCharacter)) {
53
+ syntaxError(input, offset, "an escape must be followed by \\, @, !, |, (, ), {, or }");
54
+ }
55
+ return escapedCharacter;
56
+ }
57
+ function startsWith(input, offset, expected) {
58
+ return expected.every((character, index) => input.graphemes[offset + index] === character);
59
+ }
60
+ function metaTokenAt(input, offset) {
61
+ const type = tokenTypes.find((candidate) => startsWith(input, offset, tokenLexemes[candidate]));
62
+ return type === undefined ? undefined : { type, offset };
63
+ }
64
+ function tokenize(input) {
65
+ const tokens = [];
66
+ let offset = 0;
67
+ let textStart = 0;
68
+ const emitText = (end) => {
69
+ if (textStart !== end) {
70
+ tokens.push({
71
+ type: "text",
72
+ value: input.graphemes.slice(textStart, end).join(""),
73
+ offset: textStart,
74
+ });
75
+ }
76
+ };
77
+ while (offset < input.graphemes.length) {
78
+ if (input.graphemes[offset] === "\\") {
79
+ emitText(offset);
80
+ tokens.push({ type: "text", value: unescapeAt(input, offset), offset });
81
+ offset += 2;
82
+ textStart = offset;
83
+ continue;
84
+ }
85
+ const token = metaTokenAt(input, offset);
86
+ if (token === undefined) {
87
+ offset++;
88
+ continue;
89
+ }
90
+ emitText(offset);
91
+ tokens.push(token);
92
+ offset += tokenLexemes[token.type].length;
93
+ textStart = offset;
94
+ }
95
+ emitText(offset);
96
+ return tokens;
97
+ }
98
+ function currentToken(state) {
99
+ return state.tokens[state.position];
100
+ }
101
+ function consumeToken(state) {
102
+ const token = currentToken(state);
103
+ if (token !== undefined) {
104
+ state.position++;
105
+ }
106
+ return token;
107
+ }
108
+ function tokenLabel(token) {
109
+ return tokenLexemes[token.type].join("");
110
+ }
111
+ function completeAddress(input, address, offset) {
112
+ if (address.group === undefined || address.entry === undefined) {
113
+ return syntaxError(input, offset, "an entry must contain a group and one or two headings");
114
+ }
115
+ return address.subentry === undefined
116
+ ? { group: address.group, entry: address.entry }
117
+ : { group: address.group, entry: address.entry, subentry: address.subentry };
118
+ }
119
+ function parseHierarchy(state, terminators) {
120
+ const { input } = state;
121
+ const address = {};
122
+ let reading = "";
123
+ let html = "";
124
+ let hasHtml = false;
125
+ let offset = currentToken(state)?.offset ?? input.graphemes.length;
126
+ const append = (token) => {
127
+ if (hasHtml) {
128
+ html += token.value;
129
+ }
130
+ else {
131
+ reading += token.value;
132
+ }
133
+ };
134
+ const finishKey = () => {
135
+ if (reading === "") {
136
+ syntaxError(input, offset, "a reading must not be empty");
137
+ }
138
+ if (hasHtml && html === "") {
139
+ syntaxError(input, offset, "a display value must not be empty");
140
+ }
141
+ const key = createKey(reading, hasHtml ? html : reading);
142
+ if (address.group === undefined) {
143
+ address.group = key;
144
+ }
145
+ else if (address.entry === undefined) {
146
+ address.entry = key;
147
+ }
148
+ else if (address.subentry === undefined) {
149
+ address.subentry = key;
150
+ }
151
+ else {
152
+ syntaxError(input, offset, "an entry must not contain more than two headings");
153
+ }
154
+ reading = "";
155
+ html = "";
156
+ hasHtml = false;
157
+ };
158
+ for (;;) {
159
+ const token = currentToken(state);
160
+ if (token === undefined) {
161
+ offset = input.graphemes.length;
162
+ finishKey();
163
+ return { address: completeAddress(input, address, offset), terminator: undefined };
164
+ }
165
+ offset = token.offset;
166
+ if (token.type === "text") {
167
+ append(token);
168
+ consumeToken(state);
169
+ continue;
170
+ }
171
+ if (token.type === "display") {
172
+ if (hasHtml || reading === "") {
173
+ syntaxError(input, offset, "an unescaped @ must separate a reading and display value");
174
+ }
175
+ hasHtml = true;
176
+ consumeToken(state);
177
+ continue;
178
+ }
179
+ if (token.type === "heading") {
180
+ finishKey();
181
+ consumeToken(state);
182
+ continue;
183
+ }
184
+ if (terminators.has(token.type)) {
185
+ finishKey();
186
+ consumeToken(state);
187
+ return { address: completeAddress(input, address, offset), terminator: token };
188
+ }
189
+ syntaxError(input, offset, `unexpected ${JSON.stringify(tokenLabel(token))}`);
190
+ }
191
+ }
192
+ function parseTemplate(state) {
193
+ const { input } = state;
194
+ let template = "";
195
+ for (;;) {
196
+ const token = consumeToken(state);
197
+ if (token === undefined) {
198
+ return template;
199
+ }
200
+ if (token.type !== "text") {
201
+ syntaxError(input, token.offset, `an unescaped ${JSON.stringify(tokenLabel(token))} is not allowed in a template`);
202
+ }
203
+ template += token.value;
204
+ }
205
+ }
206
+ function parseTemplateSection(state) {
207
+ const token = currentToken(state);
208
+ if (token === undefined) {
209
+ return identityTemplate;
210
+ }
211
+ if (token.type !== "template") {
212
+ syntaxError(state.input, token.offset, "a template must be introduced by |");
213
+ }
214
+ consumeToken(state);
215
+ return parseTemplate(state);
216
+ }
217
+ function parseXref(state, address, type) {
218
+ const { address: target, terminator } = parseHierarchy(state, xrefTerminators);
219
+ if (terminator?.type !== "xref-end") {
220
+ syntaxError(state.input, state.input.graphemes.length, "a cross-reference target must end with }");
221
+ }
222
+ return { type, address, target, template: parseTemplateSection(state) };
223
+ }
224
+ export function parseInstruction(source) {
225
+ const input = createParserInput(source);
226
+ const state = { input, tokens: tokenize(input), position: 0 };
227
+ const { address, terminator } = parseHierarchy(state, instructionTerminators);
228
+ if (terminator === undefined) {
229
+ return { type: "page", address, template: identityTemplate };
230
+ }
231
+ switch (terminator.type) {
232
+ case "template":
233
+ return { type: "page", address, template: parseTemplate(state) };
234
+ case "range-start":
235
+ return { type: "range-start", address, template: parseTemplateSection(state) };
236
+ case "range-end": {
237
+ const trailingToken = currentToken(state);
238
+ if (trailingToken !== undefined) {
239
+ syntaxError(input, trailingToken.offset, "a range end must end the instruction");
240
+ }
241
+ return { type: "range-end", address };
242
+ }
243
+ case "preferred":
244
+ return parseXref(state, address, "preferred");
245
+ case "related":
246
+ return parseXref(state, address, "related");
247
+ default:
248
+ return syntaxError(input, terminator.offset, `unexpected ${JSON.stringify(tokenLabel(terminator))}`);
249
+ }
250
+ }
251
+ export function applyPageInstruction(builder, instruction, locationHref, error) {
252
+ insertLocator(ensureEntry(builder, instruction.address), {
253
+ location: { type: "page", href: locationHref },
254
+ template: instruction.template,
255
+ ...(error === undefined ? {} : { error }),
256
+ });
257
+ }
258
+ export function applyRangeInstruction(builder, instruction, startHref, endHref) {
259
+ insertLocator(ensureEntry(builder, instruction.address), {
260
+ location: { type: "range", start: startHref, end: endHref },
261
+ template: instruction.template,
262
+ });
263
+ }
264
+ export function applyXrefInstruction(builder, instruction) {
265
+ insertXref(ensureEntry(builder, instruction.address), instruction.type, instruction.target, instruction.template);
266
+ }
267
+ //# sourceMappingURL=instruction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction.js","sourceRoot":"","sources":["../src/instruction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function createLocationHref(sourcePath: string, targetPath: string, id: string): string;
2
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../src/location.ts"],"names":[],"mappings":"AAcA,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAM7F"}
@@ -0,0 +1,17 @@
1
+ import upath from "upath";
2
+ const htmlExtensions = new Set([".html", ".htm", ".xhtml"]);
3
+ function encodeRelativePath(path) {
4
+ return path.split("/").map(encodeURIComponent).join("/");
5
+ }
6
+ function toHtmlPath(path) {
7
+ return htmlExtensions.has(upath.extname(path).toLowerCase())
8
+ ? path
9
+ : upath.changeExt(path, ".html");
10
+ }
11
+ export function createLocationHref(sourcePath, targetPath, id) {
12
+ const relativePath = sourcePath === targetPath
13
+ ? ""
14
+ : encodeRelativePath(upath.relative(upath.dirname(targetPath), toHtmlPath(sourcePath)));
15
+ return `${relativePath}#${encodeURIComponent(id)}`;
16
+ }
17
+ //# sourceMappingURL=location.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.js","sourceRoot":"","sources":["../src/location.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE5D,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,UAAkB,EAAE,EAAU;IACnF,MAAM,YAAY,GAChB,UAAU,KAAK,UAAU;QACvB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,GAAG,YAAY,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { VFile } from "vfile";
2
+ import type { EntryAddress, UnresolvedXref } from "./model.ts";
3
+ import type { Target } from "./target.ts";
4
+ export type MessageArguments = Parameters<VFile["message"]>;
5
+ export declare const messages: {
6
+ anonymousFile: MessageArguments;
7
+ invalidIndexReference: (reference: string) => MessageArguments;
8
+ missingTargetFragment: (reference: string) => MessageArguments;
9
+ missingInstruction: (reference: string) => MessageArguments;
10
+ invalidInstruction: (error: unknown, instructionSource: string) => MessageArguments;
11
+ unmatchedRangeStart: (target: Target, address: EntryAddress) => MessageArguments;
12
+ unmatchedRangeEnd: (target: Target, address: EntryAddress) => MessageArguments;
13
+ invalidXref: (xref: UnresolvedXref) => MessageArguments;
14
+ targetNotInEntries: (target: Target) => MessageArguments;
15
+ entryProcessorMismatch: (documentPath: string) => MessageArguments;
16
+ documentNotInEntries: (documentPath: string) => MessageArguments;
17
+ unsupportedLanguage: (language: string) => MessageArguments;
18
+ missingIndexTarget: (target: Target) => MessageArguments;
19
+ missingIndexRole: (target: Target) => MessageArguments;
20
+ unknownIndexProfile: (target: Target, profile: string) => MessageArguments;
21
+ };
22
+ export declare function addMessage(messagesByDocument: Map<string, MessageArguments[]>, documentPath: string, message: MessageArguments): void;
23
+ export declare function emitMessages(file: VFile, documentMessages: readonly MessageArguments[]): void;
24
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAsB5D,eAAO,MAAM,QAAQ;IACnB,aAAa,EAIR,gBAAgB;IACrB,qBAAqB,cAAc,MAAM,KAAG,gBAAgB;IAK5D,qBAAqB,cAAc,MAAM,KAAG,gBAAgB;IAK5D,kBAAkB,cAAc,MAAM,KAAG,gBAAgB;IAKzD,kBAAkB,UAAU,OAAO,qBAAqB,MAAM,KAAG,gBAAgB;IAOjF,mBAAmB,WAAW,MAAM,WAAW,YAAY,KAAG,gBAAgB;IAK9E,iBAAiB,WAAW,MAAM,WAAW,YAAY,KAAG,gBAAgB;IAK5E,WAAW,SAAS,cAAc,KAAG,gBAAgB;IAKrD,kBAAkB,WAAW,MAAM,KAAG,gBAAgB;IAKtD,sBAAsB,iBAAiB,MAAM,KAAG,gBAAgB;IAKhE,oBAAoB,iBAAiB,MAAM,KAAG,gBAAgB;IAK9D,mBAAmB,aAAa,MAAM,KAAG,gBAAgB;IAKzD,kBAAkB,WAAW,MAAM,KAAG,gBAAgB;IAKtD,gBAAgB,WAAW,MAAM,KAAG,gBAAgB;IAKpD,mBAAmB,WAAW,MAAM,WAAW,MAAM,KAAG,gBAAgB;CAKzE,CAAC;AAEF,wBAAgB,UAAU,CACxB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,EACnD,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAON;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAI7F"}
@@ -0,0 +1,114 @@
1
+ import { InstructionSyntaxError } from "./instruction.js";
2
+ const rule = (ruleId) => `vivliostyle-index:${ruleId}`;
3
+ const formatTarget = (target) => `${target.path}#${target.fragment}`;
4
+ const formatEntryAddress = ({ group, entry, subentry }) => {
5
+ const parts = [`group=${JSON.stringify(group)}`, `entry=${JSON.stringify(entry)}`];
6
+ if (subentry !== undefined) {
7
+ parts.push(`subentry=${JSON.stringify(subentry)}`);
8
+ }
9
+ return parts.join(",");
10
+ };
11
+ const formatUnresolvedXref = ({ target, missing }) => {
12
+ const parts = [`group=${JSON.stringify(target.group)}`];
13
+ if (missing !== "group") {
14
+ parts.push(`entry=${JSON.stringify(target.entry)}`);
15
+ }
16
+ if (missing === "subentry") {
17
+ parts.push(`subentry=${JSON.stringify(target.subentry)}`);
18
+ }
19
+ return parts.join(",");
20
+ };
21
+ export const messages = {
22
+ anonymousFile: [
23
+ "cannot extract index entries from anonymous files or render indexes into anonymous files",
24
+ undefined,
25
+ rule("anonymous-file"),
26
+ ],
27
+ invalidIndexReference: (reference) => [
28
+ `invalid index reference: ${reference}`,
29
+ undefined,
30
+ rule("invalid-index-reference"),
31
+ ],
32
+ missingTargetFragment: (reference) => [
33
+ `index reference has no target fragment: ${reference}`,
34
+ undefined,
35
+ rule("missing-target-fragment"),
36
+ ],
37
+ missingInstruction: (reference) => [
38
+ `index reference has no q instruction: ${reference}`,
39
+ undefined,
40
+ rule("missing-instruction"),
41
+ ],
42
+ invalidInstruction: (error, instructionSource) => [
43
+ error instanceof InstructionSyntaxError
44
+ ? error.message
45
+ : `cannot parse index instruction: ${instructionSource}`,
46
+ undefined,
47
+ rule("instruction-parse-error"),
48
+ ],
49
+ unmatchedRangeStart: (target, address) => [
50
+ `range start for entry ${formatEntryAddress(address)} of index target ${formatTarget(target)} has no matching range end. the range start is treated as a page locator.`,
51
+ undefined,
52
+ rule("unmatched-range-start"),
53
+ ],
54
+ unmatchedRangeEnd: (target, address) => [
55
+ `range end for entry ${formatEntryAddress(address)} of index target ${formatTarget(target)} has no matching range start. the range end is treated as a page locator.`,
56
+ undefined,
57
+ rule("unmatched-range-end"),
58
+ ],
59
+ invalidXref: (xref) => [
60
+ `index does not contain ${formatUnresolvedXref(xref)}. the cross-reference target will not resolve.`,
61
+ undefined,
62
+ rule("invalid-xref"),
63
+ ],
64
+ targetNotInEntries: (target) => [
65
+ `index target ${formatTarget(target)} is not included in entries`,
66
+ undefined,
67
+ rule("target-not-in-entries"),
68
+ ],
69
+ entryProcessorMismatch: (documentPath) => [
70
+ `the entry processor and the build produced different index data for ${documentPath}. locators into it may not resolve.`,
71
+ undefined,
72
+ rule("entry-processor-mismatch"),
73
+ ],
74
+ documentNotInEntries: (documentPath) => [
75
+ `document ${documentPath} is not included in entries. its index instructions are ignored.`,
76
+ undefined,
77
+ rule("document-not-in-entries"),
78
+ ],
79
+ unsupportedLanguage: (language) => [
80
+ `cannot sort by language ${JSON.stringify(language)}. the index is sorted without it.`,
81
+ undefined,
82
+ rule("unsupported-language"),
83
+ ],
84
+ missingIndexTarget: (target) => [
85
+ `index target ${formatTarget(target)} does not exist`,
86
+ undefined,
87
+ rule("missing-index-target"),
88
+ ],
89
+ missingIndexRole: (target) => [
90
+ `index target ${formatTarget(target)} does not carry the doc-index role. the index is not rendered.`,
91
+ undefined,
92
+ rule("missing-index-role"),
93
+ ],
94
+ unknownIndexProfile: (target, profile) => [
95
+ `index target ${formatTarget(target)} names unknown profile ${JSON.stringify(profile)}. the default profile is used.`,
96
+ undefined,
97
+ rule("unknown-index-profile"),
98
+ ],
99
+ };
100
+ export function addMessage(messagesByDocument, documentPath, message) {
101
+ const documentMessages = messagesByDocument.get(documentPath);
102
+ if (documentMessages) {
103
+ documentMessages.push(message);
104
+ }
105
+ else {
106
+ messagesByDocument.set(documentPath, [message]);
107
+ }
108
+ }
109
+ export function emitMessages(file, documentMessages) {
110
+ for (const message of documentMessages) {
111
+ file.message(...message);
112
+ }
113
+ }
114
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
package/dist/model.d.ts CHANGED
@@ -1,43 +1,84 @@
1
- export type IndexId = string;
2
- export type ResolvedKey = [string, string];
3
- export type UnresolvedKey = [string, null];
4
- export type Key = ResolvedKey | UnresolvedKey;
5
- export type HasKey<TKey extends Key> = {
6
- key: TKey;
1
+ declare const keyBrand: unique symbol;
2
+ export type Key = Readonly<{
3
+ reading: string;
4
+ html: string;
5
+ [keyBrand]: unknown;
6
+ }>;
7
+ export type HasKey = {
8
+ key: Key;
7
9
  };
8
- type PageLocator = string;
9
- type RangeLocator = [PageLocator, PageLocator];
10
- type Locator = PageLocator | RangeLocator;
11
- type MainEntryReference<TKey extends Key> = [TKey, TKey];
12
- type SubentryReference<TKey extends Key> = [TKey, TKey, TKey];
13
- export type Reference<TKey extends Key> = MainEntryReference<TKey> | SubentryReference<TKey>;
14
- declare const sequentialIdBrand: unique symbol;
15
- type SequentialId = string & {
16
- [sequentialIdBrand]: unknown;
10
+ type PageLocation = Readonly<{
11
+ type: "page";
12
+ href: string;
13
+ }>;
14
+ type RangeLocation = Readonly<{
15
+ type: "range";
16
+ start: string;
17
+ end: string;
18
+ }>;
19
+ export type EntryAddress = Readonly<{
20
+ group: Key;
21
+ entry: Key;
22
+ subentry?: Key;
23
+ }>;
24
+ export type UnresolvedXref = Readonly<{
25
+ target: EntryAddress;
26
+ missing: keyof EntryAddress;
27
+ }>;
28
+ export type IndexError = "invalid-xref" | "unmatched-range-start" | "unmatched-range-end";
29
+ export type LocatorError = Extract<IndexError, "unmatched-range-start" | "unmatched-range-end">;
30
+ export type XrefError = Extract<IndexError, "invalid-xref">;
31
+ export type Locator = Readonly<{
32
+ location: PageLocation | RangeLocation;
33
+ template: string;
34
+ error?: LocatorError;
35
+ }>;
36
+ export type Xref = Readonly<{
37
+ target: EntryAddress;
38
+ template: string;
39
+ error?: XrefError;
40
+ }>;
41
+ export type XrefType = "preferred" | "related";
42
+ export type Subentry = Readonly<{
43
+ key: Key;
44
+ locators: readonly Locator[];
45
+ xrefPreferred: readonly Xref[];
46
+ xrefRelated: readonly Xref[];
47
+ }>;
48
+ export type Entry = Subentry & Readonly<{
49
+ subentries: readonly Subentry[];
50
+ }>;
51
+ export type Group = Readonly<{
52
+ key: Key;
53
+ entries: readonly Entry[];
54
+ }>;
55
+ export type Index = Readonly<{
56
+ groups: readonly Group[];
57
+ }>;
58
+ export type SubentryBuilder = {
59
+ key: Key;
60
+ locators: Locator[];
61
+ xrefPreferred: Xref[];
62
+ xrefRelated: Xref[];
17
63
  };
18
- type HasLocators = {
19
- locators: [SequentialId, Locator, boolean][];
64
+ export type EntryBuilder = SubentryBuilder & {
65
+ subentries: Map<string, SubentryBuilder>;
20
66
  };
21
- export declare function insertLocator(entry: HasLocators, locator: [Locator, boolean]): void;
22
- type HasReferences<TKey extends Key> = {
23
- see: [SequentialId, ...Reference<TKey>][];
24
- seeAlso: [SequentialId, ...Reference<TKey>][];
67
+ export type GroupBuilder = {
68
+ key: Key;
69
+ entries: Map<string, EntryBuilder>;
25
70
  };
26
- export declare function insertReference<TKey extends Key>(entry: HasReferences<TKey>, type: "see" | "seeAlso", reference: Reference<TKey>): void;
27
- export type EntryBase<TKey extends Key> = HasLocators & HasReferences<TKey>;
28
- export type Subentry<TKey extends Key> = HasKey<TKey> & EntryBase<TKey>;
29
- export type ParentOf<T> = {
30
- children: T[];
71
+ export type IndexBuilder = {
72
+ groups: Map<string, GroupBuilder>;
31
73
  };
32
- export type MainEntry<TKey extends Key> = HasKey<TKey> & EntryBase<TKey> & ParentOf<Subentry<TKey>>;
33
- export type Group<TKey extends Key> = HasKey<TKey> & ParentOf<MainEntry<TKey>>;
34
- export type Index<TKey extends Key> = {
35
- id: IndexId;
36
- } & ParentOf<Group<TKey>>;
37
- export declare function ensureIndex<TKey extends Key>(indexes: Index<TKey>[], id: IndexId): Index<TKey>;
38
- export declare function toHastChildren(value: string): string;
39
- export declare function hastChildrenToText(hastJson: string): string;
40
- export declare function getChild<TKey extends Key, TChild extends HasKey<TKey>>(parent: ParentOf<TChild>, key: TKey): TChild | undefined;
41
- export declare function ensureChild<TKey extends Key, TChild extends HasKey<TKey>>(parent: ParentOf<TChild>, key: TKey, init: Omit<TChild, "key">): TChild;
74
+ export declare function createIndexBuilder(): IndexBuilder;
75
+ export declare function createKey(reading: string, html: string): Key;
76
+ export declare const addressKey: (address: EntryAddress) => string;
77
+ export declare function ensureEntry(builder: IndexBuilder, address: EntryAddress): EntryBuilder | SubentryBuilder;
78
+ export declare function insertLocator(entry: EntryBuilder | SubentryBuilder, locator: Locator): void;
79
+ export declare function insertXref(entry: EntryBuilder | SubentryBuilder, type: XrefType, target: EntryAddress, template: string): void;
80
+ export declare function findUnresolvedXref(builder: IndexBuilder, target: EntryAddress): UnresolvedXref | undefined;
81
+ export declare function labelInvalidXrefs(builder: IndexBuilder): ReadonlyMap<string, UnresolvedXref>;
82
+ export declare function finalizeIndex(builder: IndexBuilder): Index;
42
83
  export {};
43
84
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}