* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
createCompilerHost,
createSourceMapGenerator,
} from 'typescript';
import type {
CompilerHost,
CompilerOptions,
EmitHost,
SourceMapGenerator,
SourceMapGeneratorOptions,
} from 'typescript';
* create sourcemap generator use api of typescript
* @param sourceFile: file path of source code
*/
export function getSourceMapGenerator(sourceFile: string): SourceMapGenerator {
let compilerOptions: CompilerOptions = {};
let compilerHost: CompilerHost = createCompilerHost(compilerOptions);
function getCanonicalFileName(fileName: string): string {
return compilerHost.getCanonicalFileName(fileName);
}
const currentDirectory: string = compilerHost.getCurrentDirectory();
let host: EmitHost = {
getSourceFileFromReference: undefined,
redirectTargetsMap: undefined,
fileExists(path: string): boolean {
return false;
},
isEmitBlocked(emitFileName: string): boolean {
return false;
},
useCaseSensitiveFileNames(): boolean {
return false;
},
getPrependNodes: undefined,
getCanonicalFileName: getCanonicalFileName,
getCommonSourceDirectory: undefined,
getCompilerOptions: undefined,
getCurrentDirectory: () => currentDirectory,
getNewLine: undefined,
getSourceFile: undefined,
getSourceFileByPath: undefined,
getSourceFiles: undefined,
getLibFileFromReference: undefined,
isSourceFileFromExternalLibrary: undefined,
getResolvedProjectReferenceToRedirect: undefined,
getProjectReferenceRedirect: undefined,
isSourceOfProjectReferenceRedirect: undefined,
writeFile: undefined
};
const generatorOptions: SourceMapGeneratorOptions = {extendedDiagnostics: false};
return createSourceMapGenerator(host, sourceFile, currentDirectory, currentDirectory, generatorOptions);
}