@sima-land/isomorph 11.0.0-alpha.4 → 11.0.0-alpha.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +25 -0
- package/dist/cjs/cache/index.js +6 -0
- package/dist/cjs/cache/index.js.map +1 -0
- package/dist/cjs/cache/types.js +6 -0
- package/dist/cjs/cache/types.js.map +1 -0
- package/dist/cjs/config/base.js +22 -0
- package/dist/cjs/config/base.js.map +1 -0
- package/dist/cjs/config/index.js +20 -0
- package/dist/cjs/config/index.js.map +1 -0
- package/dist/cjs/config/source.js +25 -0
- package/dist/cjs/config/source.js.map +1 -0
- package/dist/cjs/config/types.js +6 -0
- package/dist/cjs/config/types.js.map +1 -0
- package/dist/cjs/di/application.js +106 -0
- package/dist/cjs/di/application.js.map +1 -0
- package/dist/cjs/di/container.js +55 -0
- package/dist/cjs/di/container.js.map +1 -0
- package/dist/cjs/di/errors.js +65 -0
- package/dist/cjs/di/errors.js.map +1 -0
- package/dist/cjs/di/index.js +59 -0
- package/dist/cjs/di/index.js.map +1 -0
- package/dist/cjs/di/preset.js +32 -0
- package/dist/cjs/di/preset.js.map +1 -0
- package/dist/cjs/di/token.js +44 -0
- package/dist/cjs/di/token.js.map +1 -0
- package/dist/cjs/di/types.js +6 -0
- package/dist/cjs/di/types.js.map +1 -0
- package/dist/cjs/http/errors.js +47 -0
- package/dist/cjs/http/errors.js.map +1 -0
- package/dist/cjs/http/index.js +63 -0
- package/dist/cjs/http/index.js.map +1 -0
- package/dist/cjs/http/types.js +6 -0
- package/dist/cjs/http/types.js.map +1 -0
- package/dist/cjs/log/errors.js +35 -0
- package/dist/cjs/log/errors.js.map +1 -0
- package/dist/cjs/log/handler/pino.js +31 -0
- package/dist/cjs/log/handler/pino.js.map +1 -0
- package/dist/cjs/log/handler/sentry.js +57 -0
- package/dist/cjs/log/handler/sentry.js.map +1 -0
- package/dist/cjs/log/index.js +26 -0
- package/dist/cjs/log/index.js.map +1 -0
- package/dist/cjs/log/logger.js +35 -0
- package/dist/cjs/log/logger.js.map +1 -0
- package/dist/cjs/log/types.js +6 -0
- package/dist/cjs/log/types.js.map +1 -0
- package/dist/cjs/package.json +36 -0
- package/dist/cjs/preset/isomorphic/constants.js +14 -0
- package/dist/cjs/preset/isomorphic/constants.js.map +1 -0
- package/dist/cjs/preset/isomorphic/index.js +6 -0
- package/dist/cjs/preset/isomorphic/index.js.map +1 -0
- package/dist/cjs/preset/isomorphic/providers/index.js +42 -0
- package/dist/cjs/preset/isomorphic/providers/index.js.map +1 -0
- package/dist/cjs/preset/isomorphic/types.js +6 -0
- package/dist/cjs/preset/isomorphic/types.js.map +1 -0
- package/dist/cjs/preset/isomorphic/utils/index.js +322 -0
- package/dist/cjs/preset/isomorphic/utils/index.js.map +1 -0
- package/dist/cjs/preset/node/handler/index.js +52 -0
- package/dist/cjs/preset/node/handler/index.js.map +1 -0
- package/dist/cjs/preset/node/handler/providers/index.js +212 -0
- package/dist/cjs/preset/node/handler/providers/index.js.map +1 -0
- package/dist/cjs/preset/node/handler/utils/index.js +132 -0
- package/dist/cjs/preset/node/handler/utils/index.js.map +1 -0
- package/dist/cjs/preset/node/index.js +26 -0
- package/dist/cjs/preset/node/index.js.map +1 -0
- package/dist/cjs/preset/node/node/index.js +61 -0
- package/dist/cjs/preset/node/node/index.js.map +1 -0
- package/dist/cjs/preset/node/node/providers/index.js +403 -0
- package/dist/cjs/preset/node/node/providers/index.js.map +1 -0
- package/dist/cjs/preset/node/node/utils/http-client/index.js +122 -0
- package/dist/cjs/preset/node/node/utils/http-client/index.js.map +1 -0
- package/dist/cjs/preset/node/node/utils/http-server/index.js +18 -0
- package/dist/cjs/preset/node/node/utils/http-server/index.js.map +1 -0
- package/dist/cjs/preset/node/node/utils/index.js +20 -0
- package/dist/cjs/preset/node/node/utils/index.js.map +1 -0
- package/dist/cjs/preset/node/types.js +6 -0
- package/dist/cjs/preset/node/types.js.map +1 -0
- package/dist/cjs/preset/web/index.js +34 -0
- package/dist/cjs/preset/web/index.js.map +1 -0
- package/dist/cjs/preset/web/providers/index.js +94 -0
- package/dist/cjs/preset/web/providers/index.js.map +1 -0
- package/dist/cjs/tokens.js +86 -0
- package/dist/cjs/tokens.js.map +1 -0
- package/dist/cjs/utils/axios/index.js +40 -0
- package/dist/cjs/utils/axios/index.js.map +1 -0
- package/dist/cjs/utils/axios/middleware/cookie.js +28 -0
- package/dist/cjs/utils/axios/middleware/cookie.js.map +1 -0
- package/dist/cjs/utils/axios/middleware/log.js +37 -0
- package/dist/cjs/utils/axios/middleware/log.js.map +1 -0
- package/dist/cjs/utils/axios/sauce/index.js +57 -0
- package/dist/cjs/utils/axios/sauce/index.js.map +1 -0
- package/dist/cjs/utils/axios/utils/index.js +30 -0
- package/dist/cjs/utils/axios/utils/index.js.map +1 -0
- package/dist/cjs/utils/express/handler/health-check.js +19 -0
- package/dist/cjs/utils/express/handler/health-check.js.map +1 -0
- package/dist/cjs/utils/express/index.js +20 -0
- package/dist/cjs/utils/express/index.js.map +1 -0
- package/dist/cjs/utils/express/utils/index.js +22 -0
- package/dist/cjs/utils/express/utils/index.js.map +1 -0
- package/dist/cjs/utils/function.js +44 -0
- package/dist/cjs/utils/function.js.map +1 -0
- package/dist/cjs/utils/index.js +20 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/{utils/number.js → dist/cjs/utils/math.js} +7 -5
- package/dist/cjs/utils/math.js.map +1 -0
- package/dist/cjs/utils/react/error-handlers/index.js +80 -0
- package/dist/cjs/utils/react/error-handlers/index.js.map +1 -0
- package/dist/cjs/utils/react/index.js +19 -0
- package/dist/cjs/utils/react/index.js.map +1 -0
- package/dist/cjs/utils/redux/index.js +19 -0
- package/dist/cjs/utils/redux/index.js.map +1 -0
- package/dist/cjs/utils/redux/remote-data.js +118 -0
- package/dist/cjs/utils/redux/remote-data.js.map +1 -0
- package/dist/cjs/utils/redux-saga/index.js +20 -0
- package/dist/cjs/utils/redux-saga/index.js.map +1 -0
- package/dist/cjs/utils/redux-saga/middleware.js +149 -0
- package/dist/cjs/utils/redux-saga/middleware.js.map +1 -0
- package/dist/cjs/utils/redux-saga/take-chain.js +66 -0
- package/dist/cjs/utils/redux-saga/take-chain.js.map +1 -0
- package/dist/cjs/utils/redux-saga/types.js +6 -0
- package/dist/cjs/utils/redux-saga/types.js.map +1 -0
- package/dist/cjs/utils/ssr/index.js +73 -0
- package/dist/cjs/utils/ssr/index.js.map +1 -0
- package/dist/cjs/utils/web/analytics/data-layer.js +20 -0
- package/dist/cjs/utils/web/analytics/data-layer.js.map +1 -0
- package/dist/cjs/utils/web/analytics/index.js +20 -0
- package/dist/cjs/utils/web/analytics/index.js.map +1 -0
- package/dist/cjs/utils/web/analytics/oko.js +20 -0
- package/dist/cjs/utils/web/analytics/oko.js.map +1 -0
- package/dist/cjs/utils/web/storage/index.js +75 -0
- package/dist/cjs/utils/web/storage/index.js.map +1 -0
- package/dist/cjs/utils/webpack/env/index.js +96 -0
- package/dist/cjs/utils/webpack/env/index.js.map +1 -0
- package/dist/cjs/utils/webpack/env/types.js +6 -0
- package/dist/cjs/utils/webpack/env/types.js.map +1 -0
- package/dist/cjs/utils/webpack/env/utils.js +55 -0
- package/dist/cjs/utils/webpack/env/utils.js.map +1 -0
- package/dist/cjs/utils/webpack/index.js +20 -0
- package/dist/cjs/utils/webpack/index.js.map +1 -0
- package/dist/cjs/utils/webpack/module-federation/index.js +110 -0
- package/dist/cjs/utils/webpack/module-federation/index.js.map +1 -0
- package/dist/cjs/utils/webpack/module-federation/types.js +6 -0
- package/dist/cjs/utils/webpack/module-federation/types.js.map +1 -0
- package/dist/cjs/utils/webpack/module-federation/utils.js +87 -0
- package/dist/cjs/utils/webpack/module-federation/utils.js.map +1 -0
- package/dist/esm/cache/index.js +2 -0
- package/dist/esm/cache/index.js.map +1 -0
- package/dist/esm/cache/types.js +2 -0
- package/dist/esm/cache/types.js.map +1 -0
- package/dist/esm/config/base.js +16 -0
- package/dist/esm/config/base.js.map +1 -0
- package/dist/esm/config/index.js +3 -0
- package/dist/esm/config/index.js.map +1 -0
- package/dist/esm/config/source.js +19 -0
- package/dist/esm/config/source.js.map +1 -0
- package/dist/esm/config/types.js +2 -0
- package/dist/esm/config/types.js.map +1 -0
- package/dist/esm/di/application.js +100 -0
- package/dist/esm/di/application.js.map +1 -0
- package/dist/esm/di/container.js +49 -0
- package/dist/esm/di/container.js.map +1 -0
- package/dist/esm/di/errors.js +56 -0
- package/dist/esm/di/errors.js.map +1 -0
- package/dist/esm/di/index.js +6 -0
- package/dist/esm/di/index.js.map +1 -0
- package/dist/esm/di/preset.js +26 -0
- package/dist/esm/di/preset.js.map +1 -0
- package/dist/esm/di/token.js +38 -0
- package/dist/esm/di/token.js.map +1 -0
- package/dist/esm/di/types.js +2 -0
- package/dist/esm/di/types.js.map +1 -0
- package/dist/esm/http/errors.js +39 -0
- package/dist/esm/http/errors.js.map +1 -0
- package/dist/esm/http/index.js +4 -0
- package/dist/esm/http/index.js.map +1 -0
- package/dist/esm/http/types.js +2 -0
- package/dist/esm/http/types.js.map +1 -0
- package/dist/esm/log/errors.js +27 -0
- package/dist/esm/log/errors.js.map +1 -0
- package/dist/esm/log/handler/pino.js +25 -0
- package/dist/esm/log/handler/pino.js.map +1 -0
- package/dist/esm/log/handler/sentry.js +52 -0
- package/dist/esm/log/handler/sentry.js.map +1 -0
- package/dist/esm/log/index.js +3 -0
- package/dist/esm/log/index.js.map +1 -0
- package/dist/esm/log/logger.js +29 -0
- package/dist/esm/log/logger.js.map +1 -0
- package/dist/esm/log/types.js +2 -0
- package/dist/esm/log/types.js.map +1 -0
- package/dist/esm/package.json +36 -0
- package/dist/esm/preset/isomorphic/constants.js +8 -0
- package/dist/esm/preset/isomorphic/constants.js.map +1 -0
- package/dist/esm/preset/isomorphic/index.js +2 -0
- package/dist/esm/preset/isomorphic/index.js.map +1 -0
- package/dist/esm/preset/isomorphic/providers/index.js +35 -0
- package/dist/esm/preset/isomorphic/providers/index.js.map +1 -0
- package/dist/esm/preset/isomorphic/types.js +2 -0
- package/dist/esm/preset/isomorphic/types.js.map +1 -0
- package/dist/esm/preset/isomorphic/utils/index.js +309 -0
- package/dist/esm/preset/isomorphic/utils/index.js.map +1 -0
- package/dist/esm/preset/node/handler/index.js +42 -0
- package/dist/esm/preset/node/handler/index.js.map +1 -0
- package/dist/esm/preset/node/handler/providers/index.js +194 -0
- package/dist/esm/preset/node/handler/providers/index.js.map +1 -0
- package/dist/esm/preset/node/handler/utils/index.js +113 -0
- package/dist/esm/preset/node/handler/utils/index.js.map +1 -0
- package/dist/esm/preset/node/index.js +3 -0
- package/dist/esm/preset/node/index.js.map +1 -0
- package/dist/esm/preset/node/node/index.js +56 -0
- package/dist/esm/preset/node/node/index.js.map +1 -0
- package/dist/esm/preset/node/node/providers/index.js +378 -0
- package/dist/esm/preset/node/node/providers/index.js.map +1 -0
- package/dist/esm/preset/node/node/utils/http-client/index.js +114 -0
- package/dist/esm/preset/node/node/utils/http-client/index.js.map +1 -0
- package/dist/esm/preset/node/node/utils/http-server/index.js +12 -0
- package/dist/esm/preset/node/node/utils/http-server/index.js.map +1 -0
- package/dist/esm/preset/node/node/utils/index.js +3 -0
- package/dist/esm/preset/node/node/utils/index.js.map +1 -0
- package/dist/esm/preset/node/types.js +2 -0
- package/dist/esm/preset/node/types.js.map +1 -0
- package/dist/esm/preset/web/index.js +29 -0
- package/dist/esm/preset/web/index.js.map +1 -0
- package/dist/esm/preset/web/providers/index.js +85 -0
- package/dist/esm/preset/web/providers/index.js.map +1 -0
- package/dist/esm/tokens.js +81 -0
- package/dist/esm/tokens.js.map +1 -0
- package/dist/esm/utils/axios/index.js +5 -0
- package/dist/esm/utils/axios/index.js.map +1 -0
- package/dist/esm/utils/axios/middleware/cookie.js +22 -0
- package/dist/esm/utils/axios/middleware/cookie.js.map +1 -0
- package/dist/esm/utils/axios/middleware/log.js +31 -0
- package/dist/esm/utils/axios/middleware/log.js.map +1 -0
- package/dist/esm/utils/axios/sauce/index.js +50 -0
- package/dist/esm/utils/axios/sauce/index.js.map +1 -0
- package/dist/esm/utils/axios/utils/index.js +24 -0
- package/dist/esm/utils/axios/utils/index.js.map +1 -0
- package/dist/esm/utils/express/handler/health-check.js +13 -0
- package/dist/esm/utils/express/handler/health-check.js.map +1 -0
- package/dist/esm/utils/express/index.js +3 -0
- package/dist/esm/utils/express/index.js.map +1 -0
- package/dist/esm/utils/express/utils/index.js +16 -0
- package/dist/esm/utils/express/utils/index.js.map +1 -0
- package/dist/esm/utils/function.js +38 -0
- package/dist/esm/utils/function.js.map +1 -0
- package/dist/esm/utils/index.js +3 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/math.js +9 -0
- package/dist/esm/utils/math.js.map +1 -0
- package/dist/esm/utils/react/error-handlers/index.js +69 -0
- package/dist/esm/utils/react/error-handlers/index.js.map +1 -0
- package/dist/esm/utils/react/index.js +3 -0
- package/dist/esm/utils/react/index.js.map +1 -0
- package/dist/esm/utils/redux/index.js +3 -0
- package/dist/esm/utils/redux/index.js.map +1 -0
- package/dist/esm/utils/redux/remote-data.js +108 -0
- package/dist/esm/utils/redux/remote-data.js.map +1 -0
- package/dist/esm/utils/redux-saga/index.js +3 -0
- package/dist/esm/utils/redux-saga/index.js.map +1 -0
- package/dist/esm/utils/redux-saga/middleware.js +143 -0
- package/dist/esm/utils/redux-saga/middleware.js.map +1 -0
- package/dist/esm/utils/redux-saga/take-chain.js +59 -0
- package/dist/esm/utils/redux-saga/take-chain.js.map +1 -0
- package/dist/esm/utils/redux-saga/types.js +2 -0
- package/dist/esm/utils/redux-saga/types.js.map +1 -0
- package/dist/esm/utils/ssr/index.js +66 -0
- package/dist/esm/utils/ssr/index.js.map +1 -0
- package/dist/esm/utils/web/analytics/data-layer.js +14 -0
- package/dist/esm/utils/web/analytics/data-layer.js.map +1 -0
- package/dist/esm/utils/web/analytics/index.js +3 -0
- package/dist/esm/utils/web/analytics/index.js.map +1 -0
- package/dist/esm/utils/web/analytics/oko.js +14 -0
- package/dist/esm/utils/web/analytics/oko.js.map +1 -0
- package/dist/esm/utils/web/storage/index.js +69 -0
- package/dist/esm/utils/web/storage/index.js.map +1 -0
- package/dist/esm/utils/webpack/env/index.js +89 -0
- package/dist/esm/utils/webpack/env/index.js.map +1 -0
- package/dist/esm/utils/webpack/env/types.js +2 -0
- package/dist/esm/utils/webpack/env/types.js.map +1 -0
- package/dist/esm/utils/webpack/env/utils.js +48 -0
- package/dist/esm/utils/webpack/env/utils.js.map +1 -0
- package/dist/esm/utils/webpack/index.js +4 -0
- package/dist/esm/utils/webpack/index.js.map +1 -0
- package/dist/esm/utils/webpack/module-federation/index.js +96 -0
- package/dist/esm/utils/webpack/module-federation/index.js.map +1 -0
- package/dist/esm/utils/webpack/module-federation/types.js +2 -0
- package/dist/esm/utils/webpack/module-federation/types.js.map +1 -0
- package/dist/esm/utils/webpack/module-federation/utils.js +80 -0
- package/dist/esm/utils/webpack/module-federation/utils.js.map +1 -0
- package/dist/types/cache/index.d.ts +2 -0
- package/dist/types/cache/index.d.ts.map +1 -0
- package/dist/types/cache/types.d.ts +31 -0
- package/dist/types/cache/types.d.ts.map +1 -0
- package/{config → dist/types/config}/base.d.ts +3 -2
- package/dist/types/config/base.d.ts.map +1 -0
- package/dist/types/config/index.d.ts +4 -0
- package/dist/types/config/index.d.ts.map +1 -0
- package/dist/types/config/source.d.ts +8 -0
- package/dist/types/config/source.d.ts.map +1 -0
- package/dist/types/config/types.d.ts +21 -0
- package/dist/types/config/types.d.ts.map +1 -0
- package/{di → dist/types/di}/application.d.ts +6 -1
- package/dist/types/di/application.d.ts.map +1 -0
- package/{di → dist/types/di}/container.d.ts +1 -0
- package/dist/types/di/container.d.ts.map +1 -0
- package/dist/types/di/errors.d.ts +36 -0
- package/dist/types/di/errors.d.ts.map +1 -0
- package/dist/types/di/index.d.ts +7 -0
- package/dist/types/di/index.d.ts.map +1 -0
- package/dist/types/di/preset.d.ts +10 -0
- package/dist/types/di/preset.d.ts.map +1 -0
- package/{di → dist/types/di}/token.d.ts +1 -0
- package/dist/types/di/token.d.ts.map +1 -0
- package/dist/types/di/types.d.ts +87 -0
- package/dist/types/di/types.d.ts.map +1 -0
- package/dist/types/http/errors.d.ts +29 -0
- package/dist/types/http/errors.d.ts.map +1 -0
- package/dist/types/http/index.d.ts +5 -0
- package/dist/types/http/index.d.ts.map +1 -0
- package/dist/types/http/types.d.ts +3 -0
- package/dist/types/http/types.d.ts.map +1 -0
- package/dist/types/log/errors.d.ts +24 -0
- package/dist/types/log/errors.d.ts.map +1 -0
- package/dist/types/log/handler/pino.d.ts +9 -0
- package/dist/types/log/handler/pino.d.ts.map +1 -0
- package/dist/types/log/handler/sentry.d.ts +9 -0
- package/dist/types/log/handler/sentry.d.ts.map +1 -0
- package/dist/types/log/index.d.ts +4 -0
- package/dist/types/log/index.d.ts.map +1 -0
- package/{logger/index.d.ts → dist/types/log/logger.d.ts} +1 -0
- package/dist/types/log/logger.d.ts.map +1 -0
- package/dist/types/log/types.d.ts +65 -0
- package/dist/types/log/types.d.ts.map +1 -0
- package/dist/types/preset/isomorphic/constants.d.ts +8 -0
- package/dist/types/preset/isomorphic/constants.d.ts.map +1 -0
- package/dist/types/preset/isomorphic/index.d.ts +2 -0
- package/dist/types/preset/isomorphic/index.d.ts.map +1 -0
- package/dist/types/preset/isomorphic/providers/index.d.ts +23 -0
- package/dist/types/preset/isomorphic/providers/index.d.ts.map +1 -0
- package/dist/types/preset/isomorphic/types.d.ts +35 -0
- package/dist/types/preset/isomorphic/types.d.ts.map +1 -0
- package/dist/types/preset/isomorphic/utils/index.d.ts +119 -0
- package/dist/types/preset/isomorphic/utils/index.d.ts.map +1 -0
- package/dist/types/preset/node/handler/index.d.ts +11 -0
- package/dist/types/preset/node/handler/index.d.ts.map +1 -0
- package/dist/types/preset/node/handler/providers/index.d.ts +36 -0
- package/dist/types/preset/node/handler/providers/index.d.ts.map +1 -0
- package/dist/types/preset/node/handler/utils/index.d.ts +47 -0
- package/dist/types/preset/node/handler/utils/index.d.ts.map +1 -0
- package/dist/types/preset/node/index.d.ts +4 -0
- package/dist/types/preset/node/index.d.ts.map +1 -0
- package/dist/types/preset/node/node/index.d.ts +9 -0
- package/dist/types/preset/node/node/index.d.ts.map +1 -0
- package/dist/types/preset/node/node/providers/index.d.ts +113 -0
- package/dist/types/preset/node/node/providers/index.d.ts.map +1 -0
- package/{http-client/middleware/tracing.d.ts → dist/types/preset/node/node/utils/http-client/index.d.ts} +13 -3
- package/dist/types/preset/node/node/utils/http-client/index.d.ts.map +1 -0
- package/dist/types/preset/node/node/utils/http-server/index.d.ts +8 -0
- package/dist/types/preset/node/node/utils/http-server/index.d.ts.map +1 -0
- package/dist/types/preset/node/node/utils/index.d.ts +3 -0
- package/dist/types/preset/node/node/utils/index.d.ts.map +1 -0
- package/dist/types/preset/node/types.d.ts +10 -0
- package/dist/types/preset/node/types.d.ts.map +1 -0
- package/dist/types/preset/web/index.d.ts +9 -0
- package/dist/types/preset/web/index.d.ts.map +1 -0
- package/dist/types/preset/web/providers/index.d.ts +36 -0
- package/dist/types/preset/web/providers/index.d.ts.map +1 -0
- package/dist/types/tokens.d.ts +83 -0
- package/dist/types/tokens.d.ts.map +1 -0
- package/dist/types/utils/axios/index.d.ts +5 -0
- package/dist/types/utils/axios/index.d.ts.map +1 -0
- package/dist/types/utils/axios/middleware/cookie.d.ts +9 -0
- package/dist/types/utils/axios/middleware/cookie.d.ts.map +1 -0
- package/dist/types/utils/axios/middleware/log.d.ts +28 -0
- package/dist/types/utils/axios/middleware/log.d.ts.map +1 -0
- package/dist/types/utils/axios/sauce/index.d.ts +43 -0
- package/dist/types/utils/axios/sauce/index.d.ts.map +1 -0
- package/dist/types/utils/axios/utils/index.d.ts +10 -0
- package/dist/types/utils/axios/utils/index.d.ts.map +1 -0
- package/dist/types/utils/express/handler/health-check.d.ts +7 -0
- package/dist/types/utils/express/handler/health-check.d.ts.map +1 -0
- package/dist/types/utils/express/index.d.ts +3 -0
- package/dist/types/utils/express/index.d.ts.map +1 -0
- package/dist/types/utils/express/utils/index.d.ts +8 -0
- package/dist/types/utils/express/utils/index.d.ts.map +1 -0
- package/dist/types/utils/function.d.ts +29 -0
- package/dist/types/utils/function.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +3 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/{utils/number.d.ts → dist/types/utils/math.d.ts} +1 -0
- package/dist/types/utils/math.d.ts.map +1 -0
- package/dist/types/utils/react/error-handlers/index.d.ts +42 -0
- package/dist/types/utils/react/error-handlers/index.d.ts.map +1 -0
- package/dist/types/utils/react/index.d.ts +3 -0
- package/dist/types/utils/react/index.d.ts.map +1 -0
- package/dist/types/utils/redux/index.d.ts +4 -0
- package/dist/types/utils/redux/index.d.ts.map +1 -0
- package/dist/types/utils/redux/remote-data.d.ts +86 -0
- package/dist/types/utils/redux/remote-data.d.ts.map +1 -0
- package/dist/types/utils/redux-saga/index.d.ts +4 -0
- package/dist/types/utils/redux-saga/index.d.ts.map +1 -0
- package/dist/types/utils/redux-saga/middleware.d.ts +9 -0
- package/dist/types/utils/redux-saga/middleware.d.ts.map +1 -0
- package/{utils → dist/types/utils}/redux-saga/take-chain.d.ts +3 -0
- package/dist/types/utils/redux-saga/take-chain.d.ts.map +1 -0
- package/dist/types/utils/redux-saga/types.d.ts +37 -0
- package/dist/types/utils/redux-saga/types.d.ts.map +1 -0
- package/dist/types/utils/ssr/index.d.ts +42 -0
- package/dist/types/utils/ssr/index.d.ts.map +1 -0
- package/dist/types/utils/web/analytics/data-layer.d.ts +6 -0
- package/dist/types/utils/web/analytics/data-layer.d.ts.map +1 -0
- package/dist/types/utils/web/analytics/index.d.ts +3 -0
- package/dist/types/utils/web/analytics/index.d.ts.map +1 -0
- package/dist/types/utils/web/analytics/oko.d.ts +7 -0
- package/dist/types/utils/web/analytics/oko.d.ts.map +1 -0
- package/dist/types/utils/web/storage/index.d.ts +14 -0
- package/dist/types/utils/web/storage/index.d.ts.map +1 -0
- package/dist/types/utils/webpack/env/index.d.ts +19 -0
- package/dist/types/utils/webpack/env/index.d.ts.map +1 -0
- package/dist/types/utils/webpack/env/types.d.ts +12 -0
- package/dist/types/utils/webpack/env/types.d.ts.map +1 -0
- package/dist/types/utils/webpack/env/utils.d.ts +16 -0
- package/dist/types/utils/webpack/env/utils.d.ts.map +1 -0
- package/dist/types/utils/webpack/index.d.ts +7 -0
- package/dist/types/utils/webpack/index.d.ts.map +1 -0
- package/{utils → dist/types/utils}/webpack/module-federation/index.d.ts +10 -3
- package/dist/types/utils/webpack/module-federation/index.d.ts.map +1 -0
- package/{utils → dist/types/utils}/webpack/module-federation/types.d.ts +12 -3
- package/dist/types/utils/webpack/module-federation/types.d.ts.map +1 -0
- package/{utils → dist/types/utils}/webpack/module-federation/utils.d.ts +7 -0
- package/dist/types/utils/webpack/module-federation/utils.d.ts.map +1 -0
- package/package.json +295 -48
- package/src/cache/index.ts +1 -0
- package/src/cache/types.ts +34 -0
- package/src/config/base.ts +18 -0
- package/src/config/index.ts +3 -0
- package/src/config/source.ts +23 -0
- package/src/config/types.ts +25 -0
- package/src/di/__test__/application.test.ts +258 -0
- package/src/di/__test__/container.test.ts +103 -0
- package/src/di/__test__/errors.test.ts +56 -0
- package/src/di/__test__/preset.test.ts +23 -0
- package/src/di/__test__/token.test.ts +25 -0
- package/src/di/application.ts +126 -0
- package/src/di/container.ts +60 -0
- package/src/di/errors.ts +59 -0
- package/{di/index.d.ts → src/di/index.ts} +2 -2
- package/src/di/preset.ts +32 -0
- package/src/di/token.ts +41 -0
- package/src/di/types.ts +105 -0
- package/src/http/__test__/errors.test.ts +35 -0
- package/src/http/errors.ts +42 -0
- package/src/http/index.ts +14 -0
- package/src/http/types.ts +8 -0
- package/src/log/__test__/errors.test.ts +13 -0
- package/src/log/__test__/logger.test.ts +24 -0
- package/src/log/errors.ts +33 -0
- package/src/log/handler/pino.ts +27 -0
- package/src/log/handler/sentry.ts +57 -0
- package/src/log/index.ts +12 -0
- package/src/log/logger.ts +30 -0
- package/src/log/types.ts +76 -0
- package/src/preset/isomorphic/constants.ts +7 -0
- package/src/preset/isomorphic/index.ts +7 -0
- package/src/preset/isomorphic/providers/index.ts +40 -0
- package/src/preset/isomorphic/types.ts +37 -0
- package/src/preset/isomorphic/utils/__test__/index.test.ts +541 -0
- package/src/preset/isomorphic/utils/index.ts +349 -0
- package/src/preset/node/handler/index.ts +46 -0
- package/src/preset/node/handler/providers/index.tsx +214 -0
- package/src/preset/node/handler/utils/index.tsx +110 -0
- package/src/preset/node/index.ts +3 -0
- package/src/preset/node/node/index.ts +73 -0
- package/src/preset/node/node/providers/index.ts +434 -0
- package/src/preset/node/node/utils/http-client/__test__/index.test.ts +232 -0
- package/src/preset/node/node/utils/http-client/index.ts +129 -0
- package/src/preset/node/node/utils/http-server/index.ts +17 -0
- package/src/preset/node/node/utils/index.ts +2 -0
- package/src/preset/node/types.ts +10 -0
- package/src/preset/web/index.ts +40 -0
- package/src/preset/web/providers/index.ts +108 -0
- package/src/tokens.ts +108 -0
- package/src/utils/axios/index.ts +12 -0
- package/src/utils/axios/middleware/__test__/cookie.test.ts +94 -0
- package/src/utils/axios/middleware/__test__/log.test.ts +121 -0
- package/src/utils/axios/middleware/cookie.ts +26 -0
- package/src/utils/axios/middleware/log.ts +52 -0
- package/src/utils/axios/sauce/index.ts +76 -0
- package/src/utils/axios/utils/__test__/index.test.ts +89 -0
- package/src/utils/axios/utils/index.ts +26 -0
- package/src/utils/express/handler/health-check.ts +13 -0
- package/src/utils/express/index.ts +2 -0
- package/src/utils/express/utils/index.ts +18 -0
- package/src/utils/function.ts +57 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/math.ts +8 -0
- package/src/utils/react/error-handlers/__test__/__snapshots__/index.test.tsx.snap +27 -0
- package/src/utils/react/error-handlers/__test__/index.test.tsx +63 -0
- package/src/utils/react/error-handlers/index.tsx +68 -0
- package/src/utils/react/index.ts +3 -0
- package/src/utils/redux/__test__/remote-data.test.ts +172 -0
- package/src/utils/redux/index.ts +4 -0
- package/src/utils/redux/remote-data.ts +138 -0
- package/src/utils/redux-saga/__test__/take-chain.test.ts +141 -0
- package/src/utils/redux-saga/index.ts +3 -0
- package/src/utils/redux-saga/middleware.ts +168 -0
- package/src/utils/redux-saga/take-chain.ts +67 -0
- package/src/utils/redux-saga/types.ts +43 -0
- package/src/utils/ssr/index.tsx +78 -0
- package/src/utils/web/analytics/__test__/data-layer.test.ts +50 -0
- package/src/utils/web/analytics/__test__/oko.test.ts +50 -0
- package/src/utils/web/analytics/data-layer.ts +12 -0
- package/src/utils/web/analytics/index.ts +2 -0
- package/src/utils/web/analytics/oko.ts +14 -0
- package/src/utils/web/storage/index.ts +84 -0
- package/src/utils/webpack/env/index.ts +91 -0
- package/src/utils/webpack/env/types.ts +14 -0
- package/src/utils/webpack/env/utils.ts +53 -0
- package/src/utils/webpack/index.ts +7 -0
- package/src/utils/webpack/module-federation/__test__/__snapshots__/utils.test.ts.snap +124 -0
- package/src/utils/webpack/module-federation/__test__/index.test.ts +311 -0
- package/src/utils/webpack/module-federation/__test__/utils.test.ts +28 -0
- package/src/utils/webpack/module-federation/index.ts +102 -0
- package/src/utils/webpack/module-federation/types.ts +54 -0
- package/src/utils/webpack/module-federation/utils.ts +104 -0
- package/cache/types.d.ts +0 -7
- package/cache/types.js +0 -3
- package/cache/types.js.map +0 -1
- package/config/base.js +0 -20
- package/config/base.js.map +0 -1
- package/config/browser.d.ts +0 -6
- package/config/browser.js +0 -13
- package/config/browser.js.map +0 -1
- package/config/node.d.ts +0 -6
- package/config/node.js +0 -19
- package/config/node.js.map +0 -1
- package/config/types.d.ts +0 -7
- package/config/types.js +0 -3
- package/config/types.js.map +0 -1
- package/config/utils.d.ts +0 -5
- package/config/utils.js +0 -12
- package/config/utils.js.map +0 -1
- package/di/application.js +0 -71
- package/di/application.js.map +0 -1
- package/di/container.js +0 -49
- package/di/container.js.map +0 -1
- package/di/errors.d.ts +0 -21
- package/di/errors.js +0 -33
- package/di/errors.js.map +0 -1
- package/di/index.js +0 -16
- package/di/index.js.map +0 -1
- package/di/preset.d.ts +0 -9
- package/di/preset.js +0 -25
- package/di/preset.js.map +0 -1
- package/di/token.js +0 -17
- package/di/token.js.map +0 -1
- package/di/types.d.ts +0 -32
- package/di/types.js +0 -3
- package/di/types.js.map +0 -1
- package/error-tracker/browser.d.ts +0 -8
- package/error-tracker/browser.js +0 -40
- package/error-tracker/browser.js.map +0 -1
- package/error-tracker/node.d.ts +0 -8
- package/error-tracker/node.js +0 -40
- package/error-tracker/node.js.map +0 -1
- package/error-tracker/types.d.ts +0 -18
- package/error-tracker/types.js +0 -3
- package/error-tracker/types.js.map +0 -1
- package/error-tracker/utils.d.ts +0 -12
- package/error-tracker/utils.js +0 -19
- package/error-tracker/utils.js.map +0 -1
- package/http-client/middleware/cookie.d.ts +0 -19
- package/http-client/middleware/cookie.js +0 -62
- package/http-client/middleware/cookie.js.map +0 -1
- package/http-client/middleware/tracing.js +0 -67
- package/http-client/middleware/tracing.js.map +0 -1
- package/http-client/sauce/index.d.ts +0 -27
- package/http-client/sauce/index.js +0 -33
- package/http-client/sauce/index.js.map +0 -1
- package/http-client/types.d.ts +0 -6
- package/http-client/types.js +0 -3
- package/http-client/types.js.map +0 -1
- package/http-client/utils.d.ts +0 -9
- package/http-client/utils.js +0 -20
- package/http-client/utils.js.map +0 -1
- package/http-server/constants.d.ts +0 -4
- package/http-server/constants.js +0 -8
- package/http-server/constants.js.map +0 -1
- package/http-server/handler/health-check.d.ts +0 -6
- package/http-server/handler/health-check.js +0 -15
- package/http-server/handler/health-check.js.map +0 -1
- package/http-server/middleware/logging.d.ts +0 -10
- package/http-server/middleware/logging.js +0 -31
- package/http-server/middleware/logging.js.map +0 -1
- package/http-server/middleware/metrics.d.ts +0 -23
- package/http-server/middleware/metrics.js +0 -60
- package/http-server/middleware/metrics.js.map +0 -1
- package/http-server/middleware/tracing.d.ts +0 -14
- package/http-server/middleware/tracing.js +0 -51
- package/http-server/middleware/tracing.js.map +0 -1
- package/http-server/template/index.d.ts +0 -1
- package/http-server/template/index.js +0 -36
- package/http-server/template/index.js.map +0 -1
- package/http-server/types.d.ts +0 -33
- package/http-server/types.js +0 -3
- package/http-server/types.js.map +0 -1
- package/http-server/utils.d.ts +0 -30
- package/http-server/utils.js +0 -100
- package/http-server/utils.js.map +0 -1
- package/logger/handler/console.d.ts +0 -8
- package/logger/handler/console.js +0 -36
- package/logger/handler/console.js.map +0 -1
- package/logger/handler/sentry.d.ts +0 -8
- package/logger/handler/sentry.js +0 -36
- package/logger/handler/sentry.js.map +0 -1
- package/logger/index.js +0 -31
- package/logger/index.js.map +0 -1
- package/logger/types.d.ts +0 -24
- package/logger/types.js +0 -3
- package/logger/types.js.map +0 -1
- package/metrics/constants.d.ts +0 -4
- package/metrics/constants.js +0 -8
- package/metrics/constants.js.map +0 -1
- package/metrics/node.d.ts +0 -18
- package/metrics/node.js +0 -74
- package/metrics/node.js.map +0 -1
- package/preset/node/index.d.ts +0 -19
- package/preset/node/index.js +0 -121
- package/preset/node/index.js.map +0 -1
- package/preset/node/response.d.ts +0 -15
- package/preset/node/response.js +0 -77
- package/preset/node/response.js.map +0 -1
- package/saga-runner/index.d.ts +0 -8
- package/saga-runner/index.js +0 -79
- package/saga-runner/index.js.map +0 -1
- package/saga-runner/types.d.ts +0 -10
- package/saga-runner/types.js +0 -3
- package/saga-runner/types.js.map +0 -1
- package/tokens.d.ts +0 -48
- package/tokens.js +0 -49
- package/tokens.js.map +0 -1
- package/tracing/utils.d.ts +0 -9
- package/tracing/utils.js +0 -22
- package/tracing/utils.js.map +0 -1
- package/utils/browser/analytics/data-layer.d.ts +0 -5
- package/utils/browser/analytics/data-layer.js +0 -15
- package/utils/browser/analytics/data-layer.js.map +0 -1
- package/utils/browser/analytics/oko.d.ts +0 -12
- package/utils/browser/analytics/oko.js +0 -39
- package/utils/browser/analytics/oko.js.map +0 -1
- package/utils/browser/storage/index.d.ts +0 -4
- package/utils/browser/storage/index.js +0 -63
- package/utils/browser/storage/index.js.map +0 -1
- package/utils/number.js.map +0 -1
- package/utils/react/error-handlers/index.d.ts +0 -38
- package/utils/react/error-handlers/index.js +0 -47
- package/utils/react/error-handlers/index.js.map +0 -1
- package/utils/redux/remote-data.d.ts +0 -23
- package/utils/redux/remote-data.js +0 -28
- package/utils/redux/remote-data.js.map +0 -1
- package/utils/redux-saga/take-chain.js +0 -56
- package/utils/redux-saga/take-chain.js.map +0 -1
- package/utils/webpack/module-federation/index.js +0 -74
- package/utils/webpack/module-federation/index.js.map +0 -1
- package/utils/webpack/module-federation/types.js +0 -3
- package/utils/webpack/module-federation/types.js.map +0 -1
- package/utils/webpack/module-federation/utils.js +0 -36
- package/utils/webpack/module-federation/utils.js.map +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/* eslint-disable require-jsdoc */
|
|
2
|
+
|
|
3
|
+
// @todo "* as" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется
|
|
4
|
+
import * as redux from '@reduxjs/toolkit';
|
|
5
|
+
const {
|
|
6
|
+
createAction,
|
|
7
|
+
createSelector
|
|
8
|
+
} = redux;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Статус загрузки данных.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Базовая структура хранилища удаленных данных.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Возможные статусы загрузки данных.
|
|
20
|
+
*/
|
|
21
|
+
export const STATUS = {
|
|
22
|
+
initial: 'initial',
|
|
23
|
+
fetching: 'fetching',
|
|
24
|
+
success: 'success',
|
|
25
|
+
failure: 'failure'
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/** Работа с удаленными данными. */
|
|
29
|
+
export class RemoteData {
|
|
30
|
+
static get STATUS() {
|
|
31
|
+
return STATUS;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Возвращает action'ы для работы с удаленными данными.
|
|
36
|
+
* @param name Префикс имён.
|
|
37
|
+
* @return Набор.
|
|
38
|
+
*/
|
|
39
|
+
static createActions(name) {
|
|
40
|
+
return {
|
|
41
|
+
request: createAction(`${name}/request`),
|
|
42
|
+
success: createAction(`${name}/success`),
|
|
43
|
+
failure: createAction(`${name}/failure`)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Возвращает набор обработчиков для работы с удаленными данными.
|
|
49
|
+
* @return Набор.
|
|
50
|
+
*/
|
|
51
|
+
static createHandlers() {
|
|
52
|
+
// ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.
|
|
53
|
+
return {
|
|
54
|
+
request(state) {
|
|
55
|
+
return {
|
|
56
|
+
...state,
|
|
57
|
+
status: STATUS.fetching
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
success(state, action) {
|
|
61
|
+
return {
|
|
62
|
+
...state,
|
|
63
|
+
data: action.payload,
|
|
64
|
+
status: STATUS.success,
|
|
65
|
+
fetchCount: (state.fetchCount ?? 0) + 1
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
failure(state, action) {
|
|
69
|
+
return {
|
|
70
|
+
...state,
|
|
71
|
+
error: action.payload,
|
|
72
|
+
status: STATUS.failure,
|
|
73
|
+
fetchCount: (state.fetchCount ?? 0) + 1
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Применяет обработчики для работы с удаленными данными.
|
|
81
|
+
* @param actions Набор action'ов.
|
|
82
|
+
* @param builder Builder.
|
|
83
|
+
*/
|
|
84
|
+
static applyHandlers(actions, builder) {
|
|
85
|
+
const handlers = RemoteData.createHandlers();
|
|
86
|
+
|
|
87
|
+
// @todo разобраться с проблемой когда убираешь ".type"
|
|
88
|
+
builder.addCase(actions.request.type, handlers.request);
|
|
89
|
+
builder.addCase(actions.success.type, handlers.success);
|
|
90
|
+
builder.addCase(actions.failure.type, handlers.failure);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Возвращает новый набор селекторов данных.
|
|
95
|
+
* @param selectRoot Функция получения состояния.
|
|
96
|
+
* @return Набор селекторов.
|
|
97
|
+
*/
|
|
98
|
+
static createSelectors(selectRoot) {
|
|
99
|
+
return {
|
|
100
|
+
isInitial: createSelector(selectRoot, state => state.status === 'initial'),
|
|
101
|
+
isFetching: createSelector(selectRoot, state => state.status === 'fetching'),
|
|
102
|
+
isSuccess: createSelector(selectRoot, state => state.status === 'success'),
|
|
103
|
+
isFailed: createSelector(selectRoot, state => state.status === 'failure'),
|
|
104
|
+
wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=remote-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-data.js","names":["redux","createAction","createSelector","STATUS","initial","fetching","success","failure","RemoteData","createActions","name","request","createHandlers","state","status","action","data","payload","fetchCount","error","applyHandlers","actions","builder","handlers","addCase","type","createSelectors","selectRoot","isInitial","isFetching","isSuccess","isFailed","wasFetched"],"sources":["../../../../src/utils/redux/remote-data.ts"],"sourcesContent":["/* eslint-disable require-jsdoc */\n\n// @todo \"* as\" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется\nimport * as redux from '@reduxjs/toolkit';\n\nconst { createAction, createSelector } = redux;\n\ninterface RemoteDataActions<TData, TError = unknown, TPayload = void> {\n request: redux.PayloadActionCreator<TPayload, string>;\n success: redux.PayloadActionCreator<TData, string>;\n failure: redux.PayloadActionCreator<TError, string>;\n}\n\n/**\n * Статус загрузки данных.\n */\nexport type Status = 'initial' | 'fetching' | 'success' | 'failure';\n\n/**\n * Базовая структура хранилища удаленных данных.\n */\nexport interface RemoteDataState<TData, TError> {\n /** Загружаемые данные. */\n readonly data: TData;\n\n /** Данные ошибки запроса. */\n readonly error: TError;\n\n /** Статус загрузки данных. */\n readonly status: Status;\n\n /** Количество запросов. */\n readonly fetchCount?: number;\n}\n\n/**\n * Возможные статусы загрузки данных.\n */\nexport const STATUS: Record<Status, Status> = {\n initial: 'initial',\n fetching: 'fetching',\n success: 'success',\n failure: 'failure',\n} as const;\n\n/** Работа с удаленными данными. */\nexport abstract class RemoteData {\n static get STATUS() {\n return STATUS;\n }\n\n /**\n * Возвращает action'ы для работы с удаленными данными.\n * @param name Префикс имён.\n * @return Набор.\n */\n static createActions<TData = never, TError = never, TPayload = void>(\n name: string,\n ): RemoteDataActions<TData, TError, TPayload> {\n return {\n request: createAction<TPayload>(`${name}/request`),\n success: createAction<TData>(`${name}/success`),\n failure: createAction<TError>(`${name}/failure`),\n } as const;\n }\n\n /**\n * Возвращает набор обработчиков для работы с удаленными данными.\n * @return Набор.\n */\n static createHandlers<\n TData,\n TError,\n S extends RemoteDataState<TData, TError> = RemoteDataState<TData, TError>,\n >() {\n // ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.\n return {\n request(state: S | redux.Draft<S>): S | redux.Draft<S> {\n return {\n ...state,\n status: STATUS.fetching,\n };\n },\n\n success(state: S | redux.Draft<S>, action: redux.PayloadAction<TData>): S | redux.Draft<S> {\n return {\n ...state,\n data: action.payload,\n status: STATUS.success,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n\n failure(state: S | redux.Draft<S>, action: redux.PayloadAction<TError>): S | redux.Draft<S> {\n return {\n ...state,\n error: action.payload,\n status: STATUS.failure,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n } as const;\n }\n\n /**\n * Применяет обработчики для работы с удаленными данными.\n * @param actions Набор action'ов.\n * @param builder Builder.\n */\n static applyHandlers<TData, TError>(\n actions: RemoteDataActions<TData, TError, any | never>,\n builder: Pick<redux.ActionReducerMapBuilder<RemoteDataState<TData, TError>>, 'addCase'>,\n ): void {\n const handlers = RemoteData.createHandlers<TData, TError>();\n\n // @todo разобраться с проблемой когда убираешь \".type\"\n builder.addCase(actions.request.type, handlers.request);\n builder.addCase(actions.success.type, handlers.success);\n builder.addCase(actions.failure.type, handlers.failure);\n }\n\n /**\n * Возвращает новый набор селекторов данных.\n * @param selectRoot Функция получения состояния.\n * @return Набор селекторов.\n */\n static createSelectors<S extends RemoteDataState<unknown, unknown>, R = unknown>(\n selectRoot: (root: R) => S,\n ) {\n return {\n isInitial: createSelector(selectRoot, state => state.status === 'initial'),\n isFetching: createSelector(selectRoot, state => state.status === 'fetching'),\n isSuccess: createSelector(selectRoot, state => state.status === 'success'),\n isFailed: createSelector(selectRoot, state => state.status === 'failure'),\n wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0),\n } as const;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["takeChain","createSagaMiddleware"],"sources":["../../../../src/utils/redux-saga/index.ts"],"sourcesContent":["export type { SagaExtendedMiddleware, SagaMiddlewareHandler } from './types';\nexport { takeChain } from './take-chain';\nexport { createSagaMiddleware } from './middleware';\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,iBAAc;AACxC,SAASC,oBAAoB,QAAQ,iBAAc"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
|
|
2
|
+
|
|
3
|
+
import createSagaMiddleware, { END } from 'redux-saga';
|
|
4
|
+
import { call, cancel, delay, fork, race } from 'redux-saga/effects';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Возвращает расширенную версию SagaMiddleware.
|
|
8
|
+
* @param handler Обработчик событий.
|
|
9
|
+
* @return Middleware.
|
|
10
|
+
*/
|
|
11
|
+
function createSagaExtendedMiddleware(handler) {
|
|
12
|
+
return new MiddlewareControl(handler).toMiddleware();
|
|
13
|
+
}
|
|
14
|
+
class MiddlewareControl {
|
|
15
|
+
constructor(handler) {
|
|
16
|
+
this.handler = handler;
|
|
17
|
+
this.sagaMiddleware = createSagaMiddleware({
|
|
18
|
+
onError: (error, info) => {
|
|
19
|
+
handler.onSagaError(error, info);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
toMiddleware() {
|
|
24
|
+
const middleware = api => {
|
|
25
|
+
this.api = api;
|
|
26
|
+
return this.sagaMiddleware(api);
|
|
27
|
+
};
|
|
28
|
+
middleware.timeout = (milliseconds, config) => {
|
|
29
|
+
this.configInterrupt(milliseconds, config);
|
|
30
|
+
return middleware;
|
|
31
|
+
};
|
|
32
|
+
middleware.run = async (saga, ...args) => {
|
|
33
|
+
await this.run(saga, ...args);
|
|
34
|
+
};
|
|
35
|
+
return middleware;
|
|
36
|
+
}
|
|
37
|
+
configInterrupt(milliseconds, config) {
|
|
38
|
+
this.interruptTimeout = milliseconds;
|
|
39
|
+
this.interruptStrategy = config?.strategy ?? 'cancel-task';
|
|
40
|
+
}
|
|
41
|
+
async run(saga, ...args) {
|
|
42
|
+
const {
|
|
43
|
+
interruptTimeout
|
|
44
|
+
} = this;
|
|
45
|
+
if (typeof interruptTimeout === 'number' && Number.isFinite(interruptTimeout)) {
|
|
46
|
+
switch (this.interruptStrategy) {
|
|
47
|
+
case 'cancel-task':
|
|
48
|
+
await this.runWithBreakTask({
|
|
49
|
+
saga,
|
|
50
|
+
args,
|
|
51
|
+
timeout: interruptTimeout
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
case 'dispatch-end':
|
|
55
|
+
await this.runWithBreakMiddleware({
|
|
56
|
+
saga,
|
|
57
|
+
args,
|
|
58
|
+
timeout: interruptTimeout
|
|
59
|
+
});
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await this.sagaMiddleware.run(saga, ...args).toPromise();
|
|
64
|
+
}
|
|
65
|
+
async runWithBreakTask(data) {
|
|
66
|
+
const result = await this.sagaMiddleware.run(runWithTimeLimit, data).toPromise();
|
|
67
|
+
if (!result.done) {
|
|
68
|
+
this.handler.onTimeoutInterrupt({
|
|
69
|
+
timeout: data.timeout
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async runWithBreakMiddleware(data) {
|
|
74
|
+
const {
|
|
75
|
+
saga,
|
|
76
|
+
args,
|
|
77
|
+
timeout
|
|
78
|
+
} = data;
|
|
79
|
+
const {
|
|
80
|
+
api
|
|
81
|
+
} = this;
|
|
82
|
+
if (!api) {
|
|
83
|
+
const error = new Error('Middleware is not applied to the store');
|
|
84
|
+
this.handler.onConfigError(error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
const promises = [];
|
|
88
|
+
let ready = false;
|
|
89
|
+
let timerId;
|
|
90
|
+
promises.push(this.sagaMiddleware.run(saga, ...args).toPromise().then(() => {
|
|
91
|
+
ready = true;
|
|
92
|
+
}).finally(() => {
|
|
93
|
+
// вне зависимости от результата отключаем таймер если он есть
|
|
94
|
+
timerId !== undefined && clearTimeout(timerId);
|
|
95
|
+
}));
|
|
96
|
+
promises.push(new Promise(resolve => {
|
|
97
|
+
timerId = setTimeout(() => {
|
|
98
|
+
if (!ready) {
|
|
99
|
+
this.handler.onTimeoutInterrupt({
|
|
100
|
+
timeout
|
|
101
|
+
});
|
|
102
|
+
api.dispatch(END);
|
|
103
|
+
}
|
|
104
|
+
resolve();
|
|
105
|
+
}, timeout);
|
|
106
|
+
}));
|
|
107
|
+
await Promise.race(promises);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function* runWithTimeLimit(data) {
|
|
111
|
+
const {
|
|
112
|
+
saga,
|
|
113
|
+
args,
|
|
114
|
+
timeout
|
|
115
|
+
} = data;
|
|
116
|
+
const task = yield fork(saga, ...args);
|
|
117
|
+
const [needCancel, taskResult] = yield race([delay(timeout, true), call(() => task.toPromise())]);
|
|
118
|
+
if (needCancel) {
|
|
119
|
+
yield cancel(task);
|
|
120
|
+
|
|
121
|
+
// ВАЖНО: если делать throw ... - ошибка попадет в onError (createSagaMiddleware)
|
|
122
|
+
// чтобы не логировать лишний раз возвращаем значение
|
|
123
|
+
return {
|
|
124
|
+
done: false,
|
|
125
|
+
error: new SagaCancelSignal()
|
|
126
|
+
};
|
|
127
|
+
} else {
|
|
128
|
+
return {
|
|
129
|
+
done: true,
|
|
130
|
+
value: taskResult
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// @todo в будущем можно заменить все ожидаемые исключения (только внутри фреймворка) на этот тип
|
|
136
|
+
|
|
137
|
+
class SagaCancelSignal {
|
|
138
|
+
constructor() {
|
|
139
|
+
this.name = 'SagaCancelSignal';
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export { createSagaExtendedMiddleware as createSagaMiddleware };
|
|
143
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","names":["createSagaMiddleware","END","call","cancel","delay","fork","race","createSagaExtendedMiddleware","handler","MiddlewareControl","toMiddleware","constructor","sagaMiddleware","onError","error","info","onSagaError","middleware","api","timeout","milliseconds","config","configInterrupt","run","saga","args","interruptTimeout","interruptStrategy","strategy","Number","isFinite","runWithBreakTask","runWithBreakMiddleware","toPromise","data","result","runWithTimeLimit","done","onTimeoutInterrupt","Error","onConfigError","promises","ready","timerId","push","then","finally","undefined","clearTimeout","Promise","resolve","setTimeout","dispatch","task","needCancel","taskResult","SagaCancelSignal","value","name"],"sources":["../../../../src/utils/redux-saga/middleware.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\nimport { MiddlewareAPI } from '@reduxjs/toolkit';\nimport {\n SagaExtendedMiddleware,\n SagaInterruptConfig,\n SagaMiddlewareHandler,\n SagaTimeoutRunData,\n} from './types';\nimport createSagaMiddleware, { END, Saga, Task, SagaMiddleware } from 'redux-saga';\nimport { call, cancel, delay, fork, race } from 'redux-saga/effects';\n\n/**\n * Возвращает расширенную версию SagaMiddleware.\n * @param handler Обработчик событий.\n * @return Middleware.\n */\nfunction createSagaExtendedMiddleware(handler: SagaMiddlewareHandler): SagaExtendedMiddleware {\n return new MiddlewareControl(handler).toMiddleware();\n}\n\nclass MiddlewareControl {\n private api?: MiddlewareAPI;\n private interruptTimeout?: number;\n private interruptStrategy?: SagaInterruptConfig['strategy'];\n private handler: SagaMiddlewareHandler;\n private sagaMiddleware: SagaMiddleware;\n\n constructor(handler: SagaMiddlewareHandler) {\n this.handler = handler;\n\n this.sagaMiddleware = createSagaMiddleware({\n onError: (error, info) => {\n handler.onSagaError(error, info);\n },\n });\n }\n\n toMiddleware(): SagaExtendedMiddleware {\n const middleware: SagaExtendedMiddleware = api => {\n this.api = api;\n return this.sagaMiddleware(api);\n };\n\n middleware.timeout = (milliseconds, config) => {\n this.configInterrupt(milliseconds, config);\n return middleware;\n };\n\n middleware.run = async (saga, ...args) => {\n await this.run(saga, ...args);\n };\n\n return middleware;\n }\n\n private configInterrupt(milliseconds: number, config?: SagaInterruptConfig) {\n this.interruptTimeout = milliseconds;\n this.interruptStrategy = config?.strategy ?? 'cancel-task';\n }\n\n private async run<S extends Saga>(saga: S, ...args: Parameters<S>): Promise<void> {\n const { interruptTimeout } = this;\n\n if (typeof interruptTimeout === 'number' && Number.isFinite(interruptTimeout)) {\n switch (this.interruptStrategy) {\n case 'cancel-task':\n await this.runWithBreakTask({ saga, args, timeout: interruptTimeout });\n return;\n case 'dispatch-end':\n await this.runWithBreakMiddleware({ saga, args, timeout: interruptTimeout });\n return;\n }\n }\n\n await this.sagaMiddleware.run(saga, ...args).toPromise();\n }\n\n private async runWithBreakTask<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const result: Either<unknown, unknown> = await this.sagaMiddleware\n .run(runWithTimeLimit, data)\n .toPromise();\n\n if (!result.done) {\n this.handler.onTimeoutInterrupt({ timeout: data.timeout });\n }\n }\n\n private async runWithBreakMiddleware<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const { saga, args, timeout } = data;\n const { api } = this;\n\n if (!api) {\n const error = new Error('Middleware is not applied to the store');\n\n this.handler.onConfigError(error);\n\n throw error;\n }\n\n const promises: Promise<void>[] = [];\n\n let ready = false;\n let timerId: ReturnType<typeof setTimeout>;\n\n promises.push(\n this.sagaMiddleware\n .run(saga, ...args)\n .toPromise()\n .then(() => {\n ready = true;\n })\n .finally(() => {\n // вне зависимости от результата отключаем таймер если он есть\n timerId !== undefined && clearTimeout(timerId);\n }),\n );\n\n promises.push(\n new Promise<void>(resolve => {\n timerId = setTimeout(() => {\n if (!ready) {\n this.handler.onTimeoutInterrupt({ timeout });\n api.dispatch(END);\n }\n\n resolve();\n }, timeout);\n }),\n );\n\n await Promise.race(promises);\n }\n}\n\nfunction* runWithTimeLimit<S extends Saga>(\n data: SagaTimeoutRunData<S>,\n): Generator<any, Either<SagaCancelSignal, ReturnType<S>>, any> {\n const { saga, args, timeout } = data;\n const task: Task = yield fork(saga, ...args);\n\n const [needCancel, taskResult]: [boolean, ReturnType<S>] = yield race([\n delay(timeout, true),\n call(() => task.toPromise()),\n ]);\n\n if (needCancel) {\n yield cancel(task);\n\n // ВАЖНО: если делать throw ... - ошибка попадет в onError (createSagaMiddleware)\n // чтобы не логировать лишний раз возвращаем значение\n return { done: false, error: new SagaCancelSignal() };\n } else {\n return { done: true, value: taskResult };\n }\n}\n\n// @todo в будущем можно заменить все ожидаемые исключения (только внутри фреймворка) на этот тип\ntype Either<E, V> = { done: false; error: E } | { done: true; value: V };\n\nclass SagaCancelSignal {\n name: string;\n\n constructor() {\n this.name = 'SagaCancelSignal';\n }\n}\n\nexport { createSagaExtendedMiddleware as createSagaMiddleware };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { delay, fork, put, race, take } from 'redux-saga/effects';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Накапливает экшены и генерирует эффект по таймауту.
|
|
5
|
+
* @param timeout Время задержки в мс.
|
|
6
|
+
* @param types Массив с типами ожидаемых экшенов.
|
|
7
|
+
* @param task Генератор.
|
|
8
|
+
* @param deps Аргументы для генератора.
|
|
9
|
+
* @return Эффект.
|
|
10
|
+
*/
|
|
11
|
+
export function takeChain(timeout, types, task, ...deps) {
|
|
12
|
+
return fork(generateTakeChain, timeout, types, task, deps);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Генерирует эффект по таймауту.
|
|
17
|
+
* @internal
|
|
18
|
+
* @param timeout Время задержки в мс.
|
|
19
|
+
* @param types Массив с типами ожидаемых экшенов.
|
|
20
|
+
* @param task Генератор.
|
|
21
|
+
* @param deps Аргументы для генератора.
|
|
22
|
+
*/
|
|
23
|
+
export function* generateTakeChain(timeout, types, task, deps) {
|
|
24
|
+
while (true) {
|
|
25
|
+
const breakAction = {
|
|
26
|
+
type: `BREAK_${Date.now()}`
|
|
27
|
+
};
|
|
28
|
+
const firstAction = yield take(types);
|
|
29
|
+
const collectedActions = [firstAction];
|
|
30
|
+
yield fork(putDelayed, timeout, breakAction);
|
|
31
|
+
while (true) {
|
|
32
|
+
const {
|
|
33
|
+
action,
|
|
34
|
+
canceled
|
|
35
|
+
} = yield race({
|
|
36
|
+
action: take(types),
|
|
37
|
+
canceled: take(breakAction.type)
|
|
38
|
+
});
|
|
39
|
+
action && collectedActions.push(action);
|
|
40
|
+
if (canceled || types.every(type => collectedActions.some(someAction => someAction.type === type))) {
|
|
41
|
+
// @todo убрать "as any"
|
|
42
|
+
yield fork(task, ...deps, collectedActions);
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Вызывает экшен с заданной задержкой.
|
|
51
|
+
* @internal
|
|
52
|
+
* @param timeout Время задержки в мс.
|
|
53
|
+
* @param action Тип экшена.
|
|
54
|
+
*/
|
|
55
|
+
export function* putDelayed(timeout, action) {
|
|
56
|
+
yield delay(timeout);
|
|
57
|
+
yield put(action);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=take-chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"take-chain.js","names":["delay","fork","put","race","take","takeChain","timeout","types","task","deps","generateTakeChain","breakAction","type","Date","now","firstAction","collectedActions","putDelayed","action","canceled","push","every","some","someAction"],"sources":["../../../../src/utils/redux-saga/take-chain.ts"],"sourcesContent":["import { Action } from '@reduxjs/toolkit';\nimport { delay, fork, put, race, take } from 'redux-saga/effects';\n\n/**\n * Накапливает экшены и генерирует эффект по таймауту.\n * @param timeout Время задержки в мс.\n * @param types Массив с типами ожидаемых экшенов.\n * @param task Генератор.\n * @param deps Аргументы для генератора.\n * @return Эффект.\n */\nexport function takeChain<\n Deps extends any[],\n Task extends (...someArgs: [...Deps, Action[]]) => any,\n>(timeout: number, types: string[], task: Task, ...deps: Deps) {\n return fork(generateTakeChain as any, timeout, types, task, deps);\n}\n\n/**\n * Генерирует эффект по таймауту.\n * @internal\n * @param timeout Время задержки в мс.\n * @param types Массив с типами ожидаемых экшенов.\n * @param task Генератор.\n * @param deps Аргументы для генератора.\n */\nexport function* generateTakeChain<\n Deps extends any[],\n Task extends (...someArgs: [...Deps, Action[]]) => any,\n>(timeout: number, types: string[], task: Task, deps: Deps): Generator<any, void, any> {\n while (true) {\n const breakAction: Action = { type: `BREAK_${Date.now()}` };\n const firstAction: Action = yield take(types);\n const collectedActions = [firstAction];\n\n yield fork(putDelayed, timeout, breakAction);\n\n while (true) {\n const { action, canceled } = yield race({\n action: take(types),\n canceled: take(breakAction.type),\n });\n\n action && collectedActions.push(action);\n\n if (\n canceled ||\n types.every(type => collectedActions.some(someAction => someAction.type === type))\n ) {\n // @todo убрать \"as any\"\n yield fork(task as any, ...deps, collectedActions);\n break;\n }\n }\n }\n}\n\n/**\n * Вызывает экшен с заданной задержкой.\n * @internal\n * @param timeout Время задержки в мс.\n * @param action Тип экшена.\n */\nexport function* putDelayed(timeout: number, action: Action) {\n yield delay(timeout);\n yield put(action);\n}\n"],"mappings":"AACA,SAASA,KAAK,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAEC,IAAI,QAAQ,oBAAoB;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAGvBC,OAAe,EAAEC,KAAe,EAAEC,IAAU,EAAE,GAAGC,IAAU,EAAE;EAC7D,OAAOR,IAAI,CAACS,iBAAiB,EAASJ,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAEC,IAAI,CAAC;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,iBAAiBA,CAGhCJ,OAAe,EAAEC,KAAe,EAAEC,IAAU,EAAEC,IAAU,EAA6B;EACrF,OAAO,IAAI,EAAE;IACX,MAAME,WAAmB,GAAG;MAAEC,IAAI,EAAG,SAAQC,IAAI,CAACC,GAAG,CAAC,CAAE;IAAE,CAAC;IAC3D,MAAMC,WAAmB,GAAG,MAAMX,IAAI,CAACG,KAAK,CAAC;IAC7C,MAAMS,gBAAgB,GAAG,CAACD,WAAW,CAAC;IAEtC,MAAMd,IAAI,CAACgB,UAAU,EAAEX,OAAO,EAAEK,WAAW,CAAC;IAE5C,OAAO,IAAI,EAAE;MACX,MAAM;QAAEO,MAAM;QAAEC;MAAS,CAAC,GAAG,MAAMhB,IAAI,CAAC;QACtCe,MAAM,EAAEd,IAAI,CAACG,KAAK,CAAC;QACnBY,QAAQ,EAAEf,IAAI,CAACO,WAAW,CAACC,IAAI;MACjC,CAAC,CAAC;MAEFM,MAAM,IAAIF,gBAAgB,CAACI,IAAI,CAACF,MAAM,CAAC;MAEvC,IACEC,QAAQ,IACRZ,KAAK,CAACc,KAAK,CAACT,IAAI,IAAII,gBAAgB,CAACM,IAAI,CAACC,UAAU,IAAIA,UAAU,CAACX,IAAI,KAAKA,IAAI,CAAC,CAAC,EAClF;QACA;QACA,MAAMX,IAAI,CAACO,IAAI,EAAS,GAAGC,IAAI,EAAEO,gBAAgB,CAAC;QAClD;MACF;IACF;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,UAAUA,CAACX,OAAe,EAAEY,MAAc,EAAE;EAC3D,MAAMlB,KAAK,CAACM,OAAO,CAAC;EACpB,MAAMJ,GAAG,CAACgB,MAAM,CAAC;AACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/utils/redux-saga/types.ts"],"sourcesContent":["import type { Middleware } from '@reduxjs/toolkit';\nimport type { Saga, SagaMiddlewareOptions } from 'redux-saga';\n\n/** Опции остановки redux-saga. */\nexport interface SagaInterruptConfig {\n strategy?: 'dispatch-end' | 'cancel-task';\n}\n\n/** Информация, которая приходит вторым аргументом в обработчик ошибки SagaMiddleware. */\nexport type SagaErrorInfo = Parameters<Required<SagaMiddlewareOptions>['onError']>[1];\n\n/** Информация об остановке redux-saga. */\nexport interface SagaInterruptInfo {\n timeout: number;\n}\n\n/** Опции запуска redux-saga с остановкой по таймауту. */\nexport interface SagaTimeoutRunData<S extends Saga> {\n saga: S;\n args: Parameters<S>;\n timeout: number;\n}\n\n/** Кастомная версия SagaMiddleware. */\nexport interface SagaExtendedMiddleware extends Middleware {\n /**\n * Установить временное ограничение работы саги.\n * Если сага не успела выполнится до истечения этого ограничения она будет принудительно завершена.\n */\n timeout(milliseconds: number, config?: SagaInterruptConfig): this;\n\n /**\n * Запускает сагу.\n */\n run: <S extends Saga>(saga: S, ...args: Parameters<S>) => Promise<void>;\n}\n\n/** Обработчик событий SagaExtendedMiddleware. */\nexport interface SagaMiddlewareHandler {\n onSagaError(error: Error, errorInfo: SagaErrorInfo): Promise<void> | void;\n onConfigError(error: Error): Promise<void> | void;\n onTimeoutInterrupt(info: SagaInterruptInfo): Promise<void> | void;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import jsesc from 'jsesc';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Данные для SSR, сформированные на сервере.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Данные для SSR, доступные на стороне клиента (в браузере).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Набор методов для связывания серверного и клиентского приложений.
|
|
14
|
+
*/
|
|
15
|
+
export const SsrBridge = {
|
|
16
|
+
/**
|
|
17
|
+
* Вызывается на сервере.
|
|
18
|
+
* @param serviceKey Идентификатор корневого элемента.
|
|
19
|
+
* @return Идентификатор корневого элемента и ключ для глобальной переменной.
|
|
20
|
+
*/
|
|
21
|
+
prepare(serviceKey) {
|
|
22
|
+
return {
|
|
23
|
+
rootElementId: `${serviceKey}__root`,
|
|
24
|
+
serverDataKey: `${serviceKey}__serverData`
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* Вызывается на клиенте.
|
|
29
|
+
* @param serviceKey Идентификатор корневого элемента.
|
|
30
|
+
* @return Корневой элемент и начальное состояние.
|
|
31
|
+
*/
|
|
32
|
+
resolve(serviceKey) {
|
|
33
|
+
const rootElement = document.getElementById(`${serviceKey}__root`);
|
|
34
|
+
const serverSideData = window[`${serviceKey}__serverData`];
|
|
35
|
+
if (!rootElement) {
|
|
36
|
+
throw Error('SSR: Не был найден корневой элемент');
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
rootElement,
|
|
40
|
+
serverSideData
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Скрипт, формирующий глобально доступные на странице данные.
|
|
47
|
+
* @todo Перенести в utils/react.
|
|
48
|
+
* @param props Свойства.
|
|
49
|
+
* @return Элемент.
|
|
50
|
+
*/
|
|
51
|
+
export function GlobalDataScript({
|
|
52
|
+
property,
|
|
53
|
+
value
|
|
54
|
+
}) {
|
|
55
|
+
const json = jsesc(JSON.stringify(value), {
|
|
56
|
+
json: true,
|
|
57
|
+
isScriptContext: true
|
|
58
|
+
});
|
|
59
|
+
return /*#__PURE__*/React.createElement("script", {
|
|
60
|
+
dangerouslySetInnerHTML: {
|
|
61
|
+
// @todo возможно стоит также экранировать символы в "property"
|
|
62
|
+
__html: `window["${property}"] = JSON.parse(${json});`
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["jsesc","SsrBridge","prepare","serviceKey","rootElementId","serverDataKey","resolve","rootElement","document","getElementById","serverSideData","window","Error","GlobalDataScript","property","value","json","JSON","stringify","isScriptContext","React","createElement","dangerouslySetInnerHTML","__html"],"sources":["../../../../src/utils/ssr/index.tsx"],"sourcesContent":["import jsesc from 'jsesc';\n\n/**\n * Данные для SSR, сформированные на сервере.\n */\nexport interface BridgeServerSide {\n rootElementId: string;\n serverDataKey: string;\n}\n\n/**\n * Данные для SSR, доступные на стороне клиента (в браузере).\n */\nexport interface BridgeClientSide<T> {\n rootElement: HTMLElement;\n serverSideData: T;\n}\n\n/**\n * Набор методов для связывания серверного и клиентского приложений.\n */\nexport const SsrBridge = {\n /**\n * Вызывается на сервере.\n * @param serviceKey Идентификатор корневого элемента.\n * @return Идентификатор корневого элемента и ключ для глобальной переменной.\n */\n prepare(serviceKey: string): BridgeServerSide {\n return {\n rootElementId: `${serviceKey}__root`,\n serverDataKey: `${serviceKey}__serverData`,\n };\n },\n\n /**\n * Вызывается на клиенте.\n * @param serviceKey Идентификатор корневого элемента.\n * @return Корневой элемент и начальное состояние.\n */\n resolve<T = any>(serviceKey: string): BridgeClientSide<T> {\n const rootElement = document.getElementById(`${serviceKey}__root`);\n const serverSideData = (window as any)[`${serviceKey}__serverData`];\n\n if (!rootElement) {\n throw Error('SSR: Не был найден корневой элемент');\n }\n\n return { rootElement, serverSideData };\n },\n} as const;\n\n/**\n * Скрипт, формирующий глобально доступные на странице данные.\n * @todo Перенести в utils/react.\n * @param props Свойства.\n * @return Элемент.\n */\nexport function GlobalDataScript({\n property,\n value,\n}: {\n property: string;\n value: Record<any, any>;\n}) {\n const json = jsesc(JSON.stringify(value), {\n json: true,\n isScriptContext: true,\n });\n\n return (\n <script\n dangerouslySetInnerHTML={{\n // @todo возможно стоит также экранировать символы в \"property\"\n __html: `window[\"${property}\"] = JSON.parse(${json});`,\n }}\n />\n );\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;;AAEzB;AACA;AACA;;AAMA;AACA;AACA;;AAMA;AACA;AACA;AACA,OAAO,MAAMC,SAAS,GAAG;EACvB;AACF;AACA;AACA;AACA;EACEC,OAAOA,CAACC,UAAkB,EAAoB;IAC5C,OAAO;MACLC,aAAa,EAAG,GAAED,UAAW,QAAO;MACpCE,aAAa,EAAG,GAAEF,UAAW;IAC/B,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEG,OAAOA,CAAUH,UAAkB,EAAuB;IACxD,MAAMI,WAAW,GAAGC,QAAQ,CAACC,cAAc,CAAE,GAAEN,UAAW,QAAO,CAAC;IAClE,MAAMO,cAAc,GAAIC,MAAM,CAAU,GAAER,UAAW,cAAa,CAAC;IAEnE,IAAI,CAACI,WAAW,EAAE;MAChB,MAAMK,KAAK,CAAC,qCAAqC,CAAC;IACpD;IAEA,OAAO;MAAEL,WAAW;MAAEG;IAAe,CAAC;EACxC;AACF,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,gBAAgBA,CAAC;EAC/BC,QAAQ;EACRC;AAIF,CAAC,EAAE;EACD,MAAMC,IAAI,GAAGhB,KAAK,CAACiB,IAAI,CAACC,SAAS,CAACH,KAAK,CAAC,EAAE;IACxCC,IAAI,EAAE,IAAI;IACVG,eAAe,EAAE;EACnB,CAAC,CAAC;EAEF,oBACEC,KAAA,CAAAC,aAAA;IACEC,uBAAuB,EAAE;MACvB;MACAC,MAAM,EAAG,WAAUT,QAAS,mBAAkBE,IAAK;IACrD;EAAE,CACH,CAAC;AAEN"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Отправка аналитики в dataLayer.
|
|
3
|
+
* @param eventData Данные события для отправки.
|
|
4
|
+
*/
|
|
5
|
+
export function dataLayerPush(eventData) {
|
|
6
|
+
const target = window;
|
|
7
|
+
if (typeof target.dataLayer?.push === 'function') {
|
|
8
|
+
// копируем объект так как window.dataLayer.push может менять аргумент в процессе работы
|
|
9
|
+
target.dataLayer.push({
|
|
10
|
+
...eventData
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-layer.js","names":["dataLayerPush","eventData","target","window","dataLayer","push"],"sources":["../../../../../src/utils/web/analytics/data-layer.ts"],"sourcesContent":["/**\n * Отправка аналитики в dataLayer.\n * @param eventData Данные события для отправки.\n */\nexport function dataLayerPush(eventData: Record<string, any>): void {\n const target: any = window;\n\n if (typeof target.dataLayer?.push === 'function') {\n // копируем объект так как window.dataLayer.push может менять аргумент в процессе работы\n target.dataLayer.push({ ...eventData });\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,SAASA,aAAaA,CAACC,SAA8B,EAAQ;EAClE,MAAMC,MAAW,GAAGC,MAAM;EAE1B,IAAI,OAAOD,MAAM,CAACE,SAAS,EAAEC,IAAI,KAAK,UAAU,EAAE;IAChD;IACAH,MAAM,CAACE,SAAS,CAACC,IAAI,CAAC;MAAE,GAAGJ;IAAU,CAAC,CAAC;EACzC;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["dataLayerPush","okoPush"],"sources":["../../../../../src/utils/web/analytics/index.ts"],"sourcesContent":["export { dataLayerPush } from './data-layer';\nexport { type OkoEvent, okoPush } from './oko';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,iBAAc;AAC5C,SAAwBC,OAAO,QAAQ,UAAO"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Получив объект события, запустит его отправку в ОКО (если на странице есть ОКО).
|
|
3
|
+
* @param eventData Данные события для отправки.
|
|
4
|
+
*/
|
|
5
|
+
export function okoPush(eventData) {
|
|
6
|
+
const target = window;
|
|
7
|
+
if (typeof target.oko?.push === 'function') {
|
|
8
|
+
// копируем объект так как window.oko.push меняет свой аргумент в процессе выполнения
|
|
9
|
+
target.oko.push({
|
|
10
|
+
...eventData
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=oko.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oko.js","names":["okoPush","eventData","target","window","oko","push"],"sources":["../../../../../src/utils/web/analytics/oko.ts"],"sourcesContent":["export type OkoEvent = Record<string, any>;\n\n/**\n * Получив объект события, запустит его отправку в ОКО (если на странице есть ОКО).\n * @param eventData Данные события для отправки.\n */\nexport function okoPush(eventData: OkoEvent): void {\n const target: any = window;\n\n if (typeof target.oko?.push === 'function') {\n // копируем объект так как window.oko.push меняет свой аргумент в процессе выполнения\n target.oko.push({ ...eventData });\n }\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,OAAO,SAASA,OAAOA,CAACC,SAAmB,EAAQ;EACjD,MAAMC,MAAW,GAAGC,MAAM;EAE1B,IAAI,OAAOD,MAAM,CAACE,GAAG,EAAEC,IAAI,KAAK,UAAU,EAAE;IAC1C;IACAH,MAAM,CAACE,GAAG,CAACC,IAAI,CAAC;MAAE,GAAGJ;IAAU,CAAC,CAAC;EACnC;AACF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Интерфейс объекта-обертки для безопасной работы с WebStorage.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).
|
|
9
|
+
* @param getStorage Функция, которая должна вернуть целевое хранилище.
|
|
10
|
+
* @return Объект-обертка для безопасной работы с браузерным хранилищем.
|
|
11
|
+
* @todo Пересмотреть и перенести из browser?
|
|
12
|
+
*/
|
|
13
|
+
export function createStorageUtils(getStorage) {
|
|
14
|
+
function isAvailable() {
|
|
15
|
+
try {
|
|
16
|
+
const testKey = `storage_test_key::${Date.now()}`;
|
|
17
|
+
getStorage().setItem(testKey, testKey);
|
|
18
|
+
getStorage().removeItem(testKey);
|
|
19
|
+
return true;
|
|
20
|
+
} catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function clear() {
|
|
25
|
+
if (isAvailable()) {
|
|
26
|
+
getStorage().clear();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function getItem(name) {
|
|
30
|
+
if (isAvailable()) {
|
|
31
|
+
return getStorage().getItem(name);
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function key(index) {
|
|
36
|
+
if (isAvailable()) {
|
|
37
|
+
return getStorage().key(index);
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
function removeItem(name) {
|
|
42
|
+
if (isAvailable()) {
|
|
43
|
+
getStorage().removeItem(name);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function setItem(name, value) {
|
|
47
|
+
if (isAvailable()) {
|
|
48
|
+
getStorage().setItem(name, value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function length() {
|
|
52
|
+
if (isAvailable()) {
|
|
53
|
+
return getStorage().length;
|
|
54
|
+
}
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
isAvailable,
|
|
59
|
+
clear,
|
|
60
|
+
getItem,
|
|
61
|
+
key,
|
|
62
|
+
removeItem,
|
|
63
|
+
setItem,
|
|
64
|
+
get length() {
|
|
65
|
+
return length();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["createStorageUtils","getStorage","isAvailable","testKey","Date","now","setItem","removeItem","clear","getItem","name","key","index","value","length"],"sources":["../../../../../src/utils/web/storage/index.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\n\n/**\n * Интерфейс объекта-обертки для безопасной работы с WebStorage.\n */\nexport interface StorageUtils\n extends Pick<Storage, 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem' | 'length'> {\n isAvailable: () => boolean;\n}\n\n/**\n * Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).\n * @param getStorage Функция, которая должна вернуть целевое хранилище.\n * @return Объект-обертка для безопасной работы с браузерным хранилищем.\n * @todo Пересмотреть и перенести из browser?\n */\nexport function createStorageUtils(getStorage: () => Storage): StorageUtils {\n function isAvailable(): boolean {\n try {\n const testKey = `storage_test_key::${Date.now()}`;\n\n getStorage().setItem(testKey, testKey);\n getStorage().removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n }\n\n function clear(): void {\n if (isAvailable()) {\n getStorage().clear();\n }\n }\n\n function getItem(name: string): string | null {\n if (isAvailable()) {\n return getStorage().getItem(name);\n }\n\n return null;\n }\n\n function key(index: number): string | null {\n if (isAvailable()) {\n return getStorage().key(index);\n }\n return null;\n }\n\n function removeItem(name: string): void {\n if (isAvailable()) {\n getStorage().removeItem(name);\n }\n }\n\n function setItem(name: string, value: string): void {\n if (isAvailable()) {\n getStorage().setItem(name, value);\n }\n }\n\n function length(): number {\n if (isAvailable()) {\n return getStorage().length;\n }\n\n return 0;\n }\n\n return {\n isAvailable,\n\n clear,\n getItem,\n key,\n removeItem,\n setItem,\n get length() {\n return length();\n },\n };\n}\n"],"mappings":"AAAA;;AAEA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,kBAAkBA,CAACC,UAAyB,EAAgB;EAC1E,SAASC,WAAWA,CAAA,EAAY;IAC9B,IAAI;MACF,MAAMC,OAAO,GAAI,qBAAoBC,IAAI,CAACC,GAAG,CAAC,CAAE,EAAC;MAEjDJ,UAAU,CAAC,CAAC,CAACK,OAAO,CAACH,OAAO,EAAEA,OAAO,CAAC;MACtCF,UAAU,CAAC,CAAC,CAACM,UAAU,CAACJ,OAAO,CAAC;MAEhC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF;EAEA,SAASK,KAAKA,CAAA,EAAS;IACrB,IAAIN,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC;IACtB;EACF;EAEA,SAASC,OAAOA,CAACC,IAAY,EAAiB;IAC5C,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACQ,OAAO,CAACC,IAAI,CAAC;IACnC;IAEA,OAAO,IAAI;EACb;EAEA,SAASC,GAAGA,CAACC,KAAa,EAAiB;IACzC,IAAIV,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACU,GAAG,CAACC,KAAK,CAAC;IAChC;IACA,OAAO,IAAI;EACb;EAEA,SAASL,UAAUA,CAACG,IAAY,EAAQ;IACtC,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACM,UAAU,CAACG,IAAI,CAAC;IAC/B;EACF;EAEA,SAASJ,OAAOA,CAACI,IAAY,EAAEG,KAAa,EAAQ;IAClD,IAAIX,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACK,OAAO,CAACI,IAAI,EAAEG,KAAK,CAAC;IACnC;EACF;EAEA,SAASC,MAAMA,CAAA,EAAW;IACxB,IAAIZ,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACa,MAAM;IAC5B;IAEA,OAAO,CAAC;EACV;EAEA,OAAO;IACLZ,WAAW;IAEXM,KAAK;IACLC,OAAO;IACPE,GAAG;IACHJ,UAAU;IACVD,OAAO;IACP,IAAIQ,MAAMA,CAAA,EAAG;MACX,OAAOA,MAAM,CAAC,CAAC;IACjB;EACF,CAAC;AACH"}
|