Skip to content

Commit 24a8145

Browse files
feat: add function to replace variables
1 parent 1d99b31 commit 24a8145

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

__tests__/utils2.test.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
import { testEnv } from '@technote-space/github-action-test-helper';
33
import { Utils } from '../src';
44

5-
const {generateNewPatchVersion, generateNewMinorVersion, generateNewMajorVersion, arrayChunk, versionCompare, mask} = Utils;
6-
const {isBranch, isTagRef, normalizeRef, trimRef, getTag, getRefspec, getRemoteRefspec, getLocalRefspec, getOctokit} = Utils;
5+
const {generateNewPatchVersion, generateNewMinorVersion, generateNewMajorVersion, arrayChunk, versionCompare, mask} = Utils;
6+
const {isBranch, isTagRef, normalizeRef, trimRef, getTag, getRefspec, getRemoteRefspec, getLocalRefspec, getOctokit, replaceVariables} = Utils;
77

88
jest.useFakeTimers();
99

@@ -251,3 +251,15 @@ describe('mask', () => {
251251
});
252252
});
253253
});
254+
255+
describe('replaceVariables', () => {
256+
it('should replace variables', async() => {
257+
expect(await replaceVariables('', [])).toBe('');
258+
expect(await replaceVariables('${test1}/${test2}/${test3}/${test4}', [
259+
{key: 'test1', replace: '1'},
260+
{key: 'test2', replace: (): string => '2'},
261+
{key: 'test3', replace: (): Promise<string> => Promise.resolve('3')},
262+
{key: 'test5', replace: '5'},
263+
])).toBe('1/2/3/${test4}');
264+
});
265+
});

src/utils.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,18 @@ export const mask = (value: object, target = 'token'): object => {
186186

187187
return value;
188188
};
189+
190+
export const replaceVariables = async(string: string, variables: { key: string; replace: (() => Promise<string> | string) | string }[]): Promise<string> => {
191+
let replaced = string;
192+
for (const variable of variables) {
193+
if (getRegExp(`\${${variable.key}}`).test(replaced)) {
194+
if (typeof variable.replace === 'string') {
195+
replaced = replaceAll(replaced, `\${${variable.key}}`, variable.replace);
196+
} else {
197+
replaced = replaceAll(replaced, `\${${variable.key}}`, await variable.replace());
198+
}
199+
}
200+
}
201+
202+
return replaced;
203+
};

0 commit comments

Comments
 (0)