Skip to content

Commit

Permalink
feat: fit operation and operation context (#6)
Browse files Browse the repository at this point in the history
* chore: update deps

* feat: create operations context

* refactor: process ~> context

* refactor: make pipe returning optional

* refactor: remove unused cacheKey

* fix: avoid breaking chainge on resize operator

* refactor: use arrow shortcut

Co-authored-by: pooya parsa <pyapar@gmail.com>
  • Loading branch information
farnabaz and pi0 committed Oct 5, 2020
1 parent eaa6203 commit ce28447
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 7 deletions.
9 changes: 7 additions & 2 deletions packages/ipx/src/ipx.ts
Expand Up @@ -194,11 +194,16 @@ class IPX {
let sharp = Sharp(srcBuff)

if (format !== '_') {
sharp = sharp.toFormat(format)
operations.push({
operation: this.operations.format,
args: [format]
})
}

// shared context for operations batch
const context = {}
operations.forEach(({ operation, args }) => {
sharp = operation.handler(this, sharp, ...args)
sharp = operation.handler(context, sharp, ...args) || sharp
})
const data = await sharp.toBuffer()

Expand Down
26 changes: 23 additions & 3 deletions packages/ipx/src/operations.ts
@@ -1,16 +1,36 @@
import { IPXOperations } from './types'
import { VSize } from './utils'
import { VArg, VMax, VSize } from './utils'

export default <IPXOperations>{
format: {
name: 'format',
args: [VArg],
handler: (_context, pipe, format) => pipe.toFormat(format, {
quality: _context.quality || 80
})
},
s: {
name: 'resize',
args: [VSize, VSize],
handler: (_context, pipe, width, height, fit) => pipe.resize(width, height, {
fit,
fit: fit || _context.fit || 'cover',
background: { r: 0, g: 0, b: 0, alpha: 0 }
})
},

q: {
name: 'quality',
args: [VMax(100)],
handler: (_context, _pipe, quality) => {
_context.quality = quality
}
},
f: {
name: 'fit',
args: [VArg],
handler: (_context, _pipe, fit) => {
_context.fit = fit
}
},
w: {
name: 'width',
args: [VSize],
Expand Down
3 changes: 1 addition & 2 deletions packages/ipx/src/types.ts
Expand Up @@ -19,8 +19,7 @@ export interface IPXOperation {
}
export interface IPXParsedOperation {
operation: IPXOperation;
args: string[];
cacheKey: string;
args: string[]
}

export interface IPXOptions {
Expand Down
40 changes: 40 additions & 0 deletions yarn.lock
Expand Up @@ -3111,6 +3111,13 @@ decompress-response@^6.0.0:
dependencies:
mimic-response "^3.1.0"

decompress-response@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
dependencies:
mimic-response "^3.1.0"

dedent@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
Expand Down Expand Up @@ -4295,6 +4302,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==

graceful-fs@^4.2.0:
version "4.2.4"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==

gzip-size@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c"
Expand Down Expand Up @@ -4594,6 +4606,11 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==

inherits@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==

ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
Expand Down Expand Up @@ -7259,6 +7276,15 @@ read@1, read@~1.0.1:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"

readable-stream@^3.1.1, readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"

readdir-scoped-modules@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309"
Expand Down Expand Up @@ -7741,6 +7767,11 @@ semver@^7.3.2:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==

semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==

semver@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
Expand Down Expand Up @@ -7821,6 +7852,15 @@ simple-get@^4.0.0:
once "^1.3.1"
simple-concat "^1.0.0"

simple-get@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"
integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==
dependencies:
decompress-response "^6.0.0"
once "^1.3.1"
simple-concat "^1.0.0"

simple-swizzle@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
Expand Down

0 comments on commit ce28447

Please sign in to comment.