@featurevisor/site 1.0.0 → 1.2.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.
@@ -1,4 +1,10 @@
1
1
  {
2
+ "links": {
3
+ "attribute": "https://github.com/fahad19/featurevisor/blob/site-variable-show/examples/example-1/attributes/{{key}}.yml",
4
+ "segment": "https://github.com/fahad19/featurevisor/blob/site-variable-show/examples/example-1/segments/{{key}}.yml",
5
+ "feature": "https://github.com/fahad19/featurevisor/blob/site-variable-show/examples/example-1/features/{{key}}.yml",
6
+ "commit": "https://github.com/fahad19/featurevisor/commit/{{hash}}"
7
+ },
2
8
  "entities": {
3
9
  "attributes": [
4
10
  {
@@ -6,22 +12,50 @@
6
12
  "description": "country code in lower case (two lettered)",
7
13
  "type": "string",
8
14
  "key": "country",
15
+ "lastModified": {
16
+ "commit": "f529287",
17
+ "timestamp": "2023-03-05T18:38:34+01:00",
18
+ "author": "Fahad Heylaal"
19
+ },
9
20
  "usedInFeatures": [],
10
21
  "usedInSegments": ["germany", "netherlands", "switzerland"]
11
22
  },
23
+ {
24
+ "archived": false,
25
+ "description": "current date passed as ISO 8601 string or Date object",
26
+ "type": "string",
27
+ "key": "date",
28
+ "lastModified": {
29
+ "commit": "b555f39",
30
+ "timestamp": "2023-05-13T19:36:48+02:00",
31
+ "author": "Fahad Heylaal"
32
+ },
33
+ "usedInFeatures": [],
34
+ "usedInSegments": ["blackFridayWeekend"]
35
+ },
12
36
  {
13
37
  "archived": false,
14
38
  "description": "device type",
15
39
  "type": "string",
16
40
  "key": "device",
17
- "usedInFeatures": [],
18
- "usedInSegments": ["mobile"]
41
+ "lastModified": {
42
+ "commit": "f529287",
43
+ "timestamp": "2023-03-05T18:38:34+01:00",
44
+ "author": "Fahad Heylaal"
45
+ },
46
+ "usedInFeatures": ["foo"],
47
+ "usedInSegments": ["mobile", "unknownDevice"]
19
48
  },
20
49
  {
21
50
  "archived": false,
22
51
  "description": "is the user already logged in?",
23
52
  "type": "boolean",
24
53
  "key": "loggedIn",
54
+ "lastModified": {
55
+ "commit": "f529287",
56
+ "timestamp": "2023-03-05T18:38:34+01:00",
57
+ "author": "Fahad Heylaal"
58
+ },
25
59
  "usedInFeatures": [],
26
60
  "usedInSegments": []
27
61
  },
@@ -31,17 +65,56 @@
31
65
  "type": "string",
32
66
  "capture": true,
33
67
  "key": "userId",
34
- "usedInFeatures": ["foo"],
35
- "usedInSegments": []
68
+ "lastModified": {
69
+ "commit": "f529287",
70
+ "timestamp": "2023-03-05T18:38:34+01:00",
71
+ "author": "Fahad Heylaal"
72
+ },
73
+ "usedInFeatures": ["foo", "showPopup"],
74
+ "usedInSegments": ["qa"]
75
+ },
76
+ {
77
+ "description": "Version number of the app",
78
+ "type": "string",
79
+ "key": "version",
80
+ "lastModified": {
81
+ "commit": "dd7fda3",
82
+ "timestamp": "2023-11-14T17:39:51+01:00",
83
+ "author": "Fahad Heylaal"
84
+ },
85
+ "usedInFeatures": [],
86
+ "usedInSegments": ["version_5.5"]
36
87
  }
37
88
  ],
38
89
  "segments": [
90
+ {
91
+ "archived": false,
92
+ "description": "black friday weekend",
93
+ "conditions": {
94
+ "and": [
95
+ { "attribute": "date", "operator": "after", "value": "2023-11-24T00:00:00.000Z" },
96
+ { "attribute": "date", "operator": "before", "value": "2023-11-27T00:00:00.000Z" }
97
+ ]
98
+ },
99
+ "key": "blackFridayWeekend",
100
+ "lastModified": {
101
+ "commit": "b555f39",
102
+ "timestamp": "2023-05-13T19:36:48+02:00",
103
+ "author": "Fahad Heylaal"
104
+ },
105
+ "usedInFeatures": ["discount"]
106
+ },
39
107
  {
40
108
  "archived": false,
41
109
  "description": "users from Germany",
42
110
  "conditions": { "and": [{ "attribute": "country", "operator": "equals", "value": "de" }] },
43
111
  "key": "germany",
44
- "usedInFeatures": ["bar", "foo", "sidebar"]
112
+ "lastModified": {
113
+ "commit": "f529287",
114
+ "timestamp": "2023-03-05T18:38:34+01:00",
115
+ "author": "Fahad Heylaal"
116
+ },
117
+ "usedInFeatures": ["bar", "checkout", "foo", "qux", "sidebar"]
45
118
  },
46
119
  {
47
120
  "archived": false,
@@ -50,6 +123,11 @@
50
123
  "and": [{ "attribute": "device", "operator": "equals", "value": "mobile" }]
51
124
  },
52
125
  "key": "mobile",
126
+ "lastModified": {
127
+ "commit": "f529287",
128
+ "timestamp": "2023-03-05T18:38:34+01:00",
129
+ "author": "Fahad Heylaal"
130
+ },
53
131
  "usedInFeatures": ["foo"]
54
132
  },
55
133
  {
@@ -57,21 +135,72 @@
57
135
  "description": "The Netherlands",
58
136
  "conditions": [{ "attribute": "country", "operator": "equals", "value": "nl" }],
59
137
  "key": "netherlands",
60
- "usedInFeatures": ["sidebar"]
138
+ "lastModified": {
139
+ "commit": "f529287",
140
+ "timestamp": "2023-03-05T18:38:34+01:00",
141
+ "author": "Fahad Heylaal"
142
+ },
143
+ "usedInFeatures": ["checkout", "foo", "redesign", "sidebar"]
144
+ },
145
+ {
146
+ "description": "for testing force API in features",
147
+ "conditions": [{ "attribute": "userId", "operator": "in", "value": ["user-1", "user-2"] }],
148
+ "key": "qa",
149
+ "lastModified": {
150
+ "commit": "a2aebe6",
151
+ "timestamp": "2023-11-21T17:50:37+01:00",
152
+ "author": "Fahad Heylaal"
153
+ },
154
+ "usedInFeatures": ["showPopup"]
61
155
  },
62
156
  {
63
157
  "archived": false,
64
158
  "description": "users from Switzerland",
65
159
  "conditions": { "and": [{ "attribute": "country", "operator": "equals", "value": "ch" }] },
66
160
  "key": "switzerland",
67
- "usedInFeatures": ["bar", "foo"]
161
+ "lastModified": {
162
+ "commit": "f529287",
163
+ "timestamp": "2023-03-05T18:38:34+01:00",
164
+ "author": "Fahad Heylaal"
165
+ },
166
+ "usedInFeatures": ["bar", "foo", "sidebar"]
167
+ },
168
+ {
169
+ "archived": false,
170
+ "description": "users with unknown device",
171
+ "conditions": [{ "attribute": "device", "operator": "equals", "value": null }],
172
+ "key": "unknownDevice",
173
+ "lastModified": {
174
+ "commit": "16a47c5",
175
+ "timestamp": "2023-10-12T16:07:00+02:00",
176
+ "author": "Paweł Data"
177
+ },
178
+ "usedInFeatures": []
179
+ },
180
+ {
181
+ "description": "Version equals to 5.5",
182
+ "conditions": [
183
+ {
184
+ "or": [
185
+ { "attribute": "version", "operator": "equals", "value": 5.5 },
186
+ { "attribute": "version", "operator": "equals", "value": "5.5" }
187
+ ]
188
+ }
189
+ ],
190
+ "key": "version_5.5",
191
+ "lastModified": {
192
+ "commit": "dd7fda3",
193
+ "timestamp": "2023-11-14T17:39:51+01:00",
194
+ "author": "Fahad Heylaal"
195
+ },
196
+ "usedInFeatures": ["footer"]
68
197
  }
69
198
  ],
