ropegeo-common 1.24.0 → 1.25.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 (41) hide show
  1. package/dist/models/betaSections/betaSection.d.ts +8 -5
  2. package/dist/models/betaSections/betaSection.d.ts.map +1 -1
  3. package/dist/models/betaSections/betaSection.js +27 -13
  4. package/dist/models/betaSections/betaSectionExcerpt.d.ts +10 -3
  5. package/dist/models/betaSections/betaSectionExcerpt.d.ts.map +1 -1
  6. package/dist/models/betaSections/betaSectionExcerpt.js +19 -10
  7. package/dist/models/betaSections/boldRelevantPhrase.d.ts +8 -0
  8. package/dist/models/betaSections/boldRelevantPhrase.d.ts.map +1 -0
  9. package/dist/models/betaSections/boldRelevantPhrase.js +62 -0
  10. package/dist/models/betaSections/formatExcerptHtml.d.ts +8 -0
  11. package/dist/models/betaSections/formatExcerptHtml.d.ts.map +1 -1
  12. package/dist/models/betaSections/formatExcerptHtml.js +42 -7
  13. package/dist/models/betaSections/normalizeExcerptHtml.d.ts +10 -13
  14. package/dist/models/betaSections/normalizeExcerptHtml.d.ts.map +1 -1
  15. package/dist/models/betaSections/normalizeExcerptHtml.js +21 -39
  16. package/dist/models/index.d.ts +4 -2
  17. package/dist/models/index.d.ts.map +1 -1
  18. package/dist/models/index.js +8 -2
  19. package/dist/models/minimap/legend/concrete/imageContext.d.ts +5 -3
  20. package/dist/models/minimap/legend/concrete/imageContext.d.ts.map +1 -1
  21. package/dist/models/minimap/legend/concrete/imageContext.js +11 -11
  22. package/dist/models/minimap/legend/concrete/measurementContext.d.ts +3 -3
  23. package/dist/models/minimap/legend/concrete/measurementContext.d.ts.map +1 -1
  24. package/dist/models/minimap/legend/concrete/measurementContext.js +7 -11
  25. package/dist/models/minimap/legend/concrete/relevantContext.d.ts +4 -3
  26. package/dist/models/minimap/legend/concrete/relevantContext.d.ts.map +1 -1
  27. package/dist/models/minimap/legend/concrete/relevantContext.js +7 -19
  28. package/dist/models/pageViews/offlinePageView.d.ts +9 -6
  29. package/dist/models/pageViews/offlinePageView.d.ts.map +1 -1
  30. package/dist/models/pageViews/offlineRopewikiPageView.d.ts +2 -1
  31. package/dist/models/pageViews/offlineRopewikiPageView.d.ts.map +1 -1
  32. package/dist/models/pageViews/offlineRopewikiPageView.js +12 -8
  33. package/dist/models/pageViews/onlinePageView.d.ts +10 -8
  34. package/dist/models/pageViews/onlinePageView.d.ts.map +1 -1
  35. package/dist/models/pageViews/onlineRopewikiPageView.d.ts +2 -1
  36. package/dist/models/pageViews/onlineRopewikiPageView.d.ts.map +1 -1
  37. package/dist/models/pageViews/onlineRopewikiPageView.js +12 -8
  38. package/dist/models/relevanceStrength.d.ts +9 -0
  39. package/dist/models/relevanceStrength.d.ts.map +1 -0
  40. package/dist/models/relevanceStrength.js +24 -0
  41. package/package.json +1 -1
@@ -1,15 +1,18 @@
1
1
  import { FetchType } from '../fetchType';
2
+ import type { RelevanceStrength } from '../relevanceStrength';
2
3
  import { BetaSectionExcerpt } from './betaSectionExcerpt';
3
4
  import { BetaSectionImage } from './betaSectionImage';
4
5
  /**
5
6
  * An excerpt split into its verbatim `body` and the surrounding section
6
- * context. Consumers render `before` and `after` de-emphasized (e.g. faded)
7
- * relative to `body`; concatenating the three yields well-formed HTML.
7
+ * context. Each of `before`, `body`, and `after` is independently well-formed
8
+ * HTML, so consumers can render them as separate (e.g. stacked) blocks and
9
+ * de-emphasize the context relative to the body. `before`/`after` are omitted
10
+ * when there is no surrounding context (or it would be empty/whitespace).
8
11
  */
9
12
  export type ExcerptHtml = {
10
- before: string;
13
+ before?: string;
11
14
  body: string;
12
- after: string;
15
+ after?: string;
13
16
  };
14
17
  export declare function registerBetaSectionParser(fetchType: FetchType, parse: (body: unknown) => BetaSection): void;
