@actuarial-ts/core 0.6.1 → 0.7.1

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 (63) hide show
  1. package/README.md +44 -2
  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/diagnosticEvidenceIntern.d.ts +16 -0
  7. package/dist/diagnosticEvidenceIntern.d.ts.map +1 -0
  8. package/dist/diagnosticEvidenceIntern.js +139 -0
  9. package/dist/diagnosticEvidenceIntern.js.map +1 -0
  10. package/dist/diagnosticExposure.d.ts.map +1 -1
  11. package/dist/diagnosticExposure.js +97 -7
  12. package/dist/diagnosticExposure.js.map +1 -1
  13. package/dist/diagnosticIdentity.d.ts.map +1 -1
  14. package/dist/diagnosticIdentity.js +6 -3
  15. package/dist/diagnosticIdentity.js.map +1 -1
  16. package/dist/diagnosticIdentityStream.d.ts +56 -0
  17. package/dist/diagnosticIdentityStream.d.ts.map +1 -0
  18. package/dist/diagnosticIdentityStream.js +472 -0
  19. package/dist/diagnosticIdentityStream.js.map +1 -0
  20. package/dist/diagnosticPreparation.d.ts +28 -0
  21. package/dist/diagnosticPreparation.d.ts.map +1 -1
  22. package/dist/diagnosticPreparation.js +160 -36
  23. package/dist/diagnosticPreparation.js.map +1 -1
  24. package/dist/diagnosticReview.d.ts +4 -1
  25. package/dist/diagnosticReview.d.ts.map +1 -1
  26. package/dist/diagnosticReview.js +203 -51
  27. package/dist/diagnosticReview.js.map +1 -1
  28. package/dist/diagnosticReviewSources.d.ts +18 -0
  29. package/dist/diagnosticReviewSources.d.ts.map +1 -0
  30. package/dist/diagnosticReviewSources.js +76 -0
  31. package/dist/diagnosticReviewSources.js.map +1 -0
  32. package/dist/diagnosticReviewStore.d.ts +88 -0
  33. package/dist/diagnosticReviewStore.d.ts.map +1 -0
  34. package/dist/diagnosticReviewStore.js +455 -0
  35. package/dist/diagnosticReviewStore.js.map +1 -0
  36. package/dist/diagnosticRunner.d.ts +25 -1
  37. package/dist/diagnosticRunner.d.ts.map +1 -1
  38. package/dist/diagnosticRunner.js +115 -7
  39. package/dist/diagnosticRunner.js.map +1 -1
  40. package/dist/fnvAccumulator.d.ts +6 -0
  41. package/dist/fnvAccumulator.d.ts.map +1 -0
  42. package/dist/fnvAccumulator.js +21 -0
  43. package/dist/fnvAccumulator.js.map +1 -0
  44. package/dist/index.d.ts +8 -5
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +5 -3
  47. package/dist/index.js.map +1 -1
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/package.json +1 -1
  51. package/src/canonical.ts +144 -26
  52. package/src/diagnosticEvidenceIntern.ts +151 -0
  53. package/src/diagnosticExposure.ts +126 -17
  54. package/src/diagnosticIdentity.ts +15 -6
  55. package/src/diagnosticIdentityStream.ts +553 -0
  56. package/src/diagnosticPreparation.ts +268 -84
  57. package/src/diagnosticReview.ts +293 -85
  58. package/src/diagnosticReviewSources.ts +85 -0
  59. package/src/diagnosticReviewStore.ts +692 -0
  60. package/src/diagnosticRunner.ts +206 -9
  61. package/src/fnvAccumulator.ts +20 -0
  62. package/src/index.ts +38 -1
  63. package/src/version.ts +1 -1
@@ -22,9 +22,18 @@ import {
22
22
  type DiagnosticRuleEvaluation,
23
23
  } from "./diagnosticRules.js";
24
24
  import {
25
+ assertCompactPreparedDiagnosticData,
25
26
  assertPreparedDiagnosticData,
27
+ getCompactPreparedDiagnosticDataFingerprint,
28
+ type CompactPreparedDiagnosticData,
26
29
  type PreparedDiagnosticData,
30
+ type PreparedDiagnosticDataContent,
27
31
  } from "./diagnosticPreparation.js";
