@molecule/app-solid 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.
Files changed (107) hide show
  1. package/LICENSE +115 -0
  2. package/README.md +2543 -0
  3. package/dist/context.d.ts +82 -0
  4. package/dist/context.d.ts.map +1 -0
  5. package/dist/context.js +141 -0
  6. package/dist/context.js.map +1 -0
  7. package/dist/index.d.ts +61 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +61 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/primitives/async-state.d.ts +46 -0
  12. package/dist/primitives/async-state.d.ts.map +1 -0
  13. package/dist/primitives/async-state.js +83 -0
  14. package/dist/primitives/async-state.js.map +1 -0
  15. package/dist/primitives/auth.d.ts +85 -0
  16. package/dist/primitives/auth.d.ts.map +1 -0
  17. package/dist/primitives/auth.js +147 -0
  18. package/dist/primitives/auth.js.map +1 -0
  19. package/dist/primitives/capacitor-app.d.ts +46 -0
  20. package/dist/primitives/capacitor-app.d.ts.map +1 -0
  21. package/dist/primitives/capacitor-app.js +57 -0
  22. package/dist/primitives/capacitor-app.js.map +1 -0
  23. package/dist/primitives/change-password.d.ts +36 -0
  24. package/dist/primitives/change-password.d.ts.map +1 -0
  25. package/dist/primitives/change-password.js +32 -0
  26. package/dist/primitives/change-password.js.map +1 -0
  27. package/dist/primitives/device.d.ts +48 -0
  28. package/dist/primitives/device.d.ts.map +1 -0
  29. package/dist/primitives/device.js +47 -0
  30. package/dist/primitives/device.js.map +1 -0
  31. package/dist/primitives/forms.d.ts +193 -0
  32. package/dist/primitives/forms.d.ts.map +1 -0
  33. package/dist/primitives/forms.js +309 -0
  34. package/dist/primitives/forms.js.map +1 -0
  35. package/dist/primitives/http.d.ts +176 -0
  36. package/dist/primitives/http.d.ts.map +1 -0
  37. package/dist/primitives/http.js +254 -0
  38. package/dist/primitives/http.js.map +1 -0
  39. package/dist/primitives/i18n.d.ts +146 -0
  40. package/dist/primitives/i18n.d.ts.map +1 -0
  41. package/dist/primitives/i18n.js +223 -0
  42. package/dist/primitives/i18n.js.map +1 -0
  43. package/dist/primitives/index.d.ts +27 -0
  44. package/dist/primitives/index.d.ts.map +1 -0
  45. package/dist/primitives/index.js +27 -0
  46. package/dist/primitives/index.js.map +1 -0
  47. package/dist/primitives/logger.d.ts +143 -0
  48. package/dist/primitives/logger.d.ts.map +1 -0
  49. package/dist/primitives/logger.js +165 -0
  50. package/dist/primitives/logger.js.map +1 -0
  51. package/dist/primitives/login.d.ts +37 -0
  52. package/dist/primitives/login.d.ts.map +1 -0
  53. package/dist/primitives/login.js +32 -0
  54. package/dist/primitives/login.js.map +1 -0
  55. package/dist/primitives/oauth.d.ts +102 -0
  56. package/dist/primitives/oauth.d.ts.map +1 -0
  57. package/dist/primitives/oauth.js +232 -0
  58. package/dist/primitives/oauth.js.map +1 -0
  59. package/dist/primitives/password-reset.d.ts +46 -0
  60. package/dist/primitives/password-reset.d.ts.map +1 -0
  61. package/dist/primitives/password-reset.js +49 -0
  62. package/dist/primitives/password-reset.js.map +1 -0
  63. package/dist/primitives/platform.d.ts +48 -0
  64. package/dist/primitives/platform.d.ts.map +1 -0
  65. package/dist/primitives/platform.js +47 -0
  66. package/dist/primitives/platform.js.map +1 -0
  67. package/dist/primitives/promise.d.ts +46 -0
  68. package/dist/primitives/promise.d.ts.map +1 -0
  69. package/dist/primitives/promise.js +104 -0
  70. package/dist/primitives/promise.js.map +1 -0
  71. package/dist/primitives/push.d.ts +52 -0
  72. package/dist/primitives/push.d.ts.map +1 -0
  73. package/dist/primitives/push.js +72 -0
  74. package/dist/primitives/push.js.map +1 -0
  75. package/dist/primitives/router.d.ts +170 -0
  76. package/dist/primitives/router.d.ts.map +1 -0
  77. package/dist/primitives/router.js +251 -0
  78. package/dist/primitives/router.js.map +1 -0
  79. package/dist/primitives/signup.d.ts +37 -0
  80. package/dist/primitives/signup.d.ts.map +1 -0
  81. package/dist/primitives/signup.js +32 -0
  82. package/dist/primitives/signup.js.map +1 -0
  83. package/dist/primitives/state.d.ts +132 -0
  84. package/dist/primitives/state.d.ts.map +1 -0
  85. package/dist/primitives/state.js +167 -0
  86. package/dist/primitives/state.js.map +1 -0
  87. package/dist/primitives/storage.d.ts +132 -0
  88. package/dist/primitives/storage.d.ts.map +1 -0
  89. package/dist/primitives/storage.js +275 -0
  90. package/dist/primitives/storage.js.map +1 -0
  91. package/dist/primitives/theme.d.ts +106 -0
  92. package/dist/primitives/theme.d.ts.map +1 -0
  93. package/dist/primitives/theme.js +187 -0
  94. package/dist/primitives/theme.js.map +1 -0
  95. package/dist/primitives/version.d.ts +50 -0
  96. package/dist/primitives/version.d.ts.map +1 -0
  97. package/dist/primitives/version.js +62 -0
  98. package/dist/primitives/version.js.map +1 -0
  99. package/dist/provider.d.ts +36 -0
  100. package/dist/provider.d.ts.map +1 -0
  101. package/dist/provider.jsx +71 -0
  102. package/dist/provider.jsx.map +1 -0
  103. package/dist/types.d.ts +82 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +7 -0
  106. package/dist/types.js.map +1 -0
  107. package/package.json +58 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Solid.js primitives for molecule.dev framework bindings.
