@extravirgin/payload-enchants-translator 1.0.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.
Files changed (124) hide show
  1. package/README.md +215 -0
  2. package/dist/client/api/index.d.ts +8 -0
  3. package/dist/client/api/index.d.ts.map +1 -0
  4. package/dist/client/api/index.js +28 -0
  5. package/dist/client/api/index.js.map +1 -0
  6. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +5 -0
  7. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +1 -0
  8. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +28 -0
  9. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +1 -0
  10. package/dist/client/components/CustomButton/index.d.ts +3 -0
  11. package/dist/client/components/CustomButton/index.d.ts.map +1 -0
  12. package/dist/client/components/CustomButton/index.js +10 -0
  13. package/dist/client/components/CustomButton/index.js.map +1 -0
  14. package/dist/client/components/CustomButton/styles.scss +5 -0
  15. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +5 -0
  16. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +1 -0
  17. package/dist/client/components/LocaleLabel/LocaleLabel.js +28 -0
  18. package/dist/client/components/LocaleLabel/LocaleLabel.js.map +1 -0
  19. package/dist/client/components/LocaleLabel/index.d.ts +2 -0
  20. package/dist/client/components/LocaleLabel/index.d.ts.map +1 -0
  21. package/dist/client/components/LocaleLabel/index.js +3 -0
  22. package/dist/client/components/LocaleLabel/index.js.map +1 -0
  23. package/dist/client/components/ResolverButton/ResolverButton.d.ts +5 -0
  24. package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +1 -0
  25. package/dist/client/components/ResolverButton/ResolverButton.js +16 -0
  26. package/dist/client/components/ResolverButton/ResolverButton.js.map +1 -0
  27. package/dist/client/components/ResolverButton/index.d.ts +2 -0
  28. package/dist/client/components/ResolverButton/index.d.ts.map +1 -0
  29. package/dist/client/components/ResolverButton/index.js +3 -0
  30. package/dist/client/components/ResolverButton/index.js.map +1 -0
  31. package/dist/client/components/TranslatorModal/Content.d.ts +2 -0
  32. package/dist/client/components/TranslatorModal/Content.d.ts.map +1 -0
  33. package/dist/client/components/TranslatorModal/Content.js +60 -0
  34. package/dist/client/components/TranslatorModal/Content.js.map +1 -0
  35. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +3 -0
  36. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +1 -0
  37. package/dist/client/components/TranslatorModal/TranslatorModal.js +26 -0
  38. package/dist/client/components/TranslatorModal/TranslatorModal.js.map +1 -0
  39. package/dist/client/components/TranslatorModal/index.d.ts +2 -0
  40. package/dist/client/components/TranslatorModal/index.d.ts.map +1 -0
  41. package/dist/client/components/TranslatorModal/index.js +3 -0
  42. package/dist/client/components/TranslatorModal/index.js.map +1 -0
  43. package/dist/client/components/TranslatorModal/styles.scss +76 -0
  44. package/dist/client/providers/Translator/TranslatorProvider.d.ts +5 -0
  45. package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +1 -0
  46. package/dist/client/providers/Translator/TranslatorProvider.js +114 -0
  47. package/dist/client/providers/Translator/TranslatorProvider.js.map +1 -0
  48. package/dist/client/providers/Translator/context.d.ts +21 -0
  49. package/dist/client/providers/Translator/context.d.ts.map +1 -0
  50. package/dist/client/providers/Translator/context.js +9 -0
  51. package/dist/client/providers/Translator/context.js.map +1 -0
  52. package/dist/exports/client.d.ts +2 -0
  53. package/dist/exports/client.d.ts.map +1 -0
  54. package/dist/exports/client.js +3 -0
  55. package/dist/exports/client.js.map +1 -0
  56. package/dist/i18n-translations.d.ts +87 -0
  57. package/dist/i18n-translations.d.ts.map +1 -0
  58. package/dist/i18n-translations.js +88 -0
  59. package/dist/i18n-translations.js.map +1 -0
  60. package/dist/index.d.ts +11 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +87 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/resolvers/copy.d.ts +3 -0
  65. package/dist/resolvers/copy.d.ts.map +1 -0
  66. package/dist/resolvers/copy.js +14 -0
  67. package/dist/resolvers/copy.js.map +1 -0
  68. package/dist/resolvers/google.d.ts +11 -0
  69. package/dist/resolvers/google.d.ts.map +1 -0
  70. package/dist/resolvers/google.js +47 -0
  71. package/dist/resolvers/google.js.map +1 -0
  72. package/dist/resolvers/libreTranslate.d.ts +16 -0
  73. package/dist/resolvers/libreTranslate.d.ts.map +1 -0
  74. package/dist/resolvers/libreTranslate.js +48 -0
  75. package/dist/resolvers/libreTranslate.js.map +1 -0
  76. package/dist/resolvers/openAI.d.ts +22 -0
  77. package/dist/resolvers/openAI.d.ts.map +1 -0
  78. package/dist/resolvers/openAI.js +100 -0
  79. package/dist/resolvers/openAI.js.map +1 -0
  80. package/dist/resolvers/types.d.ts +20 -0
  81. package/dist/resolvers/types.d.ts.map +1 -0
  82. package/dist/resolvers/types.js +3 -0
  83. package/dist/resolvers/types.js.map +1 -0
  84. package/dist/translate/endpoint.d.ts +3 -0
  85. package/dist/translate/endpoint.d.ts.map +1 -0
  86. package/dist/translate/endpoint.js +23 -0
  87. package/dist/translate/endpoint.js.map +1 -0
  88. package/dist/translate/findEntityWithConfig.d.ts +15 -0
  89. package/dist/translate/findEntityWithConfig.d.ts.map +1 -0
  90. package/dist/translate/findEntityWithConfig.js +35 -0
  91. package/dist/translate/findEntityWithConfig.js.map +1 -0
  92. package/dist/translate/operation.d.ts +9 -0
  93. package/dist/translate/operation.d.ts.map +1 -0
  94. package/dist/translate/operation.js +76 -0
  95. package/dist/translate/operation.js.map +1 -0
  96. package/dist/translate/traverseFields.d.ts +13 -0
  97. package/dist/translate/traverseFields.d.ts.map +1 -0
  98. package/dist/translate/traverseFields.js +233 -0
  99. package/dist/translate/traverseFields.js.map +1 -0
  100. package/dist/translate/traverseRichText.d.ts +6 -0
  101. package/dist/translate/traverseRichText.d.ts.map +1 -0
  102. package/dist/translate/traverseRichText.js +17 -0
  103. package/dist/translate/traverseRichText.js.map +1 -0
  104. package/dist/translate/types.d.ts +25 -0
  105. package/dist/translate/types.d.ts.map +1 -0
  106. package/dist/translate/types.js +3 -0
  107. package/dist/translate/types.js.map +1 -0
  108. package/dist/translate/updateEntity.d.ts +14 -0
  109. package/dist/translate/updateEntity.d.ts.map +1 -0
  110. package/dist/translate/updateEntity.js +26 -0
  111. package/dist/translate/updateEntity.js.map +1 -0
  112. package/dist/types.d.ts +21 -0
  113. package/dist/types.d.ts.map +1 -0
  114. package/dist/types.js +3 -0
  115. package/dist/types.js.map +1 -0
  116. package/dist/utils/chunkArray.d.ts +2 -0
  117. package/dist/utils/chunkArray.d.ts.map +1 -0
  118. package/dist/utils/chunkArray.js +7 -0
  119. package/dist/utils/chunkArray.js.map +1 -0
  120. package/dist/utils/isEmpty.d.ts +2 -0
  121. package/dist/utils/isEmpty.d.ts.map +1 -0
  122. package/dist/utils/isEmpty.js +8 -0
  123. package/dist/utils/isEmpty.js.map +1 -0
  124. package/package.json +119 -0
