mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-14 18:12:09 +08:00
fix: fileReplacements should be relative to app root
This commit is contained in:
@ -1,92 +1,86 @@
|
||||
import { getFileReplacementsFromEnv } from '../../src/helpers/fileReplacements'
|
||||
import { getFileReplacementsFromEnv } from '../../src/helpers/fileReplacements';
|
||||
|
||||
describe('getFileReplacementsFromEnv', () => {
|
||||
it('handles no replacements', () => {
|
||||
const res = getFileReplacementsFromEnv({})
|
||||
expect(res).toEqual({})
|
||||
})
|
||||
const res = getFileReplacementsFromEnv({});
|
||||
expect(res).toEqual({});
|
||||
});
|
||||
|
||||
it('ignores invalid env', () => {
|
||||
const res = getFileReplacementsFromEnv({
|
||||
// @ts-ignore
|
||||
replace: {}
|
||||
})
|
||||
expect(res).toEqual({})
|
||||
})
|
||||
replace: {},
|
||||
});
|
||||
expect(res).toEqual({});
|
||||
});
|
||||
|
||||
it('handles invalid replacements', () => {
|
||||
it('resolves replacements relative to the project root', () => {
|
||||
const res = getFileReplacementsFromEnv({
|
||||
replace: [
|
||||
'one',
|
||||
'two:',
|
||||
'three:four'
|
||||
]
|
||||
})
|
||||
const entries = Object.entries(res)
|
||||
expect(res).toBeDefined()
|
||||
expect(entries.length).toBe(1)
|
||||
expect(entries[0]).toEqual([
|
||||
'three',
|
||||
'four'
|
||||
])
|
||||
})
|
||||
replace: './src/foo.ts:./src/bar.ts',
|
||||
});
|
||||
const entries = Object.entries(res);
|
||||
expect(res).toBeDefined();
|
||||
expect(entries.length).toBe(1);
|
||||
expect(entries[0]).toEqual(['__jest__/src/foo.ts', '__jest__/src/bar.ts']);
|
||||
});
|
||||
|
||||
it('ignores invalid replacements', () => {
|
||||
const res = getFileReplacementsFromEnv({
|
||||
replace: ['one', 'two:', 'three:four'],
|
||||
});
|
||||
const entries = Object.entries(res);
|
||||
expect(res).toBeDefined();
|
||||
expect(entries.length).toBe(1);
|
||||
expect(entries[0]).toEqual(['__jest__/three', '__jest__/four']);
|
||||
});
|
||||
|
||||
it('can parse replacements from a string', () => {
|
||||
const res = getFileReplacementsFromEnv({
|
||||
replace: 'one:two'
|
||||
})
|
||||
const entries = Object.entries(res)
|
||||
expect(res).toBeDefined()
|
||||
expect(entries.length).toBe(1)
|
||||
expect(entries[0]).toEqual([
|
||||
'one',
|
||||
'two'
|
||||
])
|
||||
})
|
||||
replace: 'one:two',
|
||||
});
|
||||
const entries = Object.entries(res);
|
||||
expect(res).toBeDefined();
|
||||
expect(entries.length).toBe(1);
|
||||
expect(entries[0]).toEqual(['__jest__/one', '__jest__/two']);
|
||||
});
|
||||
|
||||
it('can parse multiple replacements from a string', () => {
|
||||
const res = getFileReplacementsFromEnv({
|
||||
replace: 'one:two,three:four'
|
||||
})
|
||||
const entries = Object.entries(res)
|
||||
expect(res).toBeDefined()
|
||||
expect(entries.length).toBe(2)
|
||||
replace: 'one:two,three:four',
|
||||
});
|
||||
const entries = Object.entries(res);
|
||||
expect(res).toBeDefined();
|
||||
expect(entries.length).toBe(2);
|
||||
expect(entries).toEqual([
|
||||
['one', 'two'],
|
||||
['three', 'four'],
|
||||
])
|
||||
})
|
||||
['__jest__/one', '__jest__/two'],
|
||||
['__jest__/three', '__jest__/four'],
|
||||
]);
|
||||
});
|
||||
|
||||
it('can parse replacements from an array', () => {
|
||||
const res = getFileReplacementsFromEnv({
|
||||
replace: [
|
||||
'one:two',
|
||||
'three:four'
|
||||
]
|
||||
})
|
||||
const entries = Object.entries(res)
|
||||
expect(res).toBeDefined()
|
||||
expect(entries.length).toBe(2)
|
||||
replace: ['one:two', 'three:four'],
|
||||
});
|
||||
const entries = Object.entries(res);
|
||||
expect(res).toBeDefined();
|
||||
expect(entries.length).toBe(2);
|
||||
expect(entries).toEqual([
|
||||
['one', 'two'],
|
||||
['three', 'four'],
|
||||
])
|
||||
})
|
||||
['__jest__/one', '__jest__/two'],
|
||||
['__jest__/three', '__jest__/four'],
|
||||
]);
|
||||
});
|
||||
|
||||
it('can parse multiple replacements from an array', () => {
|
||||
const res = getFileReplacementsFromEnv({
|
||||
replace: [
|
||||
'one:two,three:four',
|
||||
'five:six'
|
||||
]
|
||||
})
|
||||
const entries = Object.entries(res)
|
||||
expect(res).toBeDefined()
|
||||
expect(entries.length).toBe(3)
|
||||
replace: ['one:two,three:four', 'five:six'],
|
||||
});
|
||||
const entries = Object.entries(res);
|
||||
expect(res).toBeDefined();
|
||||
expect(entries.length).toBe(3);
|
||||
expect(entries).toEqual([
|
||||
['one', 'two'],
|
||||
['three', 'four'],
|
||||
['five', 'six'],
|
||||
])
|
||||
})
|
||||
['__jest__/one', '__jest__/two'],
|
||||
['__jest__/three', '__jest__/four'],
|
||||
['__jest__/five', '__jest__/six'],
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
@ -1,5 +1,8 @@
|
||||
import { resolve } from 'path';
|
||||
|
||||
import { env as _env, IWebpackEnv } from '../index';
|
||||
import { addCopyRule } from './copyRules';
|
||||
import { getProjectRootPath } from './project';
|
||||
|
||||
interface IReplacementMap {
|
||||
[_replace: string]: /* _with */ string;
|
||||
@ -27,11 +30,17 @@ export function getFileReplacementsFromEnv(
|
||||
|
||||
entries.forEach((replaceEntry) => {
|
||||
replaceEntry.split(/,\s*/).forEach((r: string) => {
|
||||
const [_replace, _with] = r.split(':');
|
||||
let [_replace, _with] = r.split(':');
|
||||
|
||||
if (!_replace || !_with) {
|
||||
return;
|
||||
}
|
||||
|
||||
// make sure to resolve replacements to a full path
|
||||
// relative to the project root
|
||||
_replace = resolve(getProjectRootPath(), _replace);
|
||||
_with = resolve(getProjectRootPath(), _with);
|
||||
|
||||
fileReplacements[_replace] = _with;
|
||||
});
|
||||
});
|
||||
|
Reference in New Issue
Block a user