UNPKG

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