source-maps-existing.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. var test = require('tap').test;
  2. var pack = require('../');
  3. var convert = require('convert-source-map');
  4. var parse = require('parse-base64vlq-mappings');
  5. var foo = {
  6. version: 3,
  7. file: 'foo.js',
  8. sourceRoot: '',
  9. sources: [ 'foo.coffee' ],
  10. names: [],
  11. mappings: ';AAAA;CAAA;CAAA,CAAA,CAAA,IAAO,GAAK;CAAZ',
  12. sourcesContent: [ 'console.log(require \'./bar.js\')\n' ] };
  13. test('pack one file with source file field and existing sourcemap', function (t) {
  14. t.plan(7);
  15. var mapComment = convert.fromObject(foo).toComment();
  16. var fooMappings = parse(foo.mappings);
  17. var p = pack();
  18. var src = '';
  19. p.on('data', function (buf) { src += buf });
  20. p.on('end', function () {
  21. var sm = convert.fromSource(src).toObject();
  22. var mappings = parse(sm.mappings);
  23. var remainingMaps = src.match(convert.commentRegex);
  24. // remove map for _prelude.js
  25. mappings.shift();
  26. var fstMap = mappings[0];
  27. var fstFooMap = fooMappings[0];
  28. var lstMap = mappings.pop();
  29. var lstFooMap = fooMappings.pop();
  30. t.deepEqual(fstMap.original, fstFooMap.original, 'first original mappings are same');
  31. t.deepEqual(lstMap.original, lstFooMap.original, 'last original mappings are same');
  32. t.equal(fstMap.generated.column, fstFooMap.generated.column, 'first generated columns are same');
  33. t.equal(lstMap.generated.column, lstFooMap.generated.column, 'last generated columns are same');
  34. t.equal(fstMap.generated.line, fstFooMap.generated.line + 1, 'first generated line is offset by 1');
  35. t.equal(lstMap.generated.line, lstFooMap.generated.line + 1, 'last generated line is offset by 1');
  36. t.equal(remainingMaps.length, 1, 'removes orinal source maps');
  37. });
  38. p.end(JSON.stringify([
  39. {
  40. id: 'xyz',
  41. source: '(function() {\n\n console.log(require(\'./bar.js\'));\n\n}).call(this);\n' + '\n' + mapComment,
  42. sourceFile: 'foo.js'
  43. }
  44. ]));
  45. });