fix(compiler): serialize any `StaticSymbol` correctly, not matter in which context.

This commit is contained in:
Tobias Bosch 2016-12-05 13:35:24 -08:00 committed by Alex Rickabaugh
parent c3065aac7a
commit 5614c4ff0f
2 changed files with 19 additions and 16 deletions

View File

@ -43,7 +43,7 @@ export class AotSummaryResolver implements SummaryResolver {
serializeSummaries(srcFileUrl: string, summaries: CompileTypeSummary[]): GeneratedFile { serializeSummaries(srcFileUrl: string, summaries: CompileTypeSummary[]): GeneratedFile {
const jsonReplacer = (key: string, value: any) => { const jsonReplacer = (key: string, value: any) => {
if (key === 'reference' && value instanceof StaticSymbol) { if (value instanceof StaticSymbol) {
// We convert the source filenames into output filenames, // We convert the source filenames into output filenames,
// as the generated summary file will be used when the current // as the generated summary file will be used when the current
// compilation unit is used as a library // compilation unit is used as a library
@ -84,7 +84,7 @@ export class AotSummaryResolver implements SummaryResolver {
if (!summary) { if (!summary) {
try { try {
const jsonReviver = (key: string, value: any) => { const jsonReviver = (key: string, value: any) => {
if (key === 'reference' && value && value['__symbolic__'] === 'symbol') { if (value && value['__symbolic__'] === 'symbol') {
// Note: We can't use staticReflector.findDeclaration here: // Note: We can't use staticReflector.findDeclaration here:
// Summary files can contain symbols of transitive compilation units // Summary files can contain symbols of transitive compilation units
// (via the providers), and findDeclaration needs .metadata.json / .d.ts files, // (via the providers), and findDeclaration needs .metadata.json / .d.ts files,

View File

@ -36,31 +36,34 @@ export function main() {
expect(resolver.serializeSummaries('a.js', []).genFileUrl).toBe('a.ngsummary.json'); expect(resolver.serializeSummaries('a.js', []).genFileUrl).toBe('a.ngsummary.json');
}); });
it('should serialize summary for .ts files and deserialize based on .d.ts files', () => { it('should serialize various data correctly', () => {
init(); init();
const serializedData = resolver.serializeSummaries( const serializedData = resolver.serializeSummaries(
'/tmp/some_pipe.ts', [{ '/tmp/some_pipe.ts', [<any>{
summaryKind: CompileSummaryKind.Pipe, summaryKind: CompileSummaryKind.Pipe,
type: { type: {
reference: staticReflector.getStaticSymbol('/tmp/some_pipe.ts', 'SomePipe'), reference: staticReflector.getStaticSymbol('/tmp/some_pipe.ts', 'SomePipe'),
diDeps: [],
lifecycleHooks: []
}, },
aNumber: 1,
aString: 'hello',
anArray: [1, 2],
aStaticSymbol:
staticReflector.getStaticSymbol('/tmp/some_symbol.ts', 'someName', ['someMember'])
}]); }]);
// Note: this creates a new staticReflector! // Note: this creates a new staticReflector!
init({[serializedData.genFileUrl]: serializedData.source}); init({[serializedData.genFileUrl]: serializedData.source});
expect(resolver.resolveSummary( const deserialized = resolver.resolveSummary(
staticReflector.getStaticSymbol('/tmp/some_pipe.d.ts', 'SomePipe'))) staticReflector.getStaticSymbol('/tmp/some_pipe.d.ts', 'SomePipe'));
.toEqual({ expect(deserialized.aNumber).toBe(1);
summaryKind: CompileSummaryKind.Pipe, expect(deserialized.aString).toBe('hello');
type: { expect(deserialized.anArray).toEqual([1, 2]);
reference: staticReflector.getStaticSymbol('/tmp/some_pipe.d.ts', 'SomePipe'), expect(deserialized.aStaticSymbol instanceof StaticSymbol).toBe(true);
diDeps: [], // Note: change from .ts to .d.ts is expected
lifecycleHooks: [] expect(deserialized.aStaticSymbol)
}, .toEqual(
}); staticReflector.getStaticSymbol('/tmp/some_symbol.d.ts', 'someName', ['someMember']));
}); });
it('should store reexports in the same file', () => { it('should store reexports in the same file', () => {