|
1 |
| -import { BuildEvent, Builder, BuilderConfiguration, BuilderContext, BuilderDescription } from '@angular-devkit/architect'; |
2 |
| -import { NormalizedBrowserBuilderSchema } from '@angular-devkit/build-angular/src/browser/schema'; |
3 |
| -import { DevServerBuilder, DevServerBuilderOptions } from '@angular-devkit/build-angular/src/dev-server'; |
4 |
| -import { Path, virtualFs } from '@angular-devkit/core'; |
5 |
| -import * as fs from 'fs'; |
6 |
| -import { Observable, from, of } from 'rxjs'; |
7 |
| -import { concatMap, tap } from 'rxjs/operators'; |
| 1 | +import { BuilderContext, BuilderOutput, createBuilder, targetFromTargetString } from '@angular-devkit/architect'; |
| 2 | +import { json } from '@angular-devkit/core'; |
8 | 3 |
|
9 |
| -import { CordovaBuildBuilder, CordovaBuildBuilderSchema } from '../cordova-build'; |
| 4 | +import { prepareBrowserConfig } from '../utils'; |
10 | 5 |
|
11 | 6 | import { createConsoleLogServer } from './log-server';
|
12 | 7 | import { CordovaServeBuilderSchema } from './schema';
|
13 | 8 |
|
14 |
| -export class CordovaServeBuilder implements Builder<CordovaServeBuilderSchema> { |
15 |
| - constructor(public context: BuilderContext) {} |
| 9 | +export type CordovaDevServerBuilderOptions = CordovaServeBuilderSchema & json.JsonObject; |
16 | 10 |
|
17 |
| - run(builderConfig: BuilderConfiguration<CordovaServeBuilderSchema>): Observable<BuildEvent> { |
18 |
| - const { options: cordovaServeOptions } = builderConfig; |
19 |
| - const { devServerTarget, port, host, ssl } = cordovaServeOptions; |
20 |
| - const [ project, target, configuration ] = devServerTarget.split(':'); |
| 11 | +export async function serveCordova( |
| 12 | + options: CordovaServeBuilderSchema, |
| 13 | + context: BuilderContext |
| 14 | +): Promise<BuilderOutput> { |
| 15 | + return new Promise(async () => { |
| 16 | + context.reportStatus(`running cordova serve...`); |
| 17 | + const { devServerTarget, cordovaBuildTarget, port, host, ssl } = options; |
21 | 18 |
|
22 |
| - const devServerTargetSpec = { project, target, configuration, overrides: { port, host, ssl } }; |
23 |
| - const devServerBuilderConfig = this.context.architect.getBuilderConfiguration<DevServerBuilderOptions>(devServerTargetSpec); |
| 19 | + // Getting the original browser build options |
| 20 | + const cordovaBuildTargetSpec = targetFromTargetString(cordovaBuildTarget); |
| 21 | + const cordovaBuildTargetOptions = await context.getTargetOptions(cordovaBuildTargetSpec) as { browserTarget: string }; |
| 22 | + const browserBuildTargetSpec = targetFromTargetString(cordovaBuildTargetOptions.browserTarget); |
24 | 23 |
|
25 |
| - let devServerDescription: BuilderDescription; |
26 |
| - let cordovaBuildConfig: BuilderConfiguration<CordovaBuildBuilderSchema>; |
| 24 | + // What we actually need.... |
| 25 | + const browserBuildTargetOptions = await context.getTargetOptions(browserBuildTargetSpec); |
27 | 26 |
|
28 |
| - return of(null).pipe( |
29 |
| - concatMap(() => this.context.architect.getBuilderDescription(devServerBuilderConfig)), |
30 |
| - tap(description => devServerDescription = description), |
31 |
| - concatMap(() => this.context.architect.validateBuilderOptions(devServerBuilderConfig, devServerDescription)), |
32 |
| - concatMap(() => this._getCordovaBuildConfig(cordovaServeOptions)), |
33 |
| - tap(config => cordovaBuildConfig = config), |
34 |
| - concatMap(() => of(new CordovaDevServerBuilder(this.context, cordovaBuildConfig.options))), |
35 |
| - concatMap(builder => builder.run(devServerBuilderConfig)) |
36 |
| - ); |
37 |
| - } |
| 27 | + // Modifying those options to pass in cordova-speicfic stuff |
| 28 | + prepareBrowserConfig(options, browserBuildTargetOptions); |
38 | 29 |
|
39 |
| - protected _getCordovaBuildConfig(cordovaServeOptions: CordovaServeBuilderSchema): Observable<BuilderConfiguration<CordovaBuildBuilderSchema>> { |
40 |
| - const { |
41 |
| - platform, |
42 |
| - cordovaBasePath, |
43 |
| - cordovaAssets, |
44 |
| - cordovaMock, |
45 |
| - consolelogs, |
46 |
| - consolelogsPort, |
47 |
| - sourceMap, |
48 |
| - } = cordovaServeOptions; |
49 |
| - |
50 |
| - const [ project, target, configuration ] = cordovaServeOptions.cordovaBuildTarget.split(':'); |
51 |
| - const cordovaBuildTargetSpec = { project, target, configuration, overrides: { platform, cordovaBasePath, cordovaAssets, cordovaMock, consolelogs, consolelogsPort, sourceMap } }; |
52 |
| - const cordovaBuildTargetConfig = this.context.architect.getBuilderConfiguration<CordovaBuildBuilderSchema>(cordovaBuildTargetSpec); |
53 |
| - |
54 |
| - return this.context.architect.getBuilderDescription(cordovaBuildTargetConfig).pipe( |
55 |
| - concatMap(cordovaBuildDescription => this.context.architect.validateBuilderOptions(cordovaBuildTargetConfig, cordovaBuildDescription)) |
56 |
| - ); |
57 |
| - } |
58 |
| -} |
59 |
| - |
60 |
| -class CordovaDevServerBuilder extends DevServerBuilder { |
61 |
| - constructor(context: BuilderContext, public cordovaBuildOptions: CordovaBuildBuilderSchema) { |
62 |
| - super(context); |
63 |
| - } |
64 |
| - |
65 |
| - run(builderConfig: BuilderConfiguration<DevServerBuilderOptions>): Observable<BuildEvent> { |
66 |
| - if (this.cordovaBuildOptions.consolelogs && this.cordovaBuildOptions.consolelogsPort) { |
67 |
| - return from(createConsoleLogServer(builderConfig.options.host, this.cordovaBuildOptions.consolelogsPort)) |
68 |
| - .pipe(_ => super.run(builderConfig)); |
| 30 | + if (options.consolelogs && options.consolelogsPort) { |
| 31 | + await createConsoleLogServer(host, options.consolelogsPort); |
69 | 32 | }
|
70 |
| - return super.run(builderConfig); |
71 |
| - } |
72 | 33 |
|
73 |
| - buildWebpackConfig(root: Path, projectRoot: Path, host: virtualFs.Host<fs.Stats>, browserOptions: NormalizedBrowserBuilderSchema) { |
74 |
| - const builder = new CordovaBuildBuilder(this.context); |
75 |
| - builder.validateBuilderConfig(this.cordovaBuildOptions); |
76 |
| - builder.prepareBrowserConfig(this.cordovaBuildOptions, browserOptions); |
| 34 | + const devServerTargetSpec = targetFromTargetString(devServerTarget); |
| 35 | + const devServerTargetOptions = await context.getTargetOptions(devServerTargetSpec); |
77 | 36 |
|
78 |
| - return super.buildWebpackConfig(root, projectRoot, host, browserOptions); |
79 |
| - } |
| 37 | + return context |
| 38 | + .scheduleTarget(devServerTargetSpec, { host, port, ssl }, devServerTargetOptions) |
| 39 | + .then(buildEvent => ({ ...buildEvent })); |
| 40 | + }); |
80 | 41 | }
|
81 |
| - |
82 |
| -export default CordovaServeBuilder; |
| 42 | +export default createBuilder<CordovaDevServerBuilderOptions, any>(serveCordova); |
0 commit comments