ferrovue 0.7.0

Vue templates compiled to Rust render functions: server-side rendering with no JavaScript at run time
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
Every error the compiler raises has a stable code, shown as `error[FV0602]` and in the `code`
field of `ferrovue --format json`. A code names one kind of refusal and is never given to another:
one the compiler stops raising stays listed here, marked retired. The first two digits are the
area. [`errors_and_limits`](crate::guide::errors_and_limits) explains what the compiler refuses
and why. A warning, such as one for a deprecated configuration key, has a code of its own, shown as
`warning[FV1117]` and with the `severity` `"warning"` in JSON.

This page is generated from the compiler's list in `packages/ferrovue/src/errors.ts` by
`pnpm errors:generate`; `pnpm test` fails when the two differ.

# Components and parsing: FV00xx

## FV0001

Source file that does not parse.

A `<script setup>` block, or a file it reads, is not valid TypeScript. The message is the parser's own, with the line and column where it stopped.

## FV0002

Component file Vue cannot parse.

## FV0003

`<script>` without `setup`.

## FV0004

Component without a `<template>`.

## FV0005

Template Vue cannot compile.

## FV0006

Unexpected construct in Vue's compiled template.

The compiler met output of Vue's server compiler that it has no translation for. Please report it with the component that caused it.

## FV0007

Component file name that gives no Rust module of its own.

Each component is written to a Rust module named after its file in snake case (`UserCard.vue` is `user_card.rs`). A file name that is not letters, digits and `_` starting with a letter, two names with the same snake case (`FooBar.vue` and `Foo_bar.vue`), `Mod.vue`, and a name a module ferrovue writes for the project already has (`Types.vue`, `Stores.vue`) are refused.

# Script setup: FV01xx

## FV0101

`inheritAttrs` that is not `true` or `false`.

## FV0102

`watch` with `immediate`.

## FV0103

Effect that runs once on the server.

## FV0104

`onServerPrefetch`.

## FV0105

Statement in setup that could change what renders.

## FV0106

`defineAsyncComponent` of anything but a component of this project.

## FV0107

Unsupported statement in setup.

## FV0108

`...rest` in destructured props.

## FV0109

Destructured prop that is not a plain name.

# Constants and enums: FV02xx

## FV0201

Constant that refers to itself.

## FV0202

Enum member without a value after a string member.

## FV0203

Enum member value that is not a string or number literal.

## FV0204

Field a constant object does not have.

## FV0205

Spread or hole in a constant list.

## FV0206

Computed or spread key in a constant object.

## FV0207

Constant that is not a literal.

## FV0208

Constant object read whole.

## FV0209

`null` in a constant list of plain values.

## FV0210

Constant list of plain values of different types.

## FV0211

Constant list mixing plain values and objects.

## FV0212

Two constant lists with one Rust name.

## FV0213

Object in a constant list without a required field.

## FV0214

`null` for a field that is not nullable.

## FV0215

Field of the wrong type in a constant list's object.

## FV0216

Field of an unsupported type in a constant list's objects.

## FV0217

Field that is only ever `null`.

## FV0218

Field `null` in some objects and absent in others.

## FV0219

Field of different types across a constant list's objects.

## FV0220

Constant list's object type declared twice.

## FV0221

Constant list's object type named as a Rust type.

## FV0222

Constant object read by a key chosen at run time.

# Props and types: FV03xx

See [`props`](crate::guide::props).

## FV0301

`generic` that is not a list of type parameters.

## FV0302

Type parameter without a constraint.

A generic component renders each type parameter as its constraint, so `generic="T"` alone gives the server no type. Write `generic="T extends string"`.

## FV0303

Props declared at run time.

## FV0304

Props type not declared in the component.

## FV0305

`defineModel` without a type.

## FV0306

`defineModel` of a nullable type that is not required.

## FV0307

Default for a nullable prop.

## FV0308

Unknown type.

## FV0309

Type that is only `undefined`.

## FV0310

Object type written in place.

## FV0311

Type that may be both `null` and `undefined`.

