51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
|
const path = require('path');
|
||
|
const fs = require('fs');
|
||
|
|
||
|
const mainExport = bundler => {
|
||
|
const readAsset = pathArg => {
|
||
|
try {
|
||
|
return fs.readFileSync(pathArg, 'utf8');
|
||
|
} catch (e) {
|
||
|
console.error('file is invalid');
|
||
|
throw e;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const writeAsset = (name, { header = '', footer = '' }) => {
|
||
|
fs.writeFileSync(
|
||
|
name,
|
||
|
`${header}
|
||
|
${readAsset(name)}
|
||
|
${footer}`
|
||
|
);
|
||
|
};
|
||
|
|
||
|
const processAsset = async (bundle, processFn) => {
|
||
|
const { name } = bundle;
|
||
|
const wrappingCode = await processFn({ name, bundler });
|
||
|
|
||
|
if (wrappingCode) {
|
||
|
writeAsset(name, wrappingCode);
|
||
|
}
|
||
|
|
||
|
bundle.childBundles.forEach(function(bundle) {
|
||
|
processAsset(bundle, processFn);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
bundler.on('bundled', async bundle => {
|
||
|
try {
|
||
|
const CWD = process.cwd();
|
||
|
const processFn = require(path.join(CWD, '.assetWrapper.js'));
|
||
|
if (processFn && typeof processFn === 'function') {
|
||
|
await processAsset(bundle, processFn);
|
||
|
}
|
||
|
} catch (error) {
|
||
|
console.warn(
|
||
|
'parcel-plugin-wrapper cannot work without a .assetWrapper.js in the root of your project!'
|
||
|
);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
export default mainExport;
|