@osovitny/anatoly 3.17.9 → 3.17.11

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.
@@ -4,6 +4,7 @@ export declare const AppCoreSettings: any;
4
4
  export declare const L10NUrl: string;
5
5
  export declare const AppVersion: string;
6
6
  export declare const IsDevMode: boolean;
7
+ export declare const IsProdMode: boolean;
7
8
  export declare const ApiUrl: string;
8
9
  export declare const ClientApps: any;
9
10
  export declare const AppName: string;
@@ -28,4 +28,5 @@ export * from './dom';
28
28
  export * from './guid';
29
29
  export * from './is';
30
30
  export * from './subs';
31
- export * from './utils';
31
+ export * from './utils/qsutils';
32
+ export * from './utils/utils';
@@ -0,0 +1,6 @@
1
+ export declare class QSUtils {
2
+ private static getValue;
3
+ static getValueByName(name: any): string;
4
+ static exists(name: any): boolean;
5
+ static idExists(): boolean;
6
+ }
@@ -1,7 +1,4 @@
1
1
  export declare class Utils {
2
- static idExistsInQS(): boolean;
3
- static getValueByNameInQS(name: any): string;
4
- static getValueByName(url: any, name: any): string;
5
2
  static copyToClipBoard(event: any, val: string): void;
6
3
  static downloadFile(name: string, url: string): void;
7
4
  static downloadBlobFile(value: Blob, fileName: string): void;
@@ -31,7 +31,7 @@ export declare class AuthService extends ApiServiceBase implements OnDestroy {
31
31
  private acquireToken;
32
32
  getUserEmail(): any;
33
33
  getUserName(): any;
34
- getAccessToken(requestUrl?: string): Observable<string>;
34
+ getAccessToken(): Observable<string>;
35
35
  forceReauthenticate(account?: any): void;
36
36
  login(userFlowRequest?: RedirectRequest | PopupRequest, popup?: boolean): void;
37
37
  logout(popup?: boolean): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osovitny/anatoly",
3
- "version": "3.17.9",
3
+ "version": "3.17.11",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "17.1.2",
6
6
  "@angular/core": "17.1.2",
@@ -1,91 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny vadim@osovitny.com
8
- Anatoly Osovitny anatoly@osovitny.com
9
-
10
- Created:
11
- 19 March 2020
12
-
13
- Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
- </file>
15
- */
16
- export class Utils {
17
- static idExistsInQS() {
18
- let id = Utils.getValueByNameInQS("id");
19
- if (id)
20
- return true;
21
- return false;
22
- }
23
- static getValueByNameInQS(name) {
24
- return Utils.getValueByName(location.search, name);
25
- }
26
- static getValueByName(url, name) {
27
- name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
28
- // tslint:disable-next-line:one-variable-per-declaration
29
- const regex = new RegExp('[\\?&]' + name + '=([^&#]*)'), results = regex.exec(url);
30
- return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
31
- }
32
- static copyToClipBoard(event, val) {
33
- event.preventDefault();
34
- const selBox = document.createElement('textarea');
35
- selBox.style.position = 'fixed';
36
- selBox.style.left = '0';
37
- selBox.style.top = '0';
38
- selBox.style.opacity = '0';
39
- selBox.value = val;
40
- document.body.appendChild(selBox);
41
- selBox.focus();
42
- selBox.select();
43
- document.execCommand('copy');
44
- document.body.removeChild(selBox);
45
- }
46
- static downloadFile(name, url) {
47
- const link = document.createElement('a');
48
- link.download = name;
49
- link.href = url;
50
- link.click();
51
- }
52
- static downloadBlobFile(value, fileName) {
53
- const nav = window.navigator;
54
- if (nav.msSaveOrOpenBlob) {
55
- nav.msSaveOrOpenBlob(value, fileName);
56
- }
57
- else {
58
- const downloadURL = window.URL.createObjectURL(value);
59
- Utils.downloadFile(fileName, downloadURL);
60
- }
61
- }
62
- /*
63
- Author:
64
- https://medium.com/@mhagemann/the-ultimate-way-to-slugify-a-url-string-in-javascript-b8e4a0d849e1
65
- */
66
- static slugify(text, prefix = '', postfix = '') {
67
- const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;';
68
- const b = 'aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------';
69
- const p = new RegExp(a.split('').join('|'), 'g');
70
- /*
71
- https://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/
72
- https://stackoverflow.com/questions/822452/strip-html-from-text-javascript
73
- */
74
- text = text.replace(/(<([^>]+)>)/gi, '');
75
- let result = text
76
- .toString()
77
- .toLowerCase()
78
- .replace(/\s+/g, '-') // Replace spaces with -
79
- .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters
80
- .replace(/&/g, '-and-') // Replace & with 'and'
81
- .replace(/[^\w\-]+/g, '') // Remove all non-word characters
82
- .replace(/\-\-+/g, '-') // Replace multiple - with single -
83
- .replace(/^-+/, '') // Trim - from start of text
84
- .replace(/-+$/, ''); // Trim - from end of text
85
- return prefix + result + postfix;
86
- }
87
- static generateRandom(start, end) {
88
- return Math.floor(Math.random() * (end - start + 1)) + start;
89
- }
90
- }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvY29yZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU0sT0FBTyxLQUFLO0lBQ1QsTUFBTSxDQUFDLFlBQVk7UUFDeEIsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXBCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJO1FBQ25DLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ3BDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFELHdEQUF3RDtRQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQyxFQUV2RCxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixPQUFPLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFVLEVBQUUsR0FBVztRQUNuRCxLQUFL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QU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQywwQkFBMEI7UUFFakQsT0FBTyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0lBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMvRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMTkgTWFyY2ggMjAyMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBVdGlscyB7XHJcbiAgcHVibGljIHN0YXRpYyBpZEV4aXN0c0luUVMoKSB7XHJcbiAgICBsZXQgaWQgPSBVdGlscy5nZXRWYWx1ZUJ5TmFtZUluUVMoXCJpZFwiKTtcclxuICAgIGlmIChpZCkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRWYWx1ZUJ5TmFtZUluUVMobmFtZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldFZhbHVlQnlOYW1lKGxvY2F0aW9uLnNlYXJjaCwgbmFtZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldFZhbHVlQnlOYW1lKHVybCwgbmFtZSkge1xyXG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xcW10vLCAnXFxcXFsnKS5yZXBsYWNlKC9bXFxdXS8sICdcXFxcXScpO1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnW1xcXFw/Jl0nICsgbmFtZSArICc9KFteJiNdKiknKSxcclxuXHJcbiAgICByZXN1bHRzID0gcmVnZXguZXhlYyh1cmwpO1xyXG4gICAgcmV0dXJuIHJlc3VsdHMgPT09IG51bGwgPyAnJyA6IGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzFdLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY29weVRvQ2xpcEJvYXJkKGV2ZW50OiBhbnksIHZhbDogc3RyaW5nKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IHNlbEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICBzZWxCb3guc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgc2VsQm94LnN0eWxlLmxlZnQgPSAnMCc7XHJcbiAgICBzZWxCb3guc3R5bGUudG9wID0gJzAnO1xyXG4gICAgc2VsQm94LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcbiAgICBzZWxCb3gudmFsdWUgPSB2YWw7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbEJveCk7XHJcbiAgICBzZWxCb3guZm9jdXMoKTtcclxuICAgIHNlbEJveC5zZWxlY3QoKTtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNlbEJveCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGRvd25sb2FkRmlsZShuYW1lOiBzdHJpbmcsIHVybDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5kb3dubG9hZCA9IG5hbWU7XHJcbiAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGRvd25sb2FkQmxvYkZpbGUodmFsdWU6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5hdiA9ICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSk7XHJcblxyXG4gICAgaWYgKG5hdi5tc1NhdmVPck9wZW5CbG9iKSB7XHJcbiAgICAgIG5hdi5tc1NhdmVPck9wZW5CbG9iKHZhbHVlLCBmaWxlTmFtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgZG93bmxvYWRVUkwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh2YWx1ZSk7XHJcbiAgICAgIFV0aWxzLmRvd25sb2FkRmlsZShmaWxlTmFtZSwgZG93bmxvYWRVUkwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIEF1dGhvcjpcclxuICAgIGh0dHBzOi8vbWVkaXVtLmNvbS9AbWhhZ2VtYW5uL3RoZS11bHRpbWF0ZS13YXktdG8tc2x1Z2lmeS1hLXVybC1zdHJpbmctaW4tamF2YXNjcmlwdC1iOGU0YTBkODQ5ZTFcclxuICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgc2x1Z2lmeSh0ZXh0OiBzdHJpbmcsIHByZWZpeDogc3RyaW5nID0gJycsIHBvc3RmaXg6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBjb25zdCBhID0gJ8Ogw6HDosOkw6bDo8OlxIHEg8SFw6fEh8SNxJHEj8Oow6nDqsOrxJPEl8SZxJvEn8e14binw67Dr8OtxKvEr8OsxYLhuL/DscWEx7nFiMO0w7bDssOzxZPDuMWNw7XFkeG5lcWVxZnDn8WbxaHFn8iZxaXIm8O7w7zDucO6xavHmMWvxbHFs+G6g+G6jcO/w73FvsW6xbzCty9fLDo7JztcclxuICAgIGNvbnN0IGIgPSAnYWFhYWFhYWFhYWNjY2RkZWVlZWVlZWVnZ2hpaWlpaWlsbW5ubm5vb29vb29vb29wcnJzc3Nzc3R0dXV1dXV1dXV1d3h5eXp6ei0tLS0tLSc7XHJcbiAgICBjb25zdCBwID0gbmV3IFJlZ0V4cChhLnNwbGl0KCcnKS5qb2luKCd8JyksICdnJyk7XHJcblxyXG4gICAgLypcclxuICAgICAgaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9qYXZhc2NyaXB0L3N0cmlwLWh0bWwtdGFncy1pbi1qYXZhc2NyaXB0L1xyXG4gICAgICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84MjI0NTIvc3RyaXAtaHRtbC1mcm9tLXRleHQtamF2YXNjcmlwdFxyXG4gICAgKi9cclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyg8KFtePl0rKT4pL2dpLCAnJyk7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IHRleHRcclxuICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJy0nKSAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIC1cclxuICAgICAgLnJlcGxhY2UocCwgYyA9PiBiLmNoYXJBdChhLmluZGV4T2YoYykpKSAvLyBSZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVyc1xyXG4gICAgICAucmVwbGFjZSgvJi9nLCAnLWFuZC0nKSAvLyBSZXBsYWNlICYgd2l0aCAnYW5kJ1xyXG4gICAgICAucmVwbGFjZSgvW15cXHdcXC1dKy9nLCAnJykgLy8gUmVtb3ZlIGFsbCBub24td29yZCBjaGFyYWN0ZXJzXHJcbiAgICAgIC5yZXBsYWNlKC9cXC1cXC0rL2csICctJykgLy8gUmVwbGFjZSBtdWx0aXBsZSAtIHdpdGggc2luZ2xlIC1cclxuICAgICAgLnJlcGxhY2UoL14tKy8sICcnKSAvLyBUcmltIC0gZnJvbSBzdGFydCBvZiB0ZXh0XHJcbiAgICAgIC5yZXBsYWNlKC8tKyQvLCAnJyk7IC8vIFRyaW0gLSBmcm9tIGVuZCBvZiB0ZXh0XHJcblxyXG4gICAgcmV0dXJuIHByZWZpeCArIHJlc3VsdCArIHBvc3RmaXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlUmFuZG9tKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGVuZCAtIHN0YXJ0ICsgMSkpICsgc3RhcnQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==