esmodule-builder
Version:
ECMAScript-Module (ES Module) builder.
73 lines • 5.65 kB
JavaScript
import { SourceMapConsumer, SourceMapGenerator } from '#source-map';
export class SourceMap {
constructor() {
this._sources = [];
}
addSource(path, lines, lineStartNo = 1) {
const source = {
path,
lines,
lineStartNo,
lineCount: lines.length,
};
this._sources.push(source);
}
sources() {
return this._sources;
}
wholeContent() {
return this._sources.map(_ => _.lines.join('\n') + '\n').join('');
}
getLocation(wholeLineNo) {
let remain = wholeLineNo - 1;
for (const source of this._sources) {
if (remain >= source.lineCount) {
remain -= source.lineCount;
continue;
}
return {
path: source.path,
line: source.lineStartNo + remain,
};
}
throw new Error('"wholeLineNo" is out of range.');
}
async originalSourceMap(wholeSourceMap) {
const consumer = await new SourceMapConsumer(wholeSourceMap);
const generator = new SourceMapGenerator({
file: consumer.file,
sourceRoot: '',
});
consumer.eachMapping(record => {
if (record.source) {
let { path, line } = this.getLocation(record.originalLine);
const column = record.originalColumn;
// console.log(11, record.originalLine, path, line, column)
generator.addMapping({
generated: { line: record.generatedLine, column: record.generatedColumn },
original: { line: line, column: column },
source: path,
name: record.name,
});
}
else {
generator.addMapping({
generated: { line: record.generatedLine, column: record.generatedColumn },
});
}
});
return generator.toJSON();
}
createFileComment(sourceMap) {
return `//# sourceMappingURL=${sourceMap.file}.map`;
}
createInlineComment(sourceMap) {
const image = Buffer.from(JSON.stringify(sourceMap), 'ascii').toString('base64');
return `//# sourceMappingURL=data:application/json;base64,${image}`;
}
toString() {
return this._sources.map(_ => `${_.path}:${_.lineStartNo}:${_.lineCount}`).join('\n');
}
}
export default SourceMap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlbWFwLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9zb3VyY2VtYXAubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSxhQUFhLENBQUE7QUFXMUYsTUFBTSxPQUFPLFNBQVM7SUFBdEI7UUErRlMsYUFBUSxHQUFhLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBL0ZBLFNBQVMsQ0FDUixJQUFZLEVBQ1osS0FBZSxFQUNmLGNBQXNCLENBQUM7UUFFdkIsTUFBTSxNQUFNLEdBQUc7WUFDZCxJQUFJO1lBQ0osS0FBSztZQUNMLFdBQVc7WUFDWCxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU07U0FDdkIsQ0FBQTtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFRCxPQUFPO1FBRU4sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxZQUFZO1FBRVgsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRUQsV0FBVyxDQUNWLFdBQW1CO1FBRW5CLElBQUksTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFFNUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25DLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO2dCQUMxQixTQUFRO2FBQ1I7WUFFRCxPQUFPO2dCQUNOLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTTthQUNqQyxDQUFBO1NBQ0Q7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FDdEIsY0FBNEI7UUFFNUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRTVELE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQWtCLENBQUM7WUFDeEMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLFVBQVUsRUFBRSxFQUFFO1NBQ2QsQ0FBQyxDQUFBO1FBRUYsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUE7Z0JBRXBDLDJEQUEyRDtnQkFFM0QsU0FBUyxDQUFDLFVBQVUsQ0FBQztvQkFDcEIsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUU7b0JBQ3pFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtvQkFDeEMsTUFBTSxFQUFFLElBQUk7b0JBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2lCQUNqQixDQUFDLENBQUE7YUFDRjtpQkFDSTtnQkFDSixTQUFTLENBQUMsVUFBVSxDQUFDO29CQUNwQixTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRTtpQkFDOUQsQ0FBQyxDQUFBO2FBQ2I7UUFDRixDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUF1QjtRQUN4QyxPQUFPLHdCQUF3QixTQUFTLENBQUMsSUFBSSxNQUFNLENBQUE7SUFDcEQsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQXVCO1FBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFaEYsT0FBTyxxREFBcUQsS0FBSyxFQUFFLENBQUE7SUFDcEUsQ0FBQztJQUVELFFBQVE7UUFFUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RGLENBQUM7Q0FHRDtBQUVELGVBQWUsU0FBUyxDQUFBIn0=