@rosoftlab/rdict 1.0.5-alpha-3 → 1.0.5-alpha-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,10 @@
1
- import * as i1 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
1
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Inject, Injectable, forwardRef, ViewChild, Input, Component } from '@angular/core';
5
- import * as i2 from '@angular/router';
6
- import { RouterModule } from '@angular/router';
7
- import * as i3 from '@ngx-translate/core';
8
- import { TranslateModule } from '@ngx-translate/core';
9
- import { ButtonsModule } from '@progress/kendo-angular-buttons';
10
- import { KENDO_SVGICON } from '@progress/kendo-angular-icons';
11
- import * as i6 from '@progress/kendo-angular-layout';
12
- import { LayoutModule } from '@progress/kendo-angular-layout';
13
- import * as i5 from '@progress/kendo-angular-toolbar';
14
- import { ToolBarToolComponent, ToolBarModule, KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';
15
- import * as allIcons from '@progress/kendo-svg-icons';
16
- import { menuIcon, userIcon, logoutIcon } from '@progress/kendo-svg-icons';
17
- import * as i1$1 from '@rosoftlab/core';
2
+ import { InjectionToken, Inject, Injectable } from '@angular/core';
18
3
  import { Subject, fromEvent, Observable, defer, mergeMap, filter, race, first, map, timeout, from, tap, catchError, throwError } from 'rxjs';
19
4
  import { v4 } from 'uuid';
20
5
  import { io } from 'socket.io-client';
21
6
  import * as msgpack from '@msgpack/msgpack';
22
- import * as i1$2 from '@angular/common/http';
7
+ import * as i1 from '@angular/common/http';
23
8
  import { HttpHeaders, HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http';
24
9
  import { filter as filter$1, map as map$1 } from 'rxjs/operators';
25
10
 
@@ -618,145 +603,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
618
603
  }]
619
604
  }], ctorParameters: () => [{ type: SocketService }] });
620
605
 
621
- class KendoToolbarSpanComponent extends ToolBarToolComponent {
622
- constructor() {
623
- super();
624
- this.tabindex = -1;
625
- this.text = '';
626
- this.cssClass = '';
627
- }
628
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: KendoToolbarSpanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
629
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: KendoToolbarSpanComponent, isStandalone: true, selector: "kendo-toolbar-span", inputs: { text: "text", cssClass: "cssClass" }, providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => KendoToolbarSpanComponent) }], viewQueries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbarTemplate"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
630
- <ng-template #toolbarTemplate>
631
- <span [ngClass]="cssClass" [textContent]="text"></span>
632
- </ng-template>
633
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
634
- }
635
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: KendoToolbarSpanComponent, decorators: [{
636
- type: Component,
637
- args: [{
638
- providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => KendoToolbarSpanComponent) }],
639
- selector: 'kendo-toolbar-span',
640
- standalone: true,
641
- imports: [CommonModule],
642
- template: `
643
- <ng-template #toolbarTemplate>
644
- <span [ngClass]="cssClass" [textContent]="text"></span>
645
- </ng-template>
646
- `
647
- }]
648
- }], ctorParameters: () => [], propDecorators: { text: [{
649
- type: Input
650
- }], cssClass: [{
651
- type: Input
652
- }], toolbarTemplate: [{
653
- type: ViewChild,
654
- args: ['toolbarTemplate', { static: true }]
655
- }] } });
656
-
657
- class FullComponent {
658
- constructor(userService, router, translate, rdict, auth_service) {
659
- this.userService = userService;
660
- this.router = router;
661
- this.translate = translate;
662
- this.rdict = rdict;
663
- this.auth_service = auth_service;
664
- this.selected = 'Inbox';
665
- this.menuSvg = menuIcon;
666
- this.userSvg = userIcon;
667
- this.expandedIndices = [2];
668
- this.hasItems = false;
669
- this.items = [];
670
- this.icons = allIcons;
671
- //private rdict: ReactiveDictionary | undefined;
672
- this.apptitle = 'Test';
673
- this.user_menu = [
674
- {
675
- text: 'Logout',
676
- svgIcon: logoutIcon,
677
- click: () => {
678
- this.auth_service.logout();
679
- }
680
- }
681
- ];
682
- this.isItemExpanded = (item) => {
683
- return this.expandedIndices.indexOf(item.id) >= 0;
684
- };
685
- this.getMenu();
686
- }
687
- async ngOnInit() {
688
- this.apptitle = await this.rdict.asyncGet('appname');
689
- }
690
- getMenu() {
691
- this.userService.getMenus().subscribe({
692
- next: (value) => {
693
- this.items = this.transformToDrawerItems(value.getModels());
694
- },
695
- error: (err) => console.error('Observable emitted an error: ' + err),
696
- complete: () => console.log('Observable emitted the complete notification')
697
- });
698
- this.menu$ = this.userService.getMenus().pipe(map((f) => {
699
- const data = f.getModels();
700
- this.hasItems = data.length > 0;
701
- return data;
702
- }));
703
- }
704
- // public items: Array<DrawerItem> //= items;
705
- onSelect(ev) {
706
- this.selected = ev.item.text;
707
- const current = ev.item.id;
708
- if (this.expandedIndices.indexOf(current) >= 0) {
709
- this.expandedIndices = this.expandedIndices.filter((id) => id !== current);
710
- }
711
- else {
712
- this.expandedIndices.push(current);
713
- }
714
- if (ev.item.path && ev.item.path !== '') {
715
- this.router.navigate([ev.item.path]);
716
- // this.router.navigateByUrl(ev.item.path);
717
- // this.router.navigate(['/import_layout']);
718
- }
719
- }
720
- transformToDrawerItems(data, parentId) {
721
- let drawerItems = [];
722
- data.forEach((item) => {
723
- const drawerItem = {
724
- id: item.id,
725
- text: this.translate.instant(item.translationKey),
726
- // icon: item.icon,
727
- svgIcon: this.icons[item.icon],
728
- selected: false, // Set this based on your application's state or logic
729
- parentId: parentId,
730
- path: item.sublinks && item.sublinks.length > 0 ? '' : item.link
731
- };
732
- drawerItems.push(drawerItem);
733
- // Recursively process children and flatten them
734
- if (item.sublinks && item.sublinks.length > 0) {
735
- const childItems = this.transformToDrawerItems(item.sublinks, item.id);
736
- drawerItems = drawerItems.concat(childItems); // Add children to the drawerItems array
737
- }
738
- });
739
- return drawerItems;
740
- }
741
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FullComponent, deps: [{ token: i1$1.UserService }, { token: i2.Router }, { token: i3.TranslateService }, { token: ReactiveDictionary }, { token: i1$1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
742
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: FullComponent, isStandalone: true, selector: "rdict-full", ngImport: i0, template: "<!-- <div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div> -->\r\n<kendo-toolbar>\r\n <kendo-toolbar-span text=\"{{apptitle}}\" cssClass=\"app-title\"></kendo-toolbar-span>\r\n <kendo-toolbar-button [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></kendo-toolbar-button>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-dropdownbutton text=\"{{auth_service?.name}}\" [svgIcon]=\"userSvg\" [data]=\"user_menu\"></kendo-toolbar-dropdownbutton>\r\n</kendo-toolbar>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>", styles: ["html,body,rdict-full{padding:0;height:100%}rdict-full{display:flex;flex-direction:column}kendo-drawer-container{flex:1 1 auto;overflow-y:auto}.k-icon{font-size:20px}.custom-toolbar{width:100%;background-color:#f6f6f6;line-height:10px;border-bottom:inset;border-bottom-width:1px;color:#656565}.custom-toolbar button{margin:3px 0 3px 8px}.app-title{margin-left:20px;font-weight:700;font-size:17px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: ButtonsModule }, { kind: "ngmodule", type: ToolBarModule }, { kind: "component", type: i5.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: i5.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "component", type: i5.ToolBarDropDownButtonComponent, selector: "kendo-toolbar-dropdownbutton", inputs: ["arrowIcon", "title", "showText", "showIcon", "text", "icon", "svgIcon", "iconClass", "imageUrl", "popupSettings", "look", "primary", "fillMode", "themeColor", "buttonClass", "textField", "disabled", "data"], outputs: ["itemClick", "open", "close"], exportAs: ["kendoToolBarDropDownButton"] }, { kind: "component", type: i5.ToolBarSpacerComponent, selector: "kendo-toolbar-spacer", exportAs: ["kendoToolBarSpacer"] }, { kind: "ngmodule", type: LayoutModule }, { kind: "component", type: i6.DrawerComponent, selector: "kendo-drawer", inputs: ["mode", "position", "mini", "expanded", "width", "miniWidth", "autoCollapse", "items", "isItemExpanded", "animation"], outputs: ["expand", "collapse", "select", "expandedChange"], exportAs: ["kendoDrawer"] }, { kind: "component", type: i6.DrawerContainerComponent, selector: "kendo-drawer-container" }, { kind: "component", type: i6.DrawerContentComponent, selector: "kendo-drawer-content" }, { kind: "component", type: KendoToolbarSpanComponent, selector: "kendo-toolbar-span", inputs: ["text", "cssClass"] }] }); }
743
- }
744
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FullComponent, decorators: [{
745
- type: Component,
746
- args: [{ selector: 'rdict-full', imports: [
747
- CommonModule,
748
- RouterModule,
749
- TranslateModule,
750
- CommonModule,
751
- ButtonsModule,
752
- ToolBarModule,
753
- LayoutModule,
754
- KENDO_SVGICON,
755
- KENDO_TOOLBAR,
756
- KendoToolbarSpanComponent
757
- ], template: "<!-- <div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div> -->\r\n<kendo-toolbar>\r\n <kendo-toolbar-span text=\"{{apptitle}}\" cssClass=\"app-title\"></kendo-toolbar-span>\r\n <kendo-toolbar-button [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></kendo-toolbar-button>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-dropdownbutton text=\"{{auth_service?.name}}\" [svgIcon]=\"userSvg\" [data]=\"user_menu\"></kendo-toolbar-dropdownbutton>\r\n</kendo-toolbar>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>", styles: ["html,body,rdict-full{padding:0;height:100%}rdict-full{display:flex;flex-direction:column}kendo-drawer-container{flex:1 1 auto;overflow-y:auto}.k-icon{font-size:20px}.custom-toolbar{width:100%;background-color:#f6f6f6;line-height:10px;border-bottom:inset;border-bottom-width:1px;color:#656565}.custom-toolbar button{margin:3px 0 3px 8px}.app-title{margin-left:20px;font-weight:700;font-size:17px}\n"] }]
758
- }], ctorParameters: () => [{ type: i1$1.UserService }, { type: i2.Router }, { type: i3.TranslateService }, { type: ReactiveDictionary }, { type: i1$1.AuthService }] });
759
-
760
606
  class CustomParser {
761
607
  encode(packet) {
762
608
  const transformedPacket = this.transformDatesForEncoding(packet);
@@ -931,13 +777,13 @@ class FileService {
931
777
  }
932
778
  }));
