@d-matrix/utils 1.3.0 → 1.5.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/file.d.ts CHANGED
@@ -20,4 +20,20 @@ export declare const validateImageSize: (file: BlobPart | FileURL, limitSize: {
20
20
  width: number;
21
21
  height: number;
22
22
  }, options?: BlobPropertyBag | undefined) => Promise<ImageSizeValidationResult>;
23
+ /**
24
+ * 检测图片地址是否可用
25
+ * @param src 图片地址
26
+ * @param img HTMLImageElement
27
+ * @returns Promise<boolean>
28
+ */
29
+ export declare function isImageExists(src: string, img?: HTMLImageElement): Promise<boolean>;
30
+ /**
31
+ * 从Content-Disposition中获取文件名
32
+ * @param header 包含Content-Disposition, 值为'attachment;filename=%E5%A4%A7%E8%A1%8C%E6%8C%87%E5%AF%BC2024-06-27-2024-06-28.xlsx'
33
+ * @returns string
34
+ *
35
+ */
36
+ export declare function getFilenameFromContentDispositionHeader(header: {
37
+ ['content-disposition']: string;
38
+ }): string;
23
39
  export {};
package/dist/file.js CHANGED
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  }
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.validateImageSize = exports.toImage = void 0;
39
+ exports.getFilenameFromContentDispositionHeader = exports.isImageExists = exports.validateImageSize = exports.toImage = void 0;
40
40
  /**
41
41
  * 转换BlobPart或者文件地址为图片对象
42
42
  * @param file 传入文件 或者 url
@@ -87,3 +87,38 @@ var validateImageSize = function (file, limitSize, options) { return __awaiter(v
87
87
  });
88
88
  }); };
89
89
  exports.validateImageSize = validateImageSize;
90
+ /**
91
+ * 检测图片地址是否可用
92
+ * @param src 图片地址
93
+ * @param img HTMLImageElement
94
+ * @returns Promise<boolean>
95
+ */
96
+ function isImageExists(src, img) {
97
+ if (img === void 0) { img = new Image(); }
98
+ return __awaiter(this, void 0, void 0, function () {
99
+ return __generator(this, function (_a) {
100
+ if (!src)
101
+ return [2 /*return*/, false];
102
+ return [2 /*return*/, new Promise(function (resolve) {
103
+ img.src = src;
104
+ img.onload = function () { return resolve(true); };
105
+ img.onerror = function () { return resolve(false); };
106
+ })];
107
+ });
108
+ });
109
+ }
110
+ exports.isImageExists = isImageExists;
111
+ /**
112
+ * 从Content-Disposition中获取文件名
113
+ * @param header 包含Content-Disposition, 值为'attachment;filename=%E5%A4%A7%E8%A1%8C%E6%8C%87%E5%AF%BC2024-06-27-2024-06-28.xlsx'
114
+ * @returns string
115
+ *
116
+ */
117
+ function getFilenameFromContentDispositionHeader(header) {
118
+ var contentDisposition = header['content-disposition'];
119
+ if (!contentDisposition)
120
+ return '';
121
+ var filename = contentDisposition.split('filename=')[1].split(';')[0];
122
+ return decodeURIComponent(filename);
123
+ }
124
+ exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
package/dist/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * as date from './date';
5
5
  export * as types from './types';
6
6
  export * as algorithm from './algorithm';
7
7
  export * as file from './file';
8
+ export * as support from './support';
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
19
  return result;
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.file = exports.algorithm = exports.types = exports.date = exports.dom = exports.react = exports.clipboard = void 0;
22
+ exports.support = exports.file = exports.algorithm = exports.types = exports.date = exports.dom = exports.react = exports.clipboard = void 0;
23
23
  exports.clipboard = __importStar(require("./clipboard"));
24
24
  exports.react = __importStar(require("./react"));
25
25
  exports.dom = __importStar(require("./dom"));
@@ -27,3 +27,4 @@ exports.date = __importStar(require("./date"));
27
27
  exports.types = __importStar(require("./types"));
28
28
  exports.algorithm = __importStar(require("./algorithm"));
29
29
  exports.file = __importStar(require("./file"));
30
+ exports.support = __importStar(require("./support"));
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 是否是浏览器环境
3
+ */
4
+ export declare const isBrowserEnv: () => boolean;
5
+ /**
6
+ * 是否支持WebSocket
7
+ */
8
+ export declare const isWebSocket: () => boolean;
9
+ /**
10
+ * 是否支持SharedWorker
11
+ */
12
+ export declare const isSharedWorker: () => boolean;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSharedWorker = exports.isWebSocket = exports.isBrowserEnv = void 0;
4
+ /**
5
+ * 是否是浏览器环境
6
+ */
7
+ var isBrowserEnv = function () { return typeof window !== 'undefined'; };
8
+ exports.isBrowserEnv = isBrowserEnv;
9
+ /**
10
+ * 是否支持WebSocket
11
+ */
12
+ var isWebSocket = function () { return typeof WebSocket !== 'undefined'; };
13
+ exports.isWebSocket = isWebSocket;
14
+ /**
15
+ * 是否支持SharedWorker
16
+ */
17
+ var isSharedWorker = function () { return typeof SharedWorker !== 'undefined'; };
18
+ exports.isSharedWorker = isSharedWorker;
package/dist/types.d.ts CHANGED
@@ -1 +1,7 @@
1
+ /** 指定的属性变为可选 */
1
2
  export declare type WithOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
