AppFileWalker.js
4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AppFileWalker = exports.FileCopyHelper = void 0;
function _fsExtra() {
const data = require("fs-extra");
_fsExtra = function () {
return data;
};
return data;
}
var path = _interopRequireWildcard(require("path"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const nodeModulesSystemDependentSuffix = `${path.sep}node_modules`;
function addAllPatternIfNeed(matcher) {
if (!matcher.isSpecifiedAsEmptyArray && (matcher.isEmpty() || matcher.containsOnlyIgnore())) {
matcher.prependPattern("**/*");
}
return matcher;
}
class FileCopyHelper {
constructor(matcher, filter, packager) {
this.matcher = matcher;
this.filter = filter;
this.packager = packager;
this.metadata = new Map();
}
handleFile(file, parent, fileStat) {
if (!fileStat.isSymbolicLink()) {
return null;
}
return (0, _fsExtra().readlink)(file).then(linkTarget => {
// http://unix.stackexchange.com/questions/105637/is-symlinks-target-relative-to-the-destinations-parent-directory-and-if-so-wh
return this.handleSymlink(fileStat, file, parent, linkTarget);
});
}
handleSymlink(fileStat, file, parent, linkTarget) {
const resolvedLinkTarget = path.resolve(parent, linkTarget);
const link = path.relative(this.matcher.from, resolvedLinkTarget);
if (link.startsWith("..")) {
// outside of project, linked module (https://github.com/electron-userland/electron-builder/issues/675)
return (0, _fsExtra().stat)(resolvedLinkTarget).then(targetFileStat => {
this.metadata.set(file, targetFileStat);
return targetFileStat;
});
} else {
const s = fileStat;
s.relativeLink = link;
s.linkRelativeToFile = path.relative(parent, resolvedLinkTarget);
}
return null;
}
}
exports.FileCopyHelper = FileCopyHelper;
function createAppFilter(matcher, packager) {
if (packager.areNodeModulesHandledExternally) {
return matcher.isEmpty() ? null : matcher.createFilter();
}
const nodeModulesFilter = (file, fileStat) => {
return !(fileStat.isDirectory() && file.endsWith(nodeModulesSystemDependentSuffix));
};
if (matcher.isEmpty()) {
return nodeModulesFilter;
}
const filter = matcher.createFilter();
return (file, fileStat) => {
if (!nodeModulesFilter(file, fileStat)) {
return false;
}
return filter(file, fileStat);
};
}
/** @internal */
class AppFileWalker extends FileCopyHelper {
constructor(matcher, packager) {
super(addAllPatternIfNeed(matcher), createAppFilter(matcher, packager), packager);
} // noinspection JSUnusedGlobalSymbols
// eslint-disable-next-line @typescript-eslint/no-unused-vars
consume(file, fileStat, parent, siblingNames) {
if (fileStat.isDirectory()) {
// https://github.com/electron-userland/electron-builder/issues/1539
// but do not filter if we inside node_modules dir
// update: solution disabled, node module resolver should support such setup
if (file.endsWith(nodeModulesSystemDependentSuffix)) {
return false;
}
} else {
// save memory - no need to store stat for directory
this.metadata.set(file, fileStat);
}
return this.handleFile(file, parent, fileStat);
}
} exports.AppFileWalker = AppFileWalker;
// __ts-babel@6.0.4
//# sourceMappingURL=AppFileWalker.js.map