build: expose flatModuleOutFile option on ng_module (#22814)
This lets projects like Material change ng_package "bundle index" files to non-conflicting paths Currently packages like @angular/core ship with the generated metadata in a path like 'core.js' which overwrites one of the inputs. Angular material puts the generated file in a path like 'index.js' Either way these files generated by ng_module rules have the potential to collide with inputs given by the user, which results in an error. Instead, give users the freedom to choose a different non-conflicting name. Also this refactors the ng_package rule, removing the redundant secondary_entry_points attribute. Instead, we assume that any ng_module in the deps with a module_name attribute is a secondary entry point. PR Close #22814
This commit is contained in:
@ -4,6 +4,7 @@ ng_module(
|
||||
name = "test_module",
|
||||
srcs = glob(["*.ts"]),
|
||||
entry_point = "index.ts",
|
||||
flat_module_out_file = "flat_module_filename",
|
||||
module_name = "some_npm_module",
|
||||
deps = ["//packages/core"],
|
||||
)
|
||||
|
@ -6,11 +6,12 @@
|
||||
"""
|
||||
|
||||
def _extract_flat_module_index(ctx):
|
||||
return [DefaultInfo(files = depset(transitive = [
|
||||
dep.angular.flat_module_metadata
|
||||
for dep in ctx.attr.deps
|
||||
if hasattr(dep, "angular")
|
||||
]))]
|
||||
files = []
|
||||
for dep in ctx.attr.deps:
|
||||
if hasattr(dep, "angular"):
|
||||
for metadata in dep.angular.flat_module_metadata:
|
||||
files.extend([metadata.metadata_file, metadata.typings_file])
|
||||
return [DefaultInfo(files = depset(files))]
|
||||
|
||||
extract_flat_module_index = rule(
|
||||
implementation = _extract_flat_module_index,
|
||||
|
@ -12,7 +12,7 @@ describe('flat module index', () => {
|
||||
describe('child metadata', () => {
|
||||
it('should have contents', () => {
|
||||
const metadata = fs.readFileSync(
|
||||
require.resolve(`${PKG}/_test_module.bundle_index.metadata.json`), {encoding: 'utf-8'});
|
||||
require.resolve(`${PKG}/flat_module_filename.metadata.json`), {encoding: 'utf-8'});
|
||||
expect(metadata).toContain('"__symbolic":"module"');
|
||||
expect(metadata).toContain('"__symbolic":"reference","module":"@angular/core"');
|
||||
expect(metadata).toContain('"origins":{"Child":"./child","ɵa":"./parent"}');
|
||||
@ -21,8 +21,8 @@ describe('flat module index', () => {
|
||||
});
|
||||
describe('child typings', () => {
|
||||
it('should have contents', () => {
|
||||
const dts = fs.readFileSync(
|
||||
require.resolve(`${PKG}/_test_module.bundle_index.d.ts`), {encoding: 'utf-8'});
|
||||
const dts =
|
||||
fs.readFileSync(require.resolve(`${PKG}/flat_module_filename.d.ts`), {encoding: 'utf-8'});
|
||||
|
||||
expect(dts).toContain('export * from \'./index\';');
|
||||
expect(dts).toContain('export { Parent as ɵa } from \'./parent\';');
|
||||
|
Reference in New Issue
Block a user