保誠-保戶業務員媒合平台
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
    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;