@fin.cx/opendata 1.1.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.
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export const commitinfo = {
5
+ name: '@fin.cx/opendata',
6
+ version: '1.1.0',
7
+ description: 'A TypeScript-based library for accessing and managing open business data, specifically for German companies.'
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDhHQUE4RztDQUM1SCxDQUFBIn0=
@@ -0,0 +1,26 @@
1
+ import * as plugins from './plugins.js';
2
+ export declare class BusinessRecord extends plugins.smartdata.SmartDataDbDoc<BusinessRecord, BusinessRecord> {
3
+ id: string;
4
+ data: {
5
+ name?: string;
6
+ address?: string;
7
+ postalCode?: string;
8
+ city?: string;
9
+ country?: string;
10
+ phone?: string;
11
+ fax?: string;
12
+ email?: string;
13
+ website?: string;
14
+ businessType?: string;
15
+ registrationNumber?: string;
16
+ registrationCourt?: string;
17
+ legalForm?: string;
18
+ managingDirectors?: string[];
19
+ boardOfDirectors?: string[];
20
+ supervisoryBoard?: string[];
21
+ foundingDate?: string;
22
+ capital?: string;
23
+ purpose?: string;
24
+ lastUpdate?: string;
25
+ };
26
+ }
@@ -0,0 +1,28 @@
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
+ import * as plugins from './plugins.js';
11
+ export let BusinessRecord = class BusinessRecord extends plugins.smartdata.SmartDataDbDoc {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.data = {};
15
+ }
16
+ };
17
+ __decorate([
18
+ plugins.smartdata.unI(),
19
+ __metadata("design:type", String)
20
+ ], BusinessRecord.prototype, "id", void 0);
21
+ __decorate([
22
+ plugins.smartdata.svDb(),
23
+ __metadata("design:type", Object)
24
+ ], BusinessRecord.prototype, "data", void 0);
25
+ BusinessRecord = __decorate([
26
+ plugins.smartdata.Manager()
27
+ ], BusinessRecord);
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5idXNpbmVzc3JlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYnVzaW5lc3NyZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHakMsV0FBTSxjQUFjLEdBQXBCLE1BQU0sY0FBZSxTQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBOEM7SUFBN0Y7O1FBTUwsU0FBSSxHQXFCQSxFQUFFLENBQUM7SUFDVCxDQUFDO0NBQUEsQ0FBQTtBQXpCQztJQURDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFOzswQ0FDYjtBQUdYO0lBREMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7OzRDQXNCbEI7QUEzQkksY0FBYztJQUQxQixPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtHQUNmLGNBQWMsQ0E0QjFCIn0=
@@ -0,0 +1,9 @@
1
+ import type { OpenData } from './classes.main.opendata.js';
2
+ export declare class GermanBusinessData {
3
+ openDataRef: OpenData;
4
+ constructor(openDataRefArg: OpenData);
5
+ start(): Promise<void>;
6
+ stop(): Promise<void>;
7
+ update(): Promise<void>;
8
+ getBusinessRecordByName(nameArg: string): Promise<import("./classes.businessrecord.js").BusinessRecord>;
9
+ }
@@ -0,0 +1,78 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as paths from './paths.js';
3
+ export class GermanBusinessData {
4
+ constructor(openDataRefArg) {
5
+ this.openDataRef = openDataRefArg;
6
+ }
7
+ async start() {
8
+ await this.update();
9
+ }
10
+ async stop() { }
11
+ async update() {
12
+ const done = plugins.smartpromise.defer();
13
+ const promiseArray = [];
14
+ const dataUrl = 'https://daten.offeneregister.de/de_companies_ocdata.jsonl.bz2';
15
+ const dataExists = await plugins.smartfile.fs.isDirectory(paths.germanBusinessDataDir);
16
+ if (!dataExists) {
17
+ await plugins.smartfile.fs.ensureDir(paths.germanBusinessDataDir);
18
+ }
19
+ else {
20
+ }
21
+ const smartarchive = await plugins.smartarchive.SmartArchive.fromArchiveUrl(dataUrl);
22
+ promiseArray
23
+ .push();
24
+ const jsonlDataStream = await smartarchive.exportToStreamOfStreamFiles();
25
+ let totalRecordsCounter = 0;
26
+ let nextRest = '';
27
+ jsonlDataStream.pipe(new plugins.smartstream.SmartDuplex({
28
+ objectMode: true,
29
+ writeFunction: async (chunkArg, streamToolsArg) => {
30
+ const readStream = await chunkArg.createReadStream();
31
+ readStream.pipe(new plugins.smartstream.SmartDuplex({
32
+ objectMode: true,
33
+ writeFunction: async (chunkArg, streamToolsArg) => {
34
+ const currentString = nextRest + chunkArg.toString();
35
+ const lines = currentString.split('\n');
36
+ nextRest = lines.pop();
37
+ console.log(`Got another ${lines.length} records.`);
38
+ for (const line of lines) {
39
+ let entry;
40
+ if (!line)
41
+ continue;
42
+ try {
43
+ entry = JSON.parse(line);
44
+ }
45
+ catch (err) {
46
+ console.log(line);
47
+ await plugins.smartdelay.delayFor(10000);
48
+ }
49
+ if (!entry)
50
+ continue;
51
+ totalRecordsCounter++;
52
+ if (totalRecordsCounter % 10000 === 0)
53
+ console.log(`${totalRecordsCounter} total records.`);
54
+ const businessRecord = new this.openDataRef.CBusinessRecord();
55
+ businessRecord.data.name = entry.name;
56
+ await businessRecord.save();
57
+ // console.log(`stored ${businessRecord.data.name}`);
58
+ }
59
+ },
60
+ finalFunction: async (streamToolsArg) => {
61
+ if (!nextRest)
62
+ return;
63
+ JSON.parse(nextRest);
64
+ }
65
+ }));
66
+ },
67
+ }));
68
+ }
69
+ async getBusinessRecordByName(nameArg) {
70
+ const businessRecord = await this.openDataRef.CBusinessRecord.getInstance({
71
+ data: {
72
+ name: { $regex: `${nameArg}`, $options: "i" },
73
+ }
74
+ });
75
+ return businessRecord;
76
+ }
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nZXJtYW5idXNpbmVzc2RhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmdlcm1hbmJ1c2luZXNzZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUdwQyxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFlBQVksY0FBd0I7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFDcEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDTSxLQUFLLENBQUMsSUFBSSxLQUFJLENBQUM7SUFFZixLQUFLLENBQUMsTUFBTTtRQUNqQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFDLE1BQU0sWUFBWSxHQUFtQixFQUFFLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsK0RBQStELENBQUM7UUFDaEYsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ25FO2FBQU07U0FDTjtRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JGLFlBQVk7YUFDVCxJQUFJLEVBRUgsQ0FBQztRQUNMLE1BQU0sZUFBZSxHQUFHLE1BQU0sWUFBWSxDQUFDLDJCQUEy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
@@ -0,0 +1,11 @@
1
+ import { BusinessRecord } from './classes.businessrecord.js';
2
+ import { GermanBusinessData } from './classes.germanbusinessdata.js';
3
+ import * as plugins from './plugins.js';
4
+ export declare class OpenData {
5
+ db: plugins.smartdata.SmartdataDb;
6
+ germanBusinesses: GermanBusinessData;
7
+ private serviceQenv;
8
+ CBusinessRecord: typeof BusinessRecord;
9
+ start(): Promise<void>;
10
+ stop(): Promise<void>;
11
+ }
@@ -0,0 +1,23 @@
1
+ import { BusinessRecord } from './classes.businessrecord.js';
2
+ import { GermanBusinessData } from './classes.germanbusinessdata.js';
3
+ import * as paths from './paths.js';
4
+ import * as plugins from './plugins.js';
5
+ export class OpenData {
6
+ constructor() {
7
+ this.serviceQenv = new plugins.qenv.Qenv(paths.packageDir, paths.nogitDir);
8
+ this.CBusinessRecord = plugins.smartdata.setDefaultManagerForDoc(this, BusinessRecord);
9
+ }
10
+ async start() {
11
+ this.db = new plugins.smartdata.SmartdataDb({
12
+ mongoDbUrl: await this.serviceQenv.getEnvVarOnDemand('MONGODB_URL'),
13
+ mongoDbName: await this.serviceQenv.getEnvVarOnDemand('MONGODB_NAME'),
14
+ mongoDbUser: await this.serviceQenv.getEnvVarOnDemand('MONGODB_USER'),
15
+ mongoDbPass: await this.serviceQenv.getEnvVarOnDemand('MONGODB_PASS'),
16
+ });
17
+ await this.db.init();
18
+ this.germanBusinesses = new GermanBusinessData(this);
19
+ await this.germanBusinesses.start();
20
+ }
21
+ async stop() { }
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5tYWluLm9wZW5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5tYWluLm9wZW5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLE9BQU8sUUFBUTtJQUFyQjtRQUdVLGdCQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2RSxvQkFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBYzNGLENBQUM7SUFaUSxLQUFLLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7WUFDeEMsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7WUFDbkUsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7WUFDckUsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7WUFDckUsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7U0FDeEUsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFDTSxLQUFLLENBQUMsSUFBSSxLQUFJLENBQUM7Q0FDdkIifQ==
@@ -0,0 +1 @@
1
+ export * from './classes.main.opendata.js';
@@ -0,0 +1,2 @@
1
+ export * from './classes.main.opendata.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ export declare const packageDir: string;
2
+ export declare const nogitDir: string;
3
+ export declare const germanBusinessDataDir: string;
@@ -0,0 +1,6 @@
1
+ import * as plugins from './plugins.js';
2
+ export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
3
+ export const nogitDir = plugins.path.join(packageDir, './.nogit/');
4
+ plugins.smartfile.fs.ensureDirSync(nogitDir);
5
+ export const germanBusinessDataDir = plugins.path.join(nogitDir, 'germanbusinessdata');
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQy9ELEtBQUssQ0FDTixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUMifQ==
@@ -0,0 +1,12 @@
1
+ import * as path from 'path';
2
+ export { path, };
3
+ import * as qenv from '@push.rocks/qenv';
4
+ import * as smartarchive from '@push.rocks/smartarchive';
5
+ import * as smartdata from '@push.rocks/smartdata';
6
+ import * as smartdelay from '@push.rocks/smartdelay';
7
+ import * as smartfile from '@push.rocks/smartfile';
8
+ import * as smartpath from '@push.rocks/smartpath';
9
+ import * as smartpromise from '@push.rocks/smartpromise';
10
+ import * as smartrequest from '@push.rocks/smartrequest';
11
+ import * as smartstream from '@push.rocks/smartstream';
12
+ export { qenv, smartarchive, smartdata, smartdelay, smartfile, smartpath, smartpromise, smartrequest, smartstream, };
@@ -0,0 +1,15 @@
1
+ // node native scope
2
+ import * as path from 'path';
3
+ export { path, };
4
+ // @push.rocks scope
5
+ import * as qenv from '@push.rocks/qenv';
6
+ import * as smartarchive from '@push.rocks/smartarchive';
7
+ import * as smartdata from '@push.rocks/smartdata';
8
+ import * as smartdelay from '@push.rocks/smartdelay';
9
+ import * as smartfile from '@push.rocks/smartfile';
10
+ import * as smartpath from '@push.rocks/smartpath';
11
+ import * as smartpromise from '@push.rocks/smartpromise';
12
+ import * as smartrequest from '@push.rocks/smartrequest';
13
+ import * as smartstream from '@push.rocks/smartstream';
14
+ export { qenv, smartarchive, smartdata, smartdelay, smartfile, smartpath, smartpromise, smartrequest, smartstream, };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFDTCxJQUFJLEdBQ0wsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsSUFBSSxFQUNKLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixXQUFXLEdBQ1osQ0FBQSJ9
package/npmextra.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "gitzone": {
3
+ "projectType": "npm",
4
+ "module": {
5
+ "githost": "gitlab.com",
6
+ "gitscope": "fin.cx",
7
+ "gitrepo": "opendata",
8
+ "description": "A TypeScript-based library for accessing and managing open business data, specifically for German companies.",
9
+ "npmPackagename": "@fin.cx/opendata",
10
+ "license": "MIT",
11
+ "projectDomain": "fin.cx",
12
+ "keywords": [
13
+ "TypeScript",
14
+ "open data",
15
+ "business data",
16
+ "German companies",
17
+ "data management",
18
+ "business registry",
19
+ "npm package",
20
+ "database",
21
+ "MongoDB",
22
+ "automation"
23
+ ]
24
+ }
25
+ },
26
+ "npmci": {
27
+ "npmGlobalTools": [],
28
+ "npmAccessLevel": "public"
29
+ }
30
+ }
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@fin.cx/opendata",
3
+ "version": "1.1.0",
4
+ "private": false,
5
+ "description": "A TypeScript-based library for accessing and managing open business data, specifically for German companies.",
6
+ "main": "dist_ts/index.js",
7
+ "typings": "dist_ts/index.d.ts",
8
+ "type": "module",
9
+ "author": "Task Venture Capital GmbH",
10
+ "license": "MIT",
11
+ "devDependencies": {
12
+ "@git.zone/tsbuild": "^2.1.25",
13
+ "@git.zone/tsbundle": "^2.0.5",
14
+ "@git.zone/tsrun": "^1.2.46",
15
+ "@git.zone/tstest": "^1.0.84",
16
+ "@push.rocks/tapbundle": "^5.0.15",
17
+ "@types/node": "^20.9.0"
18
+ },
19
+ "dependencies": {
20
+ "@push.rocks/qenv": "^6.0.4",
21
+ "@push.rocks/smartarchive": "^4.0.19",
22
+ "@push.rocks/smartdata": "^5.0.33",
23
+ "@push.rocks/smartdelay": "^3.0.5",
24
+ "@push.rocks/smartfile": "^11.0.0",
25
+ "@push.rocks/smartpath": "^5.0.11",
26
+ "@push.rocks/smartpromise": "^4.0.3",
27
+ "@push.rocks/smartrequest": "^2.0.21",
28
+ "@push.rocks/smartstream": "^3.0.30"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://gitlab.com/fin.cx/opendata.git"
33
+ },
34
+ "bugs": {
35
+ "url": "https://gitlab.com/fin.cx/opendata/issues"
36
+ },
37
+ "homepage": "https://gitlab.com/fin.cx/opendata#readme",
38
+ "browserslist": [
39
+ "last 1 chrome versions"
40
+ ],
41
+ "files": [
42
+ "ts/**/*",
43
+ "ts_web/**/*",
44
+ "dist/**/*",
45
+ "dist_*/**/*",
46
+ "dist_ts/**/*",
47
+ "dist_ts_web/**/*",
48
+ "assets/**/*",
49
+ "cli.js",
50
+ "npmextra.json",
51
+ "readme.md"
52
+ ],
53
+ "keywords": [
54
+ "TypeScript",
55
+ "open data",
56
+ "business data",
57
+ "German companies",
58
+ "data management",
59
+ "business registry",
60
+ "npm package",
61
+ "database",
62
+ "MongoDB",
63
+ "automation"
64
+ ],
65
+ "scripts": {
66
+ "test": "(tstest test/ --web)",
67
+ "build": "(tsbuild --web --allowimplicitany)",
68
+ "buildDocs": "(tsdoc)"
69
+ }
70
+ }
File without changes
package/readme.md ADDED
@@ -0,0 +1,253 @@
1
+ ```markdown
2
+ # @fin.cx/opendata
3
+ open business data
4
+
5
+ ## Install
6
+
7
+ To install the `@fin.cx/opendata` package, you can use npm or yarn as your package manager. Here's how you can do it:
8
+
9
+ Using npm:
10
+
11
+ ```bash
12
+ npm install @fin.cx/opendata
13
+ ```
14
+
15
+ Using yarn:
16
+
17
+ ```bash
18
+ yarn add @fin.cx/opendata
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ The `@fin.cx/opendata` package offers functionalities for handling open business data, with a primary focus on German business data. Let's explore its capabilities through detailed examples.
24
+
25
+ ### Setting Up
26
+
27
+ #### Importing the Module
28
+
29
+ Begin by importing necessary components from the `@fin.cx/opendata` package. You'll also need to set up some environment variables for the MongoDB instance.
30
+
31
+ ```typescript
32
+ import { OpenData } from '@fin.cx/opendata';
33
+
34
+ const startOpenDataInstance = async () => {
35
+ const openData = new OpenData();
36
+
37
+ await openData.start(); // Start the open data instance
38
+ console.log('OpenData instance started.');
39
+
40
+ // your code here
41
+
42
+ await openData.stop();
43
+ console.log('OpenData instance stopped.');
44
+ };
45
+
46
+ startOpenDataInstance().catch(console.error);
47
+ ```
48
+
49
+ ### BusinessRecord Usage
50
+
51
+ A `BusinessRecord` is the main entity you'll be working with. Here's how you manage business records.
52
+
53
+ #### Creating a New BusinessRecord
54
+
55
+ ```typescript
56
+ import { BusinessRecord } from '@fin.cx/opendata';
57
+
58
+ const createBusinessRecord = async (openData: OpenData) => {
59
+ const businessRecord = new openData.CBusinessRecord();
60
+ businessRecord.data.name = "Example Company";
61
+ businessRecord.data.address = "Example Street 1";
62
+ businessRecord.data.postalCode = "12345";
63
+ businessRecord.data.city = "Example City";
64
+ businessRecord.data.country = "Germany";
65
+ businessRecord.data.phone = "+49 123 456789";
66
+ businessRecord.data.email = "contact@example.com";
67
+ businessRecord.data.website = "https://example.com";
68
+ businessRecord.data.businessType = "GmbH";
69
+ businessRecord.data.registrationNumber = "HRB 123456";
70
+ businessRecord.data.registrationCourt = "Munich";
71
+ businessRecord.data.legalForm = "GmbH";
72
+ businessRecord.data.managingDirectors = ["John Doe", "Jane Smith"];
73
+ businessRecord.data.foundingDate = new Date().toISOString();
74
+ businessRecord.data.capital = "50,000 EUR";
75
+ businessRecord.data.purpose = "Tech Solutions";
76
+ businessRecord.data.lastUpdate = new Date().toISOString();
77
+
78
+ await businessRecord.save();
79
+ console.log('BusinessRecord saved:', businessRecord);
80
+ };
81
+ ```
82
+
83
+ #### Retrieving BusinessRecord
84
+
85
+ Retrieve a business record by querying the database.
86
+
87
+ ```typescript
88
+ import { BusinessRecord } from '@fin.cx/opendata';
89
+
90
+ const findBusinessRecord = async (openData: OpenData) => {
91
+ const businessRecords = await openData.db.collection<BusinessRecord>('businessrecords').find().toArray();
92
+ console.log('Retrieved Business Records:', businessRecords);
93
+ };
94
+ ```
95
+
96
+ ### Updating Business Data
97
+
98
+ The `GermanBusinessData` class handles the specifics of updating and maintaining the data.
99
+
100
+ #### Updating German Business Data
101
+
102
+ ```typescript
103
+ import { OpenData } from '@fin.cx/opendata';
104
+
105
+ const updateGermanBusinessData = async (openData: OpenData) => {
106
+ await openData.germanBusinesses.update();
107
+ console.log('German business data updated.');
108
+ };
109
+
110
+ startOpenDataInstance()
111
+ .then((openData) => {
112
+ // Use the instance
113
+ return updateGermanBusinessData(openData);
114
+ })
115
+ .catch(console.error);
116
+ ```
117
+
118
+ This function downloads the latest data from the German business data source, processes it, and updates the local database.
119
+
120
+ ### Detailed Class Structures and Methods
121
+
122
+ #### OpenData Class
123
+
124
+ The `OpenData` class is the main entry point.
125
+
126
+ ```typescript
127
+ import { OpenData } from '@fin.cx/opendata';
128
+
129
+ class OpenData {
130
+ db: plugins.smartdata.SmartdataDb;
131
+ germanBusinesses: GermanBusinessData;
132
+
133
+ private serviceQenv = new plugins.qenv.Qenv(paths.packageDir, paths.nogitDir);
134
+
135
+ public CBusinessRecord = plugins.smartdata.setDefaultManagerForDoc(this, BusinessRecord);
136
+
137
+ public async start() {
138
+ // Initialize smart data DB
139
+ this.db = new plugins.smartdata.SmartdataDb({
140
+ mongoDbUrl: await this.serviceQenv.getEnvVarOnDemand('MONGODB_URL'),
141
+ mongoDbName: await this.serviceQenv.getEnvVarOnDemand('MONGODB_NAME'),
142
+ mongoDbUser: await this.serviceQenv.getEnvVarOnDemand('MONGODB_USER'),
143
+ mongoDbPass: await this.serviceQenv.getEnvVarOnDemand('MONGODB_PASS'),
144
+ });
145
+
146
+ await this.db.init();
147
+ this.germanBusinesses = new GermanBusinessData(this);
148
+ await this.germanBusinesses.start();
149
+ }
150
+
151
+ public async stop() {
152
+ // Clean up resources if necessary
153
+ }
154
+ }
155
+ ```
156
+
157
+ #### GermanBusinessData Class
158
+
159
+ The `GermanBusinessData` class handles the specifics of German business data.
160
+
161
+ ```typescript
162
+ import { OpenData } from '@fin.cx/opendata';
163
+ import * as plugins from './plugins';
164
+ import * as paths from './paths';
165
+
166
+ class GermanBusinessData {
167
+ public openDataRef: OpenData;
168
+
169
+ constructor(openDataRef: OpenData) {
170
+ this.openDataRef = openDataRef;
171
+ }
172
+
173
+ public async start() {
174
+ await this.update();
175
+ }
176
+
177
+ public async stop() {
178
+ // Stop any ongoing processing
179
+ }
180
+
181
+ public async update() {
182
+ const dataUrl = 'https://daten.offeneregister.de/de_companies_ocdata.jsonl.bz2';
183
+ const dataExists = await plugins.smartfile.fs.isDirectory(paths.germanBusinessDataDir);
184
+
185
+ if (!dataExists) {
186
+ await plugins.smartfile.fs.ensureDir(paths.germanBusinessDataDir);
187
+ }
188
+
189
+ const smartarchive = await plugins.smartarchive.SmartArchive.fromArchiveUrl(dataUrl);
190
+ const jsonlDataStream = await smartarchive.exportToStreamOfStreamFiles();
191
+
192
+ let totalRecordsCounter = 0;
193
+ let nextRest: string = '';
194
+
195
+ jsonlDataStream.pipe(
196
+ new plugins.smartstream.SmartDuplex({
197
+ objectMode: true,
198
+ writeFunction: async (chunkArg: plugins.smartfile.StreamFile, streamToolsArg) => {
199
+ const readStream = await chunkArg.createReadStream();
200
+ readStream.pipe(
201
+ new plugins.smartstream.SmartDuplex({
202
+ objectMode: true,
203
+ writeFunction: async (chunkArg: Buffer, streamToolsArg) => {
204
+ const currentString = nextRest + chunkArg.toString();
205
+
206
+ const lines = currentString.split('\n');
207
+ nextRest = lines.pop();
208
+
209
+ for (const line of lines) {
210
+ let entry: any;
211
+ try {
212
+ entry = JSON.parse(line);
213
+ } catch (err) {
214
+ console.error('Error parsing line:', err);
215
+ continue;
216
+ }
217
+
218
+ totalRecordsCounter++;
219
+ if (totalRecordsCounter % 10000 === 0) {
220
+ console.log(`${totalRecordsCounter} total records.`);
221
+ }
222
+
223
+ const businessRecord = new this.openDataRef.CBusinessRecord();
224
+ businessRecord.data.name = entry?.name;
225
+
226
+ await businessRecord.save();
227
+ }
228
+ },
229
+ finalFunction: async (streamToolsArg) => {
230
+ if (nextRest) {
231
+ try {
232
+ JSON.parse(nextRest);
233
+ } catch (err) {
234
+ console.error('Error parsing final chunk:', err);
235
+ }
236
+ }
237
+ }
238
+ })
239
+ );
240
+ },
241
+ })
242
+ );
243
+ }
244
+ }
245
+ ```
246
+
247
+ ### Conclusion
248
+
249
+ This module is designed to make it easier to manage open business data, especially focusing on German business data. The examples above demonstrate the core functionalities, including starting and stopping the service, managing business records, and updating data.
250
+
251
+ As you work with `@fin.cx/opendata`, you’ll discover it offers a robust and flexible approach for working with open business data seamlessly. Happy coding!
252
+ ```
253
+ undefined
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export const commitinfo = {
5
+ name: '@fin.cx/opendata',
6
+ version: '1.1.0',
7
+ description: 'A TypeScript-based library for accessing and managing open business data, specifically for German companies.'
8
+ }
@@ -0,0 +1,32 @@
1
+ import * as plugins from './plugins.js';
2
+
3
+ @plugins.smartdata.Manager()
4
+ export class BusinessRecord extends plugins.smartdata.SmartDataDbDoc<BusinessRecord, BusinessRecord> {
5
+
6
+ @plugins.smartdata.unI()
7
+ id: string;
8
+
9
+ @plugins.smartdata.svDb()
10
+ data: {
11
+ name?: string,
12
+ address?: string,
13
+ postalCode?: string,
14
+ city?: string,
15
+ country?: string,
16
+ phone?: string,
17
+ fax?: string,
18
+ email?: string,
19
+ website?: string,
20
+ businessType?: string,
21
+ registrationNumber?: string,
22
+ registrationCourt?: string,
23
+ legalForm?: string,
24
+ managingDirectors?: string[],
25
+ boardOfDirectors?: string[],
26
+ supervisoryBoard?: string[],
27
+ foundingDate?: string,
28
+ capital?: string,
29
+ purpose?: string,
30
+ lastUpdate?: string
31
+ } = {};
32
+ }
@@ -0,0 +1,84 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as paths from './paths.js';
3
+ import type { OpenData } from './classes.main.opendata.js';
4
+
5
+ export class GermanBusinessData {
6
+ public openDataRef: OpenData;
7
+ constructor(openDataRefArg: OpenData) {
8
+ this.openDataRef = openDataRefArg;
9
+ }
10
+
11
+ public async start() {
12
+ await this.update();
13
+ }
14
+ public async stop() {}
15
+
16
+ public async update() {
17
+ const done = plugins.smartpromise.defer();
18
+ const promiseArray: Promise<any>[] = [];
19
+ const dataUrl = 'https://daten.offeneregister.de/de_companies_ocdata.jsonl.bz2';
20
+ const dataExists = await plugins.smartfile.fs.isDirectory(paths.germanBusinessDataDir);
21
+ if (!dataExists) {
22
+ await plugins.smartfile.fs.ensureDir(paths.germanBusinessDataDir);
23
+ } else {
24
+ }
25
+
26
+ const smartarchive = await plugins.smartarchive.SmartArchive.fromArchiveUrl(dataUrl);
27
+ promiseArray
28
+ .push
29
+ // smartarchive.exportToFs(paths.germanBusinessDataDir, 'de_companies_ocdata.jsonl')
30
+ ();
31
+ const jsonlDataStream = await smartarchive.exportToStreamOfStreamFiles();
32
+ let totalRecordsCounter = 0;
33
+ let nextRest: string = '';
34
+ jsonlDataStream.pipe(
35
+ new plugins.smartstream.SmartDuplex({
36
+ objectMode: true,
37
+ writeFunction: async (chunkArg: plugins.smartfile.StreamFile, streamToolsArg) => {
38
+ const readStream = await chunkArg.createReadStream();
39
+ readStream.pipe(
40
+ new plugins.smartstream.SmartDuplex({
41
+ objectMode: true,
42
+ writeFunction: async (chunkArg: Buffer, streamToolsArg) => {
43
+ const currentString = nextRest + chunkArg.toString();
44
+ const lines = currentString.split('\n');
45
+ nextRest = lines.pop();
46
+ console.log(`Got another ${lines.length} records.`);
47
+ for (const line of lines) {
48
+ let entry: any;
49
+ if (!line) continue;
50
+ try {
51
+ entry = JSON.parse(line);
52
+ } catch (err) {
53
+ console.log(line);
54
+ await plugins.smartdelay.delayFor(10000);
55
+ }
56
+ if (!entry) continue;
57
+ totalRecordsCounter++;
58
+ if (totalRecordsCounter % 10000 === 0) console.log(`${totalRecordsCounter} total records.`);
59
+ const businessRecord = new this.openDataRef.CBusinessRecord();
60
+ businessRecord.data.name = entry.name;
61
+ await businessRecord.save();
62
+ // console.log(`stored ${businessRecord.data.name}`);
63
+ }
64
+ },
65
+ finalFunction: async (streamToolsArg) => {
66
+ if (!nextRest) return;
67
+ JSON.parse(nextRest);
68
+ }
69
+ })
70
+ );
71
+ },
72
+ })
73
+ );
74
+ }
75
+
76
+ public async getBusinessRecordByName(nameArg: string) {
77
+ const businessRecord = await this.openDataRef.CBusinessRecord.getInstance({
78
+ data: {
79
+ name: { $regex: `${nameArg}`, $options: "i" } as any,
80
+ }
81
+ });
82
+ return businessRecord;
83
+ }
84
+ }
@@ -0,0 +1,25 @@
1
+ import { BusinessRecord } from './classes.businessrecord.js';
2
+ import { GermanBusinessData } from './classes.germanbusinessdata.js';
3
+ import * as paths from './paths.js';
4
+ import * as plugins from './plugins.js';
5
+
6
+ export class OpenData {
7
+ db: plugins.smartdata.SmartdataDb;
8
+ germanBusinesses: GermanBusinessData;
9
+ private serviceQenv = new plugins.qenv.Qenv(paths.packageDir, paths.nogitDir);
10
+
11
+ public CBusinessRecord = plugins.smartdata.setDefaultManagerForDoc(this, BusinessRecord);
12
+
13
+ public async start() {
14
+ this.db = new plugins.smartdata.SmartdataDb({
15
+ mongoDbUrl: await this.serviceQenv.getEnvVarOnDemand('MONGODB_URL'),
16
+ mongoDbName: await this.serviceQenv.getEnvVarOnDemand('MONGODB_NAME'),
17
+ mongoDbUser: await this.serviceQenv.getEnvVarOnDemand('MONGODB_USER'),
18
+ mongoDbPass: await this.serviceQenv.getEnvVarOnDemand('MONGODB_PASS'),
19
+ });
20
+ await this.db.init();
21
+ this.germanBusinesses = new GermanBusinessData(this);
22
+ await this.germanBusinesses.start();
23
+ }
24
+ public async stop() {}
25
+ }
package/ts/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './classes.main.opendata.js';
package/ts/paths.ts ADDED
@@ -0,0 +1,11 @@
1
+ import * as plugins from './plugins.js';
2
+
3
+ export const packageDir = plugins.path.join(
4
+ plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url),
5
+ '../'
6
+ );
7
+
8
+ export const nogitDir = plugins.path.join(packageDir, './.nogit/');
9
+ plugins.smartfile.fs.ensureDirSync(nogitDir);
10
+
11
+ export const germanBusinessDataDir = plugins.path.join(nogitDir, 'germanbusinessdata');
package/ts/plugins.ts ADDED
@@ -0,0 +1,29 @@
1
+ // node native scope
2
+ import * as path from 'path';
3
+
4
+ export {
5
+ path,
6
+ }
7
+
8
+ // @push.rocks scope
9
+ import * as qenv from '@push.rocks/qenv';
10
+ import * as smartarchive from '@push.rocks/smartarchive';
11
+ import * as smartdata from '@push.rocks/smartdata';
12
+ import * as smartdelay from '@push.rocks/smartdelay';
13
+ import * as smartfile from '@push.rocks/smartfile';
14
+ import * as smartpath from '@push.rocks/smartpath';
15
+ import * as smartpromise from '@push.rocks/smartpromise';
16
+ import * as smartrequest from '@push.rocks/smartrequest';
17
+ import * as smartstream from '@push.rocks/smartstream';
18
+
19
+ export {
20
+ qenv,
21
+ smartarchive,
22
+ smartdata,
23
+ smartdelay,
24
+ smartfile,
25
+ smartpath,
26
+ smartpromise,
27
+ smartrequest,
28
+ smartstream,
29
+ }