@jnrs/shared 1.1.6 → 1.1.7

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/README.md CHANGED
@@ -33,10 +33,10 @@ import { uuidv4 } from '@jnrs/shared/uuid'
33
33
  - User
34
34
  - DictItem
35
35
  - Dict
36
+ - FileItem
36
37
  - Locale
37
38
  - ThemeMode
38
39
 
39
-
40
40
 
41
41
  - Fullscreen
42
42
 
package/dist/index.js CHANGED
@@ -1,10 +1,9 @@
1
- export { blobToUrl } from './utils/index.js';
2
- export { getDictColor, getDictLabel, getDictValue, getOneDictList } from './utils/dict.js';
1
+ export { getDictColor, getDictLabel, getDictList, getDictValue } from './utils/dict.js';
3
2
  export { formatDateTime, formatWeekday, setDefaultLocale } from './utils/date.js';
4
3
  export { Fullscreen } from './utils/fullscreen.js';
5
4
  export { hasPermissionWithSuffix } from './utils/permissions.js';
6
- export { objectToFormData } from './utils/objectToFormData.js';
7
- export { downloadFile } from './utils/file.js';
5
+ export { objectMatchAssign, objectToFormData } from './utils/object.js';
6
+ export { blobToUrl, downloadByBlob, downloadByUrl } from './utils/file.js';
8
7
 
9
8
  console.log('%c✨ 欢迎使用 @jnrs/shared', 'background: #8061BF; color: #f2f2f2; font-weight: bold; padding: 4px 8px; border-radius: 4px; font-family: "Helvetica Neue", sans-serif;');
10
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAGA,OAAO,CAAC,GAAG,CACT,uBAAuB,EACvB,0IAA0I,CAC3I"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAGA,OAAO,CAAC,GAAG,CACT,uBAAuB,EACvB,0IAA0I,CAC3I"}
@@ -5,18 +5,12 @@
5
5
  // // 系统自动适配 - 浅色模式
6
6
  // @media (prefers-color-scheme: light) {
7
7
  // :root {
8
- // --jnrs-font-primary: oklch(0.3 0.01 264);
9
- // --jnrs-card-primary: oklch(1 0 0);
10
- // --jnrs-background-primary: oklch(0.96 0 0);
11
8
  // }
12
9
  // }
13
10
 
14
11
  // // 系统自动适配 - 深色模式
15
12
  // @media (prefers-color-scheme: dark) {
16
13
  // :root {
17
- // --jnrs-font-primary: oklch(0.9 0 265);
18
- // --jnrs-card-primary: oklch(0.24 0 0);
19
- // --jnrs-background-primary: oklch(0 0 0);
20
14
  // }
21
15
  // }
22
16
 
@@ -44,6 +44,19 @@ export interface Role {
44
44
  permissions?: string[];
45
45
  [key: string]: unknown;
46
46
  }
47
+ /**
48
+ * 文件项
49
+ */
50
+ export type FileItem = {
51
+ /**
52
+ * 文件地址
53
+ */
54
+ src: string;
55
+ /**
56
+ * 文件名称
57
+ */
58
+ fileName: string;
59
+ };
47
60
  /**
48
61
  * 语言
49
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAElC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAElC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA"}
@@ -12,7 +12,7 @@ import type { Dict, DictItem } from '../types/base';
12
12
  * @param dictData 字典总数据
13
13
  * @returns 某字典名称所对应的字典列表数据
14
14
  */
15
- export declare const getOneDictList: (name: string, dictData: Dict) => DictItem[];
15
+ export declare const getDictList: (name: string, dictData: Dict) => DictItem[];
16
16
  /**
17
17
  * 根据字典名称和字典值获取字典标签
18
18
  * @param name 字典名称
@@ -1 +1 @@
1
- {"version":3,"file":"dict.d.ts","sourceRoot":"","sources":["../../src/utils/dict.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,UAAU,IAAI,KAAG,QAAQ,EAGrE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,GAAG,MAAM,EAAE,UAAU,IAAI,KAAG,MAInF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,UAAU,IAAI,KACb,MAAM,GAAG,MAAM,GAAG,SAIpB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,GAAG,MAAM,EAAE,UAAU,IAAI,KAAG,MAGnF,CAAA"}
1
+ {"version":3,"file":"dict.d.ts","sourceRoot":"","sources":["../../src/utils/dict.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,UAAU,IAAI,KAAG,QAAQ,EAGlE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,GAAG,MAAM,EAAE,UAAU,IAAI,KAAG,MAInF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,UAAU,IAAI,KAAG,MAAM,GAAG,MAAM,GAAG,SAI5F,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,GAAG,MAAM,EAAE,UAAU,IAAI,KAAG,MAGnF,CAAA"}
@@ -11,7 +11,7 @@
11
11
  * @param dictData 字典总数据
12
12
  * @returns 某字典名称所对应的字典列表数据
13
13
  */