32
+ import {
33
+ createDiagnosticIdentityObject,
34
+ createDiagnosticIdentityValue,
35
+ type DiagnosticIdentityDocument,
36
+ } from "./diagnosticIdentityStream.js";
28
37
  import type { DiagnosticMeasureStats } from "./diagnosticDefinitions.js";
29
38
  import {
30
39
  DiagnosticValidationError,
@@ -50,6 +59,15 @@ export interface RunMetricDiagnosticsInput {
50
59
  readonly groupMap?: Readonly<Record<string, string>>;
51
60
  readonly groupDimensions?: Readonly<Record<string, JsonValue>>;
52
61
  }
62
+ export interface RunMetricDiagnosticsCompactInput {
63
+ readonly prepared: CompactPreparedDiagnosticData;
64
+ readonly groupMap?: Readonly<Record<string, string>>;
65
+ readonly groupDimensions?: Readonly<Record<string, JsonValue>>;
66
+ }
67
+ type RunMetricDiagnosticsContentInput = Omit<
68
+ RunMetricDiagnosticsInput,
69
+ "prepared"
70
+ > & { readonly prepared: PreparedDiagnosticDataContent };
53
71
  export interface DiagnosticMetricEvaluation {
54
72
  readonly instanceId: string;
55
73
  readonly instanceVersion: string;
@@ -113,6 +131,23 @@ export interface MetricDiagnosticsResult {
113
131
  readonly latestDiagonal: readonly DiagnosticEmergencePoint[];
114
132
  readonly findings: readonly DiagnosticMetricFinding[];
115
133
  }
134
+ export type MetricDiagnosticsResultContent = Omit<
135
+ MetricDiagnosticsResult,
136
+ "preparationFingerprint"
137
+ >;
138
+ declare const compactMetricDiagnosticsResultBrand: unique symbol;
139
+ /** Complete numeric views whose preparation identity is explicitly deferred. */
140
+ export interface CompactMetricDiagnosticsResult extends MetricDiagnosticsResultContent {
141
+ readonly [compactMetricDiagnosticsResultBrand]: true;
142
+ }
143
+ const compactResultPreparations = new WeakMap<
144
+ object,
145
+ CompactPreparedDiagnosticData
146
+ >();
147
+ const compactResultDocuments = new WeakMap<
148
+ object,
149
+ DiagnosticIdentityDocument
150
+ >();
116
151
  export interface CommonMaturityResult {
117
152
  readonly developmentAge: number | null;
118
153
  readonly ageUnit: string;
@@ -210,6 +245,19 @@ export function validateDiagnosticGroupingConfiguration(
210
245
  input: RunMetricDiagnosticsInput,
211
246
  ): void {
212
247
  assertPreparedDiagnosticData(input.prepared);
248
+ validateGroupingContent(input);
249
+ }
250
+
251
+ export function validateCompactDiagnosticGroupingConfiguration(
252
+ input: RunMetricDiagnosticsCompactInput,
253
+ ): void {
254
+ assertCompactPreparedDiagnosticData(input.prepared);
255
+ validateGroupingContent(input);
256
+ }
257
+
258
+ function validateGroupingContent(
259
+ input: RunMetricDiagnosticsContentInput,
260
+ ): void {
213
261
  const boundaryIssues: DiagnosticValidationIssue[] = [];
214
262
  for (const [value, path] of [
215
263
  [input.groupMap, "$.groupMap"],
@@ -302,7 +350,7 @@ export function validateDiagnosticGroupingConfiguration(
302
350
  }
303
351
 
304
352
  function mergeStats(
305
- cells: readonly PreparedDiagnosticData["cells"][number][],
353
+ cells: readonly PreparedDiagnosticDataContent["cells"][number][],
306
354
  measure: { readonly id: string; readonly missing: "unknown" | "zero" },
307
355
  ): DiagnosticMeasureStats {
308
356
  const contributions = cells.flatMap(
@@ -360,7 +408,7 @@ function inferRoleExpressionMeasure(
360
408
  }
361
409
 
362
410
  function evaluatePoint(
363
- prepared: PreparedDiagnosticData,
411
+ prepared: PreparedDiagnosticDataContent,
364
412
  components: Readonly<Record<string, DiagnosticMeasureStats>>,
365
413
  instanceId: string,
366
414
  context: {
@@ -764,7 +812,96 @@ export function runMetricDiagnostics(
764
812
  input: RunMetricDiagnosticsInput,
765
813
  ): DiagnosticDeepReadonly<MetricDiagnosticsResult> {
766
814
  validateDiagnosticGroupingConfiguration(input);
815
+ const { definitionIntegrity, ...content } = calculateMetricDiagnostics(input);
816
+ return Object.freeze({
817
+ definitionIntegrity,
818
+ preparationFingerprint: input.prepared.preparationFingerprint,
819
+ ...content,
820
+ });
821
+ }
822
+
823
+ export function runMetricDiagnosticsCompact(
824
+ input: RunMetricDiagnosticsCompactInput,
825
+ ): DiagnosticDeepReadonly<CompactMetricDiagnosticsResult> {
826
+ validateCompactDiagnosticGroupingConfiguration(input);
827
+ const result = calculateMetricDiagnostics(input);
828
+ compactResultPreparations.set(result, input.prepared);
829
+ return result as DiagnosticDeepReadonly<CompactMetricDiagnosticsResult>;
830
+ }
831
+
832
+ export function assertCompactMetricDiagnosticsResult(
833
+ value: unknown,
834
+ ): asserts value is DiagnosticDeepReadonly<CompactMetricDiagnosticsResult> {
835
+ if (
836
+ value === null ||
837
+ typeof value !== "object" ||
838
+ !compactResultPreparations.has(value)
839
+ )
840
+ throw new DiagnosticValidationError([
841
+ {
842
+ domain: "input",
843
+ code: "invalid-input-relationship",
844
+ path: "$.result",
845
+ message: "Compact metric diagnostics result is not authentic",
846
+ },
847
+ ]);
848
+ }
849
+
850
+ /** Explicit eager JSON bridge; it is not used during compact calculation. */
851
+ export function materializeMetricDiagnosticsResult(
852
+ value: DiagnosticDeepReadonly<CompactMetricDiagnosticsResult>,
853
+ ): DiagnosticDeepReadonly<MetricDiagnosticsResult> {
854
+ assertCompactMetricDiagnosticsResult(value);
855
+ const preparationFingerprint = getCompactPreparedDiagnosticDataFingerprint(
856
+ compactResultPreparations.get(value)!,
857
+ );
858
+ const { definitionIntegrity, ...content } = value;
859
+ return Object.freeze({
860
+ definitionIntegrity,
861
+ preparationFingerprint,
862
+ ...content,
863
+ });
864
+ }
865
+
866
+ /** Complete core-owned result identity; no normalized result copy is retained. */
867
+ export function getCompactMetricDiagnosticsResultIdentityDocument(
868
+ value: DiagnosticDeepReadonly<CompactMetricDiagnosticsResult>,
869
+ ): DiagnosticIdentityDocument {
870
+ assertCompactMetricDiagnosticsResult(value);
871
+ const previous = compactResultDocuments.get(value);
872
+ if (previous) return previous;
873
+ const document = createDiagnosticIdentityObject({
874
+ definitionIntegrity: createDiagnosticIdentityValue(
875
+ value.definitionIntegrity,
876
+ ),
877
+ preparationFingerprint: createDiagnosticIdentityValue(
878
+ getCompactPreparedDiagnosticDataFingerprint(
879
+ compactResultPreparations.get(value)!,
880
+ ),
881
+ ),
882
+ ageUnit: createDiagnosticIdentityValue(value.ageUnit),
883
+ emergence: createDiagnosticIdentityValue(value.emergence),
884
+ triangles: createDiagnosticIdentityValue(value.triangles),
885
+ latestDiagonal: createDiagnosticIdentityValue(value.latestDiagonal),
886
+ findings: createDiagnosticIdentityValue(value.findings),
887
+ });
888
+ compactResultDocuments.set(value, document);
889
+ return document;
890
+ }
891
+
892
+ function calculateMetricDiagnostics(
893
+ input: RunMetricDiagnosticsContentInput,
894
+ ): DiagnosticDeepReadonly<MetricDiagnosticsResultContent> {
767
895
  const prepared = input.prepared;
896
+ // Grouping validation has already rejected non-JSON shapes. Snapshot each
897
+ // group's opaque metadata once; freezing output must not freeze caller JSON.
898
+ const dimensionSnapshots = new WeakMap<object, JsonValue>();
899
+ const dimensions = new Map(
900
+ Object.entries(input.groupDimensions ?? {}).map(([group, value]) => [
901
+ group,
902
+ snapshotOwnedDimensions(value, dimensionSnapshots),
903
+ ]),
904
+ );
768
905
  const buckets = new Map<string, typeof prepared.cells>();
769
906
  for (const cell of prepared.cells) {
770
907
  const group =
@@ -898,10 +1035,7 @@ export function runMetricDiagnostics(
898
1035
  sourceGroups: [...new Set(cells.map((cell) => cell.sourceGroup))].sort(
899
1036
  codeUnit,
900
1037
  ),
901
- ...(input.groupDimensions &&
902
- Object.prototype.hasOwnProperty.call(input.groupDimensions, group)
903
- ? { dimensions: input.groupDimensions[group] }
904
- : {}),
1038
+ ...(dimensions.has(group) ? { dimensions: dimensions.get(group)! } : {}),
905
1039
  origin,
906
1040
  valuation,
907
1041
  developmentAge: cells[0]!.developmentAge,
@@ -997,7 +1131,6 @@ export function runMetricDiagnostics(
997
1131
  );
998
1132
  return deepFreeze({
999
1133
  definitionIntegrity: prepared.definition.definitionIntegrity,
1000
- preparationFingerprint: prepared.preparationFingerprint,
1001
1134
  ageUnit: prepared.definition.definition.periodAxis.ageUnit,
1002
1135
  emergence,
1003
1136
  triangles,
@@ -1009,8 +1142,40 @@ export function runMetricDiagnostics(
1009
1142
  });
1010
1143
  }
1011
1144
 
1145
+ /** Preserve free-JSON prototypes, own-key order, and -0 without source coercion. */
1146
+ function snapshotOwnedDimensions(
1147
+ value: JsonValue,
1148
+ snapshots: WeakMap<object, JsonValue>,
1149
+ ): JsonValue {
1150
+ if (value === null || typeof value !== "object") return value;
1151
+ const previous = snapshots.get(value);
1152
+ if (previous !== undefined) return previous;
1153
+ if (Array.isArray(value)) {
1154
+ const result = Object.freeze(
1155
+ value.map((item) => snapshotOwnedDimensions(item, snapshots)),
1156
+ );
1157
+ snapshots.set(value, result);
1158
+ return result;
1159
+ }
1160
+ const result = Object.create(Object.getPrototypeOf(value)) as Record<
1161
+ string,
1162
+ JsonValue
1163
+ >;
1164
+ const record = value as Readonly<Record<string, JsonValue>>;
1165
+ for (const key of Object.keys(value))
1166
+ Object.defineProperty(result, key, {
1167
+ value: snapshotOwnedDimensions(record[key]!, snapshots),
1168
+ enumerable: true,
1169
+ configurable: true,
1170
+ writable: true,
1171
+ });
1172
+ const frozen = Object.freeze(result);
1173
+ snapshots.set(value, frozen);
1174
+ return frozen;
1175
+ }
1176
+
1012
1177
  function viewGroups(
1013
- result: DiagnosticDeepReadonly<MetricDiagnosticsResult>,
1178
+ result: DiagnosticDeepReadonly<MetricDiagnosticsResultContent>,
1014
1179
  outputGroups: readonly string[],
1015
1180
  path: string,
1016
1181
  ): readonly string[] {
@@ -1050,6 +1215,23 @@ export function sameMaturity(
1050
1215
  result: DiagnosticDeepReadonly<MetricDiagnosticsResult>,
1051
1216
  developmentAge: number,
1052
1217
  outputGroups?: readonly string[],
1218
+ ): readonly DiagnosticDeepReadonly<DiagnosticEmergencePoint>[] {
1219
+ return sameMaturityContent(result, developmentAge, outputGroups);
1220
+ }
1221
+
1222
+ /** Select compact numeric views without materializing preparation identity. */
1223
+ export function sameMaturityCompact(
1224
+ result: DiagnosticDeepReadonly<CompactMetricDiagnosticsResult>,
1225
+ developmentAge: number,
1226
+ outputGroups?: readonly string[],
1227
+ ): readonly DiagnosticDeepReadonly<DiagnosticEmergencePoint>[] {
1228
+ return sameMaturityContent(result, developmentAge, outputGroups);
1229
+ }
1230
+
1231
+ function sameMaturityContent(
1232
+ result: DiagnosticDeepReadonly<MetricDiagnosticsResultContent>,
1233
+ developmentAge: number,
1234
+ outputGroups?: readonly string[],
1053
1235
  ): readonly DiagnosticDeepReadonly<DiagnosticEmergencePoint>[] {
1054
1236
  if (!Number.isSafeInteger(developmentAge) || developmentAge < 0)
1055
1237
  throw new DiagnosticValidationError([
@@ -1074,6 +1256,21 @@ export function sameMaturity(
1074
1256
  export function commonMaturity(
1075
1257
  result: DiagnosticDeepReadonly<MetricDiagnosticsResult>,
1076
1258
  outputGroups: readonly string[],
1259
+ ): DiagnosticDeepReadonly<CommonMaturityResult> {
1260
+ return commonMaturityContent(result, outputGroups);
1261
+ }
1262
+
1263
+ /** Select compact numeric views without materializing preparation identity. */
1264
+ export function commonMaturityCompact(
1265
+ result: DiagnosticDeepReadonly<CompactMetricDiagnosticsResult>,
1266
+ outputGroups: readonly string[],
1267
+ ): DiagnosticDeepReadonly<CommonMaturityResult> {
1268
+ return commonMaturityContent(result, outputGroups);
1269
+ }
1270
+
1271
+ function commonMaturityContent(
1272
+ result: DiagnosticDeepReadonly<MetricDiagnosticsResultContent>,
1273
+ outputGroups: readonly string[],
1077
1274
  ): DiagnosticDeepReadonly<CommonMaturityResult> {
1078
1275
  const groups = viewGroups(result, outputGroups, "$.outputGroups");
1079
1276
  if (groups.length === 0)
@@ -1104,7 +1301,7 @@ export function commonMaturity(
1104
1301
  points:
1105
1302
  developmentAge === null
1106
1303
  ? []
1107
- : sameMaturity(result, developmentAge, groups),
1304
+ : sameMaturityContent(result, developmentAge, groups),
1108
1305
  });
1109
1306
  }
1110
1307
  export function getMetricDiagnosticsResultIdentity(
@@ -0,0 +1,20 @@
1
+ /** @internal Shared exact FNV-1a state; deliberately not a package export. */
2
+ export function createFnvAccumulator() {
3
+ let high = 0xcbf29ce4;
4
+ let low = 0x84222325;
5
+ return {
6
+ update(bytes: Uint8Array) {
7
+ for (const byte of bytes) {
8
+ low = (low ^ byte) >>> 0;
9
+ // FNV_PRIME = 2^40 + 435. Every intermediate stays below 2^42,
10
+ // preserving the exact modular multiplication of the BigInt form.
11
+ const product = low * 0x1b3;
12
+ high = (high * 0x1b3 + Math.floor(product / 0x100000000) + (low << 8)) >>> 0;
13
+ low = product >>> 0;
14
+ }
15
+ },
16
+ digest() {
17
+ return high.toString(16).padStart(8, "0") + low.toString(16).padStart(8, "0");
18
+ },
19
+ };
20
+ }
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./types.js";
2
2
  export * from "./util.js";
3
3
  export * from "./canonical.js";
4
+ export * from "./diagnosticIdentityStream.js";
4
5
  export * from "./version.js";
5
6
  export {
6
7
  MAX_DIAGNOSTIC_JSON_DEPTH,
@@ -122,12 +123,18 @@ export {
122
123
  reconcileDiagnosticExposures,
123
124
  } from "./diagnosticExposure.js";
124
125
  export {
126
+ assertCompactPreparedDiagnosticData,
125
127
  assertPreparedDiagnosticData,
126
128
  getPreparedDiagnosticDataIdentity,
129
+ getCompactPreparedDiagnosticDataIdentityDocument,
130
+ getCompactPreparedDiagnosticDataFingerprint,
131
+ materializePreparedDiagnosticData,
127
132
  prepareDiagnosticData,
133
+ prepareDiagnosticDataCompact,
128
134
  verifyPreparedDiagnosticDataIntegrity,
129
135
  } from "./diagnosticPreparation.js";
130
136
  export type {
137
+ CompactPreparedDiagnosticData,
131
138
  DiagnosticClaimObservation,
132
139
  DiagnosticCompletePeriodCutoff,
133
140
  DiagnosticExpectedCell,
@@ -143,16 +150,43 @@ export type {
143
150
  NormalizedDiagnosticExpectedCellIdentity,
144
151
  PrepareDiagnosticDataInput,
145
152
  PreparedDiagnosticData,
153
+ PreparedDiagnosticDataContent,
146
154
  PreparedDiagnosticSourceCell,
147
155
  } from "./diagnosticPreparation.js";
148
156
  export {
157
+ assertCompactMetricDiagnosticsResult,
149
158
  commonMaturity,
159
+ commonMaturityCompact,
150
160
  getMetricDiagnosticsResultIdentity,
161
+ getCompactMetricDiagnosticsResultIdentityDocument,
151
162
  runMetricDiagnostics,
163
+ runMetricDiagnosticsCompact,
164
+ materializeMetricDiagnosticsResult,
152
165
  sameMaturity,
166
+ sameMaturityCompact,
153
167
  validateDiagnosticGroupingConfiguration,
168
+ validateCompactDiagnosticGroupingConfiguration,
154
169
  } from "./diagnosticRunner.js";
155
- export { evaluateDiagnosticReviewRules } from "./diagnosticReview.js";
170
+ export { evaluateDiagnosticReviewRules, evaluateDiagnosticReviewRulesCompact } from "./diagnosticReview.js";
171
+ export {
172
+ assertCompactDiagnosticReviewEvaluations,
173
+ getDiagnosticReviewEvaluation,
174
+ getDiagnosticReviewEvaluationSummary,
175
+ getCompactDiagnosticReviewEvaluationsIdentityDocument,
176
+ iterateDiagnosticReviewEvaluations,
177
+ pageDiagnosticReviewEvaluations,
178
+ pageDiagnosticReviewEvaluationSources,
179
+ } from "./diagnosticReviewStore.js";
180
+ export type {
181
+ CompactDiagnosticReviewEvaluations,
182
+ CompactDiagnosticReviewRuleSummary,
183
+ DiagnosticReviewEffectiveStatus,
184
+ DiagnosticReviewEvaluationQuery,
185
+ DiagnosticReviewEvaluationSummary,
186
+ DiagnosticReviewPage,
187
+ DiagnosticReviewSourceQuery,
188
+ DiagnosticReviewStatusCounts,
189
+ } from "./diagnosticReviewStore.js";
156
190
  export type {
157
191
  DiagnosticCellReviewScope,
158
192
  DiagnosticControlTotalReviewScope,
@@ -165,13 +199,16 @@ export type {
165
199
  } from "./diagnosticReview.js";
166
200
  export type {
167
201
  CommonMaturityResult,
202
+ CompactMetricDiagnosticsResult,
168
203
  DiagnosticEmergencePoint,
169
204
  DiagnosticMetricEvaluation,
170
205
  DiagnosticMetricTriangle,
171
206
  DiagnosticMetricTriangleCell,
172
207
  MetricDiagnosticsResult,
208
+ MetricDiagnosticsResultContent,
173
209
  NormalizedDiagnosticResultIdentity,
174
210
  RunMetricDiagnosticsInput,
211
+ RunMetricDiagnosticsCompactInput,
175
212
  } from "./diagnosticRunner.js";
176
213
  export type {
177
214
  DiagnosticAuditedNumericValue,
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** This package's runtime version. A test pins it to package.json. */
2
- export const CORE_PACKAGE_VERSION = "0.6.1";
2
+ export const CORE_PACKAGE_VERSION = "0.7.1";