mirror of
https://github.com/Llewellynvdm/nativefier.git
synced 2025-01-23 15:18:30 +00:00
Get rid of dependency "shelljs"
We don't need a fancy _"portable (Windows/Linux/macOS) implementation of Unix shell commands on top of the Node.js API"_, we just want to run a simple script. Replacing with using stdlib `child_process.spawnSync`.
This commit is contained in:
parent
4bf0226da0
commit
9b52f210db
@ -62,7 +62,6 @@
|
|||||||
"ncp": "^2.0.0",
|
"ncp": "^2.0.0",
|
||||||
"page-icon": "^0.3.4",
|
"page-icon": "^0.3.4",
|
||||||
"sanitize-filename": "^1.6.3",
|
"sanitize-filename": "^1.6.3",
|
||||||
"shelljs": "^0.8.4",
|
|
||||||
"source-map-support": "^0.5.19",
|
"source-map-support": "^0.5.19",
|
||||||
"tmp": "^0.2.1"
|
"tmp": "^0.2.1"
|
||||||
},
|
},
|
||||||
@ -71,7 +70,6 @@
|
|||||||
"@types/ncp": "^2.0.4",
|
"@types/ncp": "^2.0.4",
|
||||||
"@types/node": "^10.17.54",
|
"@types/node": "^10.17.54",
|
||||||
"@types/page-icon": "^0.3.3",
|
"@types/page-icon": "^0.3.3",
|
||||||
"@types/shelljs": "^0.8.8",
|
|
||||||
"@types/tmp": "^0.2.0",
|
"@types/tmp": "^0.2.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.15.2",
|
"@typescript-eslint/eslint-plugin": "^4.15.2",
|
||||||
"@typescript-eslint/parser": "^4.15.2",
|
"@typescript-eslint/parser": "^4.15.2",
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
import { spawnSync } from 'child_process';
|
||||||
import * as shell from 'shelljs';
|
|
||||||
|
|
||||||
import { isWindows, isOSX, getTempDir } from './helpers';
|
import { isWindows, isOSX, getTempDir } from './helpers';
|
||||||
import * as log from 'loglevel';
|
import * as log from 'loglevel';
|
||||||
@ -15,44 +14,39 @@ const SCRIPT_PATHS = {
|
|||||||
/**
|
/**
|
||||||
* Executes a shell script with the form "./pathToScript param1 param2"
|
* Executes a shell script with the form "./pathToScript param1 param2"
|
||||||
*/
|
*/
|
||||||
async function iconShellHelper(
|
function iconShellHelper(
|
||||||
shellScriptPath: string,
|
shellScriptPath: string,
|
||||||
icoSource: string,
|
icoSource: string,
|
||||||
icoDestination: string,
|
icoDestination: string,
|
||||||
): Promise<string> {
|
): string {
|
||||||
return new Promise((resolve, reject) => {
|
if (isWindows()) {
|
||||||
if (isWindows()) {
|
throw new Error(
|
||||||
reject(
|
'Icon conversion only supported on macOS or Linux. ' +
|
||||||
new Error(
|
'If building for Windows, download/create a .ico and pass it with --icon favicon.ico . ' +
|
||||||
'Icon conversion only supported on macOS or Linux. ' +
|
'If building for macOS/Linux, do it from macOS/Linux',
|
||||||
'If building for Windows, download/create a .ico and pass it with --icon favicon.ico . ' +
|
|
||||||
'If building for macOS/Linux, do it from macOS/Linux',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const shellCommand = `"${shellScriptPath}" "${icoSource}" "${icoDestination}"`;
|
|
||||||
log.debug(
|
|
||||||
`Converting icon ${icoSource} to ${icoDestination}.`,
|
|
||||||
`Calling: ${shellCommand}`,
|
|
||||||
);
|
);
|
||||||
shell.exec(shellCommand, { silent: true }, (exitCode, stdOut, stdError) => {
|
}
|
||||||
if (exitCode) {
|
|
||||||
reject({
|
|
||||||
stdOut,
|
|
||||||
stdError,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug(`Conversion succeeded and produced icon at ${icoDestination}`);
|
const shellCommand = `"${shellScriptPath}" "${icoSource}" "${icoDestination}"`;
|
||||||
resolve(icoDestination);
|
log.debug(
|
||||||
});
|
`Converting icon ${icoSource} to ${icoDestination}.`,
|
||||||
});
|
`Calling shell command: ${shellCommand}`,
|
||||||
|
);
|
||||||
|
const { stdout, stderr, status } = spawnSync(
|
||||||
|
shellScriptPath,
|
||||||
|
[icoSource, icoDestination],
|
||||||
|
{ timeout: 10000 },
|
||||||
|
);
|
||||||
|
if (status) {
|
||||||
|
throw new Error(
|
||||||
|
`Icon conversion failed with status code ${status}.\nstdout: ${stdout.toString()}\nstderr: ${stderr.toString()}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
log.debug(`Conversion succeeded and produced icon at ${icoDestination}`);
|
||||||
|
return icoDestination;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function singleIco(icoSrc: string): Promise<string> {
|
export function singleIco(icoSrc: string): string {
|
||||||
return iconShellHelper(
|
return iconShellHelper(
|
||||||
SCRIPT_PATHS.singleIco,
|
SCRIPT_PATHS.singleIco,
|
||||||
icoSrc,
|
icoSrc,
|
||||||
@ -60,7 +54,7 @@ export function singleIco(icoSrc: string): Promise<string> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function convertToPng(icoSrc: string): Promise<string> {
|
export function convertToPng(icoSrc: string): string {
|
||||||
return iconShellHelper(
|
return iconShellHelper(
|
||||||
SCRIPT_PATHS.convertToPng,
|
SCRIPT_PATHS.convertToPng,
|
||||||
icoSrc,
|
icoSrc,
|
||||||
@ -68,7 +62,7 @@ export async function convertToPng(icoSrc: string): Promise<string> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function convertToIco(icoSrc: string): Promise<string> {
|
export function convertToIco(icoSrc: string): string {
|
||||||
return iconShellHelper(
|
return iconShellHelper(
|
||||||
SCRIPT_PATHS.convertToIco,
|
SCRIPT_PATHS.convertToIco,
|
||||||
icoSrc,
|
icoSrc,
|
||||||
@ -76,7 +70,7 @@ export async function convertToIco(icoSrc: string): Promise<string> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function convertToIcns(icoSrc: string): Promise<string> {
|
export function convertToIcns(icoSrc: string): string {
|
||||||
if (!isOSX()) {
|
if (!isOSX()) {
|
||||||
throw new Error('macOS is required to convert to a .icns icon');
|
throw new Error('macOS is required to convert to a .icns icon');
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user