本文整理汇总了TypeScript中source-map.SourceMapGenerator类的典型用法代码示例。如果您正苦于以下问题:TypeScript SourceMapGenerator类的具体用法?TypeScript SourceMapGenerator怎么用?TypeScript SourceMapGenerator使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SourceMapGenerator类的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: generateSourceMap
function generateSourceMap(
filename: string,
source: string,
generated: string,
sourceRoot: string
): RawSourceMap {
const map = new SourceMapGenerator({
file: filename.replace(/\\/g, '/'),
sourceRoot: sourceRoot.replace(/\\/g, '/')
})
map.setSourceContent(filename, source)
generated.split(splitRE).forEach((line, index) => {
if (!emptyRE.test(line)) {
map.addMapping({
source: filename,
original: {
line: index + 1,
column: 0
},
generated: {
line: index + 1,
column: 0
}
})
}
})
return map.toJSON()
}
示例2: createJsIdentitySourcemap
/**
* Creates an identity source map from JS script content. Can offset original
* line/column data for inline script elements.
*/
function createJsIdentitySourcemap(
sourceUrl: string,
sourceContent: string,
lineOffset: number,
firstLineCharOffset: number) {
const generator = new SourceMapGenerator();
const tokens = espree.tokenize(
sourceContent, {loc: true, ecmaVersion: 2017, sourceType: 'module'});
tokens.forEach((token) => {
if (!token.loc) {
return null;
}
const mapping: Mapping = {
original: {
line: token.loc.start.line + lineOffset,
column: token.loc.start.column +
(token.loc.start.line === 1 ? firstLineCharOffset : 0)
},
generated: token.loc.start,
source: sourceUrl
};
if (token.type === 'Identifier') {
mapping.name = token.value;
}
generator.addMapping(mapping);
});
return generator.toJSON();
}
示例3: offsetSourceMap
function offsetSourceMap(
sourcemap: RawSourceMap, lineOffset: number, firstLineCharOffset: number) {
const consumer = new SourceMapConsumer(sourcemap);
const generator = new SourceMapGenerator();
consumer.eachMapping((mapping) => {
if (typeof mapping.originalLine !== 'number' ||
typeof mapping.originalColumn !== 'number') {
return;
}
const newMapping: Mapping = {
source: mapping.source,
generated: {
line: mapping.generatedLine + lineOffset,
column: mapping.generatedColumn +
(mapping.generatedLine === 1 ? firstLineCharOffset : 0)
},
original: {line: mapping.originalLine, column: mapping.originalColumn}
};
if (mapping.name) {
newMapping.name = mapping.name;
}
generator.addMapping(newMapping);
});
return generator.toJSON();
}
示例4: merge
export function merge(
oldMap: RawSourceMap,
newMap: RawSourceMap
): RawSourceMap {
if (!oldMap) return newMap
if (!newMap) return oldMap
const oldMapConsumer: SourceMapConsumer = new SourceMapConsumer(oldMap) as any
const newMapConsumer: SourceMapConsumer = new SourceMapConsumer(newMap) as any
const mergedMapGenerator = new SourceMapGenerator()
// iterate on new map and overwrite original position of new map with one of old map
newMapConsumer.eachMapping((mapping: MappingItem) => {
// pass when `originalLine` is null.
// It occurs in case that the node does not have origin in original code.
if (mapping.originalLine == null) return
const origPosInOldMap = oldMapConsumer.originalPositionFor({
line: mapping.originalLine,
column: mapping.originalColumn
})
if (origPosInOldMap.source == null) return
mergedMapGenerator.addMapping({
original: {
line: origPosInOldMap.line,
column: origPosInOldMap.column
},
generated: {
line: mapping.generatedLine,
column: mapping.generatedColumn
},
source: origPosInOldMap.source,
name: origPosInOldMap.name
} as any)
})
const maps = [oldMap, newMap]
const consumers = [oldMapConsumer, newMapConsumer]
consumers.forEach((consumer, index) => {
maps[index].sources.forEach(sourceFile => {
const sourceContent = consumer.sourceContentFor(sourceFile, true)
if (sourceContent !== null) {
mergedMapGenerator.setSourceContent(sourceFile, sourceContent)
}
})
})
return JSON.parse(mergedMapGenerator.toString())
}
示例5: combineSourceMaps
function combineSourceMaps(
program: ts.Program, filePath: string, tscSourceMapText: string): string {
const tscSourceMap = parseSourceMap(tscSourceMapText);
let tscSourceMapGenerator: SourceMapGenerator|undefined;
for (const sourceFileName of tscSourceMap.sources) {
const sourceFile = program.getSourceFile(sourceFileName);
if (!sourceFile || !containsInlineSourceMap(sourceFile.text)) {
continue;
}
const preexistingSourceMapText = extractInlineSourceMap(sourceFile.text);
if (!tscSourceMapGenerator) {
tscSourceMapGenerator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(tscSourceMap));
}
tscSourceMapGenerator.applySourceMap(
new SourceMapConsumer(parseSourceMap(preexistingSourceMapText, sourceFileName)));
}
return tscSourceMapGenerator ? tscSourceMapGenerator.toString() : tscSourceMapText;
}
示例6: mergeSourceMaps
export function mergeSourceMaps(
oldMap: RawSourceMap | null, newMap: RawSourceMap): SourceMapConverter {
if (!oldMap) {
return fromObject(newMap);
}
const oldMapConsumer = new SourceMapConsumer(oldMap);
const newMapConsumer = new SourceMapConsumer(newMap);
const mergedMapGenerator = SourceMapGenerator.fromSourceMap(newMapConsumer);
mergedMapGenerator.applySourceMap(oldMapConsumer);
const merged = fromJSON(mergedMapGenerator.toString());
return merged;
}
示例7: sourceMapGeneratorToConsumer
export function sourceMapGeneratorToConsumer(
sourceMapGenerator: SourceMapGenerator, fileName?: string,
sourceName?: string): SourceMapConsumer {
const rawSourceMap = sourceMapGenerator.toJSON();
if (sourceName) {
rawSourceMap.sources = [sourceName];
}
if (fileName) {
rawSourceMap.file = fileName;
}
return new SourceMapConsumer(rawSourceMap);
}
示例8: it
it('should properly combine mapped characters from same source', () => {
generator.addMapping(
{generated: {line: 1, column: 0}, original: {line: 1, column: 0}, source: './origin-a.ts'});
generator.addMapping(
{generated: {line: 1, column: 1}, original: {line: 1, column: 0}, source: './origin-b.ts'});
generator.addMapping({
generated: {line: 1, column: 2},
original: {line: 10, column: 0},
source: './origin-a.ts'
});
// A => origin-a (1 byte), B => origin-b (two bytes)
const mapPath = writeFile('/test.map', generator.toString());
const inputPath = writeFile('/test.js', `ABB`);
const {sizeResult} = new SizeTracker(inputPath, mapPath);
expect(sizeResult.unmapped).toBe(0);
expect(sizeResult.files).toEqual({
size: 3,
'origin-a.ts': 2,
'origin-b.ts': 1,
});
});