Merge remote-tracking branch 'origin/master' into dev
This commit is contained in:
88
bin/cli.ts
vendored
88
bin/cli.ts
vendored
@@ -1,53 +1,49 @@
|
||||
import chalk from 'chalk';
|
||||
import { program } from 'commander';
|
||||
import log from 'loglevel';
|
||||
import chalk from 'chalk';
|
||||
import { DEFAULT_PAKE_OPTIONS } from './defaults.js';
|
||||
import { PakeCliOptions } from './types.js';
|
||||
import { validateNumberInput, validateUrlInput } from './utils/validate.js';
|
||||
import handleInputOptions from './options/index.js';
|
||||
import BuilderFactory from './builders/BuilderFactory.js';
|
||||
import { checkUpdateTips } from './helpers/updater.js';
|
||||
// @ts-expect-error
|
||||
import packageJson from '../package.json';
|
||||
import logger from './options/logger.js';
|
||||
import BuilderProvider from './builders/BuilderProvider';
|
||||
import { DEFAULT_PAKE_OPTIONS as DEFAULT } from './defaults';
|
||||
import { checkUpdateTips } from './helpers/updater';
|
||||
import handleInputOptions from './options/index';
|
||||
|
||||
program.version(packageJson.version).description('A cli application can package a web page to desktop application.');
|
||||
import { PakeCliOptions } from './types';
|
||||
import { validateNumberInput, validateUrlInput } from './utils/validate';
|
||||
|
||||
program
|
||||
.showHelpAfterError()
|
||||
.argument('[url]', 'the web url you want to package', validateUrlInput)
|
||||
.option('--name <string>', 'application name')
|
||||
.option('--icon <string>', 'application icon', DEFAULT_PAKE_OPTIONS.icon)
|
||||
.option('--height <number>', 'window height', validateNumberInput, DEFAULT_PAKE_OPTIONS.height)
|
||||
.option('--width <number>', 'window width', validateNumberInput, DEFAULT_PAKE_OPTIONS.width)
|
||||
.option('--no-resizable', 'whether the window can be resizable', DEFAULT_PAKE_OPTIONS.resizable)
|
||||
.option('--fullscreen', 'makes the packaged app start in full screen', DEFAULT_PAKE_OPTIONS.fullscreen)
|
||||
.option('--transparent', 'transparent title bar', DEFAULT_PAKE_OPTIONS.transparent)
|
||||
.option('--user-agent <string>', 'custom user agent', DEFAULT_PAKE_OPTIONS.userAgent)
|
||||
.option('--show-menu', 'show menu in app', DEFAULT_PAKE_OPTIONS.showMenu)
|
||||
.option('--show-system-tray', 'show system tray in app', DEFAULT_PAKE_OPTIONS.showSystemTray)
|
||||
.option('--system-tray-icon <string>', 'custom system tray icon', DEFAULT_PAKE_OPTIONS.systemTrayIcon)
|
||||
.option('--iter-copy-file',
|
||||
'copy all static file to pake app when url is a local file',
|
||||
DEFAULT_PAKE_OPTIONS.iterCopyFile)
|
||||
.option(
|
||||
'-m, --multi-arch',
|
||||
"available for Mac only, and supports both Intel and M1",
|
||||
DEFAULT_PAKE_OPTIONS.multiArch
|
||||
)
|
||||
.option(
|
||||
'--targets <string>',
|
||||
'only for linux, default is "deb", option "appaimge" or "all"(deb & appimage)',
|
||||
DEFAULT_PAKE_OPTIONS.targets
|
||||
)
|
||||
.option('--debug', 'debug', DEFAULT_PAKE_OPTIONS.transparent)
|
||||
.option('--inject [injects...]', 'inject .js or .css for this app', DEFAULT_PAKE_OPTIONS.inject)
|
||||
.description(chalk.green('Pake can turn any webpage into a desktop app with Rust.'))
|
||||
.usage('[url] [options]')
|
||||
.showHelpAfterError();
|
||||
|
||||
program
|
||||
.argument('[url]', 'The web URL you want to package', validateUrlInput)
|
||||
.option('--name <string>', 'Application name')
|
||||
.option('--icon <string>', 'Application icon', DEFAULT.icon)
|
||||
.option('--width <number>', 'Window width', validateNumberInput, DEFAULT.width)
|
||||
.option('--height <number>', 'Window height', validateNumberInput, DEFAULT.height)
|
||||
.option('--transparent', 'Only for Mac, hide title bar', DEFAULT.transparent)
|
||||
.option('--fullscreen', 'Start in full screen', DEFAULT.fullscreen)
|
||||
.option('--user-agent <string>', 'Custom user agent', DEFAULT.userAgent)
|
||||
.option('--show-menu', 'Show menu in app', DEFAULT.showMenu)
|
||||
.option('--show-system-tray', 'Show system tray in app', DEFAULT.showSystemTray)
|
||||
.option('--system-tray-icon <string>', 'Custom system tray icon', DEFAULT.systemTrayIcon)
|
||||
.option('--iter-copy-file', 'Copy files when URL is a local file', DEFAULT.iterCopyFile)
|
||||
.option('--multi-arch', 'Only for Mac, supports both Intel and M1', DEFAULT.multiArch)
|
||||
.option('--targets <string>', 'Only for Linux, option "deb" or "appimage"', DEFAULT.targets)
|
||||
.option('--inject [injects...]', 'inject .js or .css for this app', DEFAULT.inject)
|
||||
.option('--debug', 'Debug mode', DEFAULT.debug)
|
||||
.version(packageJson.version, '-v, --version', 'Output the current version')
|
||||
.action(async (url: string, options: PakeCliOptions) => {
|
||||
checkUpdateTips();
|
||||
await checkUpdateTips();
|
||||
|
||||
if (!url) {
|
||||
// 直接 pake 不需要出现url提示
|
||||
program.help();
|
||||
program.outputHelp(str => {
|
||||
return str
|
||||
.split('\n')
|
||||
.filter(line => !/((-h,|--help)|((-v|-V),|--version))\s+.+$/.test(line))
|
||||
.join('\n');
|
||||
});
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
log.setDefaultLevel('info');
|
||||
@@ -55,12 +51,12 @@ program
|
||||
log.setLevel('debug');
|
||||
}
|
||||
|
||||
const builder = BuilderFactory.create();
|
||||
await builder.prepare();
|
||||
// logger.warn("you input url is ", url);
|
||||
const appOptions = await handleInputOptions(options, url);
|
||||
// logger.info(JSON.stringify(appOptions, null, 4));
|
||||
builder.build(url, appOptions);
|
||||
log.debug('PakeAppOptions', appOptions);
|
||||
|
||||
const builder = BuilderProvider.create(appOptions);
|
||||
await builder.prepare();
|
||||
await builder.build(url);
|
||||
});
|
||||
|
||||
program.parse();
|
||||
|
||||
Reference in New Issue
Block a user