Skip to content
This repository was archived by the owner on May 1, 2020. It is now read-only.

Commit 6b158d3

Browse files
committed
fix(deep-linking): Fix issue with deep-linking when attempting to update a template and failing, resulting in a full build but not processing deep links
1 parent 73d7086 commit 6b158d3

File tree

5 files changed

+35
-2
lines changed

5 files changed

+35
-2
lines changed

src/deep-linking.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Logger } from './logger/logger';
33
import * as Constants from './util/constants';
44
import { BuildError } from './util/errors';
55
import { getStringPropertyValue, setParsedDeepLinkConfig } from './util/helpers';
6-
import { BuildContext, ChangedFile, DeepLinkConfigEntry } from './util/interfaces';
6+
import { BuildContext, BuildState, ChangedFile, DeepLinkConfigEntry } from './util/interfaces';
77

88
import { convertDeepLinkConfigEntriesToString, getDeepLinkData, hasExistingDeepLinkConfig, updateAppNgModuleAndFactoryWithDeepLinkConfig } from './deep-linking/util';
99

@@ -54,6 +54,14 @@ export function deepLinkingWorkerImpl(context: BuildContext, changedFiles: Chang
5454
}
5555

5656
export function deepLinkingUpdate(changedFiles: ChangedFile[], context: BuildContext) {
57+
if (context.deepLinkState === BuildState.RequiresBuild) {
58+
return deepLinkingWorkerFullUpdate(context);
59+
} else {
60+
return deepLinkingUpdateImpl(changedFiles, context);
61+
}
62+
}
63+
64+
export function deepLinkingUpdateImpl(changedFiles: ChangedFile[], context: BuildContext) {
5765
const tsFiles = changedFiles.filter(changedFile => changedFile.ext === '.ts');
5866
if (tsFiles.length === 0) {
5967
return Promise.resolve();
@@ -69,3 +77,15 @@ export function deepLinkingUpdate(changedFiles: ChangedFile[], context: BuildCon
6977
});
7078
}
7179

80+
export function deepLinkingWorkerFullUpdate(context: BuildContext) {
81+
const logger = new Logger(`deeplinks update`);
82+
return deepLinkingWorker(context).then((deepLinkConfigEntries: DeepLinkConfigEntry[]) => {
83+
setParsedDeepLinkConfig(deepLinkConfigEntries);
84+
logger.finish();
85+
})
86+
.catch((err: Error) => {
87+
Logger.warn(err.message);
88+
const error = new BuildError(err.message);
89+
throw logger.fail(error);
90+
});
91+
}

src/template.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export function templateUpdate(changedFiles: ChangedFile[], context: BuildContex
5252
} catch (ex) {
5353
Logger.debug(`templateUpdate error: ${ex.message}`);
5454
context.transpileState = BuildState.RequiresBuild;
55+
context.deepLinkState = BuildState.RequiresBuild;
5556
context.bundleState = BuildState.RequiresUpdate;
5657
return Promise.resolve();
5758
}

src/util/interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export interface BuildContext {
3636
transpileState?: BuildState;
3737
templateState?: BuildState;
3838
bundleState?: BuildState;
39+
deepLinkState?: BuildState;
3940

4041
// target examples: cordova, browser, electron
4142
target?: string;

src/watch.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as path from 'path';
22

33
import * as build from './build';
4-
import * as helpers from './util/helpers';
54
import { BuildContext, BuildState, ChangedFile } from './util/interfaces';
65
import { FileCache } from './util/file-cache';
76
import * as watch from './watch';
@@ -19,6 +18,7 @@ describe('watch', () => {
1918
}];
2019
watch.runBuildUpdate(context, files);
2120
expect(context.transpileState).toEqual(BuildState.RequiresBuild);
21+
expect(context.deepLinkState).toEqual(BuildState.RequiresBuild);
2222
});
2323

2424
it('should require transpile full build for html file change and not already successful bundle', () => {
@@ -29,6 +29,7 @@ describe('watch', () => {
2929
}];
3030
watch.runBuildUpdate(context, files);
3131
expect(context.transpileState).toEqual(BuildState.RequiresBuild);
32+
expect(context.deepLinkState).toEqual(BuildState.RequiresBuild);
3233
});
3334

