mirror of
https://github.com/JonasunderscoreJones/api.jonasjones.dev.git
synced 2025-10-23 12:09:19 +02:00
40 lines
No EOL
1.5 KiB
JavaScript
40 lines
No EOL
1.5 KiB
JavaScript
import * as ts from 'typescript.js';
|
|
import { readFileSync, writeFileSync, readdirSync, statSync } from 'fs.js';
|
|
import { extname, basename, join, resolve } from 'path.js';
|
|
/**
|
|
* 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 = readFileSync(file, 'utf-8');
|
|
const program = ts.createSourceFile(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 (extname(specifier.getText()) === '') {
|
|
const idx = specifier.end + offset - 1;
|
|
source = source.slice(0, idx) + '.js' + source.slice(idx);
|
|
offset += 3;
|
|
}
|
|
};
|
|
process(program);
|
|
writeFileSync(file, source);
|
|
}
|
|
function processDir(dir) {
|
|
const entries = readdirSync(dir);
|
|
for (const entry of entries) {
|
|
const path = join(dir, entry);
|
|
if (path.endsWith('.js')) {
|
|
processFile(path);
|
|
}
|
|
else if (statSync(path).isDirectory()) {
|
|
processDir(path);
|
|
}
|
|
}
|
|
}
|
|
processDir(resolve(__dirname, '..', '..', 'esm'));
|
|
//# sourceMappingURL=add-js-extensions.js.map
|