From 86a27d4f39210270f589c91290468b90896b2ebb Mon Sep 17 00:00:00 2001 From: Adam Weeden Date: Mon, 31 May 2021 23:27:32 -0400 Subject: [PATCH] =?UTF-8?q?Allow=20non-ascii=20app=20names=20like=20?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=AF=BB=E4=B9=A6=20(fix=20#1056)=20(#1207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Resolves #1056 Allow non-ascii app names like 微信读书 * Update src/utils/sanitizeFilename.ts Co-authored-by: Ronan Jouchet * Fix prettier Co-authored-by: Ronan Jouchet --- src/utils/sanitizeFilename.test.ts | 20 ++++++++++++++------ src/utils/sanitizeFilename.ts | 18 ++++++++---------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/utils/sanitizeFilename.test.ts b/src/utils/sanitizeFilename.test.ts index 6bce560..55cf69a 100644 --- a/src/utils/sanitizeFilename.test.ts +++ b/src/utils/sanitizeFilename.test.ts @@ -1,17 +1,25 @@ import { sanitizeFilename } from './sanitizeFilename'; import { DEFAULT_APP_NAME } from '../constants'; -describe('replacing non ascii characters', () => { - const nonAscii = '�'; - test('it should return a result without non ascii characters', () => { - const param = `${nonAscii}abc`; +describe('replacing reserved characters', () => { + const reserved = '\\/?*<>:|'; + + test('it should return a result without reserved characters', () => { const expectedResult = 'abc'; + const param = `${reserved}${expectedResult}`; const result = sanitizeFilename('', param); expect(result).toBe(expectedResult); }); - describe('when the result of replacing these characters is empty', () => { - const result = sanitizeFilename('', nonAscii); + test('it should allow non-ascii characters', () => { + const expectedResult = '微信读书'; + const param = `${reserved}${expectedResult}`; + const result = sanitizeFilename('', param); + expect(result).toBe(expectedResult); + }); + + test('when the result of replacing these characters is empty, use default', () => { + const result = sanitizeFilename('', reserved); expect(result).toBe(DEFAULT_APP_NAME); }); }); diff --git a/src/utils/sanitizeFilename.ts b/src/utils/sanitizeFilename.ts index 4c0a089..bde0684 100644 --- a/src/utils/sanitizeFilename.ts +++ b/src/utils/sanitizeFilename.ts @@ -1,27 +1,25 @@ import * as log from 'loglevel'; +import sanitize = require('sanitize-filename'); import { DEFAULT_APP_NAME } from '../constants'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const sanitize = require('sanitize-filename'); - export function sanitizeFilename( platform: string, filenameToSanitize: string, ): string { let result: string = sanitize(filenameToSanitize); - // remove all non ascii / file-problematic chars, or use default app name - /* eslint-disable no-control-regex */ - result = - result.replace(/[^\x00-\x7F]/g, '').replace(/[/,;.\\]/g, '') || - DEFAULT_APP_NAME; - /* eslint-enable no-control-regex */ - // spaces will cause problems with Ubuntu when pinned to the dock if (platform === 'linux') { result = result.replace(/\s/g, ''); } + + if (!result || result === '') { + result = DEFAULT_APP_NAME; + log.warn( + 'Falling back to default app name as result of filename sanitization. Use flag "--name" to set a name', + ); + } log.debug(`Sanitized filename for ${filenameToSanitize} : ${result}`); return result; }