@empressaio/atom-contract 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/property/common.d.ts +34 -0
- package/dist/property/common.d.ts.map +1 -1
- package/dist/property/common.js +31 -0
- package/dist/property/common.js.map +1 -1
- package/dist/property/fixtures.d.ts +63 -0
- package/dist/property/fixtures.d.ts.map +1 -1
- package/dist/property/fixtures.js +71 -0
- package/dist/property/fixtures.js.map +1 -1
- package/dist/property/index.d.ts +1 -0
- package/dist/property/index.d.ts.map +1 -1
- package/dist/property/index.js +1 -0
- package/dist/property/index.js.map +1 -1
- package/dist/property/rail-corridor-fact.d.ts +646 -0
- package/dist/property/rail-corridor-fact.d.ts.map +1 -0
- package/dist/property/rail-corridor-fact.js +112 -0
- package/dist/property/rail-corridor-fact.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { REASONING_CHAIN_OBSERVED_SCHEMA } from "../reasoning-chain.js";
|
|
3
|
+
import { PARCEL_NODE_ID_PATTERN, PROPERTY_ACCESS_POLICY_SCHEMA, PROPERTY_ATOM_TIER, PROPERTY_DEFAULT_ACCESS_POLICY, PROPERTY_QUALITY_GATE_FIELDS, PROPERTY_READ_CONTRACT_SCHEMA, RAIL_CORRIDOR_ABSENCE_SCHEMA, RAIL_CORRIDOR_AT_GRADE_CROSSING_SCHEMA, RAIL_CORRIDOR_CLASS_SCHEMA, RAIL_CORRIDOR_SOURCE_TIER_SCHEMA, RAIL_CORRIDOR_STATUS_SCHEMA, SITE_LAYER_PROVENANCE_FIELDS, SITE_LAYER_VERIFIED_ABSENCE_SCHEMA, } from "./common.js";
|
|
4
|
+
function hasCorridorClaim(data) {
|
|
5
|
+
return (data.nearRailCorridor !== undefined ||
|
|
6
|
+
data.corridorStatus !== undefined ||
|
|
7
|
+
data.corridorClass !== undefined ||
|
|
8
|
+
data.nearestCorridorDistanceMeters !== undefined ||
|
|
9
|
+
(data.atGradeCrossings !== undefined && data.atGradeCrossings.length > 0));
|
|
10
|
+
}
|
|
11
|
+
export const RAIL_CORRIDOR_FACT_SCHEMA = z
|
|
12
|
+
.object({
|
|
13
|
+
entityType: z.literal("rail-corridor-fact"),
|
|
14
|
+
atomDid: z
|
|
15
|
+
.string()
|
|
16
|
+
.min(1)
|
|
17
|
+
.refine((val) => /^railfact_[0-9a-f]{16}$/.test(val), {
|
|
18
|
+
message: "atomDid must be in format railfact_<16-hex-chars>",
|
|
19
|
+
}),
|
|
20
|
+
parcelNodeId: z
|
|
21
|
+
.string()
|
|
22
|
+
.min(1)
|
|
23
|
+
.refine((val) => PARCEL_NODE_ID_PATTERN.test(val), {
|
|
24
|
+
message: "parcelNodeId must match {county_fips}:{prop_id}",
|
|
25
|
+
}),
|
|
26
|
+
reasoningChain: REASONING_CHAIN_OBSERVED_SCHEMA,
|
|
27
|
+
sourceTier: RAIL_CORRIDOR_SOURCE_TIER_SCHEMA,
|
|
28
|
+
bufferMeters: z.number().positive(),
|
|
29
|
+
nearRailCorridor: z.boolean().optional(),
|
|
30
|
+
corridorStatus: RAIL_CORRIDOR_STATUS_SCHEMA.optional(),
|
|
31
|
+
corridorClass: RAIL_CORRIDOR_CLASS_SCHEMA.optional(),
|
|
32
|
+
nearestCorridorDistanceMeters: z.number().nonnegative().optional(),
|
|
33
|
+
atGradeCrossings: z.array(RAIL_CORRIDOR_AT_GRADE_CROSSING_SCHEMA).optional(),
|
|
34
|
+
absence: RAIL_CORRIDOR_ABSENCE_SCHEMA.optional(),
|
|
35
|
+
verifiedAbsence: SITE_LAYER_VERIFIED_ABSENCE_SCHEMA.optional(),
|
|
36
|
+
accessPolicy: PROPERTY_ACCESS_POLICY_SCHEMA,
|
|
37
|
+
...PROPERTY_QUALITY_GATE_FIELDS,
|
|
38
|
+
...SITE_LAYER_PROVENANCE_FIELDS,
|
|
39
|
+
atomTier: z.literal(PROPERTY_ATOM_TIER),
|
|
40
|
+
readContract: PROPERTY_READ_CONTRACT_SCHEMA.optional(),
|
|
41
|
+
})
|
|
42
|
+
.superRefine((data, ctx) => {
|
|
43
|
+
const hasAbsence = data.absence !== undefined;
|
|
44
|
+
const isAbsentTier = data.sourceTier === "absent";
|
|
45
|
+
const hasClaim = hasCorridorClaim(data);
|
|
46
|
+
if (data.accessPolicy !== PROPERTY_DEFAULT_ACCESS_POLICY) {
|
|
47
|
+
ctx.addIssue({
|
|
48
|
+
code: z.ZodIssueCode.custom,
|
|
49
|
+
message: "rail-corridor-fact must use accessPolicy public-free",
|
|
50
|
+
path: ["accessPolicy"],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (hasClaim && hasAbsence) {
|
|
54
|
+
ctx.addIssue({
|
|
55
|
+
code: z.ZodIssueCode.custom,
|
|
56
|
+
message: "corridor claim fields and absence are mutually exclusive",
|
|
57
|
+
path: ["absence"],
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (isAbsentTier) {
|
|
61
|
+
if (!data.verifiedAbsence) {
|
|
62
|
+
ctx.addIssue({
|
|
63
|
+
code: z.ZodIssueCode.custom,
|
|
64
|
+
message: "sourceTier absent requires verifiedAbsence (evaluated + provenanceScope)",
|
|
65
|
+
path: ["verifiedAbsence"],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (hasClaim || data.nearRailCorridor !== undefined) {
|
|
69
|
+
ctx.addIssue({
|
|
70
|
+
code: z.ZodIssueCode.custom,
|
|
71
|
+
message: "sourceTier absent must not carry corridor claim fields",
|
|
72
|
+
path: ["sourceTier"],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (hasAbsence) {
|
|
77
|
+
if (hasClaim || data.nearRailCorridor !== undefined) {
|
|
78
|
+
ctx.addIssue({
|
|
79
|
+
code: z.ZodIssueCode.custom,
|
|
80
|
+
message: "absence must not coexist with corridor claim fields",
|
|
81
|
+
path: ["absence"],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else if (data.nearRailCorridor === undefined) {
|
|
86
|
+
ctx.addIssue({
|
|
87
|
+
code: z.ZodIssueCode.custom,
|
|
88
|
+
message: "ntad-narn tier requires nearRailCorridor when no absence",
|
|
89
|
+
path: ["nearRailCorridor"],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else if (data.nearRailCorridor) {
|
|
93
|
+
if (!data.corridorStatus || !data.corridorClass) {
|
|
94
|
+
ctx.addIssue({
|
|
95
|
+
code: z.ZodIssueCode.custom,
|
|
96
|
+
message: "nearRailCorridor true requires corridorStatus and corridorClass",
|
|
97
|
+
path: ["corridorStatus"],
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (data.nearestCorridorDistanceMeters === undefined) {
|
|
101
|
+
ctx.addIssue({
|
|
102
|
+
code: z.ZodIssueCode.custom,
|
|
103
|
+
message: "nearRailCorridor true requires nearestCorridorDistanceMeters",
|
|
104
|
+
path: ["nearestCorridorDistanceMeters"],
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
export function createRailCorridorFact(input) {
|
|
110
|
+
return RAIL_CORRIDOR_FACT_SCHEMA.parse(input);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=rail-corridor-fact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rail-corridor-fact.js","sourceRoot":"","sources":["../../src/property/rail-corridor-fact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,8BAA8B,EAC9B,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,sCAAsC,EACtC,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,kCAAkC,GAOnC,MAAM,aAAa,CAAC;AAuCrB,SAAS,gBAAgB,CAAC,IAMzB;IACC,OAAO,CACL,IAAI,CAAC,gBAAgB,KAAK,SAAS;QACnC,IAAI,CAAC,cAAc,KAAK,SAAS;QACjC,IAAI,CAAC,aAAa,KAAK,SAAS;QAChC,IAAI,CAAC,6BAA6B,KAAK,SAAS;QAChD,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC3C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACpD,OAAO,EAAE,mDAAmD;KAC7D,CAAC;IACJ,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACjD,OAAO,EAAE,iDAAiD;KAC3D,CAAC;IACJ,cAAc,EAAE,+BAA+B;IAC/C,UAAU,EAAE,gCAAgC;IAC5C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IACtD,aAAa,EAAE,0BAA0B,CAAC,QAAQ,EAAE;IACpD,6BAA6B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAClE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,QAAQ,EAAE;IAC5E,OAAO,EAAE,4BAA4B,CAAC,QAAQ,EAAE;IAChD,eAAe,EAAE,kCAAkC,CAAC,QAAQ,EAAE;IAC9D,YAAY,EAAE,6BAA6B;IAC3C,GAAG,4BAA4B;IAC/B,GAAG,4BAA4B;IAC/B,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACvC,YAAY,EAAE,6BAA6B,CAAC,QAAQ,EAAE;CACvD,CAAC;KACD,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC;IAClD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,IAAI,CAAC,YAAY,KAAK,8BAA8B,EAAE,CAAC;QACzD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,CAAC,cAAc,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,0DAA0D;YACnE,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EACL,0EAA0E;gBAC5E,IAAI,EAAE,CAAC,iBAAiB,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACpD,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,wDAAwD;gBACjE,IAAI,EAAE,CAAC,YAAY,CAAC;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,IAAI,QAAQ,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACpD,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,qDAAqD;gBAC9D,IAAI,EAAE,CAAC,SAAS,CAAC;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC/C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,0DAA0D;YACnE,IAAI,EAAE,CAAC,kBAAkB,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAChD,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EACL,iEAAiE;gBACnE,IAAI,EAAE,CAAC,gBAAgB,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,6BAA6B,KAAK,SAAS,EAAE,CAAC;YACrD,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EACL,8DAA8D;gBAChE,IAAI,EAAE,CAAC,+BAA+B,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,UAAU,sBAAsB,CACpC,KAAgD;IAEhD,OAAO,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAiC,CAAC;AAChF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empressaio/atom-contract",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"description": "The typed-data substrate every Empressa atom satisfies: identity, context interface, composition declaration, and history anchoring. Peer to the Hauska SDK (`@hauska-sdk/*`); consumed directly by every product surface and MCP server.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|