@tasenor/common-node 1.9.32 → 1.9.33

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 (210) hide show
  1. package/dist/migrations/01_init.js +60 -0
  2. package/dist/src/cli.d.ts +81 -0
  3. package/dist/src/cli.js +242 -0
  4. package/dist/src/cli.js.map +1 -0
  5. package/dist/src/commands/account.d.ts +12 -0
  6. package/dist/src/commands/account.js +58 -0
  7. package/dist/src/commands/account.js.map +1 -0
  8. package/dist/src/commands/balance.d.ts +11 -0
  9. package/dist/src/commands/balance.js +117 -0
  10. package/dist/src/commands/balance.js.map +1 -0
  11. package/dist/src/commands/db.d.ts +14 -0
  12. package/dist/src/commands/db.js +69 -0
  13. package/dist/src/commands/db.js.map +1 -0
  14. package/dist/src/commands/entry.d.ts +13 -0
  15. package/dist/src/commands/entry.js +106 -0
  16. package/dist/src/commands/entry.js.map +1 -0
  17. package/dist/src/commands/import.d.ts +17 -0
  18. package/dist/src/commands/import.js +140 -0
  19. package/dist/src/commands/import.js.map +1 -0
  20. package/dist/src/commands/importer.d.ts +13 -0
  21. package/dist/src/commands/importer.js +71 -0
  22. package/dist/src/commands/importer.js.map +1 -0
  23. package/dist/src/commands/index.d.ts +191 -0
  24. package/dist/src/commands/index.js +482 -0
  25. package/dist/src/commands/index.js.map +1 -0
  26. package/dist/src/commands/period.d.ts +12 -0
  27. package/dist/src/commands/period.js +48 -0
  28. package/dist/src/commands/period.js.map +1 -0
  29. package/dist/src/commands/plugin.d.ts +15 -0
  30. package/dist/src/commands/plugin.js +78 -0
  31. package/dist/src/commands/plugin.js.map +1 -0
  32. package/dist/src/commands/report.d.ts +11 -0
  33. package/dist/src/commands/report.js +96 -0
  34. package/dist/src/commands/report.js.map +1 -0
  35. package/dist/src/commands/settings.d.ts +10 -0
  36. package/dist/src/commands/settings.js +64 -0
  37. package/dist/src/commands/settings.js.map +1 -0
  38. package/dist/src/commands/stock.d.ts +8 -0
  39. package/dist/src/commands/stock.js +73 -0
  40. package/dist/src/commands/stock.js.map +1 -0
  41. package/dist/src/commands/tag.d.ts +13 -0
  42. package/dist/src/commands/tag.js +89 -0
  43. package/dist/src/commands/tag.js.map +1 -0
  44. package/dist/src/commands/tx.d.ts +12 -0
  45. package/dist/src/commands/tx.js +81 -0
  46. package/dist/src/commands/tx.js.map +1 -0
  47. package/dist/src/commands/user.d.ts +12 -0
  48. package/dist/src/commands/user.js +52 -0
  49. package/dist/src/commands/user.js.map +1 -0
  50. package/dist/src/database/BookkeeperImporter.d.ts +77 -0
  51. package/dist/src/database/BookkeeperImporter.js +343 -0
  52. package/dist/src/database/BookkeeperImporter.js.map +1 -0
  53. package/dist/src/database/DB.d.ts +51 -0
  54. package/dist/src/database/DB.js +354 -0
  55. package/dist/src/database/DB.js.map +1 -0
  56. package/dist/src/database/index.d.ts +7 -0
  57. package/dist/src/database/index.js +8 -0
  58. package/dist/src/database/index.js.map +1 -0
  59. package/dist/src/doccer.d.ts +29 -0
  60. package/dist/src/doccer.js +30 -0
  61. package/dist/src/doccer.js.map +1 -0
  62. package/dist/src/error.d.ts +30 -0
  63. package/dist/src/error.js +35 -0
  64. package/dist/src/error.js.map +1 -0
  65. package/dist/src/export/Exporter.d.ts +69 -0
  66. package/dist/src/export/Exporter.js +123 -0
  67. package/dist/src/export/Exporter.js.map +1 -0
  68. package/dist/src/export/TasenorExporter.d.ts +55 -0
  69. package/dist/src/export/TasenorExporter.js +135 -0
  70. package/dist/src/export/TasenorExporter.js.map +1 -0
  71. package/dist/src/export/TilitinExporter.d.ts +71 -0
  72. package/dist/src/export/TilitinExporter.js +290 -0
  73. package/dist/src/export/TilitinExporter.js.map +1 -0
  74. package/dist/src/export/index.d.ts +8 -0
  75. package/dist/src/export/index.js +9 -0
  76. package/dist/src/export/index.js.map +1 -0
  77. package/dist/src/import/TextFileProcessHandler.d.ts +104 -0
  78. package/dist/src/import/TextFileProcessHandler.js +354 -0
  79. package/dist/src/import/TextFileProcessHandler.js.map +1 -0
  80. package/dist/src/import/TransactionImportConnector.d.ts +38 -0
  81. package/dist/src/import/TransactionImportConnector.js +27 -0
  82. package/dist/src/import/TransactionImportConnector.js.map +1 -0
  83. package/dist/src/import/TransactionImportHandler.d.ts +173 -0
  84. package/dist/src/import/TransactionImportHandler.js +733 -0
  85. package/dist/src/import/TransactionImportHandler.js.map +1 -0
  86. package/dist/src/import/TransactionRules.d.ts +238 -0
  87. package/dist/src/import/TransactionRules.js +522 -0
  88. package/dist/src/import/TransactionRules.js.map +1 -0
  89. package/dist/src/import/TransactionUI.d.ts +181 -0
  90. package/dist/src/import/TransactionUI.js +482 -0
  91. package/dist/src/import/TransactionUI.js.map +1 -0
  92. package/dist/src/import/TransferAnalyzer.d.ts +324 -0
  93. package/dist/src/import/TransferAnalyzer.js +1379 -0
  94. package/dist/src/import/TransferAnalyzer.js.map +1 -0
  95. package/dist/src/import/index.d.ts +11 -0
  96. package/dist/src/import/index.js +12 -0
  97. package/dist/src/import/index.js.map +1 -0
  98. package/dist/src/index.d.ts +11 -0
  99. package/dist/src/index.js +12 -0
  100. package/dist/src/index.js.map +1 -0
  101. package/dist/src/net/crypto.d.ts +33 -0
  102. package/dist/src/net/crypto.js +63 -0
  103. package/dist/src/net/crypto.js.map +1 -0
  104. package/dist/src/net/git.d.ts +49 -0
  105. package/dist/src/net/git.js +137 -0
  106. package/dist/src/net/git.js.map +1 -0
  107. package/dist/src/net/index.d.ts +10 -0
  108. package/dist/src/net/index.js +11 -0
  109. package/dist/src/net/index.js.map +1 -0
  110. package/dist/src/net/middleware.d.ts +61 -0
  111. package/dist/src/net/middleware.js +220 -0
  112. package/dist/src/net/middleware.js.map +1 -0
  113. package/dist/src/net/tokens.d.ts +50 -0
  114. package/dist/src/net/tokens.js +141 -0
  115. package/dist/src/net/tokens.js.map +1 -0
  116. package/dist/src/net/vault.d.ts +67 -0
  117. package/dist/src/net/vault.js +145 -0
  118. package/dist/src/net/vault.js.map +1 -0
  119. package/dist/src/plugins/BackendPlugin.d.ts +91 -0
  120. package/dist/src/plugins/BackendPlugin.js +165 -0
  121. package/dist/src/plugins/BackendPlugin.js.map +1 -0
  122. package/dist/src/plugins/DataPlugin.d.ts +13 -0
  123. package/dist/src/plugins/DataPlugin.js +26 -0
  124. package/dist/src/plugins/DataPlugin.js.map +1 -0
  125. package/dist/src/plugins/ImportPlugin.d.ts +188 -0
  126. package/dist/src/plugins/ImportPlugin.js +204 -0
  127. package/dist/src/plugins/ImportPlugin.js.map +1 -0
  128. package/dist/src/plugins/ReportPlugin.d.ts +132 -0
  129. package/dist/src/plugins/ReportPlugin.js +393 -0
  130. package/dist/src/plugins/ReportPlugin.js.map +1 -0
  131. package/dist/src/plugins/SchemePlugin.d.ts +34 -0
  132. package/dist/src/plugins/SchemePlugin.js +47 -0
  133. package/dist/src/plugins/SchemePlugin.js.map +1 -0
  134. package/dist/src/plugins/ServicePlugin.d.ts +80 -0
  135. package/dist/src/plugins/ServicePlugin.js +168 -0
  136. package/dist/src/plugins/ServicePlugin.js.map +1 -0
  137. package/dist/src/plugins/ToolPlugin.d.ts +27 -0
  138. package/dist/src/plugins/ToolPlugin.js +37 -0
  139. package/dist/src/plugins/ToolPlugin.js.map +1 -0
  140. package/dist/src/plugins/index.d.ts +13 -0
  141. package/dist/src/plugins/index.js +14 -0
  142. package/dist/src/plugins/index.js.map +1 -0
  143. package/dist/src/plugins/plugins.d.ts +101 -0
  144. package/dist/src/plugins/plugins.js +292 -0
  145. package/dist/src/plugins/plugins.js.map +1 -0
  146. package/dist/src/process/Process.d.ts +108 -0
  147. package/dist/src/process/Process.js +335 -0
  148. package/dist/src/process/Process.js.map +1 -0
  149. package/dist/src/process/ProcessConnector.d.ts +24 -0
  150. package/dist/src/process/ProcessConnector.js +28 -0
  151. package/dist/src/process/ProcessConnector.js.map +1 -0
  152. package/dist/src/process/ProcessFile.d.ts +69 -0
  153. package/dist/src/process/ProcessFile.js +145 -0
  154. package/dist/src/process/ProcessFile.js.map +1 -0
  155. package/dist/src/process/ProcessHandler.d.ts +60 -0
  156. package/dist/src/process/ProcessHandler.js +73 -0
  157. package/dist/src/process/ProcessHandler.js.map +1 -0
  158. package/dist/src/process/ProcessStep.d.ts +52 -0
  159. package/dist/src/process/ProcessStep.js +78 -0
  160. package/dist/src/process/ProcessStep.js.map +1 -0
  161. package/dist/src/process/ProcessingSystem.d.ts +60 -0
  162. package/dist/src/process/ProcessingSystem.js +182 -0
  163. package/dist/src/process/ProcessingSystem.js.map +1 -0
  164. package/dist/src/process/index.d.ts +11 -0
  165. package/dist/src/process/index.js +12 -0
  166. package/dist/src/process/index.js.map +1 -0
  167. package/dist/src/reports/conversions.d.ts +8 -0
  168. package/dist/src/reports/conversions.js +47 -0
  169. package/dist/src/reports/conversions.js.map +1 -0
  170. package/dist/src/reports/index.d.ts +6 -0
  171. package/dist/src/reports/index.js +7 -0
  172. package/dist/src/reports/index.js.map +1 -0
  173. package/dist/src/server/ISPDemoServer.d.ts +43 -0
  174. package/dist/src/server/ISPDemoServer.js +112 -0
  175. package/dist/src/server/ISPDemoServer.js.map +1 -0
  176. package/dist/src/server/api.d.ts +15 -0
  177. package/dist/src/server/api.js +27 -0
  178. package/dist/src/server/api.js.map +1 -0
  179. package/dist/src/server/index.d.ts +7 -0
  180. package/dist/src/server/index.js +8 -0
  181. package/dist/src/server/index.js.map +1 -0
  182. package/dist/src/server/router.d.ts +5 -0
  183. package/dist/src/server/router.js +37 -0
  184. package/dist/src/server/router.js.map +1 -0
  185. package/dist/src/system.d.ts +27 -0
  186. package/dist/src/system.js +95 -0
  187. package/dist/src/system.js.map +1 -0
  188. package/dist/tests/TransactionRules.spec.d.ts +1 -0
  189. package/dist/tests/TransactionRules.spec.js +64 -0
  190. package/dist/tests/TransactionRules.spec.js.map +1 -0
  191. package/dist/tests/password.spec.d.ts +1 -0
  192. package/dist/tests/password.spec.js +8 -0
  193. package/dist/tests/password.spec.js.map +1 -0
  194. package/dist/tests/tokens.spec.d.ts +1 -0
  195. package/dist/tests/tokens.spec.js +49 -0
  196. package/dist/tests/tokens.spec.js.map +1 -0
  197. package/dist/tests/vault.spec.d.ts +1 -0
  198. package/dist/tests/vault.spec.js +19 -0
  199. package/dist/tests/vault.spec.js.map +1 -0
  200. package/package.json +3 -3
  201. package/src/index.ts +0 -1
  202. package/src/testing/ProcessingSystemMock.ts +0 -45
  203. package/src/testing/UnitTestImportConnector.ts +0 -86
  204. package/src/testing/UnitTester.ts +0 -231
  205. package/src/testing/index.ts +0 -4
  206. package/src/testing/test-handlers.ts +0 -47
  207. package/tests/TransferAnalyzer-account-address.spec.ts +0 -87
  208. package/tests/TransferAnalyzer-buying-and-selling.spec.ts +0 -354
  209. package/tests/TransferAnalyzer-loans.spec.ts +0 -197
  210. package/tests/TransferAnalyzer-multiple-null-amounts.spec.ts +0 -181
