UNPKG

react-use-api

Version:

<div align="center"> <h1> <img width="120" src="./icon.svg"> <br/> React useApi() <br /> <br /> </h1> </div>

150 lines 8.31 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadApiCache = exports.injectSSRHtml = exports.feedRequests = void 0; var common_1 = require("./common"); exports.feedRequests = function (context, ssrHtml, maxRequests) { if (maxRequests === void 0) { maxRequests = context.settings.maxRequests; } return __awaiter(void 0, void 0, void 0, function () { var settings, _a, ssrConfigs, cacheKeys, cache, renderSSR, debug, _b, config, cacheKey, cacheData, response, error_1; var _c; return __generator(this, function (_d) { switch (_d.label) { case 0: settings = context.settings, _a = context.collection, ssrConfigs = _a.ssrConfigs, cacheKeys = _a.cacheKeys; cache = settings.cache, renderSSR = settings.renderSSR, debug = settings.debug; if (!ssrConfigs.length) { if (debug) { console.log('[ReactUseApi][Requests Count] =', cacheKeys.size); console.log('[ReactUseApi][Executed Times] =', settings.maxRequests - maxRequests); } cacheKeys.clear(); return [2 /*return*/, ssrHtml]; // done } debug && console.log('[ReactUseApi][Collecting Requests]'); if (maxRequests === 0) { console.error('[ReactUseApi][ERROR] - Maximum executing times while fetching axios requests', '[congis]:', ssrConfigs, '[Executed Times]:', settings.maxRequests - maxRequests); cacheKeys.clear(); return [2 /*return*/, ssrHtml]; // done } _b = ssrConfigs[0] // fetch the first , config = _b.config, cacheKey = _b.cacheKey; cacheData = cache.get(cacheKey); if (!!cacheData) return [3 /*break*/, 4]; _d.label = 1; case 1: _d.trys.push([1, 3, , 4]); debug && console.log('[ReactUseApi][Fetch]', cacheKey); return [4 /*yield*/, common_1.axiosAll(context, config)]; case 2: response = _d.sent(); cache.set(cacheKey, { response: response, }); return [3 /*break*/, 4]; case 3: error_1 = _d.sent(); // is an axios error if ((_c = error_1 === null || error_1 === void 0 ? void 0 : error_1.response) === null || _c === void 0 ? void 0 : _c.data) { cache.set(cacheKey, { // should not be error (Error) object in SSR, it will lead an error: Converting circular structure to JSON error: error_1.response, }); } else { throw error_1; } return [3 /*break*/, 4]; case 4: // execute renderSSR one after another to get more ssrConfigs ssrConfigs.length = 0; ssrHtml = renderSSR(); return [4 /*yield*/, exports.feedRequests(context, ssrHtml, --maxRequests)]; case 5: return [2 /*return*/, _d.sent()]; } }); }); }; exports.injectSSRHtml = function (context, renderSSR, postProcess) { return __awaiter(void 0, void 0, void 0, function () { var settings, cache, useCacheData, clientCacheVar, shouldUseApiCache, ssrHtml, cacheJson, apiCacheScript; return __generator(this, function (_a) { switch (_a.label) { case 0: context = common_1.configure(context, true); settings = context.settings; settings.renderSSR = renderSSR || settings.renderSSR; cache = settings.cache, useCacheData = settings.useCacheData, clientCacheVar = settings.clientCacheVar, shouldUseApiCache = settings.shouldUseApiCache; cache.reset(); ssrHtml = settings.renderSSR(); return [4 /*yield*/, exports.feedRequests(context, ssrHtml)]; case 1: ssrHtml = _a.sent(); if (useCacheData) { cacheJson = cache.dump().filter(function (_a) { var cacheKey = _a.k; var config; try { config = JSON.parse(cacheKey); } catch (e) { config = {}; } return shouldUseApiCache(config, cacheKey) !== false; }); apiCacheScript = Object.keys(cacheJson) ? "<script>window." + clientCacheVar + " = " + JSON.stringify(cacheJson).replace(/</g, '\\u003c') + "</script>" : ''; return [2 /*return*/, common_1.isFunction(postProcess) ? postProcess(ssrHtml, apiCacheScript) : ssrHtml + apiCacheScript]; } return [2 /*return*/, ssrHtml]; } }); }); }; exports.loadApiCache = function (context) { if (context === void 0) { context = { settings: common_1.defaultSettings }; } var settings = context.settings; var clientCacheVar = settings.clientCacheVar; var data = window[clientCacheVar]; if (Array.isArray(data)) { settings.cache.load(data); delete window[clientCacheVar]; } }; //# sourceMappingURL=ssr.js.map