@payload-enchants/translator 0.0.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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"}