@actuarial-ts/interchange 0.3.0 → 0.4.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/convert/result.js +1 -1
- package/dist/envelope.d.ts +1 -1
- package/dist/envelope.js +1 -1
- package/dist/parse.d.ts +6 -1
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +16 -0
- package/dist/parse.js.map +1 -1
- package/package.json +2 -2
- package/src/convert/result.ts +1 -1
- package/src/envelope.ts +1 -1
- package/src/parse.ts +21 -1
package/dist/convert/result.js
CHANGED
|
@@ -5,7 +5,7 @@ import { methodResultDocSchema, } from "../schemas/result.js";
|
|
|
5
5
|
* The engine stamp for results computed by @actuarial-ts/core. A sync test
|
|
6
6
|
* pins the version to the installed core package so it cannot drift.
|
|
7
7
|
*/
|
|
8
|
-
export const CORE_ENGINE = { name: "actuarial-ts", version: "0.
|
|
8
|
+
export const CORE_ENGINE = { name: "actuarial-ts", version: "0.4.0" };
|
|
9
9
|
function mapResult(result) {
|
|
10
10
|
switch (result.method) {
|
|
11
11
|
case "chainLadder":
|
package/dist/envelope.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export declare const INTERCHANGE_SPEC_MAJOR = 1;
|
|
|
32
32
|
* This package's version, stamped into `generator` by default. A sync test
|
|
33
33
|
* asserts it matches package.json so it cannot silently drift.
|
|
34
34
|
*/
|
|
35
|
-
export declare const INTERCHANGE_PACKAGE_VERSION = "0.
|
|
35
|
+
export declare const INTERCHANGE_PACKAGE_VERSION = "0.4.0";
|
|
36
36
|
export interface GeneratorStamp {
|
|
37
37
|
name: string;
|
|
38
38
|
version: string;
|
package/dist/envelope.js
CHANGED
|
@@ -33,7 +33,7 @@ export const INTERCHANGE_SPEC_MAJOR = 1;
|
|
|
33
33
|
* This package's version, stamped into `generator` by default. A sync test
|
|
34
34
|
* asserts it matches package.json so it cannot silently drift.
|
|
35
35
|
*/
|
|
36
|
-
export const INTERCHANGE_PACKAGE_VERSION = "0.
|
|
36
|
+
export const INTERCHANGE_PACKAGE_VERSION = "0.4.0";
|
|
37
37
|
/** Default `generator` stamp for documents authored by this package. */
|
|
38
38
|
export const DEFAULT_GENERATOR = {
|
|
39
39
|
name: "@actuarial-ts/interchange",
|
package/dist/parse.d.ts
CHANGED
|
@@ -10,7 +10,12 @@ import type { CrosscheckReportDoc } from "./schemas/crosscheck.js";
|
|
|
10
10
|
* document.
|
|
11
11
|
*
|
|
12
12
|
* Order of checks:
|
|
13
|
-
* 1. version acceptance (spec 3.5) — wrong major → UNSUPPORTED_VERSION
|
|
13
|
+
* 1. version acceptance (spec 3.5) — wrong major → UNSUPPORTED_VERSION.
|
|
14
|
+
* Applies to the outer envelope AND, recursively, to every document
|
|
15
|
+
* embedded in a study or bundle: each embedded document is a complete
|
|
16
|
+
* envelope in its own right, so a wrong-major embedded document makes
|
|
17
|
+
* the enclosing document unreadable, matching the Python reference
|
|
18
|
+
* adapter (which parses every embedded document recursively);
|
|
14
19
|
* 2. kind dispatch — unknown kind → BAD_INTERCHANGE (a new kind is a spec
|
|
15
20
|
* minor this reader does not know how to interpret; refusing loudly
|
|
16
21
|
* beats pretending);
|
package/dist/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,YAAY,GACZ,eAAe,GACf,mBAAmB,GACnB,QAAQ,GACR,SAAS,GACT,mBAAmB,CAAC;AAExB,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,mBAAmB,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAwCD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,cAAc,CA2FhB"}
|
package/dist/parse.js
CHANGED
|
@@ -69,7 +69,23 @@ export function parseDocument(value, options = {}) {
|
|
|
69
69
|
// referee relies on: a result claims to apply to a triangle BY TAG, so a
|
|
70
70
|
// nested triangle whose tag no longer matches its own body makes every such
|
|
71
71
|
// claim point at something other than what is actually there.
|
|
72
|
+
//
|
|
73
|
+
// Spec 3.5 applies PER DOCUMENT: each embedded document is a complete
|
|
74
|
+
// envelope, so a wrong-major embedded document makes the enclosing
|
|
75
|
+
// document unreadable — matching the Python reference adapter, which
|
|
76
|
+
// parses every embedded document recursively. Version acceptance is not
|
|
77
|
+
// strictness-governed (strictness covers integrity only), so this check
|
|
78
|
+
// runs unconditionally, before the nested integrity check.
|
|
72
79
|
for (const { path, value } of embeddedDocuments(doc)) {
|
|
80
|
+
try {
|
|
81
|
+
acceptVersion(value["interchangeVersion"]);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (error instanceof ReservingError) {
|
|
85
|
+
throw new ReservingError(error.code, `Embedded document at ${path}: ${error.message}`);
|
|
86
|
+
}
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
73
89
|
const nested = verifyIntegrity(value);
|
|
74
90
|
if (nested.ok)
|
|
75
91
|
continue;
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAEL,cAAc,EACd,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuarial-ts/interchange",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "The actuarial-interchange format for the actuarial-ts SDK: language-neutral, versioned interchange documents (triangles, selections, method results, studies, bundles, crosscheck reports) with RFC 8785 canonicalization, semantic-body integrity tags, an intent/value coherence rule, and the cross-implementation referee. Bridges actuarial-ts with chainladder-python and R ChainLadder.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"emit-schema": "npm run build && node --experimental-strip-types scripts/emit-schema.ts"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@actuarial-ts/core": "^0.
|
|
56
|
+
"@actuarial-ts/core": "^0.4.0",
|
|
57
57
|
"zod": "^3.25.76"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
package/src/convert/result.ts
CHANGED
|
@@ -46,7 +46,7 @@ export type ConvertibleResult =
|
|
|
46
46
|
* The engine stamp for results computed by @actuarial-ts/core. A sync test
|
|
47
47
|
* pins the version to the installed core package so it cannot drift.
|
|
48
48
|
*/
|
|
49
|
-
export const CORE_ENGINE: EngineStamp = { name: "actuarial-ts", version: "0.
|
|
49
|
+
export const CORE_ENGINE: EngineStamp = { name: "actuarial-ts", version: "0.4.0" };
|
|
50
50
|
|
|
51
51
|
export interface ResultToDocOptions {
|
|
52
52
|
/** The triangle document the result was computed from. */
|
package/src/envelope.ts
CHANGED
|
@@ -37,7 +37,7 @@ export const INTERCHANGE_SPEC_MAJOR = 1;
|
|
|
37
37
|
* This package's version, stamped into `generator` by default. A sync test
|
|
38
38
|
* asserts it matches package.json so it cannot silently drift.
|
|
39
39
|
*/
|
|
40
|
-
export const INTERCHANGE_PACKAGE_VERSION = "0.
|
|
40
|
+
export const INTERCHANGE_PACKAGE_VERSION = "0.4.0";
|
|
41
41
|
|
|
42
42
|
export interface GeneratorStamp {
|
|
43
43
|
name: string;
|
package/src/parse.ts
CHANGED
|
@@ -20,7 +20,12 @@ import type { CrosscheckReportDoc } from "./schemas/crosscheck.js";
|
|
|
20
20
|
* document.
|
|
21
21
|
*
|
|
22
22
|
* Order of checks:
|
|
23
|
-
* 1. version acceptance (spec 3.5) — wrong major → UNSUPPORTED_VERSION
|
|
23
|
+
* 1. version acceptance (spec 3.5) — wrong major → UNSUPPORTED_VERSION.
|
|
24
|
+
* Applies to the outer envelope AND, recursively, to every document
|
|
25
|
+
* embedded in a study or bundle: each embedded document is a complete
|
|
26
|
+
* envelope in its own right, so a wrong-major embedded document makes
|
|
27
|
+
* the enclosing document unreadable, matching the Python reference
|
|
28
|
+
* adapter (which parses every embedded document recursively);
|
|
24
29
|
* 2. kind dispatch — unknown kind → BAD_INTERCHANGE (a new kind is a spec
|
|
25
30
|
* minor this reader does not know how to interpret; refusing loudly
|
|
26
31
|
* beats pretending);
|
|
@@ -143,7 +148,22 @@ export function parseDocument(
|
|
|
143
148
|
// referee relies on: a result claims to apply to a triangle BY TAG, so a
|
|
144
149
|
// nested triangle whose tag no longer matches its own body makes every such
|
|
145
150
|
// claim point at something other than what is actually there.
|
|
151
|
+
//
|
|
152
|
+
// Spec 3.5 applies PER DOCUMENT: each embedded document is a complete
|
|
153
|
+
// envelope, so a wrong-major embedded document makes the enclosing
|
|
154
|
+
// document unreadable — matching the Python reference adapter, which
|
|
155
|
+
// parses every embedded document recursively. Version acceptance is not
|
|
156
|
+
// strictness-governed (strictness covers integrity only), so this check
|
|
157
|
+
// runs unconditionally, before the nested integrity check.
|
|
146
158
|
for (const { path, value } of embeddedDocuments(doc)) {
|
|
159
|
+
try {
|
|
160
|
+
acceptVersion((value as Record<string, unknown>)["interchangeVersion"]);
|
|
161
|
+
} catch (error) {
|
|
162
|
+
if (error instanceof ReservingError) {
|
|
163
|
+
throw new ReservingError(error.code, `Embedded document at ${path}: ${error.message}`);
|
|
164
|
+
}
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
147
167
|
const nested = verifyIntegrity(value as Parameters<typeof verifyIntegrity>[0]);
|
|
148
168
|
if (nested.ok) continue;
|
|
149
169
|
const nestedKind =
|