@intlify/vue-i18n-extensions 6.0.5 → 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 +13 -6
- package/dist/index.d.cts +36 -2
- package/dist/index.d.mts +36 -2
- package/dist/index.d.ts +36 -2
- package/dist/index.mjs +14 -7
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -205,11 +205,12 @@ function createContentBuilder(options = {}) {
|
|
|
205
205
|
};
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
+
const GLOBAL_TRANSLATE_SIGNATURE = "$t";
|
|
208
209
|
function transformVTDirective(options = {}) {
|
|
209
210
|
const i18nInstance = options.i18n;
|
|
210
211
|
const mode = shared.isString(options.mode) && ["composition", "legacy"].includes(options.mode) ? options.mode : "composition";
|
|
211
|
-
const translationSignatures = shared.isString(options.translationSignatures) ? [options.translationSignatures] : shared.isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
|
|
212
|
-
translationSignatures.push(
|
|
212
|
+
const translationSignatures = shared.isString(options.translationSignatures) || shared.isFunction(options.translationSignatures) ? [options.translationSignatures] : shared.isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
|
|
213
|
+
translationSignatures.push(GLOBAL_TRANSLATE_SIGNATURE);
|
|
213
214
|
return (dir, node, context) => {
|
|
214
215
|
const { exp, loc } = dir;
|
|
215
216
|
if (!exp) {
|
|
@@ -393,11 +394,17 @@ function generateTranslationCode(context, mode, params, translationSignatures) {
|
|
|
393
394
|
return mode === "composition" ? generateComposableCode(context, params, translationSignatures) : generateLegacyCode(context, params);
|
|
394
395
|
}
|
|
395
396
|
function generateTranslationCallableSignatures(context, translationSignatures) {
|
|
396
|
-
const { prefixIdentifiers, bindingMetadata } = context;
|
|
397
|
-
return translationSignatures.map((
|
|
398
|
-
|
|
397
|
+
const { prefixIdentifiers, bindingMetadata, inline } = context;
|
|
398
|
+
return translationSignatures.map((signatureOrResolver) => {
|
|
399
|
+
if (shared.isFunction(signatureOrResolver)) {
|
|
400
|
+
return signatureOrResolver(context);
|
|
401
|
+
}
|
|
402
|
+
if (inline && signatureOrResolver !== GLOBAL_TRANSLATE_SIGNATURE) {
|
|
403
|
+
return signatureOrResolver;
|
|
404
|
+
}
|
|
405
|
+
const type = shared.hasOwn(bindingMetadata, signatureOrResolver) && bindingMetadata[signatureOrResolver];
|
|
399
406
|
const bindingContext = prefixIdentifiers ? type && type.startsWith("setup") || type === compilerDom.BindingTypes.LITERAL_CONST ? "$setup." : "_ctx." : "";
|
|
400
|
-
return `${bindingContext}${
|
|
407
|
+
return `${bindingContext}${signatureOrResolver}`;
|
|
401
408
|
}).join(" || ");
|
|
402
409
|
}
|
|
403
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) {
|
|
@@ -203,11 +203,12 @@ function createContentBuilder(options = {}) {
|
|
|
203
203
|
};
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
+
const GLOBAL_TRANSLATE_SIGNATURE = "$t";
|
|
206
207
|
function transformVTDirective(options = {}) {
|
|
207
208
|
const i18nInstance = options.i18n;
|
|
208
209
|
const mode = isString(options.mode) && ["composition", "legacy"].includes(options.mode) ? options.mode : "composition";
|
|
209
|
-
const translationSignatures = isString(options.translationSignatures) ? [options.translationSignatures] : isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
|
|
210
|
-
translationSignatures.push(
|
|
210
|
+
const translationSignatures = isString(options.translationSignatures) || isFunction(options.translationSignatures) ? [options.translationSignatures] : isArray(options.translationSignatures) ? options.translationSignatures : ["t"];
|
|
211
|
+
translationSignatures.push(GLOBAL_TRANSLATE_SIGNATURE);
|
|
211
212
|
return (dir, node, context) => {
|
|
212
213
|
const { exp, loc } = dir;
|
|
213
214
|
if (!exp) {
|
|
@@ -391,11 +392,17 @@ function generateTranslationCode(context, mode, params, translationSignatures) {
|
|
|
391
392
|
return mode === "composition" ? generateComposableCode(context, params, translationSignatures) : generateLegacyCode(context, params);
|
|
392
393
|
}
|
|
393
394
|
function generateTranslationCallableSignatures(context, translationSignatures) {
|
|
394
|
-
const { prefixIdentifiers, bindingMetadata } = context;
|
|
395
|
-
return translationSignatures.map((
|
|
396
|
-
|
|
395
|
+
const { prefixIdentifiers, bindingMetadata, inline } = context;
|
|
396
|
+
return translationSignatures.map((signatureOrResolver) => {
|
|
397
|
+
if (isFunction(signatureOrResolver)) {
|
|
398
|
+
return signatureOrResolver(context);
|
|
399
|
+
}
|
|
400
|
+
if (inline && signatureOrResolver !== GLOBAL_TRANSLATE_SIGNATURE) {
|
|
401
|
+
return signatureOrResolver;
|
|
402
|
+
}
|
|
403
|
+
const type = hasOwn(bindingMetadata, signatureOrResolver) && bindingMetadata[signatureOrResolver];
|
|
397
404
|
const bindingContext = prefixIdentifiers ? type && type.startsWith("setup") || type === BindingTypes.LITERAL_CONST ? "$setup." : "_ctx." : "";
|
|
398
|
-
return `${bindingContext}${
|
|
405
|
+
return `${bindingContext}${signatureOrResolver}`;
|
|
399
406
|
}).join(" || ");
|
|
400
407
|
}
|
|
401
408
|
function generateComposableCode(context, params, translationSignatures) {
|