/** * 表示一个源映射(Source Map)对象 * @see https://sourcemaps.info/spec.html * @see https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k * @see http://www.alloyteam.com/2014/01/source-map-version-3-introduction/ */ export interface SourceMapObject { /** 版本号 */ version: number; /** 生成文件的路径 */ file?: string; /** 所有源文件的根路径 */ sourceRoot?: string; /** 所有源文件的路径 */ sources: string[]; /** 所有源文件的内容 */ sourcesContent?: string[]; /** 所有符号名 */ names?: string[]; /** 所有映射点 */ mappings: string; } /** 表示一个索引映射(Index Map)对象 */ export interface IndexMapObject { /** 版本号 */ version: number; /** 生成文件的路径 */ file?: string; /** 所有映射段 */ sections: ({ /** 当前片段在生成文件内的偏移位置 */ offset: { /** 当前位置的行号(从 0 开始)*/ line: number; /** 当前位置的列号(从 0 开始)*/ column: number; }; } & ({ /** 当前片段的源映射地址 */ url: string; } | { /** 当前片段的源映射数据 */ map: SourceMapObject | IndexMapObject; }))[]; } /** 表示一个源映射(Source Map)生成器 */ export interface SourceMapGenerator { /** 生成并返回一个源映射对象 */ toJSON(): SourceMapObject | IndexMapObject; /** 生成并返回一个源映射字符串 */ toString(): string; } /** 表示一个源映射(Source Map)数据,可以是一个字符串、对象或生成器 */ export declare type SourceMapData = string | IndexMapObject | SourceMapObject | SourceMapGenerator; /** * 将指定的源映射(Source Map)数据转为字符串 * @param sourceMapData 要转换的源映射数据 */ export declare function toSourceMapString(sourceMapData: SourceMapData): string; /** * 将指定的源映射(Source Map)数据转为对象 * @param sourceMapData 要转换的源映射数据 */ export declare function toSourceMapObject(sourceMapData: SourceMapData): SourceMapObject; /** * 将指定的源映射(Source Map)数据转为构建器 * @param sourceMapData 要转换的源映射数据 */ export declare function toSourceMapBuilder(sourceMapData: SourceMapData | undefined): SourceMapBuilder; /** 表示一个源映射(Source Map)构建器,用于解析、读取、生成、合并源映射 */ export declare class SourceMapBuilder implements SourceMapGenerator { /** 获取当前源映射构建器支持的版本号 */ get version(): number; /** 获取或设置生成文件的路径 */ file?: string; /** 获取或设置所有源文件的根路径 */ sourceRoot?: string; /** 获取所有源文件的路径 */ readonly sources: string[]; /** 获取所有源文件的内容 */ readonly sourcesContent: string[]; /** 获取所有符号名 */ readonly names: string[]; /** 获取所有映射点 */ readonly mappings: Mapping[][]; /** * 初始化新的源映射构建器 * @param sourceMapData 要转换的源映射数据 */ constructor(sourceMapData?: SourceMapData); toJSON(): SourceMapObject; toString(): string; /** * 获取生成文件中指定位置的源信息,如果找不到映射点则返回 `null` * @param generatedLine 生成文件中的行号(从 0 开始) * @param generatedColumn 生成文件中的列号(从 0 开始) * @param adjustColumn 是否根据映射点和指定列计算偏移后的列号 * @param adjustLine 如果找不到匹配的映射点,是否往前搜索其它行的映射点并计算指定行的位置 */ getSource(generatedLine: number, generatedColumn: number, adjustColumn?: boolean, adjustLine?: boolean): SourceLocation; /** * 获取源文件中指定位置生成后的所有位置 * @param sourcePath 要获取的源文件路径或索引 * @param sourceLine 源文件中的行号(从 0 开始) * @param sourceColumn 源文件中的列号(从 0 开始),如果未提供则返回指定行所有列的生成信息 */ getAllGenerated(sourcePath: string | number, sourceLine: number, sourceColumn?: number): GeneratedLocation[]; /** * 遍历所有映射点并调用指定的函数 * @param callback 遍历的回调函数 * @param callback.generatedLine 生成文件的行号(从 0 开始) * @param callback.generatedColumn 生成文件的列号(从 0 开始) * @param callback.sourcePath 源文件的路径 * @param callback.sourceLine 源文件的行号(从 0 开始) * @param callback.sourceColumn 源文件的列号(从 0 开始) * @param callback.name 符号名 * @param callback.mapping 原始映射点 * @param callback.return 函数如果返回 `false` 则停止遍历 * @returns 如果回调函数返回 `false`,则返回 `false`,否则返回 `true` */ eachMapping(callback: (generatedLine: number, generatedColumn: number, sourcePath: string | undefined, sourceLine: number | undefined, sourceColumn: number | undefined, name: string | undefined, mapping: Mapping) => void | boolean): boolean; /** * 添加一个源文件 * @param sourcePath 要添加的源文件路径 * @returns 返回源文件的索引 */ addSource(sourcePath: string): number; /** * 获取指定源文件的内容,如果未找到源文件内容则返回 `undefined` * @param sourcePath 要获取的源文件路径 */ getSourceContent(sourcePath: string): string; /** * 设置指定源文件的内容 * @param sourcePath 要设置的源文件路径 * @param sourceContent 要设置的源文件内容 */ setSourceContent(sourcePath: string, sourceContent: string): void; /** * 添加一个符号名 * @param name 要添加的符号名 * @returns 返回符号名的索引 */ addName(name: string): number; /** * 添加一个映射点 * @param generatedLine 生成的行号(从 0 开始) * @param generatedColumn 生成的列号(从 0 开始) * @param sourcePath 映射的源文件路径或索引 * @param sourceLine 映射的源文件行号(从 0 开始),如果 `sourcePath` 不为 `undefined`,则 `sourceLine` 不为 `undefined` * @param sourceColumn 映射的源文件列号(从 0 开始),如果 `sourcePath` 不为 `undefined`,则 `sourceColumn` 不为 `undefined` * @param name 符号名或索引 * @returns 返回添加的映射点 */ addMapping(generatedLine: number, generatedColumn: number, sourcePath?: string | number, sourceLine?: number, sourceColumn?: number, name?: string | number): Mapping; /** * 合并新的源映射 * @param sourceMap 要合并的源映射构建器 * @description * 假如有源文件 A,通过一次生成得到 B,其源映射记作 S1; * 然后 B 通过再次生成得到 C,其源映射记作 S2; * 此时需要调用 `S2.applySourceMap(S1)`,将 S2 更新为 A 到 C 的源映射 * * > ##### 注意 * > 1. 函数仅返回合并的源映射和当前源映射的最小交集 * > 2. 所有路径都应该是绝对路径,且区分大小写 * > 3. `sourceRoot` 会被忽略 */ applySourceMap(sourceMap: SourceMapBuilder): void; } /** 表示源映射中的一个映射点 */ export interface Mapping { /** 生成文件中的列号(从 0 开始)*/ generatedColumn: number; /** 源文件的索引(从 0 开始)*/ sourceIndex?: number; /** * 源文件中的行号(从 0 开始) * @description 如果 `sourceIndex` 不为 `undefined`,则 `sourceLine` 不为 `undefined` */ sourceLine?: number; /** * 源文件中的列号(从 0 开始) * @description 如果 `sourceIndex` 不为 `undefined`,则 `sourceLine` 不为 `undefined` */ sourceColumn?: number; /** 符号名的索引(从 0 开始)*/ nameIndex?: number; } /** 表示一个源位置 */ export interface SourceLocation { /** 映射点 */ mapping: Mapping; /** 源文件的路径 */ sourcePath?: string; /** 源文件中的行号(从 0 开始)*/ line?: number; /** 源文件中的列号(从 0 开始)*/ column?: number; /** 符号名 */ name?: string; } /** 表示一个生成的位置 */ export interface GeneratedLocation { /** 获取映射点 */ mapping: Mapping; /** 生成文件中的行号(从 0 开始)*/ line: number; /** 生成文件中的列号(从 0 开始)*/ column: number; } /** * 读取指定内容的 `#sourceMappingURL` 注释,如果不存在则返回 `null` * @param content 要读取的内容 */ export declare function getSourceMappingURL(content: string): string; /** * 在指定内容插入一个 `#sourceMappingURL` 注释,如果注释已存在则更新 * @param content 要插入或更新的内容 * @param sourceMapURL 要插入或更新的源映射地址,如果地址为空则删除已存在的注释 * @param singleLineComment 如果为 `true` 则插入单行注释,否则插入多行注释,如果已经存在注释,则保留现有注释风格 */ export declare function setSourceMappingURL(content: string, sourceMapURL: string | null, singleLineComment?: boolean): string; /** * 生成一个 `#sourceMappingURL` 注释 * @param sourceMapURL 源映射地址 * @param singleLineComment 如果为 `true` 则返回单行注释,否则返回多行注释 */ export declare function createSourceMappingURLComment(sourceMapURL: string, singleLineComment?: boolean): string; /** * 生成一个 `#sourceURL` 注释 * @param sourceURL 源地址 */ export declare function createSourceURLComment(sourceMapURL: string): string;