@posiwise/common-services 0.1.88 → 0.1.90

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.
Files changed (50) hide show
  1. package/fesm2022/posiwise-common-services.mjs +164 -191
  2. package/fesm2022/posiwise-common-services.mjs.map +1 -1
  3. package/lib/user.service.d.ts +1 -0
  4. package/package.json +11 -10
  5. package/esm2022/index.mjs +0 -47
  6. package/esm2022/lib/ab-test.service.mjs +0 -55
  7. package/esm2022/lib/ahoy.service.mjs +0 -93
  8. package/esm2022/lib/auth.service.mjs +0 -322
  9. package/esm2022/lib/base-http.service.mjs +0 -98
  10. package/esm2022/lib/brain-api-http.service.mjs +0 -26
  11. package/esm2022/lib/brain.service.mjs +0 -21
  12. package/esm2022/lib/common-services.interface.mjs +0 -2
  13. package/esm2022/lib/common-services.module.mjs +0 -23
  14. package/esm2022/lib/common.service.mjs +0 -134
  15. package/esm2022/lib/custom-preloading.service.mjs +0 -38
  16. package/esm2022/lib/dashboard.service.mjs +0 -21
  17. package/esm2022/lib/data.service.mjs +0 -21
  18. package/esm2022/lib/date-formatter.service.mjs +0 -82
  19. package/esm2022/lib/effects/user.effects.mjs +0 -27
  20. package/esm2022/lib/form-helper.service.mjs +0 -27
  21. package/esm2022/lib/geo.service.mjs +0 -40
  22. package/esm2022/lib/google-analytics.service.mjs +0 -121
  23. package/esm2022/lib/group.service.mjs +0 -122
  24. package/esm2022/lib/hopscotch.service.mjs +0 -48
  25. package/esm2022/lib/integrations-api-http.service.mjs +0 -28
  26. package/esm2022/lib/link-loader.service.mjs +0 -50
  27. package/esm2022/lib/local-storage.service.mjs +0 -32
  28. package/esm2022/lib/logo-caching.service.mjs +0 -65
  29. package/esm2022/lib/mailbox.service.mjs +0 -66
  30. package/esm2022/lib/main-api-http.service.mjs +0 -26
  31. package/esm2022/lib/notification.service.mjs +0 -70
  32. package/esm2022/lib/number-picker.service.mjs +0 -43
  33. package/esm2022/lib/permission.service.mjs +0 -252
  34. package/esm2022/lib/primeNgHelper.mjs +0 -18
  35. package/esm2022/lib/product.service.mjs +0 -78
  36. package/esm2022/lib/profile.service.mjs +0 -64
  37. package/esm2022/lib/qualification.service.mjs +0 -29
  38. package/esm2022/lib/script-loader.service.mjs +0 -79
  39. package/esm2022/lib/secure-token-storage.service.mjs +0 -264
  40. package/esm2022/lib/sentry.service.mjs +0 -384
  41. package/esm2022/lib/seo.service.mjs +0 -43
  42. package/esm2022/lib/socket.service.mjs +0 -29
  43. package/esm2022/lib/subscription.service.mjs +0 -129
  44. package/esm2022/lib/tag.service.mjs +0 -101
  45. package/esm2022/lib/tips.service.mjs +0 -38
  46. package/esm2022/lib/toast.service.mjs +0 -85
  47. package/esm2022/lib/user.service.mjs +0 -202
  48. package/esm2022/lib/validation.service.mjs +0 -36
  49. package/esm2022/lib/window.service.mjs +0 -20
  50. package/esm2022/posiwise-common-services.mjs +0 -5