70
199
  "features": [
71
200
  {
201
+ "description": "Example with object variable type",
72
202
  "tags": ["all"],
73
203
  "bucketBy": "userId",
74
- "defaultVariation": "control",
75
204
  "variablesSchema": [
76
205
  { "key": "color", "type": "string", "defaultValue": "red" },
77
206
  {
@@ -85,9 +214,8 @@
85
214
  }
86
215
  ],
87
216
  "variations": [
88
- { "type": "string", "value": "control", "weight": 33 },
217
+ { "value": "control", "weight": 33 },
89
218
  {
90
- "type": "string",
91
219
  "value": "b",
92
220
  "weight": 33,
93
221
  "variables": [
@@ -111,44 +239,119 @@
111
239
  }
112
240
  ]
113
241
  },
114
- { "type": "string", "value": "c", "weight": 34 }
242
+ { "value": "c", "weight": 34 }
115
243
  ],
116
244
  "environments": {
117
- "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] },
118
- "production": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] }
245
+ "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 50 }] },
246
+ "production": { "rules": [{ "key": "1", "segments": "*", "percentage": 50 }] }
119
247
  },
120
- "key": "bar"
248
+ "key": "bar",
249
+ "lastModified": {
250
+ "commit": "4f52136",
251
+ "timestamp": "2023-07-16T21:50:35+02:00",
252
+ "author": "Fahad Heylaal"
253
+ }
121
254
  },
