@uxf/resizer 1.1.2 → 1.2.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/bin/uxf-resizer.js +7 -7
- package/index.js +46 -34
- package/package.json +6 -6
package/bin/uxf-resizer.js
CHANGED
|
@@ -108,20 +108,20 @@ var uxfResizer = function () { return __awaiter(void 0, void 0, void 0, function
|
|
|
108
108
|
}
|
|
109
109
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
110
110
|
try {
|
|
111
|
-
var app_1 = index_1.createApp(sourcePath_1, generatePath_1, sourceFolderDepth_1, generatedFolderDepth_1, filenameRegexp_1, disableNamespace_1);
|
|
111
|
+
var app_1 = (0, index_1.createApp)(sourcePath_1, generatePath_1, sourceFolderDepth_1, generatedFolderDepth_1, filenameRegexp_1, disableNamespace_1);
|
|
112
112
|
var listenedApp_1 = app_1.listen(3000, function () {
|
|
113
113
|
// eslint-disable-next-line no-console
|
|
114
|
-
console.log("\nSOURCE_PATH: "
|
|
114
|
+
console.log("\nSOURCE_PATH: ".concat(sourcePath_1));
|
|
115
115
|
// eslint-disable-next-line no-console
|
|
116
|
-
console.log("GENERATED_PATH: "
|
|
116
|
+
console.log("GENERATED_PATH: ".concat(generatePath_1));
|
|
117
117
|
// eslint-disable-next-line no-console
|
|
118
|
-
console.log("Source folder depth: "
|
|
118
|
+
console.log("Source folder depth: ".concat(sourceFolderDepth_1));
|
|
119
119
|
// eslint-disable-next-line no-console
|
|
120
|
-
console.log("Generated folder depth: "
|
|
120
|
+
console.log("Generated folder depth: ".concat(generatedFolderDepth_1));
|
|
121
121
|
// eslint-disable-next-line no-console
|
|
122
|
-
console.log("Filename regexp: "
|
|
122
|
+
console.log("Filename regexp: ".concat(filenameRegexp_1));
|
|
123
123
|
// eslint-disable-next-line no-console
|
|
124
|
-
console.log("Namespace: "
|
|
124
|
+
console.log("Namespace: ".concat(disableNamespace_1 ? "disabled" : "enabled"));
|
|
125
125
|
// eslint-disable-next-line no-console
|
|
126
126
|
console.log("\nImage resizer app listening on port 3000");
|
|
127
127
|
if (process.env.NODE_ENV !== "production") {
|
package/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -60,6 +64,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
60
64
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
61
65
|
exports.createApp = void 0;
|
|
62
66
|
var express_1 = __importDefault(require("express"));
|
|
67
|
+
var node_fetch_1 = __importDefault(require("node-fetch"));
|
|
63
68
|
var fs_1 = require("fs");
|
|
64
69
|
var fs = __importStar(require("fs"));
|
|
65
70
|
var sharp_1 = __importDefault(require("sharp"));
|
|
@@ -86,20 +91,20 @@ var POSITION_OPTIONS = {
|
|
|
86
91
|
};
|
|
87
92
|
var isTrim = function (value) { return value !== "nt"; };
|
|
88
93
|
var getTrimValue = function (value) { return (isTrim(value) ? Number(value) : 0); };
|
|
89
|
-
var createApp = function (
|
|
94
|
+
var createApp = function (sourcePathOrUrl, generatePath, sourceFolderDepth, generatedFolderDepth, filenameRegexp, disableNamespace) {
|
|
90
95
|
if (filenameRegexp === void 0) { filenameRegexp = ":originalFilename([a-f0-9\\-]+)_:width(\\d+)_:height(\\d+)_:fit([a-z]+)_:position([a-z]+)_:background([a-z]+)_:trim([a-z]+)_:originalExtension.:toFormat"; }
|
|
91
|
-
var parseFilename = path_to_regexp_1.match(filenameRegexp, { decode: decodeURIComponent });
|
|
92
|
-
var generatedPxArray = Array.from({ length: generatedFolderDepth }, function (_, i) { return ":p"
|
|
93
|
-
var sourcePxArray = Array.from({ length: sourceFolderDepth }, function (_, i) { return ":p"
|
|
96
|
+
var parseFilename = (0, path_to_regexp_1.match)(filenameRegexp, { decode: decodeURIComponent });
|
|
97
|
+
var generatedPxArray = Array.from({ length: generatedFolderDepth }, function (_, i) { return ":p".concat(i + 1); });
|
|
98
|
+
var sourcePxArray = Array.from({ length: sourceFolderDepth }, function (_, i) { return ":p".concat(i + 1); });
|
|
94
99
|
var routeRegexpBase = disableNamespace ? "/generated" : "/generated/:namespace";
|
|
95
100
|
var routeRegexp = generatedFolderDepth > 0
|
|
96
|
-
? routeRegexpBase
|
|
97
|
-
: routeRegexpBase
|
|
101
|
+
? "".concat(routeRegexpBase, "/").concat(generatedPxArray.join("/"), "/:filename")
|
|
102
|
+
: "".concat(routeRegexpBase, "/:filename");
|
|
98
103
|
// eslint-disable-next-line no-console
|
|
99
|
-
console.log("\nExpress route regexp: "
|
|
104
|
+
console.log("\nExpress route regexp: ".concat(routeRegexp));
|
|
100
105
|
// eslint-disable-next-line no-console
|
|
101
|
-
console.log("Filename regexp: "
|
|
102
|
-
return express_1.default().get(routeRegexp, function (req, res) { return __awaiter(void 0, void 0, void 0, function () {
|
|
106
|
+
console.log("Filename regexp: ".concat(filenameRegexp));
|
|
107
|
+
return (0, express_1.default)().get(routeRegexp, function (req, res) { return __awaiter(void 0, void 0, void 0, function () {
|
|
103
108
|
var _a, filename, namespace, parsedFilename, _b, originalFilename, originalExtension, fit, height, position, toFormat, trim, width, background, generatedPxDirectories, generatedDirectoryPart, generatedDirectory, generatedFilePath, sourcePxDirectories, sourceDirectoryPart, sourceDirectory, sourceFilename, sourceFilePath, pipeline, contentType, cacheMaxAge;
|
|
104
109
|
return __generator(this, function (_c) {
|
|
105
110
|
switch (_c.label) {
|
|
@@ -107,39 +112,46 @@ var createApp = function (sourcePath, generatePath, sourceFolderDepth, generated
|
|
|
107
112
|
_a = req.params, filename = _a.filename, namespace = _a.namespace;
|
|
108
113
|
parsedFilename = parseFilename(filename);
|
|
109
114
|
if (!parsedFilename) {
|
|
110
|
-
process.stdout.write("Filename '"
|
|
115
|
+
process.stdout.write("Filename '".concat(filename, "' not found."));
|
|
111
116
|
return [2 /*return*/, res.sendStatus(404)];
|
|
112
117
|
}
|
|
113
118
|
_b = parsedFilename.params, originalFilename = _b.originalFilename, originalExtension = _b.originalExtension, fit = _b.fit, height = _b.height, position = _b.position, toFormat = _b.toFormat, trim = _b.trim, width = _b.width, background = _b.background;
|
|
114
119
|
generatedPxDirectories = generatedPxArray.map(function (_, index) { return originalFilename.charAt(index); });
|
|
115
|
-
generatedDirectoryPart = disableNamespace ? generatePath : generatePath
|
|
120
|
+
generatedDirectoryPart = disableNamespace ? generatePath : "".concat(generatePath, "/").concat(namespace);
|
|
116
121
|
generatedDirectory = generatedPxDirectories.length > 0
|
|
117
|
-
? generatedDirectoryPart
|
|
122
|
+
? "".concat(generatedDirectoryPart, "/").concat(generatedPxDirectories.join("/"))
|
|
118
123
|
: generatedDirectoryPart;
|
|
119
|
-
generatedFilePath = generatedDirectory
|
|
120
|
-
|
|
121
|
-
sourceDirectoryPart = disableNamespace ? sourcePath : sourcePath + "/" + namespace;
|
|
122
|
-
sourceDirectory = sourcePxDirectories.length > 0
|
|
123
|
-
? sourceDirectoryPart + "/" + sourcePxDirectories.join("/")
|
|
124
|
-
: sourceDirectoryPart;
|
|
125
|
-
sourceFilename = originalFilename + "." + originalExtension;
|
|
126
|
-
sourceFilePath = sourceDirectory + "/" + sourceFilename;
|
|
124
|
+
generatedFilePath = "".concat(generatedDirectory, "/").concat(filename);
|
|
125
|
+
// try load from disk
|
|
127
126
|
if (fs.existsSync(generatedFilePath)) {
|
|
128
127
|
return [2 /*return*/, res.sendFile(generatedFilePath)];
|
|
129
128
|
}
|
|
130
|
-
if (!fs_1.existsSync(generatedDirectory)) {
|
|
131
|
-
fs_1.mkdirSync(generatedDirectory, { recursive: true });
|
|
129
|
+
if (!(0, fs_1.existsSync)(generatedDirectory)) {
|
|
130
|
+
(0, fs_1.mkdirSync)(generatedDirectory, { recursive: true });
|
|
132
131
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
case 1:
|
|
132
|
+
sourcePxDirectories = sourcePxArray.map(function (_, index) { return originalFilename.charAt(index); });
|
|
133
|
+
sourceDirectoryPart = disableNamespace ? sourcePathOrUrl : "".concat(sourcePathOrUrl, "/").concat(namespace);
|
|
134
|
+
sourceDirectory = sourcePxDirectories.length > 0
|
|
135
|
+
? "".concat(sourceDirectoryPart, "/").concat(sourcePxDirectories.join("/"))
|
|
136
|
+
: sourceDirectoryPart;
|
|
137
|
+
sourceFilename = "".concat(originalFilename, ".").concat(originalExtension);
|
|
138
|
+
sourceFilePath = "".concat(sourceDirectory, "/").concat(sourceFilename);
|
|
139
|
+
if (!sourcePathOrUrl.startsWith("https://")) return [3 /*break*/, 3];
|
|
140
|
+
return [4 /*yield*/, (0, node_fetch_1.default)(sourceFilePath)];
|
|
141
|
+
case 1: return [4 /*yield*/, (_c.sent()).buffer()];
|
|
142
|
+
case 2:
|
|
143
|
+
sourceFilePath = _c.sent();
|
|
144
|
+
_c.label = 3;
|
|
145
|
+
case 3: return [4 /*yield*/, (0, sharp_1.default)(sourceFilePath)
|
|
146
|
+
.rotate()
|
|
147
|
+
.resize(width ? Number(width) : undefined, height ? Number(height) : undefined, {
|
|
148
|
+
background: background === "t" ? "transparent" : "#".concat(background),
|
|
149
|
+
fastShrinkOnLoad: false,
|
|
150
|
+
fit: FIT_OPTIONS[fit] || "cover",
|
|
151
|
+
position: POSITION_OPTIONS[position] || "centre",
|
|
152
|
+
withoutEnlargement: originalExtension !== "svg",
|
|
153
|
+
})];
|
|
154
|
+
case 4:
|
|
143
155
|
pipeline = _c.sent();
|
|
144
156
|
if (isTrim(trim)) {
|
|
145
157
|
pipeline.trim(getTrimValue(trim));
|
|
@@ -163,7 +175,7 @@ var createApp = function (sourcePath, generatePath, sourceFolderDepth, generated
|
|
|
163
175
|
break;
|
|
164
176
|
}
|
|
165
177
|
cacheMaxAge = 7 * 24 * 60 * 60;
|
|
166
|
-
res.setHeader("cache-control", "public, max-age="
|
|
178
|
+
res.setHeader("cache-control", "public, max-age=".concat(cacheMaxAge));
|
|
167
179
|
res.setHeader("Content-Type", contentType);
|
|
168
180
|
pipeline
|
|
169
181
|
.withMetadata({ density: 72 })
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/resizer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"description": "UXF Resizer",
|
|
6
6
|
"author": "UXFans <dev@uxf.cz>",
|
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"express": "^4.17.1",
|
|
20
20
|
"fs": "^0.0.1-security",
|
|
21
|
+
"node-fetch": "^2.6.7",
|
|
21
22
|
"path-to-regexp": "^6.2.0",
|
|
22
23
|
"process": "^0.11.10",
|
|
23
|
-
"sharp": "^0.
|
|
24
|
+
"sharp": "^0.30.2",
|
|
24
25
|
"yargs": "^17.2.1"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
@@ -29,18 +30,17 @@
|
|
|
29
30
|
"@types/jest": "^27.0.1",
|
|
30
31
|
"@types/node-fetch": "^2.5.12",
|
|
31
32
|
"@types/path-to-regexp": "^1.7.0",
|
|
32
|
-
"@types/sharp": "^0.
|
|
33
|
+
"@types/sharp": "^0.29.5",
|
|
33
34
|
"@types/supertest": "^2.0.11",
|
|
34
35
|
"@typescript-eslint/eslint-plugin": "^5.11.0",
|
|
35
36
|
"@uxf/eslint-config": "^1.2.3",
|
|
36
|
-
"concurrently": "^
|
|
37
|
+
"concurrently": "^7.0.0",
|
|
37
38
|
"crypto-js": "^4.1.1",
|
|
38
39
|
"eslint": "^8.8.0",
|
|
39
40
|
"eslint-config-prettier": "^8.3.0",
|
|
40
41
|
"eslint-plugin-prettier": "^4.0.0",
|
|
41
42
|
"jest": "^27.0.6",
|
|
42
|
-
"jest-junit": "^
|
|
43
|
-
"node-fetch": "^2.6.1",
|
|
43
|
+
"jest-junit": "^13.0.0",
|
|
44
44
|
"prettier": "^2.3.2",
|
|
45
45
|
"supertest": "^6.1.5",
|
|
46
46
|
"ts-jest": "^27.0.5",
|