@pdtf/schemas 3.6.0-dev.4 → 3.6.0-dev.6
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/compassionate-easley-bafb14/CLAUDE.md +101 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/README.md +166 -65
- package/compassionate-easley-bafb14/docs/branch-release-workflow.md +138 -0
- package/compassionate-easley-bafb14/docs/sef25-extensions-ui-spec.md +355 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/index.js +160 -63
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/package-lock.json +13 -10
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/package.json +7 -2
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v3/exampleAddParticipantVouch.json +3 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v3/exampleDocumentedVouch.json +3 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v3/exampleElectronicRecord.json +3 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v3/exampleTransaction.json +7 -3
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v3/exampleVouch.json +3 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/combined.json +8190 -1446
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/compactSkeleton.txt +1208 -14
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/baspi4.json +186 -28
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/baspi5.json +191 -30
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/ac.json +334 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/as.json +4 -2
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/dk.json +33 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/dr.json +9 -9
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/er.json +4 -2
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/fd.json +6 -3
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/hi.json +6 -3
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/hs.json +4 -2
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/ic.json +94 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/jk.json +28 -8
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/la.json +4 -2
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/lc.json +76 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/ma.json +6 -3
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/mc.json +4 -2
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/mi.json +70 -0
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/nd.json +44 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/oa.json +4 -2
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/oc.json +4 -2
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/pc.json +38 -0
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/ph.json +195 -0
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/rw.json +69 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/sb.json +4 -2
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/sc.json +133 -0
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/sd.json +64 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/sf.json +4 -2
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/sl.json +4 -2
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/ta.json +204 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/extensions/tf.json +6 -3
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/tr.json +74 -0
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/extensions/wg.json +351 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/fme1.json +16 -14
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/lpe1.json +61 -88
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/nts.json +71 -2
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/nts2.json +71 -5
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/ntsl.json +71 -2
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/ntsl2.json +71 -5
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/piq.json +56 -8
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/rds.json +128 -12
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/sef25.json +1653 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/ta10.json +12 -9
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/ta6.json +103 -32
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/ta6ed6.json +6536 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/ta7.json +134 -32
- package/compassionate-easley-bafb14/src/schemas/v3/overlays/ta7ed5.json +1551 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/pdtf-transaction.json +4835 -490
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/skeleton.json +1481 -37
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/verifiedClaims/README.md +12 -3
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/verifiedClaims/pdtf-verified-claims.json +16 -0
- package/compassionate-easley-bafb14/src/utils/extractExtensionOverlays.js +633 -0
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/extractOverlay.js +129 -38
- package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/pathSkeleton.js +1 -1
- package/package.json +1 -1
- package/src/schemas/v3/combined.json +5 -1
- package/src/schemas/v3/overlays/extensions/ic.json +42 -8
- package/src/schemas/v3/overlays/sef25.json +16 -2
- package/src/utils/extractExtensionOverlays.js +1 -1
- package/keen-dewdney-6ae15b/src/tests/v3/caching.test.js +0 -591
- package/keen-dewdney-6ae15b/src/tests/v3/extensionOverlays.test.js +0 -525
- package/keen-dewdney-6ae15b/src/tests/v3/transactionSchema.test.js +0 -574
- package/keen-dewdney-6ae15b/src/tests/v3/verifiedClaimsValidator.test.js +0 -128
- package/keen-dewdney-6ae15b/src/utils/extractExtensionOverlays.js +0 -362
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/LICENSE +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v1/exampleAddParticipantVouch.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v1/exampleDocumentedVouch.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v1/exampleElectronicRecord.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v1/exampleTransaction.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v1/exampleVouch.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v2/exampleTransaction.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v3/exampleCustomOverlay.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/examples/v3/exampleCustomOverlay2.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/mappings/SendPropertyDetailsRequestSchema.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/mappings/adf.js +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/GeoJSON.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/baspiNotes.html +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/energy-performance-certificate.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/freehold-information.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/leasehold-information.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/legal-information.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/material-facts.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/pdtf-transaction-search-results.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/pdtf-transaction.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/searches/drainage-and-water.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/searches/local-land-charges.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/searches/local-searches-required.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/searches.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v1/title-deed.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/baspiNotes.html +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/combined.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/baspi.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/con29DW.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/con29R.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/fme1.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/llc1.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/lpe1.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/nts.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/oc1.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/piq.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/rds.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/ta10.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/ta6.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/overlays/ta7.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/pdtf-transaction.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v2/skeleton.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/README.md +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/con29DW.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/con29R.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/llc1.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/oc1.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/schemas/v3/overlays/sr24.json +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/compactSkeleton.js +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/countTokens.js +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/extractProperties.js +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/listPathTitles.js +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/minimalSkeleton.js +0 -0
- /package/{keen-dewdney-6ae15b → compassionate-easley-bafb14}/src/utils/pathList.csv +0 -0
|
@@ -2,9 +2,24 @@ const { dereference } = require("@jdw/jst");
|
|
|
2
2
|
const traverse = require("traverse");
|
|
3
3
|
const jp = require("jsonpointer");
|
|
4
4
|
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
5
6
|
const merge = require("deepmerge");
|
|
6
7
|
|
|
7
|
-
const
|
|
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"));
|
|
8
23
|
|
|
9
24
|
const extractFields = [
|
|
10
25
|
"baspi4",
|
|
@@ -14,7 +29,9 @@ const extractFields = [
|
|
|
14
29
|
"ntsl",
|
|
15
30
|
"ntsl2",
|
|
16
31
|
"ta6",
|
|
32
|
+
"ta6ed6",
|
|
17
33
|
"ta7",
|
|
34
|
+
"ta7ed5",
|
|
18
35
|
"ta10",
|
|
19
36
|
"lpe1",
|
|
20
37
|
"fme1",
|
|
@@ -25,20 +42,35 @@ const extractFields = [
|
|
|
25
42
|
"rds",
|
|
26
43
|
"oc1",
|
|
27
44
|
"sr24",
|
|
45
|
+
"sef25",
|
|
28
46
|
];
|
|
29
47
|
|
|
48
|
+
const metadataFields = [...extractFields, "ta6ed6Compat"];
|
|
49
|
+
|
|
30
50
|
const flattenSkeleton = (schema) => {
|
|
31
51
|
if (!schema) return undefined;
|
|
32
|
-
|
|
52
|
+
|
|
33
53
|
// Handle arrays - mark with special notation
|
|
34
54
|
if (schema.type === "array" && schema.items) {
|
|
35
55
|
const itemSchema = flattenSkeleton(schema.items);
|
|
36
56
|
// Use array notation to indicate this is an array
|
|
37
57
|
return [itemSchema];
|
|
38
58
|
}
|
|
39
|
-
|
|
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
|
+
|
|
40
72
|
// Handle primitives - return type indicator
|
|
41
|
-
if (schema.type && !schema.properties && !schema.oneOf && !schema.items) {
|
|
73
|
+
if (schema.type && !schema.properties && !schema.oneOf && !schema.items && !schema.patternProperties) {
|
|
42
74
|
// Return a type indicator for primitive types
|
|
43
75
|
if (schema.type === "string") return "string";
|
|
44
76
|
if (schema.type === "number") return "number";
|
|
@@ -46,45 +78,60 @@ const flattenSkeleton = (schema) => {
|
|
|
46
78
|
if (schema.type === "boolean") return "boolean";
|
|
47
79
|
if (schema.type === "null") return "null";
|
|
48
80
|
}
|
|
49
|
-
|
|
81
|
+
|
|
50
82
|
let returnStructure = {};
|
|
51
|
-
|
|
83
|
+
|
|
52
84
|
// Handle object properties
|
|
53
85
|
if (schema.properties) {
|
|
54
86
|
Object.keys(schema.properties).forEach((key) => {
|
|
55
87
|
returnStructure[key] = flattenSkeleton(schema.properties[key]);
|
|
56
88
|
});
|
|
57
89
|
}
|
|
58
|
-
|
|
59
|
-
// Handle oneOf - merge all possible properties
|
|
90
|
+
|
|
91
|
+
// Handle oneOf - merge all possible properties (recursively handles nested oneOf)
|
|
60
92
|
if (schema.oneOf) {
|
|
61
93
|
schema.oneOf.forEach((aOneOf) => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (returnStructure[key] && JSON.stringify(returnStructure[key]) !== JSON.stringify(
|
|
67
|
-
|
|
68
|
-
if (typeof returnStructure[key] === "string" || typeof newValue === "string") {
|
|
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") {
|
|
69
100
|
returnStructure[key] = "variant";
|
|
70
101
|
} else {
|
|
71
|
-
|
|
72
|
-
returnStructure[key] = { ...returnStructure[key], ...newValue, _variants: true };
|
|
102
|
+
returnStructure[key] = { ...returnStructure[key], ...value, _variants: true };
|
|
73
103
|
}
|
|
74
104
|
} else {
|
|
75
|
-
returnStructure[key] =
|
|
105
|
+
returnStructure[key] = value;
|
|
76
106
|
}
|
|
77
107
|
});
|
|
78
108
|
}
|
|
79
109
|
});
|
|
80
110
|
}
|
|
81
|
-
|
|
111
|
+
|
|
82
112
|
// Return empty object for objects without properties
|
|
83
113
|
return Object.keys(returnStructure).length > 0 ? returnStructure : {};
|
|
84
114
|
};
|
|
85
115
|
|
|
86
116
|
const extractOverlay = (sourceSchema, ref) => {
|
|
87
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
|
+
};
|
|
88
135
|
const returnSchema = {
|
|
89
136
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
90
137
|
$id: `https://trust.propdata.org.uk/schemas/v3/overlays/${ref}.json`,
|
|
@@ -95,7 +142,7 @@ const extractOverlay = (sourceSchema, ref) => {
|
|
|
95
142
|
if (element[refName]) {
|
|
96
143
|
jp.set(returnSchema, `${path}/${refName}`, element[refName]);
|
|
97
144
|
|
|
98
|
-
if (element.discriminator) {
|
|
145
|
+
if (element.discriminator && Array.isArray(element.oneOf)) {
|
|
99
146
|
jp.set(returnSchema, `${path}/discriminator`, element.discriminator);
|
|
100
147
|
const { propertyName } = element.discriminator;
|
|
101
148
|
element.oneOf.forEach((oneOf, index) => {
|
|
@@ -122,7 +169,7 @@ const extractOverlay = (sourceSchema, ref) => {
|
|
|
122
169
|
}
|
|
123
170
|
|
|
124
171
|
// also handle discriminator properties nested in items
|
|
125
|
-
if (element.items?.discriminator) {
|
|
172
|
+
if (element.items?.discriminator && Array.isArray(element.items.oneOf)) {
|
|
126
173
|
jp.set(
|
|
127
174
|
returnSchema,
|
|
128
175
|
`${path}/items/discriminator`,
|
|
@@ -172,6 +219,18 @@ const extractOverlay = (sourceSchema, ref) => {
|
|
|
172
219
|
if (element[refEnum]) {
|
|
173
220
|
jp.set(returnSchema, `${path}/enum`, element[refEnum]);
|
|
174
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
|
+
});
|
|
175
234
|
});
|
|
176
235
|
return returnSchema;
|
|
177
236
|
};
|
|
@@ -186,28 +245,48 @@ const deleteProperties = (sourceSchema, propertyNames) => {
|
|
|
186
245
|
};
|
|
187
246
|
|
|
188
247
|
const overlays = {};
|
|
248
|
+
const overlaysDir = path.join(outputDir, "overlays");
|
|
249
|
+
if (!fs.existsSync(overlaysDir)) {
|
|
250
|
+
fs.mkdirSync(overlaysDir, { recursive: true });
|
|
251
|
+
}
|
|
189
252
|
|
|
190
253
|
extractFields.forEach((key) => {
|
|
191
254
|
let overlay = extractOverlay(combinedSchema, key);
|
|
192
255
|
overlays[key] = overlay;
|
|
193
|
-
const fileName =
|
|
256
|
+
const fileName = path.join(overlaysDir, `${key}.json`);
|
|
194
257
|
fs.writeFileSync(fileName, JSON.stringify(overlay, null, 2));
|
|
195
258
|
console.log(`Overlay ${key} written to ${fileName}`);
|
|
196
259
|
});
|
|
197
260
|
|
|
198
261
|
const coreSchema = deleteProperties(combinedSchema, [
|
|
199
262
|
"discriminator",
|
|
200
|
-
...
|
|
201
|
-
...
|
|
202
|
-
...
|
|
203
|
-
...
|
|
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`),
|
|
204
283
|
]);
|
|
205
284
|
|
|
206
285
|
fs.writeFileSync(
|
|
207
|
-
"
|
|
286
|
+
path.join(outputDir, "pdtf-transaction.json"),
|
|
208
287
|
JSON.stringify(coreSchema, null, 2)
|
|
209
288
|
);
|
|
210
|
-
console.log(
|
|
289
|
+
console.log(`Core schema written to ${path.join(outputDir, "pdtf-transaction.json")}`);
|
|
211
290
|
|
|
212
291
|
const skeletonSchema = deleteProperties(coreSchema, [
|
|
213
292
|
"$schema",
|
|
@@ -226,10 +305,10 @@ const skeletonSchema = deleteProperties(coreSchema, [
|
|
|
226
305
|
const skeletonSchemaFlattened = flattenSkeleton(skeletonSchema);
|
|
227
306
|
|
|
228
307
|
fs.writeFileSync(
|
|
229
|
-
"
|
|
308
|
+
path.join(outputDir, "skeleton.json"),
|
|
230
309
|
JSON.stringify(skeletonSchemaFlattened, null, 2)
|
|
231
310
|
);
|
|
232
|
-
console.log(
|
|
311
|
+
console.log(`Flat Skeleton schema written to ${path.join(outputDir, "skeleton.json")}`);
|
|
233
312
|
|
|
234
313
|
// Generate compact skeleton format for better token efficiency
|
|
235
314
|
const toCompact = (obj, indent = "") => {
|
|
@@ -237,7 +316,7 @@ const toCompact = (obj, indent = "") => {
|
|
|
237
316
|
// Skip type indicators entirely
|
|
238
317
|
return "";
|
|
239
318
|
}
|
|
240
|
-
|
|
319
|
+
|
|
241
320
|
if (Array.isArray(obj)) {
|
|
242
321
|
if (obj.length === 0) return "[]";
|
|
243
322
|
// Array with content
|
|
@@ -247,16 +326,25 @@ const toCompact = (obj, indent = "") => {
|
|
|
247
326
|
}
|
|
248
327
|
return `[\n${inner}\n${indent}]`;
|
|
249
328
|
}
|
|
250
|
-
|
|
329
|
+
|
|
251
330
|
if (obj && typeof obj === "object") {
|
|
252
331
|
const keys = Object.keys(obj);
|
|
253
332
|
if (keys.length === 0) return "";
|
|
254
|
-
|
|
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
|
+
|
|
255
343
|
// Process each key
|
|
256
344
|
const lines = [];
|
|
257
345
|
keys.forEach(k => {
|
|
258
346
|
const val = toCompact(obj[k], indent + " ");
|
|
259
|
-
|
|
347
|
+
|
|
260
348
|
if (val === "") {
|
|
261
349
|
// Leaf node - just show the property name
|
|
262
350
|
lines.push(`${indent} ${k}`);
|
|
@@ -266,16 +354,19 @@ const toCompact = (obj, indent = "") => {
|
|
|
266
354
|
} else if (val.startsWith("[")) {
|
|
267
355
|
// Array with nested content - simple concatenation
|
|
268
356
|
lines.push(`${indent} ${k}${val}`);
|
|
357
|
+
} else if (val.startsWith("{*}")) {
|
|
358
|
+
// Keyed object property - simple concatenation
|
|
359
|
+
lines.push(`${indent} ${k}${val}`);
|
|
269
360
|
} else {
|
|
270
361
|
// Object property - show name on its own line, content below
|
|
271
362
|
lines.push(`${indent} ${k}`);
|
|
272
363
|
lines.push(val);
|
|
273
364
|
}
|
|
274
365
|
});
|
|
275
|
-
|
|
366
|
+
|
|
276
367
|
return lines.length > 0 ? lines.join("\n") : "";
|
|
277
368
|
}
|
|
278
|
-
|
|
369
|
+
|
|
279
370
|
return "";
|
|
280
371
|
};
|
|
281
372
|
|
|
@@ -284,7 +375,7 @@ const innerContent = toCompact(skeletonSchemaFlattened, "");
|
|
|
284
375
|
const compactSkeleton = innerContent ? innerContent : "";
|
|
285
376
|
|
|
286
377
|
fs.writeFileSync(
|
|
287
|
-
"
|
|
378
|
+
path.join(outputDir, "compactSkeleton.txt"),
|
|
288
379
|
compactSkeleton
|
|
289
380
|
);
|
|
290
|
-
console.log(
|
|
381
|
+
console.log(`Compact Skeleton written to ${path.join(outputDir, "compactSkeleton.txt")}`);
|
|
@@ -6,7 +6,7 @@ const combinedSchema = require("../schemas/v3/combined.json");
|
|
|
6
6
|
// Extract fields that have overlay-specific properties
|
|
7
7
|
const extractFields = [
|
|
8
8
|
"baspi4", "baspi5", "nts", "nts2", "ntsl", "ntsl2",
|
|
9
|
-
"ta6", "ta7", "ta10", "lpe1", "fme1", "piq",
|
|
9
|
+
"ta6", "ta7", "ta7ed5", "ta10", "lpe1", "fme1", "piq",
|
|
10
10
|
"con29R", "con29DW", "llc1", "rds", "oc1", "sr24",
|
|
11
11
|
];
|
|
12
12
|
|
package/package.json
CHANGED
|
@@ -25468,6 +25468,7 @@
|
|
|
25468
25468
|
"isInsured",
|
|
25469
25469
|
"difficultiesObtainingInsurance"
|
|
25470
25470
|
],
|
|
25471
|
+
"sef25Required": ["isInsured"],
|
|
25471
25472
|
"properties": {
|
|
25472
25473
|
"difficultiesObtainingInsurance": {
|
|
25473
25474
|
"baspi4Ref": "A8.1.2.1",
|
|
@@ -25765,6 +25766,7 @@
|
|
|
25765
25766
|
"rdsRef": "Insurance/isInsured=no|yes|true|false",
|
|
25766
25767
|
"ta6Ref": "6.1",
|
|
25767
25768
|
"ta6ed6Ref": "7.1",
|
|
25769
|
+
"sef25Ref": "I1.2",
|
|
25768
25770
|
"piqRef": "A8.2",
|
|
25769
25771
|
"title": "Do you currently insure the property?",
|
|
25770
25772
|
"ta6Title": "Does the seller insure the property?",
|
|
@@ -25869,6 +25871,7 @@
|
|
|
25869
25871
|
"baspi5Ref": "A8.2.1",
|
|
25870
25872
|
"ta6Ref": "6.5.2",
|
|
25871
25873
|
"ta6ed6Ref": "7.3.2",
|
|
25874
|
+
"sef25Ref": "I1.1.2",
|
|
25872
25875
|
"title": "Provide details",
|
|
25873
25876
|
"ta6ed6Title": "Give details, including the date(s) of any claim(s) and how they were resolved",
|
|
25874
25877
|
"type": "string",
|
|
@@ -25878,7 +25881,8 @@
|
|
|
25878
25881
|
"baspi4Required": ["details"],
|
|
25879
25882
|
"baspi5Required": ["details"],
|
|
25880
25883
|
"ta6Required": ["details"],
|
|
25881
|
-
"ta6ed6Required": ["details"]
|
|
25884
|
+
"ta6ed6Required": ["details"],
|
|
25885
|
+
"sef25Required": ["details"]
|
|
25882
25886
|
}
|
|
25883
25887
|
]
|
|
25884
25888
|
}
|
|
@@ -3,9 +3,33 @@
|
|
|
3
3
|
"propertyPack": {
|
|
4
4
|
"properties": {
|
|
5
5
|
"insurance": {
|
|
6
|
+
"ntsRef": "I1",
|
|
7
|
+
"required": [
|
|
8
|
+
"isInsured"
|
|
9
|
+
],
|
|
10
|
+
"discriminator": {
|
|
11
|
+
"propertyName": "isInsured"
|
|
12
|
+
},
|
|
13
|
+
"properties": {
|
|
14
|
+
"isInsured": {
|
|
15
|
+
"ntsRef": "I1.2",
|
|
16
|
+
"type": "string"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
6
19
|
"oneOf": [
|
|
7
|
-
null,
|
|
8
20
|
{
|
|
21
|
+
"properties": {
|
|
22
|
+
"isInsured": {
|
|
23
|
+
"enum": [
|
|
24
|
+
"No"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"required": [
|
|
31
|
+
"insuranceClaims"
|
|
32
|
+
],
|
|
9
33
|
"properties": {
|
|
10
34
|
"insuranceClaims": {
|
|
11
35
|
"ntsRef": "I1.1",
|
|
@@ -32,7 +56,15 @@
|
|
|
32
56
|
}
|
|
33
57
|
},
|
|
34
58
|
{
|
|
59
|
+
"required": [
|
|
60
|
+
"details"
|
|
61
|
+
],
|
|
35
62
|
"properties": {
|
|
63
|
+
"details": {
|
|
64
|
+
"ntsRef": "I1.1.2",
|
|
65
|
+
"type": "string",
|
|
66
|
+
"minLength": 1
|
|
67
|
+
},
|
|
36
68
|
"yesNo": {
|
|
37
69
|
"enum": [
|
|
38
70
|
"Yes"
|
|
@@ -40,15 +72,17 @@
|
|
|
40
72
|
}
|
|
41
73
|
}
|
|
42
74
|
}
|
|
43
|
-
]
|
|
44
|
-
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"isInsured": {
|
|
78
|
+
"enum": [
|
|
79
|
+
"Yes"
|
|
80
|
+
]
|
|
45
81
|
}
|
|
46
|
-
}
|
|
47
|
-
"required": [
|
|
48
|
-
"insuranceClaims"
|
|
49
|
-
]
|
|
82
|
+
}
|
|
50
83
|
}
|
|
51
|
-
]
|
|
84
|
+
],
|
|
85
|
+
"type": "object"
|
|
52
86
|
}
|
|
53
87
|
},
|
|
54
88
|
"ntsRef": "0"
|
|
@@ -1132,8 +1132,14 @@
|
|
|
1132
1132
|
"enum": [
|
|
1133
1133
|
"Yes"
|
|
1134
1134
|
]
|
|
1135
|
+
},
|
|
1136
|
+
"details": {
|
|
1137
|
+
"sef25Ref": "I1.1.2"
|
|
1135
1138
|
}
|
|
1136
|
-
}
|
|
1139
|
+
},
|
|
1140
|
+
"required": [
|
|
1141
|
+
"details"
|
|
1142
|
+
]
|
|
1137
1143
|
}
|
|
1138
1144
|
],
|
|
1139
1145
|
"required": [
|
|
@@ -1150,7 +1156,15 @@
|
|
|
1150
1156
|
"insuranceClaims"
|
|
1151
1157
|
]
|
|
1152
1158
|
}
|
|
1153
|
-
]
|
|
1159
|
+
],
|
|
1160
|
+
"required": [
|
|
1161
|
+
"isInsured"
|
|
1162
|
+
],
|
|
1163
|
+
"properties": {
|
|
1164
|
+
"isInsured": {
|
|
1165
|
+
"sef25Ref": "I1.2"
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1154
1168
|
},
|
|
1155
1169
|
"rightsAndInformalArrangements": {
|
|
1156
1170
|
"sef25Ref": "R1",
|
|
@@ -274,7 +274,7 @@ const extensionMappings = {
|
|
|
274
274
|
description: "Insurance claims upfront for SEF25",
|
|
275
275
|
refType: "sef25Ref",
|
|
276
276
|
paths: [
|
|
277
|
-
"/properties/propertyPack/properties/insurance
|
|
277
|
+
"/properties/propertyPack/properties/insurance",
|
|
278
278
|
],
|
|
279
279
|
},
|
|
280
280
|
|