3
+ /** 除了 K 的其他属性变成可选 */
4
+ export declare type ExcludePickPartial<T, K extends keyof T> = Partial<Omit<T, K>> & Pick<T, K>;
5
+ export declare type Undefinable<T> = {
6
+ [K in keyof T]: T[K] | undefined;
7
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d-matrix/utils",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "A dozen of utils for Front-End Development",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -8,7 +8,9 @@
8
8
  "prebuild": "npm run clean",
9
9
  "clean": "rimraf dist",
10
10
  "cy:open": "cypress open",
11
- "cy:run": "cypress run"
11
+ "cy:run": "cypress run",
12
+ "test:tsd": "tsd",
13
+ "postversion": "git push && git push --tags"
12
14
  },
13
15
  "engines": {
14
16
  "node": ">=16.20.0"
@@ -18,9 +20,12 @@
18
20
  "url": "git+https://github.com/mrdulin/dm-utils.git"
19
21
  },
20
22
  "files": [
21
- "dist"
23
+ "dist",
24
+ "readme.md"
25
+ ],
26
+ "keywords": [
27
+ "utils"
22
28
  ],
23
- "keywords": [],
24
29
  "author": "Lin Du",
25
30
  "license": "MIT",
26
31
  "bugs": {
@@ -37,6 +42,7 @@
37
42
  "devDependencies": {
38
43
  "@vitejs/plugin-react": "^4.2.1",
39
44
  "cypress": "^13.6.6",
45
+ "expect-type": "^0.19.0",
40
46
  "rimraf": "^5.0.5",
41
47
  "vite": "^4.5.2"
42
48
  }
package/readme.md CHANGED
@@ -12,7 +12,9 @@ A dozen of utils for Front-End Development
12
12
  - [dom](#dom)
13
13
  - [date](#date)
14
14
  - [types](#types)
15
- - [algorithm]($algorithm)
15
+ - [algorithm](#algorithm)
16
+ - [file](#file)
17
+ - [support](#support)
16
18
 
17
19
  ### clipboard
18
20
 
@@ -115,6 +117,54 @@ interface ImageSizeValidationResult {
115
117
 
116
118
  图片宽,高校验
117
119
 
120
+ - `isImageExists(src: string, img: HTMLImageElement = new Image()): Promise<boolean>`
121
+
122
+ 检测图片地址是否可用
123
+
124
+ ```ts
125
+ import { file } from '@d-matrix/utils';
126
+
127
+ const url = 'https://picsum.photos/200/300';
128
+ const res = await file.isImageExists(url);
129
+ ```
130
+
131
+ 传入HTML中已经存在的`img`元素
132
+
133
+ ```js
134
+ import { file } from '@d-matrix/utils';
135
+
136
+ const $img = document.getElementById('img');
137
+ const res = await file.isImageExists(url, $img);
138
+ ```
139
+
140
+ - `getFilenameFromContentDispositionHeader(header: { ['content-disposition']: string }): string`
141
+
142
+ 从`Content-Disposition` response header中获取`filename`
143
+
144
+ ```ts
145
+ import { file } from '@d-matrix/utils';
146
+
147
+ const header = {
148
+ 'content-disposition': 'attachment;filename=%E5%A4%A7%E8%A1%8C%E6%8C%87%E5%AF%BC2024-06-27-2024-06-28.xlsx'
149
+ };
150
+ const filename = file.getFilenameFromContentDispositionHeader(header);
151
+ // '大行指导2024-06-27-2024-06-28.xlsx'
152
+ ```
153
+
154
+ ## support
155
+
156
+ - `isBrowserEnv(): boolean`
157
+
158
+ 是否是浏览器环境
159
+
160
+ - `isWebSocket(): boolean`
161
+
162
+ 是否支持WebSocket
163
+
164
+ - `isSharedWorker(): boolean`
165
+
166
+ 是否支持SharedWorker
167
+
118
168
  ## 测试
119
169
 
120
170
  运行全部组件测试
@@ -143,6 +193,22 @@ npm version <minor> or <major>...
143
193
  npm build
144
194
  ```
145
195
 
196
+ 发布:
197
+
198
+ ```bash
199
+ npm publish --access public
200
+ ```
201
+
202
+ 镜像站查询版本与手动同步:
203
+
204
+ [npm镜像站](https://npmmirror.com/package/@d-matrix/utils)
205
+
206
+ 通过`git log`命令获取changelogs,用于填写GitHub Release内容:
207
+
208
+ ```bash
209
+ git log --oneline --decorate
210
+ ```
211
+
146
212
  ## 注意事项
147
213
 
148
214
  - [Before Publishing: Make Sure Your Package Installs and Works](https://docs.npmjs.com/cli/v10/using-npm/developers/#before-publishing-make-sure-your-package-installs-and-works)