1*d8009c4bSEvan Baconimport { vol } from 'memfs';
2*d8009c4bSEvan Bacon
3*d8009c4bSEvan Baconimport { loadTsConfigPathsAsync } from '../loadTsConfigPaths';
4*d8009c4bSEvan Bacon
5*d8009c4bSEvan Baconjest.mock('../evaluateTsConfig', () => ({
6*d8009c4bSEvan Bacon  evaluateTsConfig: jest.fn((ts, filepath) => {
7*d8009c4bSEvan Bacon    return (require('@expo/json-file') as typeof import('@expo/json-file')).default.read(filepath, {
8*d8009c4bSEvan Bacon      json5: true,
9*d8009c4bSEvan Bacon    });
10*d8009c4bSEvan Bacon  }),
11*d8009c4bSEvan Bacon  importTypeScriptFromProjectOptionally: jest.fn(() => ({})),
12*d8009c4bSEvan Bacon}));
13*d8009c4bSEvan Bacon
14*d8009c4bSEvan Bacondescribe(loadTsConfigPathsAsync, () => {
15*d8009c4bSEvan Bacon  beforeEach(() => {
16*d8009c4bSEvan Bacon    vol.reset();
17*d8009c4bSEvan Bacon  });
18*d8009c4bSEvan Bacon  it(`returns null if tsconfig doesn't exist`, async () => {
19*d8009c4bSEvan Bacon    vol.fromJSON({}, '/');
20*d8009c4bSEvan Bacon    expect(await loadTsConfigPathsAsync('/')).toBeNull();
21*d8009c4bSEvan Bacon  });
22*d8009c4bSEvan Bacon  it(`returns just baseUrl`, async () => {
23*d8009c4bSEvan Bacon    vol.fromJSON(
24*d8009c4bSEvan Bacon      {
25*d8009c4bSEvan Bacon        'jsconfig.json': '{}',
26*d8009c4bSEvan Bacon      },
27*d8009c4bSEvan Bacon      '/'
28*d8009c4bSEvan Bacon    );
29*d8009c4bSEvan Bacon    expect(await loadTsConfigPathsAsync('/')).toEqual({ baseUrl: '/', paths: undefined });
30*d8009c4bSEvan Bacon  });
31*d8009c4bSEvan Bacon  it(`returns jsconfig paths`, async () => {
32*d8009c4bSEvan Bacon    vol.fromJSON(
33*d8009c4bSEvan Bacon      {
34*d8009c4bSEvan Bacon        'jsconfig.json': JSON.stringify({
35*d8009c4bSEvan Bacon          compilerOptions: {
36*d8009c4bSEvan Bacon            baseUrl: 'src',
37*d8009c4bSEvan Bacon            paths: {
38*d8009c4bSEvan Bacon              '@foo/*': ['foo/*'],
39*d8009c4bSEvan Bacon            },
40*d8009c4bSEvan Bacon          },
41*d8009c4bSEvan Bacon        }),
42*d8009c4bSEvan Bacon      },
43*d8009c4bSEvan Bacon      '/'
44*d8009c4bSEvan Bacon    );
45*d8009c4bSEvan Bacon    expect(await loadTsConfigPathsAsync('/')).toEqual({
46*d8009c4bSEvan Bacon      baseUrl: '/src',
47*d8009c4bSEvan Bacon      paths: { '@foo/*': ['foo/*'] },
48*d8009c4bSEvan Bacon    });
49*d8009c4bSEvan Bacon  });
50*d8009c4bSEvan Bacon  it(`returns tsconfig before jsconfig`, async () => {
51*d8009c4bSEvan Bacon    vol.fromJSON(
52*d8009c4bSEvan Bacon      {
53*d8009c4bSEvan Bacon        'tsconfig.json': JSON.stringify({
54*d8009c4bSEvan Bacon          compilerOptions: {
55*d8009c4bSEvan Bacon            baseUrl: 'src',
56*d8009c4bSEvan Bacon            paths: {
57*d8009c4bSEvan Bacon              '@foo/*': ['foo/*'],
58*d8009c4bSEvan Bacon            },
59*d8009c4bSEvan Bacon          },
60*d8009c4bSEvan Bacon        }),
61*d8009c4bSEvan Bacon        'jsconfig.json': JSON.stringify({}),
62*d8009c4bSEvan Bacon      },
63*d8009c4bSEvan Bacon      '/'
64*d8009c4bSEvan Bacon    );
65*d8009c4bSEvan Bacon    expect(await loadTsConfigPathsAsync('/')).toEqual({
66*d8009c4bSEvan Bacon      baseUrl: '/src',
67*d8009c4bSEvan Bacon      paths: { '@foo/*': ['foo/*'] },
68*d8009c4bSEvan Bacon    });
69*d8009c4bSEvan Bacon  });
70*d8009c4bSEvan Bacon});
71