@molecule/app-angular 1.0.0
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/LICENSE +115 -0
- package/dist/i18n-reactive.d.ts +41 -0
- package/dist/i18n-reactive.d.ts.map +1 -0
- package/dist/i18n-reactive.js +46 -0
- package/dist/i18n-reactive.js.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/providers.d.ts +96 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +144 -0
- package/dist/providers.js.map +1 -0
- package/dist/services/async-state.service.d.ts +50 -0
- package/dist/services/async-state.service.d.ts.map +1 -0
- package/dist/services/async-state.service.js +109 -0
- package/dist/services/async-state.service.js.map +1 -0
- package/dist/services/auth.service.d.ts +105 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/auth.service.js +124 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/capacitor-app.service.d.ts +46 -0
- package/dist/services/capacitor-app.service.d.ts.map +1 -0
- package/dist/services/capacitor-app.service.js +53 -0
- package/dist/services/capacitor-app.service.js.map +1 -0
- package/dist/services/change-password.service.d.ts +37 -0
- package/dist/services/change-password.service.d.ts.map +1 -0
- package/dist/services/change-password.service.js +34 -0
- package/dist/services/change-password.service.js.map +1 -0
- package/dist/services/device.service.d.ts +35 -0
- package/dist/services/device.service.d.ts.map +1 -0
- package/dist/services/device.service.js +29 -0
- package/dist/services/device.service.js.map +1 -0
- package/dist/services/forms.service.d.ts +237 -0
- package/dist/services/forms.service.d.ts.map +1 -0
- package/dist/services/forms.service.js +280 -0
- package/dist/services/forms.service.js.map +1 -0
- package/dist/services/http.service.d.ts +118 -0
- package/dist/services/http.service.d.ts.map +1 -0
- package/dist/services/http.service.js +171 -0
- package/dist/services/http.service.js.map +1 -0
- package/dist/services/i18n.service.d.ts +111 -0
- package/dist/services/i18n.service.d.ts.map +1 -0
- package/dist/services/i18n.service.js +135 -0
- package/dist/services/i18n.service.js.map +1 -0
- package/dist/services/index.d.ts +27 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +27 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/logger.service.d.ts +79 -0
- package/dist/services/logger.service.d.ts.map +1 -0
- package/dist/services/logger.service.js +110 -0
- package/dist/services/logger.service.js.map +1 -0
- package/dist/services/login.service.d.ts +37 -0
- package/dist/services/login.service.d.ts.map +1 -0
- package/dist/services/login.service.js +34 -0
- package/dist/services/login.service.js.map +1 -0
- package/dist/services/oauth.service.d.ts +110 -0
- package/dist/services/oauth.service.d.ts.map +1 -0
- package/dist/services/oauth.service.js +214 -0
- package/dist/services/oauth.service.js.map +1 -0
- package/dist/services/password-reset.service.d.ts +41 -0
- package/dist/services/password-reset.service.d.ts.map +1 -0
- package/dist/services/password-reset.service.js +45 -0
- package/dist/services/password-reset.service.js.map +1 -0
- package/dist/services/platform.service.d.ts +39 -0
- package/dist/services/platform.service.d.ts.map +1 -0
- package/dist/services/platform.service.js +33 -0
- package/dist/services/platform.service.js.map +1 -0
- package/dist/services/promise.service.d.ts +40 -0
- package/dist/services/promise.service.d.ts.map +1 -0
- package/dist/services/promise.service.js +85 -0
- package/dist/services/promise.service.js.map +1 -0
- package/dist/services/push.service.d.ts +45 -0
- package/dist/services/push.service.d.ts.map +1 -0
- package/dist/services/push.service.js +64 -0
- package/dist/services/push.service.js.map +1 -0
- package/dist/services/router.service.d.ts +114 -0
- package/dist/services/router.service.d.ts.map +1 -0
- package/dist/services/router.service.js +142 -0
- package/dist/services/router.service.js.map +1 -0
- package/dist/services/signup.service.d.ts +37 -0
- package/dist/services/signup.service.d.ts.map +1 -0
- package/dist/services/signup.service.js +34 -0
- package/dist/services/signup.service.js.map +1 -0
- package/dist/services/state.service.d.ts +82 -0
- package/dist/services/state.service.d.ts.map +1 -0
- package/dist/services/state.service.js +122 -0
- package/dist/services/state.service.js.map +1 -0
- package/dist/services/storage.service.d.ts +111 -0
- package/dist/services/storage.service.d.ts.map +1 -0
- package/dist/services/storage.service.js +167 -0
- package/dist/services/storage.service.js.map +1 -0
- package/dist/services/theme.service.d.ts +89 -0
- package/dist/services/theme.service.d.ts.map +1 -0
- package/dist/services/theme.service.js +116 -0
- package/dist/services/theme.service.js.map +1 -0
- package/dist/services/version.service.d.ts +44 -0
- package/dist/services/version.service.d.ts.map +1 -0
- package/dist/services/version.service.js +63 -0
- package/dist/services/version.service.js.map +1 -0
- package/dist/tokens.d.ts +47 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +39 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.service.d.ts","sourceRoot":"","sources":["../../src/services/platform.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,wBAAwB,CAAA;AAGpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAA;CAClD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB,QAAO,eAaxC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getPlatformInfo, isPlatform } from '@molecule/app-platform';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an Angular platform service with static platform information.
|
|
4
|
+
*
|
|
5
|
+
* @returns Platform service with platform flags and isPlatform check
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const platform = createPlatformService()
|
|
10
|
+
*
|
|
11
|
+
* if (platform.isMobile) {
|
|
12
|
+
* console.log('Running on mobile')
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* if (platform.isPlatform('ios', 'android')) {
|
|
16
|
+
* console.log('Running on iOS or Android')
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export const createPlatformService = () => {
|
|
21
|
+
const info = getPlatformInfo();
|
|
22
|
+
return {
|
|
23
|
+
platform: info.platform,
|
|
24
|
+
isNative: info.isNative,
|
|
25
|
+
isMobile: info.isMobile,
|
|
26
|
+
isDesktop: info.isDesktop,
|
|
27
|
+
isWeb: info.isWeb,
|
|
28
|
+
isDevelopment: info.isDevelopment,
|
|
29
|
+
isProduction: info.isProduction,
|
|
30
|
+
isPlatform: (...platforms) => isPlatform(...platforms),
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=platform.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.service.js","sourceRoot":"","sources":["../../src/services/platform.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAgBpE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE;IACzD,MAAM,IAAI,GAAiB,eAAe,EAAE,CAAA;IAE5C,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,UAAU,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;KACvD,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular utility for tracking async function state.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type Observable } from 'rxjs';
|
|
7
|
+
import type { PromiseState } from '@molecule/app-utilities';
|
|
8
|
+
/**
|
|
9
|
+
* Promise state manager.
|
|
10
|
+
* @returns The result.
|
|
11
|
+
*/
|
|
12
|
+
export interface PromiseStateManager<T> {
|
|
13
|
+
state$: Observable<PromiseState<T>>;
|
|
14
|
+
getState: () => PromiseState<T>;
|
|
15
|
+
call: (...args: any[]) => Promise<T>;
|
|
16
|
+
cancel: (message?: string) => void;
|
|
17
|
+
reset: () => void;
|
|
18
|
+
destroy: () => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates a promise state manager for tracking async function state.
|
|
22
|
+
*
|
|
23
|
+
* @param asyncFn - The async function to track
|
|
24
|
+
* @returns Promise state manager with observable state
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const { state$, call, cancel, reset, destroy } = createPromiseState(
|
|
29
|
+
* (id: string) => fetch(`/api/users/${id}`).then(r => r.json())
|
|
30
|
+
* )
|
|
31
|
+
*
|
|
32
|
+
* state$.subscribe(state => {
|
|
33
|
+
* console.log(state.status, state.value, state.error)
|
|
34
|
+
* })
|
|
35
|
+
*
|
|
36
|
+
* await call('123')
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const createPromiseState: <T extends (...args: any[]) => Promise<any>>(asyncFn: T) => PromiseStateManager<Awaited<ReturnType<T>>>;
|
|
40
|
+
//# sourceMappingURL=promise.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise.service.d.ts","sourceRoot":"","sources":["../../src/services/promise.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,QAAQ,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAA;IAC/B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACpC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAQD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAC3E,SAAS,CAAC,KACT,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAqE5C,CAAA"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular utility for tracking async function state.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
|
+
import { BehaviorSubject } from 'rxjs';
|
|
8
|
+
const createIdleState = () => ({
|
|
9
|
+
status: 'idle',
|
|
10
|
+
value: null,
|
|
11
|
+
error: null,
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Creates a promise state manager for tracking async function state.
|
|
15
|
+
*
|
|
16
|
+
* @param asyncFn - The async function to track
|
|
17
|
+
* @returns Promise state manager with observable state
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const { state$, call, cancel, reset, destroy } = createPromiseState(
|
|
22
|
+
* (id: string) => fetch(`/api/users/${id}`).then(r => r.json())
|
|
23
|
+
* )
|
|
24
|
+
*
|
|
25
|
+
* state$.subscribe(state => {
|
|
26
|
+
* console.log(state.status, state.value, state.error)
|
|
27
|
+
* })
|
|
28
|
+
*
|
|
29
|
+
* await call('123')
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export const createPromiseState = (asyncFn) => {
|
|
33
|
+
const subject = new BehaviorSubject(createIdleState());
|
|
34
|
+
let callId = 0;
|
|
35
|
+
let destroyed = false;
|
|
36
|
+
const getState = () => subject.getValue();
|
|
37
|
+
const call = (...args) => {
|
|
38
|
+
callId += 1;
|
|
39
|
+
const thisCallId = callId;
|
|
40
|
+
if (!destroyed) {
|
|
41
|
+
subject.next({ status: 'pending', value: null, error: null });
|
|
42
|
+
}
|
|
43
|
+
const promise = asyncFn(...args);
|
|
44
|
+
return promise.then((resolved) => {
|
|
45
|
+
if (thisCallId === callId && !destroyed) {
|
|
46
|
+
subject.next({ status: 'resolved', value: resolved, error: null });
|
|
47
|
+
}
|
|
48
|
+
return resolved;
|
|
49
|
+
}, (err) => {
|
|
50
|
+
const rejection = err instanceof Error ? err : new Error(String(err));
|
|
51
|
+
if (thisCallId === callId && !destroyed) {
|
|
52
|
+
subject.next({ status: 'rejected', value: null, error: rejection });
|
|
53
|
+
}
|
|
54
|
+
throw rejection;
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
const cancel = (message) => {
|
|
58
|
+
callId += 1;
|
|
59
|
+
if (!destroyed) {
|
|
60
|
+
subject.next({
|
|
61
|
+
status: 'rejected',
|
|
62
|
+
value: null,
|
|
63
|
+
error: message ? new Error(message) : null,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const reset = () => {
|
|
68
|
+
if (!destroyed) {
|
|
69
|
+
subject.next(createIdleState());
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const destroy = () => {
|
|
73
|
+
destroyed = true;
|
|
74
|
+
subject.complete();
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
state$: subject.asObservable(),
|
|
78
|
+
getState,
|
|
79
|
+
call,
|
|
80
|
+
cancel,
|
|
81
|
+
reset,
|
|
82
|
+
destroy,
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=promise.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise.service.js","sourceRoot":"","sources":["../../src/services/promise.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uDAAuD;AACvD,OAAO,EAAE,eAAe,EAAmB,MAAM,MAAM,CAAA;AAiBvD,MAAM,eAAe,GAAG,GAAuB,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;CACZ,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAU,EACmC,EAAE;IAG/C,MAAM,OAAO,GAAG,IAAI,eAAe,CAAkB,eAAe,EAAK,CAAC,CAAA;IAC1E,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,MAAM,QAAQ,GAAG,GAAoB,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;IAE1D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAW,EAAc,EAAE;QAC1C,MAAM,IAAI,CAAC,CAAA;QACX,MAAM,UAAU,GAAG,MAAM,CAAA;QAEzB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;QAEhC,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,QAAW,EAAE,EAAE;YACd,IAAI,UAAU,KAAK,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACpE,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC,EACD,CAAC,GAAY,EAAE,EAAE;YACf,MAAM,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAErE,IAAI,UAAU,KAAK,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;YACrE,CAAC;YAED,MAAM,SAAS,CAAA;QACjB,CAAC,CACF,CAAA;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAQ,EAAE;QACxC,MAAM,IAAI,CAAC,CAAA;QAEX,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;aAC3C,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,eAAe,EAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,SAAS,GAAG,IAAI,CAAA;QAChB,OAAO,CAAC,QAAQ,EAAE,CAAA;IACpB,CAAC,CAAA;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE;QAC9B,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,KAAK;QACL,OAAO;KACR,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular push notifications service with reactive state.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type Observable } from 'rxjs';
|
|
7
|
+
import type { NotificationActionListener, NotificationReceivedListener, PermissionStatus, PushRegisterOptions, PushToken, TokenChangeListener } from '@molecule/app-push';
|
|
8
|
+
/**
|
|
9
|
+
* Push service interface.
|
|
10
|
+
*/
|
|
11
|
+
export interface PushService {
|
|
12
|
+
permission$: Observable<PermissionStatus | null>;
|
|
13
|
+
token$: Observable<PushToken | null>;
|
|
14
|
+
getPermission: () => PermissionStatus | null;
|
|
15
|
+
getToken: () => PushToken | null;
|
|
16
|
+
checkPermission: () => Promise<PermissionStatus>;
|
|
17
|
+
requestPermission: () => Promise<PermissionStatus>;
|
|
18
|
+
register: (options?: PushRegisterOptions) => Promise<PushToken>;
|
|
19
|
+
unregister: () => Promise<void>;
|
|
20
|
+
onNotificationReceived: (listener: NotificationReceivedListener) => () => void;
|
|
21
|
+
onNotificationAction: (listener: NotificationActionListener) => () => void;
|
|
22
|
+
onTokenChange: (listener: TokenChangeListener) => () => void;
|
|
23
|
+
setBadge: (count: number) => Promise<void>;
|
|
24
|
+
clearBadge: () => Promise<void>;
|
|
25
|
+
destroy: () => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates an Angular push notifications service with reactive state.
|
|
29
|
+
*
|
|
30
|
+
* @returns Push service with observables and action methods
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const push = createPushService()
|
|
35
|
+
*
|
|
36
|
+
* push.permission$.subscribe(status => {
|
|
37
|
+
* console.log('Permission:', status)
|
|
38
|
+
* })
|
|
39
|
+
*
|
|
40
|
+
* await push.requestPermission()
|
|
41
|
+
* const token = await push.register()
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare const createPushService: () => PushService;
|
|
45
|
+
//# sourceMappingURL=push.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.service.d.ts","sourceRoot":"","sources":["../../src/services/push.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAEvD,OAAO,KAAK,EACV,0BAA0B,EAC1B,4BAA4B,EAC5B,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAG3B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAChD,MAAM,EAAE,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IACpC,aAAa,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAA;IAC5C,QAAQ,EAAE,MAAM,SAAS,GAAG,IAAI,CAAA;IAChC,eAAe,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAChD,iBAAiB,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClD,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/D,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,sBAAsB,EAAE,CAAC,QAAQ,EAAE,4BAA4B,KAAK,MAAM,IAAI,CAAA;IAC9E,oBAAoB,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,MAAM,IAAI,CAAA;IAC1E,aAAa,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,MAAM,IAAI,CAAA;IAC5D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,QAAO,WAuCpC,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular push notifications service with reactive state.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { BehaviorSubject } from 'rxjs';
|
|
7
|
+
import { getProvider } from '@molecule/app-push';
|
|
8
|
+
/**
|
|
9
|
+
* Creates an Angular push notifications service with reactive state.
|
|
10
|
+
*
|
|
11
|
+
* @returns Push service with observables and action methods
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const push = createPushService()
|
|
16
|
+
*
|
|
17
|
+
* push.permission$.subscribe(status => {
|
|
18
|
+
* console.log('Permission:', status)
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* await push.requestPermission()
|
|
22
|
+
* const token = await push.register()
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const createPushService = () => {
|
|
26
|
+
const provider = getProvider();
|
|
27
|
+
const permissionSubject = new BehaviorSubject(null);
|
|
28
|
+
const tokenSubject = new BehaviorSubject(null);
|
|
29
|
+
return {
|
|
30
|
+
permission$: permissionSubject.asObservable(),
|
|
31
|
+
token$: tokenSubject.asObservable(),
|
|
32
|
+
getPermission: () => permissionSubject.getValue(),
|
|
33
|
+
getToken: () => tokenSubject.getValue(),
|
|
34
|
+
checkPermission: async () => {
|
|
35
|
+
const status = await provider.checkPermission();
|
|
36
|
+
permissionSubject.next(status);
|
|
37
|
+
return status;
|
|
38
|
+
},
|
|
39
|
+
requestPermission: async () => {
|
|
40
|
+
const status = await provider.requestPermission();
|
|
41
|
+
permissionSubject.next(status);
|
|
42
|
+
return status;
|
|
43
|
+
},
|
|
44
|
+
register: async (options) => {
|
|
45
|
+
const token = await provider.register(options);
|
|
46
|
+
tokenSubject.next(token);
|
|
47
|
+
return token;
|
|
48
|
+
},
|
|
49
|
+
unregister: async () => {
|
|
50
|
+
await provider.unregister();
|
|
51
|
+
tokenSubject.next(null);
|
|
52
|
+
},
|
|
53
|
+
onNotificationReceived: (listener) => provider.onNotificationReceived(listener),
|
|
54
|
+
onNotificationAction: (listener) => provider.onNotificationAction(listener),
|
|
55
|
+
onTokenChange: (listener) => provider.onTokenChange(listener),
|
|
56
|
+
setBadge: (count) => provider.setBadge(count),
|
|
57
|
+
clearBadge: () => provider.clearBadge(),
|
|
58
|
+
destroy: () => {
|
|
59
|
+
permissionSubject.complete();
|
|
60
|
+
tokenSubject.complete();
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=push.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.service.js","sourceRoot":"","sources":["../../src/services/push.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAmB,MAAM,MAAM,CAAA;AAUvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAsBhD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAgB,EAAE;IACjD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC,CAAA;IAC5E,MAAM,YAAY,GAAG,IAAI,eAAe,CAAmB,IAAI,CAAC,CAAA;IAEhE,OAAO;QACL,WAAW,EAAE,iBAAiB,CAAC,YAAY,EAAE;QAC7C,MAAM,EAAE,YAAY,CAAC,YAAY,EAAE;QACnC,aAAa,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE;QACjD,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE;QACvC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAA;YAC/C,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC9B,OAAO,MAAM,CAAA;QACf,CAAC;QACD,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAA;YACjD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC9B,OAAO,MAAM,CAAA;QACf,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,OAA6B,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC9C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAA;YAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,sBAAsB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAC/E,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAC3E,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC7D,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7C,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;QACvC,OAAO,EAAE,GAAG,EAAE;YACZ,iBAAiB,CAAC,QAAQ,EAAE,CAAA;YAC5B,YAAY,CAAC,QAAQ,EAAE,CAAA;QACzB,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular service for routing.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type OnDestroy } from '@angular/core';
|
|
7
|
+
import { type Observable } from 'rxjs';
|
|
8
|
+
import type { NavigateOptions, QueryParams, RouteLocation, RouteParams, Router } from '@molecule/app-routing';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
/**
|
|
11
|
+
* Angular service for routing.
|
|
12
|
+
*
|
|
13
|
+
* Wraps molecule router and exposes state as RxJS observables.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* @Component({
|
|
18
|
+
* selector: 'app-nav',
|
|
19
|
+
* template: `
|
|
20
|
+
* <nav>
|
|
21
|
+
* <a (click)="navigate('/home')">Home</a>
|
|
22
|
+
* <span>Current: {{ (location$ | async)?.pathname }}</span>
|
|
23
|
+
* </nav>
|
|
24
|
+
* `
|
|
25
|
+
* })
|
|
26
|
+
* export class NavComponent {
|
|
27
|
+
* location$ = this.routerService.location$
|
|
28
|
+
*
|
|
29
|
+
* constructor(private routerService: MoleculeRouterService) {}
|
|
30
|
+
*
|
|
31
|
+
* navigate(path: string) {
|
|
32
|
+
* this.routerService.navigate(path)
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class MoleculeRouterService implements OnDestroy {
|
|
38
|
+
private router;
|
|
39
|
+
private locationSubject;
|
|
40
|
+
private paramsSubject;
|
|
41
|
+
private querySubject;
|
|
42
|
+
private unsubscribe;
|
|
43
|
+
/**
|
|
44
|
+
* Observable of the current location.
|
|
45
|
+
*/
|
|
46
|
+
location$: Observable<RouteLocation>;
|
|
47
|
+
/**
|
|
48
|
+
* Observable of route parameters.
|
|
49
|
+
*/
|
|
50
|
+
params$: Observable<RouteParams>;
|
|
51
|
+
/**
|
|
52
|
+
* Observable of query parameters.
|
|
53
|
+
*/
|
|
54
|
+
query$: Observable<QueryParams>;
|
|
55
|
+
/**
|
|
56
|
+
* Observable of the current pathname.
|
|
57
|
+
*/
|
|
58
|
+
pathname$: Observable<string>;
|
|
59
|
+
constructor(router: Router);
|
|
60
|
+
/**
|
|
61
|
+
* Get the current location snapshot.
|
|
62
|
+
* @returns The result.
|
|
63
|
+
*/
|
|
64
|
+
get location(): RouteLocation;
|
|
65
|
+
/**
|
|
66
|
+
* Get the current params snapshot.
|
|
67
|
+
* @returns The result.
|
|
68
|
+
*/
|
|
69
|
+
get params(): RouteParams;
|
|
70
|
+
/**
|
|
71
|
+
* Get the current query snapshot.
|
|
72
|
+
* @returns The result.
|
|
73
|
+
*/
|
|
74
|
+
get query(): QueryParams;
|
|
75
|
+
/**
|
|
76
|
+
* Navigate to a path.
|
|
77
|
+
*
|
|
78
|
+
* @param path - Target path
|
|
79
|
+
* @param options - Navigation options
|
|
80
|
+
*/
|
|
81
|
+
navigate(path: string, options?: NavigateOptions): void;
|
|
82
|
+
/**
|
|
83
|
+
* Navigate to a named route.
|
|
84
|
+
*
|
|
85
|
+
* @param name - Route name
|
|
86
|
+
* @param params - Route parameters
|
|
87
|
+
* @param query - Query parameters
|
|
88
|
+
* @param options - Navigation options
|
|
89
|
+
*/
|
|
90
|
+
navigateTo(name: string, params?: RouteParams, query?: QueryParams, options?: NavigateOptions): void;
|
|
91
|
+
/**
|
|
92
|
+
* Go back in history.
|
|
93
|
+
*/
|
|
94
|
+
back(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Go forward in history.
|
|
97
|
+
*/
|
|
98
|
+
forward(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Check if a path is currently active.
|
|
101
|
+
*
|
|
102
|
+
* @param path - Path to check
|
|
103
|
+
* @param exact - Whether to match exactly
|
|
104
|
+
* @returns The result.
|
|
105
|
+
*/
|
|
106
|
+
isActive(path: string, exact?: boolean): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Cleans up subscriptions and completes subjects on service destruction.
|
|
109
|
+
*/
|
|
110
|
+
ngOnDestroy(): void;
|
|
111
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MoleculeRouterService, never>;
|
|
112
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MoleculeRouterService>;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=router.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.service.d.ts","sourceRoot":"","sources":["../../src/services/router.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAA8C,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAElF,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,WAAW,EACX,MAAM,EACP,MAAM,uBAAuB,CAAA;;AAI9B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAMa,qBAAsB,YAAW,SAAS;IA0BzB,OAAO,CAAC,MAAM;IAzB1C,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,WAAW,CAA4B;IAE/C;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC,aAAa,CAAC,CAAA;IAEpC;;OAEG;IACH,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAEhC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAE/B;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;gBAEO,MAAM,EAAE,MAAM;IAqBlD;;;OAGG;IACH,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,WAAW,CAExB;IAED;;;OAGG;IACH,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IAIvD;;;;;;;OAOG;IACH,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI;IAIP;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO;IAI9C;;OAEG;IACH,WAAW,IAAI,IAAI;yCA9HR,qBAAqB;6CAArB,qBAAqB;CAoIjC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular service for routing.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { Inject, Injectable } from '@angular/core';
|
|
7
|
+
import { BehaviorSubject, distinctUntilChanged, map } from 'rxjs';
|
|
8
|
+
import { ROUTER } from '../tokens.js';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
/**
|
|
11
|
+
* Angular service for routing.
|
|
12
|
+
*
|
|
13
|
+
* Wraps molecule router and exposes state as RxJS observables.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* @Component({
|
|
18
|
+
* selector: 'app-nav',
|
|
19
|
+
* template: `
|
|
20
|
+
* <nav>
|
|
21
|
+
* <a (click)="navigate('/home')">Home</a>
|
|
22
|
+
* <span>Current: {{ (location$ | async)?.pathname }}</span>
|
|
23
|
+
* </nav>
|
|
24
|
+
* `
|
|
25
|
+
* })
|
|
26
|
+
* export class NavComponent {
|
|
27
|
+
* location$ = this.routerService.location$
|
|
28
|
+
*
|
|
29
|
+
* constructor(private routerService: MoleculeRouterService) {}
|
|
30
|
+
*
|
|
31
|
+
* navigate(path: string) {
|
|
32
|
+
* this.routerService.navigate(path)
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Molecule Router Service class.
|
|
39
|
+
*/
|
|
40
|
+
export class MoleculeRouterService {
|
|
41
|
+
constructor(router) {
|
|
42
|
+
this.router = router;
|
|
43
|
+
this.unsubscribe = null;
|
|
44
|
+
this.locationSubject = new BehaviorSubject(router.getLocation());
|
|
45
|
+
this.paramsSubject = new BehaviorSubject(router.getParams());
|
|
46
|
+
this.querySubject = new BehaviorSubject(router.getQuery());
|
|
47
|
+
this.unsubscribe = router.subscribe(() => {
|
|
48
|
+
this.locationSubject.next(router.getLocation());
|
|
49
|
+
this.paramsSubject.next(router.getParams());
|
|
50
|
+
this.querySubject.next(router.getQuery());
|
|
51
|
+
});
|
|
52
|
+
this.location$ = this.locationSubject.asObservable();
|
|
53
|
+
this.params$ = this.paramsSubject.asObservable();
|
|
54
|
+
this.query$ = this.querySubject.asObservable();
|
|
55
|
+
this.pathname$ = this.location$.pipe(map((loc) => loc.pathname), distinctUntilChanged());
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the current location snapshot.
|
|
59
|
+
* @returns The result.
|
|
60
|
+
*/
|
|
61
|
+
get location() {
|
|
62
|
+
return this.router.getLocation();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get the current params snapshot.
|
|
66
|
+
* @returns The result.
|
|
67
|
+
*/
|
|
68
|
+
get params() {
|
|
69
|
+
return this.router.getParams();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the current query snapshot.
|
|
73
|
+
* @returns The result.
|
|
74
|
+
*/
|
|
75
|
+
get query() {
|
|
76
|
+
return this.router.getQuery();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Navigate to a path.
|
|
80
|
+
*
|
|
81
|
+
* @param path - Target path
|
|
82
|
+
* @param options - Navigation options
|
|
83
|
+
*/
|
|
84
|
+
navigate(path, options) {
|
|
85
|
+
this.router.navigate(path, options);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Navigate to a named route.
|
|
89
|
+
*
|
|
90
|
+
* @param name - Route name
|
|
91
|
+
* @param params - Route parameters
|
|
92
|
+
* @param query - Query parameters
|
|
93
|
+
* @param options - Navigation options
|
|
94
|
+
*/
|
|
95
|
+
navigateTo(name, params, query, options) {
|
|
96
|
+
this.router.navigateTo(name, params, query, options);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Go back in history.
|
|
100
|
+
*/
|
|
101
|
+
back() {
|
|
102
|
+
this.router.back();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Go forward in history.
|
|
106
|
+
*/
|
|
107
|
+
forward() {
|
|
108
|
+
this.router.forward();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if a path is currently active.
|
|
112
|
+
*
|
|
113
|
+
* @param path - Path to check
|
|
114
|
+
* @param exact - Whether to match exactly
|
|
115
|
+
* @returns The result.
|
|
116
|
+
*/
|
|
117
|
+
isActive(path, exact = false) {
|
|
118
|
+
return this.router.isActive(path, exact);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Cleans up subscriptions and completes subjects on service destruction.
|
|
122
|
+
*/
|
|
123
|
+
ngOnDestroy() {
|
|
124
|
+
this.unsubscribe?.();
|
|
125
|
+
this.locationSubject.complete();
|
|
126
|
+
this.paramsSubject.complete();
|
|
127
|
+
this.querySubject.complete();
|
|
128
|
+
}
|
|
129
|
+
static { this.ɵfac = function MoleculeRouterService_Factory(__ngFactoryType__) { /* @ts-ignore */
|
|
130
|
+
return new (__ngFactoryType__ || MoleculeRouterService)(i0.ɵɵinject(ROUTER)); }; }
|
|
131
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MoleculeRouterService, factory: MoleculeRouterService.ɵfac, providedIn: 'root' }); }
|
|
132
|
+
}
|
|
133
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MoleculeRouterService, [{
|
|
134
|
+
type: Injectable,
|
|
135
|
+
args: [{
|
|
136
|
+
providedIn: 'root',
|
|
137
|
+
}]
|
|
138
|
+
}], () => [{ type: undefined, decorators: [{
|
|
139
|
+
type: Inject,
|
|
140
|
+
args: [ROUTER]
|
|
141
|
+
}] }], null); })();
|
|
142
|
+
//# sourceMappingURL=router.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.service.js","sourceRoot":"","sources":["../../src/services/router.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular utility for registration with async state tracking.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { Observable } from 'rxjs';
|
|
7
|
+
import type { AuthClient, AuthResult, RegisterData } from '@molecule/app-auth';
|
|
8
|
+
import type { PromiseState } from '@molecule/app-utilities';
|
|
9
|
+
/**
|
|
10
|
+
* Signup state manager.
|
|
11
|
+
*/
|
|
12
|
+
export interface SignupStateManager<T = unknown> {
|
|
13
|
+
state$: Observable<PromiseState<AuthResult<T>>>;
|
|
14
|
+
getState: () => PromiseState<AuthResult<T>>;
|
|
15
|
+
signup: (data: RegisterData) => Promise<AuthResult<T>>;
|
|
16
|
+
reset: () => void;
|
|
17
|
+
destroy: () => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a signup state manager with async state tracking.
|
|
21
|
+
*
|
|
22
|
+
* @param client - Auth client
|
|
23
|
+
* @returns Signup state manager
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const signupManager = createSignupState(authClient)
|
|
28
|
+
*
|
|
29
|
+
* signupManager.state$.subscribe(state => {
|
|
30
|
+
* console.log(state.status) // 'idle' | 'pending' | 'resolved' | 'rejected'
|
|
31
|
+
* })
|
|
32
|
+
*
|
|
33
|
+
* await signupManager.signup({ email: 'user@example.com', password: 'secret' })
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function createSignupState<T = unknown>(client: AuthClient<T>): SignupStateManager<T>;
|
|
37
|
+
//# sourceMappingURL=signup.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.service.d.ts","sourceRoot":"","sources":["../../src/services/signup.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAI3D;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,QAAQ,EAAE,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAU3F"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular utility for registration with async state tracking.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { createPromiseState } from './promise.service.js';
|
|
7
|
+
/**
|
|
8
|
+
* Creates a signup state manager with async state tracking.
|
|
9
|
+
*
|
|
10
|
+
* @param client - Auth client
|
|
11
|
+
* @returns Signup state manager
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const signupManager = createSignupState(authClient)
|
|
16
|
+
*
|
|
17
|
+
* signupManager.state$.subscribe(state => {
|
|
18
|
+
* console.log(state.status) // 'idle' | 'pending' | 'resolved' | 'rejected'
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* await signupManager.signup({ email: 'user@example.com', password: 'secret' })
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function createSignupState(client) {
|
|
25
|
+
const manager = createPromiseState((data) => client.register(data));
|
|
26
|
+
return {
|
|
27
|
+
state$: manager.state$,
|
|
28
|
+
getState: manager.getState,
|
|
29
|
+
signup: manager.call,
|
|
30
|
+
reset: manager.reset,
|
|
31
|
+
destroy: manager.destroy,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=signup.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.service.js","sourceRoot":"","sources":["../../src/services/signup.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAazD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAAc,MAAqB;IAClE,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,IAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAEjF,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,IAAI;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAA;AACH,CAAC"}
|