@zwa73/utils 1.0.40 → 1.0.42

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.
@@ -76,7 +76,7 @@ export declare namespace UtilFT {
76
76
  /**搜索路径符合正则表达式的文件
77
77
  * @param folder - 文件夹路径
78
78
  * @param traitRegex - 正则表达式
79
- * @returns {Record<string, string>} 文件名与路径的映射
79
+ * @returns {Record<string, string>} 文件名与路径的映射 Record<fileName,filePath>
80
80
  */
81
81
  function fileSearch(folder: string, traitRegex: string): Record<string, string>;
82
82
  }
@@ -5,6 +5,7 @@ const fs = require("fs");
5
5
  const path = require("path");
6
6
  const UtilInterfaces_1 = require("./UtilInterfaces");
7
7
  const UtilLogger_1 = require("./UtilLogger");
8
+ const JSON5 = require("json5");
8
9
  /**文件工具 */
9
10
  var UtilFT;
10
11
  (function (UtilFT) {
@@ -121,7 +122,7 @@ var UtilFT;
121
122
  return def;
122
123
  return {};
123
124
  }
124
- return JSON.parse(str);
125
+ return JSON5.parse(str);
125
126
  }
126
127
  UtilFT.loadJSONFileSync = loadJSONFileSync;
127
128
  async function loadJSONFile(filePath, def) {
@@ -137,7 +138,7 @@ var UtilFT;
137
138
  return def;
138
139
  return {};
139
140
  }
140
- return JSON.parse(str);
141
+ return JSON5.parse(str);
141
142
  }
142
143
  UtilFT.loadJSONFile = loadJSONFile;
143
144
  /**写入JSON文件
@@ -167,7 +168,7 @@ var UtilFT;
167
168
  /**搜索路径符合正则表达式的文件
168
169
  * @param folder - 文件夹路径
169
170
  * @param traitRegex - 正则表达式
170
- * @returns {Record<string, string>} 文件名与路径的映射
171
+ * @returns {Record<string, string>} 文件名与路径的映射 Record<fileName,filePath>
171
172
  */
