@vendure/asset-server-plugin 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +7 -0
  3. package/lib/index.d.ts +4 -0
  4. package/lib/index.js +17 -0
  5. package/lib/index.js.map +1 -0
  6. package/lib/src/common.d.ts +3 -0
  7. package/lib/src/common.js +22 -0
  8. package/lib/src/common.js.map +1 -0
  9. package/lib/src/constants.d.ts +1 -0
  10. package/lib/src/constants.js +5 -0
  11. package/lib/src/constants.js.map +1 -0
  12. package/lib/src/default-asset-storage-strategy-factory.d.ts +6 -0
  13. package/lib/src/default-asset-storage-strategy-factory.js +22 -0
  14. package/lib/src/default-asset-storage-strategy-factory.js.map +1 -0
  15. package/lib/src/file-icon.png +0 -0
  16. package/lib/src/hashed-asset-naming-strategy.d.ts +21 -0
  17. package/lib/src/hashed-asset-naming-strategy.js +39 -0
  18. package/lib/src/hashed-asset-naming-strategy.js.map +1 -0
  19. package/lib/src/local-asset-storage-strategy.d.ts +25 -0
  20. package/lib/src/local-asset-storage-strategy.js +68 -0
  21. package/lib/src/local-asset-storage-strategy.js.map +1 -0
  22. package/lib/src/plugin.d.ts +141 -0
  23. package/lib/src/plugin.js +317 -0
  24. package/lib/src/plugin.js.map +1 -0
  25. package/lib/src/s3-asset-storage-strategy.d.ts +118 -0
  26. package/lib/src/s3-asset-storage-strategy.js +222 -0
  27. package/lib/src/s3-asset-storage-strategy.js.map +1 -0
  28. package/lib/src/sharp-asset-preview-strategy.d.ts +11 -0
  29. package/lib/src/sharp-asset-preview-strategy.js +64 -0
  30. package/lib/src/sharp-asset-preview-strategy.js.map +1 -0
  31. package/lib/src/transform-image.d.ts +24 -0
  32. package/lib/src/transform-image.js +102 -0
  33. package/lib/src/transform-image.js.map +1 -0
  34. package/lib/src/types.d.ts +98 -0
  35. package/lib/src/types.js +3 -0
  36. package/lib/src/types.js.map +1 -0
  37. package/package.json +41 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /// <reference types="node" />
