vrrv-installer-builder
Version:
A complete solution to package and build a ready for distribution Electron app for MacOS, Windows and Linux with “auto update” support out of the box
98 lines (97 loc) • 3.36 kB
JavaScript
;
const fs_extra_p_1 = require("fs-extra-p");
const path = require("path");
const bluebird_1 = require("bluebird");
const readInstalled = require("read-installed");
//noinspection JSUnusedLocalSymbols
const __awaiter = require("./awaiter");
// we use relative path to avoid canonical path issue - e.g. /tmp vs /private/tmp
function copyFiltered(src, destination, filter, dereference) {
return fs_extra_p_1.copy(src, destination, {
dereference: dereference,
filter: filter,
passStats: true
});
}
exports.copyFiltered = copyFiltered;
function hasMagic(pattern) {
const set = pattern.set;
if (set.length > 1) {
return true;
}
for (let i of set[0]) {
if (typeof i !== "string") {
return true;
}
}
return false;
}
exports.hasMagic = hasMagic;
function createFilter(src, patterns, ignoreFiles, rawFilter, excludePatterns) {
return function filter(it, stat) {
if (src === it) {
return true;
}
if (rawFilter != null && !rawFilter(it)) {
return false;
}
// yes, check before path sep normalization
if (ignoreFiles != null && ignoreFiles.has(it)) {
return false;
}
let relative = it.substring(src.length + 1);
if (path.sep === "\\") {
relative = relative.replace(/\\/g, "/");
}
return minimatchAll(relative, patterns, stat) && (excludePatterns == null || !minimatchAll(relative, excludePatterns, stat));
};
}
exports.createFilter = createFilter;
function devDependencies(dir) {
return new bluebird_1.Promise((resolve, reject) => {
readInstalled(dir, (error, data) => {
if (error) {
reject(error);
} else {
resolve(flatDependencies(data, new Set()));
}
});
});
}
exports.devDependencies = devDependencies;
function flatDependencies(data, seen) {
const deps = data.dependencies;
if (deps == null) {
return [];
}
return Object.keys(deps).map(function (d) {
if (typeof deps[d] !== "object" || seen.has(deps[d])) {
return null;
}
seen.add(deps[d]);
if (deps[d].extraneous) {
const extra = deps[d];
delete deps[d];
return extra.path;
}
return flatDependencies(deps[d], seen);
}).filter(it => it !== null).reduce(function flat(l, r) {
return l.concat(Array.isArray(r) ? r.reduce(flat, []) : r);
}, []);
}
// https://github.com/joshwnj/minimatch-all/blob/master/index.js
function minimatchAll(path, patterns, stat) {
let match = false;
for (let pattern of patterns) {
// If we've got a match, only re-test for exclusions.
// if we don't have a match, only re-test for inclusions.
if (match !== pattern.negate) {
continue;
}
// partial match — pattern: foo/bar.txt path: foo — we must allow foo
// use it only for non-negate patterns: const m = new Minimatch("!node_modules/@(electron-download|electron)/**/*", {dot: true }); m.match("node_modules", true) will return false, but must be true
match = pattern.match(path, stat.isDirectory() && !pattern.negate);
}
return match;
}
//# sourceMappingURL=filter.js.map