@intlify/vue-i18n-extensions 6.0.6 → 6.1.0

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/dist/index.cjs CHANGED
@@ -209,7 +209,7 @@ const GLOBAL_TRANSLATE_SIGNATURE = "$t";
209
209
  function transformVTDirective(options = {}) {
210
210
  const i18nInstance = options.i18n;
211
211
  const mode = shared.isString(options.mode) && ["composition", "legacy"].includes(options.mode) ? options.mode : "composition";
212
- const translationSignatures = shared.isString(options.translationSignatures) ? [options.translationSignatures] : shared.isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
212
+ const translationSignatures = shared.isString(options.translationSignatures) || shared.isFunction(options.translationSignatures) ? [options.translationSignatures] : shared.isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
213
213
  translationSignatures.push(GLOBAL_TRANSLATE_SIGNATURE);
214
214
  return (dir, node, context) => {
215
215
  const { exp, loc } = dir;
@@ -395,13 +395,16 @@ function generateTranslationCode(context, mode, params, translationSignatures) {
395
395
  }
396
396
  function generateTranslationCallableSignatures(context, translationSignatures) {
397
397
  const { prefixIdentifiers, bindingMetadata, inline } = context;
398
- return translationSignatures.map((signature) => {
399
- if (inline && signature !== GLOBAL_TRANSLATE_SIGNATURE) {
400
- return signature;
398
+ return translationSignatures.map((signatureOrResolver) => {
399
+ if (shared.isFunction(signatureOrResolver)) {
400
+ return signatureOrResolver(context);
401
401
  }
402
- const type = shared.hasOwn(bindingMetadata, signature) && bindingMetadata[signature];
402
+ if (inline && signatureOrResolver !== GLOBAL_TRANSLATE_SIGNATURE) {
403
+ return signatureOrResolver;
404
+ }
405
+ const type = shared.hasOwn(bindingMetadata, signatureOrResolver) && bindingMetadata[signatureOrResolver];
403
406
  const bindingContext = prefixIdentifiers ? type && type.startsWith("setup") || type === compilerDom.BindingTypes.LITERAL_CONST ? "$setup." : "_ctx." : "";
404
- return `${bindingContext}${signature}`;
407
+ return `${bindingContext}${signatureOrResolver}`;
405
408
  }).join(" || ");
406
409
  }
407
410
  function generateComposableCode(context, params, translationSignatures) {
package/dist/index.d.cts CHANGED
@@ -1,6 +1,40 @@
1
- import { DirectiveTransform } from '@vue/compiler-dom';
1
+ import { DirectiveTransform, TransformContext } from '@vue/compiler-dom';
2
2
  import { I18n, I18nMode } from 'vue-i18n';
3
3
 
4
+ /**
5
+ * Translation signature resolver
6
+ *
7
+ * @remarks
8
+ * This resolver is used at {@link TransformVTDirectiveOptions | 'translationSignatures' option}
9
+ *
10
+ * @example
11
+ * ```js
12
+ * import { compile } from '@vue/compiler-dom'
13
+ * import { transformVTDirective } from '@intlify/vue-i18n-extensions'
14
+ *
15
+ * // the below is just an example, you can use your own signature resolver
16
+ * const signatureMap = new Map()
17
+ *
18
+ * const transformVT = transformVTDirective({
19
+ * translationSignatures: (context) => {
20
+ * const { prefixIdentifiers, bindingMetadata, inline, filename } = context
21
+ * let signature = ''
22
+ *
23
+ * // something logic to resolve signature like using `signatureMap`
24
+ * // signature = signatureMap.get(filename)
25
+ * // ...
26
+ *
27
+ * return signature
28
+ * }
29
+ * })
30
+ *
31
+ * const { code } = compile(`<p v-t="'hello'"></p>`, {
32
+ * // ...
33
+ * directiveTransforms: { t: transformVT }
34
+ * })
35
+ * ```
36
+ */
37
+ type TranslationSignatureResolver = (context: TransformContext) => string;
4
38
  /**
5
39
  * Transform options for `v-t` custom directive
6
40
  *
@@ -37,7 +71,7 @@ Legacy extends boolean = true> {
37
71
  * If each Vue component has a different signature for the translation function, you can specify several in an array for safe SSR.
38
72
  * This option value is `undefined` and the signature attached to the binding context is `t`.
39
73
  */
40
- translationSignatures?: string | string[];
74
+ translationSignatures?: string | TranslationSignatureResolver | string[] | TranslationSignatureResolver[] | (string | TranslationSignatureResolver)[];
41
75
  }
42
76
  /**
43
77
  * Transform `v-t` custom directive
package/dist/index.d.mts CHANGED
@@ -1,6 +1,40 @@
1
- import { DirectiveTransform } from '@vue/compiler-dom';
1
+ import { DirectiveTransform, TransformContext } from '@vue/compiler-dom';
2
2
  import { I18n, I18nMode } from 'vue-i18n';
3
3
 
4
+ /**
5
+ * Translation signature resolver
6
+ *
7
+ * @remarks
8
+ * This resolver is used at {@link TransformVTDirectiveOptions | 'translationSignatures' option}
9
+ *
10
+ * @example
11
+ * ```js
12
+ * import { compile } from '@vue/compiler-dom'
13
+ * import { transformVTDirective } from '@intlify/vue-i18n-extensions'
14
+ *
15
+ * // the below is just an example, you can use your own signature resolver
16
+ * const signatureMap = new Map()
17
+ *
18
+ * const transformVT = transformVTDirective({
19
+ * translationSignatures: (context) => {
20
+ * const { prefixIdentifiers, bindingMetadata, inline, filename } = context
21
+ * let signature = ''
22
+ *
23
+ * // something logic to resolve signature like using `signatureMap`
24
+ * // signature = signatureMap.get(filename)
25
+ * // ...
26
+ *
27
+ * return signature
28
+ * }
29
+ * })
30
+ *
31
+ * const { code } = compile(`<p v-t="'hello'"></p>`, {
32
+ * // ...
33
+ * directiveTransforms: { t: transformVT }
34
+ * })
35
+ * ```
36
+ */
37
+ type TranslationSignatureResolver = (context: TransformContext) => string;
4
38
  /**
5
39
  * Transform options for `v-t` custom directive
6
40
  *
@@ -37,7 +71,7 @@ Legacy extends boolean = true> {
37
71
  * If each Vue component has a different signature for the translation function, you can specify several in an array for safe SSR.
38
72
  * This option value is `undefined` and the signature attached to the binding context is `t`.
39
73
  */
40
- translationSignatures?: string | string[];
74
+ translationSignatures?: string | TranslationSignatureResolver | string[] | TranslationSignatureResolver[] | (string | TranslationSignatureResolver)[];
41
75
  }
42
76
  /**
43
77
  * Transform `v-t` custom directive
package/dist/index.d.ts CHANGED
@@ -1,6 +1,40 @@
1
- import { DirectiveTransform } from '@vue/compiler-dom';
1
+ import { DirectiveTransform, TransformContext } from '@vue/compiler-dom';
2
2
  import { I18n, I18nMode } from 'vue-i18n';
3
3
 
4
+ /**
5
+ * Translation signature resolver
6
+ *
7
+ * @remarks
8
+ * This resolver is used at {@link TransformVTDirectiveOptions | 'translationSignatures' option}
9
+ *
10
+ * @example
11
+ * ```js
12
+ * import { compile } from '@vue/compiler-dom'
13
+ * import { transformVTDirective } from '@intlify/vue-i18n-extensions'
14
+ *
15
+ * // the below is just an example, you can use your own signature resolver
16
+ * const signatureMap = new Map()
17
+ *
18
+ * const transformVT = transformVTDirective({
19
+ * translationSignatures: (context) => {
20
+ * const { prefixIdentifiers, bindingMetadata, inline, filename } = context
21
+ * let signature = ''
22
+ *
23
+ * // something logic to resolve signature like using `signatureMap`
24
+ * // signature = signatureMap.get(filename)
25
+ * // ...
26
+ *
27
+ * return signature
28
+ * }
29
+ * })
30
+ *
31
+ * const { code } = compile(`<p v-t="'hello'"></p>`, {
32
+ * // ...
33
+ * directiveTransforms: { t: transformVT }
34
+ * })
35
+ * ```
36
+ */
37
+ type TranslationSignatureResolver = (context: TransformContext) => string;
4
38
  /**
5
39
  * Transform options for `v-t` custom directive
6
40
  *
@@ -37,7 +71,7 @@ Legacy extends boolean = true> {
37
71
  * If each Vue component has a different signature for the translation function, you can specify several in an array for safe SSR.
38
72
  * This option value is `undefined` and the signature attached to the binding context is `t`.
39
73
  */
40
- translationSignatures?: string | string[];
74
+ translationSignatures?: string | TranslationSignatureResolver | string[] | TranslationSignatureResolver[] | (string | TranslationSignatureResolver)[];
41
75
  }
42
76
  /**
43
77
  * Transform `v-t` custom directive
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { NodeTypes, TO_DISPLAY_STRING, createCompoundExpression, createSimpleExpression, isText, BindingTypes } from '@vue/compiler-dom';
2
- import { isString, format, isNumber, isArray, isSymbol, isObject, toDisplayString, hasOwn } from '@intlify/shared';
2
+ import { isString, format, isNumber, isFunction, isArray, isSymbol, isObject, toDisplayString, hasOwn } from '@intlify/shared';
3
3
  import { parse } from '@babel/parser';
4
4
 
5
5
  function evaluateValue(expression) {
@@ -207,7 +207,7 @@ const GLOBAL_TRANSLATE_SIGNATURE = "$t";
207
207
  function transformVTDirective(options = {}) {
208
208
  const i18nInstance = options.i18n;
209
209
  const mode = isString(options.mode) && ["composition", "legacy"].includes(options.mode) ? options.mode : "composition";
210
- const translationSignatures = isString(options.translationSignatures) ? [options.translationSignatures] : isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
210
+ const translationSignatures = isString(options.translationSignatures) || isFunction(options.translationSignatures) ? [options.translationSignatures] : isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
211
211
  translationSignatures.push(GLOBAL_TRANSLATE_SIGNATURE);
212
212
  return (dir, node, context) => {
213
213
  const { exp, loc } = dir;
@@ -393,13 +393,16 @@ function generateTranslationCode(context, mode, params, translationSignatures) {
393
393
  }
394
394
  function generateTranslationCallableSignatures(context, translationSignatures) {
395
395
  const { prefixIdentifiers, bindingMetadata, inline } = context;
396
- return translationSignatures.map((signature) => {
397
- if (inline && signature !== GLOBAL_TRANSLATE_SIGNATURE) {
398
- return signature;
396
+ return translationSignatures.map((signatureOrResolver) => {
397
+ if (isFunction(signatureOrResolver)) {
398
+ return signatureOrResolver(context);
399
399
  }
400
- const type = hasOwn(bindingMetadata, signature) && bindingMetadata[signature];
400
+ if (inline && signatureOrResolver !== GLOBAL_TRANSLATE_SIGNATURE) {
401
+ return signatureOrResolver;
402
+ }
403
+ const type = hasOwn(bindingMetadata, signatureOrResolver) && bindingMetadata[signatureOrResolver];
401
404
  const bindingContext = prefixIdentifiers ? type && type.startsWith("setup") || type === BindingTypes.LITERAL_CONST ? "$setup." : "_ctx." : "";
402
- return `${bindingContext}${signature}`;
405
+ return `${bindingContext}${signatureOrResolver}`;
403
406
  }).join(" || ");
404
407
  }
405
408
  function generateComposableCode(context, params, translationSignatures) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@intlify/vue-i18n-extensions",
3
3
  "description": "vue-i18n extensions",
4
- "version": "6.0.6",
4
+ "version": "6.1.0",
5
5
  "author": {
6
6
  "name": "kazuya kawaguchi",
7
7
  "email": "kawakazu80@gmail.com"