# Copyright (c) 2025 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("//build/ohos.gni")

linter_version = "1.0.0"
npm_path = "//prebuilts/build-tools/common/nodejs/current/bin/npm"
typescript_dir = get_label_info("//third_party/typescript:build_typescript",
                                "target_out_dir")

action("build_linter") {
  sources = [
    "./package.json",
    "./src/cli/CommandLineParser.ts",
    "./src/cli/ConsoleLogger.ts",
    "./src/cli/LinterCLI.ts",
    "./src/cli/LoggerImpl.ts",
    "./src/cli/main.ts",
    "./src/lib/BaseTypeScriptLinter.ts",
    "./src/lib/CommandLineOptions.ts",
    "./src/lib/CookBookMsg.ts",
    "./src/lib/FaultAttrs.ts",
    "./src/lib/FaultDesc.ts",
    "./src/lib/IncrementalLintInfo.ts",
    "./src/lib/InteropTypescriptLinter.ts",
    "./src/lib/IsEtsFileCallback.ts",
    "./src/lib/IsFileFromModuleCallback.ts",
    "./src/lib/LintRunResult.ts",
    "./src/lib/LinterConfig.ts",
    "./src/lib/LinterOptions.ts",
    "./src/lib/LinterRunner.ts",
    "./src/lib/Logger.ts",
    "./src/lib/ProblemInfo.ts",
    "./src/lib/ProblemSeverity.ts",
    "./src/lib/Problems.ts",
    "./src/lib/TypeScriptLinter.ts",
    "./src/lib/TypeScriptLinterConfig.ts",
    "./src/lib/autofixes/AutofixTitles.ts",
    "./src/lib/autofixes/Autofixer.ts",
    "./src/lib/autofixes/QuasiEditor.ts",
    "./src/lib/autofixes/ReportAutofixCallback.ts",
    "./src/lib/autofixes/SymbolCache.ts",
    "./src/lib/statistics/FileProblemStatistics.ts",
    "./src/lib/statistics/FileStatistics.ts",
    "./src/lib/statistics/ProjectStatistics.ts",
    "./src/lib/statistics/StatisticsLogger.ts",
    "./src/lib/ts-compiler/Compiler.ts",
    "./src/lib/ts-compiler/FormTscOptions.ts",
    "./src/lib/ts-compiler/ResolveSdks.ts",
    "./src/lib/ts-diagnostics/GetTscDiagnostics.ts",
    "./src/lib/ts-diagnostics/TSCCompiledProgram.ts",
    "./src/lib/ts-diagnostics/TransformTscDiagnostics.ts",
    "./src/lib/ts-diagnostics/TypeScriptDiagnosticsExtractor.ts",
    "./src/lib/utils/TsUtils.ts",
    "./src/lib/utils/consts/ArktsIgnorePaths.ts",
    "./src/lib/utils/consts/BuiltinGenericConstructor.ts",
    "./src/lib/utils/consts/DefaultDecoratorWhitelist.ts",
    "./src/lib/utils/consts/ESObject.ts",
    "./src/lib/utils/consts/ExtendedBaseTypes.ts",
    "./src/lib/utils/consts/ExtensionName.ts",
    "./src/lib/utils/consts/FunctionHasNoReturnErrorCode.ts",
    "./src/lib/utils/consts/InValidIndentifierKeywords.ts",
    "./src/lib/utils/consts/LikeFunction.ts",
    "./src/lib/utils/consts/LimitedStandardUtilityTypes.ts",
    "./src/lib/utils/consts/LimitedStdAPI.ts",
    "./src/lib/utils/consts/NonInitializablePropertyDecorators.ts",
    "./src/lib/utils/consts/NonReturnFunctionDecorators.ts",
    "./src/lib/utils/consts/PropertyHasNoInitializerErrorCode.ts",
    "./src/lib/utils/consts/SendableAPI.ts",
    "./src/lib/utils/consts/SharedModuleAPI.ts",
    "./src/lib/utils/consts/StandardLibraries.ts",
    "./src/lib/utils/consts/StdClassVariableDeclarations.ts",
    "./src/lib/utils/consts/SupportedDetsIndexableTypes.ts",
    "./src/lib/utils/consts/TsSuffix.ts",
    "./src/lib/utils/consts/TypedArrays.ts",
    "./src/lib/utils/consts/VersionInfo.ts",
    "./src/lib/utils/functions/ContainsThis.ts",
    "./src/lib/utils/functions/DiagnosticChecker.ts",
    "./src/lib/utils/functions/ForEachNodeInSubtree.ts",
    "./src/lib/utils/functions/GetScriptKind.ts",
    "./src/lib/utils/functions/HasPredecessor.ts",
    "./src/lib/utils/functions/IsStdLibrary.ts",
    "./src/lib/utils/functions/IsStruct.ts",
    "./src/lib/utils/functions/LibraryTypeCallDiagnosticChecker.ts",
    "./src/lib/utils/functions/LogTscDiagnostic.ts",
    "./src/lib/utils/functions/MergeArrayMaps.ts",
    "./src/lib/utils/functions/NameGenerator.ts",
    "./src/lib/utils/functions/PathHelper.ts",
    "./src/lib/utils/functions/SupportedStdCallAPI.ts",
    "./src/lib/utils/functions/identiferUseInValueContext.ts",
    "./src/lib/utils/functions/isAssignmentOperator.ts",
    "./src/lib/utils/functions/isIntrinsicObjectType.ts",
  ]
  script = "build_linter.py"
  deps = [ "../../arkguard:build_arkguard" ]

  args = [
    "--source-path",
    rebase_path(get_path_info(".", "abspath")),
    "--output-path",
    rebase_path("$target_gen_dir"),
    "--npm",
    rebase_path(npm_path),
    "--typescript",
    rebase_path("${typescript_dir}/ohos-typescript-4.9.5-r4.tgz"),
    "--version",
    linter_version,
  ]

  outputs = [ "$target_gen_dir" ]
}

ohos_copy("ets2panda_build_linter") {
  deps = [ ":build_linter" ]
  sources = [ rebase_path("$target_gen_dir") ]
  outputs = [ target_out_dir + "/$target_name" ]
  module_source_dir = target_out_dir + "/$target_name"
  module_install_name = ""
  part_name = "ets_frontend"
  subsystem_name = "arkcompiler"
}