Skip to content

Commit 9f9a5ac

Browse files
authored
Move logic from wd_ts_bundle to wd_js_bundle (#1479)
Before this build, `wd_ts_bundle` has a bunch of logic for generating module specifiers, renaming modules, naming the capnp bundle, etc. This makes it problematic to use `wd_js_bundle` directly because ideally we'd want to exactly match the conventions in `wd_ts_bundle`. So this fixes it by moving this logic into `wd_js_bundle`.
1 parent 01a7669 commit 9f9a5ac

File tree

2 files changed

+77
-76
lines changed

2 files changed

+77
-76
lines changed

build/wd_js_bundle.bzl

+67-36
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ const {const_name} :Modules.Bundle = (
1515

1616
MODULE_TEMPLATE = """ (name = "{name}", {src_type} = embed "{path}", type = {type}, {ts_declaration})"""
1717

18+
def _to_name(file_name):
19+
return file_name.removesuffix(".js")
20+
1821
def _to_d_ts(file_name):
1922
return file_name.removesuffix(".js") + ".d.ts"
2023

@@ -54,11 +57,11 @@ def _gen_api_bundle_capnpn_impl(ctx):
5457
for m in ctx.attr.internal_modules
5558
]
5659
modules += [
57-
_render_module(ctx.attr.internal_wasm_modules[m], m.label, "wasm", "internal")
60+
_render_module(ctx.attr.internal_wasm_modules[m], m.label, "wasm", "internal")
5861
for m in ctx.attr.internal_wasm_modules
5962
]
6063
modules += [
61-
_render_module(ctx.attr.internal_data_modules[m], m.label, "data", "internal")
64+
_render_module(ctx.attr.internal_data_modules[m], m.label, "data", "internal")
6265
for m in ctx.attr.internal_data_modules
6366
]
6467

@@ -81,6 +84,7 @@ gen_api_bundle_capnpn = rule(
8184
"declarations": attr.string_dict(),
8285
"data": attr.label_list(allow_files = True),
8386
"const_name": attr.string(mandatory = True),
87+
"deps": attr.label_list(),
8488
},
8589
)
8690

@@ -107,63 +111,90 @@ def _copy_modules(modules, declarations):
107111

