@actuarial-ts/core 0.6.0 → 0.7.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.
Files changed (133) hide show
  1. package/README.md +12 -3
  2. package/dist/canonical.d.ts +11 -0
  3. package/dist/canonical.d.ts.map +1 -1
  4. package/dist/canonical.js +136 -26
  5. package/dist/canonical.js.map +1 -1
  6. package/dist/capping.d.ts.map +1 -1
  7. package/dist/capping.js +39 -6
  8. package/dist/capping.js.map +1 -1
  9. package/dist/diagnosticAggregation.d.ts +3 -0
  10. package/dist/diagnosticAggregation.d.ts.map +1 -1
  11. package/dist/diagnosticAggregation.js +30 -7
  12. package/dist/diagnosticAggregation.js.map +1 -1
  13. package/dist/diagnosticDefinitions.d.ts +3 -0
  14. package/dist/diagnosticDefinitions.d.ts.map +1 -1
  15. package/dist/diagnosticDefinitions.js +844 -182
  16. package/dist/diagnosticDefinitions.js.map +1 -1
  17. package/dist/diagnosticDerivations.d.ts +23 -0
  18. package/dist/diagnosticDerivations.d.ts.map +1 -1
  19. package/dist/diagnosticDerivations.js +187 -43
  20. package/dist/diagnosticDerivations.js.map +1 -1
  21. package/dist/diagnosticEvidenceIntern.d.ts +16 -0
  22. package/dist/diagnosticEvidenceIntern.d.ts.map +1 -0
  23. package/dist/diagnosticEvidenceIntern.js +139 -0
  24. package/dist/diagnosticEvidenceIntern.js.map +1 -0
  25. package/dist/diagnosticExposure.d.ts +2 -2
  26. package/dist/diagnosticExposure.d.ts.map +1 -1
  27. package/dist/diagnosticExposure.js +319 -21
  28. package/dist/diagnosticExposure.js.map +1 -1
  29. package/dist/diagnosticExpressions.d.ts +1 -1
  30. package/dist/diagnosticExpressions.d.ts.map +1 -1
  31. package/dist/diagnosticExpressions.js +35 -15
  32. package/dist/diagnosticExpressions.js.map +1 -1
  33. package/dist/diagnosticFormulas.d.ts +3 -0
  34. package/dist/diagnosticFormulas.d.ts.map +1 -1
  35. package/dist/diagnosticFormulas.js +160 -26
  36. package/dist/diagnosticFormulas.js.map +1 -1
  37. package/dist/diagnosticIdentity.d.ts +15 -1
  38. package/dist/diagnosticIdentity.d.ts.map +1 -1
  39. package/dist/diagnosticIdentity.js +321 -51
  40. package/dist/diagnosticIdentity.js.map +1 -1
  41. package/dist/diagnosticIdentityStream.d.ts +56 -0
  42. package/dist/diagnosticIdentityStream.d.ts.map +1 -0
  43. package/dist/diagnosticIdentityStream.js +472 -0
  44. package/dist/diagnosticIdentityStream.js.map +1 -0
  45. package/dist/diagnosticOrdering.d.ts +8 -0
  46. package/dist/diagnosticOrdering.d.ts.map +1 -0
  47. package/dist/diagnosticOrdering.js +73 -0
  48. package/dist/diagnosticOrdering.js.map +1 -0
  49. package/dist/diagnosticPeriodAxis.d.ts +9 -0
  50. package/dist/diagnosticPeriodAxis.d.ts.map +1 -0
  51. package/dist/diagnosticPeriodAxis.js +69 -0
  52. package/dist/diagnosticPeriodAxis.js.map +1 -0
  53. package/dist/diagnosticPeriods.d.ts +2 -3
  54. package/dist/diagnosticPeriods.d.ts.map +1 -1
  55. package/dist/diagnosticPeriods.js +20 -68
  56. package/dist/diagnosticPeriods.js.map +1 -1
  57. package/dist/diagnosticPreparation.d.ts +75 -14
  58. package/dist/diagnosticPreparation.d.ts.map +1 -1
  59. package/dist/diagnosticPreparation.js +1606 -112
  60. package/dist/diagnosticPreparation.js.map +1 -1
  61. package/dist/diagnosticReview.d.ts +40 -15
  62. package/dist/diagnosticReview.d.ts.map +1 -1
  63. package/dist/diagnosticReview.js +600 -42
  64. package/dist/diagnosticReview.js.map +1 -1
  65. package/dist/diagnosticReviewSources.d.ts +18 -0
  66. package/dist/diagnosticReviewSources.d.ts.map +1 -0
  67. package/dist/diagnosticReviewSources.js +76 -0
  68. package/dist/diagnosticReviewSources.js.map +1 -0
  69. package/dist/diagnosticReviewStore.d.ts +88 -0
  70. package/dist/diagnosticReviewStore.d.ts.map +1 -0
  71. package/dist/diagnosticReviewStore.js +455 -0
  72. package/dist/diagnosticReviewStore.js.map +1 -0
  73. package/dist/diagnosticRunner.d.ts +27 -2
  74. package/dist/diagnosticRunner.d.ts.map +1 -1
  75. package/dist/diagnosticRunner.js +764 -70
  76. package/dist/diagnosticRunner.js.map +1 -1
  77. package/dist/diagnosticRuntime.d.ts +26 -0
  78. package/dist/diagnosticRuntime.d.ts.map +1 -0
  79. package/dist/diagnosticRuntime.js +243 -0
  80. package/dist/diagnosticRuntime.js.map +1 -0
  81. package/dist/diagnosticSourceOrdering.d.ts +6 -0
  82. package/dist/diagnosticSourceOrdering.d.ts.map +1 -0
  83. package/dist/diagnosticSourceOrdering.js +38 -0
  84. package/dist/diagnosticSourceOrdering.js.map +1 -0
  85. package/dist/fnvAccumulator.d.ts +6 -0
  86. package/dist/fnvAccumulator.d.ts.map +1 -0
  87. package/dist/fnvAccumulator.js +21 -0
  88. package/dist/fnvAccumulator.js.map +1 -0
  89. package/dist/index.d.ts +15 -8
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +10 -4
  92. package/dist/index.js.map +1 -1
  93. package/dist/mack.d.ts +4 -0
  94. package/dist/mack.d.ts.map +1 -1
  95. package/dist/mack.js +32 -4
  96. package/dist/mack.js.map +1 -1
  97. package/dist/triangle.d.ts.map +1 -1
  98. package/dist/triangle.js +59 -9
  99. package/dist/triangle.js.map +1 -1
  100. package/dist/types.d.ts +4 -0
  101. package/dist/types.d.ts.map +1 -1
  102. package/dist/types.js +22 -8
  103. package/dist/types.js.map +1 -1
  104. package/dist/version.d.ts +1 -1
  105. package/dist/version.js +1 -1
  106. package/package.json +3 -2
  107. package/src/canonical.ts +144 -26
  108. package/src/capping.ts +109 -18
  109. package/src/diagnosticAggregation.ts +69 -20
  110. package/src/diagnosticDefinitions.ts +2675 -426
  111. package/src/diagnosticDerivations.ts +281 -49
  112. package/src/diagnosticEvidenceIntern.ts +151 -0
  113. package/src/diagnosticExposure.ts +550 -50
  114. package/src/diagnosticExpressions.ts +99 -17
  115. package/src/diagnosticFormulas.ts +239 -39
  116. package/src/diagnosticIdentity.ts +700 -191
  117. package/src/diagnosticIdentityStream.ts +553 -0
  118. package/src/diagnosticOrdering.ts +106 -0
  119. package/src/diagnosticPeriodAxis.ts +92 -0
  120. package/src/diagnosticPeriods.ts +67 -82
  121. package/src/diagnosticPreparation.ts +2558 -132
  122. package/src/diagnosticReview.ts +1072 -58
  123. package/src/diagnosticReviewSources.ts +85 -0
  124. package/src/diagnosticReviewStore.ts +692 -0
  125. package/src/diagnosticRunner.ts +1273 -72
  126. package/src/diagnosticRuntime.ts +264 -0
  127. package/src/diagnosticSourceOrdering.ts +50 -0
  128. package/src/fnvAccumulator.ts +20 -0
  129. package/src/index.ts +69 -4
  130. package/src/mack.ts +72 -9
  131. package/src/triangle.ts +103 -13
  132. package/src/types.ts +55 -20
  133. package/src/version.ts +1 -1
