diff --git a/packages/slate/src/models/mark.js b/packages/slate/src/models/mark.js index c4f30dc40..0ecd76868 100644 --- a/packages/slate/src/models/mark.js +++ b/packages/slate/src/models/mark.js @@ -214,9 +214,7 @@ Mark.prototype[MODEL_TYPES.MARK] = true * Memoize read methods. */ -memoize(Mark.prototype, ['getComponent'], { - takesArguments: true, -}) +memoize(Mark.prototype, ['getComponent']) /** * Export. diff --git a/packages/slate/src/models/node.js b/packages/slate/src/models/node.js index 2d1d24e7c..c850622bf 100644 --- a/packages/slate/src/models/node.js +++ b/packages/slate/src/models/node.js @@ -2023,77 +2023,62 @@ function assertKey(arg) { * Memoize read methods. */ -memoize( - Node.prototype, - [ - 'getBlocksAsArray', - 'getCharactersAsArray', - 'getFirstText', - 'getInlinesAsArray', - 'getKeysAsArray', - 'getLastText', - 'getMarksAsArray', - 'getText', - 'getTextDirection', - 'getTextsAsArray', - 'isLeafBlock', - 'isLeafInline', - ], - { - takesArguments: false, - } -) - -memoize( - Node.prototype, - [ - 'areDescendantsSorted', - 'getActiveMarksAtRangeAsArray', - 'getAncestors', - 'getBlocksAtRangeAsArray', - 'getBlocksByTypeAsArray', - 'getCharactersAtRangeAsArray', - 'getChild', - 'getClosestBlock', - 'getClosestInline', - 'getClosestVoid', - 'getCommonAncestor', - 'getDecorations', - 'getDepth', - 'getDescendant', - 'getDescendantAtPath', - 'getFragmentAtRange', - 'getFurthestBlock', - 'getFurthestInline', - 'getFurthestAncestor', - 'getFurthestOnlyChildAncestor', - 'getInlinesAtRangeAsArray', - 'getInlinesByTypeAsArray', - 'getMarksAtRangeAsArray', - 'getInsertMarksAtRangeAsArray', - 'getMarksByTypeAsArray', - 'getNextBlock', - 'getNextSibling', - 'getNextText', - 'getNode', - 'getNodeAtPath', - 'getOffset', - 'getOffsetAtRange', - 'getParent', - 'getPath', - 'getPlaceholder', - 'getPreviousBlock', - 'getPreviousSibling', - 'getPreviousText', - 'getTextAtOffset', - 'getTextsAtRangeAsArray', - 'validate', - 'getFirstInvalidDescendant', - ], - { - takesArguments: true, - } -) +memoize(Node.prototype, [ + 'areDescendantsSorted', + 'getActiveMarksAtRangeAsArray', + 'getAncestors', + 'getBlocksAsArray', + 'getBlocksAtRangeAsArray', + 'getBlocksByTypeAsArray', + 'getCharactersAtRangeAsArray', + 'getCharactersAsArray', + 'getChild', + 'getClosestBlock', + 'getClosestInline', + 'getClosestVoid', + 'getCommonAncestor', + 'getDecorations', + 'getDepth', + 'getDescendant', + 'getDescendantAtPath', + 'getFirstText', + 'getFragmentAtRange', + 'getFurthestBlock', + 'getFurthestInline', + 'getFurthestAncestor', + 'getFurthestOnlyChildAncestor', + 'getInlinesAsArray', + 'getInlinesAtRangeAsArray', + 'getInlinesByTypeAsArray', + 'getMarksAsArray', + 'getMarksAtRangeAsArray', + 'getInsertMarksAtRangeAsArray', + 'getKeysAsArray', + 'getLastText', + 'getMarksByTypeAsArray', + 'getNextBlock', + 'getNextSibling', + 'getNextText', + 'getNode', + 'getNodeAtPath', + 'getOffset', + 'getOffsetAtRange', + 'getParent', + 'getPath', + 'getPlaceholder', + 'getPreviousBlock', + 'getPreviousSibling', + 'getPreviousText', + 'getText', + 'getTextAtOffset', + 'getTextDirection', + 'getTextsAsArray', + 'getTextsAtRangeAsArray', + 'isLeafBlock', + 'isLeafInline', + 'validate', + 'getFirstInvalidDescendant', +]) /** * Export. diff --git a/packages/slate/src/models/schema.js b/packages/slate/src/models/schema.js index 8158ff5d9..df2232e6e 100644 --- a/packages/slate/src/models/schema.js +++ b/packages/slate/src/models/schema.js @@ -584,9 +584,7 @@ Schema.prototype[MODEL_TYPES.SCHEMA] = true * Memoize read methods. */ -memoize(Schema.prototype, ['getParentRules'], { - takesArguments: true, -}) +memoize(Schema.prototype, ['getParentRules']) /** * Export. diff --git a/packages/slate/src/models/stack.js b/packages/slate/src/models/stack.js index 37351458a..f04cb8922 100644 --- a/packages/slate/src/models/stack.js +++ b/packages/slate/src/models/stack.js @@ -159,9 +159,7 @@ Stack.prototype[MODEL_TYPES.STACK] = true * Memoize read methods. */ -memoize(Stack.prototype, ['getPluginsWith'], { - takesArguments: true, -}) +memoize(Stack.prototype, ['getPluginsWith']) /** * Export. diff --git a/packages/slate/src/models/text.js b/packages/slate/src/models/text.js index 3f3a890b2..3a045c160 100644 --- a/packages/slate/src/models/text.js +++ b/packages/slate/src/models/text.js @@ -523,19 +523,13 @@ memoize(Text.prototype, ['getMarks', 'getMarksAsArray'], { takesArguments: false, }) -memoize( - Text.prototype, - [ - 'getDecoratedCharacters', - 'getDecorations', - 'getLeaves', - 'getMarksAtIndex', - 'validate', - ], - { - takesArguments: true, - } -) +memoize(Text.prototype, [ + 'getDecoratedCharacters', + 'getDecorations', + 'getLeaves', + 'getMarksAtIndex', + 'validate', +]) /** * Export. diff --git a/packages/slate/src/utils/memoize.js b/packages/slate/src/utils/memoize.js index 2a49c731a..a84d8118f 100644 --- a/packages/slate/src/utils/memoize.js +++ b/packages/slate/src/utils/memoize.js @@ -60,9 +60,7 @@ const UNSET = undefined * @return {Record} */ -function memoize(object, properties, options = {}) { - const { takesArguments = true } = options - +function memoize(object, properties) { for (const property of properties) { const original = object[property] @@ -79,12 +77,18 @@ function memoize(object, properties, options = {}) { if (CACHE_KEY !== this.__cache_key) { this.__cache_key = CACHE_KEY this.__cache = new Map() // eslint-disable-line no-undef,no-restricted-globals + this.__cache_no_args = {} } } if (!this.__cache) { this.__cache = new Map() // eslint-disable-line no-undef,no-restricted-globals } + if (!this.__cache_no_args) { + this.__cache_no_args = {} + } + + const takesArguments = args.length !== 0 let cachedValue let keys @@ -93,7 +97,7 @@ function memoize(object, properties, options = {}) { keys = [property, ...args] cachedValue = getIn(this.__cache, keys) } else { - cachedValue = this.__cache.get(property) + cachedValue = this.__cache_no_args[property] } // If we've got a result already, return it. @@ -108,7 +112,7 @@ function memoize(object, properties, options = {}) { if (takesArguments) { this.__cache = setIn(this.__cache, keys, v) } else { - this.__cache.set(property, v) + this.__cache_no_args[property] = v } return value