UNPKG

2.12 kBJavaScriptView Raw
1'use strict';
2
3function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
4
5var virtual = _interopDefault(require('@rollup/plugin-virtual'));
6var matched = require('matched');
7
8/* eslint-disable no-param-reassign */
9
10const DEFAULT_OUTPUT = 'multi-entry.js';
11const AS_IMPORT = 'import';
12const AS_EXPORT = 'export * from';
13
14function multiEntry(conf = {}) {
15 const config = {
16 include: [],
17 exclude: [],
18 entryFileName: DEFAULT_OUTPUT,
19 exports: true,
20 ...conf
21 };
22
23 let prefix = config.exports === false ? AS_IMPORT : AS_EXPORT;
24 const exporter = (path) => `${prefix} ${JSON.stringify(path)}`;
25
26 const configure = (input) => {
27 if (typeof input === 'string') {
28 config.include = [input];
29 } else if (Array.isArray(input)) {
30 config.include = input;
31 } else {
32 const { include = [], exclude = [], entryFileName = DEFAULT_OUTPUT, exports } = input;
33 config.include = include;
34 config.exclude = exclude;
35 config.entryFileName = entryFileName;
36 if (exports === false) {
37 prefix = AS_IMPORT;
38 }
39 }
40 };
41
42 let virtualisedEntry;
43
44 return {
45 name: 'multi-entry',
46
47 options(options) {
48 if (options.input !== config.entryFileName) {
49 configure(options.input);
50 }
51 return {
52 ...options,
53 input: config.entryFileName
54 };
55 },
56
57 outputOptions(options) {
58 return {
59 ...options,
60 entryFileNames: config.entryFileName
61 };
62 },
63
64 buildStart(options) {
65 const patterns = config.include.concat(config.exclude.map((pattern) => `!${pattern}`));
66 const entries = patterns.length
67 ? matched.promise(patterns, { realpath: true }).then((paths) => paths.map(exporter).join('\n'))
68 : Promise.resolve('');
69
70 virtualisedEntry = virtual({ [options.input]: entries });
71 },
72
73 resolveId(id, importer) {
74 return virtualisedEntry && virtualisedEntry.resolveId(id, importer);
75 },
76
77 load(id) {
78 return virtualisedEntry && virtualisedEntry.load(id);
79 }
80 };
81}
82
83module.exports = multiEntry;