@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.
- package/dist/migrations/01_init.js +60 -0
- package/dist/src/cli.d.ts +81 -0
- package/dist/src/cli.js +242 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/account.d.ts +12 -0
- package/dist/src/commands/account.js +58 -0
- package/dist/src/commands/account.js.map +1 -0
- package/dist/src/commands/balance.d.ts +11 -0
- package/dist/src/commands/balance.js +117 -0
- package/dist/src/commands/balance.js.map +1 -0
- package/dist/src/commands/db.d.ts +14 -0
- package/dist/src/commands/db.js +69 -0
- package/dist/src/commands/db.js.map +1 -0
- package/dist/src/commands/entry.d.ts +13 -0
- package/dist/src/commands/entry.js +106 -0
- package/dist/src/commands/entry.js.map +1 -0
- package/dist/src/commands/import.d.ts +17 -0
- package/dist/src/commands/import.js +140 -0
- package/dist/src/commands/import.js.map +1 -0
- package/dist/src/commands/importer.d.ts +13 -0
- package/dist/src/commands/importer.js +71 -0
- package/dist/src/commands/importer.js.map +1 -0
- package/dist/src/commands/index.d.ts +191 -0
- package/dist/src/commands/index.js +482 -0
- package/dist/src/commands/index.js.map +1 -0
- package/dist/src/commands/period.d.ts +12 -0
- package/dist/src/commands/period.js +48 -0
- package/dist/src/commands/period.js.map +1 -0
- package/dist/src/commands/plugin.d.ts +15 -0
- package/dist/src/commands/plugin.js +78 -0
- package/dist/src/commands/plugin.js.map +1 -0
- package/dist/src/commands/report.d.ts +11 -0
- package/dist/src/commands/report.js +96 -0
- package/dist/src/commands/report.js.map +1 -0
- package/dist/src/commands/settings.d.ts +10 -0
- package/dist/src/commands/settings.js +64 -0
- package/dist/src/commands/settings.js.map +1 -0
- package/dist/src/commands/stock.d.ts +8 -0
- package/dist/src/commands/stock.js +73 -0
- package/dist/src/commands/stock.js.map +1 -0
- package/dist/src/commands/tag.d.ts +13 -0
- package/dist/src/commands/tag.js +89 -0
- package/dist/src/commands/tag.js.map +1 -0
- package/dist/src/commands/tx.d.ts +12 -0
- package/dist/src/commands/tx.js +81 -0
- package/dist/src/commands/tx.js.map +1 -0
- package/dist/src/commands/user.d.ts +12 -0
- package/dist/src/commands/user.js +52 -0
- package/dist/src/commands/user.js.map +1 -0
- package/dist/src/database/BookkeeperImporter.d.ts +77 -0
- package/dist/src/database/BookkeeperImporter.js +343 -0
- package/dist/src/database/BookkeeperImporter.js.map +1 -0
- package/dist/src/database/DB.d.ts +51 -0
- package/dist/src/database/DB.js +354 -0
- package/dist/src/database/DB.js.map +1 -0
- package/dist/src/database/index.d.ts +7 -0
- package/dist/src/database/index.js +8 -0
- package/dist/src/database/index.js.map +1 -0
- package/dist/src/doccer.d.ts +29 -0
- package/dist/src/doccer.js +30 -0
- package/dist/src/doccer.js.map +1 -0
- package/dist/src/error.d.ts +30 -0
- package/dist/src/error.js +35 -0
- package/dist/src/error.js.map +1 -0
- package/dist/src/export/Exporter.d.ts +69 -0
- package/dist/src/export/Exporter.js +123 -0
- package/dist/src/export/Exporter.js.map +1 -0
- package/dist/src/export/TasenorExporter.d.ts +55 -0
- package/dist/src/export/TasenorExporter.js +135 -0
- package/dist/src/export/TasenorExporter.js.map +1 -0
- package/dist/src/export/TilitinExporter.d.ts +71 -0
- package/dist/src/export/TilitinExporter.js +290 -0
- package/dist/src/export/TilitinExporter.js.map +1 -0
- package/dist/src/export/index.d.ts +8 -0
- package/dist/src/export/index.js +9 -0
- package/dist/src/export/index.js.map +1 -0
- package/dist/src/import/TextFileProcessHandler.d.ts +104 -0
- package/dist/src/import/TextFileProcessHandler.js +354 -0
- package/dist/src/import/TextFileProcessHandler.js.map +1 -0
- package/dist/src/import/TransactionImportConnector.d.ts +38 -0
- package/dist/src/import/TransactionImportConnector.js +27 -0
- package/dist/src/import/TransactionImportConnector.js.map +1 -0
- package/dist/src/import/TransactionImportHandler.d.ts +173 -0
- package/dist/src/import/TransactionImportHandler.js +733 -0
- package/dist/src/import/TransactionImportHandler.js.map +1 -0
- package/dist/src/import/TransactionRules.d.ts +238 -0
- package/dist/src/import/TransactionRules.js +522 -0
- package/dist/src/import/TransactionRules.js.map +1 -0
- package/dist/src/import/TransactionUI.d.ts +181 -0
- package/dist/src/import/TransactionUI.js +482 -0
- package/dist/src/import/TransactionUI.js.map +1 -0
- package/dist/src/import/TransferAnalyzer.d.ts +324 -0
- package/dist/src/import/TransferAnalyzer.js +1379 -0
- package/dist/src/import/TransferAnalyzer.js.map +1 -0
- package/dist/src/import/index.d.ts +11 -0
- package/dist/src/import/index.js +12 -0
- package/dist/src/import/index.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/net/crypto.d.ts +33 -0
- package/dist/src/net/crypto.js +63 -0
- package/dist/src/net/crypto.js.map +1 -0
- package/dist/src/net/git.d.ts +49 -0
- package/dist/src/net/git.js +137 -0
- package/dist/src/net/git.js.map +1 -0
- package/dist/src/net/index.d.ts +10 -0
- package/dist/src/net/index.js +11 -0
- package/dist/src/net/index.js.map +1 -0
- package/dist/src/net/middleware.d.ts +61 -0
- package/dist/src/net/middleware.js +220 -0
- package/dist/src/net/middleware.js.map +1 -0
- package/dist/src/net/tokens.d.ts +50 -0
- package/dist/src/net/tokens.js +141 -0
- package/dist/src/net/tokens.js.map +1 -0
- package/dist/src/net/vault.d.ts +67 -0
- package/dist/src/net/vault.js +145 -0
- package/dist/src/net/vault.js.map +1 -0
- package/dist/src/plugins/BackendPlugin.d.ts +91 -0
- package/dist/src/plugins/BackendPlugin.js +165 -0
- package/dist/src/plugins/BackendPlugin.js.map +1 -0
- package/dist/src/plugins/DataPlugin.d.ts +13 -0
- package/dist/src/plugins/DataPlugin.js +26 -0
- package/dist/src/plugins/DataPlugin.js.map +1 -0
- package/dist/src/plugins/ImportPlugin.d.ts +188 -0
- package/dist/src/plugins/ImportPlugin.js +204 -0
- package/dist/src/plugins/ImportPlugin.js.map +1 -0
- package/dist/src/plugins/ReportPlugin.d.ts +132 -0
- package/dist/src/plugins/ReportPlugin.js +393 -0
- package/dist/src/plugins/ReportPlugin.js.map +1 -0
- package/dist/src/plugins/SchemePlugin.d.ts +34 -0
- package/dist/src/plugins/SchemePlugin.js +47 -0
- package/dist/src/plugins/SchemePlugin.js.map +1 -0
- package/dist/src/plugins/ServicePlugin.d.ts +80 -0
- package/dist/src/plugins/ServicePlugin.js +168 -0
- package/dist/src/plugins/ServicePlugin.js.map +1 -0
- package/dist/src/plugins/ToolPlugin.d.ts +27 -0
- package/dist/src/plugins/ToolPlugin.js +37 -0
- package/dist/src/plugins/ToolPlugin.js.map +1 -0
- package/dist/src/plugins/index.d.ts +13 -0
- package/dist/src/plugins/index.js +14 -0
- package/dist/src/plugins/index.js.map +1 -0
- package/dist/src/plugins/plugins.d.ts +101 -0
- package/dist/src/plugins/plugins.js +292 -0
- package/dist/src/plugins/plugins.js.map +1 -0
- package/dist/src/process/Process.d.ts +108 -0
- package/dist/src/process/Process.js +335 -0
- package/dist/src/process/Process.js.map +1 -0
- package/dist/src/process/ProcessConnector.d.ts +24 -0
- package/dist/src/process/ProcessConnector.js +28 -0
- package/dist/src/process/ProcessConnector.js.map +1 -0
- package/dist/src/process/ProcessFile.d.ts +69 -0
- package/dist/src/process/ProcessFile.js +145 -0
- package/dist/src/process/ProcessFile.js.map +1 -0
- package/dist/src/process/ProcessHandler.d.ts +60 -0
- package/dist/src/process/ProcessHandler.js +73 -0
- package/dist/src/process/ProcessHandler.js.map +1 -0
- package/dist/src/process/ProcessStep.d.ts +52 -0
- package/dist/src/process/ProcessStep.js +78 -0
- package/dist/src/process/ProcessStep.js.map +1 -0
- package/dist/src/process/ProcessingSystem.d.ts +60 -0
- package/dist/src/process/ProcessingSystem.js +182 -0
- package/dist/src/process/ProcessingSystem.js.map +1 -0
- package/dist/src/process/index.d.ts +11 -0
- package/dist/src/process/index.js +12 -0
- package/dist/src/process/index.js.map +1 -0
- package/dist/src/reports/conversions.d.ts +8 -0
- package/dist/src/reports/conversions.js +47 -0
- package/dist/src/reports/conversions.js.map +1 -0
- package/dist/src/reports/index.d.ts +6 -0
- package/dist/src/reports/index.js +7 -0
- package/dist/src/reports/index.js.map +1 -0
- package/dist/src/server/ISPDemoServer.d.ts +43 -0
- package/dist/src/server/ISPDemoServer.js +112 -0
- package/dist/src/server/ISPDemoServer.js.map +1 -0
- package/dist/src/server/api.d.ts +15 -0
- package/dist/src/server/api.js +27 -0
- package/dist/src/server/api.js.map +1 -0
- package/dist/src/server/index.d.ts +7 -0
- package/dist/src/server/index.js +8 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/router.d.ts +5 -0
- package/dist/src/server/router.js +37 -0
- package/dist/src/server/router.js.map +1 -0
- package/dist/src/system.d.ts +27 -0
- package/dist/src/system.js +95 -0
- package/dist/src/system.js.map +1 -0
- package/dist/tests/TransactionRules.spec.d.ts +1 -0
- package/dist/tests/TransactionRules.spec.js +64 -0
- package/dist/tests/TransactionRules.spec.js.map +1 -0
- package/dist/tests/password.spec.d.ts +1 -0
- package/dist/tests/password.spec.js +8 -0
- package/dist/tests/password.spec.js.map +1 -0
- package/dist/tests/tokens.spec.d.ts +1 -0
- package/dist/tests/tokens.spec.js +49 -0
- package/dist/tests/tokens.spec.js.map +1 -0
- package/dist/tests/vault.spec.d.ts +1 -0
- package/dist/tests/vault.spec.js +19 -0
- package/dist/tests/vault.spec.js.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +0 -1
- package/src/testing/ProcessingSystemMock.ts +0 -45
- package/src/testing/UnitTestImportConnector.ts +0 -86
- package/src/testing/UnitTester.ts +0 -231
- package/src/testing/index.ts +0 -4
- package/src/testing/test-handlers.ts +0 -47
- package/tests/TransferAnalyzer-account-address.spec.ts +0 -87
- package/tests/TransferAnalyzer-buying-and-selling.spec.ts +0 -354
- package/tests/TransferAnalyzer-loans.spec.ts +0 -197
- 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":"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"}
|
|
@@ -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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"}
|