@pnp/cli-microsoft365 11.7.0-beta.71e4ac5 → 11.7.0-beta.b9f508d

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 (26) hide show
  1. package/allCommands.json +1 -1
  2. package/allCommandsFull.json +1 -1
  3. package/dist/m365/entra/commands/user/user-license-add.js +2 -1
  4. package/dist/m365/entra/commands/user/user-license-list.js +4 -9
  5. package/dist/m365/entra/commands/user/user-license-remove.js +2 -1
  6. package/dist/m365/outlook/commands/event/event-cancel.js +103 -0
  7. package/dist/m365/outlook/commands/event/event-remove.js +104 -0
  8. package/dist/m365/outlook/commands.js +2 -0
  9. package/dist/m365/spfx/commands/SpfxCompatibilityMatrix.js +628 -0
  10. package/dist/m365/spfx/commands/project/DeployWorkflow.js +2 -2
  11. package/dist/m365/spfx/commands/project/project-azuredevops-pipeline-add.js +13 -1
  12. package/dist/m365/spfx/commands/project/project-github-workflow-add.js +16 -1
  13. package/dist/m365/spfx/commands/spfx-doctor.js +5 -631
  14. package/dist/m365/teams/commands/chat/chat-message-list.js +43 -4
  15. package/dist/utils/entraApp.js +9 -2
  16. package/dist/utils/spfx.js +59 -0
  17. package/docs/docs/cmd/entra/license/license-list.mdx +19 -0
  18. package/docs/docs/cmd/entra/m365group/m365group-conversation-list.mdx +19 -0
  19. package/docs/docs/cmd/entra/m365group/m365group-conversation-post-list.mdx +19 -0
  20. package/docs/docs/cmd/entra/user/user-license-add.mdx +19 -0
  21. package/docs/docs/cmd/entra/user/user-license-list.mdx +18 -1
  22. package/docs/docs/cmd/entra/user/user-license-remove.mdx +21 -0
  23. package/docs/docs/cmd/outlook/event/event-cancel.mdx +85 -0
  24. package/docs/docs/cmd/outlook/event/event-remove.mdx +85 -0
  25. package/docs/docs/cmd/teams/chat/chat-message-list.mdx +23 -2
  26. package/package.json +2 -1
@@ -9,6 +9,7 @@ import { satisfies } from 'semver';
9
9
  import { CheckStatus, formatting } from '../../../utils/formatting.js';
10
10
  import commands from '../commands.js';
11
11
  import { BaseProjectCommand } from './project/base-project-command.js';
