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