diff --git a/chapter03/src/process_exec.js b/chapter03/src/process_exec.js new file mode 100644 index 0000000..998765b --- /dev/null +++ b/chapter03/src/process_exec.js @@ -0,0 +1,59 @@ +/* @flow */ + +const child_process = require("child_process"); +const { promisify } = require("util"); + +child_process.exec = promisify(child_process.exec); + +async function getDirectory(path: ?string) { + try { + const cmd = "ls -ld -1 *.js"; + + let stdout; + if (typeof path === "undefined") { + ({ stdout } = await child_process.exec(cmd)); + } else { + // $FlowFixMe: Flow doesn't understand "promisify()" + ({ stdout } = await child_process.exec(cmd, { cwd: path })); + } + + console.log("OUT", path || ""); + console.log(stdout); + } catch (e) { + console.log("ERR", e.stderr); + } +} + +getDirectory(); +/* +OUT +-rw-r--r-- 1 fkereki users 3336 Apr 10 13:12 dbaccess.js +-rw-r--r-- 1 fkereki users 319 Apr 10 13:12 doroundmath.js +-rw-r--r-- 1 fkereki users 890 Apr 10 13:12 flowcomments.js +-rw-r--r-- 1 fkereki users 293 Apr 10 13:12 miniserver.js +-rw-r--r-- 1 fkereki users 751 Apr 10 13:12 process_exec.js +-rw-r--r-- 1 fkereki users 1311 Apr 10 13:12 promisify.js +-rw-r--r-- 1 fkereki users 828 Apr 10 13:12 roundmath.js +*/ + +getDirectory("/home/fkereki/MODERNJS/chapter03/flow-typed/npm"); +/* +OUT /home/fkereki/MODERNJS/chapter03/flow-typed/npm +-rw-r--r-- 1 fkereki users 4791 Apr 9 12:52 axios_v0.18.x.js +-rw-r--r-- 1 fkereki users 3006 Mar 28 14:51 babel-cli_vx.x.x.js +-rw-r--r-- 1 fkereki users 3904 Apr 9 12:52 babel-eslint_vx.x.x.js +-rw-r--r-- 1 fkereki users 2760 Apr 9 12:52 babel-preset-env_vx.x.x.js +-rw-r--r-- 1 fkereki users 888 Apr 9 12:52 babel-preset-flow_vx.x.x.js +-rw-r--r-- 1 fkereki users 518 Apr 9 12:52 eslint-config-recommended_vx.x.x.js +-rw-r--r-- 1 fkereki users 14995 Apr 9 12:52 eslint-plugin-flowtype_vx.x.x.js +-rw-r--r-- 1 fkereki users 73344 Apr 9 12:52 eslint_vx.x.x.js +-rw-r--r-- 1 fkereki users 1889 Mar 28 14:51 fetch_vx.x.x.js +-rw-r--r-- 1 fkereki users 188 Apr 9 12:52 flow-bin_v0.x.x.js +-rw-r--r-- 1 fkereki users 13290 Apr 9 12:52 flow-coverage-report_vx.x.x.js +-rw-r--r-- 1 fkereki users 1091 Apr 9 12:52 flow-remove-types_vx.x.x.js +-rw-r--r-- 1 fkereki users 5763 Apr 9 12:52 flow-typed_vx.x.x.js +-rw-r--r-- 1 fkereki users 1009 Apr 9 12:52 mariasql_vx.x.x.js +-rw-r--r-- 1 fkereki users 0 Mar 28 14:51 moment_v2.3.x.js +-rw-r--r-- 1 fkereki users 5880 Apr 9 12:52 nodemon_vx.x.x.js +-rw-r--r-- 1 fkereki users 4786 Apr 9 12:52 prettier_v1.x.x.js +*/ diff --git a/chapter03/src/process_fork.js b/chapter03/src/process_fork.js new file mode 100644 index 0000000..f18fb5f --- /dev/null +++ b/chapter03/src/process_fork.js @@ -0,0 +1,16 @@ +/* @flow */ + +const path = require("path"); +const { fork } = require("child_process"); + +console.log(path.resolve("out/process_dir.js")); + +const child = fork(path.resolve("out/process_fork_dir.js")); + +const filePath = "/home/fkereki"; + +child.send({ path: filePath }); + +child.on("message", data => { + console.log(String(data)); +}); diff --git a/chapter03/src/process_fork_dir.js b/chapter03/src/process_fork_dir.js new file mode 100644 index 0000000..7301e56 --- /dev/null +++ b/chapter03/src/process_fork_dir.js @@ -0,0 +1,14 @@ +const fs = require("fs"); + +process.on("message", obj => { + console.log("GOT!", obj); + + // Received a path to process + fs + .readdirSync(obj.path) + .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())) + .filter(file => !file.startsWith(".")) + .forEach(file => { + process.send(file); + }); +}); diff --git a/chapter03/src/process_spawn.js b/chapter03/src/process_spawn.js new file mode 100644 index 0000000..d011e83 --- /dev/null +++ b/chapter03/src/process_spawn.js @@ -0,0 +1,17 @@ +/* @flow */ + +const path = require("path"); +const { spawn } = require("child_process"); +const child = spawn("node", [path.resolve("out/process_spawn_dir.js")]); + +const filePath = "/home/fkereki"; + +child.stdin.write(filePath); + +child.stdout.on("data", data => { + console.log(String(data)); +}); + +child.stdout.on("end", () => { + child.kill(); +}); diff --git a/chapter03/src/process_spawn_dir.js b/chapter03/src/process_spawn_dir.js new file mode 100644 index 0000000..22c66cf --- /dev/null +++ b/chapter03/src/process_spawn_dir.js @@ -0,0 +1,16 @@ +const fs = require("fs"); + +process.stdin.resume(); + +process.stdin.on("data", path => { + // Received a path to process + fs + .readdirSync(path) + .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())) + .filter(file => !file.startsWith(".")) + .forEach(file => { + process.stdout.write(file + "\n"); + }); + + process.stdout.end(); +});