108112
def wd_js_bundle(
109113
name,
114+
import_name,
110115
schema_id,
111-
const_name,
112-
builtin_modules = {},
113-
internal_modules = {},
114-
internal_wasm_modules = {},
115-
internal_data_modules = {},
116+
builtin_modules,
117+
internal_modules = [],
118+
internal_wasm_modules = [],
119+
internal_data_modules = [],
116120
declarations = [],
117-
**kwargs
118-
):
121+
deps = []):
119122
"""Generate cc capnp library with js api bundle.
120123
121124
NOTE: Due to capnpc embed limitation all modules must be in the same or sub directory of the
122125
actual rule usage.
123126
124127
Args:
125128
name: cc_capnp_library rule name
126-
builtin_modules: js src label -> module name dictionary
127-
internal_modules: js src label -> module name dictionary
128-
internal_wasm_modules: wasm src label -> module name dictionary
129-
internal_data_modules: data src label -> module name dictionary
130-
declarations: d.ts label set
131-
const_name: capnp constant name that will contain bundle definition
129+
import_name: The js import specifier. builtin modules are accessible from
130+
user code under `<import_name>:<module_name>`, internal modules
131+
are accessible from builtin modules under
132+
`<import_name>-internal:<module_name>`
133+
The capnproto bundle object generated will be called
134+
`import_name` + "Bundle"
132135
schema_id: capnpn schema id
133-
**kwargs: rest of cc_capnp_library arguments
136+
builtin_modules: list of js source files for builtin modules
137+
internal_modules: list of js source files for internal modules
138+
internal_wasm_modules: list of wasm source files
139+
internal_data_modules: list of data source files
140+
declarations: d.ts label set
141+
deps: dependency list
134142
"""
135-
136-
builtin_modules, builtin_declarations = _copy_modules(builtin_modules, declarations)
137-
internal_modules, internal_declarations = _copy_modules(
138-
internal_modules, declarations
143+
builtin_modules_dict = {
144+
m: "{}:{}".format(import_name, _to_name(m))
145+
for m in builtin_modules
146+
}
147+
internal_modules_dict = {
148+
m: "{}-internal:{}".format(import_name, _to_name(m.removeprefix("internal/")))
149+
for m in internal_modules
150+
}
151+
internal_wasm_modules_dict = {
152+
m: "{}-internal:{}".format(import_name, m.removeprefix("internal/"))
153+
for m in internal_wasm_modules
154+
}
155+
internal_data_modules_dict = {
156+
m: "{}-internal:{}".format(import_name, m.removeprefix("internal/"))
157+
for m in internal_data_modules
158+
}
159+
160+
builtin_modules_dict, builtin_declarations = _copy_modules(
161+
builtin_modules_dict,
162+
declarations,
163+
)
164+
internal_modules_dict, internal_declarations = _copy_modules(
165+
internal_modules_dict,
166+
declarations,
139167
)
140-
internal_wasm_modules, _ = _copy_modules(
141-
internal_wasm_modules, declarations
168+
internal_wasm_modules_dict, _ = _copy_modules(
169+
internal_wasm_modules_dict,
170+
declarations,
142171
)
143-
internal_data_modules, _ = _copy_modules(
144-
internal_data_modules, declarations
172+
internal_data_modules_dict, _ = _copy_modules(
173+
internal_data_modules_dict,
174+
declarations,
145175
)
146176

147177
data = (
148-
list(builtin_modules)
149-
+ list(internal_modules)
150-
+ list(internal_wasm_modules)
151-
+ list(internal_data_modules)
152-
+ list(builtin_declarations.values())
153-
+ list(internal_declarations.values())
178+
list(builtin_modules_dict) +
179+
list(internal_modules_dict) +
180+
list(internal_wasm_modules_dict) +
181+
list(internal_data_modules_dict) +
182+
list(builtin_declarations.values()) +
183+
list(internal_declarations.values())
154184
)
155185

156186
gen_api_bundle_capnpn(
157187
name = name + "@gen",
158188
out = name + ".capnp",
159189
schema_id = schema_id,
160-
const_name = const_name,
161-
builtin_modules = builtin_modules,
162-
internal_modules = internal_modules,
163-
internal_wasm_modules = internal_wasm_modules,
164-
internal_data_modules = internal_data_modules,
190+
const_name = import_name + "Bundle",
191+
builtin_modules = builtin_modules_dict,
192+
internal_modules = internal_modules_dict,
193+
internal_wasm_modules = internal_wasm_modules_dict,
194+
internal_data_modules = internal_data_modules_dict,
165195
declarations = builtin_declarations | internal_declarations,
166196
data = data,
197+
deps = deps,
167198
)
168199

169200
cc_capnp_library(
@@ -173,5 +204,5 @@ def wd_js_bundle(
173204
visibility = ["//visibility:public"],
174205
data = data,
175206
deps = ["@workerd//src/workerd/jsg:modules_capnp"],
176-
**kwargs
207+
include_prefix = import_name,
177208
)

build/wd_ts_bundle.bzl

+10-40
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
load("@aspect_rules_ts//ts:defs.bzl", "ts_config", "ts_project")
2-
load("@workerd//:build/wd_js_bundle.bzl", "wd_js_bundle")
32
load("@npm//:eslint/package_json.bzl", eslint_bin = "bin")
3+
load("@workerd//:build/wd_js_bundle.bzl", "wd_js_bundle")
44

55
def _to_js(file_name):
66
if file_name.endswith(".ts"):
@@ -10,9 +10,6 @@ def _to_js(file_name):
1010
def _to_d_ts(file_name):
1111
return file_name.removesuffix(".ts") + ".d.ts"
1212

13-
def _to_name(file_name):
14-
return file_name.removesuffix(".ts").removesuffix(".js")
15-
1613
def wd_ts_bundle(
1714
name,
1815
import_name,
@@ -34,9 +31,11 @@ def wd_ts_bundle(
3431
"<import_name>-internal:<module_name>".
3532
schema_id: bundle capnp schema id,
3633
modules: list of js and ts source files for builtin modules
37-
internal_modules: list of js and ts source files for internal modules
34+
internal_modules: list of js, ts, and d.ts source files for internal modules
3835
tsconfig_json: tsconfig.json label
3936
eslintrc_json: eslintrc.json label
37+
internal_wasm_modules: list of wasm source files
38+
internal_data_modules: list of data source files
4039
lint: enables/disables source linting
4140
deps: additional typescript dependencies
4241
"""
@@ -60,46 +59,17 @@ def wd_ts_bundle(
6059

6160
wd_js_bundle(
6261
name = name,
62+
import_name = import_name,
6363
# builtin modules are accessible under "<import_name>:<module_name>" name
64-
builtin_modules = dict([(_to_js(m), import_name + ":" + _to_name(m)) for m in modules]),
65-
const_name = import_name + "Bundle",
66-
include_prefix = import_name,
64+
builtin_modules = [_to_js(m) for m in modules],
6765
# internal modules are accessible under "<import_name>-internal:<module_name>" name
6866
# without "internal/" folder prefix.
69-
internal_modules = dict(
70-
[
71-
(
72-
_to_js(m),
73-
import_name + "-internal:" + _to_name(m.removeprefix("internal/")),
74-
)
75-
for m in internal_modules
76-
if not m.endswith(".d.ts")
77-
]
78-
),
79-
internal_wasm_modules = dict(
80-
[
81-
(
82-
m,
83-
import_name
84-
+ "-internal:"
85-
+ m.removeprefix("internal/").removesuffix(".wasm"),
86-
)
87-
for m in internal_wasm_modules
88-
]
89-
),
90-
internal_data_modules = dict(
91-
[
92-
(
93-
m,
94-
import_name
95-
+ "-internal:"
96-
+ m.removeprefix("internal/"),
97-
)
98-
for m in internal_data_modules
99-
]
100-
),
67+
internal_modules = [_to_js(m) for m in internal_modules if not m.endswith(".d.ts")],
68+
internal_wasm_modules = internal_wasm_modules,
69+
internal_data_modules = internal_data_modules,
10170
declarations = declarations,
10271
schema_id = schema_id,
72+
deps = deps,
10373
)
10474

10575
if lint:

0 commit comments

Comments
 (0)