@eggjs/multipart 5.0.0-beta.35 → 5.0.0-beta.36

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/lib/utils.js CHANGED
@@ -1,91 +1,71 @@
1
- import assert from 'node:assert';
2
- import path from 'node:path';
3
- import bytes from 'bytes';
4
- export const whitelist = [
5
- // images
6
- '.jpg',
7
- '.jpeg', // image/jpeg
8
- '.png', // image/png, image/x-png
9
- '.gif', // image/gif
10
- '.bmp', // image/bmp
11
- '.wbmp', // image/vnd.wap.wbmp
12
- '.webp',
13
- '.tif',
14
- '.psd',
15
- // text
16
- '.svg',
17
- '.js',
18
- '.jsx',
19
- '.json',
20
- '.css',
21
- '.less',
22
- '.html',
23
- '.htm',
24
- '.xml',
25
- // tar
26
- '.zip',
27
- '.gz',
28
- '.tgz',
29
- '.gzip',
30
- // video
31
- '.mp3',
32
- '.mp4',
33
- '.avi',
1
+ import assert from "node:assert";
2
+ import path from "node:path";
3
+ import bytes from "bytes";
4
+
5
+ //#region src/lib/utils.ts
6
+ const whitelist = [
7
+ ".jpg",
8
+ ".jpeg",
9
+ ".png",
10
+ ".gif",
11
+ ".bmp",
12
+ ".wbmp",
13
+ ".webp",
14
+ ".tif",
15
+ ".psd",
16
+ ".svg",
17
+ ".js",
18
+ ".jsx",
19
+ ".json",
20
+ ".css",
21
+ ".less",
22
+ ".html",
23
+ ".htm",
24
+ ".xml",
25
+ ".zip",
26
+ ".gz",
27
+ ".tgz",
28
+ ".gzip",
29
+ ".mp3",
30
+ ".mp4",
31
+ ".avi"
34
32
  ];
35
- export function humanizeBytes(size) {
36
- if (typeof size === 'number') {
37
- return size;
38
- }
39
- return bytes(size);
33
+ function humanizeBytes(size) {
34
+ if (typeof size === "number") return size;
35
+ return bytes(size);
40
36
  }
41
- export function normalizeOptions(options) {
42
- // make sure to cast the value of config **Size to number
43
- options.fileSize = humanizeBytes(options.fileSize);
44
- options.fieldSize = humanizeBytes(options.fieldSize);
45
- options.fieldNameSize = humanizeBytes(options.fieldNameSize);
46
- // validate mode
47
- options.mode = options.mode || 'stream';
48
- assert(['stream', 'file'].includes(options.mode), `Expect mode to be 'stream' or 'file', but got '${options.mode}'`);
49
- if (options.mode === 'file') {
50
- assert(!options.fileModeMatch, '`fileModeMatch` options only work on stream mode, please remove it');
51
- }
52
- // normalize whitelist
53
- if (Array.isArray(options.whitelist)) {
54
- options.whitelist = options.whitelist.map((extname) => extname.toLowerCase());
55
- }
56
- // normalize fileExtensions
57
- if (Array.isArray(options.fileExtensions)) {
58
- options.fileExtensions = options.fileExtensions.map((extname) => {
59
- return extname.startsWith('.') || extname === '' ? extname.toLowerCase() : `.${extname.toLowerCase()}`;
60
- });
61
- }
62
- function checkExt(fileName) {
63
- if (typeof options.whitelist === 'function') {
64
- return options.whitelist(fileName);
65
- }
66
- const extname = path.extname(fileName).toLowerCase();
67
- if (Array.isArray(options.whitelist)) {
68
- return options.whitelist.includes(extname);
69
- }
70
- // only if user don't provide whitelist, we will use default whitelist + fileExtensions
71
- return whitelist.includes(extname) || options.fileExtensions.includes(extname);
72
- }
73
- options.checkFile = (_fieldName, fileStream, fileName) => {
74
- // just ignore, if no file
75
- if (!fileStream || !fileName)
76
- return;
77
- try {
78
- if (!checkExt(fileName)) {
79
- const err = new Error('Invalid filename: ' + fileName);
80
- Reflect.set(err, 'status', 400);
81
- return err;
82
- }
83
- }
84
- catch (err) {
85
- err.status = 400;
86
- return err;
87
- }
88
- };
89
- return options;
37
+ function normalizeOptions(options) {
38
+ options.fileSize = humanizeBytes(options.fileSize);
39
+ options.fieldSize = humanizeBytes(options.fieldSize);
40
+ options.fieldNameSize = humanizeBytes(options.fieldNameSize);
41
+ options.mode = options.mode || "stream";
42
+ assert(["stream", "file"].includes(options.mode), `Expect mode to be 'stream' or 'file', but got '${options.mode}'`);
43
+ if (options.mode === "file") assert(!options.fileModeMatch, "`fileModeMatch` options only work on stream mode, please remove it");
44
+ if (Array.isArray(options.whitelist)) options.whitelist = options.whitelist.map((extname) => extname.toLowerCase());
45
+ if (Array.isArray(options.fileExtensions)) options.fileExtensions = options.fileExtensions.map((extname) => {
46
+ return extname.startsWith(".") || extname === "" ? extname.toLowerCase() : `.${extname.toLowerCase()}`;
47
+ });
48
+ function checkExt(fileName) {
49
+ if (typeof options.whitelist === "function") return options.whitelist(fileName);
50
+ const extname = path.extname(fileName).toLowerCase();
51
+ if (Array.isArray(options.whitelist)) return options.whitelist.includes(extname);
52
+ return whitelist.includes(extname) || options.fileExtensions.includes(extname);
53
+ }
54
+ options.checkFile = (_fieldName, fileStream, fileName) => {
55
+ if (!fileStream || !fileName) return;
56
+ try {
57
+ if (!checkExt(fileName)) {
58
+ const err = /* @__PURE__ */ new Error("Invalid filename: " + fileName);
59
+ Reflect.set(err, "status", 400);
60
+ return err;
61
+ }
62
+ } catch (err) {
63
+ err.status = 400;
64
+ return err;
65
+ }
66
+ };
67
+ return options;
90
68
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBSTFCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBYTtJQUNqQyxTQUFTO0lBQ1QsTUFBTTtJQUNOLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLE1BQU0sRUFBRSx5QkFBeUI7SUFDakMsTUFBTSxFQUFFLFlBQVk7SUFDcEIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixLQUFLO0lBQ0wsTUFBTTtJQUNOLE9BQU87SUFDUCxRQUFRO0lBQ1IsTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0NBQ1AsQ0FBQztBQUVGLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBcUI7SUFDakQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQVcsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQXdCO0lBQ3ZELHlEQUF5RDtJQUN6RCxPQUFPLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsT0FBTyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FB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
69
+
70
+ //#endregion
71
+ export { humanizeBytes, normalizeOptions, whitelist };
package/dist/types.d.ts CHANGED
@@ -1,22 +1,24 @@
1
- import type { EggFile, MultipartFileStream, MultipartOptions } from './app/extend/context.ts';
2
- import type { MultipartConfig } from './config/config.default.ts';
3
- declare module 'egg' {
4
- interface EggAppConfig {
5
- /**
6
- * multipart parser options
7
- * @member Config#multipart
8
- */
9
- multipart: MultipartConfig;
10
- }
11
- interface Request {
12
- /**
13
- * Files Object Array
14
- */
15
- files?: EggFile[];
16
- }
17
- interface Context {
18
- saveRequestFiles(options?: MultipartOptions): Promise<void>;
19
- getFileStream(options?: MultipartOptions): Promise<MultipartFileStream>;
20
- cleanupRequestFiles(files?: EggFile[]): Promise<void>;
21
- }
22
- }
1
+ import { EggFile, MultipartFileStream, MultipartOptions } from "./app/extend/context.js";
2
+ import { MultipartConfig } from "./config/config.default.js";
3
+
4
+ //#region src/types.d.ts
5
+ declare module "egg" {
6
+ interface EggAppConfig {
7
+ /**
8
+ * multipart parser options
9
+ * @member Config#multipart
10
+ */
11
+ multipart: MultipartConfig;
12
+ }
13
+ interface Request {
14
+ /**
15
+ * Files Object Array
16
+ */
17
+ files?: EggFile[];
18
+ }
19
+ interface Context {
20
+ saveRequestFiles(options?: MultipartOptions): Promise<void>;
21
+ getFileStream(options?: MultipartOptions): Promise<MultipartFileStream>;
22
+ cleanupRequestFiles(files?: EggFile[]): Promise<void>;
23
+ }
24
+ }
package/dist/types.js CHANGED
@@ -1,2 +1 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
1
+ export { };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/multipart",
3
- "version": "5.0.0-beta.35",
3
+ "version": "5.0.0-beta.36",
4
4
  "description": "Multipart plugin for egg",
5
5
  "keywords": [
6
6
  "egg",
@@ -8,21 +8,24 @@
8
8
  "eggPlugin",
9
9
  "multipart"
10
10
  ],
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/eggjs/egg.git",
14
- "directory": "plugins/multipart"
15
- },
11
+ "homepage": "https://github.com/eggjs/egg/tree/next/plugins/multipart#readme",
16
12
  "bugs": {
17
13
  "url": "https://github.com/eggjs/egg/issues"
18
14
  },
19
- "homepage": "https://github.com/eggjs/egg/tree/next/plugins/multipart#readme",
20
- "author": "gxcsoccer <gxcsoccer@126.com>",
21
15
  "license": "MIT",
22
- "engines": {
23
- "node": ">= 22.18.0"
16
+ "author": "gxcsoccer <gxcsoccer@126.com>",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/eggjs/egg.git",
20
+ "directory": "plugins/multipart"
24
21
  },
22
+ "files": [
23
+ "dist"
24
+ ],
25
25
  "type": "module",
26
+ "main": "./dist/index.js",
27
+ "module": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
26
29
  "exports": {
27
30
  ".": "./dist/index.js",
28
31
  "./app": "./dist/app.js",
@@ -43,37 +46,27 @@
43
46
  "bytes": "^3.1.2",
44
47
  "co-busboy": "^2.0.1",
45
48
  "dayjs": "^1.11.13",
46
- "@eggjs/path-matching": "3.0.0-beta.35"
47
- },
48
- "peerDependencies": {
49
- "egg": "4.1.0-beta.35"
49
+ "@eggjs/path-matching": "3.0.0-beta.36"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/bytes": "^3.1.5",
53
- "@types/node": "^24.10.1",
53
+ "@types/node": "^24.10.2",
54
54
  "formstream": "^1.5.1",
55
55
  "is-type-of": "^2.2.0",
56
56
  "stream-wormhole": "^2.0.1",
57
- "tsdown": "^0.17.0",
58
57
  "typescript": "^5.9.3",
59
58
  "urllib": "^4.8.2",
60
- "vitest": "^4.0.15",
61
- "@eggjs/mock": "7.0.0-beta.35",
62
- "@eggjs/schedule": "6.0.0-beta.35",
63
- "@eggjs/tsconfig": "3.1.0-beta.35",
64
- "egg": "4.1.0-beta.35"
59
+ "@eggjs/schedule": "6.0.0-beta.36",
60
+ "@eggjs/mock": "7.0.0-beta.36",
61
+ "egg": "4.1.0-beta.36"
62
+ },
63
+ "peerDependencies": {
64
+ "egg": "4.1.0-beta.36"
65
+ },
66
+ "engines": {
67
+ "node": ">= 22.18.0"
65
68
  },
66
- "files": [
67
- "dist"
68
- ],
69
- "main": "./dist/index.js",
70
- "module": "./dist/index.js",
71
- "types": "./dist/index.d.ts",
72
69
  "scripts": {
73
- "build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json",
74
- "typecheck": "tsc --noEmit",
75
- "lint": "oxlint --type-aware",
76
- "lint:fix": "npm run lint -- --fix",
77
- "test": "npm run lint:fix && vitest"
70
+ "typecheck": "tsgo --noEmit"
78
71
  }
79
72
  }