You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.6 KiB
126 lines
3.6 KiB
var test = require('tape');
|
|
var fs = require('fs');
|
|
var concat = require('concat-stream');
|
|
var PassThrough = require('stream').PassThrough;
|
|
var convertSourceMap = require('convert-source-map');
|
|
var SourceMapConsumer = require('source-map').SourceMapConsumer;
|
|
var uglify = require('uglify-js');
|
|
var staticModule = require('../');
|
|
|
|
test('source maps', function (t) {
|
|
t.plan(6);
|
|
|
|
var transform = staticModule({
|
|
sheetify: function (filename) {
|
|
var stream = PassThrough();
|
|
stream.write('`.css{\n');
|
|
stream.write(' color: red;\n');
|
|
stream.end('}`');
|
|
return stream;
|
|
}
|
|
}, { sourceMap: true, inputFilename: 'main.js' });
|
|
|
|
fs.createReadStream(__dirname + '/sourcemap/main.js').pipe(transform).pipe(concat({ encoding: 'string' }, function (res) {
|
|
var consumer = new SourceMapConsumer(convertSourceMap.fromSource(res).toObject());
|
|
|
|
var mapped = consumer.originalPositionFor({
|
|
line: 8,
|
|
column: 0
|
|
});
|
|
t.equal(mapped.line, 8);
|
|
t.equal(mapped.column, 0);
|
|
|
|
mapped = consumer.originalPositionFor({
|
|
line: 10,
|
|
column: 2
|
|
});
|
|
t.equal(mapped.line, 8);
|
|
t.equal(mapped.column, 19);
|
|
|
|
mapped = consumer.originalPositionFor({
|
|
line: 12,
|
|
column: 0
|
|
});
|
|
t.equal(mapped.line, 10);
|
|
t.equal(mapped.column, 0);
|
|
}));
|
|
});
|
|
|
|
test('input source map', function (t) {
|
|
t.plan(4);
|
|
|
|
var content = fs.readFileSync(__dirname + '/sourcemap/main.js', 'utf8');
|
|
var minified = uglify.minify({ 'main.js': content }, {
|
|
output: { beautify: true },
|
|
sourceMap: {
|
|
url: 'inline',
|
|
includeSources: true
|
|
}
|
|
});
|
|
|
|
var transform = staticModule({
|
|
sheetify: function (filename) {
|
|
var stream = PassThrough();
|
|
stream.end('`.css{\n color: orange;\n}`');
|
|
return stream;
|
|
}
|
|
}, { sourceMap: true, inputFilename: 'main.js' });
|
|
|
|
transform.pipe(concat({ encoding: 'string' }, function (res) {
|
|
var consumer = new SourceMapConsumer(convertSourceMap.fromSource(res).toObject());
|
|
|
|
var mapped = consumer.originalPositionFor({
|
|
line: 7,
|
|
column: 0
|
|
});
|
|
t.equal(mapped.line, 8);
|
|
t.equal(mapped.column, 0);
|
|
|
|
mapped = consumer.originalPositionFor({
|
|
line: 9,
|
|
column: 4
|
|
});
|
|
t.equal(mapped.line, 10);
|
|
t.equal(mapped.column, 0);
|
|
}));
|
|
|
|
transform.end(minified.code);
|
|
});
|
|
|
|
test('retain input source map when file has no static-module use', function (t) {
|
|
t.plan(4);
|
|
|
|
var content = fs.readFileSync(__dirname + '/sourcemap/main.js', 'utf8');
|
|
var minified = uglify.minify({ 'main.js': content }, {
|
|
output: { beautify: true },
|
|
sourceMap: {
|
|
url: 'inline',
|
|
includeSources: true
|
|
}
|
|
});
|
|
|
|
var transform = staticModule({
|
|
not_sheetify: function () { return 'whatever'; }
|
|
}, { sourceMap: true, inputFilename: 'main.js' });
|
|
|
|
transform.pipe(concat({ encoding: 'string' }, function (res) {
|
|
var consumer = new SourceMapConsumer(convertSourceMap.fromSource(res).toObject());
|
|
|
|
var mapped = consumer.originalPositionFor({
|
|
line: 7,
|
|
column: 0
|
|
});
|
|
t.equal(mapped.line, 8);
|
|
t.equal(mapped.column, 0);
|
|
|
|
mapped = consumer.originalPositionFor({
|
|
line: 7,
|
|
column: 21
|
|
});
|
|
t.equal(mapped.line, 10);
|
|
t.equal(mapped.column, 0);
|
|
}));
|
|
|
|
|
|
transform.end(minified.code);
|
|
});
|