forked from rockybars/atom-shell-packager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ignore.js
94 lines (77 loc) · 2.39 KB
/
ignore.js
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
'use strict'
const common = require('./common')
const debug = require('debug')('electron-packager')
const path = require('path')
const prune = require('./prune')
const targets = require('./targets')
const DEFAULT_IGNORES = [
'/\\.git($|/)',
'/node_modules/\\.bin($|/)',
'\\.o(bj)?$'
]
function generateIgnores (opts) {
if (typeof (opts.ignore) !== 'function') {
if (opts.ignore) {
opts.ignore = common.ensureArray(opts.ignore).concat(DEFAULT_IGNORES)
} else {
opts.ignore = [].concat(DEFAULT_IGNORES)
}
if (process.platform === 'linux') {
opts.ignore.push(common.baseTempDir(opts))
}
debug('Ignored path regular expressions:', opts.ignore)
}
}
function generateOutIgnores (opts) {
const normalizedOut = opts.out ? path.resolve(opts.out) : null
const outIgnores = []
if (normalizedOut === null || normalizedOut === process.cwd()) {
for (const platform of Object.keys(targets.officialPlatformArchCombos)) {
for (const arch of targets.officialPlatformArchCombos[platform]) {
let basenameOpts = {
arch: arch,
name: opts.name,
platform: platform
}
outIgnores.push(path.join(process.cwd(), common.generateFinalBasename(basenameOpts)))
}
}
} else {
outIgnores.push(normalizedOut)
}
debug('Ignored paths based on the out param:', outIgnores)
return outIgnores
}
function userIgnoreFilter (opts) {
let ignore = opts.ignore || []
let ignoreFunc = null
if (typeof (ignore) === 'function') {
ignoreFunc = file => { return !ignore(file) }
} else {
ignore = common.ensureArray(ignore)
ignoreFunc = function filterByRegexes (file) {
return !ignore.some(regex => file.match(regex))
}
}
const outIgnores = generateOutIgnores(opts)
const pruner = opts.prune ? new prune.Pruner(opts.dir) : null
return function filter (file) {
if (outIgnores.indexOf(file) !== -1) {
return false
}
let name = file.split(path.resolve(opts.dir))[1]
if (path.sep === '\\') {
name = common.normalizePath(name)
}
if (pruner && name.startsWith('/node_modules/')) {
return prune.isModule(file)
.then(isModule => isModule ? pruner.pruneModule(name) : ignoreFunc(name))
}
return ignoreFunc(name)
}
}
module.exports = {
generateIgnores: generateIgnores,
generateOutIgnores: generateOutIgnores,
userIgnoreFilter: userIgnoreFilter
}