@digipair/skill-sharp 0.91.0-0 → 0.92.0

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.
package/index.cjs.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src/index";
package/index.cjs.js ADDED
@@ -0,0 +1,218 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var sharp = require('sharp');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var sharp__default = /*#__PURE__*/_interopDefaultLegacy(sharp);
10
+
11
+ let SharpService = class SharpService {
12
+ async loadImage(content) {
13
+ const matches = content.match(/^data:(image\/[a-zA-Z]+);base64,(.+)$/);
14
+ if (!matches) throw new Error('Invalid base64 image format');
15
+ const [, mimeType, base64Data] = matches;
16
+ const buffer = Buffer.from(base64Data, 'base64');
17
+ return {
18
+ image: sharp__default["default"](buffer),
19
+ mimeType
20
+ };
21
+ }
22
+ async toBase64(image, outputMime) {
23
+ const buffer = await image.toBuffer();
24
+ return `data:${outputMime};base64,${buffer.toString('base64')}`;
25
+ }
26
+ async metadata(params, _pinsSettingsList, _context) {
27
+ const { content } = params;
28
+ const { image } = await this.loadImage(content);
29
+ return image.metadata();
30
+ }
31
+ async stats(params, _pinsSettingsList, _context) {
32
+ const { content } = params;
33
+ const { image } = await this.loadImage(content);
34
+ return image.stats();
35
+ }
36
+ async raw(params, _pinsSettingsList, _context) {
37
+ const { content } = params;
38
+ const { image } = await this.loadImage(content);
39
+ const buffer = await image.raw().toBuffer();
40
+ return buffer.toString('base64');
41
+ }
42
+ async resize(params, _pinsSettingsList, _context) {
43
+ const { content, width, height } = params;
44
+ const { image, mimeType } = await this.loadImage(content);
45
+ image.resize(width, height);
46
+ return this.toBase64(image, mimeType);
47
+ }
48
+ async rotate(params, _pinsSettingsList, _context) {
49
+ const { content, angle } = params;
50
+ const { image, mimeType } = await this.loadImage(content);
51
+ if (typeof angle === 'number') {
52
+ image.rotate(angle);
53
+ } else {
54
+ image.rotate(); // auto based on EXIF
55
+ }
56
+ return this.toBase64(image, mimeType);
57
+ }
58
+ async extract(params, _pinsSettingsList, _context) {
59
+ const { content, left, top, width, height } = params;
60
+ const { image, mimeType } = await this.loadImage(content);
61
+ image.extract({
62
+ left,
63
+ top,
64
+ width,
65
+ height
66
+ });
67
+ return this.toBase64(image, mimeType);
68
+ }
69
+ async flip(params, _pinsSettingsList, _context) {
70
+ const { content } = params;
71
+ const { image, mimeType } = await this.loadImage(content);
72
+ image.flip();
73
+ return this.toBase64(image, mimeType);
74
+ }
75
+ async flop(params, _pinsSettingsList, _context) {
76
+ const { content } = params;
77
+ const { image, mimeType } = await this.loadImage(content);
78
+ image.flop();
79
+ return this.toBase64(image, mimeType);
80
+ }
81
+ async grayscale(params, _pinsSettingsList, _context) {
82
+ const { content } = params;
83
+ const { image, mimeType } = await this.loadImage(content);
84
+ image.grayscale();
85
+ return this.toBase64(image, mimeType);
86
+ }
87
+ async negate(params, _pinsSettingsList, _context) {
88
+ const { content } = params;
89
+ const { image, mimeType } = await this.loadImage(content);
90
+ image.negate();
91
+ return this.toBase64(image, mimeType);
92
+ }
93
+ async tint(params, _pinsSettingsList, _context) {
94
+ const { content, r, g, b } = params;
95
+ const { image, mimeType } = await this.loadImage(content);
96
+ image.tint({
97
+ r,
98
+ g,
99
+ b
100
+ });
101
+ return this.toBase64(image, mimeType);
102
+ }
103
+ async modulate(params, _pinsSettingsList, _context) {
104
+ const { content, brightness, saturation, hue } = params;
105
+ const { image, mimeType } = await this.loadImage(content);
106
+ image.modulate({
107
+ brightness,
108
+ saturation,
109
+ hue
110
+ });
111
+ return this.toBase64(image, mimeType);
112
+ }
113
+ async blur(params, _pinsSettingsList, _context) {
114
+ const { content, radius } = params;
115
+ const { image, mimeType } = await this.loadImage(content);
116
+ image.blur(radius);
117
+ return this.toBase64(image, mimeType);
118
+ }
119
+ async sharpen(params, _pinsSettingsList, _context) {
120
+ const { content } = params;
121
+ const { image, mimeType } = await this.loadImage(content);
122
+ image.sharpen();
123
+ return this.toBase64(image, mimeType);
124
+ }
125
+ async toFormat(params, _pinsSettingsList, _context) {
126
+ const { content, format } = params;
127
+ const { image } = await this.loadImage(content);
128
+ image.toFormat(format);
129
+ return this.toBase64(image, `image/${format}`);
130
+ }
131
+ async jpeg(params, _pinsSettingsList, _context) {
132
+ const { content, quality = 80 } = params;
133
+ const { image } = await this.loadImage(content);
134
+ image.jpeg({
135
+ quality
136
+ });
137
+ return this.toBase64(image, 'image/jpeg');
138
+ }
139
+ async png(params, _pinsSettingsList, _context) {
140
+ const { content, compressionLevel = 6 } = params;
141
+ const { image } = await this.loadImage(content);
142
+ image.png({
143
+ compressionLevel
144
+ });
145
+ return this.toBase64(image, 'image/png');
146
+ }
147
+ async webp(params, _pinsSettingsList, _context) {
148
+ const { content, quality = 80 } = params;
149
+ const { image } = await this.loadImage(content);
150
+ image.webp({
151
+ quality
152
+ });
153
+ return this.toBase64(image, 'image/webp');
154
+ }
155
+ async avif(params, _pinsSettingsList, _context) {
156
+ const { content, quality = 50 } = params;
157
+ const { image } = await this.loadImage(content);
158
+ image.avif({
159
+ quality
160
+ });
161
+ return this.toBase64(image, 'image/avif');
162
+ }
163
+ async composite(params, _pinsSettingsList, _context) {
164
+ const { content, overlays } = params;
165
+ const { image, mimeType } = await this.loadImage(content);
166
+ const inputs = await Promise.all(overlays.map(async (overlay)=>{
167
+ const buffer = Buffer.from(overlay.input.replace(/^data:.*;base64,/, ''), 'base64');
168
+ return {
169
+ input: buffer,
170
+ top: overlay.top,
171
+ left: overlay.left
172
+ };
173
+ }));
174
+ image.composite(inputs);
175
+ return this.toBase64(image, mimeType);
176
+ }
177
+ };
178
+ const metadata = (params, pinsSettingsList, context)=>new SharpService().metadata(params, pinsSettingsList, context);
179
+ const stats = (params, pinsSettingsList, context)=>new SharpService().stats(params, pinsSettingsList, context);
180
+ const raw = (params, pinsSettingsList, context)=>new SharpService().raw(params, pinsSettingsList, context);
181
+ const resize = (params, pinsSettingsList, context)=>new SharpService().resize(params, pinsSettingsList, context);
182
+ const rotate = (params, pinsSettingsList, context)=>new SharpService().rotate(params, pinsSettingsList, context);
183
+ const extract = (params, pinsSettingsList, context)=>new SharpService().extract(params, pinsSettingsList, context);
184
+ const flip = (params, pinsSettingsList, context)=>new SharpService().flip(params, pinsSettingsList, context);
185
+ const flop = (params, pinsSettingsList, context)=>new SharpService().flop(params, pinsSettingsList, context);
186
+ const grayscale = (params, pinsSettingsList, context)=>new SharpService().grayscale(params, pinsSettingsList, context);
187
+ const negate = (params, pinsSettingsList, context)=>new SharpService().negate(params, pinsSettingsList, context);
188
+ const tint = (params, pinsSettingsList, context)=>new SharpService().tint(params, pinsSettingsList, context);
189
+ const modulate = (params, pinsSettingsList, context)=>new SharpService().modulate(params, pinsSettingsList, context);
190
+ const blur = (params, pinsSettingsList, context)=>new SharpService().blur(params, pinsSettingsList, context);
191
+ const sharpen = (params, pinsSettingsList, context)=>new SharpService().sharpen(params, pinsSettingsList, context);
192
+ const toFormat = (params, pinsSettingsList, context)=>new SharpService().toFormat(params, pinsSettingsList, context);
193
+ const jpeg = (params, pinsSettingsList, context)=>new SharpService().jpeg(params, pinsSettingsList, context);
194
+ const png = (params, pinsSettingsList, context)=>new SharpService().png(params, pinsSettingsList, context);
195
+ const webp = (params, pinsSettingsList, context)=>new SharpService().webp(params, pinsSettingsList, context);
196
+ const avif = (params, pinsSettingsList, context)=>new SharpService().avif(params, pinsSettingsList, context);
197
+ const composite = (params, pinsSettingsList, context)=>new SharpService().composite(params, pinsSettingsList, context);
198
+
199
+ exports.avif = avif;
200
+ exports.blur = blur;
201
+ exports.composite = composite;
202
+ exports.extract = extract;
203
+ exports.flip = flip;
204
+ exports.flop = flop;
205
+ exports.grayscale = grayscale;
206
+ exports.jpeg = jpeg;
207
+ exports.metadata = metadata;
208
+ exports.modulate = modulate;
209
+ exports.negate = negate;
210
+ exports.png = png;
211
+ exports.raw = raw;
212
+ exports.resize = resize;
213
+ exports.rotate = rotate;
214
+ exports.sharpen = sharpen;
215
+ exports.stats = stats;
216
+ exports.tint = tint;
217
+ exports.toFormat = toFormat;
218
+ exports.webp = webp;
package/index.esm.js ADDED
@@ -0,0 +1,191 @@
1
+ import sharp from 'sharp';
2
+
3
+ let SharpService = class SharpService {
4
+ async loadImage(content) {
5
+ const matches = content.match(/^data:(image\/[a-zA-Z]+);base64,(.+)$/);
6
+ if (!matches) throw new Error('Invalid base64 image format');
7
+ const [, mimeType, base64Data] = matches;
8
+ const buffer = Buffer.from(base64Data, 'base64');
9
+ return {
10
+ image: sharp(buffer),
11
+ mimeType
12
+ };
13
+ }
14
+ async toBase64(image, outputMime) {
15
+ const buffer = await image.toBuffer();
16
+ return `data:${outputMime};base64,${buffer.toString('base64')}`;
17
+ }
18
+ async metadata(params, _pinsSettingsList, _context) {
19
+ const { content } = params;
20
+ const { image } = await this.loadImage(content);
21
+ return image.metadata();
22
+ }
23
+ async stats(params, _pinsSettingsList, _context) {
24
+ const { content } = params;
25
+ const { image } = await this.loadImage(content);
26
+ return image.stats();
27
+ }
28
+ async raw(params, _pinsSettingsList, _context) {
29
+ const { content } = params;
30
+ const { image } = await this.loadImage(content);
31
+ const buffer = await image.raw().toBuffer();
32
+ return buffer.toString('base64');
33
+ }
34
+ async resize(params, _pinsSettingsList, _context) {
35
+ const { content, width, height } = params;
36
+ const { image, mimeType } = await this.loadImage(content);
37
+ image.resize(width, height);
38
+ return this.toBase64(image, mimeType);
39
+ }
40
+ async rotate(params, _pinsSettingsList, _context) {
41
+ const { content, angle } = params;
42
+ const { image, mimeType } = await this.loadImage(content);
43
+ if (typeof angle === 'number') {
44
+ image.rotate(angle);
45
+ } else {
46
+ image.rotate(); // auto based on EXIF
47
+ }
48
+ return this.toBase64(image, mimeType);
49
+ }
50
+ async extract(params, _pinsSettingsList, _context) {
51
+ const { content, left, top, width, height } = params;
52
+ const { image, mimeType } = await this.loadImage(content);
53
+ image.extract({
54
+ left,
55
+ top,
56
+ width,
57
+ height
58
+ });
59
+ return this.toBase64(image, mimeType);
60
+ }
61
+ async flip(params, _pinsSettingsList, _context) {
62
+ const { content } = params;
63
+ const { image, mimeType } = await this.loadImage(content);
64
+ image.flip();
65
+ return this.toBase64(image, mimeType);
66
+ }
67
+ async flop(params, _pinsSettingsList, _context) {
68
+ const { content } = params;
69
+ const { image, mimeType } = await this.loadImage(content);
70
+ image.flop();
71
+ return this.toBase64(image, mimeType);
72
+ }
73
+ async grayscale(params, _pinsSettingsList, _context) {
74
+ const { content } = params;
75
+ const { image, mimeType } = await this.loadImage(content);
76
+ image.grayscale();
77
+ return this.toBase64(image, mimeType);
78
+ }
79
+ async negate(params, _pinsSettingsList, _context) {
80
+ const { content } = params;
81
+ const { image, mimeType } = await this.loadImage(content);
82
+ image.negate();
83
+ return this.toBase64(image, mimeType);
84
+ }
85
+ async tint(params, _pinsSettingsList, _context) {
86
+ const { content, r, g, b } = params;
87
+ const { image, mimeType } = await this.loadImage(content);
88
+ image.tint({
89
+ r,
90
+ g,
91
+ b
92
+ });
93
+ return this.toBase64(image, mimeType);
94
+ }
95
+ async modulate(params, _pinsSettingsList, _context) {
96
+ const { content, brightness, saturation, hue } = params;
97
+ const { image, mimeType } = await this.loadImage(content);
98
+ image.modulate({
99
+ brightness,
100
+ saturation,
101
+ hue
102
+ });
103
+ return this.toBase64(image, mimeType);
104
+ }
105
+ async blur(params, _pinsSettingsList, _context) {
106
+ const { content, radius } = params;
107
+ const { image, mimeType } = await this.loadImage(content);
108
+ image.blur(radius);
109
+ return this.toBase64(image, mimeType);
110
+ }
111
+ async sharpen(params, _pinsSettingsList, _context) {
112
+ const { content } = params;
113
+ const { image, mimeType } = await this.loadImage(content);
114
+ image.sharpen();
115
+ return this.toBase64(image, mimeType);
116
+ }
117
+ async toFormat(params, _pinsSettingsList, _context) {
118
+ const { content, format } = params;
119
+ const { image } = await this.loadImage(content);
120
+ image.toFormat(format);
121
+ return this.toBase64(image, `image/${format}`);
122
+ }
123
+ async jpeg(params, _pinsSettingsList, _context) {
124
+ const { content, quality = 80 } = params;
125
+ const { image } = await this.loadImage(content);
126
+ image.jpeg({
127
+ quality
128
+ });
129
+ return this.toBase64(image, 'image/jpeg');
130
+ }
131
+ async png(params, _pinsSettingsList, _context) {
132
+ const { content, compressionLevel = 6 } = params;
133
+ const { image } = await this.loadImage(content);
134
+ image.png({
135
+ compressionLevel
136
+ });
137
+ return this.toBase64(image, 'image/png');
138
+ }
139
+ async webp(params, _pinsSettingsList, _context) {
140
+ const { content, quality = 80 } = params;
141
+ const { image } = await this.loadImage(content);
142
+ image.webp({
143
+ quality
144
+ });
145
+ return this.toBase64(image, 'image/webp');
146
+ }
147
+ async avif(params, _pinsSettingsList, _context) {
148
+ const { content, quality = 50 } = params;
149
+ const { image } = await this.loadImage(content);
150
+ image.avif({
151
+ quality
152
+ });
153
+ return this.toBase64(image, 'image/avif');
154
+ }
155
+ async composite(params, _pinsSettingsList, _context) {
156
+ const { content, overlays } = params;
157
+ const { image, mimeType } = await this.loadImage(content);
158
+ const inputs = await Promise.all(overlays.map(async (overlay)=>{
159
+ const buffer = Buffer.from(overlay.input.replace(/^data:.*;base64,/, ''), 'base64');
160
+ return {
161
+ input: buffer,
162
+ top: overlay.top,
163
+ left: overlay.left
164
+ };
165
+ }));
166
+ image.composite(inputs);
167
+ return this.toBase64(image, mimeType);
168
+ }
169
+ };
170
+ const metadata = (params, pinsSettingsList, context)=>new SharpService().metadata(params, pinsSettingsList, context);
171
+ const stats = (params, pinsSettingsList, context)=>new SharpService().stats(params, pinsSettingsList, context);
172
+ const raw = (params, pinsSettingsList, context)=>new SharpService().raw(params, pinsSettingsList, context);
173
+ const resize = (params, pinsSettingsList, context)=>new SharpService().resize(params, pinsSettingsList, context);
174
+ const rotate = (params, pinsSettingsList, context)=>new SharpService().rotate(params, pinsSettingsList, context);
175
+ const extract = (params, pinsSettingsList, context)=>new SharpService().extract(params, pinsSettingsList, context);
176
+ const flip = (params, pinsSettingsList, context)=>new SharpService().flip(params, pinsSettingsList, context);
177
+ const flop = (params, pinsSettingsList, context)=>new SharpService().flop(params, pinsSettingsList, context);
178
+ const grayscale = (params, pinsSettingsList, context)=>new SharpService().grayscale(params, pinsSettingsList, context);
179
+ const negate = (params, pinsSettingsList, context)=>new SharpService().negate(params, pinsSettingsList, context);
180
+ const tint = (params, pinsSettingsList, context)=>new SharpService().tint(params, pinsSettingsList, context);
181
+ const modulate = (params, pinsSettingsList, context)=>new SharpService().modulate(params, pinsSettingsList, context);
182
+ const blur = (params, pinsSettingsList, context)=>new SharpService().blur(params, pinsSettingsList, context);
183
+ const sharpen = (params, pinsSettingsList, context)=>new SharpService().sharpen(params, pinsSettingsList, context);
184
+ const toFormat = (params, pinsSettingsList, context)=>new SharpService().toFormat(params, pinsSettingsList, context);
185
+ const jpeg = (params, pinsSettingsList, context)=>new SharpService().jpeg(params, pinsSettingsList, context);
186
+ const png = (params, pinsSettingsList, context)=>new SharpService().png(params, pinsSettingsList, context);
187
+ const webp = (params, pinsSettingsList, context)=>new SharpService().webp(params, pinsSettingsList, context);
188
+ const avif = (params, pinsSettingsList, context)=>new SharpService().avif(params, pinsSettingsList, context);
189
+ const composite = (params, pinsSettingsList, context)=>new SharpService().composite(params, pinsSettingsList, context);
190
+
191
+ export { avif, blur, composite, extract, flip, flop, grayscale, jpeg, metadata, modulate, negate, png, raw, resize, rotate, sharpen, stats, tint, toFormat, webp };
@@ -0,0 +1,21 @@
1
+ import { PinsSettings } from '@digipair/engine';
2
+ export declare const metadata: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<any>;
3
+ export declare const stats: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<any>;
4
+ export declare const raw: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<any>;
5
+ export declare const resize: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
6
+ export declare const rotate: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
7
+ export declare const extract: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
8
+ export declare const flip: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
9
+ export declare const flop: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
10
+ export declare const grayscale: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
11
+ export declare const negate: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
12
+ export declare const tint: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
13
+ export declare const modulate: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
14
+ export declare const blur: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
15
+ export declare const sharpen: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
16
+ export declare const toFormat: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
17
+ export declare const jpeg: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
18
+ export declare const png: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
19
+ export declare const webp: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
20
+ export declare const avif: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
21
+ export declare const composite: (params: any, pinsSettingsList: PinsSettings[], context: any) => Promise<string>;
package/package.json CHANGED
@@ -1,28 +1,14 @@
1
1
  {
2
2
  "name": "@digipair/skill-sharp",
3
- "version": "0.91.0-0",
4
- "type": "module",
5
- "main": "dist/libs/skill-sharp/index.cjs.js",
6
- "module": "dist/libs/skill-sharp/index.esm.js",
7
- "types": "dist/libs/skill-sharp/index.esm.d.ts",
8
- "exports": {
9
- "./package.json": "./libs/skill-sharp/package.json",
10
- ".": {
11
- "development": "./dist/libs/skill-sharp/src/index.ts",
12
- "types": "./dist/libs/skill-sharp/index.esm.d.ts",
13
- "import": "./dist/libs/skill-sharp/index.esm.js",
14
- "default": "./dist/libs/skill-sharp/index.cjs.js"
15
- }
16
- },
3
+ "version": "0.92.0",
17
4
  "keywords": [
18
5
  "digipair",
19
- "tool",
20
- "service"
6
+ "service",
7
+ "tool"
21
8
  ],
22
- "nx": {
23
- "name": "skill-sharp"
24
- },
25
9
  "dependencies": {
26
- "@digipair/engine": "0.91.0-0"
27
- }
28
- }
10
+ "sharp": "^0.34.1"
11
+ },
12
+ "main": "./index.cjs.js",
13
+ "module": "./index.esm.js"
14
+ }
package/.swcrc DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "jsc": {
3
- "target": "es2017",
4
- "parser": {
5
- "syntax": "typescript",
6
- "decorators": true,
7
- "dynamicImport": true
8
- },
9
- "transform": {
10
- "decoratorMetadata": true,
11
- "legacyDecorator": true
12
- },
13
- "keepClassNames": true,
14
- "externalHelpers": true,
15
- "loose": true
16
- },
17
- "module": {
18
- "type": "es6"
19
- },
20
- "sourceMaps": true,
21
- "exclude": [
22
- "jest.config.ts",
23
- ".*\\.spec.tsx?$",
24
- ".*\\.test.tsx?$",
25
- "./src/jest-setup.ts$",
26
- "./**/jest-setup.ts$"
27
- ]
28
- }
package/README.md DELETED
@@ -1,7 +0,0 @@
1
- # mylib
2
-
3
- This library was generated with [Nx](https://nx.dev).
4
-
5
- ## Building
6
-
7
- Run `nx build mylib` to build the library.
package/eslint.config.mjs DELETED
@@ -1,22 +0,0 @@
1
- import baseConfig from '../../eslint.config.mjs';
2
-
3
- export default [
4
- ...baseConfig,
5
- {
6
- files: ['**/*.json'],
7
- rules: {
8
- '@nx/dependency-checks': [
9
- 'error',
10
- {
11
- ignoredFiles: [
12
- '{projectRoot}/eslint.config.{js,cjs,mjs}',
13
- '{projectRoot}/rollup.config.{js,ts,mjs,mts,cjs,cts}',
14
- ],
15
- },
16
- ],
17
- },
18
- languageOptions: {
19
- parser: await import('jsonc-eslint-parser'),
20
- },
21
- },
22
- ];
package/rollup.config.cjs DELETED
@@ -1,28 +0,0 @@
1
- const { withNx } = require('@nx/rollup/with-nx');
2
-
3
- module.exports = withNx(
4
- {
5
- main: 'libs/skill-sharp/src/index.ts',
6
- outputPath: 'dist/libs/skill-sharp',
7
- tsConfig: 'libs/skill-sharp/tsconfig.lib.json',
8
- compiler: 'swc',
9
- format: ['esm', "cjs"],
10
- assets: [
11
- {
12
- input: 'libs/skill-sharp/',
13
- glob: 'package.json',
14
- output: '.'
15
- },
16
- {
17
- input: 'libs/skill-sharp/src/',
18
- glob: '*.json',
19
- output: '.'
20
- }
21
- ]
22
- },
23
- {
24
- // Provide additional rollup configuration here. See: https://rollupjs.org/configuration-options
25
- // e.g.
26
- // output: { sourcemap: true },
27
- }
28
- );
@@ -1,7 +0,0 @@
1
- import { skillSharp } from './skill-sharp';
2
-
3
- describe('skillSharp', () => {
4
- it('should work', () => {
5
- expect(skillSharp()).toEqual('skill-sharp');
6
- });
7
- });
@@ -1,230 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { PinsSettings } from '@digipair/engine';
3
- import sharp from 'sharp';
4
-
5
- type Sharp = any;
6
-
7
- class SharpService {
8
- private async loadImage(content: string): Promise<{ image: Sharp; mimeType: string }> {
9
- const matches = content.match(/^data:(image\/[a-zA-Z]+);base64,(.+)$/);
10
- if (!matches) throw new Error('Invalid base64 image format');
11
- const [, mimeType, base64Data] = matches;
12
- const buffer = Buffer.from(base64Data, 'base64');
13
- return { image: sharp(buffer), mimeType };
14
- }
15
-
16
- private async toBase64(image: Sharp, outputMime: string): Promise<string> {
17
- const buffer = await image.toBuffer();
18
- return `data:${outputMime};base64,${buffer.toString('base64')}`;
19
- }
20
-
21
- async metadata(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
22
- const { content } = params;
23
- const { image } = await this.loadImage(content);
24
- return image.metadata();
25
- }
26
-
27
- async stats(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
28
- const { content } = params;
29
- const { image } = await this.loadImage(content);
30
- return image.stats();
31
- }
32
-
33
- async raw(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
34
- const { content } = params;
35
- const { image } = await this.loadImage(content);
36
- const buffer = await image.raw().toBuffer();
37
- return buffer.toString('base64');
38
- }
39
-
40
- async resize(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
41
- const { content, width, height } = params;
42
- const { image, mimeType } = await this.loadImage(content);
43
- image.resize(width, height);
44
- return this.toBase64(image, mimeType);
45
- }
46
-
47
- async rotate(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
48
- const { content, angle } = params;
49
- const { image, mimeType } = await this.loadImage(content);
50
- if (typeof angle === 'number') {
51
- image.rotate(angle);
52
- } else {
53
- image.rotate(); // auto based on EXIF
54
- }
55
- return this.toBase64(image, mimeType);
56
- }
57
-
58
- async extract(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
59
- const { content, left, top, width, height } = params;
60
- const { image, mimeType } = await this.loadImage(content);
61
- image.extract({ left, top, width, height });
62
- return this.toBase64(image, mimeType);
63
- }
64
-
65
- async flip(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
66
- const { content } = params;
67
- const { image, mimeType } = await this.loadImage(content);
68
- image.flip();
69
- return this.toBase64(image, mimeType);
70
- }
71
-
72
- async flop(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
73
- const { content } = params;
74
- const { image, mimeType } = await this.loadImage(content);
75
- image.flop();
76
- return this.toBase64(image, mimeType);
77
- }
78
-
79
- async grayscale(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
80
- const { content } = params;
81
- const { image, mimeType } = await this.loadImage(content);
82
- image.grayscale();
83
- return this.toBase64(image, mimeType);
84
- }
85
-
86
- async negate(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
87
- const { content } = params;
88
- const { image, mimeType } = await this.loadImage(content);
89
- image.negate();
90
- return this.toBase64(image, mimeType);
91
- }
92
-
93
- async tint(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
94
- const { content, r, g, b } = params;
95
- const { image, mimeType } = await this.loadImage(content);
96
- image.tint({ r, g, b });
97
- return this.toBase64(image, mimeType);
98
- }
99
-
100
- async modulate(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
101
- const { content, brightness, saturation, hue } = params;
102
- const { image, mimeType } = await this.loadImage(content);
103
- image.modulate({ brightness, saturation, hue });
104
- return this.toBase64(image, mimeType);
105
- }
106
-
107
- async blur(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
108
- const { content, radius } = params;
109
- const { image, mimeType } = await this.loadImage(content);
110
- image.blur(radius);
111
- return this.toBase64(image, mimeType);
112
- }
113
-
114
- async sharpen(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
115
- const { content } = params;
116
- const { image, mimeType } = await this.loadImage(content);
117
- image.sharpen();
118
- return this.toBase64(image, mimeType);
119
- }
120
-
121
- async toFormat(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
122
- const { content, format } = params;
123
- const { image } = await this.loadImage(content);
124
- image.toFormat(format);
125
- return this.toBase64(image, `image/${format}`);
126
- }
127
-
128
- async jpeg(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
129
- const { content, quality = 80 } = params;
130
- const { image } = await this.loadImage(content);
131
- image.jpeg({ quality });
132
- return this.toBase64(image, 'image/jpeg');
133
- }
134
-
135
- async png(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
136
- const { content, compressionLevel = 6 } = params;
137
- const { image } = await this.loadImage(content);
138
- image.png({ compressionLevel });
139
- return this.toBase64(image, 'image/png');
140
- }
141
-
142
- async webp(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
143
- const { content, quality = 80 } = params;
144
- const { image } = await this.loadImage(content);
145
- image.webp({ quality });
146
- return this.toBase64(image, 'image/webp');
147
- }
148
-
149
- async avif(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
150
- const { content, quality = 50 } = params;
151
- const { image } = await this.loadImage(content);
152
- image.avif({ quality });
153
- return this.toBase64(image, 'image/avif');
154
- }
155
-
156
- async composite(params: any, _pinsSettingsList: PinsSettings[], _context: any) {
157
- const { content, overlays } = params;
158
- const { image, mimeType } = await this.loadImage(content);
159
-
160
- const inputs = await Promise.all(
161
- overlays.map(async (overlay: any) => {
162
- const buffer = Buffer.from(overlay.input.replace(/^data:.*;base64,/, ''), 'base64');
163
- return { input: buffer, top: overlay.top, left: overlay.left };
164
- }),
165
- );
166
-
167
- image.composite(inputs);
168
- return this.toBase64(image, mimeType);
169
- }
170
- }
171
-
172
- export const metadata = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
173
- new SharpService().metadata(params, pinsSettingsList, context);
174
-
175
- export const stats = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
176
- new SharpService().stats(params, pinsSettingsList, context);
177
-
178
- export const raw = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
179
- new SharpService().raw(params, pinsSettingsList, context);
180
-
181
- export const resize = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
182
- new SharpService().resize(params, pinsSettingsList, context);
183
-
184
- export const rotate = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
185
- new SharpService().rotate(params, pinsSettingsList, context);
186
-
187
- export const extract = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
188
- new SharpService().extract(params, pinsSettingsList, context);
189
-
190
- export const flip = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
191
- new SharpService().flip(params, pinsSettingsList, context);
192
-
193
- export const flop = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
194
- new SharpService().flop(params, pinsSettingsList, context);
195
-
196
- export const grayscale = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
197
- new SharpService().grayscale(params, pinsSettingsList, context);
198
-
199
- export const negate = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
200
- new SharpService().negate(params, pinsSettingsList, context);
201
-
202
- export const tint = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
203
- new SharpService().tint(params, pinsSettingsList, context);
204
-
205
- export const modulate = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
206
- new SharpService().modulate(params, pinsSettingsList, context);
207
-
208
- export const blur = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
209
- new SharpService().blur(params, pinsSettingsList, context);
210
-
211
- export const sharpen = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
212
- new SharpService().sharpen(params, pinsSettingsList, context);
213
-
214
- export const toFormat = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
215
- new SharpService().toFormat(params, pinsSettingsList, context);
216
-
217
- export const jpeg = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
218
- new SharpService().jpeg(params, pinsSettingsList, context);
219
-
220
- export const png = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
221
- new SharpService().png(params, pinsSettingsList, context);
222
-
223
- export const webp = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
224
- new SharpService().webp(params, pinsSettingsList, context);
225
-
226
- export const avif = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
227
- new SharpService().avif(params, pinsSettingsList, context);
228
-
229
- export const composite = (params: any, pinsSettingsList: PinsSettings[], context: any) =>
230
- new SharpService().composite(params, pinsSettingsList, context);
package/src/sharp.d.ts DELETED
@@ -1 +0,0 @@
1
- declare module 'sharp';
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "files": [],
4
- "include": [],
5
- "references": [
6
- {
7
- "path": "../engine"
8
- },
9
- {
10
- "path": "./tsconfig.lib.json"
11
- }
12
- ]
13
- }
package/tsconfig.lib.json DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "rootDir": "src",
5
- "outDir": "dist",
6
- "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
7
- "emitDeclarationOnly": true,
8
- "module": "esnext",
9
- "moduleResolution": "node",
10
- "forceConsistentCasingInFileNames": true,
11
- "types": ["node"]
12
- },
13
- "include": ["src/**/*.ts"],
14
- "references": [
15
- {
16
- "path": "../engine/tsconfig.lib.json"
17
- }
18
- ]
19
- }
File without changes
File without changes
File without changes