fix(ngcc): correctly identify relative Windows-style import paths (#36372)
Previously, `isRelativePath()` assumed paths are *nix-style. This caused Windows-style paths (such as `C:\foo\some-package\some-file.js`) to not be recognized as "relative" imports. This commit fixes this by using the OS-agnostic `isRooted()` helper and also accounting for both styles of path delimiters: `/` and `\` PR Close #36372
This commit is contained in:

committed by
Kara Erickson

parent
ffa4e11db1
commit
0daa48800e
@ -7,6 +7,8 @@
|
||||
*/
|
||||
|
||||
import * as ts from 'typescript';
|
||||
import {absoluteFrom as _abs} from '../../src/ngtsc/file_system';
|
||||
import {runInEachFileSystem} from '../../src/ngtsc/file_system/testing';
|
||||
import {KnownDeclaration} from '../../src/ngtsc/reflection';
|
||||
import {FactoryMap, getTsHelperFnFromDeclaration, getTsHelperFnFromIdentifier, isRelativePath, stripExtension} from '../src/utils';
|
||||
|
||||
@ -167,30 +169,36 @@ describe('getTsHelperFnFromIdentifier()', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('isRelativePath()', () => {
|
||||
it('should return true for relative paths', () => {
|
||||
expect(isRelativePath('.')).toBe(true);
|
||||
expect(isRelativePath('..')).toBe(true);
|
||||
expect(isRelativePath('./')).toBe(true);
|
||||
expect(isRelativePath('../')).toBe(true);
|
||||
expect(isRelativePath('./abc/xyz')).toBe(true);
|
||||
expect(isRelativePath('../abc/xyz')).toBe(true);
|
||||
});
|
||||
runInEachFileSystem(() => {
|
||||
describe('isRelativePath()', () => {
|
||||
it('should return true for relative paths', () => {
|
||||
expect(isRelativePath('.')).toBe(true);
|
||||
expect(isRelativePath('..')).toBe(true);
|
||||
expect(isRelativePath('./')).toBe(true);
|
||||
expect(isRelativePath('.\\')).toBe(true);
|
||||
expect(isRelativePath('../')).toBe(true);
|
||||
expect(isRelativePath('..\\')).toBe(true);
|
||||
expect(isRelativePath('./abc/xyz')).toBe(true);
|
||||
expect(isRelativePath('.\\abc\\xyz')).toBe(true);
|
||||
expect(isRelativePath('../abc/xyz')).toBe(true);
|
||||
expect(isRelativePath('..\\abc\\xyz')).toBe(true);
|
||||
});
|
||||
|
||||
it('should return true for absolute paths', () => {
|
||||
expect(isRelativePath('/')).toBe(true);
|
||||
expect(isRelativePath('/abc/xyz')).toBe(true);
|
||||
});
|
||||
it('should return true for absolute paths', () => {
|
||||
expect(isRelativePath(_abs('/'))).toBe(true);
|
||||
expect(isRelativePath(_abs('/abc/xyz'))).toBe(true);
|
||||
});
|
||||
|
||||
it('should return false for other paths', () => {
|
||||
expect(isRelativePath('abc')).toBe(false);
|
||||
expect(isRelativePath('abc/xyz')).toBe(false);
|
||||
expect(isRelativePath('.abc')).toBe(false);
|
||||
expect(isRelativePath('..abc')).toBe(false);
|
||||
expect(isRelativePath('@abc')).toBe(false);
|
||||
expect(isRelativePath('.abc/xyz')).toBe(false);
|
||||
expect(isRelativePath('..abc/xyz')).toBe(false);
|
||||
expect(isRelativePath('@abc/xyz')).toBe(false);
|
||||
it('should return false for other paths', () => {
|
||||
expect(isRelativePath('abc')).toBe(false);
|
||||
expect(isRelativePath('abc/xyz')).toBe(false);
|
||||
expect(isRelativePath('.abc')).toBe(false);
|
||||
expect(isRelativePath('..abc')).toBe(false);
|
||||
expect(isRelativePath('@abc')).toBe(false);
|
||||
expect(isRelativePath('.abc/xyz')).toBe(false);
|
||||
expect(isRelativePath('..abc/xyz')).toBe(false);
|
||||
expect(isRelativePath('@abc/xyz')).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user