fix(compiler): serialize any `StaticSymbol` correctly, not matter in which context.
This commit is contained in:
parent
c3065aac7a
commit
5614c4ff0f
|
@ -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,
|
||||||
|
|
|
@ -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', () => {
|
||||||
|
|
Loading…
Reference in New Issue