/
amd.ts
71 lines (59 loc) · 2.02 KB
/
amd.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import getInteropBlock from './shared/getInteropBlock';
import getExportBlock from './shared/getExportBlock';
import esModuleExport from './shared/esModuleExport';
import warnOnBuiltins from './shared/warnOnBuiltins';
import { Bundle as MagicStringBundle } from 'magic-string';
import { OutputOptions } from '../rollup/types';
import { FinaliserOptions } from './index';
export default function amd(
magicString: MagicStringBundle,
{
graph,
namedExportsMode,
hasExports,
indentString,
intro,
outro,
dynamicImport,
importMeta,
dependencies,
exports,
isEntryModuleFacade
}: FinaliserOptions,
options: OutputOptions
) {
warnOnBuiltins(graph, dependencies);
const deps = dependencies.map(m => `'${m.id}'`);
const args = dependencies.map(m => m.name);
if (namedExportsMode && hasExports) {
args.unshift(`exports`);
deps.unshift(`'exports'`);
}
if (dynamicImport) {
args.unshift('require');
deps.unshift(`'require'`);
}
if (importMeta) {
args.unshift('module');
deps.unshift(`'module'`);
}
const amdOptions = options.amd || {};
const params =
(amdOptions.id ? `'${amdOptions.id}', ` : ``) + (deps.length ? `[${deps.join(', ')}], ` : ``);
const useStrict = options.strict !== false ? ` 'use strict';` : ``;
const define = amdOptions.define || 'define';
const wrapperStart = `${define}(${params}function (${args.join(', ')}) {${useStrict}\n\n`;
// var foo__default = 'default' in foo ? foo['default'] : foo;
const interopBlock = getInteropBlock(dependencies, options, graph.varOrConst);
if (interopBlock) magicString.prepend(interopBlock + '\n\n');
if (intro) magicString.prepend(intro);
const exportBlock = getExportBlock(exports, dependencies, namedExportsMode, options.interop);
if (exportBlock) magicString.append('\n\n' + exportBlock);
if (namedExportsMode && hasExports && options.legacy !== true && isEntryModuleFacade)
magicString.append(`\n\n${esModuleExport}`);
if (outro) magicString.append(outro);
return magicString
.indent(indentString)
.append('\n\n});')
.prepend(wrapperStart);
}