@graphql-hive/core
Version:
224 lines (223 loc) • 7.16 kB
JavaScript
;
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();
}
}