@@ -0,0 +1,85 @@
1
+ import { canonicalJson } from "./canonical.js";
2
+ import type { DiagnosticSourceLocation } from "./diagnosticDefinitions.js";
3
+ import {
4
+ compareDiagnosticSourceLocations,
5
+ normalizeDiagnosticSourceLocations,
6
+ } from "./diagnosticSourceOrdering.js";
7
+
8
+ /**
9
+ * Private, invocation-owned evidence interner. Only the authenticated review
10
+ * evaluator registers preparation sources: its preparation is deeply frozen.
11
+ * Neither this pool nor its bookkeeping is retained on the result or a cell.
12
+ */
13
+ export function createDiagnosticReviewSourcePool() {
14
+ type SourceEntry = { key: string; value: DiagnosticSourceLocation };
15
+ const preparedSources = new WeakMap<object, SourceEntry>();
16
+ const ownedSources = new WeakMap<object, SourceEntry>();
17
+ const ownedLists = new WeakSet<readonly DiagnosticSourceLocation[]>();
18
+ const sourceEntry = (
19
+ value: DiagnosticSourceLocation,
20
+ fromPrepared: boolean,
21
+ ): SourceEntry => {
22
+ const previous =
23
+ ownedSources.get(value) ??
24
+ (fromPrepared ? preparedSources.get(value) : undefined);
25
+ if (previous) return previous;
26
+ // Preserve the authoritative full-value contract, including extra own
27
+ // data. An artifact/file/sheet/row tuple is not an exact-value substitute.
28
+ const normalized = normalizeDiagnosticSourceLocations([value])[0]!;
29
+ const key = canonicalJson(normalized);
30
+ // Fresh/unrecognized expression evidence takes the value path every time.
31
+ // Its children may be caller-owned even if the outer source was frozen.
32
+ if (!fromPrepared) return { key, value: normalized };
33
+ // Deduplicate by canonical value only inside each ordered union below.
34
+ // Across subsets, equal canonical keys can still have different original
35
+ // representatives (for example -0/+0 in extra own data). Keep the snapshot
36
+ // associated with each prepared source so the first occurrence still wins.
37
+ const entry = { key, value: Object.freeze(normalized) };
38
+ ownedSources.set(entry.value, entry);
39
+ preparedSources.set(value, entry);
40
+ return entry;
41
+ };
42
+ const collection = () => {
43
+ const entries = new Map<string, DiagnosticSourceLocation>();
44
+ let owned = true;
45
+ return {
46
+ /** `fromPrepared` is private evaluator authority, not an input option. */
47
+ add(value: DiagnosticSourceLocation, fromPrepared: boolean): void {
48
+ const entry = sourceEntry(value, fromPrepared);
49
+ owned &&= ownedSources.has(entry.value);
50
+ if (!entries.has(entry.key)) entries.set(entry.key, entry.value);
51
+ },
52
+ finish(): readonly DiagnosticSourceLocation[] {
53
+ const values = Object.freeze(
54
+ [...entries.values()].sort(compareDiagnosticSourceLocations),
55
+ );
56
+ if (owned) ownedLists.add(values);
57
+ return values;
58
+ },
59
+ };
60
+ };
61
+ const union = (
62
+ lists: readonly (readonly DiagnosticSourceLocation[])[],
63
+ ): readonly DiagnosticSourceLocation[] => {
64
+ const target = collection();
65
+ for (const values of lists)
66
+ for (const source of values) target.add(source, false);
67
+ return target.finish();
68
+ };
69
+ const forPreparedSources = (
70
+ values: readonly DiagnosticSourceLocation[],
71
+ ): readonly DiagnosticSourceLocation[] => {
72
+ const target = collection();
73
+ for (const source of values) target.add(source, true);
74
+ return target.finish();
75
+ };
76
+ return {
77
+ collection,
78
+ union,
79
+ forPreparedSources,
80
+ // Ownership means this invocation's snapshots, not Object.isFrozen on an
81
+ // arbitrary caller array/object. The builder uses these only while appending.
82
+ sourceKey: (value: DiagnosticSourceLocation) => ownedSources.get(value)?.key,
83
+ ownsList: (value: readonly DiagnosticSourceLocation[]) => ownedLists.has(value),
84
+ };
85
+ }