/* * 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 { if (!sourceFile) { return undefined; } 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); }