@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.
- package/charming-napier-57a77c/LICENSE +21 -0
- package/charming-napier-57a77c/README.md +430 -0
- package/charming-napier-57a77c/docs/sef25-extensions-ui-spec.md +355 -0
- package/charming-napier-57a77c/index.js +654 -0
- package/charming-napier-57a77c/package-lock.json +7297 -0
- package/charming-napier-57a77c/package.json +41 -0
- package/charming-napier-57a77c/src/examples/v1/exampleAddParticipantVouch.json +32 -0
- package/charming-napier-57a77c/src/examples/v1/exampleDocumentedVouch.json +40 -0
- package/charming-napier-57a77c/src/examples/v1/exampleElectronicRecord.json +30 -0
- package/charming-napier-57a77c/src/examples/v1/exampleTransaction.json +878 -0
- package/charming-napier-57a77c/src/examples/v1/exampleVouch.json +25 -0
- package/charming-napier-57a77c/src/examples/v2/exampleTransaction.json +901 -0
- package/charming-napier-57a77c/src/examples/v3/exampleAddParticipantVouch.json +38 -0
- package/charming-napier-57a77c/src/examples/v3/exampleCustomOverlay.json +55 -0
- package/charming-napier-57a77c/src/examples/v3/exampleCustomOverlay2.json +93 -0
- package/charming-napier-57a77c/src/examples/v3/exampleDocumentedVouch.json +47 -0
- package/charming-napier-57a77c/src/examples/v3/exampleElectronicRecord.json +36 -0
- package/charming-napier-57a77c/src/examples/v3/exampleTransaction.json +1038 -0
- package/charming-napier-57a77c/src/examples/v3/exampleVouch.json +32 -0
- package/charming-napier-57a77c/src/mappings/SendPropertyDetailsRequestSchema.json +1588 -0
- package/charming-napier-57a77c/src/mappings/adf.js +198 -0
- package/charming-napier-57a77c/src/schemas/v1/GeoJSON.json +1279 -0
- package/charming-napier-57a77c/src/schemas/v1/baspiNotes.html +102 -0
- package/charming-napier-57a77c/src/schemas/v1/energy-performance-certificate.json +124 -0
- package/charming-napier-57a77c/src/schemas/v1/freehold-information.json +2051 -0
- package/charming-napier-57a77c/src/schemas/v1/leasehold-information.json +2064 -0
- package/charming-napier-57a77c/src/schemas/v1/legal-information.json +1045 -0
- package/charming-napier-57a77c/src/schemas/v1/material-facts.json +2109 -0
- package/charming-napier-57a77c/src/schemas/v1/pdtf-transaction-search-results.json +40 -0
- package/charming-napier-57a77c/src/schemas/v1/pdtf-transaction.json +191 -0
- package/charming-napier-57a77c/src/schemas/v1/searches/drainage-and-water.json +261 -0
- package/charming-napier-57a77c/src/schemas/v1/searches/local-land-charges.json +69 -0
- package/charming-napier-57a77c/src/schemas/v1/searches/local-searches-required.json +857 -0
- package/charming-napier-57a77c/src/schemas/v1/searches.json +237 -0
- package/charming-napier-57a77c/src/schemas/v1/title-deed.json +841 -0
- package/charming-napier-57a77c/src/schemas/v2/baspiNotes.html +102 -0
- package/charming-napier-57a77c/src/schemas/v2/combined.json +37731 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/baspi.json +8132 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/con29DW.json +705 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/con29R.json +2956 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/fme1.json +1259 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/llc1.json +25 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/lpe1.json +2171 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/nts.json +326 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/oc1.json +2799 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/piq.json +3419 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/rds.json +3736 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/ta10.json +5306 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/ta6.json +4533 -0
- package/charming-napier-57a77c/src/schemas/v2/overlays/ta7.json +1045 -0
- package/charming-napier-57a77c/src/schemas/v2/pdtf-transaction.json +34351 -0
- package/charming-napier-57a77c/src/schemas/v2/skeleton.json +3973 -0
- package/charming-napier-57a77c/src/schemas/v3/combined.json +48153 -0
- package/charming-napier-57a77c/src/schemas/v3/compactSkeleton.txt +4457 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/README.md +299 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/baspi4.json +8027 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/baspi5.json +8177 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/con29DW.json +716 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/con29R.json +2981 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ac.json +333 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/as.json +74 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/dk.json +32 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/dr.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/er.json +85 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/fd.json +75 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/hi.json +51 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/hs.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ic.json +59 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/jk.json +96 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/la.json +85 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/lc.json +75 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ma.json +90 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/mc.json +38 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/mi.json +69 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/nd.json +43 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/oa.json +24 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/oc.json +57 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/pc.json +37 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ph.json +194 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/rw.json +68 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sb.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sc.json +129 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sd.json +63 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sf.json +74 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/sl.json +68 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/ta.json +240 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/tf.json +103 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/tr.json +73 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/extensions/wg.json +350 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/fme1.json +1266 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/llc1.json +25 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/lpe1.json +2199 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/nts.json +2157 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/nts2.json +2742 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ntsl.json +1813 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ntsl2.json +2217 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/oc1.json +2817 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/piq.json +3321 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/rds.json +3665 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/sef25.json +1639 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/sr24.json +38 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta10.json +4654 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta6.json +4568 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta6ed6.json +6537 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta7.json +1537 -0
- package/charming-napier-57a77c/src/schemas/v3/overlays/ta7ed5.json +1551 -0
- package/charming-napier-57a77c/src/schemas/v3/pdtf-transaction.json +41229 -0
- package/charming-napier-57a77c/src/schemas/v3/skeleton.json +5703 -0
- package/charming-napier-57a77c/src/schemas/verifiedClaims/README.md +21 -0
- package/charming-napier-57a77c/src/schemas/verifiedClaims/pdtf-verified-claims.json +447 -0
- package/charming-napier-57a77c/src/tests/v3/buyerCircumstances.test.js +543 -0
- package/charming-napier-57a77c/src/tests/v3/caching.test.js +591 -0
- package/charming-napier-57a77c/src/tests/v3/enquiries.test.js +1096 -0
- package/charming-napier-57a77c/src/tests/v3/extensionOverlays.test.js +1599 -0
- package/charming-napier-57a77c/src/tests/v3/offers.test.js +823 -0
- package/charming-napier-57a77c/src/tests/v3/patternProperties.test.js +688 -0
- package/charming-napier-57a77c/src/tests/v3/ta6ed6.test.js +2374 -0
- package/charming-napier-57a77c/src/tests/v3/ta7ed5.test.js +600 -0
- package/charming-napier-57a77c/src/tests/v3/transactionSchema.test.js +646 -0
- package/charming-napier-57a77c/src/tests/v3/verifiedClaimsValidator.test.js +195 -0
- package/charming-napier-57a77c/src/utils/compactSkeleton.js +84 -0
- package/charming-napier-57a77c/src/utils/countTokens.js +67 -0
- package/charming-napier-57a77c/src/utils/extractExtensionOverlays.js +624 -0
- package/charming-napier-57a77c/src/utils/extractOverlay.js +381 -0
- package/charming-napier-57a77c/src/utils/extractProperties.js +44 -0
- package/charming-napier-57a77c/src/utils/listPathTitles.js +36 -0
- package/charming-napier-57a77c/src/utils/minimalSkeleton.js +85 -0
- package/charming-napier-57a77c/src/utils/pathList.csv +903 -0
- package/charming-napier-57a77c/src/utils/pathSkeleton.js +181 -0
- package/keen-dewdney-6ae15b/LICENSE +21 -0
- package/keen-dewdney-6ae15b/README.md +334 -0
- package/keen-dewdney-6ae15b/index.js +557 -0
- package/keen-dewdney-6ae15b/package-lock.json +7296 -0
- package/keen-dewdney-6ae15b/package.json +39 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleAddParticipantVouch.json +32 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleDocumentedVouch.json +40 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleElectronicRecord.json +30 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleTransaction.json +878 -0
- package/keen-dewdney-6ae15b/src/examples/v1/exampleVouch.json +25 -0
- package/keen-dewdney-6ae15b/src/examples/v2/exampleTransaction.json +901 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleAddParticipantVouch.json +35 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleCustomOverlay.json +55 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleCustomOverlay2.json +93 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleDocumentedVouch.json +44 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleElectronicRecord.json +33 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleTransaction.json +1034 -0
- package/keen-dewdney-6ae15b/src/examples/v3/exampleVouch.json +29 -0
- package/keen-dewdney-6ae15b/src/mappings/SendPropertyDetailsRequestSchema.json +1588 -0
- package/keen-dewdney-6ae15b/src/mappings/adf.js +198 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/GeoJSON.json +1279 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/baspiNotes.html +102 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/energy-performance-certificate.json +124 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/freehold-information.json +2051 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/leasehold-information.json +2064 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/legal-information.json +1045 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/material-facts.json +2109 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/pdtf-transaction-search-results.json +40 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/pdtf-transaction.json +191 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches/drainage-and-water.json +261 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches/local-land-charges.json +69 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches/local-searches-required.json +857 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/searches.json +237 -0
- package/keen-dewdney-6ae15b/src/schemas/v1/title-deed.json +841 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/baspiNotes.html +102 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/combined.json +37731 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/baspi.json +8132 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/con29DW.json +705 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/con29R.json +2956 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/fme1.json +1259 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/llc1.json +25 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/lpe1.json +2171 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/nts.json +326 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/oc1.json +2799 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/piq.json +3419 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/rds.json +3736 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta10.json +5306 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta6.json +4533 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/overlays/ta7.json +1045 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/pdtf-transaction.json +34351 -0
- package/keen-dewdney-6ae15b/src/schemas/v2/skeleton.json +3973 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/combined.json +41720 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/compactSkeleton.txt +3325 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/README.md +299 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/baspi4.json +7872 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/baspi5.json +8019 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/con29DW.json +716 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/con29R.json +2981 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/as.json +72 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/dr.json +73 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/er.json +83 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/fd.json +72 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/hi.json +48 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/hs.json +71 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/jk.json +76 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/la.json +83 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/ma.json +87 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/mc.json +36 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/oa.json +22 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/oc.json +55 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sb.json +71 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sf.json +72 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/sl.json +66 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/extensions/tf.json +100 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/fme1.json +1264 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/llc1.json +25 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/lpe1.json +2226 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/nts.json +2090 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/nts2.json +2678 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ntsl.json +1746 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ntsl2.json +2153 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/oc1.json +2817 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/piq.json +3276 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/rds.json +3552 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/sr24.json +38 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta10.json +4642 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta6.json +4501 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/overlays/ta7.json +1435 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/pdtf-transaction.json +37225 -0
- package/keen-dewdney-6ae15b/src/schemas/v3/skeleton.json +4323 -0
- package/keen-dewdney-6ae15b/src/schemas/verifiedClaims/README.md +12 -0
- package/keen-dewdney-6ae15b/src/schemas/verifiedClaims/pdtf-verified-claims.json +431 -0
- package/keen-dewdney-6ae15b/src/tests/v3/caching.test.js +591 -0
- package/keen-dewdney-6ae15b/src/tests/v3/extensionOverlays.test.js +525 -0
- package/keen-dewdney-6ae15b/src/tests/v3/transactionSchema.test.js +574 -0
- package/keen-dewdney-6ae15b/src/tests/v3/verifiedClaimsValidator.test.js +128 -0
- package/keen-dewdney-6ae15b/src/utils/compactSkeleton.js +84 -0
- package/keen-dewdney-6ae15b/src/utils/countTokens.js +67 -0
- package/keen-dewdney-6ae15b/src/utils/extractExtensionOverlays.js +362 -0
- package/keen-dewdney-6ae15b/src/utils/extractOverlay.js +290 -0
- package/keen-dewdney-6ae15b/src/utils/extractProperties.js +44 -0
- package/keen-dewdney-6ae15b/src/utils/listPathTitles.js +36 -0
- package/keen-dewdney-6ae15b/src/utils/minimalSkeleton.js +85 -0
- package/keen-dewdney-6ae15b/src/utils/pathList.csv +903 -0
- package/keen-dewdney-6ae15b/src/utils/pathSkeleton.js +181 -0
- package/package.json +1 -1
- package/src/schemas/v3/combined.json +8 -15
- package/src/schemas/v3/overlays/baspi4.json +12 -7
- package/src/schemas/v3/overlays/baspi5.json +12 -7
- package/src/schemas/v3/overlays/extensions/ac.json +2 -1
- package/src/schemas/v3/overlays/extensions/dk.json +3 -2
- package/src/schemas/v3/overlays/extensions/ic.json +2 -1
- package/src/schemas/v3/overlays/extensions/lc.json +3 -2
- package/src/schemas/v3/overlays/extensions/mi.json +2 -1
- package/src/schemas/v3/overlays/extensions/nd.json +3 -2
- package/src/schemas/v3/overlays/extensions/pc.json +3 -2
- package/src/schemas/v3/overlays/extensions/ph.json +2 -1
- package/src/schemas/v3/overlays/extensions/rw.json +4 -3
- package/src/schemas/v3/overlays/extensions/sc.json +8 -4
- package/src/schemas/v3/overlays/extensions/sd.json +3 -2
- package/src/schemas/v3/overlays/extensions/tr.json +3 -2
- package/src/schemas/v3/overlays/extensions/wg.json +2 -1
- package/src/schemas/v3/overlays/lpe1.json +1 -1
- package/src/schemas/v3/overlays/nts.json +3 -1
- package/src/schemas/v3/overlays/nts2.json +3 -1
- package/src/schemas/v3/overlays/ntsl.json +3 -1
- package/src/schemas/v3/overlays/ntsl2.json +3 -1
- package/src/schemas/v3/overlays/piq.json +7 -5
- package/src/schemas/v3/overlays/rds.json +9 -6
- package/src/schemas/v3/overlays/ta10.json +0 -9
- package/src/schemas/v3/overlays/ta6.json +8 -4
- package/src/schemas/v3/overlays/ta6ed6.json +4 -2
- package/src/schemas/v3/pdtf-transaction.json +15 -18
- package/src/utils/extractExtensionOverlays.js +10 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
|
|
3
|
+
// Read the current skeleton
|
|
4
|
+
const skeleton = require("../schemas/v3/skeleton.json");
|
|
5
|
+
|
|
6
|
+
// Convert to ultra-compact format
|
|
7
|
+
const toCompact = (obj, indent = "") => {
|
|
8
|
+
if (typeof obj === "string") {
|
|
9
|
+
// Type indicators
|
|
10
|
+
if (["string", "number", "integer", "boolean", "variant"].includes(obj)) {
|
|
11
|
+
return obj[0]; // Just first letter: s, n, i, b, v
|
|
12
|
+
}
|
|
13
|
+
return obj;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (Array.isArray(obj)) {
|
|
17
|
+
if (obj.length === 0) return "[]";
|
|
18
|
+
// Array with content
|
|
19
|
+
const inner = toCompact(obj[0], indent + " ");
|
|
20
|
+
if (typeof inner === "string" && inner.length === 1) {
|
|
21
|
+
return `[${inner}]`; // Simple array like [s]
|
|
22
|
+
}
|
|
23
|
+
return `[\n${indent} ${inner}\n${indent}]`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (obj && typeof obj === "object") {
|
|
27
|
+
const keys = Object.keys(obj);
|
|
28
|
+
if (keys.length === 0) return "{}";
|
|
29
|
+
|
|
30
|
+
// Check if it's a simple object with only type indicators
|
|
31
|
+
const allSimple = keys.every(k =>
|
|
32
|
+
typeof obj[k] === "string" &&
|
|
33
|
+
["s", "n", "i", "b", "v"].includes(toCompact(obj[k]))
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
if (allSimple && keys.length < 5) {
|
|
37
|
+
// Inline format: {a:s b:n c:s}
|
|
38
|
+
return `{${keys.map(k => `${k}:${toCompact(obj[k])}`).join(" ")}}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Multi-line format
|
|
42
|
+
const lines = keys.map(k => {
|
|
43
|
+
const val = toCompact(obj[k], indent + " ");
|
|
44
|
+
if (typeof val === "string" && val.length === 1) {
|
|
45
|
+
return `${indent} ${k}:${val}`;
|
|
46
|
+
} else if (typeof val === "string" && (val === "{}" || val === "[]")) {
|
|
47
|
+
return `${indent} ${k}${val}`;
|
|
48
|
+
} else if (typeof val === "string" && val.startsWith("{") && val.endsWith("}")) {
|
|
49
|
+
return `${indent} ${k}${val}`;
|
|
50
|
+
} else if (typeof val === "string" && val.startsWith("[") && !val.includes("\n")) {
|
|
51
|
+
return `${indent} ${k}${val}`;
|
|
52
|
+
} else {
|
|
53
|
+
return `${indent} ${k}:\n${indent} ${val}`;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
return `{\n${lines.join("\n")}\n${indent}}`;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return String(obj);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Generate ultra-compact version
|
|
64
|
+
const compact = toCompact(skeleton);
|
|
65
|
+
|
|
66
|
+
// Write compact version
|
|
67
|
+
fs.writeFileSync("../schemas/v3/compactSkeleton.txt", compact);
|
|
68
|
+
|
|
69
|
+
console.log("Compact skeleton written to ../schemas/v3/compactSkeleton.txt");
|
|
70
|
+
console.log(`Size: ${compact.length} bytes`);
|
|
71
|
+
|
|
72
|
+
// Count tokens
|
|
73
|
+
try {
|
|
74
|
+
const GPT3Encoder = require('gpt-3-encoder');
|
|
75
|
+
const encoded = GPT3Encoder.encode(compact);
|
|
76
|
+
console.log(`Tokens (GPT-3): ${encoded.length}`);
|
|
77
|
+
console.log(`Reduction: ${((1 - encoded.length / 78734) * 100).toFixed(1)}% fewer tokens than JSON skeleton`);
|
|
78
|
+
|
|
79
|
+
// Show sample
|
|
80
|
+
console.log("\nFirst 500 chars:");
|
|
81
|
+
console.log(compact.substring(0, 500));
|
|
82
|
+
} catch (e) {
|
|
83
|
+
console.log(`Estimated tokens: ~${Math.ceil(compact.length / 4)}`);
|
|
84
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
|
|
3
|
+
// Try to use tiktoken or a similar library
|
|
4
|
+
// For Claude/Anthropic models, we can estimate using the cl100k_base encoding
|
|
5
|
+
// which is similar to what Claude uses
|
|
6
|
+
|
|
7
|
+
// First, let's check what's available
|
|
8
|
+
try {
|
|
9
|
+
// Option 1: Use gpt-tokenizer (common npm package)
|
|
10
|
+
const { encode } = require('gpt-tokenizer');
|
|
11
|
+
|
|
12
|
+
const content = fs.readFileSync('../schemas/v3/skeleton.json', 'utf8');
|
|
13
|
+
const tokens = encode(content);
|
|
14
|
+
|
|
15
|
+
console.log(`Using gpt-tokenizer:`);
|
|
16
|
+
console.log(`Total tokens: ${tokens.length}`);
|
|
17
|
+
console.log(`File size: ${content.length} characters`);
|
|
18
|
+
console.log(`Ratio: ${(content.length / tokens.length).toFixed(2)} characters per token`);
|
|
19
|
+
|
|
20
|
+
} catch (e1) {
|
|
21
|
+
console.log("gpt-tokenizer not found, trying gpt-3-encoder...");
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
// Option 2: Use gpt-3-encoder
|
|
25
|
+
const GPT3Encoder = require('gpt-3-encoder');
|
|
26
|
+
|
|
27
|
+
const content = fs.readFileSync('../schemas/v3/skeleton.json', 'utf8');
|
|
28
|
+
const encoded = GPT3Encoder.encode(content);
|
|
29
|
+
|
|
30
|
+
console.log(`Using gpt-3-encoder:`);
|
|
31
|
+
console.log(`Total tokens: ${encoded.length}`);
|
|
32
|
+
console.log(`File size: ${content.length} characters`);
|
|
33
|
+
console.log(`Ratio: ${(content.length / encoded.length).toFixed(2)} characters per token`);
|
|
34
|
+
|
|
35
|
+
} catch (e2) {
|
|
36
|
+
console.log("No tokenizer library found. Falling back to estimation...");
|
|
37
|
+
|
|
38
|
+
// Option 3: Manual estimation
|
|
39
|
+
const content = fs.readFileSync('../schemas/v3/skeleton.json', 'utf8');
|
|
40
|
+
|
|
41
|
+
// Count different types of content for better estimation
|
|
42
|
+
const lines = content.split('\n');
|
|
43
|
+
const words = content.split(/\s+/);
|
|
44
|
+
const punctuation = content.match(/[{}:,\[\]"]/g) || [];
|
|
45
|
+
|
|
46
|
+
// Rough estimation:
|
|
47
|
+
// - JSON structure tokens (brackets, colons, quotes): ~1 token each
|
|
48
|
+
// - Words: ~1 token each
|
|
49
|
+
// - Whitespace: usually absorbed into adjacent tokens
|
|
50
|
+
|
|
51
|
+
const structureTokens = punctuation.length;
|
|
52
|
+
const wordTokens = words.length;
|
|
53
|
+
const estimatedTokens = Math.ceil((structureTokens + wordTokens) * 0.75); // 0.75 factor for overlap
|
|
54
|
+
|
|
55
|
+
console.log("Manual estimation:");
|
|
56
|
+
console.log(`File size: ${content.length} characters`);
|
|
57
|
+
console.log(`Lines: ${lines.length}`);
|
|
58
|
+
console.log(`Words: ${words.length}`);
|
|
59
|
+
console.log(`JSON punctuation: ${punctuation.length}`);
|
|
60
|
+
console.log(`Estimated tokens: ~${estimatedTokens}`);
|
|
61
|
+
console.log(`Ratio: ${(content.length / estimatedTokens).toFixed(2)} characters per token`);
|
|
62
|
+
|
|
63
|
+
// Also do a simple character-based estimation
|
|
64
|
+
const simpleEstimate = Math.ceil(content.length / 4);
|
|
65
|
+
console.log(`\nSimple estimation (chars/4): ~${simpleEstimate} tokens`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
const traverse = require("traverse");
|
|
2
|
+
const jp = require("jsonpointer");
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
const combinedSchema = require("../schemas/v3/combined.json");
|
|
7
|
+
|
|
8
|
+
// Define the extension overlay mappings
|
|
9
|
+
const extensionMappings = {
|
|
10
|
+
// Outside areas
|
|
11
|
+
oa: {
|
|
12
|
+
name: "outsideAreas",
|
|
13
|
+
description: "Outside areas extension for NTS",
|
|
14
|
+
paths: [
|
|
15
|
+
"/properties/propertyPack/properties/residentialPropertyFeatures/properties/outsideAreas",
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
// Estate rentcharges for freehold
|
|
20
|
+
er: {
|
|
21
|
+
name: "estateRentcharges",
|
|
22
|
+
description: "Estate rentcharges for freehold properties",
|
|
23
|
+
paths: [
|
|
24
|
+
"/properties/propertyPack/properties/ownership/properties/ownershipsToBeTransferred/items/oneOf/0/properties/estateRentcharges",
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// Managing agent contact details for leasehold
|
|
29
|
+
ma: {
|
|
30
|
+
name: "managingAgent",
|
|
31
|
+
description: "Managing agent contact details for leasehold",
|
|
32
|
+
paths: [
|
|
33
|
+
"/properties/propertyPack/properties/ownership/properties/ownershipsToBeTransferred/items/oneOf/2/properties/leaseholdInformation/properties/contactDetails",
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
// Transfer fees for leasehold
|
|
38
|
+
tf: {
|
|
39
|
+
name: "transferFees",
|
|
40
|
+
description: "Transfer fees for leasehold",
|
|
41
|
+
paths: [
|
|
42
|
+
"/properties/propertyPack/properties/ownership/properties/ownershipsToBeTransferred/items/oneOf/2/properties/leaseholdInformation/properties/serviceCharge/oneOf/1/properties/transferFees",
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
// Main construction type if standard
|
|
47
|
+
mc: {
|
|
48
|
+
name: "mainConstruction",
|
|
49
|
+
description: "Main construction type if standard form",
|
|
50
|
+
paths: [
|
|
51
|
+
"/properties/propertyPack/properties/typeOfConstruction/properties/isStandardForm/oneOf/0/properties/constructionType",
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
// Loft access and details
|
|
56
|
+
la: {
|
|
57
|
+
name: "loftAccess",
|
|
58
|
+
description: "Loft access and details",
|
|
59
|
+
paths: [
|
|
60
|
+
"/properties/propertyPack/properties/typeOfConstruction/properties/loft",
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
// Spray foam insulation
|
|
65
|
+
sf: {
|
|
66
|
+
name: "sprayFoam",
|
|
67
|
+
description: "Spray foam insulation",
|
|
68
|
+
paths: [
|
|
69
|
+
"/properties/propertyPack/properties/typeOfConstruction/properties/sprayFoamInsulation",
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
// Specialist issues - dry rot
|
|
74
|
+
dr: {
|
|
75
|
+
name: "dryRot",
|
|
76
|
+
description: "Dry rot treatment specialist issue",
|
|
77
|
+
paths: [
|
|
78
|
+
"/properties/propertyPack/properties/specialistIssues/properties/dryRotEtcTreatment",
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
// Specialist issues - asbestos
|
|
83
|
+
as: {
|
|
84
|
+
name: "asbestos",
|
|
85
|
+
description: "Asbestos specialist issue",
|
|
86
|
+
paths: [
|
|
87
|
+
"/properties/propertyPack/properties/specialistIssues/properties/containsAsbestos",
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
// Specialist issues - Japanese knotweed
|
|
92
|
+
jk: {
|
|
93
|
+
name: "japaneseKnotweed",
|
|
94
|
+
description: "Japanese knotweed specialist issue",
|
|
95
|
+
paths: [
|
|
96
|
+
"/properties/propertyPack/properties/specialistIssues/properties/japaneseKnotweed",
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
// Specialist issues - subsidence
|
|
101
|
+
sb: {
|
|
102
|
+
name: "subsidence",
|
|
103
|
+
description: "Subsidence or structural fault specialist issue",
|
|
104
|
+
paths: [
|
|
105
|
+
"/properties/propertyPack/properties/specialistIssues/properties/subsidenceOrStructuralFault",
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
// Specialist issues - health and safety
|
|
110
|
+
hs: {
|
|
111
|
+
name: "healthSafety",
|
|
112
|
+
description: "Health and safety specialist issue",
|
|
113
|
+
paths: [
|
|
114
|
+
"/properties/propertyPack/properties/specialistIssues/properties/ongoingHealthOrSafetyIssue",
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
// Solar panels leased
|
|
119
|
+
sl: {
|
|
120
|
+
name: "solarPanelsLeased",
|
|
121
|
+
description: "Solar panels ownership details",
|
|
122
|
+
paths: [
|
|
123
|
+
"/properties/propertyPack/properties/electricity/properties/solarPanels/oneOf/1/properties/panelsOwnedOutright",
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
// Heating installation date
|
|
128
|
+
hi: {
|
|
129
|
+
name: "heatingInstalled",
|
|
130
|
+
description: "Central heating installation date",
|
|
131
|
+
paths: [
|
|
132
|
+
"/properties/propertyPack/properties/heating/properties/heatingSystem/oneOf/1/properties/centralHeatingDetails/properties/centralHeatingInstalled",
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
// Flood defences
|
|
137
|
+
fd: {
|
|
138
|
+
name: "floodDefences",
|
|
139
|
+
description: "Flood defence information",
|
|
140
|
+
paths: [
|
|
141
|
+
"/properties/propertyPack/properties/environmentalIssues/properties/flooding/properties/floodDefences",
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
// Other property in chain
|
|
146
|
+
oc: {
|
|
147
|
+
name: "otherPropertyChain",
|
|
148
|
+
description: "Other property in chain dependency",
|
|
149
|
+
paths: [
|
|
150
|
+
"/properties/propertyPack/properties/completionAndMoving/properties/otherPropertyInChain",
|
|
151
|
+
],
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// Function to extract properties at specific paths with nts2Ref
|
|
156
|
+
function extractPathsWithNts2Ref(schema, paths) {
|
|
157
|
+
const result = {};
|
|
158
|
+
|
|
159
|
+
paths.forEach((path) => {
|
|
160
|
+
try {
|
|
161
|
+
const value = jp.get(schema, path);
|
|
162
|
+
if (value && hasNts2Ref(value)) {
|
|
163
|
+
// Set the value at the same path in result
|
|
164
|
+
jp.set(result, path, extractNts2Properties(value));
|
|
165
|
+
}
|
|
166
|
+
} catch (err) {
|
|
167
|
+
console.warn(`Path not found: ${path}`);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Check if an object or its descendants have nts2Ref
|
|
175
|
+
function hasNts2Ref(obj) {
|
|
176
|
+
let found = false;
|
|
177
|
+
traverse(obj).forEach(function (element) {
|
|
178
|
+
if (element && element.nts2Ref) {
|
|
179
|
+
found = true;
|
|
180
|
+
this.stop();
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
return found;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Extract only NTS2-specific properties (with nts2Ref)
|
|
187
|
+
function extractNts2Properties(obj, parentKey) {
|
|
188
|
+
const result = {};
|
|
189
|
+
|
|
190
|
+
// Copy nts2-specific metadata at current level
|
|
191
|
+
if (obj.nts2Ref) result.ntsRef = obj.nts2Ref;
|
|
192
|
+
if (obj.nts2Required) result.required = obj.nts2Required;
|
|
193
|
+
if (obj.nts2Title) result.title = obj.nts2Title;
|
|
194
|
+
if (obj.nts2Description) result.description = obj.nts2Description;
|
|
195
|
+
if (obj.nts2Enum) result.enum = obj.nts2Enum;
|
|
196
|
+
|
|
197
|
+
// Handle discriminator
|
|
198
|
+
if (obj.discriminator) {
|
|
199
|
+
result.discriminator = obj.discriminator;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Recursively process properties
|
|
203
|
+
if (obj.properties) {
|
|
204
|
+
result.properties = {};
|
|
205
|
+
Object.keys(obj.properties).forEach((key) => {
|
|
206
|
+
const prop = obj.properties[key];
|
|
207
|
+
if (hasNts2Ref(prop)) {
|
|
208
|
+
result.properties[key] = extractNts2Properties(prop, key);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
// Only keep properties if we found some with nts2Ref
|
|
212
|
+
if (Object.keys(result.properties).length === 0) {
|
|
213
|
+
delete result.properties;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Handle arrays
|
|
218
|
+
if (obj.items) {
|
|
219
|
+
if (hasNts2Ref(obj.items)) {
|
|
220
|
+
result.items = extractNts2Properties(obj.items);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Handle oneOf
|
|
225
|
+
if (obj.oneOf) {
|
|
226
|
+
// Always preserve the full array structure and order
|
|
227
|
+
const processedOneOf = obj.oneOf.map((schema, index) => {
|
|
228
|
+
if (hasNts2Ref(schema)) {
|
|
229
|
+
const extracted = extractNts2Properties(schema);
|
|
230
|
+
// For oneOf schemas, we need to preserve discriminator enum values
|
|
231
|
+
if (obj.discriminator && schema.properties) {
|
|
232
|
+
const propName = obj.discriminator.propertyName;
|
|
233
|
+
if (schema.properties[propName]) {
|
|
234
|
+
if (!extracted.properties) extracted.properties = {};
|
|
235
|
+
extracted.properties[propName] = {
|
|
236
|
+
enum:
|
|
237
|
+
schema.properties[propName].nts2Enum ||
|
|
238
|
+
schema.properties[propName].enum,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Also preserve base enum values for all other properties in the extension
|
|
243
|
+
if (schema.properties) {
|
|
244
|
+
if (!extracted.properties) extracted.properties = {};
|
|
245
|
+
Object.keys(schema.properties).forEach((propName) => {
|
|
246
|
+
const prop = schema.properties[propName];
|
|
247
|
+
if (prop.enum) {
|
|
248
|
+
if (!extracted.properties[propName]) {
|
|
249
|
+
extracted.properties[propName] = {
|
|
250
|
+
enum: prop.enum,
|
|
251
|
+
};
|
|
252
|
+
} else if (!extracted.properties[propName].enum) {
|
|
253
|
+
// If the property exists but doesn't have enum, add it
|
|
254
|
+
extracted.properties[propName].enum = prop.enum;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
return extracted;
|
|
260
|
+
} else {
|
|
261
|
+
// If this branch doesn't have nts2Ref, preserve the base discriminator enum
|
|
262
|
+
if (obj.discriminator && schema.properties) {
|
|
263
|
+
const propName = obj.discriminator.propertyName;
|
|
264
|
+
if (schema.properties[propName]) {
|
|
265
|
+
return {
|
|
266
|
+
properties: {
|
|
267
|
+
[propName]: {
|
|
268
|
+
enum: schema.properties[propName].enum,
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// If no discriminator, return empty object to preserve structure
|
|
275
|
+
return {};
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
result.oneOf = processedOneOf;
|
|
279
|
+
|
|
280
|
+
// --- NEW: If this is an extension property inside a oneOf, promote it to the parent overlay ---
|
|
281
|
+
// If parentKey is set, and this object has extension metadata, return a stub for the parent
|
|
282
|
+
if (
|
|
283
|
+
parentKey &&
|
|
284
|
+
(result.ntsRef || result.required || result.discriminator)
|
|
285
|
+
) {
|
|
286
|
+
// This is an extension property inside a oneOf branch
|
|
287
|
+
// Return a stub for the parent property with metadata and oneOf structure
|
|
288
|
+
const parentStub = {};
|
|
289
|
+
Object.assign(parentStub, result);
|
|
290
|
+
return parentStub;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Copy other JSON Schema keywords that might be present
|
|
295
|
+
[
|
|
296
|
+
"type",
|
|
297
|
+
"format",
|
|
298
|
+
"minimum",
|
|
299
|
+
"maximum",
|
|
300
|
+
"minLength",
|
|
301
|
+
"maxLength",
|
|
302
|
+
"minItems",
|
|
303
|
+
"maxItems",
|
|
304
|
+
].forEach((keyword) => {
|
|
305
|
+
if (obj[keyword] !== undefined) {
|
|
306
|
+
result[keyword] = obj[keyword];
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
return result;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Add required array at parent levels if needed
|
|
314
|
+
function addRequiredArrays(overlay, schema) {
|
|
315
|
+
traverse(overlay).forEach(function (node) {
|
|
316
|
+
if (node && node.properties) {
|
|
317
|
+
const schemaPath = "/" + this.path.join("/");
|
|
318
|
+
try {
|
|
319
|
+
const schemaNode = jp.get(schema, schemaPath);
|
|
320
|
+
if (schemaNode && schemaNode.nts2Required) {
|
|
321
|
+
// Filter to only include properties that exist in this overlay
|
|
322
|
+
const overlayProps = Object.keys(node.properties);
|
|
323
|
+
const requiredProps = schemaNode.nts2Required.filter((prop) =>
|
|
324
|
+
overlayProps.includes(prop)
|
|
325
|
+
);
|
|
326
|
+
if (requiredProps.length > 0) {
|
|
327
|
+
node.required = requiredProps;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
} catch (err) {
|
|
331
|
+
// Path doesn't exist in schema, skip
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
return overlay;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Generate extension overlays
|
|
339
|
+
Object.entries(extensionMappings).forEach(([code, config]) => {
|
|
340
|
+
console.log(`\nGenerating extension overlay: ${code} (${config.name})`);
|
|
341
|
+
|
|
342
|
+
// Extract the specific paths
|
|
343
|
+
let overlay = extractPathsWithNts2Ref(combinedSchema, config.paths);
|
|
344
|
+
|
|
345
|
+
// Add required arrays where needed
|
|
346
|
+
overlay = addRequiredArrays(overlay, combinedSchema);
|
|
347
|
+
|
|
348
|
+
// Add schema metadata
|
|
349
|
+
overlay.$schema = "http://json-schema.org/draft-07/schema#";
|
|
350
|
+
overlay.$id = `https://trust.propdata.org.uk/schemas/v3/overlays/extensions/${code}.json`;
|
|
351
|
+
overlay.$comment = config.description;
|
|
352
|
+
|
|
353
|
+
// Write the overlay file
|
|
354
|
+
const fileName = path.join(
|
|
355
|
+
__dirname,
|
|
356
|
+
`../schemas/v3/overlays/extensions/${code}.json`
|
|
357
|
+
);
|
|
358
|
+
fs.writeFileSync(fileName, JSON.stringify(overlay, null, 2));
|
|
359
|
+
console.log(`Extension overlay ${code} written to ${fileName}`);
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
console.log("\nExtension overlay extraction complete!");
|