Merge branch 'master' into dependabot/npm_and_yarn/fstream-1.0.12
This commit is contained in:
		
						commit
						6c120ccba0
					
				
					 4 changed files with 33 additions and 17 deletions
				
			
		| 
						 | 
					@ -7,9 +7,9 @@ const MagicalStringOfWonders = "~::~MAAAGIC~::~";
 | 
				
			||||||
/* tslint:disable no-use-before-declare */
 | 
					/* tslint:disable no-use-before-declare */
 | 
				
			||||||
export class V2XmlFormatter implements XmlFormatter {
 | 
					export class V2XmlFormatter implements XmlFormatter {
 | 
				
			||||||
    formatXml(xml: string, options: XmlFormattingOptions): string {
 | 
					    formatXml(xml: string, options: XmlFormattingOptions): string {
 | 
				
			||||||
        // this replaces all "<" brackets inside of comments to a magical string
 | 
					        // this replaces all "<" brackets inside of comments and CDATA to a magical string
 | 
				
			||||||
        // so the following minification steps don't mess with comment formatting
 | 
					        // so the following minification steps don't mess with comment and CDATA formatting
 | 
				
			||||||
        xml = this._sanitizeComments(xml);
 | 
					        xml = this._sanitizeCommentsAndCDATA(xml);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // remove whitespace from between tags, except for line breaks
 | 
					        // remove whitespace from between tags, except for line breaks
 | 
				
			||||||
        xml = xml.replace(/>\s{0,}</g, (match: string) => {
 | 
					        xml = xml.replace(/>\s{0,}</g, (match: string) => {
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ export class V2XmlFormatter implements XmlFormatter {
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // the coast is clear - we can drop those "<" brackets back in
 | 
					        // the coast is clear - we can drop those "<" brackets back in
 | 
				
			||||||
        xml = this._unsanitizeComments(xml);
 | 
					        xml = this._unsanitizeCommentsAndCDATA(xml);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let output = "";
 | 
					        let output = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -298,9 +298,9 @@ export class V2XmlFormatter implements XmlFormatter {
 | 
				
			||||||
        return text.replace(/[^\r\n\S]+$/, "");
 | 
					        return text.replace(/[^\r\n\S]+$/, "");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private _sanitizeComments(xml: string): string {
 | 
					    private _sanitizeCommentsAndCDATA(xml: string): string {
 | 
				
			||||||
        let output = "";
 | 
					        let output = "";
 | 
				
			||||||
        let inComment = false;
 | 
					        let inCommentOrCDATA = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (let i = 0; i < xml.length; i++) {
 | 
					        for (let i = 0; i < xml.length; i++) {
 | 
				
			||||||
            const cc = xml[i];
 | 
					            const cc = xml[i];
 | 
				
			||||||
| 
						 | 
					@ -308,20 +308,20 @@ export class V2XmlFormatter implements XmlFormatter {
 | 
				
			||||||
            const nnc = xml.charAt(i + 2);
 | 
					            const nnc = xml.charAt(i + 2);
 | 
				
			||||||
            const pc = xml.charAt(i - 1);
 | 
					            const pc = xml.charAt(i - 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!inComment && cc === "<" && nc === "!" && nnc === "-") {
 | 
					            if (!inCommentOrCDATA && cc === "<" && nc === "!" && (nnc === "-" || nnc === "[")) {
 | 
				
			||||||
                inComment = true;
 | 
					                inCommentOrCDATA = true;
 | 
				
			||||||
                output += "<!--";
 | 
					                output += (nnc === "-") ? "<!--" : "<![CDATA[";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                i += 3;
 | 
					                i += (nnc === "-") ? 3 : 8;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            else if (inComment && cc === "<") {
 | 
					            else if (inCommentOrCDATA && cc === "<") {
 | 
				
			||||||
                output += MagicalStringOfWonders;
 | 
					                output += MagicalStringOfWonders;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            else if (inComment && cc === "-" && nc === "-" && nnc === ">") {
 | 
					            else if (inCommentOrCDATA && (cc === "-" && nc === "-" && nnc === ">") || (cc === "]" && nc === "]" && nnc === ">")) {
 | 
				
			||||||
                inComment = false;
 | 
					                inCommentOrCDATA = false;
 | 
				
			||||||
                output += "-->";
 | 
					                output += (cc === "-") ? "-->" : "]]>";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                i += 2;
 | 
					                i += 2;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -334,7 +334,7 @@ export class V2XmlFormatter implements XmlFormatter {
 | 
				
			||||||
        return output;
 | 
					        return output;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private _unsanitizeComments(xml: string): string {
 | 
					    private _unsanitizeCommentsAndCDATA(xml: string): string {
 | 
				
			||||||
        return xml.replace(new RegExp(MagicalStringOfWonders, "g"), "<");
 | 
					        return xml.replace(new RegExp(MagicalStringOfWonders, "g"), "<");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -99,6 +99,10 @@ describe("V2XmlFormatter", () => {
 | 
				
			||||||
        it("should handle mixed content as a child of another element", () => {
 | 
					        it("should handle mixed content as a child of another element", () => {
 | 
				
			||||||
            testFormatter(xmlFormatter, options, "issue-257");
 | 
					            testFormatter(xmlFormatter, options, "issue-257");
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it("should not touch CDATA content", () => {
 | 
				
			||||||
 | 
					            testFormatter(xmlFormatter, options, "issue-293");
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    describe("#minifyXml(xml, options)", () => {
 | 
					    describe("#minifyXml(xml, options)", () => {
 | 
				
			||||||
| 
						 | 
					@ -130,7 +134,7 @@ function testFormatter(xmlFormatter: XmlFormatter, options: XmlFormattingOptions
 | 
				
			||||||
    const actualFormattedXml = xmlFormatter.formatXml(unformattedXml, options).replace(/\r/g, "");
 | 
					    const actualFormattedXml = xmlFormatter.formatXml(unformattedXml, options).replace(/\r/g, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // tslint:disable-next-line
 | 
					    // tslint:disable-next-line
 | 
				
			||||||
    assert.ok((actualFormattedXml === expectedFormattedXml), `Actual formatted XML does not match expected formatted XML.\n\nACTUAL\n${actualFormattedXml.replace(/\s/, "~ws~")}\n\nEXPECTED\n${expectedFormattedXml.replace(/\s/, "~ws~")}`);
 | 
					    assert.ok((actualFormattedXml === expectedFormattedXml), `Actual formatted XML does not match expected formatted XML.\n\nACTUAL\n${actualFormattedXml.replace(/\s/g, "~ws~")}\n\nEXPECTED\n${expectedFormattedXml.replace(/\s/g, "~ws~")}`);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function testMinifier(xmlFormatter: XmlFormatter, options: XmlFormattingOptions, fileLabel: string): void {
 | 
					function testMinifier(xmlFormatter: XmlFormatter, options: XmlFormattingOptions, fileLabel: string): void {
 | 
				
			||||||
| 
						 | 
					@ -140,5 +144,5 @@ function testMinifier(xmlFormatter: XmlFormatter, options: XmlFormattingOptions,
 | 
				
			||||||
    const actualMinifiedXml = xmlFormatter.minifyXml(unminifiedXml, options).replace(/\r/g, "");
 | 
					    const actualMinifiedXml = xmlFormatter.minifyXml(unminifiedXml, options).replace(/\r/g, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // tslint:disable-next-line
 | 
					    // tslint:disable-next-line
 | 
				
			||||||
    assert.ok((actualMinifiedXml === expectedMinifiedXml), `Actual minified XML does not match expected minified XML.\n\nACTUAL\n${actualMinifiedXml.replace(/\s/, "~ws~")}\n\nEXPECTED\n${expectedMinifiedXml.replace(/\s/, "~ws~")}`);
 | 
					    assert.ok((actualMinifiedXml === expectedMinifiedXml), `Actual minified XML does not match expected minified XML.\n\nACTUAL\n${actualMinifiedXml.replace(/\s/g, "~ws~")}\n\nEXPECTED\n${expectedMinifiedXml.replace(/\s/g, "~ws~")}`);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										6
									
								
								src/test/test-data/issue-293.formatted.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/test/test-data/issue-293.formatted.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					<xml>
 | 
				
			||||||
 | 
					    <element><![CDATA[asdf]]></element>
 | 
				
			||||||
 | 
					    <element><![CDATA[<secondXml>
 | 
				
			||||||
 | 
					    <formattedNode>val</formattedNode>
 | 
				
			||||||
 | 
					</secondXml>]]></element>
 | 
				
			||||||
 | 
					</xml>
 | 
				
			||||||
							
								
								
									
										6
									
								
								src/test/test-data/issue-293.unformatted.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/test/test-data/issue-293.unformatted.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					<xml>
 | 
				
			||||||
 | 
					    <element><![CDATA[asdf]]></element>
 | 
				
			||||||
 | 
					    <element><![CDATA[<secondXml>
 | 
				
			||||||
 | 
					    <formattedNode>val</formattedNode>
 | 
				
			||||||
 | 
					</secondXml>]]></element>
 | 
				
			||||||
 | 
					</xml>
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue