elemento-alpha-tools 1.3.11 → 1.3.12

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.
@@ -0,0 +1,10 @@
1
+ import { AlignedSeries } from '../timeSeries/TimeSeriesPipeline';
2
+ export interface RegressionResult {
3
+ intercept: number;
4
+ coefficients: number[];
5
+ rSquared: number;
6
+ }
7
+ export declare class RegressionError extends Error {
8
+ constructor(message: string);
9
+ }
10
+ export declare function fitOLS(aligned: AlignedSeries): RegressionResult;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegressionError = void 0;
4
+ exports.fitOLS = fitOLS;
5
+ class RegressionError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = 'RegressionError';
9
+ }
10
+ }
11
+ exports.RegressionError = RegressionError;
12
+ function identityRow(size, index) {
13
+ const row = new Array(size).fill(0);
14
+ row[index] = 1;
15
+ return row;
16
+ }
17
+ function transpose(matrix) {
18
+ const rows = matrix.length;
19
+ const cols = rows > 0 ? matrix[0].length : 0;
20
+ const result = Array.from({ length: cols }, () => new Array(rows).fill(0));
21
+ for (let i = 0; i < rows; i++) {
22
+ for (let j = 0; j < cols; j++)
23
+ result[j][i] = matrix[i][j];
24
+ }
25
+ return result;
26
+ }
27
+ function multiply(a, b) {
28
+ const rows = a.length;
29
+ const inner = b.length;
30
+ const cols = inner > 0 ? b[0].length : 0;
31
+ const result = Array.from({ length: rows }, () => new Array(cols).fill(0));
32
+ for (let i = 0; i < rows; i++) {
33
+ for (let k = 0; k < inner; k++) {
34
+ const factor = a[i][k];
35
+ for (let j = 0; j < cols; j++)
36
+ result[i][j] += factor * b[k][j];
37
+ }
38
+ }
39
+ return result;
40
+ }
41
+ function invert(matrix) {
42
+ const size = matrix.length;
43
+ const augmented = matrix.map((row, i) => [...row, ...identityRow(size, i)]);
44
+ let singular = false;
45
+ for (let pivot = 0; pivot < size; pivot++) {
46
+ let best = pivot;
47
+ for (let row = pivot + 1; row < size; row++) {
48
+ if (Math.abs(augmented[row][pivot]) > Math.abs(augmented[best][pivot]))
49
+ best = row;
50
+ }
51
+ const pivotValue = augmented[best][pivot];
52
+ if (Math.abs(pivotValue) < 1e-12) {
53
+ singular = true;
54
+ break;
55
+ }
56
+ [augmented[pivot], augmented[best]] = [augmented[best], augmented[pivot]];
57
+ for (let col = 0; col < 2 * size; col++)
58
+ augmented[pivot][col] /= pivotValue;
59
+ for (let row = 0; row < size; row++) {
60
+ if (row !== pivot) {
61
+ const factor = augmented[row][pivot];
62
+ for (let col = 0; col < 2 * size; col++)
63
+ augmented[row][col] -= factor * augmented[pivot][col];
64
+ }
65
+ }
66
+ }
67
+ if (singular)
68
+ throw new RegressionError('Cannot solve regression: variables are collinear or degenerate');
69
+ return augmented.map(row => row.slice(size));
70
+ }
71
+ function fitOLS(aligned) {
72
+ const { y, x } = aligned;
73
+ const observations = y.length;
74
+ const predictors = x.length > 0 ? x[0].length : 0;
75
+ if (observations >= predictors + 2) {
76
+ const design = x.map(row => [1, ...row]);
77
+ const designT = transpose(design);
78
+ const inverse = invert(multiply(designT, design));
79
+ const projected = multiply(designT, y.map(value => [value]));
80
+ const beta = multiply(inverse, projected).map(row => row[0]);
81
+ const predictions = design.map(row => row.reduce((sum, value, i) => sum + value * beta[i], 0));
82
+ const mean = y.reduce((sum, value) => sum + value, 0) / observations;
83
+ const totalSum = y.reduce((sum, value) => sum + Math.pow((value - mean), 2), 0);
84
+ const residualSum = y.reduce((sum, value, i) => sum + Math.pow((value - predictions[i]), 2), 0);
85
+ return {
86
+ intercept: beta[0],
87
+ coefficients: beta.slice(1),
88
+ rSquared: totalSum > 0 ? 1 - residualSum / totalSum : 0
89
+ };
90
+ }
91
+ throw new RegressionError(`Regression needs more observations than variables: got ${observations} rows for ${predictors} variables`);
92
+ }
93
+ //# sourceMappingURL=OrdinaryLeastSquares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrdinaryLeastSquares.js","sourceRoot":"","sources":["../../src/econometrics/OrdinaryLeastSquares.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -30,6 +30,8 @@ export { ReturnGoal as ReturnGoal } from "./optimization/search/portfolio/goals/
30
30
  export { VolatilityGoal as VolatilityGoal } from "./optimization/search/portfolio/goals/VolatilityGoal";
