@verdaccio/ui-components 3.0.0-next-7.4 → 3.0.0-next-7.5

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 (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/AppTest/AppRoute.js +34 -0
  3. package/build/AppTest/pages/Front/Home.js +9 -0
  4. package/build/AppTest/pages/Front/index.js +14 -0
  5. package/build/AppTest/pages/Version/Version.js +34 -0
  6. package/build/AppTest/pages/Version/index.js +14 -0
  7. package/build/components/Forbidden/Forbidden.js +75 -0
  8. package/build/components/Forbidden/index.js +14 -0
  9. package/build/components/NotFound/NotFound.js +16 -14
  10. package/build/index.js +8 -0
  11. package/build/src/AppTest/App.stories.d.ts +8 -0
  12. package/build/src/AppTest/AppRoute.d.ts +3 -0
  13. package/build/src/AppTest/pages/Front/Home.d.ts +2 -0
  14. package/build/src/AppTest/pages/Front/index.d.ts +1 -0
  15. package/build/src/AppTest/pages/Version/Version.d.ts +3 -0
  16. package/build/src/AppTest/pages/Version/index.d.ts +1 -0
  17. package/build/src/components/Forbidden/Forbidden.d.ts +3 -0
  18. package/build/src/components/Forbidden/Forbidden.test.d.ts +1 -0
  19. package/build/src/components/Forbidden/index.d.ts +1 -0
  20. package/build/src/index.d.ts +1 -0
  21. package/build/src/sections/Detail/Detail.stories.d.ts +1 -0
  22. package/build/src/store/models/manifest.d.ts +11 -0
  23. package/build/store/api.js +12 -6
  24. package/build/store/models/manifest.js +20 -2
  25. package/package.json +1 -1
  26. package/src/AppTest/App.stories.tsx +32 -0
  27. package/src/AppTest/AppRoute.tsx +42 -0
  28. package/src/AppTest/pages/Front/Home.ts +3 -0
  29. package/src/AppTest/pages/Front/index.ts +1 -0
  30. package/src/AppTest/pages/Version/Version.tsx +28 -0
  31. package/src/AppTest/pages/Version/index.ts +1 -0
  32. package/src/components/Forbidden/Forbidden.test.tsx +38 -0
  33. package/src/components/Forbidden/Forbidden.tsx +56 -0
  34. package/src/components/Forbidden/index.ts +1 -0
  35. package/src/components/NotFound/NotFound.tsx +6 -5
  36. package/src/components/NotFound/Notfound.test.tsx +6 -3
  37. package/src/index.ts +1 -0
  38. package/src/sections/Detail/Detail.stories.tsx +10 -0
  39. package/src/store/api.test.ts +3 -2
  40. package/src/store/api.ts +13 -6
  41. package/src/store/models/manifest.ts +19 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @verdaccio/ui-components
2
2
 
3
+ ## 3.0.0-next-7.5
4
+
5
+ ### Minor Changes
6
+
7
+ - c9962fe: feat: forbidden user interface
8
+
3
9
  ## 3.0.0-next-7.4
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactRouterDom = require("react-router-dom");
9
+ var _index = require("../index");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ const VersionPage = (0, _index.loadable)(() => Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "Version" */'./pages/Version'))));
14
+ const Front = (0, _index.loadable)(() => Promise.resolve().then(() => _interopRequireWildcard(require( /* webpackChunkName: "Home" */'./pages/Front'))));
15
+ const AppRoute = () => {
16
+ return /*#__PURE__*/_react.default.createElement(_reactRouterDom.Switch, null, /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
17
+ exact: true,
18
+ path: _index.Route.ROOT
19
+ }, /*#__PURE__*/_react.default.createElement(Front, null)), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
20
+ exact: true,
21
+ path: _index.Route.PACKAGE
22
+ }, /*#__PURE__*/_react.default.createElement(_index.VersionProvider, null, /*#__PURE__*/_react.default.createElement(VersionPage, null))), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
23
+ exact: true,
24
+ path: _index.Route.PACKAGE_VERSION
25
+ }, /*#__PURE__*/_react.default.createElement(_index.VersionProvider, null, /*#__PURE__*/_react.default.createElement(VersionPage, null))), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
26
+ exact: true,
27
+ path: _index.Route.SCOPE_PACKAGE_VERSION
28
+ }, /*#__PURE__*/_react.default.createElement(_index.VersionProvider, null, /*#__PURE__*/_react.default.createElement(VersionPage, null))), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
29
+ exact: true,
30
+ path: _index.Route.SCOPE_PACKAGE
31
+ }, /*#__PURE__*/_react.default.createElement(_index.VersionProvider, null, /*#__PURE__*/_react.default.createElement(VersionPage, null))), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, null, /*#__PURE__*/_react.default.createElement(_index.NotFound, null)));
32
+ };
33
+ var _default = exports.default = AppRoute;
34
+ //# sourceMappingURL=AppRoute.js.map
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _index = require("../../../index");
8
+ var _default = exports.default = _index.Home;
9
+ //# sourceMappingURL=Home.js.map
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Home.default;
10
+ }
11
+ });
12
+ var _Home = _interopRequireDefault(require("./Home"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactRedux = require("react-redux");
9
+ var _Forbidden = _interopRequireDefault(require("../../../components/Forbidden"));
10
+ var _index = require("../../../index");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ const Version = () => {
13
+ const manifestStore = (0, _reactRedux.useSelector)(state => state.manifest);
14
+ const isLoading = (0, _reactRedux.useSelector)(state => {
15
+ var _state$loading;
16
+ return state === null || state === void 0 ? void 0 : (_state$loading = state.loading) === null || _state$loading === void 0 ? void 0 : _state$loading.models.manifest;
17
+ });
18
+ if (isLoading) {
19
+ return /*#__PURE__*/_react.default.createElement(_index.Loading, null);
20
+ }
21
+
22
+ // @ts-expect-error
23
+ if (manifestStore.forbidden) {
24
+ return /*#__PURE__*/_react.default.createElement(_Forbidden.default, null);
25
+ }
26
+
27
+ // @ts-expect-error
28
+ if (manifestStore.hasNotBeenFound) {
29
+ return /*#__PURE__*/_react.default.createElement(_index.NotFound, null);
30
+ }
31
+ return /*#__PURE__*/_react.default.createElement(_index.VersionLayout, null);
32
+ };
33
+ var _default = exports.default = Version;
34
+ //# sourceMappingURL=Version.js.map
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Version.default;
10
+ }
11
+ });
12
+ var _Version = _interopRequireDefault(require("./Version"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _base = _interopRequireDefault(require("@emotion/styled/base"));
8
+ var _Lock = _interopRequireDefault(require("@mui/icons-material/Lock"));
9
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
10
+ var _Button = _interopRequireDefault(require("@mui/material/Button"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _reactI18next = require("react-i18next");
13
+ var _reactRouterDom = require("react-router-dom");
14
+ var _Heading = _interopRequireDefault(require("../Heading"));
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /* eslint-disable react/forbid-component-props */ /* eslint-disable verdaccio/jsx-no-style */
19
+ const Foebidden = () => {
20
+ const history = (0, _reactRouterDom.useHistory)();
21
+ const {
22
+ t
23
+ } = (0, _reactI18next.useTranslation)();
24
+ const handleGoHome = (0, _react.useCallback)(() => {
25
+ history.push('/');
26
+ }, [history]);
27
+ return /*#__PURE__*/_react.default.createElement(_Box.default, {
28
+ alignItems: "center",
29
+ "data-testid": "404",
30
+ display: "flex",
31
+ flexDirection: "column",
32
+ flexGrow: 1,
33
+ justifyContent: "center",
34
+ p: 2
35
+ }, /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(_Lock.default, {
36
+ color: "primary",
37
+ style: {
38
+ fontSize: 236
39
+ }
40
+ })), /*#__PURE__*/_react.default.createElement(StyledHeading, {
41
+ className: "not-found-text",
42
+ variant: "h4"
43
+ }, t('error.401.sorry-no-access')), /*#__PURE__*/_react.default.createElement(_Button.default, {
44
+ "data-testid": "not-found-go-to-home-button",
45
+ onClick: handleGoHome,
46
+ variant: "contained"
47
+ }, t('button.go-to-the-home-page')));
48
+ };
49
+ var _default = exports.default = Foebidden;
50
+ const Container = /*#__PURE__*/(0, _base.default)('div', process.env.NODE_ENV === "production" ? {
51
+ target: "e1p1nuky1"
52
+ } : {
53
+ target: "e1p1nuky1",
54
+ label: "Container"
55
+ })(process.env.NODE_ENV === "production" ? {
56
+ name: "9th5i",
57
+ styles: "margin:0 auto"
58
+ } : {
59
+ name: "9th5i",
60
+ styles: "margin:0 auto",
61
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0ZvcmJpZGRlbi9Gb3JiaWRkZW4udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdEa0IiLCJmaWxlIjoiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRm9yYmlkZGVuL0ZvcmJpZGRlbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mb3JiaWQtY29tcG9uZW50LXByb3BzICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHZlcmRhY2Npby9qc3gtbm8tc3R5bGUgKi9cbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBMb2NrSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0xvY2snO1xuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VIaXN0b3J5IH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IEhlYWRpbmcgZnJvbSAnLi4vSGVhZGluZyc7XG5cbmNvbnN0IEZvZWJpZGRlbjogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG5cbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IGhhbmRsZUdvSG9tZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoaXN0b3J5LnB1c2goJy8nKTtcbiAgfSwgW2hpc3RvcnldKTtcblxuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCI0MDRcIlxuICAgICAgZGlzcGxheT1cImZsZXhcIlxuICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICBmbGV4R3Jvdz17MX1cbiAgICAgIGp1c3RpZnlDb250ZW50PVwiY2VudGVyXCJcbiAgICAgIHA9ezJ9XG4gICAgPlxuICAgICAgPENvbnRhaW5lcj5cbiAgICAgICAgPExvY2tJY29uIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPXt7IGZvbnRTaXplOiAyMzYgfX0gLz5cbiAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgPFN0eWxlZEhlYWRpbmcgY2xhc3NOYW1lPVwibm90LWZvdW5kLXRleHRcIiB2YXJpYW50PVwiaDRcIj5cbiAgICAgICAge3QoJ2Vycm9yLjQwMS5zb3JyeS1uby1hY2Nlc3MnKX1cbiAgICAgIDwvU3R5bGVkSGVhZGluZz5cbiAgICAgIDxCdXR0b24gZGF0YS10ZXN0aWQ9XCJub3QtZm91bmQtZ28tdG8taG9tZS1idXR0b25cIiBvbkNsaWNrPXtoYW5kbGVHb0hvbWV9IHZhcmlhbnQ9XCJjb250YWluZWRcIj5cbiAgICAgICAge3QoJ2J1dHRvbi5nby10by10aGUtaG9tZS1wYWdlJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvZWJpZGRlbjtcblxuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSh7XG4gIG1hcmdpbjogJzAgYXV0bycsXG59KTtcblxuY29uc3QgU3R5bGVkSGVhZGluZyA9IHN0eWxlZChIZWFkaW5nKTx7IHRoZW1lPzogVGhlbWUgfT4oKHsgdGhlbWUgfSkgPT4gKHtcbiAgY29sb3I6IHRoZW1lPy5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZT8ucGFsZXR0ZS5wcmltYXJ5Lm1haW4gOiB0aGVtZT8ucGFsZXR0ZS53aGl0ZSxcbiAgbWFyZ2luQm90dG9tOiAxNixcbn0pKTtcbiJdfQ== */",
62
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
63
+ });
64
+ const StyledHeading = /*#__PURE__*/(0, _base.default)(_Heading.default, process.env.NODE_ENV === "production" ? {
65
+ target: "e1p1nuky0"
66
+ } : {
67
+ target: "e1p1nuky0",
68
+ label: "StyledHeading"
69
+ })(({
70
+ theme
71
+ }) => ({
72
+ color: (theme === null || theme === void 0 ? void 0 : theme.palette.mode) === 'light' ? theme === null || theme === void 0 ? void 0 : theme.palette.primary.main : theme === null || theme === void 0 ? void 0 : theme.palette.white,
73
+ marginBottom: 16
74
+ }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0ZvcmJpZGRlbi9Gb3JiaWRkZW4udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9Ec0IiLCJmaWxlIjoiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRm9yYmlkZGVuL0ZvcmJpZGRlbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mb3JiaWQtY29tcG9uZW50LXByb3BzICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHZlcmRhY2Npby9qc3gtbm8tc3R5bGUgKi9cbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBMb2NrSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0xvY2snO1xuaW1wb3J0IEJveCBmcm9tICdAbXVpL21hdGVyaWFsL0JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VIaXN0b3J5IH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IEhlYWRpbmcgZnJvbSAnLi4vSGVhZGluZyc7XG5cbmNvbnN0IEZvZWJpZGRlbjogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG5cbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IGhhbmRsZUdvSG9tZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoaXN0b3J5LnB1c2goJy8nKTtcbiAgfSwgW2hpc3RvcnldKTtcblxuICByZXR1cm4gKFxuICAgIDxCb3hcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCI0MDRcIlxuICAgICAgZGlzcGxheT1cImZsZXhcIlxuICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICBmbGV4R3Jvdz17MX1cbiAgICAgIGp1c3RpZnlDb250ZW50PVwiY2VudGVyXCJcbiAgICAgIHA9ezJ9XG4gICAgPlxuICAgICAgPENvbnRhaW5lcj5cbiAgICAgICAgPExvY2tJY29uIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPXt7IGZvbnRTaXplOiAyMzYgfX0gLz5cbiAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgPFN0eWxlZEhlYWRpbmcgY2xhc3NOYW1lPVwibm90LWZvdW5kLXRleHRcIiB2YXJpYW50PVwiaDRcIj5cbiAgICAgICAge3QoJ2Vycm9yLjQwMS5zb3JyeS1uby1hY2Nlc3MnKX1cbiAgICAgIDwvU3R5bGVkSGVhZGluZz5cbiAgICAgIDxCdXR0b24gZGF0YS10ZXN0aWQ9XCJub3QtZm91bmQtZ28tdG8taG9tZS1idXR0b25cIiBvbkNsaWNrPXtoYW5kbGVHb0hvbWV9IHZhcmlhbnQ9XCJjb250YWluZWRcIj5cbiAgICAgICAge3QoJ2J1dHRvbi5nby10by10aGUtaG9tZS1wYWdlJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvZWJpZGRlbjtcblxuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSh7XG4gIG1hcmdpbjogJzAgYXV0bycsXG59KTtcblxuY29uc3QgU3R5bGVkSGVhZGluZyA9IHN0eWxlZChIZWFkaW5nKTx7IHRoZW1lPzogVGhlbWUgfT4oKHsgdGhlbWUgfSkgPT4gKHtcbiAgY29sb3I6IHRoZW1lPy5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZT8ucGFsZXR0ZS5wcmltYXJ5Lm1haW4gOiB0aGVtZT8ucGFsZXR0ZS53aGl0ZSxcbiAgbWFyZ2luQm90dG9tOiAxNixcbn0pKTtcbiJdfQ== */");
75
+ //# sourceMappingURL=Forbidden.js.map
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Forbidden.default;
10
+ }
11
+ });
12
+ var _Forbidden = _interopRequireDefault(require("./Forbidden"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ //# sourceMappingURL=index.js.map
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _base = _interopRequireDefault(require("@emotion/styled/base"));
8
+ var _FolderOff = _interopRequireDefault(require("@mui/icons-material/FolderOff"));
8
9
  var _Box = _interopRequireDefault(require("@mui/material/Box"));
9
10
  var _Button = _interopRequireDefault(require("@mui/material/Button"));
10
11
  var _react = _interopRequireWildcard(require("react"));
11
12
  var _reactI18next = require("react-i18next");
12
13
  var _reactRouterDom = require("react-router-dom");
13
14
  var _Heading = _interopRequireDefault(require("../Heading"));
14
- var _package = _interopRequireDefault(require("./img/package.svg"));
15
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
16
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } // @ts-ignore
18
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /* eslint-disable verdaccio/jsx-no-style */
19
19
  const NotFound = () => {
20
20
  const history = (0, _reactRouterDom.useHistory)();
21
21
  const {
@@ -32,10 +32,12 @@ const NotFound = () => {
32
32
  flexGrow: 1,
33
33
  justifyContent: "center",
34
34
  p: 2
35
- }, /*#__PURE__*/_react.default.createElement(EmptyPackage, {
36
- alt: t('error.404.page-not-found'),
37
- src: _package.default
38
- }), /*#__PURE__*/_react.default.createElement(StyledHeading, {
35
+ }, /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(_FolderOff.default, {
36
+ color: "primary",
37
+ style: {
38
+ fontSize: 236
39
+ }
40
+ })), /*#__PURE__*/_react.default.createElement(StyledHeading, {
39
41
  className: "not-found-text",
40
42
  variant: "h4"
41
43
  }, t('error.404.sorry-we-could-not-find-it')), /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -45,18 +47,18 @@ const NotFound = () => {
45
47
  }, t('button.go-to-the-home-page')));
46
48
  };
47
49
  var _default = exports.default = NotFound;
48
- const EmptyPackage = /*#__PURE__*/(0, _base.default)('img', process.env.NODE_ENV === "production" ? {
50
+ const Container = /*#__PURE__*/(0, _base.default)('div', process.env.NODE_ENV === "production" ? {
49
51
  target: "e85lhfw1"
50
52
  } : {
51
53
  target: "e85lhfw1",
52
- label: "EmptyPackage"
54
+ label: "Container"
53
55
  })(process.env.NODE_ENV === "production" ? {
54
- name: "178ibc5",
55
- styles: "width:150px;margin:0 auto"
56
+ name: "9th5i",
57
+ styles: "margin:0 auto"
56
58
  } : {
57
- name: "178ibc5",
58
- styles: "width:150px;margin:0 auto",
59
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ3FCIiwiZmlsZSI6Ii4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5pbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgSGVhZGluZyBmcm9tICcuLi9IZWFkaW5nJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBQYWNrYWdlSW1nIGZyb20gJy4vaW1nL3BhY2thZ2Uuc3ZnJztcblxuY29uc3QgTm90Rm91bmQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGhpc3RvcnkucHVzaCgnLycpO1xuICB9LCBbaGlzdG9yeV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBkYXRhLXRlc3RpZD1cIjQwNFwiXG4gICAgICBkaXNwbGF5PVwiZmxleFwiXG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGZsZXhHcm93PXsxfVxuICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgcD17Mn1cbiAgICA+XG4gICAgICA8RW1wdHlQYWNrYWdlIGFsdD17dCgnZXJyb3IuNDA0LnBhZ2Utbm90LWZvdW5kJyl9IHNyYz17UGFja2FnZUltZ30gLz5cbiAgICAgIDxTdHlsZWRIZWFkaW5nIGNsYXNzTmFtZT1cIm5vdC1mb3VuZC10ZXh0XCIgdmFyaWFudD1cImg0XCI+XG4gICAgICAgIHt0KCdlcnJvci40MDQuc29ycnktd2UtY291bGQtbm90LWZpbmQtaXQnKX1cbiAgICAgIDwvU3R5bGVkSGVhZGluZz5cbiAgICAgIDxCdXR0b24gZGF0YS10ZXN0aWQ9XCJub3QtZm91bmQtZ28tdG8taG9tZS1idXR0b25cIiBvbkNsaWNrPXtoYW5kbGVHb0hvbWV9IHZhcmlhbnQ9XCJjb250YWluZWRcIj5cbiAgICAgICAge3QoJ2J1dHRvbi5nby10by10aGUtaG9tZS1wYWdlJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5vdEZvdW5kO1xuXG5jb25zdCBFbXB0eVBhY2thZ2UgPSBzdHlsZWQoJ2ltZycpKHtcbiAgd2lkdGg6ICcxNTBweCcsXG4gIG1hcmdpbjogJzAgYXV0bycsXG59KTtcblxuY29uc3QgU3R5bGVkSGVhZGluZyA9IHN0eWxlZChIZWFkaW5nKTx7IHRoZW1lPzogVGhlbWUgfT4oKHsgdGhlbWUgfSkgPT4gKHtcbiAgY29sb3I6IHRoZW1lPy5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZT8ucGFsZXR0ZS5wcmltYXJ5Lm1haW4gOiB0aGVtZT8ucGFsZXR0ZS53aGl0ZSxcbiAgbWFyZ2luQm90dG9tOiAxNixcbn0pKTtcbiJdfQ== */",
59
+ name: "9th5i",
60
+ styles: "margin:0 auto",
61
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2Q2tCIiwiZmlsZSI6Ii4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZlcmRhY2Npby9qc3gtbm8tc3R5bGUgKi9cbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBGb2xkZXJPZmZJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRm9sZGVyT2ZmJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5pbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgSGVhZGluZyBmcm9tICcuLi9IZWFkaW5nJztcblxuY29uc3QgTm90Rm91bmQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGhpc3RvcnkucHVzaCgnLycpO1xuICB9LCBbaGlzdG9yeV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBkYXRhLXRlc3RpZD1cIjQwNFwiXG4gICAgICBkaXNwbGF5PVwiZmxleFwiXG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGZsZXhHcm93PXsxfVxuICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgcD17Mn1cbiAgICA+XG4gICAgICA8Q29udGFpbmVyPlxuICAgICAgICA8Rm9sZGVyT2ZmSWNvbiBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT17eyBmb250U2l6ZTogMjM2IH19IC8+XG4gICAgICA8L0NvbnRhaW5lcj5cbiAgICAgIDxTdHlsZWRIZWFkaW5nIGNsYXNzTmFtZT1cIm5vdC1mb3VuZC10ZXh0XCIgdmFyaWFudD1cImg0XCI+XG4gICAgICAgIHt0KCdlcnJvci40MDQuc29ycnktd2UtY291bGQtbm90LWZpbmQtaXQnKX1cbiAgICAgIDwvU3R5bGVkSGVhZGluZz5cbiAgICAgIDxCdXR0b24gZGF0YS10ZXN0aWQ9XCJub3QtZm91bmQtZ28tdG8taG9tZS1idXR0b25cIiBvbkNsaWNrPXtoYW5kbGVHb0hvbWV9IHZhcmlhbnQ9XCJjb250YWluZWRcIj5cbiAgICAgICAge3QoJ2J1dHRvbi5nby10by10aGUtaG9tZS1wYWdlJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5vdEZvdW5kO1xuXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQoJ2RpdicpKHtcbiAgbWFyZ2luOiAnMCBhdXRvJyxcbn0pO1xuXG5jb25zdCBTdHlsZWRIZWFkaW5nID0gc3R5bGVkKEhlYWRpbmcpPHsgdGhlbWU/OiBUaGVtZSB9PigoeyB0aGVtZSB9KSA9PiAoe1xuICBjb2xvcjogdGhlbWU/LnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lPy5wYWxldHRlLnByaW1hcnkubWFpbiA6IHRoZW1lPy5wYWxldHRlLndoaXRlLFxuICBtYXJnaW5Cb3R0b206IDE2LFxufSkpO1xuIl19 */",
60
62
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
61
63
  });
62
64
  const StyledHeading = /*#__PURE__*/(0, _base.default)(_Heading.default, process.env.NODE_ENV === "production" ? {
@@ -69,5 +71,5 @@ const StyledHeading = /*#__PURE__*/(0, _base.default)(_Heading.default, process.
69
71
  }) => ({
70
72
  color: (theme === null || theme === void 0 ? void 0 : theme.palette.mode) === 'light' ? theme === null || theme === void 0 ? void 0 : theme.palette.primary.main : theme === null || theme === void 0 ? void 0 : theme.palette.white,
71
73
  marginBottom: 16
72
- }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnRHNCIiwiZmlsZSI6Ii4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5pbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgSGVhZGluZyBmcm9tICcuLi9IZWFkaW5nJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBQYWNrYWdlSW1nIGZyb20gJy4vaW1nL3BhY2thZ2Uuc3ZnJztcblxuY29uc3QgTm90Rm91bmQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGhpc3RvcnkucHVzaCgnLycpO1xuICB9LCBbaGlzdG9yeV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBkYXRhLXRlc3RpZD1cIjQwNFwiXG4gICAgICBkaXNwbGF5PVwiZmxleFwiXG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGZsZXhHcm93PXsxfVxuICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgcD17Mn1cbiAgICA+XG4gICAgICA8RW1wdHlQYWNrYWdlIGFsdD17dCgnZXJyb3IuNDA0LnBhZ2Utbm90LWZvdW5kJyl9IHNyYz17UGFja2FnZUltZ30gLz5cbiAgICAgIDxTdHlsZWRIZWFkaW5nIGNsYXNzTmFtZT1cIm5vdC1mb3VuZC10ZXh0XCIgdmFyaWFudD1cImg0XCI+XG4gICAgICAgIHt0KCdlcnJvci40MDQuc29ycnktd2UtY291bGQtbm90LWZpbmQtaXQnKX1cbiAgICAgIDwvU3R5bGVkSGVhZGluZz5cbiAgICAgIDxCdXR0b24gZGF0YS10ZXN0aWQ9XCJub3QtZm91bmQtZ28tdG8taG9tZS1idXR0b25cIiBvbkNsaWNrPXtoYW5kbGVHb0hvbWV9IHZhcmlhbnQ9XCJjb250YWluZWRcIj5cbiAgICAgICAge3QoJ2J1dHRvbi5nby10by10aGUtaG9tZS1wYWdlJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5vdEZvdW5kO1xuXG5jb25zdCBFbXB0eVBhY2thZ2UgPSBzdHlsZWQoJ2ltZycpKHtcbiAgd2lkdGg6ICcxNTBweCcsXG4gIG1hcmdpbjogJzAgYXV0bycsXG59KTtcblxuY29uc3QgU3R5bGVkSGVhZGluZyA9IHN0eWxlZChIZWFkaW5nKTx7IHRoZW1lPzogVGhlbWUgfT4oKHsgdGhlbWUgfSkgPT4gKHtcbiAgY29sb3I6IHRoZW1lPy5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZT8ucGFsZXR0ZS5wcmltYXJ5Lm1haW4gOiB0aGVtZT8ucGFsZXR0ZS53aGl0ZSxcbiAgbWFyZ2luQm90dG9tOiAxNixcbn0pKTtcbiJdfQ== */");
74
+ }), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpRHNCIiwiZmlsZSI6Ii4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05vdEZvdW5kL05vdEZvdW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZlcmRhY2Npby9qc3gtbm8tc3R5bGUgKi9cbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBGb2xkZXJPZmZJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRm9sZGVyT2ZmJztcbmltcG9ydCBCb3ggZnJvbSAnQG11aS9tYXRlcmlhbC9Cb3gnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5pbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgSGVhZGluZyBmcm9tICcuLi9IZWFkaW5nJztcblxuY29uc3QgTm90Rm91bmQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGhpc3RvcnkucHVzaCgnLycpO1xuICB9LCBbaGlzdG9yeV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBkYXRhLXRlc3RpZD1cIjQwNFwiXG4gICAgICBkaXNwbGF5PVwiZmxleFwiXG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIGZsZXhHcm93PXsxfVxuICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgcD17Mn1cbiAgICA+XG4gICAgICA8Q29udGFpbmVyPlxuICAgICAgICA8Rm9sZGVyT2ZmSWNvbiBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT17eyBmb250U2l6ZTogMjM2IH19IC8+XG4gICAgICA8L0NvbnRhaW5lcj5cbiAgICAgIDxTdHlsZWRIZWFkaW5nIGNsYXNzTmFtZT1cIm5vdC1mb3VuZC10ZXh0XCIgdmFyaWFudD1cImg0XCI+XG4gICAgICAgIHt0KCdlcnJvci40MDQuc29ycnktd2UtY291bGQtbm90LWZpbmQtaXQnKX1cbiAgICAgIDwvU3R5bGVkSGVhZGluZz5cbiAgICAgIDxCdXR0b24gZGF0YS10ZXN0aWQ9XCJub3QtZm91bmQtZ28tdG8taG9tZS1idXR0b25cIiBvbkNsaWNrPXtoYW5kbGVHb0hvbWV9IHZhcmlhbnQ9XCJjb250YWluZWRcIj5cbiAgICAgICAge3QoJ2J1dHRvbi5nby10by10aGUtaG9tZS1wYWdlJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5vdEZvdW5kO1xuXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQoJ2RpdicpKHtcbiAgbWFyZ2luOiAnMCBhdXRvJyxcbn0pO1xuXG5jb25zdCBTdHlsZWRIZWFkaW5nID0gc3R5bGVkKEhlYWRpbmcpPHsgdGhlbWU/OiBUaGVtZSB9PigoeyB0aGVtZSB9KSA9PiAoe1xuICBjb2xvcjogdGhlbWU/LnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lPy5wYWxldHRlLnByaW1hcnkubWFpbiA6IHRoZW1lPy5wYWxldHRlLndoaXRlLFxuICBtYXJnaW5Cb3R0b206IDE2LFxufSkpO1xuIl19 */");
73
75
  //# sourceMappingURL=NotFound.js.map
package/build/index.js CHANGED
@@ -28,6 +28,7 @@ var _exportNames = {
28
28
  Logo: true,
29
29
  MenuItem: true,
30
30
  NotFound: true,
31
+ Forbidden: true,
31
32
  LoginDialog: true,
32
33
  Search: true,
33
34
  HeaderInfoDialog: true,
@@ -136,6 +137,12 @@ Object.defineProperty(exports, "Footer", {
136
137
  return _Footer.default;
137
138
  }
138
139
  });
140
+ Object.defineProperty(exports, "Forbidden", {
141
+ enumerable: true,
142
+ get: function () {
143
+ return _Forbidden.default;
144
+ }
145
+ });
139
146
  Object.defineProperty(exports, "FundButton", {
140
147
  enumerable: true,
141
148
  get: function () {
@@ -406,6 +413,7 @@ var _Label = _interopRequireDefault(require("./components/Label"));
406
413
  var _Logo = _interopRequireDefault(require("./components/Logo"));
407
414
  var _MenuItem = _interopRequireDefault(require("./components/MenuItem"));
408
415
  var _NotFound = _interopRequireDefault(require("./components/NotFound"));
416
+ var _Forbidden = _interopRequireDefault(require("./components/Forbidden"));
409
417
  var _LoginDialog = _interopRequireDefault(require("./components/LoginDialog"));
410
418
  var _Search = _interopRequireDefault(require("./components/Search"));
411
419
  var _HeaderInfoDialog = _interopRequireDefault(require("./components/HeaderInfoDialog"));
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ title: string;
3
+ };
4
+ export default _default;
5
+ export declare const ApplicationStoryBook: any;
6
+ export declare const ApplicationjQuery: any;
7
+ export declare const ApplicationForbidden: any;
8
+ export declare const ApplicationNotFound: any;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const AppRoute: React.FC;
3
+ export default AppRoute;
@@ -0,0 +1,2 @@
1
+ import { Home } from '../../../index';
2
+ export default Home;
@@ -0,0 +1 @@
1
+ export { default } from './Home';
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const Version: React.FC;
3
+ export default Version;
@@ -0,0 +1 @@
1
+ export { default } from './Version';
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const Foebidden: React.FC;
3
+ export default Foebidden;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { default } from './Forbidden';
@@ -22,6 +22,7 @@ export { default as Label } from './components/Label';
22
22
  export { default as Logo } from './components/Logo';
23
23
  export { default as MenuItem } from './components/MenuItem';
24
24
  export { default as NotFound } from './components/NotFound';
25
+ export { default as Forbidden } from './components/Forbidden';
25
26
  export { default as LoginDialog } from './components/LoginDialog';
26
27
  export { default as Search } from './components/Search';
27
28
  export { default as HeaderInfoDialog } from './components/HeaderInfoDialog';
@@ -4,3 +4,4 @@ declare const _default: {
4
4
  export default _default;
5
5
  export declare const DetailStorybook: any;
6
6
  export declare const DetailJquery: any;
7
+ export declare const DetailForbidden: any;
@@ -13,6 +13,15 @@ export declare const manifest: {
13
13
  } & {
14
14
  reducers: {
15
15
  notFound(state: {}): {
16
+ hasNotBeenFound: boolean;
17
+ forbidden: boolean;
18
+ manifest: undefined;
19
+ packageName: undefined;
20
+ packageVersion: undefined;
21
+ readme: undefined;
22
+ };
23
+ forbidden(state: {}): {
24
+ forbidden: boolean;
16
25
  hasNotBeenFound: boolean;
17
26
  manifest: undefined;
18
27
  packageName: undefined;
@@ -25,6 +34,7 @@ export declare const manifest: {
25
34
  isError(state: {}): {
26
35
  isError: boolean;
27
36
  hasNotBeenFound: boolean;
37
+ forbidden: boolean;
28
38
  manifest: undefined;
29
39
  packageName: undefined;
30
40
  packageVersion: undefined;
@@ -36,6 +46,7 @@ export declare const manifest: {
36
46
  packageVersion: any;
37
47
  readme: any;
38
48
  hasNotBeenFound: boolean;
49
+ forbidden: boolean;
39
50
  };
40
51
  };
41
52
  } & ({} | {
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
  exports.handleResponseType = handleResponseType;
8
8
  var _storage = _interopRequireDefault(require("./storage"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ class CustomError extends Error {}
11
+
10
12
  /**
11
13
  * Handles response according to content type
12
14
  * @param {object} response
@@ -31,7 +33,9 @@ function handleResponseType(response) {
31
33
  return Promise.all([response.ok, response.blob()]);
32
34
  }
33
35
  }
34
- return Promise.all([response.ok, response.text()]);
36
+
37
+ // error handling
38
+ return Promise.all([response.ok, response]);
35
39
  }
36
40
  const AuthHeader = 'Authorization';
37
41
  class API {
@@ -52,12 +56,14 @@ class API {
52
56
  signal: options.signal,
53
57
  ...options
54
58
  }).then(handleResponseType).then(response => {
55
- if (response[0]) {
56
- resolve(response[1]);
59
+ const [ok, data] = response;
60
+ if (ok === true) {
61
+ resolve(data);
57
62
  } else {
58
- // eslint-disable-next-line no-console
59
- console.error(response);
60
- reject(new Error('something went wrong'));
63
+ var _data$statusText, _data$status;
64
+ const error = new CustomError((_data$statusText = data === null || data === void 0 ? void 0 : data.statusText) !== null && _data$statusText !== void 0 ? _data$statusText : 'Unknown error');
65
+ error.code = (_data$status = data === null || data === void 0 ? void 0 : data.status) !== null && _data$status !== void 0 ? _data$status : 500;
66
+ reject(error);
61
67
  }
62
68
  }).catch(error => {
63
69
  reject(error);
@@ -29,6 +29,18 @@ const manifest = exports.manifest = (0, _core.createModel)()({
29
29
  return {
30
30
  ...state,
31
31
  hasNotBeenFound: true,
32
+ forbidden: false,
33
+ manifest: undefined,
34
+ packageName: undefined,
35
+ packageVersion: undefined,
36
+ readme: undefined
37
+ };
38
+ },
39
+ forbidden(state) {
40
+ return {
41
+ ...state,
42
+ forbidden: true,
43
+ hasNotBeenFound: false,
32
44
  manifest: undefined,
33
45
  packageName: undefined,
34
46
  packageVersion: undefined,
@@ -46,6 +58,7 @@ const manifest = exports.manifest = (0, _core.createModel)()({
46
58
  ...state,
47
59
  isError: true,
48
60
  hasNotBeenFound: false,
61
+ forbidden: false,
49
62
  manifest: undefined,
50
63
  packageName: undefined,
51
64
  packageVersion: undefined,
@@ -64,7 +77,8 @@ const manifest = exports.manifest = (0, _core.createModel)()({
64
77
  packageName,
65
78
  packageVersion,
66
79
  readme,
67
- hasNotBeenFound: false
80
+ hasNotBeenFound: false,
81
+ forbidden: false
68
82
  };
69
83
  }
70
84
  },
@@ -90,7 +104,11 @@ const manifest = exports.manifest = (0, _core.createModel)()({
90
104
  readme
91
105
  });
92
106
  } catch (error) {
93
- dispatch.manifest.notFound();
107
+ if (error.code === 404) {
108
+ dispatch.manifest.notFound();
109
+ } else {
110
+ dispatch.manifest.forbidden();
111
+ }
94
112
  }
95
113
  }
96
114
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/ui-components",
3
- "version": "3.0.0-next-7.4",
3
+ "version": "3.0.0-next-7.5",
4
4
  "description": "theme ui component",
5
5
  "author": "Juan Picado <juanpicado19@gmail.com>",
6
6
  "license": "MIT",
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { MemoryRouter } from 'react-router';
3
+
4
+ import AppRoute from './AppRoute';
5
+
6
+ export default {
7
+ title: 'App/Main',
8
+ };
9
+
10
+ export const ApplicationStoryBook: any = () => (
11
+ <MemoryRouter initialEntries={[`/-/web/detail/storybook`]}>
12
+ <AppRoute />
13
+ </MemoryRouter>
14
+ );
15
+
16
+ export const ApplicationjQuery: any = () => (
17
+ <MemoryRouter initialEntries={[`/-/web/detail/jquery`]}>
18
+ <AppRoute />
19
+ </MemoryRouter>
20
+ );
21
+
22
+ export const ApplicationForbidden: any = () => (
23
+ <MemoryRouter initialEntries={[`/-/web/detail/JSONStream`]}>
24
+ <AppRoute />
25
+ </MemoryRouter>
26
+ );
27
+
28
+ export const ApplicationNotFound: any = () => (
29
+ <MemoryRouter initialEntries={[`/-/web/detail/kleur`]}>
30
+ <AppRoute />
31
+ </MemoryRouter>
32
+ );
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { Route as ReactRouterDomRoute, Switch } from 'react-router-dom';
3
+
4
+ import { NotFound, Route, VersionProvider, loadable } from '../index';
5
+
6
+ const VersionPage = loadable(() => import(/* webpackChunkName: "Version" */ './pages/Version'));
7
+ const Front = loadable(() => import(/* webpackChunkName: "Home" */ './pages/Front'));
8
+
9
+ const AppRoute: React.FC = () => {
10
+ return (
11
+ <Switch>
12
+ <ReactRouterDomRoute exact={true} path={Route.ROOT}>
13
+ <Front />
14
+ </ReactRouterDomRoute>
15
+ <ReactRouterDomRoute exact={true} path={Route.PACKAGE}>
16
+ <VersionProvider>
17
+ <VersionPage />
18
+ </VersionProvider>
19
+ </ReactRouterDomRoute>
20
+ <ReactRouterDomRoute exact={true} path={Route.PACKAGE_VERSION}>
21
+ <VersionProvider>
22
+ <VersionPage />
23
+ </VersionProvider>
24
+ </ReactRouterDomRoute>
25
+ <ReactRouterDomRoute exact={true} path={Route.SCOPE_PACKAGE_VERSION}>
26
+ <VersionProvider>
27
+ <VersionPage />
28
+ </VersionProvider>
29
+ </ReactRouterDomRoute>
30
+ <ReactRouterDomRoute exact={true} path={Route.SCOPE_PACKAGE}>
31
+ <VersionProvider>
32
+ <VersionPage />
33
+ </VersionProvider>
34
+ </ReactRouterDomRoute>
35
+ <ReactRouterDomRoute>
36
+ <NotFound />
37
+ </ReactRouterDomRoute>
38
+ </Switch>
39
+ );
40
+ };
41
+
42
+ export default AppRoute;
@@ -0,0 +1,3 @@
1
+ import { Home } from '../../../index';
2
+
3
+ export default Home;
@@ -0,0 +1 @@
1
+ export { default } from './Home';
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+
4
+ import Forbidden from '../../../components/Forbidden';
5
+ import { Loading, NotFound, RootState, VersionLayout } from '../../../index';
6
+
7
+ const Version: React.FC = () => {
8
+ const manifestStore = useSelector((state: RootState) => state.manifest);
9
+ const isLoading = useSelector((state: RootState) => state?.loading?.models.manifest);
10
+
11
+ if (isLoading) {
12
+ return <Loading />;
13
+ }
14
+
15
+ // @ts-expect-error
16
+ if (manifestStore.forbidden) {
17
+ return <Forbidden />;
18
+ }
19
+
20
+ // @ts-expect-error
21
+ if (manifestStore.hasNotBeenFound) {
22
+ return <NotFound />;
23
+ }
24
+
25
+ return <VersionLayout />;
26
+ };
27
+
28
+ export default Version;
@@ -0,0 +1 @@
1
+ export { default } from './Version';
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import { MemoryRouter } from 'react-router';
3
+
4
+ import { fireEvent, render, screen } from '../../test/test-react-testing-library';
5
+ import Forbidden from './Forbidden';
6
+
7
+ const mockHistory = jest.fn();
8
+
9
+ jest.mock('react-router-dom', () => ({
10
+ useHistory: () => ({
11
+ push: mockHistory,
12
+ }),
13
+ }));
14
+
15
+ describe('<Forbidden /> component', () => {
16
+ test('should load the component in default state', () => {
17
+ render(
18
+ <MemoryRouter>
19
+ <Forbidden />
20
+ </MemoryRouter>
21
+ );
22
+ expect(screen.getByTestId('LockIcon')).toBeInTheDocument();
23
+ expect(screen.getByText('error.401.sorry-no-access')).toBeInTheDocument();
24
+ expect(screen.getByText('button.go-to-the-home-page')).toBeInTheDocument();
25
+ });
26
+
27
+ test('go to Home Page button click', async () => {
28
+ const { getByTestId } = render(
29
+ <MemoryRouter>
30
+ <Forbidden />
31
+ </MemoryRouter>
32
+ );
33
+
34
+ const node = getByTestId('not-found-go-to-home-button');
35
+ fireEvent.click(node);
36
+ expect(mockHistory).toHaveBeenCalled();
37
+ });
38
+ });
@@ -0,0 +1,56 @@
1
+ /* eslint-disable react/forbid-component-props */
2
+
3
+ /* eslint-disable verdaccio/jsx-no-style */
4
+ import styled from '@emotion/styled';
5
+ import LockIcon from '@mui/icons-material/Lock';
6
+ import Box from '@mui/material/Box';
7
+ import Button from '@mui/material/Button';
8
+ import React, { useCallback } from 'react';
9
+ import { useTranslation } from 'react-i18next';
10
+ import { useHistory } from 'react-router-dom';
11
+
12
+ import { Theme } from '../..';
13
+ import Heading from '../Heading';
14
+
15
+ const Foebidden: React.FC = () => {
16
+ const history = useHistory();
17
+
18
+ const { t } = useTranslation();
19
+
20
+ const handleGoHome = useCallback(() => {
21
+ history.push('/');
22
+ }, [history]);
23
+
24
+ return (
25
+ <Box
26
+ alignItems="center"
27
+ data-testid="404"
28
+ display="flex"
29
+ flexDirection="column"
30
+ flexGrow={1}
31
+ justifyContent="center"
32
+ p={2}
33
+ >
34
+ <Container>
35
+ <LockIcon color="primary" style={{ fontSize: 236 }} />
36
+ </Container>
37
+ <StyledHeading className="not-found-text" variant="h4">
38
+ {t('error.401.sorry-no-access')}
39
+ </StyledHeading>
40
+ <Button data-testid="not-found-go-to-home-button" onClick={handleGoHome} variant="contained">
41
+ {t('button.go-to-the-home-page')}
42
+ </Button>
43
+ </Box>
44
+ );
45
+ };
46
+
47
+ export default Foebidden;
48
+
49
+ const Container = styled('div')({
50
+ margin: '0 auto',
51
+ });
52
+
53
+ const StyledHeading = styled(Heading)<{ theme?: Theme }>(({ theme }) => ({
54
+ color: theme?.palette.mode === 'light' ? theme?.palette.primary.main : theme?.palette.white,
55
+ marginBottom: 16,
56
+ }));
@@ -0,0 +1 @@
1
+ export { default } from './Forbidden';
@@ -1,4 +1,6 @@
1
+ /* eslint-disable verdaccio/jsx-no-style */
1
2
  import styled from '@emotion/styled';
3
+ import FolderOffIcon from '@mui/icons-material/FolderOff';
2
4
  import Box from '@mui/material/Box';
3
5
  import Button from '@mui/material/Button';
4
6
  import React, { useCallback } from 'react';
@@ -7,8 +9,6 @@ import { useHistory } from 'react-router-dom';
7
9
 
8
10
  import { Theme } from '../../';
9
11
  import Heading from '../Heading';
10
- // @ts-ignore
11
- import PackageImg from './img/package.svg';
12
12
 
13
13
  const NotFound: React.FC = () => {
14
14
  const history = useHistory();
@@ -28,7 +28,9 @@ const NotFound: React.FC = () => {
28
28
  justifyContent="center"
29
29
  p={2}
30
30
  >
31
- <EmptyPackage alt={t('error.404.page-not-found')} src={PackageImg} />
31
+ <Container>
32
+ <FolderOffIcon color="primary" style={{ fontSize: 236 }} />
33
+ </Container>
32
34
  <StyledHeading className="not-found-text" variant="h4">
33
35
  {t('error.404.sorry-we-could-not-find-it')}
34
36
  </StyledHeading>
@@ -41,8 +43,7 @@ const NotFound: React.FC = () => {
41
43
 
42
44
  export default NotFound;
43
45
 
44
- const EmptyPackage = styled('img')({
45
- width: '150px',
46
+ const Container = styled('div')({
46
47
  margin: '0 auto',
47
48
  });
48
49
 
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { MemoryRouter } from 'react-router';
3
3
 
4
- import { fireEvent, render } from '../../test/test-react-testing-library';
4
+ import { fireEvent, render, screen } from '../../test/test-react-testing-library';
5
5
  import NotFound from './NotFound';
6
6
 
7
7
  const mockHistory = jest.fn();
@@ -14,12 +14,15 @@ jest.mock('react-router-dom', () => ({
14
14
 
15
15
  describe('<NotFound /> component', () => {
16
16
  test('should load the component in default state', () => {
17
- const { container } = render(
17
+ render(
18
18
  <MemoryRouter>
19
19
  <NotFound />
20
20
  </MemoryRouter>
21
21
  );
22
- expect(container.firstChild).toMatchSnapshot();
22
+
23
+ expect(screen.getByTestId('FolderOffIcon')).toBeInTheDocument();
24
+ expect(screen.getByText('button.go-to-the-home-page')).toBeInTheDocument();
25
+ expect(screen.getByText('error.404.sorry-we-could-not-find-it')).toBeInTheDocument();
23
26
  });
24
27
 
25
28
  test('go to Home Page button click', async () => {
package/src/index.ts CHANGED
@@ -22,6 +22,7 @@ export { default as Label } from './components/Label';
22
22
  export { default as Logo } from './components/Logo';
23
23
  export { default as MenuItem } from './components/MenuItem';
24
24
  export { default as NotFound } from './components/NotFound';
25
+ export { default as Forbidden } from './components/Forbidden';
25
26
  export { default as LoginDialog } from './components/LoginDialog';
26
27
  export { default as Search } from './components/Search';
27
28
  export { default as HeaderInfoDialog } from './components/HeaderInfoDialog';
@@ -27,3 +27,13 @@ export const DetailJquery: any = () => (
27
27
  </Route>
28
28
  </MemoryRouter>
29
29
  );
30
+
31
+ export const DetailForbidden: any = () => (
32
+ <MemoryRouter initialEntries={[`/-/web/detail/JSONStream`]}>
33
+ <Route exact={true} path="/-/web/detail/:package">
34
+ <VersionProvider>
35
+ <Detail />
36
+ </VersionProvider>
37
+ </Route>
38
+ </MemoryRouter>
39
+ );
@@ -14,7 +14,8 @@ describe('api', () => {
14
14
 
15
15
  const handled = await handleResponseType(response);
16
16
 
17
- expect(handled).toEqual([ok, responseText]);
17
+ expect(handled[0]).toBeFalsy();
18
+ expect(handled[1]).toBeDefined();
18
19
  });
19
20
 
20
21
  test('should test tgz scenario', async () => {
@@ -123,7 +124,7 @@ describe('api', () => {
123
124
  })
124
125
  );
125
126
 
126
- await expect(api.request('/resource')).rejects.toThrow(new Error('something went wrong'));
127
+ await expect(api.request('/resource')).rejects.toThrow(new Error('Unknown error'));
127
128
  });
128
129
 
129
130
  test('when api returns an error 5.x.x', async () => {
package/src/store/api.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  import storage from './storage';
2
2
 
3
+ class CustomError extends Error {
4
+ // @ts-ignore
5
+ code: number;
6
+ }
7
+
3
8
  /**
4
9
  * Handles response according to content type
5
10
  * @param {object} response
@@ -25,7 +30,8 @@ export function handleResponseType(response: Response): Promise<[boolean, any]>
25
30
  }
26
31
  }
27
32
 
28
- return Promise.all([response.ok, response.text()]);
33
+ // error handling
34
+ return Promise.all([response.ok, response]);
29
35
  }
30
36
 
31
37
  const AuthHeader = 'Authorization';
@@ -55,12 +61,13 @@ class API {
55
61
  })
56
62
  .then(handleResponseType)
57
63
  .then((response) => {
58
- if (response[0]) {
59
- resolve(response[1]);
64
+ const [ok, data] = response;
65
+ if (ok === true) {
66
+ resolve(data);
60
67
  } else {
61
- // eslint-disable-next-line no-console
62
- console.error(response);
63
- reject(new Error('something went wrong'));
68
+ const error = new CustomError(data?.statusText ?? 'Unknown error');
69
+ error.code = data?.status ?? 500;
70
+ reject(error);
64
71
  }
65
72
  })
66
73
  .catch((error) => {
@@ -33,6 +33,18 @@ export const manifest = createModel<RootModel>()({
33
33
  return {
34
34
  ...state,
35
35
  hasNotBeenFound: true,
36
+ forbidden: false,
37
+ manifest: undefined,
38
+ packageName: undefined,
39
+ packageVersion: undefined,
40
+ readme: undefined,
41
+ };
42
+ },
43
+ forbidden(state) {
44
+ return {
45
+ ...state,
46
+ forbidden: true,
47
+ hasNotBeenFound: false,
36
48
  manifest: undefined,
37
49
  packageName: undefined,
38
50
  packageVersion: undefined,
@@ -50,6 +62,7 @@ export const manifest = createModel<RootModel>()({
50
62
  ...state,
51
63
  isError: true,
52
64
  hasNotBeenFound: false,
65
+ forbidden: false,
53
66
  manifest: undefined,
54
67
  packageName: undefined,
55
68
  packageVersion: undefined,
@@ -64,6 +77,7 @@ export const manifest = createModel<RootModel>()({
64
77
  packageVersion,
65
78
  readme,
66
79
  hasNotBeenFound: false,
80
+ forbidden: false,
67
81
  };
68
82
  },
69
83
  },
@@ -91,7 +105,11 @@ export const manifest = createModel<RootModel>()({
91
105
  );
92
106
  dispatch.manifest.saveManifest({ packageName, packageVersion, manifest, readme });
93
107
  } catch (error: any) {
94
- dispatch.manifest.notFound();
108
+ if (error.code === 404) {
109
+ dispatch.manifest.notFound();
110
+ } else {
111
+ dispatch.manifest.forbidden();
112
+ }
95
113
  }
96
114
  },
97
115
  }),