Skip to content

Commit

Permalink
feat: more cli improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
IT-MikeS committed Aug 18, 2021
1 parent 5398ba9 commit 99866fe
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 42 deletions.
5 changes: 3 additions & 2 deletions package.json
Expand Up @@ -2,11 +2,12 @@
"name": "capacitor-tauri-platform",
"private": true,
"scripts": {
"prepublishOnly": "npm run build-all && shx cp -f ./README.md ./platform/README.md",
"prepublishOnly": "npm run build-all && shx cp -f ./README.md ./platform/README.md && git add --all && git commit -m \"chore: build and update readme in package\" && git push",
"publish:latest": "env-cmd lerna publish --conventional-commits -create-release github --force-publish",
"publish:next-prerelease": "env-cmd lerna publish prerelease --preid alpha --dist-tag alpha --pre-dist-tag alpha --conventional-commits --create-release github --force-publish",
"publish:next": "env-cmd lerna publish --preid next --dist-tag next --pre-dist-tag next --conventional-commits --create-release github --force-publish",
"build-all": "lerna run build",
"build-all": "lerna run build --stream",
"postinstall": "lerna bootstrap",
"env-cmd": "env-cmd",
"shx": "shx"
},
Expand Down
17 changes: 5 additions & 12 deletions platform/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions platform/package.json
Expand Up @@ -47,6 +47,7 @@
"chalk": "~4.1.1",
"electron-is-dev": "~2.0.0",
"events": "~3.3.0",
"execa": "^5.1.1",
"fs-extra": "~9.1.0",
"mime-types": "~2.1.31",
"ora": "~5.4.1"
Expand Down
14 changes: 12 additions & 2 deletions platform/src/cli-scripts/add.ts
Expand Up @@ -3,9 +3,13 @@ import { copySync } from 'fs-extra';
import { join } from 'path';
import { extract } from 'tar';

import { readJSON, runExec, writePrettyJSON } from './common';
import type { TaskInfoProvider } from './common';
import { runExecWithInput , readJSON, runExec, writePrettyJSON } from './common';