172
173
  function fileSearch(folder, traitRegex) {
173
174
  let outMap = {};
@@ -1,23 +1,25 @@
1
+ /**可以序列化为JSON文件的对象 */
1
2
  export type JToken = JObject | JArray | JValue | IJData;
2
- export type JValue = number | string | boolean | null;
3
+ /**在stringify输出时 undefine 会被转为 null */
4
+ export type JValue = number | string | boolean | null | undefined;
5
+ /**在stringify输出时 值为 undefine 的成员会被转为 null */
3
6
  export type JArray = Array<JToken>;
4
- /**可以序列化为JSON文件的Object*/
7
+ /**在stringify输出时 值为 undefine 的键会被忽略 */
5
8
  export type JObject = {
6
9
  [key: string]: JToken;
7
10
  };
8
- /**可以保存为JToken的类
9
- */
11
+ /**可以保存为JToken的类 */
10
12
  export interface IJData {
11
13
  /**保存为JToken
12
14
  */
13
15
  toJSON(): JToken;
14
16
  }
15
17
  /**将JToken转换为字符串
16
- * @param {JToken} token - 待转换的Token
18
+ * @param {JToken|IJData} token - 待转换的Token
17
19
  * @param {string|number|null} space - 插入的空格 数字为空格数量 默认为制表符\t
18
20
  * @returns 转换完成的字符串
19
21
  */
20
- export declare function stringifyJToken(token: JToken, space?: string | number | null | undefined): string;
22
+ export declare function stringifyJToken(token: JToken | IJData, space?: string | number | null | undefined): string;
21
23
  /**转为可写的 */
22
24
  export type Writeable<T> = {
23
25
  -readonly [P in keyof T]: T[P];
@@ -28,3 +30,28 @@ export type Inverted<T extends Record<keyof T, string | number | symbol>> = {
28
30
  };
29
31
  /**N长度 T类型的元组 */
30
32
  export type FixedLengthTuple<T, N extends number, R extends unknown[] = []> = R['length'] extends N ? R : FixedLengthTuple<T, N, [T, ...R]>;
33
+ /**不影响智能补全的任意字符串
34
+ * (string&Object)
35
+ * (string&String)
36
+ */
37
+ export type AnyString = (string & {});
38
+ /**创建一个新的类型,这个新的类型包含了基础类型 B 的所有属性,
39
+ * 以及一个名为 K[N] 类型为 T 的新属性。
40
+ * 所有 K 中非 K[N] 的其他属性都是可选的并且不能被赋值(因为它们的类型是 never)。
41
+ */
42
+ type ExclusiveSub<B, T, K extends string[], N extends number> = B & {
43
+ [P in K[N]]: T;
44
+ } & {
45
+ [P in Exclude<K[number], K[N]>]?: never;
46
+ };
47
+ /**递归地创建一个元组类型, 所有成员类型都有一个 K[number] 键 并且与其他成员互斥
48
+ * 这个元组类型的每个元素都是通过 ExclusiveSub 类型创建的。
49
+ */
50
+ type ExclusiveRecursive<B, T, K extends string[], R extends unknown[] = []> = R['length'] extends K['length'] ? R : ExclusiveRecursive<B, T, K, [ExclusiveSub<B, T, K, R['length']>, ...R]>;
51
+ /**互斥表
52
+ * 从 ExclusiveRecursive 类型创建的元组中创建一个或类型, 可以是任意一个元组元素类型
53
+ */
54
+ export type ExclusiveRecord<B, T, K extends string[], TMP = ExclusiveRecursive<B, T, K>> = TMP[keyof TMP];
55
+ /**符合JObject约束的互斥表 */
56
+ export type ExclusiveJObject<B extends JObject, T extends JToken, K extends string[], TMP extends JArray = ExclusiveRecursive<B, T, K>> = TMP[number];
57
+ export {};
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stringifyJToken = void 0;
4
4
  /**将JToken转换为字符串
5
- * @param {JToken} token - 待转换的Token
5
+ * @param {JToken|IJData} token - 待转换的Token
6
6
  * @param {string|number|null} space - 插入的空格 数字为空格数量 默认为制表符\t
7
7
  * @returns 转换完成的字符串
8
8
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zwa73/utils",
3
- "version": "1.0.40",
3
+ "version": "1.0.42",
4
4
  "description": "my utils",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -19,6 +19,7 @@
19
19
  "html-entities": "^2.3.3",
20
20
  "http-proxy-agent": "^5.0.0",
21
21
  "https-proxy-agent": "^5.0.1",
22
+ "json5": "^2.2.3",
22
23
  "tiktoken": "^1.0.7",
23
24
  "winston": "^3.10.0",
24
25
  "winston-daily-rotate-file": "^4.7.1"
@@ -2,6 +2,7 @@ import * as fs from "fs";
2
2
  import * as path from "path";
3
3
  import { JObject, JToken, stringifyJToken } from "./UtilInterfaces";
4
4
  import { SLogger } from "./UtilLogger";
5
+ import * as JSON5 from 'json5';
5
6
 
6
7
  /**文件工具 */
7
8
  export namespace UtilFT{
@@ -134,7 +135,7 @@ export function loadJSONFileSync<T extends JToken>(filePath: string,def?: T): T
134
135
  return def;
135
136
  return {} as T;
136
137
  }
137
- return JSON.parse(str);
138
+ return JSON5.parse(str);
138
139
  }
139
140
 
140
141
  /**加载json文件 异步
@@ -167,7 +168,7 @@ export async function loadJSONFile<T extends JToken>(filePath: string,def?: T):
167
168
  return def;
168
169
  return {} as T;
169
170
  }
170
- return JSON.parse(str);
171
+ return JSON5.parse(str);
171
172
  }
172
173
 
173
174
  /**写入JSON文件
@@ -200,7 +201,7 @@ export async function writeJSONFile(
200
201
  /**搜索路径符合正则表达式的文件
201
202
  * @param folder - 文件夹路径
202
203
  * @param traitRegex - 正则表达式
203
- * @returns {Record<string, string>} 文件名与路径的映射
204
+ * @returns {Record<string, string>} 文件名与路径的映射 Record<fileName,filePath>
204
205
  */
205
206
  export function fileSearch(folder: string, traitRegex: string) {
206
207
  let outMap: Record<string, string> = {};
@@ -1,24 +1,27 @@
1
1
 
2
+
3
+ /**可以序列化为JSON文件的对象 */
2
4
  export type JToken = JObject|JArray|JValue|IJData;
3
- export type JValue = number|string|boolean|null;
5
+ /**在stringify输出时 undefine 会被转为 null */
6
+ export type JValue = number|string|boolean|null|undefined;
7
+ /**在stringify输出时 值为 undefine 的成员会被转为 null */
4
8
  export type JArray = Array<JToken>;
5
- /**可以序列化为JSON文件的Object*/
9
+ /**在stringify输出时 值为 undefine 的键会被忽略 */
6
10
  export type JObject = {
7
11
  [key:string]:JToken;
8
12
  }
9
- /**可以保存为JToken的类
10
- */
13
+ /**可以保存为JToken的类 */
11
14
  export interface IJData{
12
15
  /**保存为JToken
13
16
  */
14
17
  toJSON():JToken;
15
18
  }
16
19
  /**将JToken转换为字符串
17
- * @param {JToken} token - 待转换的Token
20
+ * @param {JToken|IJData} token - 待转换的Token
18
21
  * @param {string|number|null} space - 插入的空格 数字为空格数量 默认为制表符\t
19
22
  * @returns 转换完成的字符串
20
23
  */
21
- export function stringifyJToken(token:JToken,space:string|number|null|undefined="\t"){
24
+ export function stringifyJToken(token:JToken|IJData,space:string|number|null|undefined="\t"){
22
25
  if(space==null)
23
26
  space=undefined;
24
27
  return JSON.stringify(token,null,space);
@@ -36,3 +39,34 @@ export type Inverted<T extends Record<keyof T, string | number | symbol>> = {
36
39
  export type FixedLengthTuple<T, N extends number, R extends unknown[] = []> =
37
40
  R['length'] extends N ? R : FixedLengthTuple<T, N, [T, ...R]>;
38
41
 
42
+
43
+ /**不影响智能补全的任意字符串
44
+ * (string&Object)
45
+ * (string&String)
46
+ */
47
+ export type AnyString = (string&{});
48
+
49
+
50
+
51
+ /**创建一个新的类型,这个新的类型包含了基础类型 B 的所有属性,
52
+ * 以及一个名为 K[N] 类型为 T 的新属性。
53
+ * 所有 K 中非 K[N] 的其他属性都是可选的并且不能被赋值(因为它们的类型是 never)。
54
+ */
55
+ type ExclusiveSub<B, T, K extends string[], N extends number> =
56
+ B & { [P in K[N]]: T } & { [P in Exclude<K[number], K[N]>]?: never };
57
+
58
+ /**递归地创建一个元组类型, 所有成员类型都有一个 K[number] 键 并且与其他成员互斥
59
+ * 这个元组类型的每个元素都是通过 ExclusiveSub 类型创建的。
60
+ */
61
+ type ExclusiveRecursive<B, T, K extends string[], R extends unknown[] = []> =
62
+ R['length'] extends K['length'] ? R
63
+ : ExclusiveRecursive<B, T, K, [ExclusiveSub<B, T, K, R['length']>, ...R]>;
64
+
65
+ /**互斥表
66
+ * 从 ExclusiveRecursive 类型创建的元组中创建一个或类型, 可以是任意一个元组元素类型
67
+ */
68
+ export type ExclusiveRecord<B, T, K extends string[], TMP = ExclusiveRecursive<B, T, K>> = TMP[keyof TMP];
69
+
70
+ /**符合JObject约束的互斥表 */
71
+ export type ExclusiveJObject<B extends JObject,T extends JToken,K extends string[],
72
+ TMP extends JArray = ExclusiveRecursive<B,T,K>> = TMP[number];