@marketeer-intelligence/framework-device 0.1.0-alpha.1 → 0.1.0-alpha.10
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/README.md +2 -2
- package/dist/data-source/MarketIndexTableParaser.d.ts +8 -0
- package/dist/data-source/MarketIndexTableParaser.d.ts.map +1 -0
- package/dist/data-source/MarketIndexTableParaser.js +62 -0
- package/dist/data-source/MarketIndexTableParaser.js.map +1 -0
- package/dist/{SecurityTableParaser.d.ts → data-source/SecurityTableParaser.d.ts} +7 -7
- package/dist/data-source/SecurityTableParaser.d.ts.map +1 -0
- package/dist/{SecurityTableParaser.js → data-source/SecurityTableParaser.js} +71 -71
- package/dist/data-source/SecurityTableParaser.js.map +1 -0
- package/dist/{StaticWebpageScraper.d.ts → data-source/StaticWebpageScraper.d.ts} +11 -12
- package/dist/data-source/StaticWebpageScraper.d.ts.map +1 -0
- package/dist/{StaticWebpageScraper.js → data-source/StaticWebpageScraper.js} +49 -50
- package/dist/data-source/StaticWebpageScraper.js.map +1 -0
- package/dist/{Webpage.d.ts → data-source/Webpage.d.ts} +10 -10
- package/dist/data-source/Webpage.d.ts.map +1 -0
- package/dist/{Webpage.js → data-source/Webpage.js} +21 -21
- package/dist/data-source/Webpage.js.map +1 -0
- package/dist/{WebpageBody.d.ts → data-source/WebpageBody.d.ts} +10 -10
- package/dist/data-source/WebpageBody.d.ts.map +1 -0
- package/dist/{WebpageBody.js → data-source/WebpageBody.js} +33 -33
- package/dist/data-source/WebpageBody.js.map +1 -0
- package/dist/{WebpageUrl.d.ts → data-source/WebpageUrl.d.ts} +10 -10
- package/dist/data-source/WebpageUrl.d.ts.map +1 -0
- package/dist/{WebpageUrl.js → data-source/WebpageUrl.js} +38 -38
- package/dist/data-source/WebpageUrl.js.map +1 -0
- package/dist/data-source/index.d.ts +8 -0
- package/dist/data-source/index.d.ts.map +1 -0
- package/dist/data-source/index.js +8 -0
- package/dist/data-source/index.js.map +1 -0
- package/dist/{InstrumentMongoDbCollection.d.ts → data-store/InstrumentMongoDbCollection.d.ts} +12 -11
- package/dist/data-store/InstrumentMongoDbCollection.d.ts.map +1 -0
- package/dist/{InstrumentMongoDbCollection.js → data-store/InstrumentMongoDbCollection.js} +89 -57
- package/dist/data-store/InstrumentMongoDbCollection.js.map +1 -0
- package/dist/data-store/MarketIndexMongoDbCollection.d.ts +13 -0
- package/dist/data-store/MarketIndexMongoDbCollection.d.ts.map +1 -0
- package/dist/data-store/MarketIndexMongoDbCollection.js +83 -0
- package/dist/data-store/MarketIndexMongoDbCollection.js.map +1 -0
- package/dist/{SecurityMongoDbCollection.d.ts → data-store/SecurityMongoDbCollection.d.ts} +12 -11
- package/dist/data-store/SecurityMongoDbCollection.d.ts.map +1 -0
- package/dist/{SecurityMongoDbCollection.js → data-store/SecurityMongoDbCollection.js} +88 -66
- package/dist/data-store/SecurityMongoDbCollection.js.map +1 -0
- package/dist/data-store/index.d.ts +5 -0
- package/dist/data-store/index.d.ts.map +1 -0
- package/dist/data-store/index.js +5 -0
- package/dist/data-store/index.js.map +1 -0
- package/dist/index.d.ts +4 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -15
- package/dist/index.js.map +1 -1
- package/dist/{ConfigureEnvironmentVariables.d.ts → task/ConfigureEnvironmentVariables.d.ts} +9 -9
- package/dist/task/ConfigureEnvironmentVariables.d.ts.map +1 -0
- package/dist/{ConfigureEnvironmentVariables.js → task/ConfigureEnvironmentVariables.js} +31 -31
- package/dist/task/ConfigureEnvironmentVariables.js.map +1 -0
- package/dist/task/ConnectToMongoDb.d.ts +9 -0
- package/dist/task/ConnectToMongoDb.d.ts.map +1 -0
- package/dist/{ConnectToMongoDb.js → task/ConnectToMongoDb.js} +28 -28
- package/dist/task/ConnectToMongoDb.js.map +1 -0
- package/dist/task/DisconnectFromMongoDb.d.ts +8 -0
- package/dist/task/DisconnectFromMongoDb.d.ts.map +1 -0
- package/dist/{DisconnectFromMongoDb.js → task/DisconnectFromMongoDb.js} +25 -25
- package/dist/task/DisconnectFromMongoDb.js.map +1 -0
- package/dist/{MongoDbUri.d.ts → task/MongoDbUri.d.ts} +10 -10
- package/dist/task/MongoDbUri.d.ts.map +1 -0
- package/dist/{MongoDbUri.js → task/MongoDbUri.js} +38 -38
- package/dist/task/MongoDbUri.js.map +1 -0
- package/dist/task/index.d.ts +6 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +6 -0
- package/dist/task/index.js.map +1 -0
- package/package.json +4 -4
- package/dist/ConfigureEnvironmentVariables.d.ts.map +0 -1
- package/dist/ConfigureEnvironmentVariables.js.map +0 -1
- package/dist/ConnectToMongoDb.d.ts +0 -9
- package/dist/ConnectToMongoDb.d.ts.map +0 -1
- package/dist/ConnectToMongoDb.js.map +0 -1
- package/dist/DisconnectFromMongoDb.d.ts +0 -8
- package/dist/DisconnectFromMongoDb.d.ts.map +0 -1
- package/dist/DisconnectFromMongoDb.js.map +0 -1
- package/dist/InstrumentMongoDbCollection.d.ts.map +0 -1
- package/dist/InstrumentMongoDbCollection.js.map +0 -1
- package/dist/MongoDbUri.d.ts.map +0 -1
- package/dist/MongoDbUri.js.map +0 -1
- package/dist/SecurityMongoDbCollection.d.ts.map +0 -1
- package/dist/SecurityMongoDbCollection.js.map +0 -1
- package/dist/SecurityTableParaser.d.ts.map +0 -1
- package/dist/SecurityTableParaser.js.map +0 -1
- package/dist/StaticWebpageScraper.d.ts.map +0 -1
- package/dist/StaticWebpageScraper.js.map +0 -1
- package/dist/Webpage.d.ts.map +0 -1
- package/dist/Webpage.js.map +0 -1
- package/dist/WebpageBody.d.ts.map +0 -1
- package/dist/WebpageBody.js.map +0 -1
- package/dist/WebpageUrl.d.ts.map +0 -1
- package/dist/WebpageUrl.js.map +0 -1
- package/dist/dataSource.d.ts +0 -4
- package/dist/dataSource.d.ts.map +0 -1
- package/dist/dataSource.js +0 -12
- package/dist/dataSource.js.map +0 -1
- package/dist/dataStore.d.ts +0 -5
- package/dist/dataStore.d.ts.map +0 -1
- package/dist/dataStore.js +0 -9
- package/dist/dataStore.js.map +0 -1
- package/dist/task.d.ts +0 -6
- package/dist/task.d.ts.map +0 -1
- package/dist/task.js +0 -12
- package/dist/task.js.map +0 -1
@@ -1,39 +1,39 @@
|
|
1
|
-
import { Failure, Result
|
2
|
-
const testPattern = /^(
|
3
|
-
export function isWebpageUrlValue(candidate) {
|
4
|
-
if (typeof candidate !== 'string')
|
5
|
-
return false;
|
6
|
-
if (!testPattern.test(candidate))
|
7
|
-
return false;
|
8
|
-
return true;
|
9
|
-
}
|
10
|
-
export class WebpageUrl {
|
11
|
-
_value;
|
12
|
-
constructor(_value) {
|
13
|
-
this._value = _value;
|
14
|
-
}
|
15
|
-
static create(candidate) {
|
16
|
-
try {
|
17
|
-
if (!isWebpageUrlValue(candidate)) {
|
18
|
-
const msg = 'invalid WebpageUrl creation value';
|
19
|
-
const error = new Error(msg);
|
20
|
-
return Failure.create(error);
|
21
|
-
}
|
22
|
-
const webpageUrl = new WebpageUrl(candidate);
|
23
|
-
return Result.create(webpageUrl);
|
24
|
-
}
|
25
|
-
catch (error) {
|
26
|
-
if (error instanceof Error) {
|
27
|
-
return Failure.create(error);
|
28
|
-
}
|
29
|
-
throw error;
|
30
|
-
}
|
31
|
-
}
|
32
|
-
get value() {
|
33
|
-
return this._value;
|
34
|
-
}
|
35
|
-
}
|
36
|
-
export function isWebpageUrl(candidate) {
|
37
|
-
return candidate instanceof WebpageUrl;
|
38
|
-
}
|
1
|
+
import { Failure, Result } from './index.js';
|
2
|
+
const testPattern = /^(https?):\/\/([\w.-]+\.[a-z]{2,})(:[0-9]+)?([\/\w.-]*)?(\?[\/\w=&%-]*)?(#[\/\w]*)?$/;
|
3
|
+
export function isWebpageUrlValue(candidate) {
|
4
|
+
if (typeof candidate !== 'string')
|
5
|
+
return false;
|
6
|
+
if (!testPattern.test(candidate))
|
7
|
+
return false;
|
8
|
+
return true;
|
9
|
+
}
|
10
|
+
export class WebpageUrl {
|
11
|
+
_value;
|
12
|
+
constructor(_value) {
|
13
|
+
this._value = _value;
|
14
|
+
}
|
15
|
+
static create(candidate) {
|
16
|
+
try {
|
17
|
+
if (!isWebpageUrlValue(candidate)) {
|
18
|
+
const msg = 'invalid WebpageUrl creation value';
|
19
|
+
const error = new Error(msg);
|
20
|
+
return Failure.create(error);
|
21
|
+
}
|
22
|
+
const webpageUrl = new WebpageUrl(candidate);
|
23
|
+
return Result.create(webpageUrl);
|
24
|
+
}
|
25
|
+
catch (error) {
|
26
|
+
if (error instanceof Error) {
|
27
|
+
return Failure.create(error);
|
28
|
+
}
|
29
|
+
throw error;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
get value() {
|
33
|
+
return this._value;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
export function isWebpageUrl(candidate) {
|
37
|
+
return candidate instanceof WebpageUrl;
|
38
|
+
}
|
39
39
|
//# sourceMappingURL=WebpageUrl.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"WebpageUrl.js","sourceRoot":"","sources":["../../src/data-source/WebpageUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAY,MAAM,EAAe,MAAM,YAAY,CAAA;AAIlE,MAAM,WAAW,GACf,sFAAsF,CAAA;AAExF,MAAM,UAAU,iBAAiB,CAC/B,SAAkB;IAElB,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAA;IAC9C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,OAAO,UAAU;IACO;IAA5B,YAA4B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IACvD,MAAM,CAAC,MAAM,CAAC,SAAkB;QAC9B,IAAI;YACF,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE;gBACjC,MAAM,GAAG,GAAG,mCAAmC,CAAA;gBAC/C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;aAC7B;YACD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;SACjC;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;aAC7B;YACD,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,SAAkB;IAC7C,OAAO,SAAS,YAAY,UAAU,CAAA;AACxC,CAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export * from '../index.js';
|
2
|
+
export { MarketIndexTableParaser } from './MarketIndexTableParaser.js';
|
3
|
+
export { SecurityTableParaser } from './SecurityTableParaser.js';
|
4
|
+
export { IWebpageBodyParser, StaticWebpageScraper, } from './StaticWebpageScraper.js';
|
5
|
+
export { IWebpageScraper, Webpage } from './Webpage.js';
|
6
|
+
export { WebpageBodyValue, isWebpageBodyValue, WebpageBody, isWebpageBody, } from './WebpageBody.js';
|
7
|
+
export { WebpageUrlValue, isWebpageUrlValue, WebpageUrl, isWebpageUrl, } from './WebpageUrl.js';
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-source/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAC,eAAe,EAAE,OAAO,EAAC,MAAM,cAAc,CAAA;AACrD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,YAAY,GACb,MAAM,iBAAiB,CAAA"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export * from '../index.js';
|
2
|
+
export { MarketIndexTableParaser } from './MarketIndexTableParaser.js';
|
3
|
+
export { SecurityTableParaser } from './SecurityTableParaser.js';
|
4
|
+
export { StaticWebpageScraper, } from './StaticWebpageScraper.js';
|
5
|
+
export { Webpage } from './Webpage.js';
|
6
|
+
export { isWebpageBodyValue, WebpageBody, isWebpageBody, } from './WebpageBody.js';
|
7
|
+
export { isWebpageUrlValue, WebpageUrl, isWebpageUrl, } from './WebpageUrl.js';
|
8
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-source/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAEL,oBAAoB,GACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAkB,OAAO,EAAC,MAAM,cAAc,CAAA;AACrD,OAAO,EAEL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAEL,iBAAiB,EACjB,UAAU,EACV,YAAY,GACb,MAAM,iBAAiB,CAAA"}
|
package/dist/{InstrumentMongoDbCollection.d.ts → data-store/InstrumentMongoDbCollection.d.ts}
RENAMED
@@ -1,12 +1,13 @@
|
|
1
|
-
import { IStorable, Instrument, Status } from './index.js';
|
2
|
-
export declare class InstrumentMongoDbCollection implements IStorable<Instrument[]> {
|
3
|
-
private readonly _name;
|
4
|
-
private readonly _schema;
|
5
|
-
private _model;
|
6
|
-
private constructor();
|
7
|
-
private static _instance;
|
8
|
-
static create(): InstrumentMongoDbCollection;
|
9
|
-
upsert(instrument: Instrument): Promise<Status<Error>>;
|
10
|
-
store(instruments: Instrument[]): Promise<Status<Error>>;
|
11
|
-
|
1
|
+
import { Feedback, IFetchable, IStorable, Instrument, Status } from './index.js';
|
2
|
+
export declare class InstrumentMongoDbCollection implements IStorable<Instrument[]>, IFetchable<Instrument[]> {
|
3
|
+
private readonly _name;
|
4
|
+
private readonly _schema;
|
5
|
+
private _model;
|
6
|
+
private constructor();
|
7
|
+
private static _instance;
|
8
|
+
static create(): InstrumentMongoDbCollection;
|
9
|
+
upsert(instrument: Instrument): Promise<Status<Error>>;
|
10
|
+
store(instruments: Instrument[]): Promise<Status<Error>>;
|
11
|
+
fetchData(): Promise<Feedback<Instrument[], Error>>;
|
12
|
+
}
|
12
13
|
//# sourceMappingURL=InstrumentMongoDbCollection.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"InstrumentMongoDbCollection.d.ts","sourceRoot":"","sources":["../../src/data-store/InstrumentMongoDbCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,UAAU,EACV,SAAS,EACT,UAAU,EAKV,MAAM,EAGP,MAAM,YAAY,CAAA;AAenB,qBAAa,2BACX,YAAW,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC;IAE5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAarB;IACH,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO;IAMP,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6B;IACrD,MAAM,CAAC,MAAM,IAAI,2BAA2B;IAKtC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAgBtD,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAmBxD,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;CA8B1D"}
|
@@ -1,58 +1,90 @@
|
|
1
|
-
import { Failure, Success, } from './index.js';
|
2
|
-
import { Schema as MongooseSchema, model as mongooseModel, } from 'mongoose';
|
3
|
-
export class InstrumentMongoDbCollection {
|
4
|
-
_name = 'instruments';
|
5
|
-
_schema = new MongooseSchema({
|
6
|
-
isin: { type: String, required: true, unique: true },
|
7
|
-
symbol: { type: String, required: true, unique: true },
|
8
|
-
name: { type: String, required: true },
|
9
|
-
cfi: { type: String, required: true },
|
10
|
-
published: { type: String, required: true },
|
11
|
-
}, {
|
12
|
-
collection: this._name,
|
13
|
-
timestamps: true,
|
14
|
-
});
|
15
|
-
_model;
|
16
|
-
constructor() {
|
17
|
-
this._model = mongooseModel(this._name, this._schema);
|
18
|
-
}
|
19
|
-
static _instance;
|
20
|
-
static create() {
|
21
|
-
return (this._instance || (this._instance = new InstrumentMongoDbCollection()));
|
22
|
-
}
|
23
|
-
async upsert(instrument) {
|
24
|
-
try {
|
25
|
-
await this._model.updateOne({ isin: instrument.value.isin }, { $set: instrument.value }, { upsert: true, new: true });
|
26
|
-
return Success.create();
|
27
|
-
}
|
28
|
-
catch (error) {
|
29
|
-
if (error instanceof Error) {
|
30
|
-
return Failure.create(error);
|
31
|
-
}
|
32
|
-
console.log(error);
|
33
|
-
return Failure.create(new Error('unknown error'));
|
34
|
-
}
|
35
|
-
}
|
36
|
-
async store(instruments) {
|
37
|
-
try {
|
38
|
-
for (const [index, instrument] of instruments.entries()) {
|
39
|
-
try {
|
40
|
-
await this.upsert(instrument);
|
41
|
-
}
|
42
|
-
catch (error) {
|
43
|
-
console.log(`instrument #${index + 1} is skipped`);
|
44
|
-
console.log(error instanceof Error ? error.message : error);
|
45
|
-
continue;
|
46
|
-
}
|
47
|
-
}
|
48
|
-
return Success.create();
|
49
|
-
}
|
50
|
-
catch (error) {
|
51
|
-
if (error instanceof Error) {
|
52
|
-
return Failure.create(error);
|
53
|
-
}
|
54
|
-
throw error;
|
55
|
-
}
|
56
|
-
}
|
57
|
-
|
1
|
+
import { Failure, MarketIndexMongoDbCollection, Result, SecurityMongoDbCollection, Success, isFailure, } from './index.js';
|
2
|
+
import { Schema as MongooseSchema, model as mongooseModel, } from 'mongoose';
|
3
|
+
export class InstrumentMongoDbCollection {
|
4
|
+
_name = 'financial-instruments';
|
5
|
+
_schema = new MongooseSchema({
|
6
|
+
isin: { type: String, required: true, unique: true },
|
7
|
+
symbol: { type: String, required: true, unique: true },
|
8
|
+
name: { type: String, required: true },
|
9
|
+
cfi: { type: String, required: true },
|
10
|
+
published: { type: String, required: true },
|
11
|
+
}, {
|
12
|
+
collection: this._name,
|
13
|
+
timestamps: true,
|
14
|
+
});
|
15
|
+
_model;
|
16
|
+
constructor() {
|
17
|
+
this._model = mongooseModel(this._name, this._schema);
|
18
|
+
}
|
19
|
+
static _instance;
|
20
|
+
static create() {
|
21
|
+
return (this._instance || (this._instance = new InstrumentMongoDbCollection()));
|
22
|
+
}
|
23
|
+
async upsert(instrument) {
|
24
|
+
try {
|
25
|
+
await this._model.updateOne({ isin: instrument.value.isin }, { $set: instrument.value }, { upsert: true, new: true });
|
26
|
+
return Success.create();
|
27
|
+
}
|
28
|
+
catch (error) {
|
29
|
+
if (error instanceof Error) {
|
30
|
+
return Failure.create(error);
|
31
|
+
}
|
32
|
+
console.log(error);
|
33
|
+
return Failure.create(new Error('unknown error'));
|
34
|
+
}
|
35
|
+
}
|
36
|
+
async store(instruments) {
|
37
|
+
try {
|
38
|
+
for (const [index, instrument] of instruments.entries()) {
|
39
|
+
try {
|
40
|
+
await this.upsert(instrument);
|
41
|
+
}
|
42
|
+
catch (error) {
|
43
|
+
console.log(`instrument #${index + 1} is skipped`);
|
44
|
+
console.log(error instanceof Error ? error.message : error);
|
45
|
+
continue;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
return Success.create();
|
49
|
+
}
|
50
|
+
catch (error) {
|
51
|
+
if (error instanceof Error) {
|
52
|
+
return Failure.create(error);
|
53
|
+
}
|
54
|
+
throw error;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
async fetchData() {
|
58
|
+
try {
|
59
|
+
const indexCollection = MarketIndexMongoDbCollection.create();
|
60
|
+
const securityCollection = SecurityMongoDbCollection.create();
|
61
|
+
const [instrumentsFromIndices, instrumentsFromSecurities] = await Promise.all([
|
62
|
+
indexCollection.fetchAll(),
|
63
|
+
securityCollection.fetchInstruments(),
|
64
|
+
]);
|
65
|
+
let instruments = [];
|
66
|
+
if (isFailure(instrumentsFromIndices)) {
|
67
|
+
console.log('failed to fetch from market-indicies collection');
|
68
|
+
console.log(instrumentsFromIndices.error.message);
|
69
|
+
}
|
70
|
+
else {
|
71
|
+
instruments.push(...instrumentsFromIndices.value);
|
72
|
+
}
|
73
|
+
if (isFailure(instrumentsFromSecurities)) {
|
74
|
+
console.log('failed to fetch from marketable-securities collection');
|
75
|
+
console.log(instrumentsFromSecurities.error.message);
|
76
|
+
}
|
77
|
+
else {
|
78
|
+
instruments.push(...instrumentsFromSecurities.value);
|
79
|
+
}
|
80
|
+
return Result.create(instruments);
|
81
|
+
}
|
82
|
+
catch (error) {
|
83
|
+
if (error instanceof Error) {
|
84
|
+
return Failure.create(error);
|
85
|
+
}
|
86
|
+
throw error;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
58
90
|
//# sourceMappingURL=InstrumentMongoDbCollection.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"InstrumentMongoDbCollection.js","sourceRoot":"","sources":["../../src/data-store/InstrumentMongoDbCollection.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Feedback, IStorable, Instrument, Status } from './index.js';
|
2
|
+
export declare class MarketIndexMongoDbCollection implements IStorable<Instrument[]> {
|
3
|
+
private readonly _name;
|
4
|
+
private readonly _schema;
|
5
|
+
private _model;
|
6
|
+
private constructor();
|
7
|
+
private static _instance;
|
8
|
+
static create(): MarketIndexMongoDbCollection;
|
9
|
+
upsert(marketIndex: Instrument): Promise<Status<Error>>;
|
10
|
+
store(marketIndices: Instrument[]): Promise<Status<Error>>;
|
11
|
+
fetchAll(): Promise<Feedback<Instrument[], Error>>;
|
12
|
+
}
|
13
|
+
//# sourceMappingURL=MarketIndexMongoDbCollection.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MarketIndexMongoDbCollection.d.ts","sourceRoot":"","sources":["../../src/data-store/MarketIndexMongoDbCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,SAAS,EACT,UAAU,EAGV,MAAM,EAGP,MAAM,YAAY,CAAA;AAenB,qBAAa,4BAA6B,YAAW,SAAS,CAAC,UAAU,EAAE,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAarB;IACH,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO;IAMP,OAAO,CAAC,MAAM,CAAC,SAAS,CAA8B;IACtD,MAAM,CAAC,MAAM,IAAI,4BAA4B;IAKvC,MAAM,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAgBvD,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAmB1D,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;CAwBzD"}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
import { Failure, Instrument, Result, Success, isFailure, } from './index.js';
|
2
|
+
import { Schema as MongooseSchema, model as mongooseModel, } from 'mongoose';
|
3
|
+
export class MarketIndexMongoDbCollection {
|
4
|
+
_name = 'market-indices';
|
5
|
+
_schema = new MongooseSchema({
|
6
|
+
isin: { type: String, required: true, unique: true },
|
7
|
+
symbol: { type: String, required: true, unique: true },
|
8
|
+
name: { type: String, required: true },
|
9
|
+
cfi: { type: String, required: true },
|
10
|
+
published: { type: String, required: true },
|
11
|
+
}, {
|
12
|
+
collection: this._name,
|
13
|
+
timestamps: true,
|
14
|
+
});
|
15
|
+
_model;
|
16
|
+
constructor() {
|
17
|
+
this._model = mongooseModel(this._name, this._schema);
|
18
|
+
}
|
19
|
+
static _instance;
|
20
|
+
static create() {
|
21
|
+
return (this._instance || (this._instance = new MarketIndexMongoDbCollection()));
|
22
|
+
}
|
23
|
+
async upsert(marketIndex) {
|
24
|
+
try {
|
25
|
+
await this._model.updateOne({ isin: marketIndex.value.isin }, { $set: marketIndex.value }, { upsert: true, new: true });
|
26
|
+
return Success.create();
|
27
|
+
}
|
28
|
+
catch (error) {
|
29
|
+
if (error instanceof Error) {
|
30
|
+
return Failure.create(error);
|
31
|
+
}
|
32
|
+
console.log(error);
|
33
|
+
return Failure.create(new Error('unknown error'));
|
34
|
+
}
|
35
|
+
}
|
36
|
+
async store(marketIndices) {
|
37
|
+
try {
|
38
|
+
for (const [index, marketIndex] of marketIndices.entries()) {
|
39
|
+
try {
|
40
|
+
await this.upsert(marketIndex);
|
41
|
+
}
|
42
|
+
catch (error) {
|
43
|
+
console.log(`market index #${index + 1} is skipped`);
|
44
|
+
console.log(error instanceof Error ? error.message : error);
|
45
|
+
continue;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
return Success.create();
|
49
|
+
}
|
50
|
+
catch (error) {
|
51
|
+
if (error instanceof Error) {
|
52
|
+
return Failure.create(error);
|
53
|
+
}
|
54
|
+
throw error;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
async fetchAll() {
|
58
|
+
try {
|
59
|
+
const records = await this._model
|
60
|
+
.find({})
|
61
|
+
.select({ _id: 0, createdAt: 0, updatedAt: 0, 'instrument._id': 0 })
|
62
|
+
.lean();
|
63
|
+
const marketIndices = [];
|
64
|
+
for (const [index, record] of records.entries()) {
|
65
|
+
const marketIndexOrError = Instrument.create(record);
|
66
|
+
if (isFailure(marketIndexOrError)) {
|
67
|
+
console.log(`record #${index + 1} is skipped`);
|
68
|
+
console.log(marketIndexOrError.error.message);
|
69
|
+
continue;
|
70
|
+
}
|
71
|
+
marketIndices.push(marketIndexOrError.value);
|
72
|
+
}
|
73
|
+
return Result.create(marketIndices);
|
74
|
+
}
|
75
|
+
catch (error) {
|
76
|
+
if (error instanceof Error) {
|
77
|
+
return Failure.create(error);
|
78
|
+
}
|
79
|
+
throw error;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
//# sourceMappingURL=MarketIndexMongoDbCollection.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MarketIndexMongoDbCollection.js","sourceRoot":"","sources":["../../src/data-store/MarketIndexMongoDbCollection.ts"],"names":[],"mappings":"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"}
|
@@ -1,12 +1,13 @@
|
|
1
|
-
import { IStorable, Security, Status } from './index.js';
|
2
|
-
export declare class SecurityMongoDbCollection implements IStorable<Security[]> {
|
3
|
-
private readonly _name;
|
4
|
-
private readonly _schema;
|
5
|
-
private _model;
|
6
|
-
private constructor();
|
7
|
-
private static _instance;
|
8
|
-
static create(): SecurityMongoDbCollection;
|
9
|
-
upsert(security: Security): Promise<Status<Error>>;
|
10
|
-
store(securities: Security[]): Promise<Status<Error>>;
|
11
|
-
|
1
|
+
import { Feedback, IStorable, Instrument, Security, Status } from './index.js';
|
2
|
+
export declare class SecurityMongoDbCollection implements IStorable<Security[]> {
|
3
|
+
private readonly _name;
|
4
|
+
private readonly _schema;
|
5
|
+
private _model;
|
6
|
+
private constructor();
|
7
|
+
private static _instance;
|
8
|
+
static create(): SecurityMongoDbCollection;
|
9
|
+
upsert(security: Security): Promise<Status<Error>>;
|
10
|
+
store(securities: Security[]): Promise<Status<Error>>;
|
11
|
+
fetchInstruments(): Promise<Feedback<Instrument[], Error>>;
|
12
|
+
}
|
12
13
|
//# sourceMappingURL=SecurityMongoDbCollection.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SecurityMongoDbCollection.d.ts","sourceRoot":"","sources":["../../src/data-store/SecurityMongoDbCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,SAAS,EACT,UAAU,EAEV,QAAQ,EAER,MAAM,EAGP,MAAM,YAAY,CAAA;AAenB,qBAAa,yBAA0B,YAAW,SAAS,CAAC,QAAQ,EAAE,CAAC;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAsBrB;IACH,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO;IAMP,OAAO,CAAC,MAAM,CAAC,SAAS,CAA2B;IACnD,MAAM,CAAC,MAAM,IAAI,yBAAyB;IAGpC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAgBlD,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAmBrD,gBAAgB,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;CAqBjE"}
|
@@ -1,67 +1,89 @@
|
|
1
|
-
import { Failure, Success, } from './index.js';
|
2
|
-
import { Schema as MongooseSchema, model as mongooseModel, } from 'mongoose';
|
3
|
-
export class SecurityMongoDbCollection {
|
4
|
-
_name = 'securities';
|
5
|
-
_schema = new MongooseSchema({
|
6
|
-
instrument: {
|
7
|
-
type: {
|
8
|
-
isin: { type: String, required: true, unique: true },
|
9
|
-
symbol: { type: String, required: true, unique: true },
|
10
|
-
name: { type: String, required: true },
|
11
|
-
cfi: { type: String, required: true },
|
12
|
-
published: { type: String, required: true },
|
13
|
-
},
|
14
|
-
required: true,
|
15
|
-
unique: true,
|
16
|
-
},
|
17
|
-
type: { type: String, required: false },
|
18
|
-
market: { type: String, required: false },
|
19
|
-
industry: { type: String, required: false },
|
20
|
-
}, {
|
21
|
-
collection: this._name,
|
22
|
-
timestamps: true,
|
23
|
-
});
|
24
|
-
_model;
|
25
|
-
constructor() {
|
26
|
-
this._model = mongooseModel(this._name, this._schema);
|
27
|
-
}
|
28
|
-
static _instance;
|
29
|
-
static create() {
|
30
|
-
return this._instance || (this._instance = new SecurityMongoDbCollection());
|
31
|
-
}
|
32
|
-
async upsert(security) {
|
33
|
-
try {
|
34
|
-
await this._model.updateOne({ 'instrument.isin': security.value.instrument.isin }, { $set: security.value }, { upsert: true, new: true });
|
35
|
-
return Success.create();
|
36
|
-
}
|
37
|
-
catch (error) {
|
38
|
-
if (error instanceof Error) {
|
39
|
-
return Failure.create(error);
|
40
|
-
}
|
41
|
-
console.log(error);
|
42
|
-
return Failure.create(new Error('unknown error'));
|
43
|
-
}
|
44
|
-
}
|
45
|
-
async store(securities) {
|
46
|
-
try {
|
47
|
-
for (const [index, security] of securities.entries()) {
|
48
|
-
try {
|
49
|
-
await this.upsert(security);
|
50
|
-
}
|
51
|
-
catch (error) {
|
52
|
-
console.log(`security #${index + 1} is skipped`);
|
53
|
-
console.log(error instanceof Error ? error.message : error);
|
54
|
-
continue;
|
55
|
-
}
|
56
|
-
}
|
57
|
-
return Success.create();
|
58
|
-
}
|
59
|
-
catch (error) {
|
60
|
-
if (error instanceof Error) {
|
61
|
-
return Failure.create(error);
|
62
|
-
}
|
63
|
-
throw error;
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
1
|
+
import { Failure, Instrument, Result, Success, isFailure, } from './index.js';
|
2
|
+
import { Schema as MongooseSchema, model as mongooseModel, } from 'mongoose';
|
3
|
+
export class SecurityMongoDbCollection {
|
4
|
+
_name = 'marketable-securities';
|
5
|
+
_schema = new MongooseSchema({
|
6
|
+
instrument: {
|
7
|
+
type: {
|
8
|
+
isin: { type: String, required: true, unique: true },
|
9
|
+
symbol: { type: String, required: true, unique: true },
|
10
|
+
name: { type: String, required: true },
|
11
|
+
cfi: { type: String, required: true },
|
12
|
+
published: { type: String, required: true },
|
13
|
+
},
|
14
|
+
required: true,
|
15
|
+
unique: true,
|
16
|
+
},
|
17
|
+
type: { type: String, required: false },
|
18
|
+
market: { type: String, required: false },
|
19
|
+
industry: { type: String, required: false },
|
20
|
+
}, {
|
21
|
+
collection: this._name,
|
22
|
+
timestamps: true,
|
23
|
+
});
|
24
|
+
_model;
|
25
|
+
constructor() {
|
26
|
+
this._model = mongooseModel(this._name, this._schema);
|
27
|
+
}
|
28
|
+
static _instance;
|
29
|
+
static create() {
|
30
|
+
return this._instance || (this._instance = new SecurityMongoDbCollection());
|
31
|
+
}
|
32
|
+
async upsert(security) {
|
33
|
+
try {
|
34
|
+
await this._model.updateOne({ 'instrument.isin': security.value.instrument.isin }, { $set: security.value }, { upsert: true, new: true });
|
35
|
+
return Success.create();
|
36
|
+
}
|
37
|
+
catch (error) {
|
38
|
+
if (error instanceof Error) {
|
39
|
+
return Failure.create(error);
|
40
|
+
}
|
41
|
+
console.log(error);
|
42
|
+
return Failure.create(new Error('unknown error'));
|
43
|
+
}
|
44
|
+
}
|
45
|
+
async store(securities) {
|
46
|
+
try {
|
47
|
+
for (const [index, security] of securities.entries()) {
|
48
|
+
try {
|
49
|
+
await this.upsert(security);
|
50
|
+
}
|
51
|
+
catch (error) {
|
52
|
+
console.log(`security #${index + 1} is skipped`);
|
53
|
+
console.log(error instanceof Error ? error.message : error);
|
54
|
+
continue;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
return Success.create();
|
58
|
+
}
|
59
|
+
catch (error) {
|
60
|
+
if (error instanceof Error) {
|
61
|
+
return Failure.create(error);
|
62
|
+
}
|
63
|
+
throw error;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
async fetchInstruments() {
|
67
|
+
try {
|
68
|
+
const records = await this._model.find({}).lean();
|
69
|
+
const instruments = [];
|
70
|
+
for (const [index, record] of records.entries()) {
|
71
|
+
const instrumentOrError = Instrument.create(record.instrument);
|
72
|
+
if (isFailure(instrumentOrError)) {
|
73
|
+
console.log(`record #${index + 1} is skipped`);
|
74
|
+
console.log(instrumentOrError.error.message);
|
75
|
+
continue;
|
76
|
+
}
|
77
|
+
instruments.push(instrumentOrError.value);
|
78
|
+
}
|
79
|
+
return Result.create(instruments);
|
80
|
+
}
|
81
|
+
catch (error) {
|
82
|
+
if (error instanceof Error) {
|
83
|
+
return Failure.create(error);
|
84
|
+
}
|
85
|
+
throw error;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
67
89
|
//# sourceMappingURL=SecurityMongoDbCollection.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SecurityMongoDbCollection.js","sourceRoot":"","sources":["../../src/data-store/SecurityMongoDbCollection.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export * from '../index.js';
|
2
|
+
export { InstrumentMongoDbCollection } from './InstrumentMongoDbCollection.js';
|
3
|
+
export { MarketIndexMongoDbCollection } from './MarketIndexMongoDbCollection.js';
|
4
|
+
export { SecurityMongoDbCollection } from './SecurityMongoDbCollection.js';
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-store/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAA;AAC9E,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAA"}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export * from '../index.js';
|
2
|
+
export { InstrumentMongoDbCollection } from './InstrumentMongoDbCollection.js';
|
3
|
+
export { MarketIndexMongoDbCollection } from './MarketIndexMongoDbCollection.js';
|
4
|
+
export { SecurityMongoDbCollection } from './SecurityMongoDbCollection.js';
|
5
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-store/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAC,4BAA4B,EAAC,MAAM,mCAAmC,CAAA;AAC9E,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAA"}
|