diff --git a/app/lib/exec/index.js b/app/lib/exec/index.js
index b6c0a5c..bc70613 100644
--- a/app/lib/exec/index.js
+++ b/app/lib/exec/index.js
@@ -1,7 +1,5 @@
-'use strict'
-
-const execRaw = require('child_process').exec
-
+'use strict';
+const execRaw = require('child_process').exec;
/**
* Promisified child_process.exec
*
@@ -14,26 +12,26 @@ const execRaw = require('child_process').exec
* @returns {Promise<{ stdout: string, stderr: stderr }>}
*/
async function exec(...args) {
- let cmd = args[0]
- let argz = null
- let opts = null
- if (typeof args[1] === 'object' && Array.isArray(args[1])) {
- argz = args[1]
- }
- if (argz === null && typeof args[1] === 'object') {
- opts = args[1]
- } else if (typeof args[2] === 'object') {
- opts = args[2]
- }
- if (opts === null) {
- opts = { maxBuffer : 1024 * 1024 }
- }
+ let cmd = args[0];
+ let argz = null;
+ let opts = null;
+ if (typeof args[1] === 'object' && Array.isArray(args[1])) {
+ argz = args[1];
+ }
+ if (argz === null && typeof args[1] === 'object') {
+ opts = args[1];
+ }
+ else if (typeof args[2] === 'object') {
+ opts = args[2];
+ }
+ if (opts === null) {
+ opts = { maxBuffer: 1024 * 1024 };
+ }
return new Promise((resolve, reject) => {
- const child = execRaw(cmd, opts,
- (err, stdout, stderr) => err ? reject(err) : resolve({
- stdout: stdout,
- stderr: stderr
- }));
+ const child = execRaw(cmd, opts, (err, stdout, stderr) => err ? reject(err) : resolve({
+ stdout,
+ stderr
+ }));
if (opts.stdout) {
child.stdout.pipe(opts.stdout);
}
@@ -42,5 +40,5 @@ async function exec(...args) {
}
});
}
-
-module.exports = exec
\ No newline at end of file
+module.exports = exec;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/app/lib/exec/index.js.map b/app/lib/exec/index.js.map
new file mode 100644
index 0000000..0b5a38a
--- /dev/null
+++ b/app/lib/exec/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exec/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,KAAK,UAAU,IAAI,CAAC,GAAG,IAAe;IACrC,IAAI,GAAG,GAAY,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,IAAI,GAAY,IAAI,CAAA;IACxB,IAAI,IAAI,GAAS,IAAI,CAAA;IAErB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1D,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QACjD,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;SAAM,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QACvC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;IACD,IAAI,IAAI,KAAK,IAAI,EAAE;QAClB,IAAI,GAAG,EAAE,SAAS,EAAG,IAAI,GAAG,IAAI,EAAE,CAAA;KAClC;IACE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EACjC,CAAC,GAAW,EAAE,MAAe,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,MAAM;YACN,MAAM;SACN,CAAC,CAAC,CAAC;QACC,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA"}
\ No newline at end of file
diff --git a/app/lib/exit/index.js b/app/lib/exit/index.js
index 4d0de07..9cb2105 100644
--- a/app/lib/exit/index.js
+++ b/app/lib/exit/index.js
@@ -1,5 +1,4 @@
'use strict';
-
/**
* Exit process with either a 0 code or other
* specified failure code. Print message to console first.
@@ -7,15 +6,15 @@
* @param {string} msg Reason for exit
* @param {integer} code process exit code, default 0
**/
-
-function exit (msg, code = 0) {
- if (code === 0) {
- console.log(msg);
- process.exit();
- } else {
- console.error(msg);
- process.exit(code);
- }
+function exit(msg, code = 0) {
+ if (code === 0) {
+ console.log(msg);
+ process.exit();
+ }
+ else {
+ console.error(msg);
+ process.exit(code);
+ }
}
-
-module.exports = exit;
\ No newline at end of file
+module.exports = exit;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/app/lib/exit/index.js.map b/app/lib/exit/index.js.map
new file mode 100644
index 0000000..a91c605
--- /dev/null
+++ b/app/lib/exit/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exit/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;IAMI;AAEJ,SAAS,IAAI,CAAE,GAAY,EAAE,OAAgB,CAAC;IAC7C,IAAI,IAAI,KAAK,CAAC,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;KACf;SAAM;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnB;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC"}
\ No newline at end of file
diff --git a/app/lib/ffmpeg/index.js b/app/lib/ffmpeg/index.js
index c17c0d9..128fbb7 100644
--- a/app/lib/ffmpeg/index.js
+++ b/app/lib/ffmpeg/index.js
@@ -1,179 +1,168 @@
'use strict';
-
-const uuid = require('uuid').v4;
-const path = require('path');
-const fs = require('fs-extra');
-
-const exec = require('exec');
-//const spawn = require('spawn');
-const exit = require('exit');
-
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const path = __importStar(require("path"));
+const fs = __importStar(require("fs-extra"));
+const exec = __importStar(require("exec"));
let system = {};
let TMPDIR;
-
-function padded_frame (i) {
- let len = (i + '').length;
- let str = i + '';
- for (let x = 0; x < 5 - len; x++) {
- str = '0' + str;
- }
- return str;
+function padded_frame(i) {
+ let len = (i + '').length;
+ let str = i + '';
+ for (let x = 0; x < 5 - len; x++) {
+ str = '0' + str;
+ }
+ return str;
}
-
-async function frame (state, light) {
- let frame = state.frame
- let video = state.path
- let w = state.info.width
- let h = state.info.height
- let padded = padded_frame(frame)
- let ext = 'tif'
- let rgb = light.color;
- let tmpoutput
- let cmd
- let output
- let cmd2
- let output2
-
- if (system.platform !== 'nix') {
- ext = 'png'
- }
-
- rgb = rgb.map(e => {
- return parseInt(e);
- });
-
- tmpoutput = path.join(TMPDIR, `export-${padded}.${ext}`);
-
- cmd = `ffmpeg -y -i "${video}" -vf "select='gte(n\\,${frame})',scale=${w}:${h}" -vframes 1 -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"`;
- cmd2 = `convert "${tmpoutput}" -resize ${w}x${h} -size ${w}x${h} xc:"rgb(${rgb[0]},${rgb[1]},${rgb[2]})" +swap -compose Darken -composite "${tmpoutput}"`;
-
- //ffmpeg -i "${video}" -ss 00:00:07.000 -vframes 1 "export-${time}.jpg"
- //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff"
- //-vf "select=gte(n\,${frame})" -compression_algo raw -pix_fmt rgb24 "export-${padded}.png"
-
- try {
- console.log(cmd);
- output = await exec(cmd);
- } catch (err) {
- console.error(err);
- }
- if (output && output.stdout) console.log(`"${output.stdout}"`);
-
- if (rgb[0] !== 255 || rgb[1] !== 255 || rgb[2] !== 255) {
- try {
- console.log(cmd2);
- output2 = await exec(cmd2);
- } catch (err) {
- console.error(err);
- }
- }
-
- if (output2 && output2.stdout) console.log(`"${output2.stdout}"`);
+async function frame(state, light) {
+ let frame = state.frame;
+ let video = state.path;
+ let w = state.info.width;
+ let h = state.info.height;
+ let padded = padded_frame(frame);
+ let ext = 'tif';
+ let rgb = light.color;
+ let tmpoutput;
+ let cmd;
+ let output;
+ let cmd2;
+ let output2;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ rgb = rgb.map((e) => {
+ return parseInt(e);
+ });
+ tmpoutput = path.join(TMPDIR, `export-${padded}.${ext}`);
+ cmd = `ffmpeg -y -i "${video}" -vf "select='gte(n\\,${frame})',scale=${w}:${h}" -vframes 1 -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"`;
+ cmd2 = `convert "${tmpoutput}" -resize ${w}x${h} -size ${w}x${h} xc:"rgb(${rgb[0]},${rgb[1]},${rgb[2]})" +swap -compose Darken -composite "${tmpoutput}"`;
+ //ffmpeg -i "${video}" -ss 00:00:07.000 -vframes 1 "export-${time}.jpg"
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff"
+ //-vf "select=gte(n\,${frame})" -compression_algo raw -pix_fmt rgb24 "export-${padded}.png"
+ try {
+ console.log(cmd);
+ output = await exec(cmd);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (output && output.stdout)
+ console.log(`"${output.stdout}"`);
+ if (rgb[0] !== 255 || rgb[1] !== 255 || rgb[2] !== 255) {
+ try {
+ console.log(cmd2);
+ output2 = await exec(cmd2);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ }
+ if (output2 && output2.stdout)
+ console.log(`"${output2.stdout}"`);
}
-
-async function frames (video, obj) {
- let tmppath = TMPDIR;
- let ext = 'tif';
- let tmpoutput;
-
- if (system.platform !== 'nix') {
- ext = 'png';
- }
-
- tmpoutput = path.join(tmppath, `export-%05d.${ext}`);
- try {
- await fs.mkdir(tmppath)
- } catch (Err) {
- console.error(err);
- }
-
- //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"
+async function frames(video, obj) {
+ let tmppath = TMPDIR;
+ let ext = 'tif';
+ let tmpoutput;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ tmpoutput = path.join(tmppath, `export-%05d.${ext}`);
+ try {
+ await fs.mkdir(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"
}
-
-async function clear (frame) {
- let padded = padded_frame(frame);
- let ext = 'tif';
- let tmppath;
- let tmpoutput;
- let cmd;
- let exists;
-
- if (system.platform !== 'nix') {
- ext = 'png';
- }
-
- tmppath = path.join(TMPDIR, `export-${padded}.${ext}`);
-
- try {
- exists = await fs.exists(tmppath);
- } catch (err) {
- console.error(err);
- }
-
- if (!exists) return false;
-
- try {
- await fs.unlink(tmppath);
- console.log(`Cleared frame ${tmppath}`);
- } catch (err) {
- console.error(err);
- }
-
- return true;
+async function clear(frame) {
+ let padded = padded_frame(frame);
+ let ext = 'tif';
+ let tmppath;
+ let tmpoutput;
+ let cmd;
+ let exists;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ tmppath = path.join(TMPDIR, `export-${padded}.${ext}`);
+ try {
+ exists = await fs.exists(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (!exists)
+ return false;
+ try {
+ await fs.unlink(tmppath);
+ console.log(`Cleared frame ${tmppath}`);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ return true;
}
-
-async function clearAll () {
- let tmppath = TMPDIR;
- let files;
- try {
- files = await fs.readdir(tmppath);
- } catch (err) {
- console.error(err);
- }
- if (files) {
- files.forEach(async (file, index) => {
- try {
- await fs.unlink(path.join(tmppath, file));
- } catch (err) {
- console.error(err);
- }
- });
- }
+async function clearAll() {
+ let tmppath = TMPDIR;
+ let files;
+ try {
+ files = await fs.readdir(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (files) {
+ files.forEach(async (file, index) => {
+ try {
+ await fs.unlink(path.join(tmppath, file));
+ }
+ catch (err) {
+ console.error(err);
+ }
+ });
+ }
}
-
-async function checkDir () {
- let exists;
- try {
- exists = await fs.exists(TMPDIR);
- } catch (err) {
- console.error('Error checking for tmp dir', err);
- }
-
- if (!exists) {
- try {
- await fs.mkdir(TMPDIR);
- console.log(`Created tmpdir ${TMPDIR}`);
- } catch (err) {
- console.error('Error creating tmp dir', err);
- }
- }
- try {
- await clearAll();
- } catch (err) {
- console.error(err);
- }
+async function checkDir() {
+ let exists;
+ try {
+ exists = await fs.exists(TMPDIR);
+ }
+ catch (err) {
+ console.error('Error checking for tmp dir', err);
+ }
+ if (!exists) {
+ try {
+ await fs.mkdir(TMPDIR);
+ console.log(`Created tmpdir ${TMPDIR}`);
+ }
+ catch (err) {
+ console.error('Error creating tmp dir', err);
+ }
+ }
+ try {
+ await clearAll();
+ }
+ catch (err) {
+ console.error(err);
+ }
}
-
module.exports = (sys) => {
- system = sys;
- TMPDIR = path.join(system.tmp, 'mcopy_digital');
-
- checkDir();
-
- return {
- frames,
- frame,
- clear,
- clearAll
- }
-}
\ No newline at end of file
+ system = sys;
+ TMPDIR = path.join(system.tmp, 'mcopy_digital');
+ checkDir();
+ return {
+ frames,
+ frame,
+ clear,
+ clearAll
+ };
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/app/lib/ffmpeg/index.js.map b/app/lib/ffmpeg/index.js.map
new file mode 100644
index 0000000..4376337
--- /dev/null
+++ b/app/lib/ffmpeg/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;AAGb,2CAA6B;AAC7B,6CAA+B;AAC/B,2CAA6B;AAI7B,IAAI,MAAM,GAAS,EAAE,CAAC;AACtB,IAAI,MAAe,CAAC;AAEpB,SAAS,YAAY,CAAE,CAAU;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;IAC1B,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QACjC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KAChB;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,KAAK,CAAE,KAAW,EAAE,KAAW;IAC7C,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACvB,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;IACtB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAA;IACxB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,IAAI,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,GAAG,GAAG,KAAK,CAAA;IACf,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;IACtB,IAAI,SAAS,CAAC;IACd,IAAI,GAAG,CAAC;IACR,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,CAAC;IACT,IAAI,OAAO,CAAC;IAEZ,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE;QAC9B,GAAG,GAAG,KAAK,CAAC;KACZ;IAED,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;QAC5B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IAEzD,GAAG,GAAG,iBAAiB,KAAK,0BAA0B,KAAK,YAAY,CAAC,IAAI,CAAC,sDAAsD,SAAS,GAAG,CAAC;IAChJ,IAAI,GAAG,YAAY,SAAS,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,wCAAwC,SAAS,GAAG,CAAC;IAE1J,uEAAuE;IACvE,8EAA8E;IAC9E,2FAA2F;IAE3F,IAAI;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;KACzB;IAAC,OAAO,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;IACD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAE/D,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QACvD,IAAI;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3B;QAAC,OAAO,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACnB;KACD;IAED,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,MAAM,CAAE,KAAc,EAAE,GAAS;IAC/C,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,SAAS,CAAC;IAEd,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE;QAC9B,GAAG,GAAG,KAAK,CAAC;KACZ;IAED,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,EAAE,CAAC,CAAC;IACrD,IAAI;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KACxB;IAAC,OAAO,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;IAED,0EAA0E;AAC3E,CAAC;AAED,KAAK,UAAU,KAAK,CAAE,KAAc;IACnC,IAAI,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,OAAO,CAAC;IACZ,IAAI,SAAS,CAAC;IACd,IAAI,GAAG,CAAC;IACR,IAAI,MAAM,CAAC;IAEX,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE;QAC9B,GAAG,GAAG,KAAK,CAAC;KACZ;IAED,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IAEvD,IAAI;QACH,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAClC;IAAC,OAAO,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;IAED,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;KACxC;IAAC,OAAO,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,KAAK,UAAU,QAAQ;IACtB,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,KAAK,CAAC;IACV,IAAI;QACH,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAClC;IAAC,OAAO,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;IACD,IAAI,KAAK,EAAE;QACV,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAa,EAAE,KAAW,EAAE,EAAE;YAClD,IAAI;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;aAC1C;YAAC,OAAO,GAAG,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB;QACF,CAAC,CAAC,CAAC;KACH;AACF,CAAC;AAED,KAAK,UAAU,QAAQ;IACtB,IAAI,MAAM,CAAC;IACX,IAAI;QACH,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjC;IAAC,OAAO,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;KACjD;IAED,IAAI,CAAC,MAAM,EAAE;QACZ,IAAI;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;SACxC;QAAC,OAAO,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;SAC7C;KACD;IACD,IAAI;QACH,MAAM,QAAQ,EAAE,CAAC;KACjB;IAAC,OAAO,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,CAAC,GAAS,EAAE,EAAE;IAC9B,MAAM,GAAG,GAAG,CAAC;IACb,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEhD,QAAQ,EAAE,CAAC;IAEX,OAAO;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,QAAQ;KACR,CAAA;AACF,CAAC,CAAA"}
\ No newline at end of file
diff --git a/app/lib/ffprobe/index.js b/app/lib/ffprobe/index.js
index 21684ed..2ab7590 100644
--- a/app/lib/ffprobe/index.js
+++ b/app/lib/ffprobe/index.js
@@ -1,104 +1,103 @@
'use strict';
-
-const fs = require('fs-extra');
-
-const exec = require('exec');
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = __importStar(require("fs-extra"));
+const exec = __importStar(require("exec"));
//const spawn = require('spawn');
//const exit = require('exit');
-
let system = {};
-
-async function info (video) {
- let cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "${video}"`
- let exists;
- let raw;
- let json;
- let vid;
-
- try {
- exists = await fs.exists(video);
- } catch (err) {
- return exit(err, 5);
- }
- if (!exists) {
- //return exit(`File ${video} does not exist`, 6);
- console.error(err);
- return false
- }
-
- try {
- console.log(cmd);
- raw = await exec(cmd);
- } catch (err) {
- //return exit(err, 7);
- console.error(err);
- return false
- }
-
- try {
- json = JSON.parse(raw.stdout);
- } catch (err) {
- return raw.stdout;
- }
-
- if (json && json.streams) {
- vid = json.streams.find(stream => {
- if (stream.width && stream.height) return stream;
- });
- }
-
- if (vid) {
- json.width = vid.width;
- json.height = vid.height;
- }
-
- return json;
+async function info(video) {
+ let cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "${video}"`;
+ let exists;
+ let raw;
+ let json;
+ let vid;
+ try {
+ exists = await fs.exists(video);
+ }
+ catch (err) {
+ return exit(err, 5);
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false;
+ }
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ }
+ catch (err) {
+ //return exit(err, 7);
+ console.error(err);
+ return false;
+ }
+ try {
+ json = JSON.parse(raw.stdout);
+ }
+ catch (err) {
+ return raw.stdout;
+ }
+ if (json && json.streams) {
+ vid = json.streams.find((stream) => {
+ if (stream.width && stream.height)
+ return stream;
+ });
+ }
+ if (vid) {
+ json.width = vid.width;
+ json.height = vid.height;
+ }
+ return json;
}
-
-async function frames (video) {
- let cmd = `ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
- let exists;
- let raw;
- let frames;
-
- try {
- exists = await fs.exists(video);
- } catch (err) {
- //return exit(err, 5);
- console.error(err);
- return false
- }
- if (!exists) {
- //return exit(`File ${video} does not exist`, 6);
- console.error(err);
- return false;
- }
-
- try {
- console.log(cmd);
- raw = await exec(cmd);
- } catch (err) {
- console.error(err);
- return false;
- }
-
- try {
- frames = parseInt(raw.stdout)
- } catch (err) {
- return raw.stdout;
- }
-
- return frames;
+async function frames(video) {
+ let cmd = `ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
+ let exists;
+ let raw;
+ let frames;
+ try {
+ exists = await fs.exists(video);
+ }
+ catch (err) {
+ //return exit(err, 5);
+ console.error(err);
+ return false;
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false;
+ }
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ }
+ catch (err) {
+ console.error(err);
+ return false;
+ }
+ try {
+ frames = parseInt(raw.stdout);
+ }
+ catch (err) {
+ return raw.stdout;
+ }
+ return frames;
}
-
-function map (obj) {
- console.dir(obj);
+function map(obj) {
+ console.dir(obj);
}
-
module.exports = (sys) => {
- system = sys;
- return {
- info,
- frames
- }
-}
+ system = sys;
+ return {
+ info,
+ frames
+ };
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/app/lib/ffprobe/index.js.map b/app/lib/ffprobe/index.js.map
new file mode 100644
index 0000000..b3a508b
--- /dev/null
+++ b/app/lib/ffprobe/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffprobe/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/package-lock.json b/app/package-lock.json
index fa66eda..a5ba775 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "mcopy-app",
- "version": "1.4.7",
+ "version": "1.4.10",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -129,6 +129,30 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ }
+ }
+ },
"accord": {
"version": "0.29.0",
"resolved": "https://registry.npmjs.org/accord/-/accord-0.29.0.tgz",
@@ -226,7 +250,6 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -409,6 +432,11 @@
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
"dev": true
},
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
"array-slice": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
@@ -482,6 +510,11 @@
"lodash": "^4.17.11"
}
},
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -581,6 +614,11 @@
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
"dev": true
},
+ "basic-auth-connect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz",
+ "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI="
+ },
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -663,6 +701,43 @@
"bluebird": "^3.5.2"
}
},
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ }
+ }
+ },
"bplist-creator": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
@@ -768,6 +843,11 @@
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"dev": true
},
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -847,7 +927,6 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -1149,6 +1228,19 @@
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
"convert-source-map": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
@@ -1158,6 +1250,16 @@
"safe-buffer": "~5.1.1"
}
},
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -1413,12 +1515,22 @@
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
"deprecated": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
"integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
"dev": true
},
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
"detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -1485,6 +1597,11 @@
"safer-buffer": "^2.1.0"
}
},
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
"electron": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/electron/-/electron-4.1.3.tgz",
@@ -1854,6 +1971,11 @@
"env-variable": "0.0.x"
}
},
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
"end-of-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
@@ -1933,17 +2055,26 @@
"is-symbol": "^1.0.2"
}
},
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
"exec": {
"version": "file:lib/exec"
},
@@ -2042,6 +2173,63 @@
"homedir-polyfill": "^1.0.1"
}
},
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ }
+ }
+ },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -2242,6 +2430,35 @@
}
}
},
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
"find-index": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
@@ -2402,6 +2619,11 @@
"mime-types": "^2.1.12"
}
},
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -2411,6 +2633,11 @@
"map-cache": "^0.2.2"
}
},
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -3391,8 +3618,7 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-gulplog": {
"version": "0.1.0",
@@ -3467,6 +3693,18 @@
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
"dev": true
},
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -3482,6 +3720,14 @@
"resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.18.0.tgz",
"integrity": "sha512-reYy4EJMqlhX13TDlgSqLYfVGKOoixoEzsSL6DBlp22dScWN8Q2eMgDF4L0q28mzbgO40rnBy3WyEUQEhfYALw=="
},
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
"image-size": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
@@ -3544,6 +3790,11 @@
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
"integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA=="
},
+ "ipaddr.js": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+ "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
+ },
"is-absolute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
@@ -4267,6 +4518,11 @@
"object-visit": "^1.0.0"
}
},
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
"mem": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
@@ -4303,6 +4559,16 @@
}
}
},
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -4327,9 +4593,7 @@
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "optional": true
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.38.0",
@@ -4643,6 +4907,11 @@
"integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
"dev": true
},
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
"nested-error-stacks": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz",
@@ -4723,6 +4992,27 @@
}
}
},
+ "node-media-server": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-media-server/-/node-media-server-2.1.0.tgz",
+ "integrity": "sha512-k5NTSTaHQceLTZLloEndNJ+lpiamiu+yR+2r+0yoZd6OEtsuA+udD03jdQ6ER+4jshjxxOqXDGv11Ew413MO3Q==",
+ "requires": {
+ "basic-auth-connect": "^1.0.0",
+ "chalk": "^2.4.2",
+ "dateformat": "^3.0.3",
+ "express": "^4.16.4",
+ "lodash": "^4.17.11",
+ "mkdirp": "^0.5.1",
+ "ws": "^5.2.2"
+ },
+ "dependencies": {
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
+ }
+ }
+ },
"node-notifier": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
@@ -4940,6 +5230,14 @@
"isobject": "^3.0.1"
}
},
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -5160,6 +5458,11 @@
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -5202,6 +5505,11 @@
"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
"dev": true
},
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
"path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
@@ -5391,6 +5699,15 @@
"proj": {
"version": "file:lib/proj"
},
+ "proxy-addr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+ "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.0"
+ }
+ },
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
@@ -5438,6 +5755,22 @@
"murmur-32": "^0.1.0"
}
},
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -5721,6 +6054,43 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
},
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ }
+ }
+ },
"sequencer": {
"version": "file:lib/sequencer"
},
@@ -5747,6 +6117,17 @@
"debug": "^4.1.0"
}
},
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
"server": {
"version": "file:lib/server"
},
@@ -5778,6 +6159,11 @@
}
}
},
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ },
"settings": {
"version": "file:lib/settings"
},
@@ -6173,6 +6559,11 @@
}
}
},
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
"stream-buffers": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
@@ -6267,7 +6658,6 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
"requires": {
"has-flag": "^3.0.0"
}
@@ -6474,6 +6864,11 @@
"repeat-string": "^1.6.1"
}
},
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ },
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
@@ -6535,6 +6930,30 @@
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ }
+ }
+ },
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -6655,6 +7074,11 @@
"dev": true,
"optional": true
},
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -6738,6 +7162,11 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
@@ -6762,6 +7191,11 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
@@ -7056,6 +7490,14 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"xmlbuilder": {
"version": "9.0.7",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
diff --git a/app/package.json b/app/package.json
index 18b70a3..4492a76 100644
--- a/app/package.json
+++ b/app/package.json
@@ -63,6 +63,7 @@
"log": "file:lib/log",
"moment": "^2.24.0",
"mscript": "file:lib/mscript",
+ "node-media-server": "^2.1.0",
"node-notifier": "^5.4.0",
"proj": "file:lib/proj",
"request": "^2.88.0",
diff --git a/cli/lib/exec/index.js b/cli/lib/exec/index.js
index b6c0a5c..bc70613 100644
--- a/cli/lib/exec/index.js
+++ b/cli/lib/exec/index.js
@@ -1,7 +1,5 @@
-'use strict'
-
-const execRaw = require('child_process').exec
-
+'use strict';
+const execRaw = require('child_process').exec;
/**
* Promisified child_process.exec
*
@@ -14,26 +12,26 @@ const execRaw = require('child_process').exec
* @returns {Promise<{ stdout: string, stderr: stderr }>}
*/
async function exec(...args) {
- let cmd = args[0]
- let argz = null
- let opts = null
- if (typeof args[1] === 'object' && Array.isArray(args[1])) {
- argz = args[1]
- }
- if (argz === null && typeof args[1] === 'object') {
- opts = args[1]
- } else if (typeof args[2] === 'object') {
- opts = args[2]
- }
- if (opts === null) {
- opts = { maxBuffer : 1024 * 1024 }
- }
+ let cmd = args[0];
+ let argz = null;
+ let opts = null;
+ if (typeof args[1] === 'object' && Array.isArray(args[1])) {
+ argz = args[1];
+ }
+ if (argz === null && typeof args[1] === 'object') {
+ opts = args[1];
+ }
+ else if (typeof args[2] === 'object') {
+ opts = args[2];
+ }
+ if (opts === null) {
+ opts = { maxBuffer: 1024 * 1024 };
+ }
return new Promise((resolve, reject) => {
- const child = execRaw(cmd, opts,
- (err, stdout, stderr) => err ? reject(err) : resolve({
- stdout: stdout,
- stderr: stderr
- }));
+ const child = execRaw(cmd, opts, (err, stdout, stderr) => err ? reject(err) : resolve({
+ stdout,
+ stderr
+ }));
if (opts.stdout) {
child.stdout.pipe(opts.stdout);
}
@@ -42,5 +40,5 @@ async function exec(...args) {
}
});
}
-
-module.exports = exec
\ No newline at end of file
+module.exports = exec;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/cli/lib/exec/index.js.map b/cli/lib/exec/index.js.map
new file mode 100644
index 0000000..0b5a38a
--- /dev/null
+++ b/cli/lib/exec/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exec/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,KAAK,UAAU,IAAI,CAAC,GAAG,IAAe;IACrC,IAAI,GAAG,GAAY,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,IAAI,GAAY,IAAI,CAAA;IACxB,IAAI,IAAI,GAAS,IAAI,CAAA;IAErB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1D,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QACjD,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;SAAM,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QACvC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;IACD,IAAI,IAAI,KAAK,IAAI,EAAE;QAClB,IAAI,GAAG,EAAE,SAAS,EAAG,IAAI,GAAG,IAAI,EAAE,CAAA;KAClC;IACE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EACjC,CAAC,GAAW,EAAE,MAAe,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,MAAM;YACN,MAAM;SACN,CAAC,CAAC,CAAC;QACC,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA"}
\ No newline at end of file
diff --git a/cli/lib/exit/Readme.md b/cli/lib/exit/Readme.md
index e69de29..8bed916 100644
--- a/cli/lib/exit/Readme.md
+++ b/cli/lib/exit/Readme.md
@@ -0,0 +1,13 @@
+
+
+## exit(msg, code)
+Exit process with either a 0 code or other
+specified failure code. Print message to console first.
+
+**Kind**: global function
+
+| Param | Type | Default | Description |
+| --- | --- | --- | --- |
+| msg | string
| | Reason for exit |
+| code | integer
| 0
| process exit code, default 0 |
+
diff --git a/cli/lib/exit/index.js b/cli/lib/exit/index.js
index f93eb68..9cb2105 100644
--- a/cli/lib/exit/index.js
+++ b/cli/lib/exit/index.js
@@ -1,15 +1,20 @@
'use strict';
-
-const log = require('log')({quiet : false})
-
-function exit (msg, code = 0) {
- if (code === 0) {
- log.info(msg);
- process.exit();
- } else {
- log.error(msg);
- process.exit(code);
- }
+/**
+ * Exit process with either a 0 code or other
+ * specified failure code. Print message to console first.
+ *
+ * @param {string} msg Reason for exit
+ * @param {integer} code process exit code, default 0
+ **/
+function exit(msg, code = 0) {
+ if (code === 0) {
+ console.log(msg);
+ process.exit();
+ }
+ else {
+ console.error(msg);
+ process.exit(code);
+ }
}
-
-module.exports = exit;
\ No newline at end of file
+module.exports = exit;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/cli/lib/exit/index.js.map b/cli/lib/exit/index.js.map
new file mode 100644
index 0000000..a91c605
--- /dev/null
+++ b/cli/lib/exit/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exit/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;IAMI;AAEJ,SAAS,IAAI,CAAE,GAAY,EAAE,OAAgB,CAAC;IAC7C,IAAI,IAAI,KAAK,CAAC,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;KACf;SAAM;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnB;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC"}
\ No newline at end of file
diff --git a/cli/lib/ffmpeg/Readme.md b/cli/lib/ffmpeg/Readme.md
new file mode 100644
index 0000000..e69de29
diff --git a/cli/lib/ffmpeg/index.js b/cli/lib/ffmpeg/index.js
new file mode 100644
index 0000000..128fbb7
--- /dev/null
+++ b/cli/lib/ffmpeg/index.js
@@ -0,0 +1,168 @@
+'use strict';
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const path = __importStar(require("path"));
+const fs = __importStar(require("fs-extra"));
+const exec = __importStar(require("exec"));
+let system = {};
+let TMPDIR;
+function padded_frame(i) {
+ let len = (i + '').length;
+ let str = i + '';
+ for (let x = 0; x < 5 - len; x++) {
+ str = '0' + str;
+ }
+ return str;
+}
+async function frame(state, light) {
+ let frame = state.frame;
+ let video = state.path;
+ let w = state.info.width;
+ let h = state.info.height;
+ let padded = padded_frame(frame);
+ let ext = 'tif';
+ let rgb = light.color;
+ let tmpoutput;
+ let cmd;
+ let output;
+ let cmd2;
+ let output2;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ rgb = rgb.map((e) => {
+ return parseInt(e);
+ });
+ tmpoutput = path.join(TMPDIR, `export-${padded}.${ext}`);
+ cmd = `ffmpeg -y -i "${video}" -vf "select='gte(n\\,${frame})',scale=${w}:${h}" -vframes 1 -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"`;
+ cmd2 = `convert "${tmpoutput}" -resize ${w}x${h} -size ${w}x${h} xc:"rgb(${rgb[0]},${rgb[1]},${rgb[2]})" +swap -compose Darken -composite "${tmpoutput}"`;
+ //ffmpeg -i "${video}" -ss 00:00:07.000 -vframes 1 "export-${time}.jpg"
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff"
+ //-vf "select=gte(n\,${frame})" -compression_algo raw -pix_fmt rgb24 "export-${padded}.png"
+ try {
+ console.log(cmd);
+ output = await exec(cmd);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (output && output.stdout)
+ console.log(`"${output.stdout}"`);
+ if (rgb[0] !== 255 || rgb[1] !== 255 || rgb[2] !== 255) {
+ try {
+ console.log(cmd2);
+ output2 = await exec(cmd2);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ }
+ if (output2 && output2.stdout)
+ console.log(`"${output2.stdout}"`);
+}
+async function frames(video, obj) {
+ let tmppath = TMPDIR;
+ let ext = 'tif';
+ let tmpoutput;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ tmpoutput = path.join(tmppath, `export-%05d.${ext}`);
+ try {
+ await fs.mkdir(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"
+}
+async function clear(frame) {
+ let padded = padded_frame(frame);
+ let ext = 'tif';
+ let tmppath;
+ let tmpoutput;
+ let cmd;
+ let exists;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ tmppath = path.join(TMPDIR, `export-${padded}.${ext}`);
+ try {
+ exists = await fs.exists(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (!exists)
+ return false;
+ try {
+ await fs.unlink(tmppath);
+ console.log(`Cleared frame ${tmppath}`);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ return true;
+}
+async function clearAll() {
+ let tmppath = TMPDIR;
+ let files;
+ try {
+ files = await fs.readdir(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (files) {
+ files.forEach(async (file, index) => {
+ try {
+ await fs.unlink(path.join(tmppath, file));
+ }
+ catch (err) {
+ console.error(err);
+ }
+ });
+ }
+}
+async function checkDir() {
+ let exists;
+ try {
+ exists = await fs.exists(TMPDIR);
+ }
+ catch (err) {
+ console.error('Error checking for tmp dir', err);
+ }
+ if (!exists) {
+ try {
+ await fs.mkdir(TMPDIR);
+ console.log(`Created tmpdir ${TMPDIR}`);
+ }
+ catch (err) {
+ console.error('Error creating tmp dir', err);
+ }
+ }
+ try {
+ await clearAll();
+ }
+ catch (err) {
+ console.error(err);
+ }
+}
+module.exports = (sys) => {
+ system = sys;
+ TMPDIR = path.join(system.tmp, 'mcopy_digital');
+ checkDir();
+ return {
+ frames,
+ frame,
+ clear,
+ clearAll
+ };
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/cli/lib/ffmpeg/index.js.map b/cli/lib/ffmpeg/index.js.map
new file mode 100644
index 0000000..4376337
--- /dev/null
+++ b/cli/lib/ffmpeg/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/cli/lib/ffmpeg/package.json b/cli/lib/ffmpeg/package.json
new file mode 100644
index 0000000..b78c1be
--- /dev/null
+++ b/cli/lib/ffmpeg/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "ffmpeg",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/cli/lib/ffprobe/Readme.md b/cli/lib/ffprobe/Readme.md
new file mode 100644
index 0000000..e69de29
diff --git a/cli/lib/ffprobe/index.js b/cli/lib/ffprobe/index.js
new file mode 100644
index 0000000..2ab7590
--- /dev/null
+++ b/cli/lib/ffprobe/index.js
@@ -0,0 +1,103 @@
+'use strict';
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = __importStar(require("fs-extra"));
+const exec = __importStar(require("exec"));
+//const spawn = require('spawn');
+//const exit = require('exit');
+let system = {};
+async function info(video) {
+ let cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "${video}"`;
+ let exists;
+ let raw;
+ let json;
+ let vid;
+ try {
+ exists = await fs.exists(video);
+ }
+ catch (err) {
+ return exit(err, 5);
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false;
+ }
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ }
+ catch (err) {
+ //return exit(err, 7);
+ console.error(err);
+ return false;
+ }
+ try {
+ json = JSON.parse(raw.stdout);
+ }
+ catch (err) {
+ return raw.stdout;
+ }
+ if (json && json.streams) {
+ vid = json.streams.find((stream) => {
+ if (stream.width && stream.height)
+ return stream;
+ });
+ }
+ if (vid) {
+ json.width = vid.width;
+ json.height = vid.height;
+ }
+ return json;
+}
+async function frames(video) {
+ let cmd = `ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
+ let exists;
+ let raw;
+ let frames;
+ try {
+ exists = await fs.exists(video);
+ }
+ catch (err) {
+ //return exit(err, 5);
+ console.error(err);
+ return false;
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false;
+ }
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ }
+ catch (err) {
+ console.error(err);
+ return false;
+ }
+ try {
+ frames = parseInt(raw.stdout);
+ }
+ catch (err) {
+ return raw.stdout;
+ }
+ return frames;
+}
+function map(obj) {
+ console.dir(obj);
+}
+module.exports = (sys) => {
+ system = sys;
+ return {
+ info,
+ frames
+ };
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/cli/lib/ffprobe/index.js.map b/cli/lib/ffprobe/index.js.map
new file mode 100644
index 0000000..b3a508b
--- /dev/null
+++ b/cli/lib/ffprobe/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffprobe/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/cli/lib/ffprobe/package.json b/cli/lib/ffprobe/package.json
new file mode 100644
index 0000000..586ea4e
--- /dev/null
+++ b/cli/lib/ffprobe/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "ffprobe",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/lib/exec/Readme.md b/lib/exec/Readme.md
new file mode 100644
index 0000000..7724e22
--- /dev/null
+++ b/lib/exec/Readme.md
@@ -0,0 +1,15 @@
+
+
+## exec(cmd, arg, opts) ⇒ Promise.<{stdout: string, stderr: stderr}>
+Promisified child_process.exec
+
+**Kind**: global function
+
+| Param | Type | Description |
+| --- | --- | --- |
+| cmd | | |
+| arg | | |
+| opts | | See child_process.exec node docs |
+| opts.stdout | stream.Writable
| If defined, child process stdout will be piped to it. |
+| opts.stderr | stream.Writable
| If defined, child process stderr will be piped to it. |
+
diff --git a/lib/exec/index.js b/lib/exec/index.js
new file mode 100644
index 0000000..bc70613
--- /dev/null
+++ b/lib/exec/index.js
@@ -0,0 +1,44 @@
+'use strict';
+const execRaw = require('child_process').exec;
+/**
+ * Promisified child_process.exec
+ *
+ * @param cmd
+ * @param arg
+ * @param opts See child_process.exec node docs
+ * @param {stream.Writable} opts.stdout If defined, child process stdout will be piped to it.
+ * @param {stream.Writable} opts.stderr If defined, child process stderr will be piped to it.
+ *
+ * @returns {Promise<{ stdout: string, stderr: stderr }>}
+ */
+async function exec(...args) {
+ let cmd = args[0];
+ let argz = null;
+ let opts = null;
+ if (typeof args[1] === 'object' && Array.isArray(args[1])) {
+ argz = args[1];
+ }
+ if (argz === null && typeof args[1] === 'object') {
+ opts = args[1];
+ }
+ else if (typeof args[2] === 'object') {
+ opts = args[2];
+ }
+ if (opts === null) {
+ opts = { maxBuffer: 1024 * 1024 };
+ }
+ return new Promise((resolve, reject) => {
+ const child = execRaw(cmd, opts, (err, stdout, stderr) => err ? reject(err) : resolve({
+ stdout,
+ stderr
+ }));
+ if (opts.stdout) {
+ child.stdout.pipe(opts.stdout);
+ }
+ if (opts.stderr) {
+ child.stderr.pipe(opts.stderr);
+ }
+ });
+}
+module.exports = exec;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/exec/index.js.map b/lib/exec/index.js.map
new file mode 100644
index 0000000..0b5a38a
--- /dev/null
+++ b/lib/exec/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exec/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,KAAK,UAAU,IAAI,CAAC,GAAG,IAAe;IACrC,IAAI,GAAG,GAAY,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,IAAI,GAAY,IAAI,CAAA;IACxB,IAAI,IAAI,GAAS,IAAI,CAAA;IAErB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1D,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QACjD,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;SAAM,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QACvC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACd;IACD,IAAI,IAAI,KAAK,IAAI,EAAE;QAClB,IAAI,GAAG,EAAE,SAAS,EAAG,IAAI,GAAG,IAAI,EAAE,CAAA;KAClC;IACE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EACjC,CAAC,GAAW,EAAE,MAAe,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,MAAM;YACN,MAAM;SACN,CAAC,CAAC,CAAC;QACC,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA"}
\ No newline at end of file
diff --git a/lib/exec/package.json b/lib/exec/package.json
new file mode 100644
index 0000000..65f0c63
--- /dev/null
+++ b/lib/exec/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "exec",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/lib/exit/Readme.md b/lib/exit/Readme.md
new file mode 100644
index 0000000..8bed916
--- /dev/null
+++ b/lib/exit/Readme.md
@@ -0,0 +1,13 @@
+
+
+## exit(msg, code)
+Exit process with either a 0 code or other
+specified failure code. Print message to console first.
+
+**Kind**: global function
+
+| Param | Type | Default | Description |
+| --- | --- | --- | --- |
+| msg | string
| | Reason for exit |
+| code | integer
| 0
| process exit code, default 0 |
+
diff --git a/lib/exit/index.js b/lib/exit/index.js
new file mode 100644
index 0000000..9cb2105
--- /dev/null
+++ b/lib/exit/index.js
@@ -0,0 +1,20 @@
+'use strict';
+/**
+ * Exit process with either a 0 code or other
+ * specified failure code. Print message to console first.
+ *
+ * @param {string} msg Reason for exit
+ * @param {integer} code process exit code, default 0
+ **/
+function exit(msg, code = 0) {
+ if (code === 0) {
+ console.log(msg);
+ process.exit();
+ }
+ else {
+ console.error(msg);
+ process.exit(code);
+ }
+}
+module.exports = exit;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/exit/index.js.map b/lib/exit/index.js.map
new file mode 100644
index 0000000..a91c605
--- /dev/null
+++ b/lib/exit/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exit/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;IAMI;AAEJ,SAAS,IAAI,CAAE,GAAY,EAAE,OAAgB,CAAC;IAC7C,IAAI,IAAI,KAAK,CAAC,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;KACf;SAAM;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnB;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC"}
\ No newline at end of file
diff --git a/lib/exit/package.json b/lib/exit/package.json
new file mode 100644
index 0000000..0ab494d
--- /dev/null
+++ b/lib/exit/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "exit",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/lib/ffmpeg/Readme.md b/lib/ffmpeg/Readme.md
new file mode 100644
index 0000000..e69de29
diff --git a/lib/ffmpeg/index.js b/lib/ffmpeg/index.js
new file mode 100644
index 0000000..128fbb7
--- /dev/null
+++ b/lib/ffmpeg/index.js
@@ -0,0 +1,168 @@
+'use strict';
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const path = __importStar(require("path"));
+const fs = __importStar(require("fs-extra"));
+const exec = __importStar(require("exec"));
+let system = {};
+let TMPDIR;
+function padded_frame(i) {
+ let len = (i + '').length;
+ let str = i + '';
+ for (let x = 0; x < 5 - len; x++) {
+ str = '0' + str;
+ }
+ return str;
+}
+async function frame(state, light) {
+ let frame = state.frame;
+ let video = state.path;
+ let w = state.info.width;
+ let h = state.info.height;
+ let padded = padded_frame(frame);
+ let ext = 'tif';
+ let rgb = light.color;
+ let tmpoutput;
+ let cmd;
+ let output;
+ let cmd2;
+ let output2;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ rgb = rgb.map((e) => {
+ return parseInt(e);
+ });
+ tmpoutput = path.join(TMPDIR, `export-${padded}.${ext}`);
+ cmd = `ffmpeg -y -i "${video}" -vf "select='gte(n\\,${frame})',scale=${w}:${h}" -vframes 1 -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"`;
+ cmd2 = `convert "${tmpoutput}" -resize ${w}x${h} -size ${w}x${h} xc:"rgb(${rgb[0]},${rgb[1]},${rgb[2]})" +swap -compose Darken -composite "${tmpoutput}"`;
+ //ffmpeg -i "${video}" -ss 00:00:07.000 -vframes 1 "export-${time}.jpg"
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff"
+ //-vf "select=gte(n\,${frame})" -compression_algo raw -pix_fmt rgb24 "export-${padded}.png"
+ try {
+ console.log(cmd);
+ output = await exec(cmd);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (output && output.stdout)
+ console.log(`"${output.stdout}"`);
+ if (rgb[0] !== 255 || rgb[1] !== 255 || rgb[2] !== 255) {
+ try {
+ console.log(cmd2);
+ output2 = await exec(cmd2);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ }
+ if (output2 && output2.stdout)
+ console.log(`"${output2.stdout}"`);
+}
+async function frames(video, obj) {
+ let tmppath = TMPDIR;
+ let ext = 'tif';
+ let tmpoutput;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ tmpoutput = path.join(tmppath, `export-%05d.${ext}`);
+ try {
+ await fs.mkdir(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"
+}
+async function clear(frame) {
+ let padded = padded_frame(frame);
+ let ext = 'tif';
+ let tmppath;
+ let tmpoutput;
+ let cmd;
+ let exists;
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+ tmppath = path.join(TMPDIR, `export-${padded}.${ext}`);
+ try {
+ exists = await fs.exists(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (!exists)
+ return false;
+ try {
+ await fs.unlink(tmppath);
+ console.log(`Cleared frame ${tmppath}`);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ return true;
+}
+async function clearAll() {
+ let tmppath = TMPDIR;
+ let files;
+ try {
+ files = await fs.readdir(tmppath);
+ }
+ catch (err) {
+ console.error(err);
+ }
+ if (files) {
+ files.forEach(async (file, index) => {
+ try {
+ await fs.unlink(path.join(tmppath, file));
+ }
+ catch (err) {
+ console.error(err);
+ }
+ });
+ }
+}
+async function checkDir() {
+ let exists;
+ try {
+ exists = await fs.exists(TMPDIR);
+ }
+ catch (err) {
+ console.error('Error checking for tmp dir', err);
+ }
+ if (!exists) {
+ try {
+ await fs.mkdir(TMPDIR);
+ console.log(`Created tmpdir ${TMPDIR}`);
+ }
+ catch (err) {
+ console.error('Error creating tmp dir', err);
+ }
+ }
+ try {
+ await clearAll();
+ }
+ catch (err) {
+ console.error(err);
+ }
+}
+module.exports = (sys) => {
+ system = sys;
+ TMPDIR = path.join(system.tmp, 'mcopy_digital');
+ checkDir();
+ return {
+ frames,
+ frame,
+ clear,
+ clearAll
+ };
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/ffmpeg/index.js.map b/lib/ffmpeg/index.js.map
new file mode 100644
index 0000000..4376337
--- /dev/null
+++ b/lib/ffmpeg/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/ffmpeg/package.json b/lib/ffmpeg/package.json
new file mode 100644
index 0000000..b78c1be
--- /dev/null
+++ b/lib/ffmpeg/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "ffmpeg",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/lib/ffprobe/Readme.md b/lib/ffprobe/Readme.md
new file mode 100644
index 0000000..e69de29
diff --git a/lib/ffprobe/index.js b/lib/ffprobe/index.js
new file mode 100644
index 0000000..2ab7590
--- /dev/null
+++ b/lib/ffprobe/index.js
@@ -0,0 +1,103 @@
+'use strict';
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = __importStar(require("fs-extra"));
+const exec = __importStar(require("exec"));
+//const spawn = require('spawn');
+//const exit = require('exit');
+let system = {};
+async function info(video) {
+ let cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "${video}"`;
+ let exists;
+ let raw;
+ let json;
+ let vid;
+ try {
+ exists = await fs.exists(video);
+ }
+ catch (err) {
+ return exit(err, 5);
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false;
+ }
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ }
+ catch (err) {
+ //return exit(err, 7);
+ console.error(err);
+ return false;
+ }
+ try {
+ json = JSON.parse(raw.stdout);
+ }
+ catch (err) {
+ return raw.stdout;
+ }
+ if (json && json.streams) {
+ vid = json.streams.find((stream) => {
+ if (stream.width && stream.height)
+ return stream;
+ });
+ }
+ if (vid) {
+ json.width = vid.width;
+ json.height = vid.height;
+ }
+ return json;
+}
+async function frames(video) {
+ let cmd = `ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
+ let exists;
+ let raw;
+ let frames;
+ try {
+ exists = await fs.exists(video);
+ }
+ catch (err) {
+ //return exit(err, 5);
+ console.error(err);
+ return false;
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false;
+ }
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ }
+ catch (err) {
+ console.error(err);
+ return false;
+ }
+ try {
+ frames = parseInt(raw.stdout);
+ }
+ catch (err) {
+ return raw.stdout;
+ }
+ return frames;
+}
+function map(obj) {
+ console.dir(obj);
+}
+module.exports = (sys) => {
+ system = sys;
+ return {
+ info,
+ frames
+ };
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/ffprobe/index.js.map b/lib/ffprobe/index.js.map
new file mode 100644
index 0000000..b3a508b
--- /dev/null
+++ b/lib/ffprobe/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffprobe/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/ffprobe/package.json b/lib/ffprobe/package.json
new file mode 100644
index 0000000..586ea4e
--- /dev/null
+++ b/lib/ffprobe/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "ffprobe",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/src/exec/index.ts b/src/exec/index.ts
new file mode 100644
index 0000000..d3193fc
--- /dev/null
+++ b/src/exec/index.ts
@@ -0,0 +1,47 @@
+'use strict'
+
+const execRaw = require('child_process').exec
+
+/**
+ * Promisified child_process.exec
+ *
+ * @param cmd
+ * @param arg
+ * @param opts See child_process.exec node docs
+ * @param {stream.Writable} opts.stdout If defined, child process stdout will be piped to it.
+ * @param {stream.Writable} opts.stderr If defined, child process stderr will be piped to it.
+ *
+ * @returns {Promise<{ stdout: string, stderr: stderr }>}
+ */
+async function exec(...args : string[]) {
+ let cmd : string = args[0]
+ let argz : string = null
+ let opts : any = null
+
+ if (typeof args[1] === 'object' && Array.isArray(args[1])) {
+ argz = args[1]
+ }
+ if (argz === null && typeof args[1] === 'object') {
+ opts = args[1]
+ } else if (typeof args[2] === 'object') {
+ opts = args[2]
+ }
+ if (opts === null) {
+ opts = { maxBuffer : 1024 * 1024 }
+ }
+ return new Promise((resolve, reject) => {
+ const child = execRaw(cmd, opts,
+ (err : Error, stdout : string, stderr: string) => err ? reject(err) : resolve({
+ stdout,
+ stderr
+ }));
+ if (opts.stdout) {
+ child.stdout.pipe(opts.stdout);
+ }
+ if (opts.stderr) {
+ child.stderr.pipe(opts.stderr);
+ }
+ });
+}
+
+module.exports = exec
\ No newline at end of file
diff --git a/src/exit/index.ts b/src/exit/index.ts
new file mode 100644
index 0000000..ad38d18
--- /dev/null
+++ b/src/exit/index.ts
@@ -0,0 +1,21 @@
+'use strict';
+
+/**
+ * Exit process with either a 0 code or other
+ * specified failure code. Print message to console first.
+ *
+ * @param {string} msg Reason for exit
+ * @param {integer} code process exit code, default 0
+ **/
+
+function exit (msg : string, code : number = 0) {
+ if (code === 0) {
+ console.log(msg);
+ process.exit();
+ } else {
+ console.error(msg);
+ process.exit(code);
+ }
+}
+
+module.exports = exit;
\ No newline at end of file
diff --git a/src/ffmpeg/index.ts b/src/ffmpeg/index.ts
new file mode 100644
index 0000000..f466c69
--- /dev/null
+++ b/src/ffmpeg/index.ts
@@ -0,0 +1,178 @@
+'use strict';
+
+import uuid from 'uuid/v4';
+import * as path from 'path';
+import * as fs from 'fs-extra';
+import * as exec from 'exec';
+//const spawn = require('spawn');
+import * as exit from 'exit';
+
+let system : any = {};
+let TMPDIR : string;
+
+function padded_frame (i : number) {
+ let len = (i + '').length;
+ let str = i + '';
+ for (let x = 0; x < 5 - len; x++) {
+ str = '0' + str;
+ }
+ return str;
+}
+
+async function frame (state : any, light : any) {
+ let frame = state.frame
+ let video = state.path
+ let w = state.info.width
+ let h = state.info.height
+ let padded = padded_frame(frame)
+ let ext = 'tif'
+ let rgb = light.color;
+ let tmpoutput;
+ let cmd;
+ let output;
+ let cmd2;
+ let output2;
+
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+
+ rgb = rgb.map((e : string) => {
+ return parseInt(e);
+ });
+
+ tmpoutput = path.join(TMPDIR, `export-${padded}.${ext}`);
+
+ cmd = `ffmpeg -y -i "${video}" -vf "select='gte(n\\,${frame})',scale=${w}:${h}" -vframes 1 -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"`;
+ cmd2 = `convert "${tmpoutput}" -resize ${w}x${h} -size ${w}x${h} xc:"rgb(${rgb[0]},${rgb[1]},${rgb[2]})" +swap -compose Darken -composite "${tmpoutput}"`;
+
+ //ffmpeg -i "${video}" -ss 00:00:07.000 -vframes 1 "export-${time}.jpg"
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "export-%05d.tiff"
+ //-vf "select=gte(n\,${frame})" -compression_algo raw -pix_fmt rgb24 "export-${padded}.png"
+
+ try {
+ console.log(cmd);
+ output = await exec(cmd);
+ } catch (err) {
+ console.error(err);
+ }
+ if (output && output.stdout) console.log(`"${output.stdout}"`);
+
+ if (rgb[0] !== 255 || rgb[1] !== 255 || rgb[2] !== 255) {
+ try {
+ console.log(cmd2);
+ output2 = await exec(cmd2);
+ } catch (err) {
+ console.error(err);
+ }
+ }
+
+ if (output2 && output2.stdout) console.log(`"${output2.stdout}"`);
+}
+
+async function frames (video : string, obj : any) {
+ let tmppath = TMPDIR;
+ let ext = 'tif';
+ let tmpoutput;
+
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+
+ tmpoutput = path.join(tmppath, `export-%05d.${ext}`);
+ try {
+ await fs.mkdir(tmppath);
+ } catch (err) {
+ console.error(err);
+ }
+
+ //ffmpeg -i "${video}" -compression_algo raw -pix_fmt rgb24 "${tmpoutput}"
+}
+
+async function clear (frame : number) {
+ let padded = padded_frame(frame);
+ let ext = 'tif';
+ let tmppath;
+ let tmpoutput;
+ let cmd;
+ let exists;
+
+ if (system.platform !== 'nix') {
+ ext = 'png';
+ }
+
+ tmppath = path.join(TMPDIR, `export-${padded}.${ext}`);
+
+ try {
+ exists = await fs.exists(tmppath);
+ } catch (err) {
+ console.error(err);
+ }
+
+ if (!exists) return false;
+
+ try {
+ await fs.unlink(tmppath);
+ console.log(`Cleared frame ${tmppath}`);
+ } catch (err) {
+ console.error(err);
+ }
+
+ return true;
+}
+
+async function clearAll () {
+ let tmppath = TMPDIR;
+ let files;
+ try {
+ files = await fs.readdir(tmppath);
+ } catch (err) {
+ console.error(err);
+ }
+ if (files) {
+ files.forEach(async (file : string, index : any) => {
+ try {
+ await fs.unlink(path.join(tmppath, file));
+ } catch (err) {
+ console.error(err);
+ }
+ });
+ }
+}
+
+async function checkDir () {
+ let exists;
+ try {
+ exists = await fs.exists(TMPDIR);
+ } catch (err) {
+ console.error('Error checking for tmp dir', err);
+ }
+
+ if (!exists) {
+ try {
+ await fs.mkdir(TMPDIR);
+ console.log(`Created tmpdir ${TMPDIR}`);
+ } catch (err) {
+ console.error('Error creating tmp dir', err);
+ }
+ }
+ try {
+ await clearAll();
+ } catch (err) {
+ console.error(err);
+ }
+}
+
+module.exports = (sys : any) => {
+ system = sys;
+ TMPDIR = path.join(system.tmp, 'mcopy_digital');
+
+ checkDir();
+
+ return {
+ frames,
+ frame,
+ clear,
+ clearAll
+ }
+}
\ No newline at end of file
diff --git a/src/ffprobe/index.ts b/src/ffprobe/index.ts
new file mode 100644
index 0000000..dfdf6df
--- /dev/null
+++ b/src/ffprobe/index.ts
@@ -0,0 +1,103 @@
+'use strict';
+
+import * as fs from 'fs-extra';
+import * as exec from'exec';
+//const spawn = require('spawn');
+//const exit = require('exit');
+
+let system = {};
+
+async function info (video : string) {
+ let cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "${video}"`
+ let exists;
+ let raw;
+ let json;
+ let vid;
+
+ try {
+ exists = await fs.exists(video);
+ } catch (err) {
+ return exit(err, 5);
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false
+ }
+
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ } catch (err) {
+ //return exit(err, 7);
+ console.error(err);
+ return false
+ }
+
+ try {
+ json = JSON.parse(raw.stdout);
+ } catch (err) {
+ return raw.stdout;
+ }
+
+ if (json && json.streams) {
+ vid = json.streams.find((stream : any) => {
+ if (stream.width && stream.height) return stream;
+ });
+ }
+
+ if (vid) {
+ json.width = vid.width;
+ json.height = vid.height;
+ }
+
+ return json;
+}
+
+async function frames (video : string) {
+ let cmd = `ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 "${video}"`;
+ let exists;
+ let raw;
+ let frames;
+
+ try {
+ exists = await fs.exists(video);
+ } catch (err) {
+ //return exit(err, 5);
+ console.error(err);
+ return false
+ }
+ if (!exists) {
+ //return exit(`File ${video} does not exist`, 6);
+ console.error(new Error(`File ${video} does not exist`));
+ return false;
+ }
+
+ try {
+ console.log(cmd);
+ raw = await exec(cmd);
+ } catch (err) {
+ console.error(err);
+ return false;
+ }
+
+ try {
+ frames = parseInt(raw.stdout)
+ } catch (err) {
+ return raw.stdout;
+ }
+
+ return frames;
+}
+
+function map (obj : any) {
+ console.dir(obj);
+}
+
+module.exports = (sys : any) => {
+ system = sys;
+ return {
+ info,
+ frames
+ }
+}
diff --git a/src/globals.d.ts b/src/globals.d.ts
index cf8c97f..98c7c35 100644
--- a/src/globals.d.ts
+++ b/src/globals.d.ts
@@ -7,6 +7,7 @@ declare module 'uuid';
declare module 'exec';
declare module 'spawn';
declare module 'systeminformation';
+declare module 'exit';
interface Device {
arduino : string;