From 2d369e711b7c2ca07a4b2a70ccbeadf83059d89b Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Fri, 8 Jan 2021 15:42:38 +1300 Subject: [PATCH] [Feat] Memoize `getDefinition` parser function --- src/parser.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index ad34190e..6cb6cef3 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1,5 +1,5 @@ import {JSONSchema4Type, JSONSchema4TypeName} from 'json-schema' -import {findKey, includes, isPlainObject, map, omit} from 'lodash' +import {findKey, includes, isPlainObject, map, memoize, omit} from 'lodash' import {format} from 'util' import {Options} from './' import {typesOfSchema} from './typesOfSchema' @@ -119,7 +119,7 @@ function parseNonLiteral( processed: Processed, usedNames: UsedNames ): AST { - const definitions = getDefinitions(getRootSchema(schema as any)) // TODO + const definitions = getDefinitionsMemoized(getRootSchema(schema as any)) // TODO const keyNameFromDefinition = findKey(definitions, _ => _ === schema) switch (type) { @@ -433,9 +433,6 @@ via the \`definition\` "${key}".` type Definitions = {[k: string]: LinkedJSONSchema} -/** - * TODO: Memoize - */ function getDefinitions( schema: LinkedJSONSchema, isSchema = true, @@ -469,6 +466,8 @@ function getDefinitions( return {} } +const getDefinitionsMemoized = memoize(getDefinitions) + /** * TODO: Reduce rate of false positives */