@willphan1712000/frontend 1.3.0 → 1.4.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/dist/index.d.mts CHANGED
@@ -375,9 +375,54 @@ declare class Transform {
375
375
  private transform;
376
376
  }
377
377
 
378
+ interface HandleAsyncType<DataType> {
379
+ error?: string;
380
+ data?: DataType;
381
+ }
382
+ /**
383
+ * HandleAsync function -> automatically handle try catch implementation from a promise
384
+ * @param data a promise that returns a data value
385
+ * @returns Promise<{error?, data?}>
386
+ *
387
+ * @example
388
+ *
389
+ * const { error, data } = await handleAsync(api('/api/call')) // api is a function that calls an api and returns a promise with possible errors thrown in between
390
+ */
391
+ declare function handleAsync<DataType>(data: Promise<DataType>): Promise<HandleAsyncType<DataType>>;
392
+
393
+ declare const tools: {
394
+ handleAsync: typeof handleAsync;
395
+ };
396
+
378
397
  /**
379
398
  * This interface provides a comprehensive guides on how to design auth object used for authentication on client side
380
- * - Copyright: Will Phan
399
+ *
400
+ * @example
401
+ *
402
+ * class auth implements AuthInterface {
403
+ getSignInUrl({ redirect, client_id, callback_api, }: {
404
+ redirect?: string;
405
+ client_id?: string;
406
+ callback_api?: string;
407
+ }): string {
408
+ ...
409
+ }
410
+ signin({ username, email, password, redirect, }: {
411
+ username: string;
412
+ email?: string;
413
+ password: string;
414
+ redirect?: string;
415
+ }): Promise<void> {
416
+ ...
417
+ }
418
+ validate({ state }: { state?: string; }): Promise<any> {
419
+ ...
420
+ }
421
+ signout({ state }: { state?: string; }): Promise<void> {
422
+ ...
423
+ }
424
+
425
+ }
381
426
  */
