1234567891011121314151617181920212223242526272829303132333435 |
- /**
- * Downloads a JSON object.
- *
- * @param {Object} json - The JSON object to download.
- * @param {string} filename - The filename to give to the downloaded file.
- * @returns {void}
- */
- export function downloadJSON(json: Object, filename: string): void {
- const replacer = () => {
- const seen = new WeakSet();
-
- return (_: any, value: any) => {
- if (typeof value === 'object' && value !== null) {
- if (seen.has(value)) {
- return '[circular ref]';
- }
- seen.add(value);
- }
-
- return value;
- };
- };
- const data = encodeURIComponent(JSON.stringify(json, replacer(), ' '));
-
- const elem = document.createElement('a');
-
- elem.download = filename;
- elem.href = `data:application/json;charset=utf-8,\n${data}`;
- elem.dataset.downloadurl = [ 'text/json', elem.download, elem.href ].join(':');
- elem.dispatchEvent(new MouseEvent('click', {
- view: window,
- bubbles: true,
- cancelable: false
- }));
- }
|