Socket
Socket
Sign inDemoInstall

@shopify/decorators

Package Overview
Dependencies
Maintainers
27
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@shopify/decorators - npm Package Compare versions

Comparing version 3.0.1 to 4.0.0

25

package.json
{
"name": "@shopify/decorators",
"version": "3.0.1",
"version": "4.0.0",
"license": "MIT",
"description": "A set of decorators to aid your JavaScript journey",
"main": "index.js",
"types": "./build/ts/index.d.ts",
"sideEffects": false,

@@ -26,23 +25,3 @@ "publishConfig": {

},
"files": [
"build/",
"!build/*.tsbuildinfo",
"!build/ts/**/tests/",
"index.js",
"index.mjs",
"index.esnext"
],
"dependencies": {
"@shopify/function-enhancers": "^3.0.1"
},
"module": "index.mjs",
"esnext": "index.esnext",
"exports": {
".": {
"types": "./build/ts/index.d.ts",
"esnext": "./index.esnext",
"import": "./index.mjs",
"require": "./index.js"
}
}
"files": []
}
# `@shopify/decorators`
[![Build Status](https://github.com/Shopify/quilt/workflows/Node-CI/badge.svg?branch=main)](https://github.com/Shopify/quilt/actions?query=workflow%3ANode-CI)
[![Build Status](https://github.com/Shopify/quilt/workflows/Ruby-CI/badge.svg?branch=main)](https://github.com/Shopify/quilt/actions?query=workflow%3ARuby-CI)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE.md) [![npm version](https://badge.fury.io/js/%40shopify%2Fdecorators.svg)](https://badge.fury.io/js/%40shopify%2Fdecorators.svg) [![npm bundle size (minified + gzip)](https://img.shields.io/bundlephobia/minzip/@shopify/decorators.svg)](https://img.shields.io/bundlephobia/minzip/@shopify/decorators.svg)
A set of decorators to aid your JavaScript journey.
## Installation
```bash
$ yarn add @shopify/decorators
```
## Usage
### `memoize`
The memoize decorator creates a function that memoizes the results of the function it is decorating.
The cache key for storing the results are based on the first argument provided to the memoized function.
If the memoization key cannot be inferred from the first argument alone, a `resolver` should be passed in to ensure a unique key. (ex: the unique key is in the second argument, or the unique key is a combination of a few arguments)
Know that memoization will be skipped on server process and the cached results have a maximum limit of 50 entries on a first in first out basis.
#### Memoizing a simple function
```ts
import {memoize} from '@shopify/decorators';
class MyClass {
@memoize()
addOne(number: number) {
return number + 1;
}
}
const myClass = new MyClass();
myClass.addOne(1); // -> 2, addOne is executed
myClass.addOne(1); // -> 2, result is from cache
```
#### Memoizing a function with object as argument
When memoizing a function with object as first argument, make sure the object is immutable.
```ts
import {memoize} from '@shopify/decorators';
class MyClass {
@memoize()
getValues(someObject: {one: string; two: string}) {
return;
}
}
const myClass = new MyClass();
const testObject1 = {one: 1, two: 2};
myClass.getValues(testObject1); // -> [1, 2], getValues is executed
myClass.getValues(testObject1); // -> [1, 2], result is from cache
testObject1.two = 3;
myClass.getValues(testObject1); // -> [1, 2], result is from cache, BAD
```
#### Memoizing a function while providing a resolver
The resolver takes in the same arguments as the function it is decorating.
Be sure that the resolver returns a unique identifer.
```ts
import {memoize} from '@shopify/decorators';
class MyClass {
@memoize((command: string, value: string) => `${command}${value}`)
getByCommand(command: string, value: string) {
// implementation for getByCommand
}
}
const myClass = new MyClass();
myClass.getByCommand('command name 1', 'command value 1'); // runCommand is executed
myClass.getByCommand('command name 1', 'command value 2'); // runCommand is executed
```
Next let's fix the example from [above](#memoizing-a-function-with-object-as-argument) so the results will always be correct.
```ts
import {memoize} from '@shopify/decorators';
class MyClass {
@memoize((someObject: {id: string; value: string}) => `${id}${value}`)
getValues(someObject: {id: string; value: string}) {
return Object.values(someObject);
}
}
const myClass = new MyClass();
const testObject1 = {id: 1, value: 2};
myClass.getValues(testObject1); // -> [1, 2], getValues is executed
myClass.getValues(testObject1); // -> [1, 2], result is from cache
testObject1.value = 3;
myClass.getValues(testObject1); // -> [1, 3], getValues is executed
```
This package has been deprecated and removed. You should use `@shopify/function-enhancers` directly.
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc