@messagevisor/vue 0.0.1 → 0.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +9 -0
  4. package/jest.config.js +13 -0
  5. package/lib/MessagevisorContext.d.ts +21 -0
  6. package/lib/MessagevisorContext.js +5 -0
  7. package/lib/MessagevisorContext.js.map +1 -0
  8. package/lib/MessagevisorProvider.d.ts +44 -0
  9. package/lib/MessagevisorProvider.js +45 -0
  10. package/lib/MessagevisorProvider.js.map +1 -0
  11. package/lib/api.d.ts +20 -0
  12. package/lib/api.js +60 -0
  13. package/lib/api.js.map +1 -0
  14. package/lib/components.d.ts +86 -0
  15. package/lib/components.js +95 -0
  16. package/lib/components.js.map +1 -0
  17. package/lib/createMessagevisorProvider.d.ts +18 -0
  18. package/lib/createMessagevisorProvider.js +24 -0
  19. package/lib/createMessagevisorProvider.js.map +1 -0
  20. package/lib/index.d.ts +10 -0
  21. package/lib/index.js +41 -0
  22. package/lib/index.js.map +1 -0
  23. package/lib/richText.d.ts +16 -0
  24. package/lib/richText.js +87 -0
  25. package/lib/richText.js.map +1 -0
  26. package/lib/useMessagevisor.d.ts +1 -0
  27. package/lib/useMessagevisor.js +11 -0
  28. package/lib/useMessagevisor.js.map +1 -0
  29. package/lib/useMessagevisorSnapshot.d.ts +3 -0
  30. package/lib/useMessagevisorSnapshot.js +18 -0
  31. package/lib/useMessagevisorSnapshot.js.map +1 -0
  32. package/lib/useReactiveMessagevisor.d.ts +36 -0
  33. package/lib/useReactiveMessagevisor.js +169 -0
  34. package/lib/useReactiveMessagevisor.js.map +1 -0
  35. package/lib/useSdk.d.ts +2 -0
  36. package/lib/useSdk.js +17 -0
  37. package/lib/useSdk.js.map +1 -0
  38. package/package.json +49 -13
  39. package/src/MessagevisorContext.ts +28 -0
  40. package/src/MessagevisorProvider.spec.ts +99 -0
  41. package/src/MessagevisorProvider.ts +48 -0
  42. package/src/api.ts +119 -0
  43. package/src/components.spec.ts +134 -0
  44. package/src/components.ts +111 -0
  45. package/src/createMessagevisorProvider.ts +43 -0
  46. package/src/index.ts +41 -0
  47. package/src/richText.ts +130 -0
  48. package/src/testUtils.ts +82 -0
  49. package/src/useMessagevisor.spec.ts +70 -0
  50. package/src/useMessagevisor.ts +10 -0
  51. package/src/useMessagevisorSnapshot.ts +20 -0
  52. package/src/useReactiveMessagevisor.spec.ts +185 -0
  53. package/src/useReactiveMessagevisor.ts +353 -0
  54. package/src/useSdk.ts +19 -0
  55. package/tsconfig.cjs.json +12 -0
  56. package/tsconfig.typecheck.json +4 -0
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.resolveRecord = resolveRecord;
15
+ exports.createRichTextTools = createRichTextTools;
16
+ var vue_1 = require("vue");
17
+ var RICH_TAG_NAME_PATTERN = /<([A-Za-z][A-Za-z0-9_-]*)\b[^>]*>/g;
18
+ function getRichTagNames(message) {
19
+ var tags = new Set();
20
+ var match;
21
+ while ((match = RICH_TAG_NAME_PATTERN.exec(message))) {
22
+ tags.add(match[1]);
23
+ }
24
+ return tags;
25
+ }
26
+ function maybeResolveRecordEntry(value) {
27
+ if ((0, vue_1.isRef)(value)) {
28
+ return value.value;
29
+ }
30
+ if (typeof value === "function" && value.length === 0) {
31
+ return value();
32
+ }
33
+ return value;
34
+ }
35
+ function resolveRecord(value) {
36
+ var record = typeof value === "function" ? value() : value;
37
+ if (!record) {
38
+ return record;
39
+ }
40
+ return Object.fromEntries(Object.entries(record).map(function (_a) {
41
+ var key = _a[0], entry = _a[1];
42
+ return [key, maybeResolveRecordEntry(entry)];
43
+ }));
44
+ }
45
+ function createRichTextTools(context) {
46
+ function mergeValues(values, message) {
47
+ var defaults = context.defaultRichTextElements;
48
+ var defaultKeys = Object.keys(defaults);
49
+ if (!message || defaultKeys.length === 0) {
50
+ return values;
51
+ }
52
+ var tagNames = getRichTagNames(message);
53
+ var matchingDefaults = Object.fromEntries(defaultKeys.filter(function (key) { return tagNames.has(key); }).map(function (key) { return [key, defaults[key]]; }));
54
+ if (Object.keys(matchingDefaults).length === 0) {
55
+ return values;
56
+ }
57
+ return __assign(__assign({}, matchingDefaults), (values || {}));
58
+ }
59
+ function wrapResult(result) {
60
+ if (!context.wrapRichTextChunksInFragment || !Array.isArray(result)) {
61
+ return result;
62
+ }
63
+ return (0, vue_1.h)(vue_1.Fragment, null, result.map(function (chunk, index) { return (0, vue_1.h)(vue_1.Fragment, { key: index }, [chunk]); }));
64
+ }
65
+ function runModules(translation, payload) {
66
+ var _a;
67
+ var currentTranslation = translation;
68
+ var locale = context.instance.getLocale();
69
+ if (!locale) {
70
+ return translation;
71
+ }
72
+ for (var _i = 0, _b = context.modules; _i < _b.length; _i++) {
73
+ var module_1 = _b[_i];
74
+ var nextTranslation = (_a = module_1.transform) === null || _a === void 0 ? void 0 : _a.call(module_1, __assign({ translation: currentTranslation, locale: locale }, payload));
75
+ if (typeof nextTranslation !== "undefined") {
76
+ currentTranslation = nextTranslation;
77
+ }
78
+ }
79
+ return currentTranslation;
80
+ }
81
+ return {
82
+ mergeValues: mergeValues,
83
+ runModules: runModules,
84
+ wrapResult: wrapResult,
85
+ };
86
+ }
87
+ //# sourceMappingURL=richText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richText.js","sourceRoot":"","sources":["../src/richText.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function useMessagevisor(): import("./api").MessagevisorApi;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMessagevisor = useMessagevisor;
4
+ var vue_1 = require("vue");
5
+ var api_1 = require("./api");
6
+ var useSdk_1 = require("./useSdk");
7
+ function useMessagevisor() {
8
+ var context = (0, useSdk_1.useMessagevisorContextValue)();
9
+ return (0, vue_1.computed)(function () { return (0, api_1.createMessagevisorApi)(context); }).value;
10
+ }
11
+ //# sourceMappingURL=useMessagevisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessagevisor.js","sourceRoot":"","sources":["../src/useMessagevisor.ts"],"names":[],"mappings":";;AAKA,0CAIC;AATD,2BAA+B;AAE/B,6BAA8C;AAC9C,mCAAuD;AAEvD,SAAgB,eAAe;IAC7B,IAAM,OAAO,GAAG,IAAA,oCAA2B,GAAE,CAAC;IAE9C,OAAO,IAAA,cAAQ,EAAC,cAAM,OAAA,IAAA,2BAAqB,EAAC,OAAO,CAAC,EAA9B,CAA8B,CAAC,CAAC,KAAK,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MessagevisorSnapshot } from "@messagevisor/sdk";
2
+ import { type ComputedRef } from "vue";
3
+ export declare function useMessagevisorSnapshot(): ComputedRef<MessagevisorSnapshot>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMessagevisorSnapshot = useMessagevisorSnapshot;
4
+ var vue_1 = require("vue");
5
+ var useSdk_1 = require("./useSdk");
6
+ function useMessagevisorSnapshot() {
7
+ var sdk = (0, useSdk_1.useSdk)();
8
+ var snapshot = (0, vue_1.shallowRef)(sdk.getSnapshot());
9
+ var unsubscribe = sdk.subscribe(function () {
10
+ snapshot.value = sdk.getSnapshot();
11
+ });
12
+ snapshot.value = sdk.getSnapshot();
13
+ if ((0, vue_1.getCurrentScope)()) {
14
+ (0, vue_1.onScopeDispose)(unsubscribe);
15
+ }
16
+ return (0, vue_1.computed)(function () { return snapshot.value; });
17
+ }
18
+ //# sourceMappingURL=useMessagevisorSnapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessagevisorSnapshot.js","sourceRoot":"","sources":["../src/useMessagevisorSnapshot.ts"],"names":[],"mappings":";;AAKA,0DAcC;AAlBD,2BAA8F;AAE9F,mCAAkC;AAElC,SAAgB,uBAAuB;IACrC,IAAM,GAAG,GAAG,IAAA,eAAM,GAAE,CAAC;IACrB,IAAM,QAAQ,GAAG,IAAA,gBAAU,EAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,IAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC;QAChC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,IAAA,qBAAe,GAAE,EAAE,CAAC;QACtB,IAAA,oBAAc,EAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAA,cAAQ,EAAC,cAAM,OAAA,QAAQ,CAAC,KAAK,EAAd,CAAc,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { EvaluationOptions, MessageFormatResult, MessagePrimitiveValue, TranslateOptions } from "@messagevisor/sdk";
2
+ import type { Context, FormatDateTimePresetOptions, FormatNumberPresetOptions, FormatRelativeTimePresetOptions, LocaleDirection, LocaleKey, MessageKey } from "@messagevisor/types";
3
+ import { type ComputedRef, type MaybeRefOrGetter } from "vue";
4
+ import type { VueMessageChunk } from "./MessagevisorContext";
5
+ import { type VueRichMessageValues } from "./richText";
6
+ export interface LocaleInfo {
7
+ locale: LocaleKey | null;
8
+ direction: LocaleDirection | undefined;
9
+ }
10
+ type MaybeRecord<TRecord extends object> = MaybeRefOrGetter<TRecord | undefined>;
11
+ type MaybeRecordValue<TValue> = TValue | MaybeRefOrGetter<TValue>;
12
+ type MaybePrimitiveValues = Record<string, MaybeRecordValue<MessagePrimitiveValue>>;
13
+ type MaybeRichValues = Record<string, MaybeRecordValue<MessagePrimitiveValue> | VueRichMessageValues[string]>;
14
+ export declare function useLocale(): ComputedRef<LocaleKey | null>;
15
+ export declare function useDirection(): ComputedRef<LocaleDirection | undefined>;
16
+ export declare function useLocaleInfo(): ComputedRef<LocaleInfo>;
17
+ export declare function useMessagevisorContext(): ComputedRef<Context>;
18
+ export declare function useCurrency(): ComputedRef<string | undefined>;
19
+ export declare function useTimeZone(): ComputedRef<string | undefined>;
20
+ export declare function useTranslation(messageKey: MaybeRefOrGetter<MessageKey>, values?: MaybeRecord<MaybePrimitiveValues>, options?: MaybeRecord<TranslateOptions>): ComputedRef<string>;
21
+ export declare function useTranslation(messageKey: MaybeRefOrGetter<MessageKey>, values: MaybeRecord<MaybeRichValues>, options?: MaybeRecord<TranslateOptions>): ComputedRef<MessageFormatResult<VueMessageChunk>>;
22
+ export declare function useFormatMessage(message: MaybeRefOrGetter<string>, values?: MaybeRecord<MaybePrimitiveValues>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<string>;
23
+ export declare function useFormatMessage(message: MaybeRefOrGetter<string>, values: MaybeRecord<MaybeRichValues>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<MessageFormatResult<VueMessageChunk>>;
24
+ export declare function useFormatNumber(value: MaybeRefOrGetter<number>, presetOrOptions?: MaybeRefOrGetter<string | FormatNumberPresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<string>;
25
+ export declare function useFormatNumberToParts(value: MaybeRefOrGetter<number>, presetOrOptions?: MaybeRefOrGetter<string | FormatNumberPresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<Intl.NumberFormatPart[]>;
26
+ export declare function useFormatDate(value: MaybeRefOrGetter<Date | number | string>, presetOrOptions?: MaybeRefOrGetter<string | FormatDateTimePresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<string>;
27
+ export declare function useFormatDateToParts(value: MaybeRefOrGetter<Date | number | string>, presetOrOptions?: MaybeRefOrGetter<string | FormatDateTimePresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<Intl.DateTimeFormatPart[]>;
28
+ export declare function useFormatTime(value: MaybeRefOrGetter<Date | number | string>, presetOrOptions?: MaybeRefOrGetter<string | FormatDateTimePresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<string>;
29
+ export declare function useFormatTimeToParts(value: MaybeRefOrGetter<Date | number | string>, presetOrOptions?: MaybeRefOrGetter<string | FormatDateTimePresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<Intl.DateTimeFormatPart[]>;
30
+ export declare function useFormatDateTimeRange(start: MaybeRefOrGetter<Date | number | string>, end: MaybeRefOrGetter<Date | number | string>, presetOrOptions?: MaybeRefOrGetter<string | FormatDateTimePresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<string>;
31
+ export declare function useFormatRelativeTime(value: MaybeRefOrGetter<number>, unit: MaybeRefOrGetter<Intl.RelativeTimeFormatUnit>, presetOrOptions?: MaybeRefOrGetter<string | FormatRelativeTimePresetOptions | undefined>, options?: MaybeRecord<EvaluationOptions>): ComputedRef<string>;
32
+ export declare function useFormatPlural(value: MaybeRefOrGetter<number>, options?: MaybeRecord<Intl.PluralRulesOptions>): ComputedRef<Intl.LDMLPluralRule>;
33
+ export declare function useFormatList(values: MaybeRefOrGetter<string[]>, options?: MaybeRecord<Record<string, unknown>>): ComputedRef<any>;
34
+ export declare function useFormatListToParts(values: MaybeRefOrGetter<string[]>, options?: MaybeRecord<Record<string, unknown>>): ComputedRef<any>;
35
+ export declare function useFormatDisplayName(value: MaybeRefOrGetter<string>, options?: MaybeRecord<Record<string, unknown>>): ComputedRef<any>;
36
+ export {};
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLocale = useLocale;
4
+ exports.useDirection = useDirection;
5
+ exports.useLocaleInfo = useLocaleInfo;
6
+ exports.useMessagevisorContext = useMessagevisorContext;
7
+ exports.useCurrency = useCurrency;
8
+ exports.useTimeZone = useTimeZone;
9
+ exports.useTranslation = useTranslation;
10
+ exports.useFormatMessage = useFormatMessage;
11
+ exports.useFormatNumber = useFormatNumber;
12
+ exports.useFormatNumberToParts = useFormatNumberToParts;
13
+ exports.useFormatDate = useFormatDate;
14
+ exports.useFormatDateToParts = useFormatDateToParts;
15
+ exports.useFormatTime = useFormatTime;
16
+ exports.useFormatTimeToParts = useFormatTimeToParts;
17
+ exports.useFormatDateTimeRange = useFormatDateTimeRange;
18
+ exports.useFormatRelativeTime = useFormatRelativeTime;
19
+ exports.useFormatPlural = useFormatPlural;
20
+ exports.useFormatList = useFormatList;
21
+ exports.useFormatListToParts = useFormatListToParts;
22
+ exports.useFormatDisplayName = useFormatDisplayName;
23
+ var vue_1 = require("vue");
24
+ var richText_1 = require("./richText");
25
+ var useMessagevisorSnapshot_1 = require("./useMessagevisorSnapshot");
26
+ var useSdk_1 = require("./useSdk");
27
+ function useReactiveContext() {
28
+ var context = (0, useSdk_1.useMessagevisorContextValue)();
29
+ (0, useMessagevisorSnapshot_1.useMessagevisorSnapshot)();
30
+ return context;
31
+ }
32
+ function resolveMaybeRecord(record) {
33
+ var resolved = typeof record === "undefined" ? undefined : (0, vue_1.toValue)(record);
34
+ if (!resolved) {
35
+ return resolved;
36
+ }
37
+ return Object.fromEntries(Object.entries(resolved).map(function (_a) {
38
+ var key = _a[0], value = _a[1];
39
+ if ((0, vue_1.isRef)(value)) {
40
+ return [key, value.value];
41
+ }
42
+ if (typeof value === "function" && value.length === 0) {
43
+ return [key, value()];
44
+ }
45
+ return [key, value];
46
+ }));
47
+ }
48
+ function useLocale() {
49
+ var snapshot = (0, useMessagevisorSnapshot_1.useMessagevisorSnapshot)();
50
+ return (0, vue_1.computed)(function () { return snapshot.value.locale; });
51
+ }
52
+ function useDirection() {
53
+ var snapshot = (0, useMessagevisorSnapshot_1.useMessagevisorSnapshot)();
54
+ return (0, vue_1.computed)(function () { return snapshot.value.direction; });
55
+ }
56
+ function useLocaleInfo() {
57
+ var snapshot = (0, useMessagevisorSnapshot_1.useMessagevisorSnapshot)();
58
+ return (0, vue_1.computed)(function () { return ({
59
+ locale: snapshot.value.locale,
60
+ direction: snapshot.value.direction,
61
+ }); });
62
+ }
63
+ function useMessagevisorContext() {
64
+ var snapshot = (0, useMessagevisorSnapshot_1.useMessagevisorSnapshot)();
65
+ return (0, vue_1.computed)(function () { return snapshot.value.context; });
66
+ }
67
+ function useCurrency() {
68
+ var snapshot = (0, useMessagevisorSnapshot_1.useMessagevisorSnapshot)();
69
+ return (0, vue_1.computed)(function () { return snapshot.value.currency; });
70
+ }
71
+ function useTimeZone() {
72
+ var snapshot = (0, useMessagevisorSnapshot_1.useMessagevisorSnapshot)();
73
+ return (0, vue_1.computed)(function () { return snapshot.value.timeZone; });
74
+ }
75
+ function useTranslation(messageKey, values, options) {
76
+ var context = useReactiveContext();
77
+ var richText = (0, richText_1.createRichTextTools)(context);
78
+ return (0, vue_1.computed)(function () {
79
+ var key = (0, vue_1.toValue)(messageKey);
80
+ var resolvedValues = resolveMaybeRecord(values);
81
+ var resolvedOptions = resolveMaybeRecord(options);
82
+ var message = context.instance.getRawTranslation(key, resolvedOptions);
83
+ var translation = context.instance.translate(key, richText.mergeValues(resolvedValues, message), resolvedOptions);
84
+ return richText.wrapResult(richText.runModules(translation, {
85
+ source: "translation",
86
+ messageKey: key,
87
+ }));
88
+ });
89
+ }
90
+ function useFormatMessage(message, values, options) {
91
+ var context = useReactiveContext();
92
+ var richText = (0, richText_1.createRichTextTools)(context);
93
+ return (0, vue_1.computed)(function () {
94
+ var resolvedMessage = (0, vue_1.toValue)(message);
95
+ var translation = context.instance.formatMessage(resolvedMessage, richText.mergeValues(resolveMaybeRecord(values), resolvedMessage), resolveMaybeRecord(options));
96
+ return richText.wrapResult(richText.runModules(translation, {
97
+ source: "formatMessage",
98
+ }));
99
+ });
100
+ }
101
+ function useFormatNumber(value, presetOrOptions, options) {
102
+ var context = useReactiveContext();
103
+ return (0, vue_1.computed)(function () {
104
+ return context.instance.formatNumber((0, vue_1.toValue)(value), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
105
+ });
106
+ }
107
+ function useFormatNumberToParts(value, presetOrOptions, options) {
108
+ var context = useReactiveContext();
109
+ return (0, vue_1.computed)(function () {
110
+ return context.instance.formatNumberToParts((0, vue_1.toValue)(value), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
111
+ });
112
+ }
113
+ function useFormatDate(value, presetOrOptions, options) {
114
+ var context = useReactiveContext();
115
+ return (0, vue_1.computed)(function () {
116
+ return context.instance.formatDate((0, vue_1.toValue)(value), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
117
+ });
118
+ }
119
+ function useFormatDateToParts(value, presetOrOptions, options) {
120
+ var context = useReactiveContext();
121
+ return (0, vue_1.computed)(function () {
122
+ return context.instance.formatDateToParts((0, vue_1.toValue)(value), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
123
+ });
124
+ }
125
+ function useFormatTime(value, presetOrOptions, options) {
126
+ var context = useReactiveContext();
127
+ return (0, vue_1.computed)(function () {
128
+ return context.instance.formatTime((0, vue_1.toValue)(value), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
129
+ });
130
+ }
131
+ function useFormatTimeToParts(value, presetOrOptions, options) {
132
+ var context = useReactiveContext();
133
+ return (0, vue_1.computed)(function () {
134
+ return context.instance.formatTimeToParts((0, vue_1.toValue)(value), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
135
+ });
136
+ }
137
+ function useFormatDateTimeRange(start, end, presetOrOptions, options) {
138
+ var context = useReactiveContext();
139
+ return (0, vue_1.computed)(function () {
140
+ return context.instance.formatDateTimeRange((0, vue_1.toValue)(start), (0, vue_1.toValue)(end), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
141
+ });
142
+ }
143
+ function useFormatRelativeTime(value, unit, presetOrOptions, options) {
144
+ var context = useReactiveContext();
145
+ return (0, vue_1.computed)(function () {
146
+ return context.instance.formatRelativeTime((0, vue_1.toValue)(value), (0, vue_1.toValue)(unit), (0, vue_1.toValue)(presetOrOptions), resolveMaybeRecord(options));
147
+ });
148
+ }
149
+ function useFormatPlural(value, options) {
150
+ var context = useReactiveContext();
151
+ return (0, vue_1.computed)(function () { return context.instance.formatPlural((0, vue_1.toValue)(value), resolveMaybeRecord(options)); });
152
+ }
153
+ function useFormatList(values, options) {
154
+ var context = useReactiveContext();
155
+ return (0, vue_1.computed)(function () { return context.instance.formatList((0, vue_1.toValue)(values), resolveMaybeRecord(options)); });
156
+ }
157
+ function useFormatListToParts(values, options) {
158
+ var context = useReactiveContext();
159
+ return (0, vue_1.computed)(function () {
160
+ return context.instance.formatListToParts((0, vue_1.toValue)(values), resolveMaybeRecord(options));
161
+ });
162
+ }
163
+ function useFormatDisplayName(value, options) {
164
+ var context = useReactiveContext();
165
+ return (0, vue_1.computed)(function () {
166
+ return context.instance.formatDisplayName((0, vue_1.toValue)(value), resolveMaybeRecord(options));
167
+ });
168
+ }
169
+ //# sourceMappingURL=useReactiveMessagevisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReactiveMessagevisor.js","sourceRoot":"","sources":["../src/useReactiveMessagevisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function useMessagevisorContextValue(): import("./MessagevisorContext").MessagevisorVueContextValue;
2
+ export declare function useSdk(): import("@messagevisor/sdk").Messagevisor;
package/lib/useSdk.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMessagevisorContextValue = useMessagevisorContextValue;
4
+ exports.useSdk = useSdk;
5
+ var vue_1 = require("vue");
6
+ var MessagevisorContext_1 = require("./MessagevisorContext");
7
+ function useMessagevisorContextValue() {
8
+ var context = (0, vue_1.inject)(MessagevisorContext_1.MessagevisorInjectionKey);
9
+ if (!context) {
10
+ throw new Error("useSdk must be used within MessagevisorProvider or createMessagevisorProvider().");
11
+ }
12
+ return context;
13
+ }
14
+ function useSdk() {
15
+ return useMessagevisorContextValue().instance;
16
+ }
17
+ //# sourceMappingURL=useSdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSdk.js","sourceRoot":"","sources":["../src/useSdk.ts"],"names":[],"mappings":";;AAIA,kEAUC;AAED,wBAEC;AAlBD,2BAA6B;AAE7B,6DAAiE;AAEjE,SAAgB,2BAA2B;IACzC,IAAM,OAAO,GAAG,IAAA,YAAM,EAAC,8CAAwB,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,MAAM;IACpB,OAAO,2BAA2B,EAAE,CAAC,QAAQ,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,15 +1,51 @@
1
1
  {
2
- "name": "@messagevisor/vue",
3
- "version": "0.0.1",
4
- "description": "Messagevisor package",
5
- "license": "ISC",
6
- "author": "",
7
- "type": "commonjs",
8
- "main": "index.js",
9
- "publishConfig": {
10
- "access": "public"
11
- },
12
- "scripts": {
13
- "test": "echo \"Error: no test specified\" && exit 1"
14
- }
2
+ "name": "@messagevisor/vue",
3
+ "version": "0.1.0",
4
+ "description": "Vue package for Messagevisor",
5
+ "main": "lib/index.js",
6
+ "module": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "require": "./lib/index.js",
12
+ "import": "./lib/index.js"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "scripts": {
17
+ "transpile": "rimraf lib && tsc --project tsconfig.cjs.json",
18
+ "dist": "echo 'Nothing to dist here'",
19
+ "build": "npm run transpile",
20
+ "test": "jest --config jest.config.js --verbose",
21
+ "typecheck": "tsc --noEmit --skipLibCheck -p tsconfig.typecheck.json"
22
+ },
23
+ "author": {
24
+ "name": "Fahad Heylaal",
25
+ "url": "https://fahad19.com"
26
+ },
27
+ "homepage": "https://messagevisor.com",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/messagevisor/messagevisor.git"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public",
34
+ "registry": "https://registry.npmjs.org/"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/messagevisor/messagevisor/issues"
38
+ },
39
+ "license": "MIT",
40
+ "dependencies": {
41
+ "@messagevisor/sdk": "0.1.0"
42
+ },
43
+ "peerDependencies": {
44
+ "vue": ">=3.3.0"
45
+ },
46
+ "devDependencies": {
47
+ "@vue/test-utils": "^2.4.6",
48
+ "vue": "^3.5.13"
49
+ },
50
+ "gitHead": "555119ab05473127a658ed0cfb6a2743ea3a6db8"
15
51
  }
@@ -0,0 +1,28 @@
1
+ import type { Messagevisor, MessagevisorTranslationSource } from "@messagevisor/sdk";
2
+ import type { MessageKey } from "@messagevisor/types";
3
+ import type { InjectionKey, VNodeChild } from "vue";
4
+
5
+ export type VueMessageChunk = VNodeChild;
6
+ export type VueRichTextElementHandler = (
7
+ chunks: Array<string | VueMessageChunk>,
8
+ ) => VueMessageChunk;
9
+
10
+ export interface MessagevisorProviderModule {
11
+ name?: string;
12
+ transform?: (payload: {
13
+ translation: VueMessageChunk;
14
+ locale: string;
15
+ source: MessagevisorTranslationSource;
16
+ messageKey?: MessageKey;
17
+ }) => VueMessageChunk | void;
18
+ }
19
+
20
+ export interface MessagevisorVueContextValue {
21
+ instance: Messagevisor;
22
+ defaultRichTextElements: Record<string, VueRichTextElementHandler>;
23
+ wrapRichTextChunksInFragment: boolean;
24
+ modules: MessagevisorProviderModule[];
25
+ }
26
+
27
+ export const MessagevisorInjectionKey: InjectionKey<MessagevisorVueContextValue> =
28
+ Symbol("Messagevisor");
@@ -0,0 +1,99 @@
1
+ import { mount } from "@vue/test-utils";
2
+ import { defineComponent, h } from "vue";
3
+
4
+ import { MessagevisorProvider } from "./MessagevisorProvider";
5
+ import { createMessagevisorProvider } from "./createMessagevisorProvider";
6
+ import { useSdk } from "./useSdk";
7
+ import { createTestInstance, nlDatafile } from "./testUtils";
8
+
9
+ describe("MessagevisorProvider", function () {
10
+ it("provides the SDK instance to descendants", function () {
11
+ const m = createTestInstance();
12
+ const Child = defineComponent({
13
+ setup() {
14
+ const sdk = useSdk();
15
+
16
+ return () => h("p", sdk.translate("greeting", { name: "Ada" }));
17
+ },
18
+ });
19
+
20
+ const wrapper = mount(MessagevisorProvider, {
21
+ props: { instance: m },
22
+ slots: { default: () => h(Child) },
23
+ });
24
+
25
+ expect(wrapper.text()).toEqual("Hello Ada");
26
+ });
27
+
28
+ it("throws a clear error when used without a provider or plugin", function () {
29
+ const warn = jest.spyOn(console, "warn").mockImplementation(() => undefined);
30
+ const Child = defineComponent({
31
+ setup() {
32
+ useSdk();
33
+
34
+ return () => h("p", "never");
35
+ },
36
+ });
37
+
38
+ expect(() => mount(Child)).toThrow(
39
+ "useSdk must be used within MessagevisorProvider or createMessagevisorProvider().",
40
+ );
41
+ warn.mockRestore();
42
+ });
43
+
44
+ it("lets a subtree provider override the plugin instance", function () {
45
+ const pluginInstance = createTestInstance();
46
+ const providerInstance = createTestInstance();
47
+ providerInstance.setDatafile(nlDatafile);
48
+ providerInstance.setLocale("nl-NL");
49
+ const Child = defineComponent({
50
+ setup() {
51
+ const sdk = useSdk();
52
+
53
+ return () => h("p", sdk.translate("greeting", { name: "Ada" }));
54
+ },
55
+ });
56
+
57
+ const wrapper = mount(
58
+ defineComponent({
59
+ render() {
60
+ return h(MessagevisorProvider, { instance: providerInstance }, () => h(Child));
61
+ },
62
+ }),
63
+ {
64
+ global: {
65
+ plugins: [createMessagevisorProvider({ instance: pluginInstance })],
66
+ },
67
+ },
68
+ );
69
+
70
+ expect(wrapper.text()).toEqual("Hallo Ada");
71
+ });
72
+
73
+ it("installs $messagevisor, $m, and $t globals", function () {
74
+ const m = createTestInstance();
75
+ const App = defineComponent({
76
+ render() {
77
+ return h("div", [
78
+ h("p", { class: "long" }, this.$messagevisor.translate("greeting", { name: "Ada" })),
79
+ h(
80
+ "p",
81
+ { class: "short" },
82
+ this.$m.formatNumber(12, { style: "currency", currency: "EUR" }),
83
+ ),
84
+ h("p", { class: "t" }, this.$t("greeting", { name: "Grace" })),
85
+ ]);
86
+ },
87
+ });
88
+
89
+ const wrapper = mount(App, {
90
+ global: {
91
+ plugins: [createMessagevisorProvider({ instance: m })],
92
+ },
93
+ });
94
+
95
+ expect(wrapper.find(".long").text()).toEqual("Hello Ada");
96
+ expect(wrapper.find(".short").text()).toContain("€");
97
+ expect(wrapper.find(".t").text()).toEqual("Hello Grace");
98
+ });
99
+ });
@@ -0,0 +1,48 @@
1
+ import type { Messagevisor } from "@messagevisor/sdk";
2
+ import { defineComponent, Fragment, h, provide, type PropType } from "vue";
3
+
4
+ import {
5
+ MessagevisorInjectionKey,
6
+ type MessagevisorProviderModule,
7
+ type VueRichTextElementHandler,
8
+ } from "./MessagevisorContext";
9
+
10
+ export const MessagevisorProvider = defineComponent({
11
+ name: "MessagevisorProvider",
12
+ props: {
13
+ instance: {
14
+ type: Object as PropType<Messagevisor>,
15
+ required: true,
16
+ },
17
+ defaultRichTextElements: {
18
+ type: Object as PropType<Record<string, VueRichTextElementHandler>>,
19
+ default: () => ({}),
20
+ },
21
+ wrapRichTextChunksInFragment: {
22
+ type: Boolean,
23
+ default: true,
24
+ },
25
+ modules: {
26
+ type: Array as PropType<MessagevisorProviderModule[]>,
27
+ default: () => [],
28
+ },
29
+ },
30
+ setup(props, { slots }) {
31
+ provide(MessagevisorInjectionKey, {
32
+ get instance() {
33
+ return props.instance;
34
+ },
35
+ get defaultRichTextElements() {
36
+ return props.defaultRichTextElements;
37
+ },
38
+ get wrapRichTextChunksInFragment() {
39
+ return props.wrapRichTextChunksInFragment;
40
+ },
41
+ get modules() {
42
+ return props.modules;
43
+ },
44
+ });
45
+
46
+ return () => h(Fragment, null, slots.default?.());
47
+ },
48
+ });