@pdtf/schemas 3.6.0-dev.3 → 3.6.0-dev.4

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 (263) hide show
  1. package/charming-napier-57a77c/LICENSE +21 -0
  2. package/charming-napier-57a77c/README.md +430 -0
  3. package/charming-napier-57a77c/docs/sef25-extensions-ui-spec.md +355 -0
  4. package/charming-napier-57a77c/index.js +654 -0
  5. package/charming-napier-57a77c/package-lock.json +7297 -0
  6. package/charming-napier-57a77c/package.json +41 -0
  7. package/charming-napier-57a77c/src/examples/v1/exampleAddParticipantVouch.json +32 -0
  8. package/charming-napier-57a77c/src/examples/v1/exampleDocumentedVouch.json +40 -0
  9. package/charming-napier-57a77c/src/examples/v1/exampleElectronicRecord.json +30 -0
  10. package/charming-napier-57a77c/src/examples/v1/exampleTransaction.json +878 -0
  11. package/charming-napier-57a77c/src/examples/v1/exampleVouch.json +25 -0
  12. package/charming-napier-57a77c/src/examples/v2/exampleTransaction.json +901 -0
  13. package/charming-napier-57a77c/src/examples/v3/exampleAddParticipantVouch.json +38 -0
  14. package/charming-napier-57a77c/src/examples/v3/exampleCustomOverlay.json +55 -0
  15. package/charming-napier-57a77c/src/examples/v3/exampleCustomOverlay2.json +93 -0
  16. package/charming-napier-57a77c/src/examples/v3/exampleDocumentedVouch.json +47 -0
  17. package/charming-napier-57a77c/src/examples/v3/exampleElectronicRecord.json +36 -0
  18. package/charming-napier-57a77c/src/examples/v3/exampleTransaction.json +1038 -0
  19. package/charming-napier-57a77c/src/examples/v3/exampleVouch.json +32 -0
  20. package/charming-napier-57a77c/src/mappings/SendPropertyDetailsRequestSchema.json +1588 -0
  21. package/charming-napier-57a77c/src/mappings/adf.js +198 -0
  22. package/charming-napier-57a77c/src/schemas/v1/GeoJSON.json +1279 -0
  23. package/charming-napier-57a77c/src/schemas/v1/baspiNotes.html +102 -0
  24. package/charming-napier-57a77c/src/schemas/v1/energy-performance-certificate.json +124 -0
  25. package/charming-napier-57a77c/src/schemas/v1/freehold-information.json +2051 -0
  26. package/charming-napier-57a77c/src/schemas/v1/leasehold-information.json +2064 -0
  27. package/charming-napier-57a77c/src/schemas/v1/legal-information.json +1045 -0
  28. package/charming-napier-57a77c/src/schemas/v1/material-facts.json +2109 -0
  29. package/charming-napier-57a77c/src/schemas/v1/pdtf-transaction-search-results.json +40 -0
  30. package/charming-napier-57a77c/src/schemas/v1/pdtf-transaction.json +191 -0
  31. package/charming-napier-57a77c/src/schemas/v1/searches/drainage-and-water.json +261 -0
  32. package/charming-napier-57a77c/src/schemas/v1/searches/local-land-charges.json +69 -0
  33. package/charming-napier-57a77c/src/schemas/v1/searches/local-searches-required.json +857 -0
  34. package/charming-napier-57a77c/src/schemas/v1/searches.json +237 -0
  35. package/charming-napier-57a77c/src/schemas/v1/title-deed.json +841 -0
  36. package/charming-napier-57a77c/src/schemas/v2/baspiNotes.html +102 -0
  37. package/charming-napier-57a77c/src/schemas/v2/combined.json +37731 -0
  38. package/charming-napier-57a77c/src/schemas/v2/overlays/baspi.json +8132 -0
  39. package/charming-napier-57a77c/src/schemas/v2/overlays/con29DW.json +705 -0
  40. package/charming-napier-57a77c/src/schemas/v2/overlays/con29R.json +2956 -0
  41. package/charming-napier-57a77c/src/schemas/v2/overlays/fme1.json +1259 -0
  42. package/charming-napier-57a77c/src/schemas/v2/overlays/llc1.json +25 -0
  43. package/charming-napier-57a77c/src/schemas/v2/overlays/lpe1.json +2171 -0
  44. package/charming-napier-57a77c/src/schemas/v2/overlays/nts.json +326 -0
  45. package/charming-napier-57a77c/src/schemas/v2/overlays/oc1.json +2799 -0
  46. package/charming-napier-57a77c/src/schemas/v2/overlays/piq.json +3419 -0
  47. package/charming-napier-57a77c/src/schemas/v2/overlays/rds.json +3736 -0
  48. package/charming-napier-57a77c/src/schemas/v2/overlays/ta10.json +5306 -0
  49. package/charming-napier-57a77c/src/schemas/v2/overlays/ta6.json +4533 -0
  50. package/charming-napier-57a77c/src/schemas/v2/overlays/ta7.json +1045 -0
  51. package/charming-napier-57a77c/src/schemas/v2/pdtf-transaction.json +34351 -0
  52. package/charming-napier-57a77c/src/schemas/v2/skeleton.json +3973 -0
  53. package/charming-napier-57a77c/src/schemas/v3/combined.json +48153 -0
  54. package/charming-napier-57a77c/src/schemas/v3/compactSkeleton.txt +4457 -0
  55. package/charming-napier-57a77c/src/schemas/v3/overlays/README.md +299 -0
  56. package/charming-napier-57a77c/src/schemas/v3/overlays/baspi4.json +8027 -0
  57. package/charming-napier-57a77c/src/schemas/v3/overlays/baspi5.json +8177 -0
  58. package/charming-napier-57a77c/src/schemas/v3/overlays/con29DW.json +716 -0
  59. package/charming-napier-57a77c/src/schemas/v3/overlays/con29R.json +2981 -0
  60. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ac.json +333 -0
  61. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/as.json +74 -0
  62. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/dk.json +32 -0
  63. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/dr.json +73 -0
  64. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/er.json +85 -0
  65. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/fd.json +75 -0
  66. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/hi.json +51 -0
  67. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/hs.json +73 -0
  68. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ic.json +59 -0
  69. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/jk.json +96 -0
  70. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/la.json +85 -0
  71. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/lc.json +75 -0
  72. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ma.json +90 -0
  73. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/mc.json +38 -0
  74. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/mi.json +69 -0
  75. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/nd.json +43 -0
  76. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/oa.json +24 -0
  77. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/oc.json +57 -0
  78. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/pc.json +37 -0
  79. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ph.json +194 -0
  80. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/rw.json +68 -0
  81. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sb.json +73 -0
  82. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sc.json +129 -0
  83. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sd.json +63 -0
  84. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sf.json +74 -0
  85. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sl.json +68 -0
  86. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ta.json +240 -0
  87. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/tf.json +103 -0
  88. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/tr.json +73 -0
  89. package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/wg.json +350 -0
  90. package/charming-napier-57a77c/src/schemas/v3/overlays/fme1.json +1266 -0
  91. package/charming-napier-57a77c/src/schemas/v3/overlays/llc1.json +25 -0
  92. package/charming-napier-57a77c/src/schemas/v3/overlays/lpe1.json +2199 -0
  93. package/charming-napier-57a77c/src/schemas/v3/overlays/nts.json +2157 -0
  94. package/charming-napier-57a77c/src/schemas/v3/overlays/nts2.json +2742 -0
  95. package/charming-napier-57a77c/src/schemas/v3/overlays/ntsl.json +1813 -0
  96. package/charming-napier-57a77c/src/schemas/v3/overlays/ntsl2.json +2217 -0
  97. package/charming-napier-57a77c/src/schemas/v3/overlays/oc1.json +2817 -0
  98. package/charming-napier-57a77c/src/schemas/v3/overlays/piq.json +3321 -0
  99. package/charming-napier-57a77c/src/schemas/v3/overlays/rds.json +3665 -0
  100. package/charming-napier-57a77c/src/schemas/v3/overlays/sef25.json +1639 -0
  101. package/charming-napier-57a77c/src/schemas/v3/overlays/sr24.json +38 -0
  102. package/charming-napier-57a77c/src/schemas/v3/overlays/ta10.json +4654 -0
  103. package/charming-napier-57a77c/src/schemas/v3/overlays/ta6.json +4568 -0
  104. package/charming-napier-57a77c/src/schemas/v3/overlays/ta6ed6.json +6537 -0
  105. package/charming-napier-57a77c/src/schemas/v3/overlays/ta7.json +1537 -0
  106. package/charming-napier-57a77c/src/schemas/v3/overlays/ta7ed5.json +1551 -0
  107. package/charming-napier-57a77c/src/schemas/v3/pdtf-transaction.json +41229 -0
  108. package/charming-napier-57a77c/src/schemas/v3/skeleton.json +5703 -0
  109. package/charming-napier-57a77c/src/schemas/verifiedClaims/README.md +21 -0
  110. package/charming-napier-57a77c/src/schemas/verifiedClaims/pdtf-verified-claims.json +447 -0
  111. package/charming-napier-57a77c/src/tests/v3/buyerCircumstances.test.js +543 -0
  112. package/charming-napier-57a77c/src/tests/v3/caching.test.js +591 -0
  113. package/charming-napier-57a77c/src/tests/v3/enquiries.test.js +1096 -0
  114. package/charming-napier-57a77c/src/tests/v3/extensionOverlays.test.js +1599 -0
  115. package/charming-napier-57a77c/src/tests/v3/offers.test.js +823 -0
  116. package/charming-napier-57a77c/src/tests/v3/patternProperties.test.js +688 -0
  117. package/charming-napier-57a77c/src/tests/v3/ta6ed6.test.js +2374 -0
  118. package/charming-napier-57a77c/src/tests/v3/ta7ed5.test.js +600 -0
  119. package/charming-napier-57a77c/src/tests/v3/transactionSchema.test.js +646 -0
  120. package/charming-napier-57a77c/src/tests/v3/verifiedClaimsValidator.test.js +195 -0
  121. package/charming-napier-57a77c/src/utils/compactSkeleton.js +84 -0
  122. package/charming-napier-57a77c/src/utils/countTokens.js +67 -0
  123. package/charming-napier-57a77c/src/utils/extractExtensionOverlays.js +624 -0
  124. package/charming-napier-57a77c/src/utils/extractOverlay.js +381 -0
  125. package/charming-napier-57a77c/src/utils/extractProperties.js +44 -0
  126. package/charming-napier-57a77c/src/utils/listPathTitles.js +36 -0
  127. package/charming-napier-57a77c/src/utils/minimalSkeleton.js +85 -0
  128. package/charming-napier-57a77c/src/utils/pathList.csv +903 -0
  129. package/charming-napier-57a77c/src/utils/pathSkeleton.js +181 -0
  130. package/keen-dewdney-6ae15b/LICENSE +21 -0
  131. package/keen-dewdney-6ae15b/README.md +334 -0
  132. package/keen-dewdney-6ae15b/index.js +557 -0
  133. package/keen-dewdney-6ae15b/package-lock.json +7296 -0
  134. package/keen-dewdney-6ae15b/package.json +39 -0
  135. package/keen-dewdney-6ae15b/src/examples/v1/exampleAddParticipantVouch.json +32 -0
  136. package/keen-dewdney-6ae15b/src/examples/v1/exampleDocumentedVouch.json +40 -0
  137. package/keen-dewdney-6ae15b/src/examples/v1/exampleElectronicRecord.json +30 -0
  138. package/keen-dewdney-6ae15b/src/examples/v1/exampleTransaction.json +878 -0
  139. package/keen-dewdney-6ae15b/src/examples/v1/exampleVouch.json +25 -0
  140. package/keen-dewdney-6ae15b/src/examples/v2/exampleTransaction.json +901 -0
  141. package/keen-dewdney-6ae15b/src/examples/v3/exampleAddParticipantVouch.json +35 -0
  142. package/keen-dewdney-6ae15b/src/examples/v3/exampleCustomOverlay.json +55 -0
  143. package/keen-dewdney-6ae15b/src/examples/v3/exampleCustomOverlay2.json +93 -0
  144. package/keen-dewdney-6ae15b/src/examples/v3/exampleDocumentedVouch.json +44 -0
  145. package/keen-dewdney-6ae15b/src/examples/v3/exampleElectronicRecord.json +33 -0
  146. package/keen-dewdney-6ae15b/src/examples/v3/exampleTransaction.json +1034 -0
  147. package/keen-dewdney-6ae15b/src/examples/v3/exampleVouch.json +29 -0
  148. package/keen-dewdney-6ae15b/src/mappings/SendPropertyDetailsRequestSchema.json +1588 -0
  149. package/keen-dewdney-6ae15b/src/mappings/adf.js +198 -0
  150. package/keen-dewdney-6ae15b/src/schemas/v1/GeoJSON.json +1279 -0
  151. package/keen-dewdney-6ae15b/src/schemas/v1/baspiNotes.html +102 -0
  152. package/keen-dewdney-6ae15b/src/schemas/v1/energy-performance-certificate.json +124 -0
  153. package/keen-dewdney-6ae15b/src/schemas/v1/freehold-information.json +2051 -0
  154. package/keen-dewdney-6ae15b/src/schemas/v1/leasehold-information.json +2064 -0
  155. package/keen-dewdney-6ae15b/src/schemas/v1/legal-information.json +1045 -0
  156. package/keen-dewdney-6ae15b/src/schemas/v1/material-facts.json +2109 -0
  157. package/keen-dewdney-6ae15b/src/schemas/v1/pdtf-transaction-search-results.json +40 -0
  158. package/keen-dewdney-6ae15b/src/schemas/v1/pdtf-transaction.json +191 -0
  159. package/keen-dewdney-6ae15b/src/schemas/v1/searches/drainage-and-water.json +261 -0
  160. package/keen-dewdney-6ae15b/src/schemas/v1/searches/local-land-charges.json +69 -0
  161. package/keen-dewdney-6ae15b/src/schemas/v1/searches/local-searches-required.json +857 -0
  162. package/keen-dewdney-6ae15b/src/schemas/v1/searches.json +237 -0
  163. package/keen-dewdney-6ae15b/src/schemas/v1/title-deed.json +841 -0
  164. package/keen-dewdney-6ae15b/src/schemas/v2/baspiNotes.html +102 -0
  165. package/keen-dewdney-6ae15b/src/schemas/v2/combined.json +37731 -0
  166. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/baspi.json +8132 -0
  167. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/con29DW.json +705 -0
  168. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/con29R.json +2956 -0
  169. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/fme1.json +1259 -0
  170. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/llc1.json +25 -0
  171. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/lpe1.json +2171 -0
  172. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/nts.json +326 -0
  173. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/oc1.json +2799 -0
  174. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/piq.json +3419 -0
  175. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/rds.json +3736 -0
  176. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta10.json +5306 -0
  177. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta6.json +4533 -0
  178. package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta7.json +1045 -0
  179. package/keen-dewdney-6ae15b/src/schemas/v2/pdtf-transaction.json +34351 -0
  180. package/keen-dewdney-6ae15b/src/schemas/v2/skeleton.json +3973 -0
  181. package/keen-dewdney-6ae15b/src/schemas/v3/combined.json +41720 -0
  182. package/keen-dewdney-6ae15b/src/schemas/v3/compactSkeleton.txt +3325 -0
  183. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/README.md +299 -0
  184. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/baspi4.json +7872 -0
  185. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/baspi5.json +8019 -0
  186. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/con29DW.json +716 -0
  187. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/con29R.json +2981 -0
  188. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/as.json +72 -0
  189. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/dr.json +73 -0
  190. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/er.json +83 -0
  191. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/fd.json +72 -0
  192. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/hi.json +48 -0
  193. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/hs.json +71 -0
  194. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/jk.json +76 -0
  195. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/la.json +83 -0
  196. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/ma.json +87 -0
  197. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/mc.json +36 -0
  198. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/oa.json +22 -0
  199. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/oc.json +55 -0
  200. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sb.json +71 -0
  201. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sf.json +72 -0
  202. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sl.json +66 -0
  203. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/tf.json +100 -0
  204. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/fme1.json +1264 -0
  205. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/llc1.json +25 -0
  206. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/lpe1.json +2226 -0
  207. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/nts.json +2090 -0
  208. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/nts2.json +2678 -0
  209. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ntsl.json +1746 -0
  210. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ntsl2.json +2153 -0
  211. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/oc1.json +2817 -0
  212. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/piq.json +3276 -0
  213. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/rds.json +3552 -0
  214. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/sr24.json +38 -0
  215. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta10.json +4642 -0
  216. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta6.json +4501 -0
  217. package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta7.json +1435 -0
  218. package/keen-dewdney-6ae15b/src/schemas/v3/pdtf-transaction.json +37225 -0
  219. package/keen-dewdney-6ae15b/src/schemas/v3/skeleton.json +4323 -0
  220. package/keen-dewdney-6ae15b/src/schemas/verifiedClaims/README.md +12 -0
  221. package/keen-dewdney-6ae15b/src/schemas/verifiedClaims/pdtf-verified-claims.json +431 -0
  222. package/keen-dewdney-6ae15b/src/tests/v3/caching.test.js +591 -0
  223. package/keen-dewdney-6ae15b/src/tests/v3/extensionOverlays.test.js +525 -0
  224. package/keen-dewdney-6ae15b/src/tests/v3/transactionSchema.test.js +574 -0
  225. package/keen-dewdney-6ae15b/src/tests/v3/verifiedClaimsValidator.test.js +128 -0
  226. package/keen-dewdney-6ae15b/src/utils/compactSkeleton.js +84 -0
  227. package/keen-dewdney-6ae15b/src/utils/countTokens.js +67 -0
  228. package/keen-dewdney-6ae15b/src/utils/extractExtensionOverlays.js +362 -0
  229. package/keen-dewdney-6ae15b/src/utils/extractOverlay.js +290 -0
  230. package/keen-dewdney-6ae15b/src/utils/extractProperties.js +44 -0
  231. package/keen-dewdney-6ae15b/src/utils/listPathTitles.js +36 -0
  232. package/keen-dewdney-6ae15b/src/utils/minimalSkeleton.js +85 -0
  233. package/keen-dewdney-6ae15b/src/utils/pathList.csv +903 -0
  234. package/keen-dewdney-6ae15b/src/utils/pathSkeleton.js +181 -0
  235. package/package.json +1 -1
  236. package/src/schemas/v3/combined.json +8 -15
  237. package/src/schemas/v3/overlays/baspi4.json +12 -7
  238. package/src/schemas/v3/overlays/baspi5.json +12 -7
  239. package/src/schemas/v3/overlays/extensions/ac.json +2 -1
  240. package/src/schemas/v3/overlays/extensions/dk.json +3 -2
  241. package/src/schemas/v3/overlays/extensions/ic.json +2 -1
  242. package/src/schemas/v3/overlays/extensions/lc.json +3 -2
  243. package/src/schemas/v3/overlays/extensions/mi.json +2 -1
  244. package/src/schemas/v3/overlays/extensions/nd.json +3 -2
  245. package/src/schemas/v3/overlays/extensions/pc.json +3 -2
  246. package/src/schemas/v3/overlays/extensions/ph.json +2 -1
  247. package/src/schemas/v3/overlays/extensions/rw.json +4 -3
  248. package/src/schemas/v3/overlays/extensions/sc.json +8 -4
  249. package/src/schemas/v3/overlays/extensions/sd.json +3 -2
  250. package/src/schemas/v3/overlays/extensions/tr.json +3 -2
  251. package/src/schemas/v3/overlays/extensions/wg.json +2 -1
  252. package/src/schemas/v3/overlays/lpe1.json +1 -1
  253. package/src/schemas/v3/overlays/nts.json +3 -1
  254. package/src/schemas/v3/overlays/nts2.json +3 -1
  255. package/src/schemas/v3/overlays/ntsl.json +3 -1
  256. package/src/schemas/v3/overlays/ntsl2.json +3 -1
  257. package/src/schemas/v3/overlays/piq.json +7 -5
  258. package/src/schemas/v3/overlays/rds.json +9 -6
  259. package/src/schemas/v3/overlays/ta10.json +0 -9
  260. package/src/schemas/v3/overlays/ta6.json +8 -4
  261. package/src/schemas/v3/overlays/ta6ed6.json +4 -2
  262. package/src/schemas/v3/pdtf-transaction.json +15 -18
  263. package/src/utils/extractExtensionOverlays.js +10 -1