933
779
  }
934
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FileService, deps: [{ token: i1$2.HttpClient }, { token: SOCKET_URL }], target: i0.ɵɵFactoryTarget.Injectable }); }
780
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FileService, deps: [{ token: i1.HttpClient }, { token: SOCKET_URL }], target: i0.ɵɵFactoryTarget.Injectable }); }
935
781
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FileService, providedIn: 'root' }); }
936
782
  }
937
783
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: FileService, decorators: [{
938
784
  type: Injectable,
939
785
  args: [{ providedIn: 'root' }]
940
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: undefined, decorators: [{
786
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
941
787
  type: Inject,
942
788
  args: [SOCKET_URL]
943
789
  }] }] });
@@ -950,5 +796,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
950
796
  * Generated bundle index. Do not edit.
951
797
  */
952
798
 
953
- export { CustomParser, FileService, FullComponent, ReactiveDictionary, SOCKET_URL, SocketService };
799
+ export { CustomParser, FileService, ReactiveDictionary, SOCKET_URL, SocketService };
954
800
  //# sourceMappingURL=rosoftlab-rdict.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/socket-config.token.ts","../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/kendo-toolbar-span.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.html","../../../../projects/rosoftlab/rdict/src/lib/services/custom-msgpak-parser.ts","../../../../projects/rosoftlab/rdict/src/lib/services/file.service.ts","../../../../projects/rosoftlab/rdict/src/public-api.ts","../../../../projects/rosoftlab/rdict/src/rosoftlab-rdict.ts"],"sourcesContent":["// projects/my-library/src/lib/socket-config.token.ts\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const SOCKET_URL = new InjectionToken<string>('SocketUrl');\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { FilterRequest } from '@rosoftlab/core';\r\nimport { defer, filter, first, fromEvent, map, mergeMap, Observable, race, Subject, timeout } from 'rxjs';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport { SOCKET_URL } from '../socket-config.token';\r\ntype Kwargs = Record<string, any>;\r\ninterface ExecPayload {\r\n did: string;\r\n function_name: string;\r\n args?: any[]; // optional; send only if non-empty\r\n kwargs?: Kwargs; // optional; send only if non-empty\r\n}\r\ninterface ExecAck {\r\n ok: boolean;\r\n status?: 'started';\r\n job_id?: string;\r\n error?: any;\r\n}\r\n\r\ninterface FunctionResult {\r\n ok: true;\r\n job_id: string;\r\n did: string;\r\n function_name: string;\r\n result: any;\r\n}\r\n\r\ninterface FunctionError {\r\n ok: false;\r\n job_id: string;\r\n did: string;\r\n function_name: string;\r\n error: any;\r\n traceback?: string;\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SocketService {\r\n private socket: Socket;\r\n private socketUrl: string;\r\n private disconnect$ = new Subject<void>();\r\n\r\n // shared event streams\r\n private result$!: Observable<FunctionResult>;\r\n private error$!: Observable<FunctionError>;\r\n private disconnected$!: Observable<string | undefined>;\r\n constructor(@Inject(SOCKET_URL) socketUrl: string) {\r\n this.socketUrl = socketUrl;\r\n // Replace with your actual server URL\r\n // this.socket.on(\"connect\", () => {\r\n // const engine = this.socket.io.engine;\r\n // (engine.transport.name); // in most cases, prints \"polling\"\r\n\r\n // engine.once(\"upgrade\", () => {\r\n // // called when the transport is upgraded (i.e. from HTTP long-polling to WebSocket)\r\n // (engine.transport.name); // in most cases, prints \"websocket\"\r\n // });\r\n\r\n // });\r\n }\r\n initSocket(authToken: string) {\r\n if (this.socket == null && authToken !== null) {\r\n this.socket = io(this.socketUrl, {\r\n reconnectionDelayMax: 10000,\r\n transports: ['websocket'],\r\n withCredentials: true,\r\n //ackTimeout: 60000,\r\n timeout: 60000,\r\n //retries: 50,\r\n // parser: msgpackParser,\r\n auth: {\r\n token: authToken // Include the authentication token\r\n }\r\n });\r\n this.result$ = fromEvent<FunctionResult>(this.socket, 'function_result');\r\n this.error$ = fromEvent<FunctionError>(this.socket, 'function_error');\r\n this.disconnected$ = fromEvent<string | undefined>(this.socket, 'disconnect');\r\n\r\n // When socket disconnects, push to our teardown subject\r\n this.disconnected$.subscribe(() => this.disconnect$.next());\r\n }\r\n }\r\n getInitialData(): Promise<Record<string, any>> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.on('init', (data: any) => {\r\n if (data) {\r\n resolve(data['dict_data']);\r\n } else {\r\n reject('No data received from init event');\r\n }\r\n });\r\n });\r\n }\r\n getSetEvent(rdict: any) {\r\n this.socket.on('set', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n if (data.key === 'transactions') {\r\n for (const [key, record] of Object.entries(data.value)) {\r\n rdict.set_new_dict(key, record);\r\n }\r\n } else {\r\n rdict.asyncSet(data.key, data.value, false);\r\n }\r\n }\r\n });\r\n }\r\n getDeleteEvent(rdict: any) {\r\n this.socket.on('delete', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n rdict.asyncDelete(data.key, false);\r\n }\r\n });\r\n }\r\n // Emit the 'lazy_load' event with callback to get the response\r\n requestLazyLoad(did: string, key: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('lazy_load', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n notify_new_key(did: string, new_key: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('notify_new_key', { did, new_key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n commit_transaction(did: string, values: any): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('commit_transaction', { did: did, value: values }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Observable wrapper for requestFilteredData\r\n // This allows you to use it in an RxJS pipeline\r\n requestFilteredData(guid: string, key: string, request: FilterRequest): Observable<any> {\r\n return new Observable<any>((observer) => {\r\n this.socket.emit('get_filtered_views', { did: guid, key, request }, (response: any) => {\r\n if (response && response.error) {\r\n observer.error(response.error);\r\n } else {\r\n const transformedResponse = this.convertDates(response);\r\n observer.next(transformedResponse);\r\n observer.complete();\r\n }\r\n });\r\n\r\n // teardown logic if subscriber unsubscribes before callback fires\r\n return () => {\r\n // no direct way to cancel a single emit/callback in socket.io,\r\n // but you could optionally remove a listener here if you used on(...)\r\n };\r\n });\r\n }\r\n convertDates(obj: any): any {\r\n if (obj === null || obj === undefined) return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => this.convertDates(item));\r\n }\r\n\r\n if (typeof obj === 'object') {\r\n const newObj: any = {};\r\n for (const key of Object.keys(obj)) {\r\n const value = obj[key];\r\n\r\n // detect ISO date strings\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}[ T]\\d/.test(value)) {\r\n newObj[key] = new Date(value.replace(' ', 'T')); // replace space with T for safety\r\n } else {\r\n newObj[key] = this.convertDates(value); // recurse\r\n }\r\n }\r\n return newObj;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitSet(did: string, key: string, value: any): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('set', { did, key, value }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitDelete(did: string, key: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('delete', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n transformDatesForEncoding(obj: any): any {\r\n if (obj instanceof Date) {\r\n return { __date__: obj.toISOString() };\r\n } else if (Array.isArray(obj)) {\r\n return obj.map(this.transformDatesForEncoding);\r\n } else if (obj !== null && typeof obj === 'object') {\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForEncoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n transformDatesForDecoding(obj: any): any {\r\n if (typeof obj === 'object' && obj !== null) {\r\n if ('__date__' in obj) {\r\n return new Date(obj.__date__);\r\n }\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForDecoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n //#region executeFunction\r\n\r\n executeFunction_old(did: string, functionName: string, args: any[] = [], kwargs: Kwargs = {}): Observable<any> {\r\n const payload: ExecPayload = {\r\n did,\r\n function_name: functionName,\r\n ...(args && args.length ? { args } : {}),\r\n ...(kwargs && Object.keys(kwargs).length ? { kwargs } : {})\r\n };\r\n return new Observable<any>((observer) => {\r\n this.socket.emit('execute_function', payload, (response: any) => {\r\n if (response && response.error) {\r\n observer.error(response.error);\r\n } else {\r\n observer.next(response);\r\n observer.complete();\r\n }\r\n });\r\n\r\n // teardown logic if subscriber unsubscribes before callback fires\r\n return () => {\r\n // no direct way to cancel a single emit/callback in socket.io,\r\n // but you could optionally remove a listener here if you used on(...)\r\n };\r\n });\r\n }\r\n\r\n executeFunction(\r\n did: string,\r\n functionName: string,\r\n args: any[] = [],\r\n kwargs: Record<string, any> = {},\r\n waitMs = 120_000,\r\n awaitResult: boolean = true\r\n ): Observable<any> {\r\n const payload = {\r\n did,\r\n function_name: functionName,\r\n ...(args?.length ? { args } : {}),\r\n ...(kwargs && Object.keys(kwargs).length ? { kwargs } : {})\r\n };\r\n\r\n const ack$ = new Observable<{ ok: boolean; job_id?: string; error?: any }>((observer) => {\r\n this.socket.emit('execute_function', payload, (ack: any) => {\r\n observer.next(ack);\r\n observer.complete();\r\n });\r\n return () => {};\r\n });\r\n\r\n if (!awaitResult) {\r\n // Return immediately with the server ACK\r\n return ack$;\r\n }\r\n\r\n // Wait for function_result / function_error matching the job_id\r\n return defer(() => ack$).pipe(\r\n mergeMap((ack) => {\r\n if (!ack?.ok || !ack.job_id) {\r\n const msg = ack?.error ?? 'Bad ACK or missing job_id';\r\n throw new Error(typeof msg === 'string' ? msg : JSON.stringify(msg));\r\n }\r\n const jobId = ack.job_id!;\r\n const jobResult$ = this.result$.pipe(filter((e: any) => e.job_id === jobId));\r\n const jobError$ = this.error$.pipe(filter((e: any) => e.job_id === jobId));\r\n\r\n return race(jobResult$, jobError$).pipe(\r\n first(),\r\n map((evt: any) => {\r\n if (evt?.ok === false) {\r\n const msg = evt.error ?? `Server error for ${functionName} (job ${jobId})`;\r\n throw new Error(typeof msg === 'string' ? msg : JSON.stringify(msg));\r\n }\r\n return evt.result;\r\n })\r\n );\r\n }),\r\n timeout(waitMs)\r\n // takeUntil(this.disconnect$)\r\n );\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FilterRequest } from '@rosoftlab/core';\r\nimport { catchError, from, mergeMap, Observable, Subject, tap, throwError } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SocketService } from './services/socket.service';\r\ntype Kwargs = Record<string, any>;\r\n// import { mergeMap } from 'rxjs/operators';\r\n@Injectable({\r\n providedIn: 'root' // This makes the service a singleton and available throughout the app\r\n})\r\nexport class ReactiveDictionary extends Map<string, any> {\r\n private static instance: Map<string, ReactiveDictionary> = new Map<string, ReactiveDictionary>();\r\n private _socketService: SocketService;\r\n private changeEvent$: Subject<any> = new Subject<any>();\r\n private deleteEvent$: Subject<any> = new Subject<any>();\r\n\r\n private isInitialized: boolean = false;\r\n private _authToken: string = null;\r\n constructor(socketService: SocketService) {\r\n super();\r\n this._socketService = socketService;\r\n }\r\n public async initialize(authToken: string) {\r\n this._authToken = authToken;\r\n this._socketService.initSocket(authToken);\r\n this._socketService.getSetEvent(this);\r\n this._socketService.getDeleteEvent(this);\r\n await this.asyncInit();\r\n }\r\n public set_new_dict(key: string, data: Record<string, any>) {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n for (const [key, value] of Object.entries(data)) {\r\n dict.set(key, value);\r\n }\r\n this.asyncSet(key, dict, false);\r\n return dict;\r\n }\r\n // Asynchronous method to get a value by key\r\n async asyncGet(key: string): Promise<any> {\r\n // console.log('Get key: ', key);\r\n const keys = key.split('.');\r\n if (keys.length === 1) {\r\n if (this.has(key)) {\r\n const value = this.get(key);\r\n if (value instanceof ReactiveDictionary) {\r\n return value;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const dict_type = value['__type'];\r\n // console.log('value type : ', dict_type);\r\n if (dict_type === 'dict' || dict_type === 'lazy') {\r\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\r\n // console.log(lazyLoadData)\r\n if (lazyLoadData) {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n await dict.asyncInit(lazyLoadData.data);\r\n this.set(key, dict);\r\n return dict;\r\n }\r\n }\r\n }\r\n return value;\r\n } else {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n dict.set('__guid', uuidv4());\r\n dict.set('__type', 'dict');\r\n this.set(key, dict);\r\n await this._socketService.emitSet(this.get('__guid'), key, this.transform_for_serialization(dict));\r\n return dict;\r\n }\r\n } else {\r\n const obj = (await this.asyncGet(keys[0])) as ReactiveDictionary;\r\n if (obj) return await obj.asyncGet(keys.slice(1).join('.'));\r\n else return null;\r\n }\r\n }\r\n private transform_for_serialization(value: any) {\r\n // Transform a value to a format that can be serialized.\r\n const dict_type = value['__type'];\r\n if (dict_type === 'lazy') return { __type: 'lazy' };\r\n else if (value instanceof ReactiveDictionary) return { __type: 'dict', __guid: value.get('__guid') };\r\n else return value;\r\n }\r\n // Asynchronous method to set a value by key\r\n async asyncSet(key: string, value: any, emmit_event: boolean = true): Promise<void> {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitSet(this.get('__guid'), key, value);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.set(key, value);\r\n this.changeEvent$.next({ key, value });\r\n }\r\n async asyncDelete(key: string, emmit_event: boolean = true): Promise<void> {\r\n if (this.has(key)) {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitDelete(this.get('__guid'), key);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.delete(key);\r\n this.deleteEvent$.next({ key });\r\n }\r\n }\r\n delete$(key: string, emmit_event: boolean = true): Observable<any> {\r\n return from(this.asyncDelete(key, emmit_event));\r\n }\r\n // Asynchronous method to initialize with a set of key-value pairs\r\n async asyncInit(initialData?: Record<string, any>) {\r\n if (!this.isInitialized) {\r\n try {\r\n // If initial data is not provided, fetch it\r\n const data = initialData || (await this._socketService.getInitialData());\r\n // this.known_dicts.set(data.__guid,data);\r\n // Set the initial properties on the proxy\r\n for (const [key, value] of Object.entries(data)) {\r\n this.set(key, value);\r\n }\r\n this.isInitialized = true;\r\n } catch (error) {\r\n console.error('Error during initialization:', error);\r\n }\r\n }\r\n }\r\n\r\n async lazyLoadSync(guid: string, prop: string | symbol): Promise<any> {\r\n try {\r\n const data = await this._socketService.requestLazyLoad(guid, String(prop));\r\n return data;\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n throw error;\r\n }\r\n }\r\n public getPlainObject(): Record<string, any> {\r\n const plainObject: Record<string, any> = {};\r\n this.forEach((value, key) => {\r\n if (value instanceof ReactiveDictionary) {\r\n plainObject[key] = value.getPlainObject();\r\n } else if (typeof value === 'string') {\r\n const formattedValue = value\r\n .replace(/'/g, '\"') // Convert single quotes to double quotes\r\n .replace(/\\bNone\\b/g, 'null') // Replace None with null\r\n .replace(/\\bFalse\\b/g, 'false') // Replace False with false\r\n .replace(/\\bTrue\\b/g, 'true'); // Replace True with true\r\n try {\r\n const parsedValue = JSON.parse(formattedValue, this.jsonDateReviver);\r\n plainObject[key] = parsedValue;\r\n } catch {\r\n plainObject[key] = value; // Keep as string if not valid JSON\r\n }\r\n } else {\r\n plainObject[key] = value;\r\n }\r\n });\r\n return plainObject; // Return the plain object\r\n }\r\n private jsonDateReviver(key: string, value: any): any {\r\n // Check if the value is a valid ISO date string\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value)) {\r\n return new Date(value); // Convert to JavaScript Date object\r\n }\r\n return value;\r\n }\r\n get$(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getArray$(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getArray(key, data)).pipe(\r\n mergeMap((dictionaryMap) => {\r\n if (!(dictionaryMap instanceof Map)) {\r\n throw new Error('Expected a Map but received something else');\r\n }\r\n\r\n const values = Array.from(dictionaryMap.values());\r\n\r\n const isValid = values.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isValid) {\r\n throw new Error('Expected a Map of ReactiveDictionary instances but found invalid entries');\r\n }\r\n\r\n return from(this.processTableData(values));\r\n })\r\n );\r\n }\r\n\r\n async getArray(key: string, data: any = null): Promise<Map<string, ReactiveDictionary>> {\r\n if (!data) data = await this.asyncGet(key);\r\n if (!data) return new Map();\r\n\r\n // console.log('getArray', data);\r\n\r\n const entries = await Promise.all(\r\n Array.from(data.entries()).map(async ([k, v]) => {\r\n const entry = (await data.asyncGet(k)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', k);\r\n return [k, entry] as [string, ReactiveDictionary];\r\n }\r\n return null;\r\n })\r\n );\r\n\r\n // Filter out any nulls (non-ReactiveDictionary entries)\r\n const validEntries = entries.filter((e): e is [string, ReactiveDictionary] => e !== null);\r\n\r\n return new Map(validEntries);\r\n }\r\n\r\n async getArrayWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n\r\n async processTableData(data: any): Promise<any[]> {\r\n if (data instanceof ReactiveDictionary) {\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async ([key]) => {\r\n const entry = (await data.asyncGet(key)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key);\r\n }\r\n return entry;\r\n })\r\n )) || [];\r\n\r\n return result\r\n .filter((entry: any) => entry instanceof ReactiveDictionary)\r\n .map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else if (Array.isArray(data)) {\r\n // Directly process array of ReactiveDictionary instances\r\n return data.map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else {\r\n console.warn('processTableData received unexpected data:', data);\r\n return [];\r\n }\r\n }\r\n\r\n onChange$(): Observable<any> {\r\n return this.changeEvent$.asObservable();\r\n }\r\n onDelete$(): Observable<any> {\r\n return this.deleteEvent$.asObservable();\r\n }\r\n private getNextOid(): string | null {\r\n const numericKeys = Array.from(this.keys())\r\n .filter((k) => /^\\d+$/.test(k)) // keep only purely numeric keys\r\n .map((k) => parseInt(k, 10));\r\n\r\n if (numericKeys.length === 0) return '0';\r\n\r\n const maxKey = Math.max(...numericKeys);\r\n return (maxKey + 1).toString();\r\n }\r\n\r\n async update(record: Record<string, any>, key: string = null): Promise<void> {\r\n if (!key) key = '-1'; //new rdict //this.getNextOid();\r\n const value = { [key]: record };\r\n const result = await this._socketService.commit_transaction(this.get('__guid'), value);\r\n return result; \r\n }\r\n async update_multiple(record: Record<string, any>): Promise<void> {\r\n const result = await this._socketService.commit_transaction(this.get('__guid'), record);\r\n return result; \r\n }\r\n getFilteredView(key: string, request: FilterRequest): Observable<any> {\r\n const guid = this.get('__guid'); // however you’re retrieving it\r\n\r\n return this._socketService.requestFilteredData(guid, key, request).pipe(\r\n tap((data) => {\r\n // you can still inspect/log the data here if you like\r\n // console.log('received filtered view:', data);\r\n }),\r\n catchError((err) => {\r\n console.error('Error fetching filtered view:', err);\r\n // re-throw so subscribers can handle it\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n executeFunction(\r\n functionName: string,\r\n args: any[] = [],\r\n kwargs: Kwargs = {},\r\n waitMs = 120_000,\r\n awaitResult: boolean = true\r\n ): Observable<any> {\r\n const guid = this.get('__guid'); // however you’re retrieving it\r\n\r\n return this._socketService.executeFunction(guid, functionName, args, kwargs, waitMs, awaitResult).pipe(\r\n tap((data) => {\r\n // you can still inspect/log the data here if you like\r\n console.log('received execute function:', data);\r\n }),\r\n catchError((err) => {\r\n console.error('Error execute function:', err);\r\n // re-throw so subscribers can handle it\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, TemplateRef, ViewChild, forwardRef } from '@angular/core';\nimport { ToolBarToolComponent } from '@progress/kendo-angular-toolbar';\n\n@Component({\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => KendoToolbarSpanComponent) }],\n selector: 'kendo-toolbar-span',\n standalone: true,\n imports: [CommonModule],\n template: `\n <ng-template #toolbarTemplate>\n <span [ngClass]=\"cssClass\" [textContent]=\"text\"></span>\n </ng-template>\n `\n})\nexport class KendoToolbarSpanComponent extends ToolBarToolComponent {\n public tabindex = -1;\n @Input() text = '';\n @Input() cssClass: string | string[] | { [klass: string]: boolean } = '';\n @ViewChild('toolbarTemplate', { static: true }) public declare toolbarTemplate: TemplateRef<any>;\n constructor() {\n super();\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_SVGICON } from '@progress/kendo-angular-icons';\r\nimport { DrawerItemExpandedFn, DrawerSelectEvent, LayoutModule } from '@progress/kendo-angular-layout';\r\nimport { KENDO_TOOLBAR, ToolBarModule } from '@progress/kendo-angular-toolbar';\r\nimport * as allIcons from '@progress/kendo-svg-icons';\r\nimport { logoutIcon, menuIcon, SVGIcon, userIcon } from '@progress/kendo-svg-icons';\r\nimport { AuthService, Menu, UserService } from '@rosoftlab/core';\r\nimport { map, Observable } from 'rxjs';\r\nimport { ReactiveDictionary } from '../../../reactive-dictionary';\r\nimport { KendoToolbarSpanComponent } from './kendo-toolbar-span';\r\n\r\n@Component({\r\n selector: 'rdict-full',\r\n templateUrl: './full.component.html',\r\n styleUrls: ['./full.component.scss'],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n TranslateModule,\r\n CommonModule,\r\n ButtonsModule,\r\n ToolBarModule,\r\n LayoutModule,\r\n KENDO_SVGICON,\r\n KENDO_TOOLBAR,\r\n KendoToolbarSpanComponent\r\n ]\r\n})\r\nexport class FullComponent implements OnInit {\r\n public selected = 'Inbox';\r\n public menuSvg: SVGIcon = menuIcon;\r\n public userSvg: SVGIcon = userIcon;\r\n\r\n public expandedIndices = [2];\r\n menu$!: Observable<Menu[]>;\r\n hasItems: boolean = false;\r\n public items: Array<{ [Key: string]: unknown }> = [];\r\n public icons = allIcons;\r\n //private rdict: ReactiveDictionary | undefined;\r\n apptitle: string = 'Test';\r\n public user_menu = [\r\n {\r\n text: 'Logout',\r\n svgIcon: logoutIcon,\r\n click: (): void => {\r\n this.auth_service.logout();\r\n }\r\n }\r\n ];\r\n constructor(\r\n private userService: UserService,\r\n private router: Router,\r\n public translate: TranslateService,\r\n private rdict: ReactiveDictionary,\r\n public auth_service: AuthService\r\n ) {\r\n this.getMenu();\r\n }\r\n\r\n async ngOnInit() {\r\n this.apptitle = await this.rdict.asyncGet('appname');\r\n }\r\n public isItemExpanded: DrawerItemExpandedFn = (item): boolean => {\r\n return this.expandedIndices.indexOf(item.id) >= 0;\r\n };\r\n getMenu() {\r\n this.userService.getMenus().subscribe({\r\n next: (value) => {\r\n this.items = this.transformToDrawerItems(value.getModels());\r\n },\r\n error: (err) => console.error('Observable emitted an error: ' + err),\r\n complete: () => console.log('Observable emitted the complete notification')\r\n });\r\n this.menu$ = this.userService.getMenus().pipe(\r\n map((f) => {\r\n const data = f.getModels();\r\n this.hasItems = data.length > 0;\r\n return data;\r\n })\r\n );\r\n }\r\n // public items: Array<DrawerItem> //= items;\r\n\r\n public onSelect(ev: DrawerSelectEvent): void {\r\n this.selected = ev.item.text;\r\n const current = ev.item.id;\r\n\r\n if (this.expandedIndices.indexOf(current) >= 0) {\r\n this.expandedIndices = this.expandedIndices.filter((id) => id !== current);\r\n } else {\r\n this.expandedIndices.push(current);\r\n }\r\n if (ev.item.path && ev.item.path !== '') {\r\n this.router.navigate([ev.item.path]);\r\n // this.router.navigateByUrl(ev.item.path);\r\n // this.router.navigate(['/import_layout']);\r\n }\r\n }\r\n private transformToDrawerItems(data: Menu[], parentId?: string): any {\r\n let drawerItems: Array<{ [Key: string]: unknown }> = [];\r\n\r\n data.forEach((item) => {\r\n const drawerItem = {\r\n id: item.id,\r\n text: this.translate.instant(item.translationKey),\r\n // icon: item.icon,\r\n svgIcon: this.icons[item.icon],\r\n selected: false, // Set this based on your application's state or logic\r\n parentId: parentId,\r\n path: item.sublinks && item.sublinks.length > 0 ? '' : item.link\r\n };\r\n\r\n drawerItems.push(drawerItem);\r\n\r\n // Recursively process children and flatten them\r\n if (item.sublinks && item.sublinks.length > 0) {\r\n const childItems = this.transformToDrawerItems(item.sublinks, item.id);\r\n drawerItems = drawerItems.concat(childItems); // Add children to the drawerItems array\r\n }\r\n });\r\n\r\n return drawerItems;\r\n }\r\n}\r\n","<!-- <div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div> -->\r\n<kendo-toolbar>\r\n <kendo-toolbar-span text=\"{{apptitle}}\" cssClass=\"app-title\"></kendo-toolbar-span>\r\n <kendo-toolbar-button [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></kendo-toolbar-button>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-dropdownbutton text=\"{{auth_service?.name}}\" [svgIcon]=\"userSvg\" [data]=\"user_menu\"></kendo-toolbar-dropdownbutton>\r\n</kendo-toolbar>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\">\r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>","import * as msgpack from '@msgpack/msgpack';\n\nexport class CustomParser {\n encode(packet: any) {\n const transformedPacket = this.transformDatesForEncoding(packet);\n return msgpack.encode(transformedPacket);\n }\n\n decode(packet: ArrayBuffer) {\n const decodedPacket = msgpack.decode(packet);\n return this.transformDatesForDecoding(decodedPacket);\n }\n\n private transformDatesForEncoding(packet: any): any {\n if (packet instanceof Date) {\n return { __type: 'Date', value: packet.toISOString() };\n }\n if (Array.isArray(packet)) {\n return packet.map((item) => this.transformDatesForEncoding(item));\n }\n if (typeof packet === 'object' && packet !== null) {\n const result: any = {};\n for (const key in packet) {\n result[key] = this.transformDatesForEncoding(packet[key]);\n }\n return result;\n }\n return packet;\n }\n\n private transformDatesForDecoding(packet: any): any {\n if (packet && packet.__type === 'Date') {\n return new Date(packet.value);\n }\n if (Array.isArray(packet)) {\n return packet.map((item) => this.transformDatesForDecoding(item));\n }\n if (typeof packet === 'object' && packet !== null) {\n const result: any = {};\n for (const key in packet) {\n result[key] = this.transformDatesForDecoding(packet[key]);\n }\n return result;\n }\n return packet;\n }\n}","import {\r\n HttpClient,\r\n HttpDownloadProgressEvent,\r\n HttpEvent,\r\n HttpEventType,\r\n HttpHeaders,\r\n HttpRequest,\r\n HttpResponse,\r\n HttpUploadProgressEvent\r\n} from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\nimport { SOCKET_URL } from '../socket-config.token';\r\nexport interface UploadProgress {\r\n type: 'progress' | 'response';\r\n loaded: number;\r\n total?: number;\r\n fileId?: string;\r\n}\r\n\r\nexport interface DownloadProgress {\r\n type: 'progress' | 'response';\r\n loaded: number;\r\n total?: number;\r\n file?: File;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FileService {\r\n private baseUrl = '';\r\n // private baseUrl ='http://localhost:5200';\r\n\r\n constructor(private http: HttpClient, @Inject(SOCKET_URL) socketUrl: string) {\r\n this.baseUrl = socketUrl;\r\n }\r\n\r\n // uploadFile(file: File | Blob, filename?: string): Observable<UploadProgress> {\r\n // const url = `${this.baseUrl}/upload`;\r\n\r\n // const totalSize = file instanceof File ? file.size : file.size;\r\n // // determine the filename\r\n // const name =\r\n // file instanceof File ? file.name : filename ?? 'upload.bin';\r\n // const formData = new FormData();\r\n // formData.append('file', file, file.name);\r\n\r\n // // capture total size for the final event\r\n // const totalSize = file.size;\r\n\r\n // const req = new HttpRequest('POST', url, formData, {\r\n // reportProgress: true,\r\n // });\r\n\r\n // return this.http.request<{ file_id: string }>(req).pipe(\r\n // // only let through progress events or the final response\r\n // filter(\r\n // (\r\n // evt: HttpEvent<{ file_id: string }>\r\n // ): evt is HttpUploadProgressEvent | HttpResponse<{ file_id: string }> =>\r\n // evt.type === HttpEventType.UploadProgress ||\r\n // evt instanceof HttpResponse\r\n // ),\r\n // map((evt) => {\r\n // if (evt.type === HttpEventType.UploadProgress) {\r\n // // ✔️ safe to read loaded/total here\r\n // return {\r\n // type: 'progress',\r\n // loaded: evt.loaded,\r\n // total: evt.total ?? undefined,\r\n // } as UploadProgress;\r\n // } else {\r\n // // ✔️ evt is HttpResponse<{file_id:string}>\r\n // return {\r\n // type: 'response',\r\n // loaded: totalSize,\r\n // total: totalSize,\r\n // fileId: evt.body?.file_id,\r\n // } as UploadProgress;\r\n // }\r\n // })\r\n // );\r\n // }\r\n uploadFile(file: File | Blob, filename?: string, fileId?: string): Observable<UploadProgress> {\r\n const url = `${this.baseUrl}/upload`;\r\n const totalSize = file instanceof File ? file.size : file.size;\r\n\r\n // determine the filename\r\n const name = file instanceof File ? file.name : filename ?? 'upload.bin';\r\n\r\n const fd = new FormData();\r\n fd.append('file', file, name);\r\n fd.append('filename', name);\r\n if (fileId !== undefined && fileId !== null) {\r\n fd.append('fileId', fileId);\r\n }\r\n // build headers\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/octet-stream',\r\n 'X-Filename': name\r\n });\r\n\r\n // raw-body POST\r\n const req = new HttpRequest('POST', url, fd, {\r\n // headers,\r\n reportProgress: true\r\n // responseType: 'json',\r\n // withCredentials: false,\r\n });\r\n\r\n return this.http.request<{ file_id: string }>(req).pipe(\r\n // only let through progress events or the final response\r\n filter(\r\n (evt: HttpEvent<{ file_id: string }>): evt is HttpUploadProgressEvent | HttpResponse<{ file_id: string }> =>\r\n evt.type === HttpEventType.UploadProgress || evt instanceof HttpResponse\r\n ),\r\n map((evt) => {\r\n if (evt.type === HttpEventType.UploadProgress) {\r\n // live progress\r\n return {\r\n type: 'progress',\r\n loaded: evt.loaded,\r\n total: evt.total ?? undefined\r\n } as UploadProgress;\r\n } else {\r\n // final response, emit 100%\r\n return {\r\n type: 'response',\r\n loaded: totalSize,\r\n total: totalSize,\r\n fileId: evt.body?.file_id\r\n } as UploadProgress;\r\n }\r\n })\r\n );\r\n }\r\n downloadFile(fileId: string): Observable<DownloadProgress> {\r\n const url = `${this.baseUrl}/download/${fileId}`;\r\n console.log('Download URL:', url);\r\n const req = new HttpRequest('GET', url, {\r\n reportProgress: true,\r\n responseType: 'blob'\r\n });\r\n\r\n return this.http.request<Blob>(req).pipe(\r\n // Only let through DownloadProgressEvent or the final HttpResponse<Blob>\r\n filter(\r\n (evt: HttpEvent<Blob>): evt is HttpDownloadProgressEvent | HttpResponse<Blob> =>\r\n evt.type === HttpEventType.DownloadProgress || evt instanceof HttpResponse\r\n ),\r\n map((evt) => {\r\n if (evt.type === HttpEventType.DownloadProgress) {\r\n // A progress event\r\n return {\r\n type: 'progress',\r\n loaded: evt.loaded,\r\n total: evt.total ?? undefined\r\n } as DownloadProgress;\r\n } else {\r\n // The full response\r\n const cd = evt.headers.get('Content-Disposition') || '';\r\n const m = /filename=\"?(.+?)\"?($|;)/.exec(cd);\r\n const filename = m ? m[1] : 'download.bin';\r\n\r\n // build a File from the blob\r\n const file = new File([evt.body!], filename, {\r\n type: evt.body!.type\r\n });\r\n\r\n const size = evt.body!.size;\r\n return {\r\n type: 'response',\r\n loaded: size,\r\n total: size,\r\n file\r\n } as DownloadProgress;\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of rdict\r\n */\r\n\r\nexport * from './lib/components/layouts/full/full.component';\r\nexport * from './lib/reactive-dictionary';\r\nexport * from './lib/services/custom-msgpak-parser';\r\nexport * from './lib/services/file.service';\r\nexport * from './lib/services/socket.service';\r\nexport * from './lib/socket-config.token';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","i1.SocketService","i1","i4.ReactiveDictionary","filter","map"],"mappings":"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"}
