Skip to content

Commit 0a6ec06

Browse files
committed
Add function to generate filename from manifest.
We were doing this in two separate places; better to only do it in one!
1 parent 66700a2 commit 0a6ec06

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/replay.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { BlobReader, TextWriter, ZipReader } from '@zip.js/zip.js';
2+
import dayjs from './dates.js';
23
import { diff, patch } from './diffs.js';
34

45
export const REPLAY_FRAME_REGEX = /^([0-9]{5,11})(i?).json$/;
@@ -197,3 +198,8 @@ export const loadReplayFromFile = async(file) => {
197198
await replay._init();
198199
return replay;
199200
};
201+
202+
export const filenameFromManifest = (manifest, extension = 'zip') => {
203+
const startTime = dayjs(manifest.startTime * 1000);
204+
return `${startTime.format('YYYY-MM-DD HH-mm')} ${manifest.name} - ${manifest.description}.${extension}`.replaceAll(/[\\/]/g, '_');
205+
};

src/tests/replay.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createIframe } from '../replay.js';
1+
import { createIframe, filenameFromManifest } from '../replay.js';
22

33
describe('Replay module', () => {
44
describe('creation of iframes', () => {
@@ -32,4 +32,17 @@ describe('Replay module', () => {
3232
expect(iframe.messages[0]).toEqual([12345, 'foo', 'bar']);
3333
});
3434
});
35+
36+
describe('#filenameFromManifest', () => {
37+
it('suggests a filename', () => {
38+
const manifest = {
39+
startTime: new Date('2025-01-31 12:34:56 +00:00').getTime() / 1000,
40+
name: 'Service Name',
41+
description: 'Description with invalid/unwanted characters'
42+
};
43+
44+
const filename = filenameFromManifest(manifest, 'ext');
45+
expect(filename).toEqual('2025-01-31 12-34 Service Name - Description with invalid_unwanted characters.ext');
46+
});
47+
});
3548
});

0 commit comments

Comments
 (0)