Skip to content
This repository has been archived by the owner on Oct 14, 2022. It is now read-only.

Commit

Permalink
feat(@architect/udk): support angular devkit 0.900.0-rc.6
Browse files Browse the repository at this point in the history
  • Loading branch information
enten committed Dec 14, 2019
1 parent 8703ab0 commit b8c2100
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 123 deletions.
21 changes: 10 additions & 11 deletions angular/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ Run an universal angular application.

| Name | Type | Default | Description |
|------|------|---------|-------------|
| **`debug`** | boolean | | Debug udk dev container |
| **`universalTarget`** | string | | Target to universal |
| `debug` | boolean | | Debug udk dev container |


## Example
Expand All @@ -40,10 +41,10 @@ When udk-builder is configured:

```diff
diff --git a/angular.json b/angular.json
index 2cd40ef..12c3453 100644
index 4fcecd1..e30db3b 100644
--- a/angular.json
+++ b/angular.json
@@ -15,14 +15,27 @@
@@ -15,9 +15,23 @@
"prefix": "app",
"architect": {
"build": {
Expand All @@ -68,12 +69,7 @@ index 2cd40ef..12c3453 100644
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
- "aot": false,
"assets": [
"src/favicon.ico",
"src/assets"
@@ -59,21 +72,49 @@
@@ -63,21 +77,52 @@
}
}
},
Expand All @@ -82,6 +78,7 @@ index 2cd40ef..12c3453 100644
+ "options": {
+ "outputPath": "dist/app/server",
+ "main": "src/server.ts",
+ "bundleDependencies": false,
+ "tsConfig": "tsconfig.server.json",
+ "sourceMap": {
+ "scripts": true,
Expand All @@ -102,7 +99,9 @@ index 2cd40ef..12c3453 100644
+ },
"serve": {
+ "builder": "udk:udk-runner",
+ "options": {},
+ "options": {
+ "universalTarget": "app:build"
+ },
+ "configurations": {}
+ },
+ "serve-spa": {
Expand All @@ -126,7 +125,7 @@ index 2cd40ef..12c3453 100644
}
},
"test": {
@@ -110,11 +151,11 @@
@@ -114,11 +159,11 @@
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
Expand Down
90 changes: 51 additions & 39 deletions angular/lib/build/ng-devkit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,15 +131,15 @@ export async function getUniversalTargetOptions<K extends keyof UniversalTargetO
options: UniversalBuildOptions,
platformTarget: K,
): Promise<UniversalTargetOptionsMap[K]> {
const optionsOverrides: json.JsonObject = {
const optionsOverrides = {
deleteOutputPath: !!options.deleteOutputPath,
verbose: !!options.verbose,
};
} as Partial<UniversalTargetOptionsMap[K]>;

const targetString = platformTarget === 'server' ? options.serverTarget : options.browserTarget;

// get platform target options
const platformOptions = await validateTargetOptions<BrowserBuilderOptions | ServerBuilderOptions>(
const platformOptions = await validateTargetOptions<UniversalTargetOptionsMap[K]>(
context,
targetString,
optionsOverrides,
Expand All @@ -151,6 +151,16 @@ export async function getUniversalTargetOptions<K extends keyof UniversalTargetO
...(options.fileReplacements || []),
];

if (platformTarget === 'server') {
const serverOptions = platformOptions as ServerBuilderOptions;

if (typeof serverOptions.bundleDependencies === 'string') {
serverOptions.bundleDependencies = (serverOptions.bundleDependencies === 'all') as any;
// tslint:disable-next-line: max-line-length
context.logger.warn(`Server option 'bundleDependencies' string value is deprecated since version 9. Use a boolean value instead.`);
}
}

return platformOptions as UniversalTargetOptionsMap[K];
}

Expand Down Expand Up @@ -785,15 +795,6 @@ export async function initializeServerBuilder(
serverOptions: ServerBuilderOptions,
context: BuilderContext,
): Promise<ServerBuilderInitContext> {
// let bundleDependencies: boolean | undefined;
// if (typeof serverOptions.bundleDependencies === 'string') {
// bundleDependencies = serverOptions.bundleDependencies === 'all';
// tslint:disable-next-line: max-line-length
// context.logger.warn(`Option 'bundleDependencies' string value is deprecated since version 9. Use a boolean value instead.`);
// } else {
// bundleDependencies = serverOptions.bundleDependencies;
// }

const {
config: serverConfig,
projectRoot,
Expand Down Expand Up @@ -898,14 +899,38 @@ export function setWebpackServerExternals(
universalOptions: UniversalBuildOptions,
serverConfig: webpack.Configuration,
): void {
const whitelistPatterns = [ ...(universalOptions.bundleDependenciesWhitelist || []) ]
.filter(whitelistPattern => !!whitelistPattern)
.map(whitelistPattern => new RegExp(whitelistPattern));
const externals = serverConfig.externals as webpack.ExternalsElement[];
const lastExternalIndex = externals.length - 1;

if (!whitelistPatterns.length) {
// note(enten): angular server model declare an array with a function filter as last item
// when server option `bundleDependencies` is false.
//
// When function filter is missing, that means server option `bundleDependencies` is true.
// In this case, universal option `bundleDependenciesWhitelist` can be ignored because
// we want to bundle all dependencies except server option `externalDependencies` (which
// are already set into webpack server config `externals`).
//
// tslint:disable-next-line: max-line-length
// @see v9.0.0-rc.5/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/server.ts#L42
// tslint:disable-next-line: max-line-length
// @see v9.0.0-rc.6/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/server.ts#L49
if (!externals || typeof externals[lastExternalIndex] !== 'function') {
return;
}

const angularServerExternalsFn = externals.pop() as webpack.ExternalsFunctionElement;

const whitelistStrings = [...(universalOptions.bundleDependenciesWhitelist || [])];

if (!whitelistStrings.includes('^@angular/')) {
whitelistStrings.push('^@angular/');
}

if (!whitelistStrings.includes('^@nguniversal/')) {
whitelistStrings.push('^@nguniversal/');
}

const whitelistPatterns = whitelistStrings.map(whitelistPattern => new RegExp(whitelistPattern))
const isWhitelisted: (request: string) => boolean = request => {
for (const whitelistPattern of whitelistPatterns) {
if (whitelistPattern.test(request)) {
Expand All @@ -916,30 +941,17 @@ export function setWebpackServerExternals(
return false;
};

// note(enten): angular server model declare an array with a function filter as second item.
// We intercept its behavior. When that will break: that mean something
// change related to angular server model.
//
// tslint:disable-next-line: max-line-length
// @see v8.1.0-beta.2/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/server.ts#L40
const configExternals = serverConfig.externals as webpack.ExternalsFunctionElement[];

if (configExternals) {
const angularServerExternalsFn = configExternals[1];

if (typeof angularServerExternalsFn !== 'function') {
throw new Error('Bearking change detected with angular webpack server model and externals');
externals[lastExternalIndex] = (
context: string,
request: string,
callback: (error?: null, result?: string) => void,
) => {
if (isWhitelisted(request)) {
callback();
} else {
angularServerExternalsFn(context, request, callback);
}

// tslint:disable-next-line: no-any
configExternals[1] = (_, request, callback: (error?: any, result?: any) => void) => {
if (isWhitelisted(request)) {
callback();
} else {
angularServerExternalsFn(_, request, callback);
}
};
}
};
}

export function setWebpackServerFileLoaderEmitFile(
Expand Down
8 changes: 0 additions & 8 deletions angular/lib/serve/devContainer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,14 +145,6 @@ export class NgContainer extends DevContainerRuntime {
}

const root = path.dirname(this.angularConfigPath);
const configContent = fs.readFileSync(this.angularConfigPath, 'utf-8');
const workspaceJson = JSON.parse(configContent);
console.log({
angularConfigPath: this.angularConfigPath,
root,
workspaceJson,
args: this.args,
});

this.registry = new schema.CoreSchemaRegistry();
this.registry.addPostTransform(schema.transforms.addUndefinedDefaults);
Expand Down
4 changes: 2 additions & 2 deletions angular/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"private": true,
"name": "@architect/udk",
"peerDependencies": {
"@angular-devkit/build-angular": "~0.900.0-rc.5",
"@angular/cli": "~9.0.0-rc.5"
"@angular-devkit/build-angular": "~0.900.0-rc.6",
"@angular/cli": "~9.0.0-rc.6"
}
}
Loading

0 comments on commit b8c2100

Please sign in to comment.