Просмотр исходного кода

support both of compressed/uncompressed data

Yuki Takei 3 лет назад
Родитель
Сommit
97d7befb54
1 измененных файлов с 19 добавлено и 22 удалено
  1. 19 22
      packages/remark-drawio/src/utils/embed.ts

+ 19 - 22
packages/remark-drawio/src/utils/embed.ts

@@ -2,16 +2,20 @@
 import pako from 'pako';
 import pako from 'pako';
 import xmldoc from 'xmldoc';
 import xmldoc from 'xmldoc';
 
 
-export const extractCodeFromMxfile = (input: string): string => {
+export const extractCodeFromCompressedInput = (input: string): string => {
   const doc = new xmldoc.XmlDocument(input);
   const doc = new xmldoc.XmlDocument(input);
   return doc.valueWithPath('diagram');
   return doc.valueWithPath('diagram');
 };
 };
 
 
-const validateInputData = (input: string): boolean => {
+const validateUncompressedData = (input: string): boolean => {
+  return new RegExp('/<mxGraphModel/').test(input);
+};
+
+const validateCompressedData = (input: string): boolean => {
   let data = input;
   let data = input;
 
 
   try {
   try {
-    data = extractCodeFromMxfile(data);
+    data = extractCodeFromCompressedInput(data);
   }
   }
   catch (e) {
   catch (e) {
     // ignore
     // ignore
@@ -65,27 +69,20 @@ export const generateMxgraphData = (code: string): string => {
     return '';
     return '';
   }
   }
 
 
-  validateInputData(trimedCode);
-
-  let xml;
-  try {
-    // may be XML Format <mxfile><diagram> ... </diagram></mxfile>
-    const doc = new xmldoc.XmlDocument(trimedCode);
-    const diagram = doc.valueWithPath('diagram');
-    if (diagram) {
-      xml = trimedCode;
-    }
-  }
-  catch (e) {
-    // may be NOT XML Format
-    xml = `
-<mxfile version="6.8.9" editor="www.draw.io" type="atlas">
-  <mxAtlasLibraries/>
-  <diagram>${trimedCode}</diagram>
-</mxfile>
-`;
+  // Evaluate the code is whether uncompressed data that are generated by v21.1.0 or above
+  // see: https://github.com/jgraph/drawio/issues/3106#issuecomment-1479352026
+  const isUncompressedData = validateUncompressedData(trimedCode);
+  if (isUncompressedData) {
+    validateCompressedData(trimedCode);
   }
   }
 
 
+  const xml = `
+    <mxfile version="6.8.9" editor="www.draw.io" type="atlas">
+      <mxAtlasLibraries/>
+      <diagram>${isUncompressedData ? xmldoc.XmlDocument(trimedCode) : trimedCode}</diagram>
+    </mxfile>
+  `;
+
   // see options: https://drawio.freshdesk.com/support/solutions/articles/16000042542-embed-html
   // see options: https://drawio.freshdesk.com/support/solutions/articles/16000042542-embed-html
   const mxGraphData = {
   const mxGraphData = {
     editable: false,
     editable: false,