export async function doAdd(): Promise<void> {

export async function doAdd(
taskInfoMessageProvider: TaskInfoProvider,
): Promise<void> {
//console.log(process.env.CAPACITOR_ROOT_DIR);
//console.log(process.env.CAPACITOR_WEB_DIR);
//console.log(process.env.CAPACITOR_CONFIG);
Expand Down Expand Up @@ -41,7 +45,9 @@ export async function doAdd(): Promise<void> {

if (!existsSync(destDir)) {
mkdirSync(destDir);
taskInfoMessageProvider(`extracting template`);
await extract({ file: platformNodeModuleTemplateTar, cwd: destDir });
taskInfoMessageProvider(`copying capacitor config file`);
copySync(usersProjectCapConfigFile, join(destDir, configFileName));

const appName: string = configData.appName;
Expand All @@ -51,6 +57,7 @@ export async function doAdd(): Promise<void> {
if (rootPackageJson.repository) {
platformPackageJson.repository = rootPackageJson.repository;
}
taskInfoMessageProvider(`setting up tauri project`);
writePrettyJSON(join(destDir, 'package.json'), platformPackageJson);

const platformTauriConfigJson = readJSON(
Expand All @@ -63,7 +70,10 @@ export async function doAdd(): Promise<void> {
platformTauriConfigJson,
);

taskInfoMessageProvider(`installing npm modules`);
await runExec(`cd ${destDir} && npm i`);
taskInfoMessageProvider(`installing @tauri-apps/cli@latest`);
await runExec(`cd ${destDir} && npm i @tauri-apps/cli@latest`);
} else {
throw new Error('Tauri platform already exists.');
}
Expand Down
53 changes: 41 additions & 12 deletions platform/src/cli-scripts/common.ts
@@ -1,7 +1,10 @@
import chalk from 'chalk';
import type { ChildProcess} from 'child_process';
import { exec } from 'child_process';
import { createHash } from 'crypto';
import execa from 'execa';
import { readFileSync, existsSync, writeFileSync } from 'fs';
import type { Ora } from 'ora';
import { dirname, join, parse, resolve } from 'path';

const enum PluginType {
Expand Down Expand Up @@ -54,7 +57,31 @@ export function readJSON(pathToUse: string): { [key: string]: any } {
return JSON.parse(data);
}

export function runExec(command: string): Promise<string> {
function onExit(childProcess: ChildProcess): Promise<string> {
return new Promise((resolve, reject) => {
childProcess.once('exit', (code: number, signal: string) => {
if (code === 0) {
resolve('');
} else {
reject(new Error('Exit with error code: ' + code));
}
});
childProcess.once('error', (err: Error) => {
reject(err);
});
});
}

export async function runExecWithInput(command: string): Promise<string> {
const {stdout, stderr} = await execa.command(command, {stdio: 'inherit', shell: true});
if (stderr) {
return stdout + stderr;
} else {
return stdout;
}
}

export async function runExec(command: string): Promise<string> {
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if (error) {
Expand Down Expand Up @@ -171,7 +198,7 @@ export function resolveElectronPlugin(plugin: Plugin): string | null {
}
}

type TaskInfoProvider = (messsage: string) => void;
export type TaskInfoProvider = (messsage: string) => void;

export async function runTask<T>(
title: string,
Expand All @@ -181,21 +208,23 @@ export async function runTask<T>(
const ora = require('ora');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const chalk = require('chalk');
const spinner = ora(title).start();
let spinner: Ora = ora(title).start(`${title}`);
try {
spinner = spinner.start(`${title}: ${chalk.dim('start 🚀')}`);
const start = process.hrtime();
let taskInfoMessage;
const value = await fn((message: string) => (taskInfoMessage = message));
const value = await fn((message: string) => {
spinner = spinner.info();
spinner = spinner.start(`${title}: ${chalk.dim(message)}`);
});
spinner = spinner.info();
const elapsed = process.hrtime(start);
if (taskInfoMessage) {
spinner.info(`${title} ${chalk.dim('– ' + taskInfoMessage)}`);
} else {
spinner.succeed(`${title} ${chalk.dim('in ' + formatHrTime(elapsed))}`);
}
spinner = spinner.succeed(
`${title}: ${chalk.dim('completed in ' + formatHrTime(elapsed))}`,
);
return value;
} catch (e) {
spinner.fail(`${title}: ${e.message ? e.message : ''}`);
spinner.stop();
spinner = spinner.fail(`${title}: ${e.message ? e.message : ''}`);
spinner = spinner.stop();
throw e;
}
}
Expand Down
6 changes: 5 additions & 1 deletion platform/src/cli-scripts/copy.ts
Expand Up @@ -2,16 +2,20 @@ import { existsSync } from 'fs';
import { copySync, removeSync } from 'fs-extra';
import { join } from 'path';

import type { TaskInfoProvider } from './common';
import { errorLog } from './common';

export async function doCopy(): Promise<void> {
export async function doCopy(
taskInfoMessageProvider: TaskInfoProvider
): Promise<void> {
const usersProjectDir = process.env.CAPACITOR_ROOT_DIR;
// const configData = JSON.parse(process.env.CAPACITOR_CONFIG!);
const builtWebAppDir = process.env.CAPACITOR_WEB_DIR;
const destDir = join(usersProjectDir, 'tauri', 'app');

try {
if (existsSync(destDir)) removeSync(destDir);
taskInfoMessageProvider(`Copying ${builtWebAppDir} into ${destDir}`);
copySync(builtWebAppDir, destDir);
} catch (e) {
errorLog(e.message);
Expand Down
25 changes: 15 additions & 10 deletions platform/src/cli-scripts/index.ts
@@ -1,32 +1,36 @@
import { join } from 'path';

import { doAdd } from './add';
import { runTask } from './common';
import { runExecWithInput, runTask } from './common';
import { doCopy } from './copy';
import { doOpen } from './open';
import { doUpdate } from './update';
// import { doUpdate } from './update';

/*
async function doUpdateTask() {
return await runTask('Updating Tauri plugins', async () => {
return await runTask('Updating Tauri plugins', async taskInfoMessageProvider => {
return await doUpdate();
});
}
*/

async function doAddTask() {
return await runTask('Adding Tauri platform', async () => {
return doAdd();
return await runTask('Adding Tauri platform', async taskInfoMessageProvider => {
return doAdd(taskInfoMessageProvider);
});
}

async function doCopyTask() {
return await runTask('Copying Web App to Tauri platform', async () => {
return await doCopy();
return await runTask('Copying Web App to Tauri platform', async taskInfoMessageProvider => {
return await doCopy(taskInfoMessageProvider);
});
}

async function doOpenTask() {
return await runTask(
'Opening Tauri platform - The first run of this command can take several minutes to show the app.',
async () => {
return await doOpen();
'Opening Tauri platform',
async taskInfoMessageProvider => {
return await doOpen(taskInfoMessageProvider);
},
);
}
Expand All @@ -37,6 +41,7 @@ async function doOpenTask() {
switch (scriptToRun) {
case 'add':
await doAddTask();
await runExecWithInput(`cd ${join(process.env.CAPACITOR_ROOT_DIR, 'tauri')} && npm run update-deps`)
await doCopyTask();
// await doUpdateTask();
break;
Expand Down
17 changes: 14 additions & 3 deletions platform/src/cli-scripts/open.ts
@@ -1,21 +1,32 @@
import { platform } from 'os';
import { join } from 'path';

import type { TaskInfoProvider } from './common';
import { runExec, errorLog } from './common';

export async function doOpen(): Promise<void> {
export async function doOpen(
taskInfoMessageProvider: TaskInfoProvider
): Promise<void> {
taskInfoMessageProvider('preparing - Note: The first run of this command can take several minutes to show the app.')
const configData = JSON.parse(process.env.CAPACITOR_CONFIG);
const usersProjectDir = process.env.CAPACITOR_ROOT_DIR;
const destDir = join(usersProjectDir, 'tauri');
try {
taskInfoMessageProvider('builing tauri app');
await runExec(
`cd ${destDir} && npm run build`,
);
const osPlatform = platform();
if (osPlatform === 'win32') {
taskInfoMessageProvider('running tauri windows app');
await runExec(
`cd ${destDir} && npm run build && cd src-tauri/target/debug && ${configData.appName}.exe`,
`cd ${destDir} && cd src-tauri/target/debug && ${configData.appName}.exe`,
);

} else if (osPlatform === 'darwin') {
taskInfoMessageProvider('running tauri macOS app');
await runExec(
`cd ${destDir} && npm run build && src-tauri/target/debug/${configData.appName}`,
`cd ${destDir} && src-tauri/target/debug/${configData.appName}`,
);
} else {
throw new Error(
Expand Down
1 change: 1 addition & 0 deletions platform/template/package.json
Expand Up @@ -6,6 +6,7 @@
"scripts": {
"dev": "npm run tauri dev",
"build": "npm run tauri build -- --debug",
"update-deps": "npm run tauri deps update",
"tauri": "tauri"
},
"keywords": [],
Expand Down

0 comments on commit 99866fe

Please sign in to comment.