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