@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 +9 -6
- package/dist/index.d.cts +39 -3
- package/dist/index.d.mts +39 -3
- package/dist/index.d.ts +39 -3
- package/dist/index.mjs +10 -7
- package/package.json +1 -1
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((
|
|
399
|
-
if (
|
|
400
|
-
return
|
|
398
|
+
return translationSignatures.map((signatureOrResolver) => {
|
|
399
|
+
if (shared.isFunction(signatureOrResolver)) {
|
|
400
|
+
return signatureOrResolver(context);
|
|
401
401
|
}
|
|
402
|
-
|
|
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}${
|
|
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((
|
|
397
|
-
if (
|
|
398
|
-
return
|
|
396
|
+
return translationSignatures.map((signatureOrResolver) => {
|
|
397
|
+
if (isFunction(signatureOrResolver)) {
|
|
398
|
+
return signatureOrResolver(context);
|
|
399
399
|
}
|
|
400
|
-
|
|
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}${
|
|
405
|
+
return `${bindingContext}${signatureOrResolver}`;
|
|
403
406
|
}).join(" || ");
|
|
404
407
|
}
|
|
405
408
|
function generateComposableCode(context, params, translationSignatures) {
|