123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- var SourceMapGenerator = require('source-map').SourceMapGenerator;
- var all = require('./helpers').all;
- var isWindows = process.platform == 'win32';
- var unknownSource = '$stdin';
- function store(element, context) {
- var fromString = typeof element == 'string';
- var value = fromString ? element : element[0];
- if (value.indexOf('_') > -1)
- value = context.restore(value, prefixContentFrom(context.output));
- track(value, fromString ? null : element, context);
- context.output.push(value);
- }
- function prefixContentFrom(values) {
- var content = [];
- for (var i = values.length - 1; i >= 0; i--) {
- var value = values[i];
- content.unshift(value);
- if (value == '{' || value == ';')
- break;
- }
- return content.join('');
- }
- function track(value, element, context) {
- if (element)
- trackAllMappings(element, context);
- var parts = value.split('\n');
- context.line += parts.length - 1;
- context.column = parts.length > 1 ? 0 : (context.column + parts.pop().length);
- }
- function trackAllMappings(element, context) {
- var mapping = element[element.length - 1];
- if (!Array.isArray(mapping))
- return;
- for (var i = 0, l = mapping.length; i < l; i++) {
- trackMapping(mapping[i], context);
- }
- }
- function trackMapping(mapping, context) {
- var source = mapping[2] || unknownSource;
- if (isWindows)
- source = source.replace(/\\/g, '/');
- context.outputMap.addMapping({
- generated: {
- line: context.line,
- column: context.column
- },
- source: source,
- original: {
- line: mapping[0],
- column: mapping[1]
- }
- });
- if (mapping[3])
- context.outputMap.setSourceContent(source, mapping[3][mapping[2]]);
- }
- function stringify(tokens, options, restoreCallback, inputMapTracker) {
- var context = {
- column: 0,
- inputMapTracker: inputMapTracker,
- keepBreaks: options.keepBreaks,
- line: 1,
- output: [],
- outputMap: new SourceMapGenerator(),
- restore: restoreCallback,
- sourceMapInlineSources: options.sourceMapInlineSources,
- spaceAfterClosingBrace: options.compatibility.properties.spaceAfterClosingBrace,
- store: store
- };
- all(tokens, context, false);
- return {
- sourceMap: context.outputMap,
- styles: context.output.join('').trim()
- };
- }
- module.exports = stringify;
|