@intlify/vue-i18n-extensions 6.0.6 → 6.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.
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,42 @@
1
- import { DirectiveTransform } from '@vue/compiler-dom';
1
+ import { TransformContext, DirectiveTransform } 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
+ * @public
11
+ *
12
+ * @example
13
+ * ```js
14
+ * import { compile } from '@vue/compiler-dom'
15
+ * import { transformVTDirective } from '@intlify/vue-i18n-extensions'
16
+ *
17
+ * // the below is just an example, you can use your own signature resolver
18
+ * const signatureMap = new Map()
19
+ *
20
+ * const transformVT = transformVTDirective({
21
+ * translationSignatures: (context) => {
22
+ * const { prefixIdentifiers, bindingMetadata, inline, filename } = context
23
+ * let signature = ''
24
+ *
25
+ * // something logic to resolve signature like using `signatureMap`
26
+ * // signature = signatureMap.get(filename)
27
+ * // ...
28
+ *
29
+ * return signature
30
+ * }
31
+ * })
32
+ *
33
+ * const { code } = compile(`<p v-t="'hello'"></p>`, {
34
+ * // ...
35
+ * directiveTransforms: { t: transformVT }
36
+ * })
37
+ * ```
38
+ */
39
+ type TranslationSignatureResolver = (context: TransformContext) => string;
4
40
  /**
5
41
  * Transform options for `v-t` custom directive
6
42
  *
@@ -37,7 +73,7 @@ Legacy extends boolean = true> {
37
73
  * If each Vue component has a different signature for the translation function, you can specify several in an array for safe SSR.
38
74
  * This option value is `undefined` and the signature attached to the binding context is `t`.
39
75
  */
40
- translationSignatures?: string | string[];
76
+ translationSignatures?: string | TranslationSignatureResolver | string[] | TranslationSignatureResolver[] | (string | TranslationSignatureResolver)[];
41
77
  }
42
78
  /**
43
79
  * Transform `v-t` custom directive
@@ -92,4 +128,4 @@ DateTimeFormats extends Record<string, unknown> = {}, // eslint-disable-line @ty
92
128
  NumberFormats extends Record<string, unknown> = {}, // eslint-disable-line @typescript-eslint/ban-types -- TODO: fix this
93
129
  Legacy extends boolean = true>(options?: TransformVTDirectiveOptions<Messages, DateTimeFormats, NumberFormats, Legacy>): DirectiveTransform;
94
130
 
95
- export { type TransformVTDirectiveOptions, transformVTDirective };
131
+ export { type TransformVTDirectiveOptions, type TranslationSignatureResolver, transformVTDirective };
package/dist/index.d.mts CHANGED
@@ -1,6 +1,42 @@
1
- import { DirectiveTransform } from '@vue/compiler-dom';
1
+ import { TransformContext, DirectiveTransform } 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
+ * @public
11
+ *
12
+ * @example
13
+ * ```js
14
+ * import { compile } from '@vue/compiler-dom'
15
+ * import { transformVTDirective } from '@intlify/vue-i18n-extensions'
16
+ *
17
+ * // the below is just an example, you can use your own signature resolver
18
+ * const signatureMap = new Map()
19
+ *
20
+ * const transformVT = transformVTDirective({
21
+ * translationSignatures: (context) => {
22
+ * const { prefixIdentifiers, bindingMetadata, inline, filename } = context
23
+ * let signature = ''
24
+ *
25
+ * // something logic to resolve signature like using `signatureMap`
26
+ * // signature = signatureMap.get(filename)
27
+ * // ...
28
+ *
29
+ * return signature
30
+ * }
31
+ * })
32
+ *
33
+ * const { code } = compile(`<p v-t="'hello'"></p>`, {
34
+ * // ...
35
+ * directiveTransforms: { t: transformVT }
36
+ * })
37
+ * ```
38
+ */
39
+ type TranslationSignatureResolver = (context: TransformContext) => string;
4
40
  /**
5
41
  * Transform options for `v-t` custom directive
6
42
  *
@@ -37,7 +73,7 @@ Legacy extends boolean = true> {
37
73
  * If each Vue component has a different signature for the translation function, you can specify several in an array for safe SSR.
38
74
  * This option value is `undefined` and the signature attached to the binding context is `t`.
39
75
  */
