diff --git a/README.md b/README.md
index d443d5c..a918ec7 100644
--- a/README.md
+++ b/README.md
@@ -329,6 +329,13 @@ Pake's development can not be without these Hackers. They contributed a lot of c
Yi Xin
+
+
+
+
+ Yue Yang
+
+ |
@@ -349,15 +356,15 @@ Pake's development can not be without these Hackers. They contributed a lot of c
2nthony
- |
+
+
Null
- |
-
+
@@ -399,15 +406,15 @@ Pake's development can not be without these Hackers. They contributed a lot of c
Imgbot
- |
+
+
Jiaqi Gu
- |
-
+
@@ -449,15 +456,15 @@ Pake's development can not be without these Hackers. They contributed a lot of c
Hyzhao
- |
+
+
Null
- |
-
+
diff --git a/bin/cli.ts b/bin/cli.ts
index a639350..f295a3b 100644
--- a/bin/cli.ts
+++ b/bin/cli.ts
@@ -22,7 +22,16 @@ program.addHelpText('beforeAll', logo).usage(`[url] [options]`).showHelpAfterErr
program
.argument('[url]', 'The web URL you want to package', validateUrlInput)
- .option('--name ', 'Application name')
+ // Refer to https://github.com/tj/commander.js#custom-option-processing, turn string array into a string connected with custom connectors.
+ // If the platform is Linux, use `-` as the connector, and convert all characters to lowercase.
+ // For example, Google Translate will become google-translate.
+ .option('--name ', 'Application name', (value, previous) => {
+ const platform = process.platform
+ const connector = platform === 'linux' ? '-' : ' '
+ const name = previous === undefined ? value : `${previous}${connector}${value}`
+
+ return platform === 'linux' ? name.toLowerCase() : name
+ })
.option('--icon ', 'Application icon', DEFAULT.icon)
.option('--width ', 'Window width', validateNumberInput, DEFAULT.width)
.option('--height ', 'Window height', validateNumberInput, DEFAULT.height)
diff --git a/bin/options/index.ts b/bin/options/index.ts
index dc90f54..f1295df 100644
--- a/bin/options/index.ts
+++ b/bin/options/index.ts
@@ -13,8 +13,8 @@ function resolveAppName(name: string, platform: NodeJS.Platform): string {
function isValidName(name: string, platform: NodeJS.Platform): boolean {
const platformRegexMapping: PlatformMap = {
- linux: /^[a-z0-9]+(-[a-z0-9]+)*$/,
- default: /^[a-zA-Z0-9]+([-a-zA-Z0-9])*$/,
+ linux: /^[a-z0-9][a-z0-9-]*$/,
+ default: /^[a-zA-Z0-9][a-zA-Z0-9- ]*$/,
};
const reg = platformRegexMapping[platform] || platformRegexMapping.default;
return !!name && reg.test(name);
@@ -34,8 +34,8 @@ export default async function handleOptions(options: PakeCliOptions, url: string
}
if (!isValidName(name, platform)) {
- const LINUX_NAME_ERROR = `✕ name should only include lowercase letters, numbers, and dashes, and must contain at least one lowercase letter. Examples: com-123-xxx, 123pan, pan123, weread, we-read.`;
- const DEFAULT_NAME_ERROR = `✕ Name should only include letters and numbers, and dashes (dashes must not at the beginning), and must contain at least one letter. Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead, we-read.`;
+ const LINUX_NAME_ERROR = `✕ Name should only include lowercase letters, numbers, and dashes (not leading dashes), and must contain at least one lowercase letter or number. Examples: com-123-xxx, 123pan, pan123, weread, we-read.`;
+ const DEFAULT_NAME_ERROR = `✕ Name should only include letters, numbers, dashes, and spaces (not leading dashes and spaces), and must contain at least one letter or number. Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead, we-read, We Read.`;
const errorMsg = platform === 'linux' ? LINUX_NAME_ERROR : DEFAULT_NAME_ERROR;
logger.error(errorMsg);
if (isActions) {
diff --git a/dist/cli.js b/dist/cli.js
index 450b10c..33de9ce 100644
--- a/dist/cli.js
+++ b/dist/cli.js
@@ -909,8 +909,8 @@ function resolveAppName(name, platform) {
}
function isValidName(name, platform) {
const platformRegexMapping = {
- linux: /^[a-z0-9]+(-[a-z0-9]+)*$/,
- default: /^[a-zA-Z0-9]+([-a-zA-Z0-9])*$/,
+ linux: /^[a-z0-9][a-z0-9-]*$/,
+ default: /^[a-zA-Z0-9][a-zA-Z0-9- ]*$/,
};
const reg = platformRegexMapping[platform] || platformRegexMapping.default;
return !!name && reg.test(name);
@@ -927,8 +927,8 @@ async function handleOptions(options, url) {
name = namePrompt || defaultName;
}
if (!isValidName(name, platform)) {
- const LINUX_NAME_ERROR = `✕ name should only include lowercase letters, numbers, and dashes, and must contain at least one lowercase letter. Examples: com-123-xxx, 123pan, pan123, weread, we-read.`;
- const DEFAULT_NAME_ERROR = `✕ Name should only include letters and numbers, and dashes (dashes must not at the beginning), and must contain at least one letter. Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead, we-read.`;
+ const LINUX_NAME_ERROR = `✕ Name should only include lowercase letters, numbers, and dashes (not leading dashes), and must contain at least one lowercase letter or number. Examples: com-123-xxx, 123pan, pan123, weread, we-read.`;
+ const DEFAULT_NAME_ERROR = `✕ Name should only include letters, numbers, dashes, and spaces (not leading dashes and spaces), and must contain at least one letter or number. Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead, we-read, We Read.`;
const errorMsg = platform === 'linux' ? LINUX_NAME_ERROR : DEFAULT_NAME_ERROR;
logger.error(errorMsg);
if (isActions) {
@@ -978,7 +978,15 @@ ${green('|_| \\__,_|_|\\_\\___| can turn any webpage into a desktop app with
program.addHelpText('beforeAll', logo).usage(`[url] [options]`).showHelpAfterError();
program
.argument('[url]', 'The web URL you want to package', validateUrlInput)
- .option('--name ', 'Application name')
+ // Refer to https://github.com/tj/commander.js#custom-option-processing, turn string array into a string connected with custom connectors.
+ // If the platform is Linux, use `-` as the connector, and convert all characters to lowercase.
+ // For example, Google Translate will become google-translate.
+ .option('--name ', 'Application name', (value, previous) => {
+ const platform = process.platform;
+ const connector = platform === 'linux' ? '-' : ' ';
+ const name = previous === undefined ? value : `${previous}${connector}${value}`;
+ return platform === 'linux' ? name.toLowerCase() : name;
+})
.option('--icon ', 'Application icon', DEFAULT_PAKE_OPTIONS.icon)
.option('--width ', 'Window width', validateNumberInput, DEFAULT_PAKE_OPTIONS.width)
.option('--height ', 'Window height', validateNumberInput, DEFAULT_PAKE_OPTIONS.height)
|