@justanarthur/payload-plugin-translator 1.3.20 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +132 -215
- package/dist/client.css +41 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.js +320 -0
- package/dist/index.d.ts +63 -11
- package/dist/index.js +275 -82
- package/dist/jobs.d.ts +50 -0
- package/dist/jobs.js +28 -0
- package/dist/resolvers/copy.d.ts +19 -3
- package/dist/resolvers/copy.js +9 -13
- package/dist/resolvers/google.d.ts +23 -11
- package/dist/resolvers/google.js +10 -46
- package/dist/resolvers/libreTranslate.d.ts +23 -15
- package/dist/resolvers/libreTranslate.js +10 -47
- package/dist/resolvers/openAI.d.ts +29 -21
- package/dist/resolvers/openAI.js +9 -134
- package/dist/resolvers/types.d.ts +14 -16
- package/dist/resolvers/types.js +0 -3
- package/dist/shared/chunk-97ktc51q.js +15 -0
- package/dist/shared/chunk-ecnph6hw.js +205 -0
- package/dist/shared/chunk-frnemj69.js +6 -0
- package/dist/shared/chunk-fsveh29m.js +55 -0
- package/dist/shared/chunk-q51q8rd2.js +855 -0
- package/dist/shared/chunk-zhrw0jnz.js +57 -0
- package/dist/types.d.ts +32 -22
- package/dist/types.js +0 -3
- package/package.json +89 -63
- package/dist/client/api/index.d.ts +0 -8
- package/dist/client/api/index.d.ts.map +0 -1
- package/dist/client/api/index.js +0 -28
- package/dist/client/api/index.js.map +0 -1
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +0 -5
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +0 -1
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +0 -28
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +0 -1
- package/dist/client/components/CustomButton/index.d.ts +0 -3
- package/dist/client/components/CustomButton/index.d.ts.map +0 -1
- package/dist/client/components/CustomButton/index.js +0 -10
- package/dist/client/components/CustomButton/index.js.map +0 -1
- package/dist/client/components/CustomButton/styles.scss +0 -5
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +0 -5
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +0 -1
- package/dist/client/components/LocaleLabel/LocaleLabel.js +0 -28
- package/dist/client/components/LocaleLabel/LocaleLabel.js.map +0 -1
- package/dist/client/components/LocaleLabel/index.d.ts +0 -2
- package/dist/client/components/LocaleLabel/index.d.ts.map +0 -1
- package/dist/client/components/LocaleLabel/index.js +0 -3
- package/dist/client/components/LocaleLabel/index.js.map +0 -1
- package/dist/client/components/ResolverButton/ResolverButton.d.ts +0 -5
- package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +0 -1
- package/dist/client/components/ResolverButton/ResolverButton.js +0 -16
- package/dist/client/components/ResolverButton/ResolverButton.js.map +0 -1
- package/dist/client/components/ResolverButton/index.d.ts +0 -2
- package/dist/client/components/ResolverButton/index.d.ts.map +0 -1
- package/dist/client/components/ResolverButton/index.js +0 -3
- package/dist/client/components/ResolverButton/index.js.map +0 -1
- package/dist/client/components/TranslatorModal/Content.d.ts +0 -2
- package/dist/client/components/TranslatorModal/Content.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/Content.js +0 -60
- package/dist/client/components/TranslatorModal/Content.js.map +0 -1
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +0 -3
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/TranslatorModal.js +0 -26
- package/dist/client/components/TranslatorModal/TranslatorModal.js.map +0 -1
- package/dist/client/components/TranslatorModal/index.d.ts +0 -2
- package/dist/client/components/TranslatorModal/index.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/index.js +0 -3
- package/dist/client/components/TranslatorModal/index.js.map +0 -1
- package/dist/client/components/TranslatorModal/styles.scss +0 -76
- package/dist/client/providers/Translator/TranslatorProvider.d.ts +0 -5
- package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +0 -1
- package/dist/client/providers/Translator/TranslatorProvider.js +0 -109
- package/dist/client/providers/Translator/TranslatorProvider.js.map +0 -1
- package/dist/client/providers/Translator/context.d.ts +0 -21
- package/dist/client/providers/Translator/context.d.ts.map +0 -1
- package/dist/client/providers/Translator/context.js +0 -9
- package/dist/client/providers/Translator/context.js.map +0 -1
- package/dist/exports/client.d.ts +0 -2
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js +0 -3
- package/dist/exports/client.js.map +0 -1
- package/dist/i18n-translations.d.ts +0 -87
- package/dist/i18n-translations.d.ts.map +0 -1
- package/dist/i18n-translations.js +0 -88
- package/dist/i18n-translations.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resolvers/copy.d.ts.map +0 -1
- package/dist/resolvers/copy.js.map +0 -1
- package/dist/resolvers/google.d.ts.map +0 -1
- package/dist/resolvers/google.js.map +0 -1
- package/dist/resolvers/libreTranslate.d.ts.map +0 -1
- package/dist/resolvers/libreTranslate.js.map +0 -1
- package/dist/resolvers/openAI.d.ts.map +0 -1
- package/dist/resolvers/openAI.js.map +0 -1
- package/dist/resolvers/types.d.ts.map +0 -1
- package/dist/resolvers/types.js.map +0 -1
- package/dist/translate/endpoint.d.ts +0 -3
- package/dist/translate/endpoint.d.ts.map +0 -1
- package/dist/translate/endpoint.js +0 -23
- package/dist/translate/endpoint.js.map +0 -1
- package/dist/translate/findEntityWithConfig.d.ts +0 -16
- package/dist/translate/findEntityWithConfig.d.ts.map +0 -1
- package/dist/translate/findEntityWithConfig.js +0 -34
- package/dist/translate/findEntityWithConfig.js.map +0 -1
- package/dist/translate/operation.d.ts +0 -9
- package/dist/translate/operation.d.ts.map +0 -1
- package/dist/translate/operation.js +0 -78
- package/dist/translate/operation.js.map +0 -1
- package/dist/translate/traverseFields.d.ts +0 -17
- package/dist/translate/traverseFields.d.ts.map +0 -1
- package/dist/translate/traverseFields.js +0 -233
- package/dist/translate/traverseFields.js.map +0 -1
- package/dist/translate/traverseRichText.d.ts +0 -10
- package/dist/translate/traverseRichText.d.ts.map +0 -1
- package/dist/translate/traverseRichText.js +0 -24
- package/dist/translate/traverseRichText.js.map +0 -1
- package/dist/translate/types.d.ts +0 -27
- package/dist/translate/types.d.ts.map +0 -1
- package/dist/translate/types.js +0 -3
- package/dist/translate/types.js.map +0 -1
- package/dist/translate/updateEntity.d.ts +0 -14
- package/dist/translate/updateEntity.d.ts.map +0 -1
- package/dist/translate/updateEntity.js +0 -26
- package/dist/translate/updateEntity.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/chunkArray.d.ts +0 -2
- package/dist/utils/chunkArray.d.ts.map +0 -1
- package/dist/utils/chunkArray.js +0 -7
- package/dist/utils/chunkArray.js.map +0 -1
- package/dist/utils/isEmpty.d.ts +0 -2
- package/dist/utils/isEmpty.d.ts.map +0 -1
- package/dist/utils/isEmpty.js +0 -8
- package/dist/utils/isEmpty.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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 OpenAIMessageExchange = Record<string | number, string>\r\n\r\nexport type OpenAIPrompt = (args: {\r\n localeFrom: string\r\n localeTo: string\r\n texts: OpenAIMessageExchange\r\n}) => string\r\n\r\nexport type OpenAIResolverConfig = {\r\n apiKey: string\r\n baseUrl?: 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 prompt?: 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 defaultPrompt: OpenAIPrompt = ({ localeFrom, localeTo, texts }) => {\r\n return `You are a machine translation service. Your task is to translate values in a strict JSON of key value pairs from ${localeFrom} to ${localeTo}.\r\n\r\n**INSTRUCTIONS:**\r\n1. **Translate each value**.\r\n2. The output **must valid JSON**.\r\n3. The output array **must have the exact same number of elements** as the input.\r\n4. Preserve the structure of the JSON array.\r\n5. Preserve JSON keys without translation.\r\n6. The **order of the elements must not change**.\r\n7. **Do not include any text, explanations, or remarks outside of the JSON array.**\r\n8. **Preserve any special characters, HTML tags, or formatting** present in the original strings.\r\n9. **Preserve urls, hrefs, and email addresses** without translation.\r\n10. RETURN ONLY THE RAW JSON, DO NOT RESPOND WITH ANYTHING ELSE, AND NO FORMATTING.\r\n\r\n**INPUT JSON TO TRANSLATE:**\r\n${JSON.stringify(texts)}`\r\n}\r\n\r\nexport const openAIResolver = ({\r\n apiKey,\r\n baseUrl,\r\n chunkLength = 100,\r\n model = 'gpt-3.5-turbo',\r\n prompt = defaultPrompt\r\n }: OpenAIResolverConfig): TranslateResolver => {\r\n return {\r\n key: 'openai',\r\n resolve: async ({ localeFrom, localeTo, req, texts }) => {\r\n const apiUrl = `${baseUrl || 'https://api.openai.com'}/v1/chat/completions`\r\n\r\n const localizationConfig = req.payload.config.localization\r\n const resolveLocaleName = (code: string): string => {\r\n if (localizationConfig && localizationConfig.locales) {\r\n const found = localizationConfig.locales.find(\r\n (l) => (typeof l === 'string' ? l : l.code) === code,\r\n )\r\n if (found && typeof found !== 'string' && found.label) {\r\n return typeof found.label === 'string' ? found.label : (found.label['en'] ?? code)\r\n }\r\n }\r\n return new Intl.DisplayNames(['en'], { type: 'language' }).of(code) ?? code\r\n }\r\n\r\n const localeFromName = resolveLocaleName(localeFrom)\r\n const localeToName = resolveLocaleName(localeTo)\r\n\r\n try {\r\n const response: {\r\n data: OpenAIResponse\r\n success: boolean\r\n }[] = await Promise.all(\r\n chunkArray(texts, chunkLength).map((texts) => {\r\n const structuredTexts = texts.reduce((acc, curr, index) => {\r\n acc[index + 1] = curr\r\n return acc\r\n }, {} as Record<number, string>)\r\n\r\n return fetch(apiUrl, {\r\n body: JSON.stringify({\r\n messages: [\r\n {\r\n content: prompt({ localeFrom: localeFromName, localeTo: localeToName, texts: structuredTexts }),\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 response) {\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.error(\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 translatedStructuredTexts: OpenAIMessageExchange = JSON.parse(content)\r\n\r\n const translatedChunk: string[] = Object.values(translatedStructuredTexts)\r\n\r\n if (!Array.isArray(translatedChunk)) {\r\n req.payload.logger.error({\r\n data: translatedChunk,\r\n fullContent: content,\r\n message:\r\n '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 (text && typeof text !== 'string') {\r\n req.payload.logger.error({\r\n chunkData: translatedChunk,\r\n data: text,\r\n fullContent: content,\r\n message:\r\n 'An error occurred when trying to translate the data using OpenAI API - parsed content is not a string'\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","defaultPrompt","localeFrom","localeTo","texts","JSON","stringify","openAIResolver","apiKey","baseUrl","chunkLength","model","prompt","key","resolve","req","apiUrl","localizationConfig","payload","config","localization","resolveLocaleName","code","locales","found","find","l","label","Intl","DisplayNames","type","of","localeFromName","localeToName","response","Promise","all","map","structuredTexts","reduce","acc","curr","index","fetch","body","messages","content","role","headers","Authorization","method","then","res","data","json","ok","logger","info","message","openAIresponse","success","translated","choices","error","translatedStructuredTexts","parse","translatedChunk","Object","values","Array","isArray","fullContent","text","chunkData","push","translatedTexts","e","Error","originalErr"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resolvers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,MAAM,qBAAqB,GAAG;IAClC,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,yBAAyB,GACjC;IACE,OAAO,EAAE,KAAK,CAAA;CACf,GACD;IACE,OAAO,EAAE,IAAI,CAAA;IACb,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAEL,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,CACP,IAAI,EAAE,qBAAqB,KACxB,OAAO,CAAC,yBAAyB,CAAC,GAAG,yBAAyB,CAAA;CACpE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/resolvers/types.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\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":[],"mappings":"AAoBA,WAKC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../src/translate/endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAM7C,eAAO,MAAM,iBAAiB,EAAE,cAsB/B,CAAA"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { APIError } from 'payload';
|
|
2
|
-
import { translateOperation } from './operation';
|
|
3
|
-
export const translateEndpoint = async (req)=>{
|
|
4
|
-
if (!req.json) throw new APIError('Content-Type should be json');
|
|
5
|
-
const args = await req.json();
|
|
6
|
-
const { collectionSlug, data, emptyOnly, globalSlug, id, locale, localeFrom, resolver } = args;
|
|
7
|
-
const result = await translateOperation({
|
|
8
|
-
collectionSlug,
|
|
9
|
-
data,
|
|
10
|
-
emptyOnly,
|
|
11
|
-
globalSlug,
|
|
12
|
-
id,
|
|
13
|
-
locale,
|
|
14
|
-
localeFrom,
|
|
15
|
-
overrideAccess: false,
|
|
16
|
-
req,
|
|
17
|
-
resolver,
|
|
18
|
-
update: false
|
|
19
|
-
});
|
|
20
|
-
return Response.json(result);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=endpoint.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translate/endpoint.ts"],"sourcesContent":["import type { PayloadHandler } from 'payload'\r\nimport { APIError } from 'payload'\r\n\r\nimport { translateOperation } from './operation'\r\nimport type { TranslateEndpointArgs } from './types'\r\n\r\nexport const translateEndpoint: PayloadHandler = async (req) => {\r\n if (!req.json) throw new APIError('Content-Type should be json')\r\n\r\n const args: TranslateEndpointArgs = await req.json()\r\n\r\n const { collectionSlug, data, emptyOnly, globalSlug, id, locale, localeFrom, resolver } = args\r\n\r\n const result = await translateOperation({\r\n collectionSlug,\r\n data,\r\n emptyOnly,\r\n globalSlug,\r\n id,\r\n locale,\r\n localeFrom,\r\n overrideAccess: false,\r\n req,\r\n resolver,\r\n update: false,\r\n })\r\n\r\n return Response.json(result)\r\n}\r\n"],"names":["APIError","translateOperation","translateEndpoint","req","json","args","collectionSlug","data","emptyOnly","globalSlug","id","locale","localeFrom","resolver","result","overrideAccess","update","Response"],"mappings":"AACA,SAASA,QAAQ,QAAQ,UAAS;AAElC,SAASC,kBAAkB,QAAQ,cAAa;AAGhD,OAAO,MAAMC,oBAAoC,OAAOC;IACtD,IAAI,CAACA,IAAIC,IAAI,EAAE,MAAM,IAAIJ,SAAS;IAElC,MAAMK,OAA8B,MAAMF,IAAIC,IAAI;IAElD,MAAM,EAAEE,cAAc,EAAEC,IAAI,EAAEC,SAAS,EAAEC,UAAU,EAAEC,EAAE,EAAEC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGR;IAE1F,MAAMS,SAAS,MAAMb,mBAAmB;QACtCK;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAG,gBAAgB;QAChBZ;QACAU;QACAG,QAAQ;IACV;IAEA,OAAOC,SAASb,IAAI,CAACU;AACvB,EAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { PayloadRequest, SanitizedCollectionConfig, SanitizedGlobalConfig, TypeWithID } from 'payload';
|
|
2
|
-
type Args = {
|
|
3
|
-
collectionSlug?: string;
|
|
4
|
-
globalSlug?: string;
|
|
5
|
-
id?: number | string;
|
|
6
|
-
locale: string;
|
|
7
|
-
overrideAccess?: boolean;
|
|
8
|
-
req: PayloadRequest;
|
|
9
|
-
};
|
|
10
|
-
export type Doc = Record<string, unknown> & TypeWithID;
|
|
11
|
-
export declare const findEntityWithConfig: (args: Args) => Promise<{
|
|
12
|
-
config: SanitizedCollectionConfig | SanitizedGlobalConfig;
|
|
13
|
-
doc: Doc;
|
|
14
|
-
}>;
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=findEntityWithConfig.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"findEntityWithConfig.d.ts","sourceRoot":"","sources":["../../src/translate/findEntityWithConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,UAAU,EACX,MAAM,SAAS,CAAA;AAGhB,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAAA;AAOtD,eAAO,MAAM,oBAAoB,GAC/B,MAAM,IAAI,KACT,OAAO,CAAC;IACT,MAAM,EAAE,yBAAyB,GAAG,qBAAqB,CAAA;IACzD,GAAG,EAAE,GAAG,CAAA;CACT,CA0CA,CAAA"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { APIError } from 'payload';
|
|
2
|
-
const findConfigBySlug = (slug, enities)=>enities.find((entity)=>entity.slug === slug);
|
|
3
|
-
export const findEntityWithConfig = async (args)=>{
|
|
4
|
-
const { collectionSlug, globalSlug, id, locale, overrideAccess, req } = args;
|
|
5
|
-
if (!collectionSlug && !globalSlug) throw new APIError('Bad Request', 400);
|
|
6
|
-
const { payload } = req;
|
|
7
|
-
const { config } = payload;
|
|
8
|
-
const isGlobal = !!globalSlug;
|
|
9
|
-
if (!isGlobal && !id) throw new APIError('Bad Request', 400);
|
|
10
|
-
const entityConfig = isGlobal ? findConfigBySlug(globalSlug, config.globals) : findConfigBySlug(collectionSlug, config.collections);
|
|
11
|
-
if (!entityConfig) throw new APIError('Bad Request', 400);
|
|
12
|
-
const docPromise = isGlobal ? payload.findGlobal({
|
|
13
|
-
depth: 0,
|
|
14
|
-
fallbackLocale: undefined,
|
|
15
|
-
locale: locale,
|
|
16
|
-
overrideAccess,
|
|
17
|
-
req,
|
|
18
|
-
slug: args.globalSlug
|
|
19
|
-
}) : payload.findByID({
|
|
20
|
-
collection: collectionSlug,
|
|
21
|
-
depth: 0,
|
|
22
|
-
fallbackLocale: undefined,
|
|
23
|
-
id: id,
|
|
24
|
-
locale: locale,
|
|
25
|
-
overrideAccess,
|
|
26
|
-
req
|
|
27
|
-
});
|
|
28
|
-
return {
|
|
29
|
-
config: entityConfig,
|
|
30
|
-
doc: await docPromise
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=findEntityWithConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translate/findEntityWithConfig.ts"],"sourcesContent":["import type {\r\n CollectionSlug,\r\n GlobalSlug,\r\n PayloadRequest,\r\n SanitizedCollectionConfig,\r\n SanitizedGlobalConfig,\r\n TypeWithID,\r\n} from 'payload'\r\nimport { APIError } from 'payload'\r\n\r\ntype Args = {\r\n collectionSlug?: string\r\n globalSlug?: string\r\n id?: number | string\r\n locale: string\r\n overrideAccess?: boolean\r\n req: PayloadRequest\r\n}\r\n\r\nexport type Doc = Record<string, unknown> & TypeWithID\r\n\r\nconst findConfigBySlug = (\r\n slug: string,\r\n enities: SanitizedCollectionConfig[] | SanitizedGlobalConfig[],\r\n) => enities.find((entity) => entity.slug === slug)\r\n\r\nexport const findEntityWithConfig = async (\r\n args: Args,\r\n): Promise<{\r\n config: SanitizedCollectionConfig | SanitizedGlobalConfig\r\n doc: Doc\r\n}> => {\r\n const { collectionSlug, globalSlug, id, locale, overrideAccess, req } = args\r\n\r\n if (!collectionSlug && !globalSlug) throw new APIError('Bad Request', 400)\r\n\r\n const { payload } = req\r\n\r\n const { config } = payload\r\n\r\n const isGlobal = !!globalSlug\r\n\r\n if (!isGlobal && !id) throw new APIError('Bad Request', 400)\r\n\r\n const entityConfig = isGlobal\r\n ? findConfigBySlug(globalSlug, config.globals)\r\n : findConfigBySlug(collectionSlug as string, config.collections)\r\n\r\n if (!entityConfig) throw new APIError('Bad Request', 400)\r\n\r\n const docPromise = isGlobal\r\n ? payload.findGlobal({\r\n depth: 0,\r\n fallbackLocale: undefined,\r\n locale: locale as any,\r\n overrideAccess,\r\n req,\r\n slug: args.globalSlug as GlobalSlug,\r\n })\r\n : payload.findByID({\r\n collection: collectionSlug as CollectionSlug,\r\n depth: 0,\r\n fallbackLocale: undefined,\r\n id: id as number | string,\r\n locale: locale as any,\r\n overrideAccess,\r\n req,\r\n })\r\n\r\n return {\r\n config: entityConfig,\r\n doc: (await docPromise) as any,\r\n }\r\n}\r\n"],"names":["APIError","findConfigBySlug","slug","enities","find","entity","findEntityWithConfig","args","collectionSlug","globalSlug","id","locale","overrideAccess","req","payload","config","isGlobal","entityConfig","globals","collections","docPromise","findGlobal","depth","fallbackLocale","undefined","findByID","collection","doc"],"mappings":"AAQA,SAASA,QAAQ,QAAQ,UAAS;AAalC,MAAMC,mBAAmB,CACvBC,MACAC,UACGA,QAAQC,IAAI,CAAC,CAACC,SAAWA,OAAOH,IAAI,KAAKA;AAE9C,OAAO,MAAMI,uBAAuB,OAClCC;IAKA,MAAM,EAAEC,cAAc,EAAEC,UAAU,EAAEC,EAAE,EAAEC,MAAM,EAAEC,cAAc,EAAEC,GAAG,EAAE,GAAGN;IAExE,IAAI,CAACC,kBAAkB,CAACC,YAAY,MAAM,IAAIT,SAAS,eAAe;IAEtE,MAAM,EAAEc,OAAO,EAAE,GAAGD;IAEpB,MAAM,EAAEE,MAAM,EAAE,GAAGD;IAEnB,MAAME,WAAW,CAAC,CAACP;IAEnB,IAAI,CAACO,YAAY,CAACN,IAAI,MAAM,IAAIV,SAAS,eAAe;IAExD,MAAMiB,eAAeD,WACjBf,iBAAiBQ,YAAYM,OAAOG,OAAO,IAC3CjB,iBAAiBO,gBAA0BO,OAAOI,WAAW;IAEjE,IAAI,CAACF,cAAc,MAAM,IAAIjB,SAAS,eAAe;IAErD,MAAMoB,aAAaJ,WACfF,QAAQO,UAAU,CAAC;QACjBC,OAAO;QACPC,gBAAgBC;QAChBb,QAAQA;QACRC;QACAC;QACAX,MAAMK,KAAKE,UAAU;IACvB,KACAK,QAAQW,QAAQ,CAAC;QACfC,YAAYlB;QACZc,OAAO;QACPC,gBAAgBC;QAChBd,IAAIA;QACJC,QAAQA;QACRC;QACAC;IACF;IAEJ,OAAO;QACLE,QAAQE;QACRU,KAAM,MAAMP;IACd;AACF,EAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type Payload, type PayloadRequest } from 'payload';
|
|
2
|
-
import type { TranslateArgs, TranslateResult } from './types';
|
|
3
|
-
export type TranslateOperationArgs = ({
|
|
4
|
-
payload: Payload;
|
|
5
|
-
} | {
|
|
6
|
-
req: PayloadRequest;
|
|
7
|
-
}) & TranslateArgs;
|
|
8
|
-
export declare const translateOperation: (args: TranslateOperationArgs) => Promise<TranslateResult>;
|
|
9
|
-
//# sourceMappingURL=operation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/translate/operation.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAKrE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAA;AAG/E,MAAM,MAAM,sBAAsB,GAAG,CACjC;IACE,OAAO,EAAE,OAAO,CAAA;CACjB,GACD;IACE,GAAG,EAAE,cAAc,CAAA;CACpB,CACJ,GACC,aAAa,CAAA;AAEf,eAAO,MAAM,kBAAkB,GAAU,MAAM,sBAAsB,6BA4FpE,CAAA"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import he from 'he';
|
|
2
|
-
import { APIError } from 'payload';
|
|
3
|
-
import { findEntityWithConfig } from './findEntityWithConfig';
|
|
4
|
-
import { traverseFields } from './traverseFields';
|
|
5
|
-
import { updateEntity } from './updateEntity';
|
|
6
|
-
export const translateOperation = async (args)=>{
|
|
7
|
-
const req = 'req' in args ? args.req : {
|
|
8
|
-
payload: args.payload
|
|
9
|
-
};
|
|
10
|
-
const { collectionSlug, globalSlug, id, locale, localeFrom, overrideAccess } = args;
|
|
11
|
-
const { config, doc: dataFrom } = await findEntityWithConfig({
|
|
12
|
-
collectionSlug,
|
|
13
|
-
globalSlug,
|
|
14
|
-
id,
|
|
15
|
-
locale: localeFrom,
|
|
16
|
-
req
|
|
17
|
-
});
|
|
18
|
-
const resolver = (req.payload.config.custom?.translator?.resolvers ?? []).find((each)=>each.key === args.resolver);
|
|
19
|
-
if (!resolver) throw new APIError(`Resolver with the key ${args.resolver} was not found`);
|
|
20
|
-
const valuesToTranslate = [];
|
|
21
|
-
let translatedData = args.data;
|
|
22
|
-
if (!translatedData) {
|
|
23
|
-
const { doc } = await findEntityWithConfig({
|
|
24
|
-
collectionSlug,
|
|
25
|
-
globalSlug,
|
|
26
|
-
id,
|
|
27
|
-
locale,
|
|
28
|
-
overrideAccess,
|
|
29
|
-
req
|
|
30
|
-
});
|
|
31
|
-
translatedData = doc;
|
|
32
|
-
}
|
|
33
|
-
traverseFields({
|
|
34
|
-
dataFrom,
|
|
35
|
-
emptyOnly: args.emptyOnly,
|
|
36
|
-
fields: config.fields,
|
|
37
|
-
translatedData,
|
|
38
|
-
valuesToTranslate,
|
|
39
|
-
_options: req.payload.config.custom?.translator?._options
|
|
40
|
-
});
|
|
41
|
-
const resolveResult = await resolver.resolve({
|
|
42
|
-
localeFrom: args.localeFrom,
|
|
43
|
-
localeTo: args.locale,
|
|
44
|
-
req,
|
|
45
|
-
texts: valuesToTranslate.map((each)=>each.value)
|
|
46
|
-
});
|
|
47
|
-
let result;
|
|
48
|
-
if (!resolveResult.success) {
|
|
49
|
-
result = {
|
|
50
|
-
success: false
|
|
51
|
-
};
|
|
52
|
-
} else {
|
|
53
|
-
resolveResult.translatedTexts.forEach((translated, index)=>{
|
|
54
|
-
const formattedValue = he.decode(translated);
|
|
55
|
-
valuesToTranslate[index].onTranslate(formattedValue);
|
|
56
|
-
});
|
|
57
|
-
if (args.update) {
|
|
58
|
-
await updateEntity({
|
|
59
|
-
collectionSlug,
|
|
60
|
-
data: translatedData,
|
|
61
|
-
depth: 0,
|
|
62
|
-
globalSlug,
|
|
63
|
-
id,
|
|
64
|
-
locale,
|
|
65
|
-
overrideAccess,
|
|
66
|
-
req
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
result = {
|
|
70
|
-
success: true,
|
|
71
|
-
translatedData,
|
|
72
|
-
dataFrom
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
return result;
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
//# sourceMappingURL=operation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translate/operation.ts"],"sourcesContent":["import he from 'he'\r\nimport { APIError, type Payload, type PayloadRequest } from 'payload'\r\n\r\nimport type { TranslateResolver } from '../resolvers/types'\r\nimport { findEntityWithConfig } from './findEntityWithConfig'\r\nimport { traverseFields } from './traverseFields'\r\nimport type { TranslateArgs, TranslateResult, ValueToTranslate } from './types'\r\nimport { updateEntity } from './updateEntity'\r\n\r\nexport type TranslateOperationArgs = (\r\n | {\r\n payload: Payload\r\n }\r\n | {\r\n req: PayloadRequest\r\n }\r\n) &\r\n TranslateArgs\r\n\r\nexport const translateOperation = async (args: TranslateOperationArgs) => {\r\n const req: PayloadRequest =\r\n 'req' in args\r\n ? args.req\r\n : ({\r\n payload: args.payload,\r\n } as PayloadRequest)\r\n\r\n const { collectionSlug, globalSlug, id, locale, localeFrom, overrideAccess } = args\r\n\r\n const { config, doc: dataFrom } = await findEntityWithConfig({\r\n collectionSlug,\r\n globalSlug,\r\n id,\r\n locale: localeFrom,\r\n req,\r\n })\r\n\r\n const resolver = (\r\n (req.payload.config.custom?.translator?.resolvers as TranslateResolver[]) ?? []\r\n ).find((each) => each.key === args.resolver)\r\n\r\n if (!resolver) throw new APIError(`Resolver with the key ${args.resolver} was not found`)\r\n\r\n const valuesToTranslate: ValueToTranslate[] = []\r\n\r\n let translatedData = args.data\r\n\r\n if (!translatedData) {\r\n const { doc } = await findEntityWithConfig({\r\n collectionSlug,\r\n globalSlug,\r\n id,\r\n locale,\r\n overrideAccess,\r\n req,\r\n })\r\n\r\n translatedData = doc\r\n }\r\n\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly: args.emptyOnly,\r\n fields: config.fields,\r\n translatedData,\r\n valuesToTranslate,\r\n\r\n _options: req.payload.config.custom?.translator?._options\r\n })\r\n\r\n const resolveResult = await resolver.resolve({\r\n localeFrom: args.localeFrom,\r\n localeTo: args.locale,\r\n req,\r\n texts: valuesToTranslate.map((each) => each.value),\r\n })\r\n\r\n let result: TranslateResult\r\n\r\n if (!resolveResult.success) {\r\n result = {\r\n success: false,\r\n }\r\n } else {\r\n resolveResult.translatedTexts.forEach((translated, index) => {\r\n const formattedValue = he.decode(translated)\r\n\r\n valuesToTranslate[index].onTranslate(formattedValue)\r\n })\r\n\r\n if (args.update) {\r\n await updateEntity({\r\n collectionSlug,\r\n data: translatedData,\r\n depth: 0,\r\n globalSlug,\r\n id,\r\n locale,\r\n overrideAccess,\r\n req,\r\n })\r\n }\r\n\r\n result = {\r\n success: true,\r\n translatedData,\r\n dataFrom\r\n }\r\n }\r\n\r\n return result\r\n}\r\n"],"names":["he","APIError","findEntityWithConfig","traverseFields","updateEntity","translateOperation","args","req","payload","collectionSlug","globalSlug","id","locale","localeFrom","overrideAccess","config","doc","dataFrom","resolver","custom","translator","resolvers","find","each","key","valuesToTranslate","translatedData","data","emptyOnly","fields","_options","resolveResult","resolve","localeTo","texts","map","value","result","success","translatedTexts","forEach","translated","index","formattedValue","decode","onTranslate","update","depth"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,SAASC,QAAQ,QAA2C,UAAS;AAGrE,SAASC,oBAAoB,QAAQ,yBAAwB;AAC7D,SAASC,cAAc,QAAQ,mBAAkB;AAEjD,SAASC,YAAY,QAAQ,iBAAgB;AAY7C,OAAO,MAAMC,qBAAqB,OAAOC;IACvC,MAAMC,MACJ,SAASD,OACLA,KAAKC,GAAG,GACP;QACCC,SAASF,KAAKE,OAAO;IACvB;IAEN,MAAM,EAAEC,cAAc,EAAEC,UAAU,EAAEC,EAAE,EAAEC,MAAM,EAAEC,UAAU,EAAEC,cAAc,EAAE,GAAGR;IAE/E,MAAM,EAAES,MAAM,EAAEC,KAAKC,QAAQ,EAAE,GAAG,MAAMf,qBAAqB;QAC3DO;QACAC;QACAC;QACAC,QAAQC;QACRN;IACF;IAEA,MAAMW,WAAW,AACf,CAAA,AAACX,IAAIC,OAAO,CAACO,MAAM,CAACI,MAAM,EAAEC,YAAYC,aAAqC,EAAE,AAAD,EAC9EC,IAAI,CAAC,CAACC,OAASA,KAAKC,GAAG,KAAKlB,KAAKY,QAAQ;IAE3C,IAAI,CAACA,UAAU,MAAM,IAAIjB,SAAS,CAAC,sBAAsB,EAAEK,KAAKY,QAAQ,CAAC,cAAc,CAAC;IAExF,MAAMO,oBAAwC,EAAE;IAEhD,IAAIC,iBAAiBpB,KAAKqB,IAAI;IAE9B,IAAI,CAACD,gBAAgB;QACnB,MAAM,EAAEV,GAAG,EAAE,GAAG,MAAMd,qBAAqB;YACzCO;YACAC;YACAC;YACAC;YACAE;YACAP;QACF;QAEAmB,iBAAiBV;IACnB;IAEAb,eAAe;QACbc;QACAW,WAAWtB,KAAKsB,SAAS;QACzBC,QAAQd,OAAOc,MAAM;QACrBH;QACAD;QAEAK,UAAUvB,IAAIC,OAAO,CAACO,MAAM,CAACI,MAAM,EAAEC,YAAYU;IACnD;IAEA,MAAMC,gBAAgB,MAAMb,SAASc,OAAO,CAAC;QAC3CnB,YAAYP,KAAKO,UAAU;QAC3BoB,UAAU3B,KAAKM,MAAM;QACrBL;QACA2B,OAAOT,kBAAkBU,GAAG,CAAC,CAACZ,OAASA,KAAKa,KAAK;IACnD;IAEA,IAAIC;IAEJ,IAAI,CAACN,cAAcO,OAAO,EAAE;QAC1BD,SAAS;YACPC,SAAS;QACX;IACF,OAAO;QACLP,cAAcQ,eAAe,CAACC,OAAO,CAAC,CAACC,YAAYC;YACjD,MAAMC,iBAAiB3C,GAAG4C,MAAM,CAACH;YAEjChB,iBAAiB,CAACiB,MAAM,CAACG,WAAW,CAACF;QACvC;QAEA,IAAIrC,KAAKwC,MAAM,EAAE;YACf,MAAM1C,aAAa;gBACjBK;gBACAkB,MAAMD;gBACNqB,OAAO;gBACPrC;gBACAC;gBACAC;gBACAE;gBACAP;YACF;QACF;QAEA8B,SAAS;YACPC,SAAS;YACTZ;YACAT;QACF;IACF;IAEA,OAAOoB;AACT,EAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Field } from 'payload';
|
|
2
|
-
import { traverseRichText } from './traverseRichText';
|
|
3
|
-
import type { ValueToTranslate } from './types';
|
|
4
|
-
export declare const traverseFields: ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate, _options }: {
|
|
5
|
-
dataFrom: Record<string, unknown>;
|
|
6
|
-
emptyOnly?: boolean;
|
|
7
|
-
fields: Field[];
|
|
8
|
-
localizedParent?: boolean;
|
|
9
|
-
siblingDataFrom?: Record<string, unknown>;
|
|
10
|
-
siblingDataTranslated?: Record<string, unknown>;
|
|
11
|
-
translatedData: Record<string, unknown>;
|
|
12
|
-
valuesToTranslate: ValueToTranslate[];
|
|
13
|
-
_options?: {
|
|
14
|
-
additionalTraverseRichText?: Parameters<typeof traverseRichText>[0]["additionalTraverseRichText"];
|
|
15
|
-
};
|
|
16
|
-
}) => void;
|
|
17
|
-
//# sourceMappingURL=traverseFields.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/translate/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,eAAO,MAAM,cAAc,GAAI,uIAWG;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAEtC,QAAQ,CAAC,EAAE;QACT,0BAA0B,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAA;KAClG,CAAA;CACF,SAuSA,CAAA"}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import ObjectID from 'bson-objectid';
|
|
2
|
-
import { tabHasName } from 'payload/shared';
|
|
3
|
-
import { isEmpty } from '../utils/isEmpty';
|
|
4
|
-
import { traverseRichText } from './traverseRichText';
|
|
5
|
-
export const traverseFields = ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate, _options })=>{
|
|
6
|
-
const { additionalTraverseRichText } = _options ?? {};
|
|
7
|
-
siblingDataFrom = siblingDataFrom ?? dataFrom;
|
|
8
|
-
siblingDataTranslated = siblingDataTranslated ?? translatedData;
|
|
9
|
-
for (const field of fields){
|
|
10
|
-
switch(field.type){
|
|
11
|
-
case 'tabs':
|
|
12
|
-
for (const tab of field.tabs){
|
|
13
|
-
const hasName = tabHasName(tab);
|
|
14
|
-
const tabDataFrom = hasName ? siblingDataFrom[tab.name] : siblingDataFrom;
|
|
15
|
-
if (!tabDataFrom) return;
|
|
16
|
-
let tabDataTranslated;
|
|
17
|
-
if (hasName) {
|
|
18
|
-
if (!siblingDataTranslated[tab.name]) siblingDataTranslated[tab.name] = {};
|
|
19
|
-
tabDataTranslated = siblingDataTranslated[tab.name];
|
|
20
|
-
} else {
|
|
21
|
-
tabDataTranslated = siblingDataTranslated;
|
|
22
|
-
}
|
|
23
|
-
traverseFields({
|
|
24
|
-
dataFrom,
|
|
25
|
-
emptyOnly,
|
|
26
|
-
fields: tab.fields,
|
|
27
|
-
localizedParent: localizedParent ?? tab.localized,
|
|
28
|
-
siblingDataFrom: tabDataFrom,
|
|
29
|
-
siblingDataTranslated: tabDataTranslated,
|
|
30
|
-
translatedData,
|
|
31
|
-
valuesToTranslate,
|
|
32
|
-
_options
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
break;
|
|
36
|
-
case 'group':
|
|
37
|
-
{
|
|
38
|
-
if (!('name' in field)) break;
|
|
39
|
-
const groupDataFrom = siblingDataFrom[field.name];
|
|
40
|
-
if (!groupDataFrom) break;
|
|
41
|
-
if (!siblingDataTranslated[field.name]) siblingDataTranslated[field.name] = {};
|
|
42
|
-
const groupDataTranslated = siblingDataTranslated[field.name];
|
|
43
|
-
traverseFields({
|
|
44
|
-
dataFrom,
|
|
45
|
-
emptyOnly,
|
|
46
|
-
fields: field.fields,
|
|
47
|
-
localizedParent: localizedParent ?? field.localized,
|
|
48
|
-
siblingDataFrom: groupDataFrom,
|
|
49
|
-
siblingDataTranslated: groupDataTranslated,
|
|
50
|
-
translatedData,
|
|
51
|
-
valuesToTranslate,
|
|
52
|
-
_options
|
|
53
|
-
});
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
case 'array':
|
|
57
|
-
{
|
|
58
|
-
const arrayDataFrom = siblingDataFrom[field.name];
|
|
59
|
-
if (isEmpty(arrayDataFrom)) break;
|
|
60
|
-
if (!siblingDataTranslated[field.name]) siblingDataTranslated[field.name] = [];
|
|
61
|
-
let arrayDataTranslated = siblingDataTranslated[field.name];
|
|
62
|
-
if (field.localized || localizedParent) {
|
|
63
|
-
if (arrayDataTranslated.length > 0 && emptyOnly) break;
|
|
64
|
-
arrayDataTranslated = arrayDataFrom.map(()=>({
|
|
65
|
-
id: ObjectID().toHexString()
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
arrayDataTranslated.forEach((item, index)=>{
|
|
69
|
-
traverseFields({
|
|
70
|
-
dataFrom,
|
|
71
|
-
emptyOnly,
|
|
72
|
-
fields: field.fields,
|
|
73
|
-
localizedParent: localizedParent ?? field.localized,
|
|
74
|
-
siblingDataFrom: arrayDataFrom[index],
|
|
75
|
-
siblingDataTranslated: item,
|
|
76
|
-
translatedData,
|
|
77
|
-
valuesToTranslate,
|
|
78
|
-
_options
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
siblingDataTranslated[field.name] = arrayDataTranslated;
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
case 'blocks':
|
|
85
|
-
{
|
|
86
|
-
const blocksDataFrom = siblingDataFrom[field.name];
|
|
87
|
-
if (isEmpty(blocksDataFrom)) break;
|
|
88
|
-
if (!siblingDataTranslated[field.name]) siblingDataTranslated[field.name] = [];
|
|
89
|
-
let blocksDataTranslated = siblingDataTranslated[field.name];
|
|
90
|
-
if (field.localized || localizedParent) {
|
|
91
|
-
if (blocksDataTranslated.length > 0 && emptyOnly) break;
|
|
92
|
-
blocksDataTranslated = blocksDataFrom.map(({ blockType })=>({
|
|
93
|
-
blockType,
|
|
94
|
-
id: ObjectID().toHexString()
|
|
95
|
-
}));
|
|
96
|
-
}
|
|
97
|
-
blocksDataTranslated.forEach((item, index)=>{
|
|
98
|
-
const block = field.blocks.find((each)=>each.slug === item.blockType);
|
|
99
|
-
if (!block) return;
|
|
100
|
-
traverseFields({
|
|
101
|
-
dataFrom,
|
|
102
|
-
emptyOnly,
|
|
103
|
-
fields: block.fields,
|
|
104
|
-
localizedParent: localizedParent ?? field.localized,
|
|
105
|
-
siblingDataFrom: blocksDataFrom[index],
|
|
106
|
-
siblingDataTranslated: item,
|
|
107
|
-
translatedData,
|
|
108
|
-
valuesToTranslate,
|
|
109
|
-
_options
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
siblingDataTranslated[field.name] = blocksDataTranslated;
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
case 'collapsible':
|
|
116
|
-
case 'row':
|
|
117
|
-
traverseFields({
|
|
118
|
-
dataFrom,
|
|
119
|
-
emptyOnly,
|
|
120
|
-
fields: field.fields,
|
|
121
|
-
localizedParent,
|
|
122
|
-
siblingDataFrom,
|
|
123
|
-
siblingDataTranslated,
|
|
124
|
-
translatedData,
|
|
125
|
-
valuesToTranslate,
|
|
126
|
-
_options
|
|
127
|
-
});
|
|
128
|
-
break;
|
|
129
|
-
// long ass cases here we have
|
|
130
|
-
case 'date':
|
|
131
|
-
case 'checkbox':
|
|
132
|
-
case 'code':
|
|
133
|
-
case 'email':
|
|
134
|
-
case 'number':
|
|
135
|
-
case 'point':
|
|
136
|
-
case 'radio':
|
|
137
|
-
case 'relationship':
|
|
138
|
-
case 'select':
|
|
139
|
-
case 'upload':
|
|
140
|
-
siblingDataTranslated[field.name] = siblingDataFrom[field.name];
|
|
141
|
-
break;
|
|
142
|
-
case 'json':
|
|
143
|
-
if (!(field.localized || localizedParent)) break;
|
|
144
|
-
if (isEmpty(siblingDataFrom[field.name])) break;
|
|
145
|
-
if (emptyOnly && siblingDataTranslated[field.name]) break;
|
|
146
|
-
const jsonDataFrom = siblingDataFrom[field.name];
|
|
147
|
-
const jsonDataTranslated = JSON.parse(JSON.stringify(jsonDataFrom));
|
|
148
|
-
siblingDataTranslated[field.name] = jsonDataTranslated;
|
|
149
|
-
function traverseObject(obj) {
|
|
150
|
-
if (!obj || typeof obj !== 'object') return;
|
|
151
|
-
for(const key in obj){
|
|
152
|
-
const value = obj[key];
|
|
153
|
-
if (typeof value === 'string' && value.trim()) {
|
|
154
|
-
((parentObj, parentKey, parentValue)=>{
|
|
155
|
-
valuesToTranslate.push({
|
|
156
|
-
onTranslate: (translated)=>{
|
|
157
|
-
parentObj[parentKey] = translated;
|
|
158
|
-
},
|
|
159
|
-
value: parentValue
|
|
160
|
-
});
|
|
161
|
-
})(obj, key, value);
|
|
162
|
-
} else if (typeof value === 'object' && value !== null) {
|
|
163
|
-
traverseObject(value);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
traverseObject(jsonDataTranslated);
|
|
168
|
-
break;
|
|
169
|
-
case 'text':
|
|
170
|
-
case 'textarea':
|
|
171
|
-
if (field.custom && typeof field.custom === 'object' && field.custom.translatorSkip) break;
|
|
172
|
-
if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;
|
|
173
|
-
if (emptyOnly && siblingDataTranslated[field.name]) break;
|
|
174
|
-
// do not translate the block ID or admin-facing label
|
|
175
|
-
if (field.name === 'blockName' || field.name === 'id') {
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
valuesToTranslate.push({
|
|
179
|
-
onTranslate: (translated)=>{
|
|
180
|
-
siblingDataTranslated[field.name] = translated;
|
|
181
|
-
},
|
|
182
|
-
value: siblingDataFrom[field.name]
|
|
183
|
-
});
|
|
184
|
-
break;
|
|
185
|
-
case 'richText':
|
|
186
|
-
{
|
|
187
|
-
if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;
|
|
188
|
-
if (emptyOnly && siblingDataTranslated[field.name]) break;
|
|
189
|
-
const richTextDataFrom = siblingDataFrom[field.name];
|
|
190
|
-
siblingDataTranslated[field.name] = richTextDataFrom;
|
|
191
|
-
if (!richTextDataFrom) break;
|
|
192
|
-
const isSlate = Array.isArray(richTextDataFrom);
|
|
193
|
-
const isLexical = 'root' in richTextDataFrom;
|
|
194
|
-
if (!isSlate && !isLexical) break;
|
|
195
|
-
if (isLexical) {
|
|
196
|
-
const root = siblingDataTranslated[field.name]?.root;
|
|
197
|
-
if (root) traverseRichText({
|
|
198
|
-
onText: (siblingData, attribute = 'text')=>{
|
|
199
|
-
valuesToTranslate.push({
|
|
200
|
-
onTranslate: (translated)=>{
|
|
201
|
-
siblingData[attribute] = translated;
|
|
202
|
-
},
|
|
203
|
-
value: siblingData[attribute]
|
|
204
|
-
});
|
|
205
|
-
},
|
|
206
|
-
root,
|
|
207
|
-
additionalTraverseRichText
|
|
208
|
-
});
|
|
209
|
-
} else {
|
|
210
|
-
for (const root of siblingDataTranslated[field.name]){
|
|
211
|
-
traverseRichText({
|
|
212
|
-
onText: (siblingData, attribute = 'text')=>{
|
|
213
|
-
valuesToTranslate.push({
|
|
214
|
-
onTranslate: (translated)=>{
|
|
215
|
-
siblingData[attribute] = translated;
|
|
216
|
-
},
|
|
217
|
-
value: siblingData[attribute]
|
|
218
|
-
});
|
|
219
|
-
},
|
|
220
|
-
root: root,
|
|
221
|
-
additionalTraverseRichText
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
default:
|
|
228
|
-
break;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
//# sourceMappingURL=traverseFields.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translate/traverseFields.ts"],"sourcesContent":["import ObjectID from 'bson-objectid'\r\nimport type { Field } from 'payload'\r\nimport { tabHasName } from 'payload/shared'\r\n\r\nimport { isEmpty } from '../utils/isEmpty'\r\nimport { traverseRichText } from './traverseRichText'\r\nimport type { ValueToTranslate } from './types'\r\n\r\nexport const traverseFields = ({\r\n dataFrom,\r\n emptyOnly,\r\n fields,\r\n localizedParent,\r\n siblingDataFrom,\r\n siblingDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\r\n\r\n _options\r\n }: {\r\n dataFrom: Record<string, unknown>\r\n emptyOnly?: boolean\r\n fields: Field[]\r\n localizedParent?: boolean\r\n siblingDataFrom?: Record<string, unknown>\r\n siblingDataTranslated?: Record<string, unknown>\r\n translatedData: Record<string, unknown>\r\n valuesToTranslate: ValueToTranslate[],\r\n\r\n _options?: {\r\n additionalTraverseRichText?: Parameters<typeof traverseRichText>[0]['additionalTraverseRichText']\r\n }\r\n}) => {\r\n const { additionalTraverseRichText } = _options ?? {}\r\n siblingDataFrom = siblingDataFrom ?? dataFrom\r\n siblingDataTranslated = siblingDataTranslated ?? translatedData\r\n\r\n for (const field of fields) {\r\n switch (field.type) {\r\n case 'tabs':\r\n for (const tab of field.tabs) {\r\n const hasName = tabHasName(tab)\r\n\r\n const tabDataFrom = hasName\r\n ? (siblingDataFrom[tab.name] as Record<string, unknown>)\r\n : siblingDataFrom\r\n\r\n if (!tabDataFrom) return\r\n\r\n let tabDataTranslated: Record<string, unknown>\r\n\r\n if (hasName) {\r\n if (!siblingDataTranslated[tab.name])\r\n siblingDataTranslated[tab.name] = {}\r\n\r\n tabDataTranslated = siblingDataTranslated[tab.name] as Record<string, unknown>\r\n } else {\r\n tabDataTranslated = siblingDataTranslated\r\n }\r\n\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly,\r\n fields: tab.fields,\r\n localizedParent: localizedParent ?? tab.localized,\r\n siblingDataFrom: tabDataFrom,\r\n siblingDataTranslated: tabDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\r\n _options\r\n })\r\n }\r\n\r\n break\r\n\r\n case 'group': {\r\n if (!('name' in field)) break\r\n\r\n const groupDataFrom = siblingDataFrom[field.name] as Record<string, unknown>\r\n\r\n if (!groupDataFrom) break\r\n\r\n if (!siblingDataTranslated[field.name])\r\n siblingDataTranslated[field.name] = {}\r\n\r\n const groupDataTranslated = siblingDataTranslated[field.name] as Record<string, unknown>\r\n\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly,\r\n fields: field.fields,\r\n localizedParent: localizedParent ?? field.localized,\r\n siblingDataFrom: groupDataFrom,\r\n siblingDataTranslated: groupDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\r\n _options\r\n })\r\n\r\n break\r\n }\r\n\r\n case 'array': {\r\n const arrayDataFrom = siblingDataFrom[field.name] as {\r\n id: string\r\n }[]\r\n\r\n if (isEmpty(arrayDataFrom)) break\r\n\r\n if (!siblingDataTranslated[field.name])\r\n siblingDataTranslated[field.name] = []\r\n\r\n let arrayDataTranslated = siblingDataTranslated[field.name] as { id: string }[]\r\n\r\n if (field.localized || localizedParent) {\r\n if (arrayDataTranslated.length > 0 && emptyOnly) break\r\n\r\n arrayDataTranslated = arrayDataFrom.map(() => ({\r\n id: ObjectID().toHexString()\r\n }))\r\n }\r\n\r\n arrayDataTranslated.forEach((item, index) => {\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly,\r\n fields: field.fields,\r\n localizedParent: localizedParent ?? field.localized,\r\n siblingDataFrom: arrayDataFrom[index],\r\n siblingDataTranslated: item,\r\n translatedData,\r\n valuesToTranslate,\r\n _options\r\n })\r\n })\r\n\r\n siblingDataTranslated[field.name] = arrayDataTranslated\r\n\r\n break\r\n }\r\n\r\n case 'blocks': {\r\n const blocksDataFrom = siblingDataFrom[field.name] as {\r\n blockType: string\r\n id: string\r\n }[]\r\n\r\n if (isEmpty(blocksDataFrom)) break\r\n\r\n if (!siblingDataTranslated[field.name])\r\n siblingDataTranslated[field.name] = []\r\n\r\n let blocksDataTranslated = siblingDataTranslated[field.name] as { blockType: string; id: string }[]\r\n\r\n if (field.localized || localizedParent) {\r\n if (blocksDataTranslated.length > 0 && emptyOnly) break\r\n\r\n blocksDataTranslated = blocksDataFrom.map(({ blockType }) => ({\r\n blockType,\r\n id: ObjectID().toHexString()\r\n }))\r\n }\r\n\r\n blocksDataTranslated.forEach((item, index) => {\r\n const block = field.blocks.find((each) => each.slug === item.blockType)\r\n\r\n if (!block) return\r\n\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly,\r\n fields: block.fields,\r\n localizedParent: localizedParent ?? field.localized,\r\n siblingDataFrom: blocksDataFrom[index],\r\n siblingDataTranslated: item,\r\n translatedData,\r\n valuesToTranslate,\r\n _options\r\n })\r\n })\r\n\r\n siblingDataTranslated[field.name] = blocksDataTranslated\r\n\r\n break\r\n }\r\n\r\n case 'collapsible':\r\n case 'row':\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly,\r\n fields: field.fields,\r\n localizedParent,\r\n siblingDataFrom,\r\n siblingDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\r\n _options\r\n })\r\n break\r\n\r\n // long ass cases here we have\r\n case 'date':\r\n case 'checkbox':\r\n case 'code':\r\n case 'email':\r\n case 'number':\r\n case 'point':\r\n case 'radio':\r\n case 'relationship':\r\n case 'select':\r\n case 'upload':\r\n siblingDataTranslated[field.name] = siblingDataFrom[field.name]\r\n break\r\n\r\n case 'json':\r\n if (!(field.localized || localizedParent)) break\r\n if (isEmpty(siblingDataFrom[field.name])) break\r\n if (emptyOnly && siblingDataTranslated[field.name]) break\r\n\r\n const jsonDataFrom = siblingDataFrom[field.name]\r\n const jsonDataTranslated = JSON.parse(JSON.stringify(jsonDataFrom))\r\n siblingDataTranslated[field.name] = jsonDataTranslated\r\n\r\n function traverseObject(obj: Record<string, any>) {\r\n if (!obj || typeof obj !== 'object') return\r\n\r\n for (const key in obj) {\r\n const value = obj[key]\r\n\r\n if (typeof value === 'string' && value.trim()) {\r\n ((parentObj, parentKey, parentValue) => {\r\n valuesToTranslate.push({\r\n onTranslate: (translated) => {\r\n parentObj[parentKey] = translated\r\n },\r\n value: parentValue\r\n })\r\n })(obj, key, value)\r\n } else if (typeof value === 'object' && value !== null) {\r\n traverseObject(value)\r\n }\r\n }\r\n }\r\n\r\n traverseObject(jsonDataTranslated)\r\n break\r\n\r\n case 'text':\r\n case 'textarea':\r\n if (field.custom && typeof field.custom === 'object' && field.custom.translatorSkip) break\r\n\r\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break\r\n if (emptyOnly && siblingDataTranslated[field.name]) break\r\n\r\n // do not translate the block ID or admin-facing label\r\n if (field.name === 'blockName' || field.name === 'id') {\r\n break\r\n }\r\n\r\n valuesToTranslate.push({\r\n onTranslate: (translated: string) => {\r\n siblingDataTranslated[field.name] = translated\r\n },\r\n value: siblingDataFrom[field.name]\r\n })\r\n break\r\n\r\n case 'richText': {\r\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break\r\n if (emptyOnly && siblingDataTranslated[field.name]) break\r\n\r\n const richTextDataFrom = siblingDataFrom[field.name] as object\r\n\r\n siblingDataTranslated[field.name] = richTextDataFrom\r\n\r\n if (!richTextDataFrom) break\r\n\r\n const isSlate = Array.isArray(richTextDataFrom)\r\n\r\n const isLexical = 'root' in richTextDataFrom\r\n\r\n if (!isSlate && !isLexical) break\r\n\r\n if (isLexical) {\r\n const root = (siblingDataTranslated[field.name] as Record<string, unknown>)\r\n ?.root as Record<string, unknown>\r\n\r\n if (root)\r\n traverseRichText({\r\n onText: (siblingData, attribute = 'text') => {\r\n valuesToTranslate.push({\r\n onTranslate: (translated: string) => {\r\n siblingData[attribute] = translated\r\n },\r\n value: siblingData[attribute]\r\n })\r\n },\r\n root,\r\n\r\n additionalTraverseRichText\r\n })\r\n } else {\r\n for (const root of siblingDataTranslated[field.name] as unknown[]) {\r\n traverseRichText({\r\n onText: (siblingData, attribute = 'text') => {\r\n valuesToTranslate.push({\r\n onTranslate: (translated: string) => {\r\n siblingData[attribute] = translated\r\n },\r\n value: siblingData[attribute]\r\n })\r\n },\r\n root: root as Record<string, unknown>,\r\n\r\n additionalTraverseRichText\r\n })\r\n }\r\n }\r\n\r\n break\r\n }\r\n\r\n default:\r\n break\r\n }\r\n }\r\n}\r\n"],"names":["ObjectID","tabHasName","isEmpty","traverseRichText","traverseFields","dataFrom","emptyOnly","fields","localizedParent","siblingDataFrom","siblingDataTranslated","translatedData","valuesToTranslate","_options","additionalTraverseRichText","field","type","tab","tabs","hasName","tabDataFrom","name","tabDataTranslated","localized","groupDataFrom","groupDataTranslated","arrayDataFrom","arrayDataTranslated","length","map","id","toHexString","forEach","item","index","blocksDataFrom","blocksDataTranslated","blockType","block","blocks","find","each","slug","jsonDataFrom","jsonDataTranslated","JSON","parse","stringify","traverseObject","obj","key","value","trim","parentObj","parentKey","parentValue","push","onTranslate","translated","custom","translatorSkip","richTextDataFrom","isSlate","Array","isArray","isLexical","root","onText","siblingData","attribute"],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
type TraverseRichTextParams = {
|
|
2
|
-
onText: (siblingData: Record<string, unknown>, attribute?: string) => void;
|
|
3
|
-
root: Record<string, unknown>;
|
|
4
|
-
siblingData?: Record<string, unknown>;
|
|
5
|
-
};
|
|
6
|
-
export declare const traverseRichText: ({ onText, root, siblingData, additionalTraverseRichText }: TraverseRichTextParams & {
|
|
7
|
-
additionalTraverseRichText: ((args: TraverseRichTextParams) => void) | undefined;
|
|
8
|
-
}) => void;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=traverseRichText.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"traverseRichText.d.ts","sourceRoot":"","sources":["../../src/translate/traverseRichText.ts"],"names":[],"mappings":"AAAA,KAAK,sBAAsB,GAAG;IAC5B,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,2DAMG,sBAAsB,GAAG;IAC3D,0BAA0B,EAAE,CAAC,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CACjF,SAmBA,CAAA"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export const traverseRichText = ({ onText, root, siblingData, additionalTraverseRichText })=>{
|
|
2
|
-
siblingData = siblingData ?? root;
|
|
3
|
-
if (siblingData.text) {
|
|
4
|
-
onText(siblingData);
|
|
5
|
-
}
|
|
6
|
-
if (Array.isArray(siblingData?.children)) {
|
|
7
|
-
for (const child of siblingData.children){
|
|
8
|
-
traverseRichText({
|
|
9
|
-
onText,
|
|
10
|
-
root,
|
|
11
|
-
siblingData: child,
|
|
12
|
-
additionalTraverseRichText
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
} else {
|
|
16
|
-
additionalTraverseRichText?.({
|
|
17
|
-
onText,
|
|
18
|
-
root,
|
|
19
|
-
siblingData
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=traverseRichText.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translate/traverseRichText.ts"],"sourcesContent":["type TraverseRichTextParams = {\r\n onText: (siblingData: Record<string, unknown>, attribute?: string) => void\r\n root: Record<string, unknown>\r\n siblingData?: Record<string, unknown>\r\n}\r\n\r\nexport const traverseRichText = ({\r\n onText,\r\n root,\r\n siblingData,\r\n\r\n additionalTraverseRichText\r\n }: TraverseRichTextParams & {\r\n additionalTraverseRichText: ((args: TraverseRichTextParams) => void) | undefined\r\n}) => {\r\n siblingData = siblingData ?? root\r\n\r\n if (siblingData.text) {\r\n onText(siblingData)\r\n }\r\n\r\n if (Array.isArray(siblingData?.children)) {\r\n for (const child of siblingData.children) {\r\n traverseRichText({\r\n onText,\r\n root,\r\n siblingData: child,\r\n additionalTraverseRichText\r\n })\r\n }\r\n } else {\r\n additionalTraverseRichText?.({ onText, root, siblingData })\r\n }\r\n}\r\n"],"names":["traverseRichText","onText","root","siblingData","additionalTraverseRichText","text","Array","isArray","children","child"],"mappings":"AAMA,OAAO,MAAMA,mBAAmB,CAAC,EACEC,MAAM,EACNC,IAAI,EACJC,WAAW,EAEXC,0BAA0B,EAG5D;IACCD,cAAcA,eAAeD;IAE7B,IAAIC,YAAYE,IAAI,EAAE;QACpBJ,OAAOE;IACT;IAEA,IAAIG,MAAMC,OAAO,CAACJ,aAAaK,WAAW;QACxC,KAAK,MAAMC,SAASN,YAAYK,QAAQ,CAAE;YACxCR,iBAAiB;gBACfC;gBACAC;gBACAC,aAAaM;gBACbL;YACF;QACF;IACF,OAAO;QACLA,6BAA6B;YAAEH;YAAQC;YAAMC;QAAY;IAC3D;AACF,EAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Doc } from "./findEntityWithConfig";
|
|
2
|
-
export type ValueToTranslate = {
|
|
3
|
-
onTranslate: (translatedValue: any) => void;
|
|
4
|
-
value: any;
|
|
5
|
-
};
|
|
6
|
-
export type TranslateArgs = {
|
|
7
|
-
collectionSlug?: string;
|
|
8
|
-
data?: Record<string, any>;
|
|
9
|
-
emptyOnly?: boolean;
|
|
10
|
-
globalSlug?: string;
|
|
11
|
-
id?: number | string;
|
|
12
|
-
/** active locale */
|
|
13
|
-
locale: string;
|
|
14
|
-
localeFrom: string;
|
|
15
|
-
overrideAccess?: boolean;
|
|
16
|
-
resolver: string;
|
|
17
|
-
update?: boolean;
|
|
18
|
-
};
|
|
19
|
-
export type TranslateResult = {
|
|
20
|
-
success: false;
|
|
21
|
-
} | {
|
|
22
|
-
success: true;
|
|
23
|
-
translatedData: Record<string, any>;
|
|
24
|
-
dataFrom: Doc;
|
|
25
|
-
};
|
|
26
|
-
export type TranslateEndpointArgs = Omit<TranslateArgs, 'update'>;
|
|
27
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/translate/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAA;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,CAAC,eAAe,EAAE,GAAG,KAAK,IAAI,CAAA;IAC3C,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GACvB;IACF,OAAO,EAAE,KAAK,CAAA;CACf,GACG;IACF,OAAO,EAAE,IAAI,CAAA;IACb,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAA;CACd,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA"}
|
package/dist/translate/types.js
DELETED