382
427
  interface AuthInterface<User = any> {
383
428
  /**
@@ -427,7 +472,23 @@ type SessionContextType = {
427
472
 
428
473
  /**
429
474
  * This interface provides a guide to design storage object used for client side to operate storage operations
430
- * - Copyright: Will Phan
475
+ *
476
+ * @example
477
+ *
478
+ * class storage implements StorageInterface {
479
+ getToken(): string | null {
480
+ ...
481
+ }
482
+ getUser(): SessionType | null {
483
+ ...
484
+ }
485
+ setToken({ token }: { token: string; }): void {
486
+ ...
487
+ }
488
+ removeToken(): void {
489
+ ...
490
+ }
491
+ }
431
492
  */
432
493
  interface StorageInterface {
433
494
  getToken(): string | null;
@@ -441,16 +502,40 @@ interface StorageInterface {
441
502
  /**
442
503
  * Will-Auth - retrieve session
443
504
  * @returns session context
505
+ *
506
+ * @example
507
+ *
508
+ * const { isLoading, session } = useSession()
444
509
  */
445
510
  declare function useSession(): SessionContextType;
446
511
 
447
512
  /**
448
513
  * Custom Session Provider using React Context
449
- * - Copyright: Will Phan
514
+ *
515
+ * @example
516
+ *
517
+ * <SessionProvider value={useAuthClient(auth)}>
518
+ * ...
519
+ * </SessionProvider>
520
+ * // auth object implementing AuthInterface
450
521
  */
451
522
  declare const SessionProvider: ({ value, children, }: {
452
523
  value: SessionContextType;
453
524
  children: ReactNode;
454
525
  }) => react_jsx_runtime.JSX.Element;
455
526
 
456
- export { type AuthInterface, Avatar, Button, Canvas, ColorPickerSlider, DropdownSelect, Image$1 as Image, ImageEditor, Image as ImageUtilities, InputFile, InputGoogle, MultiSelect, OptionSlider, type Options$2 as Options, RangeSlider, SessionProvider, type SessionType, type Options$1 as SliderOptions, type StorageInterface, TextArea, Transform, UploadImage, useSession };
527
+ /**
528
+ * Custom hook for auth
529
+ * - Copyright: Will Phan
530
+ * @param auth Auth object implementing AuthInterface
531
+ * @returns SessionContextType
532
+ *
533
+ * @example
534
+ *
535
+ * const authClient = new auth() // auth class implements AuthInterface
536
+ * const { isLoading, session } = useAuthClient(authClient) // auth is an auth object
537
+ *
538
+ */
539
+ declare const useAuthClient: (auth: AuthInterface<SessionType>) => SessionContextType;
540
+
541
+ export { type AuthInterface, Avatar, Button, Canvas, ColorPickerSlider, DropdownSelect, Image$1 as Image, ImageEditor, Image as ImageUtilities, InputFile, InputGoogle, MultiSelect, OptionSlider, type Options$2 as Options, RangeSlider, SessionProvider, type SessionType, type Options$1 as SliderOptions, type StorageInterface, TextArea, Transform, UploadImage, tools, useAuthClient, useSession };
package/dist/index.d.ts CHANGED
@@ -375,9 +375,54 @@ declare class Transform {
375
375
  private transform;
376
376
  }
377
377
 
378
+ interface HandleAsyncType<DataType> {
379
+ error?: string;
380
+ data?: DataType;
381
+ }
382
+ /**
383
+ * HandleAsync function -> automatically handle try catch implementation from a promise
384
+ * @param data a promise that returns a data value
385
+ * @returns Promise<{error?, data?}>
386
+ *
387
+ * @example
388
+ *
389
+ * const { error, data } = await handleAsync(api('/api/call')) // api is a function that calls an api and returns a promise with possible errors thrown in between
390
+ */
391
+ declare function handleAsync<DataType>(data: Promise<DataType>): Promise<HandleAsyncType<DataType>>;
392
+
393
+ declare const tools: {
394
+ handleAsync: typeof handleAsync;
395
+ };
396
+
378
397
  /**
379
398
  * This interface provides a comprehensive guides on how to design auth object used for authentication on client side
380
- * - Copyright: Will Phan
399
+ *
400
+ * @example
401
+ *
402
+ * class auth implements AuthInterface {
403
+ getSignInUrl({ redirect, client_id, callback_api, }: {
404
+ redirect?: string;
405
+ client_id?: string;
406
+ callback_api?: string;
407
+ }): string {
408
+ ...
409
+ }
410
+ signin({ username, email, password, redirect, }: {
411
+ username: string;
412
+ email?: string;
413
+ password: string;
414
+ redirect?: string;
415
+ }): Promise<void> {
416
+ ...
417
+ }
418
+ validate({ state }: { state?: string; }): Promise<any> {
419
+ ...
420
+ }
421
+ signout({ state }: { state?: string; }): Promise<void> {
422
+ ...
423
+ }
424
+
425
+ }
381
426
  */
382
427
  interface AuthInterface<User = any> {
383
428
  /**
@@ -427,7 +472,23 @@ type SessionContextType = {
427
472
 
428
473
  /**
429
474
  * This interface provides a guide to design storage object used for client side to operate storage operations
430
- * - Copyright: Will Phan
475
+ *
476
+ * @example
477
+ *
478
+ * class storage implements StorageInterface {
479
+ getToken(): string | null {
480
+ ...
481
+ }
482
+ getUser(): SessionType | null {
483
+ ...
484
+ }
485
+ setToken({ token }: { token: string; }): void {
486
+ ...
487
+ }
488
+ removeToken(): void {
489
+ ...
490
+ }
491
+ }
431
492
  */
432
493
  interface StorageInterface {
433
494
  getToken(): string | null;
@@ -441,16 +502,40 @@ interface StorageInterface {
441
502
  /**
442
503
  * Will-Auth - retrieve session
443
504
  * @returns session context
505
+ *
506
+ * @example
507
+ *
508
+ * const { isLoading, session } = useSession()
444
509
  */
445
510
  declare function useSession(): SessionContextType;
446
511
 
447
512
  /**
448
513
  * Custom Session Provider using React Context
449
- * - Copyright: Will Phan
514
+ *
515
+ * @example
516
+ *
517
+ * <SessionProvider value={useAuthClient(auth)}>
518
+ * ...
519
+ * </SessionProvider>
520
+ * // auth object implementing AuthInterface
450
521
  */
451
522
  declare const SessionProvider: ({ value, children, }: {
452
523
  value: SessionContextType;
453
524
  children: ReactNode;
454
525
  }) => react_jsx_runtime.JSX.Element;
455
526
 
456
- export { type AuthInterface, Avatar, Button, Canvas, ColorPickerSlider, DropdownSelect, Image$1 as Image, ImageEditor, Image as ImageUtilities, InputFile, InputGoogle, MultiSelect, OptionSlider, type Options$2 as Options, RangeSlider, SessionProvider, type SessionType, type Options$1 as SliderOptions, type StorageInterface, TextArea, Transform, UploadImage, useSession };
527
+ /**
528
+ * Custom hook for auth
529
+ * - Copyright: Will Phan
530
+ * @param auth Auth object implementing AuthInterface
531
+ * @returns SessionContextType
532
+ *
533
+ * @example
534
+ *
535
+ * const authClient = new auth() // auth class implements AuthInterface
536
+ * const { isLoading, session } = useAuthClient(authClient) // auth is an auth object
537
+ *
538
+ */
539
+ declare const useAuthClient: (auth: AuthInterface<SessionType>) => SessionContextType;
540
+
541
+ export { type AuthInterface, Avatar, Button, Canvas, ColorPickerSlider, DropdownSelect, Image$1 as Image, ImageEditor, Image as ImageUtilities, InputFile, InputGoogle, MultiSelect, OptionSlider, type Options$2 as Options, RangeSlider, SessionProvider, type SessionType, type Options$1 as SliderOptions, type StorageInterface, TextArea, Transform, UploadImage, tools, useAuthClient, useSession };
package/dist/index.js CHANGED
@@ -409,6 +409,12 @@ __export(index_exports, {
409
409
  UploadImage: function() {
410
410
  return UploadImage_default;
411
411
  },
412
+ tools: function() {
413
+ return tools_default;
414
+ },
415
+ useAuthClient: function() {
416
+ return useAuthClient_default;
417
+ },
412
418
  useSession: function() {
413
419
  return useSession;
414
420
  }
@@ -3014,6 +3020,55 @@ var Transform = /*#__PURE__*/ function() {
3014
3020
  ]);
3015
3021
  return Transform;
3016
3022
  }();
3023
+ // src/utilities/tools/handleAsync.ts
3024
+ function handleAsync(data) {
3025
+ return _async_to_generator(function() {
3026
+ var dataAsync, error;
3027
+ return _ts_generator(this, function(_state) {
3028
+ switch(_state.label){
3029
+ case 0:
3030
+ _state.trys.push([
3031
+ 0,
3032
+ 2,
3033
+ ,
3034
+ 3
3035
+ ]);
3036
+ return [
3037
+ 4,
3038
+ data
3039
+ ];
3040
+ case 1:
3041
+ dataAsync = _state.sent();
3042
+ return [
3043
+ 2,
3044
+ {
3045
+ error: void 0,
3046
+ data: dataAsync
3047
+ }
3048
+ ];
3049
+ case 2:
3050
+ error = _state.sent();
3051
+ return [
3052
+ 2,
3053
+ {
3054
+ error: error,
3055
+ data: void 0
3056
+ }
3057
+ ];
3058
+ case 3:
3059
+ return [
3060
+ 2
3061
+ ];
3062
+ }
3063
+ });
3064
+ })();
3065
+ }
3066
+ var handleAsync_default = handleAsync;
3067
+ // src/utilities/tools/tools.ts
3068
+ var tools = {
3069
+ handleAsync: handleAsync_default
3070
+ };
3071
+ var tools_default = tools;
3017
3072
  // src/auth/react/context.tsx
3018
3073
  var import_react15 = require("react");
3019
3074
  var SessionContext = (0, import_react15.createContext)(void 0);
@@ -3032,6 +3087,51 @@ var SessionProvider = function(param) {
3032
3087
  });
3033
3088
  };
3034
3089
  var SessionProvider_default = SessionProvider;
3090
+ // src/auth/react/useAuthClient.ts
3091
+ var import_react16 = require("react");
3092
+ var useAuthClient = function(auth) {
3093
+ var _ref = _sliced_to_array((0, import_react16.useState)(false), 2), isLoading = _ref[0], setLoading = _ref[1];
3094
+ var sessionRef = (0, import_react16.useRef)(void 0);
3095
+ (0, import_react16.useEffect)(function() {
3096
+ var is = true;
3097
+ var getSession = function() {
3098
+ return _async_to_generator(function() {
3099
+ var _ref, error, session;
3100
+ return _ts_generator(this, function(_state) {
3101
+ switch(_state.label){
3102
+ case 0:
3103
+ setLoading(true);
3104
+ return [
3105
+ 4,
3106
+ tools_default.handleAsync(auth.validate({}))
3107
+ ];
3108
+ case 1:
3109
+ _ref = _state.sent(), error = _ref.error, session = _ref.data;
3110
+ if (error) {
3111
+ setLoading(false);
3112
+ }
3113
+ if (is) {
3114
+ sessionRef.current = session;
3115
+ setLoading(false);
3116
+ }
3117
+ return [
3118
+ 2
3119
+ ];
3120
+ }
3121
+ });
3122
+ })();
3123
+ };
3124
+ getSession();
3125
+ return function() {
3126
+ is = false;
3127
+ };
3128
+ }, []);
3129
+ return {
3130
+ isLoading: isLoading,
3131
+ session: sessionRef.current
3132
+ };
3133
+ };
3134
+ var useAuthClient_default = useAuthClient;
3035
3135
  // Annotate the CommonJS export names for ESM import in node:
3036
3136
  0 && (module.exports = {
3037
3137
  Avatar: Avatar,
@@ -3051,5 +3151,7 @@ var SessionProvider_default = SessionProvider;
3051
3151
  TextArea: TextArea,
3052
3152
  Transform: Transform,
3053
3153
  UploadImage: UploadImage,
3154
+ tools: tools,
3155
+ useAuthClient: useAuthClient,
3054
3156
  useSession: useSession
3055
3157
  });
package/dist/index.mjs CHANGED
@@ -2895,6 +2895,55 @@ var Transform = /*#__PURE__*/ function() {
2895
2895
  ]);
2896
2896
  return Transform;
2897
2897
  }();
2898
+ // src/utilities/tools/handleAsync.ts
2899
+ function handleAsync(data) {
2900
+ return _async_to_generator(function() {
2901
+ var dataAsync, error;
2902
+ return _ts_generator(this, function(_state) {
2903
+ switch(_state.label){
2904
+ case 0:
2905
+ _state.trys.push([
2906
+ 0,
2907
+ 2,
2908
+ ,
2909
+ 3
2910
+ ]);
2911
+ return [
2912
+ 4,
2913
+ data
2914
+ ];
2915
+ case 1:
2916
+ dataAsync = _state.sent();
2917
+ return [
2918
+ 2,
2919
+ {
2920
+ error: void 0,
2921
+ data: dataAsync
2922
+ }
2923
+ ];
2924
+ case 2:
2925
+ error = _state.sent();
2926
+ return [
2927
+ 2,
2928
+ {
2929
+ error: error,
2930
+ data: void 0
2931
+ }
2932
+ ];
2933
+ case 3:
2934
+ return [
2935
+ 2
2936
+ ];
2937
+ }
2938
+ });
2939
+ })();
2940
+ }
2941
+ var handleAsync_default = handleAsync;
2942
+ // src/utilities/tools/tools.ts
2943
+ var tools = {
2944
+ handleAsync: handleAsync_default
2945
+ };
2946
+ var tools_default = tools;
2898
2947
  // src/auth/react/context.tsx
2899
2948
  import { createContext as createContext4, useContext as useContext4 } from "react";
2900
2949
  var SessionContext = createContext4(void 0);
@@ -2913,4 +2962,49 @@ var SessionProvider = function(param) {
2913
2962
  });
2914
2963
  };
