Spaces:
Configuration error
Configuration error
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 |