1
+ {"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/socket-config.token.ts","../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/services/custom-msgpak-parser.ts","../../../../projects/rosoftlab/rdict/src/lib/services/file.service.ts","../../../../projects/rosoftlab/rdict/src/public-api.ts","../../../../projects/rosoftlab/rdict/src/rosoftlab-rdict.ts"],"sourcesContent":["// projects/my-library/src/lib/socket-config.token.ts\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const SOCKET_URL = new InjectionToken<string>('SocketUrl');\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { FilterRequest } from '@rosoftlab/core';\r\nimport { defer, filter, first, fromEvent, map, mergeMap, Observable, race, Subject, timeout } from 'rxjs';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport { SOCKET_URL } from '../socket-config.token';\r\ntype Kwargs = Record<string, any>;\r\ninterface ExecPayload {\r\n did: string;\r\n function_name: string;\r\n args?: any[]; // optional; send only if non-empty\r\n kwargs?: Kwargs; // optional; send only if non-empty\r\n}\r\ninterface ExecAck {\r\n ok: boolean;\r\n status?: 'started';\r\n job_id?: string;\r\n error?: any;\r\n}\r\n\r\ninterface FunctionResult {\r\n ok: true;\r\n job_id: string;\r\n did: string;\r\n function_name: string;\r\n result: any;\r\n}\r\n\r\ninterface FunctionError {\r\n ok: false;\r\n job_id: string;\r\n did: string;\r\n function_name: string;\r\n error: any;\r\n traceback?: string;\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SocketService {\r\n private socket: Socket;\r\n private socketUrl: string;\r\n private disconnect$ = new Subject<void>();\r\n\r\n // shared event streams\r\n private result$!: Observable<FunctionResult>;\r\n private error$!: Observable<FunctionError>;\r\n private disconnected$!: Observable<string | undefined>;\r\n constructor(@Inject(SOCKET_URL) socketUrl: string) {\r\n this.socketUrl = socketUrl;\r\n // Replace with your actual server URL\r\n // this.socket.on(\"connect\", () => {\r\n // const engine = this.socket.io.engine;\r\n // (engine.transport.name); // in most cases, prints \"polling\"\r\n\r\n // engine.once(\"upgrade\", () => {\r\n // // called when the transport is upgraded (i.e. from HTTP long-polling to WebSocket)\r\n // (engine.transport.name); // in most cases, prints \"websocket\"\r\n // });\r\n\r\n // });\r\n }\r\n initSocket(authToken: string) {\r\n if (this.socket == null && authToken !== null) {\r\n this.socket = io(this.socketUrl, {\r\n reconnectionDelayMax: 10000,\r\n transports: ['websocket'],\r\n withCredentials: true,\r\n //ackTimeout: 60000,\r\n timeout: 60000,\r\n //retries: 50,\r\n // parser: msgpackParser,\r\n auth: {\r\n token: authToken // Include the authentication token\r\n }\r\n });\r\n this.result$ = fromEvent<FunctionResult>(this.socket, 'function_result');\r\n this.error$ = fromEvent<FunctionError>(this.socket, 'function_error');\r\n this.disconnected$ = fromEvent<string | undefined>(this.socket, 'disconnect');\r\n\r\n // When socket disconnects, push to our teardown subject\r\n this.disconnected$.subscribe(() => this.disconnect$.next());\r\n }\r\n }\r\n getInitialData(): Promise<Record<string, any>> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.on('init', (data: any) => {\r\n if (data) {\r\n resolve(data['dict_data']);\r\n } else {\r\n reject('No data received from init event');\r\n }\r\n });\r\n });\r\n }\r\n getSetEvent(rdict: any) {\r\n this.socket.on('set', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n if (data.key === 'transactions') {\r\n for (const [key, record] of Object.entries(data.value)) {\r\n rdict.set_new_dict(key, record);\r\n }\r\n } else {\r\n rdict.asyncSet(data.key, data.value, false);\r\n }\r\n }\r\n });\r\n }\r\n getDeleteEvent(rdict: any) {\r\n this.socket.on('delete', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n rdict.asyncDelete(data.key, false);\r\n }\r\n });\r\n }\r\n // Emit the 'lazy_load' event with callback to get the response\r\n requestLazyLoad(did: string, key: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('lazy_load', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n notify_new_key(did: string, new_key: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('notify_new_key', { did, new_key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n commit_transaction(did: string, values: any): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('commit_transaction', { did: did, value: values }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Observable wrapper for requestFilteredData\r\n // This allows you to use it in an RxJS pipeline\r\n requestFilteredData(guid: string, key: string, request: FilterRequest): Observable<any> {\r\n return new Observable<any>((observer) => {\r\n this.socket.emit('get_filtered_views', { did: guid, key, request }, (response: any) => {\r\n if (response && response.error) {\r\n observer.error(response.error);\r\n } else {\r\n const transformedResponse = this.convertDates(response);\r\n observer.next(transformedResponse);\r\n observer.complete();\r\n }\r\n });\r\n\r\n // teardown logic if subscriber unsubscribes before callback fires\r\n return () => {\r\n // no direct way to cancel a single emit/callback in socket.io,\r\n // but you could optionally remove a listener here if you used on(...)\r\n };\r\n });\r\n }\r\n convertDates(obj: any): any {\r\n if (obj === null || obj === undefined) return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => this.convertDates(item));\r\n }\r\n\r\n if (typeof obj === 'object') {\r\n const newObj: any = {};\r\n for (const key of Object.keys(obj)) {\r\n const value = obj[key];\r\n\r\n // detect ISO date strings\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}[ T]\\d/.test(value)) {\r\n newObj[key] = new Date(value.replace(' ', 'T')); // replace space with T for safety\r\n } else {\r\n newObj[key] = this.convertDates(value); // recurse\r\n }\r\n }\r\n return newObj;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitSet(did: string, key: string, value: any): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('set', { did, key, value }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitDelete(did: string, key: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('delete', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n transformDatesForEncoding(obj: any): any {\r\n if (obj instanceof Date) {\r\n return { __date__: obj.toISOString() };\r\n } else if (Array.isArray(obj)) {\r\n return obj.map(this.transformDatesForEncoding);\r\n } else if (obj !== null && typeof obj === 'object') {\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForEncoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n transformDatesForDecoding(obj: any): any {\r\n if (typeof obj === 'object' && obj !== null) {\r\n if ('__date__' in obj) {\r\n return new Date(obj.__date__);\r\n }\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForDecoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n //#region executeFunction\r\n\r\n executeFunction_old(did: string, functionName: string, args: any[] = [], kwargs: Kwargs = {}): Observable<any> {\r\n const payload: ExecPayload = {\r\n did,\r\n function_name: functionName,\r\n ...(args && args.length ? { args } : {}),\r\n ...(kwargs && Object.keys(kwargs).length ? { kwargs } : {})\r\n };\r\n return new Observable<any>((observer) => {\r\n this.socket.emit('execute_function', payload, (response: any) => {\r\n if (response && response.error) {\r\n observer.error(response.error);\r\n } else {\r\n observer.next(response);\r\n observer.complete();\r\n }\r\n });\r\n\r\n // teardown logic if subscriber unsubscribes before callback fires\r\n return () => {\r\n // no direct way to cancel a single emit/callback in socket.io,\r\n // but you could optionally remove a listener here if you used on(...)\r\n };\r\n });\r\n }\r\n\r\n executeFunction(\r\n did: string,\r\n functionName: string,\r\n args: any[] = [],\r\n kwargs: Record<string, any> = {},\r\n waitMs = 120_000,\r\n awaitResult: boolean = true\r\n ): Observable<any> {\r\n const payload = {\r\n did,\r\n function_name: functionName,\r\n ...(args?.length ? { args } : {}),\r\n ...(kwargs && Object.keys(kwargs).length ? { kwargs } : {})\r\n };\r\n\r\n const ack$ = new Observable<{ ok: boolean; job_id?: string; error?: any }>((observer) => {\r\n this.socket.emit('execute_function', payload, (ack: any) => {\r\n observer.next(ack);\r\n observer.complete();\r\n });\r\n return () => {};\r\n });\r\n\r\n if (!awaitResult) {\r\n // Return immediately with the server ACK\r\n return ack$;\r\n }\r\n\r\n // Wait for function_result / function_error matching the job_id\r\n return defer(() => ack$).pipe(\r\n mergeMap((ack) => {\r\n if (!ack?.ok || !ack.job_id) {\r\n const msg = ack?.error ?? 'Bad ACK or missing job_id';\r\n throw new Error(typeof msg === 'string' ? msg : JSON.stringify(msg));\r\n }\r\n const jobId = ack.job_id!;\r\n const jobResult$ = this.result$.pipe(filter((e: any) => e.job_id === jobId));\r\n const jobError$ = this.error$.pipe(filter((e: any) => e.job_id === jobId));\r\n\r\n return race(jobResult$, jobError$).pipe(\r\n first(),\r\n map((evt: any) => {\r\n if (evt?.ok === false) {\r\n const msg = evt.error ?? `Server error for ${functionName} (job ${jobId})`;\r\n throw new Error(typeof msg === 'string' ? msg : JSON.stringify(msg));\r\n }\r\n return evt.result;\r\n })\r\n );\r\n }),\r\n timeout(waitMs)\r\n // takeUntil(this.disconnect$)\r\n );\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FilterRequest } from '@rosoftlab/core';\r\nimport { catchError, from, mergeMap, Observable, Subject, tap, throwError } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SocketService } from './services/socket.service';\r\ntype Kwargs = Record<string, any>;\r\n// import { mergeMap } from 'rxjs/operators';\r\n@Injectable({\r\n providedIn: 'root' // This makes the service a singleton and available throughout the app\r\n})\r\nexport class ReactiveDictionary extends Map<string, any> {\r\n private static instance: Map<string, ReactiveDictionary> = new Map<string, ReactiveDictionary>();\r\n private _socketService: SocketService;\r\n private changeEvent$: Subject<any> = new Subject<any>();\r\n private deleteEvent$: Subject<any> = new Subject<any>();\r\n\r\n private isInitialized: boolean = false;\r\n private _authToken: string = null;\r\n constructor(socketService: SocketService) {\r\n super();\r\n this._socketService = socketService;\r\n }\r\n public async initialize(authToken: string) {\r\n this._authToken = authToken;\r\n this._socketService.initSocket(authToken);\r\n this._socketService.getSetEvent(this);\r\n this._socketService.getDeleteEvent(this);\r\n await this.asyncInit();\r\n }\r\n public set_new_dict(key: string, data: Record<string, any>) {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n for (const [key, value] of Object.entries(data)) {\r\n dict.set(key, value);\r\n }\r\n this.asyncSet(key, dict, false);\r\n return dict;\r\n }\r\n // Asynchronous method to get a value by key\r\n async asyncGet(key: string): Promise<any> {\r\n // console.log('Get key: ', key);\r\n const keys = key.split('.');\r\n if (keys.length === 1) {\r\n if (this.has(key)) {\r\n const value = this.get(key);\r\n if (value instanceof ReactiveDictionary) {\r\n return value;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const dict_type = value['__type'];\r\n // console.log('value type : ', dict_type);\r\n if (dict_type === 'dict' || dict_type === 'lazy') {\r\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\r\n // console.log(lazyLoadData)\r\n if (lazyLoadData) {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n await dict.asyncInit(lazyLoadData.data);\r\n this.set(key, dict);\r\n return dict;\r\n }\r\n }\r\n }\r\n return value;\r\n } else {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n dict.set('__guid', uuidv4());\r\n dict.set('__type', 'dict');\r\n this.set(key, dict);\r\n await this._socketService.emitSet(this.get('__guid'), key, this.transform_for_serialization(dict));\r\n return dict;\r\n }\r\n } else {\r\n const obj = (await this.asyncGet(keys[0])) as ReactiveDictionary;\r\n if (obj) return await obj.asyncGet(keys.slice(1).join('.'));\r\n else return null;\r\n }\r\n }\r\n private transform_for_serialization(value: any) {\r\n // Transform a value to a format that can be serialized.\r\n const dict_type = value['__type'];\r\n if (dict_type === 'lazy') return { __type: 'lazy' };\r\n else if (value instanceof ReactiveDictionary) return { __type: 'dict', __guid: value.get('__guid') };\r\n else return value;\r\n }\r\n // Asynchronous method to set a value by key\r\n async asyncSet(key: string, value: any, emmit_event: boolean = true): Promise<void> {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitSet(this.get('__guid'), key, value);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.set(key, value);\r\n this.changeEvent$.next({ key, value });\r\n }\r\n async asyncDelete(key: string, emmit_event: boolean = true): Promise<void> {\r\n if (this.has(key)) {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitDelete(this.get('__guid'), key);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.delete(key);\r\n this.deleteEvent$.next({ key });\r\n }\r\n }\r\n delete$(key: string, emmit_event: boolean = true): Observable<any> {\r\n return from(this.asyncDelete(key, emmit_event));\r\n }\r\n // Asynchronous method to initialize with a set of key-value pairs\r\n async asyncInit(initialData?: Record<string, any>) {\r\n if (!this.isInitialized) {\r\n try {\r\n // If initial data is not provided, fetch it\r\n const data = initialData || (await this._socketService.getInitialData());\r\n // this.known_dicts.set(data.__guid,data);\r\n // Set the initial properties on the proxy\r\n for (const [key, value] of Object.entries(data)) {\r\n this.set(key, value);\r\n }\r\n this.isInitialized = true;\r\n } catch (error) {\r\n console.error('Error during initialization:', error);\r\n }\r\n }\r\n }\r\n\r\n async lazyLoadSync(guid: string, prop: string | symbol): Promise<any> {\r\n try {\r\n const data = await this._socketService.requestLazyLoad(guid, String(prop));\r\n return data;\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n throw error;\r\n }\r\n }\r\n public getPlainObject(): Record<string, any> {\r\n const plainObject: Record<string, any> = {};\r\n this.forEach((value, key) => {\r\n if (value instanceof ReactiveDictionary) {\r\n plainObject[key] = value.getPlainObject();\r\n } else if (typeof value === 'string') {\r\n const formattedValue = value\r\n .replace(/'/g, '\"') // Convert single quotes to double quotes\r\n .replace(/\\bNone\\b/g, 'null') // Replace None with null\r\n .replace(/\\bFalse\\b/g, 'false') // Replace False with false\r\n .replace(/\\bTrue\\b/g, 'true'); // Replace True with true\r\n try {\r\n const parsedValue = JSON.parse(formattedValue, this.jsonDateReviver);\r\n plainObject[key] = parsedValue;\r\n } catch {\r\n plainObject[key] = value; // Keep as string if not valid JSON\r\n }\r\n } else {\r\n plainObject[key] = value;\r\n }\r\n });\r\n return plainObject; // Return the plain object\r\n }\r\n private jsonDateReviver(key: string, value: any): any {\r\n // Check if the value is a valid ISO date string\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value)) {\r\n return new Date(value); // Convert to JavaScript Date object\r\n }\r\n return value;\r\n }\r\n get$(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getArray$(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getArray(key, data)).pipe(\r\n mergeMap((dictionaryMap) => {\r\n if (!(dictionaryMap instanceof Map)) {\r\n throw new Error('Expected a Map but received something else');\r\n }\r\n\r\n const values = Array.from(dictionaryMap.values());\r\n\r\n const isValid = values.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isValid) {\r\n throw new Error('Expected a Map of ReactiveDictionary instances but found invalid entries');\r\n }\r\n\r\n return from(this.processTableData(values));\r\n })\r\n );\r\n }\r\n\r\n async getArray(key: string, data: any = null): Promise<Map<string, ReactiveDictionary>> {\r\n if (!data) data = await this.asyncGet(key);\r\n if (!data) return new Map();\r\n\r\n // console.log('getArray', data);\r\n\r\n const entries = await Promise.all(\r\n Array.from(data.entries()).map(async ([k, v]) => {\r\n const entry = (await data.asyncGet(k)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', k);\r\n return [k, entry] as [string, ReactiveDictionary];\r\n }\r\n return null;\r\n })\r\n );\r\n\r\n // Filter out any nulls (non-ReactiveDictionary entries)\r\n const validEntries = entries.filter((e): e is [string, ReactiveDictionary] => e !== null);\r\n\r\n return new Map(validEntries);\r\n }\r\n\r\n async getArrayWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n\r\n async processTableData(data: any): Promise<any[]> {\r\n if (data instanceof ReactiveDictionary) {\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async ([key]) => {\r\n const entry = (await data.asyncGet(key)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key);\r\n }\r\n return entry;\r\n })\r\n )) || [];\r\n\r\n return result\r\n .filter((entry: any) => entry instanceof ReactiveDictionary)\r\n .map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else if (Array.isArray(data)) {\r\n // Directly process array of ReactiveDictionary instances\r\n return data.map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else {\r\n console.warn('processTableData received unexpected data:', data);\r\n return [];\r\n }\r\n }\r\n\r\n onChange$(): Observable<any> {\r\n return this.changeEvent$.asObservable();\r\n }\r\n onDelete$(): Observable<any> {\r\n return this.deleteEvent$.asObservable();\r\n }\r\n private getNextOid(): string | null {\r\n const numericKeys = Array.from(this.keys())\r\n .filter((k) => /^\\d+$/.test(k)) // keep only purely numeric keys\r\n .map((k) => parseInt(k, 10));\r\n\r\n if (numericKeys.length === 0) return '0';\r\n\r\n const maxKey = Math.max(...numericKeys);\r\n return (maxKey + 1).toString();\r\n }\r\n\r\n async update(record: Record<string, any>, key: string = null): Promise<void> {\r\n if (!key) key = '-1'; //new rdict //this.getNextOid();\r\n const value = { [key]: record };\r\n const result = await this._socketService.commit_transaction(this.get('__guid'), value);\r\n return result; \r\n }\r\n async update_multiple(record: Record<string, any>): Promise<void> {\r\n const result = await this._socketService.commit_transaction(this.get('__guid'), record);\r\n return result; \r\n }\r\n getFilteredView(key: string, request: FilterRequest): Observable<any> {\r\n const guid = this.get('__guid'); // however you’re retrieving it\r\n\r\n return this._socketService.requestFilteredData(guid, key, request).pipe(\r\n tap((data) => {\r\n // you can still inspect/log the data here if you like\r\n // console.log('received filtered view:', data);\r\n }),\r\n catchError((err) => {\r\n console.error('Error fetching filtered view:', err);\r\n // re-throw so subscribers can handle it\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n executeFunction(\r\n functionName: string,\r\n args: any[] = [],\r\n kwargs: Kwargs = {},\r\n waitMs = 120_000,\r\n awaitResult: boolean = true\r\n ): Observable<any> {\r\n const guid = this.get('__guid'); // however you’re retrieving it\r\n\r\n return this._socketService.executeFunction(guid, functionName, args, kwargs, waitMs, awaitResult).pipe(\r\n tap((data) => {\r\n // you can still inspect/log the data here if you like\r\n console.log('received execute function:', data);\r\n }),\r\n catchError((err) => {\r\n console.error('Error execute function:', err);\r\n // re-throw so subscribers can handle it\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n}\r\n","import * as msgpack from '@msgpack/msgpack';\r\n\r\nexport class CustomParser {\r\n encode(packet: any) {\r\n const transformedPacket = this.transformDatesForEncoding(packet);\r\n return msgpack.encode(transformedPacket);\r\n }\r\n\r\n decode(packet: ArrayBuffer) {\r\n const decodedPacket = msgpack.decode(packet);\r\n return this.transformDatesForDecoding(decodedPacket);\r\n }\r\n\r\n private transformDatesForEncoding(packet: any): any {\r\n if (packet instanceof Date) {\r\n return { __type: 'Date', value: packet.toISOString() };\r\n }\r\n if (Array.isArray(packet)) {\r\n return packet.map((item) => this.transformDatesForEncoding(item));\r\n }\r\n if (typeof packet === 'object' && packet !== null) {\r\n const result: any = {};\r\n for (const key in packet) {\r\n result[key] = this.transformDatesForEncoding(packet[key]);\r\n }\r\n return result;\r\n }\r\n return packet;\r\n }\r\n\r\n private transformDatesForDecoding(packet: any): any {\r\n if (packet && packet.__type === 'Date') {\r\n return new Date(packet.value);\r\n }\r\n if (Array.isArray(packet)) {\r\n return packet.map((item) => this.transformDatesForDecoding(item));\r\n }\r\n if (typeof packet === 'object' && packet !== null) {\r\n const result: any = {};\r\n for (const key in packet) {\r\n result[key] = this.transformDatesForDecoding(packet[key]);\r\n }\r\n return result;\r\n }\r\n return packet;\r\n }\r\n}","import {\r\n HttpClient,\r\n HttpDownloadProgressEvent,\r\n HttpEvent,\r\n HttpEventType,\r\n HttpHeaders,\r\n HttpRequest,\r\n HttpResponse,\r\n HttpUploadProgressEvent\r\n} from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\nimport { SOCKET_URL } from '../socket-config.token';\r\nexport interface UploadProgress {\r\n type: 'progress' | 'response';\r\n loaded: number;\r\n total?: number;\r\n fileId?: string;\r\n}\r\n\r\nexport interface DownloadProgress {\r\n type: 'progress' | 'response';\r\n loaded: number;\r\n total?: number;\r\n file?: File;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FileService {\r\n private baseUrl = '';\r\n // private baseUrl ='http://localhost:5200';\r\n\r\n constructor(private http: HttpClient, @Inject(SOCKET_URL) socketUrl: string) {\r\n this.baseUrl = socketUrl;\r\n }\r\n\r\n // uploadFile(file: File | Blob, filename?: string): Observable<UploadProgress> {\r\n // const url = `${this.baseUrl}/upload`;\r\n\r\n // const totalSize = file instanceof File ? file.size : file.size;\r\n // // determine the filename\r\n // const name =\r\n // file instanceof File ? file.name : filename ?? 'upload.bin';\r\n // const formData = new FormData();\r\n // formData.append('file', file, file.name);\r\n\r\n // // capture total size for the final event\r\n // const totalSize = file.size;\r\n\r\n // const req = new HttpRequest('POST', url, formData, {\r\n // reportProgress: true,\r\n // });\r\n\r\n // return this.http.request<{ file_id: string }>(req).pipe(\r\n // // only let through progress events or the final response\r\n // filter(\r\n // (\r\n // evt: HttpEvent<{ file_id: string }>\r\n // ): evt is HttpUploadProgressEvent | HttpResponse<{ file_id: string }> =>\r\n // evt.type === HttpEventType.UploadProgress ||\r\n // evt instanceof HttpResponse\r\n // ),\r\n // map((evt) => {\r\n // if (evt.type === HttpEventType.UploadProgress) {\r\n // // ✔️ safe to read loaded/total here\r\n // return {\r\n // type: 'progress',\r\n // loaded: evt.loaded,\r\n // total: evt.total ?? undefined,\r\n // } as UploadProgress;\r\n // } else {\r\n // // ✔️ evt is HttpResponse<{file_id:string}>\r\n // return {\r\n // type: 'response',\r\n // loaded: totalSize,\r\n // total: totalSize,\r\n // fileId: evt.body?.file_id,\r\n // } as UploadProgress;\r\n // }\r\n // })\r\n // );\r\n // }\r\n uploadFile(file: File | Blob, filename?: string, fileId?: string): Observable<UploadProgress> {\r\n const url = `${this.baseUrl}/upload`;\r\n const totalSize = file instanceof File ? file.size : file.size;\r\n\r\n // determine the filename\r\n const name = file instanceof File ? file.name : filename ?? 'upload.bin';\r\n\r\n const fd = new FormData();\r\n fd.append('file', file, name);\r\n fd.append('filename', name);\r\n if (fileId !== undefined && fileId !== null) {\r\n fd.append('fileId', fileId);\r\n }\r\n // build headers\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/octet-stream',\r\n 'X-Filename': name\r\n });\r\n\r\n // raw-body POST\r\n const req = new HttpRequest('POST', url, fd, {\r\n // headers,\r\n reportProgress: true\r\n // responseType: 'json',\r\n // withCredentials: false,\r\n });\r\n\r\n return this.http.request<{ file_id: string }>(req).pipe(\r\n // only let through progress events or the final response\r\n filter(\r\n (evt: HttpEvent<{ file_id: string }>): evt is HttpUploadProgressEvent | HttpResponse<{ file_id: string }> =>\r\n evt.type === HttpEventType.UploadProgress || evt instanceof HttpResponse\r\n ),\r\n map((evt) => {\r\n if (evt.type === HttpEventType.UploadProgress) {\r\n // live progress\r\n return {\r\n type: 'progress',\r\n loaded: evt.loaded,\r\n total: evt.total ?? undefined\r\n } as UploadProgress;\r\n } else {\r\n // final response, emit 100%\r\n return {\r\n type: 'response',\r\n loaded: totalSize,\r\n total: totalSize,\r\n fileId: evt.body?.file_id\r\n } as UploadProgress;\r\n }\r\n })\r\n );\r\n }\r\n downloadFile(fileId: string): Observable<DownloadProgress> {\r\n const url = `${this.baseUrl}/download/${fileId}`;\r\n console.log('Download URL:', url);\r\n const req = new HttpRequest('GET', url, {\r\n reportProgress: true,\r\n responseType: 'blob'\r\n });\r\n\r\n return this.http.request<Blob>(req).pipe(\r\n // Only let through DownloadProgressEvent or the final HttpResponse<Blob>\r\n filter(\r\n (evt: HttpEvent<Blob>): evt is HttpDownloadProgressEvent | HttpResponse<Blob> =>\r\n evt.type === HttpEventType.DownloadProgress || evt instanceof HttpResponse\r\n ),\r\n map((evt) => {\r\n if (evt.type === HttpEventType.DownloadProgress) {\r\n // A progress event\r\n return {\r\n type: 'progress',\r\n loaded: evt.loaded,\r\n total: evt.total ?? undefined\r\n } as DownloadProgress;\r\n } else {\r\n // The full response\r\n const cd = evt.headers.get('Content-Disposition') || '';\r\n const m = /filename=\"?(.+?)\"?($|;)/.exec(cd);\r\n const filename = m ? m[1] : 'download.bin';\r\n\r\n // build a File from the blob\r\n const file = new File([evt.body!], filename, {\r\n type: evt.body!.type\r\n });\r\n\r\n const size = evt.body!.size;\r\n return {\r\n type: 'response',\r\n loaded: size,\r\n total: size,\r\n file\r\n } as DownloadProgress;\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of rdict\r\n */\r\n\r\nexport * from './lib/reactive-dictionary';\r\nexport * from './lib/services/custom-msgpak-parser';\r\nexport * from './lib/services/file.service';\r\nexport * from './lib/services/socket.service';\r\nexport * from './lib/socket-config.token';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","i1.SocketService","filter","map"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rosoftlab/rdict",
3
- "version": "1.0.5-alpha-3",
3
+ "version": "1.0.5-alpha-5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.8",
6
6
  "@angular/core": "^19.2.8",
@@ -37,7 +37,7 @@
37
37
  "socket.io-client": "^4.8.1",
38
38
  "socket.io-msgpack-parser": "^3.0.2",
39
39
  "socket.io-parser": "^3.3.4",
40
- "@rosoftlab/core": "1.0.5-alpha-3"
40
+ "@rosoftlab/core": "1.0.5-alpha-5"
41
41
  },
