@wix/zero-config-implementation 1.86.0 → 1.88.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.
@@ -0,0 +1,601 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`TS extractor — array type variants > snapshots mutable, readonly, tuple, intersection, nested, and primitive array resolution 1`] = `
4
+ {
5
+ "genericReadonlyItems": {
6
+ "defaultValue": {
7
+ "kind": "array",
8
+ "value": [
9
+ {
10
+ "details": {
11
+ "enabled": true,
12
+ "rank": 1,
13
+ },
14
+ "id": "first",
15
+ "label": "First item",
16
+ },
17
+ {
18
+ "details": {
19
+ "enabled": false,
20
+ "rank": 2,
21
+ },
22
+ "id": "second",
23
+ "label": "Second item",
24
+ },
25
+ ],
26
+ },
27
+ "required": false,
28
+ "resolvedType": {
29
+ "kind": "union",
30
+ "types": [
31
+ {
32
+ "kind": "primitive",
33
+ "value": "undefined",
34
+ },
35
+ {
36
+ "elementType": {
37
+ "kind": "object",
38
+ "properties": {
39
+ "details": {
40
+ "name": "details",
41
+ "required": true,
42
+ "resolvedType": {
43
+ "kind": "object",
44
+ "properties": {
45
+ "enabled": {
46
+ "name": "enabled",
47
+ "required": true,
48
+ "resolvedType": {
49
+ "kind": "primitive",
50
+ "value": "boolean",
51
+ },
52
+ "type": "boolean",
53
+ },
54
+ "rank": {
55
+ "name": "rank",
56
+ "required": true,
57
+ "resolvedType": {
58
+ "kind": "primitive",
59
+ "value": "number",
60
+ },
61
+ "type": "number",
62
+ },
63
+ },
64
+ },
65
+ "type": "{ rank: number; enabled: boolean; }",
66
+ },
67
+ "id": {
68
+ "name": "id",
69
+ "required": true,
70
+ "resolvedType": {
71
+ "kind": "primitive",
72
+ "value": "string",
73
+ },
74
+ "type": "string",
75
+ },
76
+ "label": {
77
+ "name": "label",
78
+ "required": true,
79
+ "resolvedType": {
80
+ "kind": "primitive",
81
+ "value": "string",
82
+ },
83
+ "type": "string",
84
+ },
85
+ },
86
+ },
87
+ "kind": "array",
88
+ },
89
+ ],
90
+ },
91
+ "type": "ReadonlyArray",
92
+ },
93
+ "intersectedItems": {
94
+ "defaultValue": undefined,
95
+ "required": true,
96
+ "resolvedType": {
97
+ "elementType": {
98
+ "kind": "object",
99
+ "properties": {
100
+ "details": {
101
+ "name": "details",
102
+ "required": true,
103
+ "resolvedType": {
104
+ "kind": "object",
105
+ "properties": {
106
+ "enabled": {
107
+ "name": "enabled",
108
+ "required": true,
109
+ "resolvedType": {
110
+ "kind": "primitive",
111
+ "value": "boolean",
112
+ },
113
+ "type": "boolean",
114
+ },
115
+ "rank": {
116
+ "name": "rank",
117
+ "required": true,
118
+ "resolvedType": {
119
+ "kind": "primitive",
120
+ "value": "number",
121
+ },
122
+ "type": "number",
123
+ },
124
+ },
125
+ },
126
+ "type": "{ rank: number; enabled: boolean; }",
127
+ },
128
+ "id": {
129
+ "name": "id",
130
+ "required": true,
131
+ "resolvedType": {
132
+ "kind": "primitive",
133
+ "value": "string",
134
+ },
135
+ "type": "string",
136
+ },
137
+ "label": {
138
+ "name": "label",
139
+ "required": true,
140
+ "resolvedType": {
141
+ "kind": "primitive",
142
+ "value": "string",
143
+ },
144
+ "type": "string",
145
+ },
146
+ },
147
+ },
148
+ "kind": "array",
149
+ },
150
+ "type": "CollectionItem[] & readonly [{ readonly id: "first"; readonly label: "First item"; readonly details: { readonly rank: 1; readonly enabled: true; }; }, { readonly id: "second"; readonly label: "Second item"; readonly details: { ...; }; }]",
151
+ },
152
+ "mutableItems": {
153
+ "defaultValue": {
154
+ "kind": "array",
155
+ "value": [
156
+ {
157
+ "details": {
158
+ "enabled": true,
159
+ "rank": 0,
160
+ },
161
+ "id": "mutable",
162
+ "label": "Mutable default",
163
+ },
164
+ ],
165
+ },
166
+ "required": false,
167
+ "resolvedType": {
168
+ "kind": "union",
169
+ "types": [
170
+ {
171
+ "kind": "primitive",
172
+ "value": "undefined",
173
+ },
174
+ {
175
+ "elementType": {
176
+ "kind": "object",
177
+ "properties": {
178
+ "details": {
179
+ "name": "details",
180
+ "required": true,
181
+ "resolvedType": {
182
+ "kind": "object",
183
+ "properties": {
184
+ "enabled": {
185
+ "name": "enabled",
186
+ "required": true,
187
+ "resolvedType": {
188
+ "kind": "primitive",
189
+ "value": "boolean",
190
+ },
191
+ "type": "boolean",
192
+ },
193
+ "rank": {
194
+ "name": "rank",
195
+ "required": true,
196
+ "resolvedType": {
197
+ "kind": "primitive",
198
+ "value": "number",
199
+ },
200
+ "type": "number",
201
+ },
202
+ },
203
+ },
204
+ "type": "{ rank: number; enabled: boolean; }",
205
+ },
206
+ "id": {
207
+ "name": "id",
208
+ "required": true,
209
+ "resolvedType": {
210
+ "kind": "primitive",
211
+ "value": "string",
212
+ },
213
+ "type": "string",
214
+ },
215
+ "label": {
216
+ "name": "label",
217
+ "required": true,
218
+ "resolvedType": {
219
+ "kind": "primitive",
220
+ "value": "string",
221
+ },
222
+ "type": "string",
223
+ },
224
+ },
225
+ },
226
+ "kind": "array",
227
+ },
228
+ ],
229
+ },
230
+ "type": "CollectionItem[]",
231
+ },
232
+ "nestedReadonlyItems": {
233
+ "defaultValue": undefined,
234
+ "required": true,
235
+ "resolvedType": {
236
+ "elementType": {
237
+ "elementType": {
238
+ "kind": "object",
239
+ "properties": {
240
+ "details": {
241
+ "name": "details",
242
+ "required": true,
243
+ "resolvedType": {
244
+ "kind": "object",
245
+ "properties": {
246
+ "enabled": {
247
+ "name": "enabled",
248
+ "required": true,
249
+ "resolvedType": {
250
+ "kind": "primitive",
251
+ "value": "boolean",
252
+ },
253
+ "type": "boolean",
254
+ },
255
+ "rank": {
256
+ "name": "rank",
257
+ "required": true,
258
+ "resolvedType": {
259
+ "kind": "primitive",
260
+ "value": "number",
261
+ },
262
+ "type": "number",
263
+ },
264
+ },
265
+ },
266
+ "type": "{ rank: number; enabled: boolean; }",
267
+ },
268
+ "id": {
269
+ "name": "id",
270
+ "required": true,
271
+ "resolvedType": {
272
+ "kind": "primitive",
273
+ "value": "string",
274
+ },
275
+ "type": "string",
276
+ },
277
+ "label": {
278
+ "name": "label",
279
+ "required": true,
280
+ "resolvedType": {
281
+ "kind": "primitive",
282
+ "value": "string",
283
+ },
284
+ "type": "string",
285
+ },
286
+ },
287
+ },
288
+ "kind": "array",
289
+ },
290
+ "kind": "array",
291
+ },
292
+ "type": "ReadonlyArray",
293
+ },
294
+ "readonlyIntersectedItems": {
295
+ "defaultValue": undefined,
296
+ "required": true,
297
+ "resolvedType": {
298
+ "elementType": {
299
+ "kind": "object",
300
+ "properties": {
301
+ "details": {
302
+ "name": "details",
303
+ "required": true,
304
+ "resolvedType": {
305
+ "kind": "object",
306
+ "properties": {
307
+ "enabled": {
308
+ "name": "enabled",
309
+ "required": true,
310
+ "resolvedType": {
311
+ "kind": "primitive",
312
+ "value": "boolean",
313
+ },
314
+ "type": "boolean",
315
+ },
316
+ "rank": {
317
+ "name": "rank",
318
+ "required": true,
319
+ "resolvedType": {
320
+ "kind": "primitive",
321
+ "value": "number",
322
+ },
323
+ "type": "number",
324
+ },
325
+ },
326
+ },
327
+ "type": "{ rank: number; enabled: boolean; }",
328
+ },
329
+ "id": {
330
+ "name": "id",
331
+ "required": true,
332
+ "resolvedType": {
333
+ "kind": "primitive",
334
+ "value": "string",
335
+ },
336
+ "type": "string",
337
+ },
338
+ "label": {
339
+ "name": "label",
340
+ "required": true,
341
+ "resolvedType": {
342
+ "kind": "primitive",
343
+ "value": "string",
344
+ },
345
+ "type": "string",
346
+ },
347
+ },
348
+ },
349
+ "kind": "array",
350
+ },
351
+ "type": "readonly CollectionItem[] & readonly [{ readonly id: "first"; readonly label: "First item"; readonly details: { readonly rank: 1; readonly enabled: true; }; }, { readonly id: "second"; readonly label: "Second item"; readonly details: { ...; }; }]",
352
+ },
353
+ "readonlyItems": {
354
+ "defaultValue": {
355
+ "kind": "array",
356
+ "value": [
357
+ {
358
+ "details": {
359
+ "enabled": true,
360
+ "rank": 1,
361
+ },
362
+ "id": "first",
363
+ "label": "First item",
364
+ },
365
+ {
366
+ "details": {
367
+ "enabled": false,
368
+ "rank": 2,
369
+ },
370
+ "id": "second",
371
+ "label": "Second item",
372
+ },
373
+ ],
374
+ },
375
+ "required": false,
376
+ "resolvedType": {
377
+ "kind": "union",
378
+ "types": [
379
+ {
380
+ "kind": "primitive",
381
+ "value": "undefined",
382
+ },
383
+ {
384
+ "elementType": {
385
+ "kind": "object",
386
+ "properties": {
387
+ "details": {
388
+ "name": "details",
389
+ "required": true,
390
+ "resolvedType": {
391
+ "kind": "object",
392
+ "properties": {
393
+ "enabled": {
394
+ "name": "enabled",
395
+ "required": true,
396
+ "resolvedType": {
397
+ "kind": "primitive",
398
+ "value": "boolean",
399
+ },
400
+ "type": "boolean",
401
+ },
402
+ "rank": {
403
+ "name": "rank",
404
+ "required": true,
405
+ "resolvedType": {
406
+ "kind": "primitive",
407
+ "value": "number",
408
+ },
409
+ "type": "number",
410
+ },
411
+ },
412
+ },
413
+ "type": "{ rank: number; enabled: boolean; }",
414
+ },
415
+ "id": {
416
+ "name": "id",
417
+ "required": true,
418
+ "resolvedType": {
419
+ "kind": "primitive",
420
+ "value": "string",
421
+ },
422
+ "type": "string",
423
+ },
424
+ "label": {
425
+ "name": "label",
426
+ "required": true,
427
+ "resolvedType": {
428
+ "kind": "primitive",
429
+ "value": "string",
430
+ },
431
+ "type": "string",
432
+ },
433
+ },
434
+ },
435
+ "kind": "array",
436
+ },
437
+ ],
438
+ },
439
+ "type": "readonly CollectionItem[]",
440
+ },
441
+ "readonlyLabels": {
442
+ "defaultValue": undefined,
443
+ "required": true,
444
+ "resolvedType": {
445
+ "elementType": {
446
+ "kind": "primitive",
447
+ "value": "string",
448
+ },
449
+ "kind": "array",
450
+ },
451
+ "type": "readonly string[]",
452
+ },
453
+ "readonlyTupleItems": {
454
+ "defaultValue": {
455
+ "kind": "array",
456
+ "value": [
457
+ {
458
+ "details": {
459
+ "enabled": true,
460
+ "rank": 1,
461
+ },
462
+ "id": "first",
463
+ "label": "First item",
464
+ },
465
+ {
466
+ "details": {
467
+ "enabled": false,
468
+ "rank": 2,
469
+ },
470
+ "id": "second",
471
+ "label": "Second item",
472
+ },
473
+ ],
474
+ },
475
+ "required": false,
476
+ "resolvedType": {
477
+ "kind": "union",
478
+ "types": [
479
+ {
480
+ "kind": "primitive",
481
+ "value": "undefined",
482
+ },
483
+ {
484
+ "elementType": {
485
+ "kind": "object",
486
+ "properties": {
487
+ "details": {
488
+ "name": "details",
489
+ "required": true,
490
+ "resolvedType": {
491
+ "kind": "object",
492
+ "properties": {
493
+ "enabled": {
494
+ "name": "enabled",
495
+ "required": true,
496
+ "resolvedType": {
497
+ "kind": "primitive",
498
+ "value": "boolean",
499
+ },
500
+ "type": "boolean",
501
+ },
502
+ "rank": {
503
+ "name": "rank",
504
+ "required": true,
505
+ "resolvedType": {
506
+ "kind": "primitive",
507
+ "value": "number",
508
+ },
509
+ "type": "number",
510
+ },
511
+ },
512
+ },
513
+ "type": "{ rank: number; enabled: boolean; }",
514
+ },
515
+ "id": {
516
+ "name": "id",
517
+ "required": true,
518
+ "resolvedType": {
519
+ "kind": "primitive",
520
+ "value": "string",
521
+ },
522
+ "type": "string",
523
+ },
524
+ "label": {
525
+ "name": "label",
526
+ "required": true,
527
+ "resolvedType": {
528
+ "kind": "primitive",
529
+ "value": "string",
530
+ },
531
+ "type": "string",
532
+ },
533
+ },
534
+ },
535
+ "kind": "array",
536
+ },
537
+ ],
538
+ },
539
+ "type": "readonly [CollectionItem, CollectionItem]",
540
+ },
541
+ "tupleItems": {
542
+ "defaultValue": undefined,
543
+ "required": true,
544
+ "resolvedType": {
545
+ "elementType": {
546
+ "kind": "object",
547
+ "properties": {
548
+ "details": {
549
+ "name": "details",
550
+ "required": true,
551
+ "resolvedType": {
552
+ "kind": "object",
553
+ "properties": {
554
+ "enabled": {
555
+ "name": "enabled",
556
+ "required": true,
557
+ "resolvedType": {
558
+ "kind": "primitive",
559
+ "value": "boolean",
560
+ },
561
+ "type": "boolean",
562
+ },
563
+ "rank": {
564
+ "name": "rank",
565
+ "required": true,
566
+ "resolvedType": {
567
+ "kind": "primitive",
568
+ "value": "number",
569
+ },
570
+ "type": "number",
571
+ },
572
+ },
573
+ },
574
+ "type": "{ rank: number; enabled: boolean; }",
575
+ },
576
+ "id": {
577
+ "name": "id",
578
+ "required": true,
579
+ "resolvedType": {
580
+ "kind": "primitive",
581
+ "value": "string",
582
+ },
583
+ "type": "string",
584
+ },
585
+ "label": {
586
+ "name": "label",
587
+ "required": true,
588
+ "resolvedType": {
589
+ "kind": "primitive",
590
+ "value": "string",
591
+ },
592
+ "type": "string",
593
+ },
594
+ },
595
+ },
596
+ "kind": "array",
597
+ },
598
+ "type": "[CollectionItem, CollectionItem]",
599
+ },
600
+ }
601
+ `;
@@ -23,6 +23,11 @@ const activeItemIndexFixture = path.resolve(
23
23
  '../../../../example-components/src/components/ActiveItemIndex/SimpleTabs/component.tsx',
24
24
  )