3435
it('should require template update for html file change and already successful bundle', () => {
@@ -91,6 +92,7 @@ describe('watch', () => {
9192
context.bundleState = BuildState.SuccessfulBuild;
9293
watch.runBuildUpdate(context, files);
9394
expect(context.transpileState).toEqual(BuildState.RequiresBuild);
95+
expect(context.deepLinkState).toEqual(BuildState.RequiresBuild);
9496
expect(context.bundleState).toEqual(BuildState.RequiresUpdate);
9597
});
9698

@@ -102,6 +104,7 @@ describe('watch', () => {
102104
}];
103105
watch.runBuildUpdate(context, files);
104106
expect(context.transpileState).toEqual(BuildState.RequiresBuild);
107+
expect(context.deepLinkState).toEqual(BuildState.RequiresBuild);
105108
expect(context.bundleState).toEqual(BuildState.RequiresBuild);
106109
});
107110

@@ -113,6 +116,7 @@ describe('watch', () => {
113116
}];
114117
watch.runBuildUpdate(context, files);
115118
expect(context.transpileState).toEqual(BuildState.RequiresBuild);
119+
expect(context.deepLinkState).toEqual(BuildState.RequiresBuild);
116120
expect(context.bundleState).toEqual(BuildState.RequiresBuild);
117121
});
118122

@@ -127,6 +131,7 @@ describe('watch', () => {
127131
context.fileCache.set(resolvedFilePath, { path: 'file1.ts', content: 'content' });
128132
watch.runBuildUpdate(context, files);
129133
expect(context.transpileState).toEqual(BuildState.RequiresUpdate);
134+
expect(context.deepLinkState).toEqual(BuildState.RequiresUpdate);
130135
expect(context.bundleState).toEqual(BuildState.RequiresUpdate);
131136
});
132137

@@ -140,6 +145,7 @@ describe('watch', () => {
140145
context.fileCache.set(resolvedFilePath, { path: 'file1.ts', content: 'content' });
141146
watch.runBuildUpdate(context, files);
142147
expect(context.transpileState).toEqual(BuildState.RequiresUpdate);
148+
expect(context.deepLinkState).toEqual(BuildState.RequiresUpdate);
143149
expect(context.bundleState).toEqual(BuildState.RequiresBuild);
144150
});
145151

@@ -155,6 +161,7 @@ describe('watch', () => {
155161
}];
156162
watch.runBuildUpdate(context, files);
157163
expect(context.transpileState).toEqual(BuildState.RequiresBuild);
164+
expect(context.deepLinkState).toEqual(BuildState.RequiresBuild);
158165
expect(context.bundleState).toEqual(BuildState.RequiresBuild);
159166
});
160167

src/watch.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export function watch(context?: BuildContext, configFile?: string) {
3131
context.sassState = BuildState.RequiresBuild;
3232
context.transpileState = BuildState.RequiresBuild;
3333
context.bundleState = BuildState.RequiresBuild;
34+
context.deepLinkState = BuildState.RequiresBuild;
3435

3536
const logger = new Logger('watch');
3637

@@ -321,9 +322,11 @@ export function runBuildUpdate(context: BuildContext, changedFiles: ChangedFile[
321322
if (requiresFullBuild) {
322323
// .ts file was added or deleted, we need a full rebuild
323324
context.transpileState = BuildState.RequiresBuild;
325+
context.deepLinkState = BuildState.RequiresBuild;
324326
} else {
325327
// .ts files have changed, so we can get away with doing an update
326328
context.transpileState = BuildState.RequiresUpdate;
329+
context.deepLinkState = BuildState.RequiresUpdate;
327330
}
328331
}
329332

@@ -352,6 +355,7 @@ export function runBuildUpdate(context: BuildContext, changedFiles: ChangedFile[
352355
// .html file was added/deleted
353356
// we should do a full transpile build because of this
354357
context.transpileState = BuildState.RequiresBuild;
358+
context.deepLinkState = BuildState.RequiresBuild;
355359
}
356360
}
357361

0 commit comments

Comments
 (0)