File size: 1,853 Bytes
5641073
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const ts = __importStar(require("typescript"));
const fs_1 = require("fs");
const path_1 = require("path");
/**
 * Script that adds .js extension to imports so that it's compatible with plain
 * browser/non-webpack bundlers. TS doesn't support this natively yet.
 * @see https://github.com/microsoft/TypeScript/issues/16577
 */
function processFile(file) {
    let source = fs_1.readFileSync(file, 'utf-8');
    const program = ts.createSourceFile(path_1.basename(file), source, ts.ScriptTarget.ES2015, true);
    let offset = 0;
    const process = (node) => {
        if ((!ts.isImportDeclaration(node) && !ts.isExportDeclaration(node)) || !node.moduleSpecifier) {
            return ts.forEachChild(node, process);
        }
        const specifier = node.moduleSpecifier;
        if (path_1.extname(specifier.getText()) === '') {
            const idx = specifier.end + offset - 1;
            source = source.slice(0, idx) + '.js' + source.slice(idx);
            offset += 3;
        }
    };
    process(program);
    fs_1.writeFileSync(file, source);
}
function processDir(dir) {
    const entries = fs_1.readdirSync(dir);
    for (const entry of entries) {
        const path = path_1.join(dir, entry);
        if (path.endsWith('.js')) {
            processFile(path);
        }
        else if (fs_1.statSync(path).isDirectory()) {
            processDir(path);
        }
    }
}
processDir(path_1.resolve(__dirname, '..', '..', 'esm'));
//# sourceMappingURL=add-js-extensions.js.map