@@ -0,0 +1,69 @@
1
+ import { log } from '@tasenor/common';
2
+ import fs from 'fs';
3
+ import { Command } from '.';
4
+ class DbCommand extends Command {
5
+ addArguments(parser) {
6
+ const sub = parser.add_subparsers();
7
+ const ls = sub.add_parser('ls', { help: 'List all databases' });
8
+ ls.set_defaults({ subCommand: 'ls' });
9
+ const create = sub.add_parser('create', { help: 'Create a database' });
10
+ create.set_defaults({ subCommand: 'create' });
11
+ create.add_argument('scheme', { help: 'Bookkeeping scheme plugin code' });
12
+ create.add_argument('databaseName', { help: 'Name of the new database' });
13
+ create.add_argument('companyName', { nargs: '?', help: 'Name of the company (optional)' });
14
+ create.add_argument('companyCode', { nargs: '?', help: 'Registration code of the company (optional)' });
15
+ create.add_argument('language', { nargs: '?', help: 'Database language (optional)' });
16
+ create.add_argument('currency', { nargs: '?', help: 'Currency (optional)' });
17
+ const rm = sub.add_parser('rm', { help: 'Delete a database' });
18
+ rm.set_defaults({ subCommand: 'rm' });
19
+ rm.add_argument('databaseName', { help: 'Name of the database' });
20
+ const upload = sub.add_parser('upload', { help: 'Upload a database' });
21
+ upload.set_defaults({ subCommand: 'upload' });
22
+ upload.add_argument('path', { help: 'Path to the file to upload' });
23
+ const download = sub.add_parser('download', { help: 'Download a database' });
24
+ download.set_defaults({ subCommand: 'download' });
25
+ download.add_argument('databaseName', { help: 'Name of the database' });
26
+ download.add_argument('path', { help: 'Path to the file to save' });
27
+ }
28
+ async ls() {
29
+ const resp = await this.get('/db');
30
+ this.out('db', resp);
31
+ }
32
+ print(data) {
33
+ for (const db of data) {
34
+ console.log(db.name);
35
+ }
36
+ }
37
+ async rm() {
38
+ const { databaseName } = this.args;
39
+ await this.delete(`/db/${databaseName}`);
40
+ log(`Database ${databaseName} deleted successfully.`);
41
+ }
42
+ async create() {
43
+ const { scheme, databaseName, companyName, companyCode, language, currency } = this.args;
44
+ const settings = {
45
+ language, currency
46
+ };
47
+ const params = { scheme, databaseName, companyName, companyCode, settings };
48
+ await this.post('/db', params);
49
+ log(`Database ${databaseName} created successfully.`);
50
+ }
51
+ async upload() {
52
+ const { path } = this.args;
53
+ if (!path || !fs.existsSync(this.str(path))) {
54
+ throw new Error(`File path ${path} does not exist.`);
55
+ }
56
+ await this.postUpload('/db/upload', path);
57
+ log(`Database ${path} uploaded successfully.`);
58
+ }
59
+ async download() {
60
+ const { path, databaseName } = this.args;
61
+ await this.getDownload(`/db/${databaseName}/download`, this.str(path));
62
+ log(`Database ${databaseName} downloaded successfully and saved to ${path}.`);
63
+ }
64
+ async run() {
65
+ await this.runBy('subCommand');
66
+ }
67
+ }
68
+ export default DbCommand;
69
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/commands/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command } from '.';
2
+ import { ArgumentParser } from 'argparse';
3
+ import { EntryModelData } from '@tasenor/common';
4
+ declare class EntryCommand extends Command {
5
+ addArguments(parser: ArgumentParser): void;
6
+ filter(): Promise<EntryModelData[]>;
7
+ ls(): Promise<void>;
8
+ print(data: EntryModelData[]): void;
9
+ edit(): Promise<void>;
10
+ rm(): Promise<void>;
11
+ run(): Promise<void>;
12
+ }
13
+ export default EntryCommand;
@@ -0,0 +1,106 @@
1
+ /* eslint-disable camelcase */
2
+ import { sprintf } from 'sprintf-js';
3
+ import { Command } from '.';
4
+ import { log } from '@tasenor/common';
5
+ class EntryCommand extends Command {
6
+ addArguments(parser) {
7
+ const sub = parser.add_subparsers();
8
+ const ls = sub.add_parser('ls', { help: 'Find entries matching the filter' });
9
+ ls.set_defaults({ subCommand: 'ls' });
10
+ ls.add_argument('--account', { help: 'Match to this account number', required: false });
11
+ ls.add_argument('--text', { help: 'Match to this exact description', required: false });
12
+ ls.add_argument('--period', { help: 'Match to period with this date/year/id', required: false });
13
+ ls.add_argument('db', { help: 'Name of the database' });
14
+ const edit = sub.add_parser('edit', { help: 'Change entries matching the filter' });
15
+ edit.set_defaults({ subCommand: 'edit' });
16
+ edit.add_argument('--account', { help: 'Match to this account number', required: false });
17
+ edit.add_argument('--text', { help: 'Match to this exact description', required: false });
18
+ edit.add_argument('--period', { help: 'Match to period with this date/year/id', required: false });
19
+ edit.add_argument('db', { help: 'Name of the database' });
20
+ edit.add_argument('data', { help: 'JSON data for patching the entry' });
21
+ const rm = sub.add_parser('rm', { help: 'Remove entries matching the filter' });
22
+ rm.set_defaults({ subCommand: 'rm' });
23
+ rm.add_argument('--account', { help: 'Match to this account number', required: false });
24
+ rm.add_argument('--text', { help: 'Match to this exact description', required: false });
25
+ rm.add_argument('--period', { help: 'Match to period with this date/year/id', required: false });
26
+ rm.add_argument('--all', { help: 'Delete the whole transaction that includes the matching line.', action: 'store_true', required: false });
27
+ rm.add_argument('db', { help: 'Name of the database' });
28
+ }
29
+ async filter() {
30
+ const { db, account, text, period } = this.args;
31
+ await this.readAccounts(db);
32
+ const query = [];
33
+ if (account) {
34
+ const id = await this.accountId(db, account);
35
+ query.push(`account_id=${id}`);
36
+ }
37
+ if (text) {
38
+ query.push(`text=${encodeURIComponent(text)}`);
39
+ }
40
+ if (period) {
41
+ const id = await this.periodId(db, period);
42
+ query.push(`period_id=${id}`);
43
+ }
44
+ return this.get(`/db/${db}/entry${query.length ? '?' + query.join('&') : ''}`);
45
+ }
46
+ async ls() {
47
+ const resp = await this.filter();
48
+ this.out('entry', resp);
49
+ }
50
+ print(data) {
51
+ for (const entry of data) {
52
+ const { id, account_id, debit, amount, description } = entry;
53
+ console.log(`#${id} ${this.accountsById[account_id || -1].number} ${this.accountsById[account_id || -1].name}`);
54
+ console.log(' ', sprintf('%.2f', debit ? amount / 100 : amount / -100), '\t', description);
55
+ if (entry.data && Object.keys(entry.data).length) {
56
+ console.log(' ', JSON.stringify(entry.data));
57
+ }
58
+ }
59
+ }
60
+ async edit() {
61
+ const { db, data } = this.args;
62
+ const params = await this.jsonData(data);
63
+ for (const key of Object.keys(params)) {
64
+ switch (key) {
65
+ case 'data':
66
+ case 'description':
67
+ break;
68
+ case 'account':
69
+ params.account_id = await this.accountId(db, `${params[key]}`);
70
+ delete params.account;
71
+ break;
72
+ default:
73
+ throw new Error(`No handler yet for entry data '${key}'.`);
74
+ }
75
+ }
76
+ const resp = await this.filter();
77
+ for (const entry of resp) {
78
+ const newParams = { ...params, data: Object.assign({}, entry.data, params.data) };
79
+ log(`Changing entry #${entry.id} to have ${JSON.stringify(newParams)}`);
80
+ await this.patch(`/db/${db}/entry/${entry.id}`, newParams);
81
+ }
82
+ }
83
+ async rm() {
84
+ const { db } = this.args;
85
+ const resp = await this.filter();
86
+ if (this.args.all) {
87
+ const docIds = new Set();
88
+ for (const entry of resp) {
89
+ docIds.add(entry.document_id);
90
+ }
91
+ for (const id of docIds) {
92
+ await this.delete(`/db/${db}/document/${id}`);
93
+ }
94
+ }
95
+ else {
96
+ for (const entry of resp) {
97
+ await this.delete(`/db/${db}/entry/${entry.id}`);
98
+ }
99
+ }
100
+ }
101
+ async run() {
102
+ await this.runBy('subCommand');
103
+ }
104
+ }
105
+ export default EntryCommand;
106
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/commands/entry.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAA;AAE3B,OAAO,EAAkB,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,YAAa,SAAQ,OAAO;IAEhC,YAAY,CAAC,MAAsB;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,EAAE,CAAA;QAEnC,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC,CAAA;QAC7E,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACrC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACvF,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACvF,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAChG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAA;QAEvD,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAA;QACnF,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;QACzC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACzF,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACzF,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAClG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC,CAAA;QAEvE,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAA;QAC/E,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACrC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACvF,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACvF,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAChG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,+DAA+D,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1I,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAC/C,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,OAAO,EAAE;YACX,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAC5C,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;SAC/B;QACD,IAAI,IAAI,EAAE;YACR,KAAK,CAAC,IAAI,CAAC,QAAQ,kBAAkB,CAAC,IAAc,CAAC,EAAE,CAAC,CAAA;SACzD;QACD,IAAI,MAAM,EAAE;YACV,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAC1C,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;SAC9B;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,KAAK,CAAC,EAAE;QACN,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QAChC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,IAAsB;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;YACxB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;YAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC/G,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;YAC7F,IAAI,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;gBAChD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;aAChD;SACF;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACrC,QAAQ,GAAG,EAAE;gBACX,KAAK,MAAM,CAAC;gBACZ,KAAK,aAAa;oBAChB,MAAK;gBACP,KAAK,SAAS;oBACZ,MAAM,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;oBAC9D,OAAO,MAAM,CAAC,OAAO,CAAA;oBACrB,MAAK;gBACP;oBACE,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,IAAI,CAAC,CAAA;aAC7D;SACF;QACD,MAAM,IAAI,GAAqB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QAClD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;YACxB,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;YACjF,GAAG,CAAC,mBAAmB,KAAK,CAAC,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YACvE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;SAC3D;IACH,CAAC;IAED,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QACxB,MAAM,IAAI,GAAqB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QAClD,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACjB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;YACxB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;gBACxB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;aAC9B;YACD,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;gBACvB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;aAC9C;SACF;aAAM;YACL,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;gBACxB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;aACjD;SACF;IACH,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAChC,CAAC;CACF;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { Command } from '.';
2
+ import { ArgumentParser } from 'argparse';
3
+ import { ProcessModelData } from '@tasenor/common';
4
+ type ProcessPostResponse = {
5
+ processId: number;
6
+ step: number;
7
+ status: string;
8
+ };
9
+ declare class ImportCommand extends Command {
10
+ addArguments(parser: ArgumentParser): void;
11
+ ls(): Promise<void>;
12
+ show(): Promise<void>;
13
+ create(): Promise<void>;
14
+ print(data: ProcessModelData[] | ProcessPostResponse): void;
15
+ run(): Promise<void>;
16
+ }
17
+ export default ImportCommand;
@@ -0,0 +1,140 @@
1
+ /* eslint-disable camelcase */
2
+ import fs from 'fs';
3
+ import mime from 'mime-types';
4
+ import { Command } from '.';
5
+ import { error, log } from '@tasenor/common';
6
+ class ImportCommand extends Command {
7
+ addArguments(parser) {
8
+ const sub = parser.add_subparsers();
9
+ const ls = sub.add_parser('ls', { help: 'List all imports' });
10
+ ls.set_defaults({ subCommand: 'ls' });
11
+ ls.add_argument('db', { help: 'Name of the database' });
12
+ ls.add_argument('name', { help: 'Name of the importer' });
13
+ const show = sub.add_parser('show', { help: 'Display import process in detail' });
14
+ show.set_defaults({ subCommand: 'show' });
15
+ show.add_argument('db', { help: 'Name of the database' });
16
+ show.add_argument('name', { help: 'Name of the importer' });
17
+ show.add_argument('id', { help: 'Import number' });
18
+ const create = sub.add_parser('create', { help: 'Import a file' });
19
+ create.set_defaults({ subCommand: 'create' });
20
+ create.add_argument('--first', { help: 'First date of the allowed period YYYY-MM-DD', default: '1900-01-01' });
21
+ create.add_argument('--last', { help: 'Final date of the allowed period YYYY-MM-DD', default: '2999-12-31' });
22
+ create.add_argument('--answers', { help: 'Answer file', required: false });
23
+ create.add_argument('db', { help: 'Name of the database' });
24
+ create.add_argument('name', { help: 'Name of the importer' });
25
+ create.add_argument('file', { help: 'Path to the file(s) to import', nargs: '+' });
26
+ }
27
+ async ls() {
28
+ const { db, name } = this.args;
29
+ const importer = await this.importer(db, name);
30
+ const resp = await this.get(`/db/${db}/import/${importer.id}`);
31
+ this.out('import', resp);
32
+ }
33
+ async show() {
34
+ const { db, name, id } = this.args;
35
+ const importer = await this.importer(db, name);
36
+ const resp = await this.get(`/db/${db}/import/${importer.id}/process/${id}`);
37
+ const steps = [];
38
+ for (const step of resp.steps) {
39
+ const resp = await this.get(`/db/${db}/import/${importer.id}/process/${id}/step/${step.number}`);
40
+ steps.push({ ...step, state: resp.state });
41
+ }
42
+ for (const step of steps) {
43
+ if (step.directions && step.directions.element) {
44
+ const element = step.directions.element;
45
+ if (element.config) {
46
+ element.config = '* * * config * * *';
47
+ }
48
+ }
49
+ }
50
+ if (this.args.json) {
51
+ this.out('import', steps);
52
+ }
53
+ else {
54
+ for (const step of steps) {
55
+ const state = step.state;
56
+ console.log();
57
+ console.log(`Step #${step.number}`);
58
+ console.log('Action:', step.action);
59
+ console.log('Direction:', step.directions && step.directions.type);
60
+ console.log('State:');
61
+ console.log(` Files: ${Object.keys(state.files).join(', ')}`);
62
+ console.log(` Stage: ${state.stage}`);
63
+ if (state.output) {
64
+ console.log(' Output:', state.output);
65
+ }
66
+ if (state.segments) {
67
+ console.log(` Segments: ${Object.keys(state.segments).join(', ')}`);
68
+ }
69
+ if (state.result !== undefined) {
70
+ console.log(' Results:');
71
+ Object.keys(state.result).forEach(segmentId => {
72
+ console.log(`=== ${segmentId} ===`);
73
+ const result = state.result;
74
+ console.dir(result[segmentId], { depth: null });
75
+ });
76
+ }
77
+ // console.log()
78
+ // console.log(step.state)
79
+ // console.log()
80
+ }
81
+ }
82
+ }
83
+ async create() {
84
+ const { db, name, file, answers, first, last } = this.args;
85
+ const importer = await this.importer(db, name);
86
+ const encoding = 'base64';
87
+ const files = [];
88
+ for (const filePath of (file || [])) {
89
+ const data = fs.readFileSync(filePath).toString(encoding);
90
+ files.push({
91
+ name: filePath,
92
+ encoding,
93
+ type: mime.lookup(filePath),
94
+ data
95
+ });
96
+ }
97
+ const answersArg = answers ? await this.jsonData(answers) : null;
98
+ const resp = await this.post(`/db/${db}/importer/${importer.id}`, {
99
+ firstDate: first,
100
+ lastDate: last,
101
+ files
102
+ });
103
+ this.out('import', resp);
104
+ if (answersArg) {
105
+ log(`Uploading answers to process #${resp.processId}`);
106
+ const resp2 = await this.post(`/db/${db}/import/${importer.id}/process/${resp.processId}`, {
107
+ answer: answersArg
108
+ });
109
+ this.out('import', resp2);
110
+ }
111
+ }
112
+ print(data) {
113
+ if ('processId' in data && 'step' in data) {
114
+ log(`Process ID: ${data.processId}, Step: ${data.step}, ${data.status}`);
115
+ return;
116
+ }
117
+ if ('processId' in data && 'status' in data && data.length === undefined) {
118
+ if (data.status === 'CRASHED') {
119
+ error(`Process ID: ${data.processId}, ${data.status}`);
120
+ }
121
+ else {
122
+ log(`Process ID: ${data.processId}, ${data.status}`);
123
+ }
124
+ return;
125
+ }
126
+ for (const imp of data.sort((a, b) => (a.id || 0) - (b.id || 0))) {
127
+ const { id, name, status, error } = imp;
128
+ console.log(`#${id} ${name} ${status}`);
129
+ if (error) {
130
+ console.log(' ', error);
131
+ }
132
+ console.log();
133
+ }
134
+ }
135
+ async run() {
136
+ await this.runBy('subCommand');
137
+ }
138
+ }
139
+ export default ImportCommand;
140
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ImporterModelData } from '@tasenor/common';
2
+ import { Command } from '.';
3
+ import { ArgumentParser } from 'argparse';
4
+ declare class ImporterCommand extends Command {
5
+ addArguments(parser: ArgumentParser): void;
6
+ ls(): Promise<void>;
7
+ print(data: ImporterModelData[]): void;
8
+ create(): Promise<void>;
9
+ set(): Promise<void>;
10
+ config(): Promise<void>;
11
+ run(): Promise<void>;
12
+ }
13
+ export default ImporterCommand;
@@ -0,0 +1,71 @@
1
+ /* eslint-disable camelcase */
2
+ import { log } from '@tasenor/common';
3
+ import { Command } from '.';
4
+ class ImporterCommand extends Command {
5
+ addArguments(parser) {
6
+ const sub = parser.add_subparsers();
7
+ const ls = sub.add_parser('ls', { help: 'List all importers' });
8
+ ls.set_defaults({ subCommand: 'ls' });
9
+ ls.add_argument('db', { help: 'Name of the database' });
10
+ const create = sub.add_parser('create', { help: 'Create an importer' });
11
+ create.set_defaults({ subCommand: 'create' });
12
+ create.add_argument('db', { help: 'Name of the database' });
13
+ create.add_argument('name', { help: 'Name of the importer' });
14
+ create.add_argument('plugin', { help: 'Code of the import handler plugin' });
15
+ const set = sub.add_parser('set', { help: 'Set configuration variable for an importer' });
16
+ set.set_defaults({ subCommand: 'set' });
17
+ set.add_argument('db', { help: 'Name of the database' });
18
+ set.add_argument('name', { help: 'The name of the importer' });
19
+ set.add_argument('variable', { help: 'Name of the configuration variable' });
20
+ set.add_argument('value', { help: 'Value for the configuration variable' });
21
+ const config = sub.add_parser('config', { help: 'Set whole configuration for an importer' });
22
+ config.set_defaults({ subCommand: 'config' });
23
+ config.add_argument('db', { help: 'Name of the database' });
24
+ config.add_argument('name', { help: 'The name of the importer' });
25
+ config.add_argument('config', { help: 'JSON data or @filepath for configuration' });
26
+ }
27
+ async ls() {
28
+ const { db } = this.args;
29
+ const resp = await this.get(`/db/${db}/importer`);
30
+ this.out('importer', resp);
31
+ }
32
+ print(data) {
33
+ for (const importer of data.sort((a, b) => (a.id || 0) - (b.id || 0))) {
34
+ const { id, name, config } = importer;
35
+ console.log(`#${id} ${name}`);
36
+ if (config.rules) {
37
+ config.rules = '...skipped...';
38
+ }
39
+ console.dir(config, { depth: null });
40
+ console.log();
41
+ }
42
+ }
43
+ async create() {
44
+ const { db, name, plugin } = this.args;
45
+ await this.plugin(plugin);
46
+ const code = this.str(plugin);
47
+ await this.post(`/db/${db}/importer`, { name, config: { handlers: [code] } });
48
+ log(`Importer ${name} created successfully.`);
49
+ }
50
+ async set() {
51
+ const { db, name, variable, value } = this.args;
52
+ const importer = await this.importer(db, name);
53
+ const variableArg = this.str(variable);
54
+ const valueArg = this.value(value);
55
+ await this.patch(`/db/${db}/importer/${importer.id}`, { config: { [variableArg]: valueArg } });
56
+ const newImporter = await this.get(`/db/${db}/importer/${importer.id}`);
57
+ log(`Variable ${variableArg} set to ${JSON.stringify(newImporter.config[variableArg])}`);
58
+ }
59
+ async config() {
60
+ const { db, name, config } = this.args;
61
+ const importer = await this.importer(db, name);
62
+ const configArg = await this.jsonData(config);
63
+ await this.patch(`/db/${db}/importer/${importer.id}`, { config: configArg });
64
+ log(`Updated configuration for importer ${name}`);
65
+ }
66
+ async run() {
67
+ await this.runBy('subCommand');
68
+ }
69
+ }
70
+ export default ImporterCommand;
71
+ //# sourceMappingURL=importer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer.js","sourceRoot":"","sources":["../../../src/commands/importer.ts"],"names":[],"mappings":"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"}