40
- translationSignatures?: string | string[];
76
+ translationSignatures?: string | TranslationSignatureResolver | string[] | TranslationSignatureResolver[] | (string | TranslationSignatureResolver)[];
41
77
  }
42
78
  /**
43
79
  * Transform `v-t` custom directive
@@ -92,4 +128,4 @@ DateTimeFormats extends Record<string, unknown> = {}, // eslint-disable-line @ty
92
128
  NumberFormats extends Record<string, unknown> = {}, // eslint-disable-line @typescript-eslint/ban-types -- TODO: fix this
93
129
  Legacy extends boolean = true>(options?: TransformVTDirectiveOptions<Messages, DateTimeFormats, NumberFormats, Legacy>): DirectiveTransform;
94
130
 
95
- export { type TransformVTDirectiveOptions, transformVTDirective };
131
+ export { type TransformVTDirectiveOptions, type TranslationSignatureResolver, transformVTDirective };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,42 @@
1
- import { DirectiveTransform } from '@vue/compiler-dom';
1
+ import { TransformContext, DirectiveTransform } 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
+ * @public
11
+ *
12
+ * @example
13
+ * ```js
14
+ * import { compile } from '@vue/compiler-dom'
15
+ * import { transformVTDirective } from '@intlify/vue-i18n-extensions'
16
+ *
17
+ * // the below is just an example, you can use your own signature resolver
18
+ * const signatureMap = new Map()
19
+ *
20
+ * const transformVT = transformVTDirective({
21
+ * translationSignatures: (context) => {
22
+ * const { prefixIdentifiers, bindingMetadata, inline, filename } = context
23
+ * let signature = ''
24
+ *
25
+ * // something logic to resolve signature like using `signatureMap`
26
+ * // signature = signatureMap.get(filename)
27
+ * // ...
28
+ *
29
+ * return signature
30
+ * }
31
+ * })
32
+ *
33
+ * const { code } = compile(`<p v-t="'hello'"></p>`, {
34
+ * // ...
35
+ * directiveTransforms: { t: transformVT }
36
+ * })
37
+ * ```
38
+ */
39
+ type TranslationSignatureResolver = (context: TransformContext) => string;
4
40
  /**
5
41
  * Transform options for `v-t` custom directive
6
42
  *
@@ -37,7 +73,7 @@ Legacy extends boolean = true> {
37
73
  * If each Vue component has a different signature for the translation function, you can specify several in an array for safe SSR.
38
74
  * This option value is `undefined` and the signature attached to the binding context is `t`.
39
75
  */
40
- translationSignatures?: string | string[];
76
+ translationSignatures?: string | TranslationSignatureResolver | string[] | TranslationSignatureResolver[] | (string | TranslationSignatureResolver)[];
41
77
  }
42
78
  /**
43
79
  * Transform `v-t` custom directive
@@ -92,4 +128,4 @@ DateTimeFormats extends Record<string, unknown> = {}, // eslint-disable-line @ty
92
128
  NumberFormats extends Record<string, unknown> = {}, // eslint-disable-line @typescript-eslint/ban-types -- TODO: fix this
93
129
  Legacy extends boolean = true>(options?: TransformVTDirectiveOptions<Messages, DateTimeFormats, NumberFormats, Legacy>): DirectiveTransform;
94
130
 
95
- export { type TransformVTDirectiveOptions, transformVTDirective };
131
+ export { type TransformVTDirectiveOptions, type TranslationSignatureResolver, transformVTDirective };
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.1",
5
5
  "author": {
6
6
  "name": "kazuya kawaguchi",
7
7
  "email": "kawakazu80@gmail.com"