@extravirgin/payload-enchants-translator 1.0.8 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +231 -21
  2. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +2 -2
  3. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +1 -1
  4. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +1 -1
  5. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +1 -1
  6. package/dist/client/components/CustomButton/index.js +2 -2
  7. package/dist/client/components/CustomButton/index.js.map +1 -1
  8. package/dist/client/components/GlossaryControls/index.d.ts +4 -0
  9. package/dist/client/components/GlossaryControls/index.d.ts.map +1 -0
  10. package/dist/client/components/GlossaryControls/index.js +42 -0
  11. package/dist/client/components/GlossaryControls/index.js.map +1 -0
  12. package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +1 -1
  13. package/dist/client/providers/Translator/TranslatorProvider.js +2 -1
  14. package/dist/client/providers/Translator/TranslatorProvider.js.map +1 -1
  15. package/dist/exports/client.d.ts +1 -0
  16. package/dist/exports/client.d.ts.map +1 -1
  17. package/dist/exports/client.js +1 -0
  18. package/dist/exports/client.js.map +1 -1
  19. package/dist/glossary.d.ts +17 -0
  20. package/dist/glossary.d.ts.map +1 -0
  21. package/dist/glossary.js +52 -0
  22. package/dist/glossary.js.map +1 -0
  23. package/dist/glossaryCollection.d.ts +5 -0
  24. package/dist/glossaryCollection.d.ts.map +1 -0
  25. package/dist/glossaryCollection.js +114 -0
  26. package/dist/glossaryCollection.js.map +1 -0
  27. package/dist/i18n-translations.d.ts +84 -0
  28. package/dist/i18n-translations.d.ts.map +1 -1
  29. package/dist/i18n-translations.js +83 -0
  30. package/dist/i18n-translations.js.map +1 -1
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +53 -8
  34. package/dist/index.js.map +1 -1
  35. package/dist/resolvers/deepl.d.ts +12 -0
  36. package/dist/resolvers/deepl.d.ts.map +1 -0
  37. package/dist/resolvers/deepl.js +82 -0
  38. package/dist/resolvers/deepl.js.map +1 -0
  39. package/dist/resolvers/deeplGlossary.d.ts +19 -0
  40. package/dist/resolvers/deeplGlossary.d.ts.map +1 -0
  41. package/dist/resolvers/deeplGlossary.js +117 -0
  42. package/dist/resolvers/deeplGlossary.js.map +1 -0
  43. package/dist/resolvers/types.d.ts +3 -0
  44. package/dist/resolvers/types.d.ts.map +1 -1
  45. package/dist/resolvers/types.js.map +1 -1
  46. package/dist/translate/endpoint.d.ts.map +1 -1
  47. package/dist/translate/endpoint.js +2 -1
  48. package/dist/translate/endpoint.js.map +1 -1
  49. package/dist/translate/findEntityWithConfig.d.ts.map +1 -1
  50. package/dist/translate/findEntityWithConfig.js +6 -5
  51. package/dist/translate/findEntityWithConfig.js.map +1 -1
  52. package/dist/translate/operation.d.ts.map +1 -1
  53. package/dist/translate/operation.js +5 -1
  54. package/dist/translate/operation.js.map +1 -1
  55. package/dist/translate/traverseFields.d.ts.map +1 -1
  56. package/dist/translate/traverseFields.js +16 -1
  57. package/dist/translate/traverseFields.js.map +1 -1
  58. package/dist/translate/updateEntity.d.ts.map +1 -1
  59. package/dist/translate/updateEntity.js +3 -2
  60. package/dist/translate/updateEntity.js.map +1 -1
  61. package/dist/types.d.ts +10 -8
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/types.js.map +1 -1
  64. package/package.json +53 -22
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/translate/traverseFields.ts"],"sourcesContent":["import ObjectID from 'bson-objectid';\nimport type { Field } from 'payload';\nimport { tabHasName } from 'payload/shared';\n\nimport { isEmpty } from '../utils/isEmpty';\nimport { traverseRichText } from './traverseRichText';\nimport type { ValueToTranslate } from './types';\n\nexport const traverseFields = ({\n dataFrom,\n emptyOnly,\n fields,\n localizedParent,\n siblingDataFrom,\n siblingDataTranslated,\n translatedData,\n valuesToTranslate,\n}: {\n dataFrom: Record<string, unknown>;\n emptyOnly?: boolean;\n fields: Field[];\n localizedParent?: boolean;\n siblingDataFrom?: Record<string, unknown>;\n siblingDataTranslated?: Record<string, unknown>;\n translatedData: Record<string, unknown>;\n valuesToTranslate: ValueToTranslate[];\n}) => {\n siblingDataFrom = siblingDataFrom ?? dataFrom;\n siblingDataTranslated = siblingDataTranslated ?? translatedData;\n\n for (const field of fields) {\n switch (field.type) {\n case 'tabs':\n for (const tab of field.tabs) {\n const hasName = tabHasName(tab);\n\n const tabDataFrom = hasName\n ? (siblingDataFrom[tab.name] as Record<string, unknown>)\n : siblingDataFrom;\n\n if (!tabDataFrom) return;\n\n const tabDataTranslated = hasName\n ? ((siblingDataTranslated[tab.name] as Record<string, unknown>) ?? {})\n : siblingDataTranslated;\n\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: tab.fields,\n localizedParent: tab.localized,\n siblingDataFrom: tabDataFrom,\n siblingDataTranslated: tabDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n }\n\n break;\n\n case 'group': {\n const groupDataFrom = siblingDataFrom[field.name] as Record<string, unknown>;\n\n if (!groupDataFrom) break;\n\n let groupDataTranslated =\n (siblingDataTranslated[field.name] as Record<string, unknown>);\n\n if (!groupDataTranslated) {\n groupDataTranslated = {id: ObjectID().toHexString()};\n siblingDataTranslated[field.name] = groupDataTranslated;\n }\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: groupDataFrom,\n siblingDataTranslated: groupDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n\n break;\n }\n\n case 'array': {\n const arrayDataFrom = siblingDataFrom[field.name] as {\n id: string;\n }[];\n\n if (isEmpty(arrayDataFrom)) break;\n\n let arrayDataTranslated =\n (siblingDataTranslated[field.name] as { id: string }[] | undefined) ?? [];\n\n if (field.localized || localizedParent) {\n if (arrayDataTranslated.length > 0 && emptyOnly) break;\n\n arrayDataTranslated = arrayDataFrom.map(() => ({\n id: ObjectID().toHexString(),\n }));\n }\n\n if (!Array.isArray(arrayDataTranslated)) {\n break;\n }\n arrayDataTranslated.forEach((item, index) => {\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: arrayDataFrom[index],\n siblingDataTranslated: item,\n translatedData,\n valuesToTranslate,\n });\n });\n\n siblingDataTranslated[field.name] = arrayDataTranslated;\n\n break;\n }\n\n case 'blocks': {\n const blocksDataFrom = siblingDataFrom[field.name] as {\n blockType: string;\n id: string;\n }[];\n\n if (isEmpty(blocksDataFrom)) break;\n\n let blocksDataTranslated =\n (siblingDataTranslated[field.name] as { blockType: string; id: string }[] | undefined) ??\n [];\n\n if (field.localized || localizedParent) {\n if (blocksDataTranslated.length > 0 && emptyOnly) break;\n\n blocksDataTranslated = blocksDataFrom.map(({ blockType }) => ({\n blockType,\n id: ObjectID().toHexString(),\n }));\n }\n\n blocksDataTranslated.forEach((item, index) => {\n const block = field.blocks.find((each: Record<string, unknown>) => each.slug === item.blockType);\n\n if (!block) return;\n\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: block.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: blocksDataFrom[index],\n siblingDataTranslated: item,\n translatedData,\n valuesToTranslate,\n });\n });\n\n siblingDataTranslated[field.name] = blocksDataTranslated;\n\n break;\n }\n\n case 'collapsible':\n case 'row':\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent,\n siblingDataFrom,\n siblingDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n break;\n\n // long ass cases here we have\n case 'date':\n case 'checkbox':\n case 'json':\n case 'code':\n case 'email':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'select':\n case 'upload':\n siblingDataTranslated[field.name] = siblingDataFrom[field.name];\n\n break;\n\n case 'text':\n case 'textarea':\n if (field.custom && typeof field.custom === 'object' && field.custom.translatorSkip) break;\n\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;\n if (emptyOnly && siblingDataTranslated[field.name]) break;\n\n // do not translate the block ID or admin-facing label\n if (field.name === 'id') {\n break;\n }\n\n valuesToTranslate.push({\n onTranslate: (translated: string) => {\n siblingDataTranslated[field.name] = translated;\n },\n value: siblingDataFrom[field.name],\n });\n break;\n\n case 'richText': {\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;\n if (emptyOnly && siblingDataTranslated[field.name]) break;\n\n const richTextDataFrom = siblingDataFrom[field.name] as object;\n\n siblingDataTranslated[field.name] = richTextDataFrom;\n\n if (!richTextDataFrom) break;\n\n const isSlate = Array.isArray(richTextDataFrom);\n\n const isLexical = 'root' in richTextDataFrom;\n\n if (!isSlate && !isLexical) break;\n\n if (isLexical) {\n const root = (siblingDataTranslated[field.name] as Record<string, unknown>)\n ?.root as Record<string, unknown>;\n\n if (root) {\n traverseRichText({\n onText: (siblingData)=>{\n valuesToTranslate.push({\n onTranslate: (translated: string)=>{\n siblingData.text = translated;\n },\n value: siblingData.text\n });\n },\n root\n });\n\n const richTextBlocksGetSubFields = (field.editor as any)?.editorConfig?.features?.getSubFields?.get('block');\n if (typeof richTextBlocksGetSubFields !== 'function') break;\n const richTextBlocks = richTextBlocksGetSubFields('block');\n const richTextBlockDataFrom = (richTextDataFrom.root as Record<string, unknown>)?.children;\n if (isEmpty(richTextBlockDataFrom) || !Array.isArray(richTextBlockDataFrom) || isEmpty(richTextBlocks)) break;\n let richTextBlocksDataTranslated = ((siblingDataTranslated[field.name] as Record<string, unknown>)?.root as Record<string, unknown>)?.children as Record<string, unknown>[] ?? [];\n\n if (field.localized || localizedParent) {\n if (richTextBlocksDataTranslated.length > 0 && emptyOnly) break;\n richTextBlocksDataTranslated = richTextBlockDataFrom.map((blockData)=>{\n if (blockData?.fields?.blockType) {\n return {\n ...blockData,\n fields: {\n blockType: blockData?.fields?.blockType,\n id: ObjectID().toHexString()\n }\n }\n }\n return blockData;\n });\n }\n\n richTextBlocksDataTranslated.forEach((item, index)=>{\n const block = richTextBlocks[0].blocks.find((each: Record<string, unknown>)=>each.slug && each.slug === (item.fields as Record<string, unknown>)?.blockType);\n if (!block) return;\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: block.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: richTextBlockDataFrom[index].fields,\n siblingDataTranslated: item.fields as Record<string, unknown>,\n translatedData,\n valuesToTranslate\n });\n });\n ((siblingDataTranslated[field.name] as Record<string, unknown>).root as Record<string, unknown>).children = richTextBlocksDataTranslated;\n }\n } else {\n for (const root of siblingDataTranslated[field.name] as unknown[]) {\n traverseRichText({\n onText: (siblingData) => {\n valuesToTranslate.push({\n onTranslate: (translated: string) => {\n siblingData.text = translated;\n },\n value: siblingData.text,\n });\n },\n root: root as Record<string, unknown>,\n });\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n};\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","id","toHexString","arrayDataFrom","arrayDataTranslated","length","map","Array","isArray","forEach","item","index","blocksDataFrom","blocksDataTranslated","blockType","block","blocks","find","each","slug","custom","translatorSkip","push","onTranslate","translated","value","richTextDataFrom","isSlate","isLexical","root","onText","siblingData","text","richTextBlocksGetSubFields","editor","editorConfig","features","getSubFields","get","richTextBlocks","richTextBlockDataFrom","children","richTextBlocksDataTranslated","blockData"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/translate/traverseFields.ts"],"sourcesContent":["import ObjectID from 'bson-objectid';\nimport type { Field } from 'payload';\nimport { tabHasName } from 'payload/shared';\n\nimport { isEmpty } from '../utils/isEmpty';\nimport { traverseRichText } from './traverseRichText';\nimport type { ValueToTranslate } from './types';\n\nexport const traverseFields = ({\n dataFrom,\n emptyOnly,\n fields,\n localizedParent,\n siblingDataFrom,\n siblingDataTranslated,\n translatedData,\n valuesToTranslate,\n}: {\n dataFrom: Record<string, unknown>;\n emptyOnly?: boolean;\n fields: Field[];\n localizedParent?: boolean;\n siblingDataFrom?: Record<string, unknown>;\n siblingDataTranslated?: Record<string, unknown>;\n translatedData: Record<string, unknown>;\n valuesToTranslate: ValueToTranslate[];\n}) => {\n siblingDataFrom = siblingDataFrom ?? dataFrom;\n siblingDataTranslated = siblingDataTranslated ?? translatedData;\n\n for (const field of fields) {\n if (field.custom && typeof field.custom === 'object' && field.custom.translatorSkip) continue;\n\n switch (field.type) {\n case 'tabs':\n for (const tab of field.tabs) {\n const hasName = tabHasName(tab);\n\n const tabDataFrom = hasName\n ? (siblingDataFrom[tab.name] as Record<string, unknown>)\n : siblingDataFrom;\n\n if (!tabDataFrom) return;\n\n const tabDataTranslated = hasName\n ? ((siblingDataTranslated[tab.name] as Record<string, unknown>) ?? {})\n : siblingDataTranslated;\n\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: tab.fields,\n localizedParent: tab.localized,\n siblingDataFrom: tabDataFrom,\n siblingDataTranslated: tabDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n }\n\n break;\n\n case 'group': {\n const groupFields = field.fields;\n\n if (!('name' in field)) {\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: groupFields,\n localizedParent,\n siblingDataFrom,\n siblingDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n\n break;\n }\n\n const groupDataFrom = siblingDataFrom[field.name] as Record<string, unknown>;\n\n if (!groupDataFrom) break;\n\n let groupDataTranslated =\n (siblingDataTranslated[field.name] as Record<string, unknown>);\n\n if (!groupDataTranslated) {\n groupDataTranslated = {id: ObjectID().toHexString()};\n siblingDataTranslated[field.name] = groupDataTranslated;\n }\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: groupDataFrom,\n siblingDataTranslated: groupDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n\n break;\n }\n\n case 'array': {\n const arrayDataFrom = siblingDataFrom[field.name] as {\n id: string;\n }[];\n\n if (isEmpty(arrayDataFrom)) break;\n\n let arrayDataTranslated =\n (siblingDataTranslated[field.name] as { id: string }[] | undefined) ?? [];\n\n if (field.localized || localizedParent) {\n if (arrayDataTranslated.length > 0 && emptyOnly) break;\n\n arrayDataTranslated = arrayDataFrom.map(() => ({\n id: ObjectID().toHexString(),\n }));\n }\n\n if (!Array.isArray(arrayDataTranslated)) {\n break;\n }\n arrayDataTranslated.forEach((item, index) => {\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: arrayDataFrom[index],\n siblingDataTranslated: item,\n translatedData,\n valuesToTranslate,\n });\n });\n\n siblingDataTranslated[field.name] = arrayDataTranslated;\n\n break;\n }\n\n case 'blocks': {\n const blocksDataFrom = siblingDataFrom[field.name] as {\n blockType: string;\n id: string;\n }[];\n\n if (isEmpty(blocksDataFrom)) break;\n\n let blocksDataTranslated =\n (siblingDataTranslated[field.name] as { blockType: string; id: string }[] | undefined) ??\n [];\n\n if (field.localized || localizedParent) {\n if (blocksDataTranslated.length > 0 && emptyOnly) break;\n\n blocksDataTranslated = blocksDataFrom.map(({ blockType }) => ({\n blockType,\n id: ObjectID().toHexString(),\n }));\n }\n\n blocksDataTranslated.forEach((item, index) => {\n const block = field.blocks.find((each: Record<string, unknown>) => each.slug === item.blockType);\n\n if (!block) return;\n\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: block.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: blocksDataFrom[index],\n siblingDataTranslated: item,\n translatedData,\n valuesToTranslate,\n });\n });\n\n siblingDataTranslated[field.name] = blocksDataTranslated;\n\n break;\n }\n\n case 'collapsible':\n case 'row':\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: field.fields,\n localizedParent,\n siblingDataFrom,\n siblingDataTranslated,\n translatedData,\n valuesToTranslate,\n });\n break;\n\n // long ass cases here we have\n case 'date':\n case 'checkbox':\n case 'json':\n case 'code':\n case 'email':\n case 'number':\n case 'point':\n case 'radio':\n case 'relationship':\n case 'select':\n case 'upload':\n if (emptyOnly && !isEmpty(siblingDataTranslated[field.name]) && siblingDataTranslated[field.name] !== '') break;\n\n siblingDataTranslated[field.name] = siblingDataFrom[field.name];\n\n break;\n\n case 'text':\n case 'textarea':\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;\n if (emptyOnly && siblingDataTranslated[field.name]) break;\n\n // do not translate the block ID or admin-facing label\n if (field.name === 'id') {\n break;\n }\n\n valuesToTranslate.push({\n onTranslate: (translated: string) => {\n siblingDataTranslated[field.name] = translated;\n },\n value: siblingDataFrom[field.name],\n });\n break;\n\n case 'richText': {\n if (!(field.localized || localizedParent) || isEmpty(siblingDataFrom[field.name])) break;\n if (emptyOnly && siblingDataTranslated[field.name]) break;\n\n const richTextDataFrom = siblingDataFrom[field.name] as object;\n\n siblingDataTranslated[field.name] = richTextDataFrom;\n\n if (!richTextDataFrom) break;\n\n const isSlate = Array.isArray(richTextDataFrom);\n\n const isLexical = 'root' in richTextDataFrom;\n\n if (!isSlate && !isLexical) break;\n\n if (isLexical) {\n const root = (siblingDataTranslated[field.name] as Record<string, unknown>)\n ?.root as Record<string, unknown>;\n\n if (root) {\n traverseRichText({\n onText: (siblingData)=>{\n valuesToTranslate.push({\n onTranslate: (translated: string)=>{\n siblingData.text = translated;\n },\n value: siblingData.text\n });\n },\n root\n });\n\n const richTextBlocksGetSubFields = (field.editor as any)?.editorConfig?.features?.getSubFields?.get('block');\n if (typeof richTextBlocksGetSubFields !== 'function') break;\n const richTextBlocks = richTextBlocksGetSubFields('block');\n const richTextBlockDataFrom = (richTextDataFrom.root as Record<string, unknown>)?.children;\n if (isEmpty(richTextBlockDataFrom) || !Array.isArray(richTextBlockDataFrom) || isEmpty(richTextBlocks)) break;\n let richTextBlocksDataTranslated = ((siblingDataTranslated[field.name] as Record<string, unknown>)?.root as Record<string, unknown>)?.children as Record<string, unknown>[] ?? [];\n\n if (field.localized || localizedParent) {\n if (richTextBlocksDataTranslated.length > 0 && emptyOnly) break;\n richTextBlocksDataTranslated = richTextBlockDataFrom.map((blockData)=>{\n if (blockData?.fields?.blockType) {\n return {\n ...blockData,\n fields: {\n blockType: blockData?.fields?.blockType,\n id: ObjectID().toHexString()\n }\n }\n }\n return blockData;\n });\n }\n\n richTextBlocksDataTranslated.forEach((item, index)=>{\n const block = richTextBlocks[0].blocks.find((each: Record<string, unknown>)=>each.slug && each.slug === (item.fields as Record<string, unknown>)?.blockType);\n if (!block) return;\n traverseFields({\n dataFrom,\n emptyOnly,\n fields: block.fields,\n localizedParent: localizedParent ?? field.localized,\n siblingDataFrom: richTextBlockDataFrom[index].fields,\n siblingDataTranslated: item.fields as Record<string, unknown>,\n translatedData,\n valuesToTranslate\n });\n });\n ((siblingDataTranslated[field.name] as Record<string, unknown>).root as Record<string, unknown>).children = richTextBlocksDataTranslated;\n }\n } else {\n for (const root of siblingDataTranslated[field.name] as unknown[]) {\n traverseRichText({\n onText: (siblingData) => {\n valuesToTranslate.push({\n onTranslate: (translated: string) => {\n siblingData.text = translated;\n },\n value: siblingData.text,\n });\n },\n root: root as Record<string, unknown>,\n });\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n};\n"],"names":["ObjectID","tabHasName","isEmpty","traverseRichText","traverseFields","dataFrom","emptyOnly","fields","localizedParent","siblingDataFrom","siblingDataTranslated","translatedData","valuesToTranslate","field","custom","translatorSkip","type","tab","tabs","hasName","tabDataFrom","name","tabDataTranslated","localized","groupFields","groupDataFrom","groupDataTranslated","id","toHexString","arrayDataFrom","arrayDataTranslated","length","map","Array","isArray","forEach","item","index","blocksDataFrom","blocksDataTranslated","blockType","block","blocks","find","each","slug","push","onTranslate","translated","value","richTextDataFrom","isSlate","isLexical","root","onText","siblingData","text","richTextBlocksGetSubFields","editor","editorConfig","features","getSubFields","get","richTextBlocks","richTextBlockDataFrom","children","richTextBlocksDataTranslated","blockData"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateEntity.d.ts","sourceRoot":"","sources":["../../src/translate/updateEntity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGtF,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY,iGAStB,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CA6BrD,CAAC"}
1
+ {"version":3,"file":"updateEntity.d.ts","sourceRoot":"","sources":["../../src/translate/updateEntity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAKtF,KAAK,IAAI,GAAG;IACV,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY,iGAStB,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CA8BrD,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { APIError } from 'payload';
2
+ import { translatorT } from '../i18n-translations';
2
3
  export const updateEntity = ({ collectionSlug, data, depth: incomingDepth, globalSlug, id, locale, overrideAccess, req })=>{
3
- if (!collectionSlug && !globalSlug) throw new APIError('Bad Request', 400);
4
+ if (!collectionSlug && !globalSlug) throw new APIError(translatorT(req.t, 'error_badRequest'), 400);
4
5
  const isGlobal = !!globalSlug;
5
- if (!isGlobal && !id) throw new APIError('Bad Request', 400);
6
+ if (!isGlobal && !id) throw new APIError(translatorT(req.t, 'error_badRequest'), 400);
6
7
  const depth = incomingDepth ?? req.payload.config.defaultDepth;
7
8
  const promise = isGlobal ? req.payload.updateGlobal({
8
9
  data,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/translate/updateEntity.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug, PayloadRequest, TypeWithID } from 'payload';\nimport { APIError } from 'payload';\n\ntype Args = {\n collectionSlug?: string;\n data: Record<string, any>;\n depth?: number;\n globalSlug?: string;\n id?: number | string;\n locale: string;\n overrideAccess?: boolean;\n req: PayloadRequest;\n};\n\nexport const updateEntity = ({\n collectionSlug,\n data,\n depth: incomingDepth,\n globalSlug,\n id,\n locale,\n overrideAccess,\n req,\n}: Args): Promise<Record<string, unknown> & TypeWithID> => {\n if (!collectionSlug && !globalSlug) throw new APIError('Bad Request', 400);\n\n const isGlobal = !!globalSlug;\n\n if (!isGlobal && !id) throw new APIError('Bad Request', 400);\n\n const depth = incomingDepth ?? req.payload.config.defaultDepth;\n\n const promise = isGlobal\n ? req.payload.updateGlobal({\n data,\n depth,\n locale: locale as any,\n overrideAccess,\n req,\n slug: globalSlug as GlobalSlug,\n })\n : req.payload.update({\n collection: collectionSlug as CollectionSlug,\n data,\n depth,\n id: id as number | string,\n locale: locale as any,\n overrideAccess,\n req,\n });\n\n return promise as any;\n};\n"],"names":["APIError","updateEntity","collectionSlug","data","depth","incomingDepth","globalSlug","id","locale","overrideAccess","req","isGlobal","payload","config","defaultDepth","promise","updateGlobal","slug","update","collection"],"mappings":"AACA,SAASA,QAAQ,QAAQ,UAAU;AAanC,OAAO,MAAMC,eAAe,CAAC,EAC3BC,cAAc,EACdC,IAAI,EACJC,OAAOC,aAAa,EACpBC,UAAU,EACVC,EAAE,EACFC,MAAM,EACNC,cAAc,EACdC,GAAG,EACE;IACL,IAAI,CAACR,kBAAkB,CAACI,YAAY,MAAM,IAAIN,SAAS,eAAe;IAEtE,MAAMW,WAAW,CAAC,CAACL;IAEnB,IAAI,CAACK,YAAY,CAACJ,IAAI,MAAM,IAAIP,SAAS,eAAe;IAExD,MAAMI,QAAQC,iBAAiBK,IAAIE,OAAO,CAACC,MAAM,CAACC,YAAY;IAE9D,MAAMC,UAAUJ,WACZD,IAAIE,OAAO,CAACI,YAAY,CAAC;QACvBb;QACAC;QACAI,QAAQA;QACRC;QACAC;QACAO,MAAMX;IACR,KACAI,IAAIE,OAAO,CAACM,MAAM,CAAC;QACjBC,YAAYjB;QACZC;QACAC;QACAG,IAAIA;QACJC,QAAQA;QACRC;QACAC;IACF;IAEJ,OAAOK;AACT,EAAE"}
1
+ {"version":3,"sources":["../../src/translate/updateEntity.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug, PayloadRequest, TypeWithID } from 'payload';\nimport { APIError } from 'payload';\n\nimport { translatorT } from '../i18n-translations';\n\ntype Args = {\n collectionSlug?: string;\n data: Record<string, any>;\n depth?: number;\n globalSlug?: string;\n id?: number | string;\n locale: string;\n overrideAccess?: boolean;\n req: PayloadRequest;\n};\n\nexport const updateEntity = ({\n collectionSlug,\n data,\n depth: incomingDepth,\n globalSlug,\n id,\n locale,\n overrideAccess,\n req,\n}: Args): Promise<Record<string, unknown> & TypeWithID> => {\n if (!collectionSlug && !globalSlug)\n throw new APIError(translatorT(req.t, 'error_badRequest'), 400);\n\n const isGlobal = !!globalSlug;\n\n if (!isGlobal && !id) throw new APIError(translatorT(req.t, 'error_badRequest'), 400);\n\n const depth = incomingDepth ?? req.payload.config.defaultDepth;\n\n const promise = isGlobal\n ? req.payload.updateGlobal({\n data,\n depth,\n locale: locale as any,\n overrideAccess,\n req,\n slug: globalSlug as GlobalSlug,\n })\n : req.payload.update({\n collection: collectionSlug as CollectionSlug,\n data,\n depth,\n id: id as number | string,\n locale: locale as any,\n overrideAccess,\n req,\n });\n\n return promise as any;\n};\n"],"names":["APIError","translatorT","updateEntity","collectionSlug","data","depth","incomingDepth","globalSlug","id","locale","overrideAccess","req","t","isGlobal","payload","config","defaultDepth","promise","updateGlobal","slug","update","collection"],"mappings":"AACA,SAASA,QAAQ,QAAQ,UAAU;AAEnC,SAASC,WAAW,QAAQ,uBAAuB;AAanD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,cAAc,EACdC,IAAI,EACJC,OAAOC,aAAa,EACpBC,UAAU,EACVC,EAAE,EACFC,MAAM,EACNC,cAAc,EACdC,GAAG,EACE;IACL,IAAI,CAACR,kBAAkB,CAACI,YACtB,MAAM,IAAIP,SAASC,YAAYU,IAAIC,CAAC,EAAE,qBAAqB;IAE7D,MAAMC,WAAW,CAAC,CAACN;IAEnB,IAAI,CAACM,YAAY,CAACL,IAAI,MAAM,IAAIR,SAASC,YAAYU,IAAIC,CAAC,EAAE,qBAAqB;IAEjF,MAAMP,QAAQC,iBAAiBK,IAAIG,OAAO,CAACC,MAAM,CAACC,YAAY;IAE9D,MAAMC,UAAUJ,WACZF,IAAIG,OAAO,CAACI,YAAY,CAAC;QACvBd;QACAC;QACAI,QAAQA;QACRC;QACAC;QACAQ,MAAMZ;IACR,KACAI,IAAIG,OAAO,CAACM,MAAM,CAAC;QACjBC,YAAYlB;QACZC;QACAC;QACAG,IAAIA;QACJC,QAAQA;QACRC;QACAC;IACF;IAEJ,OAAOM;AACT,EAAE"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  import type { CollectionSlug, GlobalSlug } from 'payload';
2
+ import type { GlossaryConfig } from './glossary';
2
3
  import type { TranslateResolver } from './resolvers/types';
3
4
  export type TranslatorConfig = {
5
+ /**
6
+ * Optional base path for the translator API endpoint
7
+ */
8
+ basePath?: string;
4
9
  /**
5
10
  * Collections with the enabled translator in the admin UI
6
11
  */
@@ -9,21 +14,18 @@ export type TranslatorConfig = {
9
14
  * Disable the plugin
10
15
  */
11
16
  disabled?: boolean;
17
+ /**
18
+ * Locales that should be excluded from translation (source and target)
19
+ */
20
+ disabledLocales?: string[];
12
21
  /**
13
22
  * Globals with the enabled translator in the admin UI
14
23
  */
15
24
  globals: GlobalSlug[];
25
+ glossary?: GlossaryConfig;
16
26
  /**
17
27
  * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers
18
28
  */
19
29
  resolvers: TranslateResolver[];
20
- /**
21
- * Locales that should be excluded from translation (source and target)
22
- */
23
- disabledLocales?: string[];
24
- /**
25
- * Optional base path for the translator API endpoint
26
- */
27
- basePath?: string;
28
30
  };
29
31
  //# 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,CAAC;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC,CAAC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from 'payload';\n\nimport type { TranslateResolver } from './resolvers/types';\n\nexport type TranslatorConfig = {\n /**\n * Collections with the enabled translator in the admin UI\n */\n collections: CollectionSlug[];\n /**\n * Disable the plugin\n */\n disabled?: boolean;\n /**\n * Globals with the enabled translator in the admin UI\n */\n globals: GlobalSlug[];\n /**\n * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers\n */\n resolvers: TranslateResolver[];\n /**\n * Locales that should be excluded from translation (source and target)\n */\n disabledLocales?: string[];\n /**\n * Optional base path for the translator API endpoint\n */\n basePath?: string;\n};\n"],"names":[],"mappings":"AAIA,WAyBE"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from 'payload';\n\nimport type { GlossaryConfig } from './glossary';\nimport type { TranslateResolver } from './resolvers/types';\n\nexport type TranslatorConfig = {\n /**\n * Optional base path for the translator API endpoint\n */\n basePath?: string;\n /**\n * Collections with the enabled translator in the admin UI\n */\n collections: CollectionSlug[];\n /**\n * Disable the plugin\n */\n disabled?: boolean;\n /**\n * Locales that should be excluded from translation (source and target)\n */\n disabledLocales?: string[];\n /**\n * Globals with the enabled translator in the admin UI\n */\n globals: GlobalSlug[];\n glossary?: GlossaryConfig;\n /**\n * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers\n */\n resolvers: TranslateResolver[];\n};\n"],"names":[],"mappings":"AAKA,WA0BE"}
package/package.json CHANGED
@@ -1,47 +1,52 @@
1
1
  {
2
2
  "name": "@extravirgin/payload-enchants-translator",
3
- "version": "1.0.8",
3
+ "version": "1.1.1",
4
4
  "private": false,
5
- "bugs": "https://github.com/Kliqs/payload-enchants/issues",
6
- "repository": "https://github.com/Kliqs/payload-enchants",
5
+ "bugs": "https://github.com/Kliqs/payload-enchants-translator/issues",
6
+ "repository": "https://github.com/Kliqs/payload-enchants-translator",
7
7
  "license": "MIT",
8
8
  "author": "r1tsuu",
9
9
  "type": "module",
10
10
  "exports": {
11
11
  ".": {
12
+ "types": "./dist/index.d.ts",
12
13
  "import": "./dist/index.js",
13
- "require": "./dist/index.js",
14
- "types": "./dist/index.d.ts"
14
+ "require": "./dist/index.js"
15
15
  },
16
16
  "./types": {
17
+ "types": "./dist/types.d.ts",
17
18
  "import": "./dist/types.js",
18
- "require": "./dist/types.js",
19
- "types": "./dist/types.d.ts"
19
+ "require": "./dist/types.js"
20
20
  },
21
21
  "./resolvers/types": {
22
+ "types": "./dist/resolvers/types.d.ts",
22
23
  "import": "./dist/resolvers/types.js",
23
- "require": "./dist/resolvers/types.js",
24
- "types": "./dist/resolvers/types.d.ts"
24
+ "require": "./dist/resolvers/types.js"
25
25
  },
26
26
  "./resolvers/google": {
27
+ "types": "./dist/resolvers/google.d.ts",
27
28
  "import": "./dist/resolvers/google.js",
28
- "require": "./dist/resolvers/google.js",
29
- "types": "./dist/resolvers/google.d.ts"
29
+ "require": "./dist/resolvers/google.js"
30
30
  },
31
31
  "./resolvers/copy": {
32
+ "types": "./dist/resolvers/copy.d.ts",
32
33
  "import": "./dist/resolvers/copy.js",
33
- "require": "./dist/resolvers/copy.js",
34
- "types": "./dist/resolvers/copy.d.ts"
34
+ "require": "./dist/resolvers/copy.js"
35
35
  },
36
36
  "./resolvers/openAI": {
37
+ "types": "./dist/resolvers/openAI.d.ts",
37
38
  "import": "./dist/resolvers/openAI.js",
38
- "require": "./dist/resolvers/openAI.js",
39
- "types": "./dist/resolvers/openAI.d.ts"
39
+ "require": "./dist/resolvers/openAI.js"
40
40
  },
41
41
  "./client": {
42
+ "types": "./dist/exports/client.d.ts",
42
43
  "import": "./dist/exports/client.js",
43
- "require": "./dist/exports/client.js",
44
- "types": "./dist/exports/client.d.ts"
44
+ "require": "./dist/exports/client.js"
45
+ },
46
+ "./resolvers/deepl": {
47
+ "types": "./dist/resolvers/deepl.d.ts",
48
+ "import": "./dist/resolvers/deepl.js",
49
+ "require": "./dist/resolvers/deepl.js"
45
50
  }
46
51
  },
47
52
  "files": [
@@ -55,20 +60,43 @@
55
60
  "@types/he": "^1.2.3",
56
61
  "@types/react": "npm:types-react@19.0.0-rc.1",
57
62
  "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
58
- "react": "19.0.0-rc-66855b96-20241106",
59
- "react-dom": "19.0.0-rc-66855b96-20241106",
60
- "typescript": "5.7.2"
63
+ "react": "19.0.0-rc-65a56d0e-20241020",
64
+ "react-dom": "19.0.0-rc-65a56d0e-20241020",
65
+ "typescript": "5.7.2",
66
+ "deepl-node": "^1.27.0",
67
+ "@swc/cli": "^0.7.9",
68
+ "@swc/core": "^1.6.3",
69
+ "copyfiles": "^2.4.1",
70
+ "rimraf": "^5.0.7",
71
+ "eslint": "^8.57.0",
72
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
73
+ "@typescript-eslint/parser": "^6.21.0",
74
+ "eslint-plugin-import": "^2.29.1",
75
+ "eslint-plugin-perfectionist": "^2.11.0",
76
+ "eslint-plugin-simple-import-sort": "^10.0.0",
77
+ "@types/node": "^20.14.7",
78
+ "payload": "3.1.0",
79
+ "@payloadcms/ui": "3.1.0",
80
+ "@payloadcms/translations": "3.1.0",
81
+ "vitest": "3.2.4",
82
+ "tsx": "4.19.2"
61
83
  },
62
84
  "peerDependencies": {
63
85
  "@payloadcms/translations": "^3.1.0",
64
86
  "@payloadcms/ui": "^3.1.0",
65
- "payload": "^3.1.0"
87
+ "payload": "^3.1.0",
88
+ "deepl-node": "^1.27.0"
66
89
  },
67
90
  "publishConfig": {
68
91
  "registry": "https://registry.npmjs.org/"
69
92
  },
70
93
  "main": "./dist/index.js",
71
94
  "types": "./dist/index.d.ts",
95
+ "peerDependenciesMeta": {
96
+ "deepl-node": {
97
+ "optional": true
98
+ }
99
+ },
72
100
  "scripts": {
73
101
  "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types",
74
102
  "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
@@ -76,6 +104,9 @@
76
104
  "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
77
105
  "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
78
106
  "lint": "eslint src",
79
- "lint:fix": "eslint --fix --ext .ts,.tsx src"
107
+ "lint:fix": "eslint --fix --ext .ts,.tsx src",
108
+ "typecheck": "tsc --noEmit --emitDeclarationOnly false",
109
+ "test": "vitest run",
110
+ "dev": "pnpm --dir playground dev"
80
111
  }
81
112
  }