42
42
  "sideEffects": false,
43
43
  "author": "rosoftlab",
package/public-api.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from './lib/components/layouts/full/full.component';
2
1
  export * from './lib/reactive-dictionary';
3
2
  export * from './lib/services/custom-msgpak-parser';
4
3
  export * from './lib/services/file.service';
@@ -1,41 +0,0 @@
1
- import { OnInit } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { TranslateService } from '@ngx-translate/core';
4
- import { DrawerItemExpandedFn, DrawerSelectEvent } from '@progress/kendo-angular-layout';
5
- import * as allIcons from '@progress/kendo-svg-icons';
6
- import { SVGIcon } from '@progress/kendo-svg-icons';
7
- import { AuthService, Menu, UserService } from '@rosoftlab/core';
8
- import { Observable } from 'rxjs';
9
- import { ReactiveDictionary } from '../../../reactive-dictionary';
10
- import * as i0 from "@angular/core";
11
- export declare class FullComponent implements OnInit {
12
- private userService;
13
- private router;
14
- translate: TranslateService;
15
- private rdict;
16
- auth_service: AuthService;
17
- selected: string;
18
- menuSvg: SVGIcon;
19
- userSvg: SVGIcon;
20
- expandedIndices: number[];
21
- menu$: Observable<Menu[]>;
22
- hasItems: boolean;
23
- items: Array<{
24
- [Key: string]: unknown;
25
- }>;
26
- icons: typeof allIcons;
27
- apptitle: string;
28
- user_menu: {
29
- text: string;
30
- svgIcon: allIcons.SVGIcon;
31
- click: () => void;
32
- }[];
33
- constructor(userService: UserService, router: Router, translate: TranslateService, rdict: ReactiveDictionary, auth_service: AuthService);
34
- ngOnInit(): Promise<void>;
35
- isItemExpanded: DrawerItemExpandedFn;
36
- getMenu(): void;
37
- onSelect(ev: DrawerSelectEvent): void;
38
- private transformToDrawerItems;
39
- static ɵfac: i0.ɵɵFactoryDeclaration<FullComponent, never>;
40
- static ɵcmp: i0.ɵɵComponentDeclaration<FullComponent, "rdict-full", never, {}, {}, never, never, true, never>;
41
- }
@@ -1,14 +0,0 @@
1
- import { TemplateRef } from '@angular/core';
2
- import { ToolBarToolComponent } from '@progress/kendo-angular-toolbar';
3
- import * as i0 from "@angular/core";
4
- export declare class KendoToolbarSpanComponent extends ToolBarToolComponent {
5
- tabindex: number;
6
- text: string;
7
- cssClass: string | string[] | {
8
- [klass: string]: boolean;
9
- };
10
- toolbarTemplate: TemplateRef<any>;
11
- constructor();
12
- static ɵfac: i0.ɵɵFactoryDeclaration<KendoToolbarSpanComponent, never>;
13
- static ɵcmp: i0.ɵɵComponentDeclaration<KendoToolbarSpanComponent, "kendo-toolbar-span", never, { "text": { "alias": "text"; "required": false; }; "cssClass": { "alias": "cssClass"; "required": false; }; }, {}, never, never, true, never>;
14
- }