/* * Copyright (c) 2021 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. */ #ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_SOURCE_MAP_H #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_SOURCE_MAP_H #include #include #include #include #include "base/memory/referenced.h" #include "base/utils/macros.h" namespace OHOS::Ace::Framework { struct SourceMapInfo { int32_t beforeRow = 0; int32_t beforeColumn = 0; int32_t afterRow = 0; int32_t afterColumn = 0; int32_t sourcesVal = 0; int32_t namesVal = 0; }; struct MappingInfo { int32_t row = 0; int32_t col = 0; std::string sources; }; class ACE_FORCE_EXPORT RevSourceMap final : public Referenced { public: MappingInfo Find(int32_t row, int32_t col, bool isColPrecise = true); std::string GetOriginalNames(const std::string& sourceCode, uint32_t& errorPos) const; static void ExtractKeyInfo(const std::string& sourceMap, std::vector& sourceKeyInfo); void Init(const std::string& sourceMap); static void MergeInit(const std::string& sourceMap, RefPtr& RevSourceMap); static void StageModeSourceMapSplit( const std::string& sourceMap, std::unordered_map>& sourceMaps); private: SourceMapInfo nowPos_; std::vector files_; std::vector sources_; std::vector names_; std::vector mappings_; std::vector nameMap_; std::vector afterPos_; static std::vector HandleMappings(const std::string& mapping); static uint32_t Base64CharToInt(char charCode); static bool VlqRevCode(const std::string& vStr, std::vector& ans); }; } // namespace OHOS::Ace::Framework #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_SOURCE_MAP_H