@uxf/resizer 11.58.0 → 11.76.2
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/package.json +2 -2
- package/src/next-route.js +25 -3
- package/src/next-route.ts +34 -2
- package/src/utils/tools.d.ts +3 -0
- package/src/utils/tools.ts +4 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/resizer",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.76.2",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"description": "UXF Resizer",
|
|
6
6
|
"author": "UXFans <dev@uxf.cz>",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"license": "MIT",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"sharp": "^0.
|
|
19
|
+
"sharp": "^0.34.3"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/express": "4.17.21",
|
package/src/next-route.js
CHANGED
|
@@ -74,8 +74,30 @@ async function StaticGET(request) {
|
|
|
74
74
|
}
|
|
75
75
|
// proxy na dev
|
|
76
76
|
async function ProxyGET(request) {
|
|
77
|
-
var _a;
|
|
77
|
+
var _a, _b;
|
|
78
78
|
const url = new URL(request.url);
|
|
79
|
-
const
|
|
80
|
-
|
|
79
|
+
const path = url.pathname;
|
|
80
|
+
const regex = /^\/generated\/(?<namespace>[0-9a-z-_]+)\/(?<p1>[0-9a-f])\/(?<p2>[0-9a-f-])\/(?<filename>[0-9a-f-]+)_(?<width>\d+|x)_(?<height>\d+|x)_(?<fit>[a-z]+)_(?<position>[a-z]+)_(?<background>[0-9a-f]+)_(?<trim>[a-z]+)_(?<quality>\d+|x)_(?<extension>[a-z]+)\.(?<toFormat>[a-z]+)/i;
|
|
81
|
+
const params = (_a = path.match(regex)) === null || _a === void 0 ? void 0 : _a.groups;
|
|
82
|
+
if (params === undefined) {
|
|
83
|
+
return Response.error();
|
|
84
|
+
}
|
|
85
|
+
const contentType = (_b = tools_1.CONTENT_TYPES[params.toFormat]) !== null && _b !== void 0 ? _b : "image/jpeg";
|
|
86
|
+
const generatedFilename = process.cwd() + path;
|
|
87
|
+
if ((0, fs_1.existsSync)(generatedFilename)) {
|
|
88
|
+
return sendFile(generatedFilename, contentType);
|
|
89
|
+
}
|
|
90
|
+
const generatedDirectory = (0, path_1.dirname)(generatedFilename);
|
|
91
|
+
if (!(0, fs_1.existsSync)(generatedDirectory)) {
|
|
92
|
+
(0, fs_1.mkdirSync)(generatedDirectory, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
const sourceUrl = `${process.env.NEXT_PUBLIC_API_URL}/upload/${params.namespace}/${params.p1}/${params.p2}/${params.filename}.${params.extension}`;
|
|
95
|
+
(0, log_1.log)(`Generated: ${sourceUrl} => ${generatedFilename}`);
|
|
96
|
+
const sourceFile = await fetch(sourceUrl).then((response) => response.arrayBuffer());
|
|
97
|
+
if (params.toFormat === "svg") {
|
|
98
|
+
fs_1.default.writeFileSync(generatedFilename, Buffer.from(sourceFile));
|
|
99
|
+
return sendFile(generatedFilename, "image/svg+xml");
|
|
100
|
+
}
|
|
101
|
+
await (0, image_converter_1.convertImage)(sourceFile, generatedFilename, params);
|
|
102
|
+
return sendFile(generatedFilename, contentType);
|
|
81
103
|
}
|
package/src/next-route.ts
CHANGED
|
@@ -63,6 +63,38 @@ export async function StaticGET(request: Request) {
|
|
|
63
63
|
// proxy na dev
|
|
64
64
|
export async function ProxyGET(request: Request) {
|
|
65
65
|
const url = new URL(request.url);
|
|
66
|
-
const
|
|
67
|
-
|
|
66
|
+
const path = url.pathname;
|
|
67
|
+
|
|
68
|
+
const regex =
|
|
69
|
+
/^\/generated\/(?<namespace>[0-9a-z-_]+)\/(?<p1>[0-9a-f])\/(?<p2>[0-9a-f-])\/(?<filename>[0-9a-f-]+)_(?<width>\d+|x)_(?<height>\d+|x)_(?<fit>[a-z]+)_(?<position>[a-z]+)_(?<background>[0-9a-f]+)_(?<trim>[a-z]+)_(?<quality>\d+|x)_(?<extension>[a-z]+)\.(?<toFormat>[a-z]+)/i;
|
|
70
|
+
|
|
71
|
+
const params = path.match(regex)?.groups as Params | undefined;
|
|
72
|
+
if (params === undefined) {
|
|
73
|
+
return Response.error();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const contentType = CONTENT_TYPES[params.toFormat] ?? "image/jpeg";
|
|
77
|
+
const generatedFilename = process.cwd() + path;
|
|
78
|
+
if (existsSync(generatedFilename)) {
|
|
79
|
+
return sendFile(generatedFilename, contentType);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const generatedDirectory = dirname(generatedFilename);
|
|
83
|
+
if (!existsSync(generatedDirectory)) {
|
|
84
|
+
mkdirSync(generatedDirectory, { recursive: true });
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const sourceUrl = `${process.env.NEXT_PUBLIC_API_URL}/upload/${params.namespace}/${params.p1}/${params.p2}/${params.filename}.${params.extension}`;
|
|
88
|
+
log(`Generated: ${sourceUrl} => ${generatedFilename}`);
|
|
89
|
+
|
|
90
|
+
const sourceFile = await fetch(sourceUrl).then((response) => response.arrayBuffer());
|
|
91
|
+
|
|
92
|
+
if (params.toFormat === "svg") {
|
|
93
|
+
fs.writeFileSync(generatedFilename, Buffer.from(sourceFile));
|
|
94
|
+
return sendFile(generatedFilename, "image/svg+xml");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
await convertImage(sourceFile, generatedFilename, params);
|
|
98
|
+
|
|
99
|
+
return sendFile(generatedFilename, contentType);
|
|
68
100
|
}
|
package/src/utils/tools.d.ts
CHANGED
|
@@ -11,6 +11,9 @@ export interface Params {
|
|
|
11
11
|
filename: string;
|
|
12
12
|
extension: string;
|
|
13
13
|
toFormat: string;
|
|
14
|
+
p1: string | undefined;
|
|
15
|
+
p2: string | undefined;
|
|
16
|
+
namespace: string | undefined;
|
|
14
17
|
}
|
|
15
18
|
export declare const getQuality: ({ quality }: Params) => number | undefined;
|
|
16
19
|
export declare const getWidth: ({ width }: Params) => number | undefined;
|
package/src/utils/tools.ts
CHANGED
|
@@ -40,6 +40,10 @@ export interface Params {
|
|
|
40
40
|
filename: string;
|
|
41
41
|
extension: string;
|
|
42
42
|
toFormat: string;
|
|
43
|
+
//
|
|
44
|
+
p1: string | undefined;
|
|
45
|
+
p2: string | undefined;
|
|
46
|
+
namespace: string | undefined;
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
export const getQuality = ({ quality }: Params) => (quality && quality !== "x" ? Number(quality) : undefined);
|