@dotglitch/ngx-common 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/components/dynamic-html/dynamic-html.component.d.ts +15 -0
- package/components/dynamic-html/dynamic-html.module.d.ts +10 -0
- package/components/dynamic-html/dynamic-html.service.d.ts +18 -0
- package/components/dynamic-html/types.d.ts +12 -0
- package/components/lazy-loader/lazy-loader.component.d.ts +146 -0
- package/components/lazy-loader/lazy-loader.module.d.ts +10 -0
- package/components/lazy-loader/lazy-loader.service.d.ts +71 -0
- package/components/lazy-loader/types.d.ts +142 -0
- package/components/menu/menu.component.d.ts +52 -0
- package/components/tooltip/tooltip.component.d.ts +35 -0
- package/directives/menu.directive.d.ts +27 -0
- package/directives/tooltip.directive.d.ts +26 -0
- package/directives/utils.d.ts +8 -0
- package/esm2020/components/dynamic-html/dynamic-html.component.mjs +43 -0
- package/esm2020/components/dynamic-html/dynamic-html.module.mjs +27 -0
- package/esm2020/components/dynamic-html/dynamic-html.service.mjs +66 -0
- package/esm2020/components/dynamic-html/types.mjs +7 -0
- package/esm2020/components/lazy-loader/lazy-loader.component.mjs +360 -0
- package/esm2020/components/lazy-loader/lazy-loader.module.mjs +29 -0
- package/esm2020/components/lazy-loader/lazy-loader.service.mjs +215 -0
- package/esm2020/components/lazy-loader/types.mjs +26 -0
- package/esm2020/components/menu/menu.component.mjs +316 -0
- package/esm2020/components/tooltip/tooltip.component.mjs +135 -0
- package/esm2020/directives/menu.directive.mjs +112 -0
- package/esm2020/directives/tooltip.directive.mjs +92 -0
- package/esm2020/directives/utils.mjs +120 -0
- package/esm2020/dotglitch-ngx-common.mjs +5 -0
- package/esm2020/pipes/html-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/resource-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/script-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/style-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/url-bypass.pipe.mjs +27 -0
- package/esm2020/public-api.mjs +39 -0
- package/esm2020/services/dependency.service.mjs +55 -0
- package/esm2020/services/dialog.service.mjs +66 -0
- package/esm2020/services/fetch.service.mjs +71 -0
- package/esm2020/services/keyboard.service.mjs +128 -0
- package/esm2020/types/menu.mjs +2 -0
- package/esm2020/types/popup.mjs +2 -0
- package/esm2020/utils/index.mjs +39 -0
- package/fesm2015/dotglitch-ngx-common.mjs +1997 -0
- package/fesm2015/dotglitch-ngx-common.mjs.map +1 -0
- package/fesm2020/dotglitch-ngx-common.mjs +1977 -0
- package/fesm2020/dotglitch-ngx-common.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +60 -0
- package/pipes/html-bypass.pipe.d.ts +16 -0
- package/pipes/resource-bypass.pipe.d.ts +16 -0
- package/pipes/script-bypass.pipe.d.ts +16 -0
- package/pipes/style-bypass.pipe.d.ts +16 -0
- package/pipes/url-bypass.pipe.d.ts +16 -0
- package/public-api.d.ts +34 -0
- package/services/dependency.service.d.ts +19 -0
- package/services/dialog.service.d.ts +41 -0
- package/services/fetch.service.d.ts +28 -0
- package/services/keyboard.service.d.ts +79 -0
- package/types/menu.d.ts +90 -0
- package/types/popup.d.ts +27 -0
- package/utils/index.d.ts +19 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Injectable, Inject } from '@angular/core';
|
|
3
|
+
import { sleep } from '../utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const SCRIPT_INIT_TIMEOUT = 500; // ms
|
|
6
|
+
/**
|
|
7
|
+
* Service that installs CSS/JS dynamically
|
|
8
|
+
*/
|
|
9
|
+
export class DependencyService {
|
|
10
|
+
constructor(document) {
|
|
11
|
+
this.document = document;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Install a Javascript file into the webpage on-demand
|
|
15
|
+
* @param id Unique identifier for the JS script
|
|
16
|
+
* @param src URL of the script
|
|
17
|
+
* @param globalkey A global object the script will provide.
|
|
18
|
+
* Providing this will ensure a promise only resolves after the
|
|
19
|
+
* specified global object is provided, with a timeout of 500ms
|
|
20
|
+
*/
|
|
21
|
+
loadScript(id, src, globalkey = null) {
|
|
22
|
+
return new Promise((res, rej) => {
|
|
23
|
+
if (this.document.getElementById(id))
|
|
24
|
+
return res();
|
|
25
|
+
const script = this.document.createElement('script');
|
|
26
|
+
script.id = id;
|
|
27
|
+
script.setAttribute("async", '');
|
|
28
|
+
script.setAttribute("src", src);
|
|
29
|
+
script.onload = async () => {
|
|
30
|
+
if (typeof globalkey == "string") {
|
|
31
|
+
let i = 0;
|
|
32
|
+
for (; !window[globalkey] && i < SCRIPT_INIT_TIMEOUT; i += 10)
|
|
33
|
+
await sleep(10);
|
|
34
|
+
if (i >= SCRIPT_INIT_TIMEOUT) {
|
|
35
|
+
return rej(new Error("Timed out waiting for script to self-initialize."));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
res();
|
|
39
|
+
};
|
|
40
|
+
this.document.body.appendChild(script);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
DependencyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DependencyService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
45
|
+
DependencyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DependencyService, providedIn: 'root' });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DependencyService, decorators: [{
|
|
47
|
+
type: Injectable,
|
|
48
|
+
args: [{
|
|
49
|
+
providedIn: 'root'
|
|
50
|
+
}]
|
|
51
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
52
|
+
type: Inject,
|
|
53
|
+
args: [DOCUMENT]
|
|
54
|
+
}] }]; } });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9zZXJ2aWNlcy9kZXBlbmRlbmN5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRWpDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSztBQUV0Qzs7R0FFRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFFMUIsWUFDOEIsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUM1QyxDQUFDO0lBRUw7Ozs7Ozs7T0FPRztJQUNILFVBQVUsQ0FBQyxFQUFVLEVBQUUsR0FBVyxFQUFFLFlBQW9CLElBQUk7UUFDeEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBRW5ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBRWYsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDdkIsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFVixPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBRTt3QkFDekQsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRXBCLElBQUksQ0FBQyxJQUFJLG1CQUFtQixFQUFFO3dCQUMxQixPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUM7cUJBQzdFO2lCQUNKO2dCQUVELEdBQUcsRUFBRSxDQUFDO1lBQ1YsQ0FBQyxDQUFBO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7OEdBekNRLGlCQUFpQixrQkFHZCxRQUFRO2tIQUhYLGlCQUFpQixjQUZkLE1BQU07MkZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBSVEsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgU0NSSVBUX0lOSVRfVElNRU9VVCA9IDUwMDsgLy8gbXNcblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgaW5zdGFsbHMgQ1NTL0pTIGR5bmFtaWNhbGx5XG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGVwZW5kZW5jeVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEluc3RhbGwgYSBKYXZhc2NyaXB0IGZpbGUgaW50byB0aGUgd2VicGFnZSBvbi1kZW1hbmRcbiAgICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBKUyBzY3JpcHRcbiAgICAgKiBAcGFyYW0gc3JjIFVSTCBvZiB0aGUgc2NyaXB0XG4gICAgICogQHBhcmFtIGdsb2JhbGtleSBBIGdsb2JhbCBvYmplY3QgdGhlIHNjcmlwdCB3aWxsIHByb3ZpZGUuXG4gICAgICogIFByb3ZpZGluZyB0aGlzIHdpbGwgZW5zdXJlIGEgcHJvbWlzZSBvbmx5IHJlc29sdmVzIGFmdGVyIHRoZVxuICAgICAqICBzcGVjaWZpZWQgZ2xvYmFsIG9iamVjdCBpcyBwcm92aWRlZCwgd2l0aCBhIHRpbWVvdXQgb2YgNTAwbXNcbiAgICAgKi9cbiAgICBsb2FkU2NyaXB0KGlkOiBzdHJpbmcsIHNyYzogc3RyaW5nLCBnbG9iYWxrZXk6IHN0cmluZyA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm4gcmVzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICBzY3JpcHQuaWQgPSBpZDtcblxuICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImFzeW5jXCIsICcnKTtcbiAgICAgICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcblxuICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGdsb2JhbGtleSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgIXdpbmRvd1tnbG9iYWxrZXldICYmIGkgPCBTQ1JJUFRfSU5JVF9USU1FT1VUOyBpICs9IDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoMTApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID49IFNDUklQVF9JTklUX1RJTUVPVVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWoobmV3IEVycm9yKFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNjcmlwdCB0byBzZWxmLWluaXRpYWxpemUuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBsb2FkU3R5bGVzaGVldChpZDogc3RyaW5nLCBocmVmOiBzdHJpbmcpIHtcbiAgICAvLyAgICAgbGV0IHRoZW1lTGluayA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIGFzIEhUTUxMaW5rRWxlbWVudDtcbiAgICAvLyAgICAgaWYgKHRoZW1lTGluaykge1xuICAgIC8vICAgICAgICAgdGhlbWVMaW5rLmhyZWYgPSBocmVmO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGVsc2Uge1xuICAgIC8vICAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAvLyAgICAgICAgIHN0eWxlLmlkID0gaWQ7XG4gICAgLy8gICAgICAgICBzdHlsZS5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgLy8gICAgICAgICBzdHlsZS5ocmVmID0gaHJlZjtcblxuICAgIC8vICAgICAgICAgY29uc3QgaGVhZCA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblxuICAgIC8vICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG59XG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Logger } from '../utils';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/dialog";
|
|
5
|
+
import * as i2 from "../public-api";
|
|
6
|
+
const { log, warn, err } = Logger("DialogService", "#607d8b");
|
|
7
|
+
export class DialogService {
|
|
8
|
+
constructor(dialog, lazyLoader) {
|
|
9
|
+
this.dialog = dialog;
|
|
10
|
+
this.lazyLoader = lazyLoader;
|
|
11
|
+
this.dialogs = [];
|
|
12
|
+
}
|
|
13
|
+
open(name, opts = {}) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const registration = this.lazyLoader.resolveRegistrationEntry(name, opts.group || "default");
|
|
16
|
+
if (!registration)
|
|
17
|
+
return reject(new Error("Cannot open dialog for " + name + ". Could not find in registry."));
|
|
18
|
+
const args = {
|
|
19
|
+
closeOnNavigation: true,
|
|
20
|
+
restoreFocus: true,
|
|
21
|
+
width: registration['width'],
|
|
22
|
+
height: registration['height'],
|
|
23
|
+
...opts,
|
|
24
|
+
data: {
|
|
25
|
+
id: name,
|
|
26
|
+
inputs: opts.inputs || {},
|
|
27
|
+
outputs: opts.outputs || {},
|
|
28
|
+
group: opts.group
|
|
29
|
+
},
|
|
30
|
+
panelClass: [
|
|
31
|
+
"dialog-" + name,
|
|
32
|
+
...(Array.isArray(opts.panelClass) ? opts.panelClass : [opts.panelClass] || [])
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
// TODO:
|
|
36
|
+
let dialog = this.dialog.open(undefined, args);
|
|
37
|
+
dialog['idx'] = name;
|
|
38
|
+
this.dialogs.push(dialog);
|
|
39
|
+
dialog.afterClosed().subscribe(result => {
|
|
40
|
+
log("Dialog closed " + name, result);
|
|
41
|
+
resolve(result);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Close all dialogs matching the given name
|
|
46
|
+
close(name) {
|
|
47
|
+
const dialogs = this.dialogs.filter(d => d['idx'] == name);
|
|
48
|
+
dialogs.forEach(dialog => dialog.close());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Method to close _all_ dialogs.
|
|
52
|
+
* Should be used sparingly.
|
|
53
|
+
*/
|
|
54
|
+
clearDialog() {
|
|
55
|
+
this.dialogs.forEach(dialog => dialog.close());
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DialogService, deps: [{ token: i1.MatDialog }, { token: i2.LazyLoaderService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
59
|
+
DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DialogService, providedIn: 'root' });
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DialogService, decorators: [{
|
|
61
|
+
type: Injectable,
|
|
62
|
+
args: [{
|
|
63
|
+
providedIn: 'root'
|
|
64
|
+
}]
|
|
65
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.LazyLoaderService }]; } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQzs7OztBQUdsQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBMEI5RCxNQUFNLE9BQU8sYUFBYTtJQUl0QixZQUNZLE1BQWlCLEVBQ2pCLFVBQTZCO1FBRDdCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFKakMsWUFBTyxHQUFpQyxFQUFFLENBQUM7SUFNbkQsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFZLEVBQUUsT0FBc0IsRUFBRTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBRW5DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLFlBQVk7Z0JBQ2IsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMseUJBQXlCLEdBQUcsSUFBSSxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQztZQUdqRyxNQUFNLElBQUksR0FBRztnQkFDVCxpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLE1BQU0sRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUM5QixHQUFHLElBQUk7Z0JBQ1AsSUFBSSxFQUFFO29CQUNGLEVBQUUsRUFBRSxJQUFJO29CQUNSLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUU7b0JBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUU7b0JBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztpQkFDcEI7Z0JBQ0QsVUFBVSxFQUFFO29CQUNSLFNBQVMsR0FBRyxJQUFJO29CQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDbEY7YUFDSixDQUFDO1lBRUYsUUFBUTtZQUNSLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUvQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTFCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3BDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxLQUFLLENBQUMsSUFBWTtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzNELE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7MEdBN0RRLGFBQWE7OEdBQWIsYUFBYSxjQUZWLE1BQU07MkZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExhenlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5cbmNvbnN0IHsgbG9nLCB3YXJuLCBlcnIgfSA9IExvZ2dlcihcIkRpYWxvZ1NlcnZpY2VcIiwgXCIjNjA3ZDhiXCIpO1xuXG5leHBvcnQgdHlwZSBEaWFsb2dPcHRpb25zID0gUGFydGlhbDxPbWl0PE1hdERpYWxvZ0NvbmZpZzxhbnk+LCAnZGF0YSc+ICYge1xuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgZ3JvdXA6IHN0cmluZyxcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcHJvcGVydGllcyB0byBiZSBwcm92aWRlZCB0byBASW5wdXQoKSBpbmplY3RvcnNcbiAgICAgKi9cbiAgICBpbnB1dHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHByb3ZpZGVkIHRvIEBJbnB1dCgpIGluamVjdG9yc1xuICAgICAqL1xuICAgIG91dHB1dHM6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfSxcbiAgICAvKipcbiAgICAgKiBDb250ZXh0IGluIHdoaWNoIHRvIGV4ZWN1dGUgY2FsbGJhY2tzIGZyb20gdGhlIGBvdXRwdXRzYCBwcm9wZXJ0eSB2aWFcbiAgICAgKiBAT3V0cHV0KCkgZXZlbnQgRW1pdHRlcnNcbiAgICAgKi9cbiAgICBwYXJlbnQ6IGFueVxufT47XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XG5cbiAgICBwcml2YXRlIGRpYWxvZ3M6IE1hdERpYWxvZ1JlZjx1bmtub3duLCBhbnk+W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIGxhenlMb2FkZXI6IExhenlMb2FkZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgb3BlbihuYW1lOiBzdHJpbmcsIG9wdHM6IERpYWxvZ09wdGlvbnMgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMubGF6eUxvYWRlci5yZXNvbHZlUmVnaXN0cmF0aW9uRW50cnkobmFtZSwgb3B0cy5ncm91cCB8fCBcImRlZmF1bHRcIik7XG4gICAgICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbilcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIkNhbm5vdCBvcGVuIGRpYWxvZyBmb3IgXCIgKyBuYW1lICsgXCIuIENvdWxkIG5vdCBmaW5kIGluIHJlZ2lzdHJ5LlwiKSk7XG5cblxuICAgICAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlZ2lzdHJhdGlvblsnd2lkdGgnXSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlZ2lzdHJhdGlvblsnaGVpZ2h0J10sXG4gICAgICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IG9wdHMuaW5wdXRzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRzOiBvcHRzLm91dHB1dHMgfHwge30sXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwOiBvcHRzLmdyb3VwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiZGlhbG9nLVwiICsgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkob3B0cy5wYW5lbENsYXNzKSA/IG9wdHMucGFuZWxDbGFzcyA6IFtvcHRzLnBhbmVsQ2xhc3NdIHx8IFtdKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFRPRE86XG4gICAgICAgICAgICBsZXQgZGlhbG9nID0gdGhpcy5kaWFsb2cub3Blbih1bmRlZmluZWQsIGFyZ3MpO1xuXG4gICAgICAgICAgICBkaWFsb2dbJ2lkeCddID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9ncy5wdXNoKGRpYWxvZyk7XG5cbiAgICAgICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGxvZyhcIkRpYWxvZyBjbG9zZWQgXCIgKyBuYW1lLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBhbGwgZGlhbG9ncyBtYXRjaGluZyB0aGUgZ2l2ZW4gbmFtZVxuICAgIGNsb3NlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBkaWFsb2dzID0gdGhpcy5kaWFsb2dzLmZpbHRlcihkID0+IGRbJ2lkeCddID09IG5hbWUpO1xuICAgICAgICBkaWFsb2dzLmZvckVhY2goZGlhbG9nID0+IGRpYWxvZy5jbG9zZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdG8gY2xvc2UgX2FsbF8gZGlhbG9ncy5cbiAgICAgKiBTaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkuXG4gICAgICovXG4gICAgY2xlYXJEaWFsb2coKSB7XG4gICAgICAgIHRoaXMuZGlhbG9ncy5mb3JFYWNoKGRpYWxvZyA9PiBkaWFsb2cuY2xvc2UoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiBhIGNvbmZpcm1hdGlvbiBkaWFsb2cuIFdpbGwgcmVqZWN0IGlmIGEgY2FuY2VsIG9jY3Vycy5cbiAgICAgKiBAcGFyYW0gdGl0bGUgdGl0bGUgb2YgdGhlIGRpYWxvZ1xuICAgICAqIEBwYXJhbSBtZXNzYWdlIG1haW4gcXVlc3Rpb24gdGhhdCBhIHVzZXIgbmVlZHMgdG8gY29uZmlybS9kZW55XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICAvLyBjb25maXJtQWN0aW9uKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgLy8gICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xuICAgIC8vICAgICAgICAgICAgIG1heEhlaWdodDogXCI5MHZoXCIsXG4gICAgLy8gICAgICAgICAgICAgbWF4V2lkdGg6IFwiOTB2d1wiLFxuICAgIC8vICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFtcImRpYWxvZy1jb25maXJtYXRpb25cIl0sXG4gICAgLy8gICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgLy8gICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxuICAgIC8vICAgICAgICAgICAgIGRhdGE6IHt0aXRsZSwgbWVzc2FnZX1cbiAgICAvLyAgICAgICAgIH0pO1xuXG4gICAgLy8gICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAvLyAgICAgICAgICAgICByZXN1bHQgPT0gdHJ1ZSA/IHJlcygpIDogcmVqKCk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxufVxuIl19
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Injectable, isDevMode } from '@angular/core';
|
|
2
|
+
import { retry } from 'rxjs/operators';
|
|
3
|
+
import { of } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
|
+
// Total number of _retries_ if there is a 429 response code.
|
|
7
|
+
const retryCount = 2;
|
|
8
|
+
export class Fetch {
|
|
9
|
+
constructor(http) {
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
// Public interface for making AJAX transactions
|
|
13
|
+
get(url, options = {}, returnError = false) {
|
|
14
|
+
return this.request("get", url, options, returnError);
|
|
15
|
+
}
|
|
16
|
+
put(url, body, options = {}, returnError = false) {
|
|
17
|
+
options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {};
|
|
18
|
+
return this.request("put", url, options, returnError);
|
|
19
|
+
}
|
|
20
|
+
post(url, body, options = {}, returnError = false) {
|
|
21
|
+
options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {};
|
|
22
|
+
return this.request("post", url, options, returnError);
|
|
23
|
+
}
|
|
24
|
+
patch(url, body, options = {}, returnError = false) {
|
|
25
|
+
options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {};
|
|
26
|
+
return this.request("patch", url, options, returnError);
|
|
27
|
+
}
|
|
28
|
+
delete(url, options = {}, returnError = false) {
|
|
29
|
+
return this.request("delete", url, options, returnError);
|
|
30
|
+
}
|
|
31
|
+
// Internally, handle the observable as a promise.
|
|
32
|
+
request(method, url, options = {}, returnError = false) {
|
|
33
|
+
options.reportProgress = true;
|
|
34
|
+
// Allow support for different response types.
|
|
35
|
+
// Generally we shouldn't need this to be anything other than JSON.
|
|
36
|
+
options.responseType = options.responseType || "json";
|
|
37
|
+
options.withCredentials = true;
|
|
38
|
+
const p = new Promise((resolve, reject) => {
|
|
39
|
+
const o = this.http.request(method, url, options)
|
|
40
|
+
.pipe(retry({
|
|
41
|
+
delay(error, retryCount) {
|
|
42
|
+
// 429 and 502 are most common for overloaded
|
|
43
|
+
// backends -- so we'll retry if we get these errors
|
|
44
|
+
if (error.status == 429 || error.status == 502)
|
|
45
|
+
return of({});
|
|
46
|
+
if (error.status == 504 && isDevMode())
|
|
47
|
+
alert("It looks like you can't reach your development backend anymore");
|
|
48
|
+
throw error;
|
|
49
|
+
},
|
|
50
|
+
count: retryCount
|
|
51
|
+
}))
|
|
52
|
+
.subscribe(data => {
|
|
53
|
+
resolve(data);
|
|
54
|
+
// provide 3ms slacktime before releasing observable.
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
o.unsubscribe();
|
|
57
|
+
}, 3);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
return p;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
Fetch.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Fetch, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
64
|
+
Fetch.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Fetch, providedIn: "root" });
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Fetch, decorators: [{
|
|
66
|
+
type: Injectable,
|
|
67
|
+
args: [{
|
|
68
|
+
providedIn: "root"
|
|
69
|
+
}]
|
|
70
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvc2VydmljZXMvZmV0Y2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBRTFCLDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFvQnJCLE1BQU0sT0FBTyxLQUFLO0lBQ2QsWUFDWSxJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3hCLENBQUM7SUFFTCxnREFBZ0Q7SUFDekMsR0FBRyxDQUFJLEdBQVcsRUFBRSxVQUF3QixFQUFFLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDdEUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDTSxHQUFHLENBQUksR0FBVyxFQUFFLElBQVMsRUFBRSxVQUF3QixFQUFFLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDakYsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ00s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TUFBTTsyRkFFVCxLQUFLO2tCQUhqQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBDb250ZXh0LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5cbi8vIFRvdGFsIG51bWJlciBvZiBfcmV0cmllc18gaWYgdGhlcmUgaXMgYSA0MjkgcmVzcG9uc2UgY29kZS5cbmNvbnN0IHJldHJ5Q291bnQgPSAyO1xuXG5leHBvcnQgdHlwZSBGZXRjaE9wdGlvbnMgPSB7XG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICBwYXJhbXM/OiBIdHRwUGFyYW1zIHwge1xuICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuICAgIH07XG4gICAgYm9keT86IGFueSxcbiAgICBvYnNlcnZlPzogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIlxufSlcbmV4cG9ydCBjbGFzcyBGZXRjaCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICAgICkgeyB9XG5cbiAgICAvLyBQdWJsaWMgaW50ZXJmYWNlIGZvciBtYWtpbmcgQUpBWCB0cmFuc2FjdGlvbnNcbiAgICBwdWJsaWMgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zOiBGZXRjaE9wdGlvbnMgPSB7fSwgcmV0dXJuRXJyb3IgPSBmYWxzZSk6IFByb21pc2U8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiZ2V0XCIsIHVybCwgb3B0aW9ucywgcmV0dXJuRXJyb3IpO1xuICAgIH1cbiAgICBwdWJsaWMgcHV0PFQ+KHVybDogc3RyaW5nLCBib2R5OiBhbnksIG9wdGlvbnM6IEZldGNoT3B0aW9ucyA9IHt9LCByZXR1cm5FcnJvciA9IGZhbHNlKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IChvcHRpb25zLmJvZHkgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5ib2R5KS5sZW5ndGggPiAwID8gb3B0aW9ucy5ib2R5IDogYm9keSkgfHwge307XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJwdXRcIiwgdXJsLCBvcHRpb25zLCByZXR1cm5FcnJvcik7XG4gICAgfVxuICAgIHB1YmxpYyBwb3N0PFQ+KHVybDogc3RyaW5nLCBib2R5OiBhbnksIG9wdGlvbnM6IEZldGNoT3B0aW9ucyA9IHt9LCByZXR1cm5FcnJvciA9IGZhbHNlKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IChvcHRpb25zLmJvZHkgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5ib2R5KS5sZW5ndGggPiAwID8gb3B0aW9ucy5ib2R5IDogYm9keSkgfHwge307XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJwb3N0XCIsIHVybCwgb3B0aW9ucywgcmV0dXJuRXJyb3IpO1xuICAgIH1cbiAgICBwdWJsaWMgcGF0Y2g8VD4odXJsOiBzdHJpbmcsIGJvZHk6IGFueSwgb3B0aW9uczogRmV0Y2hPcHRpb25zID0ge30sIHJldHVybkVycm9yID0gZmFsc2UpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgb3B0aW9ucy5ib2R5ID0gKG9wdGlvbnMuYm9keSAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmJvZHkpLmxlbmd0aCA+IDAgPyBvcHRpb25zLmJvZHkgOiBib2R5KSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcInBhdGNoXCIsIHVybCwgb3B0aW9ucywgcmV0dXJuRXJyb3IpO1xuICAgIH1cbiAgICBwdWJsaWMgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zOiBGZXRjaE9wdGlvbnMgPSB7fSwgcmV0dXJuRXJyb3IgPSBmYWxzZSk6IFByb21pc2U8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiZGVsZXRlXCIsIHVybCwgb3B0aW9ucywgcmV0dXJuRXJyb3IpO1xuICAgIH1cblxuICAgIC8vIEludGVybmFsbHksIGhhbmRsZSB0aGUgb2JzZXJ2YWJsZSBhcyBhIHByb21pc2UuXG4gICAgcHJpdmF0ZSByZXF1ZXN0PFQ+KG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgb3B0aW9uczogRmV0Y2hPcHRpb25zID0ge30sIHJldHVybkVycm9yID0gZmFsc2UpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgb3B0aW9ucy5yZXBvcnRQcm9ncmVzcyA9IHRydWU7XG5cbiAgICAgICAgLy8gQWxsb3cgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHJlc3BvbnNlIHR5cGVzLlxuICAgICAgICAvLyBHZW5lcmFsbHkgd2Ugc2hvdWxkbid0IG5lZWQgdGhpcyB0byBiZSBhbnl0aGluZyBvdGhlciB0aGFuIEpTT04uXG4gICAgICAgIG9wdGlvbnMucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGUgfHwgXCJqc29uXCI7XG4gICAgICAgIG9wdGlvbnMud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbyA9IHRoaXMuaHR0cC5yZXF1ZXN0KG1ldGhvZCwgdXJsLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIC5waXBlKHJldHJ5KHtcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoZXJyb3IsIHJldHJ5Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQyOSBhbmQgNTAyIGFyZSBtb3N0IGNvbW1vbiBmb3Igb3ZlcmxvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmFja2VuZHMgLS0gc28gd2UnbGwgcmV0cnkgaWYgd2UgZ2V0IHRoZXNlIGVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MjkgfHwgZXJyb3Iuc3RhdHVzID09IDUwMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDUwNCAmJiBpc0Rldk1vZGUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChcIkl0IGxvb2tzIGxpa2UgeW91IGNhbid0IHJlYWNoIHlvdXIgZGV2ZWxvcG1lbnQgYmFja2VuZCBhbnltb3JlXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY291bnQ6IHJldHJ5Q291bnRcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBwcm92aWRlIDNtcyBzbGFja3RpbWUgYmVmb3JlIHJlbGVhc2luZyBvYnNlcnZhYmxlLlxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwIGFzIFByb21pc2U8VD47XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Injectable, HostListener } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Service that listens for global keyboard events
|
|
6
|
+
*/
|
|
7
|
+
export class KeyboardService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.heldKeys = {};
|
|
10
|
+
this.keyCommands = [];
|
|
11
|
+
window.addEventListener("keydown", (evt) => this.onKeyDown(evt));
|
|
12
|
+
window.addEventListener("keyup", (evt) => this.onKeyUp(evt));
|
|
13
|
+
}
|
|
14
|
+
onKeyDown(evt) {
|
|
15
|
+
// console.log("keydown", evt.key)
|
|
16
|
+
this.heldKeys[evt.key.toLowerCase()] = true;
|
|
17
|
+
// Do a general filter where all of the modifiers must be matched if specified
|
|
18
|
+
// Then check that the actual keys match what was specified
|
|
19
|
+
let commands = this.keyCommands
|
|
20
|
+
.filter(kc => (kc.ctrl == undefined || kc.ctrl === evt.ctrlKey) &&
|
|
21
|
+
(kc.alt == undefined || kc.alt === evt.altKey) &&
|
|
22
|
+
(kc.shift == undefined || kc.shift === evt.shiftKey) &&
|
|
23
|
+
(kc.super == undefined || kc.super === evt.metaKey) &&
|
|
24
|
+
kc.keys.length == kc.keys.filter(k => this.heldKeys[k])?.length);
|
|
25
|
+
if (evt.ctrlKey && commands.length > 0 || commands.find(c => c.interrupt)) {
|
|
26
|
+
evt.stopPropagation();
|
|
27
|
+
evt.preventDefault();
|
|
28
|
+
}
|
|
29
|
+
if (evt.key == "Pause")
|
|
30
|
+
debugger;
|
|
31
|
+
commands.forEach(kc => kc.sub.next(evt));
|
|
32
|
+
/**
|
|
33
|
+
* Prevent CTRL+P and other standard key events from being handled by the browser.
|
|
34
|
+
* Allow specific combonations:
|
|
35
|
+
* CTRL+W
|
|
36
|
+
* CTRL+T
|
|
37
|
+
* CTRL+F5
|
|
38
|
+
*/
|
|
39
|
+
// if (evt.ctrlKey && !['w', 't', 'F5'].includes(evt.key)) {
|
|
40
|
+
// evt.preventDefault();
|
|
41
|
+
// }
|
|
42
|
+
}
|
|
43
|
+
onKeyUp(evt) {
|
|
44
|
+
this.heldKeys[evt.key.toLowerCase()] = false;
|
|
45
|
+
}
|
|
46
|
+
onKeyPress(evt) {
|
|
47
|
+
// this.heldKeys[evt.key] = false;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Use this to subscribe to keyboard events throughout
|
|
51
|
+
* the application. This is a passive listener and will
|
|
52
|
+
* **NOT** interrupt the event chain.
|
|
53
|
+
*/
|
|
54
|
+
onKeyCommand(key) {
|
|
55
|
+
const sub = new Subject();
|
|
56
|
+
let item = {
|
|
57
|
+
...key,
|
|
58
|
+
keys: (Array.isArray(key.key) ? key.key : [key.key]),
|
|
59
|
+
sub: sub
|
|
60
|
+
};
|
|
61
|
+
this.keyCommands.push(item);
|
|
62
|
+
return {
|
|
63
|
+
...sub,
|
|
64
|
+
subscribe: ((...args) => {
|
|
65
|
+
const s = sub.subscribe(...args);
|
|
66
|
+
return {
|
|
67
|
+
...s,
|
|
68
|
+
unsubscribe: () => {
|
|
69
|
+
s.unsubscribe();
|
|
70
|
+
// Remove the keycommand from the list of listeners.
|
|
71
|
+
const i = this.keyCommands.findIndex(c => c == item);
|
|
72
|
+
this.keyCommands.splice(i, 1);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
})
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Return `true` if shift is currently pressed.
|
|
80
|
+
*/
|
|
81
|
+
get isShiftPressed() {
|
|
82
|
+
return !!this.heldKeys["shift"];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Return `true` if ctrl is currently pressed.
|
|
86
|
+
*/
|
|
87
|
+
get isCtrlPressed() {
|
|
88
|
+
return !!this.heldKeys["control"];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Return `true` if alt is currently pressed.
|
|
92
|
+
*/
|
|
93
|
+
get isAltPressed() {
|
|
94
|
+
return !!this.heldKeys["alt"];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Return `true` if super (mac/linux) or the windows key is currently pressed.
|
|
98
|
+
*/
|
|
99
|
+
get isSuperPressed() {
|
|
100
|
+
return !!this.heldKeys["super"];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Return `true` if tab is currently pressed.
|
|
104
|
+
*/
|
|
105
|
+
get isTabPressed() {
|
|
106
|
+
return !!this.heldKeys["tab"];
|
|
107
|
+
}
|
|
108
|
+
clearKeys() {
|
|
109
|
+
Object.keys(this.heldKeys).forEach(k => {
|
|
110
|
+
this.heldKeys[k] = false;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
KeyboardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: KeyboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
115
|
+
KeyboardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: KeyboardService, providedIn: 'root' });
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: KeyboardService, decorators: [{
|
|
117
|
+
type: Injectable,
|
|
118
|
+
args: [{
|
|
119
|
+
providedIn: 'root'
|
|
120
|
+
}]
|
|
121
|
+
}], ctorParameters: function () { return []; }, propDecorators: { clearKeys: [{
|
|
122
|
+
type: HostListener,
|
|
123
|
+
args: ["window:blur"]
|
|
124
|
+
}, {
|
|
125
|
+
type: HostListener,
|
|
126
|
+
args: ["window:resize"]
|
|
127
|
+
}] } });
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvc2VydmljZXMva2V5Ym9hcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQXFCL0I7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZUFBZTtJQWN4QjtRQVpRLGFBQVEsR0FBK0IsRUFBRSxDQUFDO1FBQzNDLGdCQUFXLEdBU1osRUFBRSxDQUFDO1FBR0wsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQWtCO1FBQ2hDLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFNUMsOEVBQThFO1FBQzlFLDJEQUEyRDtRQUMzRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVzthQUMxQixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDVCxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUNqRCxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUss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QUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxJQUFJLFlBQVk7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRDs7T0FFRztJQUNILElBQUksY0FBYztRQUNkLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNEOztPQUVHO0lBQ0gsSUFBSSxZQUFZO1FBQ1osT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBSUQsU0FBUztRQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzRHQXRJUSxlQUFlO2dIQUFmLGVBQWUsY0FGWixNQUFNOzJGQUVULGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzBFQW1JRyxTQUFTO3NCQUZSLFlBQVk7dUJBQUMsYUFBYTs7c0JBQzFCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBLZXlDb21tYW5kID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBub24tbW9kaWZpZXIga2V5KHMpIHRoYXQgbXVzdCBiZSBwcmVzc2VkIGZvciB0aGUgZXZlbnQgdG8gZmlyZS5cbiAgICAgKi9cbiAgICBrZXk6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGxhYmVsOiBzdHJpbmcsXG5cbiAgICBjdHJsPzogYm9vbGVhbixcbiAgICBhbHQ/OiBib29sZWFuLFxuICAgIHNoaWZ0PzogYm9vbGVhbixcbiAgICBzdXBlcj86IGJvb2xlYW4sXG4gICAgdGFiPzogYm9vbGVhbixcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgaGFuZGxlciBpbnRlcnJ1cHQgZGVmYXVsdCBldmVudCBoYW5kbGluZ1xuICAgICAqL1xuICAgIGludGVycnVwdD86IGJvb2xlYW4sXG59XG5cbi8qKlxuICogU2VydmljZSB0aGF0IGxpc3RlbnMgZm9yIGdsb2JhbCBrZXlib2FyZCBldmVudHNcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBLZXlib2FyZFNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBoZWxkS2V5czogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgICBwdWJsaWMga2V5Q29tbWFuZHM6IHtcbiAgICAgICAgY3RybD86IGJvb2xlYW4sXG4gICAgICAgIGFsdD86IGJvb2xlYW4sXG4gICAgICAgIHNoaWZ0PzogYm9vbGVhbixcbiAgICAgICAgc3VwZXI/OiBib29sZWFuLFxuICAgICAgICBpbnRlcnJ1cHQ/OiBib29sZWFuLFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBrZXlzOiBzdHJpbmdbXSxcbiAgICAgICAgc3ViOiBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+XG4gICAgfVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChldnQpID0+IHRoaXMub25LZXlEb3duKGV2dCkpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIChldnQpID0+IHRoaXMub25LZXlVcChldnQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uS2V5RG93bihldnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJrZXlkb3duXCIsIGV2dC5rZXkpXG4gICAgICAgIHRoaXMuaGVsZEtleXNbZXZ0LmtleS50b0xvd2VyQ2FzZSgpXSA9IHRydWU7XG5cbiAgICAgICAgLy8gRG8gYSBnZW5lcmFsIGZpbHRlciB3aGVyZSBhbGwgb2YgdGhlIG1vZGlmaWVycyBtdXN0IGJlIG1hdGNoZWQgaWYgc3BlY2lmaWVkXG4gICAgICAgIC8vIFRoZW4gY2hlY2sgdGhhdCB0aGUgYWN0dWFsIGtleXMgbWF0Y2ggd2hhdCB3YXMgc3BlY2lmaWVkXG4gICAgICAgIGxldCBjb21tYW5kcyA9IHRoaXMua2V5Q29tbWFuZHNcbiAgICAgICAgICAgIC5maWx0ZXIoa2MgPT5cbiAgICAgICAgICAgICAgICAoa2MuY3RybCA9PSB1bmRlZmluZWQgfHwga2MuY3RybCA9PT0gZXZ0LmN0cmxLZXkpICYmXG4gICAgICAgICAgICAgICAgKGtjLmFsdCA9PSB1bmRlZmluZWQgfHwga2MuYWx0ID09PSBldnQuYWx0S2V5KSAmJlxuICAgICAgICAgICAgICAgIChrYy5zaGlmdCA9PSB1bmRlZmluZWQgfHwga2Muc2hpZnQgPT09IGV2dC5zaGlmdEtleSkgJiZcbiAgICAgICAgICAgICAgICAoa2Muc3VwZXIgPT0gdW5kZWZpbmVkIHx8IGtjLnN1cGVyID09PSBldnQubWV0YUtleSkgJiZcbiAgICAgICAgICAgICAgICBrYy5rZXlzLmxlbmd0aCA9PSBrYy5rZXlzLmZpbHRlcihrID0+IHRoaXMuaGVsZEtleXNba10pPy5sZW5ndGhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKGV2dC5jdHJsS2V5ICYmIGNvbW1hbmRzLmxlbmd0aCA+IDAgfHwgY29tbWFuZHMuZmluZChjID0+IGMuaW50ZXJydXB0KSkge1xuICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZ0LmtleSA9PSBcIlBhdXNlXCIpXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcblxuICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGtjID0+IGtjLnN1Yi5uZXh0KGV2dCkpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcmV2ZW50IENUUkwrUCBhbmQgb3RoZXIgc3RhbmRhcmQga2V5IGV2ZW50cyBmcm9tIGJlaW5nIGhhbmRsZWQgYnkgdGhlIGJyb3dzZXIuXG4gICAgICAgICAqIEFsbG93IHNwZWNpZmljIGNvbWJvbmF0aW9uczpcbiAgICAgICAgICogQ1RSTCtXXG4gICAgICAgICAqIENUUkwrVFxuICAgICAgICAgKiBDVFJMK0Y1XG4gICAgICAgICAqL1xuICAgICAgICAvLyBpZiAoZXZ0LmN0cmxLZXkgJiYgIVsndycsICd0JywgJ0Y1J10uaW5jbHVkZXMoZXZ0LmtleSkpIHtcbiAgICAgICAgLy8gICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbktleVVwKGV2dDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhlbGRLZXlzW2V2dC5rZXkudG9Mb3dlckNhc2UoKV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uS2V5UHJlc3MoZXZ0OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIHRoaXMuaGVsZEtleXNbZXZ0LmtleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2UgdGhpcyB0byBzdWJzY3JpYmUgdG8ga2V5Ym9hcmQgZXZlbnRzIHRocm91Z2hvdXRcbiAgICAgKiB0aGUgYXBwbGljYXRpb24uIFRoaXMgaXMgYSBwYXNzaXZlIGxpc3RlbmVyIGFuZCB3aWxsXG4gICAgICogKipOT1QqKiBpbnRlcnJ1cHQgdGhlIGV2ZW50IGNoYWluLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbktleUNvbW1hbmQoa2V5OiBLZXlDb21tYW5kKSB7XG4gICAgICAgIGNvbnN0IHN1YiA9IG5ldyBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+KCk7XG4gICAgICAgIGxldCBpdGVtID0ge1xuICAgICAgICAgICAgLi4ua2V5LFxuICAgICAgICAgICAga2V5czogKEFycmF5LmlzQXJyYXkoa2V5LmtleSkgPyBrZXkua2V5IDogW2tleS5rZXldKSxcbiAgICAgICAgICAgIHN1Yjogc3ViXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtleUNvbW1hbmRzLnB1c2goaXRlbSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1YixcbiAgICAgICAgICAgIHN1YnNjcmliZTogKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IHN1Yi5zdWJzY3JpYmUoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXljb21tYW5kIGZyb20gdGhlIGxpc3Qgb2YgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMua2V5Q29tbWFuZHMuZmluZEluZGV4KGMgPT4gYyA9PSBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5Q29tbWFuZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pIGFzIFN1YmplY3Q8S2V5Ym9hcmRFdmVudD5bJ3N1YnNjcmliZSddXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGB0cnVlYCBpZiBzaGlmdCBpcyBjdXJyZW50bHkgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBnZXQgaXNTaGlmdFByZXNzZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuaGVsZEtleXNbXCJzaGlmdFwiXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGB0cnVlYCBpZiBjdHJsIGlzIGN1cnJlbnRseSBwcmVzc2VkLlxuICAgICAqL1xuICAgIGdldCBpc0N0cmxQcmVzc2VkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmhlbGRLZXlzW1wiY29udHJvbFwiXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGB0cnVlYCBpZiBhbHQgaXMgY3VycmVudGx5IHByZXNzZWQuXG4gICAgICovXG4gICAgZ2V0IGlzQWx0UHJlc3NlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5oZWxkS2V5c1tcImFsdFwiXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGB0cnVlYCBpZiBzdXBlciAobWFjL2xpbnV4KSBvciB0aGUgd2luZG93cyBrZXkgaXMgY3VycmVudGx5IHByZXNzZWQuXG4gICAgICovXG4gICAgZ2V0IGlzU3VwZXJQcmVzc2VkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmhlbGRLZXlzW1wic3VwZXJcIl07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBgdHJ1ZWAgaWYgdGFiIGlzIGN1cnJlbnRseSBwcmVzc2VkLlxuICAgICAqL1xuICAgIGdldCBpc1RhYlByZXNzZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuaGVsZEtleXNbXCJ0YWJcIl07XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpibHVyXCIpXG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIilcbiAgICBjbGVhcktleXMoKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaGVsZEtleXMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICB0aGlzLmhlbGRLZXlzW2tdID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdHlwZXMvbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcHVwT3B0aW9ucyB9IGZyb20gJy4vcG9wdXAnO1xuXG50eXBlIE1lbnVUcmlnZ2VyID0gXCJjbGlja1wiIHwgXCJkYmxjbGlja1wiIHwgXCJob3ZlclwiIHwgXCJjb250ZXh0bWVudVwiO1xuXG5leHBvcnQgdHlwZSBNZW51T3B0aW9ucyA9IFBhcnRpYWw8UG9wdXBPcHRpb25zICYge1xuICAgIC8qKlxuICAgICAqIFdoaWNoIGV2ZW50IHNob3VsZCB0cmlnZ2VyIHRoZSBhcHAgbWVudS5cbiAgICAgKi9cbiAgICB0cmlnZ2VyOiBNZW51VHJpZ2dlciB8IE1lbnVUcmlnZ2VyW107XG59PjtcblxudHlwZSBCYXNlTWVudUl0ZW08VCA9IGFueT4gPSB7XG4gICAgLyoqXG4gICAgICogTGFiZWwgZm9yIHRoZSBtZW51LWl0ZW1cbiAgICAgKi9cbiAgICBsYWJlbD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGFuZ3VsYXIgdGVtcGxhdGUgdG8gdXNlIGZvciB0aGUgbGFiZWxcbiAgICAgKiBBbHRlcm5hdGl2ZWx5IGFjY2VwdHMgYSBsYW1iZGEgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBsYWJlbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PiB8ICgoZGF0YTogVCkgPT4gc3RyaW5nKVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSB1c2VyIGFjdGl2YXRlc1xuICAgICAqIGEgY29udGV4dC1tZW51IGl0ZW0uXG4gICAgICogVXNlIHRoZSBgY29udGV4dE1lbnVEYXRhYCBkZWNvcmF0b3IgZm9yIHBhc3NpbmcgZGF0YS5cbiAgICAgKi9cbiAgICBhY3Rpb24/OiAoZGF0YTogVCkgPT4gYW55LFxuXG4gICAgLyoqXG4gICAgICogSW5zdGVhZCBvZiBhbiBhY3Rpb24sIHRoaXMgaXRlbSBjYW4gYmUgYSBoeXBlcmxpbmsgcG9pbnRpbmcgdG8gdGhpcyBVUkxcbiAgICAgKiB3d3cuZXhhbXBsZS5jb20vZm9vL2Jhci56aXBcbiAgICAgKi9cbiAgICBsaW5rPzogc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogV2hlbiBoYXZpbmcgYSBjb25maWd1cmVkIGBsaW5rYCBwcm9wZXJ0eSwgdGhpcyBzcGVjaWZpZXMgdGhlIGB0YXJnZXRgXG4gICAgICogYXR0cmlidXRlIGFwcGxpZWQgdG8gdGhlIGxpbmtcbiAgICAgKi9cbiAgICBsaW5rVGFyZ2V0PzogXCJfYmxhbmtcIiB8IFwiX3NlbGZcIiB8IFwiX3BhcmVudFwiIHwgXCJfdG9wXCIsIC8vIFwiZnJhbWVuYW1lXCJcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgcmVzb2x2aW5nIGEgbGluayB3aGVuIHRoZSBjb250ZXh0IG1lbnVcbiAgICAgKiBpcyBvcGVuZWRcbiAgICAgKi9cbiAgICBsaW5rVGVtcGxhdGU/OiAoKGRhdGE6IFQpID0+IHN0cmluZyksXG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBtZXRob2QgdGhhdCBpcyBjYWxsZWQgdXBvbiBhIGNvbnRleHQgbWVudSBhY3RpdmF0aW9uXG4gICAgICogdGhhdCB3aGVuIGl0IHJldHVybnMgdHJ1ZSwgd2lsbCBzaG93IHRoZSBpdGVtIGFzIGRpc2FibGVkLlxuICAgICAqL1xuICAgIGlzRGlzYWJsZWQ/OiAoZGF0YTogVCkgPT4gYm9vbGVhbixcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB1cG9uIGEgY29udGV4dCBtZW51IGFjdGl2YXRpb25cbiAgICAgKiB0aGF0IHdoZW4gcmV0dXJuaW5nIGZhbHNlLCB3aWxsIGhpZGUgdGhlIG1lbnUgaXRlbS5cbiAgICAgKi9cbiAgICBpc1Zpc2libGU/OiAoZGF0YTogVCkgPT4gYm9vbGVhbixcblxuICAgIC8qKlxuICAgICAqIElmIGEgc2hvcnRjdXQgaXMgc2V0LCB0aGUgdGV4dC1sYWJlbC5cbiAgICAgKi9cbiAgICBzaG9ydGN1dExhYmVsPzogc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICogS2V5Ym9hcmQgc2hvcnRjdXQgdG8gYWN0aXZhdGUgdGhpcyBpdGVtLlxuICAgICAqL1xuICAgIC8vIHNob3J0Y3V0PzogS2V5Q29tbWFuZCxcblxuICAgIC8qKlxuICAgICAqIEljb24gdG8gcmVuZGVyIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGl0ZW0uXG4gICAgICogQ2FuIGJlIGEgVVJML1VSSSAobXVzdCBpbmNsdWRlIGV4dGVuc2lvbilcbiAgICAgKiBPciBjYW4gYmUgYSBtYXRlcmlhbCBpY29uIGlkZW50aWZpZXIuXG4gICAgICovXG4gICAgaWNvbj86IHN0cmluZyxcblxuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGNoaWxkIG1lbnVcbiAgICAgKi9cbiAgICBjaGlsZHJlbj86IE1lbnVJdGVtPFQ+W10sXG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCByZXNvbHZlciB0aGF0IGR5bmFtaWNhbGx5IGxvYWRzIHRoZSBjb250ZW50c1xuICAgICAqIGZvciB0aGUgbWVudSBpdGVtLlxuICAgICAqIENhbiBiZSB1c2VkIHRvIGR5bmFtaWNhbGx5IGRldGVybWluZSB0aGUgc3VibWVudSBjb250ZW50c1xuICAgICAqL1xuICAgIGNoaWxkcmVuUmVzb2x2ZXI/OiAoZGF0YTogVCkgPT4gUHJvbWlzZTxNZW51SXRlbTxUPltdPixcblxuICAgIC8qKlxuICAgICAqIElmIGBjaGlsZHJlblJlc29sdmVyYCBpcyBwcm92aWRlZCwgZGlzYWJsZSBjYWNoaW5nIG9mXG4gICAgICogdGhlIHJlc29sdmVkIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIGNhY2hlUmVzb2x2ZWRDaGlsZHJlbj86IGJvb2xlYW4sXG5cbiAgICAvKipcbiAgICAgKiBJbnN0ZWFkIG9mIGFuIGFycmF5IG9mIGNoaWxkcmVuLCByZW5kZXIgYSB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIGNoaWxkVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxUPiB8IFR5cGU8YW55PixcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXRlbSBpcyBhIHNlcGFyYXRvci5cbiAgICAgKiBDYW4gYmUgdXNlZCB3aXRoIGxhYmVsIHRvIG1ha2UgYSBsYWJlbCBzZXBhcmF0b3IuXG4gICAgICovXG4gICAgc2VwYXJhdG9yPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnVJdGVtPFQgPSBhbnk+ID1cbiAgICBCYXNlTWVudUl0ZW08VD4gfFxuICAgIFwic2VwYXJhdG9yXCI7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3R5cGVzL3BvcHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBQb3B1cE9wdGlvbnMgPSBQYXJ0aWFsPHtcbiAgICAvKipcbiAgICAgKiBQb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCB0aGUgbWVudSBwb3BzLXVwIGF0XG4gICAgICovXG4gICAgcG9zaXRpb246IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCIsXG4gICAgLyoqXG4gICAgICogSG93IHRoZSBwb3B1cCBpcyBhbGlnbmVkIHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgYWxpZ25tZW50OiBcImNlbnRlclwiIHwgXCJiZWZvcmVzdGFydFwiIHwgXCJzdGFydFwiIHwgXCJlbmRcIiB8IFwiYWZ0ZXJlbmRcIixcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV0lQOlxuICAgICAqIFNob3cgYW4gZXJyb3IgZnJvbSB0aGUgZGlhbG9nIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgc2hvd0Fycm93OiBib29sZWFuLFxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXSVA6XG4gICAgICogU2l6ZSBvZiB0aGUgYXJyb3cuXG4gICAgICovXG4gICAgYXJyb3dTaXplOiBudW1iZXIsXG4gICAgLyoqXG4gICAgICogSG93IG11Y2ggcGFkZGluZyB0byBhZGQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIHNjcmVlbi5cbiAgICAgKi9cbiAgICBlZGdlUGFkZGluZzogbnVtYmVyLFxuXG4gICAgY3VzdG9tQ2xhc3M6IHN0cmluZ1tdO1xufT47XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const sleep = ms => new Promise(r => setTimeout(r, ms));
|
|
2
|
+
/**
|
|
3
|
+
* Prompt the user to save a json file of the given object.
|
|
4
|
+
*/
|
|
5
|
+
export const saveObjectAsFile = (name, data) => {
|
|
6
|
+
const a = document.createElement("a");
|
|
7
|
+
const file = new Blob([JSON.stringify(data)], { type: "application/json" });
|
|
8
|
+
a.href = URL.createObjectURL(file);
|
|
9
|
+
a.download = name;
|
|
10
|
+
a.click();
|
|
11
|
+
a.remove();
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Formatted logger that will print a bit of context before the message.
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
export const Logger = (context, contextColor, textColor = "#03a9f4") => ({
|
|
18
|
+
log: (message, ...args) => {
|
|
19
|
+
console.log(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);
|
|
20
|
+
},
|
|
21
|
+
warn: (message, ...args) => {
|
|
22
|
+
console.warn(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);
|
|
23
|
+
},
|
|
24
|
+
err: (message, ...args) => {
|
|
25
|
+
console.error(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);
|
|
26
|
+
},
|
|
27
|
+
error: (message, ...args) => {
|
|
28
|
+
console.error(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* Convert a string `fooBAR baz_160054''"1]"` into a slug: `foobar-baz-1600541`
|
|
33
|
+
*/
|
|
34
|
+
export const stringToSlug = (text) => (text || '')
|
|
35
|
+
.trim()
|
|
36
|
+
.toLowerCase()
|
|
37
|
+
.replace(/[\-_+ ]/g, '-')
|
|
38
|
+
.replace(/[^a-z0-9\-]/g, '');
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9EOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDM0QsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQWUsRUFBRSxZQUFvQixFQUFFLFlBQW9CLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RixHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtRQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sT0FBTyxPQUFPLE9BQU8sRUFBRSxFQUFFLFNBQVMsR0FBRyxZQUFZLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFDRCxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtRQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxPQUFPLE9BQU8sRUFBRSxFQUFFLFNBQVMsR0FBRyxZQUFZLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFDRCxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxPQUFPLE9BQU8sRUFBRSxFQUFFLFNBQVMsR0FBRyxZQUFZLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFDRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtRQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxPQUFPLE9BQU8sRUFBRSxFQUFFLFNBQVMsR0FBRyxZQUFZLEVBQUUsU0FBUyxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNHLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3pDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztLQUNQLElBQUksRUFBRTtLQUNOLFdBQVcsRUFBRTtLQUNiLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO0tBQ3hCLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc2xlZXAgPSBtcyA9PiBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKTtcblxuLyoqXG4gKiBQcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSBhIGpzb24gZmlsZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3Qgc2F2ZU9iamVjdEFzRmlsZSA9IChuYW1lOiBzdHJpbmcsIGRhdGE6IE9iamVjdCkgPT4ge1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGRhdGEpXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KTtcbiAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgIGEuZG93bmxvYWQgPSBuYW1lO1xuICAgIGEuY2xpY2soKTtcbiAgICBhLnJlbW92ZSgpO1xufTtcblxuLyoqXG4gKiBGb3JtYXR0ZWQgbG9nZ2VyIHRoYXQgd2lsbCBwcmludCBhIGJpdCBvZiBjb250ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZS5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBMb2dnZXIgPSAoY29udGV4dDogc3RyaW5nLCBjb250ZXh0Q29sb3I6IHN0cmluZywgdGV4dENvbG9yOiBzdHJpbmcgPSBcIiMwM2E5ZjRcIikgPT4gKHtcbiAgICBsb2c6IChtZXNzYWdlLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1ske2NvbnRleHR9XSAlYyR7bWVzc2FnZX1gLCAnY29sb3I6ICcgKyBjb250ZXh0Q29sb3IsICdjb2xvcjogJyArIHRleHRDb2xvciwgLi4uYXJncyk7XG4gICAgfSxcbiAgICB3YXJuOiAobWVzc2FnZSwgLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYCVjWyR7Y29udGV4dH1dICVjJHttZXNzYWdlfWAsICdjb2xvcjogJyArIGNvbnRleHRDb2xvciwgJ2NvbG9yOiAnICsgdGV4dENvbG9yLCAuLi5hcmdzKTtcbiAgICB9LFxuICAgIGVycjogKG1lc3NhZ2UsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgJWNbJHtjb250ZXh0fV0gJWMke21lc3NhZ2V9YCwgJ2NvbG9yOiAnICsgY29udGV4dENvbG9yLCAnY29sb3I6ICcgKyB0ZXh0Q29sb3IsIC4uLmFyZ3MpO1xuICAgIH0sXG4gICAgZXJyb3I6IChtZXNzYWdlLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCVjWyR7Y29udGV4dH1dICVjJHttZXNzYWdlfWAsICdjb2xvcjogJyArIGNvbnRleHRDb2xvciwgJ2NvbG9yOiAnICsgdGV4dENvbG9yLCAuLi5hcmdzKTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIGBmb29CQVIgYmF6XzE2MDA1NCcnXCIxXVwiYCBpbnRvIGEgc2x1ZzogYGZvb2Jhci1iYXotMTYwMDU0MWBcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ1RvU2x1ZyA9ICh0ZXh0OiBzdHJpbmcpID0+XG4gICAgKHRleHQgfHwgJycpXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoL1tcXC1fKyBdL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05XFwtXS9nLCAnJyk7XG5cbiJdfQ==
|