1 |
|
2 | const { resolve, dirname, parse } = require('path');
|
3 | const commonjs = require('@rollup/plugin-commonjs');
|
4 | const inject = require('@rollup/plugin-inject');
|
5 |
|
6 | const ROLLUP = require('rollup');
|
7 |
|
8 | module.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',
|
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 |
|
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 | };
|