CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
previous-map.js162 linesDownload Raw Back to lib
1'use strict'2 3let { existsSync, readFileSync } = require('fs')4let { dirname, join } = require('path')5let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')6 7function fromBase64(str) {8  if (Buffer) {9    return Buffer.from(str, 'base64').toString()10  } else {11    /* c8 ignore next 2 */12    return window.atob(str)13  }14}15 16class PreviousMap {17  constructor(css, opts) {18    if (opts.map === false) return19    if (opts.unsafeMap) this.unsafeMap = true20    this.loadAnnotation(css)21    this.inline = this.startWith(this.annotation, 'data:')22 23    let prev = opts.map ? opts.map.prev : undefined24    let text = this.loadMap(opts.from, prev)25    if (!this.mapFile && opts.from) {26      this.mapFile = opts.from27    }28    if (this.mapFile) this.root = dirname(this.mapFile)29    if (text) this.text = text30  }31 32  consumer() {33    if (!this.consumerCache) {34      this.consumerCache = new SourceMapConsumer(this.json || this.text)35    }36    return this.consumerCache37  }38 39  decodeInline(text) {40    let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/41    let baseUri = /^data:application\/json;base64,/42    let charsetUri = /^data:application\/json;charset=utf-?8,/43    let uri = /^data:application\/json,/44 45    let uriMatch = text.match(charsetUri) || text.match(uri)46    if (uriMatch) {47      return decodeURIComponent(text.substr(uriMatch[0].length))48    }49 50    let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri)51    if (baseUriMatch) {52      return fromBase64(text.substr(baseUriMatch[0].length))53    }54 55    let encoding = text.slice('data:application/json;'.length)56    encoding = encoding.slice(0, encoding.indexOf(','))57    throw new Error('Unsupported source map encoding ' + encoding)58  }59 60  getAnnotationURL(sourceMapString) {61    return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, '').trim()62  }63 64  isMap(map) {65    if (typeof map !== 'object') return false66    return (67      typeof map.mappings === 'string' ||68      typeof map._mappings === 'string' ||69      Array.isArray(map.sections)70    )71  }72 73  loadAnnotation(css) {74    let comments = css.match(/\/\*\s*# sourceMappingURL=/g)75    if (!comments) return76 77    // sourceMappingURLs from comments, strings, etc.78    let start = css.lastIndexOf(comments.pop())79    let end = css.indexOf('*/', start)80 81    if (start > -1 && end > -1) {82      // Locate the last sourceMappingURL to avoid pickin83      this.annotation = this.getAnnotationURL(css.substring(start, end))84    }85  }86 87  loadFile(path, cssFile, trusted) {88    /* c8 ignore next 5 */89    if (!trusted && !this.unsafeMap) {90      if (!/\.map$/i.test(path)) {91        return undefined92      }93    }94    this.root = dirname(path)95    if (existsSync(path)) {96      this.mapFile = path97      return readFileSync(path, 'utf-8').toString().trim()98    }99  }100 101  loadMap(file, prev) {102    if (prev === false) return false103 104    if (prev) {105      if (typeof prev === 'string') {106        return prev107      } else if (typeof prev === 'function') {108        let prevPath = prev(file)109        if (prevPath) {110          let map = this.loadFile(prevPath, file, true)111          if (!map) {112            throw new Error(113              'Unable to load previous source map: ' + prevPath.toString()114            )115          }116          return map117        }118      } else if (prev instanceof SourceMapConsumer) {119        return SourceMapGenerator.fromSourceMap(prev).toString()120      } else if (prev instanceof SourceMapGenerator) {121        return prev.toString()122      } else if (this.isMap(prev)) {123        return JSON.stringify(prev)124      } else {125        throw new Error(126          'Unsupported previous source map format: ' + prev.toString()127        )128      }129    } else if (this.inline) {130      return this.decodeInline(this.annotation)131    } else if (this.annotation) {132      let map = this.annotation133      if (file) map = join(dirname(file), map)134      let unknown = this.loadFile(map, file, false)135      if (unknown) {136        try {137          /* c8 ignore next 4 */138          this.json = JSON.parse(unknown.replace(/^\)]}'[^\n]*\n/, ''))139        } catch {140          return undefined141        }142      }143      return unknown144    }145  }146 147  startWith(string, start) {148    if (!string) return false149    return string.substr(0, start.length) === start150  }151 152  withContent() {153    return !!(154      this.consumer().sourcesContent &&155      this.consumer().sourcesContent.length > 0156    )157  }158}159 160module.exports = PreviousMap161PreviousMap.default = PreviousMap162