@justanarthur/payload-plugin-translator 1.3.20 → 3.0.3
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 +132 -215
- package/dist/client.css +41 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.js +320 -0
- package/dist/index.d.ts +63 -11
- package/dist/index.js +275 -82
- package/dist/jobs.d.ts +50 -0
- package/dist/jobs.js +28 -0
- package/dist/resolvers/copy.d.ts +19 -3
- package/dist/resolvers/copy.js +9 -13
- package/dist/resolvers/google.d.ts +23 -11
- package/dist/resolvers/google.js +10 -46
- package/dist/resolvers/libreTranslate.d.ts +23 -15
- package/dist/resolvers/libreTranslate.js +10 -47
- package/dist/resolvers/openAI.d.ts +29 -21
- package/dist/resolvers/openAI.js +9 -134
- package/dist/resolvers/types.d.ts +14 -16
- package/dist/resolvers/types.js +0 -3
- package/dist/shared/chunk-97ktc51q.js +15 -0
- package/dist/shared/chunk-ecnph6hw.js +205 -0
- package/dist/shared/chunk-frnemj69.js +6 -0
- package/dist/shared/chunk-fsveh29m.js +55 -0
- package/dist/shared/chunk-q51q8rd2.js +855 -0
- package/dist/shared/chunk-zhrw0jnz.js +57 -0
- package/dist/types.d.ts +32 -22
- package/dist/types.js +0 -3
- package/package.json +89 -63
- package/dist/client/api/index.d.ts +0 -8
- package/dist/client/api/index.d.ts.map +0 -1
- package/dist/client/api/index.js +0 -28
- package/dist/client/api/index.js.map +0 -1
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +0 -5
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +0 -1
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +0 -28
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +0 -1
- package/dist/client/components/CustomButton/index.d.ts +0 -3
- package/dist/client/components/CustomButton/index.d.ts.map +0 -1
- package/dist/client/components/CustomButton/index.js +0 -10
- package/dist/client/components/CustomButton/index.js.map +0 -1
- package/dist/client/components/CustomButton/styles.scss +0 -5
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +0 -5
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +0 -1
- package/dist/client/components/LocaleLabel/LocaleLabel.js +0 -28
- package/dist/client/components/LocaleLabel/LocaleLabel.js.map +0 -1
- package/dist/client/components/LocaleLabel/index.d.ts +0 -2
- package/dist/client/components/LocaleLabel/index.d.ts.map +0 -1
- package/dist/client/components/LocaleLabel/index.js +0 -3
- package/dist/client/components/LocaleLabel/index.js.map +0 -1
- package/dist/client/components/ResolverButton/ResolverButton.d.ts +0 -5
- package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +0 -1
- package/dist/client/components/ResolverButton/ResolverButton.js +0 -16
- package/dist/client/components/ResolverButton/ResolverButton.js.map +0 -1
- package/dist/client/components/ResolverButton/index.d.ts +0 -2
- package/dist/client/components/ResolverButton/index.d.ts.map +0 -1
- package/dist/client/components/ResolverButton/index.js +0 -3
- package/dist/client/components/ResolverButton/index.js.map +0 -1
- package/dist/client/components/TranslatorModal/Content.d.ts +0 -2
- package/dist/client/components/TranslatorModal/Content.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/Content.js +0 -60
- package/dist/client/components/TranslatorModal/Content.js.map +0 -1
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +0 -3
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/TranslatorModal.js +0 -26
- package/dist/client/components/TranslatorModal/TranslatorModal.js.map +0 -1
- package/dist/client/components/TranslatorModal/index.d.ts +0 -2
- package/dist/client/components/TranslatorModal/index.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/index.js +0 -3
- package/dist/client/components/TranslatorModal/index.js.map +0 -1
- package/dist/client/components/TranslatorModal/styles.scss +0 -76
- package/dist/client/providers/Translator/TranslatorProvider.d.ts +0 -5
- package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +0 -1
- package/dist/client/providers/Translator/TranslatorProvider.js +0 -109
- package/dist/client/providers/Translator/TranslatorProvider.js.map +0 -1
- package/dist/client/providers/Translator/context.d.ts +0 -21
- package/dist/client/providers/Translator/context.d.ts.map +0 -1
- package/dist/client/providers/Translator/context.js +0 -9
- package/dist/client/providers/Translator/context.js.map +0 -1
- package/dist/exports/client.d.ts +0 -2
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js +0 -3
- package/dist/exports/client.js.map +0 -1
- package/dist/i18n-translations.d.ts +0 -87
- package/dist/i18n-translations.d.ts.map +0 -1
- package/dist/i18n-translations.js +0 -88
- package/dist/i18n-translations.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resolvers/copy.d.ts.map +0 -1
- package/dist/resolvers/copy.js.map +0 -1
- package/dist/resolvers/google.d.ts.map +0 -1
- package/dist/resolvers/google.js.map +0 -1
- package/dist/resolvers/libreTranslate.d.ts.map +0 -1
- package/dist/resolvers/libreTranslate.js.map +0 -1
- package/dist/resolvers/openAI.d.ts.map +0 -1
- package/dist/resolvers/openAI.js.map +0 -1
- package/dist/resolvers/types.d.ts.map +0 -1
- package/dist/resolvers/types.js.map +0 -1
- package/dist/translate/endpoint.d.ts +0 -3
- package/dist/translate/endpoint.d.ts.map +0 -1
- package/dist/translate/endpoint.js +0 -23
- package/dist/translate/endpoint.js.map +0 -1
- package/dist/translate/findEntityWithConfig.d.ts +0 -16
- package/dist/translate/findEntityWithConfig.d.ts.map +0 -1
- package/dist/translate/findEntityWithConfig.js +0 -34
- package/dist/translate/findEntityWithConfig.js.map +0 -1
- package/dist/translate/operation.d.ts +0 -9
- package/dist/translate/operation.d.ts.map +0 -1
- package/dist/translate/operation.js +0 -78
- package/dist/translate/operation.js.map +0 -1
- package/dist/translate/traverseFields.d.ts +0 -17
- package/dist/translate/traverseFields.d.ts.map +0 -1
- package/dist/translate/traverseFields.js +0 -233
- package/dist/translate/traverseFields.js.map +0 -1
- package/dist/translate/traverseRichText.d.ts +0 -10
- package/dist/translate/traverseRichText.d.ts.map +0 -1
- package/dist/translate/traverseRichText.js +0 -24
- package/dist/translate/traverseRichText.js.map +0 -1
- package/dist/translate/types.d.ts +0 -27
- package/dist/translate/types.d.ts.map +0 -1
- package/dist/translate/types.js +0 -3
- package/dist/translate/types.js.map +0 -1
- package/dist/translate/updateEntity.d.ts +0 -14
- package/dist/translate/updateEntity.d.ts.map +0 -1
- package/dist/translate/updateEntity.js +0 -26
- package/dist/translate/updateEntity.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/chunkArray.d.ts +0 -2
- package/dist/utils/chunkArray.d.ts.map +0 -1
- package/dist/utils/chunkArray.js +0 -7
- package/dist/utils/chunkArray.js.map +0 -1
- package/dist/utils/isEmpty.d.ts +0 -2
- package/dist/utils/isEmpty.d.ts.map +0 -1
- package/dist/utils/isEmpty.js +0 -8
- package/dist/utils/isEmpty.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,87 +1,280 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
1
|
+
import"./shared/chunk-fsveh29m.js";
|
|
2
|
+
import {
|
|
3
|
+
createAutoTranslateCollectionHook,
|
|
4
|
+
createAutoTranslateGlobalHook,
|
|
5
|
+
createTranslateTask,
|
|
6
|
+
createTranslateWorkflow,
|
|
7
|
+
translateOperation
|
|
8
|
+
} from "./shared/chunk-q51q8rd2.js";
|
|
9
|
+
import"./shared/chunk-zhrw0jnz.js";
|
|
10
|
+
import"./shared/chunk-97ktc51q.js";
|
|
11
|
+
import"./shared/chunk-ecnph6hw.js";
|
|
12
|
+
import"./shared/chunk-frnemj69.js";
|
|
13
|
+
|
|
14
|
+
// src/index.ts
|
|
15
|
+
import { deepMerge } from "payload/shared";
|
|
16
|
+
|
|
17
|
+
// src/client/components/CustomButton/index.tsx
|
|
18
|
+
var CustomButton = (type) => {
|
|
19
|
+
return {
|
|
20
|
+
clientProps: {
|
|
21
|
+
type
|
|
22
|
+
},
|
|
23
|
+
path: "@justanarthur/payload-plugin-translator/client#CustomButtonWithTranslator"
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// src/i18n-translations.ts
|
|
28
|
+
var translations = {
|
|
29
|
+
en: {
|
|
30
|
+
"plugin-translator": {
|
|
31
|
+
resolver_copy_buttonLabel: "Copy from other locale",
|
|
32
|
+
resolver_copy_errorMessage: "An error occurred when trying to translate the data",
|
|
33
|
+
resolver_copy_modalTitle: "Choose the locale to copy from",
|
|
34
|
+
resolver_copy_submitButtonLabelEmpty: "Copy only empty fields",
|
|
35
|
+
resolver_copy_submitButtonLabelFull: "Copy all",
|
|
36
|
+
resolver_copy_successMessage: 'Successfully copied. Press "Save" to apply the changes.',
|
|
37
|
+
resolver_google_buttonLabel: "Google Translate",
|
|
38
|
+
resolver_google_errorMessage: "An error occurred when trying to translate the data",
|
|
39
|
+
resolver_google_modalTitle: "Choose the locale to translate from",
|
|
40
|
+
resolver_google_submitButtonLabelEmpty: "Translate only empty fields",
|
|
41
|
+
resolver_google_submitButtonLabelFull: "Translate all",
|
|
42
|
+
resolver_google_successMessage: 'Successfully translated. Press "Save" to apply the changes.',
|
|
43
|
+
resolver_libre_buttonLabel: "Libre Translate",
|
|
44
|
+
resolver_libre_errorMessage: "An error occurred when trying to translate the data",
|
|
45
|
+
resolver_libre_modalTitle: "Choose the locale to translate from",
|
|
46
|
+
resolver_libre_submitButtonLabelEmpty: "Translate only empty fields",
|
|
47
|
+
resolver_libre_submitButtonLabelFull: "Translate all",
|
|
48
|
+
resolver_libre_successMessage: 'Successfully translated. Press "Save" to apply the changes.',
|
|
49
|
+
resolver_openai_buttonLabel: "AI Translate",
|
|
50
|
+
resolver_openai_errorMessage: "An error occurred when trying to translate the data",
|
|
51
|
+
resolver_openai_modalTitle: "Choose the locale to translate from",
|
|
52
|
+
resolver_openai_submitButtonLabelEmpty: "Translate only empty fields",
|
|
53
|
+
resolver_openai_submitButtonLabelFull: "Translate all",
|
|
54
|
+
resolver_openai_successMessage: 'Successfully translated. Press "Save" to apply the changes.'
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
uk: {
|
|
58
|
+
"plugin-translator": {
|
|
59
|
+
resolver_copy_buttonLabel: "Копіювати з іншої локалі",
|
|
60
|
+
resolver_copy_errorMessage: "Сталася помилка під час спроби перекладу даних",
|
|
61
|
+
resolver_copy_modalTitle: "Виберіть локаль для копіювання",
|
|
62
|
+
resolver_copy_submitButtonLabelEmpty: "Копіювати лише порожні поля",
|
|
63
|
+
resolver_copy_submitButtonLabelFull: "Копіювати все",
|
|
64
|
+
resolver_copy_successMessage: 'Успішно скопійовано. Натисніть "Зберегти", щоб застосувати зміни.',
|
|
65
|
+
resolver_google_buttonLabel: "Переклад Google",
|
|
66
|
+
resolver_google_errorMessage: "Сталася помилка під час спроби перекладу даних",
|
|
67
|
+
resolver_google_modalTitle: "Виберіть локаль для перекладу",
|
|
68
|
+
resolver_google_submitButtonLabelEmpty: "Перекласти лише порожні поля",
|
|
69
|
+
resolver_google_submitButtonLabelFull: "Перекласти все",
|
|
70
|
+
resolver_google_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.',
|
|
71
|
+
resolver_libre_buttonLabel: "Переклад Libre",
|
|
72
|
+
resolver_libre_errorMessage: "Сталася помилка під час спроби перекладу даних",
|
|
73
|
+
resolver_libre_modalTitle: "Виберіть локаль для перекладу",
|
|
74
|
+
resolver_libre_submitButtonLabelEmpty: "Перекласти лише порожні поля",
|
|
75
|
+
resolver_libre_submitButtonLabelFull: "Перекласти все",
|
|
76
|
+
resolver_libre_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.',
|
|
77
|
+
resolver_openai_buttonLabel: "Переклад AI",
|
|
78
|
+
resolver_openai_errorMessage: "Сталася помилка під час спроби перекладу даних",
|
|
79
|
+
resolver_openai_modalTitle: "Виберіть локаль для перекладу",
|
|
80
|
+
resolver_openai_submitButtonLabelEmpty: "Перекласти лише порожні поля",
|
|
81
|
+
resolver_openai_submitButtonLabelFull: "Перекласти все",
|
|
82
|
+
resolver_openai_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.'
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
zh: {
|
|
86
|
+
"plugin-translator": {
|
|
87
|
+
resolver_copy_buttonLabel: "从其他语言复制",
|
|
88
|
+
resolver_copy_errorMessage: "尝试翻译数据时发生错误",
|
|
89
|
+
resolver_copy_modalTitle: "选择要复制的语言",
|
|
90
|
+
resolver_copy_submitButtonLabelEmpty: "仅复制空字段",
|
|
91
|
+
resolver_copy_submitButtonLabelFull: "复制全部",
|
|
92
|
+
resolver_copy_successMessage: "复制成功。按下“保存”以应用更改。",
|
|
93
|
+
resolver_google_buttonLabel: "谷歌翻译",
|
|
94
|
+
resolver_google_errorMessage: "尝试翻译数据时发生错误",
|
|
95
|
+
resolver_google_modalTitle: "选择要翻译的语言",
|
|
96
|
+
resolver_google_submitButtonLabelEmpty: "仅翻译空字段",
|
|
97
|
+
resolver_google_submitButtonLabelFull: "翻译全部",
|
|
98
|
+
resolver_google_successMessage: "翻译成功。按下“保存”以应用更改。",
|
|
99
|
+
resolver_libre_buttonLabel: "自由翻译",
|
|
100
|
+
resolver_libre_errorMessage: "尝试翻译数据时发生错误",
|
|
101
|
+
resolver_libre_modalTitle: "选择要翻译的语言",
|
|
102
|
+
resolver_libre_submitButtonLabelEmpty: "仅翻译空字段",
|
|
103
|
+
resolver_libre_submitButtonLabelFull: "翻译全部",
|
|
104
|
+
resolver_libre_successMessage: "翻译成功。按下“保存”以应用更改。",
|
|
105
|
+
resolver_openai_buttonLabel: "AI翻译",
|
|
106
|
+
resolver_openai_errorMessage: "尝试翻译数据时发生错误",
|
|
107
|
+
resolver_openai_modalTitle: "选择要翻译的语言",
|
|
108
|
+
resolver_openai_submitButtonLabelEmpty: "仅翻译空字段",
|
|
109
|
+
resolver_openai_submitButtonLabelFull: "翻译全部",
|
|
110
|
+
resolver_openai_successMessage: "翻译成功。按下“保存”以应用更改。"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// src/translate/endpoint.ts
|
|
116
|
+
import { APIError } from "payload";
|
|
117
|
+
var translateEndpoint = async (req) => {
|
|
118
|
+
if (!req.json)
|
|
119
|
+
throw new APIError("Content-Type should be json");
|
|
120
|
+
const args = await req.json();
|
|
121
|
+
const { collectionSlug, data, emptyOnly, globalSlug, id, locale, localeFrom, resolver } = args;
|
|
122
|
+
const result = await translateOperation({
|
|
123
|
+
collectionSlug,
|
|
124
|
+
data,
|
|
125
|
+
emptyOnly,
|
|
126
|
+
globalSlug,
|
|
127
|
+
id,
|
|
128
|
+
locale,
|
|
129
|
+
localeFrom,
|
|
130
|
+
overrideAccess: false,
|
|
131
|
+
req,
|
|
132
|
+
resolver,
|
|
133
|
+
update: false
|
|
134
|
+
});
|
|
135
|
+
return Response.json(result);
|
|
136
|
+
};
|
|
137
|
+
// src/index.ts
|
|
138
|
+
var AUTO_TRANSLATE_MARKER = Symbol.for("@justanarthur/payload-plugin-translator/auto-translate");
|
|
139
|
+
var translator = (pluginConfig) => {
|
|
140
|
+
return (config) => {
|
|
141
|
+
if (pluginConfig.disabled || !config.localization || config.localization.locales.length < 2)
|
|
142
|
+
return config;
|
|
143
|
+
const autoTranslate = pluginConfig.autoTranslate ?? true;
|
|
144
|
+
const updatedConfig = {
|
|
145
|
+
...config,
|
|
146
|
+
admin: {
|
|
147
|
+
...config.admin ?? {},
|
|
148
|
+
custom: {
|
|
149
|
+
...config.admin?.custom ?? {},
|
|
150
|
+
translator: {
|
|
151
|
+
resolvers: pluginConfig.resolvers.map(({ key }) => ({ key }))
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
collections: config.collections?.map((collection) => {
|
|
156
|
+
if (!pluginConfig.collections.includes(collection.slug))
|
|
157
|
+
return collection;
|
|
158
|
+
return {
|
|
159
|
+
...collection,
|
|
160
|
+
admin: {
|
|
161
|
+
...collection.admin ?? {},
|
|
162
|
+
components: {
|
|
163
|
+
...collection.admin?.components ?? {},
|
|
164
|
+
edit: {
|
|
165
|
+
...collection.admin?.components?.edit ?? {},
|
|
166
|
+
PublishButton: CustomButton("publish"),
|
|
167
|
+
SaveButton: CustomButton("save")
|
|
168
|
+
}
|
|
81
169
|
}
|
|
170
|
+
},
|
|
171
|
+
...autoTranslate ? {
|
|
172
|
+
hooks: attachCollectionHook(collection.hooks, createAutoTranslateCollectionHook({ collectionSlug: String(collection.slug) }).afterChange)
|
|
173
|
+
} : {}
|
|
82
174
|
};
|
|
83
|
-
|
|
175
|
+
}) ?? [],
|
|
176
|
+
custom: {
|
|
177
|
+
...config.custom ?? {},
|
|
178
|
+
translator: {
|
|
179
|
+
...pluginConfig
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
endpoints: [
|
|
183
|
+
...config.endpoints ?? [],
|
|
184
|
+
{
|
|
185
|
+
handler: translateEndpoint,
|
|
186
|
+
method: "post",
|
|
187
|
+
path: "/translator/translate"
|
|
188
|
+
}
|
|
189
|
+
],
|
|
190
|
+
globals: config.globals?.map((global) => {
|
|
191
|
+
if (!pluginConfig.globals.includes(global.slug))
|
|
192
|
+
return global;
|
|
193
|
+
return {
|
|
194
|
+
...global,
|
|
195
|
+
admin: {
|
|
196
|
+
...global.admin ?? {},
|
|
197
|
+
components: {
|
|
198
|
+
...global.admin?.components ?? {},
|
|
199
|
+
elements: {
|
|
200
|
+
...global.admin?.components?.elements ?? {},
|
|
201
|
+
PublishButton: CustomButton("publish"),
|
|
202
|
+
SaveButton: CustomButton("save")
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
...autoTranslate ? {
|
|
207
|
+
hooks: attachGlobalHook(global.hooks, createAutoTranslateGlobalHook({ globalSlug: String(global.slug) }))
|
|
208
|
+
} : {}
|
|
209
|
+
};
|
|
210
|
+
}) ?? [],
|
|
211
|
+
i18n: {
|
|
212
|
+
...config.i18n,
|
|
213
|
+
translations: {
|
|
214
|
+
...deepMerge(config.i18n?.translations ?? {}, translations)
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
...autoTranslate ? {
|
|
218
|
+
jobs: {
|
|
219
|
+
...config.jobs ?? {},
|
|
220
|
+
tasks: ensureJobBySlug(config.jobs?.tasks, createTranslateTask()),
|
|
221
|
+
workflows: ensureJobBySlug(config.jobs?.workflows, createTranslateWorkflow()),
|
|
222
|
+
deleteJobOnComplete: false,
|
|
223
|
+
jobsCollectionOverrides: ({ defaultJobsCollection }) => {
|
|
224
|
+
defaultJobsCollection.admin = {
|
|
225
|
+
...defaultJobsCollection.admin,
|
|
226
|
+
hidden: false,
|
|
227
|
+
group: "System"
|
|
228
|
+
};
|
|
229
|
+
return defaultJobsCollection;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
} : {}
|
|
84
233
|
};
|
|
234
|
+
return updatedConfig;
|
|
235
|
+
};
|
|
85
236
|
};
|
|
237
|
+
function ensureJobBySlug(existing, job) {
|
|
238
|
+
const list = existing ?? [];
|
|
239
|
+
if (list.some((entry) => entry.slug === job.slug))
|
|
240
|
+
return list;
|
|
241
|
+
return [...list, job];
|
|
242
|
+
}
|
|
243
|
+
function attachCollectionHook(existing, hookToAttach) {
|
|
244
|
+
const list = toHookArray(existing?.afterChange);
|
|
245
|
+
if (list.some(isMarkedAutoTranslate))
|
|
246
|
+
return existing ?? {};
|
|
247
|
+
return {
|
|
248
|
+
...existing ?? {},
|
|
249
|
+
afterChange: [markAutoTranslate(hookToAttach), ...list]
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function attachGlobalHook(existing, hookToAttach) {
|
|
253
|
+
const list = toHookArray(existing?.afterChange);
|
|
254
|
+
if (list.some(isMarkedAutoTranslate))
|
|
255
|
+
return existing ?? {};
|
|
256
|
+
return {
|
|
257
|
+
...existing ?? {},
|
|
258
|
+
afterChange: [markAutoTranslate(hookToAttach), ...list]
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function toHookArray(input) {
|
|
262
|
+
if (input === undefined)
|
|
263
|
+
return [];
|
|
264
|
+
return Array.isArray(input) ? input : [input];
|
|
265
|
+
}
|
|
266
|
+
function markAutoTranslate(hook) {
|
|
267
|
+
hook[AUTO_TRANSLATE_MARKER] = true;
|
|
268
|
+
return hook;
|
|
269
|
+
}
|
|
270
|
+
function isMarkedAutoTranslate(hook) {
|
|
271
|
+
return Boolean(hook?.[AUTO_TRANSLATE_MARKER]);
|
|
272
|
+
}
|
|
86
273
|
|
|
87
|
-
|
|
274
|
+
// src/exports/index.ts
|
|
275
|
+
var exports_default = translator;
|
|
276
|
+
export {
|
|
277
|
+
translator,
|
|
278
|
+
translateOperation,
|
|
279
|
+
exports_default as default
|
|
280
|
+
};
|
package/dist/jobs.d.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { CollectionAfterChangeHook } from "payload";
|
|
2
|
+
type CreateAutoTranslateCollectionHookOptions = {
|
|
3
|
+
collectionSlug: string;
|
|
4
|
+
defaultLocale?: string;
|
|
5
|
+
targetLocales?: string[];
|
|
6
|
+
onlyOnPublished?: boolean;
|
|
7
|
+
workflowSlug?: string;
|
|
8
|
+
resolverKey?: string;
|
|
9
|
+
};
|
|
10
|
+
declare function createAutoTranslateCollectionHook(options: CreateAutoTranslateCollectionHookOptions): {
|
|
11
|
+
afterChange: CollectionAfterChangeHook;
|
|
12
|
+
};
|
|
13
|
+
import { GlobalAfterChangeHook } from "payload";
|
|
14
|
+
type CreateAutoTranslateGlobalHookOptions = {
|
|
15
|
+
globalSlug: string;
|
|
16
|
+
defaultLocale?: string;
|
|
17
|
+
targetLocales?: string[];
|
|
18
|
+
workflowSlug?: string;
|
|
19
|
+
resolverKey?: string;
|
|
20
|
+
};
|
|
21
|
+
declare function createAutoTranslateGlobalHook(options: CreateAutoTranslateGlobalHookOptions): GlobalAfterChangeHook;
|
|
22
|
+
import { TaskConfig, TaskHandler } from "payload";
|
|
23
|
+
type TranslateTaskConfig = Omit<TaskConfig, "handler"> & {
|
|
24
|
+
handler: TaskHandler<string, string>;
|
|
25
|
+
};
|
|
26
|
+
type CreateTranslateTaskOptions = {
|
|
27
|
+
resolverKey?: string;
|
|
28
|
+
slug?: string;
|
|
29
|
+
};
|
|
30
|
+
declare function createTranslateTask(options?: CreateTranslateTaskOptions): TranslateTaskConfig;
|
|
31
|
+
import { WorkflowConfig, WorkflowHandler } from "payload";
|
|
32
|
+
type TranslateWorkflowConfig = Omit<WorkflowConfig, "handler"> & {
|
|
33
|
+
handler: WorkflowHandler;
|
|
34
|
+
};
|
|
35
|
+
type CreateTranslateWorkflowOptions = {
|
|
36
|
+
slug?: string;
|
|
37
|
+
taskSlug?: string;
|
|
38
|
+
};
|
|
39
|
+
declare function createTranslateWorkflow(options?: CreateTranslateWorkflowOptions): TranslateWorkflowConfig;
|
|
40
|
+
declare const TRANSLATE_TASK_SLUG = "translateEntityToLocale";
|
|
41
|
+
declare const TRANSLATE_WORKFLOW_SLUG = "translateEntityToLocales";
|
|
42
|
+
declare const jobs: {
|
|
43
|
+
TRANSLATE_TASK_SLUG: string;
|
|
44
|
+
TRANSLATE_WORKFLOW_SLUG: string;
|
|
45
|
+
createTranslateTask: typeof createTranslateTask;
|
|
46
|
+
createTranslateWorkflow: typeof createTranslateWorkflow;
|
|
47
|
+
createAutoTranslateCollectionHook: typeof createAutoTranslateCollectionHook;
|
|
48
|
+
createAutoTranslateGlobalHook: typeof createAutoTranslateGlobalHook;
|
|
49
|
+
};
|
|
50
|
+
export { jobs as default, createTranslateWorkflow, createTranslateTask, createAutoTranslateGlobalHook, createAutoTranslateCollectionHook, TranslateWorkflowConfig, TranslateTaskConfig, TRANSLATE_WORKFLOW_SLUG, TRANSLATE_TASK_SLUG, CreateTranslateWorkflowOptions, CreateTranslateTaskOptions, CreateAutoTranslateGlobalHookOptions, CreateAutoTranslateCollectionHookOptions };
|
package/dist/jobs.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TRANSLATE_TASK_SLUG,
|
|
3
|
+
TRANSLATE_WORKFLOW_SLUG,
|
|
4
|
+
createAutoTranslateCollectionHook,
|
|
5
|
+
createAutoTranslateGlobalHook,
|
|
6
|
+
createTranslateTask,
|
|
7
|
+
createTranslateWorkflow
|
|
8
|
+
} from "./shared/chunk-q51q8rd2.js";
|
|
9
|
+
|
|
10
|
+
// src/exports/jobs.ts
|
|
11
|
+
var jobs = {
|
|
12
|
+
TRANSLATE_TASK_SLUG,
|
|
13
|
+
TRANSLATE_WORKFLOW_SLUG,
|
|
14
|
+
createTranslateTask,
|
|
15
|
+
createTranslateWorkflow,
|
|
16
|
+
createAutoTranslateCollectionHook,
|
|
17
|
+
createAutoTranslateGlobalHook
|
|
18
|
+
};
|
|
19
|
+
var jobs_default = jobs;
|
|
20
|
+
export {
|
|
21
|
+
jobs_default as default,
|
|
22
|
+
createTranslateWorkflow,
|
|
23
|
+
createTranslateTask,
|
|
24
|
+
createAutoTranslateGlobalHook,
|
|
25
|
+
createAutoTranslateCollectionHook,
|
|
26
|
+
TRANSLATE_WORKFLOW_SLUG,
|
|
27
|
+
TRANSLATE_TASK_SLUG
|
|
28
|
+
};
|
package/dist/resolvers/copy.d.ts
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { PayloadRequest } from "payload";
|
|
2
|
+
type TranslateResolverArgs = {
|
|
3
|
+
localeFrom: string;
|
|
4
|
+
localeTo: string;
|
|
5
|
+
req: PayloadRequest;
|
|
6
|
+
texts: string[];
|
|
7
|
+
};
|
|
8
|
+
type TranslateResolverResponse = {
|
|
9
|
+
success: false;
|
|
10
|
+
} | {
|
|
11
|
+
success: true;
|
|
12
|
+
translatedTexts: string[];
|
|
13
|
+
};
|
|
14
|
+
type TranslateResolver = {
|
|
15
|
+
key: string;
|
|
16
|
+
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
17
|
+
};
|
|
18
|
+
declare const copyResolver: () => TranslateResolver;
|
|
19
|
+
export { copyResolver as default, copyResolver };
|
package/dist/resolvers/copy.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
resolve: (args)=>{
|
|
5
|
-
const { texts } = args;
|
|
6
|
-
return {
|
|
7
|
-
success: true,
|
|
8
|
-
translatedTexts: texts
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
copyResolver
|
|
3
|
+
} from "../shared/chunk-97ktc51q.js";
|
|
13
4
|
|
|
14
|
-
|
|
5
|
+
// src/exports/resolvers/copy.ts
|
|
6
|
+
var copy_default = copyResolver;
|
|
7
|
+
export {
|
|
8
|
+
copy_default as default,
|
|
9
|
+
copyResolver
|
|
10
|
+
};
|
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { PayloadRequest } from "payload";
|
|
2
|
+
type TranslateResolverArgs = {
|
|
3
|
+
localeFrom: string;
|
|
4
|
+
localeTo: string;
|
|
5
|
+
req: PayloadRequest;
|
|
6
|
+
texts: string[];
|
|
7
|
+
};
|
|
8
|
+
type TranslateResolverResponse = {
|
|
9
|
+
success: false;
|
|
10
|
+
} | {
|
|
11
|
+
success: true;
|
|
12
|
+
translatedTexts: string[];
|
|
13
|
+
};
|
|
14
|
+
type TranslateResolver = {
|
|
15
|
+
key: string;
|
|
16
|
+
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
17
|
+
};
|
|
18
|
+
type GoogleResolverConfig = {
|
|
19
|
+
apiKey: string;
|
|
20
|
+
chunkLength?: number;
|
|
21
|
+
};
|
|
22
|
+
declare const googleResolver: ({ apiKey, chunkLength }: GoogleResolverConfig) => TranslateResolver;
|
|
23
|
+
export { googleResolver, googleResolver as default, GoogleResolverConfig };
|
package/dist/resolvers/google.js
CHANGED
|
@@ -1,47 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const mapLocale = (incoming)=>incoming in localeToCountryCodeMapper ? localeToCountryCodeMapper[incoming] : incoming;
|
|
6
|
-
export const googleResolver = ({ apiKey, chunkLength = 100 })=>{
|
|
7
|
-
return {
|
|
8
|
-
key: 'google',
|
|
9
|
-
resolve: async (args)=>{
|
|
10
|
-
const { localeFrom, localeTo, req, texts } = args;
|
|
11
|
-
const apiUrl = `https://translation.googleapis.com/language/translate/v2?key=${apiKey}`;
|
|
12
|
-
const responses = await Promise.all(chunkArray(texts, chunkLength).map((q)=>fetch(apiUrl, {
|
|
13
|
-
body: JSON.stringify({
|
|
14
|
-
q,
|
|
15
|
-
source: mapLocale(localeFrom),
|
|
16
|
-
target: mapLocale(localeTo)
|
|
17
|
-
}),
|
|
18
|
-
headers: {
|
|
19
|
-
'Content-Type': 'application/json'
|
|
20
|
-
},
|
|
21
|
-
method: 'POST'
|
|
22
|
-
}).then(async (res)=>{
|
|
23
|
-
const data = await res.json();
|
|
24
|
-
if (!res.ok) req.payload.logger.info({
|
|
25
|
-
googleResponse: data,
|
|
26
|
-
message: 'An error occurred when trying to translate the data using Google API'
|
|
27
|
-
});
|
|
28
|
-
return {
|
|
29
|
-
data,
|
|
30
|
-
success: res.ok
|
|
31
|
-
};
|
|
32
|
-
})));
|
|
33
|
-
if (responses.some((res)=>!res.success)) {
|
|
34
|
-
return {
|
|
35
|
-
success: false
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const translatedTexts = responses.flatMap((chunk)=>chunk.data.data.translations).map((translation)=>translation.translatedText);
|
|
39
|
-
return {
|
|
40
|
-
success: true,
|
|
41
|
-
translatedTexts
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
googleResolver
|
|
3
|
+
} from "../shared/chunk-fsveh29m.js";
|
|
4
|
+
import"../shared/chunk-frnemj69.js";
|
|
46
5
|
|
|
47
|
-
|
|
6
|
+
// src/exports/resolvers/google.ts
|
|
7
|
+
var google_default = googleResolver;
|
|
8
|
+
export {
|
|
9
|
+
googleResolver,
|
|
10
|
+
google_default as default
|
|
11
|
+
};
|
|
@@ -1,16 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*/
|
|
8
|
-
chunkLength?: number;
|
|
9
|
-
/**
|
|
10
|
-
* Custom url for the libre translate instance
|
|
11
|
-
* @default "https://libretranslate.com/translate"
|
|
12
|
-
*/
|
|
13
|
-
url?: string;
|
|
1
|
+
import { PayloadRequest } from "payload";
|
|
2
|
+
type TranslateResolverArgs = {
|
|
3
|
+
localeFrom: string;
|
|
4
|
+
localeTo: string;
|
|
5
|
+
req: PayloadRequest;
|
|
6
|
+
texts: string[];
|
|
14
7
|
};
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
type TranslateResolverResponse = {
|
|
9
|
+
success: false;
|
|
10
|
+
} | {
|
|
11
|
+
success: true;
|
|
12
|
+
translatedTexts: string[];
|
|
13
|
+
};
|
|
14
|
+
type TranslateResolver = {
|
|
15
|
+
key: string;
|
|
16
|
+
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
17
|
+
};
|
|
18
|
+
type LibreResolverConfig = {
|
|
19
|
+
apiKey: string;
|
|
20
|
+
chunkLength?: number;
|
|
21
|
+
url?: string;
|
|
22
|
+
};
|
|
23
|
+
declare const libreResolver: ({ apiKey, chunkLength, url }: LibreResolverConfig) => TranslateResolver;
|
|
24
|
+
export { libreResolver, libreResolver as default, LibreResolverConfig };
|