@@ -0,0 +1,233 @@
1
+ import ObjectID from 'bson-objectid';
2
+ import { tabHasName } from 'payload/shared';
3
+ import { isEmpty } from '../utils/isEmpty';
4
+ import { traverseRichText } from './traverseRichText';
5
+ export const traverseFields = ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate })=>{
6
+ siblingDataFrom = siblingDataFrom ?? dataFrom;
7
+ siblingDataTranslated = siblingDataTranslated ?? translatedData;
8
+ for (const field of fields){
9
+ switch(field.type){
10
+ case 'tabs':
11
+ for (const tab of field.tabs){
12
+ const hasName = tabHasName(tab);
13
+ const tabDataFrom = hasName ? siblingDataFrom[tab.name] : siblingDataFrom;
14
+ if (!tabDataFrom) return;
15
+ const tabDataTranslated = hasName ? siblingDataTranslated[tab.name] ?? {} : siblingDataTranslated;
16
+ traverseFields({
17
+ dataFrom,
18
+ emptyOnly,
19
+ fields: tab.fields,
20
+ localizedParent: tab.localized,
21
+ siblingDataFrom: tabDataFrom,
22
+ siblingDataTranslated: tabDataTranslated,
23
+ translatedData,
24
+ valuesToTranslate
25
+ });
26
+ }
27
+ break;
28
+ case 'group':
29
+ {
30
+ const groupDataFrom = siblingDataFrom[field.name];
31
+ if (!groupDataFrom) break;
32
+ let groupDataTranslated = siblingDataTranslated[field.name] ?? {};
33
+ if (!groupDataTranslated) {
34
+ groupDataTranslated = {
35
+ id: ObjectID().toHexString()
36
+ };
37
+ siblingDataTranslated[field.name] = groupDataTranslated;
38
+ }
39
+ traverseFields({
40
+ dataFrom,
41
+ emptyOnly,
42
+ fields: field.fields,
43
+ localizedParent: localizedParent ?? field.localized,
44
+ siblingDataFrom: groupDataFrom,
45
+ siblingDataTranslated: groupDataTranslated,
46
+ translatedData,
47
+ valuesToTranslate
48
+ });
49
+ break;
50
+ }
51
+ case 'array':
52
+ {
53
+ const arrayDataFrom = siblingDataFrom[field.name];
54
+ if (isEmpty(arrayDataFrom)) break;
55
+ let arrayDataTranslated = siblingDataTranslated[field.name] ?? [];
56
+ if (field.localized || localizedParent) {
57
+ if (arrayDataTranslated.length > 0 && emptyOnly) break;
58
+ arrayDataTranslated = arrayDataFrom.map(()=>({
59
+ id: ObjectID().toHexString()
60
+ }));
61
+ }
62
+ arrayDataTranslated.forEach((item, index)=>{
63
+ traverseFields({
64
+ dataFrom,
65
+ emptyOnly,
66
+ fields: field.fields,
67
+ localizedParent: localizedParent ?? field.localized,
68
+ siblingDataFrom: arrayDataFrom[index],
69
+ siblingDataTranslated: item,
70
+ translatedData,
71
+ valuesToTranslate
72
+ });
73
+ });
74
+ siblingDataTranslated[field.name] = arrayDataTranslated;
75
+ break;
76
+ }
77
+ case 'blocks':
78
+ {
79
+ const blocksDataFrom = siblingDataFrom[field.name];
80
+ if (isEmpty(blocksDataFrom)) break;
81
+ let blocksDataTranslated = siblingDataTranslated[field.name] ?? [];
82
+ if (field.localized || localizedParent) {
83
+ if (blocksDataTranslated.length > 0 && emptyOnly) break;
84
+ blocksDataTranslated = blocksDataFrom.map(({ blockType })=>({
85
+ blockType,
86
+ id: ObjectID().toHexString()
87
+ }));
88
+ }
89
+ blocksDataTranslated.forEach((item, index)=>{
90
+ const block = field.blocks.find((each)=>each.slug === item.blockType);
91
+ if (!block) return;
92
+ traverseFields({
93
+ dataFrom,
94
+ emptyOnly,
95
+ fields: block.fields,
96
+ localizedParent: localizedParent ?? field.localized,
97
+ siblingDataFrom: blocksDataFrom[index],
98
+ siblingDataTranslated: item,
99
+ translatedData,
100
+ valuesToTranslate
101
+ });
102
+ });
103
+ siblingDataTranslated[field.name] = blocksDataTranslated;
104
+ break;
105
+ }
106
+ case 'collapsible':
107
+ case 'row':
108
+ traverseFields({
109
+ dataFrom,
110
+ emptyOnly,
111
+ fields: field.fields,
112
+ localizedParent,
113
+ siblingDataFrom,
114
+ siblingDataTranslated,
115
+ translatedData,
116
+ valuesToTranslate
117
+ });
118
+ break;
119
+ // long ass cases here we have
120
+ case 'date':
121
+ case 'checkbox':
122
+ case 'json':
123
+ case 'code':
124
+ case 'email':
125
+ case 'number':
126
+ case 'point':
127
+ case 'radio':
128
+ case 'relationship':
129
+ case 'select':
130
+ case 'upload':
131
+ siblingDataTranslated[field.name] = siblingDataFrom[field.name];
132
+ break;
133
+ case 'text':
134
+ case 'textarea':
135
+ if (field.custom && typeof field.custom === 'object' && field.custom.translatorSkip) break;
136
+ if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;
137
+ if (emptyOnly && siblingDataTranslated[field.name]) break;
138
+ // do not translate the block ID or admin-facing label
139
+ if (field.name === 'blockName' || field.name === 'id') {
140
+ break;
141
+ }
142
+ valuesToTranslate.push({
143
+ onTranslate: (translated)=>{
144
+ siblingDataTranslated[field.name] = translated;
145
+ },
146
+ value: siblingDataFrom[field.name]
147
+ });
148
+ break;
149
+ case 'richText':
150
+ {
151
+ if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;
152
+ if (emptyOnly && siblingDataTranslated[field.name]) break;
153
+ const richTextDataFrom = siblingDataFrom[field.name];
154
+ siblingDataTranslated[field.name] = richTextDataFrom;
155
+ if (!richTextDataFrom) break;
156
+ const isSlate = Array.isArray(richTextDataFrom);
157
+ const isLexical = 'root' in richTextDataFrom;
158
+ if (!isSlate && !isLexical) break;
159
+ if (isLexical) {
160
+ const root = siblingDataTranslated[field.name]?.root;
161
+ if (root) {
162
+ traverseRichText({
163
+ onText: (siblingData)=>{
164
+ valuesToTranslate.push({
165
+ onTranslate: (translated)=>{
166
+ siblingData.text = translated;
167
+ },
168
+ value: siblingData.text
169
+ });
170
+ },
171
+ root
172
+ });
173
+ const richTextBlocksGetSubFields = field.editor?.editorConfig?.features?.getSubFields?.get('block');
174
+ if (typeof richTextBlocksGetSubFields !== 'function') break;
175
+ const richTextBlocks = richTextBlocksGetSubFields('block');
176
+ const richTextBlockDataFrom = richTextDataFrom.root?.children;
177
+ if (isEmpty(richTextBlockDataFrom) || !Array.isArray(richTextBlockDataFrom) || isEmpty(richTextBlocks)) break;
178
+ let richTextBlocksDataTranslated = siblingDataTranslated[field.name]?.root?.children ?? [];
179
+ if (field.localized || localizedParent) {
180
+ if (richTextBlocksDataTranslated.length > 0 && emptyOnly) break;
181
+ richTextBlocksDataTranslated = richTextBlockDataFrom.map((blockData)=>{
182
+ if (blockData?.fields?.blockType) {
183
+ return {
184
+ ...blockData,
185
+ fields: {
186
+ blockType: blockData?.fields?.blockType,
187
+ id: ObjectID().toHexString()
188
+ }
189
+ };
190
+ }
191
+ return blockData;
192
+ });
193
+ }
194
+ richTextBlocksDataTranslated.forEach((item, index)=>{
195
+ const block = richTextBlocks[0].blocks.find((each)=>each.slug && each.slug === item.fields.blockType);
196
+ if (!block) return;
197
+ traverseFields({
198
+ dataFrom,
199
+ emptyOnly,
200
+ fields: block.fields,
201
+ localizedParent: localizedParent ?? field.localized,
202
+ siblingDataFrom: richTextBlockDataFrom[index].fields,
203
+ siblingDataTranslated: item.fields,
204
+ translatedData,
205
+ valuesToTranslate
206
+ });
207
+ });
208
+ siblingDataTranslated[field.name].root.children = richTextBlocksDataTranslated;
209
+ }
210
+ } else {
211
+ for (const root of siblingDataTranslated[field.name]){
212
+ traverseRichText({
213
+ onText: (siblingData)=>{
214
+ valuesToTranslate.push({
215
+ onTranslate: (translated)=>{
216
+ siblingData.text = translated;
217
+ },
218
+ value: siblingData.text
219
+ });
220
+ },
221
+ root: root
222
+ });
223
+ }
224
+ }
225
+ break;
226
+ }
227
+ default:
228
+ break;
229
+ }
230
+ }
231
+ };
232
+
233
+ //# sourceMappingURL=traverseFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translate/traverseFields.ts"],"sourcesContent":["import ObjectID from 'bson-objectid';\nimport type { Field } from 'payload';\nimport { tabHasName } from 'payload/shared';\n\nimport { isEmpty } from '../utils/isEmpty';\nimport { traverseRichText } from './traverseRichText';\nimport type { ValueToTranslate } from './types';\n\nexport const traverseFields = ({\n dataFrom,\n emptyOnly,\n fields,\n localizedParent,\n siblingDataFrom,\n siblingDataTranslated,\n translatedData,\n valuesToTranslate,\n}: {\n dataFrom: Record<string, unknown>;\n emptyOnly?: boolean;\n fields: Field[];\n localizedParent?: boolean;\n siblingDataFrom?: Record<string, unknown>;\n siblingDataTranslated?: Record<string, unknown>;\n translatedData: Record<string, unknown>;\n valuesToTranslate: ValueToTranslate[];\n}) => {\n siblingDataFrom = siblingDataFrom ?? dataFrom;\n siblingDataTranslated = siblingDataTranslated ?? translatedData;\n\n for (const field of fields) {\n switch (field.type) {\n case 'tabs':\n for (const tab of field.tabs) {\n const hasName = tabHasName(tab);\n\n const tabDataFrom = hasName\n ? (siblingDataFrom[tab.name] as Record<string, unknown>)\n : siblingDataFrom;\n\n if (!tabDataFrom) return;\n\n const tabDataTranslated = hasName\n ? ((siblingDataTranslated[tab.name] as Record<string, unknown>) ?? {})\n : siblingDataTranslated;\n\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: tab.fields,\n localizedParent: tab.localized,\n siblingDataFrom: tabDataFrom,\n siblingDataTranslated: tabDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n }\n\n break;\n\n case 'group': {\n const groupDataFrom = siblingDataFrom[field.name] as Record<string, unknown>;\n\n if (!groupDataFrom) break;\n\n let groupDataTranslated =\n (siblingDataTranslated[field.name] as Record<string, unknown>) ?? {};\n\n if (!groupDataTranslated) {\n groupDataTranslated = {id: ObjectID().toHexString()};\n siblingDataTranslated[field.name] = groupDataTranslated;\n }\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: groupDataFrom,\n siblingDataTranslated: groupDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n\n break;\n }\n\n case 'array': {\n const arrayDataFrom = siblingDataFrom[field.name] as {\n id: string;\n }[];\n\n if (isEmpty(arrayDataFrom)) break;\n\n let arrayDataTranslated =\n (siblingDataTranslated[field.name] as { id: string }[] | undefined) ?? [];\n\n if (field.localized || localizedParent) {\n if (arrayDataTranslated.length > 0 && emptyOnly) break;\n\n arrayDataTranslated = arrayDataFrom.map(() => ({\n id: ObjectID().toHexString(),\n }));\n }\n\n arrayDataTranslated.forEach((item, index) => {\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: arrayDataFrom[index],\n siblingDataTranslated: item,\n translatedData,\n valuesToTranslate,\n });\n });\n\n siblingDataTranslated[field.name] = arrayDataTranslated;\n\n break;\n }\n\n case 'blocks': {\n const blocksDataFrom = siblingDataFrom[field.name] as {\n blockType: string;\n id: string;\n }[];\n\n if (isEmpty(blocksDataFrom)) break;\n\n let blocksDataTranslated =\n (siblingDataTranslated[field.name] as { blockType: string; id: string }[] | undefined) ??\n [];\n\n if (field.localized || localizedParent) {\n if (blocksDataTranslated.length > 0 && emptyOnly) break;\n\n blocksDataTranslated = blocksDataFrom.map(({ blockType }) => ({\n blockType,\n id: ObjectID().toHexString(),\n }));\n }\n\n blocksDataTranslated.forEach((item, index) => {\n const block = field.blocks.find((each: Record<string, unknown>) => each.slug === item.blockType);\n\n if (!block) return;\n\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: block.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: blocksDataFrom[index],\n siblingDataTranslated: item,\n translatedData,\n valuesToTranslate,\n });\n });\n\n siblingDataTranslated[field.name] = blocksDataTranslated;\n\n break;\n }\n\n case 'collapsible':\n case 'row':\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent,\n siblingDataFrom,\n siblingDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n break;\n\n // long ass cases here we have\n case 'date':\n case 'checkbox':\n case 'json':\n case 'code':\n case 'email':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'select':\n case 'upload':\n siblingDataTranslated[field.name] = siblingDataFrom[field.name];\n\n break;\n\n case 'text':\n case 'textarea':\n if (field.custom && typeof field.custom === 'object' && field.custom.translatorSkip) break;\n\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;\n if (emptyOnly && siblingDataTranslated[field.name]) break;\n\n // do not translate the block ID or admin-facing label\n if (field.name === 'blockName' || field.name === 'id') {\n break;\n }\n\n valuesToTranslate.push({\n onTranslate: (translated: string) => {\n siblingDataTranslated[field.name] = translated;\n },\n value: siblingDataFrom[field.name],\n });\n break;\n\n case 'richText': {\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;\n if (emptyOnly && siblingDataTranslated[field.name]) break;\n\n const richTextDataFrom = siblingDataFrom[field.name] as object;\n\n siblingDataTranslated[field.name] = richTextDataFrom;\n\n if (!richTextDataFrom) break;\n\n const isSlate = Array.isArray(richTextDataFrom);\n\n const isLexical = 'root' in richTextDataFrom;\n\n if (!isSlate && !isLexical) break;\n\n if (isLexical) {\n const root = (siblingDataTranslated[field.name] as Record<string, unknown>)\n ?.root as Record<string, unknown>;\n\n if (root) {\n traverseRichText({\n onText: (siblingData)=>{\n valuesToTranslate.push({\n onTranslate: (translated: string)=>{\n siblingData.text = translated;\n },\n value: siblingData.text\n });\n },\n root\n });\n\n const richTextBlocksGetSubFields = (field.editor as any)?.editorConfig?.features?.getSubFields?.get('block');\n if (typeof richTextBlocksGetSubFields !== 'function') break;\n const richTextBlocks = richTextBlocksGetSubFields('block');\n const richTextBlockDataFrom = (richTextDataFrom.root as Record<string, unknown>)?.children;\n if (isEmpty(richTextBlockDataFrom) || !Array.isArray(richTextBlockDataFrom) || isEmpty(richTextBlocks)) break;\n let richTextBlocksDataTranslated = ((siblingDataTranslated[field.name] as Record<string, unknown>)?.root as Record<string, unknown>)?.children as Record<string, unknown>[] ?? [];\n\n if (field.localized || localizedParent) {\n if (richTextBlocksDataTranslated.length > 0 && emptyOnly) break;\n richTextBlocksDataTranslated = richTextBlockDataFrom.map((blockData)=>{\n if (blockData?.fields?.blockType) {\n return {\n ...blockData,\n fields: {\n blockType: blockData?.fields?.blockType,\n id: ObjectID().toHexString()\n }\n }\n }\n return blockData;\n });\n }\n\n richTextBlocksDataTranslated.forEach((item, index)=>{\n const block = richTextBlocks[0].blocks.find((each: Record<string, unknown>)=>each.slug && each.slug === (item.fields as Record<string, unknown>).blockType);\n if (!block) return;\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: block.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: richTextBlockDataFrom[index].fields,\n siblingDataTranslated: item.fields as Record<string, unknown>,\n translatedData,\n valuesToTranslate\n });\n });\n ((siblingDataTranslated[field.name] as Record<string, unknown>).root as Record<string, unknown>).children = richTextBlocksDataTranslated;\n }\n } else {\n for (const root of siblingDataTranslated[field.name] as unknown[]) {\n traverseRichText({\n onText: (siblingData) => {\n valuesToTranslate.push({\n onTranslate: (translated: string) => {\n siblingData.text = translated;\n },\n value: siblingData.text,\n });\n },\n root: root as Record<string, unknown>,\n });\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n};\n"],"names":["ObjectID","tabHasName","isEmpty","traverseRichText","traverseFields","dataFrom","emptyOnly","fields","localizedParent","siblingDataFrom","siblingDataTranslated","translatedData","valuesToTranslate","field","type","tab","tabs","hasName","tabDataFrom","name","tabDataTranslated","localized","groupDataFrom","groupDataTranslated","id","toHexString","arrayDataFrom","arrayDataTranslated","length","map","forEach","item","index","blocksDataFrom","blocksDataTranslated","blockType","block","blocks","find","each","slug","custom","translatorSkip","push","onTranslate","translated","value","richTextDataFrom","isSlate","Array","isArray","isLexical","root","onText","siblingData","text","richTextBlocksGetSubFields","editor","editorConfig","features","getSubFields","get","richTextBlocks","richTextBlockDataFrom","children","richTextBlocksDataTranslated","blockData"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const traverseRichText: ({ onText, root, siblingData, }: {
2
+ onText: (siblingData: Record<string, unknown>) => void;
3
+ root: Record<string, unknown>;
4
+ siblingData?: Record<string, unknown>;
5
+ }) => void;
6
+ //# sourceMappingURL=traverseRichText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traverseRichText.d.ts","sourceRoot":"","sources":["../../src/translate/traverseRichText.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,mCAI1B;IACD,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,SAgBA,CAAC"}
@@ -0,0 +1,17 @@
1
+ export const traverseRichText = ({ onText, root, siblingData })=>{
2
+ siblingData = siblingData ?? root;
3
+ if (siblingData.text) {
4
+ onText(siblingData);
5
+ }
6
+ if (Array.isArray(siblingData?.children)) {
7
+ for (const child of siblingData.children){
8
+ traverseRichText({
9
+ onText,
10
+ root,
11
+ siblingData: child
12
+ });
13
+ }
14
+ }
15
+ };
16
+
17
+ //# sourceMappingURL=traverseRichText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translate/traverseRichText.ts"],"sourcesContent":["export const traverseRichText = ({\n onText,\n root,\n siblingData,\n}: {\n onText: (siblingData: Record<string, unknown>) => void;\n root: Record<string, unknown>;\n siblingData?: Record<string, unknown>;\n}) => {\n siblingData = siblingData ?? root;\n\n if (siblingData.text) {\n onText(siblingData);\n }\n\n if (Array.isArray(siblingData?.children)) {\n for (const child of siblingData.children) {\n traverseRichText({\n onText,\n root,\n siblingData: child,\n });\n }\n }\n};\n"],"names":["traverseRichText","onText","root","siblingData","text","Array","isArray","children","child"],"mappings":"AAAA,OAAO,MAAMA,mBAAmB,CAAC,EAC/BC,MAAM,EACNC,IAAI,EACJC,WAAW,EAKZ;IACCA,cAAcA,eAAeD;IAE7B,IAAIC,YAAYC,IAAI,EAAE;QACpBH,OAAOE;IACT;IAEA,IAAIE,MAAMC,OAAO,CAACH,aAAaI,WAAW;QACxC,KAAK,MAAMC,SAASL,YAAYI,QAAQ,CAAE;YACxCP,iBAAiB;gBACfC;gBACAC;gBACAC,aAAaK;YACf;QACF;IACF;AACF,EAAE"}
@@ -0,0 +1,25 @@
1
+ export type ValueToTranslate = {
2
+ onTranslate: (translatedValue: any) => void;
3
+ value: any;
4
+ };
5
+ export type TranslateArgs = {
6
+ collectionSlug?: string;
7
+ data?: Record<string, any>;
8
+ emptyOnly?: boolean;
9
+ globalSlug?: string;
10
+ id?: number | string;
11
+ /** active locale */
12
+ locale: string;
13
+ localeFrom: string;
14
+ overrideAccess?: boolean;
15
+ resolver: string;
16
+ update?: boolean;
17
+ };
18
+ export type TranslateResult = {
19
+ success: false;
20
+ } | {
21
+ success: true;
22
+ translatedData: Record<string, any>;
23
+ };
24
+ export type TranslateEndpointArgs = Omit<TranslateArgs, 'update'>;
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/translate/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,CAAC,eAAe,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5C,KAAK,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IACE,OAAO,EAAE,KAAK,CAAC;CAChB,GACD;IACE,OAAO,EAAE,IAAI,CAAC;IACd,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translate/types.ts"],"sourcesContent":["export type ValueToTranslate = {\n onTranslate: (translatedValue: any) => void;\n value: any;\n};\n\nexport type TranslateArgs = {\n collectionSlug?: string;\n data?: Record<string, any>;\n emptyOnly?: boolean;\n globalSlug?: string;\n id?: number | string;\n /** active locale */\n locale: string;\n localeFrom: string;\n overrideAccess?: boolean;\n resolver: string;\n update?: boolean;\n};\n\nexport type TranslateResult =\n | {\n success: false;\n }\n | {\n success: true;\n translatedData: Record<string, any>;\n };\n\nexport type TranslateEndpointArgs = Omit<TranslateArgs, 'update'>;\n"],"names":[],"mappings":"AA4BA,WAAkE"}
@@ -0,0 +1,14 @@
1
+ import type { PayloadRequest, TypeWithID } from 'payload';
2
+ type Args = {
3
+ collectionSlug?: string;
4
+ data: Record<string, any>;
5
+ depth?: number;
6
+ globalSlug?: string;
7
+ id?: number | string;
8
+ locale: string;
9
+ overrideAccess?: boolean;
10
+ req: PayloadRequest;
11
+ };
12
+ export declare const updateEntity: ({ collectionSlug, data, depth: incomingDepth, globalSlug, id, locale, overrideAccess, req, }: Args) => Promise<Record<string, unknown> & TypeWithID>;
13
+ export {};
14
+ //# sourceMappingURL=updateEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateEntity.d.ts","sourceRoot":"","sources":["../../src/translate/updateEntity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGtF,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY,iGAStB,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CA6BrD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { APIError } from 'payload';
2
+ export const updateEntity = ({ collectionSlug, data, depth: incomingDepth, globalSlug, id, locale, overrideAccess, req })=>{
3
+ if (!collectionSlug && !globalSlug) throw new APIError('Bad Request', 400);
4
+ const isGlobal = !!globalSlug;
5
+ if (!isGlobal && !id) throw new APIError('Bad Request', 400);
6
+ const depth = incomingDepth ?? req.payload.config.defaultDepth;
7
+ const promise = isGlobal ? req.payload.updateGlobal({
8
+ data,
9
+ depth,
10
+ locale: locale,
11
+ overrideAccess,
12
+ req,
13
+ slug: globalSlug
14
+ }) : req.payload.update({
15
+ collection: collectionSlug,
16
+ data,
17
+ depth,
18
+ id: id,
19
+ locale: locale,
20
+ overrideAccess,
21
+ req
22
+ });
23
+ return promise;
24
+ };
25
+
26
+ //# sourceMappingURL=updateEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/translate/updateEntity.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug, PayloadRequest, TypeWithID } from 'payload';\nimport { APIError } from 'payload';\n\ntype Args = {\n collectionSlug?: string;\n data: Record<string, any>;\n depth?: number;\n globalSlug?: string;\n id?: number | string;\n locale: string;\n overrideAccess?: boolean;\n req: PayloadRequest;\n};\n\nexport const updateEntity = ({\n collectionSlug,\n data,\n depth: incomingDepth,\n globalSlug,\n id,\n locale,\n overrideAccess,\n req,\n}: Args): Promise<Record<string, unknown> & TypeWithID> => {\n if (!collectionSlug && !globalSlug) throw new APIError('Bad Request', 400);\n\n const isGlobal = !!globalSlug;\n\n if (!isGlobal && !id) throw new APIError('Bad Request', 400);\n\n const depth = incomingDepth ?? req.payload.config.defaultDepth;\n\n const promise = isGlobal\n ? req.payload.updateGlobal({\n data,\n depth,\n locale: locale as any,\n overrideAccess,\n req,\n slug: globalSlug as GlobalSlug,\n })\n : req.payload.update({\n collection: collectionSlug as CollectionSlug,\n data,\n depth,\n id: id as number | string,\n locale: locale as any,\n overrideAccess,\n req,\n });\n\n return promise as any;\n};\n"],"names":["APIError","updateEntity","collectionSlug","data","depth","incomingDepth","globalSlug","id","locale","overrideAccess","req","isGlobal","payload","config","defaultDepth","promise","updateGlobal","slug","update","collection"],"mappings":"AACA,SAASA,QAAQ,QAAQ,UAAU;AAanC,OAAO,MAAMC,eAAe,CAAC,EAC3BC,cAAc,EACdC,IAAI,EACJC,OAAOC,aAAa,EACpBC,UAAU,EACVC,EAAE,EACFC,MAAM,EACNC,cAAc,EACdC,GAAG,EACE;IACL,IAAI,CAACR,kBAAkB,CAACI,YAAY,MAAM,IAAIN,SAAS,eAAe;IAEtE,MAAMW,WAAW,CAAC,CAACL;IAEnB,IAAI,CAACK,YAAY,CAACJ,IAAI,MAAM,IAAIP,SAAS,eAAe;IAExD,MAAMI,QAAQC,iBAAiBK,IAAIE,OAAO,CAACC,MAAM,CAACC,YAAY;IAE9D,MAAMC,UAAUJ,WACZD,IAAIE,OAAO,CAACI,YAAY,CAAC;QACvBb;QACAC;QACAI,QAAQA;QACRC;QACAC;QACAO,MAAMX;IACR,KACAI,IAAIE,OAAO,CAACM,MAAM,CAAC;QACjBC,YAAYjB;QACZC;QACAC;QACAG,IAAIA;QACJC,QAAQA;QACRC;QACAC;IACF;IAEJ,OAAOK;AACT,EAAE"}
@@ -0,0 +1,21 @@
1
+ import type { CollectionSlug, GlobalSlug } from 'payload';
2
+ import type { TranslateResolver } from './resolvers/types';
3
+ export type TranslatorConfig = {
4
+ /**
5
+ * Collections with the enabled translator in the admin UI
6
+ */
7
+ collections: CollectionSlug[];
8
+ /**
9
+ * Disable the plugin
10
+ */
11
+ disabled?: boolean;
12
+ /**
13
+ * Globals with the enabled translator in the admin UI
14
+ */
15
+ globals: GlobalSlug[];
16
+ /**
17
+ * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers
18
+ */
19
+ resolvers: TranslateResolver[];
20
+ };
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from 'payload';\n\nimport type { TranslateResolver } from './resolvers/types';\n\nexport type TranslatorConfig = {\n /**\n * Collections with the enabled translator in the admin UI\n */\n collections: CollectionSlug[];\n /**\n * Disable the plugin\n */\n disabled?: boolean;\n /**\n * Globals with the enabled translator in the admin UI\n */\n globals: GlobalSlug[];\n /**\n * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers\n */\n resolvers: TranslateResolver[];\n};\n"],"names":[],"mappings":"AAIA,WAiBE"}
@@ -0,0 +1,2 @@
1
+ export declare const chunkArray: <T>(array: T[], length: number) => T[][];
2
+ //# sourceMappingURL=chunkArray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkArray.d.ts","sourceRoot":"","sources":["../../src/utils/chunkArray.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,CAAC,EAAE,UAAU,MAAM,KAAG,CAAC,EAAE,EAI7D,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const chunkArray = (array, length)=>{
2
+ return Array.from({
3
+ length: Math.ceil(array.length / length)
4
+ }, (_, i)=>array.slice(i * length, i * length + length));
5
+ };
6
+
7
+ //# sourceMappingURL=chunkArray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/chunkArray.ts"],"sourcesContent":["export const chunkArray = <T>(array: T[], length: number): T[][] => {\n return Array.from({ length: Math.ceil(array.length / length) }, (_, i) =>\n array.slice(i * length, i * length + length),\n );\n};\n"],"names":["chunkArray","array","length","Array","from","Math","ceil","_","i","slice"],"mappings":"AAAA,OAAO,MAAMA,aAAa,CAAIC,OAAYC;IACxC,OAAOC,MAAMC,IAAI,CAAC;QAAEF,QAAQG,KAAKC,IAAI,CAACL,MAAMC,MAAM,GAAGA;IAAQ,GAAG,CAACK,GAAGC,IAClEP,MAAMQ,KAAK,CAACD,IAAIN,QAAQM,IAAIN,SAASA;AAEzC,EAAE"}
@@ -0,0 +1,2 @@
1
+ export declare const isEmpty: (value: unknown) => boolean;
2
+ //# sourceMappingURL=isEmpty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isEmpty.d.ts","sourceRoot":"","sources":["../../src/utils/isEmpty.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAW,OAAO,YAMrC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const isEmpty = (value)=>{
2
+ if (Array.isArray(value)) return value.length === 0;
3
+ if (value === null || typeof value === 'undefined') return true;
4
+ if (typeof value === 'object' && Object.keys(value).length === 0) return true;
5
+ return false;
6
+ };
7
+
8
+ //# sourceMappingURL=isEmpty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/isEmpty.ts"],"sourcesContent":["export const isEmpty = (value: unknown) => {\n if (Array.isArray(value)) return value.length === 0;\n if (value === null || typeof value === 'undefined') return true;\n if (typeof value === 'object' && Object.keys(value).length === 0) return true;\n\n return false;\n};\n"],"names":["isEmpty","value","Array","isArray","length","Object","keys"],"mappings":"AAAA,OAAO,MAAMA,UAAU,CAACC;IACtB,IAAIC,MAAMC,OAAO,CAACF,QAAQ,OAAOA,MAAMG,MAAM,KAAK;IAClD,IAAIH,UAAU,QAAQ,OAAOA,UAAU,aAAa,OAAO;IAC3D,IAAI,OAAOA,UAAU,YAAYI,OAAOC,IAAI,CAACL,OAAOG,MAAM,KAAK,GAAG,OAAO;IAEzE,OAAO;AACT,EAAE"}
package/package.json ADDED
@@ -0,0 +1,119 @@
1
+ {
2
+ "name": "@extravirgin/payload-enchants-translator",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "bugs": "https://github.com/Kliqs/payload-enchants/issues",
6
+ "repository": "https://github.com/Kliqs/payload-enchants",
7
+ "license": "MIT",
8
+ "author": "r1tsuu",
9
+ "type": "module",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./src/index.ts",
13
+ "require": "./src/index.ts",
14
+ "types": "./src/index.ts"
15
+ },
16
+ "./types": {
17
+ "import": "./src/types.ts",
18
+ "require": "./src/types.ts",
19
+ "types": "./src/types.ts"
20
+ },
21
+ "./resolvers/types": {
22
+ "import": "./src/resolvers/types.ts",
23
+ "require": "./src/resolvers/types.ts",
24
+ "types": "./src/resolvers/types.ts"
25
+ },
26
+ "./resolvers/google": {
27
+ "import": "./src/resolvers/google.ts",
28
+ "require": "./src/resolvers/google.ts",
29
+ "types": "./src/resolvers/google.ts"
30
+ },
31
+ "./resolvers/copy": {
32
+ "import": "./src/resolvers/copy.ts",
33
+ "require": "./src/resolvers/copy.ts",
34
+ "types": "./src/resolvers/copy.ts"
35
+ },
36
+ "./resolvers/openAI": {
37
+ "import": "./src/resolvers/openAI.ts",
38
+ "require": "./src/resolvers/openAI.ts",
39
+ "types": "./src/resolvers/openAI.ts"
40
+ },
41
+ "./client": {
42
+ "import": "./src/exports/client.ts",
43
+ "require": "./src/exports/client.ts",
44
+ "types": "./src/exports/client.ts"
45
+ }
46
+ },
47
+ "files": [
48
+ "dist"
49
+ ],
50
+ "scripts": {
51
+ "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types",
52
+ "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
53
+ "build:types": "tsc --emitDeclarationOnly --outDir dist",
54
+ "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
55
+ "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
56
+ "lint": "eslint src",
57
+ "lint:fix": "eslint --fix --ext .ts,.tsx src",
58
+ "prepublishOnly": "pnpm clean && pnpm build"
59
+ },
60
+ "dependencies": {
61
+ "bson-objectid": "^2.0.4",
62
+ "he": "^1.2.0"
63
+ },
64
+ "devDependencies": {
65
+ "@types/he": "^1.2.3",
66
+ "@types/react": "19.0.7",
67
+ "@types/react-dom": "19.0.3",
68
+ "react": "^19.0.0",
69
+ "react-dom": "^19.0.0",
70
+ "typescript": "5.7.3"
71
+ },
72
+ "peerDependencies": {
73
+ "@payloadcms/translations": "^3.20.0",
74
+ "@payloadcms/ui": "^3.20.0",
75
+ "payload": "^3.20.0"
76
+ },
77
+ "publishConfig": {
78
+ "exports": {
79
+ ".": {
80
+ "import": "./dist/index.js",
81
+ "require": "./dist/index.js",
82
+ "types": "./dist/index.d.ts"
83
+ },
84
+ "./types": {
85
+ "import": "./dist/types.js",
86
+ "require": "./dist/types.js",
87
+ "types": "./dist/types.d.ts"
88
+ },
89
+ "./resolvers/types": {
90
+ "import": "./dist/resolvers/types.js",
91
+ "require": "./dist/resolvers/types.js",
92
+ "types": "./dist/resolvers/types.d.ts"
93
+ },
94
+ "./resolvers/google": {
95
+ "import": "./dist/resolvers/google.js",
96
+ "require": "./dist/resolvers/google.js",
97
+ "types": "./dist/resolvers/google.d.ts"
98
+ },
99
+ "./resolvers/copy": {
100
+ "import": "./dist/resolvers/copy.js",
101
+ "require": "./dist/resolvers/copy.js",
102
+ "types": "./dist/resolvers/copy.d.ts"
103
+ },
104
+ "./resolvers/openAI": {
105
+ "import": "./dist/resolvers/openAI.js",
106
+ "require": "./dist/resolvers/openAI.js",
107
+ "types": "./dist/resolvers/openAI.d.ts"
108
+ },
109
+ "./client": {
110
+ "import": "./dist/exports/client.js",
111
+ "require": "./dist/exports/client.js",
112
+ "types": "./dist/exports/client.d.ts"
113
+ }
114
+ },
115
+ "main": "./dist/index.js",
116
+ "registry": "https://registry.npmjs.org/",
117
+ "types": "./dist/index.d.ts"
118
+ }
119
+ }