diff --git a/adev/shared-docs/utils/analytics.utils.ts b/adev/shared-docs/utils/analytics.utils.ts index dd3b7796090..8f53b58069d 100644 --- a/adev/shared-docs/utils/analytics.utils.ts +++ b/adev/shared-docs/utils/analytics.utils.ts @@ -8,7 +8,7 @@ declare global { interface Window { - gtag: (...args: any[]) => void; + gtag?(...args: any[]): void; } } diff --git a/adev/src/content/tools/libraries/angular-package-format.md b/adev/src/content/tools/libraries/angular-package-format.md index 7ac53be0ab5..82d12825d8f 100644 --- a/adev/src/content/tools/libraries/angular-package-format.md +++ b/adev/src/content/tools/libraries/angular-package-format.md @@ -270,10 +270,14 @@ The Angular CLI down-levels the bundle to a language level that is supported by ### d.ts bundling / type definition flattening -As of APF v8 it is now preferred to run [API Extractor](https://api-extractor.com), to bundle TypeScript definitions so that the entire API appears in a single file. +As of APF v8, it is recommended to bundle TypeScript definitions. +Bundling of type definitions can significantly speed up compilations for users, especially if there are many individual `.ts` source files in your library. -In prior APF versions each entry point would have a `src` directory next to the .d.ts entry point and this directory contained individual d.ts files matching the structure of the original source code. -While this distribution format is still allowed and supported, it is highly discouraged because it confuses tools like IDEs that then offer incorrect autocompletion, and allows users to depend on deep-import paths which are typically not considered to be public API of a library or a package. +Angular uses [`rollup-plugin-dts`](https://github.com/Swatinem/rollup-plugin-dts) to flatten `.d.ts` files (using `rollup`, similar to how FESM files are created). + +Using rollup for `.d.ts` bundling is beneficial as it supports code splitting between entry-points. +For example, consider you have multiple entrypoints relying on the same shared type, a shared `.d.ts` file would be created along with the larger flattened `.d.ts` files. +This is desirable and avoids duplication of types. ### Tslib diff --git a/goldens/public-api/common/http/index.api.md b/goldens/public-api/common/http/index.api.md index e57fec51f3b..f7561332e4b 100644 --- a/goldens/public-api/common/http/index.api.md +++ b/goldens/public-api/common/http/index.api.md @@ -8,14 +8,14 @@ import { EnvironmentInjector } from '@angular/core'; import { EnvironmentProviders } from '@angular/core'; import * as i0 from '@angular/core'; import { InjectionToken } from '@angular/core'; -import type { Injector } from '@angular/core'; +import { Injector } from '@angular/core'; import { ModuleWithProviders } from '@angular/core'; import { Observable } from 'rxjs'; import { Provider } from '@angular/core'; -import type { ResourceRef } from '@angular/core'; -import type { Signal } from '@angular/core'; -import type { ValueEqualityFn } from '@angular/core'; -import type { WritableResource } from '@angular/core'; +import { ResourceRef } from '@angular/core'; +import { Signal } from '@angular/core'; +import { ValueEqualityFn } from '@angular/core'; +import { WritableResource } from '@angular/core'; import { XhrFactory } from '@angular/common'; // @public diff --git a/goldens/public-api/common/index.api.md b/goldens/public-api/common/index.api.md index 8029ec7aace..e1b9e527cc0 100644 --- a/goldens/public-api/common/index.api.md +++ b/goldens/public-api/common/index.api.md @@ -101,7 +101,7 @@ export class CommonModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // @public @@ -874,16 +874,16 @@ export { PopStateEvent_2 as PopStateEvent } export const PRECONNECT_CHECK_BLOCKLIST: InjectionToken<(string | string[])[]>; // @public -export const provideCloudflareLoader: (path: string) => Provider[]; +export const provideCloudflareLoader: (path: string) => i0.Provider[]; // @public -export const provideCloudinaryLoader: (path: string) => Provider[]; +export const provideCloudinaryLoader: (path: string) => i0.Provider[]; // @public -export const provideImageKitLoader: (path: string) => Provider[]; +export const provideImageKitLoader: (path: string) => i0.Provider[]; // @public -export const provideImgixLoader: (path: string) => Provider[]; +export const provideImgixLoader: (path: string) => i0.Provider[]; // @public export function provideNetlifyLoader(path?: string): Provider[]; diff --git a/goldens/public-api/core/index.api.md b/goldens/public-api/core/index.api.md index b0fc461f09c..e54b6825610 100644 --- a/goldens/public-api/core/index.api.md +++ b/goldens/public-api/core/index.api.md @@ -4,7 +4,7 @@ ```ts -import { EnvironmentProviders as EnvironmentProviders_2 } from '@angular/core'; +import * as _angular_core from '@angular/core'; import { Observable } from 'rxjs'; import { SIGNAL } from '@angular/core/primitives/signals'; import { SignalNode } from '@angular/core/primitives/signals'; @@ -116,20 +116,20 @@ export class ApplicationInitStatus { // (undocumented) readonly donePromise: Promise; // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: ɵɵFactoryDeclaration; // (undocumented) - static ɵprov: i0.ɵɵInjectableDeclaration; + static ɵprov: ɵɵInjectableDeclaration; } // @public export class ApplicationModule { constructor(appRef: ApplicationRef); // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: ɵɵFactoryDeclaration; // (undocumented) - static ɵinj: i0.ɵɵInjectorDeclaration; + static ɵinj: ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; + static ɵmod: ɵɵNgModuleDeclaration; } // @public @@ -152,9 +152,9 @@ export class ApplicationRef { // (undocumented) whenStable(): Promise; // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: ɵɵFactoryDeclaration; // (undocumented) - static ɵprov: i0.ɵɵInjectableDeclaration; + static ɵprov: ɵɵInjectableDeclaration; } // @public (undocumented) @@ -241,9 +241,9 @@ export class Compiler { compileModuleSync(moduleType: Type): NgModuleFactory; getModuleId(moduleType: Type): string | undefined; // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: ɵɵFactoryDeclaration; // (undocumented) - static ɵprov: i0.ɵɵInjectableDeclaration; + static ɵprov: ɵɵInjectableDeclaration; } // @public @@ -1029,7 +1029,7 @@ export interface InputSignalWithTransform extends Signal { // (undocumented) [ɵINPUT_SIGNAL_BRAND_WRITE_TYPE]: TransformT; // (undocumented) - [SIGNAL]: ɵInputSignalNode; + [SIGNAL]: InputSignalNode; } // @public @@ -1196,7 +1196,7 @@ export interface ModelOptions { // @public export interface ModelSignal extends WritableSignal, InputSignal, OutputRef { // (undocumented) - [SIGNAL]: ɵInputSignalNode; + [SIGNAL]: InputSignalNode; } // @public @deprecated @@ -1434,9 +1434,9 @@ export class PlatformRef { get injector(): Injector; onDestroy(callback: () => void): void; // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: ɵɵFactoryDeclaration; // (undocumented) - static ɵprov: i0.ɵɵInjectableDeclaration; + static ɵprov: ɵɵInjectableDeclaration; } // @public @@ -1459,7 +1459,7 @@ export function provideExperimentalCheckNoChangesForDebug(options: { interval?: number; useNgZoneOnStable?: boolean; exhaustive?: boolean; -}): EnvironmentProviders_2; +}): _angular_core.EnvironmentProviders; // @public export function provideExperimentalZonelessChangeDetection(): EnvironmentProviders; @@ -1790,9 +1790,9 @@ export class Testability implements PublicTestability { isStable(): boolean; whenStable(doneCb: Function, timeout?: number, updateCb?: Function): void; // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: ɵɵFactoryDeclaration; // (undocumented) - static ɵprov: i0.ɵɵInjectableDeclaration; + static ɵprov: ɵɵInjectableDeclaration; } // @public @@ -1805,9 +1805,9 @@ export class TestabilityRegistry { unregisterAllApplications(): void; unregisterApplication(token: any): void; // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; + static ɵfac: ɵɵFactoryDeclaration; // (undocumented) - static ɵprov: i0.ɵɵInjectableDeclaration; + static ɵprov: ɵɵInjectableDeclaration; } // @public diff --git a/goldens/public-api/core/primitives/di/index.api.md b/goldens/public-api/core/primitives/di/index.api.md index 80f08907e2e..37476555880 100644 --- a/goldens/public-api/core/primitives/di/index.api.md +++ b/goldens/public-api/core/primitives/di/index.api.md @@ -4,7 +4,7 @@ ```ts -// @public +// @public (undocumented) export function getCurrentInjector(): Injector | undefined | null; // @public diff --git a/goldens/public-api/core/primitives/event-dispatch/index.api.md b/goldens/public-api/core/primitives/event-dispatch/index.api.md index 32dea535b04..61e41097c5b 100644 --- a/goldens/public-api/core/primitives/event-dispatch/index.api.md +++ b/goldens/public-api/core/primitives/event-dispatch/index.api.md @@ -4,7 +4,7 @@ ```ts -// @public (undocumented) +// @public export const Attribute: { JSACTION: "jsaction"; }; @@ -35,7 +35,7 @@ export class EventContract implements UnrenamedEventContract { // (undocumented) static MOUSE_SPECIAL_SUPPORT: boolean; registerDispatcher(dispatcher: Dispatcher, restriction: Restriction): void; - replayEarlyEventInfos(earlyEventInfos: eventInfoLib.EventInfo[]): void; + replayEarlyEventInfos(earlyEventInfos: EventInfo[]): void; replayEarlyEvents(earlyJsactionData?: EarlyJsactionData | undefined): void; } diff --git a/goldens/public-api/core/primitives/signals/index.api.md b/goldens/public-api/core/primitives/signals/index.api.md index 1ce83491fa7..8c035179363 100644 --- a/goldens/public-api/core/primitives/signals/index.api.md +++ b/goldens/public-api/core/primitives/signals/index.api.md @@ -4,7 +4,7 @@ ```ts -// @public +// @public (undocumented) export type ComputationFn = (source: S, previous?: { source: S; value: D; @@ -137,7 +137,7 @@ export function runPostSignalSetFn(): void; // @public (undocumented) export function setActiveConsumer(consumer: ReactiveNode | null): ReactiveNode | null; -// @public (undocumented) +// @public export function setAlternateWeakRefImpl(impl: unknown): void; // @public (undocumented) diff --git a/goldens/public-api/forms/index.api.md b/goldens/public-api/forms/index.api.md index 52d149b932f..abc4490dc53 100644 --- a/goldens/public-api/forms/index.api.md +++ b/goldens/public-api/forms/index.api.md @@ -580,7 +580,7 @@ export class FormsModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // @public @@ -847,7 +847,7 @@ export class ReactiveFormsModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // @public diff --git a/goldens/public-api/platform-browser-dynamic/index.api.md b/goldens/public-api/platform-browser-dynamic/index.api.md index 5129e504dff..81246dfde5e 100644 --- a/goldens/public-api/platform-browser-dynamic/index.api.md +++ b/goldens/public-api/platform-browser-dynamic/index.api.md @@ -7,8 +7,7 @@ import { Compiler } from '@angular/core'; import { CompilerFactory } from '@angular/core'; import { CompilerOptions } from '@angular/core'; -import { PlatformRef } from '@angular/core'; -import { StaticProvider } from '@angular/core'; +import * as i0 from '@angular/core'; import { Version } from '@angular/core'; // @public @deprecated (undocumented) @@ -18,7 +17,7 @@ export class JitCompilerFactory implements CompilerFactory { } // @public (undocumented) -export const platformBrowserDynamic: (extraProviders?: StaticProvider[]) => PlatformRef; +export const platformBrowserDynamic: (extraProviders?: i0.StaticProvider[]) => i0.PlatformRef; // @public (undocumented) export const VERSION: Version; diff --git a/goldens/public-api/platform-browser/testing/index.api.md b/goldens/public-api/platform-browser/testing/index.api.md index 13ee46c9a72..c842e02a939 100644 --- a/goldens/public-api/platform-browser/testing/index.api.md +++ b/goldens/public-api/platform-browser/testing/index.api.md @@ -6,7 +6,6 @@ import * as i0 from '@angular/core'; import * as i1 from '@angular/platform-browser'; -import { PlatformRef } from '@angular/core'; import { StaticProvider } from '@angular/core'; // @public @@ -20,7 +19,7 @@ export class BrowserTestingModule { } // @public -export const platformBrowserTesting: (extraProviders?: StaticProvider[]) => PlatformRef; +export const platformBrowserTesting: (extraProviders?: StaticProvider[]) => i0.PlatformRef; // (No @packageDocumentation comment for this package) diff --git a/goldens/public-api/platform-server/testing/index.api.md b/goldens/public-api/platform-server/testing/index.api.md index 69d91c19c9b..74a84c32151 100644 --- a/goldens/public-api/platform-server/testing/index.api.md +++ b/goldens/public-api/platform-server/testing/index.api.md @@ -6,11 +6,9 @@ import * as i0 from '@angular/core'; import * as i1 from '@angular/platform-browser-dynamic/testing'; -import { PlatformRef } from '@angular/core'; -import { StaticProvider } from '@angular/core'; // @public -export const platformServerTesting: (extraProviders?: StaticProvider[]) => PlatformRef; +export const platformServerTesting: (extraProviders?: i0.StaticProvider[]) => i0.PlatformRef; // @public export class ServerTestingModule { diff --git a/goldens/public-api/router/index.api.md b/goldens/public-api/router/index.api.md index 083eb4fe69a..67876bcdb6f 100644 --- a/goldens/public-api/router/index.api.md +++ b/goldens/public-api/router/index.api.md @@ -5,6 +5,7 @@ ```ts import { AfterContentInit } from '@angular/core'; +import * as _angular_router from '@angular/router'; import { ChangeDetectorRef } from '@angular/core'; import { Compiler } from '@angular/core'; import { ComponentRef } from '@angular/core'; @@ -15,7 +16,6 @@ import { EventEmitter } from '@angular/core'; import * as i0 from '@angular/core'; import { InjectionToken } from '@angular/core'; import { Injector } from '@angular/core'; -import { InputSignal } from '@angular/core'; import { LocationStrategy } from '@angular/common'; import { ModuleWithProviders } from '@angular/core'; import { NgModuleFactory } from '@angular/core'; @@ -27,7 +27,6 @@ import { Provider } from '@angular/core'; import { ProviderToken } from '@angular/core'; import { QueryList } from '@angular/core'; import { Renderer2 } from '@angular/core'; -import { RouterState as RouterState_2 } from '@angular/router'; import { Signal } from '@angular/core'; import { SimpleChanges } from '@angular/core'; import { Title } from '@angular/platform-browser'; @@ -726,7 +725,7 @@ export class Router { resetConfig(config: Routes): void; // @deprecated routeReuseStrategy: RouteReuseStrategy; - get routerState(): RouterState_2; + get routerState(): _angular_router.RouterState; serializeUrl(url: UrlTree): string; setUpLocationChangeListener(): void; get url(): string; @@ -869,7 +868,7 @@ export class RouterModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // @public @@ -901,7 +900,7 @@ export class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract { ngOnDestroy(): void; // (undocumented) ngOnInit(): void; - readonly routerOutletData: InputSignal; + readonly routerOutletData: i0.InputSignal; // (undocumented) readonly supportsBindingToComponentInputs = true; // (undocumented) diff --git a/goldens/public-api/router/testing/index.api.md b/goldens/public-api/router/testing/index.api.md index caf74634936..9d78a0d0d43 100644 --- a/goldens/public-api/router/testing/index.api.md +++ b/goldens/public-api/router/testing/index.api.md @@ -4,11 +4,11 @@ ```ts +import * as _angular_router from '@angular/router'; import { ComponentFixture } from '@angular/core/testing'; import { DebugElement } from '@angular/core'; import { ExtraOptions } from '@angular/router'; import * as i0 from '@angular/core'; -import * as i1 from '@angular/router'; import { ModuleWithProviders } from '@angular/core'; import { Routes } from '@angular/router'; import { Type } from '@angular/core'; @@ -36,7 +36,7 @@ export class RouterTestingModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // (No @packageDocumentation comment for this package) diff --git a/package.json b/package.json index fbe4a4b0382..90833206320 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,8 @@ "protractor": "^7.0.0", "reflect-metadata": "^0.2.0", "requirejs": "^2.3.6", - "rollup": "~2.79.0", + "rollup": "4.35.0", + "rollup-plugin-dts": "^6.1.1", "rollup-plugin-preserve-shebang": "^1.0.1", "rollup-plugin-sourcemaps": "^0.6.3", "rxjs": "^7.0.0", diff --git a/packages/bazel/BUILD.bazel b/packages/bazel/BUILD.bazel index 65914bddfec..e40cdd8fcc7 100644 --- a/packages/bazel/BUILD.bazel +++ b/packages/bazel/BUILD.bazel @@ -12,7 +12,6 @@ pkg_npm( "//packages/bazel/src/ng_module:package_assets", "//packages/bazel/src/ng_package:package_assets", "//packages/bazel/src/ngc-wrapped:package_assets", - "//packages/bazel/src/types_bundle:package_assets", "//packages/bazel/third_party/github.com/bazelbuild/bazel/src/main/protobuf:package_assets", ], substitutions = { @@ -23,7 +22,6 @@ pkg_npm( "//packages/bazel/src:partial_compilation": "@npm//@angular/bazel/src:partial_compilation", # Substitutions to account for label changes when `@angular/bazel` is consumed externally. # NodeJS binaries are pre-built and should be consumed through the NPM bin scripts of the package. - "//packages/bazel/src/types_bundle:types_bundler": "@npm//@angular/bazel/bin:types_bundler", "//packages/bazel/": "//@angular/bazel/", "@npm//@bazel/concatjs/internal:": "//@bazel/concatjs/internal:", }, @@ -35,7 +33,6 @@ pkg_npm( deps = [ "//packages/bazel/src/ng_package:lib", "//packages/bazel/src/ngc-wrapped:ngc_lib", - "//packages/bazel/src/types_bundle:lib", ], ) # END-DEV-ONLY diff --git a/packages/bazel/index.bzl b/packages/bazel/index.bzl index c45b2a57fa1..999ed9c929c 100644 --- a/packages/bazel/index.bzl +++ b/packages/bazel/index.bzl @@ -7,13 +7,11 @@ Users should not load files under "/src" """ -load("//packages/bazel/src/ng_package:ng_package.bzl", _ng_package = "ng_package_macro") load("//packages/bazel/src/ng_module:ng_module.bzl", _ng_module = "ng_module_macro") -load("//packages/bazel/src/types_bundle:index.bzl", _types_bundle = "types_bundle") +load("//packages/bazel/src/ng_package:ng_package.bzl", _ng_package = "ng_package_macro") ng_module = _ng_module ng_package = _ng_package -types_bundle = _types_bundle # DO NOT ADD PUBLIC API without including in the documentation generation # Run `yarn bazel build //packages/bazel/docs` to verify diff --git a/packages/bazel/package.json b/packages/bazel/package.json index e4196f88bb2..6b91a2e63df 100644 --- a/packages/bazel/package.json +++ b/packages/bazel/package.json @@ -10,7 +10,6 @@ "bin": { "ngc-wrapped": "./src/ngc-wrapped/index.mjs", "packager": "./src/ng_package/packager.mjs", - "types_bundler": "./src/types_bundle/index.mjs", "xi18n": "./src/ngc-wrapped/extract_i18n.mjs" }, "typings": "./src/ngc-wrapped/index.d.ts", @@ -33,8 +32,9 @@ "@bazel/worker": "^5.3.0", "@rollup/plugin-commonjs": "^28.0.0", "@rollup/plugin-node-resolve": "^13.0.4", - "rollup": "^2.56.3", + "rollup-plugin-dts": "^6.1.1", "rollup-plugin-sourcemaps": "^0.6.3", + "rollup": "4.35.0", "terser": "^5.9.0", "typescript": ">=5.8 <5.9" }, diff --git a/packages/bazel/src/ng_package/api.ts b/packages/bazel/src/ng_package/api.ts index 1129a5e8110..b98bb9ae96a 100644 --- a/packages/bazel/src/ng_package/api.ts +++ b/packages/bazel/src/ng_package/api.ts @@ -21,10 +21,14 @@ export interface BazelFileInfo { export interface EntryPointInfo { /** ES2022 index file for the APF entry-point. */ index: BazelFileInfo; - /** Relative path to flat ES2022 ES module bundle file (also applicable in the rollup output). */ + /** Entry-point type definition file for the APF entry-point (unbundled). */ + typingsEntryPoint: BazelFileInfo; + + /** Relative path to flat ES2022 ES module bundle file. */ fesm2022RelativePath: string; - /** Index type definition file for the APF entry-point. */ - typings: BazelFileInfo; + /** Relative path to the dts bundle for the entry-point. */ + dtsBundleRelativePath: string; + /** * Whether the index or typing paths have been guessed. For entry-points built * through `ts_library`, there is no explicit setting that declares the entry-point @@ -40,8 +44,13 @@ export interface PackageMetadata { /** Record of entry-points (including the primary one) and their info. */ entryPoints: Record; /** - * Path to the Rollup bundle output directory, containing all FESM + * Path to the Rollup FESM bundle output directory, containing all FESM * bundles and shared chunks. */ - bundlesOut: BazelFileInfo; + fesmBundlesOut: BazelFileInfo; + /** + * Path to the Rollup dts bundle output directory, containing all `d.ts` + * bundles and shared chunks. + */ + dtsBundlesOut: BazelFileInfo; } diff --git a/packages/bazel/src/ng_package/ng_package.bzl b/packages/bazel/src/ng_package/ng_package.bzl index f08b81d2a04..619331bcf68 100644 --- a/packages/bazel/src/ng_package/ng_package.bzl +++ b/packages/bazel/src/ng_package/ng_package.bzl @@ -22,7 +22,6 @@ load( "create_package", ) load("//packages/bazel/src/ng_module:partial_compilation.bzl", "partial_compilation_transition") -load("//packages/bazel/src/types_bundle:index.bzl", "bundle_type_declaration") # Prints a debug message if "--define=VERBOSE_LOGS=true" is specified. def _debug(vars, *args): @@ -138,18 +137,9 @@ def _write_rollup_config( root_dir, metadata_arg, side_effect_entry_points, - filename = "_%s.rollup.conf.js"): - """Generate a rollup config file. - - Args: - ctx: Bazel rule execution context - root_dir: root directory for module resolution (defaults to None) - filename: output filename pattern (defaults to `_%s.rollup.conf.js`) - - Returns: - The rollup config file. See https://rollupjs.org/guide/en#configuration-files - """ - config = ctx.actions.declare_file(filename % ctx.label.name) + dts_mode): + filename = "_%s_%s.rollup.conf.js" % (ctx.label.name, "dts" if dts_mode else "fesm") + config = ctx.actions.declare_file(filename) mappings = dict() all_deps = ctx.attr.deps + ctx.attr.srcs @@ -179,24 +169,20 @@ def _write_rollup_config( "TMPL_workspace_name": ctx.workspace_name, "TMPL_external": ", ".join(["'%s'" % e for e in externals]), "TMPL_side_effect_entrypoints": json.encode(side_effect_entry_points), + "TMPL_dts_mode": "true" if dts_mode else "false", }, ) return config -def _run_rollup(ctx, rollup_config, inputs): - outdir = ctx.actions.declare_directory("%s_fesm_bundle_out" % ctx.label.name) +def _run_rollup(ctx, rollup_config, inputs, dts_mode): + mode_label = "dts" if dts_mode else "fesm" + outdir = ctx.actions.declare_directory("%s_%s_bundle_out" % (ctx.label.name, mode_label)) args = ctx.actions.args() args.add("--config", rollup_config) args.add("--output.format", "esm") - args.add("--output.dir", outdir.path + "/fesm2022") - - # Note: if the input has external source maps then we need to also install and use - # `rollup-plugin-sourcemaps`, which will require us to use rollup.config.js file instead - # of command line args - args.add("--sourcemap") - + args.add("--output.dir", outdir.path) args.add("--preserveSymlinks") # We will produce errors as needed. Anything else is spammy: a well-behaved @@ -207,7 +193,7 @@ def _run_rollup(ctx, rollup_config, inputs): if ctx.file.license_banner: other_inputs.append(ctx.file.license_banner) ctx.actions.run( - progress_message = "ng_package: Rollup %s" % (ctx.label), + progress_message = "ng_package: Rollup %s (%s)" % (ctx.label, mode_label), mnemonic = "AngularPackageRollup", inputs = depset(other_inputs, transitive = [inputs]), outputs = [outdir], @@ -280,12 +266,14 @@ def _ng_package_impl(ctx): else: static_files.append(file) - type_files = [] - # List of unscoped direct and transitive ESM sources that are provided # by all entry-points. unscoped_all_entry_point_esm2022 = [] + # List of unscoped direct and transitive dts sources that are provided + # by all entry-points. + unscoped_all_entry_point_dts = [] + # We infer the entry points to be: # - ng_module rules in the deps (they have an "angular" provider) # - in this package or a subpackage @@ -317,7 +305,9 @@ def _ng_package_impl(ctx): # necessary to allow for entry-points to rely on sub-targets (as a perf improvement). unscoped_esm2022_depset = dep[JSEcmaScriptModuleInfo].sources unscoped_types_depset = dep[DeclarationInfo].transitive_declarations + unscoped_all_entry_point_esm2022.append(unscoped_esm2022_depset) + unscoped_all_entry_point_dts.append(unscoped_types_depset) # Extract the "module_name" from either "ts_library" or "ng_module". Both # set the "module_name" in the provider struct. @@ -378,39 +368,18 @@ def _ng_package_impl(ctx): typings_entry_point = _find_matching_file(unscoped_types, ["%s/index.d.ts" % entry_point_package]) guessed_paths = True - bundle_name = "%s.mjs" % (primary_bundle_name if is_primary_entry_point else entry_point) - fesm2022_file = "fesm2022/%s" % bundle_name - - # By default, we will bundle the typings entry-point, unless explicitly opted-out - # through the `skip_type_bundling` rule attribute. - if entry_point in ctx.attr.skip_type_bundling: - if typings_entry_point.short_path != "%s/index.d.ts" % entry_point_package: - fail(("Type bundling is explicitly disabled for `%s`, expected manual " + - "`%s/index.d.ts` to be provided.") % (entry_point, entry_point_package)) - - typings_file = typings_entry_point - else: - # Note: To avoid conflicts with source-file generated `index.d.ts` files we prefix the - # bundle typings file and remove the prefix later when assembling the package. - typings_file = ctx.actions.declare_file("%s__index.d.ts" % ("%s/" % entry_point if entry_point else "")) - - bundle_type_declaration( - ctx = ctx, - output_file = typings_file, - entry_point = typings_entry_point, - license_banner_file = ctx.file.license_banner, - types = unscoped_types_depset, - ) - - type_files.append(typings_file) + bundle_name_base = primary_bundle_name if is_primary_entry_point else entry_point + dts_bundle_name_base = "index" if is_primary_entry_point else "%s/index" % entry_point # Store the collected entry point in a list of all entry-points. This # can be later passed to the packager as a manifest. collected_entry_points.append(struct( module_name = module_name, es2022_entry_point = es2022_entry_point, - fesm2022_file = fesm2022_file, - typings_file = typings_file, + fesm2022_file = "fesm2022/%s.mjs" % bundle_name_base, + # TODO(devversion): Put all types under `/types/` folder. Breaking change in v20. + dts_bundle_relative_path = "%s.d.ts" % dts_bundle_name_base, + typings_entry_point = typings_entry_point, guessed_paths = guessed_paths, )) @@ -424,9 +393,10 @@ def _ng_package_impl(ctx): # packager should not copy external files into the package. esm2022 = _filter_esm_files_to_include(unscoped_all_entry_point_esm2022_list, owning_package) + unscoped_all_entry_point_dts_depset = depset(transitive = unscoped_all_entry_point_dts) + packager_inputs = ( static_files + - type_files + esm2022 ) @@ -445,8 +415,9 @@ def _ng_package_impl(ctx): # in the packager executable tool. metadata_arg[m.module_name] = { "index": _serialize_file(m.es2022_entry_point), + "typingsEntryPoint": _serialize_file(m.typings_entry_point), "fesm2022RelativePath": m.fesm2022_file, - "typings": _serialize_file(m.typings_file), + "dtsBundleRelativePath": m.dts_bundle_relative_path, # If the paths for that entry-point were guessed (e.g. "ts_library" rule or # "ng_module" without flat module bundle), we pass this information to the packager. "guessedPaths": m.guessed_paths, @@ -458,11 +429,28 @@ def _ng_package_impl(ctx): fail("Unknown entry-point (%s) specified to include side effects. " % ep + "The following entry-points are known: %s" % known_entry_points) - rollup_config = _write_rollup_config(ctx, ctx.bin_dir.path, metadata_arg, ctx.attr.side_effect_entry_points) - rollup_inputs = depset(static_files, transitive = [unscoped_all_entry_point_esm2022_depset]) - bundles_out = _run_rollup(ctx, rollup_config, rollup_inputs) + fesm_rollup_config = _write_rollup_config( + ctx, + ctx.bin_dir.path, + metadata_arg, + ctx.attr.side_effect_entry_points, + dts_mode = False, + ) + fesm_rollup_inputs = depset(static_files, transitive = [unscoped_all_entry_point_esm2022_depset]) + fesm_bundles_out = _run_rollup(ctx, fesm_rollup_config, fesm_rollup_inputs, dts_mode = False) - packager_inputs.append(bundles_out) + dts_rollup_config = _write_rollup_config( + ctx, + ctx.bin_dir.path, + metadata_arg, + ctx.attr.side_effect_entry_points, + dts_mode = True, + ) + dts_rollup_inputs = depset(static_files, transitive = [unscoped_all_entry_point_dts_depset]) + dts_bundles_out = _run_rollup(ctx, dts_rollup_config, dts_rollup_inputs, dts_mode = True) + + packager_inputs.append(fesm_bundles_out) + packager_inputs.append(dts_bundles_out) # Encodes the package metadata with all its entry-points into JSON so that # it can be deserialized by the packager tool. The struct needs to match with @@ -470,7 +458,8 @@ def _ng_package_impl(ctx): packager_args.add(json.encode(struct( npmPackageName = npm_package_name, entryPoints = metadata_arg, - bundlesOut = _serialize_file(bundles_out), + fesmBundlesOut = _serialize_file(fesm_bundles_out), + dtsBundlesOut = _serialize_file(dts_bundles_out), ))) if ctx.file.readme_md: @@ -489,7 +478,6 @@ def _ng_package_impl(ctx): packager_args.add(_serialize_files_for_arg(esm2022)) packager_args.add(_serialize_files_for_arg(static_files)) - packager_args.add(_serialize_files_for_arg(type_files)) packager_args.add(json.encode(ctx.attr.side_effect_entry_points)) @@ -567,22 +555,6 @@ _NG_PACKAGE_ATTRS = dict(PKG_NPM_ATTRS, **{ executable = True, cfg = "exec", ), - "skip_type_bundling": attr.string_list( - default = [], - doc = """ - List of entry-points for which type bundle generation should be skipped. Requires a - self-contained `index.d.ts` to be generated (i.e. with no relative imports). - - Skipping of bundling might be desirable due to limitations in Microsoft's API extractor. - For example when `declare global` is used: https://github.com/microsoft/rushstack/issues/2090. - - ``` - "", # Skips the primary entry-point from bundling. - "testing", # Skips the testing entry-point from type bundling - "select/testing", # Skips the `select/testing` entry-point - ``` - """, - ), "rollup": attr.label( default = Label(_DEFAULT_ROLLUP), executable = True, @@ -592,11 +564,6 @@ _NG_PACKAGE_ATTRS = dict(PKG_NPM_ATTRS, **{ default = Label(_DEFAULT_ROLLUP_CONFIG_TMPL), allow_single_file = True, ), - "_types_bundler_bin": attr.label( - default = "//packages/bazel/src/types_bundle:types_bundler", - cfg = "exec", - executable = True, - ), # Needed in order to allow for the outgoing transition on the `deps` attribute. # https://docs.bazel.build/versions/main/skylark/config.html#user-defined-transitions. "_allowlist_function_transition": attr.label( diff --git a/packages/bazel/src/ng_package/packager.ts b/packages/bazel/src/ng_package/packager.ts index faa7c59c154..1d50faa6e72 100644 --- a/packages/bazel/src/ng_package/packager.ts +++ b/packages/bazel/src/ng_package/packager.ts @@ -79,15 +79,11 @@ function main(args: string[]): void { // List of static files that should be copied into the package. staticFilesArg, - // List of all type definitions that need to packaged into the ng_package. - typeDefinitionsArg, - // List of side-effectful entry-points sideEffectEntryPointsArg, ] = params; const esm2022 = JSON.parse(esm2022Arg) as BazelFileInfo[]; - const typeDefinitions = JSON.parse(typeDefinitionsArg) as BazelFileInfo[]; const staticFiles = JSON.parse(staticFilesArg) as BazelFileInfo[]; const metadata = JSON.parse(metadataArg) as PackageMetadata; const sideEffectEntryPoints = JSON.parse(sideEffectEntryPointsArg) as string[]; @@ -137,16 +133,6 @@ function main(args: string[]): void { return path.relative(owningPackageName, file.shortPath); } - /** Gets the output-relative path where the typing file is being written to. */ - function getTypingOutputRelativePath(file: BazelFileInfo) { - // Type definitions are intended to be copied into the package output while preserving the - // sub-path from the owning package. e.g. a file like `packages/animations/browser/__index.d.ts` - // will end up being written to `/browser/index.d.ts`. Note that types are bundled - // as a separate action in the `ng_package` Starlark rule and prefixed with `__` to avoid - // conflicts with source `index.d.ts` files. We remove this prefix here. - return getOwningPackageRelativePath(file).replace(/__index\.d\.ts$/, 'index.d.ts'); - } - /** * Gets the entry-point sub-path from the package root. e.g. if the package name * is `@angular/cdk`, then for `@angular/cdk/a11y` just `a11y` would be returned. @@ -173,14 +159,18 @@ function main(args: string[]): void { process.exit(1); } - const fesmFiles = globSync('**/*', {cwd: metadata.bundlesOut.path}); // Copy all FESM files (and their potential shared chunks) into the package output. - fesmFiles.forEach((f) => copyFile(path.join(metadata.bundlesOut.path, f), f)); + const fesmFiles = globSync('**/*', {cwd: metadata.fesmBundlesOut.path}); + fesmFiles.forEach((f) => + copyFile(path.join(metadata.fesmBundlesOut.path, f), path.join('fesm2022', f)), + ); - // Copy all type definitions into the package, preserving the sub-path from the - // owning package. e.g. a file like `packages/animations/browser/__index.d.ts` will - // end up in `browser/index.d.ts` - typeDefinitions.forEach((f) => copyFile(f.path, getTypingOutputRelativePath(f))); + // Copy all dts files (and their potential shared chunks) into the package output. + const dtsFiles = globSync('**/*', {cwd: metadata.dtsBundlesOut.path}); + dtsFiles.forEach((f) => + // TODO(devversion): Put all types under `/types/` folder. Breaking change in v20. + copyFile(path.join(metadata.dtsBundlesOut.path, f), f), + ); for (const file of staticFiles) { // We copy all files into the package output while preserving the sub-path from @@ -282,7 +272,7 @@ function main(args: string[]): void { } const fesm2022RelativeOutPath = entryPointInfo.fesm2022RelativePath; - const typingsRelativeOutPath = getTypingOutputRelativePath(entryPointInfo.typings); + const typingsRelativeOutPath = entryPointInfo.dtsBundleRelativePath; packageJson.module = normalizePath( path.relative(packageJsonContainingDir, fesm2022RelativeOutPath), @@ -321,7 +311,7 @@ function main(args: string[]): void { ? `./${getEntryPointSubpath(moduleName)}` : '.'; const fesm2022OutRelativePath = entryPoint.fesm2022RelativePath; - const typesOutRelativePath = getTypingOutputRelativePath(entryPoint.typings); + const typesOutRelativePath = entryPoint.dtsBundleRelativePath; // Insert the export mapping for the entry-point. We set `default` to the FESM 2022 // output, and also set the `types` condition which will be respected by TS 4.5. diff --git a/packages/bazel/src/ng_package/rollup.config.js b/packages/bazel/src/ng_package/rollup.config.js index e819735986f..f39465b603d 100644 --- a/packages/bazel/src/ng_package/rollup.config.js +++ b/packages/bazel/src/ng_package/rollup.config.js @@ -13,6 +13,7 @@ const {nodeResolve} = require('@rollup/plugin-node-resolve'); const commonjs = require('@rollup/plugin-commonjs'); const MagicString = require('magic-string'); const sourcemaps = require('rollup-plugin-sourcemaps'); +const {dts} = require('rollup-plugin-dts'); const path = require('path'); const fs = require('fs'); @@ -28,6 +29,7 @@ const moduleMappings = TMPL_module_mappings; const nodeModulesRoot = 'TMPL_node_modules_root'; const entrypointMetadata = JSON.parse(`TMPL_metadata`); const sideEffectEntryPoints = JSON.parse('TMPL_side_effect_entrypoints'); +const dtsMode = TMPL_dts_mode; log_verbose(`running with cwd: ${process.cwd()} @@ -36,6 +38,7 @@ log_verbose(`running with bannerFile: ${bannerFile} moduleMappings: ${JSON.stringify(moduleMappings)} nodeModulesRoot: ${nodeModulesRoot} + dtsMode: ${dtsMode} `); function fileExists(filePath) { @@ -154,23 +157,18 @@ const stripBannerPlugin = { }, }; -const plugins = [ - {name: 'resolveBazel', resolveId: resolveBazel}, - nodeResolve({ - mainFields: ['es2020', 'es2015', 'module', 'browser'], - jail: process.cwd(), - customResolveOptions: {moduleDirectory: nodeModulesRoot}, - }), - stripBannerPlugin, - commonjs({ignoreGlobal: true}), - sourcemaps(), -]; +const plugins = [stripBannerPlugin]; // Rollup input option: // https://rollupjs.org/configuration-options/#input. const input = {}; for (const info of Object.values(entrypointMetadata)) { - input[info.fesm2022RelativePath.replace(/\.mjs$/, '').replace('fesm2022/', '')] = info.index.path; + const entryFile = dtsMode ? info.typingsEntryPoint.path : info.index.path; + const chunkName = dtsMode + ? info.dtsBundleRelativePath.replace(/\.d\.ts$/, '') + : info.fesm2022RelativePath.replace(/\.mjs$/, '').replace('fesm2022/', ''); + + input[chunkName] = entryFile; } const sideEffectFileMatchers = sideEffectEntryPoints.map((entryPointModule) => { @@ -182,6 +180,24 @@ const sideEffectFileMatchers = sideEffectEntryPoints.map((entryPointModule) => { return (file) => file.startsWith(`${entryPointDir}/`); }); +if (dtsMode) { + plugins.push(dts()); +} else { + plugins.push( + {name: 'resolveBazel', resolveId: resolveBazel}, + nodeResolve({ + mainFields: ['es2020', 'es2015', 'module', 'browser'], + jail: process.cwd(), + customResolveOptions: {moduleDirectory: nodeModulesRoot}, + }), + commonjs({ignoreGlobal: true}), + sourcemaps(), + ); +} + +const outputExtension = dtsMode ? 'd.ts' : 'mjs'; + +/** @type {import('rollup').RollupOptions} */ const config = { input, plugins, @@ -198,9 +214,10 @@ const config = { }, }, output: { + sourcemap: !dtsMode, banner: bannerContent, - entryFileNames: '[name].mjs', - chunkFileNames: '[name]-[hash].mjs', + entryFileNames: `[name].${outputExtension}`, + chunkFileNames: `[name]-[hash].${outputExtension}`, }, }; diff --git a/packages/bazel/src/ng_package/rollup/BUILD.bazel b/packages/bazel/src/ng_package/rollup/BUILD.bazel index 0a252453622..b38f313d131 100644 --- a/packages/bazel/src/ng_package/rollup/BUILD.bazel +++ b/packages/bazel/src/ng_package/rollup/BUILD.bazel @@ -15,6 +15,7 @@ nodejs_binary( "@npm//@rollup/plugin-node-resolve", "@npm//magic-string", "@npm//rollup", + "@npm//rollup-plugin-dts", "@npm//rollup-plugin-sourcemaps", "@npm//typescript", ], diff --git a/packages/bazel/src/types_bundle/BUILD.bazel b/packages/bazel/src/types_bundle/BUILD.bazel deleted file mode 100644 index d93e947509f..00000000000 --- a/packages/bazel/src/types_bundle/BUILD.bazel +++ /dev/null @@ -1,33 +0,0 @@ -# BEGIN-DEV-ONLY - -load("//tools:defaults.bzl", "nodejs_binary", "ts_library") - -package(default_visibility = ["//packages:__subpackages__"]) - -ts_library( - name = "lib", - srcs = [ - "index.ts", - ], - deps = [ - "@npm//@bazel/worker", - "@npm//@microsoft/api-extractor", - "@npm//@types/node", - ], -) - -nodejs_binary( - name = "types_bundler", - data = [":lib"], - entry_point = ":index.ts", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package_assets", - srcs = [ - "BUILD.bazel", - "index.bzl", - ], -) -# END-DEV-ONLY diff --git a/packages/bazel/src/types_bundle/index.bzl b/packages/bazel/src/types_bundle/index.bzl deleted file mode 100644 index e52a9dd1fcd..00000000000 --- a/packages/bazel/src/types_bundle/index.bzl +++ /dev/null @@ -1,115 +0,0 @@ -load("@build_bazel_rules_nodejs//:providers.bzl", "DeclarationInfo", "declaration_info") - -def bundle_type_declaration( - ctx, - entry_point, - output_file, - types, - license_banner_file = None): - """Rule helper for registering a bundle type declaration action.""" - - # Microsoft's API extractor requires a `package.json` file to be provided. We - # auto-generate such a file since such a file needs to exist on disk. - package_json = ctx.actions.declare_file( - "__api-extractor.json", - sibling = output_file, - ) - ctx.actions.write(package_json, content = json.encode({ - "name": "auto-generated-for-api-extractor", - })) - - inputs = [package_json] - args = ctx.actions.args() - args.add(entry_point.path) - args.add(output_file.path) - args.add(package_json.path) - - if license_banner_file: - args.add(license_banner_file.path) - inputs.append(license_banner_file) - - # Pass arguments using a flag-file prefixed with `@`. This is - # a requirement for build action arguments in persistent workers. - # https://docs.bazel.build/versions/main/creating-workers.html#work-action-requirements. - args.use_param_file("@%s", use_always = True) - args.set_param_file_format("multiline") - - ctx.actions.run( - mnemonic = "BundlingTypes", - inputs = depset(inputs, transitive = [types]), - outputs = [output_file], - executable = ctx.executable._types_bundler_bin, - arguments = [args], - execution_requirements = {"supports-workers": "1"}, - progress_message = "Bundling types (%s)" % entry_point.short_path, - ) - -def _types_bundle_impl(ctx): - """Implementation of the "types_bundle" rule.""" - - output = ctx.outputs.output_name - entry_point_short_path = "%s/%s" % (ctx.label.package, ctx.attr.entry_point) - entry_point_file = None - direct_types_depsets = [] - type_depsets = [] - - for dep in ctx.attr.deps: - if DeclarationInfo in dep: - direct_types_depsets.append(dep[DeclarationInfo].declarations) - type_depsets.append(dep[DeclarationInfo].transitive_declarations) - - types = depset(transitive = type_depsets) - - # Note: Using `to_list()` is expensive but we cannot get around this here as - # we need to find a reference to the entry-point. We only care about direct - # types though, so the performance impact is rather low. - direct_types = depset(transitive = direct_types_depsets) - direct_types_list = direct_types.to_list() - - # Iterate through the types and look for the entry point `File`. - for file in direct_types_list: - if file.short_path == entry_point_short_path: - entry_point_file = file - break - - if entry_point_file == None: - fail("Could not find entry-point file: %s" % entry_point_short_path) - - bundle_type_declaration( - ctx = ctx, - entry_point = entry_point_file, - output_file = output, - types = types, - ) - - output_depset = depset([output]) - - return [ - DefaultInfo(files = output_depset), - declaration_info(output_depset), - ] - -types_bundle = rule( - implementation = _types_bundle_impl, - attrs = { - "deps": attr.label_list( - doc = "List of targets which are required for bundling the entry-point.", - providers = [DeclarationInfo], - mandatory = True, - allow_files = True, - ), - "output_name": attr.output( - doc = "Output file name for the types bundle.", - mandatory = True, - ), - "entry_point": attr.string( - doc = "Package-relative path to the entry-point type file which should be bundled.", - mandatory = True, - ), - "_types_bundler_bin": attr.label( - default = "//packages/bazel/src/types_bundle:types_bundler", - cfg = "exec", - executable = True, - ), - }, -) diff --git a/packages/bazel/src/types_bundle/index.ts b/packages/bazel/src/types_bundle/index.ts deleted file mode 100644 index 2352c85c941..00000000000 --- a/packages/bazel/src/types_bundle/index.ts +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @license - * Copyright Google LLC 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.dev/license - */ - -/// -/// - -import {runAsWorker, runWorkerLoop} from '@bazel/worker'; -import { - Extractor, - ExtractorConfig, - ExtractorMessage, - IConfigFile, - IExtractorConfigPrepareOptions, -} from '@microsoft/api-extractor'; -import * as fs from 'fs'; -import * as path from 'path'; - -/** - * Bundles the specified entry-point and writes the output `d.ts` bundle to the specified - * output path. An optional license banner can be provided to be added to the bundle output. - */ -export async function runMain({ - entryPointExecpath, - outputExecpath, - packageJsonExecpath, - licenseBannerExecpath, -}: { - entryPointExecpath: string; - outputExecpath: string; - packageJsonExecpath: string; - licenseBannerExecpath: string | undefined; -}): Promise { - const configObject: IConfigFile = { - compiler: { - overrideTsconfig: - // We disable automatic `@types` resolution as this throws-off API reports - // when the API test is run outside sandbox. Instead we expect a list of - // hard-coded types that should be included. This works in non-sandbox too. - {files: [entryPointExecpath], compilerOptions: {types: [], lib: ['es2020', 'dom']}}, - }, - // The execroot is the working directory and it will contain all input files. - projectFolder: process.cwd(), - mainEntryPointFilePath: path.resolve(entryPointExecpath), - newlineKind: 'lf', - apiReport: {enabled: false, reportFileName: 'invalid'}, - docModel: {enabled: false}, - tsdocMetadata: {enabled: false}, - dtsRollup: { - enabled: true, - untrimmedFilePath: path.resolve(outputExecpath), - }, - }; - - // Resolve to an absolute path from the current working directory (i.e. execroot). - const packageJsonFullPath = path.resolve(packageJsonExecpath); - const options: IExtractorConfigPrepareOptions = { - configObject, - packageJsonFullPath, - packageJson: undefined, - configObjectFullPath: undefined, - }; - - const extractorConfig = ExtractorConfig.prepare(options); - const {succeeded} = Extractor.invoke(extractorConfig, { - messageCallback: handleApiExtractorMessage, - }); - - if (!succeeded) { - throw new Error('Type bundling failed. See error above.'); - } - - let bundleOutput = fs.readFileSync(outputExecpath, 'utf8'); - - // Strip AMD module directive comments. - bundleOutput = stripAmdModuleDirectiveComments(bundleOutput); - - // Remove license comments as these are not deduped in API-extractor. - bundleOutput = bundleOutput.replace(/(\/\*\*\s+\*\s\@license(((?!\*\/).|\s)*)\*\/)/gm, ''); - - // Add license banner if provided. - if (licenseBannerExecpath) { - bundleOutput = `${fs.readFileSync(licenseBannerExecpath, 'utf8')}\n\n` + bundleOutput; - } - - // Re-write the output file. - fs.writeFileSync(outputExecpath, bundleOutput); -} - -/** - * Strip the named AMD module for compatibility from Bazel-generated type - * definitions. These may end up in the generated type bundles. - * - * e.g. `/// ` should be stripped. - - */ -function stripAmdModuleDirectiveComments(content: string): string { - return content.replace(/^\/\/\/ [\r\n]+/gm, ''); -} - -/** - * Handles logging messages from API extractor. - * - * Certain info messages should be omitted and other messages should be printed - * to stderr to avoid worker protocol conflicts. - */ -function handleApiExtractorMessage(msg: ExtractorMessage): void { - msg.handled = true; - - if (msg.messageId === 'console-compiler-version-notice' || msg.messageId === 'console-preamble') { - return; - } - - if (msg.logLevel !== 'verbose' && msg.logLevel !== 'none') { - console.error(msg.text); - } -} - -/** Runs one build using the specified build action command line arguments. */ -async function runOneBuild(args: string[]): Promise { - const [entryPointExecpath, outputExecpath, packageJsonExecpath, licenseBannerExecpath] = args; - - try { - await runMain({entryPointExecpath, outputExecpath, packageJsonExecpath, licenseBannerExecpath}); - return true; - } catch (e) { - console.error(e); - return false; - } -} - -// Entry-point. -const processArgs = process.argv.slice(2); - -if (runAsWorker(processArgs)) { - runWorkerLoop(runOneBuild); -} else { - // In non-worker mode we need to manually read the flag file and omit - // the leading `@` that is added as part of the worker requirements. - const flagFile = processArgs[0].substring(1); - const args = fs.readFileSync(flagFile, 'utf8').split('\n'); - - runOneBuild(args).then((success) => { - if (!success) { - process.exitCode = 1; - } - }); -} diff --git a/packages/bazel/test/ng_package/core_package.spec.ts b/packages/bazel/test/ng_package/core_package.spec.ts index f850d962947..5ef6fd19e74 100644 --- a/packages/bazel/test/ng_package/core_package.spec.ts +++ b/packages/bazel/test/ng_package/core_package.spec.ts @@ -107,7 +107,7 @@ describe('@angular/core ng_package', () => { expect(shx.cat('index.d.ts')).not.toContain(' { - expect(shx.cat('index.d.ts')).toContain('export declare'); + expect(shx.cat('index.d.ts')).toContain('export '); }); // The `r3_symbols` file was needed for View Engine ngcc processing. @@ -140,7 +140,7 @@ describe('@angular/core ng_package', () => { describe('typings', () => { const typingsFile = p`testing/index.d.ts`; it('should have a typings file', () => { - expect(shx.cat(typingsFile)).toContain('export declare'); + expect(shx.cat(typingsFile)).toContain('export '); }); }); diff --git a/packages/bazel/test/ng_package/example_package.golden b/packages/bazel/test/ng_package/example_package.golden index c2cc1288d4e..7cba282e2a6 100644 --- a/packages/bazel/test/ng_package/example_package.golden +++ b/packages/bazel/test/ng_package/example_package.golden @@ -14,12 +14,13 @@ fesm2022 fesm2022/example.mjs.map fesm2022/imports.mjs fesm2022/imports.mjs.map - fesm2022/index-1e1ea2d8.mjs - fesm2022/index-1e1ea2d8.mjs.map + fesm2022/index-D4QyjRX7.mjs + fesm2022/index-D4QyjRX7.mjs.map fesm2022/secondary.mjs fesm2022/secondary.mjs.map imports imports/index.d.ts +index.d-peWegT6k.d.ts index.d.ts logo.png package.json @@ -76,16 +77,15 @@ License: MIT * License: MIT */ - import * as i0 from '@angular/core'; -export declare class A11yModule { +declare class A11yModule { static ɵfac: i0.ɵɵFactoryDeclaration; static ɵmod: i0.ɵɵNgModuleDeclaration; static ɵinj: i0.ɵɵInjectorDeclaration; } -export { } +export { A11yModule }; --- arbitrary-npm-package-main.js --- @@ -176,7 +176,7 @@ export { MyModule }; * License: MIT */ -export { s as sharedBetweenEntryPoints } from './index-1e1ea2d8.mjs'; +export { s as sharedBetweenEntryPoints } from './index-D4QyjRX7.mjs'; import * as i0 from '@angular/core'; import { Injectable } from '@angular/core'; @@ -206,7 +206,7 @@ export { MyService }; //# sourceMappingURL=imports.mjs.map ---- fesm2022/index-1e1ea2d8.mjs --- +--- fesm2022/index-D4QyjRX7.mjs --- /** * @license Angular v0.0.0 @@ -217,7 +217,7 @@ export { MyService }; const sharedBetweenEntryPoints = 'This export is shared between entry-points'; export { sharedBetweenEntryPoints as s }; -//# sourceMappingURL=index-1e1ea2d8.mjs.map +//# sourceMappingURL=index-D4QyjRX7.mjs.map --- fesm2022/secondary.mjs --- @@ -228,7 +228,7 @@ export { sharedBetweenEntryPoints as s }; * License: MIT */ -export { s as sharedBetweenEntryPoints } from './index-1e1ea2d8.mjs'; +export { s as sharedBetweenEntryPoints } from './index-D4QyjRX7.mjs'; import * as i0 from '@angular/core'; import { NgModule } from '@angular/core'; @@ -255,24 +255,35 @@ export { SecondaryModule, a }; * License: MIT */ - import * as i0 from '@angular/core'; +export { s as sharedBetweenEntryPoints } from '../index.d-peWegT6k.js'; declare class MySecondService { static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } -export declare class MyService { +declare class MyService { secondService: MySecondService; constructor(secondService: MySecondService); static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } -export declare const sharedBetweenEntryPoints = "This export is shared between entry-points"; +export { MyService }; -export { } + +--- index.d-peWegT6k.d.ts --- + +/** + * @license Angular v0.0.0 + * (c) 2010-2025 Google LLC. https://angular.io/ + * License: MIT + */ + +declare const sharedBetweenEntryPoints = "This export is shared between entry-points"; + +export { sharedBetweenEntryPoints as s }; --- index.d.ts --- @@ -283,16 +294,15 @@ export { } * License: MIT */ - import * as i0 from '@angular/core'; -export declare class MyModule { +declare class MyModule { static ɵfac: i0.ɵɵFactoryDeclaration; static ɵmod: i0.ɵɵNgModuleDeclaration; static ɵinj: i0.ɵɵInjectorDeclaration; } -export { } +export { MyModule }; --- logo.png --- @@ -339,20 +349,17 @@ export { } * License: MIT */ - +export { s as sharedBetweenEntryPoints } from '../index.d-peWegT6k.js'; import * as i0 from '@angular/core'; -export declare const a = 1; - -export declare class SecondaryModule { +declare class SecondaryModule { static ɵfac: i0.ɵɵFactoryDeclaration; static ɵmod: i0.ɵɵNgModuleDeclaration; static ɵinj: i0.ɵɵInjectorDeclaration; } +declare const a = 1; -export declare const sharedBetweenEntryPoints = "This export is shared between entry-points"; - -export { } +export { SecondaryModule, a }; --- some-file.txt --- diff --git a/packages/bazel/test/ng_package/example_with_ts_library_package.golden b/packages/bazel/test/ng_package/example_with_ts_library_package.golden index e4f3a76cd2e..cdde6e5b40a 100644 --- a/packages/bazel/test/ng_package/example_with_ts_library_package.golden +++ b/packages/bazel/test/ng_package/example_with_ts_library_package.golden @@ -114,11 +114,9 @@ export { dispatchFakeEvent }; * License: MIT */ +declare const VERSION = "0.0.0"; - -export declare const VERSION = "0.0.0"; - -export { } +export { VERSION }; --- package.json --- @@ -157,18 +155,16 @@ export { } * License: MIT */ - import * as i0 from '@angular/core'; -export declare const a = 1; - -export declare class PortalModule { +declare class PortalModule { static ɵfac: i0.ɵɵFactoryDeclaration; static ɵmod: i0.ɵɵNgModuleDeclaration; static ɵinj: i0.ɵɵInjectorDeclaration; } +declare const a = 1; -export { } +export { PortalModule, a }; --- utils/index.d.ts --- @@ -179,9 +175,7 @@ export { } * License: MIT */ +declare function dispatchFakeEvent(el: HTMLElement, ev: Event): void; - -export declare function dispatchFakeEvent(el: HTMLElement, ev: Event): void; - -export { } +export { dispatchFakeEvent }; diff --git a/packages/bazel/test/types_bundle/BUILD.bazel b/packages/bazel/test/types_bundle/BUILD.bazel deleted file mode 100644 index 9870e22b6c4..00000000000 --- a/packages/bazel/test/types_bundle/BUILD.bazel +++ /dev/null @@ -1,29 +0,0 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test") -load("//packages/bazel/src/types_bundle:index.bzl", "types_bundle") -load("//tools:defaults.bzl", "ts_library") - -package(default_testonly = True) - -ts_library( - name = "test_transitive_lib", - srcs = ["transitive_fixture.ts"], -) - -ts_library( - name = "test_lib", - srcs = ["bundle_entry.ts"], - deps = [":test_transitive_lib"], -) - -types_bundle( - name = "bundled_types", - entry_point = "bundle_entry.d.ts", - output_name = "output_index.d.ts", - deps = [":test_lib"], -) - -generated_file_test( - name = "test", - src = "expected_types_bundle.d.ts", - generated = ":bundled_types", -) diff --git a/packages/bazel/test/types_bundle/bundle_entry.ts b/packages/bazel/test/types_bundle/bundle_entry.ts deleted file mode 100644 index b58493513cd..00000000000 --- a/packages/bazel/test/types_bundle/bundle_entry.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @license - * Copyright Google LLC 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.dev/license - */ - -export {transitiveExport} from './transitive_fixture'; - -export const hello = 1; diff --git a/packages/bazel/test/types_bundle/expected_types_bundle.d.ts b/packages/bazel/test/types_bundle/expected_types_bundle.d.ts deleted file mode 100644 index 4588d4aa1d6..00000000000 --- a/packages/bazel/test/types_bundle/expected_types_bundle.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare const hello = 1; - - -export declare const transitiveExport = "transitive"; - -export { } diff --git a/packages/bazel/test/types_bundle/transitive_fixture.ts b/packages/bazel/test/types_bundle/transitive_fixture.ts deleted file mode 100644 index c75db6e5675..00000000000 --- a/packages/bazel/test/types_bundle/transitive_fixture.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @license - * Copyright Google LLC 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.dev/license - */ - -export const transitiveExport = 'transitive'; diff --git a/packages/compiler-cli/src/ngtsc/annotations/common/src/evaluation.ts b/packages/compiler-cli/src/ngtsc/annotations/common/src/evaluation.ts index 4f302a5bd0f..7940ef15dc2 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/common/src/evaluation.ts +++ b/packages/compiler-cli/src/ngtsc/annotations/common/src/evaluation.ts @@ -15,7 +15,7 @@ import {EnumValue, PartialEvaluator, ResolvedValue} from '../../../partial_evalu import {ClassDeclaration, Decorator} from '../../../reflection'; import {createValueHasWrongTypeError} from './diagnostics'; -import {isAngularCoreReference, unwrapExpression} from './util'; +import {isAngularCoreReferenceWithPotentialAliasing, unwrapExpression} from './util'; export function resolveEnumValue( evaluator: PartialEvaluator, @@ -30,7 +30,7 @@ export function resolveEnumValue( const value = evaluator.evaluate(expr) as any; if ( value instanceof EnumValue && - isAngularCoreReference(value.enumRef, enumSymbolName, isCore) + isAngularCoreReferenceWithPotentialAliasing(value.enumRef, enumSymbolName, isCore) ) { resolved = value.resolved as number; } else { diff --git a/packages/compiler-cli/src/ngtsc/annotations/common/src/util.ts b/packages/compiler-cli/src/ngtsc/annotations/common/src/util.ts index e08c8d0c143..c366c386967 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/common/src/util.ts +++ b/packages/compiler-cli/src/ngtsc/annotations/common/src/util.ts @@ -107,13 +107,31 @@ export function isAngularCore(decorator: Decorator): decorator is Decorator & {i return decorator.import !== null && decorator.import.from === CORE_MODULE; } -export function isAngularCoreReference( +/** + * This function is used for verifying that a given reference is declared + * inside `@angular/core` and corresponds to the given symbol name. + * + * In some cases, due to the compiler face duplicating many symbols as + * an independent bridge between core and the compiler, the dts bundler may + * decide to alias declarations in the `.d.ts`, to avoid conflicts. + * + * e.g. + * + * ``` + * declare enum ViewEncapsulation {} // from the facade + * declare enum ViewEncapsulation$1 {} // the real one exported to users. + * ``` + * + * This function accounts for such potential re-namings. + */ +export function isAngularCoreReferenceWithPotentialAliasing( reference: Reference, symbolName: string, isCore: boolean, ): boolean { return ( - (reference.ownedByModuleGuess === CORE_MODULE || isCore) && reference.debugName === symbolName + (reference.ownedByModuleGuess === CORE_MODULE || isCore) && + reference.debugName?.replace(/\$\d+$/, '') === symbolName ); } @@ -233,7 +251,10 @@ export function tryUnwrapForwardRef( */ export function createForwardRefResolver(isCore: boolean): ForeignFunctionResolver { return (fn, callExpr, resolve, unresolvable) => { - if (!isAngularCoreReference(fn, 'forwardRef', isCore) || callExpr.arguments.length !== 1) { + if ( + !isAngularCoreReferenceWithPotentialAliasing(fn, 'forwardRef', isCore) || + callExpr.arguments.length !== 1 + ) { return unresolvable; } const expanded = expandForwardRef(callExpr.arguments[0]); diff --git a/packages/language-service/test/references_and_rename_spec.ts b/packages/language-service/test/references_and_rename_spec.ts index cc6afef54b0..b125cad0ad9 100644 --- a/packages/language-service/test/references_and_rename_spec.ts +++ b/packages/language-service/test/references_and_rename_spec.ts @@ -1708,7 +1708,7 @@ describe('find references and rename locations', () => { it('should be able to request references', () => { const refs = getReferencesAtPosition(file)!; - expect(refs.length).toBe(6); + expect(refs.length).toBe(7); assertTextSpans(refs, ['
', 'NgForOf']); assertFileNames(refs, ['index.d.ts', 'app.ts']); }); diff --git a/packages/localize/BUILD.bazel b/packages/localize/BUILD.bazel index 1282039b541..762e7ffcec0 100644 --- a/packages/localize/BUILD.bazel +++ b/packages/localize/BUILD.bazel @@ -1,4 +1,3 @@ -load("//packages/bazel:index.bzl", "types_bundle") load("//tools:defaults.bzl", "api_golden_test_npm_package", "generate_api_docs", "ng_package", "ts_library") package(default_visibility = ["//visibility:public"]) @@ -18,19 +17,11 @@ ts_library( ], ) -types_bundle( - name = "api_type_definitions", - entry_point = "localize.d.ts", - output_name = "localize/index.d.ts", - deps = [":localize"], -) - ng_package( name = "npm_package", package_name = "@angular/localize", srcs = [ "package.json", - ":api_type_definitions", ], nested_packages = [ "//packages/localize/schematics:npm_package", @@ -39,16 +30,6 @@ ng_package( side_effect_entry_points = [ "@angular/localize/init", ], - skip_type_bundling = [ - # For the primary entry-point we disable automatic type bundling because API extractor - # does not properly handle module augmentation. - # To workaround this issue, type bundling is done as a separate step for all types - # except the main `index.d.ts` file which contains the module augmentation. The main - # file is reference in the package.json and also imports the bundle types. The bundled - # types are created via `api_type_definitions` above. - # TODO: Remove once https://github.com/microsoft/rushstack/issues/2090 is solved. - "", - ], tags = [ "release-with-framework", ], diff --git a/packages/localize/index.ts b/packages/localize/index.ts index 00a01383302..557665796be 100644 --- a/packages/localize/index.ts +++ b/packages/localize/index.ts @@ -6,17 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -// DO NOT ADD public exports to this file. -// The public API exports are specified in the `./localize` module, which is checked by the -// public_api_guard rules +export {clearTranslations, loadTranslations} from './src/translate'; +export {MessageId, TargetMessage} from './src/utils'; -export * from './localize'; +// Exports that are not part of the public API +export * from './private'; -// The global declaration must be in the index.d.ts as otherwise it will not be picked up when used -// with -// /// - -import {ɵLocalizeFn} from './localize'; +import {ɵLocalizeFn} from './private'; // `declare global` allows us to escape the current module and place types on the global namespace declare global { diff --git a/packages/localize/localize.ts b/packages/localize/localize.ts deleted file mode 100644 index cdd55db2adf..00000000000 --- a/packages/localize/localize.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @license - * Copyright Google LLC 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.dev/license - */ - -// This file contains the public API of the `@angular/localize` entry-point - -export {clearTranslations, loadTranslations} from './src/translate'; -export {MessageId, TargetMessage} from './src/utils'; - -// Exports that are not part of the public API -export * from './private'; diff --git a/packages/localize/test/translate_spec.ts b/packages/localize/test/translate_spec.ts index 332c30099cd..cb9587937ab 100644 --- a/packages/localize/test/translate_spec.ts +++ b/packages/localize/test/translate_spec.ts @@ -8,7 +8,7 @@ // Ensure that `$localize` is loaded to the global scope. import '@angular/localize/init'; -import {clearTranslations, loadTranslations} from '../localize'; +import {clearTranslations, loadTranslations} from '../index'; import {computeMsgId, MessageId, TargetMessage} from '../src/utils'; describe('$localize tag with translations', () => { diff --git a/packages/platform-server/init/index.ts b/packages/platform-server/init/index.ts index 581d7f4a3f8..0c7898e6da8 100644 --- a/packages/platform-server/init/index.ts +++ b/packages/platform-server/init/index.ts @@ -6,9 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -// This file is not used to build this module. It is only used during editing -// by the TypeScript language service and during build for verifcation. `ngc` -// replaces this file with production index.ts when it rewrites private symbol -// names. +import './src/init'; -export * from './public_api'; +// This ensures this is still a module and can be imported. +export const ɵɵmoduleMarker = true; diff --git a/packages/platform-server/init/public_api.ts b/packages/platform-server/init/public_api.ts deleted file mode 100644 index 87c4282af1e..00000000000 --- a/packages/platform-server/init/public_api.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @license - * Copyright Google LLC 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.dev/license - */ - -/** - * @module - * @description - * Entry point for all public APIs of this package. - */ -export * from './src/init'; diff --git a/yarn.lock b/yarn.lock index 56821d8d0b7..2331c7a3d4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -318,7 +318,6 @@ "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#ce04ec6cf7604014191821a637e60964a1a3bb4a": version "0.0.0-2670abf637fa155971cdd1f7e570a7f234922a65" - uid ce04ec6cf7604014191821a637e60964a1a3bb4a resolved "https://github.com/angular/dev-infra-private-build-tooling-builds.git#ce04ec6cf7604014191821a637e60964a1a3bb4a" dependencies: "@angular/benchpress" "0.3.0" @@ -476,7 +475,6 @@ "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#252589f7bc8fe6ca13b31e02d506ec52e826cdd2": version "0.0.0-0ad6a370f70638e785d6ef1f90dc6ede34684a47" - uid "252589f7bc8fe6ca13b31e02d506ec52e826cdd2" resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#252589f7bc8fe6ca13b31e02d506ec52e826cdd2" dependencies: "@google-cloud/spanner" "7.18.1" @@ -549,7 +547,7 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.6.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.24.2", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -3321,6 +3319,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz#661a45a4709c70e59e596ec78daa9cb8b8d27604" integrity sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA== +"@rollup/rollup-android-arm-eabi@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz#e1d7700735f7e8de561ef7d1fa0362082a180c43" + integrity sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ== + "@rollup/rollup-android-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad" @@ -3336,6 +3339,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz#128fe8dd510d880cf98b4cb6c7add326815a0c4b" integrity sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg== +"@rollup/rollup-android-arm64@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz#fa6cdfb1fc9e2c8e227a7f35d524d8f7f90cf4db" + integrity sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA== + "@rollup/rollup-darwin-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23" @@ -3351,6 +3359,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz#363467bc49fd0b1e17075798ac8e9ad1e1e29535" integrity sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ== +"@rollup/rollup-darwin-arm64@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz#6da5a1ddc4f11d4a7ae85ab443824cb6bf614e30" + integrity sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q== + "@rollup/rollup-darwin-x64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d" @@ -3366,6 +3379,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz#c2fe3d85fffe47f0ed0f076b3563ada22c8af19c" integrity sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q== +"@rollup/rollup-darwin-x64@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz#25b74ce2d8d3f9ea8e119b01384d44a1c0a0d3ae" + integrity sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q== + "@rollup/rollup-freebsd-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003" @@ -3381,6 +3399,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz#d95bd8f6eaaf829781144fc8bd2d5d71d9f6a9f5" integrity sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw== +"@rollup/rollup-freebsd-arm64@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz#be3d39e3441df5d6e187c83d158c60656c82e203" + integrity sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ== + "@rollup/rollup-freebsd-x64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360" @@ -3396,6 +3419,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz#c3576c6011656e4966ded29f051edec636b44564" integrity sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g== +"@rollup/rollup-freebsd-x64@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz#cd932d3ec679711efd65ca25821fb318e25b7ce4" + integrity sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw== + "@rollup/rollup-linux-arm-gnueabihf@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9" @@ -3411,6 +3439,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz#48c87d0dee4f8dc9591a416717f91b4a89d77e3d" integrity sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg== +"@rollup/rollup-linux-arm-gnueabihf@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz#d300b74c6f805474225632f185daaeae760ac2bb" + integrity sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg== + "@rollup/rollup-linux-arm-musleabihf@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b" @@ -3426,6 +3459,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz#f4c4e7c03a7767f2e5aa9d0c5cfbf5c0f59f2d41" integrity sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA== +"@rollup/rollup-linux-arm-musleabihf@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz#2caac622380f314c41934ed1e68ceaf6cc380cc3" + integrity sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A== + "@rollup/rollup-linux-arm64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528" @@ -3441,6 +3479,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz#1015c9d07a99005025d13b8622b7600029d0b52f" integrity sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw== +"@rollup/rollup-linux-arm64-gnu@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz#1ec841650b038cc15c194c26326483fd7ebff3e3" + integrity sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A== + "@rollup/rollup-linux-arm64-musl@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80" @@ -3456,6 +3499,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz#8f895eb5577748fc75af21beae32439626e0a14c" integrity sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A== +"@rollup/rollup-linux-arm64-musl@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz#2fc70a446d986e27f6101ea74e81746987f69150" + integrity sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg== + "@rollup/rollup-linux-loongarch64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e" @@ -3471,6 +3519,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz#c9cd5dbbdc6b3ca4dbeeb0337498cf31949004a0" integrity sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg== +"@rollup/rollup-linux-loongarch64-gnu@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz#561bd045cd9ce9e08c95f42e7a8688af8c93d764" + integrity sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g== + "@rollup/rollup-linux-powerpc64le-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc" @@ -3486,6 +3539,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz#7ebb5b4441faa17843a210f7d0583a20c93b40e4" integrity sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA== +"@rollup/rollup-linux-powerpc64le-gnu@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz#45d849a0b33813f33fe5eba9f99e0ff15ab5caad" + integrity sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA== + "@rollup/rollup-linux-riscv64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e" @@ -3501,6 +3559,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz#10f5d7349fbd2fe78f9e36ecc90aab3154435c8d" integrity sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg== +"@rollup/rollup-linux-riscv64-gnu@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz#78dde3e6fcf5b5733a97d0a67482d768aa1e83a5" + integrity sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g== + "@rollup/rollup-linux-s390x-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea" @@ -3516,6 +3579,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz#196347d2fa20593ab09d0b7e2589fb69bdf742c6" integrity sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ== +"@rollup/rollup-linux-s390x-gnu@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz#2e34835020f9e03dfb411473a5c2a0e8a9c5037b" + integrity sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw== + "@rollup/rollup-linux-x64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588" @@ -3531,6 +3599,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz#7193cbd8d128212b8acda37e01b39d9e96259ef8" integrity sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A== +"@rollup/rollup-linux-x64-gnu@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz#4f9774beddc6f4274df57ac99862eb23040de461" + integrity sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA== + "@rollup/rollup-linux-x64-musl@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01" @@ -3546,6 +3619,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz#29a6867278ca0420b891574cfab98ecad70c59d1" integrity sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA== +"@rollup/rollup-linux-x64-musl@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz#dfcff2c1aed518b3d23ccffb49afb349d74fb608" + integrity sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg== + "@rollup/rollup-win32-arm64-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52" @@ -3561,6 +3639,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz#89427dcac0c8e3a6d32b13a03a296a275d0de9a9" integrity sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q== +"@rollup/rollup-win32-arm64-msvc@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz#b0b37e2d77041e3aa772f519291309abf4c03a84" + integrity sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg== + "@rollup/rollup-win32-ia32-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e" @@ -3576,6 +3659,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz#ecb9711ba2b6d2bf6ee51265abe057ab90913deb" integrity sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w== +"@rollup/rollup-win32-ia32-msvc@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz#5b5a40e44a743ddc0e06b8e1b3982f856dc9ce0a" + integrity sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw== + "@rollup/rollup-win32-x64-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c" @@ -3591,6 +3679,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz#1973871850856ae72bc678aeb066ab952330e923" integrity sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw== +"@rollup/rollup-win32-x64-msvc@4.35.0": + version "4.35.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz#05f25dbc9981bee1ae6e713daab10397044a46ca" + integrity sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw== + "@rushstack/node-core-library@5.10.2": version "5.10.2" resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.10.2.tgz#8d12bc5bd9244ea57f441877246efb0a1b7b7df6" @@ -8067,8 +8160,7 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" "domino@https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af": - version "2.1.6+git" - uid "8f228f8862540c6ccd14f76b5a1d9bb5458618af" + version "2.1.6" resolved "https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af" dompurify@^3.2.1: @@ -12176,7 +12268,7 @@ madge@^8.0.0: ts-graphviz "^2.1.2" walkdir "^0.4.1" -magic-string@0.30.17, magic-string@^0.30.11, magic-string@^0.30.3, magic-string@^0.30.8: +magic-string@0.30.17, magic-string@^0.30.10, magic-string@^0.30.11, magic-string@^0.30.3, magic-string@^0.30.8: version "0.30.17" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== @@ -14939,6 +15031,15 @@ robust-predicates@^3.0.2: resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== +rollup-plugin-dts@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-6.1.1.tgz#46b33f4d1d7f4e66f1171ced9b282ac11a15a254" + integrity sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA== + dependencies: + magic-string "^0.30.10" + optionalDependencies: + "@babel/code-frame" "^7.24.2" + rollup-plugin-node-resolve@~4.2.3: version "4.2.4" resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz#7d370f8d6fd3031006a0032c38262dd9be3c6250" @@ -15030,6 +15131,34 @@ rollup@4.34.8: "@rollup/rollup-win32-x64-msvc" "4.34.8" fsevents "~2.3.2" +rollup@4.35.0: + version "4.35.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.35.0.tgz#76c95dba17a579df4c00c3955aed32aa5d4dc66d" + integrity sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.35.0" + "@rollup/rollup-android-arm64" "4.35.0" + "@rollup/rollup-darwin-arm64" "4.35.0" + "@rollup/rollup-darwin-x64" "4.35.0" + "@rollup/rollup-freebsd-arm64" "4.35.0" + "@rollup/rollup-freebsd-x64" "4.35.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.35.0" + "@rollup/rollup-linux-arm-musleabihf" "4.35.0" + "@rollup/rollup-linux-arm64-gnu" "4.35.0" + "@rollup/rollup-linux-arm64-musl" "4.35.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.35.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.35.0" + "@rollup/rollup-linux-riscv64-gnu" "4.35.0" + "@rollup/rollup-linux-s390x-gnu" "4.35.0" + "@rollup/rollup-linux-x64-gnu" "4.35.0" + "@rollup/rollup-linux-x64-musl" "4.35.0" + "@rollup/rollup-win32-arm64-msvc" "4.35.0" + "@rollup/rollup-win32-ia32-msvc" "4.35.0" + "@rollup/rollup-win32-x64-msvc" "4.35.0" + fsevents "~2.3.2" + rollup@^4.23.0, rollup@^4.30.1: version "4.34.9" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.9.tgz#e1eb397856476778aeb6ac2ac3d09b2ce177a558" @@ -15067,13 +15196,6 @@ rollup@~1.11.3: "@types/node" "^11.13.9" acorn "^6.1.1" -rollup@~2.79.0: - version "2.79.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.2.tgz#f150e4a5db4b121a21a747d762f701e5e9f49090" - integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== - optionalDependencies: - fsevents "~2.3.2" - roughjs@^4.6.6: version "4.6.6" resolved "https://registry.yarnpkg.com/roughjs/-/roughjs-4.6.6.tgz#1059f49a5e0c80dee541a005b20cc322b222158b"