Skip to content

Commit d2bd0ec

Browse files
committedMar 6, 2024
build: compile js protos with protoc-gen-es
This change introduces a new JS package that compiles JS protobuf client code with help of `protoc` compiler and `protoc-gen-es` plugin. It is supposed that this package will be consumed by CC Console. Release note: None
1 parent ce5f34e commit d2bd0ec

File tree

11 files changed

+238
-61
lines changed

11 files changed

+238
-61
lines changed
 

‎.bazelignore

+1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ pkg/ui/workspaces/db-console/src/js/node_modules
1010
pkg/ui/workspaces/db-console/ccl/src/js/node_modules
1111
pkg/ui/workspaces/e2e-tests/node_modules
1212
pkg/ui/workspaces/eslint-plugin-crdb/node_modules
13+
pkg/ui/workspaces/crdb-api-client/node_modules
1314
tmp
1415
vendor

‎BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ exports_files([
102102
# gazelle:exclude pkg/ui/workspaces/db-console/src/js/node_modules
103103
# gazelle:exclude pkg/ui/workspaces/e2e-tests/node_modules
104104
# gazelle:exclude pkg/ui/workspaces/eslint-plugin-crdb/node_modules
105+
# gazelle:exclude pkg/ui/workspaces/crdb-api-client/node_modules
105106
# gazelle:exclude vendor
106107
# gazelle:exclude .vendor.tmp.*
107108
# gazelle:exclude **/zcgo_flags.go

‎WORKSPACE

+1
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ npm_translate_lock(
275275
"//pkg/ui:pnpm-workspace.yaml",
276276
"//pkg/ui/patches:topojson@3.0.2.patch",
277277
"//pkg/ui/workspaces/cluster-ui:package.json",
278+
"//pkg/ui/workspaces/crdb-api-client:package.json",
278279
"//pkg/ui/workspaces/db-console:package.json",
279280
"//pkg/ui/workspaces/db-console/src/js:package.json",
280281
"//pkg/ui/workspaces/e2e-tests:package.json",

‎docs/generated/http/BUILD.bazel

+3-59
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,8 @@
1+
load(":defs.bzl", "PROTOBUF_TARGETS")
2+
13
genrule(
24
name = "http",
3-
srcs = [
4-
"//pkg/build:build_proto",
5-
"//pkg/clusterversion:clusterversion_proto",
6-
"//pkg/config/zonepb:zonepb_proto",
7-
"//pkg/geo/geopb:geopb_proto",
8-
"//pkg/gossip:gossip_proto",
9-
"//pkg/jobs/jobspb:jobspb_proto",
10-
"//pkg/kv/kvpb:kvpb_proto",
11-
"//pkg/kv/kvserver/concurrency/isolation:isolation_proto",
12-
"//pkg/kv/kvserver/concurrency/lock:lock_proto",
13-
"//pkg/kv/kvserver/kvserverpb:kvserverpb_proto",
14-
"//pkg/kv/kvserver/liveness/livenesspb:livenesspb_proto",
15-
"//pkg/kv/kvserver/loqrecovery/loqrecoverypb:loqrecoverypb_proto",
16-
"//pkg/kv/kvserver/readsummary/rspb:rspb_proto",
17-
"//pkg/multitenant/mtinfopb:mtinfopb_proto",
18-
"//pkg/multitenant/tenantcapabilities/tenantcapabilitiespb:tenantcapabilitiespb_proto",
19-
"//pkg/roachpb:roachpb_proto",
20-
"//pkg/rpc/rpcpb:rpcpb_proto",
21-
"//pkg/server/diagnostics/diagnosticspb:diagnosticspb_proto",
22-
"//pkg/server/serverpb:serverpb_proto",
23-
"//pkg/server/status/statuspb:statuspb_proto",
24-
"//pkg/settings:settings_proto",
25-
"//pkg/sql/appstatspb:appstatspb_proto",
26-
"//pkg/sql/catalog/catenumpb:catenumpb_proto",
27-
"//pkg/sql/catalog/catpb:catpb_proto",
28-
"//pkg/sql/catalog/descpb:descpb_proto",
29-
"//pkg/sql/catalog/fetchpb:fetchpb_proto",
30-
"//pkg/sql/contentionpb:contentionpb_proto",
31-
"//pkg/sql/execinfrapb:execinfrapb_proto",
32-
"//pkg/sql/sem/semenumpb:semenumpb_proto",
33-
"//pkg/sql/inverted:inverted_proto",
34-
"//pkg/sql/lex:lex_proto",
35-
"//pkg/sql/pgwire/pgerror:pgerror_proto",
36-
"//pkg/sql/schemachanger/scpb:scpb_proto",
37-
"//pkg/sql/sessiondatapb:sessiondatapb_proto",
38-
"//pkg/sql/sqlstats/insights:insights_proto",
39-
"//pkg/sql/types:types_proto",
40-
"//pkg/storage/enginepb:enginepb_proto",
41-
"//pkg/ts/catalog:catalog_proto",
42-
"//pkg/ts/tspb:tspb_proto",
43-
"//pkg/util/duration:duration_proto",
44-
"//pkg/util/hlc:hlc_proto",
45-
"//pkg/util/admission/admissionpb:admissionpb_proto",
46-
"//pkg/util/log/logpb:logpb_proto",
47-
"//pkg/util/metric:metric_proto",
48-
"//pkg/util/timeutil/pgdate:pgdate_proto",
49-
"//pkg/util/tracing/tracingpb:tracingpb_proto",
50-
"//pkg/util:util_proto",
51-
"@com_github_prometheus_client_model//io/prometheus/client:io_prometheus_client_proto",
52-
"@com_github_cockroachdb_errors//errorspb:errorspb_proto",
53-
"@com_github_gogo_protobuf//gogoproto:gogo_proto",
54-
"@com_google_protobuf//:any_proto",
55-
"@com_google_protobuf//:descriptor_proto",
56-
"@com_google_protobuf//:duration_proto",
57-
"@com_google_protobuf//:timestamp_proto",
58-
"@go_googleapis//google/api:annotations_proto",
59-
"@go_googleapis//google/api:http_proto",
60-
"@io_etcd_go_raft_v3//raftpb:raftpb_proto",
61-
],
5+
srcs = PROTOBUF_TARGETS,
626
outs = [
637
"full.md",
648
"health-other.md",

‎docs/generated/http/defs.bzl

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# PROTOBUF_TARGETS lists the indirect dependencies needed to compile proto dependencies
2+
# of //pkg/server/serverpb:serverpb_proto target
3+
PROTOBUF_TARGETS = [
4+
"//pkg/build:build_proto",
5+
"//pkg/clusterversion:clusterversion_proto",
6+
"//pkg/config/zonepb:zonepb_proto",
7+
"//pkg/geo/geopb:geopb_proto",
8+
"//pkg/gossip:gossip_proto",
9+
"//pkg/jobs/jobspb:jobspb_proto",
10+
"//pkg/kv/kvpb:kvpb_proto",
11+
"//pkg/kv/kvserver/concurrency/isolation:isolation_proto",
12+
"//pkg/kv/kvserver/concurrency/lock:lock_proto",
13+
"//pkg/kv/kvserver/kvserverpb:kvserverpb_proto",
14+
"//pkg/kv/kvserver/liveness/livenesspb:livenesspb_proto",
15+
"//pkg/kv/kvserver/loqrecovery/loqrecoverypb:loqrecoverypb_proto",
16+
"//pkg/kv/kvserver/readsummary/rspb:rspb_proto",
17+
"//pkg/kv/kvserver/kvflowcontrol/kvflowcontrolpb:kvflowcontrolpb_proto",
18+
"//pkg/multitenant/mtinfopb:mtinfopb_proto",
19+
"//pkg/multitenant/tenantcapabilities/tenantcapabilitiespb:tenantcapabilitiespb_proto",
20+
"//pkg/roachpb:roachpb_proto",
21+
"//pkg/rpc/rpcpb:rpcpb_proto",
22+
"//pkg/server/diagnostics/diagnosticspb:diagnosticspb_proto",
23+
"//pkg/server/serverpb:serverpb_proto",
24+
"//pkg/server/status/statuspb:statuspb_proto",
25+
"//pkg/settings:settings_proto",
26+
"//pkg/sql/appstatspb:appstatspb_proto",
27+
"//pkg/sql/catalog/catenumpb:catenumpb_proto",
28+
"//pkg/sql/catalog/catpb:catpb_proto",
29+
"//pkg/sql/catalog/descpb:descpb_proto",
30+
"//pkg/sql/catalog/fetchpb:fetchpb_proto",
31+
"//pkg/sql/contentionpb:contentionpb_proto",
32+
"//pkg/sql/execinfrapb:execinfrapb_proto",
33+
"//pkg/sql/sem/semenumpb:semenumpb_proto",
34+
"//pkg/sql/inverted:inverted_proto",
35+
"//pkg/sql/lex:lex_proto",
36+
"//pkg/sql/pgwire/pgerror:pgerror_proto",
37+
"//pkg/sql/schemachanger/scpb:scpb_proto",
38+
"//pkg/sql/sessiondatapb:sessiondatapb_proto",
39+
"//pkg/sql/sqlstats/insights:insights_proto",
40+
"//pkg/sql/types:types_proto",
41+
"//pkg/storage/enginepb:enginepb_proto",
42+
"//pkg/ts/catalog:catalog_proto",
43+
"//pkg/ts/tspb:tspb_proto",
44+
"//pkg/util/duration:duration_proto",
45+
"//pkg/util/hlc:hlc_proto",
46+
"//pkg/util/admission/admissionpb:admissionpb_proto",
47+
"//pkg/util/log/logpb:logpb_proto",
48+
"//pkg/util/metric:metric_proto",
49+
"//pkg/util/timeutil/pgdate:pgdate_proto",
50+
"//pkg/util/tracing/tracingpb:tracingpb_proto",
51+
"//pkg/util:util_proto",
52+
"@com_github_prometheus_client_model//io/prometheus/client:io_prometheus_client_proto",
53+
"@com_github_cockroachdb_errors//errorspb:errorspb_proto",
54+
"@com_github_gogo_protobuf//gogoproto:gogo_proto",
55+
"@com_google_protobuf//:any_proto",
56+
"@com_google_protobuf//:descriptor_proto",
57+
"@com_google_protobuf//:duration_proto",
58+
"@com_google_protobuf//:timestamp_proto",
59+
"@go_googleapis//google/api:annotations_proto",
60+
"@go_googleapis//google/api:http_proto",
61+
"@io_etcd_go_raft_v3//raftpb:raftpb_proto",
62+
]

‎pkg/ui/pnpm-lock.yaml

+56
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎pkg/ui/pnpm-workspace.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ packages:
55
- "./workspaces/cluster-ui"
66
- "./workspaces/db-console"
77
- "./workspaces/e2e-tests"
8+
- "./workspaces/crdb-api-client"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_run_binary", "js_test")
2+
load("@aspect_rules_js//npm:defs.bzl", "npm_package")
3+
load("@aspect_rules_ts//ts:defs.bzl", "ts_project")
4+
load("@bazel_skylib//rules:write_file.bzl", "write_file")
5+
load("@npm//:defs.bzl", "npm_link_all_packages")
6+
load("@npm//:defs.bzl", "npm_link_all_packages")
7+
load("//docs/generated/http:defs.bzl", "PROTOBUF_TARGETS")
8+
load("//pkg/ui/workspaces/db-console/src/js:defs.bzl", "proto_sources")
9+
10+
npm_link_all_packages(name = "node_modules")
11+
12+
genrule(
13+
name = "protos",
14+
srcs = [
15+
":node_modules/@bufbuild/protoc-gen-es/bin/protoc-gen-es",
16+
":proto_sources",
17+
] + PROTOBUF_TARGETS,
18+
outs = ["dist"],
19+
cmd = """
20+
mkdir -p $(OUTS);
21+
DESCRIPTOR_SET_IN=$$(for word in $(SRCS); do echo $$word; done | grep '\\.bin$$' | tr -s '\\n' ':');
22+
PROTO_PATHS=$$(for f in $(locations :proto_sources);
23+
do if [[ "$$f" =~ ^.*/pkg/.*/_virtual_imports/.*_proto/.*.proto$$ ]];
24+
then echo $$f | sed 's|.*pkg/.*/_virtual_imports/.*_proto/||' | sed 's|.bin$$||';
25+
fi; done | sort -u);
26+
export PATH=$$PATH:$$(dirname $(NODE_PATH))
27+
$(location @com_google_protobuf//:protoc) \
28+
--plugin=$(location :node_modules/@bufbuild/protoc-gen-es/bin/protoc-gen-es) \
29+
--es_out $(OUTS) \
30+
--descriptor_set_in $$DESCRIPTOR_SET_IN \
31+
--es_opt target=js+dts \
32+
$$PROTO_PATHS""",
33+
toolchains = ["@nodejs_toolchains//:resolved_toolchain"],
34+
tools = [
35+
"@com_google_protobuf//:protoc",
36+
"@nodejs_toolchains//:resolved_toolchain",
37+
],
38+
)
39+
40+
proto_sources(
41+
name = "proto_sources",
42+
protos = [
43+
"//pkg/server/serverpb:serverpb_proto",
44+
"//pkg/ts/tspb:tspb_proto",
45+
],
46+
)
47+
48+
genrule(
49+
name = "index_ts",
50+
srcs = [":protos"],
51+
outs = ["index.ts"],
52+
cmd = """
53+
ABS_ROOT_PATH=$$(realpath $(SRCS))
54+
for f in $$(find $$ABS_ROOT_PATH -name *.js)
55+
do
56+
filename=$$(basename -s .js $$f)
57+
filepath=$${f#$$ABS_ROOT_PATH/}
58+
filepath=$${filepath%.js}
59+
import_name=$${filepath/-/_}; \
60+
echo export "*" as $${import_name////_} from \\"./$$(basename $(SRCS))/$${filepath}\\"\\; >> $@
61+
done
62+
""",
63+
)
64+
65+
ts_project(
66+
name = "ts_project",
67+
srcs = [
68+
"tsconfig.json",
69+
":index_ts",
70+
":protos",
71+
],
72+
tsconfig = "tsconfig.json",
73+
validate = True,
74+
deps = [":node_modules"],
75+
)
76+
77+
npm_package(
78+
name = "crdb-api-client",
79+
srcs = [
80+
"package.json",
81+
"tsconfig.json",
82+
":index_ts",
83+
":protos",
84+
":ts_project",
85+
],
86+
package = "@cockroachlabs/crdb-api-client",
87+
visibility = ["//visibility:public"],
88+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "@cockroachlabs/crdb-api-client",
3+
"version": "1.0.0",
4+
"main": "index.ts",
5+
"devDependencies": {
6+
"@bufbuild/protoc-gen-es": "^1.7.2",
7+
"typescript": "5.1.6"
8+
},
9+
"dependencies": {
10+
"@bufbuild/protobuf": "^1.7.2"
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es2016",
4+
"lib": ["ESNext"],
5+
"module": "ESNext",
6+
"esModuleInterop": true,
7+
"forceConsistentCasingInFileNames": true,
8+
"strict": true,
9+
"skipLibCheck": false
10+
}
11+
}

‎pkg/ui/workspaces/db-console/src/js/defs.bzl

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def _proto_sources_impl(ctx):
1010
transitive = [p[ProtoInfo].transitive_sources for p in ctx.attr.protos],
1111
))
1212

13-
_proto_sources = rule(
13+
proto_sources = rule(
1414
doc = """Provider Adapter from ProtoInfo to DefaultInfo.
1515
Extracts the transitive_sources from the ProtoInfo provided by the proto attr.
1616
This allows a macro to access the complete set of .proto files needed during compilation.
@@ -37,7 +37,7 @@ def protobufjs_library(name, out_name, protos, **kwargs):
3737
ts_target = "_%s_pbts" % name
3838

3939
# grab the transitive .proto files needed to compile the given one
40-
_proto_sources(
40+
proto_sources(
4141
name = proto_target,
4242
protos = protos,
4343
)

0 commit comments

Comments
 (0)
Please sign in to comment.