UNPKG

@graphql-hive/core

Version:
224 lines (223 loc) • 7.16 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.createHash = createHash; exports.memo = memo; exports.isAsyncIterable = isAsyncIterable; exports.cache = cache; exports.cacheDocumentKey = cacheDocumentKey; exports.measureDuration = measureDuration; exports.addProperty = addProperty; exports.isHiveClient = isHiveClient; exports.logIf = logIf; exports.joinUrl = joinUrl; exports.createHiveLogger = createHiveLogger; exports.isLegacyAccessToken = isLegacyAccessToken; exports.loadCircuitBreaker = loadCircuitBreaker; const fetch_1 = require("@whatwg-node/fetch"); const client_js_1 = require("./client.js"); async function digest(algo, output, data) { const buffer = await fetch_1.crypto.subtle.digest(algo, new fetch_1.TextEncoder().encode(data)); if (output === 'hex') { return arrayBufferToHEX(buffer); } return arrayBufferToBase64(buffer); } function arrayBufferToHEX(buffer) { return Array.prototype.map .call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)) .join(''); } function arrayBufferToBase64(buffer) { return btoa(String.fromCharCode.apply(null, new Uint8Array(buffer))); } function createHash(algo) { let str = ''; return { update(data) { str += data; return this; }, async digest(output) { return digest(algo, output, str); }, }; } function memo(fn, cacheKeyFn) { let memoizedResult = null; let memoizedKey = null; return (arg) => { const currentKey = cacheKeyFn(arg); if (memoizedKey === currentKey) { return memoizedResult; } memoizedKey = currentKey; memoizedResult = fn(arg); return memoizedResult; }; } function isAsyncIterable(value) { return (value === null || value === void 0 ? void 0 : value[Symbol.asyncIterator]) != null; } function cache(fn, cacheKeyFn, cacheMap) { return async (arg, arg2) => { const key = await cacheKeyFn(arg, arg2); const cachedValue = await cacheMap.get(key); if (cachedValue !== null && typeof cachedValue !== 'undefined') { return { key, value: cachedValue, cacheHit: true, }; } const value = fn(arg, arg2); cacheMap.set(key, value); return { key, value, cacheHit: false, }; }; } async function cacheDocumentKey(doc, variables) { const hasher = createHash('SHA-1').update(JSON.stringify(doc)); if (variables) { hasher.update(JSON.stringify(variables, (_, value) => { if ((value && typeof value === 'object' && Object.keys(value).length) || (Array.isArray(value) && value.length)) { return value; } return ''; })); } return hasher.digest('hex'); } const HR_TO_NS = 1e9; const NS_TO_MS = 1e6; function deltaFrom(startedAt) { const endedAt = performance.now(); const ns = Math.round(((endedAt - startedAt) * HR_TO_NS) / 1000); return { ns, get ms() { return ns / NS_TO_MS; }, }; } function measureDuration() { const startAt = performance.now(); return function end() { return deltaFrom(startAt).ns; }; } function addProperty(key, value, obj) { if (value === null || typeof value === 'undefined') { return obj; } return Object.assign(Object.assign({}, obj), { [key]: value }); } function isHiveClient(clientOrOptions) { return client_js_1.hiveClientSymbol in clientOrOptions; } function logIf(condition, message, logFn) { if (condition) { logFn(message); } } function joinUrl(url, subdirectory) { const normalizedUrl = url.endsWith('/') ? url.slice(0, -1) : url; const normalizedSubdirectory = subdirectory.startsWith('/') ? subdirectory.slice(1) : subdirectory; return normalizedUrl + '/' + normalizedSubdirectory; } const hiveSymbol = Symbol('hive-logger'); function printPath(path) { if (path.length) { return path + ' '; } return path; } function createHiveLogger(baseLogger, prefix, debug = true) { const context = Object.assign({ path: '', logger: baseLogger, debug }, baseLogger === null || baseLogger === void 0 ? void 0 : baseLogger[hiveSymbol]); context.path = context.path + prefix; const { logger, path } = context; return { [hiveSymbol]: context, info: (message) => { logger.info(printPath(path) + message); }, error: (error, ...data) => { if (error.stack) { const pth = printPath(path); for (const stack of error.stack.split('\n')) { logger.error(pth + stack); } } else { logger.error(printPath(path) + String(error), ...data); } }, debug: (message) => { if (!context.debug) { return; } const msg = printPath(path) + message; if (!logger.debug) { logger.info(msg); return; } logger.debug(msg); }, }; } function isLegacyAccessToken(accessToken) { if (!accessToken.startsWith('hvo1/') && !accessToken.startsWith('hvp1/') && !accessToken.startsWith('hvu1/')) { return true; } return false; } async function loadCircuitBreaker(success, error) { const packageName = 'opossum'; try { const module = await Promise.resolve(`${packageName}`).then(s => __importStar(require(s))); success(module.default); } catch (err) { error(); } }