diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 29973d8e88594..87e44ea670226 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -249,16 +249,35 @@ /// json-prune.js +// +// When no "prune paths" argument is provided, the scriptlet is +// used for logging purpose and the "needle paths" argument is +// used to filter logging output. (function() { - const log = console.log.bind(console); const rawPrunePaths = '{{1}}'; const rawNeedlePaths = '{{2}}'; const prunePaths = rawPrunePaths !== '{{1}}' && rawPrunePaths !== '' ? rawPrunePaths.split(/ +/) : []; - const needlePaths = rawNeedlePaths !== '{{2}}' && rawNeedlePaths !== '' - ? rawNeedlePaths.split(/ +/) - : []; + let needlePaths; + let log, reLogNeedle; + if ( prunePaths.length !== 0 ) { + needlePaths = prunePaths.length !== 0 && + rawNeedlePaths !== '{{2}}' && rawNeedlePaths !== '' + ? rawNeedlePaths.split(/ +/) + : []; + } else { + log = console.log.bind(console); + let needle; + if ( rawNeedlePaths === '' || rawNeedlePaths === '{{2}}' ) { + needle = '.?'; + } else if ( rawNeedlePaths.charAt(0) === '/' && rawNeedlePaths.slice(-1) === '/' ) { + needle = rawNeedlePaths.slice(1, -1); + } else { + needle = rawNeedlePaths.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + } + reLogNeedle = new RegExp(needle); + } const findOwner = function(root, path) { let owner = root; let chain = path; @@ -286,8 +305,11 @@ JSON.parse = new Proxy(JSON.parse, { apply: function() { const r = Reflect.apply(...arguments); - if ( prunePaths.length === 0 ) { - log(location.hostname, r); + if ( log !== undefined ) { + const json = JSON.stringify(r, null, 2); + if ( reLogNeedle.test(json) ) { + log(location.hostname, json); + } return r; } if ( mustProcess(r) === false ) { return r; }