@justanarthur/payload-plugin-translator 1.3.9 → 1.3.10

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.
@@ -1,8 +1,9 @@
1
1
  import type { TranslateResolver } from './types';
2
+ export type OpenAIMessageExchange = Record<string | number, string>;
2
3
  export type OpenAIPrompt = (args: {
3
4
  localeFrom: string;
4
5
  localeTo: string;
5
- texts: string[];
6
+ texts: OpenAIMessageExchange;
6
7
  }) => string;
7
8
  export type OpenAIResolverConfig = {
8
9
  apiKey: string;
@@ -18,5 +19,5 @@ export type OpenAIResolverConfig = {
18
19
  model?: string;
19
20
  prompt?: OpenAIPrompt;
20
21
  };
21
- export declare const openAIResolver: ({ apiKey, baseUrl, chunkLength, model, prompt, }: OpenAIResolverConfig) => TranslateResolver;
22
+ export declare const openAIResolver: ({ apiKey, baseUrl, chunkLength, model, prompt }: OpenAIResolverConfig) => TranslateResolver;
22
23
  //# sourceMappingURL=openAI.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../src/resolvers/openAI.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,KAAK,MAAM,CAAA;AAEZ,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,CAAA;AAcD,eAAO,MAAM,cAAc,GAAI,kDAM5B,oBAAoB,KAAG,iBAkHzB,CAAA"}
1
+ {"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../src/resolvers/openAI.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAAA;AAEnE,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,qBAAqB,CAAA;CAC7B,KAAK,MAAM,CAAA;AAEZ,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,CAAA;AA6BD,eAAO,MAAM,cAAc,GAAI,iDAMG,oBAAoB,KAAG,iBAyHxD,CAAA"}
@@ -1,6 +1,21 @@
1
1
  import { chunkArray } from '../utils/chunkArray';
2
2
  const defaultPrompt = ({ 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`;
3
+ 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}.
4
+
5
+ **INSTRUCTIONS:**
6
+ 1. **Translate each value**.
7
+ 2. The output **must valid JSON**.
8
+ 3. The output array **must have the exact same number of elements** as the input.
9
+ 4. Preserve the structure of the JSON array.
10
+ 5. Preserve JSON keys without translation.
11
+ 6. The **order of the elements must not change**.
12
+ 7. **Do not include any text, explanations, or remarks outside of the JSON array.**
13
+ 8. **Preserve any special characters, HTML tags, or formatting** present in the original strings.
14
+ 9. **Preserve urls, hrefs, and email addresses** without translation.
15
+ 10. RETURN ONLY THE RAW JSON, DO NOT RESPOND WITH ANYTHING ELSE, AND NO FORMATTING.
16
+
17
+ **INPUT JSON TO TRANSLATE:**
18
+ ${JSON.stringify(texts)}`;
4
19
  };
5
20
  export const openAIResolver = ({ apiKey, baseUrl, chunkLength = 100, model = 'gpt-3.5-turbo', prompt = defaultPrompt })=>{
6
21
  return {
@@ -9,6 +24,10 @@ export const openAIResolver = ({ apiKey, baseUrl, chunkLength = 100, model = 'gp
9
24
  const apiUrl = `${baseUrl || 'https://api.openai.com'}/v1/chat/completions`;
10
25
  try {
11
26
  const response = await Promise.all(chunkArray(texts, chunkLength).map((texts)=>{
27
+ const structuredTexts = texts.reduce((acc, curr, index)=>{
28
+ acc[index + 1] = curr;
29
+ return acc;
30
+ }, {});
12
31
  return fetch(apiUrl, {
13
32
  body: JSON.stringify({
14
33
  messages: [
@@ -16,7 +35,7 @@ export const openAIResolver = ({ apiKey, baseUrl, chunkLength = 100, model = 'gp
16
35
  content: prompt({
17
36
  localeFrom,
18
37
  localeTo,
19
- texts
38
+ texts: structuredTexts
20
39
  }),
21
40
  role: 'user'
22
41
  }
@@ -52,7 +71,8 @@ export const openAIResolver = ({ apiKey, baseUrl, chunkLength = 100, model = 'gp
52
71
  success: false
53
72
  };
54
73
  }
55
- const translatedChunk = JSON.parse(content);
74
+ const translatedStructuredTexts = JSON.parse(content);
75
+ const translatedChunk = Object.values(translatedStructuredTexts);
56
76
  if (!Array.isArray(translatedChunk)) {
57
77
  req.payload.logger.error({
58
78
  data: translatedChunk,
@@ -1 +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 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 `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 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 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 return fetch(apiUrl, {\r\n body: JSON.stringify({\r\n messages: [\r\n {\r\n content: prompt({ 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 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 translatedChunk: string[] = JSON.parse(content)\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","response","Promise","all","map","fetch","body","messages","content","role","headers","Authorization","method","then","res","data","json","ok","payload","logger","info","message","openAIresponse","success","translated","choices","error","translatedChunk","parse","Array","isArray","fullContent","text","chunkData","push","translatedTexts","e","Error","originalErr"],"mappings":"AAAA,SAASA,UAAU,QAAQ,sBAAqB;AAgChD,MAAMC,gBAA8B,CAAC,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,KAAK,EAAE;IAClE,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,OAAO,EACPC,cAAc,GAAG,EACjBC,QAAQ,eAAe,EACvBC,SAASX,aAAa,EACD;IACrB,OAAO;QACLY,KAAK;QACLC,SAAS,OAAO,EAAEZ,UAAU,EAAEC,QAAQ,EAAEY,GAAG,EAAEX,KAAK,EAAE;YAClD,MAAMY,SAAS,GAAGP,WAAW,yBAAyB,oBAAoB,CAAC;YAE3E,IAAI;gBACF,MAAMQ,WAGA,MAAMC,QAAQC,GAAG,CACrBnB,WAAWI,OAAOM,aAAaU,GAAG,CAAC,CAAChB;oBAClC,OAAOiB,MAAML,QAAQ;wBACnBM,MAAMjB,KAAKC,SAAS,CAAC;4BACnBiB,UAAU;gCACR;oCACEC,SAASZ,OAAO;wCAAEV;wCAAYC;wCAAUC;oCAAM;oCAC9CqB,MAAM;gCACR;6BACD;4BACDd;wBACF;wBACAe,SAAS;4BACPC,eAAe,CAAC,OAAO,EAAEnB,QAAQ;4BACjC,gBAAgB;wBAClB;wBACAoB,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;4BACTC,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,CAACO,KAAK,CACtB;wBAGF,OAAO;4BACLH,SAAS;wBACX;oBACF;oBAEA,MAAMI,kBAA4BtC,KAAKuC,KAAK,CAACpB;oBAE7C,IAAI,CAACqB,MAAMC,OAAO,CAACH,kBAAkB;wBACnC5B,IAAImB,OAAO,CAACC,MAAM,CAACO,KAAK,CAAC;4BACvBX,MAAMY;4BACNI,aAAavB;4BACba,SACE;wBACJ;wBAEA,OAAO;4BACLE,SAAS;wBACX;oBACF;oBAEA,KAAK,MAAMS,QAAQL,gBAAiB;wBAClC,IAAIK,QAAQ,OAAOA,SAAS,UAAU;4BACpCjC,IAAImB,OAAO,CAACC,MAAM,CAACO,KAAK,CAAC;gCACvBO,WAAWN;gCACXZ,MAAMiB;gCACND,aAAavB;gCACba,SACE;4BACJ;4BAEA,OAAO;gCACLE,SAAS;4BACX;wBACF;wBAEAC,WAAWU,IAAI,CAACF;oBAClB;gBACF;gBAEA,OAAO;oBACLT,SAAS;oBACTY,iBAAiBX;gBACnB;YACF,EAAE,OAAOY,GAAG;gBACV,IAAIA,aAAaC,OAAO;oBACtBtC,IAAImB,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;wBACtBC,SAAS;wBACTiB,aAAaF,EAAEf,OAAO;oBACxB;gBACF;gBAEA,OAAO;oBAAEE,SAAS;gBAAe;YACnC;QACF;IACF;AACF,EAAC"}
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 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, localeTo, 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","response","Promise","all","map","structuredTexts","reduce","acc","curr","index","fetch","body","messages","content","role","headers","Authorization","method","then","res","data","json","ok","payload","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 +1 @@
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,6BAyFpE,CAAA"}
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,6BA2FpE,CAAA"}
@@ -35,7 +35,8 @@ export const translateOperation = async (args)=>{
35
35
  emptyOnly: args.emptyOnly,
36
36
  fields: config.fields,
37
37
  translatedData,
38
- valuesToTranslate
38
+ valuesToTranslate,
39
+ _options: req.payload.config.custom?.translator?._options
39
40
  });
40
41
  const resolveResult = await resolver.resolve({
41
42
  localeFrom: args.localeFrom,
@@ -1 +1 @@
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\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 }\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","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;IACF;IAEA,MAAMK,gBAAgB,MAAMZ,SAASa,OAAO,CAAC;QAC3ClB,YAAYP,KAAKO,UAAU;QAC3BmB,UAAU1B,KAAKM,MAAM;QACrBL;QACA0B,OAAOR,kBAAkBS,GAAG,CAAC,CAACX,OAASA,KAAKY,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,iBAAiB1C,GAAG2C,MAAM,CAACH;YAEjCf,iBAAiB,CAACgB,MAAM,CAACG,WAAW,CAACF;QACvC;QAEA,IAAIpC,KAAKuC,MAAM,EAAE;YACf,MAAMzC,aAAa;gBACjBK;gBACAkB,MAAMD;gBACNoB,OAAO;gBACPpC;gBACAC;gBACAC;gBACAE;gBACAP;YACF;QACF;QAEA6B,SAAS;YACPC,SAAS;YACTX;QACF;IACF;IAEA,OAAOU;AACT,EAAC"}
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 }\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;QACF;IACF;IAEA,OAAOW;AACT,EAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { Field } from 'payload';
2
+ import { traverseRichText } from './traverseRichText';
2
3
  import type { ValueToTranslate } from './types';
3
- export declare const traverseFields: ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate, }: {
4
+ export declare const traverseFields: ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate, _options: { additionalTraverseRichText }, }: {
4
5
  dataFrom: Record<string, unknown>;
5
6
  emptyOnly?: boolean;
6
7
  fields: Field[];
@@ -9,5 +10,8 @@ export declare const traverseFields: ({ dataFrom, emptyOnly, fields, localizedPa
9
10
  siblingDataTranslated?: Record<string, unknown>;
10
11
  translatedData: Record<string, unknown>;
11
12
  valuesToTranslate: ValueToTranslate[];
13
+ _options?: {
14
+ additionalTraverseRichText?: typeof traverseRichText;
15
+ };
12
16
  }) => void;
13
17
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/translate/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAKpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,eAAO,MAAM,cAAc,GAAI,8HAS5B;IACD,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,CAAA;CACtC,SAkPA,CAAA"}
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,wKAW5B;IACD,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,OAAO,gBAAgB,CAAA;KACrD,CAAA;CACF,SAsPA,CAAA"}
@@ -2,7 +2,7 @@ import ObjectID from 'bson-objectid';
2
2
  import { tabHasName } from 'payload/shared';
3
3
  import { isEmpty } from '../utils/isEmpty';
4
4
  import { traverseRichText } from './traverseRichText';
5
- export const traverseFields = ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate })=>{
5
+ export const traverseFields = ({ dataFrom, emptyOnly, fields, localizedParent, siblingDataFrom, siblingDataTranslated, translatedData, valuesToTranslate, _options: { additionalTraverseRichText } = {} })=>{
6
6
  siblingDataFrom = siblingDataFrom ?? dataFrom;
7
7
  siblingDataTranslated = siblingDataTranslated ?? translatedData;
8
8
  for (const field of fields){
@@ -154,28 +154,30 @@ export const traverseFields = ({ dataFrom, emptyOnly, fields, localizedParent, s
154
154
  if (isLexical) {
155
155
  const root = siblingDataTranslated[field.name]?.root;
156
156
  if (root) traverseRichText({
157
- onText: (siblingData)=>{
157
+ onText: (siblingData, attribute = 'text')=>{
158
158
  valuesToTranslate.push({
159
159
  onTranslate: (translated)=>{
160
- siblingData.text = translated;
160
+ siblingData[attribute] = translated;
161
161
  },
162
- value: siblingData.text
162
+ value: siblingData[attribute]
163
163
  });
164
164
  },
165
- root
165
+ root,
166
+ additionalTraverseRichText
166
167
  });
167
168
  } else {
168
169
  for (const root of siblingDataTranslated[field.name]){
169
170
  traverseRichText({
170
- onText: (siblingData)=>{
171
+ onText: (siblingData, attribute = 'text')=>{
171
172
  valuesToTranslate.push({
172
173
  onTranslate: (translated)=>{
173
- siblingData.text = translated;
174
+ siblingData[attribute] = translated;
174
175
  },
175
- value: siblingData.text
176
+ value: siblingData[attribute]
176
177
  });
177
178
  },
178
- root: root
179
+ root: root,
180
+ additionalTraverseRichText
179
181
  });
180
182
  }
181
183
  }
@@ -1 +1 @@
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 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 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 const tabDataTranslated = hasName\r\n ? ((siblingDataTranslated[tab.name] as Record<string, unknown>) ?? {})\r\n : siblingDataTranslated\r\n\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly,\r\n fields: tab.fields,\r\n localizedParent: tab.localized,\r\n siblingDataFrom: tabDataFrom,\r\n siblingDataTranslated: tabDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\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 const groupDataTranslated =\r\n (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: field.localized,\r\n siblingDataFrom: groupDataFrom,\r\n siblingDataTranslated: groupDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\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 let arrayDataTranslated =\r\n (siblingDataTranslated[field.name] as { id: string }[] | undefined) ?? []\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 })\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 let blocksDataTranslated =\r\n (siblingDataTranslated[field.name] as { blockType: string; id: string }[] | undefined) ??\r\n []\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 })\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 })\r\n break\r\n\r\n // long ass cases here we have\r\n case 'date':\r\n case 'checkbox':\r\n case 'json':\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\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) => {\r\n valuesToTranslate.push({\r\n onTranslate: (translated: string) => {\r\n siblingData.text = translated\r\n },\r\n value: siblingData.text,\r\n })\r\n },\r\n root,\r\n })\r\n } else {\r\n for (const root of siblingDataTranslated[field.name] as unknown[]) {\r\n traverseRichText({\r\n onText: (siblingData) => {\r\n valuesToTranslate.push({\r\n onTranslate: (translated: string) => {\r\n siblingData.text = translated\r\n },\r\n value: siblingData.text,\r\n })\r\n },\r\n root: root as Record<string, unknown>,\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","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","custom","translatorSkip","push","onTranslate","translated","value","richTextDataFrom","isSlate","Array","isArray","isLexical","root","onText","siblingData","text"],"mappings":"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"}
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: { additionalTraverseRichText } = {},\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?: typeof traverseRichText\r\n }\r\n}) => {\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 const tabDataTranslated = hasName\r\n ? ((siblingDataTranslated[tab.name] as Record<string, unknown>) ?? {})\r\n : siblingDataTranslated\r\n\r\n traverseFields({\r\n dataFrom,\r\n emptyOnly,\r\n fields: tab.fields,\r\n localizedParent: tab.localized,\r\n siblingDataFrom: tabDataFrom,\r\n siblingDataTranslated: tabDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\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 const groupDataTranslated =\r\n (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: field.localized,\r\n siblingDataFrom: groupDataFrom,\r\n siblingDataTranslated: groupDataTranslated,\r\n translatedData,\r\n valuesToTranslate,\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 let arrayDataTranslated =\r\n (siblingDataTranslated[field.name] as { id: string }[] | undefined) ?? []\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 })\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 let blocksDataTranslated =\r\n (siblingDataTranslated[field.name] as { blockType: string; id: string }[] | undefined) ??\r\n []\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 })\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 })\r\n break\r\n\r\n // long ass cases here we have\r\n case 'date':\r\n case 'checkbox':\r\n case 'json':\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\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","custom","translatorSkip","push","onTranslate","translated","value","richTextDataFrom","isSlate","Array","isArray","isLexical","root","onText","siblingData","attribute"],"mappings":"AAAA,OAAOA,cAAc,gBAAe;AAEpC,SAASC,UAAU,QAAQ,iBAAgB;AAE3C,SAASC,OAAO,QAAQ,mBAAkB;AAC1C,SAASC,gBAAgB,QAAQ,qBAAoB;AAGrD,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,QAAQ,EACRC,SAAS,EACTC,MAAM,EACNC,eAAe,EACfC,eAAe,EACfC,qBAAqB,EACrBC,cAAc,EACdC,iBAAiB,EAEjBC,UAAU,EAAEC,0BAA0B,EAAE,GAAG,CAAC,CAAC,EAc9C;IACCL,kBAAkBA,mBAAmBJ;IACrCK,wBAAwBA,yBAAyBC;IAEjD,KAAK,MAAMI,SAASR,OAAQ;QAC1B,OAAQQ,MAAMC,IAAI;YAChB,KAAK;gBACH,KAAK,MAAMC,OAAOF,MAAMG,IAAI,CAAE;oBAC5B,MAAMC,UAAUlB,WAAWgB;oBAE3B,MAAMG,cAAcD,UACfV,eAAe,CAACQ,IAAII,IAAI,CAAC,GAC1BZ;oBAEJ,IAAI,CAACW,aAAa;oBAElB,MAAME,oBAAoBH,UACrB,AAACT,qBAAqB,CAACO,IAAII,IAAI,CAAC,IAAgC,CAAC,IAClEX;oBAEJN,eAAe;wBACbC;wBACAC;wBACAC,QAAQU,IAAIV,MAAM;wBAClBC,iBAAiBS,IAAIM,SAAS;wBAC9Bd,iBAAiBW;wBACjBV,uBAAuBY;wBACvBX;wBACAC;oBACF;gBACF;gBAEA;YAEF,KAAK;gBAAS;oBACZ,IAAI,CAAE,CAAA,UAAUG,KAAI,GAAI;oBAExB,MAAMS,gBAAgBf,eAAe,CAACM,MAAMM,IAAI,CAAC;oBAEjD,IAAI,CAACG,eAAe;oBAEpB,MAAMC,sBACJ,AAACf,qBAAqB,CAACK,MAAMM,IAAI,CAAC,IAAgC,CAAC;oBAErEjB,eAAe;wBACbC;wBACAC;wBACAC,QAAQQ,MAAMR,MAAM;wBACpBC,iBAAiBO,MAAMQ,SAAS;wBAChCd,iBAAiBe;wBACjBd,uBAAuBe;wBACvBd;wBACAC;oBACF;oBAEA;gBACF;YAEA,KAAK;gBAAS;oBACZ,MAAMc,gBAAgBjB,eAAe,CAACM,MAAMM,IAAI,CAAC;oBAIjD,IAAInB,QAAQwB,gBAAgB;oBAE5B,IAAIC,sBACF,AAACjB,qBAAqB,CAACK,MAAMM,IAAI,CAAC,IAAqC,EAAE;oBAE3E,IAAIN,MAAMQ,SAAS,IAAIf,iBAAiB;wBACtC,IAAImB,oBAAoBC,MAAM,GAAG,KAAKtB,WAAW;wBAEjDqB,sBAAsBD,cAAcG,GAAG,CAAC,IAAO,CAAA;gCAC7CC,IAAI9B,WAAW+B,WAAW;4BAC5B,CAAA;oBACF;oBAEAJ,oBAAoBK,OAAO,CAAC,CAACC,MAAMC;wBACjC9B,eAAe;4BACbC;4BACAC;4BACAC,QAAQQ,MAAMR,MAAM;4BACpBC,iBAAiBA,mBAAmBO,MAAMQ,SAAS;4BACnDd,iBAAiBiB,aAAa,CAACQ,MAAM;4BACrCxB,uBAAuBuB;4BACvBtB;4BACAC;wBACF;oBACF;oBAEAF,qBAAqB,CAACK,MAAMM,IAAI,CAAC,GAAGM;oBAEpC;gBACF;YAEA,KAAK;gBAAU;oBACb,MAAMQ,iBAAiB1B,eAAe,CAACM,MAAMM,IAAI,CAAC;oBAKlD,IAAInB,QAAQiC,iBAAiB;oBAE7B,IAAIC,uBACF,AAAC1B,qBAAqB,CAACK,MAAMM,IAAI,CAAC,IAClC,EAAE;oBAEJ,IAAIN,MAAMQ,SAAS,IAAIf,iBAAiB;wBACtC,IAAI4B,qBAAqBR,MAAM,GAAG,KAAKtB,WAAW;wBAElD8B,uBAAuBD,eAAeN,GAAG,CAAC,CAAC,EAAEQ,SAAS,EAAE,GAAM,CAAA;gCAC5DA;gCACAP,IAAI9B,WAAW+B,WAAW;4BAC5B,CAAA;oBACF;oBAEAK,qBAAqBJ,OAAO,CAAC,CAACC,MAAMC;wBAClC,MAAMI,QAAQvB,MAAMwB,MAAM,CAACC,IAAI,CAAC,CAACC,OAASA,KAAKC,IAAI,KAAKT,KAAKI,SAAS;wBAEtE,IAAI,CAACC,OAAO;wBAEZlC,eAAe;4BACbC;4BACAC;4BACAC,QAAQ+B,MAAM/B,MAAM;4BACpBC,iBAAiBA,mBAAmBO,MAAMQ,SAAS;4BACnDd,iBAAiB0B,cAAc,CAACD,MAAM;4BACtCxB,uBAAuBuB;4BACvBtB;4BACAC;wBACF;oBACF;oBAEAF,qBAAqB,CAACK,MAAMM,IAAI,CAAC,GAAGe;oBAEpC;gBACF;YAEA,KAAK;YACL,KAAK;gBACHhC,eAAe;oBACbC;oBACAC;oBACAC,QAAQQ,MAAMR,MAAM;oBACpBC;oBACAC;oBACAC;oBACAC;oBACAC;gBACF;gBACA;YAEF,8BAA8B;YAC9B,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACHF,qBAAqB,CAACK,MAAMM,IAAI,CAAC,GAAGZ,eAAe,CAACM,MAAMM,IAAI,CAAC;gBAE/D;YAEF,KAAK;YACL,KAAK;gBACH,IAAIN,MAAM4B,MAAM,IAAI,OAAO5B,MAAM4B,MAAM,KAAK,YAAY5B,MAAM4B,MAAM,CAACC,cAAc,EAAE;gBAErF,IAAI,CAAE7B,CAAAA,MAAMQ,SAAS,IAAIf,eAAc,KAAMN,QAAQO,eAAe,CAACM,MAAMM,IAAI,CAAC,GAAG;gBACnF,IAAIf,aAAaI,qBAAqB,CAACK,MAAMM,IAAI,CAAC,EAAE;gBAEpD,sDAAsD;gBACtD,IAAIN,MAAMM,IAAI,KAAK,eAAeN,MAAMM,IAAI,KAAK,MAAM;oBACrD;gBACF;gBAEAT,kBAAkBiC,IAAI,CAAC;oBACrBC,aAAa,CAACC;wBACZrC,qBAAqB,CAACK,MAAMM,IAAI,CAAC,GAAG0B;oBACtC;oBACAC,OAAOvC,eAAe,CAACM,MAAMM,IAAI,CAAC;gBACpC;gBACA;YAEF,KAAK;gBAAY;oBACf,IAAI,CAAEN,CAAAA,MAAMQ,SAAS,IAAIf,eAAc,KAAMN,QAAQO,eAAe,CAACM,MAAMM,IAAI,CAAC,GAAG;oBACnF,IAAIf,aAAaI,qBAAqB,CAACK,MAAMM,IAAI,CAAC,EAAE;oBAEpD,MAAM4B,mBAAmBxC,eAAe,CAACM,MAAMM,IAAI,CAAC;oBAEpDX,qBAAqB,CAACK,MAAMM,IAAI,CAAC,GAAG4B;oBAEpC,IAAI,CAACA,kBAAkB;oBAEvB,MAAMC,UAAUC,MAAMC,OAAO,CAACH;oBAE9B,MAAMI,YAAY,UAAUJ;oBAE5B,IAAI,CAACC,WAAW,CAACG,WAAW;oBAE5B,IAAIA,WAAW;wBACb,MAAMC,OAAQ5C,qBAAqB,CAACK,MAAMM,IAAI,CAAC,EAC3CiC;wBAEJ,IAAIA,MACFnD,iBAAiB;4BACfoD,QAAQ,CAACC,aAAaC,YAAY,MAAM;gCACtC7C,kBAAkBiC,IAAI,CAAC;oCACrBC,aAAa,CAACC;wCACZS,WAAW,CAACC,UAAU,GAAGV;oCAC3B;oCACAC,OAAOQ,WAAW,CAACC,UAAU;gCAC/B;4BACF;4BACAH;4BAEAxC;wBACF;oBACJ,OAAO;wBACL,KAAK,MAAMwC,QAAQ5C,qBAAqB,CAACK,MAAMM,IAAI,CAAC,CAAe;4BACjElB,iBAAiB;gCACfoD,QAAQ,CAACC,aAAaC,YAAY,MAAM;oCACtC7C,kBAAkBiC,IAAI,CAAC;wCACrBC,aAAa,CAACC;4CACZS,WAAW,CAACC,UAAU,GAAGV;wCAC3B;wCACAC,OAAOQ,WAAW,CAACC,UAAU;oCAC/B;gCACF;gCACAH,MAAMA;gCAENxC;4BACF;wBACF;oBACF;oBAEA;gBACF;YAEA;gBACE;QACJ;IACF;AACF,EAAC"}
@@ -1,6 +1,10 @@
1
- export declare const traverseRichText: ({ onText, root, siblingData }: {
2
- onText: (siblingData: Record<string, unknown>) => void;
1
+ type TraverseRichTextParams = {
2
+ onText: (siblingData: Record<string, unknown>, attribute?: string) => void;
3
3
  root: Record<string, unknown>;
4
4
  siblingData?: Record<string, unknown>;
5
+ };
6
+ export declare const traverseRichText: ({ onText, root, siblingData, additionalTraverseRichText }: TraverseRichTextParams & {
7
+ additionalTraverseRichText?: (args: TraverseRichTextParams) => void;
5
8
  }) => void;
9
+ export {};
6
10
  //# sourceMappingURL=traverseRichText.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseRichText.d.ts","sourceRoot":"","sources":["../../src/translate/traverseRichText.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,GAAI,+BAIG;IAClC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACtC,SA+BA,CAAA"}
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,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAA;CACpE,SAkBA,CAAA"}
@@ -1,4 +1,4 @@
1
- export const traverseRichText = ({ onText, root, siblingData })=>{
1
+ export const traverseRichText = ({ onText, root, siblingData, additionalTraverseRichText })=>{
2
2
  siblingData = siblingData ?? root;
3
3
  if (siblingData.text) {
4
4
  onText(siblingData);
@@ -11,11 +11,11 @@ export const traverseRichText = ({ onText, root, siblingData })=>{
11
11
  siblingData: child
12
12
  });
13
13
  }
14
- } else if (siblingData.type === 'block' && typeof siblingData.fields === 'object' && siblingData.fields !== null && 'content' in siblingData.fields && typeof siblingData.fields.content === 'object' && siblingData.fields.content !== null && 'root' in siblingData.fields.content && typeof siblingData.fields.content.root === 'object') {
15
- traverseRichText({
14
+ } else {
15
+ additionalTraverseRichText?.({
16
16
  onText,
17
17
  root,
18
- siblingData: siblingData.fields.content.root
18
+ siblingData
19
19
  });
20
20
  }
21
21
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/translate/traverseRichText.ts"],"sourcesContent":["export const traverseRichText = ({\r\n onText,\r\n root,\r\n siblingData\r\n }: {\r\n onText: (siblingData: Record<string, unknown>) => void\r\n root: Record<string, unknown>\r\n siblingData?: Record<string, unknown>\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 })\r\n }\r\n } else if (\r\n siblingData.type === 'block' &&\r\n typeof siblingData.fields === 'object' &&\r\n siblingData.fields !== null &&\r\n 'content' in siblingData.fields &&\r\n typeof siblingData.fields.content === 'object' &&\r\n siblingData.fields.content !== null &&\r\n 'root' in siblingData.fields.content &&\r\n typeof siblingData.fields.content.root === 'object'\r\n ) {\r\n traverseRichText({\r\n onText,\r\n root,\r\n siblingData: siblingData.fields.content.root as Record<string, unknown>\r\n })\r\n }\r\n}\r\n"],"names":["traverseRichText","onText","root","siblingData","text","Array","isArray","children","child","type","fields","content"],"mappings":"AAAA,OAAO,MAAMA,mBAAmB,CAAC,EACEC,MAAM,EACNC,IAAI,EACJC,WAAW,EAK7C;IACCA,cAAcA,eAAeD;IAE7B,IAAIC,YAAYC,IAAI,EAAE;QACpBH,OAAOE;IACT;IAEA,IAAIE,MAAMC,OAAO,CAACH,aAAaI,WAAW;QACxC,KAAK,MAAMC,SAASL,YAAYI,QAAQ,CAAE;YACxCP,iBAAiB;gBACfC;gBACAC;gBACAC,aAAaK;YACf;QACF;IACF,OAAO,IACLL,YAAYM,IAAI,KAAK,WACrB,OAAON,YAAYO,MAAM,KAAK,YAC9BP,YAAYO,MAAM,KAAK,QACvB,aAAaP,YAAYO,MAAM,IAC/B,OAAOP,YAAYO,MAAM,CAACC,OAAO,KAAK,YACtCR,YAAYO,MAAM,CAACC,OAAO,KAAK,QAC/B,UAAUR,YAAYO,MAAM,CAACC,OAAO,IACpC,OAAOR,YAAYO,MAAM,CAACC,OAAO,CAACT,IAAI,KAAK,UAC3C;QACAF,iBAAiB;YACfC;YACAC;YACAC,aAAaA,YAAYO,MAAM,CAACC,OAAO,CAACT,IAAI;QAC9C;IACF;AACF,EAAC"}
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\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 })\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;YACf;QACF;IACF,OAAO;QACLL,6BAA6B;YAAEH;YAAQC;YAAMC;QAAY;IAC3D;AACF,EAAC"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { CollectionSlug, GlobalSlug } from 'payload';
2
2
  import type { TranslateResolver } from './resolvers/types';
3
+ import { traverseFields } from "./translate/traverseFields";
3
4
  export type TranslatorConfig = {
4
5
  /**
5
6
  * Collections with the enabled translator in the admin UI
@@ -17,5 +18,6 @@ export type TranslatorConfig = {
17
18
  * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers
18
19
  */
19
20
  resolvers: TranslateResolver[];
21
+ _options?: Parameters<typeof traverseFields>[0]['_options'];
20
22
  };
21
23
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAA;CAC/B,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAE/B,QAAQ,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;CAC5D,CAAA"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from 'payload'\r\n\r\nimport type { TranslateResolver } from './resolvers/types'\r\n\r\nexport type TranslatorConfig = {\r\n /**\r\n * Collections with the enabled translator in the admin UI\r\n */\r\n collections: CollectionSlug[]\r\n /**\r\n * Disable the plugin\r\n */\r\n disabled?: boolean\r\n /**\r\n * Globals with the enabled translator in the admin UI\r\n */\r\n globals: GlobalSlug[]\r\n /**\r\n * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers\r\n */\r\n resolvers: TranslateResolver[]\r\n}\r\n"],"names":[],"mappings":"AAIA,WAiBC"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from 'payload'\r\n\r\nimport type { TranslateResolver } from './resolvers/types'\r\nimport { traverseFields } from \"./translate/traverseFields\"\r\n\r\nexport type TranslatorConfig = {\r\n /**\r\n * Collections with the enabled translator in the admin UI\r\n */\r\n collections: CollectionSlug[]\r\n /**\r\n * Disable the plugin\r\n */\r\n disabled?: boolean\r\n /**\r\n * Globals with the enabled translator in the admin UI\r\n */\r\n globals: GlobalSlug[]\r\n /**\r\n * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers\r\n */\r\n resolvers: TranslateResolver[],\r\n\r\n _options?: Parameters<typeof traverseFields>[0]['_options']\r\n}\r\n"],"names":[],"mappings":"AAKA,WAmBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justanarthur/payload-plugin-translator",
3
- "version": "1.3.9",
3
+ "version": "1.3.10",
4
4
  "private": false,
5
5
  "bugs": "https://github.com/r1tsuu/payload-enchants/issues",
6
6
  "license": "MIT",