@lvce-editor/markdown-worker 2.2.0 → 3.0.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.
@@ -1122,68 +1122,68 @@ const Tfoot = 'tfoot';
1122
1122
 
1123
1123
  const getVirtualDomTag = text => {
1124
1124
  switch (text) {
1125
- case H1:
1126
- return H1$1;
1127
- case H2:
1128
- return H2$1;
1129
- case H3:
1130
- return H3$1;
1131
- case H4:
1132
- return H4$1;
1133
- case H5:
1134
- return H5$1;
1135
- case Div:
1136
- return Div$1;
1125
+ case A:
1126
+ return A$1;
1127
+ case Abbr:
1128
+ return Abbr$1;
1137
1129
  case Article:
1138
1130
  return Article$1;
1139
1131
  case Aside:
1140
1132
  return Aside$1;
1141
- case Footer:
1142
- return Footer$1;
1143
- case Header:
1144
- return Header$1;
1145
- case Nav:
1146
- return Nav$1;
1147
- case Section:
1148
- return Section$1;
1149
- case Search:
1150
- return Search$1;
1133
+ case Br:
1134
+ return Br$1;
1135
+ case Cite:
1136
+ return Cite$1;
1137
+ case Data:
1138
+ return Data$1;
1151
1139
  case Dd:
1152
1140
  return Dd$1;
1141
+ case Div:
1142
+ return Div$1;
1153
1143
  case Dl:
1154
1144
  return Dl$1;
1155
1145
  case Figcaption:
1156
1146
  return Figcaption$1;
1157
1147
  case Figure:
1158
1148
  return Figure$1;
1149
+ case Footer:
1150
+ return Footer$1;
1151
+ case H1:
1152
+ return H1$1;
1153
+ case H2:
1154
+ return H2$1;
1155
+ case H3:
1156
+ return H3$1;
1157
+ case H4:
1158
+ return H4$1;
1159
+ case H5:
1160
+ return H5$1;
1161
+ case Header:
1162
+ return Header$1;
1159
1163
  case Hr:
1160
1164
  return Hr$1;
1165
+ case Img:
1166
+ return Img$1;
1161
1167
  case Li:
1162
1168
  return Li$1;
1169
+ case Nav:
1170
+ return Nav$1;
1163
1171
  case Ol:
1164
1172
  return Ol$1;
1165
1173
  case P$1:
1166
1174
  return P$2;
1167
1175
  case Pre:
1168
1176
  return Pre$1;
1169
- case A:
1170
- return A$1;
1171
- case Abbr:
1172
- return Abbr$1;
1173
- case Br:
1174
- return Br$1;
1175
- case Cite:
1176
- return Cite$1;
1177
- case Data:
1178
- return Data$1;
1179
- case Time:
1180
- return Time$1;
1181
- case Tfoot:
1182
- return Tfoot$1;
1183
- case Img:
1184
- return Img$1;
1177
+ case Search:
1178
+ return Search$1;
1179
+ case Section:
1180
+ return Section$1;
1185
1181
  case Span:
1186
1182
  return Span$1;
1183
+ case Tfoot:
1184
+ return Tfoot$1;
1185
+ case Time:
1186
+ return Time$1;
1187
1187
  default:
1188
1188
  return Div$1;
1189
1189
  }
@@ -1233,19 +1233,19 @@ class UnexpectedTokenError extends Error {
1233
1233
  }
1234
1234
 
1235
1235
  const State = {
1236
- TopLevelContent: 1,
1237
- AfterOpeningAngleBracket: 2,
1238
- InsideOpeningTag: 3,
1239
- AfterClosingTagSlash: 4,
1240
- AfterClosingTagName: 5,
1241
- InsideOpeningTagAfterWhitespace: 6,
1242
- AfterAttributeName: 7,
1243
1236
  AfterAttributeEqualSign: 8,
1244
- InsideAttributeAfterDoubleQuote: 9,
1245
- AfterAttributeValueInsideDoubleQuote: 10,
1237
+ AfterAttributeName: 7,
1246
1238
  AfterAttributeValueClosingQuote: 11,
1239
+ AfterAttributeValueInsideDoubleQuote: 10,
1240
+ AfterClosingTagName: 5,
1241
+ AfterClosingTagSlash: 4,
1247
1242
  AfterExclamationMark: 16,
1248
- InsideComment: 17
1243
+ AfterOpeningAngleBracket: 2,
1244
+ InsideAttributeAfterDoubleQuote: 9,
1245
+ InsideComment: 17,
1246
+ InsideOpeningTag: 3,
1247
+ InsideOpeningTagAfterWhitespace: 6,
1248
+ TopLevelContent: 1
1249
1249
  };
1250
1250
  const RE_ANGLE_BRACKET_OPEN = /^</;
1251
1251
  const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?![\s!%])/;
