diff --git a/src/encoder.test.ts b/src/encoder.test.ts index c7d2d4e..8c7e723 100644 --- a/src/encoder.test.ts +++ b/src/encoder.test.ts @@ -1,7 +1,7 @@ import {describe, expect, test} from 'vitest' import testDescriptors from './__fixtures__/descriptors.json' -import {encode, type Encoded} from './encoder' +import {type EncodableObject, encode, type Encoded} from './encoder' describe('Fixtures', () => { test.each( @@ -13,3 +13,30 @@ describe('Fixtures', () => { expect(encoded.id).toBe(id) }) }) + +describe('Regressions', () => { + test('invalid descriptor ID with rewriteMap', () => { + const makeTypeDef = (field: EncodableObject) => ({ + name: 'species', + typeDef: { + hello: undefined, + extends: 'document', + title: 'Species', + fields: [field], + }, + }) + + const sourceField = {type: 'hello', name: 'world'} + const hoisted = {__type: 'hoisted', key: 'book.author._ref'} + + const withSource = makeTypeDef(sourceField) + const rewriteMap = new Map() + rewriteMap.set(sourceField, hoisted) + const result = encode('sanity.schema.namedType', withSource, {rewriteMap}) + + const withHoisted = makeTypeDef(hoisted) + const manuallyRewritten = encode('sanity.schema.namedType', withHoisted) + + expect(result).toStrictEqual(manuallyRewritten) + }) +}) diff --git a/src/encoder.ts b/src/encoder.ts index 72cefc7..63a2910 100644 --- a/src/encoder.ts +++ b/src/encoder.ts @@ -127,6 +127,7 @@ class IDEncoder { for (const [key, field] of entries) { if (field === undefined) { + idx++ continue }