2915
2964
  var SessionProvider_default = SessionProvider;
2916
- export { Avatar_default as Avatar, Button_default as Button, Canvas, ColorPickerSlider_default as ColorPickerSlider, DropdownSelect_default as DropdownSelect, Image_default as Image, ImageEditor_default as ImageEditor, Image_default2 as ImageUtilities, InputFile_default as InputFile, InputGoogle_default as InputGoogle, MultiSelect_default as MultiSelect, OptionSlider_default as OptionSlider, RangeSlider_default as RangeSlider, SessionProvider_default as SessionProvider, TextArea_default as TextArea, Transform, UploadImage_default as UploadImage, useSession };
2965
+ // src/auth/react/useAuthClient.ts
2966
+ import { useEffect as useEffect11, useRef as useRef11, useState as useState12 } from "react";
2967
+ var useAuthClient = function(auth) {
2968
+ var _useState12 = _sliced_to_array(useState12(false), 2), isLoading = _useState12[0], setLoading = _useState12[1];
2969
+ var sessionRef = useRef11(void 0);
2970
+ useEffect11(function() {
2971
+ var is = true;
2972
+ var getSession = function() {
2973
+ return _async_to_generator(function() {
2974
+ var _ref, error, session;
2975
+ return _ts_generator(this, function(_state) {
2976
+ switch(_state.label){
2977
+ case 0:
2978
+ setLoading(true);
2979
+ return [
2980
+ 4,
2981
+ tools_default.handleAsync(auth.validate({}))
2982
+ ];
2983
+ case 1:
2984
+ _ref = _state.sent(), error = _ref.error, session = _ref.data;
2985
+ if (error) {
2986
+ setLoading(false);
2987
+ }
2988
+ if (is) {
2989
+ sessionRef.current = session;
2990
+ setLoading(false);
2991
+ }
2992
+ return [
2993
+ 2
2994
+ ];
2995
+ }
2996
+ });
2997
+ })();
2998
+ };
2999
+ getSession();
3000
+ return function() {
3001
+ is = false;
3002
+ };
3003
+ }, []);
3004
+ return {
3005
+ isLoading: isLoading,
3006
+ session: sessionRef.current
3007
+ };
3008
+ };
3009
+ var useAuthClient_default = useAuthClient;
3010
+ export { Avatar_default as Avatar, Button_default as Button, Canvas, ColorPickerSlider_default as ColorPickerSlider, DropdownSelect_default as DropdownSelect, Image_default as Image, ImageEditor_default as ImageEditor, Image_default2 as ImageUtilities, InputFile_default as InputFile, InputGoogle_default as InputGoogle, MultiSelect_default as MultiSelect, OptionSlider_default as OptionSlider, RangeSlider_default as RangeSlider, SessionProvider_default as SessionProvider, TextArea_default as TextArea, Transform, UploadImage_default as UploadImage, tools_default as tools, useAuthClient_default as useAuthClient, useSession };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@willphan1712000/frontend",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Frontend Library",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",