@@ -0,0 +1,688 @@
1
+ const {
2
+ isPathValid,
3
+ getSubschema,
4
+ getSubschemaValidator,
5
+ validateVerifiedClaims,
6
+ } = require("../../../index.js");
7
+
8
+ const schemaId =
9
+ "https://trust.propdata.org.uk/schemas/v3/pdtf-transaction.json";
10
+
11
+ describe("patternProperties support in path validation", () => {
12
+ describe("isPathValid with patternProperties", () => {
13
+ test("validates path with patternProperties - simple offer ID", () => {
14
+ const path = "/offers/offer-123";
15
+ const isValid = isPathValid(path, schemaId);
16
+ expect(isValid).toBe(true);
17
+ });
18
+
19
+ test("validates path with patternProperties - UUID", () => {
20
+ const path = "/offers/550e8400-e29b-41d4-a716-446655440000";
21
+ const isValid = isPathValid(path, schemaId);
22
+ expect(isValid).toBe(true);
23
+ });
24
+
25
+ test("validates path with patternProperties - DID format", () => {
26
+ const path = "/offers/did:example:buyer123";
27
+ const isValid = isPathValid(path, schemaId);
28
+ expect(isValid).toBe(true);
29
+ });
30
+
31
+ test("validates path with patternProperties - alphanumeric with special chars", () => {
32
+ const path = "/offers/1sorzJCFHbWVlHA2tYXA";
33
+ const isValid = isPathValid(path, schemaId);
34
+ expect(isValid).toBe(true);
35
+ });
36
+
37
+ test("validates nested path within patternProperties", () => {
38
+ const path = "/offers/offer-456/amount";
39
+ const isValid = isPathValid(path, schemaId);
40
+ expect(isValid).toBe(true);
41
+ });
42
+
43
+ test("validates deeply nested path within patternProperties", () => {
44
+ const path = "/offers/offer-456/inclusions";
45
+ const isValid = isPathValid(path, schemaId);
46
+ expect(isValid).toBe(true);
47
+ });
48
+
49
+ test("rejects invalid nested path within patternProperties", () => {
50
+ const path = "/offers/offer-456/nonExistentField";
51
+ const isValid = isPathValid(path, schemaId);
52
+ expect(isValid).toBe(false);
53
+ });
54
+
55
+ test("validates path with patternProperties exists at root /offers", () => {
56
+ const path = "/offers";
57
+ const isValid = isPathValid(path, schemaId);
58
+ expect(isValid).toBe(true);
59
+ });
60
+ });
61
+
62
+ describe("getSubschema with patternProperties", () => {
63
+ test("returns correct subschema for patternProperties path", () => {
64
+ const path = "/offers/offer-123";
65
+ const subschema = getSubschema(path, schemaId);
66
+
67
+ expect(subschema).toBeDefined();
68
+ expect(subschema.type).toBe("object");
69
+ expect(subschema.properties).toBeDefined();
70
+ expect(subschema.properties.amount).toBeDefined();
71
+ expect(subschema.properties.currency).toBeDefined();
72
+ expect(subschema.properties.status).toBeDefined();
73
+ });
74
+
75
+ test("returns correct subschema for nested property in patternProperties", () => {
76
+ const path = "/offers/offer-123/amount";
77
+ const subschema = getSubschema(path, schemaId);
78
+
79
+ expect(subschema).toBeDefined();
80
+ expect(subschema.type).toBe("number");
81
+ expect(subschema.minimum).toBe(0);
82
+ });
83
+
84
+ test("returns correct subschema for status enum", () => {
85
+ const path = "/offers/offer-123/status";
86
+ const subschema = getSubschema(path, schemaId);
87
+
88
+ expect(subschema).toBeDefined();
89
+ expect(subschema.type).toBe("string");
90
+ expect(subschema.enum).toContain("Pending");
91
+ expect(subschema.enum).toContain("Accepted");
92
+ expect(subschema.enum).toContain("Rejected");
93
+ expect(subschema.enum).toContain("Withdrawn");
94
+ expect(subschema.enum).toContain("Note of Interest");
95
+ });
96
+
97
+ test("returns correct subschema for currency pattern", () => {
98
+ const path = "/offers/offer-123/currency";
99
+ const subschema = getSubschema(path, schemaId);
100
+
101
+ expect(subschema).toBeDefined();
102
+ expect(subschema.type).toBe("string");
103
+ expect(subschema.pattern).toBe("^[A-Z]{3}$");
104
+ });
105
+
106
+ test("returns offers object schema", () => {
107
+ const path = "/offers";
108
+ const subschema = getSubschema(path, schemaId);
109
+
110
+ expect(subschema).toBeDefined();
111
+ expect(subschema.type).toBe("object");
112
+ expect(subschema.patternProperties).toBeDefined();
113
+ expect(subschema.propertyNames).toBeDefined();
114
+ });
115
+
116
+ test("returns undefined for invalid path", () => {
117
+ const path = "/offers/offer-123/invalidField";
118
+ const subschema = getSubschema(path, schemaId);
119
+
120
+ expect(subschema).toBeUndefined();
121
+ });
122
+ });
123
+
124
+ describe("getSubschemaValidator with patternProperties", () => {
125
+ test("returns working validator for patternProperties path", () => {
126
+ const path = "/offers/offer-123";
127
+ const validator = getSubschemaValidator(path, schemaId);
128
+
129
+ expect(validator).toBeDefined();
130
+ expect(typeof validator).toBe("function");
131
+
132
+ const validOffer = {
133
+ amount: 500000,
134
+ currency: "GBP",
135
+ status: "Pending",
136
+ };
137
+
138
+ const isValid = validator(validOffer);
139
+ expect(isValid).toBe(true);
140
+ });
141
+
142
+ test("validator correctly validates valid offer data", () => {
143
+ const path = "/offers/offer-456";
144
+ const validator = getSubschemaValidator(path, schemaId);
145
+
146
+ const validOffer = {
147
+ amount: 300000,
148
+ currency: "EUR",
149
+ status: "Accepted",
150
+ inclusions: ["carpets", "curtains"],
151
+ exclusions: ["garden furniture"],
152
+ conditions: ["Subject to survey"],
153
+ };
154
+
155
+ const isValid = validator(validOffer);
156
+ expect(isValid).toBe(true);
157
+ });
158
+
159
+ test("validator accepts offer data without status (no required fields in schema)", () => {
160
+ const path = "/offers/offer-789";
161
+ const validator = getSubschemaValidator(path, schemaId);
162
+
163
+ const offer = {
164
+ amount: 400000,
165
+ currency: "GBP",
166
+ };
167
+
168
+ const isValid = validator(offer);
169
+ expect(isValid).toBe(true);
170
+ });
171
+
172
+ test("validator correctly rejects invalid offer data - negative amount", () => {
173
+ const path = "/offers/offer-999";
174
+ const validator = getSubschemaValidator(path, schemaId);
175
+
176
+ const invalidOffer = {
177
+ amount: -100000,
178
+ currency: "GBP",
179
+ status: "Pending",
180
+ };
181
+
182
+ const isValid = validator(invalidOffer);
183
+ expect(isValid).toBe(false);
184
+ expect(validator.errors.some((e) => e.keyword === "minimum")).toBe(true);
185
+ });
186
+
187
+ test("validator correctly rejects invalid offer data - invalid status", () => {
188
+ const path = "/offers/offer-abc";
189
+ const validator = getSubschemaValidator(path, schemaId);
190
+
191
+ const invalidOffer = {
192
+ amount: 250000,
193
+ currency: "GBP",
194
+ status: "invalid-status",
195
+ };
196
+
197
+ const isValid = validator(invalidOffer);
198
+ expect(isValid).toBe(false);
199
+ expect(validator.errors.some((e) => e.keyword === "enum")).toBe(true);
200
+ });
201
+
202
+ test("validator for nested path works correctly", () => {
203
+ const path = "/offers/offer-nested/amount";
204
+ const validator = getSubschemaValidator(path, schemaId);
205
+
206
+ expect(validator(500000)).toBe(true);
207
+ expect(validator(0)).toBe(true);
208
+ expect(validator(-1)).toBe(false);
209
+ expect(validator("not a number")).toBe(false);
210
+ });
211
+ });
212
+
213
+ describe("validateVerifiedClaims with patternProperties paths", () => {
214
+ test("accepts valid claim with patternProperties path", () => {
215
+ const claim = {
216
+ timestamp: 1643115903108,
217
+ verification: {
218
+ trust_framework: "uk_pdtf",
219
+ time: "2025-01-15T12:00:00Z",
220
+ },
221
+ claims: {
222
+ "/offers/offer-001": {
223
+ amount: 500000,
224
+ currency: "GBP",
225
+ status: "Pending",
226
+ },
227
+ },
228
+ };
229
+
230
+ const errors = validateVerifiedClaims([claim], schemaId);
231
+ expect(errors).toHaveLength(0);
232
+ });
233
+
234
+ test("accepts valid claim with UUID offer ID", () => {
235
+ const claim = {
236
+ timestamp: 1643115903108,
237
+ verification: {
238
+ trust_framework: "uk_pdtf",
239
+ time: "2025-01-15T12:00:00Z",
240
+ },
241
+ claims: {
242
+ "/offers/1sorzJCFHbWVlHA2tYXA": {
243
+ amount: 750000,
244
+ currency: "GBP",
245
+ status: "Accepted",
246
+ },
247
+ },
248
+ };
249
+
250
+ const errors = validateVerifiedClaims([claim], schemaId);
251
+ expect(errors).toHaveLength(0);
252
+ });
253
+
254
+ test("accepts valid claim with DID format offer ID", () => {
255
+ const claim = {
256
+ timestamp: 1643115903108,
257
+ verification: {
258
+ trust_framework: "uk_pdtf",
259
+ time: "2025-01-15T12:00:00Z",
260
+ },
261
+ claims: {
262
+ "/offers/did:example:buyer123": {
263
+ amount: 600000,
264
+ currency: "EUR",
265
+ status: "Note of Interest",
266
+ },
267
+ },
268
+ };
269
+
270
+ const errors = validateVerifiedClaims([claim], schemaId);
271
+ expect(errors).toHaveLength(0);
272
+ });
273
+
274
+ test("accepts valid claim with nested patternProperties path", () => {
275
+ const claim = {
276
+ timestamp: 1643115903108,
277
+ verification: {
278
+ trust_framework: "uk_pdtf",
279
+ time: "2025-01-15T12:00:00Z",
280
+ },
281
+ claims: {
282
+ "/offers/offer-002/amount": 450000,
283
+ },
284
+ };
285
+
286
+ const errors = validateVerifiedClaims([claim], schemaId);
287
+ expect(errors).toHaveLength(0);
288
+ });
289
+
290
+ test("accepts claim with all optional offer fields", () => {
291
+ const claim = {
292
+ timestamp: 1643115903108,
293
+ verification: {
294
+ trust_framework: "uk_pdtf",
295
+ time: "2025-01-15T12:00:00Z",
296
+ },
297
+ claims: {
298
+ "/offers/offer-complete": {
299
+ amount: 550000,
300
+ currency: "GBP",
301
+ status: "Accepted",
302
+ inclusions: ["carpets", "curtains", "light fixtures"],
303
+ exclusions: ["garden shed"],
304
+ conditions: ["Subject to survey", "Subject to mortgage approval"],
305
+ },
306
+ },
307
+ };
308
+
309
+ const errors = validateVerifiedClaims([claim], schemaId);
310
+ expect(errors).toHaveLength(0);
311
+ });
312
+
313
+ test("accepts claim with offer data without status (no required fields in schema)", () => {
314
+ const claim = {
315
+ timestamp: 1643115903108,
316
+ verification: {
317
+ trust_framework: "uk_pdtf",
318
+ time: "2025-01-15T12:00:00Z",
319
+ },
320
+ claims: {
321
+ "/offers/offer-no-status": {
322
+ amount: 500000,
323
+ currency: "GBP",
324
+ },
325
+ },
326
+ };
327
+
328
+ const errors = validateVerifiedClaims([claim], schemaId);
329
+ expect(errors).toHaveLength(0);
330
+ });
331
+
332
+ test("rejects claim with invalid offer data - negative amount", () => {
333
+ const claim = {
334
+ timestamp: 1643115903108,
335
+ verification: {
336
+ trust_framework: "uk_pdtf",
337
+ time: "2025-01-15T12:00:00Z",
338
+ },
339
+ claims: {
340
+ "/offers/offer-negative": {
341
+ amount: -100000,
342
+ currency: "GBP",
343
+ status: "Pending",
344
+ },
345
+ },
346
+ };
347
+
348
+ const errors = validateVerifiedClaims([claim], schemaId);
349
+ expect(errors.length).toBeGreaterThan(0);
350
+ });
351
+
352
+ test("rejects claim with invalid offer data - invalid status enum", () => {
353
+ const claim = {
354
+ timestamp: 1643115903108,
355
+ verification: {
356
+ trust_framework: "uk_pdtf",
357
+ time: "2025-01-15T12:00:00Z",
358
+ },
359
+ claims: {
360
+ "/offers/offer-bad-status": {
361
+ amount: 500000,
362
+ currency: "GBP",
363
+ status: "completed", // not a valid enum value
364
+ },
365
+ },
366
+ };
367
+
368
+ const errors = validateVerifiedClaims([claim], schemaId);
369
+ expect(errors.length).toBeGreaterThan(0);
370
+ });
371
+
372
+ test("rejects claim with invalid offer data - invalid currency format", () => {
373
+ const claim = {
374
+ timestamp: 1643115903108,
375
+ verification: {
376
+ trust_framework: "uk_pdtf",
377
+ time: "2025-01-15T12:00:00Z",
378
+ },
379
+ claims: {
380
+ "/offers/offer-bad-currency": {
381
+ amount: 500000,
382
+ currency: "gbp", // should be uppercase
383
+ status: "Pending",
384
+ },
385
+ },
386
+ };
387
+
388
+ const errors = validateVerifiedClaims([claim], schemaId);
389
+ expect(errors.length).toBeGreaterThan(0);
390
+ });
391
+
392
+ test("accepts multiple claims with different patternProperties paths", () => {
393
+ const claims = [
394
+ {
395
+ timestamp: 1643115903108,
396
+ verification: {
397
+ trust_framework: "uk_pdtf",
398
+ time: "2025-01-15T12:00:00Z",
399
+ },
400
+ claims: {
401
+ "/offers/offer-1": {
402
+ amount: 500000,
403
+ currency: "GBP",
404
+ status: "Pending",
405
+ },
406
+ },
407
+ },
408
+ {
409
+ timestamp: 1643115903109,
410
+ verification: {
411
+ trust_framework: "uk_pdtf",
412
+ time: "2025-01-15T12:01:00Z",
413
+ },
414
+ claims: {
415
+ "/offers/offer-2": {
416
+ amount: 520000,
417
+ currency: "GBP",
418
+ status: "Accepted",
419
+ },
420
+ },
421
+ },
422
+ ];
423
+
424
+ const errors = validateVerifiedClaims(claims, schemaId);
425
+ expect(errors).toHaveLength(0);
426
+ });
427
+
428
+ test("accepts claim with multiple patternProperties paths", () => {
429
+ const claim = {
430
+ timestamp: 1643115903108,
431
+ verification: {
432
+ trust_framework: "uk_pdtf",
433
+ time: "2025-01-15T12:00:00Z",
434
+ },
435
+ claims: {
436
+ "/offers/offer-1": {
437
+ amount: 500000,
438
+ currency: "GBP",
439
+ status: "Pending",
440
+ },
441
+ "/offers/offer-2": {
442
+ amount: 510000,
443
+ currency: "GBP",
444
+ status: "Withdrawn",
445
+ },
446
+ "/offers/offer-3/status": "Rejected",
447
+ },
448
+ };
449
+
450
+ const errors = validateVerifiedClaims([claim], schemaId);
451
+ expect(errors).toHaveLength(0);
452
+ });
453
+
454
+ test("rejects claim for non-existent nested property in patternProperties", () => {
455
+ const claim = {
456
+ timestamp: 1643115903108,
457
+ verification: {
458
+ trust_framework: "uk_pdtf",
459
+ time: "2025-01-15T12:00:00Z",
460
+ },
461
+ claims: {
462
+ "/offers/offer-1/nonExistentField": "some value",
463
+ },
464
+ };
465
+
466
+ const errors = validateVerifiedClaims([claim], schemaId);
467
+ expect(errors.length).toBeGreaterThan(0);
468
+ expect(errors.some((e) => e.includes("not a valid PDTF schema path"))).toBe(
469
+ true
470
+ );
471
+ });
472
+ });
473
+
474
+ describe("precedence: explicit properties over patternProperties", () => {
475
+ // This test documents the expected behavior that explicit properties
476
+ // should take precedence over patternProperties matches
477
+ test("explicit property should match before patternProperties", () => {
478
+ // If offers had an explicit property called "special" and also had
479
+ // patternProperties that would match "special", the explicit property
480
+ // should win. This is standard JSON Schema behavior.
481
+
482
+ // Since our current schema doesn't have this scenario, this test
483
+ // documents the expected behavior for future schema changes
484
+ expect(true).toBe(true);
485
+ });
486
+ });
487
+
488
+ describe("caching with patternProperties paths", () => {
489
+ test("caches subschema for patternProperties paths", () => {
490
+ const path = "/offers/cached-offer-123";
491
+
492
+ // First call - cache miss
493
+ const subschema1 = getSubschema(path, schemaId);
494
+ expect(subschema1).toBeDefined();
495
+
496
+ // Second call - should hit cache
497
+ const subschema2 = getSubschema(path, schemaId);
498
+ expect(subschema2).toBeDefined();
499
+ expect(subschema2).toEqual(subschema1);
500
+ });
501
+
502
+ test("caches validator for patternProperties paths", () => {
503
+ const path = "/offers/cached-offer-456";
504
+
505
+ // First call - cache miss
506
+ const validator1 = getSubschemaValidator(path, schemaId);
507
+ expect(validator1).toBeDefined();
508
+
509
+ // Second call - should hit cache
510
+ const validator2 = getSubschemaValidator(path, schemaId);
511
+ expect(validator2).toBeDefined();
512
+
513
+ // Should be the same validator function
514
+ expect(validator2).toBe(validator1);
515
+ });
516
+
517
+ test("different patternProperties paths get separate cache entries", () => {
518
+ const path1 = "/offers/offer-aaa";
519
+ const path2 = "/offers/offer-bbb";
520
+
521
+ const validator1 = getSubschemaValidator(path1, schemaId);
522
+ const validator2 = getSubschemaValidator(path2, schemaId);
523
+
524
+ // Both should work but point to same schema (since they match same pattern)
525
+ expect(validator1).toBeDefined();
526
+ expect(validator2).toBeDefined();
527
+
528
+ // They should be the same since they resolve to the same schema
529
+ expect(validator1).toBe(validator2);
530
+ });
531
+ });
532
+
533
+ describe("externalIds patternProperties paths", () => {
534
+ test("accepts claim for /externalIds with a nested key path", () => {
535
+ const claim = {
536
+ timestamp: 1643115903108,
537
+ verification: {
538
+ trust_framework: "uk_pdtf",
539
+ time: "2025-01-15T12:00:00Z",
540
+ },
541
+ claims: {
542
+ "/externalIds/nptn/selectedQuoteId": "12345577",
543
+ },
544
+ };
545
+
546
+ const errors = validateVerifiedClaims([claim], schemaId);
547
+ expect(errors).toHaveLength(0);
548
+ });
549
+
550
+ test("accepts claim for /externalIds with a simple string value", () => {
551
+ const claim = {
552
+ timestamp: 1643115903108,
553
+ verification: {
554
+ trust_framework: "uk_pdtf",
555
+ time: "2025-01-15T12:00:00Z",
556
+ },
557
+ claims: {
558
+ "/externalIds/lms": "abc-123",
559
+ },
560
+ };
561
+
562
+ const errors = validateVerifiedClaims([claim], schemaId);
563
+ expect(errors).toHaveLength(0);
564
+ });
565
+
566
+ test("accepts claim for /externalIds with a numeric value", () => {
567
+ const claim = {
568
+ timestamp: 1643115903108,
569
+ verification: {
570
+ trust_framework: "uk_pdtf",
571
+ time: "2025-01-15T12:00:00Z",
572
+ },
573
+ claims: {
574
+ "/externalIds/systemRef": 98765,
575
+ },
576
+ };
577
+
578
+ const errors = validateVerifiedClaims([claim], schemaId);
579
+ expect(errors).toHaveLength(0);
580
+ });
581
+
582
+ test("accepts claim for /externalIds with a boolean value", () => {
583
+ const claim = {
584
+ timestamp: 1643115903108,
585
+ verification: {
586
+ trust_framework: "uk_pdtf",
587
+ time: "2025-01-15T12:00:00Z",
588
+ },
589
+ claims: {
590
+ "/externalIds/isActive": true,
591
+ },
592
+ };
593
+
594
+ const errors = validateVerifiedClaims([claim], schemaId);
595
+ expect(errors).toHaveLength(0);
596
+ });
597
+
598
+ test("accepts claim for /externalIds with an object value", () => {
599
+ const claim = {
600
+ timestamp: 1643115903108,
601
+ verification: {
602
+ trust_framework: "uk_pdtf",
603
+ time: "2025-01-15T12:00:00Z",
604
+ },
605
+ claims: {
606
+ "/externalIds/nptn": {
607
+ selectedQuoteId: "12345577",
608
+ caseRef: "CASE-001",
609
+ },
610
+ },
611
+ };
612
+
613
+ const errors = validateVerifiedClaims([claim], schemaId);
614
+ expect(errors).toHaveLength(0);
615
+ });
616
+
617
+ test("accepts claim with multiple externalIds paths in same claim", () => {
618
+ const claim = {
619
+ timestamp: 1643115903108,
620
+ verification: {
621
+ trust_framework: "uk_pdtf",
622
+ time: "2025-01-15T12:00:00Z",
623
+ },
624
+ claims: {
625
+ "/externalIds/nptn/selectedQuoteId": "12345577",
626
+ "/externalIds/lms": "LMS-REF-001",
627
+ },
628
+ };
629
+
630
+ const errors = validateVerifiedClaims([claim], schemaId);
631
+ expect(errors).toHaveLength(0);
632
+ });
633
+
634
+ test("accepts claim for /externalIds root object", () => {
635
+ const claim = {
636
+ timestamp: 1643115903108,
637
+ verification: {
638
+ trust_framework: "uk_pdtf",
639
+ time: "2025-01-15T12:00:00Z",
640
+ },
641
+ claims: {
642
+ "/externalIds": {
643
+ nptn: {
644
+ selectedQuoteId: "12345577",
645
+ },
646
+ lms: "LMS-REF-001",
647
+ },
648
+ },
649
+ };
650
+
651
+ const errors = validateVerifiedClaims([claim], schemaId);
652
+ expect(errors).toHaveLength(0);
653
+ });
654
+ });
655
+
656
+ describe("edge cases", () => {
657
+ test("handles offer ID with dots", () => {
658
+ const path = "/offers/offer.123.abc";
659
+ const isValid = isPathValid(path, schemaId);
660
+ expect(isValid).toBe(true);
661
+ });
662
+
663
+ test("handles offer ID with underscores", () => {
664
+ const path = "/offers/offer_123_abc";
665
+ const isValid = isPathValid(path, schemaId);
666
+ expect(isValid).toBe(true);
667
+ });
668
+
669
+ test("handles offer ID with colons (DID format)", () => {
670
+ const path = "/offers/did:web:example.com:users:alice";
671
+ const isValid = isPathValid(path, schemaId);
672
+ expect(isValid).toBe(true);
673
+ });
674
+
675
+ test("handles offer ID with plus signs", () => {
676
+ const path = "/offers/offer+123";
677
+ const isValid = isPathValid(path, schemaId);
678
+ expect(isValid).toBe(true);
679
+ });
680
+
681
+ test("handles very long offer ID", () => {
682
+ const longId = "a".repeat(100);
683
+ const path = `/offers/${longId}`;
684
+ const isValid = isPathValid(path, schemaId);
685
+ expect(isValid).toBe(true);
686
+ });
687
+ });
688
+ });