diff options
Diffstat (limited to 'vendor/gopkg.in/sourcemap.v1/sourcemap.go')
-rw-r--r-- | vendor/gopkg.in/sourcemap.v1/sourcemap.go | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/vendor/gopkg.in/sourcemap.v1/sourcemap.go b/vendor/gopkg.in/sourcemap.v1/sourcemap.go new file mode 100644 index 000000000..0e9af1a25 --- /dev/null +++ b/vendor/gopkg.in/sourcemap.v1/sourcemap.go @@ -0,0 +1,157 @@ +package sourcemap // import "gopkg.in/sourcemap.v1" + +import ( + "io" + "strings" + + "gopkg.in/sourcemap.v1/base64vlq" +) + +type fn func(m *mappings) (fn, error) + +type sourceMap struct { + Version int `json:"version"` + File string `json:"file"` + SourceRoot string `json:"sourceRoot"` + Sources []string `json:"sources"` + Names []interface{} `json:"names"` + Mappings string `json:"mappings"` +} + +type mapping struct { + genLine int + genCol int + sourcesInd int + sourceLine int + sourceCol int + namesInd int +} + +type mappings struct { + rd *strings.Reader + dec *base64vlq.Decoder + + hasName bool + value mapping + + values []mapping +} + +func parseMappings(s string) ([]mapping, error) { + rd := strings.NewReader(s) + m := &mappings{ + rd: rd, + dec: base64vlq.NewDecoder(rd), + } + m.value.genLine = 1 + m.value.sourceLine = 1 + + err := m.parse() + if err != nil { + return nil, err + } + return m.values, nil +} + +func (m *mappings) parse() error { + next := parseGenCol + for { + c, err := m.rd.ReadByte() + if err == io.EOF { + m.pushValue() + return nil + } + if err != nil { + return err + } + + switch c { + case ',': + m.pushValue() + next = parseGenCol + case ';': + m.pushValue() + + m.value.genLine++ + m.value.genCol = 0 + + next = parseGenCol + default: + err := m.rd.UnreadByte() + if err != nil { + return err + } + + next, err = next(m) + if err != nil { + return err + } + } + } +} + +func parseGenCol(m *mappings) (fn, error) { + n, err := m.dec.Decode() + if err != nil { + return nil, err + } + m.value.genCol += n + return parseSourcesInd, nil +} + +func parseSourcesInd(m *mappings) (fn, error) { + n, err := m.dec.Decode() + if err != nil { + return nil, err + } + m.value.sourcesInd += n + return parseSourceLine, nil +} + +func parseSourceLine(m *mappings) (fn, error) { + n, err := m.dec.Decode() + if err != nil { + return nil, err + } + m.value.sourceLine += n + return parseSourceCol, nil +} + +func parseSourceCol(m *mappings) (fn, error) { + n, err := m.dec.Decode() + if err != nil { + return nil, err + } + m.value.sourceCol += n + return parseNamesInd, nil +} + +func parseNamesInd(m *mappings) (fn, error) { + n, err := m.dec.Decode() + if err != nil { + return nil, err + } + m.hasName = true + m.value.namesInd += n + return parseGenCol, nil +} + +func (m *mappings) pushValue() { + if m.value.sourceLine == 1 && m.value.sourceCol == 0 { + return + } + + if m.hasName { + m.values = append(m.values, m.value) + m.hasName = false + } else { + m.values = append(m.values, mapping{ + genLine: m.value.genLine, + genCol: m.value.genCol, + sourcesInd: m.value.sourcesInd, + sourceLine: m.value.sourceLine, + sourceCol: m.value.sourceCol, + namesInd: -1, + }) + } +} |