in src/index.js [44:129]
apply(compiler) {
const directory = this.options.directory || process.cwd()
const additionalModules = this.options.modules || []
const filename = this.options.filename || 'third-party-libs.xml'
const pkg = require(join(directory, 'package.json'))
const title = this.options.title || `${pkg.description} Front-End Libraries`
const production = !this.options.devDependencies
const formatModules = this.options.format || format
const filterModules = this.filterModules.bind(this)
const filterReasons = this.filterReasons.bind(this)
const forceAddPackages = this.forceAddPackages
const customLicenses = this.customLicenses
const surviveLicenseErrors = this.options.surviveLicenseErrors
const ignoreTeamcity = Boolean(this.options.ignoreTeamcity)
const teamcityMessageStatus = this.options.teamcityMessageStatus
const emit = (curCompiler, callback) => {
// FS aliases from webpack.
const mkdir = compiler.outputFileSystem.mkdir
const writeFile = compiler.outputFileSystem.writeFile
const stats = curCompiler.getStats().toJson({
assets: false,
chunks: false,
source: false
})
const processModules = modules =>
modules.filter(filterModules).reduce(
(collected, module) =>
(module.modules ? collected.concat(processModules(module.modules)) : collected).concat(
module.reasons.filter(filterReasons).map(
reason =>
(reason.userRequest[0] === '@'
? reason.userRequest.
split('/').
splice(0, 2).
join('/')
: reason.userRequest.split('/')[0]),
),
),
[],
)
const foundModules = processModules(stats.modules).concat(additionalModules)
const modules = foundModules.concat(forceAddPackages)
const uniqueModules = [...new Set(modules)]
getLicences(
uniqueModules,
{directory, production, surviveLicenseErrors, ignoreTeamcity, teamcityMessageStatus},
(getLicencesError, _modules) => {
if (getLicencesError) {
return callback(getLicencesError)
}
const allModules = _modules.concat(customLicenses)
const filePath = join(compiler.options.output.path, filename)
mkdir(dirname(filePath), {recursive: true}, mkdirError => {
if (mkdirError && mkdirError.code !== 'EEXIST') {
return callback(mkdirError);
}
writeFile(
filePath,
formatModules({title, modules: allModules}),
{flags: 'w+'},
callback,
)
return undefined
})
return undefined
},
)
}
if (compiler.hooks) {
compiler.hooks.emit.tapAsync('RingUiLicenseCheckerPlugin', emit)
} else {
compiler.plugin('emit', emit)
}
}