@payload-enchants/translator 0.0.1-alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -0
  3. package/dist/client/api/index.d.ts +8 -0
  4. package/dist/client/api/index.d.ts.map +1 -0
  5. package/dist/client/api/index.js +28 -0
  6. package/dist/client/api/index.js.map +1 -0
  7. package/dist/client/components/CustomSaveButton/CustomSaveButton.d.ts +4 -0
  8. package/dist/client/components/CustomSaveButton/CustomSaveButton.d.ts.map +1 -0
  9. package/dist/client/components/CustomSaveButton/CustomSaveButton.js +22 -0
  10. package/dist/client/components/CustomSaveButton/CustomSaveButton.js.map +1 -0
  11. package/dist/client/components/CustomSaveButton/index.d.ts +2 -0
  12. package/dist/client/components/CustomSaveButton/index.d.ts.map +1 -0
  13. package/dist/client/components/CustomSaveButton/index.js +3 -0
  14. package/dist/client/components/CustomSaveButton/index.js.map +1 -0
  15. package/dist/client/components/CustomSaveButton/styles.scss +5 -0
  16. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +6 -0
  17. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +1 -0
  18. package/dist/client/components/LocaleLabel/LocaleLabel.js +19 -0
  19. package/dist/client/components/LocaleLabel/LocaleLabel.js.map +1 -0
  20. package/dist/client/components/LocaleLabel/index.d.ts +2 -0
  21. package/dist/client/components/LocaleLabel/index.d.ts.map +1 -0
  22. package/dist/client/components/LocaleLabel/index.js +3 -0
  23. package/dist/client/components/LocaleLabel/index.js.map +1 -0
  24. package/dist/client/components/ResolverButton/ResolverButton.d.ts +6 -0
  25. package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +1 -0
  26. package/dist/client/components/ResolverButton/ResolverButton.js +16 -0
  27. package/dist/client/components/ResolverButton/ResolverButton.js.map +1 -0
  28. package/dist/client/components/ResolverButton/index.d.ts +2 -0
  29. package/dist/client/components/ResolverButton/index.d.ts.map +1 -0
  30. package/dist/client/components/ResolverButton/index.js +3 -0
  31. package/dist/client/components/ResolverButton/index.js.map +1 -0
  32. package/dist/client/components/TranslatorModal/Content.d.ts +3 -0
  33. package/dist/client/components/TranslatorModal/Content.d.ts.map +1 -0
  34. package/dist/client/components/TranslatorModal/Content.js +42 -0
  35. package/dist/client/components/TranslatorModal/Content.js.map +1 -0
  36. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +4 -0
  37. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +1 -0
  38. package/dist/client/components/TranslatorModal/TranslatorModal.js +21 -0
  39. package/dist/client/components/TranslatorModal/TranslatorModal.js.map +1 -0
  40. package/dist/client/components/TranslatorModal/index.d.ts +2 -0
  41. package/dist/client/components/TranslatorModal/index.d.ts.map +1 -0
  42. package/dist/client/components/TranslatorModal/index.js +3 -0
  43. package/dist/client/components/TranslatorModal/index.js.map +1 -0
  44. package/dist/client/components/TranslatorModal/styles.scss +76 -0
  45. package/dist/client/providers/Translator/TranslatorProvider.d.ts +5 -0
  46. package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +1 -0
  47. package/dist/client/providers/Translator/TranslatorProvider.js +100 -0
  48. package/dist/client/providers/Translator/TranslatorProvider.js.map +1 -0
  49. package/dist/client/providers/Translator/context.d.ts +22 -0
  50. package/dist/client/providers/Translator/context.d.ts.map +1 -0
  51. package/dist/client/providers/Translator/context.js +9 -0
  52. package/dist/client/providers/Translator/context.js.map +1 -0
  53. package/dist/i18n-translations.d.ts +25 -0
  54. package/dist/i18n-translations.d.ts.map +1 -0
  55. package/dist/i18n-translations.js +26 -0
  56. package/dist/i18n-translations.js.map +1 -0
  57. package/dist/index.d.ts +6 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +79 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/resolvers/copy.d.ts +3 -0
  62. package/dist/resolvers/copy.d.ts.map +1 -0
  63. package/dist/resolvers/copy.js +14 -0
  64. package/dist/resolvers/copy.js.map +1 -0
  65. package/dist/resolvers/google.d.ts +11 -0
  66. package/dist/resolvers/google.d.ts.map +1 -0
  67. package/dist/resolvers/google.js +47 -0
  68. package/dist/resolvers/google.js.map +1 -0
  69. package/dist/resolvers/openAI.d.ts +21 -0
  70. package/dist/resolvers/openAI.d.ts.map +1 -0
  71. package/dist/resolvers/openAI.js +97 -0
  72. package/dist/resolvers/openAI.js.map +1 -0
  73. package/dist/resolvers/types.d.ts +20 -0
  74. package/dist/resolvers/types.d.ts.map +1 -0
  75. package/dist/resolvers/types.js +3 -0
  76. package/dist/resolvers/types.js.map +1 -0
  77. package/dist/translate/endpoint.d.ts +3 -0
  78. package/dist/translate/endpoint.d.ts.map +1 -0
  79. package/dist/translate/endpoint.js +22 -0
  80. package/dist/translate/endpoint.js.map +1 -0
  81. package/dist/translate/findEntityWithConfig.d.ts +15 -0
  82. package/dist/translate/findEntityWithConfig.d.ts.map +1 -0
  83. package/dist/translate/findEntityWithConfig.js +32 -0
  84. package/dist/translate/findEntityWithConfig.js.map +1 -0
  85. package/dist/translate/operation.d.ts +9 -0
  86. package/dist/translate/operation.d.ts.map +1 -0
  87. package/dist/translate/operation.js +74 -0
  88. package/dist/translate/operation.js.map +1 -0
  89. package/dist/translate/traverseFields.d.ts +13 -0
  90. package/dist/translate/traverseFields.d.ts.map +1 -0
  91. package/dist/translate/traverseFields.js +160 -0
  92. package/dist/translate/traverseFields.js.map +1 -0
  93. package/dist/translate/traverseRichText.d.ts +6 -0
  94. package/dist/translate/traverseRichText.d.ts.map +1 -0
  95. package/dist/translate/traverseRichText.js +17 -0
  96. package/dist/translate/traverseRichText.js.map +1 -0
  97. package/dist/translate/types.d.ts +25 -0
  98. package/dist/translate/types.d.ts.map +1 -0
  99. package/dist/translate/types.js +3 -0
  100. package/dist/translate/types.js.map +1 -0
  101. package/dist/translate/updateEntity.d.ts +14 -0
  102. package/dist/translate/updateEntity.d.ts.map +1 -0
  103. package/dist/translate/updateEntity.js +26 -0
  104. package/dist/translate/updateEntity.js.map +1 -0
  105. package/dist/types.d.ts +21 -0
  106. package/dist/types.d.ts.map +1 -0
  107. package/dist/types.js +3 -0
  108. package/dist/types.js.map +1 -0
  109. package/dist/utils/chunkArray.d.ts +2 -0
  110. package/dist/utils/chunkArray.d.ts.map +1 -0
  111. package/dist/utils/chunkArray.js +7 -0
  112. package/dist/utils/chunkArray.js.map +1 -0
  113. package/dist/utils/isEmpty.d.ts +2 -0
  114. package/dist/utils/isEmpty.d.ts.map +1 -0
  115. package/dist/utils/isEmpty.js +8 -0
  116. package/dist/utils/isEmpty.js.map +1 -0
  117. package/package.json +75 -0
