ts-transformer
Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →
Processa mensagens de texto para tradução de módulos que utilizam react-intl, especificamente:
-
Analisa e verifica se as mensagens são compatíveis com ICU sem problemas de sintaxe.
-
Remove
descriptiondo descritor de mensagem para economizar bytes, pois não é usado em tempo de execução. -
Opção para remover
defaultMessagedo descritor de mensagem para economizar bytes, pois não é usado em tempo de execução. -
Injeta automaticamente o ID da mensagem com base em um padrão específico.
Instalação
- npm
- yarn
npm i @formatjs/ts-transformer
yarn add @formatjs/ts-transformer
Uso
Os descritores de mensagem padrão para o idioma principal do app serão processados de: defineMessages(), defineMessage(), intl.formatMessage e <FormattedMessage>; todos sendo exportações nomeadas do pacote React Intl.
Via ts-loader
import {transform} from '@formatjs/ts-transformer'
module.exports = {
...otherConfigs,
module: {
rules: [
{
test: /\.tsx?$/,
use: [
{
loader: 'ts-loader',
options: {
getCustomTransformers() {
return {
before: [
transform({
overrideIdFn: '[sha512:contenthash:base64:6]',
}),
],
}
},
},
},
],
},
],
},
}
Via ts-jest no jest.config.js
Requer ts-jest@26.4.0 ou superior
// jest.config.js
module.exports = {
// [...]
transform: {
'^.+\\.(ts|tsx)?$': [
'ts-jest',
{
astTransformers: {
before: [
{
path: '@formatjs/ts-transformer/ts-jest-integration',
options: {
// options
overrideIdFn: '[sha512:contenthash:base64:6]',
ast: true,
},
},
],
},
},
],
},
}
Via ts-patch
{
"compilerOptions": {
"plugins": [
{
"transform": "@formatjs/ts-transformer",
"import": "transform",
"type": "config",
"overrideIdFn": "[sha512:contenthash:base64:6]",
"ast": true
}
]
}
}
Via rollup-plugin-typescript2
// rollup.config.js
import typescript from 'rollup-plugin-typescript2'
import {transform} from '@formatjs/ts-transformer'
export default {
input: './main.ts',
plugins: [
typescript({
transformers: () => ({
before: [
transform({
overrideIdFn: '[sha512:contenthash:base64:6]',
ast: true,
}),
],
}),
}),
],
}
Opções
overrideIdFn
Função com a assinatura (id: string, defaultMessage: string, description: string|object) => string que permite substituir o ID tanto no JavaScript extraído quanto nas mensagens.
Alternativamente, overrideIdFn pode ser uma template string, usada apenas quando o ID da mensagem está vazio.
removeDefaultMessage
Remove o campo defaultMessage no JS gerado após a extração.
extractSourceLocation
Define se os metadados sobre a localização da mensagem no arquivo fonte devem ser extraídos. Se true, os campos file, start e end existirão para cada descritor de mensagem extraído. Padrão: false.
additionalComponentNames
Nomes adicionais de componentes para extrair mensagens, ex: ['FormattedFooBarMessage']. NOTA: Por padrão verificamos se FormattedMessage é importado de moduleSourceName para garantir que aliases funcionem. Esta opção não faz essa verificação, sendo menos segura.
additionalFunctionNames
Nomes adicionais de funções para extrair mensagens, ex: ['$formatMessage']. Use se preferir apelidar formatMessage para algo mais curto como $t.
pragma
Analisa pragmas personalizados adicionais específicos. Permite marcar arquivos com metadados como project. Exemplo com este arquivo:
// @intl-meta project:my-custom-project
import {FormattedMessage} from 'react-intl'
;<FormattedMessage defaultMessage="foo" id="bar" />
e com a opção {pragma: "@intl-meta"}, extraímos // @intl-meta project:my-custom-project para {project: 'my-custom-project'} no arquivo resultante.
ast
Pré-analisa defaultMessage em AST para melhor desempenho em runtime. Esta flag não tem efeito quando removeDefaultMessage é true.
onMsgExtracted(filePath: string, msgs: MessageDescriptor[])
Callback acionado quando uma mensagem é encontrada.
onMetaExtracted(filePath: string, meta: Record<string, string>)
Callback acionado quando um meta pragme é encontrado.
preserveWhitespace
Define se espaços em branco e quebras de linha devem ser preservados.
Confira o exemplo de integração em compile.ts.