UNPKG

1.47 kBJavaScriptView Raw
1// const fs = require('fs');
2const { resolve, dirname, parse } = require('path');
3const commonjs = require('@rollup/plugin-commonjs');
4const inject = require('@rollup/plugin-inject');
5
6const ROLLUP = require('rollup');
7
8module.exports = function rollupPluginPartialInject({
9 prefix = '_.',
10 plugin = '',
11 path = '',
12} = {}) {
13 const input = require.resolve(
14 resolve(
15 ...[plugin ? dirname(require.resolve(plugin)) : '', path].filter((v) => v)
16 )
17 );
18
19 function set_inject() {
20 const result = {};
21 return Promise.resolve(ROLLUP.rollup({ plugins: [commonjs()], input }))
22 .then((bundle) => {
23 return bundle.generate({
24 format: 'cjs', // es
25 name: input,
26 exports: 'named',
27 });
28 })
29 .then((outputs) => {
30 const output = outputs.output[0];
31 output.exports.forEach((n) => (result[`${prefix}${n}`] = [input, n]));
32
33 Object.keys(output.modules).forEach((n) => {
34 const key = `${prefix}${parse(n).name}`;
35 if (!(key in result)) result[key] = `${n}`;
36 });
37
38 // console.log(result);
39
40 return inject(result);
41 });
42 }
43
44 let is_init = false;
45 const result = {
46 name: 'partial-inject',
47
48 async options(opts) {
49 if (!is_init) {
50 is_init = true;
51 const k = opts.plugins.indexOf(result) || 0;
52 opts.plugins.splice(k, 0, await set_inject());
53 }
54
55 return opts;
56 },
57 };
58
59 return result;
60};