{"version":3,"sources":["../../src/utilities/getFieldByPath.ts"],"sourcesContent":["import type { SanitizedConfig } from '../config/types.js'\nimport type { FlattenedField } from '../fields/config/types.js'\n\n/**\n * Get the field by its schema path, e.g. group.title, array.group.title\n * If there were any localized on the path, `pathHasLocalized` will be true and `localizedPath` will look like:\n * `group..title` // group is localized here\n */\nexport const getFieldByPath = ({\n config,\n fields,\n includeRelationships = false,\n localizedPath = '',\n path,\n}: {\n config?: SanitizedConfig\n fields: FlattenedField[]\n includeRelationships?: boolean\n localizedPath?: string\n /**\n * The schema path, e.g. `array.group.title`\n */\n path: string\n}): {\n field: FlattenedField\n localizedPath: string\n pathHasLocalized: boolean\n} | null => {\n let currentFields: FlattenedField[] = fields\n\n let currentField: FlattenedField | null = null\n\n const segments = path.split('.')\n\n let pathHasLocalized = false\n\n while (segments.length > 0) {\n const segment = segments.shift()\n\n localizedPath = `${localizedPath ? `${localizedPath}.` : ''}${segment}`\n const field = currentFields.find((each) => each.name === segment)\n\n if (!field) {\n return null\n }\n\n if (field.localized) {\n pathHasLocalized = true\n localizedPath = `${localizedPath}.`\n }\n\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n }\n\n if (\n config &&\n includeRelationships &&\n (field.type === 'relationship' || field.type === 'upload') &&\n !Array.isArray(field.relationTo)\n ) {\n const flattenedFields = config.collections.find(\n (e) => e.slug === field.relationTo,\n )?.flattenedFields\n if (flattenedFields) {\n currentFields = flattenedFields\n }\n\n if (segments.length === 1 && segments[0] === 'id') {\n return { field, localizedPath, pathHasLocalized }\n }\n }\n\n if ('blocks' in field && segments.length > 0) {\n const blockSlug = segments[0]\n const block = field.blocks.find((b) => b.slug === blockSlug)\n\n if (block) {\n segments.shift()\n localizedPath = `${localizedPath}.${blockSlug}`\n\n if (segments.length === 0) {\n return null\n }\n\n return getFieldByPath({\n config,\n fields: block.flattenedFields,\n includeRelationships,\n localizedPath,\n path: segments.join('.'),\n })\n }\n }\n\n currentField = field\n }\n\n if (!currentField) {\n return null\n }\n\n return { field: currentField, localizedPath, pathHasLocalized }\n}\n"],"names":["getFieldByPath","config","fields","includeRelationships","localizedPath","path","currentFields","currentField","segments","split","pathHasLocalized","length","segment","shift","field","find","each","name","localized","flattenedFields","type","Array","isArray","relationTo","collections","e","slug","blockSlug","block","blocks","b","join"],"mappings":"AAGA;;;;CAIC,GACD,OAAO,MAAMA,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,MAAM,EACNC,uBAAuB,KAAK,EAC5BC,gBAAgB,EAAE,EAClBC,IAAI,EAUL;IAKC,IAAIC,gBAAkCJ;IAEtC,IAAIK,eAAsC;IAE1C,MAAMC,WAAWH,KAAKI,KAAK,CAAC;IAE5B,IAAIC,mBAAmB;IAEvB,MAAOF,SAASG,MAAM,GAAG,EAAG;QAC1B,MAAMC,UAAUJ,SAASK,KAAK;QAE9BT,gBAAgB,GAAGA,gBAAgB,GAAGA,cAAc,CAAC,CAAC,GAAG,KAAKQ,SAAS;QACvE,MAAME,QAAQR,cAAcS,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKL;QAEzD,IAAI,CAACE,OAAO;YACV,OAAO;QACT;QAEA,IAAIA,MAAMI,SAAS,EAAE;YACnBR,mBAAmB;YACnBN,gBAAgB,GAAGA,cAAc,SAAS,CAAC;QAC7C;QAEA,IAAI,qBAAqBU,OAAO;YAC9BR,gBAAgBQ,MAAMK,eAAe;QACvC;QAEA,IACElB,UACAE,wBACCW,CAAAA,MAAMM,IAAI,KAAK,kBAAkBN,MAAMM,IAAI,KAAK,QAAO,KACxD,CAACC,MAAMC,OAAO,CAACR,MAAMS,UAAU,GAC/B;YACA,MAAMJ,kBAAkBlB,OAAOuB,WAAW,CAACT,IAAI,CAC7C,CAACU,IAAMA,EAAEC,IAAI,KAAKZ,MAAMS,UAAU,GACjCJ;YACH,IAAIA,iBAAiB;gBACnBb,gBAAgBa;YAClB;YAEA,IAAIX,SAASG,MAAM,KAAK,KAAKH,QAAQ,CAAC,EAAE,KAAK,MAAM;gBACjD,OAAO;oBAAEM;oBAAOV;oBAAeM;gBAAiB;YAClD;QACF;QAEA,IAAI,YAAYI,SAASN,SAASG,MAAM,GAAG,GAAG;YAC5C,MAAMgB,YAAYnB,QAAQ,CAAC,EAAE;YAC7B,MAAMoB,QAAQd,MAAMe,MAAM,CAACd,IAAI,CAAC,CAACe,IAAMA,EAAEJ,IAAI,KAAKC;YAElD,IAAIC,OAAO;gBACTpB,SAASK,KAAK;gBACdT,gBAAgB,GAAGA,cAAc,CAAC,EAAEuB,WAAW;gBAE/C,IAAInB,SAASG,MAAM,KAAK,GAAG;oBACzB,OAAO;gBACT;gBAEA,OAAOX,eAAe;oBACpBC;oBACAC,QAAQ0B,MAAMT,eAAe;oBAC7BhB;oBACAC;oBACAC,MAAMG,SAASuB,IAAI,CAAC;gBACtB;YACF;QACF;QAEAxB,eAAeO;IACjB;IAEA,IAAI,CAACP,cAAc;QACjB,OAAO;IACT;IAEA,OAAO;QAAEO,OAAOP;QAAcH;QAAeM;IAAiB;AAChE,EAAC"}