@@ -0,0 +1,5 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare const TranslatorProvider: ({ children }: {
3
+ children: ReactNode;
4
+ }) => import("react").JSX.Element;
5
+ //# sourceMappingURL=TranslatorProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TranslatorProvider.d.ts","sourceRoot":"","sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAS1D,eAAO,MAAM,kBAAkB,iBAAkB;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,gCA8HvE,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { toast } from '@payloadcms/ui/elements';
2
+ import { useModal } from '@payloadcms/ui/elements/Modal';
3
+ import { useAllFormFields } from '@payloadcms/ui/forms/Form';
4
+ import { useConfig } from '@payloadcms/ui/providers/Config';
5
+ import { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo';
6
+ import { useLocale } from '@payloadcms/ui/providers/Locale';
7
+ import { useTranslation } from '@payloadcms/ui/providers/Translation';
8
+ import { getFormState } from '@payloadcms/ui/utilities/getFormState';
9
+ import { reduceFieldsToValues } from '@payloadcms/ui/utilities/reduceFieldsToValues';
10
+ import { useMemo, useState } from 'react';
11
+ import { createClient } from '../../api';
12
+ import { TranslatorContext } from './context';
13
+ const modalSlug = 'translator-modal';
14
+ export const TranslatorProvider = ({ children })=>{
15
+ const [resolver, setResolver] = useState(null);
16
+ const [data, dispatch] = useAllFormFields();
17
+ const { collectionSlug, globalSlug, id } = useDocumentInfo();
18
+ const modal = useModal();
19
+ const { t } = useTranslation();
20
+ const resolverT = (key)=>{
21
+ if (!resolver) return '';
22
+ return t(`plugin-translator:resolver_${resolver}_${key}`);
23
+ };
24
+ const locale = useLocale();
25
+ const { admin: { custom }, localization, routes: { api }, serverURL } = useConfig();
26
+ const apiClient = createClient({
27
+ api,
28
+ serverURL
29
+ });
30
+ const resolverConfig = useMemo(()=>{
31
+ if (!resolver) return null;
32
+ const resolvers = custom?.translator?.resolvers || undefined;
33
+ if (!resolvers) return null;
34
+ const resolverConfig = resolvers.find((each)=>each.key === resolver);
35
+ return resolverConfig ?? null;
36
+ }, [
37
+ custom,
38
+ resolver
39
+ ]);
40
+ if (!localization) throw new Error('Localization config is not provided and PluginTranslator is used');
41
+ const localesOptions = localization.locales.filter((each)=>each.code !== locale.code);
42
+ const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState(()=>{
43
+ const defaultFromOptions = localesOptions.find((each)=>localization.defaultLocale === each.code);
44
+ if (defaultFromOptions) return defaultFromOptions.code;
45
+ return localesOptions[0].code;
46
+ });
47
+ const closeTranslator = ()=>modal.closeModal(modalSlug);
48
+ const submit = async ({ emptyOnly })=>{
49
+ if (!resolver) return;
50
+ const args = {
51
+ collectionSlug,
52
+ data: reduceFieldsToValues(data, true),
53
+ emptyOnly,
54
+ globalSlug,
55
+ id: id === null ? undefined : id,
56
+ locale: locale.code,
57
+ localeFrom: localeToTranslateFrom,
58
+ resolver
59
+ };
60
+ const result = await apiClient.translate(args);
61
+ if (!result.success) {
62
+ toast.error(resolverT('errorMessage'));
63
+ return;
64
+ }
65
+ dispatch({
66
+ state: await getFormState({
67
+ apiRoute: api,
68
+ body: {
69
+ collectionSlug,
70
+ data: result.translatedData,
71
+ globalSlug,
72
+ locale: locale.code,
73
+ schemaPath: collectionSlug || globalSlug || ''
74
+ },
75
+ serverURL
76
+ }),
77
+ type: 'REPLACE_STATE'
78
+ });
79
+ if (resolverConfig) toast.success(resolverT('successMessage'));
80
+ closeTranslator();
81
+ };
82
+ return /*#__PURE__*/ React.createElement(TranslatorContext.Provider, {
83
+ value: {
84
+ closeTranslator,
85
+ localeToTranslateFrom,
86
+ localesOptions,
87
+ modalSlug,
88
+ openTranslator: ({ resolverKey })=>{
89
+ setResolver(resolverKey);
90
+ modal.openModal(modalSlug);
91
+ },
92
+ resolver: resolverConfig,
93
+ resolverT,
94
+ setLocaleToTranslateFrom,
95
+ submit
96
+ }
97
+ }, children);
98
+ };
99
+
100
+ //# sourceMappingURL=TranslatorProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"sourcesContent":["import { toast } from '@payloadcms/ui/elements';\r\nimport { useModal } from '@payloadcms/ui/elements/Modal';\r\nimport { useAllFormFields } from '@payloadcms/ui/forms/Form';\r\nimport { useConfig } from '@payloadcms/ui/providers/Config';\r\nimport { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo';\r\nimport { useLocale } from '@payloadcms/ui/providers/Locale';\r\nimport { useTranslation } from '@payloadcms/ui/providers/Translation';\r\nimport { getFormState } from '@payloadcms/ui/utilities/getFormState';\r\nimport { reduceFieldsToValues } from '@payloadcms/ui/utilities/reduceFieldsToValues';\r\nimport { type ReactNode, useMemo, useState } from 'react';\r\n\r\nimport type { TranslateResolver } from '../../../resolvers/types';\r\nimport type { TranslateArgs } from '../../../translate/types';\r\nimport { createClient } from '../../api';\r\nimport { TranslatorContext } from './context';\r\n\r\nconst modalSlug = 'translator-modal';\r\n\r\nexport const TranslatorProvider = ({ children }: { children: ReactNode }) => {\r\n const [resolver, setResolver] = useState<null | string>(null);\r\n\r\n const [data, dispatch] = useAllFormFields();\r\n\r\n const { collectionSlug, globalSlug, id } = useDocumentInfo();\r\n\r\n const modal = useModal();\r\n\r\n const { t } = useTranslation();\r\n\r\n const resolverT = (\r\n key:\r\n | 'buttonLabel'\r\n | 'errorMessage'\r\n | 'modalTitle'\r\n | 'submitButtonLabelEmpty'\r\n | 'submitButtonLabelFull'\r\n | 'successMessage',\r\n ) => {\r\n if (!resolver) return '';\r\n\r\n return t(`plugin-translator:resolver_${resolver}_${key}`);\r\n };\r\n\r\n const locale = useLocale();\r\n\r\n const {\r\n admin: { custom },\r\n localization,\r\n routes: { api },\r\n serverURL,\r\n } = useConfig();\r\n\r\n const apiClient = createClient({ api, serverURL });\r\n\r\n const resolverConfig = useMemo(() => {\r\n if (!resolver) return null;\r\n\r\n const resolvers = (custom?.translator?.resolvers as TranslateResolver[]) || undefined;\r\n\r\n if (!resolvers) return null;\r\n\r\n const resolverConfig = resolvers.find((each) => each.key === resolver);\r\n\r\n return resolverConfig ?? null;\r\n }, [custom, resolver]);\r\n\r\n if (!localization)\r\n throw new Error('Localization config is not provided and PluginTranslator is used');\r\n\r\n const localesOptions = localization.locales.filter((each) => each.code !== locale.code);\r\n\r\n const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState(() => {\r\n const defaultFromOptions = localesOptions.find(\r\n (each) => localization.defaultLocale === each.code,\r\n );\r\n\r\n if (defaultFromOptions) return defaultFromOptions.code;\r\n\r\n return localesOptions[0].code;\r\n });\r\n\r\n const closeTranslator = () => modal.closeModal(modalSlug);\r\n\r\n const submit = async ({ emptyOnly }: { emptyOnly: boolean }) => {\r\n if (!resolver) return;\r\n\r\n const args: TranslateArgs = {\r\n collectionSlug,\r\n data: reduceFieldsToValues(data, true),\r\n emptyOnly,\r\n globalSlug,\r\n id: id === null ? undefined : id,\r\n locale: locale.code,\r\n localeFrom: localeToTranslateFrom,\r\n resolver,\r\n };\r\n\r\n const result = await apiClient.translate(args);\r\n\r\n if (!result.success) {\r\n toast.error(resolverT('errorMessage'));\r\n\r\n return;\r\n }\r\n\r\n dispatch({\r\n state: await getFormState({\r\n apiRoute: api,\r\n body: {\r\n collectionSlug,\r\n data: result.translatedData,\r\n globalSlug,\r\n locale: locale.code,\r\n schemaPath: collectionSlug || globalSlug || '',\r\n },\r\n serverURL,\r\n }),\r\n type: 'REPLACE_STATE',\r\n });\r\n\r\n if (resolverConfig) toast.success(resolverT('successMessage'));\r\n closeTranslator();\r\n };\r\n\r\n return (\r\n <TranslatorContext.Provider\r\n value={{\r\n closeTranslator,\r\n localeToTranslateFrom,\r\n localesOptions,\r\n modalSlug,\r\n openTranslator: ({ resolverKey }) => {\r\n setResolver(resolverKey);\r\n modal.openModal(modalSlug);\r\n },\r\n resolver: resolverConfig,\r\n resolverT,\r\n setLocaleToTranslateFrom,\r\n submit,\r\n }}\r\n >\r\n {children}\r\n </TranslatorContext.Provider>\r\n );\r\n};\r\n"],"names":["toast","useModal","useAllFormFields","useConfig","useDocumentInfo","useLocale","useTranslation","getFormState","reduceFieldsToValues","useMemo","useState","createClient","TranslatorContext","modalSlug","TranslatorProvider","children","resolver","setResolver","data","dispatch","collectionSlug","globalSlug","id","modal","t","resolverT","key","locale","admin","custom","localization","routes","api","serverURL","apiClient","resolverConfig","resolvers","translator","undefined","find","each","Error","localesOptions","locales","filter","code","localeToTranslateFrom","setLocaleToTranslateFrom","defaultFromOptions","defaultLocale","closeTranslator","closeModal","submit","emptyOnly","args","localeFrom","result","translate","success","error","state","apiRoute","body","translatedData","schemaPath","type","Provider","value","openTranslator","resolverKey","openModal"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /// <reference types="react" resolution-mode="require"/>
2
+ import type { Locale } from 'payload/config';
3
+ import type { TranslateResolver } from '../../../resolvers/types';
4
+ type TranslatorContextData = {
5
+ closeTranslator: () => void;
6
+ localeToTranslateFrom: string;
7
+ localesOptions: Locale[];
8
+ modalSlug: string;
9
+ openTranslator: (args: {
10
+ resolverKey: string;
11
+ }) => void;
12
+ resolver: TranslateResolver | null;
13
+ resolverT: (key: 'buttonLabel' | 'errorMessage' | 'modalTitle' | 'submitButtonLabelEmpty' | 'submitButtonLabelFull' | 'successMessage') => string;
14
+ setLocaleToTranslateFrom: (code: string) => void;
15
+ submit: (args: {
16
+ emptyOnly: boolean;
17
+ }) => Promise<void>;
18
+ };
19
+ export declare const TranslatorContext: import("react").Context<TranslatorContextData | null>;
20
+ export declare const useTranslator: () => TranslatorContextData;
21
+ export {};
22
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/client/providers/Translator/context.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,KAAK,qBAAqB,GAAG;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxD,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,CACT,GAAG,EACC,aAAa,GACb,cAAc,GACd,YAAY,GACZ,wBAAwB,GACxB,uBAAuB,GACvB,gBAAgB,KACjB,MAAM,CAAC;IACZ,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,MAAM,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAAoD,CAAC;AAEnF,eAAO,MAAM,aAAa,6BAMzB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const TranslatorContext = createContext(null);
3
+ export const useTranslator = ()=>{
4
+ const context = useContext(TranslatorContext);
5
+ if (context === null) throw new Error('useTranslator must be used within TranslatorProvider');
6
+ return context;
7
+ };
8
+
9
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/client/providers/Translator/context.ts"],"sourcesContent":["import type { Locale } from 'payload/config';\r\nimport { createContext, useContext } from 'react';\r\n\r\nimport type { TranslateResolver } from '../../../resolvers/types';\r\n\r\ntype TranslatorContextData = {\r\n closeTranslator: () => void;\r\n localeToTranslateFrom: string;\r\n localesOptions: Locale[];\r\n modalSlug: string;\r\n openTranslator: (args: { resolverKey: string }) => void;\r\n resolver: TranslateResolver | null;\r\n resolverT: (\r\n key:\r\n | 'buttonLabel'\r\n | 'errorMessage'\r\n | 'modalTitle'\r\n | 'submitButtonLabelEmpty'\r\n | 'submitButtonLabelFull'\r\n | 'successMessage',\r\n ) => string;\r\n setLocaleToTranslateFrom: (code: string) => void;\r\n submit: (args: { emptyOnly: boolean }) => Promise<void>;\r\n};\r\n\r\nexport const TranslatorContext = createContext<TranslatorContextData | null>(null);\r\n\r\nexport const useTranslator = () => {\r\n const context = useContext(TranslatorContext);\r\n\r\n if (context === null) throw new Error('useTranslator must be used within TranslatorProvider');\r\n\r\n return context;\r\n};\r\n"],"names":["createContext","useContext","TranslatorContext","useTranslator","context","Error"],"rangeMappings":";;;;;;","mappings":"AACA,SAASA,aAAa,EAAEC,UAAU,QAAQ,QAAQ;AAwBlD,OAAO,MAAMC,oBAAoBF,cAA4C,MAAM;AAEnF,OAAO,MAAMG,gBAAgB;IAC3B,MAAMC,UAAUH,WAAWC;IAE3B,IAAIE,YAAY,MAAM,MAAM,IAAIC,MAAM;IAEtC,OAAOD;AACT,EAAE"}
@@ -0,0 +1,25 @@
1
+ export declare const translations: {
2
+ en: {
3
+ 'plugin-translator': {
4
+ resolver_copy_buttonLabel: string;
5
+ resolver_copy_errorMessage: string;
6
+ resolver_copy_modalTitle: string;
7
+ resolver_copy_submitButtonLabelEmpty: string;
8
+ resolver_copy_submitButtonLabelFull: string;
9
+ resolver_copy_successMessage: string;
10
+ resolver_google_buttonLabel: string;
11
+ resolver_google_errorMessage: string;
12
+ resolver_google_modalTitle: string;
13
+ resolver_google_submitButtonLabelEmpty: string;
14
+ resolver_google_submitButtonLabelFull: string;
15
+ resolver_google_successMessage: string;
16
+ resolver_openai_buttonLabel: string;
17
+ resolver_openai_errorMessage: string;
18
+ resolver_openai_modalTitle: string;
19
+ resolver_openai_submitButtonLabelEmpty: string;
20
+ resolver_openai_submitButtonLabelFull: string;
21
+ resolver_openai_successMessage: string;
22
+ };
23
+ };
24
+ };
25
+ //# sourceMappingURL=i18n-translations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-translations.d.ts","sourceRoot":"","sources":["../src/i18n-translations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;CAyBxB,CAAC"}
@@ -0,0 +1,26 @@
1
+ export const translations = {
2
+ en: {
3
+ 'plugin-translator': {
4
+ resolver_copy_buttonLabel: 'Copy from other locale',
5
+ resolver_copy_errorMessage: 'An error occurred when trying to translate the data',
6
+ resolver_copy_modalTitle: 'Choose the locale to copy from',
7
+ resolver_copy_submitButtonLabelEmpty: 'Copy only empty fields',
8
+ resolver_copy_submitButtonLabelFull: 'Copy all',
9
+ resolver_copy_successMessage: 'Successfully copied. Press "Save" to apply the changes.',
10
+ resolver_google_buttonLabel: 'Google Translate',
11
+ resolver_google_errorMessage: 'An error occurred when trying to translate the data',
12
+ resolver_google_modalTitle: 'Choose the locale to translate from',
13
+ resolver_google_submitButtonLabelEmpty: 'Translate only empty fields',
14
+ resolver_google_submitButtonLabelFull: 'Translate all',
15
+ resolver_google_successMessage: 'Successfully translated. Press "Save" to apply the changes.',
16
+ resolver_openai_buttonLabel: 'AI Translate',
17
+ resolver_openai_errorMessage: 'An error occurred when trying to translate the data',
18
+ resolver_openai_modalTitle: 'Choose the locale to translate from',
19
+ resolver_openai_submitButtonLabelEmpty: 'Translate only empty fields',
20
+ resolver_openai_submitButtonLabelFull: 'Translate all',
21
+ resolver_openai_successMessage: 'Successfully translated. Press "Save" to apply the changes.'
22
+ }
23
+ }
24
+ };
25
+
26
+ //# sourceMappingURL=i18n-translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n-translations.ts"],"sourcesContent":["export const translations = {\r\n en: {\r\n 'plugin-translator': {\r\n resolver_copy_buttonLabel: 'Copy from other locale',\r\n resolver_copy_errorMessage: 'An error occurred when trying to translate the data',\r\n resolver_copy_modalTitle: 'Choose the locale to copy from',\r\n resolver_copy_submitButtonLabelEmpty: 'Copy only empty fields',\r\n resolver_copy_submitButtonLabelFull: 'Copy all',\r\n resolver_copy_successMessage: 'Successfully copied. Press \"Save\" to apply the changes.',\r\n\r\n resolver_google_buttonLabel: 'Google Translate',\r\n resolver_google_errorMessage: 'An error occurred when trying to translate the data',\r\n resolver_google_modalTitle: 'Choose the locale to translate from',\r\n resolver_google_submitButtonLabelEmpty: 'Translate only empty fields',\r\n resolver_google_submitButtonLabelFull: 'Translate all',\r\n resolver_google_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\r\n\r\n resolver_openai_buttonLabel: 'AI Translate',\r\n resolver_openai_errorMessage: 'An error occurred when trying to translate the data',\r\n resolver_openai_modalTitle: 'Choose the locale to translate from',\r\n resolver_openai_submitButtonLabelEmpty: 'Translate only empty fields',\r\n resolver_openai_submitButtonLabelFull: 'Translate all',\r\n resolver_openai_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\r\n },\r\n },\r\n};\r\n"],"names":["translations","en","resolver_copy_buttonLabel","resolver_copy_errorMessage","resolver_copy_modalTitle","resolver_copy_submitButtonLabelEmpty","resolver_copy_submitButtonLabelFull","resolver_copy_successMessage","resolver_google_buttonLabel","resolver_google_errorMessage","resolver_google_modalTitle","resolver_google_submitButtonLabelEmpty","resolver_google_submitButtonLabelFull","resolver_google_successMessage","resolver_openai_buttonLabel","resolver_openai_errorMessage","resolver_openai_modalTitle","resolver_openai_submitButtonLabelEmpty","resolver_openai_submitButtonLabelFull","resolver_openai_successMessage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAO,MAAMA,eAAe;IAC1BC,IAAI;QACF,qBAAqB;YACnBC,2BAA2B;YAC3BC,4BAA4B;YAC5BC,0BAA0B;YAC1BC,sCAAsC;YACtCC,qCAAqC;YACrCC,8BAA8B;YAE9BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;YAEhCC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;QAClC;IACF;AACF,EAAE"}
@@ -0,0 +1,6 @@
1
+ import type { Plugin } from 'payload/config';
2
+ import { translateOperation } from './translate/operation';
3
+ import type { TranslatorConfig } from './types';
4
+ export { translateOperation };
5
+ export declare const translator: (pluginConfig: TranslatorConfig) => Plugin;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,eAAO,MAAM,UAAU,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,MA0E5D,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,79 @@
1
+ /* eslint-disable perfectionist/sort-named-exports */ import { deepMerge } from 'payload/utilities';
2
+ import { CustomSaveButton } from './client/components/CustomSaveButton';
3
+ import { translations } from './i18n-translations';
4
+ import { translateEndpoint } from './translate/endpoint';
5
+ import { translateOperation } from './translate/operation';
6
+ export { translateOperation };
7
+ export const translator = (pluginConfig)=>{
8
+ return (config)=>{
9
+ if (pluginConfig.disabled || !config.localization || config.localization.locales.length < 2) return config;
10
+ return {
11
+ ...config,
12
+ admin: {
13
+ ...config.admin ?? {},
14
+ custom: {
15
+ ...config.admin?.custom ?? {},
16
+ translator: {
17
+ resolvers: pluginConfig.resolvers.map(({ key })=>({
18
+ key
19
+ }))
20
+ }
21
+ }
22
+ },
23
+ collections: config.collections?.map((collection)=>{
24
+ if (!pluginConfig.collections.includes(collection.slug)) return collection;
25
+ return {
26
+ ...collection,
27
+ admin: {
28
+ ...collection.admin ?? {},
29
+ components: {
30
+ ...collection.admin?.components ?? {},
31
+ edit: {
32
+ ...collection.admin?.components?.edit ?? {},
33
+ SaveButton: CustomSaveButton
34
+ }
35
+ }
36
+ }
37
+ };
38
+ }) ?? [],
39
+ custom: {
40
+ ...config.custom ?? {},
41
+ translator: {
42
+ resolvers: pluginConfig.resolvers
43
+ }
44
+ },
45
+ endpoints: [
46
+ ...config.endpoints ?? [],
47
+ {
48
+ handler: translateEndpoint,
49
+ method: 'post',
50
+ path: '/translator/translate'
51
+ }
52
+ ],
53
+ globals: config.globals?.map((global)=>{
54
+ if (!pluginConfig.globals.includes(global.slug)) return global;
55
+ return {
56
+ ...global,
57
+ admin: {
58
+ ...global.admin ?? {},
59
+ components: {
60
+ ...global.admin?.components ?? {},
61
+ elements: {
62
+ ...global.admin?.components?.elements ?? {},
63
+ SaveButton: CustomSaveButton
64
+ }
65
+ }
66
+ }
67
+ };
68
+ }) ?? [],
69
+ i18n: {
70
+ ...config.i18n,
71
+ translations: {
72
+ ...deepMerge(config.i18n?.translations ?? {}, translations)
73
+ }
74
+ }
75
+ };
76
+ };
77
+ };
78
+
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/* eslint-disable perfectionist/sort-named-exports */\r\nimport type { Plugin } from 'payload/config';\r\nimport { deepMerge } from 'payload/utilities';\r\n\r\nimport { CustomSaveButton } from './client/components/CustomSaveButton';\r\nimport { translations } from './i18n-translations';\r\nimport { translateEndpoint } from './translate/endpoint';\r\nimport { translateOperation } from './translate/operation';\r\nimport type { TranslatorConfig } from './types';\r\n\r\nexport { translateOperation };\r\n\r\nexport const translator: (pluginConfig: TranslatorConfig) => Plugin = (pluginConfig) => {\r\n return (config) => {\r\n if (pluginConfig.disabled || !config.localization || config.localization.locales.length < 2)\r\n return config;\r\n\r\n return {\r\n ...config,\r\n admin: {\r\n ...(config.admin ?? {}),\r\n custom: {\r\n ...(config.admin?.custom ?? {}),\r\n translator: {\r\n resolvers: pluginConfig.resolvers.map(({ key }) => ({ key })),\r\n },\r\n },\r\n },\r\n collections:\r\n config.collections?.map((collection) => {\r\n if (!pluginConfig.collections.includes(collection.slug)) return collection;\r\n\r\n return {\r\n ...collection,\r\n admin: {\r\n ...(collection.admin ?? {}),\r\n components: {\r\n ...(collection.admin?.components ?? {}),\r\n edit: {\r\n ...(collection.admin?.components?.edit ?? {}),\r\n SaveButton: CustomSaveButton,\r\n },\r\n },\r\n },\r\n };\r\n }) ?? [],\r\n custom: {\r\n ...(config.custom ?? {}),\r\n translator: {\r\n resolvers: pluginConfig.resolvers,\r\n },\r\n },\r\n endpoints: [\r\n ...(config.endpoints ?? []),\r\n {\r\n handler: translateEndpoint,\r\n method: 'post',\r\n path: '/translator/translate',\r\n },\r\n ],\r\n globals:\r\n config.globals?.map((global) => {\r\n if (!pluginConfig.globals.includes(global.slug)) return global;\r\n\r\n return {\r\n ...global,\r\n admin: {\r\n ...(global.admin ?? {}),\r\n components: {\r\n ...(global.admin?.components ?? {}),\r\n elements: {\r\n ...(global.admin?.components?.elements ?? {}),\r\n SaveButton: CustomSaveButton,\r\n },\r\n },\r\n },\r\n };\r\n }) ?? [],\r\n i18n: {\r\n ...config.i18n,\r\n translations: {\r\n ...deepMerge(config.i18n?.translations ?? {}, translations),\r\n },\r\n },\r\n };\r\n };\r\n};\r\n"],"names":["deepMerge","CustomSaveButton","translations","translateEndpoint","translateOperation","translator","pluginConfig","config","disabled","localization","locales","length","admin","custom","resolvers","map","key","collections","collection","includes","slug","components","edit","SaveButton","endpoints","handler","method","path","globals","global","elements","i18n"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,mDAAmD,GAEnD,SAASA,SAAS,QAAQ,oBAAoB;AAE9C,SAASC,gBAAgB,QAAQ,uCAAuC;AACxE,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,kBAAkB,QAAQ,wBAAwB;AAG3D,SAASA,kBAAkB,GAAG;AAE9B,OAAO,MAAMC,aAAyD,CAACC;IACrE,OAAO,CAACC;QACN,IAAID,aAAaE,QAAQ,IAAI,CAACD,OAAOE,YAAY,IAAIF,OAAOE,YAAY,CAACC,OAAO,CAACC,MAAM,GAAG,GACxF,OAAOJ;QAET,OAAO;YACL,GAAGA,MAAM;YACTK,OAAO;gBACL,GAAIL,OAAOK,KAAK,IAAI,CAAC,CAAC;gBACtBC,QAAQ;oBACN,GAAIN,OAAOK,KAAK,EAAEC,UAAU,CAAC,CAAC;oBAC9BR,YAAY;wBACVS,WAAWR,aAAaQ,SAAS,CAACC,GAAG,CAAC,CAAC,EAAEC,GAAG,EAAE,GAAM,CAAA;gCAAEA;4BAAI,CAAA;oBAC5D;gBACF;YACF;YACAC,aACEV,OAAOU,WAAW,EAAEF,IAAI,CAACG;gBACvB,IAAI,CAACZ,aAAaW,WAAW,CAACE,QAAQ,CAACD,WAAWE,IAAI,GAAG,OAAOF;gBAEhE,OAAO;oBACL,GAAGA,UAAU;oBACbN,OAAO;wBACL,GAAIM,WAAWN,KAAK,IAAI,CAAC,CAAC;wBAC1BS,YAAY;4BACV,GAAIH,WAAWN,KAAK,EAAES,cAAc,CAAC,CAAC;4BACtCC,MAAM;gCACJ,GAAIJ,WAAWN,KAAK,EAAES,YAAYC,QAAQ,CAAC,CAAC;gCAC5CC,YAAYtB;4BACd;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACVY,QAAQ;gBACN,GAAIN,OAAOM,MAAM,IAAI,CAAC,CAAC;gBACvBR,YAAY;oBACVS,WAAWR,aAAaQ,SAAS;gBACnC;YACF;YACAU,WAAW;mBACLjB,OAAOiB,SAAS,IAAI,EAAE;gBAC1B;oBACEC,SAAStB;oBACTuB,QAAQ;oBACRC,MAAM;gBACR;aACD;YACDC,SACErB,OAAOqB,OAAO,EAAEb,IAAI,CAACc;gBACnB,IAAI,CAACvB,aAAasB,OAAO,CAACT,QAAQ,CAACU,OAAOT,IAAI,GAAG,OAAOS;gBAExD,OAAO;oBACL,GAAGA,MAAM;oBACTjB,OAAO;wBACL,GAAIiB,OAAOjB,KAAK,IAAI,CAAC,CAAC;wBACtBS,YAAY;4BACV,GAAIQ,OAAOjB,KAAK,EAAES,cAAc,CAAC,CAAC;4BAClCS,UAAU;gCACR,GAAID,OAAOjB,KAAK,EAAES,YAAYS,YAAY,CAAC,CAAC;gCAC5CP,YAAYtB;4BACd;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACV8B,MAAM;gBACJ,GAAGxB,OAAOwB,IAAI;gBACd7B,cAAc;oBACZ,GAAGF,UAAUO,OAAOwB,IAAI,EAAE7B,gBAAgB,CAAC,GAAGA,aAAa;gBAC7D;YACF;QACF;IACF;AACF,EAAE"}
@@ -0,0 +1,3 @@
1
+ import type { TranslateResolver } from './types';
2
+ export declare const copyResolver: () => TranslateResolver;
3
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/resolvers/copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,YAAY,QAAO,iBAY/B,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const copyResolver = ()=>{
2
+ return {
3
+ key: 'copy',
4
+ resolve: (args)=>{
5
+ const { texts } = args;
6
+ return {
7
+ success: true,
8
+ translatedTexts: texts
9
+ };
10
+ }
11
+ };
12
+ };
13
+
14
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/resolvers/copy.ts"],"sourcesContent":["import type { TranslateResolver } from './types';\r\n\r\nexport const copyResolver = (): TranslateResolver => {\r\n return {\r\n key: 'copy',\r\n resolve: (args) => {\r\n const { texts } = args;\r\n\r\n return {\r\n success: true,\r\n translatedTexts: texts,\r\n };\r\n },\r\n };\r\n};\r\n"],"names":["copyResolver","key","resolve","args","texts","success","translatedTexts"],"rangeMappings":";;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,eAAe;IAC1B,OAAO;QACLC,KAAK;QACLC,SAAS,CAACC;YACR,MAAM,EAAEC,KAAK,EAAE,GAAGD;YAElB,OAAO;gBACLE,SAAS;gBACTC,iBAAiBF;YACnB;QACF;IACF;AACF,EAAE"}
@@ -0,0 +1,11 @@
1
+ import type { TranslateResolver } from './types';
2
+ export type GoogleResolverConfig = {
3
+ apiKey: string;
4
+ /**
5
+ * How many texts to include into 1 request
6
+ * @default 100
7
+ */
8
+ chunkLength?: number;
9
+ };
10
+ export declare const googleResolver: ({ apiKey, chunkLength, }: GoogleResolverConfig) => TranslateResolver;
11
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/resolvers/google.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAwBjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,cAAc,6BAGxB,oBAAoB,KAAG,iBAqDzB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { chunkArray } from '../utils/chunkArray';
2
+ const localeToCountryCodeMapper = {
3
+ ua: 'uk'
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
+ };
46
+
47
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/resolvers/google.ts"],"sourcesContent":["import { chunkArray } from '../utils/chunkArray';\r\nimport type { TranslateResolver } from './types';\r\n\r\ntype GoogleResponse = {\r\n data: {\r\n data: {\r\n translations: {\r\n detectedSourceLanguage: string;\r\n model: string;\r\n translatedText: string;\r\n }[];\r\n };\r\n };\r\n success: boolean;\r\n};\r\n\r\nconst localeToCountryCodeMapper = {\r\n ua: 'uk',\r\n};\r\n\r\nconst mapLocale = (incoming: string) =>\r\n incoming in localeToCountryCodeMapper\r\n ? localeToCountryCodeMapper[incoming as keyof typeof localeToCountryCodeMapper]\r\n : incoming;\r\n\r\nexport type GoogleResolverConfig = {\r\n apiKey: string;\r\n /**\r\n * How many texts to include into 1 request\r\n * @default 100\r\n */\r\n chunkLength?: number;\r\n};\r\n\r\nexport const googleResolver = ({\r\n apiKey,\r\n chunkLength = 100,\r\n}: GoogleResolverConfig): TranslateResolver => {\r\n return {\r\n key: 'google',\r\n resolve: async (args) => {\r\n const { localeFrom, localeTo, req, texts } = args;\r\n\r\n const apiUrl = `https://translation.googleapis.com/language/translate/v2?key=${apiKey}`;\r\n\r\n const responses: GoogleResponse[] = await Promise.all(\r\n chunkArray(texts, chunkLength).map((q) =>\r\n fetch(apiUrl, {\r\n body: JSON.stringify({\r\n q,\r\n source: mapLocale(localeFrom),\r\n target: mapLocale(localeTo),\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n method: 'POST',\r\n }).then(async (res) => {\r\n const data = await res.json();\r\n\r\n if (!res.ok)\r\n req.payload.logger.info({\r\n googleResponse: data,\r\n message: `An error occurred when trying to translate the data using Google API`,\r\n });\r\n\r\n return {\r\n data,\r\n success: res.ok,\r\n };\r\n }),\r\n ),\r\n );\r\n\r\n if (responses.some((res) => !res.success)) {\r\n return {\r\n success: false,\r\n };\r\n }\r\n\r\n const translatedTexts = responses\r\n .flatMap((chunk) => chunk.data.data.translations)\r\n .map((translation) => translation.translatedText);\r\n\r\n return {\r\n success: true,\r\n translatedTexts,\r\n };\r\n },\r\n };\r\n};\r\n"],"names":["chunkArray","localeToCountryCodeMapper","ua","mapLocale","incoming","googleResolver","apiKey","chunkLength","key","resolve","args","localeFrom","localeTo","req","texts","apiUrl","responses","Promise","all","map","q","fetch","body","JSON","stringify","source","target","headers","method","then","res","data","json","ok","payload","logger","info","googleResponse","message","success","some","translatedTexts","flatMap","chunk","translations","translation","translatedText"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,UAAU,QAAQ,sBAAsB;AAgBjD,MAAMC,4BAA4B;IAChCC,IAAI;AACN;AAEA,MAAMC,YAAY,CAACC,WACjBA,YAAYH,4BACRA,yBAAyB,CAACG,SAAmD,GAC7EA;AAWN,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,cAAc,GAAG,EACI;IACrB,OAAO;QACLC,KAAK;QACLC,SAAS,OAAOC;YACd,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,KAAK,EAAE,GAAGJ;YAE7C,MAAMK,SAAS,CAAC,6DAA6D,EAAET,OAAO,CAAC;YAEvF,MAAMU,YAA8B,MAAMC,QAAQC,GAAG,CACnDlB,WAAWc,OAAOP,aAAaY,GAAG,CAAC,CAACC,IAClCC,MAAMN,QAAQ;oBACZO,MAAMC,KAAKC,SAAS,CAAC;wBACnBJ;wBACAK,QAAQtB,UAAUQ;wBAClBe,QAAQvB,UAAUS;oBACpB;oBACAe,SAAS;wBACP,gBAAgB;oBAClB;oBACAC,QAAQ;gBACV,GAAGC,IAAI,CAAC,OAAOC;oBACb,MAAMC,OAAO,MAAMD,IAAIE,IAAI;oBAE3B,IAAI,CAACF,IAAIG,EAAE,EACTpB,IAAIqB,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;wBACtBC,gBAAgBN;wBAChBO,SAAS,CAAC,oEAAoE,CAAC;oBACjF;oBAEF,OAAO;wBACLP;wBACAQ,SAAST,IAAIG,EAAE;oBACjB;gBACF;YAIJ,IAAIjB,UAAUwB,IAAI,CAAC,CAACV,MAAQ,CAACA,IAAIS,OAAO,GAAG;gBACzC,OAAO;oBACLA,SAAS;gBACX;YACF;YAEA,MAAME,kBAAkBzB,UACrB0B,OAAO,CAAC,CAACC,QAAUA,MAAMZ,IAAI,CAACA,IAAI,CAACa,YAAY,EAC/CzB,GAAG,CAAC,CAAC0B,cAAgBA,YAAYC,cAAc;YAElD,OAAO;gBACLP,SAAS;gBACTE;YACF;QACF;IACF;AACF,EAAE"}
@@ -0,0 +1,21 @@
1
+ import type { TranslateResolver } from './types';
2
+ export type OpenAIPrompt = (args: {
3
+ localeFrom: string;
4
+ localeTo: string;
5
+ texts: string[];
6
+ }) => string;
7
+ export type OpenAIResolverConfig = {
8
+ apiKey: string;
9
+ /**
10
+ * How many texts to include into 1 request
11
+ * @default 100
12
+ */
13
+ chunkLength?: number;
14
+ /**
15
+ * @default "gpt-3.5-turbo"
16
+ */
17
+ model?: string;
18
+ promt?: OpenAIPrompt;
19
+ };
20
+ export declare const openAIResolver: ({ apiKey, chunkLength, model, promt, }: OpenAIResolverConfig) => TranslateResolver;
21
+ //# sourceMappingURL=openAI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../src/resolvers/openAI.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,KAAK,MAAM,CAAC;AAEb,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB,CAAC;AAcF,eAAO,MAAM,cAAc,2CAKxB,oBAAoB,KAAG,iBA6GzB,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { chunkArray } from '../utils/chunkArray';
2
+ const defaultPromt = ({ localeFrom, localeTo, texts })=>{
3
+ return `Translate me the following array: ${JSON.stringify(texts)} in locale=${localeFrom} to locale ${localeTo}, respond me with the same array structure`;
4
+ };
5
+ export const openAIResolver = ({ apiKey, chunkLength = 100, model = 'gpt-3.5-turbo', promt = defaultPromt })=>{
6
+ return {
7
+ key: 'openai',
8
+ resolve: async ({ localeFrom, localeTo, req, texts })=>{
9
+ const apiUrl = 'https://api.openai.com/v1/chat/completions';
10
+ try {
11
+ const respones = await Promise.all(chunkArray(texts, chunkLength).map((texts)=>{
12
+ return fetch(apiUrl, {
13
+ body: JSON.stringify({
14
+ messages: [
15
+ {
16
+ content: promt({
17
+ localeFrom,
18
+ localeTo,
19
+ texts
20
+ }),
21
+ role: 'user'
22
+ }
23
+ ],
24
+ model
25
+ }),
26
+ headers: {
27
+ Authorization: `Bearer ${apiKey}`,
28
+ 'Content-Type': 'application/json'
29
+ },
30
+ method: 'post'
31
+ }).then(async (res)=>{
32
+ const data = await res.json();
33
+ if (!res.ok) req.payload.logger.info({
34
+ message: `An error occurred when trying to translate the data using OpenAI API`,
35
+ openAIresponse: data
36
+ });
37
+ return {
38
+ data,
39
+ success: res.ok
40
+ };
41
+ });
42
+ }));
43
+ const translated = [];
44
+ for (const { data, success } of respones){
45
+ if (!success) return {
46
+ success: false
47
+ };
48
+ const content = data?.choices?.[0]?.message?.content;
49
+ if (!content) {
50
+ req.payload.logger.info(`An error occurred when trying to translate the data using OpenAI API - missing content in the response`);
51
+ return {
52
+ success: false
53
+ };
54
+ }
55
+ const translatedChunk = JSON.parse(content);
56
+ if (!Array.isArray(translatedChunk)) {
57
+ req.payload.logger.info({
58
+ data: translatedChunk,
59
+ message: `An error occurred when trying to translate the data using OpenAI API - parsed content is not an array`
60
+ });
61
+ return {
62
+ success: false
63
+ };
64
+ }
65
+ for (const text of translatedChunk){
66
+ if (typeof text !== 'string') {
67
+ req.payload.logger.info({
68
+ data: text,
69
+ message: `An error occurred when trying to translate the data using OpenAI API - parsed content is not an array`
70
+ });
71
+ return {
72
+ success: false
73
+ };
74
+ }
75
+ translated.push(text);
76
+ }
77
+ }
78
+ return {
79
+ success: true,
80
+ translatedTexts: translated
81
+ };
82
+ } catch (e) {
83
+ if (e instanceof Error) {
84
+ req.payload.logger.info({
85
+ message: `An error occurred when trying to translate the data using OpenAI API`,
86
+ originalErr: e.message
87
+ });
88
+ }
89
+ return {
90
+ success: false
91
+ };
92
+ }
93
+ }
94
+ };
95
+ };
96
+
97
+ //# sourceMappingURL=openAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/resolvers/openAI.ts"],"sourcesContent":["import { chunkArray } from '../utils/chunkArray';\r\nimport type { TranslateResolver } from './types';\r\n\r\nexport type OpenAIPrompt = (args: {\r\n localeFrom: string;\r\n localeTo: string;\r\n texts: string[];\r\n}) => string;\r\n\r\nexport type OpenAIResolverConfig = {\r\n apiKey: string;\r\n /**\r\n * How many texts to include into 1 request\r\n * @default 100\r\n */\r\n chunkLength?: number;\r\n /**\r\n * @default \"gpt-3.5-turbo\"\r\n */\r\n model?: string;\r\n promt?: OpenAIPrompt;\r\n};\r\n\r\ntype OpenAIResponse = {\r\n choices: {\r\n message: {\r\n content: string;\r\n };\r\n }[];\r\n};\r\n\r\nconst defaultPromt: OpenAIPrompt = ({ localeFrom, localeTo, texts }) => {\r\n return `Translate me the following array: ${JSON.stringify(texts)} in locale=${localeFrom} to locale ${localeTo}, respond me with the same array structure`;\r\n};\r\n\r\nexport const openAIResolver = ({\r\n apiKey,\r\n chunkLength = 100,\r\n model = 'gpt-3.5-turbo',\r\n promt = defaultPromt,\r\n}: OpenAIResolverConfig): TranslateResolver => {\r\n return {\r\n key: 'openai',\r\n resolve: async ({ localeFrom, localeTo, req, texts }) => {\r\n const apiUrl = 'https://api.openai.com/v1/chat/completions';\r\n\r\n try {\r\n const respones: {\r\n data: OpenAIResponse;\r\n success: boolean;\r\n }[] = await Promise.all(\r\n chunkArray(texts, chunkLength).map((texts) => {\r\n return fetch(apiUrl, {\r\n body: JSON.stringify({\r\n messages: [\r\n {\r\n content: promt({ localeFrom, localeTo, texts }),\r\n role: 'user',\r\n },\r\n ],\r\n model,\r\n }),\r\n headers: {\r\n Authorization: `Bearer ${apiKey}`,\r\n 'Content-Type': 'application/json',\r\n },\r\n method: 'post',\r\n }).then(async (res) => {\r\n const data = await res.json();\r\n\r\n if (!res.ok)\r\n req.payload.logger.info({\r\n message: `An error occurred when trying to translate the data using OpenAI API`,\r\n openAIresponse: data,\r\n });\r\n\r\n return {\r\n data,\r\n success: res.ok,\r\n };\r\n });\r\n }),\r\n );\r\n\r\n const translated: string[] = [];\r\n\r\n for (const { data, success } of respones) {\r\n if (!success)\r\n return {\r\n success: false as const,\r\n };\r\n\r\n const content = data?.choices?.[0]?.message?.content;\r\n\r\n if (!content) {\r\n req.payload.logger.info(\r\n `An error occurred when trying to translate the data using OpenAI API - missing content in the response`,\r\n );\r\n\r\n return {\r\n success: false as const,\r\n };\r\n }\r\n\r\n const translatedChunk: string[] = JSON.parse(content);\r\n\r\n if (!Array.isArray(translatedChunk)) {\r\n req.payload.logger.info({\r\n data: translatedChunk,\r\n message: `An error occurred when trying to translate the data using OpenAI API - parsed content is not an array`,\r\n });\r\n\r\n return {\r\n success: false as const,\r\n };\r\n }\r\n\r\n for (const text of translatedChunk) {\r\n if (typeof text !== 'string') {\r\n req.payload.logger.info({\r\n data: text,\r\n message: `An error occurred when trying to translate the data using OpenAI API - parsed content is not an array`,\r\n });\r\n\r\n return {\r\n success: false as const,\r\n };\r\n }\r\n\r\n translated.push(text);\r\n }\r\n }\r\n\r\n return {\r\n success: true as const,\r\n translatedTexts: translated,\r\n };\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n req.payload.logger.info({\r\n message: `An error occurred when trying to translate the data using OpenAI API`,\r\n originalErr: e.message,\r\n });\r\n }\r\n\r\n return { success: false as const };\r\n }\r\n },\r\n };\r\n};\r\n"],"names":["chunkArray","defaultPromt","localeFrom","localeTo","texts","JSON","stringify","openAIResolver","apiKey","chunkLength","model","promt","key","resolve","req","apiUrl","respones","Promise","all","map","fetch","body","messages","content","role","headers","Authorization","method","then","res","data","json","ok","payload","logger","info","message","openAIresponse","success","translated","choices","translatedChunk","parse","Array","isArray","text","push","translatedTexts","e","Error","originalErr"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,UAAU,QAAQ,sBAAsB;AA+BjD,MAAMC,eAA6B,CAAC,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,KAAK,EAAE;IACjE,OAAO,CAAC,kCAAkC,EAAEC,KAAKC,SAAS,CAACF,OAAO,WAAW,EAAEF,WAAW,WAAW,EAAEC,SAAS,0CAA0C,CAAC;AAC7J;AAEA,OAAO,MAAMI,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,cAAc,GAAG,EACjBC,QAAQ,eAAe,EACvBC,QAAQV,YAAY,EACC;IACrB,OAAO;QACLW,KAAK;QACLC,SAAS,OAAO,EAAEX,UAAU,EAAEC,QAAQ,EAAEW,GAAG,EAAEV,KAAK,EAAE;YAClD,MAAMW,SAAS;YAEf,IAAI;gBACF,MAAMC,WAGA,MAAMC,QAAQC,GAAG,CACrBlB,WAAWI,OAAOK,aAAaU,GAAG,CAAC,CAACf;oBAClC,OAAOgB,MAAML,QAAQ;wBACnBM,MAAMhB,KAAKC,SAAS,CAAC;4BACnBgB,UAAU;gCACR;oCACEC,SAASZ,MAAM;wCAAET;wCAAYC;wCAAUC;oCAAM;oCAC7CoB,MAAM;gCACR;6BACD;4BACDd;wBACF;wBACAe,SAAS;4BACPC,eAAe,CAAC,OAAO,EAAElB,OAAO,CAAC;4BACjC,gBAAgB;wBAClB;wBACAmB,QAAQ;oBACV,GAAGC,IAAI,CAAC,OAAOC;wBACb,MAAMC,OAAO,MAAMD,IAAIE,IAAI;wBAE3B,IAAI,CAACF,IAAIG,EAAE,EACTlB,IAAImB,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;4BACtBC,SAAS,CAAC,oEAAoE,CAAC;4BAC/EC,gBAAgBP;wBAClB;wBAEF,OAAO;4BACLA;4BACAQ,SAAST,IAAIG,EAAE;wBACjB;oBACF;gBACF;gBAGF,MAAMO,aAAuB,EAAE;gBAE/B,KAAK,MAAM,EAAET,IAAI,EAAEQ,OAAO,EAAE,IAAItB,SAAU;oBACxC,IAAI,CAACsB,SACH,OAAO;wBACLA,SAAS;oBACX;oBAEF,MAAMf,UAAUO,MAAMU,SAAS,CAAC,EAAE,EAAEJ,SAASb;oBAE7C,IAAI,CAACA,SAAS;wBACZT,IAAImB,OAAO,CAACC,MAAM,CAACC,IAAI,CACrB,CAAC,sGAAsG,CAAC;wBAG1G,OAAO;4BACLG,SAAS;wBACX;oBACF;oBAEA,MAAMG,kBAA4BpC,KAAKqC,KAAK,CAACnB;oBAE7C,IAAI,CAACoB,MAAMC,OAAO,CAACH,kBAAkB;wBACnC3B,IAAImB,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;4BACtBL,MAAMW;4BACNL,SAAS,CAAC,qGAAqG,CAAC;wBAClH;wBAEA,OAAO;4BACLE,SAAS;wBACX;oBACF;oBAEA,KAAK,MAAMO,QAAQJ,gBAAiB;wBAClC,IAAI,OAAOI,SAAS,UAAU;4BAC5B/B,IAAImB,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;gCACtBL,MAAMe;gCACNT,SAAS,CAAC,qGAAqG,CAAC;4BAClH;4BAEA,OAAO;gCACLE,SAAS;4BACX;wBACF;wBAEAC,WAAWO,IAAI,CAACD;oBAClB;gBACF;gBAEA,OAAO;oBACLP,SAAS;oBACTS,iBAAiBR;gBACnB;YACF,EAAE,OAAOS,GAAG;gBACV,IAAIA,aAAaC,OAAO;oBACtBnC,IAAImB,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;wBACtBC,SAAS,CAAC,oEAAoE,CAAC;wBAC/Ec,aAAaF,EAAEZ,OAAO;oBACxB;gBACF;gBAEA,OAAO;oBAAEE,SAAS;gBAAe;YACnC;QACF;IACF;AACF,EAAE"}
@@ -0,0 +1,20 @@
1
+ import type { PayloadRequest } from 'payload/types';
2
+ export type TranslateResolverArgs = {
3
+ /** Locale to translate from */
4
+ localeFrom: string;
5
+ /** Locale to translate to */
6
+ localeTo: string;
7
+ req: PayloadRequest;
8
+ texts: string[];
9
+ };
10
+ export type TranslateResolverResponse = {
11
+ success: false;
12
+ } | {
13
+ success: true;
14
+ translatedTexts: string[];
15
+ };
16
+ export type TranslateResolver = {
17
+ key: string;
18
+ resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
19
+ };
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resolvers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,qBAAqB,GAAG;IAClC,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC;IACE,OAAO,EAAE,KAAK,CAAC;CAChB,GACD;IACE,OAAO,EAAE,IAAI,CAAC;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CACP,IAAI,EAAE,qBAAqB,KACxB,OAAO,CAAC,yBAAyB,CAAC,GAAG,yBAAyB,CAAC;CACrE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/resolvers/types.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload/types';\r\n\r\nexport type TranslateResolverArgs = {\r\n /** Locale to translate from */\r\n localeFrom: string;\r\n /** Locale to translate to */\r\n localeTo: string;\r\n req: PayloadRequest;\r\n texts: string[];\r\n};\r\n\r\nexport type TranslateResolverResponse =\r\n | {\r\n success: false;\r\n }\r\n | {\r\n success: true;\r\n translatedTexts: string[];\r\n };\r\n\r\nexport type TranslateResolver = {\r\n key: string;\r\n resolve: (\r\n args: TranslateResolverArgs,\r\n ) => Promise<TranslateResolverResponse> | TranslateResolverResponse;\r\n};\r\n"],"names":[],"rangeMappings":"","mappings":"AAoBA,WAKE"}