@teleporthq/teleport-uidl-validator 0.18.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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -0
  3. package/__tests__/parser/componennt-with-referenced-styles.json +111 -0
  4. package/__tests__/parser/component-parsing.ts +116 -0
  5. package/__tests__/parser/component-referenced.ts +50 -0
  6. package/__tests__/parser/component-with-primitive-values.json +61 -0
  7. package/__tests__/parser/component-with-proper-values.json +97 -0
  8. package/__tests__/parser/component-with-reusalble-styles.json +117 -0
  9. package/__tests__/validator/component-element-with-empty-name.json +36 -0
  10. package/__tests__/validator/component-invalid-sample.json +184 -0
  11. package/__tests__/validator/component-uidl-with-event-modifier-undefined.json +45 -0
  12. package/__tests__/validator/component-uidl-with-null-undefined.json +24 -0
  13. package/__tests__/validator/index.ts +216 -0
  14. package/__tests__/validator/old-project-invalid-sample.json +317 -0
  15. package/__tests__/validator/project-invalid-sample-no-route.json +667 -0
  16. package/__tests__/validator/project-invalid-sample.json +671 -0
  17. package/__tests__/validator/project-sample.json +667 -0
  18. package/dist/cjs/decoders/component-decoder.d.ts +4 -0
  19. package/dist/cjs/decoders/component-decoder.js +30 -0
  20. package/dist/cjs/decoders/component-decoder.js.map +1 -0
  21. package/dist/cjs/decoders/custom-combinators.d.ts +8 -0
  22. package/dist/cjs/decoders/custom-combinators.js +59 -0
  23. package/dist/cjs/decoders/custom-combinators.js.map +1 -0
  24. package/dist/cjs/decoders/index.d.ts +2 -0
  25. package/dist/cjs/decoders/index.js +9 -0
  26. package/dist/cjs/decoders/index.js.map +1 -0
  27. package/dist/cjs/decoders/project-decoder.d.ts +5 -0
  28. package/dist/cjs/decoders/project-decoder.js +38 -0
  29. package/dist/cjs/decoders/project-decoder.js.map +1 -0
  30. package/dist/cjs/decoders/utils.d.ts +59 -0
  31. package/dist/cjs/decoders/utils.js +305 -0
  32. package/dist/cjs/decoders/utils.js.map +1 -0
  33. package/dist/cjs/index.d.ts +7 -0
  34. package/dist/cjs/index.js +38 -0
  35. package/dist/cjs/index.js.map +1 -0
  36. package/dist/cjs/parser/index.d.ts +10 -0
  37. package/dist/cjs/parser/index.js +156 -0
  38. package/dist/cjs/parser/index.js.map +1 -0
  39. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  40. package/dist/cjs/validator/index.d.ts +15 -0
  41. package/dist/cjs/validator/index.js +94 -0
  42. package/dist/cjs/validator/index.js.map +1 -0
  43. package/dist/cjs/validator/utils.d.ts +16 -0
  44. package/dist/cjs/validator/utils.js +373 -0
  45. package/dist/cjs/validator/utils.js.map +1 -0
  46. package/dist/esm/decoders/component-decoder.d.ts +4 -0
  47. package/dist/esm/decoders/component-decoder.js +27 -0
  48. package/dist/esm/decoders/component-decoder.js.map +1 -0
  49. package/dist/esm/decoders/custom-combinators.d.ts +8 -0
  50. package/dist/esm/decoders/custom-combinators.js +56 -0
  51. package/dist/esm/decoders/custom-combinators.js.map +1 -0
  52. package/dist/esm/decoders/index.d.ts +2 -0
  53. package/dist/esm/decoders/index.js +3 -0
  54. package/dist/esm/decoders/index.js.map +1 -0
  55. package/dist/esm/decoders/project-decoder.d.ts +5 -0
  56. package/dist/esm/decoders/project-decoder.js +35 -0
  57. package/dist/esm/decoders/project-decoder.js.map +1 -0
  58. package/dist/esm/decoders/utils.d.ts +59 -0
  59. package/dist/esm/decoders/utils.js +301 -0
  60. package/dist/esm/decoders/utils.js.map +1 -0
  61. package/dist/esm/index.d.ts +7 -0
  62. package/dist/esm/index.js +8 -0
  63. package/dist/esm/index.js.map +1 -0
  64. package/dist/esm/parser/index.d.ts +10 -0
  65. package/dist/esm/parser/index.js +151 -0
  66. package/dist/esm/parser/index.js.map +1 -0
  67. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  68. package/dist/esm/validator/index.d.ts +15 -0
  69. package/dist/esm/validator/index.js +73 -0
  70. package/dist/esm/validator/index.js.map +1 -0
  71. package/dist/esm/validator/utils.d.ts +16 -0
  72. package/dist/esm/validator/utils.js +359 -0
  73. package/dist/esm/validator/utils.js.map +1 -0
  74. package/package.json +32 -0
  75. package/src/decoders/component-decoder.ts +48 -0
  76. package/src/decoders/custom-combinators.ts +59 -0
  77. package/src/decoders/index.ts +2 -0
  78. package/src/decoders/project-decoder.ts +40 -0
  79. package/src/decoders/utils.ts +571 -0
  80. package/src/index.ts +9 -0
  81. package/src/parser/index.ts +227 -0
  82. package/src/validator/index.ts +105 -0
  83. package/src/validator/utils.ts +463 -0
  84. package/tsconfig.json +9 -0
