@@ -15,6 +15,9 @@ const {const_name} :Modules.Bundle = (
15
15
16
16
MODULE_TEMPLATE = """ (name = "{name}", {src_type} = embed "{path}", type = {type}, {ts_declaration})"""
17
17
18
+ def _to_name (file_name ):
19
+ return file_name .removesuffix (".js" )
20
+
18
21
def _to_d_ts (file_name ):
19
22
return file_name .removesuffix (".js" ) + ".d.ts"
20
23
@@ -54,11 +57,11 @@ def _gen_api_bundle_capnpn_impl(ctx):
54
57
for m in ctx .attr .internal_modules
55
58
]
56
59
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" )
58
61
for m in ctx .attr .internal_wasm_modules
59
62
]
60
63
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" )
62
65
for m in ctx .attr .internal_data_modules
63
66
]
64
67
@@ -81,6 +84,7 @@ gen_api_bundle_capnpn = rule(
81
84
"declarations" : attr .string_dict (),
82
85
"data" : attr .label_list (allow_files = True ),
83
86
"const_name" : attr .string (mandatory = True ),
87
+ "deps" : attr .label_list (),
84
88
},
85
89
)
86
90
@@ -107,63 +111,90 @@ def _copy_modules(modules, declarations):
107
111
108
112
def wd_js_bundle (
109
113
name ,
114
+ import_name ,
110
115
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 = [],
116
120
declarations = [],
117
- ** kwargs
118
- ):
121
+ deps = []):
119
122
"""Generate cc capnp library with js api bundle.
120
123
121
124
NOTE: Due to capnpc embed limitation all modules must be in the same or sub directory of the
122
125
actual rule usage.
123
126
124
127
Args:
125
128
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"
132
135
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
134
142
"""
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 ,
139
167
)
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 ,
142
171
)
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 ,
145
175
)
146
176
147
177
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 ())
154
184
)
155
185
156
186
gen_api_bundle_capnpn (
157
187
name = name + "@gen" ,
158
188
out = name + ".capnp" ,
159
189
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 ,
165
195
declarations = builtin_declarations | internal_declarations ,
166
196
data = data ,
197
+ deps = deps ,
167
198
)
168
199
169
200
cc_capnp_library (
@@ -173,5 +204,5 @@ def wd_js_bundle(
173
204
visibility = ["//visibility:public" ],
174
205
data = data ,
175
206
deps = ["@workerd//src/workerd/jsg:modules_capnp" ],
176
- ** kwargs
207
+ include_prefix = import_name ,
177
208
)
0 commit comments