15
18
  export declare abstract class BetaSection {
@@ -25,7 +28,7 @@ export declare abstract class BetaSection {
25
28
  * Builds a {@link BetaSectionExcerpt} for a verbatim excerpt from this section's text.
26
29
  * When the excerpt cannot be located, `start` and `end` are left undefined.
27
30
  */
28
- toExcerpt(excerptText: string, confidence: number): BetaSectionExcerpt;
31
+ toExcerpt(excerptText: string, relevanceStrength: RelevanceStrength, relevantPhrase: string): BetaSectionExcerpt;
29
32
  /**
30
33
  * Renders an excerpt with nearby section context when its offsets still
31
34
  * match this section, otherwise falls back to the excerpt alone.
@@ -1 +1 @@
1
- {"version":3,"file":"betaSection.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/betaSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAUtD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,WAAW,GACtC,IAAI,CAEN;AAED,8BAAsB,WAAW;IAC7B,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,IAAI,CAAC;IACzB,mEAAmE;IACnE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAElB,SAAS,aACL,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,IAAI,EACxB,EAAE,GAAE,MAAM,GAAG,IAAW;IAS5B;;;OAGG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,kBAAkB;IAWtE;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW;IA0CvD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,WAAW;IA0B1E,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAS9E,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAS9E,SAAS,CAAC,MAAM,CAAC,uBAAuB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,MAAM,GACZ,IAAI;IAeP,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,SAAS,GAC7B,IAAI;IAcP,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAgB3C,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,SAAS,GAC7B,gBAAgB,EAAE;IAYrB,SAAS,CAAC,MAAM,CAAC,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EAAE,EAC1B,SAAS,EAAE,OAAO,GACnB,IAAI;CAeV"}
1
+ {"version":3,"file":"betaSection.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/betaSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAWtD;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,WAAW,GACtC,IAAI,CAEN;AAED,8BAAsB,WAAW;IAC7B,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,IAAI,CAAC;IACzB,mEAAmE;IACnE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAElB,SAAS,aACL,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,IAAI,EACxB,EAAE,GAAE,MAAM,GAAG,IAAW;IAS5B;;;OAGG;IACH,SAAS,CACL,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,MAAM,GACvB,kBAAkB;IA6BrB;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW;IAmDvD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,WAAW;IA0B1E,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAS9E,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAS9E,SAAS,CAAC,MAAM,CAAC,uBAAuB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,MAAM,GACZ,IAAI;IAeP,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,SAAS,GAC7B,IAAI;IAcP,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAgB3C,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,SAAS,GAC7B,gBAAgB,EAAE;IAYrB,SAAS,CAAC,MAAM,CAAC,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EAAE,EAC1B,SAAS,EAAE,OAAO,GACnB,IAAI;CAeV"}
@@ -4,6 +4,7 @@ exports.BetaSection = void 0;
4
4
  exports.registerBetaSectionParser = registerBetaSectionParser;
5
5
  const betaSectionExcerpt_1 = require("./betaSectionExcerpt");
6
6
  const betaSectionImage_1 = require("./betaSectionImage");
7
+ const boldRelevantPhrase_1 = require("./boldRelevantPhrase");
7
8
  const formatExcerptHtml_1 = require("./formatExcerptHtml");
8
9
  const normalizeExcerptHtml_1 = require("./normalizeExcerptHtml");
9
10
  const betaSectionParsers = new Map();
@@ -22,15 +23,15 @@ class BetaSection {
22
23
  * Builds a {@link BetaSectionExcerpt} for a verbatim excerpt from this section's text.
23
24
  * When the excerpt cannot be located, `start` and `end` are left undefined.
24
25
  */
25
- toExcerpt(excerptText, confidence) {
26
+ toExcerpt(excerptText, relevanceStrength, relevantPhrase) {
26
27
  if (excerptText.length === 0) {
27
- return new betaSectionExcerpt_1.BetaSectionExcerpt(undefined, undefined, undefined, confidence);
28
+ return new betaSectionExcerpt_1.BetaSectionExcerpt(undefined, undefined, undefined, relevanceStrength, relevantPhrase);
28
29
  }
29
30
  const start = this.text.indexOf(excerptText);
30
31
  if (start === -1) {
31
- return new betaSectionExcerpt_1.BetaSectionExcerpt(excerptText, undefined, undefined, confidence);
32
+ return new betaSectionExcerpt_1.BetaSectionExcerpt(excerptText, undefined, undefined, relevanceStrength, relevantPhrase);
32
33
  }
33
- return new betaSectionExcerpt_1.BetaSectionExcerpt(excerptText, start, start + excerptText.length, confidence);
34
+ return new betaSectionExcerpt_1.BetaSectionExcerpt(excerptText, start, start + excerptText.length, relevanceStrength, relevantPhrase);
34
35
  }
35
36
  /**
36
37
  * Renders an excerpt with nearby section context when its offsets still
@@ -47,20 +48,33 @@ class BetaSection {
47
48
  (0, formatExcerptHtml_1.isSafeTextBoundary)(this.text, excerpt.start) &&
48
49
  (0, formatExcerptHtml_1.isSafeTextBoundary)(this.text, excerpt.end);
49
50
  if (!validOffsets)
50
- return { before: '', body: excerpt.toHtml(), after: '' };
51
+ return { body: excerpt.toHtml() };
51
52
  const excerptStart = excerpt.start;
52
53
  const excerptEnd = excerpt.end;
53
54
  const characters = (0, formatExcerptHtml_1.visibleCharacters)(this.text);
54
55
  const structuredContext = (0, formatExcerptHtml_1.listContext)(this.text, excerptStart, excerptEnd, characters);
55
- const before = structuredContext?.before ??
56
- this.text.slice((0, formatExcerptHtml_1.previousSentenceStart)(this.text, excerptStart, characters), excerptStart);
57
- const after = structuredContext?.after ??
58
- this.text.slice(excerptEnd, (0, formatExcerptHtml_1.nextSentenceEnd)(this.text, excerptEnd, characters));
59
- return (0, normalizeExcerptHtml_1.normalizeExcerptListHtmlParts)({
60
- before,
56
+ const parts = structuredContext ?? {
57
+ before: this.text
58
+ .slice((0, formatExcerptHtml_1.previousSentenceStart)(this.text, excerptStart, characters), excerptStart)
59
+ .trim(),
61
60
  body: excerpt.text,
62
- after,
63
- });
61
+ after: this.text
62
+ .slice(excerptEnd, (0, formatExcerptHtml_1.nextSentenceEnd)(this.text, excerptEnd, characters))
63
+ .trim(),
64
+ };
65
+ // We have the source list here, so keep ordered lists ordered; their
66
+ // `start` ordinals are already aligned to the source by `listContext`.
67
+ const options = { preserveOrderedLists: true };
68
+ const result = {
69
+ body: (0, boldRelevantPhrase_1.boldRelevantPhraseInHtml)((0, normalizeExcerptHtml_1.normalizeExcerptListHtml)(parts.body, options), excerpt.relevantPhrase),
70
+ };
71
+ const before = (0, normalizeExcerptHtml_1.normalizeExcerptListHtml)(parts.before, options);
72
+ if (before.trim().length > 0)
73
+ result.before = before;
74
+ const after = (0, normalizeExcerptHtml_1.normalizeExcerptListHtml)(parts.after, options);
75
+ if (after.trim().length > 0)
76
+ result.after = after;
77
+ return result;
64
78
  }
65
79
  static fromResponseBody(body, fetchType) {
66
80
  if (body == null || typeof body !== 'object') {
@@ -1,14 +1,21 @@
1
+ import { type RelevanceStrength } from '../relevanceStrength';
1
2
  export declare class BetaSectionExcerpt {
2
3
  readonly text?: string;
3
4
  readonly start?: number;
4
5
  readonly end?: number;
5
- readonly confidence: number;
6
- constructor(text: string | undefined, start: number | undefined, end: number | undefined, confidence: number);
6
+ readonly relevanceStrength: RelevanceStrength;
7
+ /**
8
+ * Verbatim substring of the text block’s title and/or body that connects
9
+ * this excerpt to the map feature. Required even for title-only relevance
10
+ * (when `text` is omitted).
11
+ */
12
+ readonly relevantPhrase: string;
13
+ constructor(text: string | undefined, start: number | undefined, end: number | undefined, relevanceStrength: RelevanceStrength, relevantPhrase: string);
7
14
  toPlain(): Record<string, unknown>;
8
15
  /** Returns displayable excerpt HTML when the owning beta section is unavailable. */
9
16
  toHtml(): string;
10
17
  static fromResult(result: unknown): BetaSectionExcerpt;
11
- private static assertConfidence;
18
+ private static assertNonEmptyString;
12
19
  private static assertNonNegativeInteger;
13
20
  }
14
21
  //# sourceMappingURL=betaSectionExcerpt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"betaSectionExcerpt.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/betaSectionExcerpt.ts"],"names":[],"mappings":"AAEA,qBAAa,kBAAkB;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAGxB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,UAAU,EAAE,MAAM;IAStB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAclC,oFAAoF;IACpF,MAAM,IAAI,MAAM;IAIhB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB;IAgCtD,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAK1C"}
1
+ {"version":3,"file":"betaSectionExcerpt.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/betaSectionExcerpt.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,kBAAkB;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAG5B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,MAAM;IAc1B,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiBlC,oFAAoF;IACpF,MAAM,IAAI,MAAM;IAOhB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB;IA6CtD,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAK1C"}
@@ -2,16 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BetaSectionExcerpt = void 0;
4
4
  const normalizeExcerptHtml_1 = require("./normalizeExcerptHtml");
5
+ const boldRelevantPhrase_1 = require("./boldRelevantPhrase");
6
+ const relevanceStrength_1 = require("../relevanceStrength");
5
7
  class BetaSectionExcerpt {
6
- constructor(text, start, end, confidence) {
7
- BetaSectionExcerpt.assertConfidence(confidence);
8
+ constructor(text, start, end, relevanceStrength, relevantPhrase) {
9
+ (0, relevanceStrength_1.assertRelevanceStrength)(relevanceStrength, 'BetaSectionExcerpt.relevanceStrength');
10
+ BetaSectionExcerpt.assertNonEmptyString(relevantPhrase, 'BetaSectionExcerpt.relevantPhrase');
8
11
  this.text = text;
9
12
  this.start = start;
10
13
  this.end = end;
11
- this.confidence = confidence;
14
+ this.relevanceStrength = relevanceStrength;
15
+ this.relevantPhrase = relevantPhrase;
12
16
  }
13
17
  toPlain() {
14
- const out = { confidence: this.confidence };
18
+ const out = {
19
+ relevanceStrength: this.relevanceStrength,
20
+ relevantPhrase: this.relevantPhrase,
21
+ };
15
22
  if (this.text !== undefined) {
16
23
  out.text = this.text;
17
24
  }
@@ -25,14 +32,15 @@ class BetaSectionExcerpt {
25
32
  }
26
33
  /** Returns displayable excerpt HTML when the owning beta section is unavailable. */
27
34
  toHtml() {
28
- return (0, normalizeExcerptHtml_1.normalizeExcerptListHtml)(this.text ?? '');
35
+ return (0, boldRelevantPhrase_1.boldRelevantPhraseInHtml)((0, normalizeExcerptHtml_1.normalizeExcerptListHtml)(this.text ?? ''), this.relevantPhrase);
29
36
  }
30
37
  static fromResult(result) {
31
38
  if (result == null || typeof result !== 'object' || Array.isArray(result)) {
32
39
  throw new Error('BetaSectionExcerpt result must be an object');
33
40
  }
34
41
  const r = result;
35
- BetaSectionExcerpt.assertConfidence(r.confidence);
42
+ const relevanceStrength = (0, relevanceStrength_1.assertRelevanceStrength)(r.relevanceStrength, 'BetaSectionExcerpt.relevanceStrength');
43
+ const relevantPhrase = BetaSectionExcerpt.assertNonEmptyString(r.relevantPhrase, 'BetaSectionExcerpt.relevantPhrase');
36
44
  let text;
37
45
  if (r.text !== undefined) {
38
46
  if (typeof r.text !== 'string') {
@@ -50,12 +58,13 @@ class BetaSectionExcerpt {
50
58
  BetaSectionExcerpt.assertNonNegativeInteger(r.end, 'BetaSectionExcerpt.end');
51
59
  end = r.end;
52
60
  }
53
- return new BetaSectionExcerpt(text, start, end, r.confidence);
61
+ return new BetaSectionExcerpt(text, start, end, relevanceStrength, relevantPhrase);
54
62
  }
55
- static assertConfidence(value) {
56
- if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 1) {
57
- throw new Error(`BetaSectionExcerpt.confidence must be a number from 0 to 1, got: ${JSON.stringify(value)}`);
63
+ static assertNonEmptyString(value, context) {
64
+ if (typeof value !== 'string' || value.trim().length === 0) {
65
+ throw new Error(`${context} must be a non-empty string`);
58
66
  }
67
+ return value;
59
68
  }
60
69
  static assertNonNegativeInteger(value, context) {
61
70
  if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || !Number.isInteger(value)) {
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Wraps the first contiguous text-run occurrence of `phrase` in `<b>…</b>`
3
+ * without splitting HTML tags. If the phrase already sits fully inside a
4
+ * `<b>`/`<strong>` element, or spans multiple text runs (tags in between),
5
+ * returns `html` unchanged.
6
+ */
7
+ export declare function boldRelevantPhraseInHtml(html: string, phrase: string): string;
8
+ //# sourceMappingURL=boldRelevantPhrase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boldRelevantPhrase.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/boldRelevantPhrase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB7E"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.boldRelevantPhraseInHtml = boldRelevantPhraseInHtml;
4
+ /**
5
+ * Wraps the first contiguous text-run occurrence of `phrase` in `<b>…</b>`
6
+ * without splitting HTML tags. If the phrase already sits fully inside a
7
+ * `<b>`/`<strong>` element, or spans multiple text runs (tags in between),
8
+ * returns `html` unchanged.
9
+ */
10
+ function boldRelevantPhraseInHtml(html, phrase) {
11
+ if (html.length === 0 || phrase.length === 0)
12
+ return html;
13
+ const tokens = tokenizeHtml(html);
14
+ for (let i = 0; i < tokens.length; i++) {
15
+ const token = tokens[i];
16
+ if (token.kind !== 'text')
17
+ continue;
18
+ const at = token.value.indexOf(phrase);
19
+ if (at === -1)
20
+ continue;
21
+ if (isInsideBold(tokens, i))
22
+ return html;
23
+ tokens[i] = {
24
+ kind: 'text',
25
+ value: token.value.slice(0, at) +
26
+ '<b>' +
27
+ phrase +
28
+ '</b>' +
29
+ token.value.slice(at + phrase.length),
30
+ };
31
+ return tokens.map((t) => t.value).join('');
32
+ }
33
+ return html;
34
+ }
35
+ function tokenizeHtml(html) {
36
+ const tokens = [];
37
+ for (const part of html.split(/(<[^>]+>)/g)) {
38
+ if (part.length === 0)
39
+ continue;
40
+ if (part.startsWith('<') && part.endsWith('>')) {
41
+ tokens.push({ kind: 'tag', value: part });
42
+ }
43
+ else {
44
+ tokens.push({ kind: 'text', value: part });
45
+ }
46
+ }
47
+ return tokens;
48
+ }
49
+ function isInsideBold(tokens, textTokenIndex) {
50
+ let depth = 0;
51
+ for (let i = 0; i < textTokenIndex; i++) {
52
+ const token = tokens[i];
53
+ if (token.kind !== 'tag')
54
+ continue;
55
+ if (/^<\s*(b|strong)\b[^>]*>$/i.test(token.value))
56
+ depth += 1;
57
+ else if (/^<\s*\/\s*(b|strong)\s*>$/i.test(token.value)) {
58
+ depth = Math.max(0, depth - 1);
59
+ }
60
+ }
61
+ return depth > 0;
62
+ }
@@ -7,8 +7,16 @@ export declare function visibleCharacters(html: string): VisibleCharacter[];
7
7
  export declare function isSafeTextBoundary(html: string, offset: number): boolean;
8
8
  export declare function previousSentenceStart(html: string, anchor: number, characters: VisibleCharacter[]): number;
9
9
  export declare function nextSentenceEnd(html: string, anchor: number, characters: VisibleCharacter[]): number;
10
+ /**
11
+ * When an excerpt is a run of list items, returns the excerpt and its adjacent
12
+ * context split into three independently well-formed HTML fragments. Each
13
+ * fragment stands on its own: the surrounding list items (or the sentence
14
+ * before/after the list) become complete lists/prose so they can be rendered as
15
+ * separate stacked blocks.
16
+ */
10
17
  export declare function listContext(html: string, excerptStart: number, excerptEnd: number, characters: VisibleCharacter[]): {
11
18
  before: string;
19
+ body: string;
12
20
  after: string;
13
21
  } | null;
14
22
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"formatExcerptHtml.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/formatExcerptHtml.ts"],"names":[],"mappings":"AAAA,KAAK,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsBzD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAuBlE;AAYD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAsCxE;AAuCD,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAAE,GAC/B,MAAM,CAkBR;AAED,wBAAgB,eAAe,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAAE,GAC/B,MAAM,CAuBR;AAyCD,wBAAgB,WAAW,CACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,gBAAgB,EAAE,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA0C1C"}
1
+ {"version":3,"file":"formatExcerptHtml.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/formatExcerptHtml.ts"],"names":[],"mappings":"AAAA,KAAK,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsBzD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAuBlE;AAYD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAsCxE;AAuCD,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAAE,GAC/B,MAAM,CAkBR;AAED,wBAAgB,eAAe,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gBAAgB,EAAE,GAC/B,MAAM,CAuBR;AAoED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,gBAAgB,EAAE,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwDxD"}
@@ -183,6 +183,33 @@ function findContainingList(html, excerptStart, excerptEnd) {
183
183
  }
184
184
  return (ranges.sort((a, b) => b.openStart - a.openStart || a.closeEnd - b.closeEnd)[0] ?? null);
185
185
  }
186
+ /** `ul` or `ol`, parsed from a list's opening tag. */
187
+ function listContainerTag(openTag) {
188
+ return /^<\s*ol\b/i.test(openTag) ? 'ol' : 'ul';
189
+ }
190
+ /** The 1-based ordinal an ordered list's first item renders as (`start`, default 1). */
191
+ function listStartIndex(openTag) {
192
+ const match = openTag.match(/\bstart\s*=\s*["']?\s*(-?\d+)/i);
193
+ const parsed = match != null ? Number.parseInt(match[1], 10) : Number.NaN;
194
+ return Number.isFinite(parsed) ? parsed : 1;
195
+ }
196
+ /**
197
+ * Wraps list items in a standalone `<ul>`/`<ol>`. Ordered lists carry a `start`
198
+ * attribute (whenever the first item is not ordinal 1) so numbering lines up
199
+ * with the source list even when the excerpt parts are rendered as separate
200
+ * blocks.
201
+ */
202
+ function wrapListItems(tag, itemsHtml, startOrdinal) {
203
+ const startAttr = tag === 'ol' && startOrdinal !== 1 ? ` start="${startOrdinal}"` : '';
204
+ return `<${tag}${startAttr}>${itemsHtml}</${tag}>`;
205
+ }
206
+ /**
207
+ * When an excerpt is a run of list items, returns the excerpt and its adjacent
208
+ * context split into three independently well-formed HTML fragments. Each
209
+ * fragment stands on its own: the surrounding list items (or the sentence
210
+ * before/after the list) become complete lists/prose so they can be rendered as
211
+ * separate stacked blocks.
212
+ */
186
213
  function listContext(html, excerptStart, excerptEnd, characters) {
187
214
  const excerpt = html.slice(excerptStart, excerptEnd).trim();
188
215
  if (!/^<li\b/i.test(excerpt) || !/<\/li\s*>$/i.test(excerpt)) {
@@ -191,6 +218,10 @@ function listContext(html, excerptStart, excerptEnd, characters) {
191
218
  const range = findContainingList(html, excerptStart, excerptEnd);
192
219
  if (range == null)
193
220
  return null;
221
+ const openTag = html.slice(range.openStart, range.openEnd);
222
+ const tag = listContainerTag(openTag);
223
+ // Ordinal of the list's first item so ordered excerpts line up with the source.
224
+ const baseOrdinal = tag === 'ol' ? listStartIndex(openTag) : 1;
194
225
  const listBody = html.slice(range.openEnd, range.closeStart);
195
226
  const items = [...listBody.matchAll(/<li\b[^>]*>[\s\S]*?<\/li\s*>/gi)].map((match) => ({
196
227
  start: range.openEnd + match.index,
@@ -198,13 +229,17 @@ function listContext(html, excerptStart, excerptEnd, characters) {
198
229
  }));
199
230
  const previous = items.filter(({ end }) => end <= excerptStart).at(-1);
200
231
  const next = items.find(({ start }) => start >= excerptEnd);
232
+ const firstBodyIndex = items.findIndex(({ start }) => start >= excerptStart);
233
+ const body = wrapListItems(tag, html.slice(excerptStart, excerptEnd), baseOrdinal + firstBodyIndex);
201
234
  const before = previous != null
202
- ? html.slice(range.openStart, range.openEnd) +
203
- html.slice(previous.start, previous.end)
204
- : html.slice(previousSentenceStart(html, range.openStart, characters), range.openEnd);
235
+ ? wrapListItems(tag, html.slice(previous.start, previous.end), baseOrdinal + items.indexOf(previous))
236
+ : html
237
+ .slice(previousSentenceStart(html, range.openStart, characters), range.openStart)
238
+ .trim();
205
239
  const after = next != null
206
- ? html.slice(next.start, next.end) +
207
- html.slice(range.closeStart, range.closeEnd)
208
- : html.slice(range.closeStart, nextSentenceEnd(html, range.closeEnd, characters));
209
- return { before, after };
240
+ ? wrapListItems(tag, html.slice(next.start, next.end), baseOrdinal + items.indexOf(next))
241
+ : html
242
+ .slice(range.closeEnd, nextSentenceEnd(html, range.closeEnd, characters))
243
+ .trim();
244
+ return { before, body, after };
210
245
  }
@@ -1,18 +1,15 @@
1
- /** Leading/trailing context around an excerpt body, split for independent styling. */
2
- export type ExcerptHtmlParts = {
3
- before: string;
4
- body: string;
5
- after: string;
1
+ export type NormalizeExcerptListOptions = {
2
+ /**
3
+ * When true, an unpaired closing `</ol>` is repaired by prepending an
4
+ * opening `<ol>` (preserving the ordered list). When false (the default,
5
+ * used for excerpt-only text with no known source order), it is converted
6
+ * to `</ul>` and an opening `<ul>` is prepended instead.
7
+ */
8
+ preserveOrderedLists?: boolean;
6
9
  };
7
- /**
8
- * Repairs the list fragments Ropewiki excerpts commonly produce, distributing
9
- * any added opening tags to `before` and closing tags to `after` so the three
10
- * parts remain a well-formed list when concatenated as `before + body + after`.
11
- */
12
- export declare function normalizeExcerptListHtmlParts(parts: ExcerptHtmlParts): ExcerptHtmlParts;
13
10
  /**
14
11
  * Repairs the list fragments Ropewiki excerpts commonly produce without
15
- * otherwise rewriting the source HTML.
12
+ * otherwise rewriting the source HTML, so the result is well-formed on its own.
16
13
  */
17
- export declare function normalizeExcerptListHtml(html: string): string;
14
+ export declare function normalizeExcerptListHtml(html: string, { preserveOrderedLists }?: NormalizeExcerptListOptions): string;
18
15
  //# sourceMappingURL=normalizeExcerptHtml.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeExcerptHtml.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/normalizeExcerptHtml.ts"],"names":[],"mappings":"AAIA,sFAAsF;AACtF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAkCvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ7D"}
1
+ {"version":3,"file":"normalizeExcerptHtml.d.ts","sourceRoot":"","sources":["../../../src/models/betaSections/normalizeExcerptHtml.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,2BAA2B,GAAG;IACtC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,MAAM,EACZ,EAAE,oBAA4B,EAAE,GAAE,2BAAgC,GACnE,MAAM,CA+BR"}
@@ -1,59 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeExcerptListHtmlParts = normalizeExcerptListHtmlParts;
4
3
  exports.normalizeExcerptListHtml = normalizeExcerptListHtml;
5
4
  function countTags(html, pattern) {
6
5
  return html.match(pattern)?.length ?? 0;
7
6
  }
8
7
  /**
9
- * Repairs the list fragments Ropewiki excerpts commonly produce, distributing
10
- * any added opening tags to `before` and closing tags to `after` so the three
11
- * parts remain a well-formed list when concatenated as `before + body + after`.
8
+ * Repairs the list fragments Ropewiki excerpts commonly produce without
9
+ * otherwise rewriting the source HTML, so the result is well-formed on its own.
12
10
  */
13
- function normalizeExcerptListHtmlParts(parts) {
14
- let { before, body, after } = parts;
15
- const combined = () => before + body + after;
16
- const olOpenCount = countTags(combined(), /<ol\b[^>]*>/gi);
17
- const olCloseCount = countTags(combined(), /<\/ol\s*>/gi);
18
- if (olOpenCount === 0 && olCloseCount > 0) {
19
- before = before.replace(/<\/ol\s*>/gi, '</ul>');
20
- body = body.replace(/<\/ol\s*>/gi, '</ul>');
21
- after = after.replace(/<\/ol\s*>/gi, '</ul>');
22
- before = '<ul>'.repeat(olCloseCount) + before;
11
+ function normalizeExcerptListHtml(html, { preserveOrderedLists = false } = {}) {
12
+ if (html.length === 0)
13
+ return html;
14
+ let normalized = html;
15
+ const olOpenCount = countTags(normalized, /<ol\b[^>]*>/gi);
16
+ const olCloseCount = countTags(normalized, /<\/ol\s*>/gi);
17
+ if (!preserveOrderedLists && olOpenCount === 0 && olCloseCount > 0) {
18
+ normalized = normalized.replace(/<\/ol\s*>/gi, '</ul>');
19
+ normalized = '<ul>'.repeat(olCloseCount) + normalized;
23
20
  }
24
21
  else if (olOpenCount > olCloseCount) {
25
- after += '</ol>'.repeat(olOpenCount - olCloseCount);
22
+ normalized += '</ol>'.repeat(olOpenCount - olCloseCount);
26
23
  }
27
24
  else if (olCloseCount > olOpenCount) {
28
- before = '<ol>'.repeat(olCloseCount - olOpenCount) + before;
25
+ normalized = '<ol>'.repeat(olCloseCount - olOpenCount) + normalized;
29
26
  }
30
- const ulOpenCount = countTags(combined(), /<ul\b[^>]*>/gi);
31
- const ulCloseCount = countTags(combined(), /<\/ul\s*>/gi);
27
+ const ulOpenCount = countTags(normalized, /<ul\b[^>]*>/gi);
28
+ const ulCloseCount = countTags(normalized, /<\/ul\s*>/gi);
32
29
  if (ulOpenCount > ulCloseCount) {
33
- after += '</ul>'.repeat(ulOpenCount - ulCloseCount);
30
+ normalized += '</ul>'.repeat(ulOpenCount - ulCloseCount);
34
31
  }
35
32
  else if (ulCloseCount > ulOpenCount) {
36
- before = '<ul>'.repeat(ulCloseCount - ulOpenCount) + before;
33
+ normalized = '<ul>'.repeat(ulCloseCount - ulOpenCount) + normalized;
37
34
  }
38
- const hasListItem = /<li\b[^>]*>/i.test(combined());
39
- const hasListContainer = /<\/?(?:ul|ol)\b[^>]*>/i.test(combined());
35
+ const hasListItem = /<li\b[^>]*>/i.test(normalized);
36
+ const hasListContainer = /<\/?(?:ul|ol)\b[^>]*>/i.test(normalized);
40
37
  if (hasListItem && !hasListContainer) {
41
- before = `<ul>${before}`;
42
- after = `${after}</ul>`;
38
+ normalized = `<ul>${normalized}</ul>`;
43
39
  }
44
- return { before, body, after };
45
- }
46
- /**
47
- * Repairs the list fragments Ropewiki excerpts commonly produce without
48
- * otherwise rewriting the source HTML.
49
- */
50
- function normalizeExcerptListHtml(html) {
51
- if (html.length === 0)
52
- return html;
53
- const { before, body, after } = normalizeExcerptListHtmlParts({
54
- before: '',
55
- body: html,
56
- after: '',
57
- });
58
- return before + body + after;
40
+ return normalized;
59
41
  }
@@ -57,6 +57,8 @@ export { OfflineBetaSectionImage } from './betaSections/offlineBetaSectionImage'
57
57
  export { DownloadBytes } from './betaSections/downloadBytes';
58
58
  export { BetaSection, type ExcerptHtml } from './betaSections/betaSection';
59
59
  export { BetaSectionExcerpt } from './betaSections/betaSectionExcerpt';
60
+ export { boldRelevantPhraseInHtml } from './betaSections/boldRelevantPhrase';
61
+ export { RELEVANCE_STRENGTHS, assertRelevanceStrength, isRelevanceStrength, type RelevanceStrength, } from './relevanceStrength';
60
62
  export { OnlineBetaSection } from './betaSections/onlineBetaSection';
61
63
  export { OfflineBetaSection } from './betaSections/offlineBetaSection';
62
64
  export { Bounds } from './minimap/bounds';
@@ -88,8 +90,8 @@ export { PageView } from './pageViews/pageView';
88
90
  export { RopewikiPageView as BaseRopewikiPageView } from './pageViews/ropewikiPageView';
89
91
  export { OnlineRopewikiPageView } from './pageViews/onlineRopewikiPageView';
90
92
  export { OfflineRopewikiPageView } from './pageViews/offlineRopewikiPageView';
91
- export type { OnlinePageView, OnlineBetaSectionLookup, OnlineBetaSectionLookupEntry, } from './pageViews/onlinePageView';
92
- export type { OfflinePageView, OfflineBetaSectionLookup, OfflineBetaSectionLookupEntry, } from './pageViews/offlinePageView';
93
+ export type { OnlinePageView, OnlineBetaSectionLookup, OnlineImageLookup, OnlineImageLookupEntry, } from './pageViews/onlinePageView';
94
+ export type { OfflinePageView, OfflineBetaSectionLookup, OfflineImageLookup, OfflineImageLookupEntry, } from './pageViews/offlinePageView';
93
95
  export { formatMeasurementValue } from './measurements/measurementValue';
94
96
  export { Measurement, FREEDOM_MEASUREMENT_SYSTEM } from './measurements/measurement';
95
97
  export type { MeasurementUnit } from './measurements/measurement';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Preview = exports.RopewikiVehicleType = exports.PermitStatus = exports.SavedFilters = exports.SavedPagesFilter = exports.SearchFilter = exports.RouteFilter = exports.RiskMinMax = exports.TimeMinMax = exports.WaterMinMax = exports.TechnicalMinMax = exports.AcaDifficultyFilterOptions = exports.registerDifficultyFilterOptionsParser = exports.DifficultyFilterOptions = exports.Q_ACA_RISK = exports.Q_ACA_TIME = exports.Q_ACA_WATER = exports.Q_ACA_TECHNICAL = exports.Q_DIFFICULTY_TYPE = exports.AcaDifficultyParams = exports.isDifficultyParamsActive = exports.registerDifficultyParamsQueryParser = exports.registerDifficultyParamsQueryInference = exports.DifficultyParams = exports.AcaRiskRating = exports.AcaTimeRating = exports.AcaWaterRating = exports.AcaTechnicalRating = exports.AcaDifficulty = exports.Difficulty = exports.DifficultyType = exports.DifficultyRisk = exports.DifficultyTime = exports.DifficultyWater = exports.DifficultyTechnical = exports.AcaDifficultyRating = exports.RISK_ORDER = exports.AcaWaterSubRating = exports.AcaTimeSubRating = exports.AcaTechnicalSubRating = exports.AcaRiskSubRating = exports.ACA_WATER_ORDER = exports.ACA_TIME_ORDER = exports.ACA_TECHNICAL_ORDER = exports.ACA_RISK_ORDER = exports.resolveDifficultyRatingFromRecord = exports.registerDifficultyParser = exports.DifficultyRating = exports.DifficultyRatingSystem = exports.PageDataSource = void 0;
4
- exports.Measurement = exports.formatMeasurementValue = exports.OfflineRopewikiPageView = exports.OnlineRopewikiPageView = exports.BaseRopewikiPageView = exports.PageView = exports.PageViewType = exports.RopewikiPageViewResult = exports.RopewikiPageView = exports.OfflineCenteredRegionMiniMap = exports.OnlineCenteredRegionMiniMap = exports.OfflineRegionMiniMap = exports.OnlineRegionMiniMap = exports.OfflinePageMiniMap = exports.OnlinePageMiniMap = exports.CenteredRegionMiniMap = exports.PageMiniMap = exports.RegionMiniMap = exports.MiniMap = exports.MiniMapType = exports.ImageContext = exports.MeasurementContext = exports.RelevantContext = exports.PolygonLegendItem = exports.LineLegendItem = exports.PointLegendItem = exports.registerLegendItemParser = exports.LegendItem = exports.LEGEND_FEATURE_TYPES = exports.LegendFeatureType = exports.Bounds = exports.OfflineBetaSection = exports.OnlineBetaSection = exports.BetaSectionExcerpt = exports.BetaSection = exports.DownloadBytes = exports.OfflineBetaSectionImage = exports.OnlineBetaSectionImage = exports.BetaSectionImage = exports.RoutesParams = exports.RouteResult = exports.RoutesGeojson = exports.RouteType = exports.RouteGeoJsonFeature = exports.Route = exports.RegionPreview = exports.OfflinePagePreview = exports.OnlinePagePreview = exports.PagePreview = exports.PreviewType = void 0;
5
- exports.DOWNLOADED_ROUTE_PREVIEWS_STORAGE_KEY = exports.SAVED_PAGES_STORAGE_KEY = exports.SavedPage = exports.ImageVersions = exports.VERSION_FORMAT = exports.ImageVersion = exports.RoutePreviewResult = exports.RopewikiRegionImagesResult = exports.RopewikiRegionImagesParams = exports.RopewikiRegionImageView = exports.RegionImagesCursor = exports.RopewikiRegionPreviewsResult = exports.RopewikiRegionPreviewsParams = exports.RegionPreviewsCursor = exports.RopewikiRegionViewResult = exports.RopewikiRegionView = exports.SearchResults = exports.SearchParams = exports.SearchCursor = exports.MapDataTileKeysResults = exports.registerPaginationParser = exports.PaginationResultType = exports.PaginationResults = exports.registerCursorPaginationParser = exports.CursorPaginationResultType = exports.CursorPaginationResults = exports.registerResultParser = exports.ResultType = exports.Result = exports.PaginationParams = exports.CursorPaginationParams = exports.CursorType = exports.Cursor = exports.RopewikiPageLinkPreviewResult = exports.LinkPreviewImage = exports.LinkPreview = exports.DAYS = exports.HOURS = exports.MINUTES = exports.TimeMeasurement = exports.FEET = exports.MILES = exports.LengthMeasurement = exports.MinMax = exports.FREEDOM_MEASUREMENT_SYSTEM = void 0;
4
+ exports.BaseRopewikiPageView = exports.PageView = exports.PageViewType = exports.RopewikiPageViewResult = exports.RopewikiPageView = exports.OfflineCenteredRegionMiniMap = exports.OnlineCenteredRegionMiniMap = exports.OfflineRegionMiniMap = exports.OnlineRegionMiniMap = exports.OfflinePageMiniMap = exports.OnlinePageMiniMap = exports.CenteredRegionMiniMap = exports.PageMiniMap = exports.RegionMiniMap = exports.MiniMap = exports.MiniMapType = exports.ImageContext = exports.MeasurementContext = exports.RelevantContext = exports.PolygonLegendItem = exports.LineLegendItem = exports.PointLegendItem = exports.registerLegendItemParser = exports.LegendItem = exports.LEGEND_FEATURE_TYPES = exports.LegendFeatureType = exports.Bounds = exports.OfflineBetaSection = exports.OnlineBetaSection = exports.isRelevanceStrength = exports.assertRelevanceStrength = exports.RELEVANCE_STRENGTHS = exports.boldRelevantPhraseInHtml = exports.BetaSectionExcerpt = exports.BetaSection = exports.DownloadBytes = exports.OfflineBetaSectionImage = exports.OnlineBetaSectionImage = exports.BetaSectionImage = exports.RoutesParams = exports.RouteResult = exports.RoutesGeojson = exports.RouteType = exports.RouteGeoJsonFeature = exports.Route = exports.RegionPreview = exports.OfflinePagePreview = exports.OnlinePagePreview = exports.PagePreview = exports.PreviewType = void 0;
5
+ exports.DOWNLOADED_ROUTE_PREVIEWS_STORAGE_KEY = exports.SAVED_PAGES_STORAGE_KEY = exports.SavedPage = exports.ImageVersions = exports.VERSION_FORMAT = exports.ImageVersion = exports.RoutePreviewResult = exports.RopewikiRegionImagesResult = exports.RopewikiRegionImagesParams = exports.RopewikiRegionImageView = exports.RegionImagesCursor = exports.RopewikiRegionPreviewsResult = exports.RopewikiRegionPreviewsParams = exports.RegionPreviewsCursor = exports.RopewikiRegionViewResult = exports.RopewikiRegionView = exports.SearchResults = exports.SearchParams = exports.SearchCursor = exports.MapDataTileKeysResults = exports.registerPaginationParser = exports.PaginationResultType = exports.PaginationResults = exports.registerCursorPaginationParser = exports.CursorPaginationResultType = exports.CursorPaginationResults = exports.registerResultParser = exports.ResultType = exports.Result = exports.PaginationParams = exports.CursorPaginationParams = exports.CursorType = exports.Cursor = exports.RopewikiPageLinkPreviewResult = exports.LinkPreviewImage = exports.LinkPreview = exports.DAYS = exports.HOURS = exports.MINUTES = exports.TimeMeasurement = exports.FEET = exports.MILES = exports.LengthMeasurement = exports.MinMax = exports.FREEDOM_MEASUREMENT_SYSTEM = exports.Measurement = exports.formatMeasurementValue = exports.OfflineRopewikiPageView = exports.OnlineRopewikiPageView = void 0;
6
6
  require("./api/results/registerAllResultParsers");
7
7
  require("./difficulty/registerDifficultyRatingParsers");
8
8
  require("./filters/registerDifficultyFilterOptionsParsers");
@@ -129,6 +129,12 @@ var betaSection_1 = require("./betaSections/betaSection");
129
129
  Object.defineProperty(exports, "BetaSection", { enumerable: true, get: function () { return betaSection_1.BetaSection; } });
130
130
  var betaSectionExcerpt_1 = require("./betaSections/betaSectionExcerpt");
131
131
  Object.defineProperty(exports, "BetaSectionExcerpt", { enumerable: true, get: function () { return betaSectionExcerpt_1.BetaSectionExcerpt; } });
132
+ var boldRelevantPhrase_1 = require("./betaSections/boldRelevantPhrase");
133
+ Object.defineProperty(exports, "boldRelevantPhraseInHtml", { enumerable: true, get: function () { return boldRelevantPhrase_1.boldRelevantPhraseInHtml; } });
134
+ var relevanceStrength_1 = require("./relevanceStrength");
135
+ Object.defineProperty(exports, "RELEVANCE_STRENGTHS", { enumerable: true, get: function () { return relevanceStrength_1.RELEVANCE_STRENGTHS; } });
136
+ Object.defineProperty(exports, "assertRelevanceStrength", { enumerable: true, get: function () { return relevanceStrength_1.assertRelevanceStrength; } });
137
+ Object.defineProperty(exports, "isRelevanceStrength", { enumerable: true, get: function () { return relevanceStrength_1.isRelevanceStrength; } });
132
138
  var onlineBetaSection_1 = require("./betaSections/onlineBetaSection");
133
139
  Object.defineProperty(exports, "OnlineBetaSection", { enumerable: true, get: function () { return onlineBetaSection_1.OnlineBetaSection; } });
134
140
  var offlineBetaSection_1 = require("./betaSections/offlineBetaSection");
@@ -1,10 +1,12 @@
1
+ import { type RelevanceStrength } from '../../../relevanceStrength';
1
2
  export declare class ImageContext {
2
3
  readonly id: string;
3
- readonly confidence: number;
4
- constructor(id: string, confidence: number);
4
+ readonly relevanceStrength: RelevanceStrength;
5
+ /** Verbatim substring of the image caption and/or file URL. */
6
+ readonly relevantPhrase: string;
7
+ constructor(id: string, relevanceStrength: RelevanceStrength, relevantPhrase: string);
5
8
  toPlain(): Record<string, unknown>;
6
9
  static fromResult(result: unknown): ImageContext;
7
10
  private static assertNonEmptyString;
8
- private static assertConfidence;
9
11
  }
10
12
  //# sourceMappingURL=imageContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"imageContext.d.ts","sourceRoot":"","sources":["../../../../../src/models/minimap/legend/concrete/imageContext.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAO1C,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOlC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY;IAUhD,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAOlC"}
1
+ {"version":3,"file":"imageContext.d.ts","sourceRoot":"","sources":["../../../../../src/models/minimap/legend/concrete/imageContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,4BAA4B,CAAC;AAEpC,qBAAa,YAAY;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM;IASpF,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQlC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY;IAiBhD,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAMtC"}
@@ -1,17 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImageContext = void 0;
4
+ const relevanceStrength_1 = require("../../../relevanceStrength");
4
5
  class ImageContext {
5
- constructor(id, confidence) {
6
+ constructor(id, relevanceStrength, relevantPhrase) {
6
7
  ImageContext.assertNonEmptyString(id, 'ImageContext.id');
7
- ImageContext.assertConfidence(confidence);
8
+ (0, relevanceStrength_1.assertRelevanceStrength)(relevanceStrength, 'ImageContext.relevanceStrength');
9
+ ImageContext.assertNonEmptyString(relevantPhrase, 'ImageContext.relevantPhrase');
8
10
  this.id = id;
9
- this.confidence = confidence;
11
+ this.relevanceStrength = relevanceStrength;
12
+ this.relevantPhrase = relevantPhrase;
10
13
  }
11
14
  toPlain() {
12
15
  return {
13
16
  id: this.id,
14
- confidence: this.confidence,
17
+ relevanceStrength: this.relevanceStrength,
18
+ relevantPhrase: this.relevantPhrase,
15
19
  };
16
20
  }
17
21
  static fromResult(result) {
@@ -20,8 +24,9 @@ class ImageContext {
20
24
  }
21
25
  const r = result;
22
26
  const id = ImageContext.assertNonEmptyString(r.id, 'ImageContext.id');
23
- ImageContext.assertConfidence(r.confidence);
24
- return new ImageContext(id, r.confidence);
27
+ const relevanceStrength = (0, relevanceStrength_1.assertRelevanceStrength)(r.relevanceStrength, 'ImageContext.relevanceStrength');
28
+ const relevantPhrase = ImageContext.assertNonEmptyString(r.relevantPhrase, 'ImageContext.relevantPhrase');
29
+ return new ImageContext(id, relevanceStrength, relevantPhrase);
25
30
  }
26
31
  static assertNonEmptyString(value, context) {
27
32
  if (typeof value !== 'string' || value.trim().length === 0) {
@@ -29,10 +34,5 @@ class ImageContext {
29
34
  }
30
35
  return value;
31
36
  }
32
- static assertConfidence(value) {
33
- if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 1) {
34
- throw new Error(`ImageContext.confidence must be a number from 0 to 1, got: ${JSON.stringify(value)}`);
35
- }
36
- }
37
37
  }
38
38
  exports.ImageContext = ImageContext;
@@ -1,13 +1,13 @@
1
1
  import { Measurement } from '../../../measurements/measurement';
2
+ import { type RelevanceStrength } from '../../../relevanceStrength';
2
3
  export declare class MeasurementContext {
3
4
  readonly label: string;
4
5
  readonly measurement: Measurement;
5
- readonly confidence: number;
6
- constructor(label: string, measurement: Measurement, confidence: number);
6
+ readonly relevanceStrength: RelevanceStrength;
7
+ constructor(label: string, measurement: Measurement, relevanceStrength: RelevanceStrength);
7
8
  toPlain(): Record<string, unknown>;
8
9
  static fromResult(result: unknown): MeasurementContext;
9
10
  private static parseMeasurement;
10
11
  private static assertNonEmptyString;
11
- private static assertConfidence;
12
12
  }
13
13
  //# sourceMappingURL=measurementContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"measurementContext.d.ts","sourceRoot":"","sources":["../../../../../src/models/minimap/legend/concrete/measurementContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,qBAAa,kBAAkB;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;IAQvE,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQlC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB;IAWtD,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAOlC"}
1
+ {"version":3,"file":"measurementContext.d.ts","sourceRoot":"","sources":["../../../../../src/models/minimap/legend/concrete/measurementContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,4BAA4B,CAAC;AAEpC,qBAAa,kBAAkB;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;gBAElC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB;IAQzF,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQlC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB;IActD,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAMtC"}
@@ -3,19 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MeasurementContext = void 0;
4
4
  const lengthMeasurement_1 = require("../../../measurements/lengthMeasurement");
5
5
  const timeMeasurement_1 = require("../../../measurements/timeMeasurement");
6
+ const relevanceStrength_1 = require("../../../relevanceStrength");
6
7
  class MeasurementContext {
7
- constructor(label, measurement, confidence) {
8
+ constructor(label, measurement, relevanceStrength) {
8
9
  MeasurementContext.assertNonEmptyString(label, 'MeasurementContext.label');
9
- MeasurementContext.assertConfidence(confidence);
10
+ (0, relevanceStrength_1.assertRelevanceStrength)(relevanceStrength, 'MeasurementContext.relevanceStrength');
10
11
  this.label = label;
11
12
  this.measurement = measurement;
12
- this.confidence = confidence;
13
+ this.relevanceStrength = relevanceStrength;
13
14
  }
14
15
  toPlain() {
15
16
  return {
16
17
  label: this.label,
17
18
  measurement: this.measurement.toJSON(),
18
- confidence: this.confidence,
19
+ relevanceStrength: this.relevanceStrength,
19
20
  };
20
21
  }
21
22
  static fromResult(result) {
@@ -24,9 +25,9 @@ class MeasurementContext {
24
25
  }
25
26
  const r = result;
26
27
  const label = MeasurementContext.assertNonEmptyString(r.label, 'MeasurementContext.label');
27
- MeasurementContext.assertConfidence(r.confidence);
28
+ const relevanceStrength = (0, relevanceStrength_1.assertRelevanceStrength)(r.relevanceStrength, 'MeasurementContext.relevanceStrength');
28
29
  const measurement = MeasurementContext.parseMeasurement(r.measurement);
29
- return new MeasurementContext(label, measurement, r.confidence);
30
+ return new MeasurementContext(label, measurement, relevanceStrength);
30
31
  }
31
32
  static parseMeasurement(value) {
32
33
  if (value == null || typeof value !== 'object') {
@@ -47,10 +48,5 @@ class MeasurementContext {
47
48
  }
48
49
  return value;
49
50
  }
50
- static assertConfidence(value) {
51
- if (typeof value !== 'number' || !Number.isFinite(value) || value < 0 || value > 1) {
52
- throw new Error(`MeasurementContext.confidence must be a number from 0 to 1, got: ${JSON.stringify(value)}`);
53
- }
54
- }
55
51
  }
56
52
  exports.MeasurementContext = MeasurementContext;
@@ -4,12 +4,13 @@ import { MeasurementContext } from './measurementContext';
4
4
  export declare class RelevantContext {
5
5
  readonly measurements: MeasurementContext[];
6
6
  readonly betaSectionExcerpts: Record<string, BetaSectionExcerpt[]>;
7
- readonly images: Record<string, ImageContext[]>;
8
- constructor(measurements: MeasurementContext[], betaSectionExcerpts: Record<string, BetaSectionExcerpt[]>, images: Record<string, ImageContext[]>);
7
+ /** Flat list of relevant images; owning section is resolved via `toImageLookup()`. */
8
+ readonly images: ImageContext[];
9
+ constructor(measurements: MeasurementContext[], betaSectionExcerpts: Record<string, BetaSectionExcerpt[]>, images: ImageContext[]);
9
10
  toPlain(): Record<string, unknown>;
10
11
  static fromResult(result: unknown): RelevantContext;
11
12
  private static parseMeasurementsArray;
12
13
  private static parseBetaSectionExcerptsRecord;
13
- private static parseImagesRecord;
14
+ private static parseImagesArray;
14
15
  }
15
16
  //# sourceMappingURL=relevantContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relevantContext.d.ts","sourceRoot":"","sources":["../../../../../src/models/minimap/legend/concrete/relevantContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,eAAe;IACxB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,EAAE,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBAG5C,YAAY,EAAE,kBAAkB,EAAE,EAClC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,EACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAO1C,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkBlC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe;IAenD,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAYrC,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAwB7C,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAmBnC"}
1
+ {"version":3,"file":"relevantContext.d.ts","sourceRoot":"","sources":["../../../../../src/models/minimap/legend/concrete/relevantContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,eAAe;IACxB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,EAAE,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACnE,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;gBAG5B,YAAY,EAAE,kBAAkB,EAAE,EAClC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,EACzD,MAAM,EAAE,YAAY,EAAE;IAO1B,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAalC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe;IAenD,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAYrC,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAwB7C,OAAO,CAAC,MAAM,CAAC,gBAAgB;CASlC"}
@@ -15,14 +15,10 @@ class RelevantContext {
15
15
  for (const [key, excerpts] of Object.entries(this.betaSectionExcerpts)) {
16
16
  betaSectionExcerpts[key] = excerpts.map((excerpt) => excerpt.toPlain());
17
17
  }
18
- const images = {};
19
- for (const [key, imageContexts] of Object.entries(this.images)) {
20
- images[key] = imageContexts.map((image) => image.toPlain());
21
- }
22
18
  return {
23
19
  measurements: this.measurements.map((measurement) => measurement.toPlain()),
24
20
  betaSectionExcerpts,
25
- images,
21
+ images: this.images.map((image) => image.toPlain()),
26
22
  };
27
23
  }
28
24
  static fromResult(result) {
@@ -32,7 +28,7 @@ class RelevantContext {
32
28
  const r = result;
33
29
  const measurements = RelevantContext.parseMeasurementsArray(r.measurements);
34
30
  const betaSectionExcerpts = RelevantContext.parseBetaSectionExcerptsRecord(r.betaSectionExcerpts);
35
- const images = RelevantContext.parseImagesRecord(r.images);
31
+ const images = RelevantContext.parseImagesArray(r.images);
36
32
  return new RelevantContext(measurements, betaSectionExcerpts, images);
37
33
  }
38
34
  static parseMeasurementsArray(value) {
@@ -61,22 +57,14 @@ class RelevantContext {
61
57
  }
62
58
  return out;
63
59
  }
64
- static parseImagesRecord(value) {
60
+ static parseImagesArray(value) {
65
61
  if (value === undefined || value === null) {
66
- return {};
67
- }
68
- if (typeof value !== 'object' || Array.isArray(value)) {
69
- throw new Error(`RelevantContext.images must be an object, got: ${typeof value}`);
62
+ return [];
70
63
  }
71
- const raw = value;
72
- const out = {};
73
- for (const [key, imageContexts] of Object.entries(raw)) {
74
- if (!Array.isArray(imageContexts)) {
75
- throw new Error(`RelevantContext.images["${key}"] must be an array, got: ${typeof imageContexts}`);
76
- }
77
- out[key] = imageContexts.map((entry) => imageContext_1.ImageContext.fromResult(entry));
64
+ if (!Array.isArray(value)) {
65
+ throw new Error(`RelevantContext.images must be an array, got: ${typeof value}`);
78
66
  }
79
- return out;
67
+ return value.map((entry) => imageContext_1.ImageContext.fromResult(entry));
80
68
  }
81
69
  }
82
70
  exports.RelevantContext = RelevantContext;
@@ -4,19 +4,22 @@ import type { Bounds } from '../minimap/bounds';
4
4
  import { PageViewType } from './pageViewType';
5
5
  import type { OfflineBetaSection } from '../betaSections/offlineBetaSection';
6
6
  import type { OfflineBetaSectionImage } from '../betaSections/offlineBetaSectionImage';
7
- export type OfflineBetaSectionLookupEntry = {
8
- /** Null for page-level images, which use the empty relevant-context key. */
9
- section: OfflineBetaSection | null;
10
- imagesById: Record<string, OfflineBetaSectionImage>;
7
+ /** Relevant-context section lookup keyed by non-null beta-section id. */
8
+ export type OfflineBetaSectionLookup = Record<string, OfflineBetaSection>;
9
+ export type OfflineImageLookupEntry = {
10
+ image: OfflineBetaSectionImage;
11
+ /** Omitted for page-level banner images. */
12
+ betaSectionId?: string;
11
13
  };
12
- /** Relevant-context lookup keyed by beta-section id (`""` for page-level images). */
13
- export type OfflineBetaSectionLookup = Record<string, OfflineBetaSectionLookupEntry>;
14
+ /** Image id image (+ optional owning beta section). */
15
+ export type OfflineImageLookup = Record<string, OfflineImageLookupEntry>;
14
16
  export interface OfflinePageView {
15
17
  readonly fetchType: 'offline';
16
18
  readonly id: string;
17
19
  readonly routeType: RouteType;
18
20
  readonly pageViewType: PageViewType;
19
21
  toBetaSectionLookup(): OfflineBetaSectionLookup;
22
+ toImageLookup(): OfflineImageLookup;
20
23
  toPagePreview(): OfflinePagePreview;
21
24
  /** Bounds for Mapbox offline pack when this page uses a page minimap; otherwise null. */
22
25
  getMapboxPackBounds(): Bounds | null;
@@ -1 +1 @@
1
- {"version":3,"file":"offlinePageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/offlinePageView.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,MAAM,MAAM,6BAA6B,GAAG;IACxC,4EAA4E;IAC5E,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACvD,CAAC;AAEF,qFAAqF;AACrF,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;AAErF,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,mBAAmB,IAAI,wBAAwB,CAAC;IAChD,aAAa,IAAI,kBAAkB,CAAC;IACpC,yFAAyF;IACzF,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;CACxC"}
1
+ {"version":3,"file":"offlinePageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/offlinePageView.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,yEAAyE;AACzE,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAE1E,MAAM,MAAM,uBAAuB,GAAG;IAClC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,mBAAmB,IAAI,wBAAwB,CAAC;IAChD,aAAa,IAAI,kBAAkB,CAAC;IACpC,aAAa,IAAI,kBAAkB,CAAC;IACpC,yFAAyF;IACzF,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;CACxC"}
@@ -3,7 +3,7 @@ import { OfflineBetaSectionImage } from '../betaSections/offlineBetaSectionImage
3
3
  import { OfflineCenteredRegionMiniMap } from '../minimap/concrete/offlineCenteredRegionMiniMap';
4
4
  import { OfflinePageMiniMap } from '../minimap/concrete/offlinePageMiniMap';
5
5
  import { OfflinePagePreview } from '../previews/offlinePagePreview';
6
- import { type OfflineBetaSectionLookup, OfflinePageView } from './offlinePageView';
6
+ import { type OfflineBetaSectionLookup, type OfflineImageLookup, OfflinePageView } from './offlinePageView';
7
7
  import { RopewikiPageView } from './ropewikiPageView';
8
8
  import { RouteType } from '../routes/routeType';
9
9
  import { RopewikiVehicleType } from '../ropewikiVehicleType';
@@ -23,6 +23,7 @@ export declare class OfflineRopewikiPageView extends RopewikiPageView implements
23
23
  lon: number;
24
24
  } | null, authors?: string[] | null);
25
25
  toBetaSectionLookup(): OfflineBetaSectionLookup;
26
+ toImageLookup(): OfflineImageLookup;
26
27
  toPagePreview(): OfflinePagePreview;
27
28
  getMapboxPackBounds(): import('../minimap/bounds').Bounds | null;
28
29
  static fromResult(result: unknown, pageRoot?: string | null): OfflineRopewikiPageView;
@@ -1 +1 @@
1
- {"version":3,"file":"offlineRopewikiPageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/offlineRopewikiPageView.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EACH,KAAK,wBAAwB,EAC7B,eAAe,EAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAkC,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,qBAAa,uBAAwB,SAAQ,gBAAiB,YAAW,eAAe;IACpF,QAAQ,CAAC,SAAS,EAAG,SAAS,CAAU;IACxC,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC5C,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,OAAO,EAAE,kBAAkB,GAAG,4BAA4B,GAAG,IAAI,CAAC;gBAG9D,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EAAE,EACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,EACvC,gBAAgB,EAAE,OAAO,gCAAgC,EAAE,gBAAgB,EAC3E,MAAM,EAAE,OAAO,iBAAiB,EAAE,YAAY,GAAG,IAAI,EACrD,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,EAC3C,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,EAAE,mBAAmB,GAAG,IAAI,EACnC,aAAa,EAAE,iBAAiB,GAAG,IAAI,EACvC,WAAW,EAAE,eAAe,GAAG,IAAI,EACnC,aAAa,EAAE,iBAAiB,GAAG,IAAI,EACvC,aAAa,EAAE,iBAAiB,GAAG,IAAI,EACvC,UAAU,EAAE,iBAAiB,GAAG,IAAI,EACpC,cAAc,EAAE,iBAAiB,GAAG,IAAI,EACxC,WAAW,EAAE,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,EAC7D,YAAY,EAAE,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,EAC9D,WAAW,EAAE,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,EAC7D,QAAQ,EAAE,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,EAC1D,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,EAC1C,eAAe,EAAE,iBAAiB,GAAG,IAAI,EACzC,YAAY,EAAE,iBAAiB,GAAG,IAAI,EACtC,MAAM,EAAE,MAAM,EAAE,EAChB,kBAAkB,EAAE,IAAI,EACxB,WAAW,EAAE,uBAAuB,GAAG,IAAI,EAC3C,YAAY,EAAE,kBAAkB,EAAE,EAClC,OAAO,EAAE,kBAAkB,GAAG,4BAA4B,GAAG,IAAI,EACjE,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,EAChD,OAAO,GAAE,MAAM,EAAE,GAAG,IAAW;IAuCnC,mBAAmB,IAAI,wBAAwB;IAqB/C,aAAa,IAAI,kBAAkB;IAqBnC,mBAAmB,IAAI,OAAO,mBAAmB,EAAE,MAAM,GAAG,IAAI;IAOhE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,uBAAuB;CA+CxF"}
1
+ {"version":3,"file":"offlineRopewikiPageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/offlineRopewikiPageView.ts"],"names":[],"mappings":"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"}
@@ -23,15 +23,19 @@ class OfflineRopewikiPageView extends ropewikiPageView_1.RopewikiPageView {
23
23
  }
24
24
  toBetaSectionLookup() {
25
25
  const identifiedSections = this.betaSections.filter((section) => section.id != null);
26
- const lookup = (0, lodash_1.mapValues)((0, lodash_1.keyBy)(identifiedSections, (section) => section.id), (section) => ({
27
- section,
28
- imagesById: (0, lodash_1.keyBy)(section.images, (image) => image.id),
29
- }));
26
+ return (0, lodash_1.keyBy)(identifiedSections, (section) => section.id);
27
+ }
28
+ toImageLookup() {
29
+ const lookup = {};
30
+ for (const section of this.betaSections) {
31
+ if (section.id == null)
32
+ continue;
33
+ for (const image of section.images) {
34
+ lookup[image.id] = { image, betaSectionId: section.id };
35
+ }
36
+ }
30
37
  if (this.bannerImage != null) {
31
- lookup[''] = {
32
- section: null,
33
- imagesById: { [this.bannerImage.id]: this.bannerImage },
34
- };
38
+ lookup[this.bannerImage.id] = { image: this.bannerImage };
35
39
  }
36
40
  return lookup;
37
41
  }
@@ -9,13 +9,15 @@ import type { DownloadJobConfig, DownloadPlatformHarness, DownloadTaskDependency
9
9
  import type { OnlineMiniMap } from '../minimap/abstract/onlineMiniMap';
10
10
  import type { OnlineBetaSection } from '../betaSections/onlineBetaSection';
11
11
  import type { OnlineBetaSectionImage } from '../betaSections/onlineBetaSectionImage';
12
- export type OnlineBetaSectionLookupEntry = {
13
- /** Null for page-level images, which use the empty relevant-context key. */
14
- section: OnlineBetaSection | null;
15
- imagesById: Record<string, OnlineBetaSectionImage>;
12
+ /** Relevant-context section lookup keyed by non-null beta-section id. */
13
+ export type OnlineBetaSectionLookup = Record<string, OnlineBetaSection>;
14
+ export type OnlineImageLookupEntry = {
15
+ image: OnlineBetaSectionImage;
16
+ /** Omitted for page-level banner images. */
17
+ betaSectionId?: string;
16
18
  };
17
- /** Relevant-context lookup keyed by beta-section id (`""` for page-level images). */
18
- export type OnlineBetaSectionLookup = Record<string, OnlineBetaSectionLookupEntry>;
19
+ /** Image id image (+ optional owning beta section). */
20
+ export type OnlineImageLookup = Record<string, OnlineImageLookupEntry>;
19
21
  export interface OnlinePageView {
20
22
  readonly fetchType: 'online';
21
23
  readonly id: string;
@@ -24,12 +26,12 @@ export interface OnlinePageView {
24
26
  readonly miniMap: OnlineMiniMap | null;
25
27
  readonly downloadFolder: string | null;
26
28
  toBetaSectionLookup(): OnlineBetaSectionLookup;
29
+ toImageLookup(): OnlineImageLookup;
27
30
  planDownloadPhases(): DownloadPhase[];
28
31
  getDependenciesForPhases(phases: DownloadPhase[]): Record<string, DownloadTaskDependency>;
29
32
  toOfflineFromExtractedBundle(pageRoot: string, platformHarness: DownloadPlatformHarness): Promise<OfflinePageView>;
30
33
  toOffline(downloadedImageVersions: Record<string, import('../mobile/imageVersions').ImageVersions>, downloadedMiniMap?: import('../minimap/concrete/offlinePageMiniMap').OfflinePageMiniMap | import('../minimap/concrete/offlineCenteredRegionMiniMap').OfflineCenteredRegionMiniMap | null): OfflinePageView;
31
34
  toPagePreview(): PagePreview;
32
- toSavedPage(): SavedPage;
33
- toDownloadJob(config: DownloadJobConfig): DownloadJob;
35
+ toSavedPage(downloadJob: DownloadJob, config: DownloadJobConfig): SavedPage;
34
36
  }
35
37
  //# sourceMappingURL=onlinePageView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onlinePageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/onlinePageView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAErF,MAAM,MAAM,4BAA4B,GAAG;IACvC,4EAA4E;IAC5E,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACtD,CAAC;AAEF,qFAAqF;AACrF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,mBAAmB,IAAI,uBAAuB,CAAC;IAC/C,kBAAkB,IAAI,aAAa,EAAE,CAAC;IACtC,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC1F,4BAA4B,CACxB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,uBAAuB,GACzC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,SAAS,CACL,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,EAAE,aAAa,CAAC,EACxF,iBAAiB,CAAC,EAAE,OAAO,wCAAwC,EAAE,kBAAkB,GAAG,OAAO,kDAAkD,EAAE,4BAA4B,GAAG,IAAI,GACzL,eAAe,CAAC;IACnB,aAAa,IAAI,WAAW,CAAC;IAC7B,WAAW,IAAI,SAAS,CAAC;IACzB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAAC;CACzD"}
1
+ {"version":3,"file":"onlinePageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/onlinePageView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAErF,yEAAyE;AACzE,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAExE,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,mBAAmB,IAAI,uBAAuB,CAAC;IAC/C,aAAa,IAAI,iBAAiB,CAAC;IACnC,kBAAkB,IAAI,aAAa,EAAE,CAAC;IACtC,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC1F,4BAA4B,CACxB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,uBAAuB,GACzC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,SAAS,CACL,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,EAAE,aAAa,CAAC,EACxF,iBAAiB,CAAC,EAAE,OAAO,wCAAwC,EAAE,kBAAkB,GAAG,OAAO,kDAAkD,EAAE,4BAA4B,GAAG,IAAI,GACzL,eAAe,CAAC;IACnB,aAAa,IAAI,WAAW,CAAC;IAC7B,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC/E"}
@@ -15,7 +15,7 @@ import { DownloadJob } from '../../download/downloadJob';
15
15
  import { DownloadPhase } from '../../download/downloadPhase';
16
16
  import type { DownloadJobConfig, DownloadPlatformHarness, DownloadTaskDependency } from '../../download/types';
17
17
  import type { OfflinePageView } from './offlinePageView';
18
- import { type OnlineBetaSectionLookup, OnlinePageView } from './onlinePageView';
18
+ import { type OnlineBetaSectionLookup, type OnlineImageLookup, OnlinePageView } from './onlinePageView';
19
19
  export declare class OnlineRopewikiPageView extends RopewikiPageView implements OnlinePageView {
20
20
  readonly fetchType: "online";
21
21
  bannerImage: OnlineBetaSectionImage | null;
@@ -45,6 +45,7 @@ export declare class OnlineRopewikiPageView extends RopewikiPageView implements
45
45
  lon: number;
46
46
  } | null, downloadFolder?: string | null, authors?: string[] | null);
47
47
  toBetaSectionLookup(): OnlineBetaSectionLookup;
48
+ toImageLookup(): OnlineImageLookup;
48
49
  planDownloadPhases(): DownloadPhase[];
49
50
  getDependenciesForPhases(phases: DownloadPhase[]): Record<string, DownloadTaskDependency>;
50
51
  toOfflineFromExtractedBundle(pageRoot: string, platformHarness: DownloadPlatformHarness): Promise<OfflinePageView>;
@@ -1 +1 @@
1
- {"version":3,"file":"onlineRopewikiPageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/onlineRopewikiPageView.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onlineRopewikiPageView.d.ts","sourceRoot":"","sources":["../../../src/models/pageViews/onlineRopewikiPageView.ts"],"names":[],"mappings":"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"}
@@ -48,15 +48,19 @@ class OnlineRopewikiPageView extends ropewikiPageView_1.RopewikiPageView {
48
48
  }
49
49
  toBetaSectionLookup() {
50
50
  const identifiedSections = this.betaSections.filter((section) => section.id != null);
51
- const lookup = (0, lodash_1.mapValues)((0, lodash_1.keyBy)(identifiedSections, (section) => section.id), (section) => ({
52
- section,
53
- imagesById: (0, lodash_1.keyBy)(section.images, (image) => image.id),
54
- }));
51
+ return (0, lodash_1.keyBy)(identifiedSections, (section) => section.id);
52
+ }
53
+ toImageLookup() {
54
+ const lookup = {};
55
+ for (const section of this.betaSections) {
56
+ if (section.id == null)
57
+ continue;
58
+ for (const image of section.images) {
59
+ lookup[image.id] = { image, betaSectionId: section.id };
60
+ }
61
+ }
55
62
  if (this.bannerImage != null) {
56
- lookup[''] = {
57
- section: null,
58
- imagesById: { [this.bannerImage.id]: this.bannerImage },
59
- };
63
+ lookup[this.bannerImage.id] = { image: this.bannerImage };
60
64
  }
61
65
  return lookup;
62
66
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * How strongly a measurement, text excerpt, or image is tied to a map feature.
3
+ * Values match the AI model / Zod enum exactly (spaced strings).
4
+ */
5
+ export declare const RELEVANCE_STRENGTHS: readonly ["Maybe Relevant", "Somewhat Relevant", "Definitely Relevant"];
6
+ export type RelevanceStrength = (typeof RELEVANCE_STRENGTHS)[number];
7
+ export declare function isRelevanceStrength(value: unknown): value is RelevanceStrength;
8
+ export declare function assertRelevanceStrength(value: unknown, context: string): RelevanceStrength;
9
+ //# sourceMappingURL=relevanceStrength.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relevanceStrength.d.ts","sourceRoot":"","sources":["../../src/models/relevanceStrength.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,yEAItB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAK9E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAO1F"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RELEVANCE_STRENGTHS = void 0;
4
+ exports.isRelevanceStrength = isRelevanceStrength;
5
+ exports.assertRelevanceStrength = assertRelevanceStrength;
6
+ /**
7
+ * How strongly a measurement, text excerpt, or image is tied to a map feature.
8
+ * Values match the AI model / Zod enum exactly (spaced strings).
9
+ */
10
+ exports.RELEVANCE_STRENGTHS = [
11
+ 'Maybe Relevant',
12
+ 'Somewhat Relevant',
13
+ 'Definitely Relevant',
14
+ ];
15
+ function isRelevanceStrength(value) {
16
+ return (typeof value === 'string' &&
17
+ exports.RELEVANCE_STRENGTHS.includes(value));
18
+ }
19
+ function assertRelevanceStrength(value, context) {
20
+ if (!isRelevanceStrength(value)) {
21
+ throw new Error(`${context} must be one of ${exports.RELEVANCE_STRENGTHS.map((s) => JSON.stringify(s)).join(', ')}, got: ${JSON.stringify(value)}`);
22
+ }
23
+ return value;
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ropegeo-common",
3
- "version": "1.24.0",
3
+ "version": "1.25.0",
4
4
  "description": "Shared domain models and helpers for RopeGeo and WebScraper",
5
5
  "license": "ISC",
6
6
  "repository": {