|
6 | 6 | isURLObjectRelative, |
7 | 7 | parseStringToURLObject, |
8 | 8 | parseUrl, |
| 9 | + stripDataUrlContent, |
9 | 10 | stripUrlQueryAndFragment, |
10 | 11 | } from '../../../src/utils/url'; |
11 | 12 |
|
@@ -638,3 +639,46 @@ describe('getHttpSpanDetailsFromUrlObject', () => { |
638 | 639 | }); |
639 | 640 | }); |
640 | 641 | }); |
| 642 | + |
| 643 | +describe('stripDataUrlContent', () => { |
| 644 | + it('returns regular URLs unchanged', () => { |
| 645 | + expect(stripDataUrlContent('https://example.com/api')).toBe('https://example.com/api'); |
| 646 | + expect(stripDataUrlContent('http://localhost:3000/test')).toBe('http://localhost:3000/test'); |
| 647 | + expect(stripDataUrlContent('/relative/path')).toBe('/relative/path'); |
| 648 | + }); |
| 649 | + |
| 650 | + it('strips content from base64 data URLs', () => { |
| 651 | + expect(stripDataUrlContent('data:text/javascript;base64,SGVsbG8gV29ybGQ=')).toBe('<data:text/javascript,base64>'); |
| 652 | + expect(stripDataUrlContent('data:application/json;base64,eyJrZXkiOiJ2YWx1ZSJ9')).toBe( |
| 653 | + '<data:application/json,base64>', |
| 654 | + ); |
| 655 | + expect(stripDataUrlContent('data:text/html;base64,PGh0bWw+PC9odG1sPg==')).toBe('<data:text/html,base64>'); |
| 656 | + }); |
| 657 | + |
| 658 | + it('strips content from non-base64 data URLs', () => { |
| 659 | + expect(stripDataUrlContent('data:text/plain,Hello%20World')).toBe('<data:text/plain>'); |
| 660 | + expect(stripDataUrlContent('data:text/html,<h1>Hello</h1>')).toBe('<data:text/html>'); |
| 661 | + }); |
| 662 | + |
| 663 | + it('handles data URLs with various MIME types', () => { |
| 664 | + expect(stripDataUrlContent('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA')).toBe('<data:image/png,base64>'); |
| 665 | + expect(stripDataUrlContent('data:image/svg+xml;base64,PHN2Zz4=')).toBe('<data:image/svg+xml,base64>'); |
| 666 | + expect(stripDataUrlContent('data:application/octet-stream;base64,AQIDBA==')).toBe( |
| 667 | + '<data:application/octet-stream,base64>', |
| 668 | + ); |
| 669 | + }); |
| 670 | + |
| 671 | + it('defaults to text/plain for data URLs without MIME type', () => { |
| 672 | + expect(stripDataUrlContent('data:,Hello')).toBe('<data:text/plain>'); |
| 673 | + expect(stripDataUrlContent('data:;base64,SGVsbG8=')).toBe('<data:text/plain,base64>'); |
| 674 | + }); |
| 675 | + |
| 676 | + it('handles empty data URLs', () => { |
| 677 | + expect(stripDataUrlContent('data:')).toBe('<data:text/plain>'); |
| 678 | + }); |
| 679 | + |
| 680 | + it('handles very long base64 encoded data URLs', () => { |
| 681 | + const longBase64 = 'A'.repeat(10000); |
| 682 | + expect(stripDataUrlContent(`data:text/javascript;base64,${longBase64}`)).toBe('<data:text/javascript,base64>'); |
| 683 | + }); |
| 684 | +}); |
0 commit comments