diff --git a/CHANGELOG.md b/CHANGELOG.md index e4dd817..50055df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## next - Added `repo.describeRef(ref)` method, which returns an information object about the reference +- Added `repo.isOid(value)` method to check if a value is an object ID ## 0.1.3 (2023-10-13) diff --git a/README.md b/README.md index b72e8a7..52dd7ea 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,14 @@ const info = repo.describeRef('origin/HEAD'); // oid: '7b84f676f2fbea2a3c6d83924fa63059c7bdfbe2' // } ``` + +#### repo.isOid(value) + +Checks if a `value` is a valid oid. + +```js +repo.isOid('7b84f676f2fbea2a3c6d83924fa63059c7bdfbe2'); // true +repo.isOid('main'); // false ``` #### repo.listRemotes() diff --git a/src/resolve-ref.ts b/src/resolve-ref.ts index bf03477..7081ce5 100644 --- a/src/resolve-ref.ts +++ b/src/resolve-ref.ts @@ -164,6 +164,7 @@ export async function createRefIndex(gitdir: string) { ); return { + isOid, isRefExists: (ref: string) => expandRef(ref) !== null, resolveRef, expandRef: (ref: string) => (isOid(ref) ? ref : expandRef(ref)), diff --git a/test/resolve-ref.ts b/test/resolve-ref.ts index 1b3e57b..397bb2f 100644 --- a/test/resolve-ref.ts +++ b/test/resolve-ref.ts @@ -373,4 +373,24 @@ describe('resolve-ref', () => { }); }); }); + + describe('isOid()', () => { + it('should return true for a valid OID (40-character hexadecimal string)', function () { + assert.strictEqual(repo.isOid('1234567890abcdef1234567890abcdef12345678'), true); + }); + + const badValues = [ + '1234567890abcdef1234567890abcdef1234', + '1234567890abcdef1234567890abcdef12345678901234', + '1234567890abcdef1234567890abcdef1234567G', + 1234567895678901, + '' + ]; + + for (const value of badValues) { + it(JSON.stringify(value), () => { + assert.strictEqual(repo.isOid('1234567890abcdef1234567890abcdef1234567G'), false); + }); + } + }); });