@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.
Files changed (42) hide show
  1. package/dist/adapter/solidAdapter.test.js +6 -6
  2. package/dist/createMessagesQuery.test.js +9 -0
  3. package/dist/loadProject.d.ts.map +1 -1
  4. package/dist/loadProject.js +8 -4
  5. package/dist/loadProject.test.js +14 -15
  6. package/dist/messages/variant.d.ts +4 -4
  7. package/dist/messages/variant.d.ts.map +1 -1
  8. package/dist/messages/variant.js +55 -55
  9. package/dist/messages/variant.test.js +102 -45
  10. package/dist/resolve-modules/plugins/resolvePlugins.d.ts.map +1 -1
  11. package/dist/resolve-modules/plugins/resolvePlugins.js +3 -5
  12. package/dist/resolve-modules/plugins/resolvePlugins.test.js +79 -49
  13. package/dist/resolve-modules/plugins/types.d.ts +4 -5
  14. package/dist/resolve-modules/plugins/types.d.ts.map +1 -1
  15. package/dist/test-utilities/createMessage.d.ts +1 -1
  16. package/dist/test-utilities/createMessage.js +1 -1
  17. package/dist/test-utilities/createMessage.test.js +4 -4
  18. package/package.json +1 -1
  19. package/src/adapter/solidAdapter.test.ts +14 -14
  20. package/src/adapter/solidAdapter.ts +1 -1
  21. package/src/api.ts +2 -2
  22. package/src/createMessageLintReportsQuery.ts +4 -4
  23. package/src/createMessagesQuery.test.ts +30 -17
  24. package/src/createMessagesQuery.ts +2 -2
  25. package/src/lint/message/lintMessages.ts +1 -1
  26. package/src/lint/message/lintSingleMessage.test.ts +1 -1
  27. package/src/lint/message/lintSingleMessage.ts +2 -2
  28. package/src/loadProject.test.ts +24 -27
  29. package/src/loadProject.ts +20 -16
  30. package/src/messages/errors.ts +2 -2
  31. package/src/messages/variant.test.ts +113 -49
  32. package/src/messages/variant.ts +73 -67
  33. package/src/parseConfig.ts +2 -2
  34. package/src/resolve-modules/import.test.ts +2 -2
  35. package/src/resolve-modules/import.ts +1 -1
  36. package/src/resolve-modules/message-lint-rules/resolveMessageLintRules.ts +1 -1
  37. package/src/resolve-modules/plugins/resolvePlugins.test.ts +96 -64
  38. package/src/resolve-modules/plugins/resolvePlugins.ts +19 -21
  39. package/src/resolve-modules/plugins/types.ts +4 -8
  40. package/src/resolve-modules/resolveModules.ts +4 -4
  41. package/src/test-utilities/createMessage.test.ts +7 -7
  42. package/src/test-utilities/createMessage.ts +1 -1
@@ -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
- args._capture?.("SDK used settings", settings)
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
- languageTags: settingsValue!.languageTags,
115
- sourceLanguageTag: settingsValue!.sourceLanguageTag,
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({ messages: newMessages })
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
 
@@ -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
- selectors: { gender: "female", guestOther: "1" },
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
- selectors: { gender: "female", guestOther: "0" },
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 return undefined (but never throw an error) if selectors is an empty array", () => {
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
- selectors: {},
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
- selectors: { guestOther: "0" },
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
- selectors: {},
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
- selectors: { gender: "trans", guestOther: "2" },
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
- selectors: { gender: "male", guestOther: "8" },
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.gender !== "*" || v.match.guestOther !== "*"),
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
- selectors: {},
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
- selectors: { gender: "female", guestOther: "1" },
174
+ match: ["female", "1"],
151
175
  },
152
176
  })
153
177
  expect(variant).toBeUndefined()
154
178
  })
155
179
 
156
- test("should return the catch all variant if no selector defined", () => {
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
- selectors: {},
199
+ match: ["*", "*"],
175
200
  },
176
201
  })
177
- // should return the female variant
178
- expect(variant?.pattern[0]).toStrictEqual({
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: "test",
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: { gender: "female", guestOther: "0" },
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.gender === "female" && v.match.guestOther === "0",
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.gender !== "*" || v.match.guestOther !== "*"),
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.gender === "*" && v.match.guestOther === "*",
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: { gender: "male", guestOther: "1" },
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: { gender: "female", guestOther: "1" },
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
- selectors: { gender: "female", guestOther: "1" },
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.gender === "female" && v.match.guestOther === "1",
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
- selectors: {},
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.gender === "*" && v.match.guestOther === "*",
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.gender !== "*" || v.match.guestOther !== "*"),
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
- selectors: {},
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
- selectors: {},
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: { gender: "female", guestOther: "1" },
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: { gender: "female", guestOther: "2" },
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: { gender: "female", guestOther: "*" },
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: { gender: "male", guestOther: "1" },
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: { gender: "male", guestOther: "2" },
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: { gender: "male", guestOther: "*" },
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: { gender: "*", guestOther: "0" },
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: { gender: "*", guestOther: "1" },
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: { gender: "*", guestOther: "2" },
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: { gender: "*", guestOther: "*" },
497
+ match: ["*", "*"],
434
498
  pattern: [
435
499
  {
436
500
  type: "Text",