@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,381 @@
|
|
|
1
|
+
const { dereference } = require("@jdw/jst");
|
|
2
|
+
const traverse = require("traverse");
|
|
3
|
+
const jp = require("jsonpointer");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const merge = require("deepmerge");
|
|
7
|
+
|
|
8
|
+
const combinedPath =
|
|
9
|
+
process.env.COMBINED_PATH ||
|
|
10
|
+
path.resolve(__dirname, "../schemas/v3/combined.json");
|
|
11
|
+
const outputDir =
|
|
12
|
+
process.env.OUTPUT_DIR ||
|
|
13
|
+
path.resolve(__dirname, "../schemas/v3");
|
|
14
|
+
|
|
15
|
+
if (!fs.existsSync(combinedPath)) {
|
|
16
|
+
throw new Error(`Combined schema not found: ${combinedPath}`);
|
|
17
|
+
}
|
|
18
|
+
if (!fs.existsSync(outputDir)) {
|
|
19
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const combinedSchema = JSON.parse(fs.readFileSync(combinedPath, "utf8"));
|
|
23
|
+
|
|
24
|
+
const extractFields = [
|
|
25
|
+
"baspi4",
|
|
26
|
+
"baspi5",
|
|
27
|
+
"nts",
|
|
28
|
+
"nts2",
|
|
29
|
+
"ntsl",
|
|
30
|
+
"ntsl2",
|
|
31
|
+
"ta6",
|
|
32
|
+
"ta6ed6",
|
|
33
|
+
"ta7",
|
|
34
|
+
"ta7ed5",
|
|
35
|
+
"ta10",
|
|
36
|
+
"lpe1",
|
|
37
|
+
"fme1",
|
|
38
|
+
"piq",
|
|
39
|
+
"con29R",
|
|
40
|
+
"con29DW",
|
|
41
|
+
"llc1",
|
|
42
|
+
"rds",
|
|
43
|
+
"oc1",
|
|
44
|
+
"sr24",
|
|
45
|
+
"sef25",
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const metadataFields = [...extractFields, "ta6ed6Compat"];
|
|
49
|
+
|
|
50
|
+
const flattenSkeleton = (schema) => {
|
|
51
|
+
if (!schema) return undefined;
|
|
52
|
+
|
|
53
|
+
// Handle arrays - mark with special notation
|
|
54
|
+
if (schema.type === "array" && schema.items) {
|
|
55
|
+
const itemSchema = flattenSkeleton(schema.items);
|
|
56
|
+
// Use array notation to indicate this is an array
|
|
57
|
+
return [itemSchema];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Handle patternProperties (dynamic keys like in offers and enquiries)
|
|
61
|
+
if (schema.type === "object" && schema.patternProperties) {
|
|
62
|
+
// Get the schema from the first pattern (usually ".*")
|
|
63
|
+
const patternKeys = Object.keys(schema.patternProperties);
|
|
64
|
+
if (patternKeys.length > 0) {
|
|
65
|
+
const patternSchema = schema.patternProperties[patternKeys[0]];
|
|
66
|
+
const itemSchema = flattenSkeleton(patternSchema);
|
|
67
|
+
// Use {*: schema} notation to indicate this is a keyed object
|
|
68
|
+
return { "*": itemSchema };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Handle primitives - return type indicator
|
|
73
|
+
if (schema.type && !schema.properties && !schema.oneOf && !schema.items && !schema.patternProperties) {
|
|
74
|
+
// Return a type indicator for primitive types
|
|
75
|
+
if (schema.type === "string") return "string";
|
|
76
|
+
if (schema.type === "number") return "number";
|
|
77
|
+
if (schema.type === "integer") return "integer";
|
|
78
|
+
if (schema.type === "boolean") return "boolean";
|
|
79
|
+
if (schema.type === "null") return "null";
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
let returnStructure = {};
|
|
83
|
+
|
|
84
|
+
// Handle object properties
|
|
85
|
+
if (schema.properties) {
|
|
86
|
+
Object.keys(schema.properties).forEach((key) => {
|
|
87
|
+
returnStructure[key] = flattenSkeleton(schema.properties[key]);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Handle oneOf - merge all possible properties (recursively handles nested oneOf)
|
|
92
|
+
if (schema.oneOf) {
|
|
93
|
+
schema.oneOf.forEach((aOneOf) => {
|
|
94
|
+
const variantResult = flattenSkeleton(aOneOf);
|
|
95
|
+
if (variantResult && typeof variantResult === "object" && !Array.isArray(variantResult)) {
|
|
96
|
+
Object.entries(variantResult).forEach(([key, value]) => {
|
|
97
|
+
if (key === "_variants") return;
|
|
98
|
+
if (returnStructure[key] && JSON.stringify(returnStructure[key]) !== JSON.stringify(value)) {
|
|
99
|
+
if (typeof returnStructure[key] === "string" || typeof value === "string") {
|
|
100
|
+
returnStructure[key] = "variant";
|
|
101
|
+
} else {
|
|
102
|
+
returnStructure[key] = { ...returnStructure[key], ...value, _variants: true };
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
returnStructure[key] = value;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Return empty object for objects without properties
|
|
113
|
+
return Object.keys(returnStructure).length > 0 ? returnStructure : {};
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const extractOverlay = (sourceSchema, ref) => {
|
|
117
|
+
const refName = `${ref}Ref`;
|
|
118
|
+
const extendedTagMap = {
|
|
119
|
+
Type: "type",
|
|
120
|
+
MinLength: "minLength",
|
|
121
|
+
MaxLength: "maxLength",
|
|
122
|
+
Pattern: "pattern",
|
|
123
|
+
Minimum: "minimum",
|
|
124
|
+
Maximum: "maximum",
|
|
125
|
+
MinItems: "minItems",
|
|
126
|
+
MaxItems: "maxItems",
|
|
127
|
+
UniqueItems: "uniqueItems",
|
|
128
|
+
AdditionalProperties: "additionalProperties",
|
|
129
|
+
Format: "format",
|
|
130
|
+
MinProperties: "minProperties",
|
|
131
|
+
MaxProperties: "maxProperties",
|
|
132
|
+
MultipleOf: "multipleOf",
|
|
133
|
+
Const: "const",
|
|
134
|
+
};
|
|
135
|
+
const returnSchema = {
|
|
136
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
137
|
+
$id: `https://trust.propdata.org.uk/schemas/v3/overlays/${ref}.json`,
|
|
138
|
+
};
|
|
139
|
+
traverse(sourceSchema).forEach(function (element) {
|
|
140
|
+
let path = "/" + this.path.join("/");
|
|
141
|
+
if (path === "/") path = "";
|
|
142
|
+
if (element[refName]) {
|
|
143
|
+
jp.set(returnSchema, `${path}/${refName}`, element[refName]);
|
|
144
|
+
|
|
145
|
+
if (element.discriminator && Array.isArray(element.oneOf)) {
|
|
146
|
+
jp.set(returnSchema, `${path}/discriminator`, element.discriminator);
|
|
147
|
+
const { propertyName } = element.discriminator;
|
|
148
|
+
element.oneOf.forEach((oneOf, index) => {
|
|
149
|
+
const discriminatorProperty = oneOf.properties[propertyName];
|
|
150
|
+
// must be an enum
|
|
151
|
+
const discriminatorEnumPath = `${path}/oneOf/${index}/properties/${propertyName}/enum`;
|
|
152
|
+
// if a refEnum use that
|
|
153
|
+
const refEnum = `${ref}Enum`;
|
|
154
|
+
if (discriminatorProperty[refEnum]) {
|
|
155
|
+
jp.set(
|
|
156
|
+
returnSchema,
|
|
157
|
+
discriminatorEnumPath,
|
|
158
|
+
discriminatorProperty[refEnum]
|
|
159
|
+
);
|
|
160
|
+
} else {
|
|
161
|
+
// use the base enum
|
|
162
|
+
jp.set(
|
|
163
|
+
returnSchema,
|
|
164
|
+
discriminatorEnumPath,
|
|
165
|
+
discriminatorProperty.enum
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// also handle discriminator properties nested in items
|
|
172
|
+
if (element.items?.discriminator && Array.isArray(element.items.oneOf)) {
|
|
173
|
+
jp.set(
|
|
174
|
+
returnSchema,
|
|
175
|
+
`${path}/items/discriminator`,
|
|
176
|
+
element.items.discriminator
|
|
177
|
+
);
|
|
178
|
+
const { propertyName } = element.items.discriminator;
|
|
179
|
+
element.items.oneOf.forEach((oneOf, index) => {
|
|
180
|
+
const discriminatorProperty = oneOf.properties[propertyName];
|
|
181
|
+
// must be an enum
|
|
182
|
+
const discriminatorEnumPath = `${path}/items/oneOf/${index}/properties/${propertyName}/enum`;
|
|
183
|
+
// if a refEnum use that
|
|
184
|
+
const refEnum = `${ref}Enum`;
|
|
185
|
+
if (discriminatorProperty[refEnum]) {
|
|
186
|
+
jp.set(
|
|
187
|
+
returnSchema,
|
|
188
|
+
discriminatorEnumPath,
|
|
189
|
+
discriminatorProperty[refEnum]
|
|
190
|
+
);
|
|
191
|
+
} else {
|
|
192
|
+
// use the base enum
|
|
193
|
+
jp.set(
|
|
194
|
+
returnSchema,
|
|
195
|
+
discriminatorEnumPath,
|
|
196
|
+
discriminatorProperty.enum
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const refRequired = `${ref}Required`;
|
|
204
|
+
if (element[refRequired]) {
|
|
205
|
+
jp.set(returnSchema, `${path}/required`, element[refRequired]);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const refTitle = `${ref}Title`;
|
|
209
|
+
if (element[refTitle]) {
|
|
210
|
+
jp.set(returnSchema, `${path}/title`, element[refTitle]);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const refDescription = `${ref}Description`;
|
|
214
|
+
if (element[refDescription]) {
|
|
215
|
+
jp.set(returnSchema, `${path}/description`, element[refDescription]);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const refEnum = `${ref}Enum`;
|
|
219
|
+
if (element[refEnum]) {
|
|
220
|
+
jp.set(returnSchema, `${path}/enum`, element[refEnum]);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const refConst = `${ref}Const`;
|
|
224
|
+
if (Object.prototype.hasOwnProperty.call(element, refConst)) {
|
|
225
|
+
jp.set(returnSchema, `${path}/const`, element[refConst]);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
Object.entries(extendedTagMap).forEach(([suffix, schemaKey]) => {
|
|
229
|
+
const tagKey = `${ref}${suffix}`;
|
|
230
|
+
if (Object.prototype.hasOwnProperty.call(element, tagKey)) {
|
|
231
|
+
jp.set(returnSchema, `${path}/${schemaKey}`, element[tagKey]);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
return returnSchema;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
const deleteProperties = (sourceSchema, propertyNames) => {
|
|
239
|
+
traverse(sourceSchema).forEach(function (element) {
|
|
240
|
+
if (propertyNames.includes(this.key)) {
|
|
241
|
+
this.delete(true); // true = stop here
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
return sourceSchema;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
const overlays = {};
|
|
248
|
+
const overlaysDir = path.join(outputDir, "overlays");
|
|
249
|
+
if (!fs.existsSync(overlaysDir)) {
|
|
250
|
+
fs.mkdirSync(overlaysDir, { recursive: true });
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
extractFields.forEach((key) => {
|
|
254
|
+
let overlay = extractOverlay(combinedSchema, key);
|
|
255
|
+
overlays[key] = overlay;
|
|
256
|
+
const fileName = path.join(overlaysDir, `${key}.json`);
|
|
257
|
+
fs.writeFileSync(fileName, JSON.stringify(overlay, null, 2));
|
|
258
|
+
console.log(`Overlay ${key} written to ${fileName}`);
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
const coreSchema = deleteProperties(combinedSchema, [
|
|
262
|
+
"discriminator",
|
|
263
|
+
...metadataFields.map((item) => `${item}Ref`),
|
|
264
|
+
...metadataFields.map((item) => `${item}Required`),
|
|
265
|
+
...metadataFields.map((item) => `${item}Title`),
|
|
266
|
+
...metadataFields.map((item) => `${item}Description`),
|
|
267
|
+
...metadataFields.map((item) => `${item}Enum`),
|
|
268
|
+
...metadataFields.map((item) => `${item}Type`),
|
|
269
|
+
...metadataFields.map((item) => `${item}MinLength`),
|
|
270
|
+
...metadataFields.map((item) => `${item}MaxLength`),
|
|
271
|
+
...metadataFields.map((item) => `${item}Pattern`),
|
|
272
|
+
...metadataFields.map((item) => `${item}Minimum`),
|
|
273
|
+
...metadataFields.map((item) => `${item}Maximum`),
|
|
274
|
+
...metadataFields.map((item) => `${item}MinItems`),
|
|
275
|
+
...metadataFields.map((item) => `${item}MaxItems`),
|
|
276
|
+
...metadataFields.map((item) => `${item}UniqueItems`),
|
|
277
|
+
...metadataFields.map((item) => `${item}AdditionalProperties`),
|
|
278
|
+
...metadataFields.map((item) => `${item}Format`),
|
|
279
|
+
...metadataFields.map((item) => `${item}MinProperties`),
|
|
280
|
+
...metadataFields.map((item) => `${item}MaxProperties`),
|
|
281
|
+
...metadataFields.map((item) => `${item}MultipleOf`),
|
|
282
|
+
...metadataFields.map((item) => `${item}Const`),
|
|
283
|
+
]);
|
|
284
|
+
|
|
285
|
+
fs.writeFileSync(
|
|
286
|
+
path.join(outputDir, "pdtf-transaction.json"),
|
|
287
|
+
JSON.stringify(coreSchema, null, 2)
|
|
288
|
+
);
|
|
289
|
+
console.log(`Core schema written to ${path.join(outputDir, "pdtf-transaction.json")}`);
|
|
290
|
+
|
|
291
|
+
const skeletonSchema = deleteProperties(coreSchema, [
|
|
292
|
+
"$schema",
|
|
293
|
+
"$id",
|
|
294
|
+
"title",
|
|
295
|
+
"description",
|
|
296
|
+
"required",
|
|
297
|
+
"enum",
|
|
298
|
+
"minItems",
|
|
299
|
+
"minLength",
|
|
300
|
+
"format",
|
|
301
|
+
"minimum",
|
|
302
|
+
"maximum",
|
|
303
|
+
]);
|
|
304
|
+
|
|
305
|
+
const skeletonSchemaFlattened = flattenSkeleton(skeletonSchema);
|
|
306
|
+
|
|
307
|
+
fs.writeFileSync(
|
|
308
|
+
path.join(outputDir, "skeleton.json"),
|
|
309
|
+
JSON.stringify(skeletonSchemaFlattened, null, 2)
|
|
310
|
+
);
|
|
311
|
+
console.log(`Flat Skeleton schema written to ${path.join(outputDir, "skeleton.json")}`);
|
|
312
|
+
|
|
313
|
+
// Generate compact skeleton format for better token efficiency
|
|
314
|
+
const toCompact = (obj, indent = "") => {
|
|
315
|
+
if (typeof obj === "string") {
|
|
316
|
+
// Skip type indicators entirely
|
|
317
|
+
return "";
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (Array.isArray(obj)) {
|
|
321
|
+
if (obj.length === 0) return "[]";
|
|
322
|
+
// Array with content
|
|
323
|
+
const inner = toCompact(obj[0], indent);
|
|
324
|
+
if (inner === "") {
|
|
325
|
+
return "[]"; // Array of primitives
|
|
326
|
+
}
|
|
327
|
+
return `[\n${inner}\n${indent}]`;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
if (obj && typeof obj === "object") {
|
|
331
|
+
const keys = Object.keys(obj);
|
|
332
|
+
if (keys.length === 0) return "";
|
|
333
|
+
|
|
334
|
+
// Check if this is a keyed object (has "*" key)
|
|
335
|
+
if (keys.length === 1 && keys[0] === "*") {
|
|
336
|
+
const inner = toCompact(obj["*"], indent);
|
|
337
|
+
if (inner === "" || inner === "{*}") {
|
|
338
|
+
return "{*}"; // Keyed object of primitives (or nested keyed objects with no structure)
|
|
339
|
+
}
|
|
340
|
+
return `{*}\n${inner}`;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Process each key
|
|
344
|
+
const lines = [];
|
|
345
|
+
keys.forEach(k => {
|
|
346
|
+
const val = toCompact(obj[k], indent + " ");
|
|
347
|
+
|
|
348
|
+
if (val === "") {
|
|
349
|
+
// Leaf node - just show the property name
|
|
350
|
+
lines.push(`${indent} ${k}`);
|
|
351
|
+
} else if (val === "[]") {
|
|
352
|
+
// Array property
|
|
353
|
+
lines.push(`${indent} ${k}[]`);
|
|
354
|
+
} else if (val.startsWith("[")) {
|
|
355
|
+
// Array with nested content - simple concatenation
|
|
356
|
+
lines.push(`${indent} ${k}${val}`);
|
|
357
|
+
} else if (val.startsWith("{*}")) {
|
|
358
|
+
// Keyed object property - simple concatenation
|
|
359
|
+
lines.push(`${indent} ${k}${val}`);
|
|
360
|
+
} else {
|
|
361
|
+
// Object property - show name on its own line, content below
|
|
362
|
+
lines.push(`${indent} ${k}`);
|
|
363
|
+
lines.push(val);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
return lines.length > 0 ? lines.join("\n") : "";
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return "";
|
|
371
|
+
};
|
|
372
|
+
|
|
373
|
+
// Since toCompact returns lines without wrapping braces, add them for the root
|
|
374
|
+
const innerContent = toCompact(skeletonSchemaFlattened, "");
|
|
375
|
+
const compactSkeleton = innerContent ? innerContent : "";
|
|
376
|
+
|
|
377
|
+
fs.writeFileSync(
|
|
378
|
+
path.join(outputDir, "compactSkeleton.txt"),
|
|
379
|
+
compactSkeleton
|
|
380
|
+
);
|
|
381
|
+
console.log(`Compact Skeleton written to ${path.join(outputDir, "compactSkeleton.txt")}`);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const { dereference } = require("@jdw/jst");
|
|
2
|
+
const traverse = require("traverse");
|
|
3
|
+
const jp = require("jsonpointer");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const merge = require("deepmerge");
|
|
6
|
+
|
|
7
|
+
const combinedSchema = require("../schemas/v2/combined.json");
|
|
8
|
+
|
|
9
|
+
const overlay = "baspiUI";
|
|
10
|
+
const keys = [
|
|
11
|
+
"isDependent",
|
|
12
|
+
"component",
|
|
13
|
+
"htmlClass",
|
|
14
|
+
"addButtonLabelFirst",
|
|
15
|
+
"addButtonLabelSubsequent",
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
const returnSchema = {
|
|
19
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
20
|
+
$id: `https://trust.propdata.org.uk/schemas/v2/overlays/${overlay}.json`,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
traverse(combinedSchema).forEach(function (element) {
|
|
24
|
+
let path = "/" + this.path.join("/");
|
|
25
|
+
if (path === "/") path = "";
|
|
26
|
+
if (keys.includes(this.key)) {
|
|
27
|
+
jp.set(returnSchema, path, element);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const fileName = `../schemas/v2/overlays/${overlay}.json`;
|
|
32
|
+
fs.writeFileSync(fileName, JSON.stringify(returnSchema, null, 2));
|
|
33
|
+
console.log(`Overlay ${overlay} written to ${overlay}`);
|
|
34
|
+
|
|
35
|
+
traverse(combinedSchema).forEach(function (element) {
|
|
36
|
+
if (keys.includes(this.key)) {
|
|
37
|
+
this.delete(true); // true = stop here
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
fs.writeFileSync(
|
|
42
|
+
"../schemas/v2/combined.json",
|
|
43
|
+
JSON.stringify(combinedSchema, null, 2)
|
|
44
|
+
);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const traverse = require("traverse");
|
|
2
|
+
const fs = require("fs");
|
|
3
|
+
|
|
4
|
+
const combinedSchema = require("../schemas/v3/combined.json");
|
|
5
|
+
|
|
6
|
+
const includeFields = [
|
|
7
|
+
"ntsRef",
|
|
8
|
+
"nts-sefRef",
|
|
9
|
+
"ntslRef",
|
|
10
|
+
"ta6Ref",
|
|
11
|
+
"ta7Ref",
|
|
12
|
+
"ta10Ref",
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
let pathCsv = "";
|
|
16
|
+
|
|
17
|
+
traverse(combinedSchema).forEach(function (element) {
|
|
18
|
+
let path = "/" + this.path.join("/");
|
|
19
|
+
if (path === "/") path = "";
|
|
20
|
+
if (includeFields.some((field) => element[field]) && element.title) {
|
|
21
|
+
const filteredPath = path
|
|
22
|
+
.split("/")
|
|
23
|
+
.filter(
|
|
24
|
+
(segment) =>
|
|
25
|
+
segment !== "properties" &&
|
|
26
|
+
segment !== "oneOf" &&
|
|
27
|
+
segment !== "items" &&
|
|
28
|
+
isNaN(segment)
|
|
29
|
+
)
|
|
30
|
+
.join("/");
|
|
31
|
+
const line = `"/${filteredPath}", "${element.title}"\n`;
|
|
32
|
+
pathCsv += line;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
fs.writeFileSync("./pathList.csv", pathCsv);
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
|
|
3
|
+
// Read the current skeleton
|
|
4
|
+
const skeleton = require("../schemas/v3/skeleton.json");
|
|
5
|
+
|
|
6
|
+
// Ultra-minimal format: use indentation only, no brackets
|
|
7
|
+
const toMinimal = (obj, prefix = "", isArrayItem = false) => {
|
|
8
|
+
const lines = [];
|
|
9
|
+
|
|
10
|
+
if (typeof obj === "string") {
|
|
11
|
+
// Type indicators - single letter
|
|
12
|
+
const typeMap = {
|
|
13
|
+
"string": "s",
|
|
14
|
+
"number": "n",
|
|
15
|
+
"integer": "i",
|
|
16
|
+
"boolean": "b",
|
|
17
|
+
"variant": "v"
|
|
18
|
+
};
|
|
19
|
+
return typeMap[obj] || obj;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (Array.isArray(obj)) {
|
|
23
|
+
lines.push(prefix + "[]");
|
|
24
|
+
if (obj.length > 0) {
|
|
25
|
+
const itemLines = toMinimal(obj[0], prefix + " ", true);
|
|
26
|
+
lines.push(...(Array.isArray(itemLines) ? itemLines : [itemLines]));
|
|
27
|
+
}
|
|
28
|
+
return lines;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (obj && typeof obj === "object") {
|
|
32
|
+
const keys = Object.keys(obj);
|
|
33
|
+
if (keys.length === 0) {
|
|
34
|
+
return prefix + "{}";
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
keys.forEach((key, index) => {
|
|
38
|
+
const val = obj[key];
|
|
39
|
+
const keyPrefix = prefix + key;
|
|
40
|
+
|
|
41
|
+
if (typeof val === "string") {
|
|
42
|
+
const type = toMinimal(val);
|
|
43
|
+
lines.push(keyPrefix + ":" + type);
|
|
44
|
+
} else if (Array.isArray(val)) {
|
|
45
|
+
const arrLines = toMinimal(val, keyPrefix);
|
|
46
|
+
lines.push(...arrLines);
|
|
47
|
+
} else if (val && typeof val === "object" && Object.keys(val).length > 0) {
|
|
48
|
+
lines.push(keyPrefix);
|
|
49
|
+
const subLines = toMinimal(val, prefix + " ");
|
|
50
|
+
lines.push(...(Array.isArray(subLines) ? subLines : [subLines]));
|
|
51
|
+
} else {
|
|
52
|
+
lines.push(keyPrefix);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
return lines;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return prefix + String(obj);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Generate minimal version
|
|
63
|
+
const minimalLines = toMinimal(skeleton);
|
|
64
|
+
const minimal = minimalLines.join("\n");
|
|
65
|
+
|
|
66
|
+
// Write minimal version
|
|
67
|
+
fs.writeFileSync("../schemas/v3/minimalSkeleton.txt", minimal);
|
|
68
|
+
|
|
69
|
+
console.log("Minimal skeleton written to ../schemas/v3/minimalSkeleton.txt");
|
|
70
|
+
console.log(`Size: ${minimal.length} bytes`);
|
|
71
|
+
console.log(`Lines: ${minimalLines.length}`);
|
|
72
|
+
|
|
73
|
+
// Count tokens
|
|
74
|
+
try {
|
|
75
|
+
const GPT3Encoder = require('gpt-3-encoder');
|
|
76
|
+
const encoded = GPT3Encoder.encode(minimal);
|
|
77
|
+
console.log(`Tokens (GPT-3): ${encoded.length}`);
|
|
78
|
+
console.log(`Reduction: ${((1 - encoded.length / 78734) * 100).toFixed(1)}% fewer tokens than JSON skeleton`);
|
|
79
|
+
|
|
80
|
+
// Show sample
|
|
81
|
+
console.log("\nFirst 20 lines:");
|
|
82
|
+
console.log(minimalLines.slice(0, 20).join("\n"));
|
|
83
|
+
} catch (e) {
|
|
84
|
+
console.log(`Estimated tokens: ~${Math.ceil(minimal.length / 4)}`);
|
|
85
|
+
}
|