ochre-sdk 1.0.41 → 1.0.42

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.
@@ -15,60 +15,12 @@ const HEADING_LEVEL_TOKEN = "heading-level";
15
15
  const RAW_MDX_BLOCK_DELIMITER = "``md``";
16
16
  const RAW_MDX_BLOCK_PLACEHOLDER_PREFIX = "\0raw-mdx-block:";
17
17
  const RAW_MDX_BLOCK_PLACEHOLDER_SUFFIX = "\0";
18
- const RICH_LINE_BREAK = "<br />\n";
19
18
  const MDX_QUOTED_ATTRIBUTE_ESCAPE_REGEX = /[\n\r"]/;
20
- const MDX_NEWLINE_RUN_REGEX = /\n{3,}/g;
21
- const MDX_SIMPLE_INLINE_TAG_REGEX = /<\/?(?:em|strong|u)>/g;
22
- const MDX_MARKDOWN_LIST_LINE_REGEX = /^\s*(?:[*+-]|\d+[).])\s+/;
23
19
  const MDX_RENDER_ELEMENTS = {
24
20
  bold: "strong",
25
21
  italic: "em",
26
22
  underline: "u"
27
23
  };
28
- function hasNewlineWhitespace(value) {
29
- return value?.split(" ").includes("newline") === true;
30
- }
31
- function hasNoRichTextPayload(item) {
32
- return (item.payload == null || item.payload === "") && item.rend == null && item.links == null && item.properties == null && item.annotation == null && item.string == null;
33
- }
34
- function isRawMDXBlockDelimiter(item, index) {
35
- return item.payload === RAW_MDX_BLOCK_DELIMITER && (index === 0 || hasNewlineWhitespace(item.whitespace)) && item.rend == null && item.links == null && item.properties == null && item.annotation == null && item.string == null;
36
- }
37
- function normalizeMDXNewlineRuns(value) {
38
- return value.replaceAll(MDX_NEWLINE_RUN_REGEX, "\n\n");
39
- }
40
- function isMarkdownListLine(value) {
41
- return MDX_MARKDOWN_LIST_LINE_REGEX.test(value);
42
- }
43
- function isStandaloneFormattedLine(value) {
44
- const trimmedValue = value.trim();
45
- if (trimmedValue === "" || isMarkdownListLine(trimmedValue)) return false;
46
- const unwrappedValue = trimmedValue.replaceAll(MDX_SIMPLE_INLINE_TAG_REGEX, "").trim();
47
- return unwrappedValue !== trimmedValue && unwrappedValue !== "";
48
- }
49
- function pushBlankLine(lines) {
50
- if (lines.length > 0 && lines.at(-1) !== "") lines.push("");
51
- }
52
- function getLastNonBlankLine(lines) {
53
- for (let index = lines.length - 1; index >= 0; index -= 1) {
54
- const line = lines[index];
55
- if (line != null && line.trim() !== "") return line;
56
- }
57
- return null;
58
- }
59
- function normalizeRawMDXBlock(value) {
60
- const sourceLines = normalizeMDXNewlineRuns(value).split("\n");
61
- const normalizedLines = [];
62
- for (const [index, line] of sourceLines.entries()) {
63
- const nextLine = sourceLines[index + 1];
64
- const shouldStartOwnParagraph = isStandaloneFormattedLine(line);
65
- const lastNonBlankLine = getLastNonBlankLine(normalizedLines);
66
- if (shouldStartOwnParagraph || isMarkdownListLine(line) && (lastNonBlankLine == null || !isMarkdownListLine(lastNonBlankLine))) pushBlankLine(normalizedLines);
67
- normalizedLines.push(line);
68
- if (shouldStartOwnParagraph && nextLine != null && nextLine.trim() !== "" && !isMarkdownListLine(nextLine)) pushBlankLine(normalizedLines);
69
- }
70
- return normalizeMDXNewlineRuns(normalizedLines.join("\n"));
71
- }
72
24
  function isXMLRichTextLink(value) {
73
25
  return typeof value === "object" && value != null;
74
26
  }
@@ -116,9 +68,12 @@ function applyMDXRenderElements(contentString, options) {
116
68
  }
117
69
  function applyNewlineWhitespace(contentString, whitespace, rendering) {
118
70
  if (whitespace == null) return contentString;
119
- if (!hasNewlineWhitespace(whitespace)) return contentString;
120
- if (contentString === "") return rendering === "rich" ? RICH_LINE_BREAK : "\n";
121
- if (rendering === "rich") return contentString.trim() === "***" ? `${contentString}\n` : `${RICH_LINE_BREAK}${contentString}`;
71
+ if (!whitespace.split(" ").includes("newline")) return contentString;
72
+ if (contentString === "") {
73
+ if (rendering === "rich") return "<br />\n<br />\n";
74
+ return "\n\n";
75
+ }
76
+ if (rendering === "rich") return contentString.trim() === "***" ? `${contentString}\n` : `<br />\n${contentString}`;
122
77
  return `\n${contentString}`;
123
78
  }
