|  | load(":rules.bzl", "polygerrit_bundle") | 
|  | load("//tools/js:eslint.bzl", "eslint") | 
|  | load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test") | 
|  | load("@npm//@bazel/typescript:index.bzl", "ts_config", "ts_project") | 
|  |  | 
|  | package(default_visibility = ["//visibility:public"]) | 
|  |  | 
|  | # This list must be in sync with the "include" list in the follwoing files: | 
|  | # tsconfig.json, tsconfig_bazel.json, tsconfig_bazel_test.json | 
|  | src_dirs = [ | 
|  | "api", | 
|  | "constants", | 
|  | "elements", | 
|  | "embed", | 
|  | "gr-diff", | 
|  | "mixins", | 
|  | "models", | 
|  | "scripts", | 
|  | "services", | 
|  | "styles", | 
|  | "types", | 
|  | "utils", | 
|  | "workers", | 
|  | ] | 
|  |  | 
|  | ts_config( | 
|  | name = "ts_config_bazel", | 
|  | src = "tsconfig_bazel.json", | 
|  | deps = [ | 
|  | "tsconfig.json", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | ts_project( | 
|  | name = "compile_pg", | 
|  | srcs = glob( | 
|  | [src_dir + "/**/*" + ext for src_dir in src_dirs for ext in [ | 
|  | ".js", | 
|  | ".ts", | 
|  | ]], | 
|  | exclude = [ | 
|  | "**/*_test.js", | 
|  | "**/*_test.ts", | 
|  | ], | 
|  | ), | 
|  | allow_js = True, | 
|  | incremental = True, | 
|  | out_dir = "_pg_ts_out", | 
|  | tsc = "//tools/node_tools:tsc-bin", | 
|  | tsconfig = ":ts_config_bazel", | 
|  | deps = [ | 
|  | "@ui_npm//:node_modules", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | ts_config( | 
|  | name = "ts_config_bazel_test", | 
|  | src = "tsconfig_bazel_test.json", | 
|  | deps = [ | 
|  | "tsconfig.json", | 
|  | "tsconfig_bazel.json", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | ts_project( | 
|  | name = "compile_pg_with_tests", | 
|  | srcs = glob( | 
|  | [ | 
|  | "**/*.js", | 
|  | "**/*.ts", | 
|  | ], | 
|  | exclude = [ | 
|  | "node_modules/**", | 
|  | "node_modules_licenses/**", | 
|  | "rollup.config.js", | 
|  | ], | 
|  | ), | 
|  | allow_js = True, | 
|  | incremental = True, | 
|  | out_dir = "_pg_with_tests_out", | 
|  | tsc = "//tools/node_tools:tsc-bin", | 
|  | tsconfig = ":ts_config_bazel_test", | 
|  | deps = [ | 
|  | "@ui_dev_npm//:node_modules", | 
|  | "@ui_npm//:node_modules", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | polygerrit_bundle( | 
|  | name = "polygerrit_ui", | 
|  | srcs = [":compile_pg"], | 
|  | outs = ["polygerrit_ui.zip"], | 
|  | app_name = "gr-app", | 
|  | entry_point = "_pg_ts_out/elements/gr-app-entry-point.js", | 
|  | ) | 
|  |  | 
|  | filegroup( | 
|  | name = "eslint_src_code", | 
|  | srcs = glob( | 
|  | [ | 
|  | "**/*.html", | 
|  | "**/*.js", | 
|  | "**/*.ts", | 
|  | ], | 
|  | exclude = [ | 
|  | "node_modules/**", | 
|  | "node_modules_licenses/**", | 
|  | ], | 
|  | ) + [ | 
|  | "@ui_dev_npm//:node_modules", | 
|  | "@ui_npm//:node_modules", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | filegroup( | 
|  | name = "pg_code", | 
|  | srcs = glob( | 
|  | [ | 
|  | "**/*.html", | 
|  | ], | 
|  | exclude = [ | 
|  | "node_modules/**", | 
|  | "node_modules_licenses/**", | 
|  | ], | 
|  | ) + [":compile_pg_with_tests"], | 
|  | ) | 
|  |  | 
|  | # Workaround for https://github.com/bazelbuild/bazel/issues/1305 | 
|  | filegroup( | 
|  | name = "test-srcs-fg", | 
|  | srcs = [ | 
|  | "rollup.config.js", | 
|  | ":pg_code", | 
|  | "@ui_dev_npm//:node_modules", | 
|  | "@ui_npm//:node_modules", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # Define the eslinter for polygerrit-ui app | 
|  | # The eslint macro creates 2 rules: lint_test and lint_bin | 
|  | eslint( | 
|  | name = "lint", | 
|  | srcs = [":eslint_src_code"], | 
|  | config = ".eslintrc-bazel.js", | 
|  | data = [ | 
|  | # The .eslintrc-bazel.js extends the .eslintrc.js config, pass it as a dependency | 
|  | ".eslintrc.js", | 
|  | ".prettierrc.js", | 
|  | ".eslint-ts-resolver.js", | 
|  | "tsconfig_eslint.json", | 
|  | # tsconfig_eslint.json extends tsconfig.json, pass it as a dependency | 
|  | "tsconfig.json", | 
|  | "@npm//typescript", | 
|  | ], | 
|  | extensions = [ | 
|  | ".html", | 
|  | ".js", | 
|  | ".ts", | 
|  | ], | 
|  | ignore = ".eslintignore", | 
|  | plugins = [ | 
|  | "@npm//@typescript-eslint/eslint-plugin", | 
|  | "@npm//eslint-config-google", | 
|  | "@npm//eslint-plugin-html", | 
|  | "@npm//eslint-plugin-import", | 
|  | "@npm//eslint-plugin-jsdoc", | 
|  | "@npm//eslint-plugin-lit", | 
|  | "@npm//eslint-plugin-prettier", | 
|  | "@npm//eslint-plugin-regex", | 
|  | "@npm//gts", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | filegroup( | 
|  | name = "lit_analysis_src_code", | 
|  | srcs = glob( | 
|  | ["**/*.ts"], | 
|  | exclude = [ | 
|  | "**/*_html.ts", | 
|  | "**/*_test.ts", | 
|  | ], | 
|  | ) + [ | 
|  | "@npm//typescript", | 
|  | "@ui_dev_npm//:node_modules", | 
|  | "@ui_npm//:node_modules", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | nodejs_test( | 
|  | name = "lit_analysis", | 
|  | data = [ | 
|  | ":lit_analysis_src_code", | 
|  | "@npm//lit-analyzer", | 
|  | ], | 
|  | entry_point = "@npm//:node_modules/lit-analyzer/cli.js", | 
|  | tags = [ | 
|  | "local", | 
|  | "manual", | 
|  | ], | 
|  | templated_args = [ | 
|  | "**/elements/**/*.ts", | 
|  | "--strict", | 
|  | "--rules.no-property-visibility-mismatch off", | 
|  | "--rules.no-incompatible-property-type off", | 
|  | "--rules.no-incompatible-type-binding off", | 
|  | # TODO: We would actually like to change this to `error`, but we also | 
|  | # want to allow certain attributes, for example `aria-description`. This | 
|  | # would be possible, if we would run the lit-analyzer as a ts plugin. | 
|  | # In tsconfig.json there is an option `globalAttributes` that we could | 
|  | # use. But that is not available when running lit-analyzer as cli. | 
|  | "--rules.no-unknown-attribute warn", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | # app code including tests and tsconfig.json | 
|  | filegroup( | 
|  | name = "web-test-runner_app-sources", | 
|  | srcs = glob( | 
|  | [ | 
|  | "**/*.ts", | 
|  | "**/*.js", | 
|  | "**/tsconfig.json", | 
|  | ], | 
|  | exclude = ["node_modules/**/*"], | 
|  | ), | 
|  | ) |