@mongoosejs/studio 0.5.4 → 0.5.5

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.
@@ -663,10 +663,6 @@ video {
663
663
  left: -0.25rem;
664
664
  }
665
665
 
666
- .-left-2 {
667
- left: -0.5rem;
668
- }
669
-
670
666
  .-left-3 {
671
667
  left: -0.75rem;
672
668
  }
@@ -791,6 +787,10 @@ video {
791
787
  z-index: 100;
792
788
  }
793
789
 
790
+ .z-\[1\] {
791
+ z-index: 1;
792
+ }
793
+
794
794
  .z-\[9999\] {
795
795
  z-index: 9999;
796
796
  }
@@ -1068,6 +1068,10 @@ video {
1068
1068
  height: 4rem;
1069
1069
  }
1070
1070
 
1071
+ .h-20 {
1072
+ height: 5rem;
1073
+ }
1074
+
1071
1075
  .h-3 {
1072
1076
  height: 0.75rem;
1073
1077
  }
@@ -1096,6 +1100,10 @@ video {
1096
1100
  height: 16rem;
1097
1101
  }
1098
1102
 
1103
+ .h-7 {
1104
+ height: 1.75rem;
1105
+ }
1106
+
1099
1107
  .h-8 {
1100
1108
  height: 2rem;
1101
1109
  }
@@ -1140,6 +1148,10 @@ video {
1140
1148
  max-height: 12rem;
1141
1149
  }
1142
1150
 
1151
+ .max-h-72 {
1152
+ max-height: 18rem;
1153
+ }
1154
+
1143
1155
  .max-h-80 {
1144
1156
  max-height: 20rem;
1145
1157
  }
@@ -1152,6 +1164,10 @@ video {
1152
1164
  max-height: 50vh;
1153
1165
  }
1154
1166
 
1167
+ .max-h-\[55vh\] {
1168
+ max-height: 55vh;
1169
+ }
1170
+
1155
1171
  .min-h-0 {
1156
1172
  min-height: 0px;
1157
1173
  }
@@ -1208,6 +1224,10 @@ video {
1208
1224
  width: 0.375rem;
1209
1225
  }
1210
1226
 
1227
+ .w-10 {
1228
+ width: 2.5rem;
1229
+ }
1230
+
1211
1231
  .w-12 {
1212
1232
  width: 3rem;
1213
1233
  }
@@ -1216,6 +1236,18 @@ video {
1216
1236
  width: 4rem;
1217
1237
  }
1218
1238
 
1239
+ .w-20 {
1240
+ width: 5rem;
1241
+ }
1242
+
1243
+ .w-24 {
1244
+ width: 6rem;
1245
+ }
1246
+
1247
+ .w-28 {
1248
+ width: 7rem;
1249
+ }
1250
+
1219
1251
  .w-3 {
1220
1252
  width: 0.75rem;
1221
1253
  }
@@ -1224,6 +1256,10 @@ video {
1224
1256
  width: 0.875rem;
1225
1257
  }
1226
1258
 
1259
+ .w-32 {
1260
+ width: 8rem;
1261
+ }
1262
+
1227
1263
  .w-36 {
1228
1264
  width: 9rem;
1229
1265
  }
@@ -1276,6 +1312,14 @@ video {
1276
1312
  width: 240px;
1277
1313
  }
1278
1314
 
1315
+ .w-\[40\%\] {
1316
+ width: 40%;
1317
+ }
1318
+
1319
+ .w-\[60\%\] {
1320
+ width: 60%;
1321
+ }
1322
+
1279
1323
  .w-\[calc\(100\%-1rem\)\] {
1280
1324
  width: calc(100% - 1rem);
1281
1325
  }
@@ -1300,6 +1344,10 @@ video {
1300
1344
  min-width: 220px;
1301
1345
  }
1302
1346
 
1347
+ .min-w-\[260px\] {
1348
+ min-width: 260px;
1349
+ }
1350
+
1303
1351
  .min-w-\[7rem\] {
1304
1352
  min-width: 7rem;
1305
1353
  }
@@ -1308,6 +1356,10 @@ video {
1308
1356
  min-width: 80px;
1309
1357
  }
1310
1358
 