122
255
  {
123
256
  "description": "Classic on/off switch",
124
257
  "tags": ["all"],
125
- "defaultVariation": false,
126
258
  "bucketBy": "userId",
127
- "variations": [
128
- { "description": "Enabled for all", "type": "boolean", "value": true, "weight": 100 },
129
- { "description": "Disabled for all", "type": "boolean", "value": false, "weight": 0 }
130
- ],
131
259
  "environments": {
132
260
  "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] },
133
261
  "production": { "rules": [{ "key": "1", "segments": "*", "percentage": 80 }] }
134
262
  },
135
- "key": "baz"
263
+ "key": "baz",
264
+ "lastModified": {
265
+ "commit": "4f52136",
266
+ "timestamp": "2023-07-16T21:50:35+02:00",
267
+ "author": "Fahad Heylaal"
268
+ }
269
+ },
270
+ {
271
+ "description": "Testing variables without having any variations",
272
+ "tags": ["all"],
273
+ "bucketBy": "userId",
274
+ "variablesSchema": [
275
+ { "key": "showPayments", "type": "boolean", "defaultValue": false },
276
+ { "key": "showShipping", "type": "boolean", "defaultValue": false },
277
+ { "key": "paymentMethods", "type": "array", "defaultValue": ["visa", "mastercard"] }
278
+ ],
279
+ "environments": {
280
+ "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] },
281
+ "production": {
282
+ "rules": [
283
+ {
284
+ "key": "1",
285
+ "segments": "netherlands",
286
+ "percentage": 100,
287
+ "variables": { "paymentMethods": ["ideal", "paypal"] }
288
+ },
289
+ {
290
+ "key": "2",
291
+ "segments": "germany",
292
+ "percentage": 100,
293
+ "variables": { "paymentMethods": ["sofort", "paypal"] }
294
+ },
295
+ {
296
+ "key": "3",
297
+ "segments": "*",
298
+ "percentage": 100,
299
+ "variables": {
300
+ "showPayments": true,
301
+ "showShipping": true,
302
+ "paymentMethods": ["visa", "mastercard", "paypal"]
303
+ }
304
+ }
305
+ ]
306
+ }
307
+ },
308
+ "key": "checkout",
309
+ "lastModified": {
310
+ "commit": "3144f20",
311
+ "timestamp": "2023-10-26T08:42:34+02:00",
312
+ "author": "Fahad Heylaal"
313
+ }
314
+ },
315
+ {
316
+ "description": "Enable discount in checkout flow",
317
+ "tags": ["all", "checkout"],
318
+ "bucketBy": "userId",
319
+ "required": ["sidebar"],
320
+ "environments": {
321
+ "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] },
322
+ "production": {
323
+ "rules": [
324
+ {
325
+ "key": "2",
326
+ "description": "Black Friday Weekend rule here",
327
+ "segments": ["blackFridayWeekend"],
328
+ "percentage": 100
329
+ },
330
+ { "key": "1", "segments": "*", "percentage": 0 }
331
+ ]
332
+ }
333
+ },
334
+ "key": "discount",
335
+ "lastModified": {
336
+ "commit": "7d4db28",
337
+ "timestamp": "2023-11-07T18:29:08+01:00",
338
+ "author": "Fahad Heylaal"
339
+ }
136
340
  },
