@fin.cx/opendata 3.5.0 → 3.6.0

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 (54) hide show
  1. package/{npmextra.json → .smartconfig.json} +12 -6
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.businessrecord.js +86 -43
  4. package/dist_ts/classes.handelsregister.d.ts +2 -0
  5. package/dist_ts/classes.handelsregister.js +126 -107
  6. package/dist_ts/classes.jsonldata.js +9 -6
  7. package/dist_ts/classes.main.opendata.d.ts +2 -1
  8. package/dist_ts/classes.main.opendata.js +59 -26
  9. package/dist_ts/index.d.ts +1 -0
  10. package/dist_ts/index.js +2 -1
  11. package/dist_ts/laws/classes.lawrecord.d.ts +24 -0
  12. package/dist_ts/laws/classes.lawrecord.js +181 -0
  13. package/dist_ts/laws/classes.lawservice.d.ts +52 -0
  14. package/dist_ts/laws/classes.lawservice.js +740 -0
  15. package/dist_ts/laws/index.d.ts +3 -0
  16. package/dist_ts/laws/index.js +4 -0
  17. package/dist_ts/laws/interfaces.law.d.ts +35 -0
  18. package/dist_ts/laws/interfaces.law.js +2 -0
  19. package/dist_ts/plugins.d.ts +8 -2
  20. package/dist_ts/plugins.js +14 -3
  21. package/dist_ts/stocks/classes.baseproviderservice.js +8 -8
  22. package/dist_ts/stocks/classes.fundamentalsservice.js +9 -9
  23. package/dist_ts/stocks/classes.stockdataservice.js +23 -23
  24. package/dist_ts/stocks/classes.stockservice.js +9 -9
  25. package/dist_ts/stocks/providers/provider.coingecko.d.ts +1 -1
  26. package/dist_ts/stocks/providers/provider.coingecko.js +45 -39
  27. package/dist_ts/stocks/providers/provider.marketstack.d.ts +3 -3
  28. package/dist_ts/stocks/providers/provider.marketstack.js +20 -16
  29. package/dist_ts/stocks/providers/provider.secedgar.d.ts +1 -1
  30. package/dist_ts/stocks/providers/provider.secedgar.js +22 -22
  31. package/dist_ts/stocks/providers/provider.yahoo.d.ts +2 -2
  32. package/dist_ts/stocks/providers/provider.yahoo.js +14 -13
  33. package/package.json +22 -19
  34. package/readme.md +280 -676
  35. package/ts/00_commitinfo_data.ts +1 -1
  36. package/ts/classes.businessrecord.ts +1 -1
  37. package/ts/classes.handelsregister.ts +45 -20
  38. package/ts/classes.jsonldata.ts +7 -6
  39. package/ts/classes.main.opendata.ts +63 -30
  40. package/ts/index.ts +1 -0
  41. package/ts/laws/classes.lawrecord.ts +81 -0
  42. package/ts/laws/classes.lawservice.ts +1010 -0
  43. package/ts/laws/index.ts +3 -0
  44. package/ts/laws/interfaces.law.ts +48 -0
  45. package/ts/plugins.ts +19 -0
  46. package/ts/stocks/classes.fundamentalsservice.ts +1 -1
  47. package/ts/stocks/classes.stockdataservice.ts +17 -7
  48. package/ts/stocks/classes.stockservice.ts +2 -2
  49. package/ts/stocks/providers/provider.marketstack.ts +9 -7
  50. package/ts/stocks/providers/provider.secedgar.ts +2 -2
  51. package/ts/stocks/providers/provider.yahoo.ts +3 -3
  52. package/dist_ts/classes.germanbusinessdata.d.ts +0 -9
  53. package/dist_ts/classes.germanbusinessdata.js +0 -78
  54. package/readme.plan.md +0 -193