31
31
  export { PortfolioSearch as PortfolioSearch } from "./optimization/search/portfolio/SPEA2PortfolioSearch";
32
32
  export { computeAssetMetrics as computeAssetMetrics, AssetMetrics as AssetMetrics } from "./optimization/assetsMetricsCalculator/AssetMetricsCalculator";
33
+ export { monthEndCloses, monthlyReturns, applyTreatment, applyDelay, alignByMonth, MissingMonthsError, MonthlyPoint, RawPoint, AlignedSeries } from "./timeSeries/TimeSeriesPipeline";
34
+ export { fitOLS, RegressionResult, RegressionError } from "./econometrics/OrdinaryLeastSquares";
33
35
  export { applyLoginMocks as applyLoginMocks } from "./crud/test/LoginServiceMocks";
34
36
  export { applyPlatformMocks as applyPlatformMocks } from "./crud/test/PlatformMocks";
35
37
  export { applyRoleMocks as applyRoleMocks } from "./crud/test/RoleMocks";
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyTypeMocks = exports.applyStatusMocks = exports.applyRoleMocks = exports.applyPlatformMocks = exports.applyLoginMocks = exports.computeAssetMetrics = exports.PortfolioSearch = exports.VolatilityGoal = exports.ReturnGoal = exports.RealOrder = exports.PortfolioXOver = exports.PortfolioMutation = exports.PopulationGenerator = exports.PortfolioIndividualBuilder = exports.PortfolioSpace = exports.UserManager = exports.UserCredentialsManager = exports.TypeManager = exports.StatusManager = exports.SourcesManager = exports.RoleManager = exports.EquationsManager = exports.PortfolioBenchmarkManager = exports.PlatformManager = exports.OptimizationManager = exports.MarketDataManager = exports.IntermediaryDataManager = exports.IntermediaryManager = exports.ForecastManager = exports.ComponentManager = exports.BusinessManager = exports.AvailablePlataformManager = exports.ConfigManager = exports.AssetsManager = exports.RoleServicePermissionsChecker = exports.ServiceSessionChecker = exports.ExpressLogableConfig = void 0;
3
+ exports.applyTypeMocks = exports.applyStatusMocks = exports.applyRoleMocks = exports.applyPlatformMocks = exports.applyLoginMocks = exports.RegressionError = exports.fitOLS = exports.MissingMonthsError = exports.alignByMonth = exports.applyDelay = exports.applyTreatment = exports.monthlyReturns = exports.monthEndCloses = exports.computeAssetMetrics = exports.PortfolioSearch = exports.VolatilityGoal = exports.ReturnGoal = exports.RealOrder = exports.PortfolioXOver = exports.PortfolioMutation = exports.PopulationGenerator = exports.PortfolioIndividualBuilder = exports.PortfolioSpace = exports.UserManager = exports.UserCredentialsManager = exports.TypeManager = exports.StatusManager = exports.SourcesManager = exports.RoleManager = exports.EquationsManager = exports.PortfolioBenchmarkManager = exports.PlatformManager = exports.OptimizationManager = exports.MarketDataManager = exports.IntermediaryDataManager = exports.IntermediaryManager = exports.ForecastManager = exports.ComponentManager = exports.BusinessManager = exports.AvailablePlataformManager = exports.ConfigManager = exports.AssetsManager = exports.RoleServicePermissionsChecker = exports.ServiceSessionChecker = exports.ExpressLogableConfig = void 0;
4
4
  var ExpressLogableConfig_1 = require("./ap\u00ED/ExpressLogableConfig");
5
5
  Object.defineProperty(exports, "ExpressLogableConfig", { enumerable: true, get: function () { return ExpressLogableConfig_1.ExpressLogableConfig; } });
6
6
  var ServiceSessionChecker_1 = require("./ap\u00ED/checkers/ServiceSessionChecker");