2
+ import { AssetStorageStrategy } from '@vendure/core';
3
+ import { Request } from 'express';
4
+ import { Stream } from 'stream';
5
+ import { AssetServerOptions } from './types';
6
+ export declare type S3Credentials = {
7
+ accessKeyId: string;
8
+ secretAccessKey: string;
9
+ };
10
+ export declare type S3CredentialsProfile = {
11
+ profile: string;
12
+ };
13
+ /**
14
+ * @description
15
+ * Configuration for connecting to AWS S3.
16
+ *
17
+ * @docsCategory asset-server-plugin
18
+ * @docsPage S3AssetStorageStrategy
19
+ */
20
+ export interface S3Config {
21
+ /**
22
+ * @description
23
+ * The credentials used to access your s3 account. You can supply either the access key ID & secret,
24
+ * or you can make use of a
25
+ * [shared credentials file](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html)
26
+ * and supply the profile name (e.g. `'default'`).
27
+ */
28
+ credentials?: S3Credentials | S3CredentialsProfile;
29
+ /**
30
+ * @description
31
+ * The S3 bucket in which to store the assets. If it does not exist, it will be created on startup.
32
+ */
33
+ bucket: string;
34
+ /**
35
+ * @description
36
+ * Configuration object passed directly to the AWS SDK.
37
+ * S3.Types.ClientConfiguration can be used after importing aws-sdk.
38
+ * Using type `any` in order to avoid the need to include `aws-sdk` dependency in general.
39
+ */
40
+ nativeS3Configuration?: any;
41
+ /**
42
+ * @description
43
+ * Configuration object passed directly to the AWS SDK.
44
+ * ManagedUpload.ManagedUploadOptions can be used after importing aws-sdk.
45
+ * Using type `any` in order to avoid the need to include `aws-sdk` dependency in general.
46
+ */
47
+ nativeS3UploadConfiguration?: any;
48
+ }
49
+ /**
50
+ * @description
51
+ * Returns a configured instance of the {@link S3AssetStorageStrategy} which can then be passed to the {@link AssetServerOptions}
52
+ * `storageStrategyFactory` property.
53
+ *
54
+ * Before using this strategy, make sure you have the `aws-sdk` package installed:
55
+ *
56
+ * ```sh
57
+ * npm install aws-sdk
58
+ * ```
59
+ *
60
+ * @example
61
+ * ```TypeScript
62
+ * plugins: [
63
+ * AssetServerPlugin.init({
64
+ * route: 'assets',
65
+ * assetUploadDir: path.join(__dirname, 'assets'),
66
+ * port: 5002,
67
+ * namingStrategy: new DefaultAssetNamingStrategy(),
68
+ * storageStrategyFactory: configureS3AssetStorage({
69
+ * bucket: 'my-s3-bucket',
70
+ * credentials: {
71
+ * accessKeyId: process.env.AWS_ACCESS_KEY_ID,
72
+ * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
73
+ * },
74
+ * }),
75
+ * }),
76
+ * ```
77
+ *
78
+ * @docsCategory asset-server-plugin
79
+ * @docsPage S3AssetStorageStrategy
80
+ */
81
+ export declare function configureS3AssetStorage(s3Config: S3Config): (options: AssetServerOptions) => S3AssetStorageStrategy;
82
+ /**
83
+ * @description
84
+ * An {@link AssetStorageStrategy} which uses [Amazon S3](https://aws.amazon.com/s3/) object storage service.
85
+ * To us this strategy you must first have access to an AWS account.
86
+ * See their [getting started guide](https://aws.amazon.com/s3/getting-started/?nc=sn&loc=5) for how to get set up.
87
+ *
88
+ * Before using this strategy, make sure you have the `aws-sdk` package installed:
89
+ *
90
+ * ```sh
91
+ * npm install aws-sdk
92
+ * ```
93
+ *
94
+ * **Note:** Rather than instantiating this manually, use the {@link configureS3AssetStorage} function.
95
+ *
96
+ * @docsCategory asset-server-plugin
97
+ * @docsPage S3AssetStorageStrategy
98
+ * @docsWeight 0
99
+ */
100
+ export declare class S3AssetStorageStrategy implements AssetStorageStrategy {
101
+ private s3Config;
102
+ readonly toAbsoluteUrl: (request: Request, identifier: string) => string;
103
+ private AWS;
104
+ private s3;
105
+ constructor(s3Config: S3Config, toAbsoluteUrl: (request: Request, identifier: string) => string);
106
+ init(): Promise<void>;
107
+ destroy?: (() => void | Promise<void>) | undefined;
108
+ writeFileFromBuffer(fileName: string, data: Buffer): Promise<string>;
109
+ writeFileFromStream(fileName: string, data: Stream): Promise<string>;
110
+ readFileToBuffer(identifier: string): Promise<Buffer>;
111
+ readFileToStream(identifier: string): Promise<Stream>;
112
+ deleteFile(identifier: string): Promise<void>;
113
+ fileExists(fileName: string): Promise<boolean>;
114
+ private getObjectParams;
115
+ private getS3Credentials;
116
+ private ensureBucket;
117
+ private isCredentialsProfile;
118
+ }
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.S3AssetStorageStrategy = exports.configureS3AssetStorage = void 0;
23
+ const core_1 = require("@vendure/core");
24
+ const path = __importStar(require("path"));
25
+ const stream_1 = require("stream");
26
+ const common_1 = require("./common");
27
+ const constants_1 = require("./constants");
28
+ /**
29
+ * @description
30
+ * Returns a configured instance of the {@link S3AssetStorageStrategy} which can then be passed to the {@link AssetServerOptions}
31
+ * `storageStrategyFactory` property.
32
+ *
33
+ * Before using this strategy, make sure you have the `aws-sdk` package installed:
34
+ *
35
+ * ```sh
36
+ * npm install aws-sdk
37
+ * ```
38
+ *
39
+ * @example
40
+ * ```TypeScript
41
+ * plugins: [
42
+ * AssetServerPlugin.init({
43
+ * route: 'assets',
44
+ * assetUploadDir: path.join(__dirname, 'assets'),
45
+ * port: 5002,
46
+ * namingStrategy: new DefaultAssetNamingStrategy(),
47
+ * storageStrategyFactory: configureS3AssetStorage({
48
+ * bucket: 'my-s3-bucket',
49
+ * credentials: {
50
+ * accessKeyId: process.env.AWS_ACCESS_KEY_ID,
51
+ * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
52
+ * },
53
+ * }),
54
+ * }),
55
+ * ```
56
+ *
57
+ * @docsCategory asset-server-plugin
58
+ * @docsPage S3AssetStorageStrategy
59
+ */
60
+ function configureS3AssetStorage(s3Config) {
61
+ return (options) => {
62
+ const { assetUrlPrefix, route } = options;
63
+ const prefixFn = common_1.getAssetUrlPrefixFn(options);
64
+ const toAbsoluteUrlFn = (request, identifier) => {
65
+ if (!identifier) {
66
+ return '';
67
+ }
68
+ const prefix = prefixFn(request, identifier);
69
+ return identifier.startsWith(prefix) ? identifier : `${prefix}${identifier}`;
70
+ };
71
+ return new S3AssetStorageStrategy(s3Config, toAbsoluteUrlFn);
72
+ };
73
+ }
74
+ exports.configureS3AssetStorage = configureS3AssetStorage;
75
+ /**
76
+ * @description
77
+ * An {@link AssetStorageStrategy} which uses [Amazon S3](https://aws.amazon.com/s3/) object storage service.
78
+ * To us this strategy you must first have access to an AWS account.
79
+ * See their [getting started guide](https://aws.amazon.com/s3/getting-started/?nc=sn&loc=5) for how to get set up.
80
+ *
81
+ * Before using this strategy, make sure you have the `aws-sdk` package installed:
82
+ *
83
+ * ```sh
84
+ * npm install aws-sdk
85
+ * ```
86
+ *
87
+ * **Note:** Rather than instantiating this manually, use the {@link configureS3AssetStorage} function.
88
+ *
89
+ * @docsCategory asset-server-plugin
90
+ * @docsPage S3AssetStorageStrategy
91
+ * @docsWeight 0
92
+ */
93
+ class S3AssetStorageStrategy {
94
+ constructor(s3Config, toAbsoluteUrl) {
95
+ this.s3Config = s3Config;
96
+ this.toAbsoluteUrl = toAbsoluteUrl;
97
+ }
98
+ async init() {
99
+ try {
100
+ this.AWS = await Promise.resolve().then(() => __importStar(require('aws-sdk')));
101
+ }
102
+ catch (e) {
103
+ core_1.Logger.error(`Could not find the "aws-sdk" package. Make sure it is installed`, constants_1.loggerCtx, e.stack);
104
+ }
105
+ const config = Object.assign({ credentials: this.getS3Credentials() }, this.s3Config.nativeS3Configuration);
106
+ this.s3 = new this.AWS.S3(config);
107
+ await this.ensureBucket(this.s3Config.bucket);
108
+ }
109
+ async writeFileFromBuffer(fileName, data) {
110
+ const result = await this.s3
111
+ .upload({
112
+ Bucket: this.s3Config.bucket,
113
+ Key: fileName,
114
+ Body: data,
115
+ }, this.s3Config.nativeS3UploadConfiguration)
116
+ .promise();
117
+ return result.Key;
118
+ }
119
+ async writeFileFromStream(fileName, data) {
120
+ const result = await this.s3
121
+ .upload({
122
+ Bucket: this.s3Config.bucket,
123
+ Key: fileName,
124
+ Body: data,
125
+ }, this.s3Config.nativeS3UploadConfiguration)
126
+ .promise();
127
+ return result.Key;
128
+ }
129
+ async readFileToBuffer(identifier) {
130
+ const result = await this.s3.getObject(this.getObjectParams(identifier)).promise();
131
+ const body = result.Body;
132
+ if (!body) {
133
+ core_1.Logger.error(`Got undefined Body for ${identifier}`, constants_1.loggerCtx);
134
+ return Buffer.from('');
135
+ }
136
+ if (body instanceof Buffer) {
137
+ return body;
138
+ }
139
+ if (body instanceof Uint8Array || typeof body === 'string') {
140
+ return Buffer.from(body);
141
+ }
142
+ if (body instanceof stream_1.Readable) {
143
+ return new Promise((resolve, reject) => {
144
+ const buf = [];
145
+ body.on('data', data => buf.push(data));
146
+ body.on('error', err => reject(err));
147
+ body.on('end', () => {
148
+ const intArray = Uint8Array.from(buf);
149
+ resolve(Buffer.concat([intArray]));
150
+ });
151
+ });
152
+ }
153
+ return Buffer.from(body);
154
+ }
155
+ async readFileToStream(identifier) {
156
+ const result = await this.s3.getObject(this.getObjectParams(identifier)).promise();
157
+ const body = result.Body;
158
+ if (!(body instanceof stream_1.Stream)) {
159
+ const readable = new stream_1.Readable();
160
+ readable._read = () => {
161
+ /* noop */
162
+ };
163
+ readable.push(body);
164
+ readable.push(null);
165
+ return readable;
166
+ }
167
+ return body;
168
+ }
169
+ async deleteFile(identifier) {
170
+ await this.s3.deleteObject(this.getObjectParams(identifier)).promise();
171
+ }
172
+ async fileExists(fileName) {
173
+ try {
174
+ await this.s3.headObject(this.getObjectParams(fileName)).promise();
175
+ return true;
176
+ }
177
+ catch (e) {
178
+ return false;
179
+ }
180
+ }
181
+ getObjectParams(identifier) {
182
+ return {
183
+ Bucket: this.s3Config.bucket,
184
+ Key: path.join(identifier.replace(/^\//, '')),
185
+ };
186
+ }
187
+ getS3Credentials() {
188
+ const { credentials } = this.s3Config;
189
+ if (credentials == null) {
190
+ return null;
191
+ }
192
+ else if (this.isCredentialsProfile(credentials)) {
193
+ return new this.AWS.SharedIniFileCredentials(credentials);
194
+ }
195
+ return new this.AWS.Credentials(credentials);
196
+ }
197
+ async ensureBucket(bucket) {
198
+ let bucketExists = false;
199
+ try {
200
+ await this.s3.headBucket({ Bucket: this.s3Config.bucket }).promise();
201
+ bucketExists = true;
202
+ core_1.Logger.verbose(`Found S3 bucket "${bucket}"`, constants_1.loggerCtx);
203
+ }
204
+ catch (e) {
205
+ core_1.Logger.verbose(`Could not find bucket "${bucket}". Attempting to create...`);
206
+ }
207
+ if (!bucketExists) {
208
+ try {
209
+ await this.s3.createBucket({ Bucket: bucket, ACL: 'private' }).promise();
210
+ core_1.Logger.verbose(`Created S3 bucket "${bucket}"`, constants_1.loggerCtx);
211
+ }
212
+ catch (e) {
213
+ core_1.Logger.error(`Could not find nor create the S3 bucket "${bucket}"`, constants_1.loggerCtx, e.stack);
214
+ }
215
+ }
216
+ }
217
+ isCredentialsProfile(credentials) {
218
+ return credentials.hasOwnProperty('profile');
219
+ }
220
+ }
221
+ exports.S3AssetStorageStrategy = S3AssetStorageStrategy;
222
+ //# sourceMappingURL=s3-asset-storage-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-asset-storage-strategy.js","sourceRoot":"","sources":["../../src/s3-asset-storage-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import { AssetPreviewStrategy, RequestContext } from '@vendure/core';
3
+ export declare class SharpAssetPreviewStrategy implements AssetPreviewStrategy {
4
+ private config;
5
+ constructor(config: {
6
+ maxHeight: number;
7
+ maxWidth: number;
8
+ });
9
+ generatePreviewImage(ctx: RequestContext, mimeType: string, data: Buffer): Promise<Buffer>;
10
+ private generateMimeTypeOverlay;
11
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SharpAssetPreviewStrategy = void 0;
7
+ const generated_types_1 = require("@vendure/common/lib/generated-types");
8
+ const core_1 = require("@vendure/core");
9
+ const path_1 = __importDefault(require("path"));
10
+ const sharp_1 = __importDefault(require("sharp"));
11
+ class SharpAssetPreviewStrategy {
12
+ constructor(config) {
13
+ this.config = config;
14
+ }
15
+ async generatePreviewImage(ctx, mimeType, data) {
16
+ const assetType = core_1.getAssetType(mimeType);
17
+ const { maxWidth, maxHeight } = this.config;
18
+ if (assetType === generated_types_1.AssetType.IMAGE) {
19
+ const image = sharp_1.default(data);
20
+ const metadata = await image.metadata();
21
+ const width = metadata.width || 0;
22
+ const height = metadata.height || 0;
23
+ if (maxWidth < width || maxHeight < height) {
24
+ return image.resize(maxWidth, maxHeight, { fit: 'inside' }).toBuffer();
25
+ }
26
+ else {
27
+ if (mimeType === 'image/svg+xml') {
28
+ // Convert the SVG to a raster for the preview
29
+ return image.toBuffer();
30
+ }
31
+ else {
32
+ return data;
33
+ }
34
+ }
35
+ }
36
+ else {
37
+ return sharp_1.default(path_1.default.join(__dirname, 'file-icon.png'))
38
+ .resize(800, 800, { fit: 'outside' })
39
+ .composite([
40
+ {
41
+ input: this.generateMimeTypeOverlay(mimeType),
42
+ gravity: sharp_1.default.gravity.center,
43
+ },
44
+ ])
45
+ .toBuffer();
46
+ }
47
+ }
48
+ generateMimeTypeOverlay(mimeType) {
49
+ return Buffer.from(`
50
+ <svg xmlns="http://www.w3.org/2000/svg" height="150" width="800">
51
+ <style>
52
+ text {
53
+ font-size: 64px;
54
+ font-family: Arial, sans-serif;
55
+ fill: #666;
56
+ }
57
+ </style>
58
+
59
+ <text x="400" y="110" text-anchor="middle" width="800">${mimeType}</text>
60
+ </svg>`);
61
+ }
62
+ }
63
+ exports.SharpAssetPreviewStrategy = SharpAssetPreviewStrategy;
64
+ //# sourceMappingURL=sharp-asset-preview-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharp-asset-preview-strategy.js","sourceRoot":"","sources":["../../src/sharp-asset-preview-strategy.ts"],"names":[],"mappings":";;;;;;AAAA,yEAAgE;AAChE,wCAAmF;AACnF,gDAAwB;AACxB,kDAA0B;AAE1B,MAAa,yBAAyB;IAClC,YACY,MAGP;QAHO,WAAM,GAAN,MAAM,CAGb;IACF,CAAC;IAEJ,KAAK,CAAC,oBAAoB,CAAC,GAAmB,EAAE,QAAgB,EAAE,IAAY;QAC1E,MAAM,SAAS,GAAG,mBAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE5C,IAAI,SAAS,KAAK,2BAAS,CAAC,KAAK,EAAE;YAC/B,MAAM,KAAK,GAAG,eAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YACpC,IAAI,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG,MAAM,EAAE;gBACxC,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;aAC1E;iBAAM;gBACH,IAAI,QAAQ,KAAK,eAAe,EAAE;oBAC9B,8CAA8C;oBAC9C,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;iBAC3B;qBAAM;oBACH,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;aAAM;YACH,OAAO,eAAK,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;iBAC9C,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;iBACpC,SAAS,CAAC;gBACP;oBACI,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;oBAC7C,OAAO,EAAE,eAAK,CAAC,OAAO,CAAC,MAAM;iBAChC;aACJ,CAAC;iBACD,QAAQ,EAAE,CAAC;SACnB;IACL,CAAC;IAEO,uBAAuB,CAAC,QAAgB;QAC5C,OAAO,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;wEAU6C,QAAQ;mBAC7D,CAAC,CAAC;IACjB,CAAC;CACJ;AAtDD,8DAsDC"}
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" />
2
+ import sharp, { Region } from 'sharp';
3
+ import { ImageTransformPreset } from './types';
4
+ export declare type Dimensions = {
5
+ w: number;
6
+ h: number;
7
+ };
8
+ export declare type Point = {
9
+ x: number;
10
+ y: number;
11
+ };
12
+ /**
13
+ * Applies transforms to the given image according to the query params passed.
14
+ */
15
+ export declare function transformImage(originalImage: Buffer, queryParams: Record<string, string>, presets: ImageTransformPreset[]): Promise<sharp.Sharp>;
16
+ /**
17
+ * Resize an image but keep it centered on the focal point.
18
+ * Based on the method outlined in https://github.com/lovell/sharp/issues/1198#issuecomment-384591756
19
+ */
20
+ export declare function resizeToFocalPoint(original: Dimensions, target: Dimensions, focalPoint: Point): {
21
+ width: number;
22
+ height: number;
23
+ region: Region;
24
+ };