A Rust `Option` holds one kind of nothing, where JavaScript has two. Declare `T | null` or `x?: T`, never both. See [`props`](crate::guide::props#nullable-props).

## FV0312

Union of different types.

## FV0313

`Record` not keyed by `string`.

## FV0314

Type alias that refers to itself.

## FV0315

Unsupported named type.

## FV0316

Unsupported type.

## FV0317

`Record` of unsupported values.

## FV0318

Interface named as a Rust type.

## FV0319

Type declared in two files.

## FV0320

Interface with members other than plain named fields.

## FV0321

Optional field of a nullable type.

## FV0322

Prop default that is not a literal.

# Templates and attributes: FV04xx

See [`generated_code`](crate::guide::generated_code).

## FV0401

Interpolation of a value that is not a string, a number or a boolean.

## FV0402

Attribute value of an unsupported type.

## FV0403

Attribute bound to a value Vue's server leaves out.

Vue's server renderer leaves out an attribute bound to a list, an object or a `route.query` value, and hydration then sets it to the value's `String()` without reporting a mismatch. Join a list (`.join(",")`) or narrow a query value to one string.

## FV0404

Unsafe attribute name.

## FV0405

Custom directive not listed in `clientDirectives`.

A custom directive's `getSSRProps` may add attributes on the server, which ferrovue does not run. List a directive that adds none in `clientDirectives`.

## FV0406

`$attrs` on a root that takes scope ids.

## FV0407

Attributes that are not an object literal.

## FV0408

Computed or spread key in an attribute object.

## FV0409

`className` bound in place of `class`.

## FV0410

Merged attributes that are not object literals.

## FV0411

Class merged with a string that may repeat the class before it.

## FV0412

Fallthrough attribute of an unsupported type.

## FV0413

`v-model` comparing values of types it cannot compare.

## FV0414

`v-model` over an array.

## FV0415

Value read from `$attrs`.

## FV0416

Root `<Transition>` or `<KeepAlive>` around `v-if` that is given attributes.

## FV0417

Attribute name chosen at run time.

## FV0418

`<component :is>` over a value that is not a closed set.

`<component :is>` compiles to a `match` over its choices, so each one must be known when compiling: an imported component, an HTML element's name, a `computed` or `?:` choosing among them, a prop typed as a union of string literals, or an object of imported components read by such a prop. A `string`, a `Component` or a value from elsewhere could be anything.

## FV0419

`<component :is>` naming something other than an HTML element.

## FV0420

`<component :is>` over a prop that may be absent.

## FV0421

`<component :is>` reading a key its object does not have.

## FV0422

`v-html` or `v-text` on `<component :is>`.

## FV0423

`v-show`, or `v-model` on `<select>`, in content rendered from virtual nodes.

Inside an element `<component :is>` chooses, in the slot content such an element renders, and inside a `<RouterLink>`, Vue's server renders from virtual nodes, where `v-show` writes no `style` while it shows and `v-model` on a `<select>` marks no option `selected`. Bind `:style` or `:selected` yourself.

# Child components: FV05xx

See [`generated_code`](crate::guide::generated_code).

## FV0501

Child component that is not among the compiled components.

## FV0502

Fallthrough attribute that would reach a child's prop.

## FV0503

Child props that are not an object literal.

## FV0504

Computed or spread key in child props.

## FV0505

Attribute named by an integer.

## FV0506

Required prop not passed.

## FV0507

Required nullable prop not passed.

## FV0508

Attributes passed to a child that takes none.

## FV0509

String prop given a value that is not a string.

## FV0510

One type declared separately by parent and child.

## FV0511

Prop given a value of another type.

## FV0512

`Props` imported from a component that is not compiled.

## FV0513

Component resolved by name that is not imported.

## FV0514

Listener of unknown name given to a child with a prop named like a listener.

# Expressions: FV06xx

## FV0601

Name or function not available on the server.

## FV0602

Unsupported method.

## FV0603

Unsupported call.

## FV0604

Field read on a value that is not an object.

## FV0605

Field the type does not have.

## FV0606

Value that may be absent where its target cannot take it as it is.

## FV0607

Value of an unexpected type.

## FV0608

`+` between unsupported types.

## FV0609

Comparison between unsupported or absent values.

## FV0610

Spread or hole in an array literal.

## FV0611

Array literal of different types.

## FV0612

Computed member access.

## FV0613

Value set up in a way the server cannot evaluate.

## FV0614

Logical operator between values that are not booleans.

## FV0615

`??` falling back to a computed list.

## FV0616

`??` between different types.

## FV0617

`||` between unsupported types.

## FV0618

Unsupported unary operator.

## FV0619

`==` or `!=` with anything but `null` or `undefined`.

## FV0620

Loose test against `undefined` of a value of a plugin's type.

## FV0621

Comparison of a plugin's value with `null` or `undefined`.

## FV0622

`===` between different types.

## FV0623

Branches of `?:` of different types.

## FV0624

`new` in an expression.

## FV0625

Unsupported expression.

## FV0626

Strict test of a value that may be `null` or `undefined`.

## FV0627

Strict test against the absence a value cannot have.

## FV0628

`as` or `satisfies` stating a type the value does not have.

# Strings and numbers: FV07xx

See [`strings`](crate::guide::strings).

## FV0701

`Number()` of an unsupported value.

## FV0702

`parseInt()` or `parseFloat()` of a value that is not a string.

## FV0703

`parseInt()` with a radix other than a literal 10 or 16.

## FV0704

Unsupported `Math` method.

## FV0705

`.toFixed()` without a literal number of digits from 0 to 100.

## FV0706

String that may hold half of a surrogate pair compared, searched or joined.

`slice`, `substring`, `at`, `charAt` and `split("")` can cut a surrogate pair in half. JavaScript keeps the half where ferrovue holds U+FFFD, so two such strings may compare, search or join differently. See [`strings`](crate::guide::strings#halves-of-surrogate-pairs).

## FV0707

`JSON.stringify()` of an unsupported value.

## FV0708

Template literal of values that are not present strings, numbers or booleans.

## FV0709

String method with the wrong number of arguments.

## FV0710

Regular expression given to a string method.

## FV0711

String method given a value that is not a present string.

## FV0712

String method given a value that is not a present number.

## FV0713

Function given to a string method.

## FV0714

`.repeat()` by a negative or infinite count.

## FV0715

Case mapping by the server's locale.

# Lists and loops: FV08xx

See [`props`](crate::guide::props).

## FV0801

`.includes()` of a value of another type than the list's.

## FV0802

`.join()` with a separator that is not a string.

## FV0803

List method on a value that is not a list.

## FV0804

List method over a list of unsupported items.

## FV0805

List method given anything but an arrow function or `Boolean`.

## FV0806

Arrow function with a block body.

## FV0807

Arrow function index that is not a plain name.

## FV0808

Defaults or nested patterns in an arrow function's item.

## FV0809

Arrow function item bound by an unsupported pattern.

## FV0810

`.map()` to optional or unsupported values.

## FV0811

`.slice()` with more than two arguments.

## FV0812

`.slice()` of values that are not numbers.

## FV0813

List method given more than one function.

## FV0814

`Object` method of a value that is not a `Record`.

## FV0815

`Object.values()` of a record of lists.

## FV0816

`Object.entries()` outside a `v-for`.

## FV0817

Unsupported `Object` method.

## FV0818

`v-for` over `Object.entries()` without `[key, value]`.

## FV0819

`v-for` over an empty array literal.

## FV0820

`v-for` over a value that is not a list or a number.

## FV0821

Defaults or nested patterns in a `v-for` item.

## FV0822

`v-for` item bound by an unsupported pattern.

## FV0823

`v-for` key or index that is not a plain name.

# Slots: FV09xx

See [`slots`](crate::guide::slots).

## FV0901

Slots that are not an object literal.

## FV0902

Computed or spread slot name.

## FV0903

Content for a slot the child does not have.

## FV0904

Defaults or nested patterns in destructured slot props.

## FV0905

Slot props bound by an unsupported pattern.

## FV0906

Slot props taken from a slot that passes none.

## FV0907

Slot read that the template does not render.

## FV0908

Slot prop of a type with no Rust type.

## FV0909

Array literal as a slot prop.

## FV0910

Computed list as a slot prop.

## FV0911

Slot prop of an unsupported type.

## FV0912

Slot name that is not literal.

## FV0913

Slot props that are not attributes or an object literal.

## FV0914

Computed or spread key in slot props.

## FV0915

Slot prop name that is not a plain name.

## FV0916

Outlets of one slot that pass different props.

## FV0917

Interface named as a slot's props type.

## FV0918

Slot scope id given to content that takes none.

## FV0919

`<slot>` with fallback content inside an element `<component :is>` chooses.

Inside an element that `<component :is>` chooses, Vue renders a slot's content as virtual nodes and decides whether to show the fallback by rules of their own. Give the fallback from the parent instead.

## FV0920

`<slot>` rendered both inside and outside an element `<component :is>` chooses.

# Classes, styles and scoped styles: FV10xx

See [`scoped_styles`](crate::guide::scoped_styles).

## FV1001

Computed or spread key in a class object.

## FV1002

Computed class name that is not a string.

## FV1003

Class name with spaces around it.

## FV1004

Class binding of an unsupported type.

## FV1005

`<style module>` without `cssModules` in the configuration.

Vite names a CSS module's classes by `css.modules.generateScopedName`. ferrovue computes the same names when `cssModules` in `ferrovue.config.json` is set as that option is; without it, it cannot know them.

## FV1006

`v-bind()` in CSS of a value that is not a string or a number.

Vue's server writes a variable `v-bind()` sets from a string or a number, `initial` for `null` and `undefined`, and warns of anything else.

## FV1007

Style binding of an unsupported type.

## FV1008

Computed or spread key in a style object.

## FV1009

Style property named by a number or starting with `:`.

## FV1010

Style array mixing a string with objects.

## FV1011

Style property whose place depends on a condition.

## FV1012

Scope ids handed to a component whose render does not take them.

## FV1013

`class` written apart from a later `:class` in content rendered from virtual nodes.

Inside an element `<component :is>` chooses, in the slot content such an element renders, and inside a `<RouterLink>`, Vue's server renders from virtual nodes, where a static `class` written before `:class` keeps its place and its names come first. ferrovue writes them so when nothing stands between the two; with attributes between them, write the two next to each other, or `:class` first.

## FV1014

`<style module>` whose class names ferrovue cannot compute.

ferrovue names the classes of a CSS module written in the component in plain CSS, as postcss-modules does in Vite. A module in another file (`src`), one a preprocessor compiles (`lang`), and one that imports names from another file (`composes: x from "./a.css"`, `@value x from "./a.css"`) are refused.

## FV1015

`useCssModule` of a module the component does not declare.

# Configuration and helpers: FV11xx

See [`quick_start`](crate::guide::quick_start).

## FV1101

Helper called with the wrong number of arguments.

## FV1102

Configuration file not found.

## FV1103

Configuration file that is not valid JSON.

## FV1104

Configuration without `components` or `out`.

## FV1105

Unsupported `scopeId`.

## FV1106

`builders` that is not `true` or `false`.

## FV1107

Unknown helper type.

## FV1108

Imported function without a Rust twin.

## FV1109

Twin name that is not PascalCase.

## FV1110

Twin without `rust`.

## FV1111

Twin prop name that is not camelCase.

## FV1112

Twin slot name that is not a plain name.

## FV1113

Configuration that is not a JSON object.

## FV1114

Unknown configuration key.

A key ferrovue does not read is refused, as it is most often a misspelt one (`component` for `components`). The message names the key it most likely means.

## FV1115

Configuration value of the wrong type.

## FV1116

Directory the configuration names that cannot be read.

## FV1117

Deprecated configuration key.

A warning: ferrovue still reads the key, and stops reading it in the next major release. The message names what to write instead. A key is deprecated for at least one minor release before it is removed.

## FV1118

Deprecated command-line option.

A warning: the option still works, and is removed in the next major release. The message names what to use instead. An option is deprecated for at least one minor release before it is removed.

# Router: FV12xx

See [`routing`](crate::guide::routing).

## FV1201

Route parameter that is not a present string or number.

## FV1202

`to` that is not a string or an object literal.

## FV1203

Computed or spread key in a `to` object.

## FV1204

Unsupported key in a `to` object.

## FV1205

`query` that is not an object literal.

## FV1206

Computed or spread key in a query.

## FV1207

Query value that may be `null`.

## FV1208

`hash` that is not a string.

## FV1209

Route name that is not a string literal.

## FV1210

Unknown route name.

## FV1211

`params` that is not an object literal.

## FV1212

Computed or spread key in `params`.

## FV1213

Unknown route parameter.

## FV1214

Route parameter not given.

## FV1215

`to` with both `path` and `params`.

## FV1216

`path` that is not a string.

## FV1217

`to` without `name` or `path`.

## FV1218

`<RouterLink>` attributes that are not literal.

## FV1219

Computed or spread key in `<RouterLink>` attributes.

## FV1220

`custom` on `<RouterLink>`.

## FV1221

`href` or `aria-current` set on `<RouterLink>`.

## FV1222

`<RouterLink>` without `to`.

## FV1223

Element in a `<RouterLink>` given a slot scope id.

## FV1224

`<slot>` in a `<RouterLink>` that takes scope ids.

## FV1225

`<RouterLink>` without `routes` configured.

## FV1226

`<RouterLink>` attribute that is not a string literal.

## FV1227

Fallthrough attribute that would reach a `<RouterLink>` prop.

## FV1228

Fallthrough attribute that would replace a `<RouterLink>` attribute.

## FV1229

`<RouterLink>` slot other than the default.

## FV1230

Route read without `routes` configured.

## FV1231

Route field not available on the server.

## FV1232

Routes file that is not an array.

## FV1233

Route entry of an unsupported shape.

## FV1234

`typeof` of anything but a query value.

## FV1235

`??` after a query value with a fallback that is not a string.

## FV1236

`<RouterView>` in a component with `<style scoped>`.

## FV1237

`<RouterView>` in a child component.

## FV1238

`routes` that is neither a routes file nor `{ pages }`.

## FV1239

Pages folder that cannot be read.

## FV1240

Page file name the router cannot match.

Each part of a page's path is plain text (letters, digits, `-` and `_`) or one whole parameter: `[id]`, `[[id]]` (optional) or `[...path]` (a catch-all, last). A parameter beside text in one part (`prefix-[id].vue`), a repeatable parameter (`[id]+`), an optional catch-all (`[[...path]]`), a parameter parser (`[id=int]`) and a character code (`[x+2E]`) are not matched on the server.

## FV1241

Named view in a page file name.

## FV1242

`definePage()` in a page.

`definePage()` changes a page's route (its name, path, alias, meta or params) at build time. ferrovue builds the server's routes from the files' paths alone, so the two would disagree.

## FV1243

`<route>` block in a page.

## FV1244

`_parent.vue` with no pages to hold.

## FV1245

Page whose component name is taken or not a Rust name.

## FV1246

Routes file that cannot be read.

## FV1247

Routes file that is not valid JSON.

# Pinia stores: FV13xx

See [`pinia`](crate::guide::pinia).

## FV1301

Type declared by two stores.

## FV1302

Store id that is not a string literal.

## FV1303

Store of an unsupported shape.

## FV1304

Store `state` without a declared return type.

## FV1305

Store `getters` that is not an object literal.

## FV1306

Getter that is not a function of the state.

## FV1307

Setup store without a block body.

## FV1308

Unsupported statement in a setup store.

## FV1309

Setup store that does not return an object.

## FV1310

Setup store returning anything but plain names.

## FV1311

Setup store returning a name it does not declare.

## FV1312

Interface named as a setup store's state type.

## FV1313

`ref<T | null>()` without a value.

## FV1314

Setup store `ref` without a type.

## FV1315

Getter with a block body.

## FV1316

Getter that reads `this`.

## FV1317

Getter that returns a function.

## FV1318

Getters that read each other.

## FV1319

Store imported by anything but its `use…` hook.

## FV1320

`storeToRefs` of anything but a store bound in setup.

## FV1321

`storeToRefs` not destructured into plain names.

## FV1322

Store hook called with arguments.

# vue-i18n: FV14xx

See [`i18n`](crate::guide::i18n).

## FV1401

Locale file that is not valid JSON.

## FV1402

Locale message that does not parse.

## FV1403

Linked message with a key chosen at run time.

## FV1404

Linked message with an unknown modifier.

## FV1405

Locale message construct ferrovue does not render.

## FV1406

`t()` value that is not a present string, number or boolean.

## FV1407

`t()` without `i18n` configured.

## FV1408

`t()` with unsupported arguments.

## FV1409

`t()` key that is not a string.

## FV1410

Computed or spread key in `t()`'s named values.

## FV1411

Default message given to `t()`.

## FV1412

Plural number that is not an integer.

## FV1413

`useI18n()` not destructured into plain names.

# Raw HTML, client-only content, teleports and Rust twins: FV15xx

See [`errors_and_limits`](crate::guide::errors_and_limits).

## FV1501

Twin props that are not attributes or an object literal.

## FV1502

`v-html` of anything but a `TrustedHtml` prop.

`v-html` writes raw HTML, which ferrovue allows only from a type you mark as trusted. See [`escaping`](crate::guide::escaping).

## FV1503

`TrustedHtml` prop without `trustedHtml` configured.

## FV1504

Attributes on `<ClientOnly>`.

## FV1505

`<ClientOnly>` slot other than the default and `#fallback`.

## FV1506

Slot props taken from `<ClientOnly>`'s `#fallback`.

## FV1507

`<Teleport>` in slot content whose emptiness is decided at run time.

## FV1508

`<Teleport>` target that is not a string.

## FV1509

Twin prop of a type with no Rust type.

## FV1510

Twin for a component ferrovue compiles.

## FV1511

`<ClientOnly>` with a `#fallback` in content rendered from virtual nodes.

Inside an element `<component :is>` chooses, inside a `<RouterLink>` or a twin's slot, and in the slot content they render, Vue's server renders from virtual nodes, and `<ClientOnly>` writes an empty fragment there instead of its fallback, which the client then renders and reports as a mismatch. Leave out the `#fallback`, or move the `<ClientOnly>` outside that content.

## FV1512

`v-html` on an element whose content the browser rebuilds.

The browser's HTML parser moves markup written in a `<table>`, `<thead>`, `<tbody>`, `<tfoot>`, `<tr>` or `<colgroup>` out of the table, drops the tags written in a `<select>` or `<optgroup>`, and ends SVG or MathML at an HTML tag, so the page holds other nodes than the server wrote and hydration mismatches. Put `v-html` on a `<td>`, `<th>` or `<caption>`, write the options in the template, or use an HTML element inside a `<foreignObject>` or an `<mtext>`. See [`escaping`](crate::guide::escaping).

## FV1513

`v-html` in a `<p>` of HTML that may hold blocks.

A block tag in the HTML (`<p>`, `<ul>`, `<div>`) ends the `<p>` it is written in where the browser reads it. Type the prop `InlineHtml` from `ferrovue/types`, which is `ferrovue::InlineHtml` on the server and keeps only inline tags, or put the HTML in a `<div>`. Slot content placed into a child's `<p>` is not seen at compile time. See [`escaping`](crate::guide::escaping).

# Provide and inject: FV16xx

See [`provide_inject`](crate::guide::provide_inject).

## FV1601

Injection key that is not a string literal or a symbol exported from a `.ts` file.

## FV1602

Injection key symbol without an `InjectionKey<T>` type.

## FV1603

`provide` or `inject` with unsupported arguments.

## FV1604

`inject` that is not bound to a name at the top of `<script setup>`.

## FV1605

`inject(key)!`, asserting a provider.

## FV1606

`inject` of a string key with neither a default nor a type argument.

## FV1607

Function default without the factory flag.

## FV1608

Values of different types provided under one key.

## FV1609

Provided value that may be `null` or `undefined`.

## FV1610

Provided value of a form the context does not hold.

## FV1611

Object provided or given as a default under a key without an interface type.

## FV1612

Provided or default object whose fields do not match its interface.

## FV1613

Ref and plain value under one key.

## FV1614

Key provided twice by one component.

## FV1615

Two keys that give the context one field name.

## FV1616

`provide` in a component that holds `<RouterView>`.

The page `<RouterView>` shows is rendered from Rust and handed in as a slot, so it cannot see what the component provides. Provide the value above the router (in Rust, through the `Provides` the page is rendered with) or below it.

## FV1617

String-keyed `inject` inside a Rust twin's slot.

Content in a twin's slot is a child of the library component the twin stands for, which may provide the same string key on the client. Use an `InjectionKey` symbol, which only the project provides.

## FV1618

Setup that assigns to an injected value.

## FV1619

Function and value provided under one key.

## FV1620

`provide` or `inject` called inside an expression.

# Page head: FV17xx

See [`head`](crate::guide::head).

## FV1701

Options given to `useHead`.

## FV1702

Head input that is not an object literal.

## FV1703

Head key ferrovue does not translate.

## FV1704

Spread, computed key, hole or method in a head input.

## FV1705

Function in a head input.

unhead calls a function given as a value on the server only when it takes no arguments, as a getter (`title: () => props.title`), which ferrovue evaluates. A `titleTemplate` function and an event handler (`onload`) run with arguments or on the client.

## FV1706

Head value of a type the head does not take.

## FV1707

`tagPosition`, `tagPriority` or `tagDuplicateStrategy` that is not a literal it accepts.

## FV1708

`useHeadSafe`.

## FV1709

`useSeoMeta` key or value ferrovue does not translate.

## FV1710

`class` or `style` in the head that may be `null`.

unhead's server renderer throws on a `class` or `style` of `null`. Write `?? undefined`, which leaves the attribute out.

## FV1711

`innerHTML` or `textContent` on a head tag that has no content.