booletwa
Version:
Generate TWA projects from a Web Manifest
106 lines (99 loc) • 3.75 kB
text/typescript
/*
* Copyright 2019 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import * as minimist from 'minimist';
import {update} from './cmds/update';
import {help} from './cmds/help';
import {build} from './cmds/build';
import {init, InitArgs} from './cmds/init';
import {validate} from './cmds/validate';
import {install} from './cmds/install';
import {loadOrCreateConfig} from './config';
import {major} from 'semver';
import {version} from './cmds/version';
import {BUBBLEWRAP_LOGO} from './constants';
import {updateConfig} from './cmds/updateConfig';
import {doctor} from './cmds/doctor';
import {merge} from './cmds/merge';
import {fingerprint} from './cmds/fingerprint';
// import {play, PlayArgs} from './cmds/play';
import {fetchUtils} from '@bubblewrap/core';
// import { play, PlayArgs, playPublish } from './cmds/play';
export class Cli {
async run(args: string[]): Promise<boolean> {
console.log(BUBBLEWRAP_LOGO);
if (major(process.versions.node) < 12) {
throw new Error(`Current Node.js version is ${process.versions.node}.` +
' Node.js version 12 or above is required to run bubblewrap.');
}
const parsedArgs = minimist(args);
if (parsedArgs.fetchEngine &&
(parsedArgs.fetchEngine == 'node-fetch' || parsedArgs.fetchEngine == 'fetch-h2')) {
fetchUtils.setFetchEngine(parsedArgs.fetchEngine);
}
const config = await loadOrCreateConfig(undefined, undefined, parsedArgs.config);
let command;
if (parsedArgs._.length === 0) {
// Accept --version and --help alternatives for the help and version commands.
if (parsedArgs.version) {
command = 'version';
} else if (parsedArgs.help) {
command = 'help';
}
} else {
command = parsedArgs._[0];
}
// If no command is given, default to 'help'.
if (!command) {
command = 'help';
}
switch (command) {
case 'help':
return await help(parsedArgs);
case 'init':
return await init(parsedArgs as unknown as InitArgs, config);
case 'update':
return await update(parsedArgs);
case 'build':
return await build(config, parsedArgs);
case 'validate':
return await validate(parsedArgs);
case 'version': {
return await version();
}
case 'install':
return await install(parsedArgs, config);
case 'updateConfig':
return await updateConfig(parsedArgs);
case 'doctor':
return await doctor();
case 'merge':
return await merge(parsedArgs);
case 'fingerprint':
return await fingerprint(parsedArgs);
// case 'play':
// return await play(parsedArgs as unknown as PlayArgs);
// case 'playPublish':
// return await play(parsedArgs as unknown as PlayArgs, 'publish');
// case 'playVersionCheck':
// return await play(parsedArgs as unknown as PlayArgs, 'versionCheck');
// case 'playRetain':
// return await play(parsedArgs as unknown as PlayArgs, 'retain');
default:
throw new Error(
`"${command}" is not a valid command! Use 'bubblewrap help' for a list of commands`);
}
}
}