13af6ab5fSopenharmony_ci/**
23af6ab5fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License.
53af6ab5fSopenharmony_ci * You may obtain a copy of the License at
63af6ab5fSopenharmony_ci *
73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
83af6ab5fSopenharmony_ci *
93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and
133af6ab5fSopenharmony_ci * limitations under the License.
143af6ab5fSopenharmony_ci */
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_ci#ifndef ES2PANDA_AOT_DEPEND_RELATION_H
173af6ab5fSopenharmony_ci#define ES2PANDA_AOT_DEPEND_RELATION_H
183af6ab5fSopenharmony_ci#include <map>
193af6ab5fSopenharmony_ci#include <string>
203af6ab5fSopenharmony_ci#include <queue>
213af6ab5fSopenharmony_ci#include <unordered_set>
223af6ab5fSopenharmony_ci#include <vector>
233af6ab5fSopenharmony_ci
243af6ab5fSopenharmony_ci#include <aot/options.h>
253af6ab5fSopenharmony_ci#include <es2panda.h>
263af6ab5fSopenharmony_ci#include <util/workerQueue.h>
273af6ab5fSopenharmony_ci
283af6ab5fSopenharmony_cinamespace panda::es2panda::aot {
293af6ab5fSopenharmony_ci
303af6ab5fSopenharmony_ciclass DepsRelationResolver {
313af6ab5fSopenharmony_cipublic:
323af6ab5fSopenharmony_ci    explicit DepsRelationResolver(const std::map<std::string, panda::es2panda::util::ProgramCache *> &progsInfo,
333af6ab5fSopenharmony_ci                                  const std::unique_ptr<panda::es2panda::aot::Options> &options,
343af6ab5fSopenharmony_ci                                  std::map<std::string, std::unordered_set<std::string>> &resolvedDepsRelation)
353af6ab5fSopenharmony_ci        : progsInfo_(progsInfo), resolvedDepsRelation_(resolvedDepsRelation),
363af6ab5fSopenharmony_ci        compileContextInfo_(options->CompilerOptions().compileContextInfo),
373af6ab5fSopenharmony_ci        dumpDepsInfo_(options->CompilerOptions().dumpDepsInfo)
383af6ab5fSopenharmony_ci    {
393af6ab5fSopenharmony_ci    }
403af6ab5fSopenharmony_ci
413af6ab5fSopenharmony_ci    ~DepsRelationResolver() = default;
423af6ab5fSopenharmony_ci    void CollectStaticImportDepsRelation(const panda::pandasm::Program &program, const std::string &recordName);
433af6ab5fSopenharmony_ci    void CollectDynamicImportDepsRelation(const panda::pandasm::Program &program, const std::string &recordName);
443af6ab5fSopenharmony_ci    bool Resolve();
453af6ab5fSopenharmony_ci
463af6ab5fSopenharmony_ciprivate:
473af6ab5fSopenharmony_ci    void FillRecord2ProgramMap(std::unordered_map<std::string, std::string> &record2ProgramMap);
483af6ab5fSopenharmony_ci    bool CollectCommonjsRecords(const std::vector<panda::pandasm::Field> &fieldList,
493af6ab5fSopenharmony_ci                                const std::string &progKey, const std::string &recordName);
503af6ab5fSopenharmony_ci    void CollectDepsIfNeeded(const std::string &ohmurl);
513af6ab5fSopenharmony_ci    void DumpDepsRelations();
523af6ab5fSopenharmony_ci
533af6ab5fSopenharmony_ci    const std::map<std::string, panda::es2panda::util::ProgramCache *> &progsInfo_;
543af6ab5fSopenharmony_ci    std::map<std::string, std::unordered_set<std::string>> &resolvedDepsRelation_;
553af6ab5fSopenharmony_ci    CompileContextInfo &compileContextInfo_;
563af6ab5fSopenharmony_ci    std::queue<std::string> depsToBeResolved_ {};
573af6ab5fSopenharmony_ci    std::unordered_set<std::string> resolvedRecords_ {};
583af6ab5fSopenharmony_ci    bool dumpDepsInfo_ {false};
593af6ab5fSopenharmony_ci};
603af6ab5fSopenharmony_ci} // namespace panda::es2panda::aot
613af6ab5fSopenharmony_ci
623af6ab5fSopenharmony_ci#endif
633af6ab5fSopenharmony_ci
64