124
79
  /**
@@ -306,7 +261,7 @@ function parseNestedStringItems(items, contentItem, options) {
306
261
  let result = "";
307
262
  let rawMDXBlockStartIndex = null;
308
263
  for (const [index, item] of items.entries()) {
309
- if (isRawMDXBlockDelimiter(item, index)) {
264
+ if (item.payload === RAW_MDX_BLOCK_DELIMITER && item.rend == null && item.links == null && item.properties == null && item.annotation == null && item.string == null) {
310
265
  if (rawMDXBlockStartIndex == null) {
311
266
  rawMDXBlockStartIndex = index;
312
267
  continue;
@@ -321,8 +276,7 @@ function parseNestedStringItems(items, contentItem, options) {
321
276
  rawMDXBlocks: options.rawMDXBlocks
322
277
  });
323
278
  }
324
- if (rawMDXBlock !== "" && !rawMDXBlock.endsWith("\n") && hasNewlineWhitespace(item.whitespace)) rawMDXBlock += "\n";
325
- rawMDXBlock = normalizeRawMDXBlock(rawMDXBlock);
279
+ if (rawMDXBlock !== "" && !rawMDXBlock.endsWith("\n") && item.whitespace?.split(" ").includes("newline") === true) rawMDXBlock += "\n";
326
280
  if (options.rendering === "rich" && options.rawMDXBlocks != null) {
327
281
  const placeholder = `${RAW_MDX_BLOCK_PLACEHOLDER_PREFIX}${options.rawMDXBlocks.length}${RAW_MDX_BLOCK_PLACEHOLDER_SUFFIX}`;
328
282
  options.rawMDXBlocks.push(rawMDXBlock);
@@ -332,13 +286,7 @@ function parseNestedStringItems(items, contentItem, options) {
332
286
  continue;
333
287
  }
334
288
  if (rawMDXBlockStartIndex != null) continue;
335
- const nextItem = items[index + 1];
336
- if (options.rendering === "rich" && hasNoRichTextPayload(item) && hasNewlineWhitespace(item.whitespace) && nextItem != null && isRawMDXBlockDelimiter(nextItem, index + 1)) {
337
- result += "\n";
338
- continue;
339
- }
340
- const parsedItem = parseXMLStringItem(item, contentItem, options);
341
- result += options.rendering === "rich" && result.endsWith("\n") && parsedItem.startsWith(RICH_LINE_BREAK) ? parsedItem.slice(6) : parsedItem;
289
+ result += parseXMLStringItem(item, contentItem, options);
342
290
  }
343
291
  if (rawMDXBlockStartIndex != null) for (let index = rawMDXBlockStartIndex; index < items.length; index += 1) {
344
292
  const item = items[index];
@@ -517,7 +465,6 @@ function parseXMLContentItem(contentItem, options) {
517
465
  rawMDXBlocks
518
466
  }));
519
467
  for (const [index, rawMDXBlock] of rawMDXBlocks.entries()) serializedRichText = serializedRichText.replaceAll(`${RAW_MDX_BLOCK_PLACEHOLDER_PREFIX}${index}${RAW_MDX_BLOCK_PLACEHOLDER_SUFFIX}`, rawMDXBlock);
520
- serializedRichText = normalizeMDXNewlineRuns(serializedRichText);
521
468
  return {
522
469
  text: parseNestedStringItems(contentItem.string, contentItem, {
523
470
  ...options,
@@ -383,6 +383,7 @@ function parseWebElementProperties(componentProperty, elementResource, options,
383
383
  const isFilterSidebarDisplayed = componentReader.valueOr("filter-sidebar-displayed", false);
384
384
  const filterSidebarSort = componentReader.valueOr("filter-sidebar-sort", "default");
385
385
  const imageLayout = componentReader.valueOr("image-layout", "start");
386
+ const isImagePlaceholderDisplayed = componentReader.valueOr("image-placeholder-displayed", true);
386
387
  const componentOptions = parseWebsiteOptions(elementResource.options, options);
387
388
  properties = {
388
389
  component: "collection",
@@ -395,6 +396,7 @@ function parseWebElementProperties(componentProperty, elementResource, options,
395
396
  paginationVariant,
396
397
  loadingVariant,
397
398
  imageLayout,
399
+ isImagePlaceholderDisplayed,
398
400
  expectedItemCount,
399
401
  isUsingQueryParams,
400
402
  isSortDisplayed,
@@ -296,6 +296,7 @@ type WebElementComponent<T extends LanguageCodes = LanguageCodes> = {
296
296
  paginationVariant: "default" | "numeric";
297
297
  loadingVariant: "spinner" | "skeleton" | "animation" | "none";
298
298
  imageLayout: "top" | "bottom" | "start" | "end" | null;
299
+ isImagePlaceholderDisplayed: boolean;
299
300
  expectedItemCount: number | null;
300
301
  isSortDisplayed: boolean;
301
302
  isUsingQueryParams: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ochre-sdk",
3
- "version": "1.0.41",
3
+ "version": "1.0.42",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Node.js library for working with OCHRE (Online Cultural and Historical Research Environment) data",