UNPKG

@wener/console

Version:
161 lines (160 loc) 6.7 kB
function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _object_spread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _define_property(target, key, source[key]); }); } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _object_spread_props(target, source) { source = source != null ? source : {}; if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } import { Client, fetchExchange } from "@urql/core"; import { devtoolsExchange } from "@urql/devtools"; import { cacheExchange } from "@urql/exchange-graphcache"; import { persistedExchange } from "@urql/exchange-persisted"; import { retryExchange } from "@urql/exchange-retry"; import { ms } from "@wener/utils"; import { batchFetchExchange } from "./batchFetchExchange.js"; export function createUrqlClient(param) { var getToken = param.getToken, url = param.url, _param_persisted = param.persisted, persisted = _param_persisted === void 0 ? false : _param_persisted, _param_batch = param.batch, batch = _param_batch === void 0 ? true : _param_batch, schema = param.schema, cache = param.cache, resolveTypeNameFromKey = param.resolveTypeNameFromKey; var client = new Client({ url: url, fetchSubscriptions: true, // requestPolicy: 'cache-and-network', exchanges: [ process.env.NODE_ENV === "development" && devtoolsExchange, cacheExchange(_object_spread_props(_object_spread({}, cache), { schema: schema, keys: new Proxy({}, { get: function get(target, prop, receiver) { if (typeof prop !== "string") { return null; } var preset = target[prop]; if (preset) { return preset; } // console.log(`cacheExchange key: ${prop}`); var getKey = function (data) { return data === null || data === void 0 ? void 0 : data.id; }; if (prop.endsWith("Payload")) { getKey = function () { return null; }; } return target[prop] = getKey; } }), resolvers: _object_spread({ Query: { node: function (parent, args, cache, info) { var __typename; var id = args.id; if (typeof id === "string" && resolveTypeNameFromKey) { // const idType = id.split('_')[0]; // __typename = ( // { // usr: 'User', // } as Record<string, string> // )[idType]; __typename = resolveTypeNameFromKey(id); } return __typename ? { __typename: __typename, id: id } : cache.resolve(parent, info.parentFieldKey); } } }, cache === null || cache === void 0 ? void 0 : cache.resolvers) })), // scalarExchange({ // schema: schema as any, // scalars: { // JSON(value) { // if (value && typeof value === 'string') return JSON.parse(value); // return value; // }, // }, // }), batch ? batchFetchExchange({ maxBatchSize: 1000 }) : undefined, persisted ? persistedExchange({ preferGetForPersistedQueries: true, // enforcePersistedQueries: true, enableForMutation: true, // https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#normalized-caches-urql-and-apollo-client generateHash: function (_, document) { var _document___meta__; return Promise.resolve((_document___meta__ = document["__meta__"]) === null || _document___meta__ === void 0 ? void 0 : _document___meta__["hash"]); } }) : undefined, retryExchange({ initialDelayMs: 1000, maxDelayMs: ms("5m"), maxNumberAttempts: Number.POSITIVE_INFINITY, // 默认只重试网络错误 retryIf: function (err) { return Boolean(err && err.networkError); } }), fetchExchange ].filter(Boolean), fetchOptions: function () { var headers = {}; var token = getToken === null || getToken === void 0 ? void 0 : getToken(); if (token) { headers["Authorization"] = "Bearer ".concat(token); } return { headers: headers }; } }); return client; }