@inlang/sdk 0.7.0 → 0.9.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/adapter/solidAdapter.test.js +6 -6
- package/dist/createMessagesQuery.test.js +9 -0
- package/dist/loadProject.d.ts.map +1 -1
- package/dist/loadProject.js +8 -4
- package/dist/loadProject.test.js +14 -15
- package/dist/messages/variant.d.ts +4 -4
- package/dist/messages/variant.d.ts.map +1 -1
- package/dist/messages/variant.js +55 -55
- package/dist/messages/variant.test.js +102 -45
- package/dist/resolve-modules/plugins/resolvePlugins.d.ts.map +1 -1
- package/dist/resolve-modules/plugins/resolvePlugins.js +3 -5
- package/dist/resolve-modules/plugins/resolvePlugins.test.js +79 -49
- package/dist/resolve-modules/plugins/types.d.ts +4 -5
- package/dist/resolve-modules/plugins/types.d.ts.map +1 -1
- package/dist/test-utilities/createMessage.d.ts +1 -1
- package/dist/test-utilities/createMessage.js +1 -1
- package/dist/test-utilities/createMessage.test.js +4 -4
- package/package.json +1 -1
- package/src/adapter/solidAdapter.test.ts +14 -14
- package/src/adapter/solidAdapter.ts +1 -1
- package/src/api.ts +2 -2
- package/src/createMessageLintReportsQuery.ts +4 -4
- package/src/createMessagesQuery.test.ts +30 -17
- package/src/createMessagesQuery.ts +2 -2
- package/src/lint/message/lintMessages.ts +1 -1
- package/src/lint/message/lintSingleMessage.test.ts +1 -1
- package/src/lint/message/lintSingleMessage.ts +2 -2
- package/src/loadProject.test.ts +24 -27
- package/src/loadProject.ts +20 -16
- package/src/messages/errors.ts +2 -2
- package/src/messages/variant.test.ts +113 -49
- package/src/messages/variant.ts +73 -67
- package/src/parseConfig.ts +2 -2
- package/src/resolve-modules/import.test.ts +2 -2
- package/src/resolve-modules/import.ts +1 -1
- package/src/resolve-modules/message-lint-rules/resolveMessageLintRules.ts +1 -1
- package/src/resolve-modules/plugins/resolvePlugins.test.ts +96 -64
- package/src/resolve-modules/plugins/resolvePlugins.ts +19 -21
- package/src/resolve-modules/plugins/types.ts +4 -8
- package/src/resolve-modules/resolveModules.ts +4 -4
- package/src/test-utilities/createMessage.test.ts +7 -7
- package/src/test-utilities/createMessage.ts +1 -1
package/src/loadProject.ts
CHANGED
|
@@ -47,7 +47,9 @@ export const loadProject = async (args: {
|
|
|
47
47
|
loadSettings({ settingsFilePath: args.settingsFilePath, nodeishFs: args.nodeishFs })
|
|
48
48
|
.then((settings) => {
|
|
49
49
|
setSettings(settings)
|
|
50
|
-
|
|
50
|
+
// rename settings to get a convenient access to the data in Posthog
|
|
51
|
+
const project_settings = settings
|
|
52
|
+
args._capture?.("SDK used settings", { project_settings })
|
|
51
53
|
})
|
|
52
54
|
.catch((err) => {
|
|
53
55
|
markInitAsFailed(err)
|
|
@@ -56,7 +58,7 @@ export const loadProject = async (args: {
|
|
|
56
58
|
// TODO: create FS watcher and update settings on change
|
|
57
59
|
|
|
58
60
|
const writeSettingsToDisk = skipFirst((settings: ProjectSettings) =>
|
|
59
|
-
_writeSettingsToDisk({ nodeishFs: args.nodeishFs, settings })
|
|
61
|
+
_writeSettingsToDisk({ nodeishFs: args.nodeishFs, settings })
|
|
60
62
|
)
|
|
61
63
|
|
|
62
64
|
const setSettings = (settings: ProjectSettings): Result<void, ProjectSettingsInvalidError> => {
|
|
@@ -111,16 +113,15 @@ export const loadProject = async (args: {
|
|
|
111
113
|
|
|
112
114
|
makeTrulyAsync(
|
|
113
115
|
_resolvedModules.resolvedPluginApi.loadMessages({
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}),
|
|
116
|
+
settings: settingsValue,
|
|
117
|
+
})
|
|
117
118
|
)
|
|
118
119
|
.then((messages) => {
|
|
119
120
|
setMessages(messages)
|
|
120
121
|
markInitAsComplete()
|
|
121
122
|
})
|
|
122
123
|
.catch((err) =>
|
|
123
|
-
markInitAsFailed(new PluginLoadMessagesError("Error in load messages", { cause: err }))
|
|
124
|
+
markInitAsFailed(new PluginLoadMessagesError("Error in load messages", { cause: err }))
|
|
124
125
|
)
|
|
125
126
|
})
|
|
126
127
|
|
|
@@ -139,7 +140,7 @@ export const loadProject = async (args: {
|
|
|
139
140
|
"Unknown module. You stumbled on a bug in inlang's source code. Please open an issue.",
|
|
140
141
|
// default to warning, see https://github.com/inlang/monorepo/issues/1254
|
|
141
142
|
level: settingsValue["messageLintRuleLevels"]?.[rule.id] ?? "warning",
|
|
142
|
-
} satisfies InstalledMessageLintRule)
|
|
143
|
+
} satisfies InstalledMessageLintRule)
|
|
143
144
|
) satisfies Array<InstalledMessageLintRule>
|
|
144
145
|
}
|
|
145
146
|
|
|
@@ -164,7 +165,7 @@ export const loadProject = async (args: {
|
|
|
164
165
|
messages,
|
|
165
166
|
settings as () => ProjectSettings,
|
|
166
167
|
installedMessageLintRules,
|
|
167
|
-
resolvedModules
|
|
168
|
+
resolvedModules
|
|
168
169
|
)
|
|
169
170
|
|
|
170
171
|
const debouncedSave = skipFirst(
|
|
@@ -172,7 +173,10 @@ export const loadProject = async (args: {
|
|
|
172
173
|
500,
|
|
173
174
|
async (newMessages) => {
|
|
174
175
|
try {
|
|
175
|
-
await resolvedModules()?.resolvedPluginApi.saveMessages({
|
|
176
|
+
await resolvedModules()?.resolvedPluginApi.saveMessages({
|
|
177
|
+
settings: settingsValue,
|
|
178
|
+
messages: newMessages,
|
|
179
|
+
})
|
|
176
180
|
} catch (err) {
|
|
177
181
|
throw new PluginSaveMessagesError("Error in saving messages", {
|
|
178
182
|
cause: err,
|
|
@@ -185,8 +189,8 @@ export const loadProject = async (args: {
|
|
|
185
189
|
setMessages(newMessages)
|
|
186
190
|
}
|
|
187
191
|
},
|
|
188
|
-
{ atBegin: false }
|
|
189
|
-
)
|
|
192
|
+
{ atBegin: false }
|
|
193
|
+
)
|
|
190
194
|
)
|
|
191
195
|
|
|
192
196
|
createEffect(() => {
|
|
@@ -224,14 +228,14 @@ const loadSettings = async (args: {
|
|
|
224
228
|
nodeishFs: NodeishFilesystemSubset
|
|
225
229
|
}) => {
|
|
226
230
|
const { data: settingsFile, error: settingsFileError } = await tryCatch(
|
|
227
|
-
async () => await args.nodeishFs.readFile(args.settingsFilePath, { encoding: "utf-8" })
|
|
231
|
+
async () => await args.nodeishFs.readFile(args.settingsFilePath, { encoding: "utf-8" })
|
|
228
232
|
)
|
|
229
233
|
if (settingsFileError)
|
|
230
234
|
throw new ProjectSettingsFileNotFoundError(
|
|
231
235
|
`Could not locate settings file in (${args.settingsFilePath}).`,
|
|
232
236
|
{
|
|
233
237
|
cause: settingsFileError,
|
|
234
|
-
}
|
|
238
|
+
}
|
|
235
239
|
)
|
|
236
240
|
|
|
237
241
|
const json = tryCatch(() => JSON.parse(settingsFile!))
|
|
@@ -263,14 +267,14 @@ const _writeSettingsToDisk = async (args: {
|
|
|
263
267
|
}) => {
|
|
264
268
|
const { data: serializedSettings, error: serializeSettingsError } = tryCatch(() =>
|
|
265
269
|
// TODO: this will probably not match the original formatting
|
|
266
|
-
JSON.stringify(args.settings, undefined, 2)
|
|
270
|
+
JSON.stringify(args.settings, undefined, 2)
|
|
267
271
|
)
|
|
268
272
|
if (serializeSettingsError) {
|
|
269
273
|
throw serializeSettingsError
|
|
270
274
|
}
|
|
271
275
|
|
|
272
276
|
const { error: writeSettingsError } = await tryCatch(async () =>
|
|
273
|
-
args.nodeishFs.writeFile("./project.inlang.json", serializedSettings)
|
|
277
|
+
args.nodeishFs.writeFile("./project.inlang.json", serializedSettings)
|
|
274
278
|
)
|
|
275
279
|
|
|
276
280
|
if (writeSettingsError) {
|
|
@@ -292,7 +296,7 @@ const createAwaitable = () => {
|
|
|
292
296
|
return [promise, resolve!, reject!] as [
|
|
293
297
|
awaitable: Promise<void>,
|
|
294
298
|
resolve: () => void,
|
|
295
|
-
reject: (e: unknown) => void
|
|
299
|
+
reject: (e: unknown) => void
|
|
296
300
|
]
|
|
297
301
|
}
|
|
298
302
|
|
package/src/messages/errors.ts
CHANGED
|
@@ -3,7 +3,7 @@ export class MessageVariantDoesNotExistError extends Error {
|
|
|
3
3
|
|
|
4
4
|
constructor(messageId: string, languageTag: string) {
|
|
5
5
|
super(
|
|
6
|
-
`For message '${messageId}' and '${languageTag}', there doesn't exist a variant for this specific matchers
|
|
6
|
+
`For message '${messageId}' and '${languageTag}', there doesn't exist a variant for this specific matchers.`
|
|
7
7
|
)
|
|
8
8
|
}
|
|
9
9
|
}
|
|
@@ -12,7 +12,7 @@ export class MessageVariantAlreadyExistsError extends Error {
|
|
|
12
12
|
|
|
13
13
|
constructor(messageId: string, languageTag: string) {
|
|
14
14
|
super(
|
|
15
|
-
`For message '${messageId}' and '${languageTag}', there already exists a variant for this specific matchers
|
|
15
|
+
`For message '${messageId}' and '${languageTag}', there already exists a variant for this specific matchers.`
|
|
16
16
|
)
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -15,7 +15,7 @@ describe("getVariant", () => {
|
|
|
15
15
|
const variant = getVariant(mockMessage, {
|
|
16
16
|
where: {
|
|
17
17
|
languageTag: "en",
|
|
18
|
-
|
|
18
|
+
match: ["female", "1"],
|
|
19
19
|
},
|
|
20
20
|
})
|
|
21
21
|
|
|
@@ -31,7 +31,7 @@ describe("getVariant", () => {
|
|
|
31
31
|
const variant = getVariant(mockMessage, {
|
|
32
32
|
where: {
|
|
33
33
|
languageTag: "en",
|
|
34
|
-
|
|
34
|
+
match: ["female", "0"],
|
|
35
35
|
},
|
|
36
36
|
})
|
|
37
37
|
expect(variant?.pattern[0]).toStrictEqual({
|
|
@@ -40,7 +40,7 @@ describe("getVariant", () => {
|
|
|
40
40
|
})
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
-
test("it should
|
|
43
|
+
test("it should not throw error if selector is empty and match", () => {
|
|
44
44
|
const mockMessage: Message = {
|
|
45
45
|
id: "mockMessage",
|
|
46
46
|
selectors: [],
|
|
@@ -48,21 +48,45 @@ describe("getVariant", () => {
|
|
|
48
48
|
{
|
|
49
49
|
languageTag: "en",
|
|
50
50
|
pattern: [{ type: "Text", value: "Gender male" }],
|
|
51
|
-
match:
|
|
52
|
-
gender: "male",
|
|
53
|
-
},
|
|
51
|
+
match: [],
|
|
54
52
|
},
|
|
55
53
|
{
|
|
56
54
|
languageTag: "de",
|
|
57
55
|
pattern: [{ type: "Text", value: "Veraltete Übersetzung" }],
|
|
58
|
-
match:
|
|
56
|
+
match: [],
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
}
|
|
60
|
+
const variant = getVariant(mockMessage, {
|
|
61
|
+
where: {
|
|
62
|
+
languageTag: "en",
|
|
63
|
+
match: [],
|
|
64
|
+
},
|
|
65
|
+
})
|
|
66
|
+
expect(variant).toBeDefined()
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
test("it should not throw error if selector is empty, return undefined", () => {
|
|
70
|
+
const mockMessage: Message = {
|
|
71
|
+
id: "mockMessage",
|
|
72
|
+
selectors: [],
|
|
73
|
+
variants: [
|
|
74
|
+
{
|
|
75
|
+
languageTag: "en",
|
|
76
|
+
pattern: [{ type: "Text", value: "Gender male" }],
|
|
77
|
+
match: ["male", "*"],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
languageTag: "de",
|
|
81
|
+
pattern: [{ type: "Text", value: "Veraltete Übersetzung" }],
|
|
82
|
+
match: ["*", "*"],
|
|
59
83
|
},
|
|
60
84
|
],
|
|
61
85
|
}
|
|
62
86
|
const variant = getVariant(mockMessage, {
|
|
63
87
|
where: {
|
|
64
88
|
languageTag: "fr",
|
|
65
|
-
|
|
89
|
+
match: ["*", "*"],
|
|
66
90
|
},
|
|
67
91
|
})
|
|
68
92
|
expect(variant).toBeUndefined()
|
|
@@ -74,7 +98,7 @@ describe("getVariant", () => {
|
|
|
74
98
|
const variant = getVariant(mockMessage, {
|
|
75
99
|
where: {
|
|
76
100
|
languageTag: "en",
|
|
77
|
-
|
|
101
|
+
match: ["*", "0"],
|
|
78
102
|
},
|
|
79
103
|
})
|
|
80
104
|
expect(variant?.pattern[0]).toStrictEqual({
|
|
@@ -89,7 +113,7 @@ describe("getVariant", () => {
|
|
|
89
113
|
const variant = getVariant(mockMessage, {
|
|
90
114
|
where: {
|
|
91
115
|
languageTag: "en",
|
|
92
|
-
|
|
116
|
+
match: ["*", "*"],
|
|
93
117
|
},
|
|
94
118
|
})
|
|
95
119
|
expect(variant?.pattern[0]).toStrictEqual({
|
|
@@ -104,7 +128,7 @@ describe("getVariant", () => {
|
|
|
104
128
|
const variant = getVariant(mockMessage, {
|
|
105
129
|
where: {
|
|
106
130
|
languageTag: "en",
|
|
107
|
-
|
|
131
|
+
match: ["trans", "2"],
|
|
108
132
|
},
|
|
109
133
|
})
|
|
110
134
|
expect(variant?.pattern[0]).toStrictEqual({
|
|
@@ -115,7 +139,7 @@ describe("getVariant", () => {
|
|
|
115
139
|
const variant2 = getVariant(mockMessage, {
|
|
116
140
|
where: {
|
|
117
141
|
languageTag: "en",
|
|
118
|
-
|
|
142
|
+
match: ["male", "8"],
|
|
119
143
|
},
|
|
120
144
|
})
|
|
121
145
|
expect(variant2?.pattern[0]).toStrictEqual({
|
|
@@ -128,14 +152,14 @@ describe("getVariant", () => {
|
|
|
128
152
|
const mockMessage: Message = getMockMessage()
|
|
129
153
|
mockMessage.variants = [
|
|
130
154
|
...mockMessage.variants!.filter(
|
|
131
|
-
(v) => v.languageTag === "en" && (v.match
|
|
155
|
+
(v) => v.languageTag === "en" && (v.match[0] !== "*" || v.match[1] !== "*")
|
|
132
156
|
),
|
|
133
157
|
]
|
|
134
158
|
|
|
135
159
|
const variant = getVariant(mockMessage, {
|
|
136
160
|
where: {
|
|
137
161
|
languageTag: "en",
|
|
138
|
-
|
|
162
|
+
match: ["*", "*"],
|
|
139
163
|
},
|
|
140
164
|
})
|
|
141
165
|
expect(variant).toBeUndefined()
|
|
@@ -147,18 +171,19 @@ describe("getVariant", () => {
|
|
|
147
171
|
const variant = getVariant(mockMessage, {
|
|
148
172
|
where: {
|
|
149
173
|
languageTag: "de",
|
|
150
|
-
|
|
174
|
+
match: ["female", "1"],
|
|
151
175
|
},
|
|
152
176
|
})
|
|
153
177
|
expect(variant).toBeUndefined()
|
|
154
178
|
})
|
|
155
179
|
|
|
156
|
-
test("should return
|
|
180
|
+
test("should return undefined variant if no selector defined", () => {
|
|
157
181
|
const mockMessage: Message = {} as any
|
|
182
|
+
mockMessage.selectors = []
|
|
158
183
|
mockMessage.variants = [
|
|
159
184
|
{
|
|
160
185
|
languageTag: "en",
|
|
161
|
-
match:
|
|
186
|
+
match: ["*", "*"],
|
|
162
187
|
pattern: [
|
|
163
188
|
{
|
|
164
189
|
type: "Text",
|
|
@@ -171,13 +196,52 @@ describe("getVariant", () => {
|
|
|
171
196
|
const variant = getVariant(mockMessage, {
|
|
172
197
|
where: {
|
|
173
198
|
languageTag: "en",
|
|
174
|
-
|
|
199
|
+
match: ["*", "*"],
|
|
175
200
|
},
|
|
176
201
|
})
|
|
177
|
-
// should return
|
|
178
|
-
expect(variant
|
|
202
|
+
// should return undefined
|
|
203
|
+
expect(variant).toBeUndefined()
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
test("should match catch all if the number of matches and selectors do not match", () => {
|
|
207
|
+
const mockMessage: Message = getMockMessage()
|
|
208
|
+
|
|
209
|
+
const variant1 = getVariant(mockMessage, {
|
|
210
|
+
where: {
|
|
211
|
+
languageTag: "en",
|
|
212
|
+
match: ["12"],
|
|
213
|
+
},
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
// should return catch all
|
|
217
|
+
expect(variant1?.pattern[0]).toStrictEqual({
|
|
179
218
|
type: "Text",
|
|
180
|
-
value: "
|
|
219
|
+
value: "{$hostName} invites {$guestName} and {$guestsOther} other people to their party.",
|
|
220
|
+
})
|
|
221
|
+
|
|
222
|
+
const variant2 = getVariant(mockMessage, {
|
|
223
|
+
where: {
|
|
224
|
+
languageTag: "en",
|
|
225
|
+
match: ["12", "*", "23"],
|
|
226
|
+
},
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
// should return catch all
|
|
230
|
+
expect(variant2?.pattern[0]).toStrictEqual({
|
|
231
|
+
type: "Text",
|
|
232
|
+
value: "{$hostName} invites {$guestName} and {$guestsOther} other people to their party.",
|
|
233
|
+
})
|
|
234
|
+
const variant3 = getVariant(mockMessage, {
|
|
235
|
+
where: {
|
|
236
|
+
languageTag: "en",
|
|
237
|
+
match: [],
|
|
238
|
+
},
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
// should return catch all
|
|
242
|
+
expect(variant3?.pattern[0]).toStrictEqual({
|
|
243
|
+
type: "Text",
|
|
244
|
+
value: "{$hostName} invites {$guestName} and {$guestsOther} other people to their party.",
|
|
181
245
|
})
|
|
182
246
|
})
|
|
183
247
|
})
|
|
@@ -188,7 +252,7 @@ describe("createVariant", () => {
|
|
|
188
252
|
|
|
189
253
|
const newVariant: Variant = {
|
|
190
254
|
languageTag: "en",
|
|
191
|
-
match:
|
|
255
|
+
match: ["female", "0"],
|
|
192
256
|
pattern: [],
|
|
193
257
|
}
|
|
194
258
|
const message = createVariant(mockMessage, {
|
|
@@ -197,8 +261,8 @@ describe("createVariant", () => {
|
|
|
197
261
|
// should return the female variant
|
|
198
262
|
expect(
|
|
199
263
|
message.data!.variants.find(
|
|
200
|
-
(v) => v.languageTag === "en" && v.match
|
|
201
|
-
)?.pattern
|
|
264
|
+
(v) => v.languageTag === "en" && v.match[0] === "female" && v.match[1] === "0"
|
|
265
|
+
)?.pattern
|
|
202
266
|
).toStrictEqual([])
|
|
203
267
|
})
|
|
204
268
|
|
|
@@ -206,22 +270,22 @@ describe("createVariant", () => {
|
|
|
206
270
|
const mockMessage: Message = getMockMessage()
|
|
207
271
|
mockMessage.variants = [
|
|
208
272
|
...mockMessage.variants!.filter(
|
|
209
|
-
(v) => v.languageTag === "en" && (v.match
|
|
273
|
+
(v) => v.languageTag === "en" && (v.match[0] !== "*" || v.match[1] !== "*")
|
|
210
274
|
),
|
|
211
275
|
]
|
|
212
276
|
|
|
213
277
|
const message = createVariant(mockMessage, {
|
|
214
278
|
data: {
|
|
215
279
|
languageTag: "en",
|
|
216
|
-
match:
|
|
280
|
+
match: ["*", "*"],
|
|
217
281
|
pattern: [],
|
|
218
282
|
},
|
|
219
283
|
})
|
|
220
284
|
// should return the female variant
|
|
221
285
|
expect(
|
|
222
286
|
message.data!.variants.find(
|
|
223
|
-
(v) => v.languageTag === "en" && v.match
|
|
224
|
-
)?.pattern
|
|
287
|
+
(v) => v.languageTag === "en" && v.match[0] === "*" && v.match[1] === "*"
|
|
288
|
+
)?.pattern
|
|
225
289
|
).toStrictEqual([])
|
|
226
290
|
})
|
|
227
291
|
|
|
@@ -231,7 +295,7 @@ describe("createVariant", () => {
|
|
|
231
295
|
const variant = createVariant(mockMessage, {
|
|
232
296
|
data: {
|
|
233
297
|
languageTag: "en",
|
|
234
|
-
match:
|
|
298
|
+
match: ["male", "1"],
|
|
235
299
|
pattern: [],
|
|
236
300
|
},
|
|
237
301
|
})
|
|
@@ -246,7 +310,7 @@ describe("createVariant", () => {
|
|
|
246
310
|
const variant = createVariant(mockMessage, {
|
|
247
311
|
data: {
|
|
248
312
|
languageTag: "de",
|
|
249
|
-
match:
|
|
313
|
+
match: ["female", "1"],
|
|
250
314
|
pattern: [],
|
|
251
315
|
},
|
|
252
316
|
})
|
|
@@ -263,15 +327,15 @@ describe("updateVariant", () => {
|
|
|
263
327
|
const message = updateVariantPattern(mockMessage, {
|
|
264
328
|
where: {
|
|
265
329
|
languageTag: "en",
|
|
266
|
-
|
|
330
|
+
match: ["female", "1"],
|
|
267
331
|
},
|
|
268
332
|
data: [],
|
|
269
333
|
})
|
|
270
334
|
// should return the female variant
|
|
271
335
|
expect(
|
|
272
336
|
message.data!.variants.find(
|
|
273
|
-
(v) => v.languageTag === "en" && v.match
|
|
274
|
-
)?.pattern
|
|
337
|
+
(v) => v.languageTag === "en" && v.match[0] === "female" && v.match[1] === "1"
|
|
338
|
+
)?.pattern
|
|
275
339
|
).toStrictEqual([])
|
|
276
340
|
})
|
|
277
341
|
|
|
@@ -281,15 +345,15 @@ describe("updateVariant", () => {
|
|
|
281
345
|
const message = updateVariantPattern(mockMessage, {
|
|
282
346
|
where: {
|
|
283
347
|
languageTag: "en",
|
|
284
|
-
|
|
348
|
+
match: ["*", "*"],
|
|
285
349
|
},
|
|
286
350
|
data: [],
|
|
287
351
|
})
|
|
288
352
|
// should return the female variant
|
|
289
353
|
expect(
|
|
290
354
|
message.data!.variants.find(
|
|
291
|
-
(v) => v.languageTag === "en" && v.match
|
|
292
|
-
)?.pattern
|
|
355
|
+
(v) => v.languageTag === "en" && v.match[0] === "*" && v.match[1] === "*"
|
|
356
|
+
)?.pattern
|
|
293
357
|
).toStrictEqual([])
|
|
294
358
|
})
|
|
295
359
|
|
|
@@ -298,14 +362,14 @@ describe("updateVariant", () => {
|
|
|
298
362
|
|
|
299
363
|
mockMessage.variants = [
|
|
300
364
|
...mockMessage.variants!.filter(
|
|
301
|
-
(v) => v.languageTag === "en" && (v.match
|
|
365
|
+
(v) => v.languageTag === "en" && (v.match[0] !== "*" || v.match[1] !== "*")
|
|
302
366
|
),
|
|
303
367
|
]
|
|
304
368
|
|
|
305
369
|
const variant = updateVariantPattern(mockMessage, {
|
|
306
370
|
where: {
|
|
307
371
|
languageTag: "en",
|
|
308
|
-
|
|
372
|
+
match: ["*", "*"],
|
|
309
373
|
},
|
|
310
374
|
data: [],
|
|
311
375
|
})
|
|
@@ -320,7 +384,7 @@ describe("updateVariant", () => {
|
|
|
320
384
|
const variant = updateVariantPattern(mockMessage, {
|
|
321
385
|
where: {
|
|
322
386
|
languageTag: "de",
|
|
323
|
-
|
|
387
|
+
match: ["*", "*"],
|
|
324
388
|
},
|
|
325
389
|
data: [],
|
|
326
390
|
})
|
|
@@ -340,7 +404,7 @@ const getMockMessage = (): Message => {
|
|
|
340
404
|
variants: [
|
|
341
405
|
{
|
|
342
406
|
languageTag: "en",
|
|
343
|
-
match:
|
|
407
|
+
match: ["female", "1"],
|
|
344
408
|
pattern: [
|
|
345
409
|
{
|
|
346
410
|
type: "Text",
|
|
@@ -350,7 +414,7 @@ const getMockMessage = (): Message => {
|
|
|
350
414
|
},
|
|
351
415
|
{
|
|
352
416
|
languageTag: "en",
|
|
353
|
-
match:
|
|
417
|
+
match: ["female", "2"],
|
|
354
418
|
pattern: [
|
|
355
419
|
{
|
|
356
420
|
type: "Text",
|
|
@@ -360,7 +424,7 @@ const getMockMessage = (): Message => {
|
|
|
360
424
|
},
|
|
361
425
|
{
|
|
362
426
|
languageTag: "en",
|
|
363
|
-
match:
|
|
427
|
+
match: ["female", "*"],
|
|
364
428
|
pattern: [
|
|
365
429
|
{
|
|
366
430
|
type: "Text",
|
|
@@ -370,7 +434,7 @@ const getMockMessage = (): Message => {
|
|
|
370
434
|
},
|
|
371
435
|
{
|
|
372
436
|
languageTag: "en",
|
|
373
|
-
match:
|
|
437
|
+
match: ["male", "1"],
|
|
374
438
|
pattern: [
|
|
375
439
|
{
|
|
376
440
|
type: "Text",
|
|
@@ -380,7 +444,7 @@ const getMockMessage = (): Message => {
|
|
|
380
444
|
},
|
|
381
445
|
{
|
|
382
446
|
languageTag: "en",
|
|
383
|
-
match:
|
|
447
|
+
match: ["male", "2"],
|
|
384
448
|
pattern: [
|
|
385
449
|
{
|
|
386
450
|
type: "Text",
|
|
@@ -390,7 +454,7 @@ const getMockMessage = (): Message => {
|
|
|
390
454
|
},
|
|
391
455
|
{
|
|
392
456
|
languageTag: "en",
|
|
393
|
-
match:
|
|
457
|
+
match: ["male", "*"],
|
|
394
458
|
pattern: [
|
|
395
459
|
{
|
|
396
460
|
type: "Text",
|
|
@@ -400,7 +464,7 @@ const getMockMessage = (): Message => {
|
|
|
400
464
|
},
|
|
401
465
|
{
|
|
402
466
|
languageTag: "en",
|
|
403
|
-
match:
|
|
467
|
+
match: ["*", "0"],
|
|
404
468
|
pattern: [
|
|
405
469
|
{
|
|
406
470
|
type: "Text",
|
|
@@ -410,7 +474,7 @@ const getMockMessage = (): Message => {
|
|
|
410
474
|
},
|
|
411
475
|
{
|
|
412
476
|
languageTag: "en",
|
|
413
|
-
match:
|
|
477
|
+
match: ["*", "1"],
|
|
414
478
|
pattern: [
|
|
415
479
|
{
|
|
416
480
|
type: "Text",
|
|
@@ -420,7 +484,7 @@ const getMockMessage = (): Message => {
|
|
|
420
484
|
},
|
|
421
485
|
{
|
|
422
486
|
languageTag: "en",
|
|
423
|
-
match:
|
|
487
|
+
match: ["*", "2"],
|
|
424
488
|
pattern: [
|
|
425
489
|
{
|
|
426
490
|
type: "Text",
|
|
@@ -430,7 +494,7 @@ const getMockMessage = (): Message => {
|
|
|
430
494
|
},
|
|
431
495
|
{
|
|
432
496
|
languageTag: "en",
|
|
433
|
-
match:
|
|
497
|
+
match: ["*", "*"],
|
|
434
498
|
pattern: [
|
|
435
499
|
{
|
|
436
500
|
type: "Text",
|