@@ -0,0 +1,671 @@
1
+ {
2
+ "globals": {
3
+ "settings": {
4
+ "language": 2,
5
+ "key": "test",
6
+ "title": "UIDL v0.6 Project"
7
+ },
8
+ "assets": [],
9
+ "meta": []
10
+ },
11
+ "root": {
12
+ "name": "App",
13
+ "stateDefinitions": {
14
+ "route": {
15
+ "type": "string",
16
+ "defaultValue": "index",
17
+ "values": [
18
+ {
19
+ "value": "index",
20
+ "pageOptions": {
21
+ "navLink": "/",
22
+ "componentName": "Home"
23
+ }
24
+ },
25
+ {
26
+ "value": "abouts",
27
+ "pageOptions": {
28
+ "navLink": "/about",
29
+ "componentName": "About"
30
+ }
31
+ },
32
+ {
33
+ "value": "contact-us",
34
+ "pageOptions": {
35
+ "navLink": "/here-we-are",
36
+ "componentName": "Us"
37
+ }
38
+ }
39
+ ]
40
+ }
41
+ },
42
+ "node": {
43
+ "type": "element",
44
+ "content": {
45
+ "elementType": "Router",
46
+ "children": [
47
+ {
48
+ "type": "static",
49
+ "content": "Hello World!"
50
+ },
51
+ {
52
+ "type": "conditional",
53
+ "content": {
54
+ "node": {
55
+ "type": "element",
56
+ "content": {
57
+ "elementType": "container",
58
+ "style": {
59
+ "border": "1px solid green",
60
+ "padding": {
61
+ "type": "static",
62
+ "content": "10px"
63
+ }
64
+ },
65
+ "children": [
66
+ {
67
+ "type": "element",
68
+ "content": {
69
+ "elementType": "component",
70
+ "semanticType": "Navbar",
71
+ "dependency": {
72
+ "type": "local"
73
+ }
74
+ }
75
+ },
76
+ {
77
+ "type": "static",
78
+ "content": "Page 1"
79
+ }
80
+ ]
81
+ }
82
+ },
83
+ "value": "index",
84
+ "reference": {
85
+ "type": "dynamic",
86
+ "content": {
87
+ "referenceType": "state",
88
+ "id": "route"
89
+ }
90
+ }
91
+ }
92
+ },
93
+ {
94
+ "type": "conditional",
95
+ "content": {
96
+ "node": {
97
+ "type": "element",
98
+ "content": {
99
+ "elementType": "container",
100
+ "style": {
101
+ "border": {
102
+ "type": "static",
103
+ "content": "1px solid black"
104
+ },
105
+ "padding": {
106
+ "type": "static",
107
+ "content": "1px solid black"
108
+ }
109
+ },
110
+ "children": [
111
+ {
112
+ "type": "element",
113
+ "content": {
114
+ "elementType": "component",
115
+ "semanticType": "Navbars",
116
+ "dependency": {
117
+ "type": "local"
118
+ }
119
+ }
120
+ },
121
+ {
122
+ "type": "static",
123
+ "content": "Page 2"
124
+ }
125
+ ]
126
+ }
127
+ },
128
+ "value": "about",
129
+ "reference": {
130
+ "type": "dynamic",
131
+ "content": {
132
+ "referenceType": "state",
133
+ "id": "route"
134
+ }
135
+ }
136
+ }
137
+ },{
138
+ "type": "conditional",
139
+ "content": {
140
+ "node": {
141
+ "type": "element",
142
+ "content": {
143
+ "elementType": "container",
144
+ "style": {
145
+ "border": {
146
+ "type": "static",
147
+ "content": "1px solid black"
148
+ },
149
+ "padding": {
150
+ "type": "static",
151
+ "content": "1px solid black"
152
+ }
153
+ },
154
+ "children": [
155
+ {
156
+ "type": "element",
157
+ "content": {
158
+ "elementType": "component",
159
+ "semanticType": "Navbar",
160
+ "dependency": {
161
+ "type": "local"
162
+ }
163
+ }
164
+ },
165
+ {
166
+ "type": "static",
167
+ "content": "Page 3"
168
+ },
169
+ {
170
+ "type": "element",
171
+ "content": {
172
+ "elementType": "component",
173
+ "semanticType": "OneComponent",
174
+ "dependency": {
175
+ "type": "local"
176
+ }
177
+ }
178
+ }
179
+ ]
180
+ }
181
+ },
182
+ "value": "contact-us",
183
+ "reference": {
184
+ "type": "dynamic",
185
+ "content": {
186
+ "referenceType": "state",
187
+ "id": "route"
188
+ }
189
+ }
190
+ }
191
+ }
192
+ ]
193
+ }
194
+ }
195
+ },
196
+ "components": {
197
+ "Navbar": {
198
+ "name": "Navbars",
199
+ "node": {
200
+ "type": "element",
201
+ "content": {
202
+ "elementType": "group",
203
+ "children": [
204
+ {
205
+ "type": "element",
206
+ "content": {
207
+ "elementType": "navlink",
208
+ "attrs": {
209
+ "transitionTo": "/"
210
+ },
211
+ "children": [
212
+ {
213
+ "type": "static",
214
+ "content": "Home"
215
+ }
216
+ ]
217
+ }
218
+ },
219
+ {
220
+ "type": "element",
221
+ "content": {
222
+ "elementType": "navlink",
223
+ "attrs": {
224
+ "transitionTo": "/about"
225
+ },
226
+ "children": [
227
+ {
228
+ "type": "static",
229
+ "content": "About"
230
+ }
231
+ ]
232
+ }
233
+ },
234
+ {
235
+ "type": "element",
236
+ "content": {
237
+ "elementType": "navlink",
238
+ "attrs": {
239
+ "transitionTo": "/here-we-are"
240
+ },
241
+ "children": [
242
+ {
243
+ "type": "static",
244
+ "content": "Contact"
245
+ }
246
+ ]
247
+ }
248
+ }
249
+ ]
250
+ }
251
+ }
252
+ },
253
+ "OneComponent": {
254
+ "name": "New UIDL",
255
+ "propDefinitions": {
256
+ "title": {
257
+ "type": "string",
258
+ "defaultValue": "Hello"
259
+ },
260
+ "items": {
261
+ "type": "array",
262
+ "defaultValue": []
263
+ }
264
+ },
265
+ "stateDefinitions": {
266
+ "isVisible": {
267
+ "type": "boolean",
268
+ "defaultValue": true
269
+ }
270
+ },
271
+ "node": {
272
+ "type": "element",
273
+ "content": {
274
+ "elementType": "container",
275
+ "attrs": {
276
+ "data-static-attr": {
277
+ "type": "static",
278
+ "content": "test"
279
+ },
280
+ "data-dynamic-attr": {
281
+ "type": "dynamic",
282
+ "content": {
283
+ "referenceType": "prop",
284
+ "id": "title"
285
+ }
286
+ }
287
+ },
288
+ "children": [
289
+ {
290
+ "type": "element",
291
+ "content": {
292
+ "elementType": "text",
293
+ "children": [
294
+ {
295
+ "type": "static",
296
+ "content": "Hello World!"
297
+ },
298
+ {
299
+ "type": "dynamic",
300
+ "content": {
301
+ "referenceType": "prop",
302
+ "id": "title"
303
+ }
304
+ }
305
+ ]
306
+ }
307
+ },
308
+ {
309
+ "type": "repeat",
310
+ "content": {
311
+ "node": {
312
+ "type": "element",
313
+ "content": {
314
+ "elementType": "text",
315
+ "children": [
316
+ {
317
+ "type": "dynamic",
318
+ "content": {
319
+ "referenceType": "local",
320
+ "id": "item"
321
+ }
322
+ },
323
+ {
324
+ "type": "element",
325
+ "content": {
326
+ "elementType": "list",
327
+ "attrs": {
328
+ "items": {
329
+ "type": "static",
330
+ "content": ["angular", "react", "vue"]
331
+ }
332
+ }
333
+ }
334
+ }
335
+ ]
336
+ }
337
+ },
338
+ "dataSource": {
339
+ "type": "dynamic",
340
+ "content": {
341
+ "referenceType": "prop",
342
+ "id": "items"
343
+ }
344
+ },
345
+ "meta": {
346
+ "useIndex": true,
347
+ "iteratorName": "item"
348
+ }
349
+ }
350
+ },
351
+ {
352
+ "type": "conditional",
353
+ "content": {
354
+ "reference": {
355
+ "type": "dynamic",
356
+ "content": {
357
+ "referenceType": "prop",
358
+ "id": "title"
359
+ }
360
+ },
361
+ "value": "matching",
362
+ "node": {
363
+ "type": "element",
364
+ "content": {
365
+ "elementType": "text",
366
+ "children": [{
367
+ "type": "static",
368
+ "content": "Now you see me!"
369
+ }]
370
+ }
371
+ }
372
+ }
373
+ },
374
+ {
375
+ "type": "element",
376
+ "content": {
377
+ "elementType": "video",
378
+ "attrs": {
379
+ "autoPlay": {
380
+ "type": "static",
381
+ "content": true
382
+ }
383
+ },
384
+ "children": [{
385
+ "type": "element",
386
+ "content": {
387
+ "elementType": "source",
388
+ "attrs": {
389
+ "type": {
390
+ "type": "static",
391
+ "content": "video/mp4"
392
+ },
393
+ "url": {
394
+ "type": "static",
395
+ "content": "https://www.quirksmode.org/html5/videos/big_buck_bunny.mp4"
396
+ }
397
+ }
398
+ }
399
+ }]
400
+ }
401
+ },
402
+ {
403
+ "type": "slot",
404
+ "content": {}
405
+ },
406
+ {
407
+ "type": "element",
408
+ "content": {
409
+ "elementType": "navlink",
410
+ "attrs": {
411
+ "transitionTo": {
412
+ "type": "static",
413
+ "content": "about"
414
+ }
415
+ },
416
+ "children": [
417
+ {
418
+ "type": "static",
419
+ "content": "About Page"
420
+ }
421
+ ]
422
+ }
423
+ }
424
+ ]
425
+ }
426
+ }
427
+ },
428
+ "ExpandableArea": {
429
+ "name": "ExpandableArea",
430
+ "propDefinitions": {
431
+ "title": {
432
+ "type": "string",
433
+ "defaultValue": "Hello"
434
+ },
435
+ "text": {
436
+ "type": "string",
437
+ "defaultValue": "Is it me you're looking for?"
438
+ }
439
+ },
440
+ "stateDefinitions": {
441
+ "isExpanded": {
442
+ "type": "boolean",
443
+ "defaultValue": false
444
+ }
445
+ },
446
+ "node": {
447
+ "type": "element",
448
+ "content": {
449
+ "elementType": "container",
450
+ "style": {
451
+ "border": {
452
+ "type": "static",
453
+ "content": "1px solid green"
454
+ },
455
+ "margin": {
456
+ "type": "static",
457
+ "content": "10px"
458
+ }
459
+ },
460
+ "children": [
461
+ {
462
+ "type": "element",
463
+ "content": {
464
+ "elementType": "text",
465
+ "children": [{
466
+ "type": "dynamic",
467
+ "content": {
468
+ "referenceType": "prop",
469
+ "id": "title"
470
+ }
471
+ }]
472
+ }
473
+ },
474
+ {
475
+ "type": "element",
476
+ "content": {
477
+ "elementType": "button",
478
+ "children": [{
479
+ "type": "conditional",
480
+ "content": {
481
+ "node": {
482
+ "type": "static",
483
+ "content": "Hide me"
484
+ },
485
+ "value": true,
486
+ "reference": {
487
+ "type": "dynamic",
488
+ "content": {
489
+ "referenceType": "state",
490
+ "id": "isExpanded"
491
+ }
492
+ }
493
+ }
494
+ },{
495
+ "type": "conditional",
496
+ "content": {
497
+ "node": {
498
+ "type": "static",
499
+ "content": "Show me"
500
+ },
501
+ "value": false,
502
+ "reference": {
503
+ "type": "dynamic",
504
+ "content": {
505
+ "referenceType": "state",
506
+ "id": "isExpanded"
507
+ }
508
+ }
509
+ }
510
+ }],
511
+ "events": {
512
+ "click": [
513
+ {
514
+ "type": "stateChange",
515
+ "modifies": "isExpanded",
516
+ "newState": "$toggle"
517
+ }
518
+ ]
519
+ }
520
+ }
521
+ },
522
+ {
523
+ "type": "conditional",
524
+ "content": {
525
+ "node": {
526
+ "type": "element",
527
+ "content": {
528
+ "elementType": "text",
529
+ "children": [{
530
+ "type": "dynamic",
531
+ "content": {
532
+ "referenceType": "prop",
533
+ "id": "text"
534
+ }
535
+ }]
536
+ }
537
+ },
538
+ "value": true,
539
+ "reference": {
540
+ "type": "dynamic",
541
+ "content": {
542
+ "referenceType": "state",
543
+ "id": "isExpanded"
544
+ }
545
+ }
546
+ }
547
+ }
548
+ ]
549
+ }
550
+ }
551
+ },
552
+ "Modal": {
553
+ "name": "Modal",
554
+ "stateDefinitions": {
555
+ "isOpen": {
556
+ "type": "boolean",
557
+ "defaultValue": false
558
+ }
559
+ },
560
+ "node": {
561
+ "type": "element",
562
+ "content": {
563
+ "elementType": "group",
564
+ "children": [
565
+ {
566
+ "type": "element",
567
+ "content": {
568
+ "elementType": "button",
569
+ "name": "openmodal",
570
+ "children": [{
571
+ "type": "static",
572
+ "content": "Show Popup"
573
+ }],
574
+ "events": {
575
+ "click": [{
576
+ "type": "stateChange",
577
+ "modifies": "isOpen",
578
+ "newState": true
579
+ }]
580
+ }
581
+ }
582
+ },
583
+ {
584
+ "type": "conditional",
585
+ "content": {
586
+ "node": {
587
+ "type": "element",
588
+ "content": {
589
+ "elementType": "component",
590
+ "semanticType": "ModalWindow",
591
+ "name": "window",
592
+ "dependency": {
593
+ "type": "local"
594
+ },
595
+ "events": {
596
+ "onClose": [{
597
+ "type": "stateChange",
598
+ "modifies": "isOpen",
599
+ "newState": false
600
+ }]
601
+ }
602
+ }
603
+ },
604
+ "value": true,
605
+ "reference": {
606
+ "type": "dynamic",
607
+ "content": {
608
+ "referenceType": "state",
609
+ "id": "isOpen"
610
+ }
611
+ }
612
+ }
613
+ }
614
+ ]
615
+ }
616
+ }
617
+ },
618
+ "ModalWindow": {
619
+ "name": "ModalWindow",
620
+ "propDefinitions": {
621
+ "message": {
622
+ "type": "string",
623
+ "defaultValue": "Hello"
624
+ },
625
+ "onClose": {
626
+ "type": "func",
627
+ "defaultValue": "() => {}"
628
+ }
629
+ },
630
+ "stateDefinitions": {
631
+ "fakeState": {
632
+ "type": "boolean",
633
+ "defaultValue": false
634
+ }
635
+ },
636
+ "node": {
637
+ "type": "element",
638
+ "content": {
639
+ "elementType": "container",
640
+ "children": [{
641
+ "type": "dynamic",
642
+ "content": {
643
+ "referenceType": "prop",
644
+ "id": "message"
645
+ }
646
+ },{
647
+ "type": "element",
648
+ "content": {
649
+ "elementType": "button",
650
+ "name": "close",
651
+ "children": [{
652
+ "type": "static",
653
+ "content": "Close me"
654
+ }],
655
+ "events": {
656
+ "click": [{
657
+ "type": "propCall",
658
+ "calls": "onClose"
659
+ },{
660
+ "type": "stateChange",
661
+ "modifies": "fakeState",
662
+ "newState": false
663
+ }]
664
+ }
665
+ }
666
+ }]
667
+ }
668
+ }
669
+ }
670
+ }
671
+ }