imba
Version:
59 lines (55 loc) • 1.88 kB
text/typescript
// import MagicString, { MagicStringOptions } from 'magic-string';
// import { log } from './log';
// export async function buildMagicString(
// from: string,
// to: string,
// options?: MagicStringOptions
// ): Promise<MagicString | null> {
// let diff_match_patch, DIFF_DELETE: number, DIFF_INSERT: number;
// try {
// const dmpPkg = await import('diff-match-patch');
// diff_match_patch = dmpPkg.diff_match_patch;
// DIFF_INSERT = dmpPkg.DIFF_INSERT;
// DIFF_DELETE = dmpPkg.DIFF_DELETE;
// } catch (e) {
// log.error.once(
// 'Failed to import optional dependency "diff-match-patch". Please install it to enable generated sourcemaps.'
// );
// return null;
// }
// const dmp = new diff_match_patch();
// const diffs = dmp.diff_main(from, to);
// dmp.diff_cleanupSemantic(diffs);
// const m = new MagicString(from, options);
// let pos = 0;
// for (let i = 0; i < diffs.length; i++) {
// const diff = diffs[i];
// const nextDiff = diffs[i + 1];
// if (diff[0] === DIFF_DELETE) {
// if (nextDiff?.[0] === DIFF_INSERT) {
// // delete followed by insert, use overwrite and skip ahead
// m.overwrite(pos, pos + diff[1].length, nextDiff[1]);
// i++;
// } else {
// m.remove(pos, pos + diff[1].length);
// }
// pos += diff[1].length;
// } else if (diff[0] === DIFF_INSERT) {
// if (nextDiff) {
// m.appendRight(pos, diff[1]);
// } else {
// m.append(diff[1]);
// }
// } else {
// // unchanged block, advance pos
// pos += diff[1].length;
// }
// }
// // at this point m.toString() === to
// return m;
// }
// export async function buildSourceMap(from: string, to: string, filename?: string) {
// // @ts-ignore
// const m = await buildMagicString(from, to, { filename });
// return m ? m.generateDecodedMap({ source: filename, hires: true, includeContent: false }) : null;
// }