@@ -1,5 +1,5 @@
1
1
  {
2
- "gitzone": {
2
+ "@git.zone/cli": {
3
3
  "projectType": "npm",
4
4
  "module": {
5
5
  "githost": "gitlab.com",
@@ -26,13 +26,19 @@
26
26
  "business registry",
27
27
  "data retrieval"
28
28
  ]
29
+ },
30
+ "release": {
31
+ "registries": [
32
+ "https://verdaccio.lossless.digital",
33
+ "https://registry.npmjs.org"
34
+ ],
35
+ "accessLevel": "public"
29
36
  }
30
37
  },
31
- "npmci": {
32
- "npmGlobalTools": [],
33
- "npmAccessLevel": "public"
34
- },
35
- "tsdoc": {
38
+ "@git.zone/tsdoc": {
36
39
  "legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n"
40
+ },
41
+ "@ship.zone/szci": {
42
+ "npmGlobalTools": []
37
43
  }
38
44
  }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@fin.cx/opendata',
6
- version: '3.5.0',
6
+ version: '3.6.0',
7
7
  description: 'A comprehensive TypeScript library for accessing business data and real-time financial information. Features include German company data management with MongoDB integration, JSONL bulk processing, automated Handelsregister interactions, and real-time stock market data from multiple providers.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHVTQUF1UztDQUNyVCxDQUFBIn0=
@@ -1,47 +1,90 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var BusinessRecord_1;
11
- import * as plugins from './plugins.js';
12
- let BusinessRecord = class BusinessRecord extends plugins.smartdata.SmartDataDbDoc {
13
- constructor() {
14
- super(...arguments);
15
- this.data = {};
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
16
24
  }
17
- static { BusinessRecord_1 = this; }
18
- // STATIC
19
- static { this.getByGermanParsedRegistration = async (parsedGermanRegistrationArg) => {
20
- const businessRecords = await BusinessRecord_1.getInstance({
21
- data: {
22
- germanParsedRegistration: parsedGermanRegistrationArg,
23
- }
24
- });
25
- return businessRecords;
26
- }; }
27
- /**
28
- * validates the record against the Handelregister.
29
- */
30
- async validate() {
31
- if (!this.data.name)
32
- throw new Error('Name is required.');
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
32
  }
33
+ return useValue ? value : void 0;
34
34
  };
35
- __decorate([
36
- plugins.smartdata.unI(),
37
- __metadata("design:type", String)
38
- ], BusinessRecord.prototype, "id", void 0);
39
- __decorate([
40
- plugins.smartdata.svDb(),
41
- __metadata("design:type", Object)
42
- ], BusinessRecord.prototype, "data", void 0);
43
- BusinessRecord = BusinessRecord_1 = __decorate([
44
- plugins.smartdata.Manager()
45
- ], BusinessRecord);
35
+ import * as plugins from './plugins.js';
36
+ let BusinessRecord = (() => {
37
+ let _classDecorators = [plugins.smartdata.Manager()];
38
+ let _classDescriptor;
39
+ let _classExtraInitializers = [];
40
+ let _classThis;
41
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
42
+ let _id_decorators;
43
+ let _id_initializers = [];
44
+ let _id_extraInitializers = [];
45
+ let _data_decorators;
46
+ let _data_initializers = [];
47
+ let _data_extraInitializers = [];
48
+ var BusinessRecord = class extends _classSuper {
49
+ static { _classThis = this; }
50
+ static {
51
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
52
+ _id_decorators = [plugins.smartdata.unI()];
53
+ _data_decorators = [plugins.smartdata.svDb()];
54
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
55
+ __esDecorate(null, null, _data_decorators, { kind: "field", name: "data", static: false, private: false, access: { has: obj => "data" in obj, get: obj => obj.data, set: (obj, value) => { obj.data = value; } }, metadata: _metadata }, _data_initializers, _data_extraInitializers);
56
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
57
+ BusinessRecord = _classThis = _classDescriptor.value;
58
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
59
+ }
60
+ // STATIC
61
+ static getByGermanParsedRegistration = async (parsedGermanRegistrationArg) => {
62
+ const businessRecords = await BusinessRecord.getInstance({
63
+ data: {
64
+ germanParsedRegistration: parsedGermanRegistrationArg,
65
+ }
66
+ });
67
+ return businessRecords;
68
+ };
69
+ // INSTANCE
70
+ id = __runInitializers(this, _id_initializers, void 0);
71
+ data = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _data_initializers, {}));
72
+ /**
73
+ * validates the record against the Handelregister.
74
+ */
75
+ async validate() {
76
+ if (!this.data.name)
77
+ throw new Error('Name is required.');
78
+ }
79
+ constructor() {
80
+ super(...arguments);
81
+ __runInitializers(this, _data_extraInitializers);
82
+ }
83
+ static {
84
+ __runInitializers(_classThis, _classExtraInitializers);
85
+ }
86
+ };
87
+ return BusinessRecord = _classThis;
88
+ })();
46
89
  export { BusinessRecord };
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5idXNpbmVzc3JlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYnVzaW5lc3NyZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR2pDLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBR3JEO0lBSE07O1FBb0JMLFNBQUksR0FtQ0EsRUFBRSxDQUFDO0lBUVQsQ0FBQzs7SUEzREMsU0FBUzthQUNLLGtDQUE2QixHQUFHLEtBQUssRUFBRSwyQkFBK0UsRUFBRSxFQUFFO1FBQ3RJLE1BQU0sZUFBZSxHQUFHLE1BQU0sZ0JBQWMsQ0FBQyxXQUFXLENBQUM7WUFDdkQsSUFBSSxFQUFFO2dCQUNKLHdCQUF3QixFQUFFLDJCQUEyQjthQUN0RDtTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUMsQUFQMEMsQ0FPekM7SUE2Q0Y7O09BRUc7SUFDSSxLQUFLLENBQUMsUUFBUTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7O0FBN0NEO0lBREMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7OzBDQUNiO0FBR1g7SUFEQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTs7NENBb0NsQjtBQXZESSxjQUFjO0lBRDFCLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO0dBQ2YsY0FBYyxDQStEMUIifQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5idXNpbmVzc3JlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYnVzaW5lc3NyZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0lBRzNCLGNBQWM7NEJBRDFCLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFOzs7O3NCQUNRLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYzs7Ozs7Ozs4QkFBeEMsU0FBUSxXQUduQzs7Ozs4QkFhRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQ0FHdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFGekIsd0pBQUEsRUFBRSw2QkFBRixFQUFFLCtFQUFVO1lBR1osOEpBQUEsSUFBSSw2QkFBSixJQUFJLG1GQW1DRztZQXZEVCw2S0ErREM7Ozs7UUEzREMsU0FBUztRQUNGLE1BQU0sQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLEVBQUUsMkJBQStFLEVBQUUsRUFBRTtZQUN0SSxNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3ZELElBQUksRUFBRTtvQkFDSix3QkFBd0IsRUFBRSwyQkFBMkI7aUJBQ3REO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBR0YsV0FBVztRQUVYLEVBQUUscURBQVU7UUFHWixJQUFJLGdHQW1DQSxFQUFFLEdBQUM7UUFFUDs7V0FFRztRQUNJLEtBQUssQ0FBQyxRQUFRO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVELENBQUM7Ozs7OztZQTlEVSx1REFBYzs7Ozs7U0FBZCxjQUFjIn0=
@@ -11,6 +11,8 @@ export declare class HandelsRegister {
11
11
  private uniqueDowloadFolder;
12
12
  smartbrowserInstance: plugins.smartbrowser.SmartBrowser;
13
13
  constructor(openDataRef: OpenData, downloadDirArg: string);
14
+ private resetDownloadFolder;
15
+ private waitForDownloadedFile;
14
16
  start(): Promise<void>;
15
17
  stop(): Promise<void>;
16
18
  /**
@@ -3,111 +3,135 @@ import * as plugins from './plugins.js';
3
3
  * the HandlesRegister exposed as a class
4
4
  */
5
5
  export class HandelsRegister {
6
+ openDataRef;
7
+ asyncExecutionStack = new plugins.lik.AsyncExecutionStack();
8
+ downloadDir;
9
+ uniqueDowloadFolder;
10
+ // Puppeteer wrapper instance
11
+ smartbrowserInstance = new plugins.smartbrowser.SmartBrowser();
6
12
  constructor(openDataRef, downloadDirArg) {
7
- this.asyncExecutionStack = new plugins.lik.AsyncExecutionStack();
8
- // Puppeteer wrapper instance
9
- this.smartbrowserInstance = new plugins.smartbrowser.SmartBrowser();
10
- /**
11
- * Creates a new page and configures it to allow file downloads
12
- * to a predefined path.
13
- */
14
- this.getNewPage = async () => {
15
- const page = await this.smartbrowserInstance.headlessBrowser.newPage();
16
- // 1) Create a DevTools session for this page
17
- const cdpSession = await page.target().createCDPSession();
18
- // 2) Allow file downloads and set the download path
19
- await cdpSession.send('Page.setDownloadBehavior', {
20
- behavior: 'allow',
21
- downloadPath: this.uniqueDowloadFolder, // <-- Change this to your desired absolute path
22
- });
23
- // Optionally set viewport and go to page
24
- await page.setViewport({ width: 1920, height: 1080 });
25
- await page.goto('https://www.handelsregister.de/');
26
- return page;
27
- };
28
- this.navigateToPage = async (pageArg, pageNameArg) => {
29
- try {
30
- await pageArg.evaluate((pageNameArg2) => {
31
- const elements = Array.from(document.querySelectorAll('.ui-menuitem-text > span'));
32
- const targetElement = elements.find((el) => el.textContent?.trim() === pageNameArg2);
33
- if (targetElement) {
34
- targetElement.click();
35
- }
36
- }, pageNameArg);
37
- console.log(`Navigated to the ${pageNameArg} page successfully.`);
38
- }
39
- catch (error) {
40
- console.error(`Failed to navigate to the ${pageNameArg} page:`, error);
41
- }
42
- };
43
- this.waitForResults = async (pageArg) => {
44
- await pageArg
45
- .waitForSelector('#ergebnissForm\\:selectedSuchErgebnisFormTable_data', {
46
- timeout: 30000,
47
- })
48
- .catch(async (err) => {
49
- await pageArg.screenshot({ path: `${this.downloadDir}/error.png` });
50
- throw err;
51
- });
52
- const businessRecords = await pageArg.evaluate(() => {
53
- const rows = document.querySelectorAll('#ergebnissForm\\:selectedSuchErgebnisFormTable_data > tr');
54
- const records = [];
55
- rows.forEach((row) => {
56
- const nameElement = row.querySelector('td.ui-panelgrid-cell span.marginLeft20');
57
- const cityElement = row.querySelector('td.ui-panelgrid-cell.sitzSuchErgebnisse span');
58
- const statusElement = row.querySelector('td.ui-panelgrid-cell span.verticalText');
59
- const registrationCourtElement = row.querySelector('td.ui-panelgrid-cell.fontTableNameSize');
60
- const name = nameElement?.textContent?.trim();
61
- const city = cityElement?.textContent?.trim();
62
- const status = statusElement?.textContent?.trim();
63
- const registrationId = registrationCourtElement?.textContent?.trim();
64
- // Push parsed data into records array
65
- records.push({
66
- name,
67
- city,
68
- registrationId,
69
- businessType: status,
70
- });
71
- });
72
- return records;
73
- });
74
- return businessRecords;
75
- };
76
- this.clickFindButton = async (pageArg, resultsLimitArg = 100) => {
77
- try {
78
- // Wait for the button with the text "Find" to appear
79
- await pageArg.waitForSelector('span.ui-button-text.ui-c', { timeout: 5000 });
80
- // adjust to 100 results per page
81
- await pageArg.select('#form\\:ergebnisseProSeite_input', `${resultsLimitArg}`);
82
- // Locate and click the button using its text
83
- await pageArg.evaluate(() => {
84
- const buttons = Array.from(document.querySelectorAll('span.ui-button-text.ui-c'));
85
- const targetButton = buttons.find((button) => button.textContent?.trim() === 'Find');
86
- if (targetButton) {
87
- const parentButton = targetButton.closest('button') || targetButton;
88
- parentButton.click();
89
- }
90
- });
91
- console.log('Find button clicked successfully!');
92
- }
93
- catch (error) {
94
- console.error('Failed to find or click the "Find" button:', error);
95
- }
96
- };
97
13
  this.openDataRef = openDataRef;
98
14
  this.downloadDir = downloadDirArg;
99
15
  this.uniqueDowloadFolder = plugins.path.join(this.downloadDir, plugins.smartunique.uniSimple());
100
16
  }
17
+ async resetDownloadFolder() {
18
+ await plugins.smartfs.directory(this.uniqueDowloadFolder).recursive().delete().catch(() => { });
19
+ await plugins.smartfs.directory(this.uniqueDowloadFolder).create();
20
+ }
21
+ async waitForDownloadedFile() {
22
+ for (let attempt = 0; attempt < 120; attempt++) {
23
+ const directoryEntries = await plugins.fs.readdir(this.uniqueDowloadFolder);
24
+ const fileName = directoryEntries.find((entry) => !entry.endsWith('.crdownload') && !entry.endsWith('.tmp'));
25
+ if (fileName) {
26
+ const filePath = plugins.path.join(this.uniqueDowloadFolder, fileName);
27
+ const firstStat = await plugins.fs.stat(filePath);
28
+ await plugins.smartdelay.delayFor(500);
29
+ const secondStat = await plugins.fs.stat(filePath);
30
+ if (firstStat.size === secondStat.size) {
31
+ return filePath;
32
+ }
33
+ }
34
+ await plugins.smartdelay.delayFor(500);
35
+ }
36
+ throw new Error('Timed out while waiting for the download to finish.');
37
+ }
101
38
  async start() {
102
39
  // Start the browser
103
- await plugins.smartfile.fs.ensureDir(this.uniqueDowloadFolder);
40
+ await this.resetDownloadFolder();
104
41
  await this.smartbrowserInstance.start();
105
42
  }
106
43
  async stop() {
107
44
  // Stop the browser
108
- await plugins.smartfile.fs.remove(this.uniqueDowloadFolder);
45
+ await plugins.smartfs.directory(this.uniqueDowloadFolder).recursive().delete();
109
46
  await this.smartbrowserInstance.stop();
110
47
  }
48
+ /**
49
+ * Creates a new page and configures it to allow file downloads
50
+ * to a predefined path.
51
+ */
52
+ getNewPage = async () => {
53
+ const page = await this.smartbrowserInstance.headlessBrowser.newPage();
54
+ // 1) Create a DevTools session for this page
55
+ const cdpSession = await page.target().createCDPSession();
56
+ // 2) Allow file downloads and set the download path
57
+ await cdpSession.send('Page.setDownloadBehavior', {
58
+ behavior: 'allow',
59
+ downloadPath: this.uniqueDowloadFolder, // <-- Change this to your desired absolute path
60
+ });
61
+ // Optionally set viewport and go to page
62
+ await page.setViewport({ width: 1920, height: 1080 });
63
+ await page.goto('https://www.handelsregister.de/');
64
+ return page;
65
+ };
66
+ navigateToPage = async (pageArg, pageNameArg) => {
67
+ try {
68
+ await pageArg.evaluate((pageNameArg2) => {
69
+ const elements = Array.from(document.querySelectorAll('.ui-menuitem-text > span'));
70
+ const targetElement = elements.find((el) => el.textContent?.trim() === pageNameArg2);
71
+ if (targetElement) {
72
+ targetElement.click();
73
+ }
74
+ }, pageNameArg);
75
+ console.log(`Navigated to the ${pageNameArg} page successfully.`);
76
+ }
77
+ catch (error) {
78
+ console.error(`Failed to navigate to the ${pageNameArg} page:`, error);
79
+ }
80
+ };
81
+ waitForResults = async (pageArg) => {
82
+ await pageArg
83
+ .waitForSelector('#ergebnissForm\\:selectedSuchErgebnisFormTable_data', {
84
+ timeout: 30000,
85
+ })
86
+ .catch(async (err) => {
87
+ await pageArg.screenshot({ path: `${this.downloadDir}/error.png` });
88
+ throw err;
89
+ });
90
+ const businessRecords = await pageArg.evaluate(() => {
91
+ const rows = document.querySelectorAll('#ergebnissForm\\:selectedSuchErgebnisFormTable_data > tr');
92
+ const records = [];
93
+ rows.forEach((row) => {
94
+ const nameElement = row.querySelector('td.ui-panelgrid-cell span.marginLeft20');
95
+ const cityElement = row.querySelector('td.ui-panelgrid-cell.sitzSuchErgebnisse span');
96
+ const statusElement = row.querySelector('td.ui-panelgrid-cell span.verticalText');
97
+ const registrationCourtElement = row.querySelector('td.ui-panelgrid-cell.fontTableNameSize');
98
+ const name = nameElement?.textContent?.trim();
99
+ const city = cityElement?.textContent?.trim();
100
+ const status = statusElement?.textContent?.trim();
101
+ const registrationId = registrationCourtElement?.textContent?.trim();
102
+ // Push parsed data into records array
103
+ records.push({
104
+ name,
105
+ city,
106
+ registrationId,
107
+ businessType: status,
108
+ });
109
+ });
110
+ return records;
111
+ });
112
+ return businessRecords;
113
+ };
114
+ clickFindButton = async (pageArg, resultsLimitArg = 100) => {
115
+ try {
116
+ // Wait for the button with the text "Find" to appear
117
+ await pageArg.waitForSelector('span.ui-button-text.ui-c', { timeout: 5000 });
118
+ // adjust to 100 results per page
119
+ await pageArg.select('#form\\:ergebnisseProSeite_input', `${resultsLimitArg}`);
120
+ // Locate and click the button using its text
121
+ await pageArg.evaluate(() => {
122
+ const buttons = Array.from(document.querySelectorAll('span.ui-button-text.ui-c'));
123
+ const targetButton = buttons.find((button) => button.textContent?.trim() === 'Find');
124
+ if (targetButton) {
125
+ const parentButton = targetButton.closest('button') || targetButton;
126
+ parentButton.click();
127
+ }
128
+ });
129
+ console.log('Find button clicked successfully!');
130
+ }
131
+ catch (error) {
132
+ console.error('Failed to find or click the "Find" button:', error);
133
+ }
134
+ };
111
135
  async downloadFile(pageArg, typeArg) {
112
136
  // Trigger the file download by clicking on the relevant link
113
137
  await pageArg.evaluate((typeArg2) => {
@@ -144,20 +168,12 @@ export class HandelsRegister {
144
168
  throw new Error('Invalid file type');
145
169
  }
146
170
  }, typeArg);
147
- await plugins.smartfile.fs.waitForFileToBeReady(this.uniqueDowloadFolder);
148
- const files = await plugins.smartfile.fs.fileTreeToObject(this.uniqueDowloadFolder, '**/*');
149
- const file = files[0];
150
- // lets clear the folder for the next download
151
- await plugins.smartfile.fs.ensureEmptyDir(this.uniqueDowloadFolder);
152
- switch (typeArg) {
153
- case 'AD':
154
- await file.rename(`ad.pdf`);
155
- break;
156
- case 'SI':
157
- await file.rename(`si.xml`);
158
- break;
159
- break;
160
- }
171
+ const downloadedFilePath = await this.waitForDownloadedFile();
172
+ const renamedFilePath = plugins.path.join(this.uniqueDowloadFolder, typeArg === 'AD' ? 'ad.pdf' : 'si.xml');
173
+ await plugins.fs.rename(downloadedFilePath, renamedFilePath);
174
+ const file = await plugins.smartfileFactory.fromFilePath(renamedFilePath);
175
+ // Keep the download folder empty between requests.
176
+ await this.resetDownloadFolder();
161
177
  return file;
162
178
  }
163
179
  /**
@@ -234,6 +250,9 @@ export class HandelsRegister {
234
250
  */
235
251
  async getSpecificCompany(companyArg) {
236
252
  return this.asyncExecutionStack.getExclusiveExecutionSlot(async () => {
253
+ if (!companyArg?.type || !companyArg.number || !companyArg.court) {
254
+ throw new Error('A complete parsed German registration is required.');
255
+ }
237
256
  const page = await this.getNewPage();
238
257
  await this.navigateToPage(page, 'Normal search');
239
258
  await page.waitForSelector('#form\\:schlagwoerter', { timeout: 5000 });
@@ -285,4 +304,4 @@ export class HandelsRegister {
285
304
  return result;
286
305
  }
287
306
  }
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmhhbmRlbHNyZWdpc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBUzFCLFlBQVksV0FBcUIsRUFBRSxjQUFzQjtRQVBqRCx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUlwRSw2QkFBNkI7UUFDdEIseUJBQW9CLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBb0J0RTs7O1dBR0c7UUFDSSxlQUFVLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXZFLDZDQUE2QztZQUM3QyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRTFELG9EQUFvRDtZQUNwRCxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7Z0JBQ2hELFFBQVEsRUFBRSxPQUFPO2dCQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGdEQUFnRDthQUN6RixDQUFDLENBQUM7WUFFSCx5Q0FBeUM7WUFDekMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN0RCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUVNLG1CQUFjLEdBQUcsS0FBSyxFQUM1QixPQUEyRCxFQUMzRCxXQUFtQixFQUNuQixFQUFFO1lBQ0YsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO29CQUN0QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUM7b0JBQ3JGLElBQUksYUFBYSxFQUFFLENBQUM7d0JBQ2pCLGFBQTZCLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3pDLENBQUM7Z0JBQ0gsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixXQUFXLHFCQUFxQixDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsV0FBVyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVNLG1CQUFjLEdBQUcsS0FBSyxFQUFFLE9BQTJELEVBQUUsRUFBRTtZQUM3RixNQUFNLE9BQU87aUJBQ1YsZUFBZSxDQUFDLHFEQUFxRCxFQUFFO2dCQUN0RSxPQUFPLEVBQUUsS0FBSzthQUNmLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsWUFBK0IsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZGLE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7WUFFTCxNQUFNLGVBQWUsR0FBNkIsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDNUUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUNwQywwREFBMEQsQ0FDM0QsQ0FBQztnQkFDRixNQUFNLE9BQU8sR0FBNkIsRUFBRSxDQUFDO2dCQUU3QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ25CLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0NBQXdDLENBQUMsQ0FBQztvQkFDaEYsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO29CQUN0RixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7b0JBQ2xGLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FDaEQsd0NBQXdDLENBQ3pDLENBQUM7b0JBRUYsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDOUMsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDOUMsTUFBTSxNQUFNLEdBQUcsYUFBYSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDbEQsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUVyRSxzQ0FBc0M7b0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ1gsSUFBSTt3QkFDSixJQUFJO3dCQUNKLGNBQWM7d0JBQ2QsWUFBWSxFQUFFLE1BQU07cUJBQ3JCLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FBQztRQUVNLG9CQUFlLEdBQUcsS0FBSyxFQUFFLE9BQTJELEVBQUUsa0JBQTBCLEdBQUcsRUFBRSxFQUFFO1lBQzdILElBQUksQ0FBQztnQkFDSCxxREFBcUQ7Z0JBQ3JELE1BQU0sT0FBTyxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUU3RSxpQ0FBaUM7Z0JBQ2pDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBRS9FLDZDQUE2QztnQkFDN0MsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtvQkFDMUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO29CQUNsRixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO29CQUNyRixJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFlBQVksQ0FBQzt3QkFDbkUsWUFBNEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBMUhBLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsb0JBQW9CO1FBQ3BCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLG1CQUFtQjtRQUNuQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1RCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBNkdPLEtBQUssQ0FBQyxZQUFZLENBQ3hCLE9BQTJELEVBQzNELE9BQW9CO1FBRXBCLDZEQUE2RDtRQUM3RCxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNsQyx3QkFBd0I7WUFDeEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDdEMscURBQXFELENBQ3RELENBQUM7WUFDRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFFRCx1QkFBdUI7WUFDdkIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELHdDQUF3QztZQUN4QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUVELDRCQUE0QjtZQUM1QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUVELDJDQUEyQztZQUMzQyxRQUFRLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixLQUFLLElBQUk7b0JBQ04sTUFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDaEMsTUFBTTtnQkFDUixLQUFLLElBQUk7b0JBQ04sTUFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDaEMsTUFBTTtnQkFDUjtvQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUdaLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFMUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUYsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLDhDQUE4QztRQUM5QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNwRSxRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLEtBQUssSUFBSTtnQkFDUCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVCLE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixNQUFNO2dCQUNOLE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsdUJBQXVCLENBQ25DLEtBQWE7UUFFYix5REFBeUQ7UUFDekQsTUFBTSxLQUFLLEdBQ1QsOEZBQThGLENBQUM7UUFDakcsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTztnQkFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBa0IsRUFBRSxtQkFBbUI7Z0JBQ3BELE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2pCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFzQixFQUFFLGtCQUEwQixHQUFHO1FBQzlFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ25FLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFakQsSUFBSSxDQUFDO2dCQUNILGtDQUFrQztnQkFDbEMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRXZFLCtCQUErQjtnQkFDL0IsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDO2dCQUNqQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDM0IsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBc0IsdUJBQXVCLENBQUMsQ0FBQztvQkFDdEYsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDYixRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLGdCQUFnQjt3QkFDdkMsZ0RBQWdEO3dCQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDckQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEMsQ0FBQztnQkFDSCxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRWQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUUsQ0FBQztZQUVELElBQUksQ0FBQztnQkFDSCw4Q0FBOEM7Z0JBQzlDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUV4Riw2Q0FBNkM7Z0JBQzdDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7b0JBQ3ZCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ2xDLHdDQUF3QyxDQUN6QyxDQUFDO29CQUNGLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ1YsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNoQixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRWxELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV4RCxrQ0FBa0M7WUFDbEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzFCLE1BQU0sQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FDbEUsTUFBTSxDQUFDLGNBQWMsQ0FDdEIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBOEQ7UUFDNUYsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNqRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUV2RSw0Q0FBNEM7WUFDNUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEQsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDOUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQztnQkFDdEYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDbEYsWUFBNEIsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QyxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBCLHFCQUFxQjtZQUNyQixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNyRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTdELG9CQUFvQjtZQUNwQixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUM1RCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNsRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUM1RCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDO2dCQUNuRixZQUE0QixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3pDLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckIsZUFBZTtZQUNmLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVqQyxnREFBZ0Q7WUFDaEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFN0IsTUFBTSxLQUFLLEdBQWtDLEVBQUUsQ0FBQztZQUVoRCxpQkFBaUI7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEQsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFaEQsb0VBQW9FO1lBQ3BFLHNEQUFzRDtZQUN0RCxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVuQixPQUFPO2dCQUNMLGVBQWU7Z0JBQ2YsS0FBSzthQUNOLENBQUM7UUFDSixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsY0FBc0I7UUFDMUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDcEYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIn0=
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5oYW5kZWxzcmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmhhbmRlbHNyZWdpc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ2xCLFdBQVcsQ0FBVztJQUN0QixtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM1RCxXQUFXLENBQVM7SUFDcEIsbUJBQW1CLENBQVM7SUFFcEMsNkJBQTZCO0lBQ3RCLG9CQUFvQixHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV0RSxZQUFZLFdBQXFCLEVBQUUsY0FBc0I7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CO1FBQy9CLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDckUsQ0FBQztJQUVPLEtBQUssQ0FBQyxxQkFBcUI7UUFDakMsS0FBSyxJ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
@@ -1,5 +1,7 @@
1
1
  import * as plugins from './plugins.js';
2
2
  export class JsonlDataProcessor {
3
+ germanBusinessDataDir;
4
+ forEachFunction;
3
5
  constructor(germanBusinessDataDirArg, forEachFunctionArg) {
4
6
  this.germanBusinessDataDir = germanBusinessDataDirArg;
5
7
  this.forEachFunction = forEachFunctionArg;
@@ -7,14 +9,15 @@ export class JsonlDataProcessor {
7
9
  // TODO: define a mapper as argument instead of hard-coding it
8
10
  async processDataFromUrl(dataUrlArg = 'https://daten.offeneregister.de/de_companies_ocdata.jsonl.bz2') {
9
11
  const done = plugins.smartpromise.defer();
10
- const dataExists = await plugins.smartfile.fs.isDirectory(this.germanBusinessDataDir);
12
+ const dataExists = await plugins.smartfs.directory(this.germanBusinessDataDir).exists();
11
13
  if (!dataExists) {
12
- await plugins.smartfile.fs.ensureDir(this.germanBusinessDataDir);
14
+ await plugins.smartfs.directory(this.germanBusinessDataDir).create();
13
15
  }
14
16
  else {
15
17
  }
16
- const smartarchive = await plugins.smartarchive.SmartArchive.fromArchiveUrl(dataUrlArg);
17
- const jsonlDataStream = await smartarchive.exportToStreamOfStreamFiles();
18
+ const jsonlDataStream = await plugins.smartarchive.SmartArchive.create()
19
+ .url(dataUrlArg)
20
+ .toStreamFiles();
18
21
  let totalRecordsCounter = 0;
19
22
  let nextRest = '';
20
23
  jsonlDataStream.pipe(new plugins.smartstream.SmartDuplex({
@@ -26,7 +29,7 @@ export class JsonlDataProcessor {
26
29
  writeFunction: async (chunkArg, streamToolsArg) => {
27
30
  const currentString = nextRest + chunkArg.toString();
28
31
  const lines = currentString.split('\n');
29
- nextRest = lines.pop();
32
+ nextRest = lines.pop() ?? '';
30
33
  console.log(`Got another ${lines.length} records.`);
31
34
  const concurrentProcessor = new plugins.smartarray.ConcurrentProcessor(async (line) => {
32
35
  let entry;
@@ -62,4 +65,4 @@ export class JsonlDataProcessor {
62
65
  await done.promise;
63
66
  }
64
67
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qc29ubGRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmpzb25sZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXlDeEMsTUFBTSxPQUFPLGtCQUFrQjtJQUk3QixZQUFZLHdCQUFnQyxFQUFFLGtCQUErQztRQUMzRixJQUFJLENBQUMscUJBQXFCLEdBQUcsd0JBQXdCLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsOERBQThEO0lBQ3ZELEtBQUssQ0FBQyxrQkFBa0IsQ0FDN0IsVUFBVSxHQUFHLCtEQUErRDtRQUU1RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sQ0FBQztRQUNSLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RixNQUFNLGVBQWUsR0FBRyxNQUFNLFlBQVksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3pFLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksUUFBUSxHQUFXLEVBQUUsQ0FBQztRQUMxQixlQUFlLENBQUMsSUFBSSxDQUNsQixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ2xDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBc0MsRUFBRSxjQUFjLEVBQUUsRUFBRTtnQkFDOUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckQsVUFBVSxDQUFDLElBQUksQ0FDYixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFnQixFQUFFLGNBQWMsRUFBRSxFQUFFO3dCQUN4RCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNyRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN4QyxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDLENBQUM7d0JBQ3BELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUNwRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7NEJBQ2IsSUFBSSxLQUFRLENBQUM7NEJBQ2IsSUFBSSxDQUFDLElBQUk7Z0NBQUUsT0FBTzs0QkFDbEIsSUFBSSxDQUFDO2dDQUNILEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUMzQixDQUFDOzRCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0NBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDbEIsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDM0MsQ0FBQzs0QkFDRCxJQUFJLENBQUMsS0FBSztnQ0FBRSxPQUFPOzRCQUNuQixtQkFBbUIsRUFBRSxDQUFDOzRCQUN0QixJQUFJLG1CQUFtQixHQUFHLEtBQUssS0FBSyxDQUFDO2dDQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLGlCQUFpQixDQUFDLENBQUM7NEJBQ3ZELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEMsQ0FBQyxFQUNELElBQUksQ0FDTCxDQUFDO3dCQUNGLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQyxDQUFDO29CQUNELGFBQWEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUU7d0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLG1CQUFtQixXQUFXLENBQUMsQ0FBQzt3QkFDbkUsSUFBSSxRQUFRLEVBQUUsQ0FBQzs0QkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN2QixDQUFDO3dCQUFBLENBQUM7d0JBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNqQixDQUFDO2lCQUNGLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiJ9
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qc29ubGRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmpzb25sZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXlDeEMsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixxQkFBcUIsQ0FBUztJQUMvQixlQUFlLENBQWlDO0lBRXZELFlBQVksd0JBQWdDLEVBQUUsa0JBQStDO1FBQzNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztRQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQzVDLENBQUM7SUFFRCw4REFBOEQ7SUFDdkQsS0FBSyxDQUFDLGtCQUFrQixDQUM3QixVQUFVLEdBQUcsK0RBQStEO1FBRTVFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4RixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2RSxDQUFDO2FBQU0sQ0FBQztRQUNSLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTthQUNyRSxHQUFHLENBQUMsVUFBVSxDQUFDO2FBQ2YsYUFBYSxFQUFFLENBQUM7UUFDbkIsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxRQUFRLEdBQVcsRUFBRSxDQUFDO1FBQzFCLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLElBQUks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
@@ -9,8 +9,9 @@ export interface IOpenDataConfig {
9
9
  }
10
10
  export declare class OpenData {
11
11
  db: plugins.smartdata.SmartdataDb;
12
- private serviceQenv;
12
+ private localSmartDb?;
13
13
  private config;
14
+ private started;
14
15
  jsonLDataProcessor: JsonlDataProcessor<SeedEntryType>;
15
16
  handelsregister: HandelsRegister;
16
17
  CBusinessRecord: typeof BusinessRecord;