12
+ import { SharePointVersion, versions } from './SpfxCompatibilityMatrix.js';
12
13
  /**
13
14
  * Where to search for the particular npm package: only in the current project,
14
15
  * in global packages or both
@@ -27,16 +28,6 @@ var HandlePromise;
27
28
  HandlePromise[HandlePromise["Fail"] = 0] = "Fail";
28
29
  HandlePromise[HandlePromise["Continue"] = 1] = "Continue";
29
30
  })(HandlePromise || (HandlePromise = {}));
30
- /**
31
- * Versions of SharePoint that support SharePoint Framework
32
- */
33
- var SharePointVersion;
34
- (function (SharePointVersion) {
35
- SharePointVersion[SharePointVersion["SP2016"] = 1] = "SP2016";
36
- SharePointVersion[SharePointVersion["SP2019"] = 2] = "SP2019";
37
- SharePointVersion[SharePointVersion["SPO"] = 4] = "SPO";
38
- SharePointVersion[SharePointVersion["All"] = 7] = "All";
39
- })(SharePointVersion || (SharePointVersion = {}));
40
31
  class SpfxDoctorCommand extends BaseProjectCommand {
41
32
  get allowedOutputs() {
42
33
  return ['text', 'json'];
@@ -50,623 +41,6 @@ class SpfxDoctorCommand extends BaseProjectCommand {
50
41
  constructor() {
51
42
  super();
52
43
  _SpfxDoctorCommand_instances.add(this);
53
- this.versions = {
54
- '1.0.0': {
55
- gulpCli: {
56
- range: '^1 || ^2',
57
- fix: 'npm i -g gulp-cli@2'
58
- },
59
- node: {
60
- range: '^6',
61
- fix: 'Install Node.js v6'
62
- },
63
- sp: SharePointVersion.All,
64
- yo: {
65
- range: '^3',
66
- fix: 'npm i -g yo@3'
67
- }
68
- },
69
- '1.1.0': {
70
- gulpCli: {
71
- range: '^1 || ^2',
72
- fix: 'npm i -g gulp-cli@2'
73
- },
74
- node: {
75
- range: '^6',
76
- fix: 'Install Node.js v6'
77
- },
78
- sp: SharePointVersion.All,
79
- yo: {
80
- range: '^3',
81
- fix: 'npm i -g yo@3'
82
- }
83
- },
84
- '1.2.0': {
85
- gulpCli: {
86
- range: '^1 || ^2',
87
- fix: 'npm i -g gulp-cli@2'
88
- },
89
- node: {
90
- range: '^6',
91
- fix: 'Install Node.js v6'
92
- },
93
- sp: SharePointVersion.SP2019 | SharePointVersion.SPO,
94
- yo: {
95
- range: '^3',
96
- fix: 'npm i -g yo@3'
97
- }
98
- },
99
- '1.4.0': {
100
- gulpCli: {
101
- range: '^1 || ^2',
102
- fix: 'npm i -g gulp-cli@2'
103
- },
104
- node: {
105
- range: '^6',
106
- fix: 'Install Node.js v6'
107
- },
108
- sp: SharePointVersion.SP2019 | SharePointVersion.SPO,
109
- yo: {
110
- range: '^3',
111
- fix: 'npm i -g yo@3'
112
- }
113
- },
114
- '1.4.1': {
115
- gulpCli: {
116
- range: '^1 || ^2',
117
- fix: 'npm i -g gulp-cli@2'
118
- },
119
- node: {
120
- range: '^6 || ^8',
121
- fix: 'Install Node.js v8'
122
- },
123
- sp: SharePointVersion.SP2019 | SharePointVersion.SPO,
124
- yo: {
125
- range: '^3',
126
- fix: 'npm i -g yo@3'
127
- }
128
- },
129
- '1.5.0': {
130
- gulpCli: {
131
- range: '^1 || ^2',
132
- fix: 'npm i -g gulp-cli@2'
133
- },
134
- node: {
135
- range: '^6 || ^8',
136
- fix: 'Install Node.js v8'
137
- },
138
- sp: SharePointVersion.SPO,
139
- yo: {
140
- range: '^3',
141
- fix: 'npm i -g yo@3'
142
- }
143
- },
144
- '1.5.1': {
145
- gulpCli: {
146
- range: '^1 || ^2',
147
- fix: 'npm i -g gulp-cli@2'
148
- },
149
- node: {
150
- range: '^6 || ^8',
151
- fix: 'Install Node.js v8'
152
- },
153
- sp: SharePointVersion.SPO,
154
- yo: {
155
- range: '^3',
156
- fix: 'npm i -g yo@3'
157
- }
158
- },
159
- '1.6.0': {
160
- gulpCli: {
161
- range: '^1 || ^2',
162
- fix: 'npm i -g gulp-cli@2'
163
- },
164
- node: {
165
- range: '^6 || ^8',
166
- fix: 'Install Node.js v8'
167
- },
168
- sp: SharePointVersion.SPO,
169
- yo: {
170
- range: '^3',
171
- fix: 'npm i -g yo@3'
172
- }
173
- },
174
- '1.7.0': {
175
- gulpCli: {
176
- range: '^1 || ^2',
177
- fix: 'npm i -g gulp-cli@2'
178
- },
179
- node: {
180
- range: '^8',
181
- fix: 'Install Node.js v8'
182
- },
183
- sp: SharePointVersion.SPO,
184
- yo: {
185
- range: '^3',
186
- fix: 'npm i -g yo@3'
187
- }
188
- },
189
- '1.7.1': {
190
- gulpCli: {
191
- range: '^1 || ^2',
192
- fix: 'npm i -g gulp-cli@2'
193
- },
194
- node: {
195
- range: '^8',
196
- fix: 'Install Node.js v8'
197
- },
198
- sp: SharePointVersion.SPO,
199
- yo: {
200
- range: '^3',
201
- fix: 'npm i -g yo@3'
202
- }
203
- },
204
- '1.8.0': {
205
- gulpCli: {
206
- range: '^1 || ^2',
207
- fix: 'npm i -g gulp-cli@2'
208
- },
209
- node: {
210
- range: '^8',
211
- fix: 'Install Node.js v8'
212
- },
213
- sp: SharePointVersion.SPO,
214
- yo: {
215
- range: '^3',
216
- fix: 'npm i -g yo@3'
217
- }
218
- },
219
- '1.8.1': {
220
- gulpCli: {
221
- range: '^1 || ^2',
222
- fix: 'npm i -g gulp-cli@2'
223
- },
224
- node: {
225
- range: '^8',
226
- fix: 'Install Node.js v8'
227
- },
228
- sp: SharePointVersion.SPO,
229
- yo: {
230
- range: '^3',
231
- fix: 'npm i -g yo@3'
232
- }
233
- },
234
- '1.8.2': {
235
- gulpCli: {
236
- range: '^1 || ^2',
237
- fix: 'npm i -g gulp-cli@2'
238
- },
239
- node: {
240
- range: '^8 || ^10',
241
- fix: 'Install Node.js v10'
242
- },
243
- sp: SharePointVersion.SPO,
244
- yo: {
245
- range: '^3',
246
- fix: 'npm i -g yo@3'
247
- }
248
- },
249
- '1.9.0': {
250
- gulpCli: {
251
- range: '^1 || ^2',
252
- fix: 'npm i -g gulp-cli@2'
253
- },
254
- node: {
255
- range: '^8 || ^10',
256
- fix: 'Install Node.js v10'
257
- },
258
- sp: SharePointVersion.SPO,
259
- yo: {
260
- range: '^3',
261
- fix: 'npm i -g yo@3'
262
- }
263
- },
264
- '1.9.1': {
265
- gulpCli: {
266
- range: '^1 || ^2',
267
- fix: 'npm i -g gulp-cli@2'
268
- },
269
- node: {
270
- range: '^10',
271
- fix: 'Install Node.js v10'
272
- },
273
- sp: SharePointVersion.SPO,
274
- yo: {
275
- range: '^3',
276
- fix: 'npm i -g yo@3'
277
- }
278
- },
279
- '1.10.0': {
280
- gulpCli: {
281
- range: '^1 || ^2',
282
- fix: 'npm i -g gulp-cli@2'
283
- },
284
- node: {
285
- range: '^10',
286
- fix: 'Install Node.js v10'
287
- },
288
- sp: SharePointVersion.SPO,
289
- yo: {
290
- range: '^3',
291
- fix: 'npm i -g yo@3'
292
- }
293
- },
294
- '1.11.0': {
295
- gulpCli: {
296
- range: '^1 || ^2',
297
- fix: 'npm i -g gulp-cli@2'
298
- },
299
- node: {
300
- range: '^10',
301
- fix: 'Install Node.js v10'
302
- },
303
- sp: SharePointVersion.SPO,
304
- yo: {
305
- range: '^3',
306
- fix: 'npm i -g yo@3'
307
- }
308
- },
309
- '1.12.0': {
310
- gulpCli: {
311
- range: '^1 || ^2',
312
- fix: 'npm i -g gulp-cli@2'
313
- },
314
- node: {
315
- range: '^12',
316
- fix: 'Install Node.js v12'
317
- },
318
- sp: SharePointVersion.SPO,
319
- yo: {
320
- range: '^3',
321
- fix: 'npm i -g yo@3'
322
- }
323
- },
324
- '1.12.1': {
325
- gulpCli: {
326
- range: '^1 || ^2',
327
- fix: 'npm i -g gulp-cli@2'
328
- },
329
- node: {
330
- range: '^12 || ^14',
331
- fix: 'Install Node.js v12 or v14'
332
- },
333
- sp: SharePointVersion.SPO,
334
- yo: {
335
- range: '^3',
336
- fix: 'npm i -g yo@3'
337
- }
338
- },
339
- '1.13.0': {
340
- gulpCli: {
341
- range: '^1 || ^2',
342
- fix: 'npm i -g gulp-cli@2'
343
- },
344
- node: {
345
- range: '^12 || ^14',
346
- fix: 'Install Node.js v12 or v14'
347
- },
348
- sp: SharePointVersion.SPO,
349
- yo: {
350
- range: '^4',
351
- fix: 'npm i -g yo@4'
352
- }
353
- },
354
- '1.13.1': {
355
- gulpCli: {
356
- range: '^1 || ^2',
357
- fix: 'npm i -g gulp-cli@2'
358
- },
359
- node: {
360
- range: '^12 || ^14',
361
- fix: 'Install Node.js v12 or v14'
362
- },
363
- sp: SharePointVersion.SPO,
364
- yo: {
365
- range: '^4',
366
- fix: 'npm i -g yo@4'
367
- }
368
- },
369
- '1.14.0': {
370
- gulpCli: {
371
- range: '^1 || ^2',
372
- fix: 'npm i -g gulp-cli@2'
373
- },
374
- node: {
375
- range: '^12 || ^14',
376
- fix: 'Install Node.js v12 or v14'
377
- },
378
- sp: SharePointVersion.SPO,
379
- yo: {
380
- range: '^4',
381
- fix: 'npm i -g yo@4'
382
- }
383
- },
384
- '1.15.0': {
385
- gulpCli: {
386
- range: '^1 || ^2',
387
- fix: 'npm i -g gulp-cli@2'
388
- },
389
- node: {
390
- range: '^12.13 || ^14.15 || ^16.13',
391
- fix: 'Install Node.js v12.13, v14.15, v16.13 or higher'
392
- },
393
- sp: SharePointVersion.SPO,
394
- yo: {
395
- range: '^4',
396
- fix: 'npm i -g yo@4'
397
- }
398
- },
399
- '1.15.2': {
400
- gulpCli: {
401
- range: '^1 || ^2',
402
- fix: 'npm i -g gulp-cli@2'
403
- },
404
- node: {
405
- range: '^12.13 || ^14.15 || ^16.13',
406
- fix: 'Install Node.js v12.13, v14.15, v16.13 or higher'
407
- },
408
- sp: SharePointVersion.SPO,
409
- yo: {
410
- range: '^4',
411
- fix: 'npm i -g yo@4'
412
- }
413
- },
414
- '1.16.0': {
415
- gulpCli: {
416
- range: '^1 || ^2',
417
- fix: 'npm i -g gulp-cli@2'
418
- },
419
- node: {
420
- range: '>=16.13.0 <17.0.0',
421
- fix: 'Install Node.js >=16.13.0 <17.0.0'
422
- },
423
- sp: SharePointVersion.SPO,
424
- yo: {
425
- range: '^4',
426
- fix: 'npm i -g yo@4'
427
- }
428
- },
429
- '1.16.1': {
430
- gulpCli: {
431
- range: '^1 || ^2',
432
- fix: 'npm i -g gulp-cli@2'
433
- },
434
- node: {
435
- range: '>=16.13.0 <17.0.0',
436
- fix: 'Install Node.js >=16.13.0 <17.0.0'
437
- },
438
- sp: SharePointVersion.SPO,
439
- yo: {
440
- range: '^4',
441
- fix: 'npm i -g yo@4'
442
- }
443
- },
444
- '1.17.0': {
445
- gulpCli: {
446
- range: '^1 || ^2',
447
- fix: 'npm i -g gulp-cli@2'
448
- },
449
- node: {
450
- range: '>=16.13.0 <17.0.0',
451
- fix: 'Install Node.js >=16.13.0 <17.0.0'
452
- },
453
- sp: SharePointVersion.SPO,
454
- yo: {
455
- range: '^4',
456
- fix: 'npm i -g yo@4'
457
- }
458
- },
459
- '1.17.1': {
460
- gulpCli: {
461
- range: '^1 || ^2',
462
- fix: 'npm i -g gulp-cli@2'
463
- },
464
- node: {
465
- range: '>=16.13.0 <17.0.0',
466
- fix: 'Install Node.js >=16.13.0 <17.0.0'
467
- },
468
- sp: SharePointVersion.SPO,
469
- yo: {
470
- range: '^4',
471
- fix: 'npm i -g yo@4'
472
- }
473
- },
474
- '1.17.2': {
475
- gulpCli: {
476
- range: '^1 || ^2',
477
- fix: 'npm i -g gulp-cli@2'
478
- },
479
- node: {
480
- range: '>=16.13.0 <17.0.0',
481
- fix: 'Install Node.js >=16.13.0 <17.0.0'
482
- },
483
- sp: SharePointVersion.SPO,
484
- yo: {
485
- range: '^4',
486
- fix: 'npm i -g yo@4'
487
- }
488
- },
489
- '1.17.3': {
490
- gulpCli: {
491
- range: '^1 || ^2',
492
- fix: 'npm i -g gulp-cli@2'
493
- },
494
- node: {
495
- range: '>=16.13.0 <17.0.0',
496
- fix: 'Install Node.js >=16.13.0 <17.0.0'
497
- },
498
- sp: SharePointVersion.SPO,
499
- yo: {
500
- range: '^4',
501
- fix: 'npm i -g yo@4'
502
- }
503
- },
504
- '1.17.4': {
505
- gulpCli: {
506
- range: '^1 || ^2',
507
- fix: 'npm i -g gulp-cli@2'
508
- },
509
- node: {
510
- range: '>=16.13.0 <17.0.0',
511
- fix: 'Install Node.js >=16.13.0 <17.0.0'
512
- },
513
- sp: SharePointVersion.SPO,
514
- yo: {
515
- range: '^4',
516
- fix: 'npm i -g yo@4'
517
- }
518
- },
519
- '1.18.0': {
520
- gulpCli: {
521
- range: '^1 || ^2',
522
- fix: 'npm i -g gulp-cli@2'
523
- },
524
- node: {
525
- range: '>=16.13.0 <17.0.0 || >=18.17.1 <19.0.0',
526
- fix: 'Install Node.js >=16.13.0 <17.0.0 || >=18.17.1 <19.0.0'
527
- },
528
- sp: SharePointVersion.SPO,
529
- yo: {
530
- range: '^4',
531
- fix: 'npm i -g yo@4'
532
- }
533
- },
534
- '1.18.1': {
535
- gulpCli: {
536
- range: '^1 || ^2',
537
- fix: 'npm i -g gulp-cli@2'
538
- },
539
- node: {
540
- range: '>=16.13.0 <17.0.0 || >=18.17.1 <19.0.0',
541
- fix: 'Install Node.js >=16.13.0 <17.0.0 || >=18.17.1 <19.0.0'
542
- },
543
- sp: SharePointVersion.SPO,
544
- yo: {
545
- range: '^4',
546
- fix: 'npm i -g yo@4'
547
- }
548
- },
549
- '1.18.2': {
550
- gulpCli: {
551
- range: '^1 || ^2',
552
- fix: 'npm i -g gulp-cli@2'
553
- },
554
- node: {
555
- range: '>=16.13.0 <17.0.0 || >=18.17.1 <19.0.0',
556
- fix: 'Install Node.js >=16.13.0 <17.0.0 || >=18.17.1 <19.0.0'
557
- },
558
- sp: SharePointVersion.SPO,
559
- yo: {
560
- range: '^4 || ^5',
561
- fix: 'npm i -g yo@5'
562
- }
563
- },
564
- '1.19.0': {
565
- gulpCli: {
566
- range: '^1 || ^2 || ^3',
567
- fix: 'npm i -g gulp-cli@3'
568
- },
569
- node: {
570
- range: '>=18.17.1 <19.0.0',
571
- fix: 'Install Node.js >=18.17.1 <19.0.0'
572
- },
573
- sp: SharePointVersion.SPO,
574
- yo: {
575
- range: '^4 || ^5',
576
- fix: 'npm i -g yo@5'
577
- }
578
- },
579
- '1.20.0': {
580
- gulpCli: {
581
- range: '^1 || ^2 || ^3',
582
- fix: 'npm i -g gulp-cli@3'
583
- },
584
- node: {
585
- range: '>=18.17.1 <19.0.0',
586
- fix: 'Install Node.js >=18.17.1 <19.0.0'
587
- },
588
- sp: SharePointVersion.SPO,
589
- yo: {
590
- range: '^4 || ^5',
591
- fix: 'npm i -g yo@5'
592
- }
593
- },
594
- '1.21.0': {
595
- gulpCli: {
596
- range: '^1 || ^2 || ^3',
597
- fix: 'npm i -g gulp-cli@3'
598
- },
599
- node: {
600
- range: '>=22.14.0 <23.0.0',
601
- fix: 'Install Node.js >=22.14.0 <23.0.0'
602
- },
603
- sp: SharePointVersion.SPO,
604
- yo: {
605
- range: '^4 || ^5',
606
- fix: 'npm i -g yo@5'
607
- }
608
- },
609
- '1.21.1': {
610
- gulpCli: {
611
- range: '^1 || ^2 || ^3',
612
- fix: 'npm i -g gulp-cli@3'
613
- },
614
- node: {
615
- range: '>=22.14.0 <23.0.0',
616
- fix: 'Install Node.js >=22.14.0 <23.0.0'
617
- },
618
- sp: SharePointVersion.SPO,
619
- yo: {
620
- range: '^4 || ^5',
621
- fix: 'npm i -g yo@5'
622
- }
623
- },
624
- '1.22.0': {
625
- heft: {
626
- range: '^1',
627
- fix: 'npm i -g @rushstack/heft@1'
628
- },
629
- node: {
630
- range: '>=22.14.0 <23.0.0',
631
- fix: 'Install Node.js >=22.14.0 <23.0.0'
632
- },
633
- sp: SharePointVersion.SPO,
634
- yo: {
635
- range: '^4 || ^5 || ^6',
636
- fix: 'npm i -g yo@6'
637
- }
638
- },
639
- '1.22.1': {
640
- heft: {
641
- range: '^1',
642
- fix: 'npm i -g @rushstack/heft@1'
643
- },
644
- node: {
645
- range: '>=22.14.0 <23.0.0',
646
- fix: 'Install Node.js >=22.14.0 <23.0.0'
647
- },
648
- sp: SharePointVersion.SPO,
649
- yo: {
650
- range: '^4 || ^5 || ^6',
651
- fix: 'npm i -g yo@6'
652
- }
653
- },
654
- '1.22.2': {
655
- heft: {
656
- range: '^1',
657
- fix: 'npm i -g @rushstack/heft@1'
658
- },
659
- node: {
660
- range: '>=22.14.0 <23.0.0',
661
- fix: 'Install Node.js >=22.14.0 <23.0.0'
662
- },
663
- sp: SharePointVersion.SPO,
664
- yo: {
665
- range: '^4 || ^5 || ^6',
666
- fix: 'npm i -g yo@6'
667
- }
668
- }
669
- };
670
44
  this.output = '';
671
45
  this.resultsObject = [];
672
46
  __classPrivateFieldGet(this, _SpfxDoctorCommand_instances, "m", _SpfxDoctorCommand_initTelemetry).call(this);
@@ -696,7 +70,7 @@ class SpfxDoctorCommand extends BaseProjectCommand {
696
70
  });
697
71
  throw `SharePoint Framework not found`;
698
72
  }
699
- prerequisites = this.versions[spfxVersion];
73
+ prerequisites = versions[spfxVersion];
700
74
  if (!prerequisites) {
701
75
  const message = `spfx doctor doesn't support SPFx v${spfxVersion} at this moment`;
702
76
  this.resultsObject.push({
@@ -1069,7 +443,7 @@ _SpfxDoctorCommand_instances = new WeakSet(), _SpfxDoctorCommand_initTelemetry =
1069
443
  autocomplete: ['sp2016', 'sp2019', 'spo']
1070
444
  }, {
1071
445
  option: '-v, --spfxVersion [spfxVersion]',
1072
- autocomplete: Object.keys(this.versions)
446
+ autocomplete: Object.keys(versions)
1073
447
  });
1074
448
  }, _SpfxDoctorCommand_initValidators = function _SpfxDoctorCommand_initValidators() {
1075
449
  this.validators.push(async (args) => {
@@ -1080,8 +454,8 @@ _SpfxDoctorCommand_instances = new WeakSet(), _SpfxDoctorCommand_initTelemetry =
1080
454
  }
1081
455
  }
1082
456
  if (args.options.spfxVersion) {
1083
- if (!this.versions[args.options.spfxVersion]) {
1084
- return `${args.options.spfxVersion} is not a supported SharePoint Framework version. Supported versions are ${Object.keys(this.versions).join(', ')}`;
457
+ if (!versions[args.options.spfxVersion]) {
458
+ return `${args.options.spfxVersion} is not a supported SharePoint Framework version. Supported versions are ${Object.keys(versions).join(', ')}`;
1085
459
  }
1086
460
  }
1087
461
  return true;