@justanarthur/payload-plugin-translator 1.3.21 → 3.1.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.
- package/README.md +150 -0
- package/dist/client.css +225 -0
- package/dist/client.d.ts +14 -2
- package/dist/client.js +149 -63
- package/dist/index.d.ts +11 -38
- package/dist/index.js +179 -1071
- package/dist/jobs.d.ts +1 -146
- package/dist/jobs.js +22 -817
- package/dist/resolvers/copy.d.ts +1 -3
- package/dist/resolvers/copy.js +6 -16
- package/dist/resolvers/google.d.ts +1 -7
- package/dist/resolvers/google.js +6 -57
- package/dist/resolvers/libreTranslate.d.ts +1 -11
- package/dist/resolvers/libreTranslate.js +6 -59
- package/dist/resolvers/openAI.d.ts +5 -13
- package/dist/resolvers/openAI.js +6 -128
- package/dist/resolvers/types.d.ts +1 -3
- package/dist/rsc.d.ts +5 -0
- package/dist/rsc.js +483 -0
- package/dist/shared/chunk-15n5q7wd.js +253 -0
- package/dist/shared/chunk-31qgv1zk.js +5 -0
- package/dist/shared/chunk-9d433kmv.js +359 -0
- package/dist/shared/chunk-e6c0qzkt.js +6 -0
- package/dist/shared/chunk-mvqymw6n.js +57 -0
- package/dist/shared/chunk-nxddacte.js +243 -0
- package/dist/shared/chunk-p03jz82h.js +623 -0
- package/dist/shared/chunk-zenq7s47.js +15 -0
- package/dist/shared/chunk-zs19h344.js +55 -0
- package/dist/types.d.ts +6 -36
- package/package.json +23 -11
- package/dist/styles-jt3fm5fh.scss +0 -5
- package/dist/styles-vs6m7h55.scss +0 -76
package/dist/resolvers/copy.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PayloadRequest } from "payload";
|
|
2
2
|
type TranslateResolverArgs = {
|
|
3
|
-
/** Locale to translate from */
|
|
4
3
|
localeFrom: string;
|
|
5
|
-
/** Locale to translate to */
|
|
6
4
|
localeTo: string;
|
|
7
5
|
req: PayloadRequest;
|
|
8
6
|
texts: string[];
|
|
@@ -18,4 +16,4 @@ type TranslateResolver = {
|
|
|
18
16
|
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
19
17
|
};
|
|
20
18
|
declare const copyResolver: () => TranslateResolver;
|
|
21
|
-
export { copyResolver as default
|
|
19
|
+
export { copyResolver, copyResolver as default };
|
package/dist/resolvers/copy.js
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
key: "copy",
|
|
5
|
-
resolve: (args) => {
|
|
6
|
-
const { texts } = args;
|
|
7
|
-
return {
|
|
8
|
-
success: true,
|
|
9
|
-
translatedTexts: texts
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
copyResolver2
|
|
3
|
+
} from "../shared/chunk-zenq7s47.js";
|
|
14
4
|
|
|
15
5
|
// src/exports/resolvers/copy.ts
|
|
16
|
-
var copy_default =
|
|
6
|
+
var copy_default = copyResolver2;
|
|
17
7
|
export {
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
copyResolver2 as copyResolver,
|
|
9
|
+
copy_default as default
|
|
20
10
|
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PayloadRequest } from "payload";
|
|
2
2
|
type TranslateResolverArgs = {
|
|
3
|
-
/** Locale to translate from */
|
|
4
3
|
localeFrom: string;
|
|
5
|
-
/** Locale to translate to */
|
|
6
4
|
localeTo: string;
|
|
7
5
|
req: PayloadRequest;
|
|
8
6
|
texts: string[];
|
|
@@ -19,11 +17,7 @@ type TranslateResolver = {
|
|
|
19
17
|
};
|
|
20
18
|
type GoogleResolverConfig = {
|
|
21
19
|
apiKey: string;
|
|
22
|
-
/**
|
|
23
|
-
* How many texts to include into 1 request
|
|
24
|
-
* @default 100
|
|
25
|
-
*/
|
|
26
20
|
chunkLength?: number;
|
|
27
21
|
};
|
|
28
22
|
declare const googleResolver: ({ apiKey, chunkLength }: GoogleResolverConfig) => TranslateResolver;
|
|
29
|
-
export {
|
|
23
|
+
export { GoogleResolverConfig, googleResolver as default, googleResolver };
|
package/dist/resolvers/google.js
CHANGED
|
@@ -1,61 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
// src/resolvers/google.ts
|
|
7
|
-
var localeToCountryCodeMapper = {
|
|
8
|
-
ua: "uk"
|
|
9
|
-
};
|
|
10
|
-
var mapLocale = (incoming) => (incoming in localeToCountryCodeMapper) ? localeToCountryCodeMapper[incoming] : incoming;
|
|
11
|
-
var googleResolver = ({
|
|
12
|
-
apiKey,
|
|
13
|
-
chunkLength = 100
|
|
14
|
-
}) => {
|
|
15
|
-
return {
|
|
16
|
-
key: "google",
|
|
17
|
-
resolve: async (args) => {
|
|
18
|
-
const { localeFrom, localeTo, req, texts } = args;
|
|
19
|
-
const apiUrl = `https://translation.googleapis.com/language/translate/v2?key=${apiKey}`;
|
|
20
|
-
const responses = await Promise.all(chunkArray(texts, chunkLength).map((q) => fetch(apiUrl, {
|
|
21
|
-
body: JSON.stringify({
|
|
22
|
-
q,
|
|
23
|
-
source: mapLocale(localeFrom),
|
|
24
|
-
target: mapLocale(localeTo)
|
|
25
|
-
}),
|
|
26
|
-
headers: {
|
|
27
|
-
"Content-Type": "application/json"
|
|
28
|
-
},
|
|
29
|
-
method: "POST"
|
|
30
|
-
}).then(async (res) => {
|
|
31
|
-
const data = await res.json();
|
|
32
|
-
if (!res.ok)
|
|
33
|
-
req.payload.logger.info({
|
|
34
|
-
googleResponse: data,
|
|
35
|
-
message: "An error occurred when trying to translate the data using Google API"
|
|
36
|
-
});
|
|
37
|
-
return {
|
|
38
|
-
data,
|
|
39
|
-
success: res.ok
|
|
40
|
-
};
|
|
41
|
-
})));
|
|
42
|
-
if (responses.some((res) => !res.success)) {
|
|
43
|
-
return {
|
|
44
|
-
success: false
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
const translatedTexts = responses.flatMap((chunk) => chunk.data.data.translations).map((translation) => translation.translatedText);
|
|
48
|
-
return {
|
|
49
|
-
success: true,
|
|
50
|
-
translatedTexts
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
googleResolver2
|
|
3
|
+
} from "../shared/chunk-zs19h344.js";
|
|
55
4
|
|
|
56
5
|
// src/exports/resolvers/google.ts
|
|
57
|
-
var google_default =
|
|
6
|
+
var google_default = googleResolver2;
|
|
58
7
|
export {
|
|
59
|
-
|
|
60
|
-
|
|
8
|
+
google_default as default,
|
|
9
|
+
googleResolver2 as googleResolver
|
|
61
10
|
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PayloadRequest } from "payload";
|
|
2
2
|
type TranslateResolverArgs = {
|
|
3
|
-
/** Locale to translate from */
|
|
4
3
|
localeFrom: string;
|
|
5
|
-
/** Locale to translate to */
|
|
6
4
|
localeTo: string;
|
|
7
5
|
req: PayloadRequest;
|
|
8
6
|
texts: string[];
|
|
@@ -19,16 +17,8 @@ type TranslateResolver = {
|
|
|
19
17
|
};
|
|
20
18
|
type LibreResolverConfig = {
|
|
21
19
|
apiKey: string;
|
|
22
|
-
/**
|
|
23
|
-
* How many texts to include into 1 request
|
|
24
|
-
* @default 100
|
|
25
|
-
*/
|
|
26
20
|
chunkLength?: number;
|
|
27
|
-
/**
|
|
28
|
-
* Custom url for the libre translate instance
|
|
29
|
-
* @default "https://libretranslate.com/translate"
|
|
30
|
-
*/
|
|
31
21
|
url?: string;
|
|
32
22
|
};
|
|
33
23
|
declare const libreResolver: ({ apiKey, chunkLength, url }: LibreResolverConfig) => TranslateResolver;
|
|
34
|
-
export {
|
|
24
|
+
export { LibreResolverConfig, libreResolver as default, libreResolver };
|
|
@@ -1,63 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
// src/resolvers/libreTranslate.ts
|
|
7
|
-
var localeToCountryCodeMapper = {
|
|
8
|
-
ua: "uk"
|
|
9
|
-
};
|
|
10
|
-
var mapLocale = (incoming) => (incoming in localeToCountryCodeMapper) ? localeToCountryCodeMapper[incoming] : incoming;
|
|
11
|
-
var libreResolver = ({
|
|
12
|
-
apiKey,
|
|
13
|
-
chunkLength = 100,
|
|
14
|
-
url = "https://libretranslate.com/translate"
|
|
15
|
-
}) => {
|
|
16
|
-
return {
|
|
17
|
-
key: "libre",
|
|
18
|
-
resolve: async (args) => {
|
|
19
|
-
const { localeFrom, localeTo, req, texts } = args;
|
|
20
|
-
const apiUrl = url;
|
|
21
|
-
const responses = await Promise.all(chunkArray(texts, chunkLength).map((q) => fetch(apiUrl, {
|
|
22
|
-
body: JSON.stringify({
|
|
23
|
-
api_key: apiKey,
|
|
24
|
-
q,
|
|
25
|
-
source: mapLocale(localeFrom),
|
|
26
|
-
target: mapLocale(localeTo)
|
|
27
|
-
}),
|
|
28
|
-
headers: {
|
|
29
|
-
"Content-Type": "application/json"
|
|
30
|
-
},
|
|
31
|
-
method: "POST"
|
|
32
|
-
}).then(async (res) => {
|
|
33
|
-
const data = await res.json();
|
|
34
|
-
if (!res.ok)
|
|
35
|
-
req.payload.logger.info({
|
|
36
|
-
libreResponse: data,
|
|
37
|
-
message: "An error occurred when trying to translate the data using LibreTranslate API"
|
|
38
|
-
});
|
|
39
|
-
return {
|
|
40
|
-
data,
|
|
41
|
-
success: res.ok
|
|
42
|
-
};
|
|
43
|
-
})));
|
|
44
|
-
if (responses.some((res) => !res.success)) {
|
|
45
|
-
return {
|
|
46
|
-
success: false
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
const translatedTexts = responses.flatMap((chunk) => chunk.data.translatedText);
|
|
50
|
-
return {
|
|
51
|
-
success: true,
|
|
52
|
-
translatedTexts
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
libreResolver2
|
|
3
|
+
} from "../shared/chunk-mvqymw6n.js";
|
|
57
4
|
|
|
58
5
|
// src/exports/resolvers/libreTranslate.ts
|
|
59
|
-
var libreTranslate_default =
|
|
6
|
+
var libreTranslate_default = libreResolver2;
|
|
60
7
|
export {
|
|
61
|
-
|
|
62
|
-
|
|
8
|
+
libreTranslate_default as default,
|
|
9
|
+
libreResolver2 as libreResolver
|
|
63
10
|
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PayloadRequest } from "payload";
|
|
2
2
|
type TranslateResolverArgs = {
|
|
3
|
-
/** Locale to translate from */
|
|
4
3
|
localeFrom: string;
|
|
5
|
-
/** Locale to translate to */
|
|
6
4
|
localeTo: string;
|
|
7
5
|
req: PayloadRequest;
|
|
8
6
|
texts: string[];
|
|
@@ -17,25 +15,19 @@ type TranslateResolver = {
|
|
|
17
15
|
key: string;
|
|
18
16
|
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
19
17
|
};
|
|
20
|
-
type OpenAIMessageExchange = Record<string | number, string>;
|
|
21
18
|
type OpenAIPrompt = (args: {
|
|
22
19
|
localeFrom: string;
|
|
23
20
|
localeTo: string;
|
|
24
|
-
texts:
|
|
21
|
+
texts: string[];
|
|
25
22
|
}) => string;
|
|
26
23
|
type OpenAIResolverConfig = {
|
|
27
24
|
apiKey: string;
|
|
28
25
|
baseUrl?: string;
|
|
29
|
-
/**
|
|
30
|
-
* How many texts to include into 1 request
|
|
31
|
-
* @default 100
|
|
32
|
-
*/
|
|
33
26
|
chunkLength?: number;
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
*/
|
|
27
|
+
/** chunks sent at the same time */
|
|
28
|
+
concurrency?: number;
|
|
37
29
|
model?: string;
|
|
38
30
|
prompt?: OpenAIPrompt;
|
|
39
31
|
};
|
|
40
|
-
declare const openAIResolver: ({ apiKey, baseUrl, chunkLength, model, prompt }: OpenAIResolverConfig) => TranslateResolver;
|
|
41
|
-
export {
|
|
32
|
+
declare const openAIResolver: ({ apiKey, baseUrl, chunkLength, concurrency, model, prompt }: OpenAIResolverConfig) => TranslateResolver;
|
|
33
|
+
export { OpenAIPrompt, OpenAIResolverConfig, openAIResolver as default, openAIResolver };
|
package/dist/resolvers/openAI.js
CHANGED
|
@@ -1,132 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
// src/resolvers/openAI.ts
|
|
7
|
-
var defaultPrompt = ({ localeFrom, localeTo, texts }) => {
|
|
8
|
-
return `You are a machine translation service. Your task is to translate values in a strict JSON of key value pairs from ${localeFrom} to ${localeTo}.
|
|
9
|
-
|
|
10
|
-
**INSTRUCTIONS:**
|
|
11
|
-
1. **Translate each value**.
|
|
12
|
-
2. The output **must valid JSON**.
|
|
13
|
-
3. The output array **must have the exact same number of elements** as the input.
|
|
14
|
-
4. Preserve the structure of the JSON array.
|
|
15
|
-
5. Preserve JSON keys without translation.
|
|
16
|
-
6. The **order of the elements must not change**.
|
|
17
|
-
7. **Do not include any text, explanations, or remarks outside of the JSON array.**
|
|
18
|
-
8. **Preserve any special characters, HTML tags, or formatting** present in the original strings.
|
|
19
|
-
9. **Preserve urls, hrefs, and email addresses** without translation.
|
|
20
|
-
10. RETURN ONLY THE RAW JSON, DO NOT RESPOND WITH ANYTHING ELSE, AND NO FORMATTING.
|
|
21
|
-
|
|
22
|
-
**INPUT JSON TO TRANSLATE:**
|
|
23
|
-
${JSON.stringify(texts)}`;
|
|
24
|
-
};
|
|
25
|
-
var openAIResolver = ({
|
|
26
|
-
apiKey,
|
|
27
|
-
baseUrl,
|
|
28
|
-
chunkLength = 100,
|
|
29
|
-
model = "gpt-3.5-turbo",
|
|
30
|
-
prompt = defaultPrompt
|
|
31
|
-
}) => {
|
|
32
|
-
return {
|
|
33
|
-
key: "openai",
|
|
34
|
-
resolve: async ({ localeFrom, localeTo, req, texts }) => {
|
|
35
|
-
const apiUrl = `${baseUrl || "https://api.openai.com"}/v1/chat/completions`;
|
|
36
|
-
try {
|
|
37
|
-
const response = await Promise.all(chunkArray(texts, chunkLength).map((texts2) => {
|
|
38
|
-
const structuredTexts = texts2.reduce((acc, curr, index) => {
|
|
39
|
-
acc[index + 1] = curr;
|
|
40
|
-
return acc;
|
|
41
|
-
}, {});
|
|
42
|
-
return fetch(apiUrl, {
|
|
43
|
-
body: JSON.stringify({
|
|
44
|
-
messages: [
|
|
45
|
-
{
|
|
46
|
-
content: prompt({ localeFrom, localeTo, texts: structuredTexts }),
|
|
47
|
-
role: "user"
|
|
48
|
-
}
|
|
49
|
-
],
|
|
50
|
-
model
|
|
51
|
-
}),
|
|
52
|
-
headers: {
|
|
53
|
-
Authorization: `Bearer ${apiKey}`,
|
|
54
|
-
"Content-Type": "application/json"
|
|
55
|
-
},
|
|
56
|
-
method: "post"
|
|
57
|
-
}).then(async (res) => {
|
|
58
|
-
const data = await res.json();
|
|
59
|
-
if (!res.ok)
|
|
60
|
-
req.payload.logger.info({
|
|
61
|
-
message: "An error occurred when trying to translate the data using OpenAI API",
|
|
62
|
-
openAIresponse: data
|
|
63
|
-
});
|
|
64
|
-
return {
|
|
65
|
-
data,
|
|
66
|
-
success: res.ok
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
}));
|
|
70
|
-
const translated = [];
|
|
71
|
-
for (const { data, success } of response) {
|
|
72
|
-
if (!success)
|
|
73
|
-
return {
|
|
74
|
-
success: false
|
|
75
|
-
};
|
|
76
|
-
const content = data?.choices?.[0]?.message?.content;
|
|
77
|
-
if (!content) {
|
|
78
|
-
req.payload.logger.error("An error occurred when trying to translate the data using OpenAI API - missing content in the response");
|
|
79
|
-
return {
|
|
80
|
-
success: false
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
const translatedStructuredTexts = JSON.parse(content);
|
|
84
|
-
const translatedChunk = Object.values(translatedStructuredTexts);
|
|
85
|
-
if (!Array.isArray(translatedChunk)) {
|
|
86
|
-
req.payload.logger.error({
|
|
87
|
-
data: translatedChunk,
|
|
88
|
-
fullContent: content,
|
|
89
|
-
message: "An error occurred when trying to translate the data using OpenAI API - parsed content is not an array"
|
|
90
|
-
});
|
|
91
|
-
return {
|
|
92
|
-
success: false
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
for (const text of translatedChunk) {
|
|
96
|
-
if (text && typeof text !== "string") {
|
|
97
|
-
req.payload.logger.error({
|
|
98
|
-
chunkData: translatedChunk,
|
|
99
|
-
data: text,
|
|
100
|
-
fullContent: content,
|
|
101
|
-
message: "An error occurred when trying to translate the data using OpenAI API - parsed content is not a string"
|
|
102
|
-
});
|
|
103
|
-
return {
|
|
104
|
-
success: false
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
translated.push(text);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
success: true,
|
|
112
|
-
translatedTexts: translated
|
|
113
|
-
};
|
|
114
|
-
} catch (e) {
|
|
115
|
-
if (e instanceof Error) {
|
|
116
|
-
req.payload.logger.info({
|
|
117
|
-
message: "An error occurred when trying to translate the data using OpenAI API",
|
|
118
|
-
originalErr: e.message
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
return { success: false };
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
openAIResolver2
|
|
3
|
+
} from "../shared/chunk-nxddacte.js";
|
|
126
4
|
|
|
127
5
|
// src/exports/resolvers/openAI.ts
|
|
128
|
-
var openAI_default =
|
|
6
|
+
var openAI_default = openAIResolver2;
|
|
129
7
|
export {
|
|
130
|
-
|
|
131
|
-
|
|
8
|
+
openAI_default as default,
|
|
9
|
+
openAIResolver2 as openAIResolver
|
|
132
10
|
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PayloadRequest } from "payload";
|
|
2
2
|
type TranslateResolverArgs = {
|
|
3
|
-
/** Locale to translate from */
|
|
4
3
|
localeFrom: string;
|
|
5
|
-
/** Locale to translate to */
|
|
6
4
|
localeTo: string;
|
|
7
5
|
req: PayloadRequest;
|
|
8
6
|
texts: string[];
|
|
@@ -17,4 +15,4 @@ type TranslateResolver = {
|
|
|
17
15
|
key: string;
|
|
18
16
|
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
19
17
|
};
|
|
20
|
-
export {
|
|
18
|
+
export { TranslateResolver, TranslateResolverArgs, TranslateResolverResponse };
|
package/dist/rsc.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AdminViewServerProps } from "payload";
|
|
2
|
+
import { JSX as JSX_1kxb } from "react";
|
|
3
|
+
type Element_12xgc = JSX_1kxb["Element"];
|
|
4
|
+
declare const TranslationsView: ({ initPageResult, params, searchParams }: AdminViewServerProps) => Promise<Element_12xgc>;
|
|
5
|
+
export { TranslationsView, TranslationsView as default };
|