137
341
  {
138
342
  "archived": false,
139
343
  "description": "blah",
140
- "tags": ["all", "signIn", "signUp"],
344
+ "tags": ["all", "sign-in", "sign-up"],
141
345
  "bucketBy": "userId",
142
- "defaultVariation": false,
143
346
  "variablesSchema": [
144
347
  { "key": "bar", "type": "string", "defaultValue": "" },
145
- { "key": "baz", "type": "string", "defaultValue": "" }
348
+ { "key": "baz", "type": "string", "defaultValue": "" },
349
+ { "key": "qux", "type": "boolean", "defaultValue": false }
146
350
  ],
147
351
  "variations": [
148
- { "type": "boolean", "value": false, "weight": 50 },
352
+ { "value": "control", "weight": 50 },
149
353
  {
150
- "type": "boolean",
151
- "value": true,
354
+ "value": "treatment",
152
355
  "weight": 50,
153
356
  "variables": [
154
357
  {
@@ -158,81 +361,182 @@
158
361
  { "segments": { "or": ["germany", "switzerland"] }, "value": "bar for DE or CH" }
159
362
  ]
160
363
  },
161
- { "key": "baz", "value": "baz_here" }
364
+ {
365
+ "key": "baz",
366
+ "value": "baz_here",
367
+ "overrides": [{ "segments": "netherlands", "value": "baz for NL" }]
368
+ }
162
369
  ]
163
370
  }
164
371
  ],
165
372
  "environments": {
166
373
  "staging": {
167
- "expose": true,
374
+ "force": [
375
+ {
376
+ "conditions": [
377
+ { "attribute": "userId", "operator": "equals", "value": "test-force-id" }
378
+ ],
379
+ "variation": "treatment"
380
+ }
381
+ ],
168
382
  "rules": [{ "key": "1", "segments": "*", "percentage": 100 }]
169
383
  },
170
384
  "production": {
171
- "expose": true,
172
- "rules": [
173
- {
174
- "key": "1",
175
- "segments": { "and": ["mobile", { "or": ["germany", "switzerland"] }] },
176
- "percentage": 80
177
- },
178
- { "key": "2", "segments": "*", "percentage": 50 }
179
- ],
180
385
  "force": [
181
386
  {
182
387
  "conditions": {
183
388
  "and": [
184
389
  { "attribute": "userId", "operator": "equals", "value": "123" },
185
- { "attribute": "deviceId", "operator": "equals", "value": "234" }
390
+ { "attribute": "device", "operator": "equals", "value": "mobile" }
186
391
  ]
187
392
  },
188
- "variation": true,
393
+ "variation": "treatment",
189
394
  "variables": { "bar": "yoooooo" }
190
395
  }
396
+ ],
397
+ "rules": [
398
+ {
399
+ "key": "1",
400
+ "segments": { "and": ["mobile", { "or": ["germany", "switzerland"] }] },
401
+ "percentage": 80,
402
+ "variables": { "qux": true }
403
+ },
404
+ { "key": "2", "segments": "*", "percentage": 50 }
191
405
  ]
192
406
  }
193
407
  },
