sanity-plugin-transifex 2.0.6 → 2.0.8-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Sanity + Transifex = 🌍
2
2
 
3
+ This is the Studio V2 version of the Transifex plugin.
3
4
 
4
5
  This plugin provides an in-studio integration with [Transifex](https://transifex.com). It allows your editors to send any document to Transifex with the click of a button, monitor ongoing translations, and import partial or complete translations back into the studio.
5
6
 
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ interface ConfigOptions {
4
4
  adapter: Adapter;
5
5
  secretsNamespace: string | null;
6
6
  exportForTranslation: (id: string) => Promise<Record<string, any>>;
7
- importTranslation: (id: string, localeId: string, doc: string) => Promise<void>;
7
+ importTranslation: (id: string, localeId: string, doc: string, _idStructure: undefined) => Promise<void>;
8
8
  }
9
9
  declare const defaultDocumentLevelConfig: ConfigOptions;
10
10
  declare const defaultFieldLevelConfig: ConfigOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"sanity-plugin-transifex.cjs.development.js","sources":["../src/transifexAdapter/helpers.ts","../src/transifexAdapter/getLocales.ts","../src/transifexAdapter/getTranslationTask.ts","../src/transifexAdapter/getTranslation.ts","../src/transifexAdapter/createTask.ts","../src/transifexAdapter/index.ts","../src/index.ts"],"sourcesContent":["import { Secrets } from 'sanity-translations-tab'\n\nexport const baseTransifexUrl = 'https://rest.api.transifex.com'\n\nexport const getHeaders = (secrets: Secrets | null) => ({\n Authorization: `Bearer ${secrets?.token}`,\n 'Content-Type': 'application/vnd.api+json',\n})\n\nexport const projOrgSlug = (secrets: Secrets | null) =>\n `o:${secrets?.organization}:p:${secrets?.project}`\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\n\nexport default async function getLocales(secrets: Secrets | null) {\n if (secrets) {\n return fetch(\n `${baseTransifexUrl}/projects/${projOrgSlug(secrets)}/languages`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res =>\n res.data.map((lang: Record<string, any>) => ({\n enabled: true,\n description: lang.attributes.name,\n localeId: lang.attributes.code,\n }))\n )\n } else {\n return []\n }\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getLocales from './getLocales'\n\nexport default async function getTranslationTask(\n documentId: string,\n secrets: Secrets | null\n) {\n if (!documentId || !secrets) {\n return {\n taskId: documentId,\n documentId: documentId,\n locales: [],\n }\n }\n const projectFilter = `filter[project]=${projOrgSlug(secrets)}`\n const resourceFilter = `filter[resource]=${projOrgSlug(\n secrets\n )}:r:${documentId}`\n const task = await fetch(\n `${baseTransifexUrl}/resource_language_stats?${projectFilter}&${resourceFilter}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => {\n if (res.ok) {\n return res.json()\n }\n //normal -- just means that this task doesn't exist yet.\n else if (res.status === 404) {\n return { data: [] }\n } else {\n throw Error(\n `Failed to retrieve tasks from Transifex. Status: ${res.status}`\n )\n }\n })\n .then(res => ({\n taskId: `${projOrgSlug(secrets)}:r:${documentId}`,\n documentId: documentId,\n locales: res.data.map((locale: Record<string, any>) => ({\n localeId: locale.relationships.language.data.id.split(':')[1],\n progress: Math.floor(\n 100 *\n (locale.attributes.reviewed_strings /\n parseFloat(locale.attributes.total_strings))\n ),\n })),\n }))\n\n const locales = await getLocales(secrets)\n const localeIds = locales.map((l: Record<string, any>) => l.localeId)\n const validLocales = task.locales.filter((locale: Record<string, any>) =>\n localeIds.find((id: string) => id === locale.localeId)\n )\n task.locales = validLocales\n\n return task\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, getHeaders } from './helpers'\n\nexport default async function getTranslation(\n taskId: string,\n localeId: string,\n secrets: Secrets | null\n) {\n const resourceDownloadBody = {\n data: {\n attributes: {\n content_encoding: 'text',\n },\n relationships: {\n language: {\n data: {\n id: `l:${localeId}`,\n type: 'languages',\n },\n },\n resource: {\n data: {\n id: taskId,\n type: 'resources',\n },\n },\n },\n type: 'resource_translations_async_downloads',\n },\n }\n\n const resourceDownloadUrl = `${baseTransifexUrl}/resource_translations_async_downloads`\n const translationDownloadId = await fetch(resourceDownloadUrl, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceDownloadBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n\n const headers = getHeaders(secrets)\n const location = await pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n return handleFileDownload(location)\n}\n\nconst pollForFileDownloadLocation = async (\n resourceDownloadUrl: string,\n translationDownloadId: string,\n headers: Record<string, any>\n): Promise<string> => {\n const response = await fetch(\n `${resourceDownloadUrl}/${translationDownloadId}`,\n {\n headers: headers,\n }\n )\n\n if (response.status === 500) {\n console.info(\n `Transifex plugin message: Received 500 for translation download ID ${translationDownloadId}. Trying to reconnect...`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else if (response.redirected) {\n console.info(\n `Transifex plugin message: Received redirect for translation download ID ${translationDownloadId}. Following redirect now for file download.`\n )\n return response.url\n } else if (response.status === 200) {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId}. Location is still pending, trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId} but received error code ${response.status}. Waiting and trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n }\n}\n\nconst handleFileDownload = async (url: string) => {\n return fetch(url).then(res => res.text())\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getTranslationTask from './getTranslationTask'\n\nconst createResource = async (\n doc: Record<string, any>,\n documentId: string,\n secrets: Secrets | null\n) => {\n const resourceCreateBody = {\n data: {\n attributes: {\n accept_translations: true,\n name: doc.name,\n slug: documentId,\n },\n relationships: {\n i18n_format: {\n data: {\n id: 'HTML_FRAGMENT',\n type: 'i18n_formats',\n },\n },\n project: {\n data: {\n id: projOrgSlug(secrets),\n type: 'projects',\n },\n },\n },\n type: 'resources',\n },\n }\n\n return fetch(`${baseTransifexUrl}/resources`, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceCreateBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n}\n\nexport default async function createTask(\n documentId: string,\n document: Record<string, any>,\n //unfortunately Transifex doesn't let you specify locales on creating a task\n //@ts-ignore\n localeIds: string[],\n secrets: Secrets | null\n) {\n let resourceId = await fetch(\n `${baseTransifexUrl}/resources/${projOrgSlug(secrets)}:r:${documentId}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res => (res.data ? res.data.id : null))\n\n if (!resourceId) {\n resourceId = await createResource(document, documentId, secrets)\n }\n\n const resourceUploadUrl = `${baseTransifexUrl}/resource_strings_async_uploads`\n const resourceUploadBody = {\n data: {\n attributes: {\n content: document.content,\n content_encoding: 'text',\n },\n relationships: {\n resource: {\n data: {\n id: resourceId,\n type: 'resources',\n },\n },\n },\n type: 'resource_strings_async_uploads',\n },\n }\n\n return fetch(resourceUploadUrl, {\n method: 'POST',\n body: JSON.stringify(resourceUploadBody),\n headers: getHeaders(secrets),\n }).then(() => getTranslationTask(documentId, secrets))\n}\n","import { Adapter } from 'sanity-translations-tab'\n\nimport getLocales from './getLocales'\nimport getTranslationTask from './getTranslationTask'\nimport getTranslation from './getTranslation'\nimport createTask from './createTask'\n\nexport const TransifexAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n} from 'sanity-translations-tab'\nimport { TransifexAdapter } from './transifexAdapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (id: string) => Promise<Record<string, any>>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n TransifexAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["baseTransifexUrl","getHeaders","secrets","Authorization","token","projOrgSlug","organization","project","getLocales","fetch","headers","then","res","json","data","map","lang","enabled","description","attributes","name","localeId","code","getTranslationTask","documentId","taskId","locales","projectFilter","resourceFilter","ok","status","Error","locale","relationships","language","id","split","progress","Math","floor","reviewed_strings","parseFloat","total_strings","task","localeIds","l","validLocales","filter","find","getTranslation","resourceDownloadBody","content_encoding","type","resource","resourceDownloadUrl","method","body","JSON","stringify","translationDownloadId","pollForFileDownloadLocation","location","handleFileDownload","response","console","info","Promise","resolve","setTimeout","redirected","url","text","createResource","doc","resourceCreateBody","accept_translations","slug","i18n_format","createTask","document","resourceId","resourceUploadUrl","resourceUploadBody","content","TransifexAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","secretsNamespace","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
1
+ {"version":3,"file":"sanity-plugin-transifex.cjs.development.js","sources":["../src/transifexAdapter/helpers.ts","../src/transifexAdapter/getLocales.ts","../src/transifexAdapter/getTranslationTask.ts","../src/transifexAdapter/getTranslation.ts","../src/transifexAdapter/createTask.ts","../src/transifexAdapter/index.ts","../src/index.ts"],"sourcesContent":["import { Secrets } from 'sanity-translations-tab'\n\nexport const baseTransifexUrl = 'https://rest.api.transifex.com'\n\nexport const getHeaders = (secrets: Secrets | null) => ({\n Authorization: `Bearer ${secrets?.token}`,\n 'Content-Type': 'application/vnd.api+json',\n})\n\nexport const projOrgSlug = (secrets: Secrets | null) =>\n `o:${secrets?.organization}:p:${secrets?.project}`\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\n\nexport default async function getLocales(secrets: Secrets | null) {\n if (secrets) {\n return fetch(\n `${baseTransifexUrl}/projects/${projOrgSlug(secrets)}/languages`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res =>\n res.data.map((lang: Record<string, any>) => ({\n enabled: true,\n description: lang.attributes.name,\n localeId: lang.attributes.code,\n }))\n )\n } else {\n return []\n }\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getLocales from './getLocales'\n\nexport default async function getTranslationTask(\n documentId: string,\n secrets: Secrets | null\n) {\n if (!documentId || !secrets) {\n return {\n taskId: documentId,\n documentId: documentId,\n locales: [],\n }\n }\n const projectFilter = `filter[project]=${projOrgSlug(secrets)}`\n const resourceFilter = `filter[resource]=${projOrgSlug(\n secrets\n )}:r:${documentId}`\n const task = await fetch(\n `${baseTransifexUrl}/resource_language_stats?${projectFilter}&${resourceFilter}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => {\n if (res.ok) {\n return res.json()\n }\n //normal -- just means that this task doesn't exist yet.\n else if (res.status === 404) {\n return { data: [] }\n } else {\n throw Error(\n `Failed to retrieve tasks from Transifex. Status: ${res.status}`\n )\n }\n })\n .then(res => ({\n taskId: `${projOrgSlug(secrets)}:r:${documentId}`,\n documentId: documentId,\n locales: res.data.map((locale: Record<string, any>) => ({\n localeId: locale.relationships.language.data.id.split(':')[1],\n progress: Math.floor(\n 100 *\n (locale.attributes.reviewed_strings /\n parseFloat(locale.attributes.total_strings))\n ),\n })),\n }))\n\n const locales = await getLocales(secrets)\n const localeIds = locales.map((l: Record<string, any>) => l.localeId)\n const validLocales = task.locales.filter((locale: Record<string, any>) =>\n localeIds.find((id: string) => id === locale.localeId)\n )\n task.locales = validLocales\n\n return task\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, getHeaders } from './helpers'\n\nexport default async function getTranslation(\n taskId: string,\n localeId: string,\n secrets: Secrets | null\n) {\n const resourceDownloadBody = {\n data: {\n attributes: {\n content_encoding: 'text',\n },\n relationships: {\n language: {\n data: {\n id: `l:${localeId}`,\n type: 'languages',\n },\n },\n resource: {\n data: {\n id: taskId,\n type: 'resources',\n },\n },\n },\n type: 'resource_translations_async_downloads',\n },\n }\n\n const resourceDownloadUrl = `${baseTransifexUrl}/resource_translations_async_downloads`\n const translationDownloadId = await fetch(resourceDownloadUrl, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceDownloadBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n\n const headers = getHeaders(secrets)\n const location = await pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n return handleFileDownload(location)\n}\n\nconst pollForFileDownloadLocation = async (\n resourceDownloadUrl: string,\n translationDownloadId: string,\n headers: Record<string, any>\n): Promise<string> => {\n const response = await fetch(\n `${resourceDownloadUrl}/${translationDownloadId}`,\n {\n headers: headers,\n }\n )\n\n if (response.status === 500) {\n console.info(\n `Transifex plugin message: Received 500 for translation download ID ${translationDownloadId}. Trying to reconnect...`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else if (response.redirected) {\n console.info(\n `Transifex plugin message: Received redirect for translation download ID ${translationDownloadId}. Following redirect now for file download.`\n )\n return response.url\n } else if (response.status === 200) {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId}. Location is still pending, trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId} but received error code ${response.status}. Waiting and trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n }\n}\n\nconst handleFileDownload = async (url: string) => {\n return fetch(url).then(res => res.text())\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getTranslationTask from './getTranslationTask'\n\nconst createResource = async (\n doc: Record<string, any>,\n documentId: string,\n secrets: Secrets | null\n) => {\n const resourceCreateBody = {\n data: {\n attributes: {\n accept_translations: true,\n name: doc.name,\n slug: documentId,\n },\n relationships: {\n i18n_format: {\n data: {\n id: 'HTML_FRAGMENT',\n type: 'i18n_formats',\n },\n },\n project: {\n data: {\n id: projOrgSlug(secrets),\n type: 'projects',\n },\n },\n },\n type: 'resources',\n },\n }\n\n return fetch(`${baseTransifexUrl}/resources`, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceCreateBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n}\n\nexport default async function createTask(\n documentId: string,\n document: Record<string, any>,\n //unfortunately Transifex doesn't let you specify locales on creating a task\n //@ts-ignore\n localeIds: string[],\n secrets: Secrets | null\n) {\n let resourceId = await fetch(\n `${baseTransifexUrl}/resources/${projOrgSlug(secrets)}:r:${documentId}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res => (res.data ? res.data.id : null))\n\n if (!resourceId) {\n resourceId = await createResource(document, documentId, secrets)\n }\n\n const resourceUploadUrl = `${baseTransifexUrl}/resource_strings_async_uploads`\n const resourceUploadBody = {\n data: {\n attributes: {\n content: document.content,\n content_encoding: 'text',\n },\n relationships: {\n resource: {\n data: {\n id: resourceId,\n type: 'resources',\n },\n },\n },\n type: 'resource_strings_async_uploads',\n },\n }\n\n return fetch(resourceUploadUrl, {\n method: 'POST',\n body: JSON.stringify(resourceUploadBody),\n headers: getHeaders(secrets),\n }).then(() => getTranslationTask(documentId, secrets))\n}\n","import { Adapter } from 'sanity-translations-tab'\n\nimport getLocales from './getLocales'\nimport getTranslationTask from './getTranslationTask'\nimport getTranslation from './getTranslation'\nimport createTask from './createTask'\n\nexport const TransifexAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n} from 'sanity-translations-tab'\nimport { TransifexAdapter } from './transifexAdapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (id: string) => Promise<Record<string, any>>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string,\n _idStructure: undefined\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n TransifexAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["baseTransifexUrl","getHeaders","secrets","Authorization","token","projOrgSlug","organization","project","getLocales","fetch","headers","then","res","json","data","map","lang","enabled","description","attributes","name","localeId","code","getTranslationTask","documentId","taskId","locales","projectFilter","resourceFilter","ok","status","Error","locale","relationships","language","id","split","progress","Math","floor","reviewed_strings","parseFloat","total_strings","task","localeIds","l","validLocales","filter","find","getTranslation","resourceDownloadBody","content_encoding","type","resource","resourceDownloadUrl","method","body","JSON","stringify","translationDownloadId","pollForFileDownloadLocation","location","handleFileDownload","response","console","info","Promise","resolve","setTimeout","redirected","url","text","createResource","doc","resourceCreateBody","accept_translations","slug","i18n_format","createTask","document","resourceId","resourceUploadUrl","resourceUploadBody","content","TransifexAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","secretsNamespace","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanity-plugin-transifex.cjs.production.min.js","sources":["../src/transifexAdapter/helpers.ts","../src/transifexAdapter/getLocales.ts","../src/transifexAdapter/getTranslationTask.ts","../src/transifexAdapter/getTranslation.ts","../src/transifexAdapter/createTask.ts","../src/transifexAdapter/index.ts","../src/index.ts"],"sourcesContent":["import { Secrets } from 'sanity-translations-tab'\n\nexport const baseTransifexUrl = 'https://rest.api.transifex.com'\n\nexport const getHeaders = (secrets: Secrets | null) => ({\n Authorization: `Bearer ${secrets?.token}`,\n 'Content-Type': 'application/vnd.api+json',\n})\n\nexport const projOrgSlug = (secrets: Secrets | null) =>\n `o:${secrets?.organization}:p:${secrets?.project}`\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\n\nexport default async function getLocales(secrets: Secrets | null) {\n if (secrets) {\n return fetch(\n `${baseTransifexUrl}/projects/${projOrgSlug(secrets)}/languages`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res =>\n res.data.map((lang: Record<string, any>) => ({\n enabled: true,\n description: lang.attributes.name,\n localeId: lang.attributes.code,\n }))\n )\n } else {\n return []\n }\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getLocales from './getLocales'\n\nexport default async function getTranslationTask(\n documentId: string,\n secrets: Secrets | null\n) {\n if (!documentId || !secrets) {\n return {\n taskId: documentId,\n documentId: documentId,\n locales: [],\n }\n }\n const projectFilter = `filter[project]=${projOrgSlug(secrets)}`\n const resourceFilter = `filter[resource]=${projOrgSlug(\n secrets\n )}:r:${documentId}`\n const task = await fetch(\n `${baseTransifexUrl}/resource_language_stats?${projectFilter}&${resourceFilter}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => {\n if (res.ok) {\n return res.json()\n }\n //normal -- just means that this task doesn't exist yet.\n else if (res.status === 404) {\n return { data: [] }\n } else {\n throw Error(\n `Failed to retrieve tasks from Transifex. Status: ${res.status}`\n )\n }\n })\n .then(res => ({\n taskId: `${projOrgSlug(secrets)}:r:${documentId}`,\n documentId: documentId,\n locales: res.data.map((locale: Record<string, any>) => ({\n localeId: locale.relationships.language.data.id.split(':')[1],\n progress: Math.floor(\n 100 *\n (locale.attributes.reviewed_strings /\n parseFloat(locale.attributes.total_strings))\n ),\n })),\n }))\n\n const locales = await getLocales(secrets)\n const localeIds = locales.map((l: Record<string, any>) => l.localeId)\n const validLocales = task.locales.filter((locale: Record<string, any>) =>\n localeIds.find((id: string) => id === locale.localeId)\n )\n task.locales = validLocales\n\n return task\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, getHeaders } from './helpers'\n\nexport default async function getTranslation(\n taskId: string,\n localeId: string,\n secrets: Secrets | null\n) {\n const resourceDownloadBody = {\n data: {\n attributes: {\n content_encoding: 'text',\n },\n relationships: {\n language: {\n data: {\n id: `l:${localeId}`,\n type: 'languages',\n },\n },\n resource: {\n data: {\n id: taskId,\n type: 'resources',\n },\n },\n },\n type: 'resource_translations_async_downloads',\n },\n }\n\n const resourceDownloadUrl = `${baseTransifexUrl}/resource_translations_async_downloads`\n const translationDownloadId = await fetch(resourceDownloadUrl, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceDownloadBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n\n const headers = getHeaders(secrets)\n const location = await pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n return handleFileDownload(location)\n}\n\nconst pollForFileDownloadLocation = async (\n resourceDownloadUrl: string,\n translationDownloadId: string,\n headers: Record<string, any>\n): Promise<string> => {\n const response = await fetch(\n `${resourceDownloadUrl}/${translationDownloadId}`,\n {\n headers: headers,\n }\n )\n\n if (response.status === 500) {\n console.info(\n `Transifex plugin message: Received 500 for translation download ID ${translationDownloadId}. Trying to reconnect...`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else if (response.redirected) {\n console.info(\n `Transifex plugin message: Received redirect for translation download ID ${translationDownloadId}. Following redirect now for file download.`\n )\n return response.url\n } else if (response.status === 200) {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId}. Location is still pending, trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId} but received error code ${response.status}. Waiting and trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n }\n}\n\nconst handleFileDownload = async (url: string) => {\n return fetch(url).then(res => res.text())\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getTranslationTask from './getTranslationTask'\n\nconst createResource = async (\n doc: Record<string, any>,\n documentId: string,\n secrets: Secrets | null\n) => {\n const resourceCreateBody = {\n data: {\n attributes: {\n accept_translations: true,\n name: doc.name,\n slug: documentId,\n },\n relationships: {\n i18n_format: {\n data: {\n id: 'HTML_FRAGMENT',\n type: 'i18n_formats',\n },\n },\n project: {\n data: {\n id: projOrgSlug(secrets),\n type: 'projects',\n },\n },\n },\n type: 'resources',\n },\n }\n\n return fetch(`${baseTransifexUrl}/resources`, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceCreateBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n}\n\nexport default async function createTask(\n documentId: string,\n document: Record<string, any>,\n //unfortunately Transifex doesn't let you specify locales on creating a task\n //@ts-ignore\n localeIds: string[],\n secrets: Secrets | null\n) {\n let resourceId = await fetch(\n `${baseTransifexUrl}/resources/${projOrgSlug(secrets)}:r:${documentId}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res => (res.data ? res.data.id : null))\n\n if (!resourceId) {\n resourceId = await createResource(document, documentId, secrets)\n }\n\n const resourceUploadUrl = `${baseTransifexUrl}/resource_strings_async_uploads`\n const resourceUploadBody = {\n data: {\n attributes: {\n content: document.content,\n content_encoding: 'text',\n },\n relationships: {\n resource: {\n data: {\n id: resourceId,\n type: 'resources',\n },\n },\n },\n type: 'resource_strings_async_uploads',\n },\n }\n\n return fetch(resourceUploadUrl, {\n method: 'POST',\n body: JSON.stringify(resourceUploadBody),\n headers: getHeaders(secrets),\n }).then(() => getTranslationTask(documentId, secrets))\n}\n","import { Adapter } from 'sanity-translations-tab'\n\nimport getLocales from './getLocales'\nimport getTranslationTask from './getTranslationTask'\nimport getTranslation from './getTranslation'\nimport createTask from './createTask'\n\nexport const TransifexAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n} from 'sanity-translations-tab'\nimport { TransifexAdapter } from './transifexAdapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (id: string) => Promise<Record<string, any>>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n TransifexAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["baseTransifexUrl","getHeaders","secrets","Authorization","token","Content-Type","projOrgSlug","organization","project","getLocales","_context","fetch","headers","then","res","json","data","map","lang","enabled","description","attributes","name","localeId","code","getTranslationTask","documentId","taskId","locales","projectFilter","resourceFilter","ok","status","Error","locale","relationships","language","id","split","progress","Math","floor","reviewed_strings","parseFloat","total_strings","task","localeIds","l","validLocales","filter","find","resourceDownloadBody","content_encoding","type","resource","resourceDownloadUrl","_context3","method","body","JSON","stringify","translationDownloadId","pollForFileDownloadLocation","handleFileDownload","response","console","info","Promise","resolve","setTimeout","redirected","url","text","createResource","doc","resourceCreateBody","accept_translations","slug","i18n_format","document","_context2","resourceId","content","TransifexAdapter","createTask","getTranslation","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","secretsNamespace","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
1
+ {"version":3,"file":"sanity-plugin-transifex.cjs.production.min.js","sources":["../src/transifexAdapter/helpers.ts","../src/transifexAdapter/getLocales.ts","../src/transifexAdapter/getTranslationTask.ts","../src/transifexAdapter/getTranslation.ts","../src/transifexAdapter/createTask.ts","../src/transifexAdapter/index.ts","../src/index.ts"],"sourcesContent":["import { Secrets } from 'sanity-translations-tab'\n\nexport const baseTransifexUrl = 'https://rest.api.transifex.com'\n\nexport const getHeaders = (secrets: Secrets | null) => ({\n Authorization: `Bearer ${secrets?.token}`,\n 'Content-Type': 'application/vnd.api+json',\n})\n\nexport const projOrgSlug = (secrets: Secrets | null) =>\n `o:${secrets?.organization}:p:${secrets?.project}`\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\n\nexport default async function getLocales(secrets: Secrets | null) {\n if (secrets) {\n return fetch(\n `${baseTransifexUrl}/projects/${projOrgSlug(secrets)}/languages`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res =>\n res.data.map((lang: Record<string, any>) => ({\n enabled: true,\n description: lang.attributes.name,\n localeId: lang.attributes.code,\n }))\n )\n } else {\n return []\n }\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getLocales from './getLocales'\n\nexport default async function getTranslationTask(\n documentId: string,\n secrets: Secrets | null\n) {\n if (!documentId || !secrets) {\n return {\n taskId: documentId,\n documentId: documentId,\n locales: [],\n }\n }\n const projectFilter = `filter[project]=${projOrgSlug(secrets)}`\n const resourceFilter = `filter[resource]=${projOrgSlug(\n secrets\n )}:r:${documentId}`\n const task = await fetch(\n `${baseTransifexUrl}/resource_language_stats?${projectFilter}&${resourceFilter}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => {\n if (res.ok) {\n return res.json()\n }\n //normal -- just means that this task doesn't exist yet.\n else if (res.status === 404) {\n return { data: [] }\n } else {\n throw Error(\n `Failed to retrieve tasks from Transifex. Status: ${res.status}`\n )\n }\n })\n .then(res => ({\n taskId: `${projOrgSlug(secrets)}:r:${documentId}`,\n documentId: documentId,\n locales: res.data.map((locale: Record<string, any>) => ({\n localeId: locale.relationships.language.data.id.split(':')[1],\n progress: Math.floor(\n 100 *\n (locale.attributes.reviewed_strings /\n parseFloat(locale.attributes.total_strings))\n ),\n })),\n }))\n\n const locales = await getLocales(secrets)\n const localeIds = locales.map((l: Record<string, any>) => l.localeId)\n const validLocales = task.locales.filter((locale: Record<string, any>) =>\n localeIds.find((id: string) => id === locale.localeId)\n )\n task.locales = validLocales\n\n return task\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, getHeaders } from './helpers'\n\nexport default async function getTranslation(\n taskId: string,\n localeId: string,\n secrets: Secrets | null\n) {\n const resourceDownloadBody = {\n data: {\n attributes: {\n content_encoding: 'text',\n },\n relationships: {\n language: {\n data: {\n id: `l:${localeId}`,\n type: 'languages',\n },\n },\n resource: {\n data: {\n id: taskId,\n type: 'resources',\n },\n },\n },\n type: 'resource_translations_async_downloads',\n },\n }\n\n const resourceDownloadUrl = `${baseTransifexUrl}/resource_translations_async_downloads`\n const translationDownloadId = await fetch(resourceDownloadUrl, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceDownloadBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n\n const headers = getHeaders(secrets)\n const location = await pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n return handleFileDownload(location)\n}\n\nconst pollForFileDownloadLocation = async (\n resourceDownloadUrl: string,\n translationDownloadId: string,\n headers: Record<string, any>\n): Promise<string> => {\n const response = await fetch(\n `${resourceDownloadUrl}/${translationDownloadId}`,\n {\n headers: headers,\n }\n )\n\n if (response.status === 500) {\n console.info(\n `Transifex plugin message: Received 500 for translation download ID ${translationDownloadId}. Trying to reconnect...`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else if (response.redirected) {\n console.info(\n `Transifex plugin message: Received redirect for translation download ID ${translationDownloadId}. Following redirect now for file download.`\n )\n return response.url\n } else if (response.status === 200) {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId}. Location is still pending, trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId} but received error code ${response.status}. Waiting and trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n }\n}\n\nconst handleFileDownload = async (url: string) => {\n return fetch(url).then(res => res.text())\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getTranslationTask from './getTranslationTask'\n\nconst createResource = async (\n doc: Record<string, any>,\n documentId: string,\n secrets: Secrets | null\n) => {\n const resourceCreateBody = {\n data: {\n attributes: {\n accept_translations: true,\n name: doc.name,\n slug: documentId,\n },\n relationships: {\n i18n_format: {\n data: {\n id: 'HTML_FRAGMENT',\n type: 'i18n_formats',\n },\n },\n project: {\n data: {\n id: projOrgSlug(secrets),\n type: 'projects',\n },\n },\n },\n type: 'resources',\n },\n }\n\n return fetch(`${baseTransifexUrl}/resources`, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceCreateBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n}\n\nexport default async function createTask(\n documentId: string,\n document: Record<string, any>,\n //unfortunately Transifex doesn't let you specify locales on creating a task\n //@ts-ignore\n localeIds: string[],\n secrets: Secrets | null\n) {\n let resourceId = await fetch(\n `${baseTransifexUrl}/resources/${projOrgSlug(secrets)}:r:${documentId}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res => (res.data ? res.data.id : null))\n\n if (!resourceId) {\n resourceId = await createResource(document, documentId, secrets)\n }\n\n const resourceUploadUrl = `${baseTransifexUrl}/resource_strings_async_uploads`\n const resourceUploadBody = {\n data: {\n attributes: {\n content: document.content,\n content_encoding: 'text',\n },\n relationships: {\n resource: {\n data: {\n id: resourceId,\n type: 'resources',\n },\n },\n },\n type: 'resource_strings_async_uploads',\n },\n }\n\n return fetch(resourceUploadUrl, {\n method: 'POST',\n body: JSON.stringify(resourceUploadBody),\n headers: getHeaders(secrets),\n }).then(() => getTranslationTask(documentId, secrets))\n}\n","import { Adapter } from 'sanity-translations-tab'\n\nimport getLocales from './getLocales'\nimport getTranslationTask from './getTranslationTask'\nimport getTranslation from './getTranslation'\nimport createTask from './createTask'\n\nexport const TransifexAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n} from 'sanity-translations-tab'\nimport { TransifexAdapter } from './transifexAdapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (id: string) => Promise<Record<string, any>>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string,\n _idStructure: undefined\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n TransifexAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["baseTransifexUrl","getHeaders","secrets","Authorization","token","Content-Type","projOrgSlug","organization","project","getLocales","_context","fetch","headers","then","res","json","data","map","lang","enabled","description","attributes","name","localeId","code","getTranslationTask","documentId","taskId","locales","projectFilter","resourceFilter","ok","status","Error","locale","relationships","language","id","split","progress","Math","floor","reviewed_strings","parseFloat","total_strings","task","localeIds","l","validLocales","filter","find","resourceDownloadBody","content_encoding","type","resource","resourceDownloadUrl","_context3","method","body","JSON","stringify","translationDownloadId","pollForFileDownloadLocation","handleFileDownload","response","console","info","Promise","resolve","setTimeout","redirected","url","text","createResource","doc","resourceCreateBody","accept_translations","slug","i18n_format","document","_context2","resourceId","content","TransifexAdapter","createTask","getTranslation","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","secretsNamespace","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanity-plugin-transifex.esm.js","sources":["../src/transifexAdapter/helpers.ts","../src/transifexAdapter/getLocales.ts","../src/transifexAdapter/getTranslationTask.ts","../src/transifexAdapter/getTranslation.ts","../src/transifexAdapter/createTask.ts","../src/transifexAdapter/index.ts","../src/index.ts"],"sourcesContent":["import { Secrets } from 'sanity-translations-tab'\n\nexport const baseTransifexUrl = 'https://rest.api.transifex.com'\n\nexport const getHeaders = (secrets: Secrets | null) => ({\n Authorization: `Bearer ${secrets?.token}`,\n 'Content-Type': 'application/vnd.api+json',\n})\n\nexport const projOrgSlug = (secrets: Secrets | null) =>\n `o:${secrets?.organization}:p:${secrets?.project}`\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\n\nexport default async function getLocales(secrets: Secrets | null) {\n if (secrets) {\n return fetch(\n `${baseTransifexUrl}/projects/${projOrgSlug(secrets)}/languages`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res =>\n res.data.map((lang: Record<string, any>) => ({\n enabled: true,\n description: lang.attributes.name,\n localeId: lang.attributes.code,\n }))\n )\n } else {\n return []\n }\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getLocales from './getLocales'\n\nexport default async function getTranslationTask(\n documentId: string,\n secrets: Secrets | null\n) {\n if (!documentId || !secrets) {\n return {\n taskId: documentId,\n documentId: documentId,\n locales: [],\n }\n }\n const projectFilter = `filter[project]=${projOrgSlug(secrets)}`\n const resourceFilter = `filter[resource]=${projOrgSlug(\n secrets\n )}:r:${documentId}`\n const task = await fetch(\n `${baseTransifexUrl}/resource_language_stats?${projectFilter}&${resourceFilter}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => {\n if (res.ok) {\n return res.json()\n }\n //normal -- just means that this task doesn't exist yet.\n else if (res.status === 404) {\n return { data: [] }\n } else {\n throw Error(\n `Failed to retrieve tasks from Transifex. Status: ${res.status}`\n )\n }\n })\n .then(res => ({\n taskId: `${projOrgSlug(secrets)}:r:${documentId}`,\n documentId: documentId,\n locales: res.data.map((locale: Record<string, any>) => ({\n localeId: locale.relationships.language.data.id.split(':')[1],\n progress: Math.floor(\n 100 *\n (locale.attributes.reviewed_strings /\n parseFloat(locale.attributes.total_strings))\n ),\n })),\n }))\n\n const locales = await getLocales(secrets)\n const localeIds = locales.map((l: Record<string, any>) => l.localeId)\n const validLocales = task.locales.filter((locale: Record<string, any>) =>\n localeIds.find((id: string) => id === locale.localeId)\n )\n task.locales = validLocales\n\n return task\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, getHeaders } from './helpers'\n\nexport default async function getTranslation(\n taskId: string,\n localeId: string,\n secrets: Secrets | null\n) {\n const resourceDownloadBody = {\n data: {\n attributes: {\n content_encoding: 'text',\n },\n relationships: {\n language: {\n data: {\n id: `l:${localeId}`,\n type: 'languages',\n },\n },\n resource: {\n data: {\n id: taskId,\n type: 'resources',\n },\n },\n },\n type: 'resource_translations_async_downloads',\n },\n }\n\n const resourceDownloadUrl = `${baseTransifexUrl}/resource_translations_async_downloads`\n const translationDownloadId = await fetch(resourceDownloadUrl, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceDownloadBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n\n const headers = getHeaders(secrets)\n const location = await pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n return handleFileDownload(location)\n}\n\nconst pollForFileDownloadLocation = async (\n resourceDownloadUrl: string,\n translationDownloadId: string,\n headers: Record<string, any>\n): Promise<string> => {\n const response = await fetch(\n `${resourceDownloadUrl}/${translationDownloadId}`,\n {\n headers: headers,\n }\n )\n\n if (response.status === 500) {\n console.info(\n `Transifex plugin message: Received 500 for translation download ID ${translationDownloadId}. Trying to reconnect...`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else if (response.redirected) {\n console.info(\n `Transifex plugin message: Received redirect for translation download ID ${translationDownloadId}. Following redirect now for file download.`\n )\n return response.url\n } else if (response.status === 200) {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId}. Location is still pending, trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId} but received error code ${response.status}. Waiting and trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n }\n}\n\nconst handleFileDownload = async (url: string) => {\n return fetch(url).then(res => res.text())\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getTranslationTask from './getTranslationTask'\n\nconst createResource = async (\n doc: Record<string, any>,\n documentId: string,\n secrets: Secrets | null\n) => {\n const resourceCreateBody = {\n data: {\n attributes: {\n accept_translations: true,\n name: doc.name,\n slug: documentId,\n },\n relationships: {\n i18n_format: {\n data: {\n id: 'HTML_FRAGMENT',\n type: 'i18n_formats',\n },\n },\n project: {\n data: {\n id: projOrgSlug(secrets),\n type: 'projects',\n },\n },\n },\n type: 'resources',\n },\n }\n\n return fetch(`${baseTransifexUrl}/resources`, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceCreateBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n}\n\nexport default async function createTask(\n documentId: string,\n document: Record<string, any>,\n //unfortunately Transifex doesn't let you specify locales on creating a task\n //@ts-ignore\n localeIds: string[],\n secrets: Secrets | null\n) {\n let resourceId = await fetch(\n `${baseTransifexUrl}/resources/${projOrgSlug(secrets)}:r:${documentId}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res => (res.data ? res.data.id : null))\n\n if (!resourceId) {\n resourceId = await createResource(document, documentId, secrets)\n }\n\n const resourceUploadUrl = `${baseTransifexUrl}/resource_strings_async_uploads`\n const resourceUploadBody = {\n data: {\n attributes: {\n content: document.content,\n content_encoding: 'text',\n },\n relationships: {\n resource: {\n data: {\n id: resourceId,\n type: 'resources',\n },\n },\n },\n type: 'resource_strings_async_uploads',\n },\n }\n\n return fetch(resourceUploadUrl, {\n method: 'POST',\n body: JSON.stringify(resourceUploadBody),\n headers: getHeaders(secrets),\n }).then(() => getTranslationTask(documentId, secrets))\n}\n","import { Adapter } from 'sanity-translations-tab'\n\nimport getLocales from './getLocales'\nimport getTranslationTask from './getTranslationTask'\nimport getTranslation from './getTranslation'\nimport createTask from './createTask'\n\nexport const TransifexAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n} from 'sanity-translations-tab'\nimport { TransifexAdapter } from './transifexAdapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (id: string) => Promise<Record<string, any>>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n TransifexAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["baseTransifexUrl","getHeaders","secrets","Authorization","token","projOrgSlug","organization","project","getLocales","fetch","headers","then","res","json","data","map","lang","enabled","description","attributes","name","localeId","code","getTranslationTask","documentId","taskId","locales","projectFilter","resourceFilter","ok","status","Error","locale","relationships","language","id","split","progress","Math","floor","reviewed_strings","parseFloat","total_strings","task","localeIds","l","validLocales","filter","find","getTranslation","resourceDownloadBody","content_encoding","type","resource","resourceDownloadUrl","method","body","JSON","stringify","translationDownloadId","pollForFileDownloadLocation","location","handleFileDownload","response","console","info","Promise","resolve","setTimeout","redirected","url","text","createResource","doc","resourceCreateBody","accept_translations","slug","i18n_format","createTask","document","resourceId","resourceUploadUrl","resourceUploadBody","content","TransifexAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","secretsNamespace","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
1
+ {"version":3,"file":"sanity-plugin-transifex.esm.js","sources":["../src/transifexAdapter/helpers.ts","../src/transifexAdapter/getLocales.ts","../src/transifexAdapter/getTranslationTask.ts","../src/transifexAdapter/getTranslation.ts","../src/transifexAdapter/createTask.ts","../src/transifexAdapter/index.ts","../src/index.ts"],"sourcesContent":["import { Secrets } from 'sanity-translations-tab'\n\nexport const baseTransifexUrl = 'https://rest.api.transifex.com'\n\nexport const getHeaders = (secrets: Secrets | null) => ({\n Authorization: `Bearer ${secrets?.token}`,\n 'Content-Type': 'application/vnd.api+json',\n})\n\nexport const projOrgSlug = (secrets: Secrets | null) =>\n `o:${secrets?.organization}:p:${secrets?.project}`\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\n\nexport default async function getLocales(secrets: Secrets | null) {\n if (secrets) {\n return fetch(\n `${baseTransifexUrl}/projects/${projOrgSlug(secrets)}/languages`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res =>\n res.data.map((lang: Record<string, any>) => ({\n enabled: true,\n description: lang.attributes.name,\n localeId: lang.attributes.code,\n }))\n )\n } else {\n return []\n }\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getLocales from './getLocales'\n\nexport default async function getTranslationTask(\n documentId: string,\n secrets: Secrets | null\n) {\n if (!documentId || !secrets) {\n return {\n taskId: documentId,\n documentId: documentId,\n locales: [],\n }\n }\n const projectFilter = `filter[project]=${projOrgSlug(secrets)}`\n const resourceFilter = `filter[resource]=${projOrgSlug(\n secrets\n )}:r:${documentId}`\n const task = await fetch(\n `${baseTransifexUrl}/resource_language_stats?${projectFilter}&${resourceFilter}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => {\n if (res.ok) {\n return res.json()\n }\n //normal -- just means that this task doesn't exist yet.\n else if (res.status === 404) {\n return { data: [] }\n } else {\n throw Error(\n `Failed to retrieve tasks from Transifex. Status: ${res.status}`\n )\n }\n })\n .then(res => ({\n taskId: `${projOrgSlug(secrets)}:r:${documentId}`,\n documentId: documentId,\n locales: res.data.map((locale: Record<string, any>) => ({\n localeId: locale.relationships.language.data.id.split(':')[1],\n progress: Math.floor(\n 100 *\n (locale.attributes.reviewed_strings /\n parseFloat(locale.attributes.total_strings))\n ),\n })),\n }))\n\n const locales = await getLocales(secrets)\n const localeIds = locales.map((l: Record<string, any>) => l.localeId)\n const validLocales = task.locales.filter((locale: Record<string, any>) =>\n localeIds.find((id: string) => id === locale.localeId)\n )\n task.locales = validLocales\n\n return task\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, getHeaders } from './helpers'\n\nexport default async function getTranslation(\n taskId: string,\n localeId: string,\n secrets: Secrets | null\n) {\n const resourceDownloadBody = {\n data: {\n attributes: {\n content_encoding: 'text',\n },\n relationships: {\n language: {\n data: {\n id: `l:${localeId}`,\n type: 'languages',\n },\n },\n resource: {\n data: {\n id: taskId,\n type: 'resources',\n },\n },\n },\n type: 'resource_translations_async_downloads',\n },\n }\n\n const resourceDownloadUrl = `${baseTransifexUrl}/resource_translations_async_downloads`\n const translationDownloadId = await fetch(resourceDownloadUrl, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceDownloadBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n\n const headers = getHeaders(secrets)\n const location = await pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n return handleFileDownload(location)\n}\n\nconst pollForFileDownloadLocation = async (\n resourceDownloadUrl: string,\n translationDownloadId: string,\n headers: Record<string, any>\n): Promise<string> => {\n const response = await fetch(\n `${resourceDownloadUrl}/${translationDownloadId}`,\n {\n headers: headers,\n }\n )\n\n if (response.status === 500) {\n console.info(\n `Transifex plugin message: Received 500 for translation download ID ${translationDownloadId}. Trying to reconnect...`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else if (response.redirected) {\n console.info(\n `Transifex plugin message: Received redirect for translation download ID ${translationDownloadId}. Following redirect now for file download.`\n )\n return response.url\n } else if (response.status === 200) {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId}. Location is still pending, trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n } else {\n console.info(\n `Transifex plugin message: Requested download location for translation download ID ${translationDownloadId} but received error code ${response.status}. Waiting and trying again.`\n )\n await new Promise(resolve => setTimeout(resolve, 3000))\n return pollForFileDownloadLocation(\n resourceDownloadUrl,\n translationDownloadId,\n headers\n )\n }\n}\n\nconst handleFileDownload = async (url: string) => {\n return fetch(url).then(res => res.text())\n}\n","import { Secrets } from 'sanity-translations-tab'\nimport { baseTransifexUrl, projOrgSlug, getHeaders } from './helpers'\nimport getTranslationTask from './getTranslationTask'\n\nconst createResource = async (\n doc: Record<string, any>,\n documentId: string,\n secrets: Secrets | null\n) => {\n const resourceCreateBody = {\n data: {\n attributes: {\n accept_translations: true,\n name: doc.name,\n slug: documentId,\n },\n relationships: {\n i18n_format: {\n data: {\n id: 'HTML_FRAGMENT',\n type: 'i18n_formats',\n },\n },\n project: {\n data: {\n id: projOrgSlug(secrets),\n type: 'projects',\n },\n },\n },\n type: 'resources',\n },\n }\n\n return fetch(`${baseTransifexUrl}/resources`, {\n headers: getHeaders(secrets),\n method: 'POST',\n body: JSON.stringify(resourceCreateBody),\n })\n .then(res => res.json())\n .then(res => res.data.id)\n}\n\nexport default async function createTask(\n documentId: string,\n document: Record<string, any>,\n //unfortunately Transifex doesn't let you specify locales on creating a task\n //@ts-ignore\n localeIds: string[],\n secrets: Secrets | null\n) {\n let resourceId = await fetch(\n `${baseTransifexUrl}/resources/${projOrgSlug(secrets)}:r:${documentId}`,\n { headers: getHeaders(secrets) }\n )\n .then(res => res.json())\n .then(res => (res.data ? res.data.id : null))\n\n if (!resourceId) {\n resourceId = await createResource(document, documentId, secrets)\n }\n\n const resourceUploadUrl = `${baseTransifexUrl}/resource_strings_async_uploads`\n const resourceUploadBody = {\n data: {\n attributes: {\n content: document.content,\n content_encoding: 'text',\n },\n relationships: {\n resource: {\n data: {\n id: resourceId,\n type: 'resources',\n },\n },\n },\n type: 'resource_strings_async_uploads',\n },\n }\n\n return fetch(resourceUploadUrl, {\n method: 'POST',\n body: JSON.stringify(resourceUploadBody),\n headers: getHeaders(secrets),\n }).then(() => getTranslationTask(documentId, secrets))\n}\n","import { Adapter } from 'sanity-translations-tab'\n\nimport getLocales from './getLocales'\nimport getTranslationTask from './getTranslationTask'\nimport getTranslation from './getTranslation'\nimport createTask from './createTask'\n\nexport const TransifexAdapter: Adapter = {\n getLocales,\n getTranslationTask,\n createTask,\n getTranslation,\n}\n","import {\n TranslationsTab,\n baseDocumentLevelConfig,\n baseFieldLevelConfig,\n findLatestDraft,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n Adapter,\n documentLevelPatch,\n fieldLevelPatch,\n} from 'sanity-translations-tab'\nimport { TransifexAdapter } from './transifexAdapter'\n\ninterface ConfigOptions {\n adapter: Adapter\n secretsNamespace: string | null\n exportForTranslation: (id: string) => Promise<Record<string, any>>\n importTranslation: (\n id: string,\n localeId: string,\n doc: string,\n _idStructure: undefined\n ) => Promise<void>\n}\nconst defaultDocumentLevelConfig: ConfigOptions = {\n ...baseDocumentLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nconst defaultFieldLevelConfig: ConfigOptions = {\n ...baseFieldLevelConfig,\n adapter: TransifexAdapter,\n secretsNamespace: 'transifex',\n}\n\nexport {\n TranslationsTab,\n findLatestDraft,\n documentLevelPatch,\n fieldLevelPatch,\n BaseDocumentDeserializer,\n BaseDocumentSerializer,\n BaseDocumentMerger,\n defaultStopTypes,\n customSerializers,\n TransifexAdapter,\n defaultDocumentLevelConfig,\n defaultFieldLevelConfig,\n}\n"],"names":["baseTransifexUrl","getHeaders","secrets","Authorization","token","projOrgSlug","organization","project","getLocales","fetch","headers","then","res","json","data","map","lang","enabled","description","attributes","name","localeId","code","getTranslationTask","documentId","taskId","locales","projectFilter","resourceFilter","ok","status","Error","locale","relationships","language","id","split","progress","Math","floor","reviewed_strings","parseFloat","total_strings","task","localeIds","l","validLocales","filter","find","getTranslation","resourceDownloadBody","content_encoding","type","resource","resourceDownloadUrl","method","body","JSON","stringify","translationDownloadId","pollForFileDownloadLocation","location","handleFileDownload","response","console","info","Promise","resolve","setTimeout","redirected","url","text","createResource","doc","resourceCreateBody","accept_translations","slug","i18n_format","createTask","document","resourceId","resourceUploadUrl","resourceUploadBody","content","TransifexAdapter","defaultDocumentLevelConfig","baseDocumentLevelConfig","adapter","secretsNamespace","defaultFieldLevelConfig","baseFieldLevelConfig"],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.0.6",
2
+ "version": "2.0.8-beta",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -56,6 +56,6 @@
56
56
  "typescript": "^4.0.5"
57
57
  },
58
58
  "dependencies": {
59
- "sanity-translations-tab": "^2.0.8"
59
+ "sanity-translations-tab": "^2.0.11-beta"
60
60
  }
61
61
  }
package/src/index.ts CHANGED
@@ -21,7 +21,8 @@ interface ConfigOptions {
21
21
  importTranslation: (
22
22
  id: string,
23
23
  localeId: string,
24
- doc: string
24
+ doc: string,
25
+ _idStructure: undefined
25
26
  ) => Promise<void>
26
27
  }
27
28
  const defaultDocumentLevelConfig: ConfigOptions = {