3
+ *
4
+ * @module
5
+ */
6
+ export * from './async-state.js';
7
+ export * from './auth.js';
8
+ export * from './capacitor-app.js';
9
+ export * from './change-password.js';
10
+ export * from './device.js';
11
+ export * from './forms.js';
12
+ export * from './http.js';
13
+ export * from './i18n.js';
14
+ export * from './logger.js';
15
+ export * from './login.js';
16
+ export * from './oauth.js';
17
+ export * from './password-reset.js';
18
+ export * from './platform.js';
19
+ export * from './promise.js';
20
+ export * from './push.js';
21
+ export * from './router.js';
22
+ export * from './signup.js';
23
+ export * from './state.js';
24
+ export * from './storage.js';
25
+ export * from './theme.js';
26
+ export * from './version.js';
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Solid.js primitives for logging.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Logger, LoggerConfig, LoggerProvider } from '@molecule/app-logger';
7
+ /**
8
+ * Get a logger instance.
9
+ *
10
+ * @param name - Logger name
11
+ * @returns Logger instance
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * import { getLogger } from '@molecule/app-solid'
16
+ * import { onMount, onCleanup } from 'solid-js'
17
+ *
18
+ * function MyComponent() {
19
+ * const logger = getLogger('MyComponent')
20
+ *
21
+ * onMount(() => {
22
+ * logger.info('Component mounted')
23
+ * })
24
+ *
25
+ * onCleanup(() => {
26
+ * logger.debug('Component unmounted')
27
+ * })
28
+ *
29
+ * const handleError = (error: Error) => {
30
+ * logger.error('Operation failed', error)
31
+ * }
32
+ *
33
+ * return <div>...</div>
34
+ * }
35
+ * ```
36
+ */
37
+ export declare function getLogger(name?: string): Logger;
38
+ /**
39
+ * Create a logger with custom configuration.
40
+ *
41
+ * @param config - Logger configuration
42
+ * @returns Logger instance
43
+ *
44
+ * @example
45
+ * ```tsx
46
+ * const logger = createLogger({
47
+ * name: 'API',
48
+ * level: 'debug',
49
+ * context: { module: 'api' },
50
+ * })
51
+ * ```
52
+ */
53
+ export declare function createLogger(config: LoggerConfig): Logger;
54
+ /**
55
+ * Get the root logger.
56
+ *
57
+ * @returns Root logger instance
58
+ */
59
+ export declare function getRootLogger(): Logger;
60
+ /**
61
+ * Create a child logger with additional context.
62
+ *
63
+ * @param name - Parent logger name
64
+ * @param context - Additional context
65
+ * @returns Child logger instance
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * function UserProfile(props: { userId: string }) {
70
+ * const logger = getChildLogger('UserProfile', { userId: props.userId })
71
+ * // All logs will include userId in context
72
+ * logger.info('Profile loaded')
73
+ * }
74
+ * ```
75
+ */
76
+ export declare function getChildLogger(name: string, context: Record<string, unknown>): Logger;
77
+ /**
78
+ * Create a component logger that includes component name in context.
79
+ *
80
+ * @param componentName - Name of the component
81
+ * @returns Logger configured for the component
82
+ *
83
+ * @example
84
+ * ```tsx
85
+ * function Dashboard() {
86
+ * const logger = useComponentLogger('Dashboard')
87
+ *
88
+ * const handleRefresh = () => {
89
+ * logger.info('Dashboard refreshed')
90
+ * }
91
+ *
92
+ * return <button onClick={handleRefresh}>Refresh</button>
93
+ * }
94
+ * ```
95
+ */
96
+ export declare function useComponentLogger(componentName: string): Logger;
97
+ /**
98
+ * Create logger helpers from context.
99
+ *
100
+ * @returns Logger helper functions
101
+ */
102
+ /**
103
+ * Creates a logger helpers.
104
+ * @returns The created result.
105
+ */
106
+ export declare function createLoggerHelpers(): {
107
+ getLogger: (name?: string) => Logger;
108
+ createLogger: (config: LoggerConfig) => Logger;
109
+ setLevel: (level: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent') => void;
110
+ getLevel: () => string;
111
+ enable: () => void;
112
+ disable: () => void;
113
+ isEnabled: () => boolean;
114
+ };
115
+ /**
116
+ * Create logger helpers from a specific provider.
117
+ *
118
+ * @param provider - Logger provider
119
+ * @returns Logger helper functions
120
+ */
121
+ /**
122
+ * Creates a logger helpers from provider.
123
+ * @param provider - The provider implementation.
124
+ * @returns The created result.
125
+ */
126
+ export declare function createLoggerHelpersFromProvider(provider: LoggerProvider): {
127
+ getLogger: (name?: string) => Logger;
128
+ createLogger: (config: LoggerConfig) => Logger;
129
+ setLevel: (level: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent') => void;
130
+ getLevel: () => string;
131
+ enable: () => void;
132
+ disable: () => void;
133
+ isEnabled: () => boolean;
134
+ };
135
+ /**
136
+ * Create logger from a specific provider.
137
+ *
138
+ * @param provider - Logger provider
139
+ * @param name - Logger name
140
+ * @returns Logger instance
141
+ */
142
+ export declare function createLoggerFromProvider(provider: LoggerProvider, name?: string): Logger;
143
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/primitives/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAIhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAGzD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIrF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAA;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAA;IACnF,QAAQ,EAAE,MAAM,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,MAAM,OAAO,CAAA;CACzB,CAaA;AAED;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,cAAc,GAAG;IACzE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAA;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAA;IACnF,QAAQ,EAAE,MAAM,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,MAAM,OAAO,CAAA;CACzB,CAWA;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAExF"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Solid.js primitives for logging.
3
+ *
4
+ * @module
5
+ */
6
+ import { getLoggerProvider } from '../context.js';
7
+ /**
8
+ * Get a logger instance.
9
+ *
10
+ * @param name - Logger name
11
+ * @returns Logger instance
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * import { getLogger } from '@molecule/app-solid'
16
+ * import { onMount, onCleanup } from 'solid-js'
17
+ *
18
+ * function MyComponent() {
19
+ * const logger = getLogger('MyComponent')
20
+ *
21
+ * onMount(() => {
22
+ * logger.info('Component mounted')
23
+ * })
24
+ *
25
+ * onCleanup(() => {
26
+ * logger.debug('Component unmounted')
27
+ * })
28
+ *
29
+ * const handleError = (error: Error) => {
30
+ * logger.error('Operation failed', error)
31
+ * }
32
+ *
33
+ * return <div>...</div>
34
+ * }
35
+ * ```
36
+ */
37
+ export function getLogger(name) {
38
+ const provider = getLoggerProvider();
39
+ return provider.getLogger(name);
40
+ }
41
+ /**
42
+ * Create a logger with custom configuration.
43
+ *
44
+ * @param config - Logger configuration
45
+ * @returns Logger instance
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * const logger = createLogger({
50
+ * name: 'API',
51
+ * level: 'debug',
52
+ * context: { module: 'api' },
53
+ * })
54
+ * ```
55
+ */
56
+ export function createLogger(config) {
57
+ const provider = getLoggerProvider();
58
+ return provider.createLogger(config);
59
+ }
60
+ /**
61
+ * Get the root logger.
62
+ *
63
+ * @returns Root logger instance
64
+ */
65
+ export function getRootLogger() {
66
+ const provider = getLoggerProvider();
67
+ return provider.getLogger();
68
+ }
69
+ /**
70
+ * Create a child logger with additional context.
71
+ *
72
+ * @param name - Parent logger name
73
+ * @param context - Additional context
74
+ * @returns Child logger instance
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * function UserProfile(props: { userId: string }) {
79
+ * const logger = getChildLogger('UserProfile', { userId: props.userId })
80
+ * // All logs will include userId in context
81
+ * logger.info('Profile loaded')
82
+ * }
83
+ * ```
84
+ */
85
+ export function getChildLogger(name, context) {
86
+ const provider = getLoggerProvider();
87
+ const parent = provider.getLogger(name);
88
+ return parent.withContext(context);
89
+ }
90
+ /**
91
+ * Create a component logger that includes component name in context.
92
+ *
93
+ * @param componentName - Name of the component
94
+ * @returns Logger configured for the component
95
+ *
96
+ * @example
97
+ * ```tsx
98
+ * function Dashboard() {
99
+ * const logger = useComponentLogger('Dashboard')
100
+ *
101
+ * const handleRefresh = () => {
102
+ * logger.info('Dashboard refreshed')
103
+ * }
104
+ *
105
+ * return <button onClick={handleRefresh}>Refresh</button>
106
+ * }
107
+ * ```
108
+ */
109
+ export function useComponentLogger(componentName) {
110
+ return getLogger(componentName);
111
+ }
112
+ /**
113
+ * Create logger helpers from context.
114
+ *
115
+ * @returns Logger helper functions
116
+ */
117
+ /**
118
+ * Creates a logger helpers.
119
+ * @returns The created result.
120
+ */
121
+ export function createLoggerHelpers() {
122
+ const provider = getLoggerProvider();
123
+ return {
124
+ getLogger: (name) => provider.getLogger(name),
125
+ createLogger: (config) => provider.createLogger(config),
126
+ setLevel: (level) => provider.setLevel(level),
127
+ getLevel: () => provider.getLevel(),
128
+ enable: () => provider.enable(),
129
+ disable: () => provider.disable(),
130
+ isEnabled: () => provider.isEnabled(),
131
+ };
132
+ }
133
+ /**
134
+ * Create logger helpers from a specific provider.
135
+ *
136
+ * @param provider - Logger provider
137
+ * @returns Logger helper functions
138
+ */
139
+ /**
140
+ * Creates a logger helpers from provider.
141
+ * @param provider - The provider implementation.
142
+ * @returns The created result.
143
+ */
144
+ export function createLoggerHelpersFromProvider(provider) {
145
+ return {
146
+ getLogger: (name) => provider.getLogger(name),
147
+ createLogger: (config) => provider.createLogger(config),
148
+ setLevel: (level) => provider.setLevel(level),
149
+ getLevel: () => provider.getLevel(),
150
+ enable: () => provider.enable(),
151
+ disable: () => provider.disable(),
152
+ isEnabled: () => provider.isEnabled(),
153
+ };
154
+ }
155
+ /**
156
+ * Create logger from a specific provider.
157
+ *
158
+ * @param provider - Logger provider
159
+ * @param name - Logger name
160
+ * @returns Logger instance
161
+ */
162
+ export function createLoggerFromProvider(provider, name) {
163
+ return provider.getLogger(name);
164
+ }
165
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/primitives/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAA;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAgC;IAC3E,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACvC,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,OAAO,SAAS,CAAC,aAAa,CAAC,CAAA;AACjC,CAAC;AAED;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IASjC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IAEpC,OAAO;QACL,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;QACtD,YAAY,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;QACrE,QAAQ,EAAE,CAAC,KAA+D,EAAE,EAAE,CAC5E,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE;QACjC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE;KACtC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAAC,QAAwB;IAStE,OAAO;QACL,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;QACtD,YAAY,EAAE,CAAC,MAAoB,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;QACrE,QAAQ,EAAE,CAAC,KAA+D,EAAE,EAAE,CAC5E,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE;QACjC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE;KACtC,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAwB,EAAE,IAAa;IAC9E,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Solid.js primitive for login with async state tracking.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Accessor } from 'solid-js';
7
+ import type { AuthResult, LoginCredentials } from '@molecule/app-auth';
8
+ import type { PromiseState } from '@molecule/app-utilities';
9
+ /**
10
+ * Return type for createLogin primitive.
11
+ */
12
+ export interface CreateLoginReturn<T = unknown> {
13
+ state: Accessor<PromiseState<AuthResult<T>>>;
14
+ login: (credentials: LoginCredentials) => Promise<AuthResult<T>>;
15
+ reset: () => void;
16
+ }
17
+ /**
18
+ * Creates a login primitive with async state tracking.
19
+ *
20
+ * @returns Login state and action
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * const { state, login } = createLogin()
25
+ *
26
+ * return (
27
+ * <button
28
+ * onClick={() => login({ email: email(), password: password() })}
29
+ * disabled={state().status === 'pending'}
30
+ * >
31
+ * {state().status === 'pending' ? 'Logging in...' : 'Login'}
32
+ * </button>
33
+ * )
34
+ * ```
35
+ */
36
+ export declare function createLogin<T = unknown>(): CreateLoginReturn<T>;
37
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/primitives/login.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAK3D;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,KAAK,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAO/D"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Solid.js primitive for login with async state tracking.
3
+ *
4
+ * @module
5
+ */
6
+ import { getAuthClient } from '../context.js';
7
+ import { createPromise } from './promise.js';
8
+ /**
9
+ * Creates a login primitive with async state tracking.
10
+ *
11
+ * @returns Login state and action
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const { state, login } = createLogin()
16
+ *
17
+ * return (
18
+ * <button
19
+ * onClick={() => login({ email: email(), password: password() })}
20
+ * disabled={state().status === 'pending'}
21
+ * >
22
+ * {state().status === 'pending' ? 'Logging in...' : 'Login'}
23
+ * </button>
24
+ * )
25
+ * ```
26
+ */
27
+ export function createLogin() {
28
+ const client = getAuthClient();
29
+ const { state, call, reset } = createPromise((credentials) => client.login(credentials));
30
+ return { state, login: call, reset };
31
+ }
32
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/primitives/login.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAW5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,aAAa,EAAK,CAAA;IACjC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,CAAC,WAA6B,EAAE,EAAE,CAC7E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAC1B,CAAA;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACtC,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Solid.js primitive for OAuth authentication.
3
+ *
4
+ * Builds provider initiation URLs, starts the full-page redirect flow, and
5
+ * automatically handles the OAuth callback: when the page loads with a `code`
6
+ * (+ optional `state`) URL parameter and a stashed provider, the code is
7
+ * exchanged for a session via `POST {baseURL}{loginEndpoint}`.
8
+ *
9
+ * Session establishment prefers an auth client — an explicit
10
+ * {@link CreateOAuthOptions.authClient} override, else the surrounding
11
+ * `MoleculeProvider`'s client. Without any client, the code exchange itself
12
+ * has already established the httpOnly-cookie session server-side, so a
13
+ * user-carrying response still counts as a successful login.
14
+ *
15
+ * @module
16
+ */
17
+ import type { Accessor } from 'solid-js';
18
+ import type { AuthClient } from '@molecule/app-auth';
19
+ /**
20
+ * OAuth configuration options.
21
+ */
22
+ export interface CreateOAuthOptions {
23
+ /** Base URL for the API server (e.g. `https://api.example.com`). */
24
+ baseURL?: string;
25
+ /** List of supported OAuth provider names (e.g. `['github', 'google']`). */
26
+ oauthProviders?: string[];
27
+ /** Path prefix for OAuth initiation routes. Defaults to `/oauth`. */
28
+ oauthEndpoint?: string;
29
+ /** Path for the OAuth login POST endpoint. Defaults to `/users/log-in/oauth`. */
30
+ loginEndpoint?: string;
31
+ /** Called after a successful OAuth login (session established). */
32
+ onSuccess?: () => void;
33
+ /** Called with a failure message when the OAuth login fails. */
34
+ onError?: (error: string) => void;
35
+ /**
36
+ * Auth client used to establish the session after the code exchange.
37
+ * Overrides context resolution — when omitted, the client is resolved from
38
+ * the surrounding `MoleculeProvider` (tolerated when absent; see the
39
+ * cookie-session fallback documented on
40
+ * {@link CreateOAuthReturn.handleCallback}).
41
+ */
42
+ authClient?: AuthClient<unknown>;
43
+ }
44
+ /**
45
+ * Return type for createOAuth primitive.
46
+ */
47
+ export interface CreateOAuthReturn {
48
+ /** Accessor for the configured OAuth provider names. */
49
+ providers: Accessor<string[]>;
50
+ /** Builds the OAuth initiation URL for a provider. */
51
+ getOAuthUrl: (provider: string) => string;
52
+ /** Starts the full-page redirect flow for a provider. */
53
+ redirect: (provider: string) => void;
54
+ /**
55
+ * Handles the OAuth callback: exchanges the `code` URL parameter for a
56
+ * session. Invoked automatically at creation (see {@link createOAuth});
57
+ * exposed for callers that need to re-run it manually. No-ops unless
58
+ * running in a browser with a `code` URL parameter and a stashed provider.
59
+ *
60
+ * When an auth client is available (explicit option or context), the
61
+ * session is established locally (`setAccessToken` + `setUser` +
62
+ * `initialize`). When no client is available, the server has already
63
+ * established the httpOnly-cookie session during the exchange, so a
64
+ * user-carrying response still counts as success.
65
+ */
66
+ handleCallback: () => Promise<void>;
67
+ }
68
+ /**
69
+ * Creates OAuth helpers.
70
+ *
71
+ * Automatically handles OAuth callbacks by detecting `code` and `state` URL
72
+ * parameters and exchanging them for a session:
73
+ * - Inside a Solid owner (component setup / `createRoot`), the callback
74
+ * handling is deferred to `onMount` so it runs client-side after mount.
75
+ * - Outside an owner (a plain function call, e.g. bootstrap code), it runs
76
+ * immediately at creation, browser-guarded.
77
+ *
78
+ * @param options - OAuth configuration
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * const { providers, getOAuthUrl, redirect } = createOAuth({
83
+ * baseURL: 'https://api.example.com',
84
+ * oauthProviders: ['github', 'google'],
85
+ * onSuccess: () => navigate('/dashboard'),
86
+ * onError: (error) => setErrorMessage(error),
87
+ * })
88
+ *
89
+ * return (
90
+ * <For each={providers()}>
91
+ * {(provider) => (
92
+ * <button onClick={() => redirect(provider)}>
93
+ * Login with {provider}
94
+ * </button>
95
+ * )}
96
+ * </For>
97
+ * )
98
+ * ```
99
+ * @returns The created instance.
100
+ */
101
+ export declare function createOAuth(options?: CreateOAuthOptions): CreateOAuthReturn;
102
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/primitives/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAC7B,sDAAsD;IACtD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,yDAAyD;IACzD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAiM3E"}