From 422cd3a254592ae7733773d87e0a61a1eb96b3ad Mon Sep 17 00:00:00 2001 From: Nemo Date: Thu, 15 Jul 2021 21:36:12 +0530 Subject: [PATCH] Get it working for some files --- finder.js | 2 +- index.js | 40 +++++++++++-------------- package-lock.json | 76 +++++++++++++++++++++++++++++++++++------------ package.json | 8 +++-- zip.js | 27 +++++++++++++++++ 5 files changed, 109 insertions(+), 44 deletions(-) create mode 100644 zip.js diff --git a/finder.js b/finder.js index 4f1031f..fa34b4a 100644 --- a/finder.js +++ b/finder.js @@ -5,7 +5,7 @@ const isDirectory = require('./utils').isDirectory; module.exports = { // Finds the electron asar file, if we can asar: function(entries) { - return Object.values(entries) + return entries .filter((e) => { return ( isDirectory(e.attributes) == false && diff --git a/index.js b/index.js index efe8885..4996b45 100644 --- a/index.js +++ b/index.js @@ -1,36 +1,32 @@ -const Seven = require("node-7z"); const path = require("path"); const osguess = require("./os"); const finder = require("./finder"); +const zip = require("./zip"); + // Input file comes from process.argv[2] - const FILENAME = process.argv[2]; -console.log(FILENAME) -const zip = Seven.list(FILENAME); -entries = []; -zip.on("data", (data) => { - entries.push(data); -}); -zip.on("end", () => { +zip.listFileContents(FILENAME, (entries)=> { let asar = finder.asar(entries); let binary = finder.binary(entries); let versionFiles = finder.version(entries); let enm = finder.findElectronPackageInsideNodeModules(entries); - if (asar.length > 0) { - asar.forEach((a) => { - console.log(`${process.argv[2]}:${a}`); - }); - } - if (binary) { - console.log(`${process.argv[2]}:${binary}`); - } + // if (asar.length > 0) { + // asar.forEach((a) => { + // console.log(`${process.argv[2]}:${a}`); + // }); + // } + // if (binary) { + // console.log(`${process.argv[2]}:${binary}`); + // } if (versionFiles.length > 0) { - versionFiles.forEach((a) => { - console.log(`${process.argv[2]}:${a}`); + versionFiles.map((f) => { + zip.readFileContents(FILENAME, f, (c)=>console.log(c)) }); } - if (enm) { - enm.forEach((a) => console.log(`${process.argv[2]}:${a}`)); - } + // if (enm) { + // enm.forEach((a) => { + // zip.readFileContents(FILENAME, a, (c)=>console.log(c)) + // }); + // } }); diff --git a/package-lock.json b/package-lock.json index b81ac90..004dcef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,9 @@ "dependencies": { "asar": "^3.0.3", "elfinfo": "*", - "node-7z": "^3.0.0", - "node-stream-zip": "^1.13.6" + "elfy": "^1.0.0", + "macho": "^1.4.0", + "node-7z": "^3.0.0" } }, "node_modules/@types/glob": { @@ -117,6 +118,24 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" }, + "node_modules/elfy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/elfy/-/elfy-1.0.0.tgz", + "integrity": "sha512-4Kp3AA94jC085IJox+qnvrZ3PudqTi4gQNvIoTZfJJ9IqkRuCoqP60vCVYlIg00c5aYusi5Wjh2bf0cHYt+6gQ==", + "dependencies": { + "endian-reader": "^0.3.0" + } + }, + "node_modules/elfy/node_modules/endian-reader": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/endian-reader/-/endian-reader-0.3.0.tgz", + "integrity": "sha1-hOykNrgK7Q0GOcRykTOLky7+UKA=" + }, + "node_modules/endian-reader": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/endian-reader/-/endian-reader-0.1.0.tgz", + "integrity": "sha1-7tYexWSqX2KFJI82JF4siRVtlKw=" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -180,6 +199,14 @@ "resolved": "https://registry.npmjs.org/lodash.negate/-/lodash.negate-3.0.2.tgz", "integrity": "sha1-nIl7C/YQAZ4LQ7j/Pwr+89e2bzQ=" }, + "node_modules/macho": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/macho/-/macho-1.4.0.tgz", + "integrity": "sha512-PT3YMEKYogCeVYEA2bCFRZASNyn/JaOhjq6eV8SzBQ3RFia7XU8ASQCgGx+f3RnJFHT+xavLP+Qds48jQb0J5Q==", + "dependencies": { + "endian-reader": "^0.1.0" + } + }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -213,18 +240,6 @@ "node": ">=10" } }, - "node_modules/node-stream-zip": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.6.tgz", - "integrity": "sha512-c7tRSVkLNOHvasWgmZ2d86cDgTWEygnkuuHNOY9c0mR3yLZtQTTrGvMaJ/fPs6+LOJn3240y30l5sjLaXFtcvw==", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -342,6 +357,26 @@ } } }, + "elfy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/elfy/-/elfy-1.0.0.tgz", + "integrity": "sha512-4Kp3AA94jC085IJox+qnvrZ3PudqTi4gQNvIoTZfJJ9IqkRuCoqP60vCVYlIg00c5aYusi5Wjh2bf0cHYt+6gQ==", + "requires": { + "endian-reader": "^0.3.0" + }, + "dependencies": { + "endian-reader": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/endian-reader/-/endian-reader-0.3.0.tgz", + "integrity": "sha1-hOykNrgK7Q0GOcRykTOLky7+UKA=" + } + } + }, + "endian-reader": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/endian-reader/-/endian-reader-0.1.0.tgz", + "integrity": "sha1-7tYexWSqX2KFJI82JF4siRVtlKw=" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -399,6 +434,14 @@ "resolved": "https://registry.npmjs.org/lodash.negate/-/lodash.negate-3.0.2.tgz", "integrity": "sha1-nIl7C/YQAZ4LQ7j/Pwr+89e2bzQ=" }, + "macho": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/macho/-/macho-1.4.0.tgz", + "integrity": "sha512-PT3YMEKYogCeVYEA2bCFRZASNyn/JaOhjq6eV8SzBQ3RFia7XU8ASQCgGx+f3RnJFHT+xavLP+Qds48jQb0J5Q==", + "requires": { + "endian-reader": "^0.1.0" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -426,11 +469,6 @@ "normalize-path": "^3.0.0" } }, - "node-stream-zip": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.6.tgz", - "integrity": "sha512-c7tRSVkLNOHvasWgmZ2d86cDgTWEygnkuuHNOY9c0mR3yLZtQTTrGvMaJ/fPs6+LOJn3240y30l5sjLaXFtcvw==" - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", diff --git a/package.json b/package.json index d8397d3..c675f8a 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "version": "1.0.0", "description": "Guess which electron version is bundled in an application", "main": "index.js", + "bin": { + "which-electron": "index.js" + }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -26,7 +29,8 @@ "dependencies": { "asar": "^3.0.3", "elfinfo": "*", - "node-7z": "^3.0.0", - "node-stream-zip": "^1.13.6" + "elfy": "^1.0.0", + "macho": "^1.4.0", + "node-7z": "^3.0.0" } } diff --git a/zip.js b/zip.js new file mode 100644 index 0000000..117b850 --- /dev/null +++ b/zip.js @@ -0,0 +1,27 @@ +const Seven = require("node-7z"); +const path = require("path"); +const fs = require("fs"); + +module.exports = { + readFileContents: function(archive, filepath, cb) { + // TODO: Create a new temp directory + let stream = Seven.extract(archive, "/tmp", { + recursive: true, + $cherryPick: filepath, + }); + let fn = path.basename(filepath); + stream.on("end", ()=>{ + cb(fs.readFileSync(`/tmp/${fn}`, {encoding: 'utf8'})) + }); + }, + listFileContents: function(archive, cb) { + let zip = Seven.list(archive); + let entries = []; + zip.on("data", (data) => { + entries.push(data); + }); + zip.on("end", () => { + cb(entries); + }); + }, +};