@tasenor/common-plugins 1.9.126 → 1.9.127

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @tasenor/common-plugins@1.9.125 build /home/wigy/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
2
+ > @tasenor/common-plugins@1.9.126 build /home/wigy/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
3
3
  > rm -fr dist && tsc
4
4
 
@@ -1,8 +1,8 @@
1
1
 
2
- > @tasenor/common-plugins@1.9.125 ci /home/wigy/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
2
+ > @tasenor/common-plugins@1.9.126 ci /home/wigy/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
3
3
  > pnpm run lint
4
4
 
5
5
 
6
- > @tasenor/common-plugins@1.9.125 lint /home/wigy/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
6
+ > @tasenor/common-plugins@1.9.126 lint /home/wigy/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
7
7
  > eslint 'src/**/*.{ts,tsx}' 'data/**/*.mjs'
8
8
 
@@ -32,11 +32,23 @@ interface TickerInfo {
32
32
  * ...others done manually so far (need some source and conversion tool)...
33
33
  *
34
34
  * Note: there is useful tool to generate from CSV in `tasenor-bookkeeper/apps/cli/bin/convert-csv-to-map.mjs`.
35
+ *
36
+ * Data file is simply a mapping from ticker to its name. If the ticker has aliases, it can be expressed
37
+ * as an array like
38
+ * {
39
+ * ...
40
+ * "MAIN": ["Name of the main", "ALIAS1", "ALIAS2"]
41
+ * ...
42
+ * }
35
43
  */
36
44
  declare class TickerData extends DataPlugin {
37
45
  constructor();
38
46
  queryBackend<T>(dataSet: string, query: typeof ALL | string): Promise<undefined | T>;
39
47
  queryExchange(query: typeof ALL | string): Promise<undefined | ExchangeInfo | ExchangeInfo[]>;
48
+ /**
49
+ * Fill in aliases.
50
+ */
51
+ afterLoad<T>(fileName: string, data: Record<string, T>): Record<string, T>;
40
52
  /**
41
53
  * If the result is ambiquous, all results are returned.
42
54
  */
@@ -19,6 +19,14 @@ import { ALL, error } from '@tasenor/common';
19
19
  * ...others done manually so far (need some source and conversion tool)...
20
20
  *
21
21
  * Note: there is useful tool to generate from CSV in `tasenor-bookkeeper/apps/cli/bin/convert-csv-to-map.mjs`.
22
+ *
23
+ * Data file is simply a mapping from ticker to its name. If the ticker has aliases, it can be expressed
24
+ * as an array like
25
+ * {
26
+ * ...
27
+ * "MAIN": ["Name of the main", "ALIAS1", "ALIAS2"]
28
+ * ...
29
+ * }
22
30
  */
23
31
  class TickerData extends DataPlugin {
24
32
  // TODO: Currency name data.
@@ -127,6 +135,25 @@ class TickerData extends DataPlugin {
127
135
  }
128
136
  return undefined;
129
137
  }
138
+ /**
139
+ * Fill in aliases.
140
+ */
141
+ afterLoad(fileName, data) {
142
+ Object.keys(data).forEach(ticker => {
143
+ if (data[ticker] instanceof Array) {
144
+ for (const alias of data[ticker].splice(1)) {
145
+ if (data[`${alias}`] !== undefined) {
146
+ error(`${this.code}: Cannot re-use '${alias}' as an alias since it has already used as ${JSON.stringify(data[`${alias}`])}.`);
147
+ }
148
+ else {
149
+ data[`${alias}`] = data[ticker][0];
150
+ }
151
+ }
152
+ data[ticker] = data[ticker][0];
153
+ }
154
+ });
155
+ return data;
156
+ }
130
157
  /**
131
158
  * If the result is ambiquous, all results are returned.
132
159
  */
@@ -149,8 +176,6 @@ class TickerData extends DataPlugin {
149
176
  error(`${this.code}: Invalid type '${type}' when queried from exchange '${exchange}'.`);
150
177
  return undefined;
151
178
  }
152
- // TODO: Alias support. Perhaps post-load hook and if instead of the company name we have
153
- // ["Name of the company", "ALIAS1", "ALIAS2"] the aliases are taken from there.
154
179
  const tickers = this.loadCached(ex.file);
155
180
  if (tickers[ticker] === undefined) {
156
181
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/TickerData/backend/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/TickerData/backend/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tasenor/common-plugins",
3
- "version": "1.9.126",
3
+ "version": "1.9.127",
4
4
  "description": "Shared common plugins of Tasenor project",
5
5
  "repository": "git@github.com:dataplugoy/tasenor-bookkeeper.git",
6
6
  "author": "Tommi Ronkainen <tommi.ronkainen@gmail.com>",
@@ -13,9 +13,9 @@
13
13
  "dayjs": "1.10.8",
14
14
  "sprintf-js": "^1.1.2",
15
15
  "tsx": "3.12.7",
16
- "@tasenor/common": "1.9.126",
17
- "@tasenor/common-ui": "1.9.125",
18
- "@tasenor/common-node": "1.9.126"
16
+ "@tasenor/common": "1.9.127",
17
+ "@tasenor/common-ui": "1.9.127",
18
+ "@tasenor/common-node": "1.9.127"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@mui/icons-material": "^5.14.1",
@@ -31,8 +31,8 @@
31
31
  "react-i18next": "^13.0.2",
32
32
  "react-router-dom": "^6.14.1",
33
33
  "typescript": "^5.1.6",
34
- "eslint-config-tasenor": "0.0.0",
35
- "@tasenor/config": "1.9.126"
34
+ "@tasenor/config": "1.9.127",
35
+ "eslint-config-tasenor": "0.0.0"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "@mui/icons-material": "^5.14.1",
@@ -35,6 +35,14 @@ interface TickerInfo {
35
35
  * ...others done manually so far (need some source and conversion tool)...
36
36
  *
37
37
  * Note: there is useful tool to generate from CSV in `tasenor-bookkeeper/apps/cli/bin/convert-csv-to-map.mjs`.
38
+ *
39
+ * Data file is simply a mapping from ticker to its name. If the ticker has aliases, it can be expressed
40
+ * as an array like
41
+ * {
42
+ * ...
43
+ * "MAIN": ["Name of the main", "ALIAS1", "ALIAS2"]
44
+ * ...
45
+ * }
38
46
  */
39
47
  class TickerData extends DataPlugin {
40
48
 
@@ -151,6 +159,26 @@ class TickerData extends DataPlugin {
151
159
  return undefined
152
160
  }
153
161
 
162
+ /**
163
+ * Fill in aliases.
164
+ */
165
+ afterLoad<T>(fileName: string, data: Record<string, T>): Record<string, T> {
166
+ Object.keys(data).forEach(ticker => {
167
+ if (data[ticker] instanceof Array) {
168
+ for (const alias of (data[ticker] as Array<unknown>).splice(1)) {
169
+ if (data[`${alias}`] !== undefined) {
170
+ error(`${this.code}: Cannot re-use '${alias}' as an alias since it has already used as ${JSON.stringify(data[`${alias}`])}.`)
171
+ } else {
172
+ data[`${alias}`] = data[ticker][0]
173
+ }
174
+ }
175
+ data[ticker] = data[ticker][0]
176
+ }
177
+ })
178
+
179
+ return data
180
+ }
181
+
154
182
  /**
155
183
  * If the result is ambiquous, all results are returned.
156
184
  */
@@ -175,8 +203,6 @@ class TickerData extends DataPlugin {
175
203
  error(`${this.code}: Invalid type '${type}' when queried from exchange '${exchange}'.`)
176
204
  return undefined
177
205
  }
178
- // TODO: Alias support. Perhaps post-load hook and if instead of the company name we have
179
- // ["Name of the company", "ALIAS1", "ALIAS2"] the aliases are taken from there.
180
206
  const tickers: Record<string, string> = this.loadCached(ex.file)
181
207
  if (tickers[ticker] === undefined) {
182
208
  return undefined