From 1b0133190f0d73eaac8b93ea6a6442cbe409bf46 Mon Sep 17 00:00:00 2001 From: Lukas Siemon Date: Wed, 8 Apr 2020 09:55:15 -0700 Subject: [PATCH] object-scan@13 (improved performance) closes #173 --- lib/find-in-tree.js | 33 ++++++++++++++++++--------------- package.json | 2 +- parse/common.js | 16 +++++++++------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/lib/find-in-tree.js b/lib/find-in-tree.js index 046808b3..aab4d736 100644 --- a/lib/find-in-tree.js +++ b/lib/find-in-tree.js @@ -1,20 +1,23 @@ -'use strict'; +'use strict' -const objectScan = require('object-scan'); +const objectScan = require('object-scan') -const findInTree = (haystack, needles) => { - const result = Object.create(null); - needles.forEach((needle) => { - result[needle] = []; - }); - objectScan(needles, { - filterFn: (key, value, { parents, matchedBy }) => { +const createFindInTree = (needles) => { + const scanner = objectScan(needles, { + filterFn: ({ value, parents, matchedBy, context }) => { matchedBy.forEach((needle) => { - result[needle].push([value, parents]); - }); + context[needle].push([value, parents]) + }) } - })(haystack); - return result; -}; + }) -module.exports = findInTree; + return (haystack) => { + const context = Object.create(null) + needles.forEach((needle) => { + context[needle] = [] + }) + return scanner(haystack, context) + } +} + +module.exports = createFindInTree diff --git a/package.json b/package.json index dbf704c3..e13e9326 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "gps-distance": "0.0.4", "lodash": "^4.17.5", "luxon": "^1.3.0", - "object-scan": "^11.0.1", + "object-scan": "^13.0.0", "p-retry": "^4.1.0", "p-throttle": "^3.1.0", "pinkie-promise": "^2.0.1", diff --git a/parse/common.js b/parse/common.js index 20ea8fee..48adc9fb 100644 --- a/parse/common.js +++ b/parse/common.js @@ -1,17 +1,19 @@ 'use strict' const omit = require('lodash/omit') -const findInTree = require('../lib/find-in-tree') +const createFindInTree = require('../lib/find-in-tree'); + +const findInTree = createFindInTree([ + '**.oprX', '**.icoX', '**.prodX', '**.pRefL', '**.locX', + '**.ani.fLocX', '**.ani.tLocX', '**.fLocX', '**.tLocX', + '**.remX', '**.himX', '**.polyG.polyXL', '**.rRefL', + '**.msgL', +]) const parseCommonData = (_ctx) => { const {profile, opt, res} = _ctx const c = res.common || {} - const matches = findInTree(res, [ - '**.oprX', '**.icoX', '**.prodX', '**.pRefL', '**.locX', - '**.ani.fLocX', '**.ani.tLocX', '**.fLocX', '**.tLocX', - '**.remX', '**.himX', '**.polyG.polyXL', '**.rRefL', - '**.msgL', - ]); + const matches = findInTree(res) const common = {} const ctx = {..._ctx, common}