@justanarthur/payload-plugin-translator 1.3.6
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.
- package/README.md +215 -0
- package/dist/client/api/index.d.ts +8 -0
- package/dist/client/api/index.d.ts.map +1 -0
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +5 -0
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +1 -0
- package/dist/client/components/CustomButton/index.d.ts +3 -0
- package/dist/client/components/CustomButton/index.d.ts.map +1 -0
- package/dist/client/components/CustomButton/styles.scss +5 -0
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +5 -0
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +1 -0
- package/dist/client/components/LocaleLabel/index.d.ts +2 -0
- package/dist/client/components/LocaleLabel/index.d.ts.map +1 -0
- package/dist/client/components/ResolverButton/ResolverButton.d.ts +5 -0
- package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +1 -0
- package/dist/client/components/ResolverButton/index.d.ts +2 -0
- package/dist/client/components/ResolverButton/index.d.ts.map +1 -0
- package/dist/client/components/TranslatorModal/Content.d.ts +2 -0
- package/dist/client/components/TranslatorModal/Content.d.ts.map +1 -0
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +3 -0
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +1 -0
- package/dist/client/components/TranslatorModal/index.d.ts +2 -0
- package/dist/client/components/TranslatorModal/index.d.ts.map +1 -0
- package/dist/client/components/TranslatorModal/styles.scss +76 -0
- package/dist/client/providers/Translator/TranslatorProvider.d.ts +5 -0
- package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +1 -0
- package/dist/client/providers/Translator/context.d.ts +21 -0
- package/dist/client/providers/Translator/context.d.ts.map +1 -0
- package/dist/exports/client.d.ts +2 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/i18n-translations.d.ts +87 -0
- package/dist/i18n-translations.d.ts.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/resolvers/copy.d.ts +3 -0
- package/dist/resolvers/copy.d.ts.map +1 -0
- package/dist/resolvers/google.d.ts +11 -0
- package/dist/resolvers/google.d.ts.map +1 -0
- package/dist/resolvers/libreTranslate.d.ts +16 -0
- package/dist/resolvers/libreTranslate.d.ts.map +1 -0
- package/dist/resolvers/openAI.d.ts +22 -0
- package/dist/resolvers/openAI.d.ts.map +1 -0
- package/dist/resolvers/types.d.ts +20 -0
- package/dist/resolvers/types.d.ts.map +1 -0
- package/dist/src/client/api/index.js +28 -0
- package/dist/src/client/api/index.js.map +1 -0
- package/dist/src/client/components/CustomButton/CustomButtonWithTranslator.js +28 -0
- package/dist/src/client/components/CustomButton/CustomButtonWithTranslator.js.map +1 -0
- package/dist/src/client/components/CustomButton/index.js +10 -0
- package/dist/src/client/components/CustomButton/index.js.map +1 -0
- package/dist/src/client/components/LocaleLabel/LocaleLabel.js +28 -0
- package/dist/src/client/components/LocaleLabel/LocaleLabel.js.map +1 -0
- package/dist/src/client/components/LocaleLabel/index.js +3 -0
- package/dist/src/client/components/LocaleLabel/index.js.map +1 -0
- package/dist/src/client/components/ResolverButton/ResolverButton.js +16 -0
- package/dist/src/client/components/ResolverButton/ResolverButton.js.map +1 -0
- package/dist/src/client/components/ResolverButton/index.js +3 -0
- package/dist/src/client/components/ResolverButton/index.js.map +1 -0
- package/dist/src/client/components/TranslatorModal/Content.js +60 -0
- package/dist/src/client/components/TranslatorModal/Content.js.map +1 -0
- package/dist/src/client/components/TranslatorModal/TranslatorModal.js +26 -0
- package/dist/src/client/components/TranslatorModal/TranslatorModal.js.map +1 -0
- package/dist/src/client/components/TranslatorModal/index.js +3 -0
- package/dist/src/client/components/TranslatorModal/index.js.map +1 -0
- package/dist/src/client/providers/Translator/TranslatorProvider.js +109 -0
- package/dist/src/client/providers/Translator/TranslatorProvider.js.map +1 -0
- package/dist/src/client/providers/Translator/context.js +9 -0
- package/dist/src/client/providers/Translator/context.js.map +1 -0
- package/dist/src/exports/client.js +3 -0
- package/dist/src/exports/client.js.map +1 -0
- package/dist/src/i18n-translations.js +88 -0
- package/dist/src/i18n-translations.js.map +1 -0
- package/dist/src/index.js +87 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/resolvers/copy.js +14 -0
- package/dist/src/resolvers/copy.js.map +1 -0
- package/dist/src/resolvers/google.js +47 -0
- package/dist/src/resolvers/google.js.map +1 -0
- package/dist/src/resolvers/libreTranslate.js +48 -0
- package/dist/src/resolvers/libreTranslate.js.map +1 -0
- package/dist/src/resolvers/openAI.js +100 -0
- package/dist/src/resolvers/openAI.js.map +1 -0
- package/dist/src/resolvers/types.js +3 -0
- package/dist/src/resolvers/types.js.map +1 -0
- package/dist/src/translate/endpoint.js +23 -0
- package/dist/src/translate/endpoint.js.map +1 -0
- package/dist/src/translate/findEntityWithConfig.js +34 -0
- package/dist/src/translate/findEntityWithConfig.js.map +1 -0
- package/dist/src/translate/operation.js +76 -0
- package/dist/src/translate/operation.js.map +1 -0
- package/dist/src/translate/traverseFields.js +190 -0
- package/dist/src/translate/traverseFields.js.map +1 -0
- package/dist/src/translate/traverseRichText.js +17 -0
- package/dist/src/translate/traverseRichText.js.map +1 -0
- package/dist/src/translate/types.js +3 -0
- package/dist/src/translate/types.js.map +1 -0
- package/dist/src/translate/updateEntity.js +26 -0
- package/dist/src/translate/updateEntity.js.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/chunkArray.js +7 -0
- package/dist/src/utils/chunkArray.js.map +1 -0
- package/dist/src/utils/isEmpty.js +8 -0
- package/dist/src/utils/isEmpty.js.map +1 -0
- package/dist/translate/endpoint.d.ts +3 -0
- package/dist/translate/endpoint.d.ts.map +1 -0
- package/dist/translate/findEntityWithConfig.d.ts +15 -0
- package/dist/translate/findEntityWithConfig.d.ts.map +1 -0
- package/dist/translate/operation.d.ts +9 -0
- package/dist/translate/operation.d.ts.map +1 -0
- package/dist/translate/traverseFields.d.ts +13 -0
- package/dist/translate/traverseFields.d.ts.map +1 -0
- package/dist/translate/traverseRichText.d.ts +6 -0
- package/dist/translate/traverseRichText.d.ts.map +1 -0
- package/dist/translate/types.d.ts +25 -0
- package/dist/translate/types.d.ts.map +1 -0
- package/dist/translate/updateEntity.d.ts +14 -0
- package/dist/translate/updateEntity.d.ts.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/chunkArray.d.ts +2 -0
- package/dist/utils/chunkArray.d.ts.map +1 -0
- package/dist/utils/isEmpty.d.ts +2 -0
- package/dist/utils/isEmpty.d.ts.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,190 @@
|
|
|
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
|
+
if (!('name' in field)) break;
|
|
31
|
+
const groupDataFrom = siblingDataFrom[field.name];
|
|
32
|
+
if (!groupDataFrom) break;
|
|
33
|
+
const groupDataTranslated = siblingDataTranslated[field.name] ?? {};
|
|
34
|
+
traverseFields({
|
|
35
|
+
dataFrom,
|
|
36
|
+
emptyOnly,
|
|
37
|
+
fields: field.fields,
|
|
38
|
+
localizedParent: field.localized,
|
|
39
|
+
siblingDataFrom: groupDataFrom,
|
|
40
|
+
siblingDataTranslated: groupDataTranslated,
|
|
41
|
+
translatedData,
|
|
42
|
+
valuesToTranslate
|
|
43
|
+
});
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case 'array':
|
|
47
|
+
{
|
|
48
|
+
const arrayDataFrom = siblingDataFrom[field.name];
|
|
49
|
+
if (isEmpty(arrayDataFrom)) break;
|
|
50
|
+
let arrayDataTranslated = siblingDataTranslated[field.name] ?? [];
|
|
51
|
+
if (field.localized || localizedParent) {
|
|
52
|
+
if (arrayDataTranslated.length > 0 && emptyOnly) break;
|
|
53
|
+
arrayDataTranslated = arrayDataFrom.map(()=>({
|
|
54
|
+
id: ObjectID().toHexString()
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
arrayDataTranslated.forEach((item, index)=>{
|
|
58
|
+
traverseFields({
|
|
59
|
+
dataFrom,
|
|
60
|
+
emptyOnly,
|
|
61
|
+
fields: field.fields,
|
|
62
|
+
localizedParent: localizedParent ?? field.localized,
|
|
63
|
+
siblingDataFrom: arrayDataFrom[index],
|
|
64
|
+
siblingDataTranslated: item,
|
|
65
|
+
translatedData,
|
|
66
|
+
valuesToTranslate
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
siblingDataTranslated[field.name] = arrayDataTranslated;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case 'blocks':
|
|
73
|
+
{
|
|
74
|
+
const blocksDataFrom = siblingDataFrom[field.name];
|
|
75
|
+
if (isEmpty(blocksDataFrom)) break;
|
|
76
|
+
let blocksDataTranslated = siblingDataTranslated[field.name] ?? [];
|
|
77
|
+
if (field.localized || localizedParent) {
|
|
78
|
+
if (blocksDataTranslated.length > 0 && emptyOnly) break;
|
|
79
|
+
blocksDataTranslated = blocksDataFrom.map(({ blockType })=>({
|
|
80
|
+
blockType,
|
|
81
|
+
id: ObjectID().toHexString()
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
blocksDataTranslated.forEach((item, index)=>{
|
|
85
|
+
const block = field.blocks.find((each)=>each.slug === item.blockType);
|
|
86
|
+
if (!block) return;
|
|
87
|
+
traverseFields({
|
|
88
|
+
dataFrom,
|
|
89
|
+
emptyOnly,
|
|
90
|
+
fields: block.fields,
|
|
91
|
+
localizedParent: localizedParent ?? field.localized,
|
|
92
|
+
siblingDataFrom: blocksDataFrom[index],
|
|
93
|
+
siblingDataTranslated: item,
|
|
94
|
+
translatedData,
|
|
95
|
+
valuesToTranslate
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
siblingDataTranslated[field.name] = blocksDataTranslated;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case 'collapsible':
|
|
102
|
+
case 'row':
|
|
103
|
+
traverseFields({
|
|
104
|
+
dataFrom,
|
|
105
|
+
emptyOnly,
|
|
106
|
+
fields: field.fields,
|
|
107
|
+
localizedParent,
|
|
108
|
+
siblingDataFrom,
|
|
109
|
+
siblingDataTranslated,
|
|
110
|
+
translatedData,
|
|
111
|
+
valuesToTranslate
|
|
112
|
+
});
|
|
113
|
+
break;
|
|
114
|
+
// long ass cases here we have
|
|
115
|
+
case 'date':
|
|
116
|
+
case 'checkbox':
|
|
117
|
+
case 'json':
|
|
118
|
+
case 'code':
|
|
119
|
+
case 'email':
|
|
120
|
+
case 'number':
|
|
121
|
+
case 'point':
|
|
122
|
+
case 'radio':
|
|
123
|
+
case 'relationship':
|
|
124
|
+
case 'select':
|
|
125
|
+
case 'upload':
|
|
126
|
+
siblingDataTranslated[field.name] = siblingDataFrom[field.name];
|
|
127
|
+
break;
|
|
128
|
+
case 'text':
|
|
129
|
+
case 'textarea':
|
|
130
|
+
if (field.custom && typeof field.custom === 'object' && field.custom.translatorSkip) break;
|
|
131
|
+
if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;
|
|
132
|
+
if (emptyOnly && siblingDataTranslated[field.name]) break;
|
|
133
|
+
// do not translate the block ID or admin-facing label
|
|
134
|
+
if (field.name === 'blockName' || field.name === 'id') {
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
valuesToTranslate.push({
|
|
138
|
+
onTranslate: (translated)=>{
|
|
139
|
+
siblingDataTranslated[field.name] = translated;
|
|
140
|
+
},
|
|
141
|
+
value: siblingDataFrom[field.name]
|
|
142
|
+
});
|
|
143
|
+
break;
|
|
144
|
+
case 'richText':
|
|
145
|
+
{
|
|
146
|
+
if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;
|
|
147
|
+
if (emptyOnly && siblingDataTranslated[field.name]) break;
|
|
148
|
+
const richTextDataFrom = siblingDataFrom[field.name];
|
|
149
|
+
siblingDataTranslated[field.name] = richTextDataFrom;
|
|
150
|
+
if (!richTextDataFrom) break;
|
|
151
|
+
const isSlate = Array.isArray(richTextDataFrom);
|
|
152
|
+
const isLexical = 'root' in richTextDataFrom;
|
|
153
|
+
if (!isSlate && !isLexical) break;
|
|
154
|
+
if (isLexical) {
|
|
155
|
+
const root = siblingDataTranslated[field.name]?.root;
|
|
156
|
+
if (root) traverseRichText({
|
|
157
|
+
onText: (siblingData)=>{
|
|
158
|
+
valuesToTranslate.push({
|
|
159
|
+
onTranslate: (translated)=>{
|
|
160
|
+
siblingData.text = translated;
|
|
161
|
+
},
|
|
162
|
+
value: siblingData.text
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
root
|
|
166
|
+
});
|
|
167
|
+
} else {
|
|
168
|
+
for (const root of siblingDataTranslated[field.name]){
|
|
169
|
+
traverseRichText({
|
|
170
|
+
onText: (siblingData)=>{
|
|
171
|
+
valuesToTranslate.push({
|
|
172
|
+
onTranslate: (translated)=>{
|
|
173
|
+
siblingData.text = translated;
|
|
174
|
+
},
|
|
175
|
+
value: siblingData.text
|
|
176
|
+
});
|
|
177
|
+
},
|
|
178
|
+
root: root
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
default:
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
//# 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 if (!('name' in field)) break\n\n const groupDataFrom = siblingDataFrom[field.name] as Record<string, unknown>\n\n if (!groupDataFrom) break\n\n const groupDataTranslated =\n (siblingDataTranslated[field.name] as Record<string, unknown>) ?? {}\n\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n 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) => 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 } 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","arrayDataFrom","arrayDataTranslated","length","map","id","toHexString","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"],"mappings":"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"}
|
|
@@ -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,EAAC"}
|
|
@@ -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,WAAiE"}
|
|
@@ -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,UAAS;AAalC,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,EAAC"}
|
|
@@ -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,WAiBC"}
|
|
@@ -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,EAAC"}
|
|
@@ -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,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../src/translate/endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAM7C,eAAO,MAAM,iBAAiB,EAAE,cAsB/B,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PayloadRequest, SanitizedCollectionConfig, SanitizedGlobalConfig, TypeWithID } from 'payload';
|
|
2
|
+
type Args = {
|
|
3
|
+
collectionSlug?: string;
|
|
4
|
+
globalSlug?: string;
|
|
5
|
+
id?: number | string;
|
|
6
|
+
locale: string;
|
|
7
|
+
overrideAccess?: boolean;
|
|
8
|
+
req: PayloadRequest;
|
|
9
|
+
};
|
|
10
|
+
export declare const findEntityWithConfig: (args: Args) => Promise<{
|
|
11
|
+
config: SanitizedCollectionConfig | SanitizedGlobalConfig;
|
|
12
|
+
doc: Record<string, unknown> & TypeWithID;
|
|
13
|
+
}>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=findEntityWithConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findEntityWithConfig.d.ts","sourceRoot":"","sources":["../../src/translate/findEntityWithConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,UAAU,EACX,MAAM,SAAS,CAAA;AAGhB,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAOD,eAAO,MAAM,oBAAoB,GAC/B,MAAM,IAAI,KACT,OAAO,CAAC;IACT,MAAM,EAAE,yBAAyB,GAAG,qBAAqB,CAAA;IACzD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAAA;CAC1C,CA0CA,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Payload, type PayloadRequest } from 'payload';
|
|
2
|
+
import type { TranslateArgs, TranslateResult } from './types';
|
|
3
|
+
export type TranslateOperationArgs = ({
|
|
4
|
+
payload: Payload;
|
|
5
|
+
} | {
|
|
6
|
+
req: PayloadRequest;
|
|
7
|
+
}) & TranslateArgs;
|
|
8
|
+
export declare const translateOperation: (args: TranslateOperationArgs) => Promise<TranslateResult>;
|
|
9
|
+
//# sourceMappingURL=operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/translate/operation.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAKrE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAA;AAG/E,MAAM,MAAM,sBAAsB,GAAG,CACjC;IACE,OAAO,EAAE,OAAO,CAAA;CACjB,GACD;IACE,GAAG,EAAE,cAAc,CAAA;CACpB,CACJ,GACC,aAAa,CAAA;AAEf,eAAO,MAAM,kBAAkB,GAAU,MAAM,sBAAsB,6BAyFpE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Field } from 'payload';
|
|
2
|
+
import type { ValueToTranslate } from './types';
|
|
3
|
+
export declare const traverseFields: ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate, }: {
|
|
4
|
+
dataFrom: Record<string, unknown>;
|
|
5
|
+
emptyOnly?: boolean;
|
|
6
|
+
fields: Field[];
|
|
7
|
+
localizedParent?: boolean;
|
|
8
|
+
siblingDataFrom?: Record<string, unknown>;
|
|
9
|
+
siblingDataTranslated?: Record<string, unknown>;
|
|
10
|
+
translatedData: Record<string, unknown>;
|
|
11
|
+
valuesToTranslate: ValueToTranslate[];
|
|
12
|
+
}) => void;
|
|
13
|
+
//# sourceMappingURL=traverseFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/translate/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAKpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,eAAO,MAAM,cAAc,GAAI,8HAS5B;IACD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;CACtC,SAkPA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traverseRichText.d.ts","sourceRoot":"","sources":["../../src/translate/traverseRichText.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,GAAI,gCAI9B;IACD,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACtC,SAgBA,CAAA"}
|
|
@@ -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,CAAA;IAC3C,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GACvB;IACE,OAAO,EAAE,KAAK,CAAA;CACf,GACD;IACE,OAAO,EAAE,IAAI,CAAA;IACb,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACpC,CAAA;AAEL,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA"}
|
|
@@ -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,CAAA;AAGrF,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,8FAS1B,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CA6BrD,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -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,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAA;CAC/B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunkArray.d.ts","sourceRoot":"","sources":["../../src/utils/chunkArray.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,MAAM,KAAG,CAAC,EAAE,EAI7D,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isEmpty.d.ts","sourceRoot":"","sources":["../../src/utils/isEmpty.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,YAMrC,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@justanarthur/payload-plugin-translator",
|
|
3
|
+
"version": "1.3.6",
|
|
4
|
+
"private": false,
|
|
5
|
+
"bugs": "https://github.com/r1tsuu/payload-enchants/issues",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "r1tsuu",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"require": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./types": {
|
|
16
|
+
"import": "./dist/types.js",
|
|
17
|
+
"require": "./dist/types.js",
|
|
18
|
+
"types": "./dist/types.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./resolvers/types": {
|
|
21
|
+
"import": "./dist/resolvers/types.js",
|
|
22
|
+
"require": "./dist/resolvers/types.js",
|
|
23
|
+
"types": "./dist/resolvers/types.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./resolvers/google": {
|
|
26
|
+
"import": "./dist/resolvers/google.js",
|
|
27
|
+
"require": "./dist/resolvers/google.js",
|
|
28
|
+
"types": "./dist/resolvers/google.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./resolvers/copy": {
|
|
31
|
+
"import": "./dist/resolvers/copy.js",
|
|
32
|
+
"require": "./dist/resolvers/copy.js",
|
|
33
|
+
"types": "./dist/resolvers/copy.d.ts"
|
|
34
|
+
},
|
|
35
|
+
"./resolvers/openAI": {
|
|
36
|
+
"import": "./dist/resolvers/openAI.js",
|
|
37
|
+
"require": "./dist/resolvers/openAI.js",
|
|
38
|
+
"types": "./dist/resolvers/openAI.d.ts"
|
|
39
|
+
},
|
|
40
|
+
"./client": {
|
|
41
|
+
"import": "./dist/exports/client.js",
|
|
42
|
+
"require": "./dist/exports/client.js",
|
|
43
|
+
"types": "./dist/exports/client.d.ts"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"dist"
|
|
48
|
+
],
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"bson-objectid": "^2.0.4",
|
|
51
|
+
"he": "^1.2.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@swc/cli": "^0.7.8",
|
|
55
|
+
"@swc/core": "^1.12.11",
|
|
56
|
+
"@types/he": "^1.2.3",
|
|
57
|
+
"@types/react": "^19.1.0",
|
|
58
|
+
"@types/react-dom": "^19.1.2",
|
|
59
|
+
"copyfiles": "^2.4.1",
|
|
60
|
+
"eslint": "^9.31.0",
|
|
61
|
+
"react": "^19.1.0",
|
|
62
|
+
"react-dom": "^19.1.0",
|
|
63
|
+
"rimraf": "^6.0.1",
|
|
64
|
+
"typescript": "^5.7.3"
|
|
65
|
+
},
|
|
66
|
+
"peerDependencies": {
|
|
67
|
+
"@payloadcms/translations": "3.47.0",
|
|
68
|
+
"@payloadcms/ui": "3.47.0",
|
|
69
|
+
"payload": "3.47.0"
|
|
70
|
+
},
|
|
71
|
+
"publishConfig": {
|
|
72
|
+
"registry": "https://registry.npmjs.org/"
|
|
73
|
+
},
|
|
74
|
+
"repository": {
|
|
75
|
+
"type": "git",
|
|
76
|
+
"url": "git+https://github.com/justAnArthur/payload-starter_translator"
|
|
77
|
+
},
|
|
78
|
+
"scripts": {
|
|
79
|
+
"build": "pnpm copyfiles && pnpm build:swc && pnpm build:types",
|
|
80
|
+
"build:swc": "swc ./src -d ./dist --config-file .swcrc",
|
|
81
|
+
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
82
|
+
"clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
|
|
83
|
+
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
|
84
|
+
"lint": "eslint src",
|
|
85
|
+
"lint:fix": "eslint --fix --ext .ts,.tsx src"
|
|
86
|
+
},
|
|
87
|
+
"main": "./dist/index.js",
|
|
88
|
+
"types": "./dist/index.d.ts"
|
|
89
|
+
}
|