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