@@ -65,6 +65,16 @@ var SPEA2PortfolioSearch_1 = require("./optimization/search/portfolio/SPEA2Portf
65
65
  Object.defineProperty(exports, "PortfolioSearch", { enumerable: true, get: function () { return SPEA2PortfolioSearch_1.PortfolioSearch; } });
66
66
  var AssetMetricsCalculator_1 = require("./optimization/assetsMetricsCalculator/AssetMetricsCalculator");
67
67
  Object.defineProperty(exports, "computeAssetMetrics", { enumerable: true, get: function () { return AssetMetricsCalculator_1.computeAssetMetrics; } });
68
+ var TimeSeriesPipeline_1 = require("./timeSeries/TimeSeriesPipeline");
69
+ Object.defineProperty(exports, "monthEndCloses", { enumerable: true, get: function () { return TimeSeriesPipeline_1.monthEndCloses; } });
70
+ Object.defineProperty(exports, "monthlyReturns", { enumerable: true, get: function () { return TimeSeriesPipeline_1.monthlyReturns; } });
71
+ Object.defineProperty(exports, "applyTreatment", { enumerable: true, get: function () { return TimeSeriesPipeline_1.applyTreatment; } });
72
+ Object.defineProperty(exports, "applyDelay", { enumerable: true, get: function () { return TimeSeriesPipeline_1.applyDelay; } });
73
+ Object.defineProperty(exports, "alignByMonth", { enumerable: true, get: function () { return TimeSeriesPipeline_1.alignByMonth; } });
74
+ Object.defineProperty(exports, "MissingMonthsError", { enumerable: true, get: function () { return TimeSeriesPipeline_1.MissingMonthsError; } });
75
+ var OrdinaryLeastSquares_1 = require("./econometrics/OrdinaryLeastSquares");
76
+ Object.defineProperty(exports, "fitOLS", { enumerable: true, get: function () { return OrdinaryLeastSquares_1.fitOLS; } });
77
+ Object.defineProperty(exports, "RegressionError", { enumerable: true, get: function () { return OrdinaryLeastSquares_1.RegressionError; } });
68
78
  var LoginServiceMocks_1 = require("./crud/test/LoginServiceMocks");
69
79
  Object.defineProperty(exports, "applyLoginMocks", { enumerable: true, get: function () { return LoginServiceMocks_1.applyLoginMocks; } });
70
80
  var PlatformMocks_1 = require("./crud/test/PlatformMocks");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAA0F;AAAjF,4HAAA,oBAAoB,OAAwB;AACrD,mFAAkM;AAA7F,8HAAA,qBAAqB,OAAyB;AACnJ,qGAA+H;AAAtH,+IAAA,6BAA6B,OAAiC;AACvE,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,8EAAuN;AAAhG,sIAAA,wBAAwB,OAA6B;AAC5K,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,4DAA2P;AAAtE,oHAAA,gBAAgB,OAAoB;AACzN,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,wDAA6K;AAA1E,qHAAA,mBAAmB,OAAuB;AAC7I,0EAAkM;AAA3F,kIAAA,uBAAuB,OAA2B;AACzJ,8DAAoK;AAAzE,sHAAA,iBAAiB,OAAqB;AACjI,kEAAiL;AAA9E,0HAAA,mBAAmB,OAAuB;AAC7I,0DAA4L;AAAnE,kHAAA,eAAe,OAAmB;AAC3J,8EAA4N;AAAjG,sIAAA,yBAAyB,OAA6B;AACjL,4DAAkJ;AAAlD,oHAAA,gBAAgB,OAAA;AAChH,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wDAA2I;AAAhE,gHAAA,cAAc,OAAkB;AAC3G,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wEAAuM;AAAxF,gIAAA,sBAAsB,OAA0B;AAC/J,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,iFAAkG;AAAzF,gHAAA,cAAc,OAAkB;AACzC,yGAAsI;AAA7H,wIAAA,0BAA0B,OAA8B;AACjE,qFAA2G;AAAlG,0HAAA,mBAAmB,OAAuB;AACnD,+FAAmH;AAA1G,sHAAA,iBAAiB,OAAqB;AAC/C,yFAA0G;AAAjG,gHAAA,cAAc,OAAkB;AACzC,mDAA+D;AAAtD,sGAAA,SAAS,OAAa;AAC/B,+EAA4F;AAAnF,wGAAA,UAAU,OAAc;AACjC,uFAAwG;AAA/F,gHAAA,cAAc,OAAkB;AACzC,6FAA0G;AAAjG,uHAAA,eAAe,OAAmB;AAC3C,wGAAyJ;AAAhJ,6HAAA,mBAAmB,OAAuB;AAEnD,mEAAmF;AAA1E,oHAAA,eAAe,OAAmB;AAC3C,2DAAqF;AAA5E,mHAAA,kBAAkB,OAAsB;AACjD,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB;AACzC,uDAA+E;AAAtE,+GAAA,gBAAgB,OAAoB;AAC7C,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAA0F;AAAjF,4HAAA,oBAAoB,OAAwB;AACrD,mFAAkM;AAA7F,8HAAA,qBAAqB,OAAyB;AACnJ,qGAA+H;AAAtH,+IAAA,6BAA6B,OAAiC;AACvE,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,8EAAuN;AAAhG,sIAAA,wBAAwB,OAA6B;AAC5K,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,4DAA2P;AAAtE,oHAAA,gBAAgB,OAAoB;AACzN,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,wDAA6K;AAA1E,qHAAA,mBAAmB,OAAuB;AAC7I,0EAAkM;AAA3F,kIAAA,uBAAuB,OAA2B;AACzJ,8DAAoK;AAAzE,sHAAA,iBAAiB,OAAqB;AACjI,kEAAiL;AAA9E,0HAAA,mBAAmB,OAAuB;AAC7I,0DAA4L;AAAnE,kHAAA,eAAe,OAAmB;AAC3J,8EAA4N;AAAjG,sIAAA,yBAAyB,OAA6B;AACjL,4DAAkJ;AAAlD,oHAAA,gBAAgB,OAAA;AAChH,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wDAA2I;AAAhE,gHAAA,cAAc,OAAkB;AAC3G,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wEAAuM;AAAxF,gIAAA,sBAAsB,OAA0B;AAC/J,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,iFAAkG;AAAzF,gHAAA,cAAc,OAAkB;AACzC,yGAAsI;AAA7H,wIAAA,0BAA0B,OAA8B;AACjE,qFAA2G;AAAlG,0HAAA,mBAAmB,OAAuB;AACnD,+FAAmH;AAA1G,sHAAA,iBAAiB,OAAqB;AAC/C,yFAA0G;AAAjG,gHAAA,cAAc,OAAkB;AACzC,mDAA+D;AAAtD,sGAAA,SAAS,OAAa;AAC/B,+EAA4F;AAAnF,wGAAA,UAAU,OAAc;AACjC,uFAAwG;AAA/F,gHAAA,cAAc,OAAkB;AACzC,6FAA0G;AAAjG,uHAAA,eAAe,OAAmB;AAC3C,wGAAyJ;AAAhJ,6HAAA,mBAAmB,OAAuB;AACnD,sEAAsL;AAA7K,oHAAA,cAAc,OAAA;AAAE,oHAAA,cAAc,OAAA;AAAE,oHAAA,cAAc,OAAA;AAAE,gHAAA,UAAU,OAAA;AAAE,kHAAA,YAAY,OAAA;AAAE,wHAAA,kBAAkB,OAAA;AACrG,4EAAgG;AAAvF,8GAAA,MAAM,OAAA;AAAoB,uHAAA,eAAe,OAAA;AAElD,mEAAmF;AAA1E,oHAAA,eAAe,OAAmB;AAC3C,2DAAqF;AAA5E,mHAAA,kBAAkB,OAAsB;AACjD,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB;AACzC,uDAA+E;AAAtE,+GAAA,gBAAgB,OAAoB;AAC7C,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB"}
@@ -0,0 +1,22 @@
1
+ export interface MonthlyPoint {
2
+ month: number;
3
+ value: number;
4
+ }
5
+ export interface RawPoint {
6
+ date: number;
7
+ value: number;
8
+ }
9
+ export interface AlignedSeries {
10
+ months: number[];
11
+ y: number[];
12
+ x: number[][];
13
+ }
14
+ export declare class MissingMonthsError extends Error {
15
+ readonly months: number[];
16
+ constructor(months: number[]);
17
+ }
18
+ export declare function monthEndCloses(points: RawPoint[]): MonthlyPoint[];
19
+ export declare function monthlyReturns(closes: MonthlyPoint[]): MonthlyPoint[];
20
+ export declare function applyTreatment(closes: MonthlyPoint[], treatment: 'direct' | 'return'): MonthlyPoint[];
21
+ export declare function applyDelay(series: MonthlyPoint[], delay: number): MonthlyPoint[];
22
+ export declare function alignByMonth(target: MonthlyPoint[], variables: MonthlyPoint[][]): AlignedSeries;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingMonthsError = void 0;
4
+ exports.monthEndCloses = monthEndCloses;
5
+ exports.monthlyReturns = monthlyReturns;
6
+ exports.applyTreatment = applyTreatment;
7
+ exports.applyDelay = applyDelay;
8
+ exports.alignByMonth = alignByMonth;
9
+ class MissingMonthsError extends Error {
10
+ constructor(months) {
11
+ super(`Missing months in series: ${months.map(formatMonth).join(', ')}`);
12
+ this.name = 'MissingMonthsError';
13
+ this.months = months;
14
+ }
15
+ }
16
+ exports.MissingMonthsError = MissingMonthsError;
17
+ function formatMonth(month) {
18
+ return `${Math.floor(month / 100)}-${String(month % 100).padStart(2, '0')}`;
19
+ }
20
+ function toMonth(date) {
21
+ return Math.floor(date / 100);
22
+ }
23
+ function monthToIndex(month) {
24
+ const year = Math.floor(month / 100);
25
+ const monthOfYear = month % 100;
26
+ return year * 12 + (monthOfYear - 1);
27
+ }
28
+ function indexToMonth(index) {
29
+ const year = Math.floor(index / 12);
30
+ const monthOfYear = (index % 12) + 1;
31
+ return year * 100 + monthOfYear;
32
+ }
33
+ function missingMonths(series) {
34
+ const gaps = [];
35
+ for (let i = 1; i < series.length; i++) {
36
+ const previous = monthToIndex(series[i - 1].month);
37
+ const current = monthToIndex(series[i].month);
38
+ for (let idx = previous + 1; idx < current; idx++)
39
+ gaps.push(indexToMonth(idx));
40
+ }
41
+ return gaps;
42
+ }
43
+ function monthEndCloses(points) {
44
+ const latestByMonth = new Map();
45
+ for (const point of points) {
46
+ const month = toMonth(point.date);
47
+ const current = latestByMonth.get(month);
48
+ if (current === undefined || point.date > current.date)
49
+ latestByMonth.set(month, point);
50
+ }
51
+ return Array.from(latestByMonth.entries())
52
+ .map(([month, point]) => ({ month, value: point.value }))
53
+ .sort((a, b) => a.month - b.month);
54
+ }
55
+ function monthlyReturns(closes) {
56
+ const gaps = missingMonths(closes);
57
+ const returns = [];
58
+ for (let i = 1; i < closes.length; i++) {
59
+ returns.push({ month: closes[i].month, value: closes[i].value / closes[i - 1].value - 1 });
60
+ }
61
+ if (gaps.length > 0)
62
+ throw new MissingMonthsError(gaps);
63
+ return returns;
64
+ }
65
+ function applyTreatment(closes, treatment) {
66
+ return treatment === 'return' ? monthlyReturns(closes) : closes;
67
+ }
68
+ function applyDelay(series, delay) {
69
+ return series.map(point => ({ month: indexToMonth(monthToIndex(point.month) + delay), value: point.value }));
70
+ }
71
+ function alignByMonth(target, variables) {
72
+ const seriesList = [target, ...variables];
73
+ const populated = seriesList.every(series => series.length > 0);
74
+ const start = populated ? Math.max(...seriesList.map(series => monthToIndex(series[0].month))) : 0;
75
+ const end = populated ? Math.min(...seriesList.map(series => monthToIndex(series[series.length - 1].month))) : -1;
76
+ const targetByMonth = new Map(target.map(point => [point.month, point.value]));
77
+ const variablesByMonth = variables.map(series => new Map(series.map(point => [point.month, point.value])));
78
+ const months = [];
79
+ const y = [];
80
+ const x = [];
81
+ const missing = [];
82
+ for (let index = start; index <= end; index++) {
83
+ const month = indexToMonth(index);
84
+ const targetValue = targetByMonth.get(month);
85
+ const row = variablesByMonth.map(map => map.get(month));
86
+ const complete = targetValue !== undefined && row.every((value) => typeof value === 'number' && Number.isFinite(value));
87
+ if (complete) {
88
+ months.push(month);
89
+ y.push(targetValue);
90
+ x.push(row);
91
+ }
92
+ else {
93
+ missing.push(month);
94
+ }
95
+ }
96
+ if (missing.length > 0)
97
+ throw new MissingMonthsError(missing);
98
+ return { months, y, x };
99
+ }
100
+ //# sourceMappingURL=TimeSeriesPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeSeriesPipeline.js","sourceRoot":"","sources":["../../src/timeSeries/TimeSeriesPipeline.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "elemento-alpha-tools",
3
- "version": "1.3.11",
3
+ "version": "1.3.12",
4
4
  "description": "Librería para los servicios de elemento alpha",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",