UNPKG

roslyn-loader

Version:

Use roslyn to compile C# to TypeScript in Webpack

75 lines (68 loc) 3.2 kB
/** * Apache 2.0 License https://www.apache.org/licenses/LICENSE-2.0.html * Author: Cole Chamberlain */ const path = require('path'); const fs = require('fs'); const cache = []; module.exports = function (source) { this.cacheable && this.cacheable(); const callback = this.async(); if (this.resourcePath.indexOf('node_modules') !== -1) { // [ "/my/project/", "/moment/", "/moment-dependency/index.js" ] var nodeModuleSplit = this.resourcePath.split('node_modules'); // "/my/project/node_modules/moment/node_modules/" var packageNodeModulesDir = path.join(nodeModuleSplit.slice(0, nodeModuleSplit.length - 1).join('node_modules'), 'node_modules'); // "moment-dependency/index.js" var relativeFilePath = nodeModuleSplit[nodeModuleSplit.length - 1].replace(/^[/\\]*/, ''); // "moment-dependency" var relativePackageDir = relativeFilePath.replace(/[/\\].*$/i, ''); // "index.js" var relativeSubFilePath = relativeFilePath.replace(/[/\\].*$/i, ''); /* // "/my/project/node_modules/moment/node_modules/moment-dependency" var packageDir = path.resolve(packageNodeModulesDir, relativePackageDir); var packageJSON = require(path.join(packageDir, 'package.json')); const fingerprint = `${packageJSON.name}:${packageJSON.version}` if(cache.indexOf(fingerprint) !== -1) return callback(null, source); cache.push(fingerprint); fs.readdir(packageDir, (err, files) => { if(err) return callback(err); let handled = false; for(var licenseFileName of licenseFileNames) { if(files.indexOf(licenseFileName) !== -1) { var licensePath = path.resolve(packageDir, licenseFileName); fs.readFile(licensePath, { encoding: 'utf8' }, (licenseErr, licenseText) => { if(licenseErr) callback(licenseErr); else callback(null, `${licenseComment(packageJSON, `==${packageJSON.name}/${licenseFileName}==\n${licenseText}`)}\n${source}`); }) handled = true; break; } } // No license found, use whatever is in package.json if(!handled) callback(null, `${licenseComment(packageJSON)}\n${source}`); }) */ } else { callback(null, source); } } function licenseComment (packageJSON, licenseText) { if(licenseText && licenseText[licenseText.length - 1] === '\n') licenseText = licenseText.substring(0, licenseText.length - 1); var _licenseText = licenseText ? `\n * ${licenseText.replace(/\n+$/).replace(/(\*\/)/g, '').replace(/\n/g, '\n * ')}` : ''; var license = packageJSON.license ? sanitizeLicense(packageJSON.license) : packageJSON.licenses ? packageJSON.licenses.map(sanitizeLicense).join(', ') : null; return `/*! * ${packageJSON.name} (https://npmjs.com/package/${packageJSON.name}) * @license${license ? ` ${license}` : ''} * @version ${packageJSON.version}${_licenseText} */`; } function sanitizeLicense(license) { if(typeof license === 'string') return license; if(license && license.type && license.url) return `${license.type} (${license.url})`; return license && license.type ? license.type : ''; }