@acorex/core 18.5.13 → 18.5.15
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/network/acorex-core-network.mjs +5 -0
- package/esm2022/network/index.mjs +5 -0
- package/esm2022/network/lib/download-task.mjs +47 -0
- package/esm2022/network/lib/network.service.mjs +84 -0
- package/esm2022/network/lib/network.types.mjs +15 -0
- package/esm2022/network/lib/upload-task.mjs +48 -0
- package/fesm2022/acorex-core-network.mjs +192 -0
- package/fesm2022/acorex-core-network.mjs.map +1 -0
- package/network/README.md +3 -0
- package/network/index.d.ts +4 -0
- package/network/lib/download-task.d.ts +11 -0
- package/network/lib/network.service.d.ts +16 -0
- package/network/lib/network.types.d.ts +26 -0
- package/network/lib/upload-task.d.ts +12 -0
- package/package.json +19 -13
@@ -0,0 +1,5 @@
|
|
1
|
+
/**
|
2
|
+
* Generated bundle index. Do not edit.
|
3
|
+
*/
|
4
|
+
export * from './index';
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvcmUtbmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9uZXR3b3JrL3NyYy9hY29yZXgtY29yZS1uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export * from './lib/upload-task';
|
2
|
+
export * from './lib/download-task';
|
3
|
+
export * from './lib/network.types';
|
4
|
+
export * from './lib/network.service';
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbmV0d29yay9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL3VwbG9hZC10YXNrJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rvd25sb2FkLXRhc2snO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmV0d29yay50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZXR3b3JrLnNlcnZpY2UnOyJdfQ==
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import { Subject } from 'rxjs';
|
2
|
+
import { takeUntil, map } from 'rxjs/operators';
|
3
|
+
import { HttpEventType } from '@angular/common/http';
|
4
|
+
import { AXDownloadStatus } from './network.types'; // Ensure correct import path
|
5
|
+
export class AXDownloadTask {
|
6
|
+
constructor(observable) {
|
7
|
+
this.observable = observable;
|
8
|
+
this.cancelSignal = new Subject();
|
9
|
+
}
|
10
|
+
get events() {
|
11
|
+
return this.observable.pipe(takeUntil(this.cancelSignal), map(event => this.handleEvent(event)));
|
12
|
+
}
|
13
|
+
handleEvent(event) {
|
14
|
+
switch (event.type) {
|
15
|
+
case HttpEventType.DownloadProgress:
|
16
|
+
{
|
17
|
+
const percentDone = Math.round(100 * event.loaded / (event.total ?? event.loaded));
|
18
|
+
return {
|
19
|
+
progress: percentDone,
|
20
|
+
bytesReceived: event.loaded,
|
21
|
+
totalBytes: event.total ?? 0,
|
22
|
+
status: AXDownloadStatus.Downloading
|
23
|
+
};
|
24
|
+
}
|
25
|
+
case HttpEventType.Response:
|
26
|
+
return {
|
27
|
+
progress: 100,
|
28
|
+
bytesReceived: event.body.size,
|
29
|
+
totalBytes: event.body.size,
|
30
|
+
status: AXDownloadStatus.DownloadComplete,
|
31
|
+
data: event.body
|
32
|
+
};
|
33
|
+
default:
|
34
|
+
return {
|
35
|
+
progress: 0,
|
36
|
+
bytesReceived: 0,
|
37
|
+
totalBytes: 0,
|
38
|
+
status: AXDownloadStatus.StartingDownload
|
39
|
+
};
|
40
|
+
}
|
41
|
+
}
|
42
|
+
cancel() {
|
43
|
+
this.cancelSignal.next();
|
44
|
+
this.cancelSignal.complete();
|
45
|
+
}
|
46
|
+
}
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtdGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9uZXR3b3JrL3NyYy9saWIvZG93bmxvYWQtdGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDLDZCQUE2QjtBQUVyRyxNQUFNLE9BQU8sY0FBYztJQUd2QixZQUFvQixVQUFzQztRQUF0QyxlQUFVLEdBQVYsVUFBVSxDQUE0QjtRQUZsRCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFbUIsQ0FBQztJQUUvRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN2QixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM1QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3hDLENBQUM7SUFDTixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQXFCO1FBQ3JDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLEtBQUssYUFBYSxDQUFDLGdCQUFnQjtnQkFDL0IsQ0FBQztvQkFDRyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDbkYsT0FBTzt3QkFDSCxRQUFRLEVBQUUsV0FBVzt3QkFDckIsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNO3dCQUMzQixVQUFVLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDO3dCQUM1QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztxQkFDdkMsQ0FBQztnQkFDTixDQUFDO1lBRUwsS0FBSyxhQUFhLENBQUMsUUFBUTtnQkFDdkIsT0FBTztvQkFDSCxRQUFRLEVBQUUsR0FBRztvQkFDYixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO29CQUM5QixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO29CQUMzQixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCO29CQUN6QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7aUJBQ25CLENBQUM7WUFFTjtnQkFDSSxPQUFPO29CQUNILFFBQVEsRUFBRSxDQUFDO29CQUNYLGFBQWEsRUFBRSxDQUFDO29CQUNoQixVQUFVLEVBQUUsQ0FBQztvQkFDYixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCO2lCQUM1QyxDQUFDO1FBQ1YsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQVhEb3dubG9hZFJlc3BvbnNlLCBBWERvd25sb2FkU3RhdHVzIH0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJzsgLy8gRW5zdXJlIGNvcnJlY3QgaW1wb3J0IHBhdGhcblxuZXhwb3J0IGNsYXNzIEFYRG93bmxvYWRUYXNrIHtcbiAgICBwcml2YXRlIGNhbmNlbFNpZ25hbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9ic2VydmFibGU6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+KSB7IH1cblxuICAgIGdldCBldmVudHMoKTogT2JzZXJ2YWJsZTxBWERvd25sb2FkUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuY2FuY2VsU2lnbmFsKSxcbiAgICAgICAgICAgIG1hcChldmVudCA9PiB0aGlzLmhhbmRsZUV2ZW50KGV2ZW50KSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFdmVudChldmVudDogSHR0cEV2ZW50PGFueT4pOiBBWERvd25sb2FkUmVzcG9uc2Uge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVyY2VudERvbmUgPSBNYXRoLnJvdW5kKDEwMCAqIGV2ZW50LmxvYWRlZCAvIChldmVudC50b3RhbCA/PyBldmVudC5sb2FkZWQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiBwZXJjZW50RG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IGV2ZW50LmxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXM6IGV2ZW50LnRvdGFsID8/IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IEFYRG93bmxvYWRTdGF0dXMuRG93bmxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMTAwLFxuICAgICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiBldmVudC5ib2R5LnNpemUsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXM6IGV2ZW50LmJvZHkuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBBWERvd25sb2FkU3RhdHVzLkRvd25sb2FkQ29tcGxldGUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGV2ZW50LmJvZHlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbEJ5dGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IEFYRG93bmxvYWRTdGF0dXMuU3RhcnRpbmdEb3dubG9hZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsU2lnbmFsLm5leHQoKTtcbiAgICAgICAgdGhpcy5jYW5jZWxTaWduYWwuY29tcGxldGUoKTtcbiAgICB9XG59XG4iXX0=
|
@@ -0,0 +1,84 @@
|
|
1
|
+
import { HttpRequest, HttpClient } from '@angular/common/http';
|
2
|
+
import { inject, Injectable, signal } from '@angular/core';
|
3
|
+
import { AXDownloadTask } from './download-task';
|
4
|
+
import { AXUploadTask } from './upload-task';
|
5
|
+
import { fromEvent, map, merge, startWith } from 'rxjs';
|
6
|
+
import { isBrowser } from '@acorex/core/platform';
|
7
|
+
import * as i0 from "@angular/core";
|
8
|
+
export class AXNetworkService {
|
9
|
+
constructor() {
|
10
|
+
this.http = inject(HttpClient);
|
11
|
+
this._status = signal(true);
|
12
|
+
this.status = this._status.asReadonly();
|
13
|
+
if (isBrowser()) {
|
14
|
+
// Only subscribe to these events if on the browser platform
|
15
|
+
const onlineEvent = fromEvent(window, 'online').pipe(map(() => true));
|
16
|
+
const offlineEvent = fromEvent(window, 'offline').pipe(map(() => false));
|
17
|
+
merge(onlineEvent, offlineEvent).pipe(startWith(navigator.onLine)).subscribe(c => {
|
18
|
+
this._status.set(c);
|
19
|
+
});
|
20
|
+
}
|
21
|
+
}
|
22
|
+
// Unified method handling both types of inputs
|
23
|
+
upload(arg1, arg2) {
|
24
|
+
let request;
|
25
|
+
let totalFilesSize = 0;
|
26
|
+
if (typeof arg1 === 'string' && arg2 instanceof FormData) {
|
27
|
+
// Calculate total file size
|
28
|
+
arg2.forEach((value) => {
|
29
|
+
if (value instanceof File) {
|
30
|
+
totalFilesSize += value.size;
|
31
|
+
}
|
32
|
+
});
|
33
|
+
request = new HttpRequest('POST', arg1, arg2, {
|
34
|
+
reportProgress: true,
|
35
|
+
responseType: 'json'
|
36
|
+
});
|
37
|
+
}
|
38
|
+
else if (arg1 instanceof HttpRequest) {
|
39
|
+
if (arg1.body instanceof FormData) {
|
40
|
+
// Calculate total file size
|
41
|
+
arg1.body.forEach((value) => {
|
42
|
+
if (value instanceof File) {
|
43
|
+
totalFilesSize += value.size;
|
44
|
+
}
|
45
|
+
});
|
46
|
+
}
|
47
|
+
request = arg1.clone({
|
48
|
+
reportProgress: true,
|
49
|
+
responseType: arg1.responseType || 'json'
|
50
|
+
});
|
51
|
+
}
|
52
|
+
else {
|
53
|
+
throw new Error("Invalid arguments for upload method.");
|
54
|
+
}
|
55
|
+
const events = this.http.request(request);
|
56
|
+
return new AXUploadTask(events, totalFilesSize);
|
57
|
+
}
|
58
|
+
// Unified method handling both types of inputs
|
59
|
+
download(arg) {
|
60
|
+
let request;
|
61
|
+
if (typeof arg === 'string') {
|
62
|
+
request = new HttpRequest('GET', arg, {
|
63
|
+
reportProgress: true,
|
64
|
+
responseType: 'blob',
|
65
|
+
});
|
66
|
+
}
|
67
|
+
else {
|
68
|
+
request = new HttpRequest(arg.method, arg.url, arg.body, {
|
69
|
+
...arg,
|
70
|
+
reportProgress: true,
|
71
|
+
responseType: 'blob',
|
72
|
+
});
|
73
|
+
}
|
74
|
+
const events = this.http.request(request);
|
75
|
+
return new AXDownloadTask(events);
|
76
|
+
}
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXNetworkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
78
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXNetworkService, providedIn: 'root' }); }
|
79
|
+
}
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXNetworkService, decorators: [{
|
81
|
+
type: Injectable,
|
82
|
+
args: [{ providedIn: 'root' }]
|
83
|
+
}], ctorParameters: () => [] });
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL25ldHdvcmsvc3JjL2xpYi9uZXR3b3JrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBS2xELE1BQU0sT0FBTyxnQkFBZ0I7SUFRekI7UUFOUSxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFeEIsV0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFHL0MsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2QsNERBQTREO1lBQzVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXpF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OzsyRkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXF1ZXN0LCBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRG93bmxvYWRUYXNrIH0gZnJvbSAnLi9kb3dubG9hZC10YXNrJztcbmltcG9ydCB7IEFYVXBsb2FkVGFzayB9IGZyb20gJy4vdXBsb2FkLXRhc2snO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtYXAsIG1lcmdlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5cblxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFYTmV0d29ya1NlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gICAgcHJpdmF0ZSBfc3RhdHVzID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IHRoaXMuX3N0YXR1cy5hc1JlYWRvbmx5KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICAgICAgICAvLyBPbmx5IHN1YnNjcmliZSB0byB0aGVzZSBldmVudHMgaWYgb24gdGhlIGJyb3dzZXIgcGxhdGZvcm1cbiAgICAgICAgICAgIGNvbnN0IG9ubGluZUV2ZW50ID0gZnJvbUV2ZW50KHdpbmRvdywgJ29ubGluZScpLnBpcGUobWFwKCgpID0+IHRydWUpKTtcbiAgICAgICAgICAgIGNvbnN0IG9mZmxpbmVFdmVudCA9IGZyb21FdmVudCh3aW5kb3csICdvZmZsaW5lJykucGlwZShtYXAoKCkgPT4gZmFsc2UpKTtcblxuICAgICAgICAgICAgbWVyZ2Uob25saW5lRXZlbnQsIG9mZmxpbmVFdmVudCkucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobmF2aWdhdG9yLm9uTGluZSlcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKGMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXR1cy5zZXQoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE92ZXJsb2FkIHNpZ25hdHVyZXNcbiAgICB1cGxvYWQ8VD4odXJsOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSk6IEFYVXBsb2FkVGFzazxUPjtcbiAgICB1cGxvYWQ8VD4ocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IEFYVXBsb2FkVGFzazxUPjtcblxuICAgIC8vIFVuaWZpZWQgbWV0aG9kIGhhbmRsaW5nIGJvdGggdHlwZXMgb2YgaW5wdXRzXG4gICAgdXBsb2FkPFQ+KGFyZzE6IHN0cmluZyB8IEh0dHBSZXF1ZXN0PGFueT4sIGFyZzI/OiBGb3JtRGF0YSk6IEFYVXBsb2FkVGFzazxUPiB7XG4gICAgICAgIGxldCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+O1xuICAgICAgICBsZXQgdG90YWxGaWxlc1NpemUgPSAwO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gJ3N0cmluZycgJiYgYXJnMiBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdG90YWwgZmlsZSBzaXplXG4gICAgICAgICAgICBhcmcyLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbEZpbGVzU2l6ZSArPSB2YWx1ZS5zaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVxdWVzdCA9IG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsIGFyZzEsIGFyZzIsIHtcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJnMSBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoYXJnMS5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdG90YWwgZmlsZSBzaXplXG4gICAgICAgICAgICAgICAgYXJnMS5ib2R5LmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRmlsZXNTaXplICs9IHZhbHVlLnNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3QgPSBhcmcxLmNsb25lKHtcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IGFyZzEucmVzcG9uc2VUeXBlIHx8ICdqc29uJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdXBsb2FkIG1ldGhvZC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmh0dHAucmVxdWVzdDxUPihyZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWFVwbG9hZFRhc2s8VD4oZXZlbnRzLCB0b3RhbEZpbGVzU2l6ZSk7XG4gICAgfVxuXG5cblxuICAgIC8vIE92ZXJsb2FkIHNpZ25hdHVyZXNcbiAgICBkb3dubG9hZCh1cmw6IHN0cmluZyk6IEFYRG93bmxvYWRUYXNrO1xuICAgIGRvd25sb2FkKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PEJsb2I+KTogQVhEb3dubG9hZFRhc2s7XG5cbiAgICAvLyBVbmlmaWVkIG1ldGhvZCBoYW5kbGluZyBib3RoIHR5cGVzIG9mIGlucHV0c1xuICAgIGRvd25sb2FkKGFyZzogc3RyaW5nIHwgSHR0cFJlcXVlc3Q8QmxvYj4pOiBBWERvd25sb2FkVGFzayB7XG4gICAgICAgIGxldCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxCbG9iPjtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSBuZXcgSHR0cFJlcXVlc3QoJ0dFVCcsIGFyZywge1xuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gbmV3IEh0dHBSZXF1ZXN0KGFyZy5tZXRob2QsIGFyZy51cmwsIGFyZy5ib2R5LCB7XG4gICAgICAgICAgICAgICAgLi4uYXJnLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmh0dHAucmVxdWVzdDxCbG9iPihyZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERvd25sb2FkVGFzayhldmVudHMpO1xuICAgIH1cblxufSJdfQ==
|
@@ -0,0 +1,15 @@
|
|
1
|
+
export var AXUploadStatus;
|
2
|
+
(function (AXUploadStatus) {
|
3
|
+
AXUploadStatus["Uploading"] = "Uploading...";
|
4
|
+
AXUploadStatus["UploadComplete"] = "Upload complete";
|
5
|
+
AXUploadStatus["StartingUpload"] = "Starting upload";
|
6
|
+
AXUploadStatus["UploadFailed"] = "Upload failed";
|
7
|
+
})(AXUploadStatus || (AXUploadStatus = {}));
|
8
|
+
export var AXDownloadStatus;
|
9
|
+
(function (AXDownloadStatus) {
|
10
|
+
AXDownloadStatus["Downloading"] = "Downloading...";
|
11
|
+
AXDownloadStatus["DownloadComplete"] = "Download complete";
|
12
|
+
AXDownloadStatus["StartingDownload"] = "Starting download";
|
13
|
+
AXDownloadStatus["DownloadFailed"] = "Download failed";
|
14
|
+
})(AXDownloadStatus || (AXDownloadStatus = {}));
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9uZXR3b3JrL3NyYy9saWIvbmV0d29yay50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3RCLDRDQUEwQixDQUFBO0lBQzFCLG9EQUFrQyxDQUFBO0lBQ2xDLG9EQUFrQyxDQUFBO0lBQ2xDLGdEQUE4QixDQUFBO0FBQ2xDLENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QjtBQVVELE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDeEIsa0RBQThCLENBQUE7SUFDOUIsMERBQXNDLENBQUE7SUFDdEMsMERBQXNDLENBQUE7SUFDdEMsc0RBQWtDLENBQUE7QUFDdEMsQ0FBQyxFQUxXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLM0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBBWFVwbG9hZFN0YXR1cyB7XG4gICAgVXBsb2FkaW5nID0gXCJVcGxvYWRpbmcuLi5cIixcbiAgICBVcGxvYWRDb21wbGV0ZSA9IFwiVXBsb2FkIGNvbXBsZXRlXCIsXG4gICAgU3RhcnRpbmdVcGxvYWQgPSBcIlN0YXJ0aW5nIHVwbG9hZFwiLFxuICAgIFVwbG9hZEZhaWxlZCA9IFwiVXBsb2FkIGZhaWxlZFwiXG59XG5cbmV4cG9ydCB0eXBlIEFYVXBsb2FkUmVzcG9uc2U8VD4gPSB7XG4gICAgcHJvZ3Jlc3M6IG51bWJlcjtcbiAgICBieXRlc1RyYW5zZmVycmVkOiBudW1iZXI7XG4gICAgdG90YWxCeXRlczogbnVtYmVyO1xuICAgIHN0YXR1czogQVhVcGxvYWRTdGF0dXM7XG4gICAgcmVzdWx0PzogVDtcbn07XG5cbmV4cG9ydCBlbnVtIEFYRG93bmxvYWRTdGF0dXMge1xuICAgIERvd25sb2FkaW5nID0gXCJEb3dubG9hZGluZy4uLlwiLFxuICAgIERvd25sb2FkQ29tcGxldGUgPSBcIkRvd25sb2FkIGNvbXBsZXRlXCIsXG4gICAgU3RhcnRpbmdEb3dubG9hZCA9IFwiU3RhcnRpbmcgZG93bmxvYWRcIixcbiAgICBEb3dubG9hZEZhaWxlZCA9IFwiRG93bmxvYWQgZmFpbGVkXCJcbn1cblxuZXhwb3J0IHR5cGUgQVhEb3dubG9hZFJlc3BvbnNlID0ge1xuICAgIHByb2dyZXNzOiBudW1iZXI7XG4gICAgYnl0ZXNSZWNlaXZlZDogbnVtYmVyO1xuICAgIHRvdGFsQnl0ZXM6IG51bWJlcjtcbiAgICBzdGF0dXM6IEFYRG93bmxvYWRTdGF0dXM7XG4gICAgZGF0YT86IEJsb2I7IC8vIG9yIGFueSBhcHByb3ByaWF0ZSB0eXBlIGJhc2VkIG9uIHlvdXIgc3BlY2lmaWMgdXNlIGNhc2Vcbn07XG4iXX0=
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import { Subject } from 'rxjs';
|
2
|
+
import { takeUntil, map } from 'rxjs/operators';
|
3
|
+
import { HttpEventType } from '@angular/common/http';
|
4
|
+
import { AXUploadStatus } from './network.types'; // Ensure correct import path
|
5
|
+
export class AXUploadTask {
|
6
|
+
constructor(observable, totalFileSize) {
|
7
|
+
this.observable = observable;
|
8
|
+
this.totalFileSize = totalFileSize;
|
9
|
+
this.cancelSignal = new Subject();
|
10
|
+
}
|
11
|
+
get events() {
|
12
|
+
return this.observable.pipe(takeUntil(this.cancelSignal), map(event => this.handleEvent(event)));
|
13
|
+
}
|
14
|
+
handleEvent(event) {
|
15
|
+
switch (event.type) {
|
16
|
+
case HttpEventType.UploadProgress:
|
17
|
+
{
|
18
|
+
const percentDone = Math.round(100 * event.loaded / (this.totalFileSize || event.total));
|
19
|
+
return {
|
20
|
+
progress: percentDone,
|
21
|
+
bytesTransferred: event.loaded,
|
22
|
+
totalBytes: this.totalFileSize,
|
23
|
+
status: AXUploadStatus.Uploading
|
24
|
+
};
|
25
|
+
}
|
26
|
+
case HttpEventType.Response:
|
27
|
+
return {
|
28
|
+
progress: 100,
|
29
|
+
bytesTransferred: this.totalFileSize,
|
30
|
+
totalBytes: this.totalFileSize,
|
31
|
+
status: AXUploadStatus.UploadComplete,
|
32
|
+
result: event.body
|
33
|
+
};
|
34
|
+
default:
|
35
|
+
return {
|
36
|
+
progress: 0,
|
37
|
+
bytesTransferred: 0,
|
38
|
+
totalBytes: 0,
|
39
|
+
status: AXUploadStatus.StartingUpload
|
40
|
+
};
|
41
|
+
}
|
42
|
+
}
|
43
|
+
cancel() {
|
44
|
+
this.cancelSignal.next();
|
45
|
+
this.cancelSignal.complete();
|
46
|
+
}
|
47
|
+
}
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbmV0d29yay9zcmMvbGliL3VwbG9hZC10YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFvQixjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDLDZCQUE2QjtBQUVqRyxNQUFNLE9BQU8sWUFBWTtJQUdyQixZQUFvQixVQUFvQyxFQUFVLGFBQXFCO1FBQW5FLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFGL0UsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRWdELENBQUM7SUFFNUYsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdkIsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDNUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN4QyxDQUFDO0lBQ04sQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFxQjtRQUNyQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixLQUFLLGFBQWEsQ0FBQyxjQUFjO2dCQUM3QixDQUFDO29CQUNHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUN6RixPQUFPO3dCQUNILFFBQVEsRUFBRSxXQUFXO3dCQUNyQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsTUFBTTt3QkFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhO3dCQUM5QixNQUFNLEVBQUUsY0FBYyxDQUFDLFNBQVM7cUJBQ25DLENBQUM7Z0JBQ04sQ0FBQztZQUVMLEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3ZCLE9BQU87b0JBQ0gsUUFBUSxFQUFFLEdBQUc7b0JBQ2IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDOUIsTUFBTSxFQUFFLGNBQWMsQ0FBQyxjQUFjO29CQUNyQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUk7aUJBQ3JCLENBQUM7WUFFTjtnQkFDSSxPQUFPO29CQUNILFFBQVEsRUFBRSxDQUFDO29CQUNYLGdCQUFnQixFQUFFLENBQUM7b0JBQ25CLFVBQVUsRUFBRSxDQUFDO29CQUNiLE1BQU0sRUFBRSxjQUFjLENBQUMsY0FBYztpQkFDeEMsQ0FBQztRQUNWLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEFYVXBsb2FkUmVzcG9uc2UsIEFYVXBsb2FkU3RhdHVzIH0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJzsgLy8gRW5zdXJlIGNvcnJlY3QgaW1wb3J0IHBhdGhcblxuZXhwb3J0IGNsYXNzIEFYVXBsb2FkVGFzazxUPiB7XG4gICAgcHJpdmF0ZSBjYW5jZWxTaWduYWwgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxUPj4sIHByaXZhdGUgdG90YWxGaWxlU2l6ZTogbnVtYmVyKSB7IH1cblxuICAgIGdldCBldmVudHMoKTogT2JzZXJ2YWJsZTxBWFVwbG9hZFJlc3BvbnNlPFQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ic2VydmFibGUucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNhbmNlbFNpZ25hbCksXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4gdGhpcy5oYW5kbGVFdmVudChldmVudCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFdmVudChldmVudDogSHR0cEV2ZW50PGFueT4pOiBBWFVwbG9hZFJlc3BvbnNlPFQ+IHtcbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoMTAwICogZXZlbnQubG9hZGVkIC8gKHRoaXMudG90YWxGaWxlU2l6ZSB8fCBldmVudC50b3RhbCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHBlcmNlbnREb25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNUcmFuc2ZlcnJlZDogZXZlbnQubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlczogdGhpcy50b3RhbEZpbGVTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBBWFVwbG9hZFN0YXR1cy5VcGxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMTAwLFxuICAgICAgICAgICAgICAgICAgICBieXRlc1RyYW5zZmVycmVkOiB0aGlzLnRvdGFsRmlsZVNpemUsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXM6IHRoaXMudG90YWxGaWxlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBBWFVwbG9hZFN0YXR1cy5VcGxvYWRDb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBldmVudC5ib2R5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMCxcbiAgICAgICAgICAgICAgICAgICAgYnl0ZXNUcmFuc2ZlcnJlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlczogMCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBBWFVwbG9hZFN0YXR1cy5TdGFydGluZ1VwbG9hZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsU2lnbmFsLm5leHQoKTtcbiAgICAgICAgdGhpcy5jYW5jZWxTaWduYWwuY29tcGxldGUoKTtcbiAgICB9XG59XG4iXX0=
|
@@ -0,0 +1,192 @@
|
|
1
|
+
import { Subject, fromEvent, map as map$1, merge, startWith } from 'rxjs';
|
2
|
+
import { takeUntil, map } from 'rxjs/operators';
|
3
|
+
import { HttpEventType, HttpClient, HttpRequest } from '@angular/common/http';
|
4
|
+
import * as i0 from '@angular/core';
|
5
|
+
import { inject, signal, Injectable } from '@angular/core';
|
6
|
+
import { isBrowser } from '@acorex/core/platform';
|
7
|
+
|
8
|
+
var AXUploadStatus;
|
9
|
+
(function (AXUploadStatus) {
|
10
|
+
AXUploadStatus["Uploading"] = "Uploading...";
|
11
|
+
AXUploadStatus["UploadComplete"] = "Upload complete";
|
12
|
+
AXUploadStatus["StartingUpload"] = "Starting upload";
|
13
|
+
AXUploadStatus["UploadFailed"] = "Upload failed";
|
14
|
+
})(AXUploadStatus || (AXUploadStatus = {}));
|
15
|
+
var AXDownloadStatus;
|
16
|
+
(function (AXDownloadStatus) {
|
17
|
+
AXDownloadStatus["Downloading"] = "Downloading...";
|
18
|
+
AXDownloadStatus["DownloadComplete"] = "Download complete";
|
19
|
+
AXDownloadStatus["StartingDownload"] = "Starting download";
|
20
|
+
AXDownloadStatus["DownloadFailed"] = "Download failed";
|
21
|
+
})(AXDownloadStatus || (AXDownloadStatus = {}));
|
22
|
+
|
23
|
+
class AXUploadTask {
|
24
|
+
constructor(observable, totalFileSize) {
|
25
|
+
this.observable = observable;
|
26
|
+
this.totalFileSize = totalFileSize;
|
27
|
+
this.cancelSignal = new Subject();
|
28
|
+
}
|
29
|
+
get events() {
|
30
|
+
return this.observable.pipe(takeUntil(this.cancelSignal), map(event => this.handleEvent(event)));
|
31
|
+
}
|
32
|
+
handleEvent(event) {
|
33
|
+
switch (event.type) {
|
34
|
+
case HttpEventType.UploadProgress:
|
35
|
+
{
|
36
|
+
const percentDone = Math.round(100 * event.loaded / (this.totalFileSize || event.total));
|
37
|
+
return {
|
38
|
+
progress: percentDone,
|
39
|
+
bytesTransferred: event.loaded,
|
40
|
+
totalBytes: this.totalFileSize,
|
41
|
+
status: AXUploadStatus.Uploading
|
42
|
+
};
|
43
|
+
}
|
44
|
+
case HttpEventType.Response:
|
45
|
+
return {
|
46
|
+
progress: 100,
|
47
|
+
bytesTransferred: this.totalFileSize,
|
48
|
+
totalBytes: this.totalFileSize,
|
49
|
+
status: AXUploadStatus.UploadComplete,
|
50
|
+
result: event.body
|
51
|
+
};
|
52
|
+
default:
|
53
|
+
return {
|
54
|
+
progress: 0,
|
55
|
+
bytesTransferred: 0,
|
56
|
+
totalBytes: 0,
|
57
|
+
status: AXUploadStatus.StartingUpload
|
58
|
+
};
|
59
|
+
}
|
60
|
+
}
|
61
|
+
cancel() {
|
62
|
+
this.cancelSignal.next();
|
63
|
+
this.cancelSignal.complete();
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
class AXDownloadTask {
|
68
|
+
constructor(observable) {
|
69
|
+
this.observable = observable;
|
70
|
+
this.cancelSignal = new Subject();
|
71
|
+
}
|
72
|
+
get events() {
|
73
|
+
return this.observable.pipe(takeUntil(this.cancelSignal), map(event => this.handleEvent(event)));
|
74
|
+
}
|
75
|
+
handleEvent(event) {
|
76
|
+
switch (event.type) {
|
77
|
+
case HttpEventType.DownloadProgress:
|
78
|
+
{
|
79
|
+
const percentDone = Math.round(100 * event.loaded / (event.total ?? event.loaded));
|
80
|
+
return {
|
81
|
+
progress: percentDone,
|
82
|
+
bytesReceived: event.loaded,
|
83
|
+
totalBytes: event.total ?? 0,
|
84
|
+
status: AXDownloadStatus.Downloading
|
85
|
+
};
|
86
|
+
}
|
87
|
+
case HttpEventType.Response:
|
88
|
+
return {
|
89
|
+
progress: 100,
|
90
|
+
bytesReceived: event.body.size,
|
91
|
+
totalBytes: event.body.size,
|
92
|
+
status: AXDownloadStatus.DownloadComplete,
|
93
|
+
data: event.body
|
94
|
+
};
|
95
|
+
default:
|
96
|
+
return {
|
97
|
+
progress: 0,
|
98
|
+
bytesReceived: 0,
|
99
|
+
totalBytes: 0,
|
100
|
+
status: AXDownloadStatus.StartingDownload
|
101
|
+
};
|
102
|
+
}
|
103
|
+
}
|
104
|
+
cancel() {
|
105
|
+
this.cancelSignal.next();
|
106
|
+
this.cancelSignal.complete();
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
class AXNetworkService {
|
111
|
+
constructor() {
|
112
|
+
this.http = inject(HttpClient);
|
113
|
+
this._status = signal(true);
|
114
|
+
this.status = this._status.asReadonly();
|
115
|
+
if (isBrowser()) {
|
116
|
+
// Only subscribe to these events if on the browser platform
|
117
|
+
const onlineEvent = fromEvent(window, 'online').pipe(map$1(() => true));
|
118
|
+
const offlineEvent = fromEvent(window, 'offline').pipe(map$1(() => false));
|
119
|
+
merge(onlineEvent, offlineEvent).pipe(startWith(navigator.onLine)).subscribe(c => {
|
120
|
+
this._status.set(c);
|
121
|
+
});
|
122
|
+
}
|
123
|
+
}
|
124
|
+
// Unified method handling both types of inputs
|
125
|
+
upload(arg1, arg2) {
|
126
|
+
let request;
|
127
|
+
let totalFilesSize = 0;
|
128
|
+
if (typeof arg1 === 'string' && arg2 instanceof FormData) {
|
129
|
+
// Calculate total file size
|
130
|
+
arg2.forEach((value) => {
|
131
|
+
if (value instanceof File) {
|
132
|
+
totalFilesSize += value.size;
|
133
|
+
}
|
134
|
+
});
|
135
|
+
request = new HttpRequest('POST', arg1, arg2, {
|
136
|
+
reportProgress: true,
|
137
|
+
responseType: 'json'
|
138
|
+
});
|
139
|
+
}
|
140
|
+
else if (arg1 instanceof HttpRequest) {
|
141
|
+
if (arg1.body instanceof FormData) {
|
142
|
+
// Calculate total file size
|
143
|
+
arg1.body.forEach((value) => {
|
144
|
+
if (value instanceof File) {
|
145
|
+
totalFilesSize += value.size;
|
146
|
+
}
|
147
|
+
});
|
148
|
+
}
|
149
|
+
request = arg1.clone({
|
150
|
+
reportProgress: true,
|
151
|
+
responseType: arg1.responseType || 'json'
|
152
|
+
});
|
153
|
+
}
|
154
|
+
else {
|
155
|
+
throw new Error("Invalid arguments for upload method.");
|
156
|
+
}
|
157
|
+
const events = this.http.request(request);
|
158
|
+
return new AXUploadTask(events, totalFilesSize);
|
159
|
+
}
|
160
|
+
// Unified method handling both types of inputs
|
161
|
+
download(arg) {
|
162
|
+
let request;
|
163
|
+
if (typeof arg === 'string') {
|
164
|
+
request = new HttpRequest('GET', arg, {
|
165
|
+
reportProgress: true,
|
166
|
+
responseType: 'blob',
|
167
|
+
});
|
168
|
+
}
|
169
|
+
else {
|
170
|
+
request = new HttpRequest(arg.method, arg.url, arg.body, {
|
171
|
+
...arg,
|
172
|
+
reportProgress: true,
|
173
|
+
responseType: 'blob',
|
174
|
+
});
|
175
|
+
}
|
176
|
+
const events = this.http.request(request);
|
177
|
+
return new AXDownloadTask(events);
|
178
|
+
}
|
179
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXNetworkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
180
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXNetworkService, providedIn: 'root' }); }
|
181
|
+
}
|
182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXNetworkService, decorators: [{
|
183
|
+
type: Injectable,
|
184
|
+
args: [{ providedIn: 'root' }]
|
185
|
+
}], ctorParameters: () => [] });
|
186
|
+
|
187
|
+
/**
|
188
|
+
* Generated bundle index. Do not edit.
|
189
|
+
*/
|
190
|
+
|
191
|
+
export { AXDownloadStatus, AXDownloadTask, AXNetworkService, AXUploadStatus, AXUploadTask };
|
192
|
+
//# sourceMappingURL=acorex-core-network.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"acorex-core-network.mjs","sources":["../../../../libs/core/network/src/lib/network.types.ts","../../../../libs/core/network/src/lib/upload-task.ts","../../../../libs/core/network/src/lib/download-task.ts","../../../../libs/core/network/src/lib/network.service.ts","../../../../libs/core/network/src/acorex-core-network.ts"],"sourcesContent":["export enum AXUploadStatus {\n Uploading = \"Uploading...\",\n UploadComplete = \"Upload complete\",\n StartingUpload = \"Starting upload\",\n UploadFailed = \"Upload failed\"\n}\n\nexport type AXUploadResponse<T> = {\n progress: number;\n bytesTransferred: number;\n totalBytes: number;\n status: AXUploadStatus;\n result?: T;\n};\n\nexport enum AXDownloadStatus {\n Downloading = \"Downloading...\",\n DownloadComplete = \"Download complete\",\n StartingDownload = \"Starting download\",\n DownloadFailed = \"Download failed\"\n}\n\nexport type AXDownloadResponse = {\n progress: number;\n bytesReceived: number;\n totalBytes: number;\n status: AXDownloadStatus;\n data?: Blob; // or any appropriate type based on your specific use case\n};\n","import { Observable, Subject } from 'rxjs';\nimport { takeUntil, map } from 'rxjs/operators';\nimport { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { AXUploadResponse, AXUploadStatus } from './network.types'; // Ensure correct import path\n\nexport class AXUploadTask<T> {\n private cancelSignal = new Subject<void>();\n\n constructor(private observable: Observable<HttpEvent<T>>, private totalFileSize: number) { }\n\n get events(): Observable<AXUploadResponse<T>> {\n return this.observable.pipe(\n takeUntil(this.cancelSignal),\n map(event => this.handleEvent(event))\n );\n }\n\n private handleEvent(event: HttpEvent<any>): AXUploadResponse<T> {\n switch (event.type) {\n case HttpEventType.UploadProgress:\n {\n const percentDone = Math.round(100 * event.loaded / (this.totalFileSize || event.total));\n return {\n progress: percentDone,\n bytesTransferred: event.loaded,\n totalBytes: this.totalFileSize,\n status: AXUploadStatus.Uploading\n };\n }\n\n case HttpEventType.Response:\n return {\n progress: 100,\n bytesTransferred: this.totalFileSize,\n totalBytes: this.totalFileSize,\n status: AXUploadStatus.UploadComplete,\n result: event.body\n };\n\n default:\n return {\n progress: 0,\n bytesTransferred: 0,\n totalBytes: 0,\n status: AXUploadStatus.StartingUpload\n };\n }\n }\n\n cancel() {\n this.cancelSignal.next();\n this.cancelSignal.complete();\n }\n}\n","import { Observable, Subject } from 'rxjs';\nimport { takeUntil, map } from 'rxjs/operators';\nimport { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { AXDownloadResponse, AXDownloadStatus } from './network.types'; // Ensure correct import path\n\nexport class AXDownloadTask {\n private cancelSignal = new Subject<void>();\n\n constructor(private observable: Observable<HttpEvent<any>>) { }\n\n get events(): Observable<AXDownloadResponse> {\n return this.observable.pipe(\n takeUntil(this.cancelSignal),\n map(event => this.handleEvent(event)),\n );\n }\n\n private handleEvent(event: HttpEvent<any>): AXDownloadResponse {\n switch (event.type) {\n case HttpEventType.DownloadProgress:\n {\n const percentDone = Math.round(100 * event.loaded / (event.total ?? event.loaded));\n return {\n progress: percentDone,\n bytesReceived: event.loaded,\n totalBytes: event.total ?? 0,\n status: AXDownloadStatus.Downloading\n };\n }\n\n case HttpEventType.Response:\n return {\n progress: 100,\n bytesReceived: event.body.size,\n totalBytes: event.body.size,\n status: AXDownloadStatus.DownloadComplete,\n data: event.body\n };\n\n default:\n return {\n progress: 0,\n bytesReceived: 0,\n totalBytes: 0,\n status: AXDownloadStatus.StartingDownload\n };\n }\n }\n\n cancel() {\n this.cancelSignal.next();\n this.cancelSignal.complete();\n }\n}\n","import { HttpRequest, HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { AXDownloadTask } from './download-task';\nimport { AXUploadTask } from './upload-task';\nimport { fromEvent, map, merge, startWith } from 'rxjs';\nimport { isBrowser } from '@acorex/core/platform';\n\n\n\n@Injectable({ providedIn: 'root' })\nexport class AXNetworkService {\n\n private http = inject(HttpClient);\n\n private _status = signal<boolean>(true);\n\n public readonly status = this._status.asReadonly();\n\n constructor() {\n if (isBrowser()) {\n // Only subscribe to these events if on the browser platform\n const onlineEvent = fromEvent(window, 'online').pipe(map(() => true));\n const offlineEvent = fromEvent(window, 'offline').pipe(map(() => false));\n\n merge(onlineEvent, offlineEvent).pipe(\n startWith(navigator.onLine)\n ).subscribe(c => {\n this._status.set(c);\n });\n }\n }\n\n // Overload signatures\n upload<T>(url: string, formData: FormData): AXUploadTask<T>;\n upload<T>(request: HttpRequest<any>): AXUploadTask<T>;\n\n // Unified method handling both types of inputs\n upload<T>(arg1: string | HttpRequest<any>, arg2?: FormData): AXUploadTask<T> {\n let request: HttpRequest<any>;\n let totalFilesSize = 0;\n\n if (typeof arg1 === 'string' && arg2 instanceof FormData) {\n // Calculate total file size\n arg2.forEach((value) => {\n if (value instanceof File) {\n totalFilesSize += value.size;\n }\n });\n request = new HttpRequest('POST', arg1, arg2, {\n reportProgress: true,\n responseType: 'json'\n });\n } else if (arg1 instanceof HttpRequest) {\n if (arg1.body instanceof FormData) {\n // Calculate total file size\n arg1.body.forEach((value) => {\n if (value instanceof File) {\n totalFilesSize += value.size;\n }\n });\n }\n request = arg1.clone({\n reportProgress: true,\n responseType: arg1.responseType || 'json'\n });\n } else {\n throw new Error(\"Invalid arguments for upload method.\");\n }\n\n const events = this.http.request<T>(request);\n return new AXUploadTask<T>(events, totalFilesSize);\n }\n\n\n\n // Overload signatures\n download(url: string): AXDownloadTask;\n download(request: HttpRequest<Blob>): AXDownloadTask;\n\n // Unified method handling both types of inputs\n download(arg: string | HttpRequest<Blob>): AXDownloadTask {\n let request: HttpRequest<Blob>;\n\n if (typeof arg === 'string') {\n request = new HttpRequest('GET', arg, {\n reportProgress: true,\n responseType: 'blob',\n });\n } else {\n request = new HttpRequest(arg.method, arg.url, arg.body, {\n ...arg,\n reportProgress: true,\n responseType: 'blob',\n });\n }\n\n const events = this.http.request<Blob>(request);\n return new AXDownloadTask(events);\n }\n\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Observable } from 'rxjs';
|
2
|
+
import { HttpEvent } from '@angular/common/http';
|
3
|
+
import { AXDownloadResponse } from './network.types';
|
4
|
+
export declare class AXDownloadTask {
|
5
|
+
private observable;
|
6
|
+
private cancelSignal;
|
7
|
+
constructor(observable: Observable<HttpEvent<any>>);
|
8
|
+
get events(): Observable<AXDownloadResponse>;
|
9
|
+
private handleEvent;
|
10
|
+
cancel(): void;
|
11
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { HttpRequest } from '@angular/common/http';
|
2
|
+
import { AXDownloadTask } from './download-task';
|
3
|
+
import { AXUploadTask } from './upload-task';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export declare class AXNetworkService {
|
6
|
+
private http;
|
7
|
+
private _status;
|
8
|
+
readonly status: import("@angular/core").Signal<boolean>;
|
9
|
+
constructor();
|
10
|
+
upload<T>(url: string, formData: FormData): AXUploadTask<T>;
|
11
|
+
upload<T>(request: HttpRequest<any>): AXUploadTask<T>;
|
12
|
+
download(url: string): AXDownloadTask;
|
13
|
+
download(request: HttpRequest<Blob>): AXDownloadTask;
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXNetworkService, never>;
|
15
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXNetworkService>;
|
16
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
export declare enum AXUploadStatus {
|
2
|
+
Uploading = "Uploading...",
|
3
|
+
UploadComplete = "Upload complete",
|
4
|
+
StartingUpload = "Starting upload",
|
5
|
+
UploadFailed = "Upload failed"
|
6
|
+
}
|
7
|
+
export type AXUploadResponse<T> = {
|
8
|
+
progress: number;
|
9
|
+
bytesTransferred: number;
|
10
|
+
totalBytes: number;
|
11
|
+
status: AXUploadStatus;
|
12
|
+
result?: T;
|
13
|
+
};
|
14
|
+
export declare enum AXDownloadStatus {
|
15
|
+
Downloading = "Downloading...",
|
16
|
+
DownloadComplete = "Download complete",
|
17
|
+
StartingDownload = "Starting download",
|
18
|
+
DownloadFailed = "Download failed"
|
19
|
+
}
|
20
|
+
export type AXDownloadResponse = {
|
21
|
+
progress: number;
|
22
|
+
bytesReceived: number;
|
23
|
+
totalBytes: number;
|
24
|
+
status: AXDownloadStatus;
|
25
|
+
data?: Blob;
|
26
|
+
};
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Observable } from 'rxjs';
|
2
|
+
import { HttpEvent } from '@angular/common/http';
|
3
|
+
import { AXUploadResponse } from './network.types';
|
4
|
+
export declare class AXUploadTask<T> {
|
5
|
+
private observable;
|
6
|
+
private totalFileSize;
|
7
|
+
private cancelSignal;
|
8
|
+
constructor(observable: Observable<HttpEvent<T>>, totalFileSize: number);
|
9
|
+
get events(): Observable<AXUploadResponse<T>>;
|
10
|
+
private handleEvent;
|
11
|
+
cancel(): void;
|
12
|
+
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@acorex/core",
|
3
|
-
"version": "18.5.
|
3
|
+
"version": "18.5.15",
|
4
4
|
"peerDependencies": {
|
5
5
|
"@angular/common": ">=18.0.0",
|
6
6
|
"@angular/core": ">=18.0.0",
|
@@ -38,30 +38,30 @@
|
|
38
38
|
"esm": "./esm2022/file/acorex-core-file.mjs",
|
39
39
|
"default": "./fesm2022/acorex-core-file.mjs"
|
40
40
|
},
|
41
|
-
"./format": {
|
42
|
-
"types": "./format/index.d.ts",
|
43
|
-
"esm2022": "./esm2022/format/acorex-core-format.mjs",
|
44
|
-
"esm": "./esm2022/format/acorex-core-format.mjs",
|
45
|
-
"default": "./fesm2022/acorex-core-format.mjs"
|
46
|
-
},
|
47
41
|
"./events": {
|
48
42
|
"types": "./events/index.d.ts",
|
49
43
|
"esm2022": "./esm2022/events/acorex-core-events.mjs",
|
50
44
|
"esm": "./esm2022/events/acorex-core-events.mjs",
|
51
45
|
"default": "./fesm2022/acorex-core-events.mjs"
|
52
46
|
},
|
53
|
-
"./date-time": {
|
54
|
-
"types": "./date-time/index.d.ts",
|
55
|
-
"esm2022": "./esm2022/date-time/acorex-core-date-time.mjs",
|
56
|
-
"esm": "./esm2022/date-time/acorex-core-date-time.mjs",
|
57
|
-
"default": "./fesm2022/acorex-core-date-time.mjs"
|
58
|
-
},
|
59
47
|
"./config": {
|
60
48
|
"types": "./config/index.d.ts",
|
61
49
|
"esm2022": "./esm2022/config/acorex-core-config.mjs",
|
62
50
|
"esm": "./esm2022/config/acorex-core-config.mjs",
|
63
51
|
"default": "./fesm2022/acorex-core-config.mjs"
|
64
52
|
},
|
53
|
+
"./format": {
|
54
|
+
"types": "./format/index.d.ts",
|
55
|
+
"esm2022": "./esm2022/format/acorex-core-format.mjs",
|
56
|
+
"esm": "./esm2022/format/acorex-core-format.mjs",
|
57
|
+
"default": "./fesm2022/acorex-core-format.mjs"
|
58
|
+
},
|
59
|
+
"./date-time": {
|
60
|
+
"types": "./date-time/index.d.ts",
|
61
|
+
"esm2022": "./esm2022/date-time/acorex-core-date-time.mjs",
|
62
|
+
"esm": "./esm2022/date-time/acorex-core-date-time.mjs",
|
63
|
+
"default": "./fesm2022/acorex-core-date-time.mjs"
|
64
|
+
},
|
65
65
|
"./image": {
|
66
66
|
"types": "./image/index.d.ts",
|
67
67
|
"esm2022": "./esm2022/image/acorex-core-image.mjs",
|
@@ -74,6 +74,12 @@
|
|
74
74
|
"esm": "./esm2022/memorize/acorex-core-memorize.mjs",
|
75
75
|
"default": "./fesm2022/acorex-core-memorize.mjs"
|
76
76
|
},
|
77
|
+
"./network": {
|
78
|
+
"types": "./network/index.d.ts",
|
79
|
+
"esm2022": "./esm2022/network/acorex-core-network.mjs",
|
80
|
+
"esm": "./esm2022/network/acorex-core-network.mjs",
|
81
|
+
"default": "./fesm2022/acorex-core-network.mjs"
|
82
|
+
},
|
77
83
|
"./pipes": {
|
78
84
|
"types": "./pipes/index.d.ts",
|
79
85
|
"esm2022": "./esm2022/pipes/acorex-core-pipes.mjs",
|