2019-01-14 20:58:34 +00:00
|
|
|
/**
|
|
|
|
* Return true if we're in a browser environment (including web workers).
|
|
|
|
*/
|
|
|
|
export const isBrowserEnvironment = (): boolean => {
|
|
|
|
return typeof process === "undefined" || typeof process.stdout === "undefined";
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Escape a path. This prevents any issues with file names that have quotes,
|
|
|
|
* spaces, braces, etc.
|
|
|
|
*/
|
|
|
|
export const escapePath = (path: string): string => {
|
|
|
|
return `'${path.replace(/'/g, "'\\''")}'`;
|
|
|
|
};
|
2019-01-18 21:46:40 +00:00
|
|
|
|
|
|
|
export type IEncodingOptions = {
|
|
|
|
encoding?: string | null;
|
|
|
|
flag?: string;
|
|
|
|
mode?: string;
|
|
|
|
persistent?: boolean;
|
|
|
|
recursive?: boolean;
|
|
|
|
} | string | undefined | null;
|
|
|
|
|
|
|
|
// tslint:disable-next-line no-any
|
|
|
|
export type IEncodingOptionsCallback = IEncodingOptions | ((err: NodeJS.ErrnoException, ...args: any[]) => void);
|
|
|
|
|
|
|
|
/**
|
2019-02-19 16:17:03 +00:00
|
|
|
* Stringify an event argument.
|
2019-01-18 21:46:40 +00:00
|
|
|
*/
|
2019-02-19 16:17:03 +00:00
|
|
|
export const stringify = (arg: any): string => { // tslint:disable-line no-any
|
|
|
|
if (arg instanceof Error) {
|
2019-02-21 19:29:08 +00:00
|
|
|
// Errors don't stringify at all. They just become "{}".
|
2019-02-19 16:17:03 +00:00
|
|
|
return JSON.stringify({
|
|
|
|
type: "Error",
|
|
|
|
data: {
|
|
|
|
message: arg.message,
|
|
|
|
name: arg.name,
|
|
|
|
stack: arg.stack,
|
|
|
|
},
|
|
|
|
});
|
2019-02-21 19:29:08 +00:00
|
|
|
} else if (arg instanceof Uint8Array) {
|
|
|
|
// With stringify, these get turned into objects with each index becoming a
|
|
|
|
// key for some reason. Then trying to do something like write that data
|
|
|
|
// results in [object Object] being written. Stringify them like a Buffer
|
|
|
|
// instead.
|
|
|
|
return JSON.stringify({
|
|
|
|
type: "Buffer",
|
|
|
|
data: Array.from(arg),
|
|
|
|
});
|
2019-02-19 16:17:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return JSON.stringify(arg);
|
2019-01-18 21:46:40 +00:00
|
|
|
};
|
2019-02-19 16:17:03 +00:00
|
|
|
/**
|
|
|
|
* Parse an event argument.
|
|
|
|
*/
|
|
|
|
export const parse = (arg: string): any => { // tslint:disable-line no-any
|
|
|
|
if (!arg) {
|
|
|
|
return arg;
|
|
|
|
}
|
|
|
|
|
|
|
|
const result = JSON.parse(arg);
|
|
|
|
|
|
|
|
if (result && result.data && result.type) {
|
|
|
|
switch (result.type) {
|
|
|
|
// JSON.stringify turns a Buffer into an object but JSON.parse doesn't
|
|
|
|
// turn it back, it just remains an object.
|
|
|
|
case "Buffer":
|
|
|
|
if (Array.isArray(result.data)) {
|
|
|
|
return Buffer.from(result);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
// Errors apparently can't be stringified, so we do something similar to
|
|
|
|
// what happens to buffers and stringify them as regular objects.
|
|
|
|
case "Error":
|
|
|
|
if (result.data.message) {
|
|
|
|
return new Error(result.data.message);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
};
|