react-generic-user 0.0.0-stage → 0.0.1

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.js ADDED
@@ -0,0 +1,334 @@
1
+ if(typeof window==='undefined'||window===null)var window=(typeof globalThis==='undefined'||globalThis===null)?{}:globalThis;import { TextInput as __WEBPACK_EXTERNAL_MODULE_react_input_material_bf884f53_TextInput__ } from "react-input-material";
2
+ import { Button as __WEBPACK_EXTERNAL_MODULE__rmwc_button_e0454fea_Button__ } from "@rmwc/button";
3
+ import { useDispatch as __WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useDispatch__, useSelector as __WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useSelector__ } from "react-redux";
4
+ import { createAsyncThunk as __WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__, createSlice as __WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createSlice__ } from "@reduxjs/toolkit";
5
+ import * as __WEBPACK_EXTERNAL_MODULE_clientnode__ from "clientnode";
6
+ import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_array_includes_js_66c3fd7d__ from "core-js/modules/es.array.includes.js";
7
+ import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
8
+ import * as __WEBPACK_EXTERNAL_MODULE_react_generic_tools_67824958__ from "react-generic-tools";
9
+ import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_00f484c1__ from "react/jsx-runtime";
10
+ /******/ var __webpack_modules__ = ([
11
+ /* 0 */
12
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
13
+
14
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15
+ /* harmony export */ u: function() { return /* binding */ ACTION_NAME_PREFIX; }
16
+ /* harmony export */ });
17
+ // -*- coding: utf-8 -*-
18
+ /** @module type *//* !
19
+ region header
20
+ [Project page](https://tsickert.com/react-generic-user)
21
+
22
+ Copyright Torben Sickert (info["~at~"]tsickert.com) 16.12.2012
23
+
24
+ License
25
+ -------
26
+
27
+ This library written by Torben Sickert stands under a creative commons
28
+ naming 3.0 unported license.
29
+ See https://creativecommons.org/licenses/by/3.0/deed.de
30
+ endregion
31
+ */// region imports
32
+ // endregion
33
+ // NOTE: Has to be redeclared since it is not exported by "@reduxjs/toolkit".
34
+ // region exports
35
+ /// region routing
36
+ /**
37
+ * Minimal location representation to stay independent of a concrete routing
38
+ * library (e.g. "react-router" locations are compatible).
39
+ *//**
40
+ * Integration of the used routing library.
41
+ * Using "react-router" for example: "{Redirect: Navigate, useLocation}".
42
+ *//// endregion
43
+ /// region universal
44
+ //// region hooks
45
+ //// endregion
46
+ /// endregion
47
+ /// region context
48
+ //// region expected given integration by library's usage
49
+ //// endregion
50
+ /// endregion
51
+ /// region redux
52
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
53
+ var ACTION_NAME_PREFIX="user";//// region expected given integration by library's usage
54
+ //// endregion
55
+ /// endregion
56
+ // endregion
57
+
58
+ /***/ }),
59
+ /* 1 */
60
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
61
+
62
+ var x = function(y) {
63
+ var x = {}; __webpack_require__.d(x, y); return x
64
+ }
65
+ var y = function(x) { return function() { return x; }; }
66
+ module.exports = x({ ["createContext"]: function() { return __WEBPACK_EXTERNAL_MODULE_react__.createContext; }, ["memo"]: function() { return __WEBPACK_EXTERNAL_MODULE_react__.memo; }, ["useContext"]: function() { return __WEBPACK_EXTERNAL_MODULE_react__.useContext; }, ["useEffect"]: function() { return __WEBPACK_EXTERNAL_MODULE_react__.useEffect; }, ["useState"]: function() { return __WEBPACK_EXTERNAL_MODULE_react__.useState; } });
67
+
68
+ /***/ }),
69
+ /* 2 */
70
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
71
+
72
+ var x = function(y) {
73
+ var x = {}; __webpack_require__.d(x, y); return x
74
+ }
75
+ var y = function(x) { return function() { return x; }; }
76
+ module.exports = x({ ["Fragment"]: function() { return __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_00f484c1__.Fragment; }, ["jsx"]: function() { return __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_00f484c1__.jsx; }, ["jsxs"]: function() { return __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_00f484c1__.jsxs; } });
77
+
78
+ /***/ }),
79
+ /* 3 */
80
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
81
+
82
+ var x = function(y) {
83
+ var x = {}; __webpack_require__.d(x, y); return x
84
+ }
85
+ var y = function(x) { return function() { return x; }; }
86
+ module.exports = x({ });
87
+
88
+ /***/ }),
89
+ /* 4 */
90
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
91
+
92
+
93
+ // EXPORTS
94
+ __webpack_require__.d(__webpack_exports__, {
95
+ sr: function() { return /* binding */ CSS_CLASS_NAMES; },
96
+ WV: function() { return /* binding */ componentFactory; }
97
+ });
98
+
99
+ // UNUSED EXPORTS: default
100
+
101
+ // EXTERNAL MODULE: external "clientnode"
102
+ var external_clientnode_ = __webpack_require__(7);
103
+ // EXTERNAL MODULE: external "react"
104
+ var external_react_ = __webpack_require__(1);
105
+ ;// external "react-input-material"
106
+
107
+ // EXTERNAL MODULE: external "react-generic-tools"
108
+ var external_react_generic_tools_ = __webpack_require__(8);
109
+ ;// external "@rmwc/button"
110
+
111
+ ;// ./src/style.module.css
112
+ // extracted by mini-css-extract-plugin
113
+ /* harmony default export */ var style_module = ({"login":"login","loginStatus":"login__status","loginButton":"login__button","loginName":"login__name","loginPassword":"login__password"});
114
+ // EXTERNAL MODULE: external "react/jsx-runtime"
115
+ var jsx_runtime_ = __webpack_require__(2);
116
+ ;// ./src/components.tsx
117
+ // #!/usr/bin/env babel-node
118
+ // -*- coding: utf-8 -*-
119
+ /** @module index *//* !
120
+ region header
121
+ [Project page](https://tsickert.com/react-generic-user)
122
+
123
+ Copyright Torben Sickert (info["~at~"]tsickert.com) 16.12.2012
124
+ endregion
125
+ */// region imports
126
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _regenerator(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var r,e,o="function"==typeof Symbol?Symbol:{},n=o.iterator||"@@iterator",a=o.toStringTag||"@@toStringTag";function i(o,n,a,i){var u=n&&n.prototype instanceof Generator?n:Generator,f=Object.create(u.prototype);return _regeneratorDefine2(f,"_invoke",function(t,o,n){var a,i,u,f=0,p=n||[],y=!1,G={p:0,n:0,v:r,a:l,f:l.bind(r,4),d:function d(t,e){return a=t,i=0,u=r,G.n=e,c}};function l(t,o){for(i=t,u=o,e=0;!y&&f&&!n&&e<p.length;e++){var n,a=p[e],l=G.p,F=a[2];t>3?(n=F===o)&&(u=a[(i=a[4])?5:(i=3,3)],a[4]=a[5]=r):a[0]<=l&&((n=t<2&&l<a[1])?(i=0,G.v=o,G.n=a[1]):l<F&&(n=t<3||a[0]>o||o>F)&&(a[4]=t,a[5]=o,G.n=F,i=0))}if(n||t>1)return c;throw y=!0,o}return function(n,p,F){if(f>1)throw TypeError("Generator is already running");for(y&&1===p&&l(p,F),i=p,u=F;(e=i<2?r:u)||!y;){a||(i?i<3?(i>1&&(G.n=-1),l(i,u)):G.n=u:G.v=u);try{if(f=2,a){if(i||(n="next"),e=a[n]){if(!(e=e.call(a,u)))throw TypeError("iterator result is not an object");if(!e.done)return e;u=e.value,i<2&&(i=0)}else 1===i&&(e=a.return)&&e.call(a),i<2&&(u=TypeError("The iterator does not provide a '"+n+"' method"),i=1);a=r}else if((e=(y=G.n<0)?u:t.call(o,G))!==c)break}catch(t){a=r,i=1,u=t}finally{f=1}}return{value:e,done:y}}}(o,a,i),!0),f}var c={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}e=Object.getPrototypeOf;var u=[][n]?e(e([][n]())):(_regeneratorDefine2(e={},n,function(){return this}),e),f=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(u);function p(r){return Object.setPrototypeOf?Object.setPrototypeOf(r,GeneratorFunctionPrototype):(r.__proto__=GeneratorFunctionPrototype,_regeneratorDefine2(r,a,"GeneratorFunction")),r.prototype=Object.create(f),r}return GeneratorFunction.prototype=GeneratorFunctionPrototype,_regeneratorDefine2(f,"constructor",GeneratorFunctionPrototype),_regeneratorDefine2(GeneratorFunctionPrototype,"constructor",GeneratorFunction),GeneratorFunction.displayName="GeneratorFunction",_regeneratorDefine2(GeneratorFunctionPrototype,a,"GeneratorFunction"),_regeneratorDefine2(f),_regeneratorDefine2(f,a,"Generator"),_regeneratorDefine2(f,n,function(){return this}),_regeneratorDefine2(f,"toString",function(){return"[object Generator]"}),(_regenerator=function _regenerator(){return{w:i,m:p}})()}function _regeneratorDefine2(e,r,n,t){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}_regeneratorDefine2=function _regeneratorDefine(e,r,n,t){function o(r,n){_regeneratorDefine2(e,r,function(e){return this._invoke(r,n,e)})}r?i?i(e,r,{value:n,enumerable:!t,configurable:!t,writable:!t}):e[r]=n:(o("next",0),o("throw",1),o("return",2))},_regeneratorDefine2(e,r,n,t)}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function _slicedToArray(e,i){return _iterableToArrayLimit(e,i)||_unsupportedIterableToArray(e,i)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(t,e){if(t){if("string"==typeof t)return _arrayLikeToArray(t,e);var o={}.toString.call(t).slice(8,-1);return"Object"===o&&t.constructor&&(o=t.constructor.name),"Map"===o||"Set"===o?Array.from(t):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?_arrayLikeToArray(t,e):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,t){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(Array.isArray(r)&&(null==e||e===("undefined"!=typeof Symbol&&[][Symbol.iterator])||e===[]["@@iterator"]))return r;if(null!=e){var l,n,i,a,u=[],o=!0,f=!1;try{if(i=(e=e.call(r)).next,0===t){if(Object(e)!==e)return;o=!1}else for(;!(o=(l=i.call(e)).done)&&(u.push(l.value),u.length!==t);o=!0);}catch(r){f=!0,n=r}finally{try{if(!o&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)throw n}}return u}}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(r){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(o),!0).forEach(function(t){_defineProperty(r,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):ownKeys(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))})}return r}function _defineProperty(r,t,o){return(t=_toPropertyKey(t))in r?Object.defineProperty(r,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[t]=o,r}function _toPropertyKey(r){var o=_toPrimitive(r,"string");return"symbol"==_typeof(o)?o:o+""}function _toPrimitive(t,e){if("object"!=_typeof(t)||!t)return t;var r;if("undefined"!=typeof Symbol&&void 0!==(r=t[Symbol.toPrimitive])){var i=r.call(t,e||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)};// endregion
127
+ var CSS_CLASS_NAMES=style_module;/**
128
+ * Creates components to protect content and to log in.
129
+ * NOTE: User hook should either be a "ContextUserHook" or "ReduxUserHook".
130
+ * @param useUser - Hook to retrieve current user.
131
+ * @param routing - Integration of the used routing library.
132
+ * @param routing.Redirect - Component redirecting to given location.
133
+ * @param routing.useLocation - Hook to determine current location.
134
+ * @returns Components.
135
+ */var componentFactory=function componentFactory(useUser,_ref){var Redirect=_ref.Redirect,useLocation=_ref.useLocation;return{/**
136
+ * @param options - Options for given component.
137
+ * @param options.children - Content to render when authenticated.
138
+ * @param options.fallbackLocation - Location to redirect to when
139
+ * authentication was unsuccessful.
140
+ * @param options.loadingFallback - String to show when determining
141
+ * authentication result.
142
+ * @returns An content to be rendered.
143
+ * A wrapper for <Route> that redirects to the login screen if you're
144
+ * not yet authenticated.
145
+ */Authenticated:/*#__PURE__*/(0,external_react_.memo)(function(_ref2){var _fallbackLocation;var children=_ref2.children,fallbackLocation=_ref2.fallbackLocation,_ref2$loadingFallback=_ref2.loadingFallback,loadingFallback=_ref2$loadingFallback===void 0?"loading...":_ref2$loadingFallback;var location=useLocation();var user=useUser();(0,external_react_.useEffect)(function(){if(user.session.authenticated===null)user.authenticate()},[user.session.authenticated]);fallbackLocation=(0,external_react_generic_tools_.useMemorizedValue)(typeof fallbackLocation==="string"?{pathname:fallbackLocation}:fallbackLocation,fallbackLocation);var loginTarget=(0,external_react_generic_tools_.useMemorizedValue)(_objectSpread({},fallbackLocation),fallbackLocation);if(user.session.authenticated){if((0,external_clientnode_.isFunction)(children))return/*#__PURE__*/(0,jsx_runtime_.jsx)(jsx_runtime_.Fragment,{children:children({fallbackLocation:fallbackLocation,location:location,user:user})});return/*#__PURE__*/(0,jsx_runtime_.jsx)(jsx_runtime_.Fragment,{children:children})}if(user.session.authenticated===null)return/*#__PURE__*/(0,jsx_runtime_.jsx)(jsx_runtime_.Fragment,{children:loadingFallback!==null&&loadingFallback!==void 0?loadingFallback:""});if(((_fallbackLocation=fallbackLocation)===null||_fallbackLocation===void 0?void 0:_fallbackLocation.pathname)===location.pathname)return/*#__PURE__*/(0,jsx_runtime_.jsx)(jsx_runtime_.Fragment,{});return/*#__PURE__*/(0,jsx_runtime_.jsx)(Redirect,{replace:true,state:{from:location},to:loginTarget})}),Login:function Login(_ref3){var buttonProperties=_ref3.buttonProperties,inputProperties=_ref3.inputProperties,loginProperties=_ref3.loginProperties,passwordProperties=_ref3.passwordProperties,children=_ref3.children,onSubmitted=_ref3.onSubmitted,onSuccess=_ref3.onSuccess;var user=useUser();var _useState=(0,external_react_.useState)(_objectSpread(_objectSpread({},loginProperties),{},{invalid:true})),_useState2=_slicedToArray(_useState,2),loginInput=_useState2[0],setLoginInput=_useState2[1];var _useState3=(0,external_react_.useState)(_objectSpread(_objectSpread({},passwordProperties),{},{invalid:true})),_useState4=_slicedToArray(_useState3,2),passwordInput=_useState4[0],setPasswordInput=_useState4[1];var _useState5=(0,external_react_.useState)(false),_useState6=_slicedToArray(_useState5,2),submitted=_useState6[0],setSubmitted=_useState6[1];var _useState7=(0,external_react_.useState)(false),_useState8=_slicedToArray(_useState7,2),sent=_useState8[0],setSent=_useState8[1];(0,external_react_.useEffect)(function(){if(user.session.authenticated&&onSuccess)onSuccess(user)},[user.session.authenticated,onSuccess]);var login=(0,external_react_generic_tools_.useMemorizedValue)(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(event){var _loginInput$value,_passwordInput$value;var result,_loginInput$value2,_passwordInput$value2,_result;return _regenerator().w(function(_context){while(1)switch(_context.n){case 0:event.preventDefault();result=onSubmitted&&onSubmitted((_loginInput$value=loginInput.value)!==null&&_loginInput$value!==void 0?_loginInput$value:null,(_passwordInput$value=passwordInput.value)!==null&&_passwordInput$value!==void 0?_passwordInput$value:null);if(!(typeof result!=="boolean"||result)){_context.n=1;break}setSubmitted(true);if(!(loginInput.valid&&passwordInput.valid)){_context.n=1;break}_result=user.login({login:(_loginInput$value2=loginInput.value)!==null&&_loginInput$value2!==void 0?_loginInput$value2:null,password:(_passwordInput$value2=passwordInput.value)!==null&&_passwordInput$value2!==void 0?_passwordInput$value2:null});setSent(true);if(!(onSuccess&&_result!==null&&_result!==void 0&&_result.then)){_context.n=1;break}_context.n=1;return _result.then(function(){onSuccess(user)});case 1:return _context.a(2)}},_callee)})),onSubmitted,onSuccess,loginInput.value,loginInput.valid,passwordInput.value,passwordInput.valid,setSent,setSubmitted);var renderStatus=(0,external_react_generic_tools_.useMemorizedValue)((0,external_clientnode_.isFunction)(children)?children:children?function(){return children}:function(_ref5){var sent=_ref5.sent,submitted=_ref5.submitted,pending=_ref5.pending,authenticated=_ref5.authenticated,loginInput=_ref5.loginInput,passwordInput=_ref5.passwordInput;return pending?/*#__PURE__*/(0,jsx_runtime_.jsx)("div",{className:CSS_CLASS_NAMES.loginStatus,children:"authenticating..."}):submitted&&!authenticated&&(sent||loginInput.invalid||passwordInput.invalid)?/*#__PURE__*/(0,jsx_runtime_.jsx)("div",{className:CSS_CLASS_NAMES.loginStatus,role:"alert",children:loginInput.invalid?"Please type valid login.":passwordInput.invalid?"Please type valid password.":"Invalid credentials!"}):""},children);var setSentToFalse=(0,external_react_generic_tools_.useMemorizedValue)(function(){setSent(false)},setSent);return/*#__PURE__*/(0,jsx_runtime_.jsxs)("form",{className:CSS_CLASS_NAMES.login,children:[renderStatus({sent:sent,submitted:submitted,pending:Boolean(user.session.authenticating),authenticated:Boolean(user.session.authenticated),loginInput:loginInput,passwordInput:passwordInput}),/*#__PURE__*/(0,jsx_runtime_.jsx)(__WEBPACK_EXTERNAL_MODULE_react_input_material_bf884f53_TextInput__,_objectSpread(_objectSpread({className:CSS_CLASS_NAMES.loginName,componentProperties:(0,external_react_generic_tools_.useMemorizedValue)({autoComplete:"username"}),name:"login",onChange:setLoginInput,onChangeValue:setSentToFalse,required:true,trailingIcon:"account_circle"},(0,external_react_generic_tools_.useMemorizedValue)(inputProperties||{},inputProperties)),(0,external_react_generic_tools_.useMemorizedValue)(loginProperties||{},inputProperties))),/*#__PURE__*/(0,jsx_runtime_.jsx)(__WEBPACK_EXTERNAL_MODULE_react_input_material_bf884f53_TextInput__,_objectSpread(_objectSpread({className:CSS_CLASS_NAMES.loginPassword,componentProperties:(0,external_react_generic_tools_.useMemorizedValue)({autoComplete:"current-password"}),name:"password",onChange:setPasswordInput,onChangeValue:setSentToFalse,required:true,trailingIcon:"password_preset"},(0,external_react_generic_tools_.useMemorizedValue)(inputProperties||{},inputProperties)),(0,external_react_generic_tools_.useMemorizedValue)(passwordProperties||{},passwordProperties))),/*#__PURE__*/(0,jsx_runtime_.jsx)(__WEBPACK_EXTERNAL_MODULE__rmwc_button_e0454fea_Button__,_objectSpread({children:"Log in",className:CSS_CLASS_NAMES.loginButton,onClick:(0,external_react_generic_tools_.useMemorizedValue)(function(event){void login(event)},login),trailingIcon:"input"},(0,external_react_generic_tools_.useMemorizedValue)(buttonProperties||{},buttonProperties)))]})}}};/* harmony default export */ var components = ((/* unused pure expression or super */ null && (componentFactory)));
146
+
147
+ /***/ }),
148
+ /* 5 */
149
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
150
+
151
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
152
+ /* harmony export */ t: function() { return /* binding */ sessionFactory; }
153
+ /* harmony export */ });
154
+ /* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);
155
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
156
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2);
157
+ // #!/usr/bin/env babel-node
158
+ // -*- coding: utf-8 -*-
159
+ /** @module index *//* !
160
+ region header
161
+ [Project page](https://tsickert.com/react-generic-user)
162
+
163
+ Copyright Torben Sickert (info["~at~"]tsickert.com) 16.12.2012
164
+ endregion
165
+ */// region imports
166
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(r){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(o),!0).forEach(function(t){_defineProperty(r,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):ownKeys(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))})}return r}function _defineProperty(r,t,o){return(t=_toPropertyKey(t))in r?Object.defineProperty(r,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[t]=o,r}function _toPropertyKey(r){var o=_toPrimitive(r,"string");return"symbol"==_typeof(o)?o:o+""}function _toPrimitive(t,e){if("object"!=_typeof(t)||!t)return t;var r;if("undefined"!=typeof Symbol&&void 0!==(r=t[Symbol.toPrimitive])){var i=r.call(t,e||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}function _slicedToArray(e,i){return _iterableToArrayLimit(e,i)||_unsupportedIterableToArray(e,i)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(t,e){if(t){if("string"==typeof t)return _arrayLikeToArray(t,e);var o={}.toString.call(t).slice(8,-1);return"Object"===o&&t.constructor&&(o=t.constructor.name),"Map"===o||"Set"===o?Array.from(t):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?_arrayLikeToArray(t,e):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,t){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(Array.isArray(r)&&(null==e||e===("undefined"!=typeof Symbol&&[][Symbol.iterator])||e===[]["@@iterator"]))return r;if(null!=e){var l,n,i,a,u=[],o=!0,f=!1;try{if(i=(e=e.call(r)).next,0===t){if(Object(e)!==e)return;o=!1}else for(;!(o=(l=i.call(e)).done)&&(u.push(l.value),u.length!==t);o=!0);}catch(r){f=!0,n=r}finally{try{if(!o&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)throw n}}return u}};// endregion
167
+ var sessionFactory=function sessionFactory(_ref){var _authenticate=_ref.authenticate,_login=_ref.login,_logout=_ref.logout;var userContext=/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(undefined);var useUser=function useUser(){var user=(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(userContext);if(user===undefined)throw new Error("No user context available. Did you wrap components using "+"the user context into the \"UserProvider\" component?");return user};var useHasRole=function useHasRole(role){var _user$session$userCon;var user=useUser();var roles=(_user$session$userCon=user.session.userContext)===null||_user$session$userCon===void 0?void 0:_user$session$userCon.roles;return Boolean(roles&&[].concat(role).every(function(role){return roles.includes(role)}))};var useUserState=function useUserState(options){if(options===void 0){options={}}var _useState=(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({session:{authenticated:null,authenticating:null,deauthenticating:null},authenticate:function authenticate(){setUser(function(oldUser){/*
168
+ If already an authentication request is running do
169
+ nothing.
170
+ */if(oldUser.session.authenticating)return oldUser;var authenticater=function authenticater(){return new Promise(function(resolve,reject){_authenticate(oldUser.session).then(function(userContext){setUser(function(oldUser){if(options.onAuthenticate)options.onAuthenticate(userContext);resolve(userContext);return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{authenticated:true,authenticating:null,userContext:userContext})})})}).catch(function(error){setUser(function(oldUser){/*
171
+ eslint-disable
172
+ prefer-promise-reject-errors
173
+ */reject(error);/*
174
+ eslint-enable
175
+ prefer-promise-reject-errors
176
+ */return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{authenticating:null})})})})})};return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{authenticating:oldUser.session.deauthenticating?oldUser.session.deauthenticating.then(authenticater,authenticater):authenticater()})})})},login:function login(loginData){setUser(function(oldUser){if(oldUser.session.authenticating)return oldUser;var authenticater=function authenticater(){return new Promise(function(resolve,reject){_login(loginData).then(function(userContext){setUser(function(oldUser){if(options.onAuthenticate)options.onAuthenticate(userContext);resolve(userContext);return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{authenticated:true,authenticating:null,userContext:userContext})})})}).catch(function(error){setUser(function(oldUser){/*
177
+ eslint-disable
178
+ prefer-promise-reject-errors
179
+ */reject(error);/*
180
+ eslint-enable
181
+ prefer-promise-reject-errors
182
+ */return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{authenticating:null})})})})})};return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{authenticating:oldUser.session.deauthenticating?oldUser.session.deauthenticating.then(authenticater,authenticater):authenticater()})})})},logout:function logout(){setUser(function(oldUser){if(oldUser.session.deauthenticating)return oldUser;var deauthenticater=function deauthenticater(){return new Promise(function(resolve,reject){_logout(oldUser.session).then(function(deauthenticated){setUser(function(oldUser){if(deauthenticated&&options.onDeauthenticate)options.onDeauthenticate(oldUser.session.userContext);resolve(deauthenticated);return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{authenticated:!deauthenticated,deauthenticating:null,userContext:deauthenticated?undefined:oldUser.session.userContext})})})}).catch(function(error){setUser(function(oldUser){/*
183
+ eslint-disable
184
+ prefer-promise-reject-errors
185
+ */reject(error);/*
186
+ eslint-enable
187
+ prefer-promise-reject-errors
188
+ */return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{deauthenticating:null})})})})})};return _objectSpread(_objectSpread({},oldUser),{},{session:_objectSpread(_objectSpread({},oldUser.session),{},{deauthenticating:oldUser.session.authenticating?oldUser.session.authenticating.then(deauthenticater,deauthenticater):deauthenticater()})})})}}),_useState2=_slicedToArray(_useState,2),user=_useState2[0],setUser=_useState2[1];return user};return{UserProvider:function UserProvider(_ref2){var children=_ref2.children,options=_ref2.options;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(userContext.Provider,{value:useUserState(options),children:children})},userContext:userContext,useHasRole:useHasRole,useIsAdmin:function useIsAdmin(){return useHasRole("_admin")},useUser:useUser,useUserState:useUserState}};/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (sessionFactory)));
189
+
190
+ /***/ }),
191
+ /* 6 */
192
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
193
+
194
+
195
+ // EXPORTS
196
+ __webpack_require__.d(__webpack_exports__, {
197
+ t: function() { return /* binding */ sessionFactory; }
198
+ });
199
+
200
+ // UNUSED EXPORTS: default
201
+
202
+ // EXTERNAL MODULE: external "core-js/modules/es.array.includes.js"
203
+ var es_array_includes_js_ = __webpack_require__(3);
204
+ // EXTERNAL MODULE: external "clientnode"
205
+ var external_clientnode_ = __webpack_require__(7);
206
+ // EXTERNAL MODULE: external "react"
207
+ var external_react_ = __webpack_require__(1);
208
+ // EXTERNAL MODULE: external "react-generic-tools"
209
+ var external_react_generic_tools_ = __webpack_require__(8);
210
+ ;// external "react-redux"
211
+
212
+ ;// external "@reduxjs/toolkit"
213
+
214
+ // EXTERNAL MODULE: ./src/type.ts
215
+ var type = /*#__PURE__*/__webpack_require__(0);
216
+ ;// ./src/redux.ts
217
+ // #!/usr/bin/env babel-node
218
+ // -*- coding: utf-8 -*-
219
+ /** @module redux *//* !
220
+ region header
221
+ [Project page](https://tsickert.com/react-generic-user)
222
+
223
+ Copyright Torben Sickert (info["~at~"]tsickert.com) 16.12.2012
224
+ endregion
225
+ */// region imports
226
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(r){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(o),!0).forEach(function(t){_defineProperty(r,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):ownKeys(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))})}return r}function _defineProperty(r,t,o){return(t=_toPropertyKey(t))in r?Object.defineProperty(r,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[t]=o,r}function _toPropertyKey(r){var o=_toPrimitive(r,"string");return"symbol"==_typeof(o)?o:o+""}function _toPrimitive(t,e){if("object"!=_typeof(t)||!t)return t;var r;if("undefined"!=typeof Symbol&&void 0!==(r=t[Symbol.toPrimitive])){var i=r.call(t,e||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)};// endregion
227
+ var useNoLocation=function useNoLocation(){return null};/**
228
+ * Creates a redux slice, thunks and hooks to manage a user session.
229
+ * @param handler - Implements authentication, login and logout.
230
+ * @param options - Additional options.
231
+ * @param options.useLocation - Hook to determine current location. Needed to
232
+ * remember initially requested locations.
233
+ * @returns Session slice, thunks and hooks.
234
+ */var sessionFactory=function sessionFactory(handler,_temp){var _ref=_temp===void 0?{}:_temp,_ref$useLocation=_ref.useLocation,useLocation=_ref$useLocation===void 0?useNoLocation:_ref$useLocation;/*
235
+ NOTE: We wrap handler calls via "(...parameters) => handler..." to
236
+ allow setting handler after this factory function has been called.
237
+ */var authenticateThunk=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__("".concat(type/* ACTION_NAME_PREFIX */.u,"/authenticate"),function(){return handler.authenticate.apply(handler,arguments)});var loginThunk=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__("".concat(type/* ACTION_NAME_PREFIX */.u,"/login"),function(){return handler.login.apply(handler,arguments)});var logoutThunk=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__("".concat(type/* ACTION_NAME_PREFIX */.u,"/logout"),function(){return handler.logout.apply(handler,arguments)});var useHasRole=function useHasRole(role){var session=__WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useSelector__(function(state){return state.user});var userContext=session===null||session===void 0?void 0:session.userContext;var roles=userContext===null||userContext===void 0?void 0:userContext.roles;return Boolean(roles&&[].concat(role).every(function(role){return roles.includes(role)}))};var slice=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createSlice__({name:type/* ACTION_NAME_PREFIX */.u,initialState:{authenticated:null,authenticating:false,deauthenticating:false,initialRequestedLocation:undefined,userContext:undefined},selectors:{selectUser:function selectUser(slice){return slice}},reducers:{deauthenticate:function deauthenticate(state){return _objectSpread(_objectSpread({},state),{},{authenticated:false,userContext:undefined})},setInitialRequestedLocation:function setInitialRequestedLocation(state,_ref2){var payload=_ref2.payload;return _objectSpread(_objectSpread({},state),{},{initialRequestedLocation:payload})}},extraReducers:function extraReducers(builder){builder.addCase(logoutThunk.fulfilled,function(state,action){state.deauthenticating=false;if(action.payload){state.authenticated=false;state.userContext=undefined}}).addCase(logoutThunk.pending,function(state){state.deauthenticating=true}).addCase(logoutThunk.rejected,function(state){state.deauthenticating=false}).addMatcher(function(action){return["".concat(authenticateThunk.typePrefix,"/fulfilled"),"".concat(loginThunk.typePrefix,"/fulfilled")].includes(action.type)},function(state,action){state.authenticating=false;if(typeof action.payload==="boolean")state.authenticated=action.payload;else if((0,external_clientnode_.isObject)(action.payload)){state.authenticated=true;state.userContext=action.payload}else state.authenticated=false}).addMatcher(function(action){return["".concat(authenticateThunk.typePrefix,"/pending"),"".concat(loginThunk.typePrefix,"/pending")].includes(action.type)},function(state){state.authenticating=true}).addMatcher(function(action){return["".concat(authenticateThunk.typePrefix,"/rejected"),"".concat(loginThunk.typePrefix,"/rejected")].includes(action.type)},function(state){state.authenticating=false})}});return{authenticateThunk:authenticateThunk,loginThunk:loginThunk,logoutThunk:logoutThunk,slice:slice,useHasRole:useHasRole,useIsAdmin:function useIsAdmin(){return useHasRole("_admin")},useUser:function useUser(data,isLoginLocation){if(data===void 0){data={}}if(isLoginLocation===void 0){isLoginLocation=function isLoginLocation(location){return location.pathname.endsWith("/login")}}var dispatch=__WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useDispatch__();var location=useLocation();var session=__WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useSelector__(slice.selectors.selectUser);(0,external_react_.useEffect)(function(){if(location&&!isLoginLocation(location)&&(!session||session.initialRequestedLocation===undefined||session.authenticated&&session.initialRequestedLocation!==null))dispatch(slice.actions.setInitialRequestedLocation(session!==null&&session!==void 0&&session.authenticated?null:location))},[dispatch,location,session===null||session===void 0?void 0:session.authenticated,session===null||session===void 0?void 0:session.initialRequestedLocation]);if(session===null)throw new Error("No user redux state found. Did you register a "+"corresponding redux slice?");var authenticate=(0,external_react_generic_tools_.useMemorizedValue)(function(){dispatch(authenticateThunk(data))},dispatch);var login=(0,external_react_generic_tools_.useMemorizedValue)(function(_ref3){var login=_ref3.login,password=_ref3.password;dispatch(loginThunk(_objectSpread(_objectSpread({},data),{},{login:login,password:password})))},dispatch);var logout=(0,external_react_generic_tools_.useMemorizedValue)(function(){dispatch(logoutThunk(data))},dispatch);return (0,external_react_generic_tools_.useMemorizedValue)({authenticate:authenticate,login:login,logout:logout,session:session},authenticateThunk,dispatch,session)}}};/* harmony default export */ var redux = ((/* unused pure expression or super */ null && (sessionFactory)));
238
+
239
+ /***/ }),
240
+ /* 7 */
241
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
242
+
243
+ var x = function(y) {
244
+ var x = {}; __webpack_require__.d(x, y); return x
245
+ }
246
+ var y = function(x) { return function() { return x; }; }
247
+ module.exports = x({ ["isFunction"]: function() { return __WEBPACK_EXTERNAL_MODULE_clientnode__.isFunction; }, ["isObject"]: function() { return __WEBPACK_EXTERNAL_MODULE_clientnode__.isObject; } });
248
+
249
+ /***/ }),
250
+ /* 8 */
251
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
252
+
253
+ var x = function(y) {
254
+ var x = {}; __webpack_require__.d(x, y); return x
255
+ }
256
+ var y = function(x) { return function() { return x; }; }
257
+ module.exports = x({ ["useMemorizedValue"]: function() { return __WEBPACK_EXTERNAL_MODULE_react_generic_tools_67824958__.useMemorizedValue; } });
258
+
259
+ /***/ })
260
+ /******/ ]);
261
+ /************************************************************************/
262
+ /******/ // The module cache
263
+ /******/ var __webpack_module_cache__ = {};
264
+ /******/
265
+ /******/ // The require function
266
+ /******/ function __webpack_require__(moduleId) {
267
+ /******/ // Check if module is in cache
268
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
269
+ /******/ if (cachedModule !== undefined) {
270
+ /******/ return cachedModule.exports;
271
+ /******/ }
272
+ /******/ // Create a new module (and put it into the cache)
273
+ /******/ var module = __webpack_module_cache__[moduleId] = {
274
+ /******/ // no module.id needed
275
+ /******/ // no module.loaded needed
276
+ /******/ exports: {}
277
+ /******/ };
278
+ /******/
279
+ /******/ // Execute the module function
280
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
281
+ /******/
282
+ /******/ // Return the exports of the module
283
+ /******/ return module.exports;
284
+ /******/ }
285
+ /******/
286
+ /************************************************************************/
287
+ /******/ /* webpack/runtime/define property getters */
288
+ /******/ // define getter/value functions for harmony exports
289
+ /******/ __webpack_require__.d = function(exports, definition) {
290
+ /******/ for(var key in definition) {
291
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
292
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
293
+ /******/ }
294
+ /******/ }
295
+ /******/ };
296
+ /******/
297
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
298
+ /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); };
299
+ /******/
300
+ /************************************************************************/
301
+ var __webpack_exports__ = {};
302
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
303
+ /* harmony export */ WV: function() { return /* reexport safe */ _components_js__WEBPACK_IMPORTED_MODULE_0__.WV; },
304
+ /* harmony export */ l$: function() { return /* reexport safe */ _redux_js__WEBPACK_IMPORTED_MODULE_2__.t; },
305
+ /* harmony export */ qJ: function() { return /* reexport safe */ _context_js__WEBPACK_IMPORTED_MODULE_1__.t; },
306
+ /* harmony export */ sr: function() { return /* reexport safe */ _components_js__WEBPACK_IMPORTED_MODULE_0__.sr; },
307
+ /* harmony export */ uI: function() { return /* reexport safe */ _type_js__WEBPACK_IMPORTED_MODULE_3__.u; }
308
+ /* harmony export */ });
309
+ /* harmony import */ var _components_js__WEBPACK_IMPORTED_MODULE_0__ = /*#__PURE__*/__webpack_require__(4);
310
+ /* harmony import */ var _context_js__WEBPACK_IMPORTED_MODULE_1__ = /*#__PURE__*/__webpack_require__(5);
311
+ /* harmony import */ var _redux_js__WEBPACK_IMPORTED_MODULE_2__ = /*#__PURE__*/__webpack_require__(6);
312
+ /* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_3__ = /*#__PURE__*/__webpack_require__(0);
313
+ // #!/usr/bin/env babel-node
314
+ // -*- coding: utf-8 -*-
315
+ /** @module index *//* !
316
+ region header
317
+ [Project page](https://tsickert.com/react-generic-user)
318
+
319
+ Copyright Torben Sickert (info["~at~"]tsickert.com) 16.12.2012
320
+
321
+ License
322
+ -------
323
+
324
+ This library written by Torben Sickert stands under a creative commons
325
+ naming 3.0 unported license.
326
+ See https://creativecommons.org/licenses/by/3.0/deed.de
327
+ endregion
328
+ */
329
+ var __webpack_exports__ACTION_NAME_PREFIX = __webpack_exports__.uI;
330
+ var __webpack_exports__CSS_CLASS_NAMES = __webpack_exports__.sr;
331
+ var __webpack_exports__componentFactory = __webpack_exports__.WV;
332
+ var __webpack_exports__contextSessionFactory = __webpack_exports__.qJ;
333
+ var __webpack_exports__reduxSessionFactory = __webpack_exports__.l$;
334
+ export { __webpack_exports__ACTION_NAME_PREFIX as ACTION_NAME_PREFIX, __webpack_exports__CSS_CLASS_NAMES as CSS_CLASS_NAMES, __webpack_exports__componentFactory as componentFactory, __webpack_exports__contextSessionFactory as contextSessionFactory, __webpack_exports__reduxSessionFactory as reduxSessionFactory };
@@ -0,0 +1,11 @@
1
+ import type { AsyncThunkConfig, BaseLoginData, BaseUserContext, BaseUserSession, ReduxSessionHandler, ReduxSessionOptions, ReduxSessionService } from './type';
2
+ /**
3
+ * Creates a redux slice, thunks and hooks to manage a user session.
4
+ * @param handler - Implements authentication, login and logout.
5
+ * @param options - Additional options.
6
+ * @param options.useLocation - Hook to determine current location. Needed to
7
+ * remember initially requested locations.
8
+ * @returns Session slice, thunks and hooks.
9
+ */
10
+ export declare const sessionFactory: <LoginData extends BaseLoginData = BaseLoginData, UserContext extends BaseUserContext = BaseUserContext, SessionType extends BaseUserSession<UserContext> = BaseUserSession<UserContext>, AsyncThunkOptions extends AsyncThunkConfig = AsyncThunkConfig>(handler: ReduxSessionHandler<LoginData, UserContext, AsyncThunkOptions>, { useLocation }?: ReduxSessionOptions) => ReduxSessionService<LoginData, UserContext, SessionType, AsyncThunkOptions>;
11
+ export default sessionFactory;
package/dist/redux.js ADDED
@@ -0,0 +1,178 @@
1
+ if(typeof window==='undefined'||window===null)var window=(typeof globalThis==='undefined'||globalThis===null)?{}:globalThis;import * as __WEBPACK_EXTERNAL_MODULE_clientnode__ from "clientnode";
2
+ import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_array_includes_js_66c3fd7d__ from "core-js/modules/es.array.includes.js";
3
+ import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
4
+ import * as __WEBPACK_EXTERNAL_MODULE_react_generic_tools_67824958__ from "react-generic-tools";
5
+ import { useDispatch as __WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useDispatch__, useSelector as __WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useSelector__ } from "react-redux";
6
+ import { createAsyncThunk as __WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__, createSlice as __WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createSlice__ } from "@reduxjs/toolkit";
7
+ /******/ var __webpack_modules__ = ([
8
+ /* 0 */
9
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
10
+
11
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12
+ /* harmony export */ u: function() { return /* binding */ ACTION_NAME_PREFIX; }
13
+ /* harmony export */ });
14
+ // -*- coding: utf-8 -*-
15
+ /** @module type *//* !
16
+ region header
17
+ [Project page](https://tsickert.com/react-generic-user)
18
+
19
+ Copyright Torben Sickert (info["~at~"]tsickert.com) 16.12.2012
20
+
21
+ License
22
+ -------
23
+
24
+ This library written by Torben Sickert stands under a creative commons
25
+ naming 3.0 unported license.
26
+ See https://creativecommons.org/licenses/by/3.0/deed.de
27
+ endregion
28
+ */// region imports
29
+ // endregion
30
+ // NOTE: Has to be redeclared since it is not exported by "@reduxjs/toolkit".
31
+ // region exports
32
+ /// region routing
33
+ /**
34
+ * Minimal location representation to stay independent of a concrete routing
35
+ * library (e.g. "react-router" locations are compatible).
36
+ *//**
37
+ * Integration of the used routing library.
38
+ * Using "react-router" for example: "{Redirect: Navigate, useLocation}".
39
+ *//// endregion
40
+ /// region universal
41
+ //// region hooks
42
+ //// endregion
43
+ /// endregion
44
+ /// region context
45
+ //// region expected given integration by library's usage
46
+ //// endregion
47
+ /// endregion
48
+ /// region redux
49
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
50
+ var ACTION_NAME_PREFIX="user";//// region expected given integration by library's usage
51
+ //// endregion
52
+ /// endregion
53
+ // endregion
54
+
55
+ /***/ }),
56
+ /* 1 */
57
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
58
+
59
+ var x = function(y) {
60
+ var x = {}; __webpack_require__.d(x, y); return x
61
+ }
62
+ var y = function(x) { return function() { return x; }; }
63
+ module.exports = x({ ["useEffect"]: function() { return __WEBPACK_EXTERNAL_MODULE_react__.useEffect; } });
64
+
65
+ /***/ }),
66
+ /* 2 */,
67
+ /* 3 */
68
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
69
+
70
+ var x = function(y) {
71
+ var x = {}; __webpack_require__.d(x, y); return x
72
+ }
73
+ var y = function(x) { return function() { return x; }; }
74
+ module.exports = x({ });
75
+
76
+ /***/ }),
77
+ /* 4 */,
78
+ /* 5 */,
79
+ /* 6 */,
80
+ /* 7 */
81
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
82
+
83
+ var x = function(y) {
84
+ var x = {}; __webpack_require__.d(x, y); return x
85
+ }
86
+ var y = function(x) { return function() { return x; }; }
87
+ module.exports = x({ ["isObject"]: function() { return __WEBPACK_EXTERNAL_MODULE_clientnode__.isObject; } });
88
+
89
+ /***/ }),
90
+ /* 8 */
91
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
92
+
93
+ var x = function(y) {
94
+ var x = {}; __webpack_require__.d(x, y); return x
95
+ }
96
+ var y = function(x) { return function() { return x; }; }
97
+ module.exports = x({ ["useMemorizedValue"]: function() { return __WEBPACK_EXTERNAL_MODULE_react_generic_tools_67824958__.useMemorizedValue; } });
98
+
99
+ /***/ })
100
+ /******/ ]);
101
+ /************************************************************************/
102
+ /******/ // The module cache
103
+ /******/ var __webpack_module_cache__ = {};
104
+ /******/
105
+ /******/ // The require function
106
+ /******/ function __webpack_require__(moduleId) {
107
+ /******/ // Check if module is in cache
108
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
109
+ /******/ if (cachedModule !== undefined) {
110
+ /******/ return cachedModule.exports;
111
+ /******/ }
112
+ /******/ // Create a new module (and put it into the cache)
113
+ /******/ var module = __webpack_module_cache__[moduleId] = {
114
+ /******/ // no module.id needed
115
+ /******/ // no module.loaded needed
116
+ /******/ exports: {}
117
+ /******/ };
118
+ /******/
119
+ /******/ // Execute the module function
120
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
121
+ /******/
122
+ /******/ // Return the exports of the module
123
+ /******/ return module.exports;
124
+ /******/ }
125
+ /******/
126
+ /************************************************************************/
127
+ /******/ /* webpack/runtime/define property getters */
128
+ /******/ // define getter/value functions for harmony exports
129
+ /******/ __webpack_require__.d = function(exports, definition) {
130
+ /******/ for(var key in definition) {
131
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
132
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
133
+ /******/ }
134
+ /******/ }
135
+ /******/ };
136
+ /******/
137
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
138
+ /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); };
139
+ /******/
140
+ /************************************************************************/
141
+
142
+ // EXTERNAL MODULE: external "core-js/modules/es.array.includes.js"
143
+ var es_array_includes_js_ = __webpack_require__(3);
144
+ // EXTERNAL MODULE: external "clientnode"
145
+ var external_clientnode_ = __webpack_require__(7);
146
+ // EXTERNAL MODULE: external "react"
147
+ var external_react_ = __webpack_require__(1);
148
+ // EXTERNAL MODULE: external "react-generic-tools"
149
+ var external_react_generic_tools_ = __webpack_require__(8);
150
+ ;// external "react-redux"
151
+
152
+ ;// external "@reduxjs/toolkit"
153
+
154
+ // EXTERNAL MODULE: ./src/type.ts
155
+ var type = /*#__PURE__*/__webpack_require__(0);
156
+ ;// ./src/redux.ts
157
+ // #!/usr/bin/env babel-node
158
+ // -*- coding: utf-8 -*-
159
+ /** @module redux *//* !
160
+ region header
161
+ [Project page](https://tsickert.com/react-generic-user)
162
+
163
+ Copyright Torben Sickert (info["~at~"]tsickert.com) 16.12.2012
164
+ endregion
165
+ */// region imports
166
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(r){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(o),!0).forEach(function(t){_defineProperty(r,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):ownKeys(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))})}return r}function _defineProperty(r,t,o){return(t=_toPropertyKey(t))in r?Object.defineProperty(r,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[t]=o,r}function _toPropertyKey(r){var o=_toPrimitive(r,"string");return"symbol"==_typeof(o)?o:o+""}function _toPrimitive(t,e){if("object"!=_typeof(t)||!t)return t;var r;if("undefined"!=typeof Symbol&&void 0!==(r=t[Symbol.toPrimitive])){var i=r.call(t,e||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)};// endregion
167
+ var useNoLocation=function useNoLocation(){return null};/**
168
+ * Creates a redux slice, thunks and hooks to manage a user session.
169
+ * @param handler - Implements authentication, login and logout.
170
+ * @param options - Additional options.
171
+ * @param options.useLocation - Hook to determine current location. Needed to
172
+ * remember initially requested locations.
173
+ * @returns Session slice, thunks and hooks.
174
+ */var sessionFactory=function sessionFactory(handler,_temp){var _ref=_temp===void 0?{}:_temp,_ref$useLocation=_ref.useLocation,useLocation=_ref$useLocation===void 0?useNoLocation:_ref$useLocation;/*
175
+ NOTE: We wrap handler calls via "(...parameters) => handler..." to
176
+ allow setting handler after this factory function has been called.
177
+ */var authenticateThunk=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__("".concat(type/* ACTION_NAME_PREFIX */.u,"/authenticate"),function(){return handler.authenticate.apply(handler,arguments)});var loginThunk=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__("".concat(type/* ACTION_NAME_PREFIX */.u,"/login"),function(){return handler.login.apply(handler,arguments)});var logoutThunk=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createAsyncThunk__("".concat(type/* ACTION_NAME_PREFIX */.u,"/logout"),function(){return handler.logout.apply(handler,arguments)});var useHasRole=function useHasRole(role){var session=__WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useSelector__(function(state){return state.user});var userContext=session===null||session===void 0?void 0:session.userContext;var roles=userContext===null||userContext===void 0?void 0:userContext.roles;return Boolean(roles&&[].concat(role).every(function(role){return roles.includes(role)}))};var slice=__WEBPACK_EXTERNAL_MODULE__reduxjs_toolkit_b9e87ac4_createSlice__({name:type/* ACTION_NAME_PREFIX */.u,initialState:{authenticated:null,authenticating:false,deauthenticating:false,initialRequestedLocation:undefined,userContext:undefined},selectors:{selectUser:function selectUser(slice){return slice}},reducers:{deauthenticate:function deauthenticate(state){return _objectSpread(_objectSpread({},state),{},{authenticated:false,userContext:undefined})},setInitialRequestedLocation:function setInitialRequestedLocation(state,_ref2){var payload=_ref2.payload;return _objectSpread(_objectSpread({},state),{},{initialRequestedLocation:payload})}},extraReducers:function extraReducers(builder){builder.addCase(logoutThunk.fulfilled,function(state,action){state.deauthenticating=false;if(action.payload){state.authenticated=false;state.userContext=undefined}}).addCase(logoutThunk.pending,function(state){state.deauthenticating=true}).addCase(logoutThunk.rejected,function(state){state.deauthenticating=false}).addMatcher(function(action){return["".concat(authenticateThunk.typePrefix,"/fulfilled"),"".concat(loginThunk.typePrefix,"/fulfilled")].includes(action.type)},function(state,action){state.authenticating=false;if(typeof action.payload==="boolean")state.authenticated=action.payload;else if((0,external_clientnode_.isObject)(action.payload)){state.authenticated=true;state.userContext=action.payload}else state.authenticated=false}).addMatcher(function(action){return["".concat(authenticateThunk.typePrefix,"/pending"),"".concat(loginThunk.typePrefix,"/pending")].includes(action.type)},function(state){state.authenticating=true}).addMatcher(function(action){return["".concat(authenticateThunk.typePrefix,"/rejected"),"".concat(loginThunk.typePrefix,"/rejected")].includes(action.type)},function(state){state.authenticating=false})}});return{authenticateThunk:authenticateThunk,loginThunk:loginThunk,logoutThunk:logoutThunk,slice:slice,useHasRole:useHasRole,useIsAdmin:function useIsAdmin(){return useHasRole("_admin")},useUser:function useUser(data,isLoginLocation){if(data===void 0){data={}}if(isLoginLocation===void 0){isLoginLocation=function isLoginLocation(location){return location.pathname.endsWith("/login")}}var dispatch=__WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useDispatch__();var location=useLocation();var session=__WEBPACK_EXTERNAL_MODULE_react_redux_1ffa815c_useSelector__(slice.selectors.selectUser);(0,external_react_.useEffect)(function(){if(location&&!isLoginLocation(location)&&(!session||session.initialRequestedLocation===undefined||session.authenticated&&session.initialRequestedLocation!==null))dispatch(slice.actions.setInitialRequestedLocation(session!==null&&session!==void 0&&session.authenticated?null:location))},[dispatch,location,session===null||session===void 0?void 0:session.authenticated,session===null||session===void 0?void 0:session.initialRequestedLocation]);if(session===null)throw new Error("No user redux state found. Did you register a "+"corresponding redux slice?");var authenticate=(0,external_react_generic_tools_.useMemorizedValue)(function(){dispatch(authenticateThunk(data))},dispatch);var login=(0,external_react_generic_tools_.useMemorizedValue)(function(_ref3){var login=_ref3.login,password=_ref3.password;dispatch(loginThunk(_objectSpread(_objectSpread({},data),{},{login:login,password:password})))},dispatch);var logout=(0,external_react_generic_tools_.useMemorizedValue)(function(){dispatch(logoutThunk(data))},dispatch);return (0,external_react_generic_tools_.useMemorizedValue)({authenticate:authenticate,login:login,logout:logout,session:session},authenticateThunk,dispatch,session)}}};/* harmony default export */ var redux = (sessionFactory);
178
+ export { redux as default, sessionFactory };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Settles pending promises and renders resulting updates.
3
+ * @returns Promise resolving when settled.
4
+ */
5
+ export declare const settle: () => Promise<void>;
6
+ /**
7
+ * Calls given callback and settles resulting tasks afterward.
8
+ * @param callback - Callback to call.
9
+ * @returns Callback's result.
10
+ */
11
+ export declare const trigger: <Type>(callback: () => Type) => Promise<Type>;
@@ -0,0 +1 @@
1
+ export {};