prettier/scripts/build/rollup-plugins/executable.js

49 lines
950 B
JavaScript

"use strict";
const fs = require("fs");
const path = require("path");
module.exports = function() {
let banner;
let entry;
return {
name: "executable",
options(options) {
entry = path.resolve(options.input);
return options;
},
load(id) {
if (id !== entry) {
return;
}
const source = fs.readFileSync(id, "utf-8");
const match = source.match(/^\s*(#!.*)/);
if (match) {
banner = match[1];
return (
source.slice(0, match.index) +
source.slice(match.index + banner.length)
);
}
},
renderChunk(code) {
if (banner) {
return { code: banner + "\n" + code };
}
},
writeBundle(bundle) {
if (banner) {
const files = Object.keys(bundle);
files.forEach(file => {
fs.chmodSync(bundle[file].facadeModuleId, 0o755 & ~process.umask());
});
}
}
};
};