194
- "key": "foo"
408
+ "key": "foo",
409
+ "lastModified": {
410
+ "commit": "986fc2f",
411
+ "timestamp": "2024-01-04T19:17:05+01:00",
412
+ "author": "Fahad Heylaal"
413
+ }
414
+ },
415
+ {
416
+ "description": "Checks `not` operator in segments",
417
+ "tags": ["all"],
418
+ "bucketBy": "userId",
419
+ "environments": {
420
+ "staging": {
421
+ "rules": [{ "key": "1", "segments": [{ "not": ["version_5.5"] }], "percentage": 100 }]
422
+ },
423
+ "production": { "rules": [{ "key": "1", "segments": "*", "percentage": 80 }] }
424
+ },
425
+ "key": "footer",
426
+ "lastModified": {
427
+ "commit": "dd7fda3",
428
+ "timestamp": "2023-11-14T17:39:51+01:00",
429
+ "author": "Fahad Heylaal"
430
+ }
431
+ },
432
+ {
433
+ "description": "Classic on/off switch, that's not exposed in production",
434
+ "tags": ["all"],
435
+ "bucketBy": "userId",
436
+ "environments": {
437
+ "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] },
438
+ "production": {
439
+ "expose": false,
440
+ "rules": [{ "key": "1", "segments": "*", "percentage": 80 }]
441
+ }
442
+ },
443
+ "key": "hidden",
444
+ "lastModified": {
445
+ "commit": "cd45121",
446
+ "timestamp": "2023-10-26T23:45:18+02:00",
447
+ "author": "Fahad Heylaal"
448
+ }
195
449
  },
196
450
  {
197
451
  "description": "Variations with weights having decimal places",
198
452
  "tags": ["all"],
199
- "defaultVariation": "control",
200
453
  "bucketBy": "userId",
201
454
  "variablesSchema": [
202
455
  { "type": "json", "key": "fooConfig", "defaultValue": "{\"foo\": \"bar\"}" }
203
456
  ],
204
457
  "variations": [
205
- { "type": "string", "value": "control", "weight": 33.34 },
458
+ { "value": "control", "weight": 33.34 },
206
459
  {
207
- "type": "string",
208
460
  "value": "b",
209
461
  "weight": 33.33,
210
462
  "variables": [{ "key": "fooConfig", "value": "{\"foo\": \"bar b\"}" }]
211
463
  },
212
- { "type": "string", "value": "c", "weight": 33.33 }
464
+ { "value": "c", "weight": 33.33 }
213
465
  ],
466
+ "environments": {
467
+ "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 50 }] },
468
+ "production": {
469
+ "rules": [
470
+ { "key": "1", "segments": ["germany"], "percentage": 50, "variation": "b" },
471
+ { "key": "2", "segments": "*", "percentage": 50 }
472
+ ]
473
+ }
474
+ },
475
+ "key": "qux",
476
+ "lastModified": {
477
+ "commit": "4f52136",
478
+ "timestamp": "2023-07-16T21:50:35+02:00",
479
+ "author": "Fahad Heylaal"
480
+ }
481
+ },
482
+ {
483
+ "description": "Enable new design",
484
+ "tags": ["all"],
485
+ "bucketBy": "userId",
214
486
  "environments": {
215
487
  "staging": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] },
216
- "production": { "rules": [{ "key": "1", "segments": "*", "percentage": 100 }] }
488
+ "production": { "rules": [{ "key": "1", "segments": "netherlands", "percentage": 100 }] }
489
+ },
490
+ "key": "redesign",
491
+ "lastModified": {
492
+ "commit": "b3ad42c",
493
+ "timestamp": "2023-09-30T21:56:55+02:00",
494
+ "author": "Fahad Heylaal"
495
+ }
496
+ },
497
+ {
498
+ "description": "for testing force API in features",
499
+ "tags": ["all"],
500
+ "bucketBy": "userId",
501
+ "environments": {
502
+ "staging": {
503
+ "force": [
504
+ { "segments": "qa", "enabled": true },
505
+ {
506
+ "conditions": [{ "attribute": "userId", "operator": "equals", "value": "user-3" }],
507
+ "enabled": true
508
+ }
509
+ ],
510
+ "rules": [{ "key": "1", "segments": "*", "percentage": 0 }]
511
+ },
512
+ "production": { "rules": [{ "key": "1", "segments": "*", "percentage": 0 }] }
217
513
  },
218
- "key": "qux"
514
+ "key": "showPopup",
515
+ "lastModified": {
516
+ "commit": "a2aebe6",
517
+ "timestamp": "2023-11-21T17:50:37+01:00",
518
+ "author": "Fahad Heylaal"
519
+ }
219
520
  },
