From 0d091b318f63eb7e5666ccf272105c502e670f6f Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Fri, 10 Jan 2025 12:50:30 +0100 Subject: [PATCH] feat: add profiling support --- packages/metascraper-helpers/index.js | 9 +++++++-- packages/metascraper/src/get-data.js | 12 ++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/metascraper-helpers/index.js b/packages/metascraper-helpers/index.js index 0abd3185c..dc1e8f532 100644 --- a/packages/metascraper-helpers/index.js +++ b/packages/metascraper-helpers/index.js @@ -1,6 +1,7 @@ 'use strict' const memoizeOne = require('memoize-one').default || require('memoize-one') +const debug = require('debug-logfmt')('metascraper:find-rule') const condenseWhitespace = require('condense-whitespace') const { getExtension: mimeExtension } = require('mime') const capitalize = require('microsoft-capitalize') @@ -420,14 +421,18 @@ const validator = { const truthyTest = () => true -const findRule = async (rules, args) => { +const findRule = async (rules, args, propName) => { let index = 0 let value do { const rule = rules[index++] const test = rule.test || truthyTest - if (test(args)) value = await rule(args) + if (test(args)) { + const duration = debug.duration() + value = await rule(args) + duration(`${rule.pkgName}:${propName}:${index - 1}:${has(value)}`) + } } while (!has(value) && index < rules.length) return value diff --git a/packages/metascraper/src/get-data.js b/packages/metascraper/src/get-data.js index 1b6f2407c..bd5a3071d 100644 --- a/packages/metascraper/src/get-data.js +++ b/packages/metascraper/src/get-data.js @@ -1,15 +1,19 @@ 'use strict' -const { map, fromPairs } = require('lodash') +const debug = require('debug-logfmt')('metascraper:get-data') const { findRule, has } = require('@metascraper/helpers') +const { map, fromPairs } = require('lodash') const normalizeValue = value => (has(value) ? value : null) -const getData = async ({ rules, ...props }) => { +const getData = async ({ rules, name, ...props }) => { const data = await Promise.all( map(rules, async ([propName, innerRules]) => { - const value = await findRule(innerRules, props) - return [propName, normalizeValue(value)] + const duration = debug.duration() + const value = await findRule(innerRules, props, propName) + const normalizedValue = normalizeValue(value) + duration(`${propName}=${normalizedValue} rules=${innerRules.length}`) + return [propName, normalizedValue] }) )