@@ -1279,26 +1279,97 @@ const tokenizeHtml = text => {
1279
1279
  while (index < text.length) {
1280
1280
  const part = text.slice(index);
1281
1281
  switch (state) {
1282
- case State.TopLevelContent:
1283
- if (next = part.match(RE_ANGLE_BRACKET_OPEN_TAG)) {
1282
+ case State.AfterAttributeEqualSign:
1283
+ if (next = part.match(RE_DOUBLE_QUOTE)) {
1284
+ token = AttributeQuoteStart;
1285
+ state = State.InsideAttributeAfterDoubleQuote;
1286
+ } else if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1287
+ token = ClosingAngleBracket;
1288
+ state = State.TopLevelContent;
1289
+ } else if (next = part.match(RE_ATTRIBUTE_TEXT)) {
1290
+ token = AttributeValue;
1291
+ state = State.InsideOpeningTag;
1292
+ } else {
1293
+ throw new UnexpectedTokenError();
1294
+ }
1295
+ break;
1296
+ case State.AfterAttributeName:
1297
+ if (next = part.match(RE_EQUAL_SIGN)) {
1298
+ token = AttributeEqualSign;
1299
+ state = State.AfterAttributeEqualSign;
1300
+ } else if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1301
+ token = ClosingAngleBracket;
1302
+ state = State.TopLevelContent;
1303
+ } else if (next = part.match(RE_WHITESPACE)) {
1304
+ token = WhitespaceInsideOpeningTag;
1305
+ state = State.InsideOpeningTagAfterWhitespace;
1306
+ } else if (next = part.match(RE_ANGLE_BRACKET_OPEN)) {
1284
1307
  token = OpeningAngleBracket;
1285
1308
  state = State.AfterOpeningAngleBracket;
1286
- } else if (next = part.match(RE_CONTENT)) {
1287
- token = Content;
1309
+ } else {
1310
+ text.slice(index); // ?
1311
+ throw new UnexpectedTokenError();
1312
+ }
1313
+ break;
1314
+ case State.AfterAttributeValueClosingQuote:
1315
+ if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1316
+ token = ClosingAngleBracket;
1288
1317
  state = State.TopLevelContent;
1289
- } else if (next = part.match(RE_BLOCK_COMMENT_START)) {
1290
- token = CommentStart;
1291
- state = State.InsideComment;
1292
- } else if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1318
+ } else if (next = part.match(RE_WHITESPACE)) {
1319
+ token = WhitespaceInsideOpeningTag;
1320
+ state = State.InsideOpeningTagAfterWhitespace;
1321
+ } else if (next = part.match(RE_SELF_CLOSING)) {
1322
+ token = ClosingAngleBracket;
1323
+ state = State.TopLevelContent;
1324
+ } else {
1325
+ throw new UnexpectedTokenError();
1326
+ }
1327
+ break;
1328
+ case State.AfterAttributeValueInsideDoubleQuote:
1329
+ if (next = part.match(RE_DOUBLE_QUOTE)) {
1330
+ token = AttributeQuoteEnd;
1331
+ state = State.AfterAttributeValueClosingQuote;
1332
+ } else {
1333
+ throw new UnexpectedTokenError();
1334
+ }
1335
+ break;
1336
+ case State.AfterClosingTagName:
1337
+ if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1338
+ token = ClosingAngleBracket;
1339
+ state = State.TopLevelContent;
1340
+ } else if (next = part.match(RE_WHITESPACE)) {
1293
1341
  token = Content;
1294
1342
  state = State.TopLevelContent;
1295
- } else if (next = part.match(RE_ANGLE_BRACKET_OPEN)) {
1296
- token = Text;
1343
+ } else {
1344
+ throw new UnexpectedTokenError();
1345
+ }
1346
+ break;
1347
+ case State.AfterClosingTagSlash:
1348
+ if (next = part.match(RE_TAGNAME)) {
1349
+ token = TagNameEnd;
1350
+ state = State.AfterClosingTagName;
1351
+ } else if (next = part.match(RE_WHITESPACE)) {
1352
+ token = WhitespaceAfterClosingTagSlash;
1353
+ state = State.TopLevelContent;
1354
+ } else if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1355
+ token = ClosingAngleBracket;
1297
1356
  state = State.TopLevelContent;
