@nx/angular 17.2.0-beta.9 → 17.2.0-canary.20231207-b8d24e6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/executors.d.ts +2 -1
  2. package/executors.js +2 -1
  3. package/executors.json +10 -5
  4. package/package.json +10 -10
  5. package/src/builders/dev-server/dev-server.impl.js +65 -24
  6. package/src/builders/utilities/module-federation.js +1 -1
  7. package/src/builders/webpack-browser/webpack-browser.impl.js +2 -1
  8. package/src/builders/webpack-server/webpack-server.impl.js +2 -1
  9. package/src/executors/application/application.impl.d.ts +9 -0
  10. package/src/executors/application/application.impl.js +28 -0
  11. package/src/executors/application/schema.d.ts +7 -0
  12. package/src/executors/application/schema.json +612 -0
  13. package/src/executors/browser-esbuild/browser-esbuild.impl.d.ts +2 -3
  14. package/src/executors/browser-esbuild/browser-esbuild.impl.js +15 -6
  15. package/src/executors/browser-esbuild/schema.d.ts +3 -1
  16. package/src/executors/browser-esbuild/schema.json +30 -0
  17. package/src/executors/module-federation-dev-server/lib/build-static-remotes.d.ts +7 -0
  18. package/src/executors/module-federation-dev-server/lib/build-static-remotes.js +49 -0
  19. package/src/executors/module-federation-dev-server/lib/index.d.ts +4 -0
  20. package/src/executors/module-federation-dev-server/lib/index.js +7 -0
  21. package/src/executors/module-federation-dev-server/lib/normalize-options.d.ts +2 -0
  22. package/src/executors/module-federation-dev-server/lib/normalize-options.js +20 -0
  23. package/src/executors/module-federation-dev-server/lib/start-dev-remotes.d.ts +9 -0
  24. package/src/executors/module-federation-dev-server/lib/start-dev-remotes.js +29 -0
  25. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.d.ts +12 -0
  26. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.js +48 -0
  27. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts +3 -0
  28. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +110 -0
  29. package/src/{builders → executors}/module-federation-dev-server/schema.json +9 -3
  30. package/src/executors/utilities/buildable-libs.d.ts +6 -0
  31. package/src/executors/{browser-esbuild/lib → utilities}/buildable-libs.js +3 -4
  32. package/src/executors/utilities/esbuild-extensions.d.ts +6 -0
  33. package/src/executors/utilities/esbuild-extensions.js +27 -0
  34. package/src/executors/utilities/module-loader.d.ts +15 -0
  35. package/src/executors/utilities/module-loader.js +52 -0
  36. package/src/executors/utilities/ng-compiler-cli.d.ts +0 -14
  37. package/src/executors/utilities/ng-compiler-cli.js +3 -23
  38. package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.d.ts +0 -5
  39. package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.js +0 -232
  40. package/src/executors/browser-esbuild/lib/buildable-libs.d.ts +0 -9
  41. /package/src/{builders → executors}/module-federation-dev-server/schema.d.ts +0 -0
package/executors.d.ts CHANGED
@@ -1,11 +1,12 @@
1
- export * from './src/builders/module-federation-dev-server/module-federation-dev-server.impl';
2
1
  export * from './src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl';
3
2
  export * from './src/builders/webpack-browser/webpack-browser.impl';
4
3
  export * from './src/builders/webpack-server/webpack-server.impl';
4
+ export * from './src/executors/module-federation-dev-server/module-federation-dev-server.impl';
5
5
  export * from './src/executors/delegate-build/delegate-build.impl';
6
6
  export * from './src/executors/ng-packagr-lite/ng-packagr-lite.impl';
7
7
  export * from './src/executors/package/package.impl';
8
8
  export * from './src/executors/browser-esbuild/browser-esbuild.impl';
9
+ export * from './src/executors/application/application.impl';
9
10
  import { executeDevServerBuilder } from './src/builders/dev-server/dev-server.impl';
