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.
91 lines
2.0 KiB
91 lines
2.0 KiB
/* |
|
MIT License http://www.opensource.org/licenses/mit-license.php |
|
Author Tobias Koppers @sokra |
|
*/ |
|
"use strict"; |
|
|
|
const SourceNode = require("source-map").SourceNode; |
|
const SourceListMap = require("source-list-map").SourceListMap; |
|
const Source = require("./Source"); |
|
|
|
class ConcatSource extends Source { |
|
constructor() { |
|
super(); |
|
this.children = []; |
|
for(var i = 0; i < arguments.length; i++) { |
|
var item = arguments[i]; |
|
if(item instanceof ConcatSource) { |
|
var children = item.children; |
|
for(var j = 0; j < children.length; j++) |
|
this.children.push(children[j]); |
|
} else { |
|
this.children.push(item); |
|
} |
|
} |
|
} |
|
|
|
add(item) { |
|
if(item instanceof ConcatSource) { |
|
var children = item.children; |
|
for(var j = 0; j < children.length; j++) |
|
this.children.push(children[j]); |
|
} else { |
|
this.children.push(item); |
|
} |
|
} |
|
|
|
source() { |
|
let source = ""; |
|
const children = this.children; |
|
for(let i = 0; i < children.length; i++) { |
|
const child = children[i]; |
|
source += typeof child === "string" ? child : child.source(); |
|
} |
|
return source; |
|
} |
|
|
|
size() { |
|
let size = 0; |
|
const children = this.children; |
|
for(let i = 0; i < children.length; i++) { |
|
const child = children[i]; |
|
size += typeof child === "string" ? child.length : child.size(); |
|
} |
|
return size; |
|
} |
|
|
|
node(options) { |
|
const node = new SourceNode(null, null, null, this.children.map(function(item) { |
|
return typeof item === "string" ? item : item.node(options); |
|
})); |
|
return node; |
|
} |
|
|
|
listMap(options) { |
|
const map = new SourceListMap(); |
|
var children = this.children; |
|
for(var i = 0; i < children.length; i++) { |
|
var item = children[i]; |
|
if(typeof item === "string") |
|
map.add(item); |
|
else |
|
map.add(item.listMap(options)); |
|
} |
|
return map; |
|
} |
|
|
|
updateHash(hash) { |
|
var children = this.children; |
|
for(var i = 0; i < children.length; i++) { |
|
var item = children[i]; |
|
if(typeof item === "string") |
|
hash.update(item); |
|
else |
|
item.updateHash(hash); |
|
} |
|
} |
|
} |
|
|
|
require("./SourceAndMapMixin")(ConcatSource.prototype); |
|
|
|
module.exports = ConcatSource;
|
|
|