220
521
  {
221
522
  "description": "Show sidebar or not",
222
523
  "tags": ["all"],
223
524
  "bucketBy": "userId",
224
- "defaultVariation": false,
225
525
  "variablesSchema": [
226
- { "key": "position", "type": "string", "defaultValue": "left" },
526
+ {
527
+ "key": "position",
528
+ "type": "string",
529
+ "description": "position of the sidebar",
530
+ "defaultValue": "left"
531
+ },
227
532
  { "key": "color", "type": "string", "defaultValue": "red" },
228
533
  { "key": "sections", "type": "array", "defaultValue": [] },
229
534
  { "key": "title", "type": "string", "defaultValue": "Sidebar Title" }
230
535
  ],
231
536
  "variations": [
232
- { "type": "boolean", "value": false, "weight": 10 },
537
+ { "value": "control", "weight": 10 },
233
538
  {
234
- "type": "boolean",
235
- "value": true,
539
+ "value": "treatment",
236
540
  "weight": 90,
237
541
  "variables": [
238
542
  { "key": "position", "value": "right" },
@@ -240,17 +544,17 @@
240
544
  "key": "color",
241
545
  "value": "red",
242
546
  "overrides": [
243
- { "segments": "germany", "value": "yellow" },
244
- { "segments": "japan", "value": "white" }
547
+ { "segments": ["germany"], "value": "yellow" },
548
+ { "segments": ["switzerland"], "value": "white" }
245
549
  ]
246
550
  },
247
551
  {
248
552
  "key": "sections",
249
553
  "value": ["home", "about", "contact"],
250
554
  "overrides": [
251
- { "segments": "germany", "value": ["home", "about", "contact", "imprint"] },
555
+ { "segments": ["germany"], "value": ["home", "about", "contact", "imprint"] },
252
556
  {
253
- "segments": "netherlands",
557
+ "segments": ["netherlands"],
254
558
  "value": ["home", "about", "contact", "bitterballen"]
255
559
  }
256
560
  ]
@@ -271,7 +575,12 @@
271
575
  ]
272
576
  }
273
577
  },
274
- "key": "sidebar"
578
+ "key": "sidebar",
579
+ "lastModified": {
580
+ "commit": "2a1b73d",
581
+ "timestamp": "2023-10-05T18:27:51+02:00",
582
+ "author": "Fahad Heylaal"
583
+ }
275
584
  }
276
585
  ]
277
586
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featurevisor/site",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Static site for Featurevisor",
5
5
  "main": "dist",
6
6
  "scripts": {
@@ -63,7 +63,7 @@
63
63
  "webpack-merge": "^5.10.0"
64
64
  },
65
65
  "dependencies": {
66
- "@featurevisor/types": "1.0.0"
66
+ "@featurevisor/types": "^1.2.0"
67
67
  },
68
- "gitHead": "02c2a84b1963688d521065075298c0e04ee6fdf7"
68
+ "gitHead": "e733c84d2fcdc6205df5ae75e5bbf73753141646"
69
69
  }
@@ -147,7 +147,7 @@ export function DisplayFeatureForceTable() {
147
147
  {typeof force.variables[k] === "string" && force.variables[k]}
148
148
  {typeof force.variables[k] !== "string" && (
149
149
  <code className="rounded bg-gray-100 px-2 py-1 text-red-400">
150
- {force.variables[k]}
150
+ {JSON.stringify(force.variables[k], null, 2)}
151
151
  </code>
152
152
  )}
153
153
  </li>
@@ -249,7 +249,7 @@ export function DisplayFeatureRulesTable() {
249
249
  {typeof rule.variables[k] === "string" && rule.variables[k]}
250
250
  {typeof rule.variables[k] !== "string" && (
251
251
  <code className="rounded bg-gray-100 px-2 py-1 text-red-400">
252
- {rule.variables[k]}
252
+ {JSON.stringify(rule.variables[k], null, 2)}
253
253
  </code>
254
254
  )}
255
255
  </li>