123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- 'use strict';
- /*jshint asi: true */
- var test = require('tap').test;
- var convert = require('convert-source-map');
- var commentRegex = require('convert-source-map').commentRegex;
- var combine = require('..');
- var mappingsFromMap = require('../lib/mappings-from-map');
- function checkMappings(foo, sm, lineOffset) {
- function inspect(obj, depth) {
- return require('util').inspect(obj, false, depth || 5, true);
- }
- var fooMappings = mappingsFromMap(foo);
- var mappings = mappingsFromMap(sm);
- var genLinesOffset = true;
- var origLinesSame = true;
- for (var i = 0; i < mappings.length; i++) {
- var fooGen = fooMappings[i].generated;
- var fooOrig = fooMappings[i].original;
- var gen = mappings[i].generated
- var orig = mappings[i].original;
- if (gen.column !== fooGen.column || gen.line !== (fooGen.line + lineOffset)) {
- console.error(
- 'generated mapping at %s not offset properly:\ninput: [%s]\noutput:[%s]\n\n',
- i ,
- inspect(fooGen),
- inspect(gen)
- );
- genLinesOffset = false;
- }
- if (orig.column !== fooOrig.column || orig.line !== fooOrig.line) {
- console.error(
- 'original mapping at %s is not the same as the genrated mapping:\ninput: [%s]\noutput:[%s]\n\n',
- i ,
- inspect(fooOrig),
- inspect(orig)
- );
- origLinesSame = false;
- }
- }
- return { genLinesOffset: genLinesOffset, origLinesSame: origLinesSame };
- }
- var foo = {
- version : 3,
- file : 'foo.js',
- sourceRoot : '',
- sources : [ 'foo.coffee' ],
- names : [],
- mappings : ';AAAA;CAAA;CAAA,CAAA,CAAA,IAAO,GAAK;CAAZ',
- sourcesContent : [ 'console.log(require \'./bar.js\')\n' ] };
- test('add one file with inlined source', function (t) {
- var mapComment = convert.fromObject(foo).toComment();
- var file = {
- id: 'xyz'
- , source: '(function() {\n\n console.log(require(\'./bar.js\'));\n\n}).call(this);\n' + '\n' + mapComment
- , sourceFile: 'foo.js'
- };
- var lineOffset = 3
- var base64 = combine.create()
- .addFile(file, { line: lineOffset })
- .base64()
- var sm = convert.fromBase64(base64).toObject();
- var res = checkMappings(foo, sm, lineOffset);
- t.ok(res.genLinesOffset, 'all generated lines are offset properly and columns unchanged')
- t.ok(res.origLinesSame, 'all original lines and columns are unchanged')
- t.deepEqual(sm.sourcesContent, foo.sourcesContent, 'includes the original source')
- t.deepEqual(sm.sources, ['foo.coffee'], 'includes original filename')
- t.end()
- });
- test('add one file without inlined source', function (t) {
- var mapComment = convert
- .fromObject(foo)
- .setProperty('sourcesContent', [])
- .toComment();
- var file = {
- id: 'xyz'
- , source: '(function() {\n\n console.log(require(\'./bar.js\'));\n\n}).call(this);\n' + '\n' + mapComment
- , sourceFile: 'foo.js'
- };
- var lineOffset = 3
- var base64 = combine.create()
- .addFile(file, { line: lineOffset })
- .base64()
- var sm = convert.fromBase64(base64).toObject();
- var mappings = mappingsFromMap(sm);
- t.deepEqual(sm.sourcesContent, [file.source], 'includes the generated source')
- t.deepEqual(sm.sources, ['foo.js'], 'includes generated filename')
- t.deepEqual(
- mappings
- , [ { generated: { line: 4, column: 0 },
- original: { line: 1, column: 0 },
- source: 'foo.js', name: null },
- { generated: { line: 5, column: 0 },
- original: { line: 2, column: 0 },
- source: 'foo.js', name: null },
- { generated: { line: 6, column: 0 },
- original: { line: 3, column: 0 },
- source: 'foo.js', name: null },
- { generated: { line: 7, column: 0 },
- original: { line: 4, column: 0 },
- source: 'foo.js', name: null },
- { generated: { line: 8, column: 0 },
- original: { line: 5, column: 0 },
- source: 'foo.js', name: null },
- { generated: { line: 9, column: 0 },
- original: { line: 6, column: 0 },
- source: 'foo.js', name: null },
- { generated: { line: 10, column: 0 },
- original: { line: 7, column: 0 },
- source: 'foo.js', name: null } ]
- , 'generates mappings offset by the given line'
- )
- t.end()
- })
- test('add one file with inlined sources from multiple files', function(t) {
- var gen1Map = {
- version: 3,
- sources: [ 'one.js', 'two.js' ],
- names: [],
- mappings: 'AAAA;ACAA',
- sourcesContent: [ 'console.log(1);', 'console.log(2);' ]
- };
- var gen2Map = {
- version: 3,
- sources: [ 'three.js', 'four.js' ],
- names: [],
- mappings: 'AAAA;ACAA',
- sourcesContent: [ 'console.log(3);', 'console.log(4);' ]
- };
- var base64 = combine.create()
- .addFile({
- source: 'console.log(1);\nconsole.log(2);\n' + convert.fromObject(gen1Map).toComment(),
- sourceFile: 'gen1.js'
- })
- .addFile({
- source: 'console.log(3);\nconsole.log(4);\n' + convert.fromObject(gen2Map).toComment(),
- sourceFile: 'gen2.js'
- }, {line: 2})
- .base64()
- var sm = convert.fromBase64(base64).toObject();
- t.deepEqual(sm.sources, ['one.js', 'two.js', 'three.js', 'four.js'], 'include the correct source');
- t.deepEqual(sm.sourcesContent, [
- 'console.log(1);',
- 'console.log(2);',
- 'console.log(3);',
- 'console.log(4);'
- ], 'include the correct source file content');
- t.deepEqual(
- mappingsFromMap(sm)
- , [ { original: { column: 0, line: 1 },
- generated: { column: 0, line: 1 },
- source: 'one.js',
- name: null },
- { original: { column: 0, line: 1 },
- generated: { column: 0, line: 2 },
- source: 'two.js',
- name: null },
- { original: { column: 0, line: 1 },
- generated: { column: 0, line: 3 },
- source: 'three.js',
- name: null },
- { original: { column: 0, line: 1 },
- generated: { column: 0, line: 4 },
- source: 'four.js',
- name: null } ], 'should properly map multiple files');
- t.end()
- });
- test('relative path from multiple files', function(t) {
- // Folder structure as follows:
- //
- // project
- // +- src
- // +- package1
- // +- sub
- // -- one.js
- // -- two.js
- // +- package2
- // +- sub
- // -- three.js
- // -- four.js
- // +- gen
- // +- gen1.js
- // +- gen2.js
- // -- combined.js
- //
- // Where 'one.js', 'two.js' were combined to 'gen1.js'
- // and 'three.js', 'four.js' were combined to 'gen2.js'.
- // Now 'gen1.js' and 'gen2.js' are being combined from
- // the project root folder.
- var gen1Map = {
- version: 3,
- sources: [ 'sub/one.js', 'sub/two.js' ],
- names: [],
- mappings: 'AAAA;ACAA',
- sourcesContent: [ 'console.log(1);', 'console.log(2);' ],
- sourceRoot: '../src/package1'
- };
- var gen2Map = {
- version: 3,
- sources: [ 'sub/three.js', 'sub/four.js' ],
- names: [],
- mappings: 'AAAA;ACAA',
- sourcesContent: [ 'console.log(3);', 'console.log(4);' ],
- sourceRoot: '../src/package2'
- };
- var base64 = combine.create()
- .addFile({
- source: 'console.log(1);\nconsole.log(2);\n' + convert.fromObject(gen1Map).toComment(),
- sourceFile: 'gen/gen1.js'
- })
- .addFile({
- source: 'console.log(3);\nconsole.log(4);\n' + convert.fromObject(gen2Map).toComment(),
- sourceFile: 'gen/gen2.js'
- }, {line: 2})
- .base64()
- var sm = convert.fromBase64(base64).toObject();
- t.deepEqual(sm.sources, ['src/package1/sub/one.js', 'src/package1/sub/two.js',
- 'src/package2/sub/three.js', 'src/package2/sub/four.js'],
- 'include the correct source');
- t.deepEqual(sm.sourcesContent, [
- 'console.log(1);',
- 'console.log(2);',
- 'console.log(3);',
- 'console.log(4);'
- ], 'include the correct source file content');
- t.deepEqual(
- mappingsFromMap(sm)
- , [ { original: { column: 0, line: 1 },
- generated: { column: 0, line: 1 },
- source: 'src/package1/sub/one.js',
- name: null },
- { original: { column: 0, line: 1 },
- generated: { column: 0, line: 2 },
- source: 'src/package1/sub/two.js',
- name: null },
- { original: { column: 0, line: 1 },
- generated: { column: 0, line: 3 },
- source: 'src/package2/sub/three.js',
- name: null },
- { original: { column: 0, line: 1 },
- generated: { column: 0, line: 4 },
- source: 'src/package2/sub/four.js',
- name: null } ], 'should properly map multiple files');
- t.end()
- });
- test('relative path when source and file name are the same', function(t) {
- var gen1Map = {
- version: 3,
- sources: [ 'a/b/one.js' ],
- names: [],
- mappings: 'AAAA',
- file: 'a/b/one.js',
- sourcesContent: [ 'console.log(1);\n' ]
- };
- var gen2Map = {
- version: 3,
- sources: [ 'a/b/two.js' ],
- names: [],
- mappings: 'AAAA',
- file: 'a/b/two.js',
- sourcesContent: [ 'console.log(2);\n' ]
- };
- var base64 = combine.create()
- .addFile({
- source: 'console.log(1);\n' + convert.fromObject(gen1Map).toComment(),
- sourceFile: 'a/b/one.js'
- })
- .addFile({
- source: 'console.log(2);\n' + convert.fromObject(gen2Map).toComment(),
- sourceFile: 'a/b/two.js'
- }, {line: 1})
- .base64()
- var sm = convert.fromBase64(base64).toObject();
- t.deepEqual(sm.sources, ['a/b/one.js', 'a/b/two.js'],
- 'include the correct source');
- t.deepEqual(
- mappingsFromMap(sm)
- , [ { original: { column: 0, line: 1 },
- generated: { column: 0, line: 1 },
- source: 'a/b/one.js',
- name: null },
- { original: { column: 0, line: 1 },
- generated: { column: 0, line: 2 },
- source: 'a/b/two.js',
- name: null } ], 'should properly map multiple files');
- t.end()
- });
- test('remove comments', function (t) {
- var mapComment = convert.fromObject(foo).toComment();
- function sourcemapComments(src) {
- var matches = src.match(commentRegex);
- return matches ? matches.length : 0;
- }
- t.equal(sourcemapComments('var a = 1;\n' + mapComment), 1);
- [ ''
- , 'var a = 1;\n' + mapComment
- , 'var a = 1;\n' + mapComment + '\nvar b = 5;\n' + mapComment
- ] .forEach(function (x) {
- var removed = combine.removeComments(x)
- t.equal(sourcemapComments(removed), 0)
- })
- t.end()
- })
|