Skip to content

Commit ef36fbc

Browse files
authored
feat: support return undefined and base resolver (#229)
1 parent 5a8f766 commit ef36fbc

File tree

3 files changed

+716
-40
lines changed

3 files changed

+716
-40
lines changed

src/transform.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,10 @@ type VTDirectiveValue = {
8585
* })
8686
* ```
8787
*/
88-
export type TranslationSignatureResolver = (context: TransformContext) => string
88+
export type TranslationSignatureResolver = (
89+
context: TransformContext,
90+
baseResolver: (context: TransformContext, signature: string) => string | undefined
91+
) => string | undefined
8992

9093
/**
9194
* Transform options for `v-t` custom directive
@@ -452,24 +455,27 @@ function generateTranslationCallableSignatures(
452455
context: TransformContext,
453456
translationSignatures: (string | TranslationSignatureResolver)[]
454457
): string {
455-
const { prefixIdentifiers, bindingMetadata, inline } = context
458+
const baseResolver = (context: TransformContext, signature: string) => {
459+
const { prefixIdentifiers, bindingMetadata, inline } = context
460+
if (inline && signature !== GLOBAL_TRANSLATE_SIGNATURE) {
461+
return signature
462+
}
463+
const type = hasOwn(bindingMetadata, signature) && bindingMetadata[signature]
464+
const bindingContext = prefixIdentifiers
465+
? (type && type.startsWith('setup')) || type === BindingTypes.LITERAL_CONST
466+
? '$setup.'
467+
: '_ctx.'
468+
: ''
469+
return `${bindingContext}${signature}`
470+
}
456471
return translationSignatures
457472
.map(signatureOrResolver => {
458473
if (isFunction(signatureOrResolver)) {
459-
return signatureOrResolver(context)
460-
}
461-
if (inline && signatureOrResolver !== GLOBAL_TRANSLATE_SIGNATURE) {
462-
return signatureOrResolver
474+
return signatureOrResolver(context, baseResolver)
463475
}
464-
const type =
465-
hasOwn(bindingMetadata, signatureOrResolver) && bindingMetadata[signatureOrResolver]
466-
const bindingContext = prefixIdentifiers
467-
? (type && type.startsWith('setup')) || type === BindingTypes.LITERAL_CONST
468-
? '$setup.'
469-
: '_ctx.'
470-
: ''
471-
return `${bindingContext}${signatureOrResolver}`
476+
return baseResolver(context, signatureOrResolver)
472477
})
478+
.filter(Boolean)
473479
.join(' || ')
474480
}
475481

0 commit comments

Comments
 (0)