From de096ff4a8f1777382254d58a89093ce4c667ea3 Mon Sep 17 00:00:00 2001 From: chen zhihao <2490284538@qq.com> Date: Tue, 1 Sep 2026 10:53:47 +0800 Subject: [PATCH] fix: address nested playlist review feedback --- scripts/utils.ts | 12 +++++------- .../nested/nested.m3u | 0 tests/commands/playlist/format.test.ts | 18 ++++++++---------- 3 files changed, 13 insertions(+), 17 deletions(-) rename tests/__data__/input/{playlist_paths => playlist_format}/nested/nested.m3u (100%) diff --git a/scripts/utils.ts b/scripts/utils.ts index db9055e1d8..40108faeec 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -45,17 +45,15 @@ export function normalizeURL(url: string): string { } export function getStoragePath(filepath: string, rootDir: string): string { - const relative = path.relative(path.resolve(rootDir), path.resolve(filepath)) + const root = path.resolve(rootDir) + const target = path.resolve(path.isAbsolute(filepath) ? filepath : path.join(root, filepath)) + const relative = path.relative(root, target) - if (relative && relative !== '..' && !relative.startsWith(`..${path.sep}`)) { - return relative - } - - if (path.isAbsolute(filepath) || filepath === '..' || filepath.startsWith(`..${path.sep}`)) { + if (relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) { throw new Error(`Filepath "${filepath}" is outside the storage directory`) } - return filepath + return relative } export function truncate(string: string, limit: number = 100) { diff --git a/tests/__data__/input/playlist_paths/nested/nested.m3u b/tests/__data__/input/playlist_format/nested/nested.m3u similarity index 100% rename from tests/__data__/input/playlist_paths/nested/nested.m3u rename to tests/__data__/input/playlist_format/nested/nested.m3u diff --git a/tests/commands/playlist/format.test.ts b/tests/commands/playlist/format.test.ts index 51bf1e261f..bf1fc0b420 100644 --- a/tests/commands/playlist/format.test.ts +++ b/tests/commands/playlist/format.test.ts @@ -30,18 +30,16 @@ describe('playlist:format', () => { ) }) }) - it('formats playlists in nested directories', () => { - fs.emptyDirSync('tests/__data__/output') - fs.copySync('tests/__data__/input/playlist_paths', 'tests/__data__/output/streams') - - const cmd = - 'cross-env STREAMS_DIR=tests/__data__/output/streams DATA_DIR=tests/__data__/input/data npm run playlist:format' + it('formats playlists in nested directories', () => { + const cmd = `${ENV_VAR} npm run playlist:format` execSync(cmd, { encoding: 'utf8' }) - const output = content('tests/__data__/output/streams/nested/nested.m3u') - expect(output.indexOf(',Alpha (720p)')).toBeLessThan(output.indexOf(',Zulu (720p)')) - }) -}) + const output = content('tests/__data__/output/streams/nested/nested.m3u') + expect(output).toContain(',Alpha (720p)') + expect(output).toContain(',Zulu (720p)') + expect(output.indexOf(',Alpha (720p)')).toBeLessThan(output.indexOf(',Zulu (720p)')) + }) +}) function content(filepath: string) { return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' })