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.
svelte/test/sourcemaps/index.js

44 lines
1.4 KiB

import * as fs from 'fs';
import * as path from 'path';
import assert from 'assert';
import { svelte, exists } from '../helpers.js';
import { SourceMapConsumer } from 'source-map';
import { getLocator } from 'locate-character';
describe( 'sourcemaps', () => {
fs.readdirSync( 'test/sourcemaps/samples' ).forEach( dir => {
if ( dir[0] === '.' ) return;
const solo = exists( `test/sourcemaps/samples/${dir}/solo` );
if ( solo && process.env.CI ) {
throw new Error( 'Forgot to remove `solo: true` from test' );
}
( solo ? it.only : it )( dir, () => {
const filename = path.resolve( `test/sourcemaps/samples/${dir}/input.html` );
const outputFilename = path.resolve( `test/sourcemaps/samples/${dir}/output.js` );
const input = fs.readFileSync( filename, 'utf-8' ).replace( /\s+$/, '' );
const { code, map } = svelte.compile( input, {
filename,
outputFilename
});
fs.writeFileSync( outputFilename, `${code}\n//# sourceMappingURL=output.js.map` );
fs.writeFileSync( `${outputFilename}.map`, JSON.stringify( map, null, ' ' ) );
assert.deepEqual( map.sources, [ 'input.html' ]);
const { test } = require( `./samples/${dir}/test.js` );
const smc = new SourceMapConsumer( map );
const locateInSource = getLocator( input );
const locateInGenerated = getLocator( code );
test({ assert, code, map, smc, locateInSource, locateInGenerated });
});
});
});