123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- var escapePrefix = '__ESCAPED_';
- function trackPrefix(value, context, interestingContent) {
- if (!interestingContent && value.indexOf('\n') == -1) {
- if (value.indexOf(escapePrefix) === 0) {
- return value;
- } else {
- context.column += value.length;
- return;
- }
- }
- var withoutContent = 0;
- var split = value.split('\n');
- var total = split.length;
- var shift = 0;
- while (true) {
- if (withoutContent == total - 1)
- break;
- var part = split[withoutContent];
- if (/\S/.test(part))
- break;
- shift += part.length + 1;
- withoutContent++;
- }
- context.line += withoutContent;
- context.column = withoutContent > 0 ? 0 : context.column;
- context.column += /^(\s)*/.exec(split[withoutContent])[0].length;
- return value.substring(shift).trimLeft();
- }
- function sourceFor(originalMetadata, contextMetadata, context) {
- var source = originalMetadata.source || contextMetadata.source;
- if (source && context.resolvePath)
- return context.resolvePath(contextMetadata.source, source);
- return source;
- }
- function snapshot(data, context, fallbacks) {
- var metadata = {
- line: context.line,
- column: context.column,
- source: context.source
- };
- var sourceContent = null;
- var sourceMetadata = context.sourceMapTracker.isTracking(metadata.source) ?
- context.sourceMapTracker.originalPositionFor(metadata, data, fallbacks || 0) :
- {};
- metadata.line = sourceMetadata.line || metadata.line;
- metadata.column = sourceMetadata.column || metadata.column;
- metadata.source = sourceMetadata.sourceResolved ?
- sourceMetadata.source :
- sourceFor(sourceMetadata, metadata, context);
- if (context.sourceMapInlineSources) {
- var sourceMapSourcesContent = context.sourceMapTracker.sourcesContentFor(context.source);
- sourceContent = sourceMapSourcesContent && sourceMapSourcesContent[metadata.source] ?
- sourceMapSourcesContent :
- context.sourceReader.sourceAt(context.source);
- }
- return sourceContent ?
- [metadata.line, metadata.column, metadata.source, sourceContent] :
- [metadata.line, metadata.column, metadata.source];
- }
- function trackSuffix(data, context) {
- var parts = data.split('\n');
- for (var i = 0, l = parts.length; i < l; i++) {
- var part = parts[i];
- var cursor = 0;
- if (i > 0) {
- context.line++;
- context.column = 0;
- }
- while (true) {
- var next = part.indexOf(escapePrefix, cursor);
- if (next == -1) {
- context.column += part.substring(cursor).length;
- break;
- }
- context.column += next - cursor;
- cursor += next - cursor;
- var escaped = part.substring(next, part.indexOf('__', next + 1) + 2);
- var encodedValues = escaped.substring(escaped.indexOf('(') + 1, escaped.indexOf(')')).split(',');
- context.line += ~~encodedValues[0];
- context.column = (~~encodedValues[0] === 0 ? context.column : 0) + ~~encodedValues[1];
- cursor += escaped.length;
- }
- }
- }
- function track(data, context, snapshotMetadata, fallbacks) {
- var untracked = trackPrefix(data, context, snapshotMetadata);
- var metadata = snapshotMetadata ?
- snapshot(untracked, context, fallbacks) :
- [];
- if (untracked)
- trackSuffix(untracked, context);
- return metadata;
- }
- module.exports = track;
|