1359
+ .min-w-\[8rem\] {
1360
+ min-width: 8rem;
1361
+ }
1362
+
1311
1363
  .min-w-full {
1312
1364
  min-width: 100%;
1313
1365
  }
@@ -1348,6 +1400,10 @@ video {
1348
1400
  max-width: 32rem;
1349
1401
  }
1350
1402
 
1403
+ .max-w-md {
1404
+ max-width: 28rem;
1405
+ }
1406
+
1351
1407
  .max-w-xl {
1352
1408
  max-width: 36rem;
1353
1409
  }
@@ -1388,6 +1444,10 @@ video {
1388
1444
  flex-grow: 1;
1389
1445
  }
1390
1446
 
1447
+ .table-fixed {
1448
+ table-layout: fixed;
1449
+ }
1450
+
1391
1451
  .border-collapse {
1392
1452
  border-collapse: collapse;
1393
1453
  }
@@ -1455,6 +1515,16 @@ video {
1455
1515
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1456
1516
  }
1457
1517
 
1518
+ @keyframes pulse {
1519
+ 50% {
1520
+ opacity: .5;
1521
+ }
1522
+ }
1523
+
1524
+ .animate-pulse {
1525
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1526
+ }
1527
+
1458
1528
  @keyframes spin {
1459
1529
  to {
1460
1530
  transform: rotate(360deg);
@@ -1485,6 +1555,10 @@ video {
1485
1555
  resize: none;
1486
1556
  }
1487
1557
 
1558
+ .resize-y {
1559
+ resize: vertical;
1560
+ }
1561
+
1488
1562
  .list-disc {
1489
1563
  list-style-type: disc;
1490
1564
  }
@@ -1649,6 +1723,10 @@ video {
1649
1723
  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
1650
1724
  }
1651
1725
 
1726
+ .divide-edge > :not([hidden]) ~ :not([hidden]) {
1727
+ border-color: var(--color-edge);
1728
+ }
1729
+
1652
1730
  .divide-gray-100 > :not([hidden]) ~ :not([hidden]) {
1653
1731
  --tw-divide-opacity: 1;
1654
1732
  border-color: rgb(243 244 246 / var(--tw-divide-opacity));
@@ -1931,9 +2009,9 @@ video {
1931
2009
  border-color: rgb(254 240 138 / var(--tw-border-opacity));
1932
2010
  }
1933
2011
 
1934
- .border-l-blue-500 {
2012
+ .border-l-slate-100 {
1935
2013
  --tw-border-opacity: 1;
1936
- border-left-color: rgb(59 130 246 / var(--tw-border-opacity));
2014
+ border-left-color: rgb(241 245 249 / var(--tw-border-opacity));
1937
2015
  }
1938
2016
 
1939
2017
  .border-r-gray-900 {
@@ -1945,16 +2023,6 @@ video {
1945
2023
  background-color: var(--color-surface) !important;
1946
2024
  }
1947
2025
 
1948
- .bg-amber-100 {
1949
- --tw-bg-opacity: 1;
1950
- background-color: rgb(254 243 199 / var(--tw-bg-opacity));
1951
- }
1952
-
1953
- .bg-amber-200 {
1954
- --tw-bg-opacity: 1;
1955
- background-color: rgb(253 230 138 / var(--tw-bg-opacity));
1956
- }
1957
-
1958
2026
  .bg-black {
1959
2027
  --tw-bg-opacity: 1;
1960
2028
  background-color: rgb(0 0 0 / var(--tw-bg-opacity));
@@ -2059,6 +2127,15 @@ video {
2059
2127
  background-color: rgb(79 70 229 / var(--tw-bg-opacity));
2060
2128
  }
2061
2129
 
2130
+ .bg-inherit {
2131
+ background-color: inherit;
2132
+ }
2133
+
2134
+ .bg-merlot-700 {
2135
+ --tw-bg-opacity: 1;
2136
+ background-color: rgb(176 32 43 / var(--tw-bg-opacity));
2137
+ }
2138
+
2062
2139
  .bg-muted {
2063
2140
  background-color: var(--color-muted);
2064
2141
  }
@@ -2129,6 +2206,10 @@ video {
2129
2206
  background-color: rgb(248 250 252 / 0.5);
2130
2207
  }
2131
2208
 
2209
+ .bg-slate-50\/90 {
2210
+ background-color: rgb(248 250 252 / 0.9);
2211
+ }
2212
+
2132
2213
  .bg-slate-500 {
2133
2214
  --tw-bg-opacity: 1;
2134
2215
  background-color: rgb(100 116 139 / var(--tw-bg-opacity));
@@ -2314,6 +2395,11 @@ video {
2314
2395
  padding-right: 1.5rem;
2315
2396
  }
2316
2397
 
2398
+ .px-px {
2399
+ padding-left: 1px;
2400
+ padding-right: 1px;
2401
+ }
2402
+
2317
2403
  .py-0 {
2318
2404
  padding-top: 0px;
2319
2405
  padding-bottom: 0px;
@@ -2334,6 +2420,11 @@ video {
2334
2420
  padding-bottom: 0.375rem;
2335
2421
  }
2336
2422
 
2423
+ .py-10 {
2424
+ padding-top: 2.5rem;
2425
+ padding-bottom: 2.5rem;
2426
+ }
2427
+
2337
2428
  .py-12 {
2338
2429
  padding-top: 3rem;
2339
2430
  padding-bottom: 3rem;
@@ -2384,6 +2475,11 @@ video {
2384
2475
  padding-bottom: 1px;
2385
2476
  }
2386
2477
 
2478
+ .py-px {
2479
+ padding-top: 1px;
2480
+ padding-bottom: 1px;
2481
+ }
2482
+
2387
2483
  .pb-1 {
2388
2484
  padding-bottom: 0.25rem;
2389
2485
  }
@@ -2408,6 +2504,10 @@ video {
2408
2504
  padding-left: 2.5rem;
2409
2505
  }
2410
2506
 
2507
+ .pl-2 {
2508
+ padding-left: 0.5rem;
2509
+ }
2510
+
2411
2511
  .pl-3 {
2412
2512
  padding-left: 0.75rem;
2413
2513
  }
@@ -2428,6 +2528,10 @@ video {
2428
2528
  padding-right: 3rem;
2429
2529
  }
2430
2530
 
2531
+ .pr-16 {
2532
+ padding-right: 4rem;
2533
+ }
2534
+
2431
2535
  .pr-2 {
2432
2536
  padding-right: 0.5rem;
2433
2537
  }
@@ -2568,6 +2672,10 @@ video {
2568
2672
  line-height: 1;
2569
2673
  }
2570
2674
 
2675
+ .leading-snug {
2676
+ line-height: 1.375;
2677
+ }
2678
+
2571
2679
  .leading-tight {
2572
2680
  line-height: 1.25;
2573
2681
  }
@@ -2677,6 +2785,11 @@ video {
2677
2785
  color: rgb(20 83 45 / var(--tw-text-opacity));
2678
2786
  }
2679
2787
 
2788
+ .text-merlot-700 {
2789
+ --tw-text-opacity: 1;
2790
+ color: rgb(176 32 43 / var(--tw-text-opacity));
2791
+ }
2792
+
2680
2793
  .text-primary {
2681
2794
  color: var(--color-primary);
2682
2795
  }
@@ -2950,6 +3063,10 @@ video {
2950
3063
  --tw-ring-color: rgb(0 0 0 / 0.05);
2951
3064
  }
2952
3065
 
3066
+ .ring-edge-strong {
3067
+ --tw-ring-color: var(--color-edge-strong);
3068
+ }
3069
+
2953
3070
  .ring-gray-300 {
2954
3071
  --tw-ring-opacity: 1;
2955
3072
  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));
@@ -3090,6 +3207,10 @@ video {
3090
3207
  margin-bottom: 0px;
3091
3208
  }
3092
3209
 
3210
+ .last\:border-b-0:last-child {
3211
+ border-bottom-width: 0px;
3212
+ }
3213
+
3093
3214
  .last\:border-r-0:last-child {
3094
3215
  border-right-width: 0px;
3095
3216
  }
@@ -3182,14 +3303,9 @@ video {
3182
3303
  border-color: rgb(253 224 71 / var(--tw-border-opacity));
3183
3304
  }
3184
3305
 
3185
- .hover\:border-l-blue-600:hover {
3306
+ .hover\:border-l-slate-100:hover {
3186
3307
  --tw-border-opacity: 1;
3187
- border-left-color: rgb(37 99 235 / var(--tw-border-opacity));
3188
- }
3189
-
3190
- .hover\:bg-amber-200:hover {
3191
- --tw-bg-opacity: 1;
3192
- background-color: rgb(253 230 138 / var(--tw-bg-opacity));
3308
+ border-left-color: rgb(241 245 249 / var(--tw-border-opacity));
3193
3309
  }
3194
3310
 
3195
3311
  .hover\:bg-blue-100:hover {
@@ -3308,6 +3424,11 @@ video {
3308
3424
  background-color: rgb(241 245 249 / var(--tw-bg-opacity));
3309
3425
  }
3310
3426
 
3427
+ .hover\:bg-slate-200:hover {
3428
+ --tw-bg-opacity: 1;
3429
+ background-color: rgb(226 232 240 / var(--tw-bg-opacity));
3430
+ }
3431
+
3311
3432
  .hover\:bg-slate-400:hover {
3312
3433
  --tw-bg-opacity: 1;
3313
3434
  background-color: rgb(148 163 184 / var(--tw-bg-opacity));
@@ -3318,6 +3439,14 @@ video {
3318
3439
  background-color: rgb(248 250 252 / var(--tw-bg-opacity));
3319
3440
  }
3320
3441
 
3442
+ .hover\:bg-slate-50\/60:hover {
3443
+ background-color: rgb(248 250 252 / 0.6);
3444
+ }
3445
+
3446
+ .hover\:bg-slate-50\/80:hover {
3447
+ background-color: rgb(248 250 252 / 0.8);
3448
+ }
3449
+
3321
3450
  .hover\:bg-slate-500:hover {
3322
3451
  --tw-bg-opacity: 1;
3323
3452
  background-color: rgb(100 116 139 / var(--tw-bg-opacity));
@@ -3378,11 +3507,6 @@ video {
3378
3507
  --tw-gradient-to: #b91c1c var(--tw-gradient-to-position);
3379
3508
  }
3380
3509
 
3381
- .hover\:text-blue-800:hover {
3382
- --tw-text-opacity: 1;
3383
- color: rgb(30 64 175 / var(--tw-text-opacity));
3384
- }
3385
-
3386
3510
  .hover\:text-content:hover {
3387
3511
  color: var(--color-content);
3388
3512
  }
@@ -3406,6 +3530,11 @@ video {
3406
3530
  color: rgb(31 41 55 / var(--tw-text-opacity));
3407
3531
  }
3408
3532
 
3533
+ .hover\:text-merlot-900:hover {
3534
+ --tw-text-opacity: 1;
3535
+ color: rgb(127 29 43 / var(--tw-text-opacity));
3536
+ }
3537
+
3409
3538
  .hover\:text-primary:hover {
3410
3539
  color: var(--color-primary);
3411
3540
  }
@@ -3658,6 +3787,10 @@ video {
3658
3787
  cursor: not-allowed;
3659
3788
  }
3660
3789
 
3790
+ .disabled\:cursor-wait:disabled {
3791
+ cursor: wait;
3792
+ }
3793
+
3661
3794
  .disabled\:bg-gray-400:disabled {
3662
3795
  --tw-bg-opacity: 1;
3663
3796
  background-color: rgb(156 163 175 / var(--tw-bg-opacity));
@@ -3668,10 +3801,18 @@ video {
3668
3801
  background-color: rgb(75 85 99 / var(--tw-bg-opacity));
3669
3802
  }
3670
3803
 
3804
+ .disabled\:bg-muted:disabled {
3805
+ background-color: var(--color-muted);
3806
+ }
3807
+
3671
3808
  .disabled\:bg-page:disabled {
3672
3809
  background-color: var(--color-page);
3673
3810
  }
3674
3811
 
3812
+ .disabled\:text-content-tertiary:disabled {
3813
+ color: var(--color-content-tertiary);
3814
+ }
3815
+
3675
3816
  .disabled\:text-gray-300:disabled {
3676
3817
  --tw-text-opacity: 1;
3677
3818
  color: rgb(209 213 219 / var(--tw-text-opacity));
@@ -3682,6 +3823,10 @@ video {
3682
3823
  color: rgb(156 163 175 / var(--tw-text-opacity));
3683
3824
  }
3684
3825
 
3826
+ .disabled\:opacity-40:disabled {
3827
+ opacity: 0.4;
3828
+ }
3829
+
3685
3830
  .disabled\:opacity-50:disabled {
3686
3831
  opacity: 0.5;
3687
3832
  }
@@ -3743,6 +3888,10 @@ video {
3743
3888
  height: 1rem;
3744
3889
  }
3745
3890
 
3891
+ .sm\:max-w-md {
3892
+ max-width: 28rem;
3893
+ }
3894
+
3746
3895
  .sm\:flex-none {
3747
3896
  flex: none;
3748
3897
  }
@@ -3767,6 +3916,10 @@ video {
3767
3916
  align-items: center;
3768
3917
  }
3769
3918
 
3919
+ .sm\:gap-3 {
3920
+ gap: 0.75rem;
3921
+ }
3922
+
3770
3923
  .sm\:rounded-xl {
3771
3924
  border-radius: 0.75rem;
3772
3925
  }
@@ -3812,10 +3965,26 @@ video {
3812
3965
  display: none;
3813
3966
  }
3814
3967
 
3968
+ .md\:\!w-\[70vw\] {
3969
+ width: 70vw !important;
3970
+ }
3971
+
3815
3972
  .md\:grid-cols-2 {
3816
3973
  grid-template-columns: repeat(2, minmax(0, 1fr));
3817
3974
  }
3818
3975
 
3976
+ .md\:grid-cols-4 {
3977
+ grid-template-columns: repeat(4, minmax(0, 1fr));
3978
+ }
3979
+
3980
+ .md\:grid-cols-\[minmax\(160px\2c 220px\)_1fr\] {
3981
+ grid-template-columns: minmax(160px,220px) 1fr;
3982
+ }
3983
+
3984
+ .md\:grid-cols-\[minmax\(180px\2c 240px\)_1fr\] {
3985
+ grid-template-columns: minmax(180px,240px) 1fr;
3986
+ }
3987
+
3819
3988
  .md\:gap-3 {
3820
3989
  gap: 0.75rem;
3821
3990
  }
@@ -3848,6 +4017,10 @@ video {
3848
4017
  margin-right: -2rem;
3849
4018
  }
3850
4019
 
4020
+ .lg\:ml-auto {
4021
+ margin-left: auto;
4022
+ }
4023
+
3851
4024
  .lg\:flex {
3852
4025
  display: flex;
3853
4026
  }
@@ -3868,6 +4041,10 @@ video {
3868
4041
  width: 16rem;
3869
4042
  }
3870
4043
 
4044
+ .lg\:max-w-\[18rem\] {
4045
+ max-width: 18rem;
4046
+ }
4047
+
3871
4048
  .lg\:max-w-\[calc\(100vw-20rem\)\] {
3872
4049
  max-width: calc(100vw - 20rem);
3873
4050
  }
@@ -3877,6 +4054,18 @@ video {
3877
4054
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
3878
4055
  }
3879
4056
 
4057
+ .lg\:flex-row {
4058
+ flex-direction: row;
4059
+ }
4060
+
4061
+ .lg\:items-center {
4062
+ align-items: center;
4063
+ }
4064
+
4065
+ .lg\:gap-4 {
4066
+ gap: 1rem;
4067
+ }
4068
+
3880
4069
  .lg\:\!border-r-0 {
3881
4070
  border-right-width: 0px !important;
3882
4071
  }
@@ -3885,6 +4074,10 @@ video {
3885
4074
  padding-left: 2rem;
3886
4075
  padding-right: 2rem;
3887
4076
  }
4077
+
4078
+ .lg\:text-right {
4079
+ text-align: right;
4080
+ }
3888
4081
  }
3889
4082
 
3890
4083
  @media (min-width: 1280px) {
@@ -168,6 +168,9 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
168
168
  addField(params) {
169
169
  return client.post('', { action: 'Model.addField', ...params }).then(res => res.data);
170
170
  },
171
+ analyzeSchema(params) {
172
+ return client.post('', { action: 'Model.analyzeSchema', ...params }).then(res => res.data);
173
+ },
171
174
  createChart(params) {
172
175
  return client.post('', { action: 'Model.createChart', ...params }).then(res => res.data);
173
176
  },
@@ -183,6 +186,9 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
183
186
  executeDocumentScript(params) {
184
187
  return client.post('', { action: 'Model.executeDocumentScript', ...params }).then(res => res.data);
185
188
  },
189
+ validateDocument(params) {
190
+ return client.post('', { action: 'Model.validateDocument', ...params }).then(res => res.data);
191
+ },
186
192
  exportQueryResults(params) {
187
193
  const accessToken = window.localStorage.getItem('_mongooseStudioAccessToken') || null;
188
194
 
@@ -439,6 +445,9 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
439
445
  getCollectionInfo: function getCollectionInfo(params) {
440
446
  return client.post('/Model/getCollectionInfo', params).then(res => res.data);
441
447
  },
448
+ analyzeSchema: function analyzeSchema(params) {
449
+ return client.post('/Model/analyzeSchema', params).then(res => res.data);
450
+ },
442
451
  getIndexes: function getIndexes(params) {
443
452
  return client.post('/Model/getIndexes', params).then(res => res.data);
444
453
  },
@@ -451,6 +460,9 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
451
460
  updateDocument: function updateDocument(params) {
452
461
  return client.post('/Model/updateDocument', params).then(res => res.data);
453
462
  },
463
+ validateDocument: function validateDocument(params) {
464
+ return client.post('/Model/validateDocument', params).then(res => res.data);
465
+ },
454
466
  streamChatMessage: async function* streamChatMessage(params) {
455
467
  const accessToken = window.localStorage.getItem('_mongooseStudioAccessToken') || null;
456
468
  const url = window.MONGOOSE_STUDIO_CONFIG.baseURL + '/Model/streamChatMessage?' + new URLSearchParams(params).toString();
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  const { inspect } = require('node-inspect-extracted');
4
- const deepEqual = require('./_util/deepEqual');
5
4
 
6
5
  /**
7
6
  * Format a value for display in array views
@@ -59,9 +58,68 @@ function formatItemValue(item, key) {
59
58
  return String(value);
60
59
  }
61
60
 
61
+ /**
62
+ * True when every element is a plain object (empty array counts as eligible).
63
+ */
64
+ function isArrayOfObjects(arr) {
65
+ return Array.isArray(arr) && arr.every(item => isObjectItem(item));
66
+ }
67
+
68
+ /**
69
+ * Sorted union of keys across plain object elements.
70
+ */
71
+ function unionKeysForArrayOfObjects(arr) {
72
+ if (!Array.isArray(arr)) {
73
+ return [];
74
+ }
75
+ const set = new Set();
76
+ for (const item of arr) {
77
+ if (!isObjectItem(item)) {
78
+ continue;
79
+ }
80
+ for (const k of Object.keys(item)) {
81
+ set.add(k);
82
+ }
83
+ }
84
+ return Array.from(set).sort((a, b) => a.localeCompare(b));
85
+ }
86
+
87
+ /**
88
+ * Flat text for substring search over one array element (field names + values, or whole item).
89
+ * @param {*} item
90
+ * @returns {string}
91
+ */
92
+ function searchTextForArrayItem(item) {
93
+ if (item == null) {
94
+ return String(item);
95
+ }
96
+ if (isObjectItem(item)) {
97
+ return getItemKeys(item)
98
+ .map(k => `${k} ${formatItemValue(item, k)}`)
99
+ .join(' \n ');
100
+ }
101
+ return formatValue(item);
102
+ }
103
+
104
+ /**
105
+ * Case-insensitive substring match against an array element.
106
+ * @param {*} item
107
+ * @param {string} normalizedQuery lowercased trimmed query; empty matches all
108
+ */
109
+ function arrayItemMatchesSearch(item, normalizedQuery) {
110
+ if (normalizedQuery == null || normalizedQuery === '') {
111
+ return true;
112
+ }
113
+ return searchTextForArrayItem(item).toLowerCase().includes(normalizedQuery);
114
+ }
115
+
62
116
  module.exports = {
63
117
  formatValue,
64
118
  isObjectItem,
65
119
  getItemKeys,
66
- formatItemValue
120
+ formatItemValue,
121
+ isArrayOfObjects,
122
+ unionKeysForArrayOfObjects,
123
+ searchTextForArrayItem,
124
+ arrayItemMatchesSearch
67
125
  };