10
11
  export {
11
12
  /**
package/executors.js CHANGED
@@ -2,14 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.executeDevServerBuilder = exports.executeWebpackDevServerBuilder = void 0;
4
4
  const tslib_1 = require("tslib");
5
- tslib_1.__exportStar(require("./src/builders/module-federation-dev-server/module-federation-dev-server.impl"), exports);
6
5
  tslib_1.__exportStar(require("./src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl"), exports);
7
6
  tslib_1.__exportStar(require("./src/builders/webpack-browser/webpack-browser.impl"), exports);
8
7
  tslib_1.__exportStar(require("./src/builders/webpack-server/webpack-server.impl"), exports);
8
+ tslib_1.__exportStar(require("./src/executors/module-federation-dev-server/module-federation-dev-server.impl"), exports);
9
9
  tslib_1.__exportStar(require("./src/executors/delegate-build/delegate-build.impl"), exports);
10
10
  tslib_1.__exportStar(require("./src/executors/ng-packagr-lite/ng-packagr-lite.impl"), exports);
11
11
  tslib_1.__exportStar(require("./src/executors/package/package.impl"), exports);
12
12
  tslib_1.__exportStar(require("./src/executors/browser-esbuild/browser-esbuild.impl"), exports);
13
+ tslib_1.__exportStar(require("./src/executors/application/application.impl"), exports);
13
14
  const dev_server_impl_1 = require("./src/builders/dev-server/dev-server.impl");
14
15
  Object.defineProperty(exports, "executeWebpackDevServerBuilder", { enumerable: true, get: function () { return dev_server_impl_1.executeDevServerBuilder; } });
15
16
  Object.defineProperty(exports, "executeDevServerBuilder", { enumerable: true, get: function () { return dev_server_impl_1.executeDevServerBuilder; } });
package/executors.json CHANGED
@@ -19,6 +19,16 @@
19
19
  "implementation": "./src/executors/browser-esbuild/browser-esbuild.impl",
20
20
  "schema": "./src/executors/browser-esbuild/schema.json",
21
21
  "description": "Builds your application with esbuild and adds support for incremental builds."
22
+ },
23
+ "module-federation-dev-server": {
24
+ "implementation": "./src/executors/module-federation-dev-server/module-federation-dev-server.impl",
25
+ "schema": "./src/executors/module-federation-dev-server/schema.json",
26
+ "description": "The module-federation-dev-server executor is reserved exclusively for use with host Module Federation applications. It allows the user to specify which remote applications should be served with the host."
27
+ },
28
+ "application": {
29
+ "implementation": "./src/executors/application/application.impl",
30
+ "schema": "./src/executors/application/schema.json",
31
+ "description": "Builds an application with esbuild with support for incremental builds. _Note: this is only supported in Angular versions >= 17.0.0_."
22
32
  }
23
33
  },
24
34
  "builders": {
@@ -37,11 +47,6 @@
37
47
  "schema": "./src/builders/webpack-server/schema.json",
38
48
  "description": "The `webpack-server` executor is very similar to the standard `server` builder provided by the Angular Devkit. It is usually used in tandem with `@nrwl/angular:webpack-browser` when your Angular application uses a custom webpack configuration and NgUniversal for SSR."
39
49
  },
40
- "module-federation-dev-server": {
41
- "implementation": "./src/builders/module-federation-dev-server/module-federation-dev-server.impl",
42
- "schema": "./src/builders/module-federation-dev-server/schema.json",
43
- "description": "The module-federation-dev-server executor is reserved exclusively for use with host Module Federation applications. It allows the user to specify which remote applications should be served with the host."
44
- },
45
50
  "module-federation-dev-ssr": {
46
51
  "implementation": "./src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl",
47
52
  "schema": "./src/builders/module-federation-dev-ssr/schema.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/angular",
3
- "version": "17.2.0-beta.9",
3
+ "version": "17.2.0-canary.20231207-b8d24e6",
4
4
  "private": false,
5
5
  "description": "The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: \n\n- Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, and Cypress. \n\n- Generators to help scaffold code quickly (like: Micro Frontends, Libraries, both internal to your codebase and publishable to npm) \n\n- Upgrading AngularJS applications \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
6
6
  "repository": {
@@ -78,15 +78,15 @@
78
78
  "tslib": "^2.3.0",
79
79
  "webpack": "^5.80.0",
80
80
  "webpack-merge": "^5.8.0",
81
- "@nx/devkit": "17.2.0-beta.9",
82
- "@nx/cypress": "17.2.0-beta.9",
83
- "@nx/jest": "17.2.0-beta.9",
84
- "@nx/js": "17.2.0-beta.9",
85
- "@nx/eslint": "17.2.0-beta.9",
86
- "@nx/webpack": "17.2.0-beta.9",
87
- "@nx/web": "17.2.0-beta.9",
88
- "@nx/workspace": "17.2.0-beta.9",
89
- "@nrwl/angular": "17.2.0-beta.9"
81
+ "@nx/devkit": "17.2.0-canary.20231207-b8d24e6",
82
+ "@nx/cypress": "17.2.0-canary.20231207-b8d24e6",
83
+ "@nx/jest": "17.2.0-canary.20231207-b8d24e6",
84
+ "@nx/js": "17.2.0-canary.20231207-b8d24e6",
85
+ "@nx/eslint": "17.2.0-canary.20231207-b8d24e6",
86
+ "@nx/webpack": "17.2.0-canary.20231207-b8d24e6",
87
+ "@nx/web": "17.2.0-canary.20231207-b8d24e6",
88
+ "@nx/workspace": "17.2.0-canary.20231207-b8d24e6",
89
+ "@nrwl/angular": "17.2.0-canary.20231207-b8d24e6"
90
90
  },
91
91
  "peerDependencies": {
92
92
  "@angular-devkit/build-angular": ">= 15.0.0 < 18.0.0",
@@ -7,10 +7,11 @@ const webpack_nx_build_coordination_plugin_1 = require("@nx/webpack/src/plugins/
7
7
  const fs_1 = require("fs");
8
8
  const operators_1 = require("nx/src/project-graph/operators");
9
9
  const project_graph_1 = require("nx/src/project-graph/project-graph");
10
+ const path_1 = require("path");
10
11
  const rxjs_1 = require("rxjs");
11
12
  const operators_2 = require("rxjs/operators");
12
- const semver_1 = require("semver");
13
13
  const angular_version_utils_1 = require("../../executors/utilities/angular-version-utils");
14
+ const esbuild_extensions_1 = require("../../executors/utilities/esbuild-extensions");
14
15
  const buildable_libs_1 = require("../utilities/buildable-libs");
15
16
  const webpack_1 = require("../utilities/webpack");
16
17
  const lib_1 = require("./lib");
@@ -57,6 +58,7 @@ function executeDevServerBuilder(rawOptions, context) {
57
58
  target: parsedBuildTarget.target,
58
59
  });
59
60
  dependencies = foundDependencies;
61
+ const relativeTsConfigPath = (0, devkit_1.normalizePath)((0, path_1.relative)(context.workspaceRoot, tsConfigPath));
60
62
  // We can't just pass the tsconfig path in memory to the angular builder
61
63
  // function because we can't pass the build target options to it, the build
62
64
  // targets options will be retrieved by the builder from the project
@@ -66,22 +68,33 @@ function executeDevServerBuilder(rawOptions, context) {
66
68
  const originalGetTargetOptions = context.getTargetOptions;
67
69
  context.getTargetOptions = async (target) => {
68
70
  const options = await originalGetTargetOptions(target);
69
- options.tsConfig = tsConfigPath;
71
+ options.tsConfig = relativeTsConfigPath;
70
72
  return options;
71
73
  };
72
74
  // The buildTargetConfiguration also needs to use the generated tsconfig path
73
75
  // otherwise the build will fail if customWebpack function/file is referencing
74
76
  // local libs. This synchronize the behavior with webpack-browser and
75
77
  // webpack-server implementation.
76
- buildTargetOptions.tsConfig = tsConfigPath;
78
+ buildTargetOptions.tsConfig = relativeTsConfigPath;
77
79
  }
78
- const delegateBuilderOptions = getDelegateBuilderOptions(options, buildTarget, context);
80
+ const delegateBuilderOptions = getDelegateBuilderOptions(options);
79
81
  const isUsingWebpackBuilder = ![
80
82
  '@angular-devkit/build-angular:application',
81
83
  '@angular-devkit/build-angular:browser-esbuild',
84
+ '@nx/angular:application',
82
85
  '@nx/angular:browser-esbuild',
83
86
  ].includes(buildTarget.executor);
84
- return (0, rxjs_1.from)(Promise.resolve().then(() => require('@angular-devkit/build-angular'))).pipe((0, operators_2.switchMap)(({ executeDevServerBuilder }) => executeDevServerBuilder(delegateBuilderOptions, context, {
87
+ /**
88
+ * The Angular CLI dev-server builder make some decisions based on the build
89
+ * target builder but it only considers `@angular-devkit/build-angular:*`
90
+ * builders. Since we are using a custom builder, we patch the context to
91
+ * handle `@nx/angular:*` executors.
92
+ */
93
+ patchBuilderContext(context, !isUsingWebpackBuilder, parsedBuildTarget);
94
+ return (0, rxjs_1.combineLatest)([
95
+ (0, rxjs_1.from)(Promise.resolve().then(() => require('@angular-devkit/build-angular'))),
96
+ (0, rxjs_1.from)((0, esbuild_extensions_1.loadPlugins)(buildTargetOptions.plugins, buildTargetOptions.tsConfig)),
97
+ ]).pipe((0, operators_2.switchMap)(([{ executeDevServerBuilder }, plugins]) => executeDevServerBuilder(delegateBuilderOptions, context, {
85
98
  webpackConfiguration: isUsingWebpackBuilder
86
99
  ? async (baseWebpackConfig) => {
87
100
  if (!buildLibsFromSource) {
@@ -109,30 +122,58 @@ function executeDevServerBuilder(rawOptions, context) {
109
122
  indexHtml: (0, webpack_1.resolveIndexHtmlTransformer)(pathToIndexFileTransformer, buildTargetOptions.tsConfig, context.target),
110
123
  }
111
124
  : {}),
125
+ }, {
126
+ buildPlugins: plugins,
112
127
  })));
113
128
  }
114
129
  exports.executeDevServerBuilder = executeDevServerBuilder;
115
130
  exports.default = require('@angular-devkit/architect').createBuilder(executeDevServerBuilder);
116
- function getDelegateBuilderOptions(options, buildTarget, context) {
117
- const delegatedBuilderOptions = { ...options };
118
- const { major: angularMajorVersion, version: angularVersion } = (0, angular_version_utils_1.getInstalledAngularVersionInfo)();
119
- // this option was introduced in angular 16.1.0
120
- // https://github.com/angular/angular-cli/commit/3ede1a2cac5005f4dfbd2a62ef528a34c3793b78
121
- if ((0, semver_1.gte)(angularVersion, '16.1.0') &&
122
- buildTarget.executor === '@nx/angular:browser-esbuild') {
123
- delegatedBuilderOptions.forceEsbuild = true;
124
- const originalLoggerWarn = context.logger.warn.bind(context.logger);
125
- context.logger.warn = (...args) => {
126
- // we silence the warning about forcing esbuild from third-party builders
127
- if (args[0].includes('Warning: Forcing the use of the esbuild-based build system with third-party builders may cause unexpected behavior and/or build failures.')) {
128
- return;
131
+ function getDelegateBuilderOptions(options) {
132
+ const delegateBuilderOptions = {
133
+ ...options,
134
+ };
135
+ const { major: angularMajorVersion } = (0, angular_version_utils_1.getInstalledAngularVersionInfo)();
136
+ if (angularMajorVersion <= 17) {
137
+ delegateBuilderOptions.browserTarget = delegateBuilderOptions.buildTarget;
138
+ delete delegateBuilderOptions.buildTarget;
139
+ }
140
+ // delete extra option not supported by the delegate builder
141
+ delete delegateBuilderOptions.buildLibsFromSource;
142
+ return delegateBuilderOptions;
143
+ }
144
+ const executorToBuilderMap = new Map([
145
+ [
146
+ '@nx/angular:browser-esbuild',
147
+ '@angular-devkit/build-angular:browser-esbuild',
148
+ ],
149
+ ['@nx/angular:application', '@angular-devkit/build-angular:application'],
150
+ ]);
151
+ function patchBuilderContext(context, isUsingEsbuildBuilder, buildTarget) {
152
+ const originalGetBuilderNameForTarget = context.getBuilderNameForTarget;
153
+ context.getBuilderNameForTarget = async (target) => {
154
+ const builderName = await originalGetBuilderNameForTarget(target);
155
+ if (executorToBuilderMap.has(builderName)) {
156
+ return executorToBuilderMap.get(builderName);
157
+ }
158
+ return builderName;
159
+ };
160
+ if (isUsingEsbuildBuilder) {
161
+ const originalGetTargetOptions = context.getTargetOptions;
162
+ context.getTargetOptions = async (target) => {
163
+ const options = await originalGetTargetOptions(target);
164
+ if (target.project === buildTarget.project &&
165
+ target.target === buildTarget.target &&
166
+ target.configuration === buildTarget.configuration) {
167
+ cleanBuildTargetOptions(options);
129
168
  }
130
- originalLoggerWarn(...args);
169
+ return options;
131
170
  };
132
171
  }
133
- if (angularMajorVersion <= 17) {
134
- delegatedBuilderOptions.browserTarget = delegatedBuilderOptions.buildTarget;
135
- delete delegatedBuilderOptions.buildTarget;
136
- }
137
- return delegatedBuilderOptions;
172
+ }
173
+ function cleanBuildTargetOptions(options) {
174
+ delete options.buildLibsFromSource;
175
+ delete options.customWebpackConfig;
176
+ delete options.indexFileTransformer;
177
+ delete options.plugins;
178
+ return options;
138
179
  }
@@ -85,7 +85,7 @@ function getStaticRemotes(project, context, workspaceProjects, remotesToSkip) {
85
85
  }
86
86
  exports.getStaticRemotes = getStaticRemotes;
87
87
  function validateDevRemotes(options, workspaceProjects) {
88
- const invalidDevRemotes = options.devRemotes?.filter((remote) => !workspaceProjects[remote]);
88
+ const invalidDevRemotes = options.devRemotes?.filter((remote) => !workspaceProjects[remote]) ?? [];
89
89
  if (invalidDevRemotes.length) {
90
90
  throw new Error(invalidDevRemotes.length === 1
91
91
  ? `Invalid dev remote provided: ${invalidDevRemotes[0]}.`
@@ -7,6 +7,7 @@ const fs_1 = require("fs");
7
7
  const configuration_1 = require("nx/src/config/configuration");
8
8
  const operators_1 = require("nx/src/project-graph/operators");
9
9
  const utils_1 = require("nx/src/tasks-runner/utils");
10
+ const path_1 = require("path");
10
11
  const rxjs_1 = require("rxjs");
11
12
  const operators_2 = require("rxjs/operators");
12
13
  const buildable_libs_1 = require("../utilities/buildable-libs");
@@ -40,7 +41,7 @@ function executeWebpackBrowserBuilder(options, context) {
40
41
  projectGraph = (0, devkit_1.readCachedProjectGraph)();
41
42
  const { tsConfigPath, dependencies: foundDependencies } = (0, buildable_libs_1.createTmpTsConfigForBuildableLibs)(delegateBuilderOptions.tsConfig, context, { projectGraph });
42
43
  dependencies = foundDependencies;
43
- delegateBuilderOptions.tsConfig = tsConfigPath;
44
+ delegateBuilderOptions.tsConfig = (0, devkit_1.normalizePath)((0, path_1.relative)(context.workspaceRoot, tsConfigPath));
44
45
  }
45
46
  return (0, rxjs_1.from)(Promise.resolve().then(() => require('@angular-devkit/build-angular'))).pipe((0, operators_2.switchMap)(({ executeBrowserBuilder }) => executeBrowserBuilder(delegateBuilderOptions, context, {
46
47
  webpackConfiguration: (baseWebpackConfig) => {
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.executeWebpackServerBuilder = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const fs_1 = require("fs");
6
+ const path_1 = require("path");
6
7
  const rxjs_1 = require("rxjs");
7
8
  const operators_1 = require("rxjs/operators");
8
9
  const buildable_libs_1 = require("../utilities/buildable-libs");
@@ -50,7 +51,7 @@ function executeWebpackServerBuilder(options, context) {
50
51
  options.buildLibsFromSource ??= true;
51
52
  if (!options.buildLibsFromSource) {
52
53
  const { tsConfigPath } = (0, buildable_libs_1.createTmpTsConfigForBuildableLibs)(options.tsConfig, context);
53
- options.tsConfig = tsConfigPath;
54
+ options.tsConfig = (0, devkit_1.normalizePath)((0, path_1.relative)(context.workspaceRoot, tsConfigPath));
54
55
  }
55
56
  return buildServerApp(options, context);
56
57
  }
@@ -0,0 +1,9 @@
1
+ import type { ExecutorContext } from '@nx/devkit';
2
+ import type { ApplicationExecutorOptions } from './schema';
3
+ export default function applicationExecutor(options: ApplicationExecutorOptions, context: ExecutorContext): AsyncGenerator<import("@angular-devkit/core").JsonObject & import("@angular-devkit/architect/src/output-schema").Schema & {
4
+ outputFiles?: import("@angular-devkit/build-angular/src/tools/esbuild/bundler-context").BuildOutputFile[];
5
+ assetFiles?: {
6
+ source: string;
7
+ destination: string;
8
+ }[];
9
+ }, any, undefined>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ngcli_adapter_1 = require("nx/src/adapter/ngcli-adapter");
4
+ const angular_version_utils_1 = require("../utilities/angular-version-utils");
5
+ const buildable_libs_1 = require("../utilities/buildable-libs");
6
+ const esbuild_extensions_1 = require("../utilities/esbuild-extensions");
7
+ async function* applicationExecutor(options, context) {
8
+ const { major: angularMajorVersion, version: angularVersion } = (0, angular_version_utils_1.getInstalledAngularVersionInfo)();
9
+ if (angularMajorVersion < 17) {
10
+ throw new Error(`The "application" executor requires Angular version 17 or greater. You are currently using version ${angularVersion}.`);
11
+ }
12
+ const { buildLibsFromSource = true, plugins: pluginPaths, ...delegateExecutorOptions } = options;
13
+ let dependencies;
14
+ if (!buildLibsFromSource) {
15
+ const { tsConfigPath, dependencies: foundDependencies } = (0, buildable_libs_1.createTmpTsConfigForBuildableLibs)(delegateExecutorOptions.tsConfig, context);
16
+ dependencies = foundDependencies;
17
+ delegateExecutorOptions.tsConfig = tsConfigPath;
18
+ }
19
+ const plugins = await (0, esbuild_extensions_1.loadPlugins)(pluginPaths, options.tsConfig);
20
+ const { buildApplication } = await Promise.resolve().then(() => require('@angular-devkit/build-angular'));
21
+ const builderContext = await (0, ngcli_adapter_1.createBuilderContext)({
22
+ builderName: 'application',
23
+ description: 'Build an application.',
24
+ optionSchema: await Promise.resolve().then(() => require('./schema.json')),
25
+ }, context);
26
+ return yield* buildApplication(delegateExecutorOptions, builderContext, plugins);
27
+ }
28
+ exports.default = applicationExecutor;
@@ -0,0 +1,7 @@
1
+ import type { ApplicationBuilderOptions } from '@angular-devkit/build-angular';
2
+ import type { PluginSpec } from '../utilities/esbuild-extensions';
3
+
4
+ export interface ApplicationExecutorOptions extends ApplicationBuilderOptions {
5
+ buildLibsFromSource?: boolean;
6
+ plugins?: string[] | PluginSpec[];
7
+ }