mirror of https://github.com/vuejs/core.git
				
				
				
			perf: avoid sfc source map unnecessary serialization and parsing
This commit is contained in:
		
							parent
							
								
									157cfcb796
								
							
						
					
					
						commit
						f15d2f6cf6
					
				| 
						 | 
				
			
			@ -207,10 +207,10 @@ function createCodegenContext(
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  function addMapping(loc: Position, name: string | null = null) {
 | 
			
		||||
    // @ts-ignore we use the private property to directly add the mapping
 | 
			
		||||
    // we use the private property to directly add the mapping
 | 
			
		||||
    // because the addMapping() implementation in source-map-js has a bunch of
 | 
			
		||||
    // unnecessary arg and validation checks that are pure overhead in our case.
 | 
			
		||||
    const { _names, _mappings } = context.map
 | 
			
		||||
    const { _names, _mappings } = context.map!
 | 
			
		||||
    if (name !== null && !_names.has(name)) _names.add(name)
 | 
			
		||||
    _mappings.add({
 | 
			
		||||
      originalLine: loc.line,
 | 
			
		||||
| 
						 | 
				
			
			@ -354,8 +354,7 @@ export function generate(
 | 
			
		|||
    ast,
 | 
			
		||||
    code: context.code,
 | 
			
		||||
    preamble: isSetupInlined ? preambleContext.code : ``,
 | 
			
		||||
    // SourceMapGenerator does have toJSON() method but it's not in the types
 | 
			
		||||
    map: context.map ? (context.map as any).toJSON() : undefined
 | 
			
		||||
    map: context.map ? context.map.toJSON() : undefined
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -360,7 +360,7 @@ function generateSourceMap(
 | 
			
		|||
      }
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
  return JSON.parse(map.toString())
 | 
			
		||||
  return map.toJSON()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function padContent(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,12 @@ const scss: StylePreprocessor = (source, map, options, load = require) => {
 | 
			
		|||
    if (map) {
 | 
			
		||||
      return {
 | 
			
		||||
        code: result.css.toString(),
 | 
			
		||||
        map: merge(map, JSON.parse(result.map.toString())),
 | 
			
		||||
        map: merge(
 | 
			
		||||
          map,
 | 
			
		||||
          result.map.toJSON
 | 
			
		||||
            ? result.map.toJSON()
 | 
			
		||||
            : JSON.parse(result.map.toString())
 | 
			
		||||
        ),
 | 
			
		||||
        errors: [],
 | 
			
		||||
        dependencies
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,6 +44,24 @@ declare module 'estree-walker' {
 | 
			
		|||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare module 'source-map-js' {
 | 
			
		||||
  export interface SourceMapGenerator {
 | 
			
		||||
    // SourceMapGenerator has this method but the types do not include it
 | 
			
		||||
    toJSON(): RawSourceMap
 | 
			
		||||
    _names: Set<string>
 | 
			
		||||
    _mappings: {
 | 
			
		||||
      add(mapping: {
 | 
			
		||||
        originalLine: number
 | 
			
		||||
        originalColumn: number
 | 
			
		||||
        generatedLine: number
 | 
			
		||||
        generatedColumn: number
 | 
			
		||||
        source: string
 | 
			
		||||
        name: string | null
 | 
			
		||||
      }): void
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare interface String {
 | 
			
		||||
  /**
 | 
			
		||||
   * @deprecated Please use String.prototype.slice instead of String.prototype.substring in the repository.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue