@barchart/portfolio-api-common 1.10.0 → 1.11.3
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/lib/formatters/TransactionFormatter.js +54 -2
- package/lib/processing/PositionGroup.js +5 -5
- package/package.json +1 -1
- package/.jshintrc +0 -6
- package/.releases/1.10.0.md +0 -3
- package/.releases/1.5.0.md +0 -3
- package/.releases/1.5.1.md +0 -3
- package/.releases/1.5.2.md +0 -4
- package/.releases/1.6.0.md +0 -3
- package/.releases/1.7.0.md +0 -3
- package/.releases/1.8.0.md +0 -3
- package/.releases/1.9.0.md +0 -4
- package/.releases/1.9.1.md +0 -4
- package/buildspec.yml +0 -15
- package/gulpfile.js +0 -122
- package/test/SpecRunner.js +0 -18638
- package/test/SpecRunnner.html +0 -19
- package/test/specs/data/PositionSummaryFrameSpec.js +0 -629
- package/test/specs/data/TransactionValidatorSpec.js +0 -94
- package/test/specs/processing/PositionContainerSpec.js +0 -185
- package/test/specs/serialization/PositionSchemaSpec.js +0 -64
- package/test/specs/serialization/TransactionSchemaSpec.js +0 -65
|
@@ -159,12 +159,34 @@ module.exports = (() => {
|
|
|
159
159
|
let shares;
|
|
160
160
|
|
|
161
161
|
if (!t.dividend.rate.getIsZero()) {
|
|
162
|
-
|
|
162
|
+
if (t.dividend.native) {
|
|
163
|
+
shares = t.dividend.native.divide(t.dividend.rate);
|
|
164
|
+
} else {
|
|
165
|
+
shares = t.dividend.amount.divide(t.dividend.rate);
|
|
166
|
+
}
|
|
163
167
|
} else {
|
|
164
168
|
shares = '';
|
|
165
169
|
}
|
|
166
170
|
|
|
171
|
+
if (shares) {
|
|
172
|
+
const rounded = shares.round(0);
|
|
173
|
+
|
|
174
|
+
if (rounded.subtract(shares).absolute().getIsLessThan(0.01)) {
|
|
175
|
+
shares = rounded;
|
|
176
|
+
} else {
|
|
177
|
+
shares = shares.round(2);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
167
181
|
f.shares = shares;
|
|
182
|
+
|
|
183
|
+
if (t.dividend.currency) {
|
|
184
|
+
f.currency = t.dividend.currency;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (t.dividend.native) {
|
|
188
|
+
f.native = t.dividend.native;
|
|
189
|
+
}
|
|
168
190
|
};
|
|
169
191
|
|
|
170
192
|
const distributionCashFormatter = (t, f) => {
|
|
@@ -174,12 +196,34 @@ module.exports = (() => {
|
|
|
174
196
|
let shares;
|
|
175
197
|
|
|
176
198
|
if (!t.dividend.rate.getIsZero()) {
|
|
177
|
-
|
|
199
|
+
if (t.dividend.native) {
|
|
200
|
+
shares = t.dividend.native.divide(t.dividend.rate);
|
|
201
|
+
} else {
|
|
202
|
+
shares = t.dividend.amount.divide(t.dividend.rate);
|
|
203
|
+
}
|
|
178
204
|
} else {
|
|
179
205
|
shares = '';
|
|
180
206
|
}
|
|
181
207
|
|
|
208
|
+
if (shares) {
|
|
209
|
+
const rounded = shares.round(0);
|
|
210
|
+
|
|
211
|
+
if (rounded.subtract(shares).absolute().getIsLessThan(0.01)) {
|
|
212
|
+
shares = rounded;
|
|
213
|
+
} else {
|
|
214
|
+
shares = shares.round(2);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
182
218
|
f.shares = shares;
|
|
219
|
+
|
|
220
|
+
if (t.dividend.currency) {
|
|
221
|
+
f.currency = t.dividend.currency;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (t.dividend.native) {
|
|
225
|
+
f.native = t.dividend.native;
|
|
226
|
+
}
|
|
183
227
|
};
|
|
184
228
|
|
|
185
229
|
const dividendReinvestFormatter = (t, f) => {
|
|
@@ -189,6 +233,10 @@ module.exports = (() => {
|
|
|
189
233
|
f.fee = t.fee;
|
|
190
234
|
}
|
|
191
235
|
|
|
236
|
+
if (t.dividend.currency) {
|
|
237
|
+
f.currency = t.dividend.currency;
|
|
238
|
+
}
|
|
239
|
+
|
|
192
240
|
f.price = t.dividend.price;
|
|
193
241
|
f.rate = t.dividend.rate;
|
|
194
242
|
|
|
@@ -202,6 +250,10 @@ module.exports = (() => {
|
|
|
202
250
|
f.fee = t.fee;
|
|
203
251
|
}
|
|
204
252
|
|
|
253
|
+
if (t.dividend.currency) {
|
|
254
|
+
f.currency = t.dividend.currency;
|
|
255
|
+
}
|
|
256
|
+
|
|
205
257
|
f.price = t.dividend.price;
|
|
206
258
|
f.rate = t.dividend.rate;
|
|
207
259
|
|
|
@@ -892,7 +892,7 @@ module.exports = (() => {
|
|
|
892
892
|
let marketChange = updates.market.subtract(actual.marketPrevious);
|
|
893
893
|
let marketChangePercent;
|
|
894
894
|
|
|
895
|
-
if (actual.marketPrevious.
|
|
895
|
+
if (actual.marketPrevious.getIsApproximate(Decimal.ZERO, 4)) {
|
|
896
896
|
if (marketChange.getIsPositive()) {
|
|
897
897
|
marketChangePercent = Decimal.ONE;
|
|
898
898
|
} else if (marketChange.getIsNegative()) {
|
|
@@ -950,7 +950,7 @@ module.exports = (() => {
|
|
|
950
950
|
if (parent && !excluded) {
|
|
951
951
|
const parentData = parent._dataActual;
|
|
952
952
|
|
|
953
|
-
if (parentData.marketAbsolute !== null && !parentData.marketAbsolute.
|
|
953
|
+
if (parentData.marketAbsolute !== null && !parentData.marketAbsolute.getIsApproximate(Decimal.ZERO, 4)) {
|
|
954
954
|
let numerator;
|
|
955
955
|
|
|
956
956
|
if (group.currency !== parent.currency) {
|
|
@@ -992,7 +992,7 @@ module.exports = (() => {
|
|
|
992
992
|
const numerator = actual.realized;
|
|
993
993
|
const denominator = totalBasis.subtract(openBasis);
|
|
994
994
|
|
|
995
|
-
if (denominator.
|
|
995
|
+
if (denominator.getIsApproximate(Decimal.ZERO, 4)) {
|
|
996
996
|
actual.realizedPercent = Decimal.ZERO;
|
|
997
997
|
} else {
|
|
998
998
|
actual.realizedPercent = numerator.divide(denominator);
|
|
@@ -1008,7 +1008,7 @@ module.exports = (() => {
|
|
|
1008
1008
|
const numerator = actual.unrealized;
|
|
1009
1009
|
const denominator = actual.basis.absolute();
|
|
1010
1010
|
|
|
1011
|
-
if (denominator.
|
|
1011
|
+
if (denominator.getIsApproximate(Decimal.ZERO, 4)) {
|
|
1012
1012
|
actual.unrealizedPercent = Decimal.ZERO;
|
|
1013
1013
|
} else {
|
|
1014
1014
|
actual.unrealizedPercent = numerator.divide(denominator);
|
|
@@ -1018,7 +1018,7 @@ module.exports = (() => {
|
|
|
1018
1018
|
}
|
|
1019
1019
|
|
|
1020
1020
|
function calculateGainPercent(gain, basis) {
|
|
1021
|
-
return basis.
|
|
1021
|
+
return basis.getIsApproximate(Decimal.ZERO, 4) ? Decimal.ZERO : gain.divide(basis);
|
|
1022
1022
|
}
|
|
1023
1023
|
|
|
1024
1024
|
const unchanged = { up: false, down: false };
|
package/package.json
CHANGED
package/.jshintrc
DELETED
package/.releases/1.10.0.md
DELETED
package/.releases/1.5.0.md
DELETED
package/.releases/1.5.1.md
DELETED
package/.releases/1.5.2.md
DELETED
package/.releases/1.6.0.md
DELETED
package/.releases/1.7.0.md
DELETED
package/.releases/1.8.0.md
DELETED
package/.releases/1.9.0.md
DELETED
package/.releases/1.9.1.md
DELETED
package/buildspec.yml
DELETED
package/gulpfile.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
const gulp = require('gulp');
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
|
|
5
|
-
const browserify = require('browserify'),
|
|
6
|
-
buffer = require('vinyl-buffer'),
|
|
7
|
-
exec = require('child_process').exec,
|
|
8
|
-
git = require('gulp-git'),
|
|
9
|
-
gitStatus = require('git-get-status'),
|
|
10
|
-
glob = require('glob'),
|
|
11
|
-
jasmine = require('gulp-jasmine'),
|
|
12
|
-
jshint = require('gulp-jshint'),
|
|
13
|
-
prompt = require('gulp-prompt'),
|
|
14
|
-
source = require('vinyl-source-stream');
|
|
15
|
-
|
|
16
|
-
function getVersionFromPackage() {
|
|
17
|
-
return JSON.parse(fs.readFileSync('./package.json', 'utf8')).version;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
gulp.task('ensure-clean-working-directory', (cb) => {
|
|
21
|
-
gitStatus((err, status) => {
|
|
22
|
-
if (err, !status.clean) {
|
|
23
|
-
throw new Error('Unable to proceed, your working directory is not clean.');
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
cb();
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
gulp.task('bump-choice', (cb) => {
|
|
31
|
-
const processor = prompt.prompt({
|
|
32
|
-
type: 'list',
|
|
33
|
-
name: 'bump',
|
|
34
|
-
message: 'What type of bump would you like to do?',
|
|
35
|
-
choices: ['patch', 'minor', 'major'],
|
|
36
|
-
}, (res) => {
|
|
37
|
-
global.bump = res.bump;
|
|
38
|
-
|
|
39
|
-
return cb();
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
return gulp.src(['./package.json']).pipe(processor);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
gulp.task('bump-version', (cb) => {
|
|
46
|
-
exec(`npm version ${global.bump || 'patch'} --no-git-tag-version`, {
|
|
47
|
-
cwd: './'
|
|
48
|
-
}, (error) => {
|
|
49
|
-
if (error) {
|
|
50
|
-
cb(error);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
cb();
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
gulp.task('commit-changes', () => {
|
|
58
|
-
return gulp.src([ './', './test/', './package.json' ])
|
|
59
|
-
.pipe(git.add())
|
|
60
|
-
.pipe(git.commit('Release. Bump version number'));
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
gulp.task('push-changes', (cb) => {
|
|
64
|
-
git.push('origin', 'master', cb);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
gulp.task('create-tag', (cb) => {
|
|
68
|
-
const version = getVersionFromPackage();
|
|
69
|
-
|
|
70
|
-
git.tag(version, 'Release ' + version, (error) => {
|
|
71
|
-
if (error) {
|
|
72
|
-
return cb(error);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
git.push('origin', 'master', { args: '--tags' }, cb);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
gulp.task('build-test-bundle', () => {
|
|
80
|
-
return browserify({ entries: glob.sync('test/specs/**/*.js') })
|
|
81
|
-
.bundle()
|
|
82
|
-
.pipe(source('SpecRunner.js'))
|
|
83
|
-
.pipe(buffer())
|
|
84
|
-
.pipe(gulp.dest('test'));
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
gulp.task('execute-browser-tests', () => {
|
|
88
|
-
return gulp.src('test/SpecRunner.js')
|
|
89
|
-
.pipe(jasmine());
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
gulp.task('execute-node-tests', () => {
|
|
93
|
-
return gulp.src(['test/specs/**/*.js'])
|
|
94
|
-
.pipe(jasmine());
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
gulp.task('execute-tests', gulp.series(
|
|
98
|
-
'build-test-bundle',
|
|
99
|
-
'execute-browser-tests',
|
|
100
|
-
'execute-node-tests'
|
|
101
|
-
));
|
|
102
|
-
|
|
103
|
-
gulp.task('release', gulp.series(
|
|
104
|
-
'ensure-clean-working-directory',
|
|
105
|
-
'execute-tests',
|
|
106
|
-
'bump-choice',
|
|
107
|
-
'bump-version',
|
|
108
|
-
'commit-changes',
|
|
109
|
-
'push-changes',
|
|
110
|
-
'create-tag'
|
|
111
|
-
));
|
|
112
|
-
|
|
113
|
-
gulp.task('lint', () => {
|
|
114
|
-
return gulp.src([ './**/*.js', './test/specs/**/*.js', '!./node_modules/**', '!./test/SpecRunner.js' ])
|
|
115
|
-
.pipe(jshint({'esversion': 9}))
|
|
116
|
-
.pipe(jshint.reporter('default'))
|
|
117
|
-
.pipe(jshint.reporter('fail'));
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
gulp.task('test', gulp.series('execute-tests'));
|
|
121
|
-
|
|
122
|
-
gulp.task('default', gulp.series('lint'));
|