@payloadcms/ui 3.91.0-internal.c1569dc → 3.91.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,108 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { buildClientFieldSchemaMap } from './index.js';
3
+ const payload = {
4
+ config: {
5
+ db: {
6
+ defaultIDType: 'number'
7
+ }
8
+ },
9
+ importMap: {}
10
+ };
11
+ const i18n = {
12
+ language: 'en',
13
+ t: key => key
14
+ };
15
+ const createConfig = fields => ({
16
+ collections: [{
17
+ slug: 'pages',
18
+ fields
19
+ }],
20
+ globals: []
21
+ });
22
+ const createRichTextFields = count => Array.from({
23
+ length: count
24
+ }, (_, index) => ({
25
+ name: `content${index}`,
26
+ type: 'richText'
27
+ }));
28
+ /**
29
+ * Builds a server schema map with the entries a rich text editor adds for its sub-fields
30
+ */
31
+ const createSchemaMap = richTextFields => {
32
+ const schemaMap = new Map();
33
+ for (const field of richTextFields) {
34
+ schemaMap.set(`pages.${field.name}`, {
35
+ name: field.name,
36
+ type: 'richText'
37
+ });
38
+ schemaMap.set(`pages.${field.name}.lexical_internal_feature.link.fields`, {
39
+ fields: [{
40
+ name: 'url',
41
+ type: 'text'
42
+ }]
43
+ });
44
+ schemaMap.set(`pages.${field.name}.lexical_internal_feature.link.fields.url`, {
45
+ name: 'url',
46
+ type: 'text'
47
+ });
48
+ }
49
+ return schemaMap;
50
+ };
51
+ class IterationCountingMap extends Map {
52
+ iterationCount = 0;
53
+ entries() {
54
+ this.iterationCount++;
55
+ return super.entries();
56
+ }
57
+ [Symbol.iterator]() {
58
+ this.iterationCount++;
59
+ return super[Symbol.iterator]();
60
+ }
61
+ }
62
+ const countSchemaMapIterations = richTextFieldCount => {
63
+ const fields = createRichTextFields(richTextFieldCount);
64
+ const schemaMap = new IterationCountingMap(createSchemaMap(fields));
65
+ buildClientFieldSchemaMap({
66
+ collectionSlug: 'pages',
67
+ config: createConfig(fields),
68
+ i18n,
69
+ payload,
70
+ schemaMap
71
+ });
72
+ return schemaMap.iterationCount;
73
+ };
74
+ describe('buildClientFieldSchemaMap', () => {
75
+ it('should add sub-fields of rich text fields nested in rich text sub-fields', () => {
76
+ const fields = createRichTextFields(1);
77
+ const schemaMap = createSchemaMap(fields);
78
+ schemaMap.set('pages.content0.lexical_blocks.quote.fields.body', {
79
+ name: 'body',
80
+ type: 'richText',
81
+ editor: {}
82
+ });
83
+ schemaMap.set('pages.content0.lexical_blocks.quote.fields.body.lexical_internal_feature.link', {
84
+ fields: [{
85
+ name: 'url',
86
+ type: 'text'
87
+ }]
88
+ });
89
+ const {
90
+ clientFieldSchemaMap
91
+ } = buildClientFieldSchemaMap({
92
+ collectionSlug: 'pages',
93
+ config: createConfig(fields),
94
+ i18n,
95
+ payload,
96
+ schemaMap
97
+ });
98
+ expect(clientFieldSchemaMap.get('pages.content0.lexical_blocks.quote.fields.body')).toMatchObject({
99
+ name: 'body',
100
+ type: 'richText'
101
+ });
102
+ expect(clientFieldSchemaMap.has('pages.content0.lexical_blocks.quote.fields.body.lexical_internal_feature.link')).toBe(true);
103
+ });
104
+ it('should not read the schema map once per rich text field', () => {
105
+ expect(countSchemaMapIterations(50)).toBe(countSchemaMapIterations(1));
106
+ });
107
+ });
108
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","names":["describe","expect","it","buildClientFieldSchemaMap","payload","config","db","defaultIDType","importMap","i18n","language","t","key","createConfig","fields","collections","slug","globals","createRichTextFields","count","Array","from","length","_","index","name","type","createSchemaMap","richTextFields","schemaMap","Map","field","set","IterationCountingMap","iterationCount","entries","Symbol","iterator","countSchemaMapIterations","richTextFieldCount","collectionSlug","editor","clientFieldSchemaMap","get","toMatchObject","has","toBe"],"sources":["../../../src/utilities/buildClientFieldSchemaMap/index.spec.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type {\n ClientConfig,\n ClientField,\n FieldSchemaMap,\n Payload,\n RichTextAdapter,\n RichTextFieldClient,\n} from 'payload'\n\nimport { describe, expect, it } from 'vitest'\n\nimport { buildClientFieldSchemaMap } from './index.js'\n\nconst payload = {\n config: { db: { defaultIDType: 'number' } },\n importMap: {},\n} as unknown as Payload\n\nconst i18n = {\n language: 'en',\n t: (key: string) => key,\n} as unknown as I18n\n\nconst createConfig = (fields: ClientField[]): ClientConfig =>\n ({\n collections: [{ slug: 'pages', fields }],\n globals: [],\n }) as unknown as ClientConfig\n\nconst createRichTextFields = (count: number): RichTextFieldClient[] =>\n Array.from({ length: count }, (_, index) => ({ name: `content${index}`, type: 'richText' }))\n\n/**\n * Builds a server schema map with the entries a rich text editor adds for its sub-fields\n */\nconst createSchemaMap = (richTextFields: RichTextFieldClient[]): FieldSchemaMap => {\n const schemaMap: FieldSchemaMap = new Map()\n\n for (const field of richTextFields) {\n schemaMap.set(`pages.${field.name}`, { name: field.name, type: 'richText' })\n schemaMap.set(`pages.${field.name}.lexical_internal_feature.link.fields`, {\n fields: [{ name: 'url', type: 'text' }],\n })\n schemaMap.set(`pages.${field.name}.lexical_internal_feature.link.fields.url`, {\n name: 'url',\n type: 'text',\n })\n }\n\n return schemaMap\n}\n\nclass IterationCountingMap<K, V> extends Map<K, V> {\n iterationCount = 0\n\n override entries() {\n this.iterationCount++\n return super.entries()\n }\n\n override [Symbol.iterator]() {\n this.iterationCount++\n return super[Symbol.iterator]()\n }\n}\n\nconst countSchemaMapIterations = (richTextFieldCount: number): number => {\n const fields = createRichTextFields(richTextFieldCount)\n const schemaMap = new IterationCountingMap(createSchemaMap(fields))\n\n buildClientFieldSchemaMap({\n collectionSlug: 'pages',\n config: createConfig(fields),\n i18n,\n payload,\n schemaMap,\n })\n\n return schemaMap.iterationCount\n}\n\ndescribe('buildClientFieldSchemaMap', () => {\n it('should add sub-fields of rich text fields nested in rich text sub-fields', () => {\n const fields = createRichTextFields(1)\n const schemaMap = createSchemaMap(fields)\n\n schemaMap.set('pages.content0.lexical_blocks.quote.fields.body', {\n name: 'body',\n type: 'richText',\n editor: {} as RichTextAdapter,\n })\n schemaMap.set('pages.content0.lexical_blocks.quote.fields.body.lexical_internal_feature.link', {\n fields: [{ name: 'url', type: 'text' }],\n })\n\n const { clientFieldSchemaMap } = buildClientFieldSchemaMap({\n collectionSlug: 'pages',\n config: createConfig(fields),\n i18n,\n payload,\n schemaMap,\n })\n\n expect(\n clientFieldSchemaMap.get('pages.content0.lexical_blocks.quote.fields.body'),\n ).toMatchObject({ name: 'body', type: 'richText' })\n expect(\n clientFieldSchemaMap.has(\n 'pages.content0.lexical_blocks.quote.fields.body.lexical_internal_feature.link',\n ),\n ).toBe(true)\n })\n\n it('should not read the schema map once per rich text field', () => {\n expect(countSchemaMapIterations(50)).toBe(countSchemaMapIterations(1))\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/utilities/buildClientFieldSchemaMap/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,OAAO,EACP,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAKhB,KAAK,IAAI,GAAG;IACV,eAAe,EAAE,oBAAoB,CAAA;IACrC,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAA;IAC1C,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,sGASxB,IAAI,SA+LN,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/utilities/buildClientFieldSchemaMap/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,OAAO,EACP,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAKhB,KAAK,IAAI,GAAG;IACV,eAAe,EAAE,oBAAoB,CAAA;IACrC,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAA;IAC1C,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,sGASxB,IAAI,SA2LN,CAAA"}
@@ -105,12 +105,9 @@ export const traverseFields = ({
105
105
  // 2. convert them to client fields
106
106
  // 3. add them to the client schema map
107
107
  // So these would basically be all fields that are not part of the client config already
108
- const richTextFieldSchemaMap = new Map();
109
- for (const [path, subField] of schemaMap.entries()) {
110
- if (path.startsWith(`${schemaPath}.`)) {
111
- richTextFieldSchemaMap.set(path, subField);
112
- }
113
- }
108
+ const richTextFieldSchemaMap = getRichTextSubFieldsByPath({
109
+ schemaMap
110
+ }).get(schemaPath) ?? new Map();
114
111
  // Now loop through them, convert each entry to a client field and add it to the client schema map.
115
112
  // Schema map values are a union: Block | Field | Tab | { fields: Field[] }.
116
113
  // Each variant needs different conversion to strip server-only properties.
@@ -188,4 +185,33 @@ export const traverseFields = ({
188
185
  }
189
186
  }
190
187
  };
188
+ const richTextSubFieldsCache = new WeakMap();
189
+ /**
190
+ * Groups the schema map entries by the rich text field they belong to,
191
+ * so each rich text field does not have to scan the whole schema map.
192
+ */
193
+ function getRichTextSubFieldsByPath({
194
+ schemaMap
195
+ }) {
196
+ const cachedSubFieldsByPath = richTextSubFieldsCache.get(schemaMap);
197
+ if (cachedSubFieldsByPath) {
198
+ return cachedSubFieldsByPath;
199
+ }
200
+ const subFieldsByPath = new Map();
201
+ for (const [path, field] of schemaMap) {
202
+ if ('type' in field && field.type === 'richText') {
203
+ subFieldsByPath.set(path, new Map());
204
+ }
205
+ }
206
+ for (const [path, field] of schemaMap) {
207
+ let separatorIndex = path.indexOf('.');
208
+ // A sub-field of a nested rich text field belongs to each of its rich text ancestors
209
+ while (separatorIndex !== -1) {
210
+ subFieldsByPath.get(path.slice(0, separatorIndex))?.set(path, field);
211
+ separatorIndex = path.indexOf('.', separatorIndex + 1);
212
+ }
213
+ }
214
+ richTextSubFieldsCache.set(schemaMap, subFieldsByPath);
215
+ return subFieldsByPath;
216
+ }
191
217
  //# sourceMappingURL=traverseFields.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.js","names":["createClientBlocks","createClientFields","fieldAffectsData","getFieldPaths","tabHasName","traverseFields","clientSchemaMap","config","fields","i18n","parentIndexPath","parentSchemaPath","payload","schemaMap","index","field","entries","indexPath","schemaPath","set","type","blockReferences","blocks","map","_block","block","blocksMap","find","slug","blockSchemaPath","richTextFieldSchemaMap","Map","path","subField","startsWith","clientBlocks","defaultIDType","db","importMap","clientFields","disableAddingID","isNamedTab","tabs","tab"],"sources":["../../../src/utilities/buildClientFieldSchemaMap/traverseFields.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type {\n ClientBlock,\n ClientConfig,\n ClientField,\n ClientFieldSchemaMap,\n FieldSchemaMap,\n Payload,\n TabAsFieldClient,\n} from 'payload'\n\nimport { createClientBlocks, createClientFields } from 'payload'\nimport { fieldAffectsData, getFieldPaths, tabHasName } from 'payload/shared'\n\ntype Args = {\n clientSchemaMap: ClientFieldSchemaMap\n config: ClientConfig\n fields: (ClientField | TabAsFieldClient)[]\n i18n: I18n<any, any>\n parentIndexPath: string\n parentSchemaPath: string\n payload: Payload\n schemaMap: FieldSchemaMap\n}\n\nexport const traverseFields = ({\n clientSchemaMap,\n config,\n fields,\n i18n,\n parentIndexPath,\n parentSchemaPath,\n payload,\n schemaMap,\n}: Args) => {\n for (const [index, field] of fields.entries()) {\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index,\n parentIndexPath,\n parentSchemaPath,\n })\n\n clientSchemaMap.set(schemaPath, field)\n\n switch (field.type) {\n case 'array': {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n\n break\n }\n\n case 'blocks':\n ;(field.blockReferences ?? field.blocks).map((_block) => {\n const block =\n typeof _block === 'string'\n ? config.blocksMap\n ? config.blocksMap[_block]\n : config.blocks.find((block) => typeof block !== 'string' && block.slug === _block)\n : _block\n\n const blockSchemaPath = `${schemaPath}.${block.slug}`\n\n clientSchemaMap.set(blockSchemaPath, block)\n traverseFields({\n clientSchemaMap,\n config,\n fields: block.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath + '.' + block.slug,\n payload,\n schemaMap,\n })\n })\n\n break\n\n case 'collapsible':\n case 'row': {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n } else {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n }\n break\n }\n\n case 'richText': {\n // richText sub-fields are not part of the ClientConfig or the Config.\n // They only exist in the field schema map.\n // Thus, we need to\n // 1. get them from the field schema map\n // 2. convert them to client fields\n // 3. add them to the client schema map\n\n // So these would basically be all fields that are not part of the client config already\n const richTextFieldSchemaMap: FieldSchemaMap = new Map()\n for (const [path, subField] of schemaMap.entries()) {\n if (path.startsWith(`${schemaPath}.`)) {\n richTextFieldSchemaMap.set(path, subField)\n }\n }\n\n // Now loop through them, convert each entry to a client field and add it to the client schema map.\n // Schema map values are a union: Block | Field | Tab | { fields: Field[] }.\n // Each variant needs different conversion to strip server-only properties.\n for (const [path, subField] of richTextFieldSchemaMap.entries()) {\n if ('slug' in subField) {\n const clientBlocks = createClientBlocks({\n blocks: [subField],\n defaultIDType: payload.config.db.defaultIDType,\n i18n,\n importMap: payload.importMap,\n })\n\n clientSchemaMap.set(path, clientBlocks[0] as ClientBlock)\n continue\n }\n\n if ('type' in subField) {\n const clientFields = createClientFields({\n defaultIDType: payload.config.db.defaultIDType,\n disableAddingID: true,\n fields: [subField],\n i18n,\n importMap: payload.importMap,\n })\n\n clientSchemaMap.set(path, clientFields[0])\n continue\n }\n\n if ('fields' in subField) {\n const clientFields = createClientFields({\n defaultIDType: payload.config.db.defaultIDType,\n disableAddingID: true,\n fields: subField.fields,\n i18n,\n importMap: payload.importMap,\n })\n\n clientSchemaMap.set(path, { fields: clientFields })\n continue\n }\n\n subField satisfies never\n }\n break\n }\n\n case 'tab': {\n const isNamedTab = tabHasName(field)\n\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: isNamedTab ? '' : indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n\n break\n }\n\n case 'tabs': {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n\n break\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"traverseFields.js","names":["createClientBlocks","createClientFields","fieldAffectsData","getFieldPaths","tabHasName","traverseFields","clientSchemaMap","config","fields","i18n","parentIndexPath","parentSchemaPath","payload","schemaMap","index","field","entries","indexPath","schemaPath","set","type","blockReferences","blocks","map","_block","block","blocksMap","find","slug","blockSchemaPath","richTextFieldSchemaMap","getRichTextSubFieldsByPath","get","Map","path","subField","clientBlocks","defaultIDType","db","importMap","clientFields","disableAddingID","isNamedTab","tabs","tab","richTextSubFieldsCache","WeakMap","cachedSubFieldsByPath","subFieldsByPath","separatorIndex","indexOf","slice"],"sources":["../../../src/utilities/buildClientFieldSchemaMap/traverseFields.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type {\n ClientBlock,\n ClientConfig,\n ClientField,\n ClientFieldSchemaMap,\n FieldSchemaMap,\n Payload,\n TabAsFieldClient,\n} from 'payload'\n\nimport { createClientBlocks, createClientFields } from 'payload'\nimport { fieldAffectsData, getFieldPaths, tabHasName } from 'payload/shared'\n\ntype Args = {\n clientSchemaMap: ClientFieldSchemaMap\n config: ClientConfig\n fields: (ClientField | TabAsFieldClient)[]\n i18n: I18n<any, any>\n parentIndexPath: string\n parentSchemaPath: string\n payload: Payload\n schemaMap: FieldSchemaMap\n}\n\nexport const traverseFields = ({\n clientSchemaMap,\n config,\n fields,\n i18n,\n parentIndexPath,\n parentSchemaPath,\n payload,\n schemaMap,\n}: Args) => {\n for (const [index, field] of fields.entries()) {\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index,\n parentIndexPath,\n parentSchemaPath,\n })\n\n clientSchemaMap.set(schemaPath, field)\n\n switch (field.type) {\n case 'array': {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n\n break\n }\n\n case 'blocks':\n ;(field.blockReferences ?? field.blocks).map((_block) => {\n const block =\n typeof _block === 'string'\n ? config.blocksMap\n ? config.blocksMap[_block]\n : config.blocks.find((block) => typeof block !== 'string' && block.slug === _block)\n : _block\n\n const blockSchemaPath = `${schemaPath}.${block.slug}`\n\n clientSchemaMap.set(blockSchemaPath, block)\n traverseFields({\n clientSchemaMap,\n config,\n fields: block.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath + '.' + block.slug,\n payload,\n schemaMap,\n })\n })\n\n break\n\n case 'collapsible':\n case 'row': {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: '',\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n } else {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n }\n break\n }\n\n case 'richText': {\n // richText sub-fields are not part of the ClientConfig or the Config.\n // They only exist in the field schema map.\n // Thus, we need to\n // 1. get them from the field schema map\n // 2. convert them to client fields\n // 3. add them to the client schema map\n\n // So these would basically be all fields that are not part of the client config already\n const richTextFieldSchemaMap: FieldSchemaMap =\n getRichTextSubFieldsByPath({ schemaMap }).get(schemaPath) ?? new Map()\n\n // Now loop through them, convert each entry to a client field and add it to the client schema map.\n // Schema map values are a union: Block | Field | Tab | { fields: Field[] }.\n // Each variant needs different conversion to strip server-only properties.\n for (const [path, subField] of richTextFieldSchemaMap.entries()) {\n if ('slug' in subField) {\n const clientBlocks = createClientBlocks({\n blocks: [subField],\n defaultIDType: payload.config.db.defaultIDType,\n i18n,\n importMap: payload.importMap,\n })\n\n clientSchemaMap.set(path, clientBlocks[0] as ClientBlock)\n continue\n }\n\n if ('type' in subField) {\n const clientFields = createClientFields({\n defaultIDType: payload.config.db.defaultIDType,\n disableAddingID: true,\n fields: [subField],\n i18n,\n importMap: payload.importMap,\n })\n\n clientSchemaMap.set(path, clientFields[0])\n continue\n }\n\n if ('fields' in subField) {\n const clientFields = createClientFields({\n defaultIDType: payload.config.db.defaultIDType,\n disableAddingID: true,\n fields: subField.fields,\n i18n,\n importMap: payload.importMap,\n })\n\n clientSchemaMap.set(path, { fields: clientFields })\n continue\n }\n\n subField satisfies never\n }\n break\n }\n\n case 'tab': {\n const isNamedTab = tabHasName(field)\n\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.fields,\n i18n,\n parentIndexPath: isNamedTab ? '' : indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n\n break\n }\n\n case 'tabs': {\n traverseFields({\n clientSchemaMap,\n config,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n i18n,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n payload,\n schemaMap,\n })\n\n break\n }\n }\n }\n}\n\nconst richTextSubFieldsCache = new WeakMap<FieldSchemaMap, Map<string, FieldSchemaMap>>()\n\n/**\n * Groups the schema map entries by the rich text field they belong to,\n * so each rich text field does not have to scan the whole schema map.\n */\nfunction getRichTextSubFieldsByPath({\n schemaMap,\n}: {\n schemaMap: FieldSchemaMap\n}): Map<string, FieldSchemaMap> {\n const cachedSubFieldsByPath = richTextSubFieldsCache.get(schemaMap)\n\n if (cachedSubFieldsByPath) {\n return cachedSubFieldsByPath\n }\n\n const subFieldsByPath = new Map<string, FieldSchemaMap>()\n\n for (const [path, field] of schemaMap) {\n if ('type' in field && field.type === 'richText') {\n subFieldsByPath.set(path, new Map())\n }\n }\n\n for (const [path, field] of schemaMap) {\n let separatorIndex = path.indexOf('.')\n\n // A sub-field of a nested rich text field belongs to each of its rich text ancestors\n while (separatorIndex !== -1) {\n subFieldsByPath.get(path.slice(0, separatorIndex))?.set(path, field)\n separatorIndex = path.indexOf('.', separatorIndex + 1)\n }\n }\n\n richTextSubFieldsCache.set(schemaMap, subFieldsByPath)\n\n return subFieldsByPath\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "3.91.0-internal.c1569dc",
3
+ "version": "3.91.0",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -137,7 +137,7 @@
137
137
  "ts-essentials": "10.0.3",
138
138
  "use-context-selector": "2.0.0",
139
139
  "uuid": "13.0.2",
140
- "@payloadcms/translations": "3.91.0-internal.c1569dc"
140
+ "@payloadcms/translations": "3.91.0"
141
141
  },
142
142
  "devDependencies": {
143
143
  "@babel/cli": "7.27.2",
@@ -151,17 +151,17 @@
151
151
  "babel-plugin-react-compiler": "19.1.0-rc.3",
152
152
  "esbuild": "0.27.1",
153
153
  "esbuild-sass-plugin": "3.3.1",
154
- "@payloadcms/eslint-config": "3.28.0",
155
- "payload": "3.91.0-internal.c1569dc"
154
+ "payload": "3.91.0",
155
+ "@payloadcms/eslint-config": "3.28.0"
156
156
  },
157
157
  "peerDependencies": {
158
158
  "next": ">=15.2.9 <15.3.0 || >=15.3.9 <15.4.0 || >=15.4.11 <15.5.0 || >=16.3.3 <17.0.0",
159
159
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
160
160
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
161
- "payload": "3.91.0-internal.c1569dc"
161
+ "payload": "3.91.0"
162
162
  },
163
163
  "engines": {
164
- "node": "^18.20.2 || >=20.9.0"
164
+ "node": ">=20.18.1"
165
165
  },
166
166
  "scripts": {
167
167
  "build": "pnpm build:reactcompiler",