sorcery
Advanced tools
Comparing version 0.3.0 to 0.3.2
@@ -39,7 +39,7 @@ 'use strict'; | ||
function getRelativePath(from, to) { | ||
var separator = /[\/\\]/;function getRelativePath(from, to) { | ||
var fromParts, toParts, i; | ||
fromParts = from.split("/"); | ||
toParts = to.split("/"); | ||
fromParts = from.split(separator); | ||
toParts = to.split(separator); | ||
@@ -62,69 +62,88 @@ fromParts.pop(); // get dirname | ||
function encodeMappings(decoded) { | ||
var mappings, | ||
sourceFileIndex = 0, | ||
// second field | ||
sourceCodeLine = 0, | ||
// third field | ||
sourceCodeColumn = 0, | ||
// fourth field | ||
nameIndex = 0; // fifth field | ||
var offsets = { | ||
generatedCodeColumn: 0, | ||
sourceFileIndex: 0, // second field | ||
sourceCodeLine: 0, // third field | ||
sourceCodeColumn: 0, // fourth field | ||
nameIndex: 0 // fifth field | ||
}; | ||
mappings = decoded.map(function (line) { | ||
var generatedCodeColumn = 0; // first field - reset each time | ||
return decoded.map(function (line) { | ||
offsets.generatedCodeColumn = 0; // first field - reset each time | ||
return line.map(encodeSegment).join(","); | ||
}).join(";"); | ||
return line.map(function (segment) { | ||
var result; | ||
function encodeSegment(segment) { | ||
if (!segment.length) { | ||
return segment; | ||
} | ||
if (!segment.length) { | ||
return segment; | ||
} | ||
var result = new Array(segment.length); | ||
result = [segment[0] - generatedCodeColumn]; | ||
generatedCodeColumn = segment[0]; | ||
result[0] = segment[0] - offsets.generatedCodeColumn; | ||
offsets.generatedCodeColumn = segment[0]; | ||
if (segment.length === 1) { | ||
// only one field! | ||
return result; | ||
} | ||
if (segment.length === 1) { | ||
// only one field! | ||
return result; | ||
} | ||
result[1] = segment[1] - sourceFileIndex; | ||
result[2] = segment[2] - sourceCodeLine; | ||
result[3] = segment[3] - sourceCodeColumn; | ||
result[1] = segment[1] - offsets.sourceFileIndex; | ||
result[2] = segment[2] - offsets.sourceCodeLine; | ||
result[3] = segment[3] - offsets.sourceCodeColumn; | ||
sourceFileIndex = segment[1]; | ||
sourceCodeLine = segment[2]; | ||
sourceCodeColumn = segment[3]; | ||
offsets.sourceFileIndex = segment[1]; | ||
offsets.sourceCodeLine = segment[2]; | ||
offsets.sourceCodeColumn = segment[3]; | ||
if (segment.length === 5) { | ||
result[4] = segment[4] - nameIndex; | ||
nameIndex = segment[4]; | ||
} | ||
if (segment.length === 5) { | ||
result[4] = segment[4] - offsets.nameIndex; | ||
offsets.nameIndex = segment[4]; | ||
} | ||
return vlq.encode(result); | ||
}).join(","); | ||
}).join(";"); | ||
return mappings; | ||
return vlq.encode(result); | ||
} | ||
} | ||
function decodeMappings(mappings) { | ||
var decoded, | ||
sourceFileIndex = 0, | ||
// second field | ||
sourceCodeLine = 0, | ||
// third field | ||
sourceCodeColumn = 0, | ||
// fourth field | ||
nameIndex = 0; // fifth field | ||
function decodeSegments(encodedSegments) { | ||
var i = encodedSegments.length; | ||
var segments = new Array(i); | ||
decoded = mappings.split(";").map(function (line) { | ||
var generatedCodeColumn = 0, | ||
// first field - reset each time | ||
while (i--) { | ||
segments[i] = vlq.decode(encodedSegments[i]); | ||
} | ||
return segments; | ||
}function decodeMappings(mappings) { | ||
var sourceFileIndex = 0; // second field | ||
var sourceCodeLine = 0; // third field | ||
var sourceCodeColumn = 0; // fourth field | ||
var nameIndex = 0; // fifth field | ||
var lines = mappings.split(";"); | ||
var numLines = lines.length; | ||
var decoded = new Array(numLines); | ||
var i = undefined, | ||
j = undefined, | ||
line = undefined, | ||
generatedCodeColumn = undefined, | ||
decodedLine = undefined, | ||
segments = undefined, | ||
segment = undefined, | ||
result = undefined; | ||
for (i = 0; i < numLines; i += 1) { | ||
line = lines[i]; | ||
generatedCodeColumn = 0; // first field - reset each time | ||
decodedLine = []; | ||
line.split(",").map(vlq.decode).forEach(function (segment) { | ||
var result; | ||
segments = decodeSegments(line.split(",")); | ||
for (j = 0; j < segments.length; j += 1) { | ||
segment = segments[j]; | ||
if (!segment.length) { | ||
return; | ||
break; | ||
} | ||
@@ -139,3 +158,3 @@ | ||
// only one field! | ||
return; | ||
break; | ||
} | ||
@@ -153,6 +172,6 @@ | ||
} | ||
}); | ||
} | ||
return decodedLine; | ||
}); | ||
decoded[i] = decodedLine; | ||
} | ||
@@ -224,4 +243,2 @@ return decoded; | ||
var trace___slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } }; | ||
/** | ||
@@ -245,78 +262,55 @@ * Traces a segment back to its origin | ||
function trace(node, lineIndex, columnIndex, name) { | ||
var _arguments = arguments, | ||
_this = this, | ||
_shouldContinue, | ||
_result; | ||
do { | ||
_shouldContinue = false; | ||
_result = (function (node, lineIndex, columnIndex, name) { | ||
var segments; | ||
var segments; | ||
// If this node doesn't have a source map, we have | ||
// to assume it is the original source | ||
if (node.isOriginalSource) { | ||
return { | ||
source: node.file, | ||
line: lineIndex + 1, | ||
column: columnIndex || 0, | ||
name: name | ||
}; | ||
} | ||
// If this node doesn't have a source map, we have | ||
// to assume it is the original source | ||
if (node.isOriginalSource) { | ||
return { | ||
source: node.file, | ||
line: lineIndex + 1, | ||
column: columnIndex || 0, | ||
name: name | ||
}; | ||
} | ||
// Otherwise, we need to figure out what this position in | ||
// the intermediate file corresponds to in *its* source | ||
segments = node.mappings[lineIndex]; | ||
// Otherwise, we need to figure out what this position in | ||
// the intermediate file corresponds to in *its* source | ||
segments = node.mappings[lineIndex]; | ||
if (!segments || segments.length === 0) { | ||
return null; | ||
} | ||
if (!segments || segments.length === 0) { | ||
return null; | ||
} | ||
if (columnIndex != null) { | ||
var len = segments.length; | ||
var i = undefined; | ||
if (columnIndex != null) { | ||
var len = segments.length; | ||
var i = undefined; | ||
for (i = 0; i < len; i += 1) { | ||
var _segments$i = trace___slicedToArray(segments[i], 5); | ||
for (i = 0; i < len; i += 1) { | ||
var generatedCodeColumn = segments[i][0]; | ||
var _generatedCodeColumn = _segments$i[0]; | ||
var _sourceFileIndex = _segments$i[1]; | ||
var _sourceCodeLine = _segments$i[2]; | ||
var _sourceCodeColumn = _segments$i[3]; | ||
var _nameIndex = _segments$i[4]; | ||
if (generatedCodeColumn > columnIndex) { | ||
break; | ||
} | ||
if (generatedCodeColumn === columnIndex) { | ||
var _sourceFileIndex = segments[i][1]; | ||
var _sourceCodeLine = segments[i][2]; | ||
var sourceCodeColumn = segments[i][3]; | ||
var _nameIndex = segments[i][4]; | ||
if (_generatedCodeColumn === columnIndex) { | ||
var _parent = node.sources[_sourceFileIndex]; | ||
_arguments = [_parent, _sourceCodeLine, _sourceCodeColumn, node.map.names[_nameIndex] || name]; | ||
_this = undefined; | ||
return _shouldContinue = true; | ||
} | ||
if (_generatedCodeColumn > columnIndex) { | ||
break; | ||
} | ||
} | ||
var _parent = node.sources[_sourceFileIndex]; | ||
return trace(_parent, _sourceCodeLine, sourceCodeColumn, node.map.names[_nameIndex] || name); | ||
} | ||
} | ||
} | ||
// fall back to a line mapping | ||
var _segments$0 = trace___slicedToArray(segments[0], 5); | ||
// fall back to a line mapping | ||
var sourceFileIndex = segments[0][1]; | ||
var sourceCodeLine = segments[0][2]; | ||
var nameIndex = segments[0][4]; | ||
var generatedCodeColumn = _segments$0[0]; | ||
var sourceFileIndex = _segments$0[1]; | ||
var sourceCodeLine = _segments$0[2]; | ||
var sourceCodeColumn = _segments$0[3]; | ||
var nameIndex = _segments$0[4]; | ||
var parent = node.sources[sourceFileIndex]; | ||
_arguments = [parent, sourceCodeLine, null, node.map.names[nameIndex] || name]; | ||
_this = undefined; | ||
return _shouldContinue = true; | ||
}).apply(_this, _arguments); | ||
} while (_shouldContinue); | ||
return _result; | ||
var parent = node.sources[sourceFileIndex]; | ||
return trace(parent, sourceCodeLine, null, node.map.names[nameIndex] || name); | ||
} | ||
var Node___slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } }; | ||
var Node__Promise = sander.Promise; | ||
@@ -410,54 +404,59 @@ | ||
var options = arguments[0] === undefined ? {} : arguments[0]; | ||
var resolved, | ||
allNames = [], | ||
allSources = [], | ||
includeContent; | ||
var allNames = [], | ||
allSources = []; | ||
includeContent = options.includeContent !== false; | ||
var applySegment = function (segment, result) { | ||
var traced = trace__default(_this.sources[segment[1]], // source | ||
segment[2], // source code line | ||
segment[3], // source code column | ||
_this.map.names[segment[4]]); | ||
resolved = this.mappings.map(function (line) { | ||
var result = []; | ||
if (!traced) { | ||
return; | ||
} | ||
line.forEach(function (segment) { | ||
var _segment = Node___slicedToArray(segment, 4); | ||
var sourceIndex = allSources.indexOf(traced.source); | ||
if (! ~sourceIndex) { | ||
sourceIndex = allSources.length; | ||
allSources.push(traced.source); | ||
} | ||
var generatedCodeColumn = _segment[0]; | ||
var sourceFileIndex = _segment[1]; | ||
var sourceCodeLine = _segment[2]; | ||
var sourceCodeColumn = _segment[3]; | ||
var source;var traced;var newSegment;var sourceIndex;var nameIndex; | ||
var newSegment = [segment[0], // generated code column | ||
sourceIndex, traced.line - 1, traced.column]; | ||
source = _this.sources[sourceFileIndex]; | ||
traced = trace__default(source, sourceCodeLine, sourceCodeColumn, _this.map.names[segment[4]]); | ||
var nameIndex; | ||
if (!traced) { | ||
return; | ||
if (traced.name) { | ||
nameIndex = allNames.indexOf(traced.name); | ||
if (! ~nameIndex) { | ||
nameIndex = allNames.length; | ||
allNames.push(traced.name); | ||
} | ||
sourceIndex = allSources.indexOf(traced.source); | ||
if (! ~sourceIndex) { | ||
sourceIndex = allSources.length; | ||
allSources.push(traced.source); | ||
} | ||
newSegment.push(nameIndex); | ||
} | ||
newSegment = [generatedCodeColumn, sourceIndex, traced.line - 1, traced.column]; | ||
result.push(newSegment); | ||
}; | ||
if (traced.name) { | ||
nameIndex = allNames.indexOf(traced.name); | ||
if (! ~nameIndex) { | ||
nameIndex = allNames.length; | ||
allNames.push(traced.name); | ||
} | ||
var i = this.mappings.length; | ||
var resolved = new Array(i); | ||
newSegment.push(nameIndex); | ||
} | ||
var j = undefined, | ||
line = undefined, | ||
result = undefined; | ||
result.push(newSegment); | ||
}); | ||
while (i--) { | ||
line = this.mappings[i]; | ||
resolved[i] = result = []; | ||
return result; | ||
}); | ||
for (j = 0; j < line.length; j += 1) { | ||
applySegment(line[j], result); | ||
} | ||
} | ||
var includeContent = options.includeContent !== false; | ||
return new SourceMap({ | ||
file: this.file.split("/").pop(), | ||
file: path.basename(this.file), | ||
sources: allSources.map(function (source) { | ||
@@ -464,0 +463,0 @@ return getRelativePath(options.base || _this.file, source); |
{ | ||
"name": "sorcery", | ||
"description": "Resolve a chain of sourcemaps back to the original source", | ||
"version": "0.3.0", | ||
"version": "0.3.2", | ||
"author": "Rich Harris", | ||
@@ -13,3 +13,3 @@ "repository": "https://github.com/Rich-Harris/sorcery", | ||
"sander": "^0.1.6", | ||
"vlq": "^0.1.0" | ||
"vlq": "^0.2.1" | ||
}, | ||
@@ -20,3 +20,8 @@ "devDependencies": { | ||
"gobble-6to5": "^3.0.0", | ||
"gobble-browserify": "^0.2.0", | ||
"gobble-coffee": "^0.2.1", | ||
"gobble-esperanto-bundle": "^0.1.7", | ||
"gobble-uglifyjs": "^0.2.0", | ||
"mocha": "^2.1.0", | ||
"promise-map-series": "^0.2.1", | ||
"source-map": "^0.1.40", | ||
@@ -29,3 +34,3 @@ "uglify-js": "^2.4.15" | ||
"scripts": { | ||
"build": "mkdir -p .tmp; rm .tmp/*; set -e; npm test; rm dist/*; cp .tmp/* dist", | ||
"build": "sh ./scripts/build.sh", | ||
"test": "mocha", | ||
@@ -32,0 +37,0 @@ "prepublish": "npm run build" |
@@ -95,54 +95,63 @@ import path from 'path'; | ||
apply ( options = {} ) { | ||
var resolved, | ||
allNames = [], | ||
allSources = [], | ||
includeContent; | ||
var allNames = [], | ||
allSources = []; | ||
includeContent = options.includeContent !== false; | ||
var applySegment = ( segment, result ) => { | ||
var traced = trace( | ||
this.sources[ segment[1] ], // source | ||
segment[2], // source code line | ||
segment[3], // source code column | ||
this.map.names[ segment[4] ] | ||
); | ||
resolved = this.mappings.map( line => { | ||
var result = []; | ||
if ( !traced ) { | ||
return; | ||
} | ||
line.forEach( segment => { | ||
var [ | ||
generatedCodeColumn, | ||
sourceFileIndex, | ||
sourceCodeLine, | ||
sourceCodeColumn | ||
] = segment, | ||
source, traced, newSegment, sourceIndex, nameIndex; | ||
var sourceIndex = allSources.indexOf( traced.source ); | ||
if ( !~sourceIndex ) { | ||
sourceIndex = allSources.length; | ||
allSources.push( traced.source ); | ||
} | ||
source = this.sources[ sourceFileIndex ]; | ||
traced = trace( source, sourceCodeLine, sourceCodeColumn, this.map.names[ segment[4] ] ); | ||
var newSegment = [ | ||
segment[0], // generated code column | ||
sourceIndex, | ||
traced.line - 1, | ||
traced.column | ||
]; | ||
if ( !traced ) { | ||
return; | ||
} | ||
var nameIndex; | ||
sourceIndex = allSources.indexOf( traced.source ); | ||
if ( !~sourceIndex ) { | ||
sourceIndex = allSources.length; | ||
allSources.push( traced.source ); | ||
if ( traced.name ) { | ||
nameIndex = allNames.indexOf( traced.name ); | ||
if ( !~nameIndex ) { | ||
nameIndex = allNames.length; | ||
allNames.push( traced.name ); | ||
} | ||
newSegment = [ generatedCodeColumn, sourceIndex, traced.line - 1, traced.column ]; | ||
newSegment.push( nameIndex ); | ||
} | ||
if ( traced.name ) { | ||
nameIndex = allNames.indexOf( traced.name ); | ||
if ( !~nameIndex ) { | ||
nameIndex = allNames.length; | ||
allNames.push( traced.name ); | ||
} | ||
result.push( newSegment ); | ||
}; | ||
newSegment.push( nameIndex ); | ||
} | ||
let i = this.mappings.length; | ||
let resolved = new Array( i ); | ||
result.push( newSegment ); | ||
}); | ||
let j, line, result; | ||
return result; | ||
}); | ||
while ( i-- ) { | ||
line = this.mappings[i]; | ||
resolved[i] = result = []; | ||
for ( j = 0; j < line.length; j += 1 ) { | ||
applySegment( line[j], result ); | ||
} | ||
} | ||
let includeContent = options.includeContent !== false; | ||
return new SourceMap({ | ||
file: this.file.split( '/' ).pop(), | ||
file: path.basename( this.file ), | ||
sources: allSources.map( ( source ) => { | ||
@@ -221,2 +230,2 @@ return getRelativePath( options.base || this.file, source ); | ||
}); | ||
} | ||
} |
import * as vlq from 'vlq'; | ||
function decodeSegments ( encodedSegments ) { | ||
let i = encodedSegments.length; | ||
let segments = new Array( i); | ||
while ( i-- ) { | ||
segments[i] = vlq.decode( encodedSegments[i] ); | ||
} | ||
return segments; | ||
} | ||
export default function decodeMappings ( mappings ) { | ||
var decoded, | ||
sourceFileIndex = 0, // second field | ||
sourceCodeLine = 0, // third field | ||
sourceCodeColumn = 0, // fourth field | ||
nameIndex = 0; // fifth field | ||
let sourceFileIndex = 0; // second field | ||
let sourceCodeLine = 0; // third field | ||
let sourceCodeColumn = 0; // fourth field | ||
let nameIndex = 0; // fifth field | ||
decoded = mappings.split( ';' ).map( function ( line ) { | ||
var generatedCodeColumn = 0, // first field - reset each time | ||
decodedLine = []; | ||
let lines = mappings.split( ';' ); | ||
let numLines = lines.length; | ||
let decoded = new Array( numLines ); | ||
line.split( ',' ).map( vlq.decode ).forEach( function ( segment ) { | ||
var result; | ||
let i, j, line, generatedCodeColumn, decodedLine, segments, segment, result; | ||
for ( i = 0; i < numLines; i += 1 ) { | ||
line = lines[i]; | ||
generatedCodeColumn = 0; // first field - reset each time | ||
decodedLine = []; | ||
segments = decodeSegments( line.split( ',' ) ); | ||
for ( j = 0; j < segments.length; j += 1 ) { | ||
segment = segments[j]; | ||
if ( !segment.length ) { | ||
return; | ||
break; | ||
} | ||
@@ -28,3 +48,3 @@ | ||
// only one field! | ||
return; | ||
break; | ||
} | ||
@@ -42,8 +62,8 @@ | ||
} | ||
}); | ||
} | ||
return decodedLine; | ||
}); | ||
decoded[i] = decodedLine; | ||
} | ||
return decoded; | ||
} | ||
} |
import * as vlq from 'vlq'; | ||
export default function encodeMappings ( decoded ) { | ||
var mappings, | ||
sourceFileIndex = 0, // second field | ||
sourceCodeLine = 0, // third field | ||
sourceCodeColumn = 0, // fourth field | ||
nameIndex = 0; // fifth field | ||
var offsets = { | ||
generatedCodeColumn: 0, | ||
sourceFileIndex: 0, // second field | ||
sourceCodeLine: 0, // third field | ||
sourceCodeColumn: 0, // fourth field | ||
nameIndex: 0 // fifth field | ||
}; | ||
mappings = decoded.map( function ( line ) { | ||
var generatedCodeColumn = 0; // first field - reset each time | ||
return decoded.map( function ( line ) { | ||
offsets.generatedCodeColumn = 0; // first field - reset each time | ||
return line.map( encodeSegment ).join( ',' ); | ||
}).join( ';' ); | ||
return line.map( function ( segment ) { | ||
var result; | ||
function encodeSegment ( segment ) { | ||
if ( !segment.length ) { | ||
return segment; | ||
} | ||
if ( !segment.length ) { | ||
return segment; | ||
} | ||
let result = new Array( segment.length ); | ||
result = [ segment[0] - generatedCodeColumn ]; | ||
generatedCodeColumn = segment[0]; | ||
result[0] = segment[0] - offsets.generatedCodeColumn; | ||
offsets.generatedCodeColumn = segment[0]; | ||
if ( segment.length === 1 ) { | ||
// only one field! | ||
return result; | ||
} | ||
if ( segment.length === 1 ) { | ||
// only one field! | ||
return result; | ||
} | ||
result[1] = segment[1] - sourceFileIndex; | ||
result[2] = segment[2] - sourceCodeLine; | ||
result[3] = segment[3] - sourceCodeColumn; | ||
result[1] = segment[1] - offsets.sourceFileIndex; | ||
result[2] = segment[2] - offsets.sourceCodeLine; | ||
result[3] = segment[3] - offsets.sourceCodeColumn; | ||
sourceFileIndex = segment[1]; | ||
sourceCodeLine = segment[2]; | ||
sourceCodeColumn = segment[3]; | ||
offsets.sourceFileIndex = segment[1]; | ||
offsets.sourceCodeLine = segment[2]; | ||
offsets.sourceCodeColumn = segment[3]; | ||
if ( segment.length === 5 ) { | ||
result[4] = segment[4] - nameIndex; | ||
nameIndex = segment[4]; | ||
} | ||
if ( segment.length === 5 ) { | ||
result[4] = segment[4] - offsets.nameIndex; | ||
offsets.nameIndex = segment[4]; | ||
} | ||
return vlq.encode( result ); | ||
}).join( ',' ); | ||
}).join( ';' ); | ||
return mappings; | ||
} | ||
return vlq.encode( result ); | ||
} | ||
} |
@@ -0,6 +1,8 @@ | ||
var separator = /[\/\\]/; | ||
export default function getRelativePath ( from, to ) { | ||
var fromParts, toParts, i; | ||
fromParts = from.split( '/' ); | ||
toParts = to.split( '/' ); | ||
fromParts = from.split( separator ); | ||
toParts = to.split( separator ); | ||
@@ -20,2 +22,2 @@ fromParts.pop(); // get dirname | ||
return fromParts.concat( toParts ).join( '/' ); | ||
} | ||
} |
@@ -44,18 +44,17 @@ /** | ||
for ( i = 0; i < len; i += 1 ) { | ||
let [ | ||
generatedCodeColumn, | ||
sourceFileIndex, | ||
sourceCodeLine, | ||
sourceCodeColumn, | ||
nameIndex | ||
] = segments[i]; | ||
let generatedCodeColumn = segments[i][0]; | ||
if ( generatedCodeColumn > columnIndex ) { | ||
break; | ||
} | ||
if ( generatedCodeColumn === columnIndex ) { | ||
let sourceFileIndex = segments[i][1]; | ||
let sourceCodeLine = segments[i][2]; | ||
let sourceCodeColumn = segments[i][3]; | ||
let nameIndex = segments[i][4]; | ||
let parent = node.sources[ sourceFileIndex ]; | ||
return trace( parent, sourceCodeLine, sourceCodeColumn, node.map.names[ nameIndex ] || name ); | ||
} | ||
if ( generatedCodeColumn > columnIndex ) { | ||
break; | ||
} | ||
} | ||
@@ -65,12 +64,8 @@ } | ||
// fall back to a line mapping | ||
let [ | ||
generatedCodeColumn, | ||
sourceFileIndex, | ||
sourceCodeLine, | ||
sourceCodeColumn, | ||
nameIndex | ||
] = segments[0]; | ||
let sourceFileIndex = segments[0][1]; | ||
let sourceCodeLine = segments[0][2]; | ||
let nameIndex = segments[0][4]; | ||
let parent = node.sources[ sourceFileIndex ]; | ||
return trace( parent, sourceCodeLine, null, node.map.names[ nameIndex ] || name ); | ||
} | ||
} |
33853
18
881
11
+ Addedvlq@0.2.3(transitive)
- Removedvlq@0.1.0(transitive)
Updatedvlq@^0.2.1