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:
Alex Eagle 2018-03-15 18:04:34 -07:00 committed by Igor Minar
parent 4648597d14
commit 689f351092
28 changed files with 1110 additions and 324 deletions

View File

@ -24,10 +24,6 @@ ng_package(
"//packages/animations/browser/testing:package.json", "//packages/animations/browser/testing:package.json",
], ],
entry_point = "packages/animations/index.js", entry_point = "packages/animations/index.js",
secondary_entry_points = [
"browser",
"browser/testing",
],
deps = [ deps = [
":animations", ":animations",
"//packages/animations/browser", "//packages/animations/browser",

View File

@ -253,46 +253,53 @@ def _ts_expected_outs(ctx, label):
return _expected_outs(ctx) return _expected_outs(ctx)
def _write_bundle_index(ctx): def _write_bundle_index(ctx):
basename = "_%s.bundle_index" % ctx.label.name # Provide a default for the flat_module_out_file attribute.
tsconfig_file = ctx.actions.declare_file("%s.tsconfig.json" % basename) # We cannot use the default="" parameter of ctx.attr because the value is calculated
metadata_file = ctx.actions.declare_file("%s.metadata.json" % basename) # from other attributes (name)
tstyping_file = ctx.actions.declare_file("%s.d.ts" % basename) flat_module_out_file = ctx.attr.flat_module_out_file if ctx.attr.flat_module_out_file else "%s_public_index" % ctx.label.name
js_file = ctx.actions.declare_file("%s.js" % basename)
tsconfig_file = ctx.actions.declare_file("%s.tsconfig.json" % flat_module_out_file)
metadata_file = ctx.actions.declare_file("%s.metadata.json" % flat_module_out_file)
typings_file = ctx.actions.declare_file("%s.d.ts" % flat_module_out_file)
index_file = ctx.actions.declare_file("%s.js" % flat_module_out_file)
tsconfig = dict(tsc_wrapped_tsconfig(ctx, ctx.files.srcs, ctx.files.srcs), **{ tsconfig = dict(tsc_wrapped_tsconfig(ctx, ctx.files.srcs, ctx.files.srcs), **{
"angularCompilerOptions": { "angularCompilerOptions": {
"flatModuleOutFile": basename, "flatModuleOutFile": flat_module_out_file,
}, },
}) })
if ctx.attr.module_name: if not ctx.attr.module_name:
tsconfig["angularCompilerOptions"]["flatModuleId"] = ctx.attr.module_name fail("Only ng_module with a module_name attribute should be exposed as flat module")
tsconfig["angularCompilerOptions"]["flatModuleId"] = ctx.attr.module_name
entry_point = ctx.attr.entry_point if ctx.attr.entry_point else "index.ts" entry_point = ctx.attr.entry_point if ctx.attr.entry_point else "index.ts"
# createBundleIndexHost in bundle_index_host.ts will throw if the "files" has more than one entry. # createBundleIndexHost in bundle_index_host.ts will throw if the "files" has more than one entry.
# We don't want to fail() here, however, because not all ng_module's will have the bundle index written. # We don't want to fail() here, however, because not all ng_module's will have the bundle index written.
# So we make the assumption that the index.ts file in the highest parent directory is the entry point. # So we make the assumption that the index.ts file in the highest parent directory is the entry point.
index_file = None index = None
for f in tsconfig["files"]: for f in tsconfig["files"]:
if f.endswith("/" + entry_point): if f.endswith("/" + entry_point):
if not index_file or len(f) < len(index_file): if not index or len(f) < len(index):
index_file = f index = f
if index_file: if index:
tsconfig["files"] = [index_file] tsconfig["files"] = [index]
ctx.actions.write(tsconfig_file, json_marshal(tsconfig)) ctx.actions.write(tsconfig_file, json_marshal(tsconfig))
outputs = [metadata_file, tstyping_file, js_file]
ctx.action( ctx.action(
progress_message = "Producing metadata for bundle %s" % ctx.label.name, progress_message = "Producing metadata for bundle %s" % ctx.label.name,
executable = ctx.executable._index_bundler, executable = ctx.executable._index_bundler,
inputs = ctx.files.srcs + [tsconfig_file], inputs = ctx.files.srcs + [tsconfig_file],
outputs = outputs, outputs = [metadata_file, typings_file, index_file],
arguments = ["-p", tsconfig_file.path], arguments = ["-p", tsconfig_file.path],
) )
return outputs return struct(
module_name = ctx.attr.module_name,
metadata_file = metadata_file,
typings_file = typings_file,
index_file = index_file)
def ng_module_impl(ctx, ts_compile_actions, ivy = False): def ng_module_impl(ctx, ts_compile_actions, ivy = False):
"""Implementation function for the ng_module rule. """Implementation function for the ng_module rule.
@ -326,13 +333,12 @@ def ng_module_impl(ctx, ts_compile_actions, ivy = False):
# Only produces the flattened "index bundle" metadata when requested by some other rule # Only produces the flattened "index bundle" metadata when requested by some other rule
# and only under Bazel # and only under Bazel
if hasattr(ctx.executable, "_index_bundler"): if hasattr(ctx.executable, "_index_bundler") and ctx.attr.module_name:
bundle_index_metadata = _write_bundle_index(ctx) bundle_index_metadata = [_write_bundle_index(ctx)]
providers["angular"]["flat_module_metadata"] = depset(bundle_index_metadata, else:
transitive = [ bundle_index_metadata = []
d.angular.flat_module_metadata
for d in ctx.attr.deps providers["angular"]["flat_module_metadata"] = depset(bundle_index_metadata)
if hasattr(d, "angular")])
return providers return providers
@ -392,6 +398,15 @@ NG_MODULE_RULE_ATTRS = dict(dict(COMMON_ATTRIBUTES, **NG_MODULE_ATTRIBUTES), **{
"entry_point": attr.string(), "entry_point": attr.string(),
# Default is %{name}_public_index
# The suffix points to the generated "bundle index" files that users import from
# The default is intended to avoid collisions with the users input files.
# Later packaging rules will point to these generated files as the entry point
# into the package.
# See the flatModuleOutFile documentation in
# https://github.com/angular/angular/blob/master/packages/compiler-cli/src/transformers/api.ts
"flat_module_out_file": attr.string(),
"_index_bundler": attr.label( "_index_bundler": attr.label(
executable = True, executable = True,
cfg = "host", cfg = "host",

View File

@ -116,7 +116,12 @@ def _ng_package_impl(ctx):
if f.path.endswith(".js"): if f.path.endswith(".js"):
esm2015.append(struct(js = f, map = None)) esm2015.append(struct(js = f, map = None))
for entry_point in [""] + ctx.attr.secondary_entry_points: entry_points = []
for dep in ctx.attr.deps:
if dep.label.package.startswith(ctx.label.package):
entry_points.append(dep.label.package[len(ctx.label.package) + 1:])
for entry_point in entry_points:
es2015_entry_point = "/".join([p for p in [ es2015_entry_point = "/".join([p for p in [
ctx.bin_dir.path, ctx.bin_dir.path,
ctx.label.package, ctx.label.package,
@ -158,9 +163,14 @@ def _ng_package_impl(ctx):
config_name = entry_point.replace("/", "_")) config_name = entry_point.replace("/", "_"))
bundles.append(struct(js = min_output, map = uglify_sourcemap)) bundles.append(struct(js = min_output, map = uglify_sourcemap))
metadata_files = depset(transitive = [getattr(dep, "angular").flat_module_metadata inputs = (
for dep in ctx.attr.deps ctx.files.srcs +
if hasattr(dep, "angular")]) esm5_sources.to_list() +
depset(transitive = [d.typescript.transitive_declarations
for d in ctx.attr.deps
if hasattr(d, "typescript")]).to_list() +
[f.js for f in esm2015 + esm5 + bundles] +
[f.map for f in esm2015 + esm5 + bundles if f.map])
args = ctx.actions.args() args = ctx.actions.args()
args.use_param_file("%s", use_always = True) args.use_param_file("%s", use_always = True)
@ -168,33 +178,47 @@ def _ng_package_impl(ctx):
# The order of arguments matters here, as they are read in order in packager.ts. # The order of arguments matters here, as they are read in order in packager.ts.
args.add(npm_package_directory.path) args.add(npm_package_directory.path)
args.add(ctx.label.package) args.add(ctx.label.package)
args.add(primary_entry_point_name(ctx.attr.name, ctx.attr.entry_point))
args.add(ctx.attr.secondary_entry_points, join_with=",")
args.add([ctx.bin_dir.path, ctx.label.package], join_with="/") args.add([ctx.bin_dir.path, ctx.label.package], join_with="/")
args.add(ctx.file.readme_md.path if ctx.file.readme_md else "")
flat_module_metadata = depset(transitive = [
getattr(dep, "angular").flat_module_metadata
for dep in ctx.attr.deps
if hasattr(dep, "angular")])
# Marshal the metadata into a JSON string so we can parse the data structure
# in the TypeScript program easily.
metadata_arg = {}
for m in flat_module_metadata.to_list():
inputs.extend([m.index_file, m.typings_file, m.metadata_file])
metadata_arg[m.module_name] = {
"index": m.index_file.path,
"typings": m.typings_file.path,
"metadata": m.metadata_file.path,
}
args.add(str(metadata_arg))
if ctx.file.readme_md:
inputs.append(ctx.file.readme_md)
args.add(ctx.file.readme_md.path)
else:
# placeholder
args.add("")
args.add(_flatten_paths(esm2015), join_with=",") args.add(_flatten_paths(esm2015), join_with=",")
args.add(_flatten_paths(esm5), join_with=",") args.add(_flatten_paths(esm5), join_with=",")
args.add(_flatten_paths(bundles), join_with=",") args.add(_flatten_paths(bundles), join_with=",")
args.add([s.path for s in ctx.files.srcs], join_with=",") args.add([s.path for s in ctx.files.srcs], join_with=",")
args.add(ctx.file.license_banner.path if ctx.file.license_banner else "")
other_inputs = (metadata_files.to_list() +
[f.js for f in esm2015 + esm5 + bundles] +
[f.map for f in esm2015 + esm5 + bundles if f.map])
if ctx.file.readme_md:
other_inputs.append(ctx.file.readme_md)
if ctx.file.license_banner: if ctx.file.license_banner:
other_inputs.append(ctx.file.license_banner) inputs.append(ctx.file.license_banner)
args.add(ctx.file.license_banner.path)
else:
# placeholder
args.add("")
ctx.actions.run( ctx.actions.run(
progress_message = "Angular Packaging: building npm package for %s" % ctx.label.name, progress_message = "Angular Packaging: building npm package for %s" % ctx.label.name,
mnemonic = "AngularPackage", mnemonic = "AngularPackage",
inputs = esm5_sources.to_list() + inputs = inputs,
depset(transitive = [d.typescript.transitive_declarations
for d in ctx.attr.deps
if hasattr(d, "typescript")]).to_list() +
ctx.files.srcs +
other_inputs,
outputs = [npm_package_directory], outputs = [npm_package_directory],
executable = ctx.executable._ng_packager, executable = ctx.executable._ng_packager,
arguments = [args], arguments = [args],
@ -220,7 +244,6 @@ NG_PACKAGE_ATTRS = dict(NPM_PACKAGE_ATTRS, **dict(ROLLUP_ATTRS, **{
"include_devmode_srcs": attr.bool(default = False), "include_devmode_srcs": attr.bool(default = False),
"readme_md": attr.label(allow_single_file = FileType([".md"])), "readme_md": attr.label(allow_single_file = FileType([".md"])),
"globals": attr.string_dict(default={}), "globals": attr.string_dict(default={}),
"secondary_entry_points": attr.string_list(),
"_ng_packager": attr.label( "_ng_packager": attr.label(
default=Label("//packages/bazel/src/ng_package:packager"), default=Label("//packages/bazel/src/ng_package:packager"),
executable=True, cfg="host"), executable=True, cfg="host"),

View File

@ -18,10 +18,11 @@ function main(args: string[]): number {
// bazel (see https://docs.bazel.build/versions/master/skylark/lib/Args.html#use_param_file). // bazel (see https://docs.bazel.build/versions/master/skylark/lib/Args.html#use_param_file).
const paramFilePath = args[0]; const paramFilePath = args[0];
// Paramaters are specified in the file one per line. Empty params are represented as two // Bazel params may be surrounded with quotes
// single-quotes, so turn these into real empty strings.. function unquoteParameter(s: string) { return s.replace(/^'(.*)'$/, '$1'); }
const params =
fs.readFileSync(paramFilePath, 'utf-8').split('\n').map(s => s === '\'\'' ? '' : s); // Parameters are specified in the file one per line.
const params = fs.readFileSync(paramFilePath, 'utf-8').split('\n').map(unquoteParameter);
const [ const [
// Output directory for the npm package. // Output directory for the npm package.
@ -30,23 +31,28 @@ function main(args: string[]): number {
// The package segment of the ng_package rule's label (e.g. 'package/common'). // The package segment of the ng_package rule's label (e.g. 'package/common').
srcDir, srcDir,
// Path to the JS file for the primaery entry point (e.g. 'packages/common/index.js')
primaryEntryPoint,
// List of secondary entry-points (e.g. ['http', 'http/testing']).
secondaryEntryPointsArg,
// The bazel-bin dir joined with the srcDir (e.g. 'bazel-bin/package.common'). // The bazel-bin dir joined with the srcDir (e.g. 'bazel-bin/package.common').
// This is the intended output location for package artifacts. // This is the intended output location for package artifacts.
binDir, binDir,
// JSON data mapping each entry point to the generated bundle index and
// flat module metadata, for example
// {"@angular/core": {
// "index": "packages/core/core.js",
// "typing": "packages/core/core.d.ts",
// "metadata": "packages/core/core.metadata.json"
// },
// ...
// }
modulesManifestArg,
// Path to the package's README.md. // Path to the package's README.md.
readmeMd, readmeMd,
// List of ES2015 files generated by rollup. // List of ES2015 files generated by rollup.
esm2015Arg, esm2015Arg,
// List of flattenned, ES5 files generated by rollup. // List of flattened, ES5 files generated by rollup.
esm5Arg, esm5Arg,
// List of all UMD bundles generated by rollup. // List of all UMD bundles generated by rollup.
@ -56,65 +62,100 @@ function main(args: string[]): number {
srcsArg, srcsArg,
// Path to the package's LICENSE. // Path to the package's LICENSE.
licenseFile] = params; licenseFile,
] = params;
const esm2015 = esm2015Arg.split(',').filter(s => !!s); const esm2015 = esm2015Arg.split(',').filter(s => !!s);
const esm5 = esm5Arg.split(',').filter(s => !!s); const esm5 = esm5Arg.split(',').filter(s => !!s);
const bundles = bundlesArg.split(',').filter(s => !!s); const bundles = bundlesArg.split(',').filter(s => !!s);
const srcs = srcsArg.split(',').filter(s => !!s); const srcs = srcsArg.split(',').filter(s => !!s);
const secondaryEntryPoints = secondaryEntryPointsArg.split(',').filter(s => !!s); const modulesManifest = JSON.parse(modulesManifestArg);
shx.mkdir('-p', out);
if (readmeMd) { if (readmeMd) {
shx.cp(readmeMd, path.join(out, 'README.md')); copyFile(readmeMd, out);
} }
function writeEsmFile(file, suffix, outDir) { /**
* Relativize the path where the file is written.
* @param f a path relative to the srcDir, typically from a file in the srcs[]
* @param c content of the file
*/
function writeSrcFile(f: string, c: string) {
mkDirWriteFile(path.join(out, path.relative(srcDir, f)), c);
}
/**
* Relativize the path where the file is written.
* @param f a path relative to the binDir, typically from a file in the deps[]
* @param c content of the file
*/
function writeBinFile(f: string, c: string) {
const outputPath = path.join(out, path.relative(binDir, f));
mkDirWriteFile(outputPath, c);
return outputPath;
}
/**
* Copy the file, relativizing the path.
* @param f a path relative to the binDir, typically from a file in the deps[]
*/
function copyBinFile(f: string) { writeBinFile(f, fs.readFileSync(f, 'utf-8')); }
/**
* Relativize the path where a file is written.
* @param file a path containing a re-rooted segment like .esm5 or .es6
* @param suffix the re-rooted directory
* @param outDir path where we copy the file, relative to the out
*/
function writeEsmFile(file: string, suffix: string, outDir: string) {
const root = file.substr(0, file.lastIndexOf(suffix + path.sep) + suffix.length + 1); const root = file.substr(0, file.lastIndexOf(suffix + path.sep) + suffix.length + 1);
const rel = path.relative(path.join(root, srcDir), file); const rel = path.dirname(path.relative(path.join(root, srcDir), file));
if (!rel.startsWith('..')) { if (!rel.startsWith('..')) {
writeFile(file, rel, path.join(out, outDir)); copyFile(file, path.join(out, outDir), rel);
} }
} }
esm2015.forEach(file => writeEsmFile(file, '.es6', 'esm2015')); esm2015.forEach(file => writeEsmFile(file, '.es6', 'esm2015'));
esm5.forEach(file => writeEsmFile(file, '.esm5', 'esm5')); esm5.forEach(file => writeEsmFile(file, '.esm5', 'esm5'));
const bundlesDir = path.join(out, 'bundles'); bundles.forEach(bundle => { copyFile(bundle, out, 'bundles'); });
shx.mkdir('-p', bundlesDir);
bundles.forEach(bundle => { shx.cp(bundle, bundlesDir); });
const allsrcs = shx.find('-R', binDir); const allsrcs = shx.find('-R', binDir);
allsrcs.filter(hasFileExtension('.d.ts')).forEach((f: string) => { allsrcs.filter(hasFileExtension('.d.ts')).forEach((f: string) => {
const content = fs.readFileSync(f, 'utf-8') const content = fs.readFileSync(f, 'utf-8')
// Strip the named AMD module for compatibility with non-bazel users // Strip the named AMD module for compatibility with non-bazel users
.replace(/^\/\/\/ <amd-module name=.*\/>\n/, ''); .replace(/^\/\/\/ <amd-module name=.*\/>\n/, '');
let outputPath: string; const outputPath = writeBinFile(f, content);
if (f.endsWith('.bundle_index.d.ts')) {
outputPath = moveBundleIndex(f);
} else {
outputPath = path.join(out, path.relative(binDir, f));
}
shx.mkdir('-p', path.dirname(outputPath));
fs.writeFileSync(outputPath, content);
}); });
allsrcs.filter(hasFileExtension('.bundle_index.js')).forEach((f: string) => {
const content = fs.readFileSync(f, 'utf-8'); // Iterate through the entry point modules
fs.writeFileSync(moveBundleIndex(f, 'esm5'), content); // We do this first because we also record new paths for the esm5 and esm2015 copies
fs.writeFileSync(moveBundleIndex(f, 'esm2015'), content); // of the index JS file, which we need to amend the package.json.
Object.keys(modulesManifest).forEach(moduleName => {
const moduleFiles = modulesManifest[moduleName];
const indexContent = fs.readFileSync(moduleFiles['index'], 'utf-8');
const relative = path.relative(binDir, moduleFiles['index']);
moduleFiles['esm5_index'] = path.join(binDir, 'esm5', relative);
moduleFiles['esm2015_index'] = path.join(binDir, 'esm2015', relative);
writeBinFile(moduleFiles['esm5_index'], indexContent);
writeBinFile(moduleFiles['esm2015_index'], indexContent);
copyBinFile(moduleFiles['typings']);
copyBinFile(moduleFiles['metadata']);
}); });
// Root package name (e.g. '@angular/common'), captures as we iterate through sources below. // Root package name (e.g. '@angular/common'), captures as we iterate through sources below.
let rootPackageName = ''; let rootPackageName = '';
const packagesWithExistingPackageJson = new Set<string>(); const packagesWithExistingPackageJson = new Set<string>();
// Modify source files as necessary for publishing, including updating the
// version placeholders and the paths in any package.json files.
for (const src of srcs) { for (const src of srcs) {
let content = fs.readFileSync(src, 'utf-8'); let content = fs.readFileSync(src, 'utf-8');
// Modify package.json files as necessary for publishing
if (path.basename(src) === 'package.json') { if (path.basename(src) === 'package.json') {
const packageJson = JSON.parse(content); const packageJson = JSON.parse(content);
content = amendPackageJson(packageJson); content = amendPackageJson(src, packageJson);
const packageName = packageJson['name']; const packageName = packageJson['name'];
packagesWithExistingPackageJson.add(packageName); packagesWithExistingPackageJson.add(packageName);
@ -126,141 +167,140 @@ function main(args: string[]): number {
rootPackageName = packageJson['name']; rootPackageName = packageJson['name'];
} }
} }
const outputPath = path.join(out, path.relative(srcDir, src)); writeSrcFile(src, content);
shx.mkdir('-p', path.dirname(outputPath));
fs.writeFileSync(outputPath, content);
} }
allsrcs.filter(hasFileExtension('.bundle_index.metadata.json')).forEach((f: string) => {
fs.writeFileSync(moveBundleIndex(f), fs.readFileSync(f, 'utf-8'));
});
const licenseBanner = licenseFile ? fs.readFileSync(licenseFile, 'utf-8') : ''; const licenseBanner = licenseFile ? fs.readFileSync(licenseFile, 'utf-8') : '';
// Generate extra files for secondary entry-points. // Generate extra files for secondary entry-points.
for (const secondaryEntryPoint of secondaryEntryPoints) { Object.keys(modulesManifest).forEach(entryPointPackageName => {
const entryPointName = secondaryEntryPoint.split('/').pop(); const entryPointName = entryPointPackageName.substr(rootPackageName.length + 1);
const entryPointPackageName = `${rootPackageName}/${secondaryEntryPoint}`; if (!entryPointName) return;
const dirName = path.join(...secondaryEntryPoint.split('/').slice(0, -1)); createMetadataReexportFile(entryPointName, modulesManifest[entryPointPackageName]['metadata']);
const destDir = path.join(out, dirName); createTypingsReexportFile(
entryPointName, licenseBanner, modulesManifest[entryPointPackageName]['typings']);
createMetadataReexportFile(destDir, entryPointName);
createTypingsReexportFile(destDir, entryPointName, licenseBanner);
if (!packagesWithExistingPackageJson.has(entryPointPackageName)) { if (!packagesWithExistingPackageJson.has(entryPointPackageName)) {
createEntryPointPackageJson(path.join(destDir, entryPointName), entryPointPackageName); createEntryPointPackageJson(entryPointName, entryPointPackageName);
} }
} });
return 0; return 0;
// Copy these bundle_index outputs from the ng_module rules in the deps /**
// Mapping looks like: * Convert a binDir-relative path to srcDir-relative
// $bin/_core.bundle_index.d.ts * @param from path to a file under the srcDir, like packages/core/testing/package.json
// -> $out/core.d.ts * @param file path to a file under the binDir, like bazel-bin/core/testing/generated.js
// $bin/testing/_testing.bundle_index.d.ts */
// -> $out/testing/testing.d.ts function srcDirRelative(from: string, file: string) {
// $bin/_core.bundle_index.metadata.json const result =
// -> $out/core.metadata.json path.relative(path.dirname(from), path.join(srcDir, path.relative(binDir, file)));
// $bin/testing/_testing.bundle_index.metadata.json if (result.startsWith('..')) return result;
// -> $out/testing/testing.metadata.json return `./${result}`;
// JS is a little different, as controlled by the `dir` parameter
// $bin/_core.bundle_index.js
// -> $out/esm5/core.js
// $bin/testing/_testing.bundle_index.js
// -> $out/esm5/testing.js
function moveBundleIndex(f: string, dir = '.') {
const relative = path.relative(binDir, f);
return path.join(out, dir, relative.replace(/_(.*)\.bundle_index/, '$1'));
} }
}
/** Gets a predicate function to filter non-generated files with a specified extension. */ /** Gets a predicate function to filter non-generated files with a specified extension. */
function hasFileExtension(ext: string): (path: string) => boolean { function hasFileExtension(ext: string): (path: string) => boolean {
return f => f.endsWith(ext) && !f.endsWith(`.ngfactory${ext}`) && !f.endsWith(`.ngsummary${ext}`); return f => f.endsWith(ext) && !f.endsWith(`.ngfactory${ext}`) &&
} !f.endsWith(`.ngsummary${ext}`);
}
function writeFile(file: string, relative: string, baseDir: string) { function mkDirWriteFile(p: string, content: string) {
const dir = path.join(baseDir, path.dirname(relative)); shx.mkdir('-p', path.dirname(p));
shx.mkdir('-p', dir); fs.writeFileSync(p, content, 'utf-8');
shx.cp(file, dir); }
}
function writeFesm(file: string, baseDir: string) { function copyFile(file: string, baseDir: string, relative = '.') {
const parts = path.basename(file).split('__'); const dir = path.join(baseDir, relative);
const entryPointName = parts.join('/').replace(/\..*/, ''); shx.mkdir('-p', dir);
const filename = parts.splice(-1)[0]; shx.cp(file, dir);
const dir = path.join(baseDir, ...parts); }
shx.mkdir('-p', dir);
shx.cp(file, dir);
shx.mv(path.join(dir, path.basename(file)), path.join(dir, filename));
}
/** function copyFesm(file: string, baseDir: string) {
* Inserts or edits properties into the package.json file(s) in the package so that const parts = path.basename(file).split('__');
* they point to all the right generated artifacts. const entryPointName = parts.join('/').replace(/\..*/, '');
* const filename = parts.splice(-1)[0];
* @param parsedPackage Parsed package.json content const dir = path.join(baseDir, ...parts);
*/ shx.mkdir('-p', dir);
function amendPackageJson(parsedPackage: object) { shx.cp(file, dir);
const packageName = parsedPackage['name']; shx.mv(path.join(dir, path.basename(file)), path.join(dir, filename));
const nameParts = getPackageNameParts(packageName); }
const relativePathToPackageRoot = getRelativePathToPackageRoot(packageName);
const basename = nameParts[nameParts.length - 1];
const indexName = [...nameParts, `${basename}.js`].splice(1).join('/');
parsedPackage['main'] = `${relativePathToPackageRoot}/bundles/${nameParts.join('-')}.umd.js`; /**
parsedPackage['module'] = `${relativePathToPackageRoot}/esm5/${indexName}`; * Inserts or edits properties into the package.json file(s) in the package so that
parsedPackage['es2015'] = `${relativePathToPackageRoot}/esm2015/${indexName}`; * they point to all the right generated artifacts.
parsedPackage['typings'] = `./${basename}.d.ts`; *
return JSON.stringify(parsedPackage, null, 2); * @param parsedPackage Parsed package.json content
} */
function amendPackageJson(packageJson: string, parsedPackage: {[key: string]: string}) {
const packageName = parsedPackage['name'];
const moduleFiles = modulesManifest[packageName];
if (!moduleFiles) {
// Ideally we should throw here, as we got an entry point that doesn't
// have flat module metadata / bundle index, so it may have been an
// ng_module that's missing a module_name attribute.
// However, @angular/compiler can't be an ng_module, as it's the internals
// of the ngc compiler, yet we want to build an ng_package for it.
// So ignore package.json files when we are missing data.
console.error('WARNING: no module metadata for package', packageName);
console.error(' Not updating the package.json file to point to it');
return JSON.stringify(parsedPackage, null, 2);
}
/** Gets a package name split into parts, omitting the scope if present. */ parsedPackage['main'] = getUmdBundleName(packageName);
function getPackageNameParts(fullPackageName: string): string[] { parsedPackage['module'] = parsedPackage['esm5'] =
const parts = fullPackageName.split('/'); srcDirRelative(packageJson, moduleFiles['esm5_index']);
return fullPackageName.startsWith('@') ? parts.splice(1) : parts; parsedPackage['es2015'] = parsedPackage['esm2015'] =
} srcDirRelative(packageJson, moduleFiles['esm2015_index']);
parsedPackage['typings'] = srcDirRelative(packageJson, moduleFiles['typings']);
return JSON.stringify(parsedPackage, null, 2);
}
/** Gets the relative path to the package root from a given entry-point import path. */ // e.g. @angular/common/http/testing -> ../../bundles/common-http-testing.umd.js
function getRelativePathToPackageRoot(entryPointPath: string) { function getUmdBundleName(packageName: string) {
const parts = getPackageNameParts(entryPointPath); const parts = packageName.split('/');
const relativePath = Array(parts.length - 1).fill('..').join('/'); // Remove the scoped package part, like @angular if present
return relativePath || '.'; const nameParts = packageName.startsWith('@') ? parts.splice(1) : parts;
} const relativePath = Array(nameParts.length - 1).fill('..').join('/') || '.';
return `${relativePath}/bundles/${nameParts.join('-')}.umd.js`;
}
/** Creates metadata re-export file for a secondary entry-point. */ /** Creates metadata re-export file for a secondary entry-point. */
function createMetadataReexportFile(destDir: string, entryPointName: string) { function createMetadataReexportFile(entryPointName: string, metadataFile: string) {
fs.writeFileSync(path.join(destDir, `${entryPointName}.metadata.json`), JSON.stringify({ const inputPath = path.join(srcDir, `${entryPointName}.metadata.json`);
'__symbolic': 'module', writeSrcFile(inputPath, JSON.stringify({
'version': 3, '__symbolic': 'module',
'metadata': {}, 'version': 3,
'exports': [{'from': `./${entryPointName}/${entryPointName}`}], 'metadata': {},
'flatModuleIndexRedirect': true 'exports':
}) + '\n'); [{'from': `${srcDirRelative(inputPath, metadataFile.replace(/.metadata.json$/, ''))}`}],
} 'flatModuleIndexRedirect': true
}) + '\n');
}
/** /**
* Creates a typings (d.ts) re-export file for a secondary-entry point, * Creates a typings (d.ts) re-export file for a secondary-entry point,
* e.g., `export * from './common/common'` * e.g., `export * from './common/common'`
*/ */
function createTypingsReexportFile(destDir: string, entryPointName: string, license: string) { function createTypingsReexportFile(entryPointName: string, license: string, typingsFile: string) {
// Format carefully to match existing build.sh output: const inputPath = path.join(srcDir, `${entryPointName}.d.ts`);
// LICENSE SPACE NEWLINE SPACE EXPORT NEWLINE const content = `${license}
const content = `${license} \n export * from \'./${entryPointName}/${entryPointName}\n`; export * from '${srcDirRelative(inputPath, typingsFile.replace(/\.d\.tsx?$/, ''))}';
fs.writeFileSync(path.join(destDir, `${entryPointName}.d.ts`), content); `;
} writeSrcFile(inputPath, content);
}
/** /**
* Creates a package.json for a secondary entry-point. * Creates a package.json for a secondary entry-point.
* @param destDir Directory into which the package.json will be written. * @param entryPointPackageName The full package name for the entry point,
* @param entryPointPackageName The full package name for the entry point, * e.g. '@angular/common/http'.
* e.g. '@angular/common/http'. */
*/ function createEntryPointPackageJson(dir: string, entryPointPackageName: string) {
function createEntryPointPackageJson(destDir: string, entryPointPackageName: string) { const pkgJson = path.join(srcDir, dir, 'package.json');
const content = amendPackageJson({name: entryPointPackageName}); const content = amendPackageJson(pkgJson, {name: entryPointPackageName});
fs.writeFileSync(path.join(destDir, 'package.json'), content, 'utf-8'); writeSrcFile(pkgJson, content);
}
} }
if (require.main === module) { if (require.main === module) {

View File

@ -1,5 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"lib": ["es2015"] "noImplicitAny": true,
"lib": ["es2015"]
} }
} }

View File

@ -1,5 +1,5 @@
load("//tools:defaults.bzl", "ts_library") load("//tools:defaults.bzl", "ts_library")
load("@build_bazel_rules_nodejs//:defs.bzl", "jasmine_node_test") load("@build_bazel_rules_nodejs//:defs.bzl", "jasmine_node_test", "nodejs_binary")
exports_files(["package.json"]) exports_files(["package.json"])
@ -37,7 +37,6 @@ jasmine_node_test(
ts_library( ts_library(
name = "example_spec_lib", name = "example_spec_lib",
testonly = True,
srcs = ["example_package.spec.ts"], srcs = ["example_package.spec.ts"],
deps = ["//packages:types"], deps = ["//packages:types"],
) )
@ -45,5 +44,19 @@ ts_library(
jasmine_node_test( jasmine_node_test(
name = "example_package", name = "example_package",
srcs = [":example_spec_lib"], srcs = [":example_spec_lib"],
data = ["//packages/bazel/test/ng_package/example:npm_package"], data = [
"example_package.golden",
"//packages/bazel/test/ng_package/example:npm_package",
],
)
nodejs_binary(
name = "example_package.accept",
data = [
"example_package.golden",
":example_spec_lib",
"//packages/bazel/test/ng_package/example:npm_package",
],
entry_point = "angular/packages/bazel/test/ng_package/example_package.spec.js",
templated_args = ["--accept"],
) )

View File

@ -5,6 +5,7 @@ load("//packages/bazel:index.bzl", "ng_module", "ng_package")
ng_module( ng_module(
name = "example", name = "example",
srcs = glob(["*.ts"]), srcs = glob(["*.ts"]),
module_name = "example",
deps = ["//packages/bazel/test/ng_package/example/secondary"], deps = ["//packages/bazel/test/ng_package/example/secondary"],
) )
@ -13,9 +14,10 @@ ng_package(
srcs = [ srcs = [
"package.json", "package.json",
"some-file.txt", "some-file.txt",
"//packages/bazel/test/ng_package/example/secondary:package.json",
], ],
entry_point = "packages/bazel/test/ng_package/example/index.js", entry_point = "packages/bazel/test/ng_package/example/index.js",
secondary_entry_points = ["secondary"], deps = [
deps = [":example"], ":example",
"//packages/bazel/test/ng_package/example/secondary",
],
) )

View File

@ -2,10 +2,9 @@ package(default_visibility = ["//packages/bazel/test:__subpackages__"])
load("//packages/bazel:index.bzl", "ng_module") load("//packages/bazel:index.bzl", "ng_module")
exports_files(["package.json"])
ng_module( ng_module(
name = "secondary", name = "secondary",
srcs = glob(["*.ts"]), srcs = glob(["*.ts"]),
module_name = "example/secondary",
deps = ["//packages/core"], deps = ["//packages/core"],
) )

View File

@ -1,3 +0,0 @@
{
"name": "example/secondary"
}

View File

@ -0,0 +1,741 @@
bundles
bundles/example-secondary.umd.js
bundles/example-secondary.umd.js.map
bundles/example-secondary.umd.min.js
bundles/example-secondary.umd.min.js.map
bundles/example.umd.js
bundles/example.umd.js.map
bundles/example.umd.min.js
bundles/example.umd.min.js.map
esm2015
esm2015/example.externs.js
esm2015/example_public_index.js
esm2015/index.js
esm2015/index.ngfactory.js
esm2015/index.ngsummary.js
esm2015/mymodule.js
esm2015/mymodule.ngfactory.js
esm2015/mymodule.ngsummary.js
esm2015/secondary
esm2015/secondary/index.js
esm2015/secondary/index.ngfactory.js
esm2015/secondary/index.ngsummary.js
esm2015/secondary/secondary.externs.js
esm2015/secondary/secondary_public_index.js
esm2015/secondary/secondarymodule.js
esm2015/secondary/secondarymodule.ngfactory.js
esm2015/secondary/secondarymodule.ngsummary.js
esm5
esm5/example_public_index.js
esm5/index.js
esm5/index.ngfactory.js
esm5/index.ngsummary.js
esm5/mymodule.js
esm5/mymodule.ngfactory.js
esm5/mymodule.ngsummary.js
esm5/secondary
esm5/secondary/index.js
esm5/secondary/index.ngfactory.js
esm5/secondary/index.ngsummary.js
esm5/secondary/secondary_public_index.js
esm5/secondary/secondarymodule.js
esm5/secondary/secondarymodule.ngfactory.js
esm5/secondary/secondarymodule.ngsummary.js
example_public_index.d.ts
example_public_index.metadata.json
index.d.ts
mymodule.d.ts
package.json
secondary
secondary/index.d.ts
secondary/package.json
secondary/secondary_public_index.d.ts
secondary/secondary_public_index.metadata.json
secondary/secondarymodule.d.ts
secondary.d.ts
secondary.metadata.json
some-file.txt
--- bundles/example-secondary.umd.js ---
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core')) :
typeof define === 'function' && define.amd ? define(['exports', '@angular/core'], factory) :
(factory((global.npm_package = {}),global.core));
}(this, (function (exports,core) { 'use strict';
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var SecondaryModule = /** @class */ (function () {
function SecondaryModule() {
}
SecondaryModule = __decorate([
core.NgModule({})
], SecondaryModule);
return SecondaryModule;
}());
var a = 1;
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
exports.SecondaryModule = SecondaryModule;
exports.a = a;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=example-secondary.umd.js.map
--- bundles/example-secondary.umd.js.map ---
{"version":3,"file":"example-secondary.umd.js","sources":["../../../../../../../../../../../../execroot/angular/bazel-bin/packages/bazel/test/ng_package/example/secondary/secondary.esm5/packages/bazel/test/ng_package/example/secondary/index.js"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NgModule } from '@angular/core';\nvar SecondaryModule = /** @class */ (function () {\n function SecondaryModule() {\n }\n SecondaryModule = __decorate([\n NgModule({})\n ], SecondaryModule);\n return SecondaryModule;\n}());\nexport { SecondaryModule };\nexport var a = 1;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5bW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L3NlY29uZGFyeW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3ZDO0lBQUE7SUFDQSxDQUFDO0lBRFksZUFBZTtRQUQzQixRQUFRLENBQUMsRUFBRSxDQUFDO09BQ0EsZUFBZSxDQUMzQjtJQUFELHNCQUFDO0NBQUEsQUFERCxJQUNDO1NBRFksZUFBZTtBQUc1QixNQUFNLENBQUMsSUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQE5nTW9kdWxlKHt9KVxuZXhwb3J0IGNsYXNzIFNlY29uZGFyeU1vZHVsZSB7XG59XG5cbmV4cG9ydCBjb25zdCBhID0gMTtcbiJdfQ==","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport * from './secondarymodule';\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9zZWNvbmRhcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9zZWNvbmRhcnltb2R1bGUnO1xuIl19"],"names":["this","NgModule"],"mappings":";;;;;;AAAA;;;;;;;AAOA,IAAI,UAAU,GAAG,CAACA,SAAI,IAAIA,SAAI,CAAC,UAAU,KAAK,UAAU,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IACnF,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC7H,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC1H,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAClJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACjE,CAAC;AACF,AACA,IAAI,eAAe,kBAAkB,YAAY;IAC7C,SAAS,eAAe,GAAG;KAC1B;IACD,eAAe,GAAG,UAAU,CAAC;QACzBC,aAAQ,CAAC,EAAE,CAAC;KACf,EAAE,eAAe,CAAC,CAAC;IACpB,OAAO,eAAe,CAAC;CAC1B,EAAE,CAAC,CAAC;AACL,AACO,IAAI,CAAC,GAAG,CAAC;;ACvBhB;;;;;;GAMG;;;;;;;;;;;;;"}
--- bundles/example-secondary.umd.min.js ---
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core")):"function"==typeof define&&define.amd?define(["exports","@angular/core"],t):t(e.npm_package={},e.core)}(this,function(e,t){"use strict";
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/var o=function(){return function(e,t,o,n){var r,c=arguments.length,f=c<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(e,t,o,n);else for(var u=e.length-1;u>=0;u--)(r=e[u])&&(f=(c<3?r(f):c>3?r(t,o,f):r(t,o))||f);return c>3&&f&&Object.defineProperty(t,o,f),f}([t.NgModule({})],function e(){})}();
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
e.SecondaryModule=o,e.a=1,Object.defineProperty(e,"__esModule",{value:!0})});
--- bundles/example-secondary.umd.min.js.map ---
{"version":3,"sources":["packages/bazel/test/ng_package/example/example-secondary.umd.js"],"names":["global","factory","exports","module","require","define","amd","npm_package","core","this","SecondaryModule","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__decorate","NgModule","a","value"],"mappings":"CAAC,SAAUA,EAAQC,GACC,iBAAZC,SAA0C,oBAAXC,OAAyBF,EAAQC,QAASE,QAAQ,kBACtE,mBAAXC,QAAyBA,OAAOC,IAAMD,QAAQ,UAAW,iBAAkBJ,GACjFA,EAASD,EAAOO,eAAkBP,EAAOQ,MAH3C,CAIEC,KAAM,SAAWP,EAAQM,GAAQ;;;;;;;GASnC,IAMIE,EAAiC,WAMjC,OAZoD,SAAUC,EAAYC,EAAQC,EAAKC,GACvF,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,iBAAZQ,SAAoD,mBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,EAK1CO,EACdlB,EAAKmB,cAHT,SAASjB,OADuB;;;;;;;;AAkBpCR,EAAQQ,gBAAkBA,EAC1BR,EAAQ0B,EAXA,EAaRR,OAAOK,eAAevB,EAAS,cAAgB2B,OAAO","sourcesContent":["(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core')) :\n\ttypeof define === 'function' && define.amd ? define(['exports', '@angular/core'], factory) :\n\t(factory((global.npm_package = {}),global.core));\n}(this, (function (exports,core) { 'use strict';\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar SecondaryModule = /** @class */ (function () {\n function SecondaryModule() {\n }\n SecondaryModule = __decorate([\n core.NgModule({})\n ], SecondaryModule);\n return SecondaryModule;\n}());\nvar a = 1;\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexports.SecondaryModule = SecondaryModule;\nexports.a = a;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=example-secondary.umd.js.map\n"]}
--- bundles/example.umd.js ---
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core')) :
typeof define === 'function' && define.amd ? define(['exports', '@angular/core'], factory) :
(factory((global.npm_package = {}),global.core));
}(this, (function (exports,core) { 'use strict';
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var MyModule = /** @class */ (function () {
function MyModule() {
}
MyModule = __decorate([
core.NgModule({})
], MyModule);
return MyModule;
}());
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
exports.MyModule = MyModule;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=example.umd.js.map
--- bundles/example.umd.js.map ---
{"version":3,"file":"example.umd.js","sources":["../../../../../../../../../../../../execroot/angular/bazel-bin/packages/bazel/test/ng_package/example/example.esm5/packages/bazel/test/ng_package/example/index.js"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NgModule } from '@angular/core';\nvar MyModule = /** @class */ (function () {\n function MyModule() {\n }\n MyModule = __decorate([\n NgModule({})\n ], MyModule);\n return MyModule;\n}());\nexport { MyModule };\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXltb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9teW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXZDO0lBQUE7SUFDQSxDQUFDO0lBRFksUUFBUTtRQURwQixRQUFRLENBQUMsRUFBRSxDQUFDO09BQ0EsUUFBUSxDQUNwQjtJQUFELGVBQUM7Q0FBQSxBQURELElBQ0M7U0FEWSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7YX0gZnJvbSAnLi9zZWNvbmRhcnkvc2Vjb25kYXJ5bW9kdWxlJztcblxuQE5nTW9kdWxlKHt9KVxuZXhwb3J0IGNsYXNzIE15TW9kdWxlIHtcbn0iXX0=","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport * from './mymodule';\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9teW1vZHVsZSc7Il19"],"names":["this","NgModule"],"mappings":";;;;;;AAAA;;;;;;;AAOA,IAAI,UAAU,GAAG,CAACA,SAAI,IAAIA,SAAI,CAAC,UAAU,KAAK,UAAU,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IACnF,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC7H,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC1H,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAClJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACjE,CAAC;AACF,AACA,IAAI,QAAQ,kBAAkB,YAAY;IACtC,SAAS,QAAQ,GAAG;KACnB;IACD,QAAQ,GAAG,UAAU,CAAC;QAClBC,aAAQ,CAAC,EAAE,CAAC;KACf,EAAE,QAAQ,CAAC,CAAC;IACb,OAAO,QAAQ,CAAC;CACnB,EAAE,CAAC;;ACrBJ;;;;;;GAMG;;;;;;;;;;;;"}
--- bundles/example.umd.min.js ---
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core")):"function"==typeof define&&define.amd?define(["exports","@angular/core"],t):t(e.npm_package={},e.core)}(this,function(e,t){"use strict";
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/var o=function(){return function(e,t,o,n){var r,c=arguments.length,f=c<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)f=Reflect.decorate(e,t,o,n);else for(var u=e.length-1;u>=0;u--)(r=e[u])&&(f=(c<3?r(f):c>3?r(t,o,f):r(t,o))||f);return c>3&&f&&Object.defineProperty(t,o,f),f}([t.NgModule({})],function e(){})}();
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
e.MyModule=o,Object.defineProperty(e,"__esModule",{value:!0})});
--- bundles/example.umd.min.js.map ---
{"version":3,"sources":["packages/bazel/test/ng_package/example/example.umd.js"],"names":["global","factory","exports","module","require","define","amd","npm_package","core","this","MyModule","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__decorate","NgModule","value"],"mappings":"CAAC,SAAUA,EAAQC,GACC,iBAAZC,SAA0C,oBAAXC,OAAyBF,EAAQC,QAASE,QAAQ,kBACtE,mBAAXC,QAAyBA,OAAOC,IAAMD,QAAQ,UAAW,iBAAkBJ,GACjFA,EAASD,EAAOO,eAAkBP,EAAOQ,MAH3C,CAIEC,KAAM,SAAWP,EAAQM,GAAQ;;;;;;;GASnC,IAMIE,EAA0B,WAM1B,OAZoD,SAAUC,EAAYC,EAAQC,EAAKC,GACvF,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,iBAAZQ,SAAoD,mBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,EAKjDO,EACPlB,EAAKmB,cAHT,SAASjB,OADgB;;;;;;;;AAiB7BR,EAAQQ,SAAWA,EAEnBU,OAAOK,eAAevB,EAAS,cAAgB0B,OAAO","sourcesContent":["(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core')) :\n\ttypeof define === 'function' && define.amd ? define(['exports', '@angular/core'], factory) :\n\t(factory((global.npm_package = {}),global.core));\n}(this, (function (exports,core) { 'use strict';\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar MyModule = /** @class */ (function () {\n function MyModule() {\n }\n MyModule = __decorate([\n core.NgModule({})\n ], MyModule);\n return MyModule;\n}());\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexports.MyModule = MyModule;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=example.umd.js.map\n"]}
--- esm2015/example.externs.js ---
/** @externs */
/**
* @externs
* @suppress {duplicate,checkTypes}
*/
// NOTE: generated by tsickle, do not edit.
--- esm2015/example_public_index.js ---
/**
* Generated bundle index. Do not edit.
*/
export * from './index';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZV9wdWJsaWNfaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9leGFtcGxlX3B1YmxpY19pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
--- esm2015/index.js ---
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
export { MyModule } from './mymodule';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLHlCQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9teW1vZHVsZSc7Il19
--- esm2015/index.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvaW5kZXgubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG4iXX0=
--- esm2015/index.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdzdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvaW5kZXgubmdzdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG4iXX0=
--- esm2015/mymodule.js ---
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { NgModule } from '@angular/core';
export class MyModule {
}
MyModule.decorators = [
{ type: NgModule, args: [{},] }
];
/** @nocollapse */
MyModule.ctorParameters = () => [];
function MyModule_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
MyModule.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
MyModule.ctorParameters;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXltb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9teW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJdkMsTUFBTTs7O1lBREwsUUFBUSxTQUFDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHthfSBmcm9tICcuL3NlY29uZGFyeS9zZWNvbmRhcnltb2R1bGUnO1xuXG5ATmdNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgTXlNb2R1bGUge1xufSJdfQ==
--- esm2015/mymodule.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "@angular/core";
import * as i1 from "angular/packages/bazel/test/ng_package/example/mymodule";
var MyModuleNgFactory = i0.ɵcmf(i1.MyModule, [], function (_l) { return i0.ɵmod([i0.ɵmpd(512, i0.ComponentFactoryResolver, i0.ɵCodegenComponentFactoryResolver, [[8, []], [3, i0.ComponentFactoryResolver], i0.NgModuleRef]), i0.ɵmpd(1073742336, i1.MyModule, i1.MyModule, [])]); });
export { MyModuleNgFactory as MyModuleNgFactory };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXltb2R1bGUubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvbXltb2R1bGUubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGkxIGZyb20gJ2FuZ3VsYXIvcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvbXltb2R1bGUnO1xuZXhwb3J0IGNvbnN0IE15TW9kdWxlTmdGYWN0b3J5OmkwLk5nTW9kdWxlRmFjdG9yeTxpMS5NeU1vZHVsZT4gPSAobnVsbCBhcyBhbnkpO1xudmFyIF9kZWNsMF8wOmkwLlRlbXBsYXRlUmVmPGFueT4gPSAoPGFueT4obnVsbCBhcyBhbnkpKTtcbnZhciBfZGVjbDBfMTppMC5FbGVtZW50UmVmPGFueT4gPSAoPGFueT4obnVsbCBhcyBhbnkpKTtcbiJdfQ==
--- esm2015/mymodule.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "angular/packages/bazel/test/ng_package/example/mymodule";
export function MyModuleNgSummary() { return [{ summaryKind: 2, type: { reference: i0.MyModule, diDeps: [], lifecycleHooks: [] }, entryComponents: [], providers: [], modules: [{ reference: i0.MyModule, diDeps: [], lifecycleHooks: [] }], exportedDirectives: [], exportedPipes: [] }]; }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXltb2R1bGUubmdzdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvbXltb2R1bGUubmdzdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG5leHBvcnQgZnVuY3Rpb24gTXlNb2R1bGVOZ1N1bW1hcnkoKTphbnlbXSB7XG4gIHJldHVybiAobnVsbCBhcyBhbnkpO1xufVxuIl19
--- esm2015/secondary/index.js ---
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
export { SecondaryModule, a } from './secondarymodule';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9zZWNvbmRhcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFRQSxtQ0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9zZWNvbmRhcnltb2R1bGUnO1xuIl19
--- esm2015/secondary/index.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L2luZGV4Lm5nZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
--- esm2015/secondary/index.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdzdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L2luZGV4Lm5nc3VtbWFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
--- esm2015/secondary/secondary.externs.js ---
/** @externs */
/**
* @externs
* @suppress {duplicate,checkTypes}
*/
// NOTE: generated by tsickle, do not edit.
--- esm2015/secondary/secondary_public_index.js ---
/**
* Generated bundle index. Do not edit.
*/
export * from './index';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5X3B1YmxpY19pbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2JhemVsL3Rlc3QvbmdfcGFja2FnZS9leGFtcGxlL3NlY29uZGFyeS9zZWNvbmRhcnlfcHVibGljX2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
--- esm2015/secondary/secondarymodule.js ---
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { NgModule } from '@angular/core';
export class SecondaryModule {
}
SecondaryModule.decorators = [
{ type: NgModule, args: [{},] }
];
/** @nocollapse */
SecondaryModule.ctorParameters = () => [];
function SecondaryModule_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
SecondaryModule.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
SecondaryModule.ctorParameters;
}
export const /** @type {?} */ a = 1;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5bW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L3NlY29uZGFyeW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHdkMsTUFBTTs7O1lBREwsUUFBUSxTQUFDLEVBQUU7Ozs7Ozs7Ozs7Ozs7QUFJWixNQUFNLENBQUMsdUJBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBTZWNvbmRhcnlNb2R1bGUge1xufVxuXG5leHBvcnQgY29uc3QgYSA9IDE7XG4iXX0=
--- esm2015/secondary/secondarymodule.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "@angular/core";
import * as i1 from "angular/packages/bazel/test/ng_package/example/secondary/secondarymodule";
var SecondaryModuleNgFactory = i0.ɵcmf(i1.SecondaryModule, [], function (_l) { return i0.ɵmod([i0.ɵmpd(512, i0.ComponentFactoryResolver, i0.ɵCodegenComponentFactoryResolver, [[8, []], [3, i0.ComponentFactoryResolver], i0.NgModuleRef]), i0.ɵmpd(1073742336, i1.SecondaryModule, i1.SecondaryModule, [])]); });
export { SecondaryModuleNgFactory as SecondaryModuleNgFactory };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5bW9kdWxlLm5nZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2JhemVsL3Rlc3QvbmdfcGFja2FnZS9leGFtcGxlL3NlY29uZGFyeS9zZWNvbmRhcnltb2R1bGUubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGkxIGZyb20gJ2FuZ3VsYXIvcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L3NlY29uZGFyeW1vZHVsZSc7XG5leHBvcnQgY29uc3QgU2Vjb25kYXJ5TW9kdWxlTmdGYWN0b3J5OmkwLk5nTW9kdWxlRmFjdG9yeTxpMS5TZWNvbmRhcnlNb2R1bGU+ID0gKG51bGwgYXMgYW55KTtcbnZhciBfZGVjbDBfMDppMC5UZW1wbGF0ZVJlZjxhbnk+ID0gKDxhbnk+KG51bGwgYXMgYW55KSk7XG52YXIgX2RlY2wwXzE6aTAuRWxlbWVudFJlZjxhbnk+ID0gKDxhbnk+KG51bGwgYXMgYW55KSk7XG4iXX0=
--- esm2015/secondary/secondarymodule.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "angular/packages/bazel/test/ng_package/example/secondary/secondarymodule";
export function SecondaryModuleNgSummary() { return [{ summaryKind: 2, type: { reference: i0.SecondaryModule, diDeps: [], lifecycleHooks: [] }, entryComponents: [], providers: [], modules: [{ reference: i0.SecondaryModule, diDeps: [], lifecycleHooks: [] }], exportedDirectives: [], exportedPipes: [] }]; }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5bW9kdWxlLm5nc3VtbWFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2JhemVsL3Rlc3QvbmdfcGFja2FnZS9leGFtcGxlL3NlY29uZGFyeS9zZWNvbmRhcnltb2R1bGUubmdzdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG5leHBvcnQgZnVuY3Rpb24gU2Vjb25kYXJ5TW9kdWxlTmdTdW1tYXJ5KCk6YW55W10ge1xuICByZXR1cm4gKG51bGwgYXMgYW55KTtcbn1cbiJdfQ==
--- esm5/example_public_index.js ---
/**
* Generated bundle index. Do not edit.
*/
export * from './index';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZV9wdWJsaWNfaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9leGFtcGxlX3B1YmxpY19pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
--- esm5/index.js ---
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
export * from './mymodule';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9teW1vZHVsZSc7Il19
--- esm5/index.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvaW5kZXgubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG4iXX0=
--- esm5/index.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdzdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvaW5kZXgubmdzdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG4iXX0=
--- esm5/mymodule.js ---
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { NgModule } from '@angular/core';
var MyModule = /** @class */ (function () {
function MyModule() {
}
MyModule = __decorate([
NgModule({})
], MyModule);
return MyModule;
}());
export { MyModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXltb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9teW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXZDO0lBQUE7SUFDQSxDQUFDO0lBRFksUUFBUTtRQURwQixRQUFRLENBQUMsRUFBRSxDQUFDO09BQ0EsUUFBUSxDQUNwQjtJQUFELGVBQUM7Q0FBQSxBQURELElBQ0M7U0FEWSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7YX0gZnJvbSAnLi9zZWNvbmRhcnkvc2Vjb25kYXJ5bW9kdWxlJztcblxuQE5nTW9kdWxlKHt9KVxuZXhwb3J0IGNsYXNzIE15TW9kdWxlIHtcbn0iXX0=
--- esm5/mymodule.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "@angular/core";
import * as i1 from "angular/packages/bazel/test/ng_package/example/mymodule";
var MyModuleNgFactory = i0.ɵcmf(i1.MyModule, [], function (_l) { return i0.ɵmod([i0.ɵmpd(512, i0.ComponentFactoryResolver, i0.ɵCodegenComponentFactoryResolver, [[8, []], [3, i0.ComponentFactoryResolver], i0.NgModuleRef]), i0.ɵmpd(1073742336, i1.MyModule, i1.MyModule, [])]); });
export { MyModuleNgFactory as MyModuleNgFactory };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXltb2R1bGUubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvbXltb2R1bGUubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGkxIGZyb20gJ2FuZ3VsYXIvcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvbXltb2R1bGUnO1xuZXhwb3J0IGNvbnN0IE15TW9kdWxlTmdGYWN0b3J5OmkwLk5nTW9kdWxlRmFjdG9yeTxpMS5NeU1vZHVsZT4gPSAobnVsbCBhcyBhbnkpO1xudmFyIF9kZWNsMF8wOmkwLlRlbXBsYXRlUmVmPGFueT4gPSAoPGFueT4obnVsbCBhcyBhbnkpKTtcbnZhciBfZGVjbDBfMTppMC5FbGVtZW50UmVmPGFueT4gPSAoPGFueT4obnVsbCBhcyBhbnkpKTtcbiJdfQ==
--- esm5/mymodule.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "angular/packages/bazel/test/ng_package/example/mymodule";
export function MyModuleNgSummary() { return [{ summaryKind: 2, type: { reference: i0.MyModule, diDeps: [], lifecycleHooks: [] }, entryComponents: [], providers: [], modules: [{ reference: i0.MyModule, diDeps: [], lifecycleHooks: [] }], exportedDirectives: [], exportedPipes: [] }]; }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXltb2R1bGUubmdzdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvbXltb2R1bGUubmdzdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG5leHBvcnQgZnVuY3Rpb24gTXlNb2R1bGVOZ1N1bW1hcnkoKTphbnlbXSB7XG4gIHJldHVybiAobnVsbCBhcyBhbnkpO1xufVxuIl19
--- esm5/secondary/index.js ---
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
export * from './secondarymodule';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iYXplbC90ZXN0L25nX3BhY2thZ2UvZXhhbXBsZS9zZWNvbmRhcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9zZWNvbmRhcnltb2R1bGUnO1xuIl19
--- esm5/secondary/index.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L2luZGV4Lm5nZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
--- esm5/secondary/index.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmdzdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L2luZGV4Lm5nc3VtbWFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
--- esm5/secondary/secondary_public_index.js ---
/**
* Generated bundle index. Do not edit.
*/
export * from './index';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5X3B1YmxpY19pbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2JhemVsL3Rlc3QvbmdfcGFja2FnZS9leGFtcGxlL3NlY29uZGFyeS9zZWNvbmRhcnlfcHVibGljX2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
--- esm5/secondary/secondarymodule.js ---
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { NgModule } from '@angular/core';
var SecondaryModule = /** @class */ (function () {
function SecondaryModule() {
}
SecondaryModule = __decorate([
NgModule({})
], SecondaryModule);
return SecondaryModule;
}());
export { SecondaryModule };
export var a = 1;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5bW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L3NlY29uZGFyeW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3ZDO0lBQUE7SUFDQSxDQUFDO0lBRFksZUFBZTtRQUQzQixRQUFRLENBQUMsRUFBRSxDQUFDO09BQ0EsZUFBZSxDQUMzQjtJQUFELHNCQUFDO0NBQUEsQUFERCxJQUNDO1NBRFksZUFBZTtBQUc1QixNQUFNLENBQUMsSUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQE5nTW9kdWxlKHt9KVxuZXhwb3J0IGNsYXNzIFNlY29uZGFyeU1vZHVsZSB7XG59XG5cbmV4cG9ydCBjb25zdCBhID0gMTtcbiJdfQ==
--- esm5/secondary/secondarymodule.ngfactory.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "@angular/core";
import * as i1 from "angular/packages/bazel/test/ng_package/example/secondary/secondarymodule";
var SecondaryModuleNgFactory = i0.ɵcmf(i1.SecondaryModule, [], function (_l) { return i0.ɵmod([i0.ɵmpd(512, i0.ComponentFactoryResolver, i0.ɵCodegenComponentFactoryResolver, [[8, []], [3, i0.ComponentFactoryResolver], i0.NgModuleRef]), i0.ɵmpd(1073742336, i1.SecondaryModule, i1.SecondaryModule, [])]); });
export { SecondaryModuleNgFactory as SecondaryModuleNgFactory };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5bW9kdWxlLm5nZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2JhemVsL3Rlc3QvbmdfcGFja2FnZS9leGFtcGxlL3NlY29uZGFyeS9zZWNvbmRhcnltb2R1bGUubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGkxIGZyb20gJ2FuZ3VsYXIvcGFja2FnZXMvYmF6ZWwvdGVzdC9uZ19wYWNrYWdlL2V4YW1wbGUvc2Vjb25kYXJ5L3NlY29uZGFyeW1vZHVsZSc7XG5leHBvcnQgY29uc3QgU2Vjb25kYXJ5TW9kdWxlTmdGYWN0b3J5OmkwLk5nTW9kdWxlRmFjdG9yeTxpMS5TZWNvbmRhcnlNb2R1bGU+ID0gKG51bGwgYXMgYW55KTtcbnZhciBfZGVjbDBfMDppMC5UZW1wbGF0ZVJlZjxhbnk+ID0gKDxhbnk+KG51bGwgYXMgYW55KSk7XG52YXIgX2RlY2wwXzE6aTAuRWxlbWVudFJlZjxhbnk+ID0gKDxhbnk+KG51bGwgYXMgYW55KSk7XG4iXX0=
--- esm5/secondary/secondarymodule.ngsummary.js ---
/**
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
*
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
* tslint:disable
*/
import * as i0 from "angular/packages/bazel/test/ng_package/example/secondary/secondarymodule";
export function SecondaryModuleNgSummary() { return [{ summaryKind: 2, type: { reference: i0.SecondaryModule, diDeps: [], lifecycleHooks: [] }, entryComponents: [], providers: [], modules: [{ reference: i0.SecondaryModule, diDeps: [], lifecycleHooks: [] }], exportedDirectives: [], exportedPipes: [] }]; }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5bW9kdWxlLm5nc3VtbWFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2JhemVsL3Rlc3QvbmdfcGFja2FnZS9leGFtcGxlL3NlY29uZGFyeS9zZWNvbmRhcnltb2R1bGUubmdzdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG5leHBvcnQgZnVuY3Rpb24gU2Vjb25kYXJ5TW9kdWxlTmdTdW1tYXJ5KCk6YW55W10ge1xuICByZXR1cm4gKG51bGwgYXMgYW55KTtcbn1cbiJdfQ==
--- example_public_index.d.ts ---
/**
* Generated bundle index. Do not edit.
*/
export * from './index';
--- example_public_index.metadata.json ---
{"__symbolic":"module","version":4,"metadata":{"MyModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{}]}],"members":{}}},"origins":{"MyModule":"./mymodule"},"importAs":"example"}
--- index.d.ts ---
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
export * from './mymodule';
--- mymodule.d.ts ---
export declare class MyModule {
}
--- package.json ---
{
"name": "example",
"main": "./bundles/example.umd.js",
"esm5": "./esm5/example_public_index.js",
"module": "./esm5/example_public_index.js",
"esm2015": "./esm2015/example_public_index.js",
"es2015": "./esm2015/example_public_index.js",
"typings": "./example_public_index.d.ts"
}
--- secondary/index.d.ts ---
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
export * from './secondarymodule';
--- secondary/package.json ---
{
"name": "example/secondary",
"main": "../bundles/example-secondary.umd.js",
"esm5": "../esm5/secondary/secondary_public_index.js",
"module": "../esm5/secondary/secondary_public_index.js",
"esm2015": "../esm2015/secondary/secondary_public_index.js",
"es2015": "../esm2015/secondary/secondary_public_index.js",
"typings": "./secondary_public_index.d.ts"
}
--- secondary/secondary_public_index.d.ts ---
/**
* Generated bundle index. Do not edit.
*/
export * from './index';
--- secondary/secondary_public_index.metadata.json ---
{"__symbolic":"module","version":4,"metadata":{"SecondaryModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{}]}],"members":{}},"a":1},"origins":{"SecondaryModule":"./secondarymodule","a":"./secondarymodule"},"importAs":"example/secondary"}
--- secondary/secondarymodule.d.ts ---
export declare class SecondaryModule {
}
export declare const a = 1;
--- secondary.d.ts ---
export * from './secondary/secondary_public_index';
--- secondary.metadata.json ---
{"__symbolic":"module","version":3,"metadata":{},"exports":[{"from":"./secondary/secondary_public_index"}],"flatModuleIndexRedirect":true}
--- some-file.txt ---
This file is just copied into the package.

View File

@ -8,62 +8,52 @@
import * as fs from 'fs'; import * as fs from 'fs';
import * as path from 'path'; import * as path from 'path';
import * as shx from 'shelljs';
const UTF8 = { const TEST_DIR = path.resolve(path.join('packages', 'bazel', 'test', 'ng_package'));
encoding: 'utf-8'
};
shx.cd(path.join( function listDirectories(p: string, depth = 0) {
process.env['TEST_SRCDIR'], 'angular', 'packages', 'bazel', 'test', 'ng_package', 'example', const result: string[] = [];
'npm_package')); if (fs.statSync(p).isDirectory()) {
fs.readdirSync(p).forEach(f => {
result.push(
' '.repeat(depth) + path.join(p, f), ...listDirectories(path.join(p, f), depth + 1));
});
}
return result;
}
describe('example ng_package', () => { function catFiles(p: string) {
it('should have right bundle files', () => { const result: string[] = [];
expect(shx.ls('-R', 'bundles').stdout.split('\n').filter(n => !!n).sort()).toEqual([ if (fs.statSync(p).isDirectory()) {
'example-secondary.umd.js', fs.readdirSync(p).forEach(dir => { result.push(...catFiles(path.join(p, dir))); });
'example-secondary.umd.js.map', } else {
'example-secondary.umd.min.js', result.push(`--- ${p} ---`, '', fs.readFileSync(p, 'utf-8'), '');
'example-secondary.umd.min.js.map', }
'example.umd.js', return result;
'example.umd.js.map', }
'example.umd.min.js',
'example.umd.min.js.map', const goldenFile = path.join(TEST_DIR, 'example_package.golden');
]); process.chdir(path.join(TEST_DIR, 'example/npm_package'));
const actual = [...listDirectories('.'), ...catFiles('.')].join('\n').replace(
/bazel-out\/.*\/bin/g, 'bazel-bin');
const expected = fs.readFileSync(goldenFile, 'utf-8');
if (require.main === module) {
const args = process.argv.slice(2);
if (args[0] === '--accept') {
fs.writeFileSync(require.resolve(goldenFile), actual, 'utf-8');
}
} else {
describe('example ng_package', () => {
it('should match golden file', () => {
if (actual === expected) {
return;
}
fail(`example ng_package differs from golden file
Accept the new golden file:
bazel run ${process.env['BAZEL_TARGET']}.accept
`);
});
}); });
// FESMS currently not part of APF v6 }
xit('should have right fesm files', () => {
const expected = [
'example.js',
'example.js.map',
'secondary.js',
'secondary.js.map',
];
expect(shx.ls('-R', 'esm5').stdout.split('\n').filter(n => !!n).sort()).toEqual(expected);
expect(shx.ls('-R', 'esm2015').stdout.split('\n').filter(n => !!n).sort()).toEqual(expected);
});
it('should have right secondary sources', () => {
const expected = [
'index.d.ts',
'package.json',
'secondary.d.ts',
'secondary.metadata.json',
'secondarymodule.d.ts',
];
expect(shx.ls('-R', 'secondary').stdout.split('\n').filter(n => !!n).sort()).toEqual(expected);
});
it('should have main entry point package.json properties set', () => {
const packageJson = JSON.parse(fs.readFileSync('package.json', UTF8));
expect(packageJson['main']).toBe('./bundles/example.umd.js');
expect(packageJson['module']).toBe('./esm5/example.js');
expect(packageJson['es2015']).toBe('./esm2015/example.js');
expect(packageJson['typings']).toBe('./example.d.ts');
});
it('should have secondary entry point package.json properties set', () => {
const packageJson = JSON.parse(fs.readFileSync(path.join('secondary', 'package.json'), UTF8));
expect(packageJson['main']).toBe('../bundles/example-secondary.umd.js');
expect(packageJson['module']).toBe('../esm5/secondary/secondary.js');
expect(packageJson['es2015']).toBe('../esm2015/secondary/secondary.js');
expect(packageJson['typings']).toBe('./secondary.d.ts');
});
});

View File

@ -26,11 +26,6 @@ ng_package(
"//packages/common/testing:package.json", "//packages/common/testing:package.json",
], ],
entry_point = "packages/common/index.js", entry_point = "packages/common/index.js",
secondary_entry_points = [
"testing",
"http",
"http/testing",
],
deps = [ deps = [
"//packages/common", "//packages/common",
"//packages/common/http", "//packages/common/http",

View File

@ -4,6 +4,7 @@ ng_module(
name = "test_module", name = "test_module",
srcs = glob(["*.ts"]), srcs = glob(["*.ts"]),
entry_point = "index.ts", entry_point = "index.ts",
flat_module_out_file = "flat_module_filename",
module_name = "some_npm_module", module_name = "some_npm_module",
deps = ["//packages/core"], deps = ["//packages/core"],
) )

View File

@ -6,11 +6,12 @@
""" """
def _extract_flat_module_index(ctx): def _extract_flat_module_index(ctx):
return [DefaultInfo(files = depset(transitive = [ files = []
dep.angular.flat_module_metadata for dep in ctx.attr.deps:
for dep in ctx.attr.deps if hasattr(dep, "angular"):
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( extract_flat_module_index = rule(
implementation = _extract_flat_module_index, implementation = _extract_flat_module_index,

View File

@ -12,7 +12,7 @@ describe('flat module index', () => {
describe('child metadata', () => { describe('child metadata', () => {
it('should have contents', () => { it('should have contents', () => {
const metadata = fs.readFileSync( 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":"module"');
expect(metadata).toContain('"__symbolic":"reference","module":"@angular/core"'); expect(metadata).toContain('"__symbolic":"reference","module":"@angular/core"');
expect(metadata).toContain('"origins":{"Child":"./child","ɵa":"./parent"}'); expect(metadata).toContain('"origins":{"Child":"./child","ɵa":"./parent"}');
@ -21,8 +21,8 @@ describe('flat module index', () => {
}); });
describe('child typings', () => { describe('child typings', () => {
it('should have contents', () => { it('should have contents', () => {
const dts = fs.readFileSync( const dts =
require.resolve(`${PKG}/_test_module.bundle_index.d.ts`), {encoding: 'utf-8'}); fs.readFileSync(require.resolve(`${PKG}/flat_module_filename.d.ts`), {encoding: 'utf-8'});
expect(dts).toContain('export * from \'./index\';'); expect(dts).toContain('export * from \'./index\';');
expect(dts).toContain('export { Parent as ɵa } from \'./parent\';'); expect(dts).toContain('export { Parent as ɵa } from \'./parent\';');

View File

@ -11,7 +11,6 @@ ts_library(
], ],
), ),
module_name = "@angular/compiler", module_name = "@angular/compiler",
# module_root = "index.d.ts",
) )
ng_package( ng_package(
@ -22,9 +21,6 @@ ng_package(
], ],
entry_point = "packages/compiler/compiler.js", entry_point = "packages/compiler/compiler.js",
include_devmode_srcs = True, include_devmode_srcs = True,
secondary_entry_points = [
"testing",
],
deps = [ deps = [
":compiler", ":compiler",
"//packages/compiler/testing", "//packages/compiler/testing",

View File

@ -24,7 +24,6 @@ ng_package(
"//packages/core/testing:package.json", "//packages/core/testing:package.json",
], ],
entry_point = "packages/core/index.js", entry_point = "packages/core/index.js",
secondary_entry_points = ["testing"],
deps = [ deps = [
":core", ":core",
"//packages/core/testing", "//packages/core/testing",

View File

@ -25,9 +25,6 @@ ng_package(
"//packages/http/testing:package.json", "//packages/http/testing:package.json",
], ],
entry_point = "packages/http/index.js", entry_point = "packages/http/index.js",
secondary_entry_points = [
"testing",
],
deps = [ deps = [
":http", ":http",
"//packages/http/testing", "//packages/http/testing",

View File

@ -27,9 +27,6 @@ ng_package(
"//packages/platform-browser-dynamic/testing:package.json", "//packages/platform-browser-dynamic/testing:package.json",
], ],
entry_point = "packages/platform-browser-dynamic/index.js", entry_point = "packages/platform-browser-dynamic/index.js",
secondary_entry_points = [
"testing",
],
deps = [ deps = [
":platform-browser-dynamic", ":platform-browser-dynamic",
"//packages/platform-browser-dynamic/testing", "//packages/platform-browser-dynamic/testing",

View File

@ -26,10 +26,6 @@ ng_package(
"//packages/platform-browser/testing:package.json", "//packages/platform-browser/testing:package.json",
], ],
entry_point = "packages/platform-browser/index.js", entry_point = "packages/platform-browser/index.js",
secondary_entry_points = [
"animations",
"testing",
],
deps = [ deps = [
":platform-browser", ":platform-browser",
"//packages/platform-browser/animations", "//packages/platform-browser/animations",

View File

@ -32,9 +32,6 @@ ng_package(
"//packages/platform-server/testing:package.json", "//packages/platform-server/testing:package.json",
], ],
entry_point = "packages/platform-server/index.js", entry_point = "packages/platform-server/index.js",
secondary_entry_points = [
"testing",
],
deps = [ deps = [
":platform-server", ":platform-server",
"//packages/platform-server/testing", "//packages/platform-server/testing",

View File

@ -28,10 +28,6 @@ ng_package(
"//packages/router/upgrade:package.json", "//packages/router/upgrade:package.json",
], ],
entry_point = "packages/router/index.js", entry_point = "packages/router/index.js",
secondary_entry_points = [
"testing",
"upgrade",
],
deps = [ deps = [
":router", ":router",
"//packages/router/testing", "//packages/router/testing",

View File

@ -25,7 +25,6 @@ ng_package(
"//packages/service-worker/config:package.json", "//packages/service-worker/config:package.json",
], ],
entry_point = "packages/service-worker/index.js", entry_point = "packages/service-worker/index.js",
secondary_entry_points = ["config"],
deps = [ deps = [
":service-worker", ":service-worker",
"//packages/service-worker/config", "//packages/service-worker/config",

View File

@ -10,5 +10,6 @@ ng_module(
"*.ts", "*.ts",
"src/**/*.ts", "src/**/*.ts",
]), ]),
module_name = "@angular/service-worker/config",
deps = ["//packages/core"], deps = ["//packages/core"],
) )

View File

@ -25,9 +25,6 @@ ng_package(
"//packages/upgrade/static:package.json", "//packages/upgrade/static:package.json",
], ],
entry_point = "packages/upgrade/index.js", entry_point = "packages/upgrade/index.js",
secondary_entry_points = [
"static",
],
deps = [ deps = [
":upgrade", ":upgrade",
"//packages/upgrade/static", "//packages/upgrade/static",

View File

@ -43,7 +43,7 @@ def ng_module(name, tsconfig = None, entry_point = None, **kwargs):
tsconfig = DEFAULT_TSCONFIG tsconfig = DEFAULT_TSCONFIG
if not entry_point: if not entry_point:
entry_point = "public_api.ts" entry_point = "public_api.ts"
_ng_module(name = name, tsconfig = tsconfig, entry_point = entry_point, **kwargs) _ng_module(name = name, flat_module_out_file = name, tsconfig = tsconfig, entry_point = entry_point, **kwargs)
def ng_package(name, readme_md = None, license_banner = None, stamp_data = None, **kwargs): def ng_package(name, readme_md = None, license_banner = None, stamp_data = None, **kwargs):
if not readme_md: if not readme_md:

View File

@ -2,6 +2,22 @@
Keeps track of public API surface of a typescript library. Keeps track of public API surface of a typescript library.
Examples:
```sh
# Generate one declaration file
ts-api-guardian --out api_guard.d.ts index.d.ts
# Generate multiple declaration files
# (output location like typescript)
ts-api-guardian --outDir api_guard [--rootDir .] core/index.d.ts core/testing.d.ts
# Print usage
ts-api-guardian --help
# Check against one declaration file
ts-api-guardian --verify api_guard.d.ts index.d.ts
# Check against multiple declaration files
ts-api-guardian --verifyDir api_guard [--rootDir .] core/index.d.ts core/testing.d.ts
```
# For developers # For developers
Build and test this library: Build and test this library:

View File

@ -16,25 +16,6 @@ import * as path from 'path';
import {SerializationOptions, generateGoldenFile, verifyAgainstGoldenFile} from './main'; import {SerializationOptions, generateGoldenFile, verifyAgainstGoldenFile} from './main';
// Examples:
//
// ```sh
// # Generate one declaration file
// ts-api-guardian --out api_guard.d.ts index.d.ts
//
// # Generate multiple declaration files // # (output location like typescript)
// ts-api-guardian --outDir api_guard [--rootDir .] core/index.d.ts core/testing.d.ts
//
// # Print usage
// ts-api-guardian --help
//
// # Check against one declaration file
// ts-api-guardian --verify api_guard.d.ts index.d.ts
//
// # Check against multiple declaration files
// ts-api-guardian --verifyDir api_guard [--rootDir .] core/index.d.ts core/testing.d.ts
// ```
const CMD = 'ts-api-guardian'; const CMD = 'ts-api-guardian';
export function startCli() { export function startCli() {