@@ -1,202 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { AppConfigService } from '@posiwise/app-config-service';
4
- import { getUser, SetUser } from '@posiwise/app-store';
5
- import { USER_PATH } from '@posiwise/common-utilities';
6
- import { HelperService } from '@posiwise/helper-service';
7
- import moment from 'moment';
8
- import { tap } from 'rxjs';
9
- import { take } from 'rxjs/operators';
10
- import swal from 'sweetalert2';
11
- import { Store } from '@ngrx/store';
12
- import { MainApiHttpService } from './main-api-http.service';
13
- import { ProfileService } from './profile.service';
14
- import { CustomToastService } from './toast.service';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "./main-api-http.service";
17
- import * as i2 from "@ngrx/store";
18
- import * as i3 from "@angular/router";
19
- import * as i4 from "@posiwise/app-config-service";
20
- import * as i5 from "./profile.service";
21
- import * as i6 from "./toast.service";
22
- export class UserService {
23
- constructor(api, store, router, appConfigService, profileService, toast) {
24
- this.api = api;
25
- this.store = store;
26
- this.router = router;
27
- this.appConfigService = appConfigService;
28
- this.profileService = profileService;
29
- this.toast = toast;
30
- this.endpoint = USER_PATH;
31
- this.isTosModalOpen = false;
32
- }
33
- getUserState() {
34
- return this.store.select(getUser);
35
- }
36
- getUserInfo() {
37
- return this.api.get(this.endpoint).pipe(tap((data) => {
38
- // enforce 2fa
39
- if (data?.auth?.should_enforce_2fa) {
40
- this.router.navigate(['settings/security']);
41
- }
42
- this.checkAndHandleTosAcceptance(data);
43
- }));
44
- }
45
- /**
46
- * Ensure the current user has accepted the latest Terms of Service for this domain.
47
- * If the domain has a newer TOS version than the user's accepted timestamp, a blocking
48
- * SweetAlert2 modal is shown that forces the user to accept before continuing.
49
- */
50
- checkAndHandleTosAcceptance(user) {
51
- if (!user || this.isTosModalOpen) {
52
- return;
53
- }
54
- this.appConfigService.appConfig$.pipe(take(1)).subscribe(config => {
55
- const tosUpdatedAt = config?.['tos_updated_at'];
56
- if (!tosUpdatedAt) {
57
- return;
58
- }
59
- const userAcceptedAt = user.tos_accepted_at;
60
- // If user has already accepted a TOS version that is newer or equal, nothing to do
61
- if (userAcceptedAt && !moment(userAcceptedAt).isBefore(moment(tosUpdatedAt))) {
62
- return;
63
- }
64
- this.isTosModalOpen = true;
65
- const mainTosId = config?.['main_tos_id'] ?? null;
66
- const tosUrl = mainTosId ? `/privacy-and-tos/${mainTosId}` : '/privacy-and-tos';
67
- void swal
68
- .fire({
69
- icon: 'info',
70
- title: 'Accept Terms of Service',
71
- html: `By clicking continue, you agree to the terms of our <a href="${tosUrl}" target="_blank" rel="noopener noreferrer">Privacy Policy and Platform Agreement</a>.`,
72
- confirmButtonText: 'Accept and Continue',
73
- allowOutsideClick: false,
74
- allowEscapeKey: false,
75
- showCancelButton: false,
76
- reverseButtons: false,
77
- focusConfirm: true
78
- })
79
- .then(result => {
80
- if (!result.isConfirmed) {
81
- // Modal cannot really be dismissed without confirmation due to config above,
82
- // but guard just in case.
83
- this.isTosModalOpen = false;
84
- return;
85
- }
86
- // Match the backend ISO 8601 format (e.g. 2025-12-15T10:27:11.250Z)
87
- const nowUtc = new Date().toISOString();
88
- this.profileService.updateUserProfile({ tos_accepted_at: nowUtc }).subscribe({
89
- next: () => {
90
- const updatedUser = {
91
- ...user,
92
- tos_accepted_at: nowUtc
93
- };
94
- this.store.dispatch(new SetUser(updatedUser));
95
- this.toast.success('Terms of Service accepted');
96
- this.isTosModalOpen = false;
97
- },
98
- error: err => {
99
- const message = HelperService.getErrorMessage(err?.error || err);
100
- void swal
101
- .fire({
102
- icon: 'error',
103
- title: 'Unable to record acceptance',
104
- text: message,
105
- confirmButtonText: 'Try again',
106
- allowOutsideClick: false,
107
- allowEscapeKey: false
108
- })
109
- .then(() => {
110
- this.isTosModalOpen = false;
111
- this.checkAndHandleTosAcceptance(user);
112
- });
113
- }
114
- });
115
- });
116
- });
117
- }
118
- followUser(id) {
119
- return this.api.post(`${this.endpoint}/toggle_relationship/${id}`);
120
- }
121
- sendSSOActivationEmail() {
122
- return this.api.post(`/cognito/create_cognito_user`);
123
- }
124
- updateSlug(slug) {
125
- return this.api.put(`${this.endpoint}/update_slug`, { slug });
126
- }
127
- getCurrentUserObject(object_type) {
128
- return this.api.get(`${this.endpoint}/get_current_user_object?object=${object_type}`);
129
- }
130
- updateEmail(data) {
131
- const formData = new FormData();
132
- formData.append('email', data['email']);
133
- formData.append('confirmation_path', data['confirmation_path']);
134
- return this.api.put(`${this.endpoint}/email`, formData);
135
- }
136
- checkPassword(data) {
137
- return this.api.post(`${this.endpoint}/check_password`, data);
138
- }
139
- confirmUser(confirmation_token, email, password, password_confirmation) {
140
- const formData = new FormData();
141
- formData.append('confirmation_token', confirmation_token);
142
- formData.append('email', email);
143
- formData.append('password', password);
144
- formData.append('password_confirmation', password_confirmation);
145
- return this.api.put(`${this.endpoint}/confirm`, formData);
146
- }
147
- checkTokenValidity(type, token, email) {
148
- return this.api.get(`${this.endpoint}/check_token_validity?type=${type}&confirmation_token=${token}&email=${email}`);
149
- }
150
- getUserNotifications() {
151
- return this.api.get(`${this.endpoint}/user_notifications`);
152
- }
153
- addAvatar(file) {
154
- return this.api.upload(this.endpoint, file, 'avatar');
155
- }
156
- createTwoFactorAuthenticator() {
157
- return this.api.put(`/two_factor_authenticator/create`);
158
- }
159
- verifyTwoFactorAuthenticator(google_code) {
160
- return this.api.post(`/two_factor_authenticator/verification_code`, { google_code });
161
- }
162
- enableTwoFactorAuthenticator(google_code) {
163
- return this.api.put(`/two_factor_authenticator/enable`, { google_code });
164
- }
165
- disableTwoFactorAuthenticator() {
166
- return this.api.put(`/two_factor_authenticator/disable`);
167
- }
168
- // User API Ends
169
- validateNewEmail(confirmationToken) {
170
- return this.api.get(`${this.endpoint}/new_email_confirm?confirmation_token=${confirmationToken}`);
171
- }
172
- getUserSubscriptions(id) {
173
- return this.api.get(`/users/${id}/subscriptions`);
174
- }
175
- addNewSubscriptionUsingStripe(data) {
176
- return this.api.post('/signups/trial_user_stripe_account', data);
177
- }
178
- updatePassword(data) {
179
- return this.api.put('/password/update', data);
180
- }
181
- getUserInvoices(paging, id) {
182
- return this.api.getWithParams(`${this.endpoint}/invoices`, {
183
- ...HelperService.getPagingParams(paging),
184
- user_id: id
185
- });
186
- }
187
- postTipsDisregarded(data) {
188
- return this.api.post('/users/user_tips', data);
189
- }
190
- refreshUserApiTokens() {
191
- return this.api.get(`${this.endpoint}/refresh_user_api_tokens`);
192
- }
193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, deps: [{ token: i1.MainApiHttpService }, { token: i2.Store }, { token: i3.Router }, { token: i4.AppConfigService }, { token: i5.ProfileService }, { token: i6.CustomToastService }], target: i0.ɵɵFactoryTarget.Injectable }); }
194
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, providedIn: 'root' }); }
195
- }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UserService, decorators: [{
197
- type: Injectable,
198
- args: [{
199
- providedIn: 'root'
200
- }]
201
- }], ctorParameters: () => [{ type: i1.MainApiHttpService }, { type: i2.Store }, { type: i3.Router }, { type: i4.AppConfigService }, { type: i5.ProfileService }, { type: i6.CustomToastService }] });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi91c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFZLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUtwQixZQUNxQixHQUF1QixFQUN2QixLQUFzQixFQUN0QixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQzlCLEtBQXlCO1FBTHpCLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FB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QUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsMEJBQTBCLENBQUMsQ0FBQztJQUNwRSxDQUFDOytHQWpPUSxXQUFXO21IQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWNvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlLCBnZXRVc2VyLCBTZXRVc2VyLCBVc2VyU3RhdGUgfSBmcm9tICdAcG9zaXdpc2UvYXBwLXN0b3JlJztcbmltcG9ydCB7IFBhZ2luZywgVXNlciwgVVNFUl9QQVRIIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludCA9IFVTRVJfUEFUSDtcblxuICAgIHByaXZhdGUgaXNUb3NNb2RhbE9wZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZTxBcHBTdGF0ZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3Q6IEN1c3RvbVRvYXN0U2VydmljZVxuICAgICkge31cblxuICAgIGdldFVzZXJTdGF0ZSgpOiBPYnNlcnZhYmxlPFVzZXJTdGF0ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoZ2V0VXNlcik7XG4gICAgfVxuXG4gICAgZ2V0VXNlckluZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQodGhpcy5lbmRwb2ludCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoZGF0YTogVXNlcikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVuZm9yY2UgMmZhXG4gICAgICAgICAgICAgICAgaWYgKGRhdGE/LmF1dGg/LnNob3VsZF9lbmZvcmNlXzJmYSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NldHRpbmdzL3NlY3VyaXR5J10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRIYW5kbGVUb3NBY2NlcHRhbmNlKGRhdGEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIGN1cnJlbnQgdXNlciBoYXMgYWNjZXB0ZWQgdGhlIGxhdGVzdCBUZXJtcyBvZiBTZXJ2aWNlIGZvciB0aGlzIGRvbWFpbi5cbiAgICAgKiBJZiB0aGUgZG9tYWluIGhhcyBhIG5ld2VyIFRPUyB2ZXJzaW9uIHRoYW4gdGhlIHVzZXIncyBhY2NlcHRlZCB0aW1lc3RhbXAsIGEgYmxvY2tpbmdcbiAgICAgKiBTd2VldEFsZXJ0MiBtb2RhbCBpcyBzaG93biB0aGF0IGZvcmNlcyB0aGUgdXNlciB0byBhY2NlcHQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGVja0FuZEhhbmRsZVRvc0FjY2VwdGFuY2UodXNlcjogVXNlciB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1c2VyIHx8IHRoaXMuaXNUb3NNb2RhbE9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwQ29uZmlnU2VydmljZS5hcHBDb25maWckLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3NVcGRhdGVkQXQgPSBjb25maWc/LlsndG9zX3VwZGF0ZWRfYXQnXTtcblxuICAgICAgICAgICAgaWYgKCF0b3NVcGRhdGVkQXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJBY2NlcHRlZEF0ID0gdXNlci50b3NfYWNjZXB0ZWRfYXQ7XG5cbiAgICAgICAgICAgIC8vIElmIHVzZXIgaGFzIGFscmVhZHkgYWNjZXB0ZWQgYSBUT1MgdmVyc2lvbiB0aGF0IGlzIG5ld2VyIG9yIGVxdWFsLCBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICBpZiAodXNlckFjY2VwdGVkQXQgJiYgIW1vbWVudCh1c2VyQWNjZXB0ZWRBdCkuaXNCZWZvcmUobW9tZW50KHRvc1VwZGF0ZWRBdCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzVG9zTW9kYWxPcGVuID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgbWFpblRvc0lkID0gY29uZmlnPy5bJ21haW5fdG9zX2lkJ10gPz8gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHRvc1VybCA9IG1haW5Ub3NJZCA/IGAvcHJpdmFjeS1hbmQtdG9zLyR7bWFpblRvc0lkfWAgOiAnL3ByaXZhY3ktYW5kLXRvcyc7XG5cbiAgICAgICAgICAgIHZvaWQgc3dhbFxuICAgICAgICAgICAgICAgIC5maXJlKHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2luZm8nLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0FjY2VwdCBUZXJtcyBvZiBTZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgaHRtbDogYEJ5IGNsaWNraW5nIGNvbnRpbnVlLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIG91ciA8YSBocmVmPVwiJHt0b3NVcmx9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlByaXZhY3kgUG9saWN5IGFuZCBQbGF0Zm9ybSBBZ3JlZW1lbnQ8L2E+LmAsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnQWNjZXB0IGFuZCBDb250aW51ZScsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93T3V0c2lkZUNsaWNrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dFc2NhcGVLZXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbmZpcm06IHRydWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNb2RhbCBjYW5ub3QgcmVhbGx5IGJlIGRpc21pc3NlZCB3aXRob3V0IGNvbmZpcm1hdGlvbiBkdWUgdG8gY29uZmlnIGFib3ZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGd1YXJkIGp1c3QgaW4gY2FzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUb3NNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIHRoZSBiYWNrZW5kIElTTyA4NjAxIGZvcm1hdCAoZS5nLiAyMDI1LTEyLTE1VDEwOjI3OjExLjI1MFopXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vd1V0YyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVVzZXJQcm9maWxlKHsgdG9zX2FjY2VwdGVkX2F0OiBub3dVdGMgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVXNlcjogVXNlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9zX2FjY2VwdGVkX2F0OiBub3dVdGNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldFVzZXIodXBkYXRlZFVzZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoJ1Rlcm1zIG9mIFNlcnZpY2UgYWNjZXB0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVG9zTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IEhlbHBlclNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGVycj8uZXJyb3IgfHwgZXJyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgc3dhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlyZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdVbmFibGUgdG8gcmVjb3JkIGFjY2VwdGFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnVHJ5IGFnYWluJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93T3V0c2lkZUNsaWNrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RXNjYXBlS2V5OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVG9zTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kSGFuZGxlVG9zQWNjZXB0YW5jZSh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmb2xsb3dVc2VyKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYCR7dGhpcy5lbmRwb2ludH0vdG9nZ2xlX3JlbGF0aW9uc2hpcC8ke2lkfWApO1xuICAgIH1cblxuICAgIHNlbmRTU09BY3RpdmF0aW9uRW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvY29nbml0by9jcmVhdGVfY29nbml0b191c2VyYCk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2x1ZyhzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgJHt0aGlzLmVuZHBvaW50fS91cGRhdGVfc2x1Z2AsIHsgc2x1ZyB9KTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50VXNlck9iamVjdChvYmplY3RfdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7dGhpcy5lbmRwb2ludH0vZ2V0X2N1cnJlbnRfdXNlcl9vYmplY3Q/b2JqZWN0PSR7b2JqZWN0X3R5cGV9YCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRW1haWwoZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VtYWlsJywgZGF0YVsnZW1haWwnXSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29uZmlybWF0aW9uX3BhdGgnLCBkYXRhWydjb25maXJtYXRpb25fcGF0aCddKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAke3RoaXMuZW5kcG9pbnR9L2VtYWlsYCwgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIGNoZWNrUGFzc3dvcmQoZGF0YTogeyBwYXNzd29yZDogc3RyaW5nIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYCR7dGhpcy5lbmRwb2ludH0vY2hlY2tfcGFzc3dvcmRgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBjb25maXJtVXNlcihcbiAgICAgICAgY29uZmlybWF0aW9uX3Rva2VuOiBzdHJpbmcsXG4gICAgICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkX2NvbmZpcm1hdGlvbjogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29uZmlybWF0aW9uX3Rva2VuJywgY29uZmlybWF0aW9uX3Rva2VuKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbWFpbCcsIGVtYWlsKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZF9jb25maXJtYXRpb24nLCBwYXNzd29yZF9jb25maXJtYXRpb24pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYCR7dGhpcy5lbmRwb2ludH0vY29uZmlybWAsIGZvcm1EYXRhKTtcbiAgICB9XG5cbiAgICBjaGVja1Rva2VuVmFsaWRpdHkodHlwZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlbWFpbDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoXG4gICAgICAgICAgICBgJHt0aGlzLmVuZHBvaW50fS9jaGVja190b2tlbl92YWxpZGl0eT90eXBlPSR7dHlwZX0mY29uZmlybWF0aW9uX3Rva2VuPSR7dG9rZW59JmVtYWlsPSR7ZW1haWx9YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFVzZXJOb3RpZmljYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke3RoaXMuZW5kcG9pbnR9L3VzZXJfbm90aWZpY2F0aW9uc2ApO1xuICAgIH1cblxuICAgIGFkZEF2YXRhcihmaWxlOiBGaWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS51cGxvYWQodGhpcy5lbmRwb2ludCwgZmlsZSwgJ2F2YXRhcicpO1xuICAgIH1cblxuICAgIGNyZWF0ZVR3b0ZhY3RvckF1dGhlbnRpY2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC90d29fZmFjdG9yX2F1dGhlbnRpY2F0b3IvY3JlYXRlYCk7XG4gICAgfVxuXG4gICAgdmVyaWZ5VHdvRmFjdG9yQXV0aGVudGljYXRvcihnb29nbGVfY29kZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yL3ZlcmlmaWNhdGlvbl9jb2RlYCwgeyBnb29nbGVfY29kZSB9KTtcbiAgICB9XG5cbiAgICBlbmFibGVUd29GYWN0b3JBdXRoZW50aWNhdG9yKGdvb2dsZV9jb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3R3b19mYWN0b3JfYXV0aGVudGljYXRvci9lbmFibGVgLCB7IGdvb2dsZV9jb2RlIH0pO1xuICAgIH1cblxuICAgIGRpc2FibGVUd29GYWN0b3JBdXRoZW50aWNhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAvdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yL2Rpc2FibGVgKTtcbiAgICB9XG5cbiAgICAvLyBVc2VyIEFQSSBFbmRzXG5cbiAgICB2YWxpZGF0ZU5ld0VtYWlsKGNvbmZpcm1hdGlvblRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChcbiAgICAgICAgICAgIGAke3RoaXMuZW5kcG9pbnR9L25ld19lbWFpbF9jb25maXJtP2NvbmZpcm1hdGlvbl90b2tlbj0ke2NvbmZpcm1hdGlvblRva2VufWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRVc2VyU3Vic2NyaXB0aW9ucyhpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC91c2Vycy8ke2lkfS9zdWJzY3JpcHRpb25zYCk7XG4gICAgfVxuXG4gICAgYWRkTmV3U3Vic2NyaXB0aW9uVXNpbmdTdHJpcGUoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCgnL3NpZ251cHMvdHJpYWxfdXNlcl9zdHJpcGVfYWNjb3VudCcsIGRhdGEpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhc3N3b3JkKGRhdGE6IHtcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmRfY29uZmlybWF0aW9uOiBzdHJpbmc7XG4gICAgICAgIG9sZF9wYXNzd29yZDogc3RyaW5nO1xuICAgIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dCgnL3Bhc3N3b3JkL3VwZGF0ZScsIGRhdGEpO1xuICAgIH1cblxuICAgIGdldFVzZXJJbnZvaWNlcyhwYWdpbmc6IFBhZ2luZywgaWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhgJHt0aGlzLmVuZHBvaW50fS9pbnZvaWNlc2AsIHtcbiAgICAgICAgICAgIC4uLkhlbHBlclNlcnZpY2UuZ2V0UGFnaW5nUGFyYW1zKHBhZ2luZyksXG4gICAgICAgICAgICB1c2VyX2lkOiBpZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0VGlwc0Rpc3JlZ2FyZGVkKGRhdGE6IHsgdGlwX2lkOiBudW1iZXI7IGRpc3JlZ2FyZGVkOiBib29sZWFuIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoJy91c2Vycy91c2VyX3RpcHMnLCBkYXRhKTtcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlckFwaVRva2VucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgJHt0aGlzLmVuZHBvaW50fS9yZWZyZXNoX3VzZXJfYXBpX3Rva2Vuc2ApO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,36 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class ValidationService {
4
- static { this.CustomValidatorPatterns = {
5
- StrongPassword: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])(?=.{8,})/,
6
- Year: '[0-9]{4}$'
7
- }; }
8
- /**
9
- * Validates email.
10
- */
11
- static email(input) {
12
- if (!input) {
13
- return false;
14
- }
15
- const reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
16
- return reg.test(input);
17
- }
18
- static patternValidator(regex, error) {
19
- return (control) => {
20
- if (!control.value) {
21
- // if control is empty return no error
22
- return null;
23
- }
24
- // test the value of the control against the regexp supplied
25
- const valid = regex.test(control.value);
26
- // if true, return no error (no error), else return error passed in the second parameter
27
- return valid ? null : error;
28
- };
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ValidationService }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ValidationService, decorators: [{
34
- type: Injectable
35
- }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi92YWxpZGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFPLGlCQUFpQjthQUNWLDRCQUF1QixHQUFHO1FBQ3RDLGNBQWMsRUFBRSwwREFBMEQ7UUFDMUUsSUFBSSxFQUFFLFdBQVc7S0FDcEIsQUFIc0MsQ0FHckM7SUFFRjs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsZ0RBQWdELENBQUM7UUFFN0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLEtBQXVCO1FBQzFELE9BQU8sQ0FBQyxPQUF3QixFQUE2QixFQUFFO1lBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pCLHNDQUFzQztnQkFDdEMsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUVELDREQUE0RDtZQUM1RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFlLENBQUMsQ0FBQztZQUVsRCx3RkFBd0Y7WUFDeEYsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztJQUNOLENBQUM7K0dBL0JRLGlCQUFpQjttSEFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgQ3VzdG9tVmFsaWRhdG9yUGF0dGVybnMgPSB7XG4gICAgICAgIFN0cm9uZ1Bhc3N3b3JkOiAvXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlxcZCkoPz0uKlshQCMkJV4mKl0pKD89Lns4LH0pLyxcbiAgICAgICAgWWVhcjogJ1swLTldezR9JCdcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGVtYWlsLlxuICAgICAqL1xuICAgIHN0YXRpYyBlbWFpbChpbnB1dDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWcgPSAvXlxcdysoWy0rLiddXFx3KykqQFxcdysoWy0uXVxcdyspKlxcLlxcdysoWy0uXVxcdyspKiQvO1xuXG4gICAgICAgIHJldHVybiByZWcudGVzdChpbnB1dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhdHRlcm5WYWxpZGF0b3IocmVnZXg6IFJlZ0V4cCwgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMpOiBWYWxpZGF0b3JGbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPT4ge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgY29udHJvbCBpcyBlbXB0eSByZXR1cm4gbm8gZXJyb3JcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgYWdhaW5zdCB0aGUgcmVnZXhwIHN1cHBsaWVkXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IHJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgICAvLyBpZiB0cnVlLCByZXR1cm4gbm8gZXJyb3IgKG5vIGVycm9yKSwgZWxzZSByZXR1cm4gZXJyb3IgcGFzc2VkIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG4gICAgICAgICAgICByZXR1cm4gdmFsaWQgPyBudWxsIDogZXJyb3I7XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
@@ -1,20 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class WindowService {
4
- /**
5
- * redirect to the given url
6
- * NOTE: this does hard page reload
7
- */
8
- replaceUrl(url) {
9
- window.location.href = url;
10
- }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: WindowService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
12
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: WindowService, providedIn: 'root' }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: WindowService, decorators: [{
15
- type: Injectable,
16
- args: [{
17
- providedIn: 'root'
18
- }]
19
- }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL3dpbmRvdy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxhQUFhO0lBQ3RCOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxHQUFXO1FBQ2xCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUMvQixDQUFDOytHQVBRLGFBQWE7bUhBQWIsYUFBYSxjQUZWLE1BQU07OzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdpbmRvd1NlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIHJlZGlyZWN0IHRvIHRoZSBnaXZlbiB1cmxcbiAgICAgKiBOT1RFOiB0aGlzIGRvZXMgaGFyZCBwYWdlIHJlbG9hZFxuICAgICAqL1xuICAgIHJlcGxhY2VVcmwodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgfVxufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXdpc2UtY29tbW9uLXNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL3Bvc2l3aXNlLWNvbW1vbi1zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==