14
- const getOneDictList = (name, dictData) => {
14
+ const getDictList = (name, dictData) => {
15
15
  if (!name || !Object.hasOwn(dictData, name))
16
16
  return [];
17
17
  return dictData[name];
@@ -57,5 +57,5 @@ const getDictColor = (name, value, dictData) => {
57
57
  return dictData[name].find((d) => String(d.value) === String(value))?.displayColor || '';
58
58
  };
59
59
 
60
- export { getDictColor, getDictLabel, getDictValue, getOneDictList };
60
+ export { getDictColor, getDictLabel, getDictList, getDictValue };
61
61
  //# sourceMappingURL=dict.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dict.js","sources":["../../src/utils/dict.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;AAMG;AAIH;;;;;AAKG;MACU,cAAc,GAAG,CAAC,IAAY,EAAE,QAAc,KAAgB;IACzE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,EAAE;AACtD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB;AAEA;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAsB,EAAE,QAAc,KAAY;AAC3F,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;IACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACxD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AAC9F;AAEA;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,CAC1B,IAAY,EACZ,KAAa,EACb,QAAc,KACiB;AAC/B,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;IACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,SAAS;AACpD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS;AAC1F;AAEA;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAsB,EAAE,QAAc,KAAY;IAC3F,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,EAAE;AACtD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE;AAC1F;;;;"}
1
+ {"version":3,"file":"dict.js","sources":["../../src/utils/dict.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;AAMG;AAIH;;;;;AAKG;MACU,WAAW,GAAG,CAAC,IAAY,EAAE,QAAc,KAAgB;IACtE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,EAAE;AACtD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB;AAEA;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAsB,EAAE,QAAc,KAAY;AAC3F,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;IACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACxD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AAC9F;AAEA;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,QAAc,KAAiC;AACvG,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;IACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,SAAS;AACpD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS;AAC1F;AAEA;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAsB,EAAE,QAAc,KAAY;IAC3F,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,EAAE;AACtD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE;AAC1F;;;;"}
@@ -1,7 +1,23 @@
1
1
  /**
2
- * 根据文件下载接口返回的二进制数据进行下载
3
- * @param blob 二进制数据
2
+ * Blob 转为 URL(有副作用)
3
+ * @param blob Blob 数据
4
+ * @returns url URL 对象
5
+ * @returns revoke URL 对象清理函数
6
+ */
7
+ export declare const blobToUrl: (blob: Blob) => {
8
+ url: string;
9
+ revoke: () => void;
10
+ };
11
+ /**
12
+ * 根据 Url 数据进行下载
13
+ * @param url URL 数据
14
+ * @param filename 文件名
15
+ */
16
+ export declare const downloadByUrl: (url: string, filename: string) => Promise<void>;
17
+ /**
18
+ * 根据 Blob 数据进行下载(自动清理副作用)
19
+ * @param blob Blob 数据
4
20
  * @param filename 文件名
5
21
  */
6
- export declare const downloadFile: (blob: Blob, filename: string) => Promise<void>;
22
+ export declare const downloadByBlob: (blob: Blob, filename: string) => Promise<void>;
7
23
  //# sourceMappingURL=file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,MAAM,IAAI,EAAE,UAAU,MAAM,kBAO9D,CAAA"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI;;;CAInC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAU,KAAK,MAAM,EAAE,UAAU,MAAM,kBAOhE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAU,MAAM,IAAI,EAAE,UAAU,MAAM,kBAIhE,CAAA"}
@@ -1,16 +1,37 @@
1
1
  /**
2
- * 根据文件下载接口返回的二进制数据进行下载
3
- * @param blob 二进制数据
2
+ * Blob 转为 URL(有副作用)
3
+ * @param blob Blob 数据
4
+ * @returns url URL 对象
5
+ * @returns revoke URL 对象清理函数
6
+ */
7
+ const blobToUrl = (blob) => {
8
+ const url = URL.createObjectURL(blob);
9
+ const revoke = () => URL.revokeObjectURL(url);
10
+ return { url, revoke };
11
+ };
12
+ /**
13
+ * 根据 Url 数据进行下载
14
+ * @param url URL 数据
4
15
  * @param filename 文件名
5
16
  */
6
- const downloadFile = async (blob, filename) => {
7
- const blobUrl = URL.createObjectURL(blob);
17
+ const downloadByUrl = async (url, filename) => {
8
18
  const a = document.createElement('a');
9
- a.href = blobUrl;
19
+ a.href = url;
10
20
  a.download = filename;
21
+ document.body.appendChild(a);
11
22
  a.click();
12
- URL.revokeObjectURL(blobUrl);
23
+ document.body.removeChild(a);
24
+ };
25
+ /**
26
+ * 根据 Blob 数据进行下载(自动清理副作用)
27
+ * @param blob Blob 数据
28
+ * @param filename 文件名
29
+ */
30
+ const downloadByBlob = async (blob, filename) => {
31
+ const { url, revoke } = blobToUrl(blob);
32
+ downloadByUrl(url, filename);
33
+ setTimeout(revoke, 100);
13
34
  };
14
35
 
15
- export { downloadFile };
36
+ export { blobToUrl, downloadByBlob, downloadByUrl };
16
37
  //# sourceMappingURL=file.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sources":["../../src/utils/file.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;AAIG;AACI,MAAM,YAAY,GAAG,OAAO,IAAU,EAAE,QAAgB,KAAI;IACjE,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,OAAO;AAChB,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;IACrB,CAAC,CAAC,KAAK,EAAE;AACT,IAAA,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;AAC9B;;;;"}
1
+ {"version":3,"file":"file.js","sources":["../../src/utils/file.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AACI,MAAM,SAAS,GAAG,CAAC,IAAU,KAAI;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC7C,IAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE;AACxB;AAEA;;;;AAIG;AACI,MAAM,aAAa,GAAG,OAAO,GAAW,EAAE,QAAgB,KAAI;IACnE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;AACT,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9B;AAEA;;;;AAIG;AACI,MAAM,cAAc,GAAG,OAAO,IAAU,EAAE,QAAgB,KAAI;IACnE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;AACvC,IAAA,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC5B,IAAA,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;AACzB;;;;"}
@@ -2,16 +2,6 @@ export * from './dict';
2
2
  export * from './date';
3
3
  export * from './fullscreen';
4
4
  export * from './permissions';
5
- export * from './objectToFormData';
5
+ export * from './object';
6
6
  export * from './file';
7
- /**
8
- * Blob 转为 URL,有副作用
9
- * @param blob Blob 对象
10
- * @returns url:URL 对象
11
- * @returns revoke:URL 对象清理函数
12
- */
13
- export declare const blobToUrl: (blob: Blob) => {
14
- url: string;
15
- revoke: () => void;
16
- };
17
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,QAAQ,CAAA;AAEtB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI;;;CAInC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 深拷贝合并对象中已有的键值,排除 null、undefined
3
+ * @param target 赋值对象
4
+ * @param source 取值对象
5
+ * @returns 被赋值后的对象 target
6
+ */
7
+ export declare const objectMatchAssign: <T extends Record<string, any>>(target: T, source: Partial<T> | null | undefined) => T;
8
+ /**
9
+ * 对象转 FormData
10
+ * @param obj
11
+ * @param mapConfig 字段映射关系
12
+ * - key: 映射匹配字段
13
+ * - finallyKey: 最终请求的键名
14
+ * - valueKey: 最终请求的键值
15
+ * @returns FormData
16
+ * @example
17
+ * objectToFormData(obj, {
18
+ * newField: { finallyKey: 'originField', valueKey: 'uniqueFileName' }
19
+ * })
20
+ * 即最终请求中:键名为 originField,键值为 newField.uniqueFileName
21
+ */
22
+ export declare const objectToFormData: (obj: Record<string, unknown>, mapConfig: Record<string, {
23
+ finallyKey: string;
24
+ valueKey: string;
25
+ }>) => FormData;
26
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,QAAQ,CAAC,EACT,QAAQ,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,KACpC,CAyBF,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,WAAW,MAAM,CAAC,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,KAClE,QAgCF,CAAA"}
@@ -0,0 +1,82 @@
1
+ import { cloneDeep, has, isPlainObject, mergeWith } from 'lodash-es';
2
+
3
+ /**
4
+ * 深拷贝合并对象中已有的键值,排除 null、undefined
5
+ * @param target 赋值对象
6
+ * @param source 取值对象
7
+ * @returns 被赋值后的对象 target
8
+ */
9
+ const objectMatchAssign = (target, source) => {
10
+ if (!source) {
11
+ return cloneDeep(target);
12
+ }
13
+ const result = cloneDeep(target);
14
+ for (const key in target) {
15
+ if (!has(target, key))
16
+ continue;
17
+ const sourceVal = source[key];
18
+ if (sourceVal === null || sourceVal === undefined) {
19
+ continue;
20
+ }
21
+ const targetVal = target[key];
22
+ if (isPlainObject(targetVal) && isPlainObject(sourceVal)) {
23
+ result[key] = mergeWith(cloneDeep(targetVal), cloneDeep(sourceVal));
24
+ }
25
+ else {
26
+ result[key] = cloneDeep(sourceVal);
27
+ }
28
+ }
29
+ return result;
30
+ };
31
+ /**
32
+ * 对象转 FormData
33
+ * @param obj
34
+ * @param mapConfig 字段映射关系
35
+ * - key: 映射匹配字段
36
+ * - finallyKey: 最终请求的键名
37
+ * - valueKey: 最终请求的键值
38
+ * @returns FormData
39
+ * @example
40
+ * objectToFormData(obj, {
41
+ * newField: { finallyKey: 'originField', valueKey: 'uniqueFileName' }
42
+ * })
43
+ * 即最终请求中:键名为 originField,键值为 newField.uniqueFileName
44
+ */
45
+ const objectToFormData = (obj, mapConfig) => {
46
+ const formData = new FormData();
47
+ for (const key in obj) {
48
+ if (!Object.hasOwn(obj, key))
49
+ continue;
50
+ const value = obj[key];
51
+ if (Array.isArray(value)) {
52
+ value.forEach((arrayItem) => {
53
+ if (arrayItem instanceof File) {
54
+ // 当数组内匹配到了 File 类型数据,则直接按照当前键名存储 File
55
+ formData.append(key, arrayItem);
56
+ }
57
+ else if (key in mapConfig) {
58
+ // 当数组内匹配到了非 File 类型数据,则按照映射关系的 finallyKey 作为键名,valueKey 作为值
59
+ const { finallyKey, valueKey } = mapConfig[key];
60
+ formData.append(finallyKey, arrayItem[valueKey]);
61
+ }
62
+ else {
63
+ // 当数组内没有匹配到 File 类型数据,也不属于照映射关系内,则存储为 JSON 字符串
64
+ formData.append(key, JSON.stringify(arrayItem));
65
+ }
66
+ });
67
+ }
68
+ else if (value instanceof File) {
69
+ formData.append(key, value);
70
+ }
71
+ else if (typeof value === 'string') {
72
+ formData.append(key, value.trim());
73
+ }
74
+ else {
75
+ formData.append(key, JSON.stringify(value));
76
+ }
77
+ }
78
+ return formData;
79
+ };
80
+
81
+ export { objectMatchAssign, objectToFormData };
82
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sources":["../../src/utils/object.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;;;AAKG;MACU,iBAAiB,GAAG,CAC/B,MAAS,EACT,MAAqC,KAChC;IACL,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B;AAEA,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAEhC,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE;AAEvB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;QAC7B,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;YACjD;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;QAE7B,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE;AACxD,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACrE;aAAO;YACL,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC;QACpC;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;;;;;;;;;;;;AAaG;MACU,gBAAgB,GAAG,CAC9B,GAA4B,EAC5B,SAAmE,KACvD;AACZ,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAE/B,IAAA,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE;AAE9B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AAEtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC1B,gBAAA,IAAI,SAAS,YAAY,IAAI,EAAE;;AAE7B,oBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC;gBACjC;AAAO,qBAAA,IAAI,GAAG,IAAI,SAAS,EAAE;;oBAE3B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC;oBAC/C,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAClD;qBAAO;;AAEL,oBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACjD;AACF,YAAA,CAAC,CAAC;QACJ;AAAO,aAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AAChC,YAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;QAC7B;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACpC;aAAO;AACL,YAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7C;IACF;AAEA,IAAA,OAAO,QAAQ;AACjB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jnrs/shared",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "description": "巨能前端工程化开发,通用工具包,与框架无关的纯逻辑、类型、常量、工具函数,完全不依赖任何 UI 框架或运行时环境。",
5
5
  "keywords": [
6
6
  "jnrs",
@@ -1,17 +0,0 @@
1
- export { formatDateTime, formatWeekday, setDefaultLocale } from './date.js';
2
- import '../locales/i18next.js';
3
-
4
- /**
5
- * Blob 转为 URL,有副作用
6
- * @param blob Blob 对象
7
- * @returns url:URL 对象
8
- * @returns revoke:URL 对象清理函数
9
- */
10
- const blobToUrl = (blob) => {
11
- const url = URL.createObjectURL(blob);
12
- const revoke = () => URL.revokeObjectURL(url);
13
- return { url, revoke };
14
- };
15
-
16
- export { blobToUrl };
17
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/utils/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAOA;;;;;AAKG;AACI,MAAM,SAAS,GAAG,CAAC,IAAU,KAAI;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC7C,IAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE;AACxB;;;;"}
@@ -1,18 +0,0 @@
1
- /**
2
- * 对象转 FormData
3
- * @param obj
4
- * @param mapConfig 字段映射关系
5
- * - key: 映射字段
6
- * - finallyKey: 最终字段名
7
- * - valueKey: 映射字段对应的值
8
- * @returns FormData
9
- * @example
10
- * objectToFormData(obj, {
11
- * newField: { finallyKey: 'originField', valueKey: 'uniqueFileName' }
12
- * })
13
- */
14
- export declare const objectToFormData: (obj: Record<string, unknown>, mapConfig: Record<string, {
15
- finallyKey: string;
16
- valueKey: string;
17
- }>) => FormData;
18
- //# sourceMappingURL=objectToFormData.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"objectToFormData.d.ts","sourceRoot":"","sources":["../../src/utils/objectToFormData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,WAAW,MAAM,CAAC,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,KAClE,QA2BF,CAAA"}
@@ -1,46 +0,0 @@
1
- /**
2
- * 对象转 FormData
3
- * @param obj
4
- * @param mapConfig 字段映射关系
5
- * - key: 映射字段
6
- * - finallyKey: 最终字段名
7
- * - valueKey: 映射字段对应的值
8
- * @returns FormData
9
- * @example
10
- * objectToFormData(obj, {
11
- * newField: { finallyKey: 'originField', valueKey: 'uniqueFileName' }
12
- * })
13
- */
14
- const objectToFormData = (obj, mapConfig) => {
15
- const formData = new FormData();
16
- for (const key in obj) {
17
- if (!Object.hasOwn(obj, key))
18
- continue;
19
- const value = obj[key];
20
- if (Array.isArray(value)) {
21
- if (value.every((v) => v instanceof File)) {
22
- value.forEach((file) => formData.append(key, file));
23
- }
24
- else if (key in mapConfig) {
25
- const { finallyKey, valueKey } = mapConfig[key];
26
- value.forEach((item) => formData.append(finallyKey, item[valueKey]));
27
- }
28
- else {
29
- formData.append(key, JSON.stringify(value));
30
- }
31
- }
32
- else if (value instanceof File) {
33
- formData.append(key, value);
34
- }
35
- else if (typeof value === 'string') {
36
- formData.append(key, value.trim());
37
- }
38
- else {
39
- formData.append(key, JSON.stringify(value));
40
- }
41
- }
42
- return formData;
43
- };
44
-
45
- export { objectToFormData };
46
- //# sourceMappingURL=objectToFormData.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"objectToFormData.js","sources":["../../src/utils/objectToFormData.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;AAYG;MACU,gBAAgB,GAAG,CAC9B,GAA4B,EAC5B,SAAmE,KACvD;AACZ,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAE/B,IAAA,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE;AAE9B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AAEtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE;AACzC,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrD;AAAO,iBAAA,IAAI,GAAG,IAAI,SAAS,EAAE;gBAC3B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC;gBAC/C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtE;iBAAO;AACL,gBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7C;QACF;AAAO,aAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AAChC,YAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;QAC7B;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACpC;aAAO;AACL,YAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7C;IACF;AAEA,IAAA,OAAO,QAAQ;AACjB;;;;"}