@upstart.gg/sdk 0.0.136 → 0.0.137
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.
- package/dist/shared/ai/schemas.d.ts.map +1 -1
- package/dist/shared/ai/schemas.js +24 -29
- package/dist/shared/ai/schemas.js.map +1 -1
- package/dist/shared/ai/types.d.ts +13 -61
- package/dist/shared/ai/types.d.ts.map +1 -1
- package/dist/shared/ajv.js +33 -32
- package/dist/shared/ajv.js.map +1 -1
- package/dist/shared/attributes.d.ts +83 -85
- package/dist/shared/attributes.d.ts.map +1 -1
- package/dist/shared/attributes.js +20 -23
- package/dist/shared/brick-manifest.d.ts +8 -5
- package/dist/shared/brick-manifest.d.ts.map +1 -1
- package/dist/shared/brick-manifest.js +3 -18
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/accordion.manifest.js +13 -20
- package/dist/shared/bricks/manifests/all-manifests.js +44 -43
- package/dist/shared/bricks/manifests/all-props.d.ts +1501 -0
- package/dist/shared/bricks/manifests/all-props.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/all-props.js +243 -0
- package/dist/shared/bricks/manifests/all-props.js.map +1 -0
- package/dist/shared/bricks/manifests/box.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/box.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/box.manifest.js +16 -20
- package/dist/shared/bricks/manifests/button.manifest.d.ts +3 -6
- package/dist/shared/bricks/manifests/button.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/button.manifest.js +13 -20
- package/dist/shared/bricks/manifests/card.manifest.d.ts +3 -3
- package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/card.manifest.js +18 -20
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.js +15 -20
- package/dist/shared/bricks/manifests/footer.manifest.d.ts +3 -3
- package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/footer.manifest.js +13 -20
- package/dist/shared/bricks/manifests/form.manifest.d.ts +3 -3
- package/dist/shared/bricks/manifests/form.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/form.manifest.js +13 -20
- package/dist/shared/bricks/manifests/hero.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.js +13 -20
- package/dist/shared/bricks/manifests/html.manifest.d.ts +1 -1
- package/dist/shared/bricks/manifests/html.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/html.manifest.js +8 -20
- package/dist/shared/bricks/manifests/icon.manifest.d.ts +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.js +13 -20
- package/dist/shared/bricks/manifests/image.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/image.manifest.js +16 -20
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.js +15 -20
- package/dist/shared/bricks/manifests/map.manifest.d.ts +1 -1
- package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/map.manifest.js +11 -20
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts +5 -5
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/navbar.manifest.js +15 -20
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +1 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.js +13 -20
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.js +14 -20
- package/dist/shared/bricks/manifests/spacer.manifest.d.ts +1 -1
- package/dist/shared/bricks/manifests/spacer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/spacer.manifest.js +8 -20
- package/dist/shared/bricks/manifests/table.manifest.d.ts +4 -4
- package/dist/shared/bricks/manifests/table.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/table.manifest.js +15 -20
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts +4 -4
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/tabs.manifest.js +15 -20
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +2 -2
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/testimonials.manifest.js +18 -20
- package/dist/shared/bricks/manifests/text.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/text.manifest.js +13 -20
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts +7 -7
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/timeline.manifest.js +15 -20
- package/dist/shared/bricks/manifests/video.manifest.d.ts +1 -1
- package/dist/shared/bricks/manifests/video.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/video.manifest.js +11 -20
- package/dist/shared/bricks/props/align.d.ts +0 -3
- package/dist/shared/bricks/props/align.d.ts.map +1 -1
- package/dist/shared/bricks/props/align.js +4 -11
- package/dist/shared/bricks/props/background.d.ts +2 -8
- package/dist/shared/bricks/props/background.d.ts.map +1 -1
- package/dist/shared/bricks/props/background.js +4 -9
- package/dist/shared/bricks/props/border.d.ts +0 -7
- package/dist/shared/bricks/props/border.d.ts.map +1 -1
- package/dist/shared/bricks/props/border.js +5 -10
- package/dist/shared/bricks/props/color-preset.d.ts +316 -6
- package/dist/shared/bricks/props/color-preset.d.ts.map +1 -1
- package/dist/shared/bricks/props/color-preset.js +2 -5
- package/dist/shared/bricks/props/color.d.ts +3 -5
- package/dist/shared/bricks/props/color.d.ts.map +1 -1
- package/dist/shared/bricks/props/color.js +3 -8
- package/dist/shared/bricks/props/common.d.ts.map +1 -1
- package/dist/shared/bricks/props/common.js +4 -5
- package/dist/shared/bricks/props/css-length.d.ts +0 -1
- package/dist/shared/bricks/props/css-length.d.ts.map +1 -1
- package/dist/shared/bricks/props/css-length.js +1 -4
- package/dist/shared/bricks/props/datasource.d.ts +3 -3
- package/dist/shared/bricks/props/datasource.d.ts.map +1 -1
- package/dist/shared/bricks/props/datasource.js +74 -76
- package/dist/shared/bricks/props/datasource.js.map +1 -1
- package/dist/shared/bricks/props/date.js +21 -4
- package/dist/shared/bricks/props/date.js.map +1 -1
- package/dist/shared/bricks/props/direction.d.ts +1 -2
- package/dist/shared/bricks/props/direction.d.ts.map +1 -1
- package/dist/shared/bricks/props/direction.js +4 -7
- package/dist/shared/bricks/props/dynamic.d.ts +5 -67
- package/dist/shared/bricks/props/dynamic.d.ts.map +1 -1
- package/dist/shared/bricks/props/dynamic.js +6 -24
- package/dist/shared/bricks/props/effects.d.ts +1 -3
- package/dist/shared/bricks/props/effects.d.ts.map +1 -1
- package/dist/shared/bricks/props/effects.js +4 -9
- package/dist/shared/bricks/props/geolocation.d.ts.map +1 -1
- package/dist/shared/bricks/props/geolocation.js +3 -6
- package/dist/shared/bricks/props/geolocation.js.map +1 -1
- package/dist/shared/bricks/props/helpers.js +5 -6
- package/dist/shared/bricks/props/image.d.ts +2 -8
- package/dist/shared/bricks/props/image.d.ts.map +1 -1
- package/dist/shared/bricks/props/image.js +4 -7
- package/dist/shared/bricks/props/string.d.ts +2 -5
- package/dist/shared/bricks/props/string.d.ts.map +1 -1
- package/dist/shared/bricks/props/string.js +3 -10
- package/dist/shared/bricks/props/tags.d.ts +0 -1
- package/dist/shared/bricks/props/tags.d.ts.map +1 -1
- package/dist/shared/bricks/props/tags.js +3 -6
- package/dist/shared/bricks/props/text.d.ts +0 -3
- package/dist/shared/bricks/props/text.d.ts.map +1 -1
- package/dist/shared/bricks/props/text.js +4 -11
- package/dist/shared/bricks/props/types.d.ts +2 -2
- package/dist/shared/bricks/props/types.d.ts.map +1 -1
- package/dist/shared/bricks.d.ts +64 -154
- package/dist/shared/bricks.d.ts.map +1 -1
- package/dist/shared/bricks.js +47 -52
- package/dist/shared/chunk-2O5HVPID.js +41 -0
- package/dist/shared/chunk-2O5HVPID.js.map +1 -0
- package/dist/shared/{chunk-F22LDHEO.js → chunk-2U5U3CCJ.js} +3 -18
- package/dist/shared/chunk-2U5U3CCJ.js.map +1 -0
- package/dist/shared/{chunk-LTIJI7Y3.js → chunk-4KY7OZWD.js} +35 -35
- package/dist/shared/chunk-4KY7OZWD.js.map +1 -0
- package/dist/shared/{chunk-TNMNMYOB.js → chunk-5RCC2STG.js} +2 -13
- package/dist/shared/chunk-5RCC2STG.js.map +1 -0
- package/dist/shared/{chunk-KIDICX3Y.js → chunk-6AE7UD73.js} +27 -33
- package/dist/shared/chunk-6AE7UD73.js.map +1 -0
- package/dist/shared/{chunk-CRS7QCPZ.js → chunk-7U5WPHXB.js} +65 -27
- package/dist/shared/chunk-7U5WPHXB.js.map +1 -0
- package/dist/shared/{chunk-Q4NPPLEU.js → chunk-BHARJBEK.js} +2 -9
- package/dist/shared/chunk-BHARJBEK.js.map +1 -0
- package/dist/shared/{chunk-H5JM2M2T.js → chunk-BZTWZC77.js} +46 -31
- package/dist/shared/chunk-BZTWZC77.js.map +1 -0
- package/dist/shared/{chunk-LLNPH3XR.js → chunk-DCM4732T.js} +6 -8
- package/dist/shared/chunk-DCM4732T.js.map +1 -0
- package/dist/shared/{chunk-W6MRYRGJ.js → chunk-DRQKKPTX.js} +6 -20
- package/dist/shared/chunk-DRQKKPTX.js.map +1 -0
- package/dist/shared/{chunk-CSF2WQX2.js → chunk-EID5HPF3.js} +15 -12
- package/dist/shared/chunk-EID5HPF3.js.map +1 -0
- package/dist/shared/chunk-EMF5TCPX.js +389 -0
- package/dist/shared/chunk-EMF5TCPX.js.map +1 -0
- package/dist/shared/chunk-FD7YYFRI.js +225 -0
- package/dist/shared/chunk-FD7YYFRI.js.map +1 -0
- package/dist/shared/{chunk-36PLZKMW.js → chunk-FHA4DFIM.js} +26 -27
- package/dist/shared/chunk-FHA4DFIM.js.map +1 -0
- package/dist/shared/{chunk-L6C7HUSA.js → chunk-FUUSAMN3.js} +21 -24
- package/dist/shared/chunk-FUUSAMN3.js.map +1 -0
- package/dist/shared/chunk-GDYCCB3B.js +22 -0
- package/dist/shared/chunk-GDYCCB3B.js.map +1 -0
- package/dist/shared/chunk-GLV6QIIM.js +41 -0
- package/dist/shared/chunk-GLV6QIIM.js.map +1 -0
- package/dist/shared/chunk-H6TMBELF.js +374 -0
- package/dist/shared/chunk-H6TMBELF.js.map +1 -0
- package/dist/shared/{chunk-YWOTQWIQ.js → chunk-HUWMIXNN.js} +26 -28
- package/dist/shared/chunk-HUWMIXNN.js.map +1 -0
- package/dist/shared/chunk-HY7JOP3J.js +150 -0
- package/dist/shared/chunk-HY7JOP3J.js.map +1 -0
- package/dist/shared/{chunk-TFGGYU6Y.js → chunk-IEMCCHM4.js} +7 -12
- package/dist/shared/chunk-IEMCCHM4.js.map +1 -0
- package/dist/shared/{chunk-EVLRH6VG.js → chunk-J45LSQT6.js} +2 -2
- package/dist/shared/chunk-J45LSQT6.js.map +1 -0
- package/dist/shared/{chunk-DFAFDBYZ.js → chunk-JF52BBFD.js} +27 -28
- package/dist/shared/chunk-JF52BBFD.js.map +1 -0
- package/dist/shared/{chunk-ZR6R6Z6O.js → chunk-JLDAS3VE.js} +34 -32
- package/dist/shared/chunk-JLDAS3VE.js.map +1 -0
- package/dist/shared/{chunk-SE6O65HC.js → chunk-JSDKK5QN.js} +10 -23
- package/dist/shared/chunk-JSDKK5QN.js.map +1 -0
- package/dist/shared/{chunk-KILJYJFE.js → chunk-JW7MQAU4.js} +19 -19
- package/dist/shared/chunk-JW7MQAU4.js.map +1 -0
- package/dist/shared/{chunk-RV7AYVFV.js → chunk-KKWT3OXF.js} +4 -19
- package/dist/shared/chunk-KKWT3OXF.js.map +1 -0
- package/dist/shared/{chunk-N3BEBLWF.js → chunk-KQH6V22E.js} +34 -34
- package/dist/shared/{chunk-GFAQWQER.js → chunk-LGDDJJHK.js} +33 -35
- package/dist/shared/chunk-LGDDJJHK.js.map +1 -0
- package/dist/shared/{chunk-FOGAVJC2.js → chunk-LGGPCCCY.js} +3 -3
- package/dist/shared/{chunk-4MNWMEMM.js → chunk-LPAQ47C6.js} +23 -23
- package/dist/shared/chunk-LPAQ47C6.js.map +1 -0
- package/dist/shared/chunk-MO6CRLQA.js +73 -0
- package/dist/shared/chunk-MO6CRLQA.js.map +1 -0
- package/dist/shared/{chunk-GQTZPN5D.js → chunk-MYOLWTB2.js} +29 -32
- package/dist/shared/chunk-MYOLWTB2.js.map +1 -0
- package/dist/shared/{chunk-KEM5N6GJ.js → chunk-O24RDXZS.js} +34 -34
- package/dist/shared/chunk-O24RDXZS.js.map +1 -0
- package/dist/shared/{chunk-BPBKHEQ5.js → chunk-OJ6KL7FU.js} +1 -8
- package/dist/shared/chunk-OJ6KL7FU.js.map +1 -0
- package/dist/shared/{chunk-LCJ2VFPM.js → chunk-PF75LW33.js} +24 -27
- package/dist/shared/chunk-PF75LW33.js.map +1 -0
- package/dist/shared/{chunk-U5ZECCJM.js → chunk-QEJGPYTB.js} +32 -34
- package/dist/shared/chunk-QEJGPYTB.js.map +1 -0
- package/dist/shared/{chunk-2VDR4ZYY.js → chunk-SK2O7GFC.js} +17 -18
- package/dist/shared/chunk-SK2O7GFC.js.map +1 -0
- package/dist/shared/{chunk-N3ZTQD5I.js → chunk-SQXZNGQF.js} +8 -23
- package/dist/shared/chunk-SQXZNGQF.js.map +1 -0
- package/dist/shared/{chunk-NTLAKMMQ.js → chunk-SRYBJ6NQ.js} +6 -17
- package/dist/shared/chunk-SRYBJ6NQ.js.map +1 -0
- package/dist/shared/{chunk-UXTASZ23.js → chunk-T6C3NG2L.js} +66 -63
- package/dist/shared/chunk-T6C3NG2L.js.map +1 -0
- package/dist/shared/{chunk-ZRRAK5NS.js → chunk-TBT2PTGB.js} +41 -33
- package/dist/shared/chunk-TBT2PTGB.js.map +1 -0
- package/dist/shared/{chunk-2IHKVMKW.js → chunk-U4KZUX37.js} +18 -19
- package/dist/shared/chunk-U4KZUX37.js.map +1 -0
- package/dist/shared/{chunk-FQDR2BBZ.js → chunk-VSLRTXLF.js} +11 -4
- package/dist/shared/chunk-VSLRTXLF.js.map +1 -0
- package/dist/shared/{chunk-BHC2A43S.js → chunk-VTCHJT4O.js} +3 -3
- package/dist/shared/{chunk-BHC2A43S.js.map → chunk-VTCHJT4O.js.map} +1 -1
- package/dist/shared/{chunk-GIGFNQBO.js → chunk-W2RFDII5.js} +3 -3
- package/dist/shared/{chunk-Y74LZNND.js → chunk-WPZV3LYL.js} +4 -10
- package/dist/shared/chunk-WPZV3LYL.js.map +1 -0
- package/dist/shared/chunk-XFZQGRRL.js +101 -0
- package/dist/shared/chunk-XFZQGRRL.js.map +1 -0
- package/dist/shared/{chunk-42OUNI7C.js → chunk-XK2CERPB.js} +27 -29
- package/dist/shared/chunk-XK2CERPB.js.map +1 -0
- package/dist/shared/chunk-XNRSL6FL.js +78 -0
- package/dist/shared/chunk-XNRSL6FL.js.map +1 -0
- package/dist/shared/{chunk-2RK3CPYJ.js → chunk-XXPSM6UA.js} +9 -12
- package/dist/shared/chunk-XXPSM6UA.js.map +1 -0
- package/dist/shared/{chunk-ZLYIRH2B.js → chunk-ZRBTAC3G.js} +3 -18
- package/dist/shared/chunk-ZRBTAC3G.js.map +1 -0
- package/dist/shared/{chunk-F247VKAE.js → chunk-ZVJNRKT4.js} +18 -20
- package/dist/shared/chunk-ZVJNRKT4.js.map +1 -0
- package/dist/shared/context.d.ts +402 -23
- package/dist/shared/context.d.ts.map +1 -1
- package/dist/shared/context.js +93 -0
- package/dist/shared/context.js.map +1 -1
- package/dist/shared/datarecords/external/airtable/types.d.ts +1 -1
- package/dist/shared/datarecords/external/airtable/types.d.ts.map +1 -1
- package/dist/shared/datarecords/external/airtable/types.js +2 -1
- package/dist/shared/datarecords/types.d.ts +3 -3
- package/dist/shared/datarecords/types.d.ts.map +1 -1
- package/dist/shared/datarecords/types.js +3 -2
- package/dist/shared/datasources/external/instagram/feed/schema.d.ts +1 -1
- package/dist/shared/datasources/external/instagram/feed/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/instagram/feed/schema.js +4 -1
- package/dist/shared/datasources/external/instagram/feed/schema.js.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/schema.d.ts +6 -6
- package/dist/shared/datasources/external/mastodon/status/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/mastodon/status/schema.js +6 -19
- package/dist/shared/datasources/external/mastodon/status/schema.js.map +1 -1
- package/dist/shared/datasources/external/meta/oauth/config.d.ts +2 -2
- package/dist/shared/datasources/external/meta/oauth/config.d.ts.map +1 -1
- package/dist/shared/datasources/external/meta/oauth/config.js +4 -1
- package/dist/shared/datasources/external/meta/oauth/config.js.map +1 -1
- package/dist/shared/datasources/external/threads/media/schema.d.ts +1 -1
- package/dist/shared/datasources/external/threads/media/schema.d.ts.map +1 -1
- package/dist/shared/datasources/external/threads/media/schema.js +4 -8
- package/dist/shared/datasources/external/threads/media/schema.js.map +1 -1
- package/dist/shared/datasources/internal/blog/schema.d.ts +1 -1
- package/dist/shared/datasources/internal/blog/schema.d.ts.map +1 -1
- package/dist/shared/datasources/internal/blog/schema.js +4 -1
- package/dist/shared/datasources/internal/blog/schema.js.map +1 -1
- package/dist/shared/datasources/types.d.ts +25 -25
- package/dist/shared/datasources/types.d.ts.map +1 -1
- package/dist/shared/datasources/types.js +3 -16
- package/dist/shared/images.d.ts +1 -1
- package/dist/shared/images.d.ts.map +1 -1
- package/dist/shared/images.js +4 -38
- package/dist/shared/images.js.map +1 -1
- package/dist/shared/page.d.ts +139 -22
- package/dist/shared/page.d.ts.map +1 -1
- package/dist/shared/page.js +51 -49
- package/dist/shared/responsive.js +1 -1
- package/dist/shared/site.d.ts +74 -191
- package/dist/shared/site.d.ts.map +1 -1
- package/dist/shared/site.js +55 -114
- package/dist/shared/site.js.map +1 -1
- package/dist/shared/sitemap.d.ts +4 -326
- package/dist/shared/sitemap.d.ts.map +1 -1
- package/dist/shared/sitemap.js +50 -58
- package/dist/shared/theme.d.ts +0 -37
- package/dist/shared/theme.d.ts.map +1 -1
- package/dist/shared/theme.js +4 -21
- package/dist/shared/utils/llm.d.ts +1 -10
- package/dist/shared/utils/llm.d.ts.map +1 -1
- package/dist/shared/utils/llm.js +1 -18
- package/dist/shared/utils/schema.d.ts +3 -2
- package/dist/shared/utils/schema.d.ts.map +1 -1
- package/dist/shared/utils/schema.js +2 -17
- package/dist/shared/utils/string-enum.d.ts +9 -3
- package/dist/shared/utils/string-enum.d.ts.map +1 -1
- package/dist/shared/utils/string-enum.js +1 -1
- package/package.json +21 -5
- package/src/shared/ai/schemas.ts +24 -29
- package/src/shared/ai/types.ts +22 -88
- package/src/shared/attributes.ts +53 -51
- package/src/shared/brick-manifest.ts +5 -6
- package/src/shared/bricks/manifests/accordion.manifest.ts +11 -11
- package/src/shared/bricks/manifests/all-props.ts +165 -0
- package/src/shared/bricks/manifests/box.manifest.ts +19 -21
- package/src/shared/bricks/manifests/button.manifest.ts +54 -16
- package/src/shared/bricks/manifests/card.manifest.ts +32 -18
- package/src/shared/bricks/manifests/carousel.manifest.ts +11 -13
- package/src/shared/bricks/manifests/footer.manifest.ts +16 -15
- package/src/shared/bricks/manifests/form.manifest.ts +14 -15
- package/src/shared/bricks/manifests/hero.manifest.ts +18 -20
- package/src/shared/bricks/manifests/icon.manifest.ts +9 -10
- package/src/shared/bricks/manifests/image.manifest.ts +22 -19
- package/src/shared/bricks/manifests/images-gallery.manifest.ts +13 -15
- package/src/shared/bricks/manifests/map.manifest.ts +10 -10
- package/src/shared/bricks/manifests/navbar.manifest.ts +20 -21
- package/src/shared/bricks/manifests/sidebar.manifest.ts +9 -9
- package/src/shared/bricks/manifests/social-links.manifest.ts +17 -19
- package/src/shared/bricks/manifests/table.manifest.ts +15 -15
- package/src/shared/bricks/manifests/tabs.manifest.ts +14 -16
- package/src/shared/bricks/manifests/testimonials.manifest.ts +21 -20
- package/src/shared/bricks/manifests/text.manifest.ts +16 -19
- package/src/shared/bricks/manifests/timeline.manifest.ts +29 -24
- package/src/shared/bricks/manifests/video.manifest.ts +9 -10
- package/src/shared/bricks/props/align.ts +0 -13
- package/src/shared/bricks/props/background.ts +1 -14
- package/src/shared/bricks/props/border.ts +2 -13
- package/src/shared/bricks/props/color-preset.ts +9 -10
- package/src/shared/bricks/props/color.ts +7 -18
- package/src/shared/bricks/props/common.ts +6 -7
- package/src/shared/bricks/props/css-length.ts +0 -5
- package/src/shared/bricks/props/datasource.ts +72 -74
- package/src/shared/bricks/props/direction.ts +1 -5
- package/src/shared/bricks/props/dynamic.ts +0 -11
- package/src/shared/bricks/props/effects.ts +0 -9
- package/src/shared/bricks/props/geolocation.ts +3 -3
- package/src/shared/bricks/props/helpers.ts +1 -1
- package/src/shared/bricks/props/image.ts +4 -16
- package/src/shared/bricks/props/string.ts +5 -18
- package/src/shared/bricks/props/tags.ts +0 -5
- package/src/shared/bricks/props/tests/background.test.ts +1 -15
- package/src/shared/bricks/props/tests/image.test.ts +3 -9
- package/src/shared/bricks/props/tests/string.test.ts +2 -26
- package/src/shared/bricks/props/text.ts +0 -12
- package/src/shared/bricks/props/types.ts +4 -3
- package/src/shared/bricks.ts +156 -1020
- package/src/shared/context.ts +24 -24
- package/src/shared/datarecords/external/airtable/types.ts +12 -11
- package/src/shared/datarecords/types.ts +2 -34
- package/src/shared/datasources/external/instagram/feed/schema.ts +2 -1
- package/src/shared/datasources/external/mastodon/status/schema.ts +4 -19
- package/src/shared/datasources/external/meta/oauth/config.ts +2 -1
- package/src/shared/datasources/external/threads/media/schema.ts +2 -8
- package/src/shared/datasources/internal/blog/schema.ts +2 -1
- package/src/shared/datasources/types.ts +64 -79
- package/src/shared/images.ts +12 -18
- package/src/shared/page.ts +9 -1
- package/src/shared/sitemap.ts +3 -70
- package/src/shared/tests/attributes.test.ts +2 -0
- package/src/shared/theme.ts +81 -96
- package/src/shared/utils/llm.ts +5 -191
- package/src/shared/utils/schema.ts +71 -244
- package/src/shared/utils/string-enum.ts +25 -4
- package/src/shared/utils/tests/schema.test.ts +70 -313
- package/dist/shared/chunk-2IHKVMKW.js.map +0 -1
- package/dist/shared/chunk-2RK3CPYJ.js.map +0 -1
- package/dist/shared/chunk-2VDR4ZYY.js.map +0 -1
- package/dist/shared/chunk-36PLZKMW.js.map +0 -1
- package/dist/shared/chunk-42OUNI7C.js.map +0 -1
- package/dist/shared/chunk-4MNWMEMM.js.map +0 -1
- package/dist/shared/chunk-A2QPY54H.js +0 -13
- package/dist/shared/chunk-A2QPY54H.js.map +0 -1
- package/dist/shared/chunk-BPBKHEQ5.js.map +0 -1
- package/dist/shared/chunk-CRS7QCPZ.js.map +0 -1
- package/dist/shared/chunk-CSF2WQX2.js.map +0 -1
- package/dist/shared/chunk-DFAFDBYZ.js.map +0 -1
- package/dist/shared/chunk-DV3G7X34.js +0 -244
- package/dist/shared/chunk-DV3G7X34.js.map +0 -1
- package/dist/shared/chunk-EVLRH6VG.js.map +0 -1
- package/dist/shared/chunk-F22LDHEO.js.map +0 -1
- package/dist/shared/chunk-F247VKAE.js.map +0 -1
- package/dist/shared/chunk-FQDR2BBZ.js.map +0 -1
- package/dist/shared/chunk-GFAQWQER.js.map +0 -1
- package/dist/shared/chunk-GQTZPN5D.js.map +0 -1
- package/dist/shared/chunk-H5JM2M2T.js.map +0 -1
- package/dist/shared/chunk-HTUSL2U7.js +0 -260
- package/dist/shared/chunk-HTUSL2U7.js.map +0 -1
- package/dist/shared/chunk-IQIISR22.js +0 -794
- package/dist/shared/chunk-IQIISR22.js.map +0 -1
- package/dist/shared/chunk-JK2FWFJU.js +0 -15
- package/dist/shared/chunk-JK2FWFJU.js.map +0 -1
- package/dist/shared/chunk-KEM5N6GJ.js.map +0 -1
- package/dist/shared/chunk-KIDICX3Y.js.map +0 -1
- package/dist/shared/chunk-KILJYJFE.js.map +0 -1
- package/dist/shared/chunk-L6C7HUSA.js.map +0 -1
- package/dist/shared/chunk-LCJ2VFPM.js.map +0 -1
- package/dist/shared/chunk-LLNPH3XR.js.map +0 -1
- package/dist/shared/chunk-LTIJI7Y3.js.map +0 -1
- package/dist/shared/chunk-MFNHFN2B.js +0 -103
- package/dist/shared/chunk-MFNHFN2B.js.map +0 -1
- package/dist/shared/chunk-N3ZTQD5I.js.map +0 -1
- package/dist/shared/chunk-NTLAKMMQ.js.map +0 -1
- package/dist/shared/chunk-Q4NPPLEU.js.map +0 -1
- package/dist/shared/chunk-RV7AYVFV.js.map +0 -1
- package/dist/shared/chunk-SE6O65HC.js.map +0 -1
- package/dist/shared/chunk-TFGGYU6Y.js.map +0 -1
- package/dist/shared/chunk-TNMNMYOB.js.map +0 -1
- package/dist/shared/chunk-TNTFKLCR.js +0 -1225
- package/dist/shared/chunk-TNTFKLCR.js.map +0 -1
- package/dist/shared/chunk-U5ZECCJM.js.map +0 -1
- package/dist/shared/chunk-UXTASZ23.js.map +0 -1
- package/dist/shared/chunk-W6MRYRGJ.js.map +0 -1
- package/dist/shared/chunk-WKN566LN.js +0 -29
- package/dist/shared/chunk-WKN566LN.js.map +0 -1
- package/dist/shared/chunk-Y74LZNND.js.map +0 -1
- package/dist/shared/chunk-YWOTQWIQ.js.map +0 -1
- package/dist/shared/chunk-ZLYIRH2B.js.map +0 -1
- package/dist/shared/chunk-ZR6R6Z6O.js.map +0 -1
- package/dist/shared/chunk-ZRRAK5NS.js.map +0 -1
- package/dist/shared/tests/schema-registry.test.d.ts +0 -2
- package/dist/shared/tests/schema-registry.test.d.ts.map +0 -1
- package/dist/shared/utils/schema-registry.d.ts +0 -5
- package/dist/shared/utils/schema-registry.d.ts.map +0 -1
- package/dist/shared/utils/schema-registry.js +0 -29
- package/dist/shared/utils/schema-registry.js.map +0 -1
- package/dist/shared/utils/tests/schema-registry.test.d.ts +0 -2
- package/dist/shared/utils/tests/schema-registry.test.d.ts.map +0 -1
- package/dist/shared/utils/typed-ref.d.ts +0 -43
- package/dist/shared/utils/typed-ref.d.ts.map +0 -1
- package/dist/shared/utils/typed-ref.js +0 -10
- package/dist/shared/utils/typed-ref.js.map +0 -1
- package/src/shared/tests/schema-registry.test.ts +0 -12
- package/src/shared/utils/schema-registry.ts +0 -82
- package/src/shared/utils/tests/schema-registry.test.ts +0 -13
- package/src/shared/utils/typed-ref.ts +0 -53
- /package/dist/shared/{chunk-N3BEBLWF.js.map → chunk-KQH6V22E.js.map} +0 -0
- /package/dist/shared/{chunk-FOGAVJC2.js.map → chunk-LGGPCCCY.js.map} +0 -0
- /package/dist/shared/{chunk-GIGFNQBO.js.map → chunk-W2RFDII5.js.map} +0 -0
|
@@ -1,8 +1,53 @@
|
|
|
1
1
|
import { type TArray, type TObject, type TSchema, Kind, type Static } from "@sinclair/typebox";
|
|
2
|
+
import { Value } from "@sinclair/typebox/value";
|
|
2
3
|
import type { PageAttributes } from "../attributes";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { defaultsDeep as applyDefaultsDeep, merge } from "lodash-es";
|
|
5
|
+
import { FormatRegistry } from "@sinclair/typebox";
|
|
6
|
+
import { DefaultErrorFunction, SetErrorFunction, ValueErrorType } from "@sinclair/typebox/errors";
|
|
7
|
+
// export const jsonStringsSupportedFormats = ["date-time", "date", "email", "url"] as const;
|
|
8
|
+
|
|
9
|
+
// import string enum for its side effects
|
|
10
|
+
import "./string-enum";
|
|
11
|
+
|
|
12
|
+
const urlValidator = (value: string) => {
|
|
13
|
+
try {
|
|
14
|
+
const url = new URL(value);
|
|
15
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
16
|
+
} catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const noCheck = (value: string) => true;
|
|
22
|
+
|
|
23
|
+
FormatRegistry.Set("uuid", (value) =>
|
|
24
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value),
|
|
25
|
+
);
|
|
26
|
+
// Allow different lengths for nanoid
|
|
27
|
+
FormatRegistry.Set("nanoid", (value) => /^[A-Za-z0-9_-]{7,32}$/.test(value));
|
|
28
|
+
FormatRegistry.Set("slug", (value) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value));
|
|
29
|
+
// Simple format checks for richtext, markdown, multiline, password, image, file
|
|
30
|
+
FormatRegistry.Set("richtext", noCheck);
|
|
31
|
+
FormatRegistry.Set("markdown", noCheck);
|
|
32
|
+
FormatRegistry.Set("multiline", noCheck);
|
|
33
|
+
FormatRegistry.Set("password", noCheck);
|
|
34
|
+
FormatRegistry.Set("image", urlValidator);
|
|
35
|
+
FormatRegistry.Set("file", urlValidator);
|
|
36
|
+
|
|
37
|
+
SetErrorFunction((error) => {
|
|
38
|
+
if (error.errorType === ValueErrorType.Kind) {
|
|
39
|
+
if (
|
|
40
|
+
error.schema.type === "string" &&
|
|
41
|
+
typeof error.value === "string" &&
|
|
42
|
+
error.schema.enum &&
|
|
43
|
+
!error.schema.enum.includes(error.value)
|
|
44
|
+
) {
|
|
45
|
+
return `Must include valid value: [${error.schema.enum.join(", ")}]`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return DefaultErrorFunction(error);
|
|
50
|
+
});
|
|
6
51
|
|
|
7
52
|
export function normalizeSchemaEnum(schema: TSchema): Array<{ const: string; title: string }> {
|
|
8
53
|
if (!("enum" in schema)) {
|
|
@@ -24,11 +69,11 @@ export function normalizeSchemaEnum(schema: TSchema): Array<{ const: string; tit
|
|
|
24
69
|
export function getSchemaDefaults<T extends TObject | TArray>(
|
|
25
70
|
schema: T,
|
|
26
71
|
mode?: "mobile" | "desktop",
|
|
27
|
-
): T
|
|
72
|
+
): Static<T> {
|
|
28
73
|
// Handle object schemas
|
|
29
74
|
if (schema.type === "object" && "properties" in schema) {
|
|
30
75
|
const objectSchema = schema as TObject;
|
|
31
|
-
const defaults:
|
|
76
|
+
const defaults: Static<T> = {};
|
|
32
77
|
|
|
33
78
|
for (const [key, propertySchema] of Object.entries(objectSchema.properties)) {
|
|
34
79
|
const defaultValue = getNestedDefaults(propertySchema as TSchema, mode);
|
|
@@ -39,8 +84,7 @@ export function getSchemaDefaults<T extends TObject | TArray>(
|
|
|
39
84
|
}
|
|
40
85
|
}
|
|
41
86
|
|
|
42
|
-
|
|
43
|
-
return defaults as any;
|
|
87
|
+
return defaults as Static<T>;
|
|
44
88
|
}
|
|
45
89
|
|
|
46
90
|
// Handle array schemas
|
|
@@ -48,19 +92,16 @@ export function getSchemaDefaults<T extends TObject | TArray>(
|
|
|
48
92
|
const arraySchema = schema as TArray;
|
|
49
93
|
|
|
50
94
|
if (mode && typeof arraySchema[`default:${mode}`] !== "undefined") {
|
|
51
|
-
|
|
52
|
-
return arraySchema[`default:${mode}`] as any;
|
|
95
|
+
return arraySchema[`default:${mode}`];
|
|
53
96
|
}
|
|
54
97
|
|
|
55
98
|
// If the array itself has an explicit default, return it
|
|
56
99
|
if (arraySchema.default) {
|
|
57
|
-
|
|
58
|
-
return arraySchema.default as any;
|
|
100
|
+
return arraySchema.default;
|
|
59
101
|
}
|
|
60
102
|
|
|
61
103
|
// Otherwise return empty array
|
|
62
|
-
|
|
63
|
-
return [] as any;
|
|
104
|
+
return [];
|
|
64
105
|
}
|
|
65
106
|
|
|
66
107
|
throw new Error("Schema must be either TObject or TArray");
|
|
@@ -131,244 +172,30 @@ export function filterSchemaProperties(schema: TObject, filter: (prop: TSchema)
|
|
|
131
172
|
* Handles nested objects, arrays, and complex schema structures.
|
|
132
173
|
*/
|
|
133
174
|
export function resolveSchema<T extends TSchema = TSchema>(schema: T): T {
|
|
134
|
-
|
|
175
|
+
console.warn("resolveSchema is deprecated, use resolveSchemaRecursive instead");
|
|
176
|
+
return schema;
|
|
135
177
|
}
|
|
136
178
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Handle $ref resolution
|
|
147
|
-
if ("$ref" in schema && typeof schema.$ref === "string") {
|
|
148
|
-
// Prevent infinite recursion with circular references
|
|
149
|
-
if (visited.has(schema.$ref) || schema[Kind] === "This") {
|
|
150
|
-
// console.warn(`Circular reference detected: ${schema.$ref}`);
|
|
151
|
-
return schema; // Return original schema to avoid infinite loop
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
const resolved = schemaRegistry.get(schema.$ref);
|
|
155
|
-
if (!resolved) {
|
|
156
|
-
console.error("Schema not found for reference:", schema);
|
|
157
|
-
return schema;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Add to visited set and recursively resolve the referenced schema
|
|
161
|
-
visited.add(schema.$ref);
|
|
162
|
-
const { $ref, ...rest } = schema;
|
|
163
|
-
const resolvedSchema = {
|
|
164
|
-
...resolveSchemaRecursive(resolved, visited),
|
|
165
|
-
...rest,
|
|
166
|
-
};
|
|
167
|
-
visited.delete(schema.$ref); // Remove from visited after processing
|
|
168
|
-
|
|
169
|
-
return resolvedSchema as TSchema;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// Handle object schemas
|
|
173
|
-
if ("type" in schema && schema.type === "object" && "properties" in schema) {
|
|
174
|
-
const resolvedProperties: Record<string, TSchema> = {};
|
|
175
|
-
|
|
176
|
-
if (schema.properties && typeof schema.properties === "object") {
|
|
177
|
-
for (const [key, value] of Object.entries(schema.properties)) {
|
|
178
|
-
if (value && typeof value === "object") {
|
|
179
|
-
resolvedProperties[key] = resolveSchemaRecursive(value as TSchema, visited);
|
|
180
|
-
} else {
|
|
181
|
-
resolvedProperties[key] = value as TSchema;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const resolvedSchema = { ...schema };
|
|
187
|
-
if (Object.keys(resolvedProperties).length > 0) {
|
|
188
|
-
resolvedSchema.properties = resolvedProperties;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Handle additionalProperties
|
|
192
|
-
if (
|
|
193
|
-
"additionalProperties" in schema &&
|
|
194
|
-
schema.additionalProperties &&
|
|
195
|
-
typeof schema.additionalProperties === "object" &&
|
|
196
|
-
schema.additionalProperties !== true
|
|
197
|
-
) {
|
|
198
|
-
resolvedSchema.additionalProperties = resolveSchemaRecursive(
|
|
199
|
-
schema.additionalProperties as TSchema,
|
|
200
|
-
visited,
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Handle patternProperties
|
|
205
|
-
if (
|
|
206
|
-
"patternProperties" in schema &&
|
|
207
|
-
schema.patternProperties &&
|
|
208
|
-
typeof schema.patternProperties === "object"
|
|
209
|
-
) {
|
|
210
|
-
const resolvedPatternProperties: Record<string, TSchema> = {};
|
|
211
|
-
for (const [pattern, patternSchema] of Object.entries(schema.patternProperties)) {
|
|
212
|
-
if (patternSchema && typeof patternSchema === "object") {
|
|
213
|
-
resolvedPatternProperties[pattern] = resolveSchemaRecursive(patternSchema as TSchema, visited);
|
|
214
|
-
} else {
|
|
215
|
-
resolvedPatternProperties[pattern] = patternSchema as TSchema;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
resolvedSchema.patternProperties = resolvedPatternProperties;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return resolvedSchema as TSchema;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Handle array schemas
|
|
225
|
-
if ("type" in schema && schema.type === "array") {
|
|
226
|
-
const resolvedSchema = { ...schema };
|
|
227
|
-
|
|
228
|
-
if ("items" in schema && schema.items) {
|
|
229
|
-
if (Array.isArray(schema.items)) {
|
|
230
|
-
resolvedSchema.items = schema.items.map((item) => resolveSchemaRecursive(item as TSchema, visited));
|
|
231
|
-
} else if (typeof schema.items === "object") {
|
|
232
|
-
resolvedSchema.items = resolveSchemaRecursive(schema.items as TSchema, visited);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// Handle additionalItems
|
|
237
|
-
if (
|
|
238
|
-
"additionalItems" in schema &&
|
|
239
|
-
schema.additionalItems &&
|
|
240
|
-
typeof schema.additionalItems === "object" &&
|
|
241
|
-
schema.additionalItems !== true
|
|
242
|
-
) {
|
|
243
|
-
resolvedSchema.additionalItems = resolveSchemaRecursive(schema.additionalItems as TSchema, visited);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return resolvedSchema as TSchema;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// Handle union schemas (anyOf)
|
|
250
|
-
if ("anyOf" in schema && Array.isArray(schema.anyOf)) {
|
|
251
|
-
const resolvedAnyOf = schema.anyOf.map((subSchema) => {
|
|
252
|
-
return resolveSchemaRecursive(subSchema as TSchema, visited);
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
return { ...schema, anyOf: resolvedAnyOf } as TSchema;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// Handle union schemas (oneOf)
|
|
259
|
-
if ("oneOf" in schema && Array.isArray(schema.oneOf)) {
|
|
260
|
-
const resolvedOneOf = schema.oneOf.map((subSchema) =>
|
|
261
|
-
resolveSchemaRecursive(subSchema as TSchema, visited),
|
|
262
|
-
);
|
|
263
|
-
|
|
264
|
-
return { ...schema, oneOf: resolvedOneOf } as TSchema;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Handle intersection schemas (allOf)
|
|
268
|
-
if ("allOf" in schema && Array.isArray(schema.allOf)) {
|
|
269
|
-
const resolvedAllOf = schema.allOf.map((subSchema) =>
|
|
270
|
-
resolveSchemaRecursive(subSchema as TSchema, visited),
|
|
271
|
-
);
|
|
272
|
-
|
|
273
|
-
return { ...schema, allOf: resolvedAllOf } as TSchema;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Handle not schemas
|
|
277
|
-
if ("not" in schema && schema.not && typeof schema.not === "object") {
|
|
278
|
-
const resolvedNot = resolveSchemaRecursive(schema.not as TSchema, visited);
|
|
279
|
-
|
|
280
|
-
return { ...schema, not: resolvedNot } as TSchema;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Handle conditional schemas (if/then/else)
|
|
284
|
-
if ("if" in schema || "then" in schema || "else" in schema) {
|
|
285
|
-
const resolvedSchema = { ...schema };
|
|
286
|
-
|
|
287
|
-
if ("if" in schema && schema.if && typeof schema.if === "object") {
|
|
288
|
-
resolvedSchema.if = resolveSchemaRecursive(schema.if as TSchema, visited);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if ("then" in schema && schema.then && typeof schema.then === "object") {
|
|
292
|
-
// biome-ignore lint/suspicious/noThenProperty: <explanation>
|
|
293
|
-
resolvedSchema.then = resolveSchemaRecursive(schema.then as TSchema, visited);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
if ("else" in schema && schema.else && typeof schema.else === "object") {
|
|
297
|
-
resolvedSchema.else = resolveSchemaRecursive(schema.else as TSchema, visited);
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
return resolvedSchema as TSchema;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Handle schemas with definitions
|
|
304
|
-
if ("definitions" in schema || "$defs" in schema) {
|
|
305
|
-
const resolvedSchema = { ...schema };
|
|
306
|
-
|
|
307
|
-
if ("definitions" in schema && schema.definitions && typeof schema.definitions === "object") {
|
|
308
|
-
const resolvedDefinitions: Record<string, TSchema> = {};
|
|
309
|
-
for (const [key, def] of Object.entries(schema.definitions)) {
|
|
310
|
-
if (def && typeof def === "object") {
|
|
311
|
-
resolvedDefinitions[key] = resolveSchemaRecursive(def as TSchema, visited);
|
|
312
|
-
} else {
|
|
313
|
-
resolvedDefinitions[key] = def as TSchema;
|
|
314
|
-
}
|
|
179
|
+
export function validate<T extends TSchema>(schema: TSchema, data: unknown): Static<T> {
|
|
180
|
+
try {
|
|
181
|
+
const valid = Value.Check(schema, data);
|
|
182
|
+
if (!valid) {
|
|
183
|
+
let finalError = "";
|
|
184
|
+
for (const error of Value.Errors(schema, data)) {
|
|
185
|
+
finalError += `Error at ${error.path} with value ${error.value}: ${error.message}\n`;
|
|
315
186
|
}
|
|
316
|
-
|
|
187
|
+
console.error("Validation errors:\n", finalError);
|
|
188
|
+
throw new Error(finalError);
|
|
317
189
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
if (def && typeof def === "object") {
|
|
323
|
-
resolved$Defs[key] = resolveSchemaRecursive(def as TSchema, visited);
|
|
324
|
-
} else {
|
|
325
|
-
resolved$Defs[key] = def as TSchema;
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
resolvedSchema.$defs = resolved$Defs;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
return resolvedSchema as TSchema;
|
|
190
|
+
} catch (e) {
|
|
191
|
+
console.error("Validation exception:", e);
|
|
192
|
+
console.dir(e, { depth: null });
|
|
193
|
+
throw e;
|
|
332
194
|
}
|
|
333
195
|
|
|
334
|
-
// Handle any other schema types that might contain nested schemas
|
|
335
|
-
const resolvedSchema = { ...schema };
|
|
336
|
-
|
|
337
|
-
for (const [key, value] of Object.entries(schema)) {
|
|
338
|
-
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
339
|
-
// Check if this looks like a schema object
|
|
340
|
-
if ("type" in value || "$ref" in value || "properties" in value || "items" in value) {
|
|
341
|
-
(resolvedSchema as Record<string, unknown>)[key] = resolveSchemaRecursive(value as TSchema, visited);
|
|
342
|
-
}
|
|
343
|
-
} else if (Array.isArray(value)) {
|
|
344
|
-
// Check if array contains schemas
|
|
345
|
-
const hasSchemas = value.some(
|
|
346
|
-
(item) =>
|
|
347
|
-
item &&
|
|
348
|
-
typeof item === "object" &&
|
|
349
|
-
("type" in item || "$ref" in item || "properties" in item || "items" in item),
|
|
350
|
-
);
|
|
351
|
-
|
|
352
|
-
if (hasSchemas) {
|
|
353
|
-
(resolvedSchema as Record<string, unknown>)[key] = value.map((item) =>
|
|
354
|
-
item && typeof item === "object" ? resolveSchemaRecursive(item as TSchema, visited) : item,
|
|
355
|
-
);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
return resolvedSchema as TSchema;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
export function validate<T extends TSchema>(schema: TSchema, data: unknown): data is Static<T> {
|
|
364
|
-
const validator = new Cabidela(schema, {
|
|
365
|
-
fullErrors: true,
|
|
366
|
-
});
|
|
367
|
-
validator.validate(data);
|
|
368
|
-
|
|
369
196
|
// Mutate data with defaults
|
|
370
197
|
const defaults = getSchemaDefaults(schema as TObject | TArray);
|
|
371
|
-
applyDefaultsDeep(data, defaults);
|
|
198
|
+
const finalObject = applyDefaultsDeep({}, data, defaults);
|
|
372
199
|
|
|
373
|
-
return
|
|
200
|
+
return finalObject as Static<T>;
|
|
374
201
|
}
|
|
@@ -1,12 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TypeRegistry, Kind, type TSchema, type SchemaOptions, Type } from "@sinclair/typebox";
|
|
2
2
|
|
|
3
|
-
export type StringEnumOptions = Partial<
|
|
3
|
+
export type StringEnumOptions = Partial<SchemaOptions> & {
|
|
4
4
|
enumNames?: string[];
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// -------------------------------------------------------------------------------------
|
|
8
|
+
// TStringEnum
|
|
9
|
+
// -------------------------------------------------------------------------------------
|
|
10
|
+
export interface TStringEnum<T extends string[]> extends TSchema {
|
|
11
|
+
[Kind]: "StringEnum";
|
|
12
|
+
static: T[number];
|
|
13
|
+
enum: T;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function StringEnumCheck(schema: TStringEnum<string[]>, value: unknown) {
|
|
17
|
+
return typeof value === "string" && schema.enum.includes(value);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
TypeRegistry.Set("StringEnum", StringEnumCheck);
|
|
21
|
+
|
|
22
|
+
// -------------------------------------------------------------------------------------
|
|
23
|
+
// UnionEnum
|
|
24
|
+
// -------------------------------------------------------------------------------------
|
|
25
|
+
/** `[Experimental]` Creates a Union type with a `enum` schema representation */
|
|
26
|
+
export function StringEnum<T extends string[]>(values: [...T], options: StringEnumOptions = {}) {
|
|
27
|
+
return Type.Unsafe<T[number]>({
|
|
28
|
+
[Kind]: "StringEnum",
|
|
9
29
|
type: "string",
|
|
10
30
|
enum: values,
|
|
11
31
|
...options,
|
|
12
32
|
});
|
|
33
|
+
}
|