fix(ngcc): use preserve whitespaces from tsconfig if provided (#36189)
Previously ngcc never preserved whitespaces but this is at odds with how the ViewEngine compiler works. In ViewEngine, library templates are recompiled with the current application's tsconfig settings, which meant that whitespace preservation could be set in the application tsconfig file. This commit allows ngcc to use the `preserveWhitespaces` setting from tsconfig when compiling library templates. One should be aware that this disallows different projects with different tsconfig settings to share the same node_modules folder, with regard to whitespace preservation. But this is already the case in the current ngcc since this configuration is hard coded right now. Fixes #35871 PR Close #36189
This commit is contained in:

committed by
Misko Hevery

parent
32ce8b1326
commit
b8e9a30d3b
@ -1373,6 +1373,44 @@ runInEachFileSystem(() => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('whitespace preservation', () => {
|
||||
it('should default not to preserve whitespace', () => {
|
||||
mainNgcc({basePath: '/dist', propertiesToConsider: ['es2015']});
|
||||
expect(loadPackage('local-package', _('/dist')).__processed_by_ivy_ngcc__).toEqual({
|
||||
es2015: '0.0.0-PLACEHOLDER',
|
||||
typings: '0.0.0-PLACEHOLDER',
|
||||
});
|
||||
expect(fs.readFile(_('/dist/local-package/index.js')))
|
||||
.toMatch(/ɵɵtext\(\d+, " Hello\\n"\);/);
|
||||
});
|
||||
|
||||
it('should preserve whitespace if set in a loaded tsconfig.json', () => {
|
||||
fs.writeFile(
|
||||
_('/tsconfig.json'),
|
||||
JSON.stringify({angularCompilerOptions: {preserveWhitespaces: true}}));
|
||||
mainNgcc({basePath: '/dist', propertiesToConsider: ['es2015']});
|
||||
expect(loadPackage('local-package', _('/dist')).__processed_by_ivy_ngcc__).toEqual({
|
||||
es2015: '0.0.0-PLACEHOLDER',
|
||||
typings: '0.0.0-PLACEHOLDER',
|
||||
});
|
||||
expect(fs.readFile(_('/dist/local-package/index.js')))
|
||||
.toMatch(/ɵɵtext\(\d+, "\\n Hello\\n"\);/);
|
||||
});
|
||||
|
||||
it('should not preserve whitespace if set to false in a loaded tsconfig.json', () => {
|
||||
fs.writeFile(
|
||||
_('/tsconfig.json'),
|
||||
JSON.stringify({angularCompilerOptions: {preserveWhitespaces: false}}));
|
||||
mainNgcc({basePath: '/dist', propertiesToConsider: ['es2015']});
|
||||
expect(loadPackage('local-package', _('/dist')).__processed_by_ivy_ngcc__).toEqual({
|
||||
es2015: '0.0.0-PLACEHOLDER',
|
||||
typings: '0.0.0-PLACEHOLDER',
|
||||
});
|
||||
expect(fs.readFile(_('/dist/local-package/index.js')))
|
||||
.toMatch(/ɵɵtext\(\d+, " Hello\\n"\);/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('with configuration files', () => {
|
||||
it('should process a configured deep-import as an entry-point', () => {
|
||||
loadTestFiles([
|
||||
@ -1883,7 +1921,7 @@ runInEachFileSystem(() => {
|
||||
{
|
||||
name: _('/dist/local-package/index.js'),
|
||||
contents:
|
||||
`import {Component} from '@angular/core';\nexport class AppComponent {};\nAppComponent.decorators = [\n{ type: Component, args: [{selector: 'app', template: '<h2>Hello</h2>'}] }\n];`
|
||||
`import {Component} from '@angular/core';\nexport class AppComponent {};\nAppComponent.decorators = [\n{ type: Component, args: [{selector: 'app', template: '<h2>\\n Hello\\n</h2>'}] }\n];`
|
||||
},
|
||||
{
|
||||
name: _('/dist/local-package/index.d.ts'),
|
||||
|
Reference in New Issue
Block a user