bajo-extra 2.3.0 → 2.4.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/extend/bajo/intl/en-US.json +3 -1
- package/extend/bajo/intl/id.json +3 -1
- package/index.js +58 -0
- package/package.json +2 -1
- package/wiki/CHANGES.md +6 -0
|
@@ -18,5 +18,7 @@
|
|
|
18
18
|
"decryption type": "decryption type",
|
|
19
19
|
"fetching%s": "Fetching %s",
|
|
20
20
|
"peerError%s": "Peer error: %s",
|
|
21
|
-
"disabled%s": "%s is disabled"
|
|
21
|
+
"disabled%s": "%s is disabled",
|
|
22
|
+
"tnUnsupportedFormat%s%s": "Unsupported thumbnail format in '%s', available: %s",
|
|
23
|
+
"tnInvalidSize%s%s": "Unsupported thumbnail size '%s' for '%s'"
|
|
22
24
|
}
|
package/extend/bajo/intl/id.json
CHANGED
|
@@ -18,5 +18,7 @@
|
|
|
18
18
|
"decryption type": "Tipe dekripsi",
|
|
19
19
|
"fetching%s": "Fetching %s",
|
|
20
20
|
"peerError%s": "Kesalahan dari peer: %s",
|
|
21
|
-
"disabled%s": "%s dinonaktifkan"
|
|
21
|
+
"disabled%s": "%s dinonaktifkan",
|
|
22
|
+
"tnUnsupportedFormat%s%s": "Format thumbnail tidak didukung di '%s', tersedia: %s",
|
|
23
|
+
"tnInvalidSize%s%s": "Ukuran thumbnail '%s' tidak didukung, tersedia: '%s'"
|
|
22
24
|
}
|
package/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { createGzip, createGunzip } from 'zlib'
|
|
|
3
3
|
import path from 'path'
|
|
4
4
|
import { Readable } from 'stream'
|
|
5
5
|
import numbro from 'numbro'
|
|
6
|
+
import sharp from 'sharp'
|
|
6
7
|
|
|
7
8
|
async function fetching ({ url, opts, bulk, spin }) {
|
|
8
9
|
const { setImmediate, print } = this.app.bajo
|
|
@@ -129,6 +130,10 @@ async function factory (pkgName) {
|
|
|
129
130
|
autoSelectFamilyAttemptTimeout: 1000,
|
|
130
131
|
autoSelectFamily: true
|
|
131
132
|
}
|
|
133
|
+
},
|
|
134
|
+
thumbnail: {
|
|
135
|
+
inputFormats: ['.png', '.jpg', '.jpeg', '.webp', '.gif', '.avif', '.tiff', '.svg'],
|
|
136
|
+
outputFormats: ['.png']
|
|
132
137
|
}
|
|
133
138
|
}
|
|
134
139
|
}
|
|
@@ -399,6 +404,59 @@ async function factory (pkgName) {
|
|
|
399
404
|
if (!alpha) return num
|
|
400
405
|
return String.fromCharCode(96 + num)
|
|
401
406
|
}
|
|
407
|
+
|
|
408
|
+
thumbnailSizes = name => {
|
|
409
|
+
switch (name) {
|
|
410
|
+
case 's': return [36, 36]
|
|
411
|
+
case 'm': return [100, 100]
|
|
412
|
+
case 'l': return [250, 250]
|
|
413
|
+
default: {
|
|
414
|
+
const [w, h] = name.split('x').map(s => parseInt(s))
|
|
415
|
+
if (!w || !h) return [0, 0]
|
|
416
|
+
return [w, h]
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
createThumbnail = async (file, options = {}) => {
|
|
422
|
+
const { fs } = this.app.lib
|
|
423
|
+
const { isString } = this.app.lib._
|
|
424
|
+
let {
|
|
425
|
+
dir = path.dirname(file),
|
|
426
|
+
silent = true,
|
|
427
|
+
size = this.config.thumbnail.sizes,
|
|
428
|
+
format = this.config.thumbnail.outputFormats,
|
|
429
|
+
opts = {}
|
|
430
|
+
} = options
|
|
431
|
+
if (isString(size)) size = [size]
|
|
432
|
+
if (isString(format)) format = [format]
|
|
433
|
+
const ext = path.extname(file)
|
|
434
|
+
|
|
435
|
+
if (!this.config.thumbnail.inputFormats.includes(ext)) {
|
|
436
|
+
if (silent) return
|
|
437
|
+
throw this.error('tnUnsupportedFormat%s%s', file, this.config.thumbnail.inputFormats)
|
|
438
|
+
}
|
|
439
|
+
const base = path.basename(file, ext)
|
|
440
|
+
fs.ensureDirSync(dir)
|
|
441
|
+
for (const s of size) {
|
|
442
|
+
const [w, h] = this.thumbnailSizes(s)
|
|
443
|
+
if (w === 0 || h === 0) {
|
|
444
|
+
if (silent) continue
|
|
445
|
+
throw this.error('tnInvalidSize%s%s', file, [...size, '<width>x<height>'])
|
|
446
|
+
}
|
|
447
|
+
for (const to of format) {
|
|
448
|
+
const dest = `${dir}/${base}-${s}${to}`
|
|
449
|
+
try {
|
|
450
|
+
await sharp(file)
|
|
451
|
+
.resize(w, h, opts)
|
|
452
|
+
.toFile(dest)
|
|
453
|
+
} catch (err) {
|
|
454
|
+
if (silent) continue
|
|
455
|
+
throw err
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
402
460
|
}
|
|
403
461
|
|
|
404
462
|
return BajoExtra
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bajo-extra",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Extra package for Bajo Framework",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"fast-xml-parser": "^5.3.3",
|
|
39
39
|
"numbro": "^2.5.0",
|
|
40
40
|
"performant-array-to-tree": "^1.11.0",
|
|
41
|
+
"sharp": "^0.34.5",
|
|
41
42
|
"short-crypt": "^4.0.0",
|
|
42
43
|
"undici": "^7.16.0"
|
|
43
44
|
},
|