| /* | 
|     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; |