packages/kotlin-webpack-plugin/libraries-lookup.js (43 lines of code) (raw):
'use strict';
const fs = require('fs');
const path = require('path');
function lookupInPackage(pkg) {
return (
[
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.devDependencies || {}),
...Object.keys(pkg.peerDependencies || {}),
]
// We provide the Kotlin runtime externally, so we aren't looking for it
.filter((dependencyName) => dependencyName !== 'kotlin')
.map((dependencyName) => {
try {
let main;
if (require.resolve.paths) {
// resolve only searches this scripts node_modules for the dependency in newer versions
const paths = require.resolve.paths(dependencyName);
paths.push(path.resolve(process.cwd(), 'node_modules'));
main = require.resolve(dependencyName, { paths });
} else {
main = require.resolve(dependencyName);
}
// Kotlin libraries contain a <libraryname>.meta.js file
const hasKotlinMetaFile = fs.existsSync(
main.replace(/(\.js)?$/, '.meta.js')
);
return hasKotlinMetaFile ? main : null;
} catch (err) {
return null;
}
})
.filter((dependencyMainFilePath) => !!dependencyMainFilePath)
);
}
function removeDuplicates(libraries) {
return [...new Set(libraries)];
}
module.exports = {
lookupKotlinLibraries(packages) {
const libraries = packages.reduce((acc, pkg) => {
return [...acc, ...lookupInPackage(pkg)];
}, []);
return removeDuplicates(libraries);
},
};