1298
1357
  } else {
1299
1358
  throw new UnexpectedTokenError();
1300
1359
  }
1301
1360
  break;
1361
+ case State.AfterExclamationMark:
1362
+ if (next = part.match(RE_DASH_DASH)) {
1363
+ token = StartCommentDashes;
1364
+ state = State.InsideComment;
1365
+ } else if (next = part.match(RE_DOCTYPE)) {
1366
+ token = Doctype;
1367
+ state = State.InsideOpeningTag;
1368
+ } else {
1369
+ text.slice(index); // ?
1370
+ throw new UnexpectedTokenError();
1371
+ }
1372
+ break;
1302
1373
  case State.AfterOpeningAngleBracket:
1303
1374
  if (next = part.match(RE_TAGNAME)) {
1304
1375
  token = TagNameStart;
@@ -1323,15 +1394,14 @@ const tokenizeHtml = text => {
1323
1394
  throw new UnexpectedTokenError();
1324
1395
  }
1325
1396
  break;
1326
- case State.AfterExclamationMark:
1327
- if (next = part.match(RE_DASH_DASH)) {
1328
- token = StartCommentDashes;
1329
- state = State.InsideComment;
1330
- } else if (next = part.match(RE_DOCTYPE)) {
1331
- token = Doctype;
1332
- state = State.InsideOpeningTag;
1397
+ case State.InsideAttributeAfterDoubleQuote:
1398
+ if (next = text.slice(index).match(RE_ATTRIBUTE_VALUE_INSIDE_DOUBLE_QUOTE)) {
1399
+ token = AttributeValue;
1400
+ state = State.AfterAttributeValueInsideDoubleQuote;
1401
+ } else if (next = part.match(RE_DOUBLE_QUOTE)) {
1402
+ token = AttributeQuoteEnd;
1403
+ state = State.AfterAttributeValueClosingQuote;
1333
1404
  } else {
1334
- text.slice(index); // ?
1335
1405
  throw new UnexpectedTokenError();
1336
1406
  }
1337
1407
  break;
@@ -1380,92 +1450,22 @@ const tokenizeHtml = text => {
1380
1450
  throw new UnexpectedTokenError();
1381
1451
  }
1382
1452
  break;
1383
- case State.AfterAttributeName:
1384
- if (next = part.match(RE_EQUAL_SIGN)) {
1385
- token = AttributeEqualSign;
1386
- state = State.AfterAttributeEqualSign;
1387
- } else if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1388
- token = ClosingAngleBracket;
1389
- state = State.TopLevelContent;
1390
- } else if (next = part.match(RE_WHITESPACE)) {
1391
- token = WhitespaceInsideOpeningTag;
1392
- state = State.InsideOpeningTagAfterWhitespace;
1393
- } else if (next = part.match(RE_ANGLE_BRACKET_OPEN)) {
1453
+ case State.TopLevelContent:
1454
+ if (next = part.match(RE_ANGLE_BRACKET_OPEN_TAG)) {
1394
1455
  token = OpeningAngleBracket;
1395
1456
  state = State.AfterOpeningAngleBracket;
1396
- } else {
1397
- text.slice(index); // ?
1398
- throw new UnexpectedTokenError();
1399
- }
1400
- break;
1401
- case State.AfterAttributeEqualSign:
1402
- if (next = part.match(RE_DOUBLE_QUOTE)) {
1403
- token = AttributeQuoteStart;
1404
- state = State.InsideAttributeAfterDoubleQuote;
1405
- } else if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1406
- token = ClosingAngleBracket;
1407
- state = State.TopLevelContent;
1408
- } else if (next = part.match(RE_ATTRIBUTE_TEXT)) {
1409
- token = AttributeValue;
1410
- state = State.InsideOpeningTag;
1411
- } else {
1412
- throw new UnexpectedTokenError();
1413
- }
1414
- break;
1415
- case State.InsideAttributeAfterDoubleQuote:
1416
- if (next = text.slice(index).match(RE_ATTRIBUTE_VALUE_INSIDE_DOUBLE_QUOTE)) {
1417
- token = AttributeValue;
1418
- state = State.AfterAttributeValueInsideDoubleQuote;
1419
- } else if (next = part.match(RE_DOUBLE_QUOTE)) {
1420
- token = AttributeQuoteEnd;
1421
- state = State.AfterAttributeValueClosingQuote;
1422
- } else {
1423
- throw new UnexpectedTokenError();
1424
- }
1425
- break;
1426
- case State.AfterAttributeValueInsideDoubleQuote:
1427
- if (next = part.match(RE_DOUBLE_QUOTE)) {
1428
- token = AttributeQuoteEnd;
1429
- state = State.AfterAttributeValueClosingQuote;
1430
- } else {
1431
- throw new UnexpectedTokenError();
1432
- }
1433
- break;
1434
- case State.AfterAttributeValueClosingQuote:
1435
- if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1436
- token = ClosingAngleBracket;
1437
- state = State.TopLevelContent;
1438
- } else if (next = part.match(RE_WHITESPACE)) {
1439
- token = WhitespaceInsideOpeningTag;
1440
- state = State.InsideOpeningTagAfterWhitespace;
1441
- } else if (next = part.match(RE_SELF_CLOSING)) {
1442
- token = ClosingAngleBracket;
1443
- state = State.TopLevelContent;
1444
- } else {
1445
- throw new UnexpectedTokenError();
1446
- }
1447
- break;
1448
- case State.AfterClosingTagSlash:
1449
- if (next = part.match(RE_TAGNAME)) {
1450
- token = TagNameEnd;
1451
- state = State.AfterClosingTagName;
1452
- } else if (next = part.match(RE_WHITESPACE)) {
1453
- token = WhitespaceAfterClosingTagSlash;
1457
+ } else if (next = part.match(RE_CONTENT)) {
1458
+ token = Content;
1454
1459
  state = State.TopLevelContent;
1460
+ } else if (next = part.match(RE_BLOCK_COMMENT_START)) {
1461
+ token = CommentStart;
1462
+ state = State.InsideComment;
1455
1463
  } else if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1456
