@valbuild/shared 0.49.0 → 0.51.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.
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var core = require('@valbuild/core');
6
6
  var marked = require('marked');
7
+ var zod = require('zod');
7
8
 
8
9
  function _interopNamespace(e) {
9
10
  if (e && e.__esModule) return e;
@@ -25,79 +26,24 @@ function _interopNamespace(e) {
25
26
 
26
27
  var marked__namespace = /*#__PURE__*/_interopNamespace(marked);
27
28
 
28
- function _arrayWithHoles(arr) {
29
- if (Array.isArray(arr)) return arr;
30
- }
31
-
32
- function _iterableToArrayLimit(r, l) {
33
- var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
34
- if (null != t) {
35
- var e,
36
- n,
37
- i,
38
- u,
39
- a = [],
40
- f = !0,
41
- o = !1;
42
- try {
43
- if (i = (t = t.call(r)).next, 0 === l) {
44
- if (Object(t) !== t) return;
45
- f = !1;
46
- } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
47
- } catch (r) {
48
- o = !0, n = r;
49
- } finally {
50
- try {
51
- if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
52
- } finally {
53
- if (o) throw n;
54
- }
55
- }
56
- return a;
57
- }
58
- }
59
-
60
- function _arrayLikeToArray(arr, len) {
61
- if (len == null || len > arr.length) len = arr.length;
62
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
63
- return arr2;
64
- }
65
-
66
- function _unsupportedIterableToArray(o, minLen) {
67
- if (!o) return;
68
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
69
- var n = Object.prototype.toString.call(o).slice(8, -1);
70
- if (n === "Object" && o.constructor) n = o.constructor.name;
71
- if (n === "Map" || n === "Set") return Array.from(o);
72
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
73
- }
74
-
75
- function _nonIterableRest() {
76
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
77
- }
78
-
79
- function _slicedToArray(arr, i) {
80
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
81
- }
82
-
83
- function _toPrimitive(input, hint) {
84
- if (typeof input !== "object" || input === null) return input;
85
- var prim = input[Symbol.toPrimitive];
86
- if (prim !== undefined) {
87
- var res = prim.call(input, hint || "default");
88
- if (typeof res !== "object") return res;
29
+ function toPrimitive(t, r) {
30
+ if ("object" != typeof t || !t) return t;
31
+ var e = t[Symbol.toPrimitive];
32
+ if (void 0 !== e) {
33
+ var i = e.call(t, r || "default");
34
+ if ("object" != typeof i) return i;
89
35
  throw new TypeError("@@toPrimitive must return a primitive value.");
90
36
  }
91
- return (hint === "string" ? String : Number)(input);
37
+ return ("string" === r ? String : Number)(t);
92
38
  }
93
39
 
94
- function _toPropertyKey(arg) {
95
- var key = _toPrimitive(arg, "string");
96
- return typeof key === "symbol" ? key : String(key);
40
+ function toPropertyKey(t) {
41
+ var i = toPrimitive(t, "string");
42
+ return "symbol" == typeof i ? i : String(i);
97
43
  }
98
44
 
99
45
  function _defineProperty(obj, key, value) {
100
- key = _toPropertyKey(key);
46
+ key = toPropertyKey(key);
101
47
  if (key in obj) {
102
48
  Object.defineProperty(obj, key, {
103
49
  value: value,
@@ -111,6 +57,21 @@ function _defineProperty(obj, key, value) {
111
57
  return obj;
112
58
  }
113
59
 
60
+ function _arrayLikeToArray(arr, len) {
61
+ if (len == null || len > arr.length) len = arr.length;
62
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
63
+ return arr2;
64
+ }
65
+
66
+ function _unsupportedIterableToArray(o, minLen) {
67
+ if (!o) return;
68
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
69
+ var n = Object.prototype.toString.call(o).slice(8, -1);
70
+ if (n === "Object" && o.constructor) n = o.constructor.name;
71
+ if (n === "Map" || n === "Set") return Array.from(o);
72
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
73
+ }
74
+
114
75
  function _createForOfIteratorHelper(o, allowArrayLike) {
115
76
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
116
77
  if (!it) {
@@ -179,6 +140,46 @@ function _toConsumableArray(arr) {
179
140
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
180
141
  }
181
142
 
143
+ function _arrayWithHoles(arr) {
144
+ if (Array.isArray(arr)) return arr;
145
+ }
146
+
147
+ function _iterableToArrayLimit(r, l) {
148
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
149
+ if (null != t) {
150
+ var e,
151
+ n,
152
+ i,
153
+ u,
154
+ a = [],
155
+ f = !0,
156
+ o = !1;
157
+ try {
158
+ if (i = (t = t.call(r)).next, 0 === l) {
159
+ if (Object(t) !== t) return;
160
+ f = !1;
161
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
162
+ } catch (r) {
163
+ o = !0, n = r;
164
+ } finally {
165
+ try {
166
+ if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
167
+ } finally {
168
+ if (o) throw n;
169
+ }
170
+ }
171
+ return a;
172
+ }
173
+ }
174
+
175
+ function _nonIterableRest() {
176
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
177
+ }
178
+
179
+ function _slicedToArray(arr, i) {
180
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
181
+ }
182
+
182
183
  var EXT_TO_MIME_TYPES = {
183
184
  x3d: "application/vnd.hzn-3d-crossword",
184
185
  "3gp": "video/3gpp",
@@ -901,16 +902,18 @@ function filenameToMimeType(filename) {
901
902
  }
902
903
  }
903
904
 
904
- var HeaderRegEx = /^h([\d+])$/;
905
- function lexicalToRichTextSource(node) {
906
- var markdownIRBlocks = node.children.map(createBlock);
907
- return fromIRToRichTextSource(markdownIRBlocks);
905
+ function remirrorToRichTextSource(node) {
906
+ var files = {};
907
+ var markdownIRBlocks = node.content.map(function (child) {
908
+ return createBlock(child, files);
909
+ });
910
+ return fromIRToRichTextSource(markdownIRBlocks, files);
908
911
  }
909
- function createBlock(node) {
912
+ function createBlock(node, files) {
910
913
  if (node.type === "heading") {
911
- var _node$tag$match;
914
+ var _node$attrs, _node$content;
912
915
  var headingTag = "";
913
- var depth = Number((_node$tag$match = node.tag.match(HeaderRegEx)) === null || _node$tag$match === void 0 ? void 0 : _node$tag$match[1]);
916
+ var depth = ((_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.level) || 1;
914
917
  if (Number.isNaN(depth)) {
915
918
  throw new Error("Invalid header depth");
916
919
  }
@@ -920,10 +923,13 @@ function createBlock(node) {
920
923
  var headingText = ["".concat(headingTag, " ")];
921
924
  return {
922
925
  type: "block",
923
- children: headingText.concat.apply(headingText, _toConsumableArray(node.children.map(transformLeafNode)))
926
+ children: headingText.concat.apply(headingText, _toConsumableArray(((_node$content = node.content) === null || _node$content === void 0 ? void 0 : _node$content.map(function (child) {
927
+ return transformLeafNode(child, files);
928
+ })) || []))
924
929
  };
925
930
  } else if (node.type === "paragraph") {
926
- if (node.children.length === 0) {
931
+ var _node$content2;
932
+ if (!node.content || ((_node$content2 = node.content) === null || _node$content2 === void 0 ? void 0 : _node$content2.length) === 0) {
927
933
  return {
928
934
  type: "block",
929
935
  children: ["<br />"]
@@ -931,26 +937,26 @@ function createBlock(node) {
931
937
  }
932
938
  return {
933
939
  type: "block",
934
- children: node.children.map(function (child) {
935
- return transformLeafNode(child);
940
+ children: node.content.map(function (child) {
941
+ return transformLeafNode(child, files);
936
942
  })
937
943
  };
938
- } else if (node.type === "list") {
944
+ } else if (node.type === "bulletList" || node.type === "orderedList") {
945
+ var _node$content3;
939
946
  return {
940
947
  type: "block",
941
- children: node.children.flatMap(function (child, i) {
942
- return formatListItemNode(getListPrefix(node), child, 0, i === 0);
943
- })
948
+ children: ((_node$content3 = node.content) === null || _node$content3 === void 0 ? void 0 : _node$content3.flatMap(function (child, i) {
949
+ return formatListItemNode(getListPrefix(node), child, 0, files, i === 0);
950
+ })) || []
944
951
  };
945
952
  } else {
946
953
  var exhaustiveCheck = node;
947
954
  throw new Error("Unhandled node type: ".concat("type" in exhaustiveCheck ? "exhaustiveCheck.type" : "unknown"));
948
955
  }
949
956
  }
950
- function fromIRToRichTextSource(markdownIRBlocks) {
957
+ function fromIRToRichTextSource(markdownIRBlocks, files) {
951
958
  var templateStrings = ["\n"];
952
959
  var exprs = [];
953
- var files = {};
954
960
  for (var blockIdx = 0; blockIdx < markdownIRBlocks.length; blockIdx++) {
955
961
  var block = markdownIRBlocks[blockIdx];
956
962
  var _iterator = _createForOfIteratorHelper(block.children),
@@ -961,10 +967,10 @@ function fromIRToRichTextSource(markdownIRBlocks) {
961
967
  if (typeof child === "string") {
962
968
  templateStrings[templateStrings.length - 1] += child;
963
969
  } else {
964
- if (child.type === "image") {
965
- exprs.push(fromLexicalImageNode(child, files));
966
- } else if (child.type === "link") {
967
- exprs.push(fromLexicalLinkNode(child));
970
+ if (child._type === "file") {
971
+ exprs.push(child);
972
+ } else if (child._type === "link") {
973
+ exprs.push(child);
968
974
  } else {
969
975
  var exhaustiveCheck = child;
970
976
  throw new Error("Unexpected node type: ".concat(JSON.stringify(exhaustiveCheck, null, 2)));
@@ -986,7 +992,17 @@ function fromIRToRichTextSource(markdownIRBlocks) {
986
992
  return _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, core.VAL_EXTENSION, "richtext"), "templateStrings", templateStrings), "exprs", exprs), "files", files);
987
993
  }
988
994
  function formatText(node) {
989
- var classes = typeof node.format === "number" ? fromLexicalFormat(node.format) : [];
995
+ var _node$marks;
996
+ var classes = ((_node$marks = node.marks) === null || _node$marks === void 0 ? void 0 : _node$marks.flatMap(function (mark) {
997
+ if (mark.type === "bold") {
998
+ return ["bold"];
999
+ } else if (mark.type === "italic") {
1000
+ return ["italic"];
1001
+ } else if (mark.type === "strike") {
1002
+ return ["line-through"];
1003
+ }
1004
+ return [];
1005
+ })) || [];
990
1006
  var text = node.text.trimStart();
991
1007
  var prefixWS = node.text.length - text.length;
992
1008
  text = text.trimEnd();
@@ -1005,87 +1021,94 @@ function formatText(node) {
1005
1021
  // text = splitIntoChunks(text);
1006
1022
  return "".concat(" ".repeat(prefixWS)).concat(text).concat(" ".repeat(suffixWS));
1007
1023
  }
1008
- function transformLeafNode(node) {
1024
+ function transformLeafNode(node, files) {
1009
1025
  if (node.type === "text") {
1026
+ var _node$marks2;
1027
+ var linkMark = (_node$marks2 = node.marks) === null || _node$marks2 === void 0 ? void 0 : _node$marks2.find(function (mark) {
1028
+ return mark.type === "link";
1029
+ });
1030
+ if ((linkMark === null || linkMark === void 0 ? void 0 : linkMark.type) === "link") {
1031
+ return {
1032
+ _type: "link",
1033
+ href: linkMark.attrs.href,
1034
+ children: [formatText(node)]
1035
+ };
1036
+ }
1010
1037
  return formatText(node);
1011
- } else if (node.type === "linebreak") {
1012
- return "\n";
1038
+ } else if (node.type === "hardBreak") {
1039
+ return "<br />";
1040
+ } else if (node.type === "image") {
1041
+ return fromRemirrorImageNode(node, files);
1013
1042
  } else {
1014
- return node;
1043
+ var exhaustiveCheck = node;
1044
+ throw new Error("Unexpected node type: ".concat(JSON.stringify(exhaustiveCheck)));
1015
1045
  }
1016
1046
  }
1017
- function formatListItemNode(listPrefix, node, indent) {
1018
- var _node$children;
1019
- var isFirstTopLevelListItem = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1047
+ function formatListItemNode(listPrefix, node, indent, files) {
1048
+ var _node$content4, _node$content5;
1049
+ var isFirstTopLevelListItem = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
1020
1050
  var newLine = isFirstTopLevelListItem ? "" : "\n";
1021
1051
  var prefix = ["".concat(newLine).concat(" ".repeat(indent)).concat(listPrefix)];
1022
- if (((_node$children = node.children) === null || _node$children === void 0 || (_node$children = _node$children[0]) === null || _node$children === void 0 ? void 0 : _node$children.type) !== "list") {
1052
+ if (!(((_node$content4 = node.content) === null || _node$content4 === void 0 || (_node$content4 = _node$content4[0]) === null || _node$content4 === void 0 ? void 0 : _node$content4.type) === "bulletList" || ((_node$content5 = node.content) === null || _node$content5 === void 0 || (_node$content5 = _node$content5[0]) === null || _node$content5 === void 0 ? void 0 : _node$content5.type) === "orderedList")) {
1023
1053
  prefix.push(" ");
1024
1054
  }
1025
- return prefix.concat(node.children.flatMap(function (child) {
1026
- if (child.type === "list") {
1027
- return child.children.flatMap(function (subChild) {
1028
- return formatListItemNode(getListPrefix(child), subChild, indent + 4);
1055
+ return prefix.concat((node.content || []).flatMap(function (child, i) {
1056
+ if (child.type === "bulletList" || child.type === "orderedList") {
1057
+ return (child.content || []).flatMap(function (subChild) {
1058
+ return formatListItemNode(getListPrefix(child), subChild, indent + 4, files);
1029
1059
  });
1030
1060
  } else {
1031
- return [transformLeafNode(child)];
1061
+ return (child.content || []).flatMap(function (subChild) {
1062
+ var _child$content, _child$content2;
1063
+ var res = [];
1064
+ if ((_child$content = child.content) !== null && _child$content !== void 0 && _child$content.length && ((_child$content2 = child.content) === null || _child$content2 === void 0 ? void 0 : _child$content2.length) > 0 && i > 0) {
1065
+ res.push("<br />\n");
1066
+ }
1067
+ res.push(transformLeafNode(subChild, files));
1068
+ return res;
1069
+ });
1032
1070
  }
1033
1071
  }));
1034
1072
  }
1035
1073
  function getListPrefix(node) {
1036
- if (node.listType === "bullet") {
1074
+ if (node.type === "bulletList") {
1037
1075
  return "-";
1038
- } else if (node.listType === "number") {
1076
+ } else if (node.type === "orderedList") {
1039
1077
  return "1.";
1040
1078
  } else {
1041
- throw new Error("Unhandled list type: ".concat(node.listType));
1079
+ var exhaustiveCheck = node;
1080
+ throw new Error("Unhandled list node: ".concat(JSON.stringify(exhaustiveCheck)));
1042
1081
  }
1043
1082
  }
1044
- var FORMAT_MAPPING$1 = {
1045
- bold: 1,
1046
- // 0001
1047
- italic: 2,
1048
- // 0010
1049
- "line-through": 4 // 0100
1050
- // underline: 8, // 1000
1051
- };
1052
-
1053
- function fromLexicalFormat(format) {
1054
- return Object.entries(FORMAT_MAPPING$1).flatMap(function (_ref2) {
1055
- var _ref3 = _slicedToArray(_ref2, 2),
1056
- key = _ref3[0],
1057
- value = _ref3[1];
1058
- if ((value & /* bitwise and */format) === value) {
1059
- return [key];
1060
- }
1061
- return [];
1062
- });
1063
- }
1064
1083
  var textEncoder = new TextEncoder();
1065
- function fromLexicalImageNode(node, files) {
1066
- if (node.src.startsWith("data:")) {
1067
- var sha256 = core.Internal.getSHA256Hash(textEncoder.encode(node.src));
1068
- var mimeType = getMimeType(node.src);
1084
+ function fromRemirrorImageNode(node, files) {
1085
+ if (node.attrs && node.attrs.src.startsWith("data:")) {
1086
+ var sha256 = core.Internal.getSHA256Hash(textEncoder.encode(node.attrs.src));
1087
+ var mimeType = getMimeType(node.attrs.src);
1069
1088
  if (mimeType === undefined) {
1070
- throw new Error("Could not detect Mime Type for image: ".concat(node.src));
1089
+ throw new Error("Could not detect Mime Type for image: ".concat(node.attrs.src));
1071
1090
  }
1072
1091
  var fileExt = mimeTypeToFileExt(mimeType);
1073
- var filePath = "/public/".concat(sha256, ".").concat(fileExt);
1074
- files[filePath] = node.src;
1092
+ var fileName = node.attrs.fileName || "".concat(sha256, ".").concat(fileExt);
1093
+ var filePath = "/public/".concat(fileName);
1094
+ files[filePath] = node.attrs.src;
1075
1095
  return _defineProperty(_defineProperty(_defineProperty({}, core.VAL_EXTENSION, "file"), core.FILE_REF_PROP, filePath), "metadata", {
1076
- width: node.width || 0,
1077
- height: node.height || 0,
1096
+ width: typeof node.attrs.width === "number" ? node.attrs.width : 0,
1097
+ height: typeof node.attrs.height === "number" ? node.attrs.height : 0,
1078
1098
  sha256: sha256 || "",
1079
1099
  mimeType: mimeType
1080
1100
  });
1081
- } else {
1082
- var _sha = getParam("sha256", node.src);
1083
- return _defineProperty(_defineProperty(_defineProperty({}, core.VAL_EXTENSION, "file"), core.FILE_REF_PROP, "/public".concat(node.src.split("?")[0])), "metadata", {
1084
- width: node.width || 0,
1085
- height: node.height || 0,
1101
+ } else if (node.attrs) {
1102
+ var _sha = getParam("sha256", node.attrs.src);
1103
+ var noParamsSrc = node.attrs.src.split("?")[0];
1104
+ return _defineProperty(_defineProperty(_defineProperty({}, core.VAL_EXTENSION, "file"), core.FILE_REF_PROP, "/public".concat(node.attrs.src.split("?")[0])), "metadata", {
1105
+ width: typeof node.attrs.width === "number" ? node.attrs.width : 0,
1106
+ height: typeof node.attrs.height === "number" ? node.attrs.height : 0,
1086
1107
  sha256: _sha || "",
1087
- mimeType: node.mimeType || ""
1108
+ mimeType: noParamsSrc && filenameToMimeType(noParamsSrc) || ""
1088
1109
  });
1110
+ } else {
1111
+ throw new Error("Invalid image node (no attrs): " + JSON.stringify(node));
1089
1112
  }
1090
1113
  }
1091
1114
  function getParam(param, url) {
@@ -1100,196 +1123,6 @@ function getParam(param, url) {
1100
1123
  }
1101
1124
  return undefined;
1102
1125
  }
1103
- function fromLexicalLinkNode(node) {
1104
- return _defineProperty(_defineProperty(_defineProperty({}, core.VAL_EXTENSION, "link"), "href", node.url), "children", node.children.map(formatText));
1105
- }
1106
-
1107
- function ownKeys(e, r) {
1108
- var t = Object.keys(e);
1109
- if (Object.getOwnPropertySymbols) {
1110
- var o = Object.getOwnPropertySymbols(e);
1111
- r && (o = o.filter(function (r) {
1112
- return Object.getOwnPropertyDescriptor(e, r).enumerable;
1113
- })), t.push.apply(t, o);
1114
- }
1115
- return t;
1116
- }
1117
- function _objectSpread2(e) {
1118
- for (var r = 1; r < arguments.length; r++) {
1119
- var t = null != arguments[r] ? arguments[r] : {};
1120
- r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
1121
- _defineProperty(e, r, t[r]);
1122
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
1123
- Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
1124
- });
1125
- }
1126
- return e;
1127
- }
1128
-
1129
- /// Serialized Lexical Nodes:
1130
- // TODO: replace with Lexical libs types - not currently exported?
1131
- var COMMON_LEXICAL_PROPS = {
1132
- version: 1,
1133
- format: "",
1134
- indent: 0,
1135
- direction: null
1136
- };
1137
- function toLexicalNode(node) {
1138
- var useBreakNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1139
- if (typeof node === "string") {
1140
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1141
- type: "text",
1142
- format: "",
1143
- text: node
1144
- });
1145
- }
1146
- if ("tag" in node) {
1147
- switch (node.tag) {
1148
- case "h1":
1149
- return toLexicalHeadingNode(node);
1150
- case "h2":
1151
- return toLexicalHeadingNode(node);
1152
- case "h3":
1153
- return toLexicalHeadingNode(node);
1154
- case "h4":
1155
- return toLexicalHeadingNode(node);
1156
- case "h5":
1157
- return toLexicalHeadingNode(node);
1158
- case "h6":
1159
- return toLexicalHeadingNode(node);
1160
- case "li":
1161
- return toLexicalListItemNode(node);
1162
- case "p":
1163
- return toLexicalParagraphNode(node);
1164
- case "ul":
1165
- return toLexicalListNode(node);
1166
- case "ol":
1167
- return toLexicalListNode(node);
1168
- case "span":
1169
- return toLexicalTextNode(node);
1170
- case "a":
1171
- return toLexicalLinkNode(node);
1172
- case "img":
1173
- return toLexicalImageNode(node);
1174
- case "br":
1175
- if (useBreakNode) {
1176
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1177
- type: "linebreak"
1178
- });
1179
- }
1180
- return toLexicalPseudoLineBreakNode();
1181
- default:
1182
- throw Error("Unexpected node tag: " + JSON.stringify(node, null, 2));
1183
- }
1184
- } else {
1185
- throw Error("Unexpected node: " + JSON.stringify(node, null, 2));
1186
- }
1187
- }
1188
- function toLexicalImageNode(node) {
1189
- var url = node.src;
1190
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1191
- type: "image",
1192
- src: url,
1193
- width: node.width,
1194
- height: node.height,
1195
- mimeType: node.mimeType
1196
- // TODO: altText
1197
- });
1198
- }
1199
-
1200
- function toLexicalLinkNode(link) {
1201
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1202
- type: "link",
1203
- url: link.href,
1204
- children: link.children.map(function (child) {
1205
- return toLexicalNode(child);
1206
- })
1207
- });
1208
- }
1209
- function richTextSourceToLexical(richtext) {
1210
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1211
- format: "",
1212
- type: "root",
1213
- children: richtext.children.map(function (child) {
1214
- return toLexicalNode(child);
1215
- })
1216
- });
1217
- }
1218
- function toLexicalHeadingNode(heading) {
1219
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1220
- type: "heading",
1221
- tag: heading.tag,
1222
- children: heading.children.map(function (child) {
1223
- return toLexicalNode(child);
1224
- })
1225
- });
1226
- }
1227
- function toLexicalParagraphNode(paragraph) {
1228
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1229
- type: "paragraph",
1230
- children: paragraph.children.map(function (child) {
1231
- return toLexicalNode(child, true);
1232
- })
1233
- });
1234
- }
1235
-
1236
- // Lexical does not support line breaks, so we convert them to empty paragraphs
1237
- function toLexicalPseudoLineBreakNode() {
1238
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1239
- type: "paragraph",
1240
- children: []
1241
- });
1242
- }
1243
- function toLexicalListItemNode(listItem) {
1244
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1245
- type: "listitem",
1246
- children: listItem.children.map(function (child) {
1247
- return toLexicalNode(child, true);
1248
- })
1249
- });
1250
- }
1251
- function toLexicalListNode(list) {
1252
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1253
- type: "list",
1254
- listType: list.tag === "ol" ? "number" : "bullet",
1255
- children: list.children.map(function (child) {
1256
- return toLexicalNode(child);
1257
- })
1258
- }, list.dir ? {
1259
- direction: list.dir
1260
- } : {
1261
- direction: null
1262
- });
1263
- }
1264
- var FORMAT_MAPPING = {
1265
- bold: 1,
1266
- // 0001
1267
- italic: 2,
1268
- // 0010
1269
- "line-through": 4 // 0100
1270
- // underline: 8, // 1000
1271
- };
1272
-
1273
- function toLexicalFormat(classes) {
1274
- return classes.reduce(function (prev, curr) {
1275
- return prev | /* bitwise or */FORMAT_MAPPING[curr];
1276
- }, 0);
1277
- }
1278
- function toLexicalTextNode(spanNode) {
1279
- var child = spanNode.children[0];
1280
- if (typeof child === "string") {
1281
- return _objectSpread2(_objectSpread2({}, COMMON_LEXICAL_PROPS), {}, {
1282
- type: "text",
1283
- text: child,
1284
- format: toLexicalFormat(spanNode.classes)
1285
- });
1286
- } else {
1287
- // recurse the spans and merge their classes
1288
- return toLexicalTextNode(_objectSpread2(_objectSpread2({}, child), {}, {
1289
- classes: spanNode.classes.concat(child.classes)
1290
- }));
1291
- }
1292
- }
1293
1126
 
1294
1127
  var VAL_START_TAG_PREFIX = '<val value="';
1295
1128
  var VAL_START_TAG_SUFFIX = '">';
@@ -1297,6 +1130,18 @@ var VAL_END_TAG = "</val>";
1297
1130
  function parseTokens(tokens, sourceNodes, cursor) {
1298
1131
  var insideList = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1299
1132
  var children = [];
1133
+ function merge(token, clazz) {
1134
+ var parsedTokens = parseTokens(token.tokens ? token.tokens : [], sourceNodes, 0);
1135
+ children.push({
1136
+ tag: "span",
1137
+ classes: [clazz].concat(parsedTokens.children.flatMap(function (child) {
1138
+ return typeof child === "string" ? [] : child.classes;
1139
+ })),
1140
+ children: parsedTokens.children.flatMap(function (child) {
1141
+ return typeof child === "string" ? child : child.children;
1142
+ })
1143
+ });
1144
+ }
1300
1145
  var _loop = function _loop() {
1301
1146
  var token = tokens[cursor];
1302
1147
  if (token.type === "heading") {
@@ -1310,23 +1155,11 @@ function parseTokens(tokens, sourceNodes, cursor) {
1310
1155
  children: parseTokens(token.tokens ? token.tokens : [], sourceNodes, 0).children
1311
1156
  });
1312
1157
  } else if (token.type === "strong") {
1313
- children.push({
1314
- tag: "span",
1315
- classes: ["bold"],
1316
- children: parseTokens(token.tokens ? token.tokens : [], sourceNodes, 0).children
1317
- });
1158
+ merge(token, "bold");
1318
1159
  } else if (token.type === "em") {
1319
- children.push({
1320
- tag: "span",
1321
- classes: ["italic"],
1322
- children: parseTokens(token.tokens ? token.tokens : [], sourceNodes, 0).children
1323
- });
1160
+ merge(token, "italic");
1324
1161
  } else if (token.type === "del") {
1325
- children.push({
1326
- tag: "span",
1327
- classes: ["line-through"],
1328
- children: parseTokens(token.tokens ? token.tokens : [], sourceNodes, 0).children
1329
- });
1162
+ merge(token, "line-through");
1330
1163
  } else if (token.type === "text") {
1331
1164
  if ("tokens" in token && Array.isArray(token.tokens)) {
1332
1165
  children.push.apply(children, _toConsumableArray(parseTokens(token.tokens, sourceNodes, cursor, insideList).children));
@@ -1335,6 +1168,11 @@ function parseTokens(tokens, sourceNodes, cursor) {
1335
1168
  var lines = token.raw.split("\n");
1336
1169
  var tags = lines.flatMap(function (line, i) {
1337
1170
  if (i === lines.length - 1) return [line];
1171
+ if (i === lines.length - 1 && line === "") return [];
1172
+ if (line === "") return {
1173
+ tag: "br",
1174
+ children: []
1175
+ };
1338
1176
  return [line, {
1339
1177
  tag: "br",
1340
1178
  children: []
@@ -1404,10 +1242,16 @@ function parseTokens(tokens, sourceNodes, cursor) {
1404
1242
  }
1405
1243
  var br_html_regex = /<br\s*\/?>/gi; // matches <br>, <br/>, <br />; case insensitive
1406
1244
  if (token.text.trim().match(br_html_regex)) {
1245
+ var _tokens;
1407
1246
  children.push({
1408
1247
  tag: "br",
1409
1248
  children: []
1410
1249
  });
1250
+ if (((_tokens = tokens[cursor + 1]) === null || _tokens === void 0 ? void 0 : _tokens.raw.trim()) === "") {
1251
+ // if next token is a new line or white-spaces, skip it
1252
+ // this typically means we have a <br> AND a new line, which, semantically, is just a <br>
1253
+ cursor++;
1254
+ }
1411
1255
  }
1412
1256
  } else if (token.type === "link") {
1413
1257
  if (token.raw === token.href) {
@@ -1467,22 +1311,359 @@ function parseRichTextSource(_ref) {
1467
1311
  return _defineProperty(_defineProperty({}, core.VAL_EXTENSION, "richtext"), "children", children);
1468
1312
  }
1469
1313
 
1314
+ var RemirrorTextMark = zod.z.object({
1315
+ type: zod.z.union([zod.z.literal("bold"), zod.z.literal("strike"), zod.z.literal("italic")])
1316
+ });
1317
+ var RemirrorLinkMark = zod.z.object({
1318
+ type: zod.z.literal("link"),
1319
+ attrs: zod.z.object({
1320
+ href: zod.z.string(),
1321
+ target: zod.z.union([zod.z.literal("_blank"), zod.z["null"]()]),
1322
+ auto: zod.z["boolean"]()
1323
+ })
1324
+ });
1325
+ var RemirrorText = zod.z.intersection(zod.z.object({
1326
+ type: zod.z.literal("text"),
1327
+ text: zod.z.string()
1328
+ }), zod.z.object({
1329
+ marks: zod.z.array(zod.z.union([RemirrorTextMark, RemirrorLinkMark]))
1330
+ }).partial());
1331
+ var RemirrorBr = zod.z.intersection(zod.z.object({
1332
+ type: zod.z.literal("hardBreak")
1333
+ }), zod.z.object({
1334
+ marks: zod.z.array(RemirrorTextMark)
1335
+ }).partial());
1336
+ var RemirrorImage = zod.z.intersection(zod.z.object({
1337
+ type: zod.z.literal("image")
1338
+ }), zod.z.object({
1339
+ attrs: zod.z.intersection(zod.z.object({
1340
+ src: zod.z.string()
1341
+ }), zod.z.object({
1342
+ align: zod.z.union([zod.z.literal("center"), zod.z.literal("end"), zod.z.literal("justify"), zod.z.literal("left"), zod.z.literal("match-parent"), zod.z.literal("right"), zod.z.literal("start"), zod.z["null"]()]),
1343
+ alt: zod.z.union([zod.z.string(), zod.z["null"]()]),
1344
+ height: zod.z.union([zod.z.string(), zod.z.number(), zod.z["null"]()]),
1345
+ width: zod.z.union([zod.z.string(), zod.z.number(), zod.z["null"]()]),
1346
+ rotate: zod.z.union([zod.z.string(), zod.z["null"]()]),
1347
+ title: zod.z.union([zod.z.string(), zod.z["null"]()]),
1348
+ fileName: zod.z.union([zod.z.string(), zod.z["null"]()])
1349
+ }).partial())
1350
+ }).partial());
1351
+ var RemirrorHeading = zod.z.intersection(zod.z.object({
1352
+ type: zod.z.literal("heading")
1353
+ }), zod.z.object({
1354
+ attrs: zod.z.object({
1355
+ level: zod.z.number()
1356
+ }),
1357
+ content: zod.z.array(zod.z.union([RemirrorText, RemirrorBr]))
1358
+ }).partial());
1359
+ var RemirrorBulletList = zod.z.lazy(function () {
1360
+ return zod.z.intersection(zod.z.object({
1361
+ type: zod.z.literal("bulletList")
1362
+ }), zod.z.object({
1363
+ content: zod.z.array(RemirrorListItem)
1364
+ }).partial());
1365
+ });
1366
+ var RemirrorOrderedList = zod.z.lazy(function () {
1367
+ return zod.z.intersection(zod.z.object({
1368
+ type: zod.z.literal("orderedList")
1369
+ }), zod.z.object({
1370
+ content: zod.z.array(RemirrorListItem)
1371
+ }).partial());
1372
+ });
1373
+ var RemirrorListItem = zod.z.lazy(function () {
1374
+ return zod.z.intersection(zod.z.object({
1375
+ type: zod.z.literal("listItem")
1376
+ }), zod.z.object({
1377
+ content: zod.z.array(zod.z.union([RemirrorParagraph, RemirrorBulletList, RemirrorOrderedList]))
1378
+ }).partial());
1379
+ });
1380
+ var RemirrorParagraph = zod.z.intersection(zod.z.object({
1381
+ type: zod.z.literal("paragraph")
1382
+ }), zod.z.object({
1383
+ content: zod.z.array(zod.z.union([RemirrorText, RemirrorImage, RemirrorBr]))
1384
+ }).partial());
1385
+ var RemirrorJSON = zod.z.object({
1386
+ type: zod.z.literal("doc"),
1387
+ content: zod.z.array(zod.z.union([RemirrorParagraph, RemirrorHeading, RemirrorBulletList, RemirrorOrderedList]))
1388
+ });
1389
+
1390
+ function ownKeys(e, r) {
1391
+ var t = Object.keys(e);
1392
+ if (Object.getOwnPropertySymbols) {
1393
+ var o = Object.getOwnPropertySymbols(e);
1394
+ r && (o = o.filter(function (r) {
1395
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
1396
+ })), t.push.apply(t, o);
1397
+ }
1398
+ return t;
1399
+ }
1400
+ function _objectSpread2(e) {
1401
+ for (var r = 1; r < arguments.length; r++) {
1402
+ var t = null != arguments[r] ? arguments[r] : {};
1403
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
1404
+ _defineProperty(e, r, t[r]);
1405
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
1406
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
1407
+ });
1408
+ }
1409
+ return e;
1410
+ }
1411
+
1412
+ function richTextToRemirror(richtext) {
1413
+ return {
1414
+ type: "doc",
1415
+ content: richtext.children.map(function (child) {
1416
+ return toRemirrorNode(child);
1417
+ })
1418
+ };
1419
+ }
1420
+ function toRemirrorNode(child) {
1421
+ switch (child.tag) {
1422
+ case "h1":
1423
+ return convertHeadingToRemirror(1, child.children);
1424
+ case "h2":
1425
+ return convertHeadingToRemirror(2, child.children);
1426
+ case "h3":
1427
+ return convertHeadingToRemirror(3, child.children);
1428
+ case "h4":
1429
+ return convertHeadingToRemirror(4, child.children);
1430
+ case "h5":
1431
+ return convertHeadingToRemirror(5, child.children);
1432
+ case "h6":
1433
+ return convertHeadingToRemirror(6, child.children);
1434
+ case "p":
1435
+ return convertParagraphToRemirror(child.children);
1436
+ case "ul":
1437
+ return convertUlToRemirror(child);
1438
+ case "ol":
1439
+ return convertOlToRemirror(child);
1440
+ case "br":
1441
+ return convertParagraphToRemirror([child]);
1442
+ default:
1443
+ {
1444
+ var _exhaustiveCheck = child;
1445
+ throw Error("Unexpected child node: " + JSON.stringify(_exhaustiveCheck));
1446
+ }
1447
+ }
1448
+ }
1449
+ function convertHeadingToRemirror(level, children) {
1450
+ return {
1451
+ type: "heading",
1452
+ attrs: {
1453
+ level: level
1454
+ },
1455
+ content: children.flatMap(convertStringOrSpanNodeToRemirror)
1456
+ };
1457
+ }
1458
+ function convertStringToRemirror(child) {
1459
+ return {
1460
+ type: "text",
1461
+ text: child
1462
+ };
1463
+ }
1464
+ function convertStringOrSpanNodeToRemirror(child) {
1465
+ if (typeof child === "string") {
1466
+ return [convertStringToRemirror(child)];
1467
+ }
1468
+ return convertSpanNodeToRemirror(child);
1469
+ }
1470
+ function convertSpanNodeToRemirror(spanNode) {
1471
+ if (spanNode.classes.length === 0 && spanNode.children.length === 1) {
1472
+ if (typeof spanNode.children[0] === "string") {
1473
+ return [convertStringToRemirror(spanNode.children[0])];
1474
+ } else {
1475
+ // TODO: replace with error logging and something more graceful?
1476
+ throw Error("Unexpected amount of children in span node: " + JSON.stringify(spanNode, null, 2));
1477
+ }
1478
+ }
1479
+ return spanNode.children.map(function (child) {
1480
+ return {
1481
+ type: "text",
1482
+ text: child,
1483
+ marks: spanNode.classes.map(function (className) {
1484
+ switch (className) {
1485
+ case "bold":
1486
+ return {
1487
+ type: "bold"
1488
+ };
1489
+ case "italic":
1490
+ return {
1491
+ type: "italic"
1492
+ };
1493
+ case "line-through":
1494
+ return {
1495
+ type: "strike"
1496
+ };
1497
+ default:
1498
+ {
1499
+ var _exhaustiveCheck = className;
1500
+ throw Error("Unexpected span class: " + _exhaustiveCheck);
1501
+ }
1502
+ }
1503
+ })
1504
+ };
1505
+ });
1506
+ }
1507
+ function convertParagraphToRemirror(children) {
1508
+ return {
1509
+ type: "paragraph",
1510
+ content: children.flatMap(function (child) {
1511
+ if (typeof child === "string") {
1512
+ return [convertStringToRemirror(child)];
1513
+ }
1514
+ switch (child.tag) {
1515
+ case "span":
1516
+ return convertSpanNodeToRemirror(child);
1517
+ case "a":
1518
+ return convertLinkNodeToRemirror(child);
1519
+ case "img":
1520
+ return [convertImageNodeToRemirror(child)];
1521
+ case "br":
1522
+ return [createRemirrorBr()];
1523
+ default:
1524
+ {
1525
+ var _exhaustiveCheck = child;
1526
+ throw Error("Unexpected paragraph child: " + JSON.stringify(_exhaustiveCheck));
1527
+ }
1528
+ }
1529
+ })
1530
+ };
1531
+ }
1532
+ function createRemirrorBr() {
1533
+ return {
1534
+ type: "hardBreak",
1535
+ marks: []
1536
+ };
1537
+ }
1538
+ function convertLinkNodeToRemirror(linkNode) {
1539
+ return linkNode.children.flatMap(convertStringOrSpanNodeToRemirror).map(function (remirrorText) {
1540
+ return _objectSpread2(_objectSpread2({}, remirrorText), {}, {
1541
+ marks: (remirrorText.marks || []).concat({
1542
+ type: "link",
1543
+ attrs: {
1544
+ href: linkNode.href,
1545
+ auto: false,
1546
+ target: null
1547
+ }
1548
+ })
1549
+ });
1550
+ });
1551
+ }
1552
+ function convertImageNodeToRemirror(imageNode) {
1553
+ return {
1554
+ type: "image",
1555
+ attrs: {
1556
+ height: imageNode.height,
1557
+ width: imageNode.width,
1558
+ src: imageNode.src // at time of writing we are not sure if src as href or data url works, also: how to keep mimeType etc?
1559
+ }
1560
+ };
1561
+ }
1562
+ function convertUlToRemirror(ulNode) {
1563
+ return {
1564
+ type: "bulletList",
1565
+ content: ulNode.children.map(convertListItemToRemirror)
1566
+ };
1567
+ }
1568
+ function convertOlToRemirror(olNode) {
1569
+ return {
1570
+ type: "orderedList",
1571
+ content: olNode.children.map(convertListItemToRemirror)
1572
+ };
1573
+ }
1574
+ function convertListItemToRemirror(liNode) {
1575
+ return {
1576
+ type: "listItem",
1577
+ content: convertListItemToRemirrorParagraph(liNode.children)
1578
+ };
1579
+ }
1580
+ function convertListItemToRemirrorParagraph(rtChildren) {
1581
+ var children = [];
1582
+ var _iterator = _createForOfIteratorHelper(rtChildren),
1583
+ _step;
1584
+ try {
1585
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1586
+ var child = _step.value;
1587
+ var lastChild = children[children.length - 1];
1588
+ if (!lastChild) {
1589
+ lastChild = {
1590
+ type: "paragraph",
1591
+ content: []
1592
+ };
1593
+ children.push(lastChild);
1594
+ }
1595
+ var lastChildContent = lastChild.content;
1596
+ if (typeof child === "string") {
1597
+ lastChildContent.push(convertStringToRemirror(child));
1598
+ } else {
1599
+ switch (child.tag) {
1600
+ case "a":
1601
+ {
1602
+ lastChildContent.push.apply(lastChildContent, _toConsumableArray(convertLinkNodeToRemirror(child)));
1603
+ break;
1604
+ }
1605
+ case "br":
1606
+ {
1607
+ children.push({
1608
+ type: "paragraph",
1609
+ content: [] // create new paragraph
1610
+ });
1611
+ break;
1612
+ }
1613
+ case "span":
1614
+ {
1615
+ lastChildContent.push.apply(lastChildContent, _toConsumableArray(convertSpanNodeToRemirror(child)));
1616
+ break;
1617
+ }
1618
+ case "ol":
1619
+ {
1620
+ children.push(convertOlToRemirror(child));
1621
+ break;
1622
+ }
1623
+ case "ul":
1624
+ {
1625
+ children.push(convertUlToRemirror(child));
1626
+ break;
1627
+ }
1628
+ default:
1629
+ {
1630
+ var _exhaustiveCheck = child;
1631
+ throw Error("Unexpected list item child: " + JSON.stringify(_exhaustiveCheck));
1632
+ }
1633
+ }
1634
+ }
1635
+ }
1636
+ } catch (err) {
1637
+ _iterator.e(err);
1638
+ } finally {
1639
+ _iterator.f();
1640
+ }
1641
+ return children;
1642
+ }
1643
+
1470
1644
  var VAL_SESSION_COOKIE = core.Internal.VAL_SESSION_COOKIE;
1471
1645
  var VAL_STATE_COOKIE = core.Internal.VAL_STATE_COOKIE;
1472
1646
  var VAL_ENABLE_COOKIE_NAME = core.Internal.VAL_ENABLE_COOKIE_NAME;
1473
1647
 
1474
- exports.COMMON_LEXICAL_PROPS = COMMON_LEXICAL_PROPS;
1475
1648
  exports.EXT_TO_MIME_TYPES = EXT_TO_MIME_TYPES;
1476
1649
  exports.MIME_TYPES_TO_EXT = MIME_TYPES_TO_EXT;
1650
+ exports.RemirrorBr = RemirrorBr;
1651
+ exports.RemirrorBulletList = RemirrorBulletList;
1652
+ exports.RemirrorHeading = RemirrorHeading;
1653
+ exports.RemirrorImage = RemirrorImage;
1654
+ exports.RemirrorJSON = RemirrorJSON;
1655
+ exports.RemirrorLinkMark = RemirrorLinkMark;
1656
+ exports.RemirrorListItem = RemirrorListItem;
1657
+ exports.RemirrorOrderedList = RemirrorOrderedList;
1658
+ exports.RemirrorParagraph = RemirrorParagraph;
1659
+ exports.RemirrorText = RemirrorText;
1660
+ exports.RemirrorTextMark = RemirrorTextMark;
1477
1661
  exports.VAL_ENABLE_COOKIE_NAME = VAL_ENABLE_COOKIE_NAME;
1478
1662
  exports.VAL_SESSION_COOKIE = VAL_SESSION_COOKIE;
1479
1663
  exports.VAL_STATE_COOKIE = VAL_STATE_COOKIE;
1480
1664
  exports.filenameToMimeType = filenameToMimeType;
1481
- exports.fromLexicalFormat = fromLexicalFormat;
1482
1665
  exports.getMimeType = getMimeType;
1483
- exports.lexicalToRichTextSource = lexicalToRichTextSource;
1484
1666
  exports.mimeTypeToFileExt = mimeTypeToFileExt;
1485
1667
  exports.parseRichTextSource = parseRichTextSource;
1486
- exports.richTextSourceToLexical = richTextSourceToLexical;
1487
- exports.toLexicalFormat = toLexicalFormat;
1488
- exports.toLexicalNode = toLexicalNode;
1668
+ exports.remirrorToRichTextSource = remirrorToRichTextSource;
1669
+ exports.richTextToRemirror = richTextToRemirror;