@venizia/ignis-helpers 0.2.0 → 0.2.1-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/dist/cjs/common/constants/mime.d.ts +16 -0
- package/dist/cjs/common/constants/mime.d.ts.map +1 -1
- package/dist/cjs/common/constants/mime.js +40 -0
- package/dist/cjs/common/constants/mime.js.map +1 -1
- package/dist/cjs/core.d.ts +1 -0
- package/dist/cjs/core.d.ts.map +1 -1
- package/dist/cjs/core.js +4 -1
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/modules/storage/base.d.ts +8 -0
- package/dist/cjs/modules/storage/base.d.ts.map +1 -1
- package/dist/cjs/modules/storage/base.js +49 -18
- package/dist/cjs/modules/storage/base.js.map +1 -1
- package/dist/cjs/modules/storage/bun-s3/helper.d.ts.map +1 -1
- package/dist/cjs/modules/storage/bun-s3/helper.js +4 -4
- package/dist/cjs/modules/storage/bun-s3/helper.js.map +1 -1
- package/dist/cjs/modules/storage/bun-s3/utility.d.ts +5 -0
- package/dist/cjs/modules/storage/bun-s3/utility.d.ts.map +1 -1
- package/dist/cjs/modules/storage/bun-s3/utility.js +4 -1
- package/dist/cjs/modules/storage/bun-s3/utility.js.map +1 -1
- package/dist/cjs/modules/storage/minio/helper.d.ts +3 -0
- package/dist/cjs/modules/storage/minio/helper.d.ts.map +1 -1
- package/dist/cjs/modules/storage/minio/helper.js +11 -2
- package/dist/cjs/modules/storage/minio/helper.js.map +1 -1
- package/dist/cjs/utilities/form-body.utility.d.ts +22 -0
- package/dist/cjs/utilities/form-body.utility.d.ts.map +1 -0
- package/dist/cjs/utilities/form-body.utility.js +32 -0
- package/dist/cjs/utilities/form-body.utility.js.map +1 -0
- package/dist/cjs/utilities/index.d.ts +1 -0
- package/dist/cjs/utilities/index.d.ts.map +1 -1
- package/dist/cjs/utilities/index.js +4 -0
- package/dist/cjs/utilities/index.js.map +1 -1
- package/dist/cjs/utilities/request.utility.d.ts +1 -1
- package/dist/cjs/utilities/request.utility.d.ts.map +1 -1
- package/dist/cjs/utilities/request.utility.js +12 -4
- package/dist/cjs/utilities/request.utility.js.map +1 -1
- package/dist/esm/common/constants/mime.d.ts +16 -0
- package/dist/esm/common/constants/mime.d.ts.map +1 -1
- package/dist/esm/common/constants/mime.js +40 -0
- package/dist/esm/common/constants/mime.js.map +1 -1
- package/dist/esm/core.d.ts +1 -0
- package/dist/esm/core.d.ts.map +1 -1
- package/dist/esm/core.js +1 -0
- package/dist/esm/core.js.map +1 -1
- package/dist/esm/modules/storage/base.d.ts +8 -0
- package/dist/esm/modules/storage/base.d.ts.map +1 -1
- package/dist/esm/modules/storage/base.js +49 -18
- package/dist/esm/modules/storage/base.js.map +1 -1
- package/dist/esm/modules/storage/bun-s3/helper.d.ts.map +1 -1
- package/dist/esm/modules/storage/bun-s3/helper.js +5 -5
- package/dist/esm/modules/storage/bun-s3/helper.js.map +1 -1
- package/dist/esm/modules/storage/bun-s3/utility.d.ts +5 -0
- package/dist/esm/modules/storage/bun-s3/utility.d.ts.map +1 -1
- package/dist/esm/modules/storage/bun-s3/utility.js +2 -0
- package/dist/esm/modules/storage/bun-s3/utility.js.map +1 -1
- package/dist/esm/modules/storage/minio/helper.d.ts +3 -0
- package/dist/esm/modules/storage/minio/helper.d.ts.map +1 -1
- package/dist/esm/modules/storage/minio/helper.js +11 -2
- package/dist/esm/modules/storage/minio/helper.js.map +1 -1
- package/dist/esm/utilities/form-body.utility.d.ts +22 -0
- package/dist/esm/utilities/form-body.utility.d.ts.map +1 -0
- package/dist/esm/utilities/form-body.utility.js +28 -0
- package/dist/esm/utilities/form-body.utility.js.map +1 -0
- package/dist/esm/utilities/index.d.ts +1 -0
- package/dist/esm/utilities/index.d.ts.map +1 -1
- package/dist/esm/utilities/index.js +2 -0
- package/dist/esm/utilities/index.js.map +1 -1
- package/dist/esm/utilities/request.utility.d.ts +1 -1
- package/dist/esm/utilities/request.utility.d.ts.map +1 -1
- package/dist/esm/utilities/request.utility.js +12 -4
- package/dist/esm/utilities/request.utility.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getError } from '../modules/error/index.js';
|
|
2
|
+
import { readFormBody } from './form-body.utility.js';
|
|
2
3
|
import fs from 'node:fs';
|
|
3
4
|
import path from 'node:path';
|
|
4
5
|
export const parseMultipartBody = async (opts) => {
|
|
@@ -6,7 +7,7 @@ export const parseMultipartBody = async (opts) => {
|
|
|
6
7
|
if (storage === 'disk' && !fs.existsSync(uploadDir)) {
|
|
7
8
|
fs.mkdirSync(uploadDir, { recursive: true });
|
|
8
9
|
}
|
|
9
|
-
const formData = await context.req
|
|
10
|
+
const formData = await readFormBody({ req: context.req });
|
|
10
11
|
const files = [];
|
|
11
12
|
const fields = {};
|
|
12
13
|
const entries = formData.entries();
|
|
@@ -53,10 +54,10 @@ export const parseMultipartBody = async (opts) => {
|
|
|
53
54
|
}
|
|
54
55
|
return { files, fields };
|
|
55
56
|
};
|
|
56
|
-
/** Sanitizes a filename by removing path components and dangerous characters. */
|
|
57
|
+
/** Sanitizes a filename by removing path components and dangerous characters. The result is printable ASCII. */
|
|
57
58
|
export const sanitizeFilename = (filename) => {
|
|
58
59
|
const basename = path.basename(filename);
|
|
59
|
-
let sanitized = basename.replace(/[^\w
|
|
60
|
+
let sanitized = basename.replace(/[^\w .-]/g, '_');
|
|
60
61
|
sanitized = sanitized.replace(/^\.+/, '');
|
|
61
62
|
sanitized = sanitized.replace(/\.{2,}/g, '.');
|
|
62
63
|
sanitized = sanitized.replace(/\.\./g, '.');
|
|
@@ -70,10 +71,17 @@ export const encodeRFC5987 = (filename) => {
|
|
|
70
71
|
.replace(/['()]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())
|
|
71
72
|
.replace(/\*/g, '%2A');
|
|
72
73
|
};
|
|
74
|
+
/** Control, format (bidi overrides, zero-width space) and lone surrogate characters: a format character reorders the name a client shows, a lone surrogate makes `encodeURIComponent` throw. The zero-width joiner and non-joiner stay: they build emoji sequences and Persian words, and reorder nothing. */
|
|
75
|
+
const UNENCODABLE_FILENAME_CHARACTERS = /(?![\u200C\u200D])[\p{Cc}\p{Cf}\p{Cs}]/gu;
|
|
76
|
+
const LEADING_DOTS = /^\.+/;
|
|
73
77
|
export const createContentDispositionHeader = (opts) => {
|
|
74
78
|
const { filename, type } = opts;
|
|
75
79
|
const sanitized = sanitizeFilename(filename);
|
|
76
|
-
const
|
|
80
|
+
const extendedName = path
|
|
81
|
+
.basename(filename)
|
|
82
|
+
.replace(UNENCODABLE_FILENAME_CHARACTERS, '_')
|
|
83
|
+
.replace(LEADING_DOTS, '');
|
|
84
|
+
const encoded = encodeRFC5987(extendedName || sanitized);
|
|
77
85
|
// filename= is the ASCII fallback for old browsers, filename*= the UTF-8 form for modern ones.
|
|
78
86
|
return `${type}; filename="${sanitized}"; filename*=UTF-8''${encoded}`;
|
|
79
87
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.utility.js","sourceRoot":"","sources":["../../../src/utilities/request.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAgC7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,IAA+B,EACA,EAAE;IACjC,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAE,SAAS,GAAG,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEtE,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"request.utility.js","sourceRoot":"","sources":["../../../src/utilities/request.utility.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-helpers",
|
|
3
|
-
"version": "0.2.0",
|
|
3
|
+
"version": "0.2.1-0",
|
|
4
4
|
"description": "Production-ready TypeScript utility library: pluggable logging (winston or pino behind one ILogger contract), Redis single/cluster/sentinel with pub/sub, BullMQ/MQTT/Kafka message queues, MinIO/Disk/Bun-S3 object storage, AES-256/RSA/ECDH cryptography, Snowflake UID generation, cron scheduling, Socket.IO/WebSocket, TCP/TLS/UDP networking, HTTP clients, secrets/Vault, worker thread pools, and environment management. Sub-path imports isolate optional peer dependencies so the root barrel never forces a peer into your bundle.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"aes",
|