Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 39x 39x 39x 39x 39x 39x 39x 39x 39x 4x 4x 1x 39x 4x 3x 1x 39x 39x 39x | import { BuildInfo } from '../Http'; import { CACHE_TTL_LOWER_LIMIT, CACHE_TTL_UPPER_LIMIT } from '../InMemoryCache'; import { Range, throwIfOutsideRange } from '@cardano-sdk/util'; import { validate } from 'jsonschema'; import fs from 'fs'; const buildInfoSchema = { additionalProperties: false, properties: { extra: { type: 'object' }, lastModified: { type: 'number' }, lastModifiedDate: { type: 'string' }, rev: { type: 'string' }, shortRev: { type: 'string' } }, type: 'object' }; export const buildInfoValidator = (buildInfo: string): BuildInfo => { let result: BuildInfo; try { result = JSON.parse(buildInfo || '{}'); } catch (error) { throw new Error(`Invalid JSON format of build-info: ${error}`); } validate(result, buildInfoSchema, { throwError: true }); return result; }; export const existingFileValidator = (filePath: string) => { Iif (fs.existsSync(filePath)) { return filePath; } throw new Error(`No file exists at ${filePath}`); }; export const floatValidator = (description: string) => (float: string) => { const parsed = Number.parseFloat(float); Iif (parsed.toString() === float || (float.startsWith('.') && parsed.toString() === `0${float}`)) return parsed; throw new TypeError(`${description} - "${float}" is not a number`); }; export const integerValidator = (description: string) => (integer: string) => { const parsed = Number.parseInt(integer, 10); if (parsed.toString() === integer) return parsed; throw new TypeError(`${description} - "${integer}" is not an integer`); }; export const cacheTtlValidator = (ttlInSecs: string, range: Required<Range<number>>, description: string) => { const cacheTtlInSecs = integerValidator(description)(ttlInSecs); throwIfOutsideRange(cacheTtlInSecs, range, description); return cacheTtlInSecs; }; export const dbCacheValidator = (description: string) => (ttl: string) => cacheTtlValidator(ttl, { lowerBound: CACHE_TTL_LOWER_LIMIT, upperBound: CACHE_TTL_UPPER_LIMIT }, description); export const urlValidator = (description: string, toString = false) => (url: string) => { try { const parsed = new URL(url); return toString ? parsed.toString() : parsed; } catch { throw new Error(`${description} - "${url}" is not an URL`); } }; |