- token = ClosingAngleBracket;
1457
- state = State.TopLevelContent;
1458
- } else {
1459
- throw new UnexpectedTokenError();
1460
- }
1461
- break;
1462
- case State.AfterClosingTagName:
1463
- if (next = part.match(RE_ANGLE_BRACKET_CLOSE)) {
1464
- token = ClosingAngleBracket;
1465
- state = State.TopLevelContent;
1466
- } else if (next = part.match(RE_WHITESPACE)) {
1467
1464
  token = Content;
1468
1465
  state = State.TopLevelContent;
1466
+ } else if (next = part.match(RE_ANGLE_BRACKET_OPEN)) {
1467
+ token = Text;
1468
+ state = State.TopLevelContent;
1469
1469
  } else {
1470
1470
  throw new UnexpectedTokenError();
1471
1471
  }
@@ -1475,8 +1475,8 @@ const tokenizeHtml = text => {
1475
1475
  }
1476
1476
  const tokenText = next[0];
1477
1477
  tokens.push({
1478
- type: token,
1479
- text: tokenText
1478
+ text: tokenText,
1479
+ type: token
1480
1480
  });
1481
1481
  index += tokenText.length;
1482
1482
  }
@@ -1489,33 +1489,14 @@ const parseHtml = (html, allowedAttributes) => {
1489
1489
  const tokens = tokenizeHtml(html);
1490
1490
  const dom = [];
1491
1491
  const root = {
1492
- type: 0,
1493
- childCount: 0
1492
+ childCount: 0,
1493
+ type: 0
1494
1494
  };
1495
1495
  let current = root;
1496
1496
  const stack = [root];
1497
1497
  let attributeName = '';
1498
1498
  for (const token of tokens) {
1499
1499
  switch (token.type) {
1500
- case TagNameStart:
1501
- current.childCount++;
1502
- current = {
1503
- type: getVirtualDomTag(token.text),
1504
- childCount: 0
1505
- };
1506
- dom.push(current);
1507
- if (!isSelfClosingTag(token.text)) {
1508
- stack.push(current);
1509
- }
1510
- break;
1511
- case TagNameEnd:
1512
- stack.pop();
1513
- current = stack.at(-1) || root;
1514
- break;
1515
- case Content:
1516
- current.childCount++;
1517
- dom.push(text(parseText(token.text)));
1518
- break;
1519
1500
  case AttributeName:
1520
1501
  attributeName = token.text;
1521
1502
  if (attributeName === 'class') {
@@ -1528,6 +1509,25 @@ const parseHtml = (html, allowedAttributes) => {
1528
1509
  }
1529
1510
  attributeName = '';
1530
1511
  break;
1512
+ case Content:
1513
+ current.childCount++;
1514
+ dom.push(text(parseText(token.text)));
1515
+ break;
1516
+ case TagNameEnd:
1517
+ stack.pop();
1518
+ current = stack.at(-1) || root;
1519
+ break;
1520
+ case TagNameStart:
1521
+ current.childCount++;
1522
+ current = {
1523
+ childCount: 0,
1524
+ type: getVirtualDomTag(token.text)
1525
+ };
1526
+ dom.push(current);
1527
+ if (!isSelfClosingTag(token.text)) {
1528
+ stack.push(current);
1529
+ }
1530
+ break;
1531
1531
  }
1532
1532
  }
1533
1533
  return dom;
@@ -1538,11 +1538,11 @@ const getMarkdownVirtualDom = html => {
1538
1538
  const childDom = parseHtml(html, allowedMarkdownAttributes);
1539
1539
  const markdownChildCount = getVirtualDomChildCount(childDom);
1540
1540
  return [{
1541
- type: Div$1,
1541
+ childCount: markdownChildCount,
1542
1542
  className: Markdown,
1543
- role: Document,
1544
1543
  onContextMenu: HandleReadmeContextMenu,
1545
- childCount: markdownChildCount
1544
+ role: Document,
1545
+ type: Div$1
1546
1546
  }, ...childDom];
1547
1547
  };
1548
1548
 
@@ -3231,6 +3231,17 @@ const renderMarkdown$1 = async (markdown, options = {}) => {
3231
3231
  return localLink ? html : html.replace(RE_LINK_START, `<a target="_blank" rel="noreferrer noopener nofollow" `);
3232
3232
  };
3233
3233
  }
3234
+ const {
3235
+ baseUrl
3236
+ } = options;
3237
+ if (baseUrl) {
3238
+ const imageRenderer = renderer.image.bind(renderer);
3239
+ renderer.image = image => {
3240
+ image.href = new URL(image.href, baseUrl).toString();
3241
+ const html = imageRenderer(image);
3242
+ return html;
3243
+ };
3244
+ }
3234
3245
  const html = await k(markdown, {
3235
3246
  renderer
3236
3247
  });
@@ -3238,13 +3249,13 @@ const renderMarkdown$1 = async (markdown, options = {}) => {
3238
3249
  };
3239
3250
 
3240
3251
  const commandMap = {
3252
+ 'Markdown.getMarkDownVirtualDom': getMarkdownVirtualDom,
3241
3253
  'Markdown.getVirtualDom': getMarkdownVirtualDom,
3242
3254
  'Markdown.handleMessagePort': handleMessagePort,
3243
3255
  'Markdown.render': renderMarkdown$1,
3244
- 'Markdown.terminate': terminate,
3245
3256
  // deprecated
3246
3257
  'Markdown.renderMarkdown': renderMarkdown$1,
3247
- 'Markdown.getMarkDownVirtualDom': getMarkdownVirtualDom
3258
+ 'Markdown.terminate': terminate
3248
3259
  };
3249
3260
 
3250
3261
  const rpcs = Object.create(null);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/markdown-worker",
3
- "version": "2.2.0",
3
+ "version": "3.0.0",
4
4
  "description": "Markdown Worker",
5
5
  "repository": {
6
6
  "type": "git",