cordova-plugin-exclude-files
Version:
A cordova plugin that allows to exclude files from the build
58 lines (49 loc) • 1.6 kB
JavaScript
const del = require('del')
const pify = require('pify')
// eslint-disable-next-line import/order
const readFile = pify(require('fs').readFile)
const parseXml = pify(require('xml2js').parseString)
const { pipe, get, keyBy } = require('lodash/fp')
const { map, mapValues, zipAll, zipObj } = require('lodash/fp')
module.exports = {
parseConfig,
extractExcludePatterns,
buildDeletionJobs,
processDeletionJob,
}
function parseConfig(path) {
return readFile(path, 'utf8')
.then(parseXml)
.then(get('widget'))
}
function extractExcludePatterns(config) {
const getPatterns = pipe(get('exclude-files'), map('$.pattern'))
const getPlatformConfigs = pipe(get('platform'), keyBy('$.name'))
return {
global: getPatterns(config),
byPlatform: mapValues(getPatterns, getPlatformConfigs(config)),
}
}
function buildDeletionJobs(patterns, context) {
const platformPaths = context.opts.paths
const platformNames = context.opts.platforms
const normalizedPatterns = platformNames
.map(name => patterns.byPlatform[name] || [])
.map(excludes => patterns.global.concat(excludes))
return zipAll([platformNames, platformPaths, normalizedPatterns]).map(
zipObj(['platform', 'path', 'patterns'])
)
}
function processDeletionJob(job) {
return del(job.patterns, { cwd: job.path }).then(
excludedPathsLoggerFor(job.platform)
)
}
function excludedPathsLoggerFor(platform) {
const header = `Excluded following paths from ${platform} build:\n `
return paths => {
if (paths.length === 0) return
console.log(header + paths.join('\n '))
}
}