25
25
 
26
+ const arrayTypeVariantsFixture = path.resolve(
27
+ __dirname,
28
+ '../../../../example-components/src/components/ArrayTypeVariants/component.tsx',
29
+ )
30
+
26
31
  describe('TS extractor — ElementState<> trigger detection', () => {
27
32
  it('flags an ElementState<>-wrapped prop and unwraps its inner type', async () => {
28
33
  const programResult = await compileTsFile(propTriggeredFixture)
@@ -116,3 +121,29 @@ describe('TS extractor — ActiveItemIndex<> detection', () => {
116
121
  expect(component!.props.tabs.activeItemIndexTarget).toBeUndefined()
117
122
  })
118
123
  })
124
+
125
+ describe('TS extractor — array type variants', () => {
126
+ it('snapshots mutable, readonly, tuple, intersection, nested, and primitive array resolution', async () => {
127
+ const programResult = await compileTsFile(arrayTypeVariantsFixture)
128
+ expect(programResult.isOk()).toBe(true)
129
+ const program = programResult._unsafeUnwrap()
130
+
131
+ const components = extractAllComponentInfo(program, arrayTypeVariantsFixture)
132
+ const component = components.find((candidate) => candidate.componentName === 'ArrayTypeVariants')
133
+ expect(component).toBeDefined()
134
+
135
+ const arrayProps = Object.fromEntries(
136
+ Object.entries(component!.props).map(([propName, propInfo]) => [
137
+ propName,
138
+ {
139
+ type: propInfo.type,
140
+ required: propInfo.required,
141
+ defaultValue: propInfo.defaultValue,
142
+ resolvedType: propInfo.resolvedType,
143
+ },
144
+ ]),
145
+ )
146
+
147
+ expect(arrayProps).toMatchSnapshot()
148
+ })
149
+ })
@@ -453,6 +453,19 @@ function tryParseStructuredLiteral(text: string): Record<string, unknown> | unkn
453
453
  * keyword in the TS AST (it is a global identifier, not a literal).
454
454
  */
455
455
  function evaluateLiteralExpression(node: ts.Expression): unknown {
456
+ // TypeScript-only wrappers do not affect the runtime value of a literal.
457
+ // react-docgen-typescript preserves these when it expands defaults such as
458
+ // `items = DEFAULT_ITEMS`, where the constant uses `as const satisfies T`.
459
+ if (
460
+ ts.isParenthesizedExpression(node) ||
461
+ ts.isAsExpression(node) ||
462
+ ts.isTypeAssertionExpression(node) ||
463
+ ts.isSatisfiesExpression(node) ||
464
+ ts.isNonNullExpression(node)
465
+ ) {
466
+ return evaluateLiteralExpression(node.expression)
467
+ }
468
+
456
469
  if (ts.isObjectLiteralExpression(node)) {
457
470
  const result: Record<string, unknown> = {}
458
471
  for (const property of node.properties) {