@wener/common 2.0.5 → 2.0.6

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.
Files changed (206) hide show
  1. package/lib/ai/qwen3vl/index.js +1 -1
  2. package/lib/ai/qwen3vl/utils.js +15 -15
  3. package/lib/ai/vision/DocLayoutElementTypeSchema.js +22 -22
  4. package/lib/ai/vision/ImageAnnotationSchema.js +63 -47
  5. package/lib/ai/vision/index.js +2 -2
  6. package/lib/ai/vision/resolveImageAnnotation.js +81 -95
  7. package/lib/cn/ChineseResidentIdNo.js +55 -41
  8. package/lib/cn/ChineseResidentIdNo.mod.js +6 -1
  9. package/lib/cn/ChineseResidentIdNo.test.js +22 -21
  10. package/lib/cn/DivisionCode.js +220 -235
  11. package/lib/cn/DivisionCode.mod.js +6 -1
  12. package/lib/cn/DivisionCode.test.js +92 -121
  13. package/lib/cn/Mod11.js +18 -37
  14. package/lib/cn/Mod31.js +23 -41
  15. package/lib/cn/UnifiedSocialCreditCode.js +143 -137
  16. package/lib/cn/UnifiedSocialCreditCode.mod.js +6 -1
  17. package/lib/cn/UnifiedSocialCreditCode.test.js +21 -15
  18. package/lib/cn/formatChineseAmount.js +46 -71
  19. package/lib/cn/index.js +6 -6
  20. package/lib/cn/mod.js +5 -3
  21. package/lib/cn/parseChineseNumber.js +81 -85
  22. package/lib/cn/parseChineseNumber.test.js +183 -261
  23. package/lib/cn/pinyin/cartesianProduct.js +19 -19
  24. package/lib/cn/pinyin/cartesianProduct.test.js +78 -178
  25. package/lib/cn/pinyin/loader.js +13 -11
  26. package/lib/cn/pinyin/preload.js +2 -1
  27. package/lib/cn/pinyin/toPinyin.test.js +149 -161
  28. package/lib/cn/pinyin/toPinyinPure.js +28 -23
  29. package/lib/cn/pinyin/transform.js +11 -11
  30. package/lib/cn/types.d.js +2 -2
  31. package/lib/consola/createStandardConsolaReporter.js +14 -15
  32. package/lib/consola/formatLogObject.js +149 -133
  33. package/lib/consola/formatLogObject.test.js +167 -178
  34. package/lib/consola/index.js +2 -2
  35. package/lib/data/formatSort.js +14 -12
  36. package/lib/data/formatSort.test.js +33 -33
  37. package/lib/data/index.js +3 -3
  38. package/lib/data/maybeNumber.js +23 -23
  39. package/lib/data/parseSort.js +75 -68
  40. package/lib/data/parseSort.test.js +196 -187
  41. package/lib/data/resolvePagination.js +38 -39
  42. package/lib/data/resolvePagination.test.js +228 -218
  43. package/lib/data/types.d.js +2 -2
  44. package/lib/dayjs/dayjs.js +20 -20
  45. package/lib/dayjs/formatDuration.js +56 -56
  46. package/lib/dayjs/formatDuration.test.js +63 -77
  47. package/lib/dayjs/index.js +4 -4
  48. package/lib/dayjs/parseDuration.js +21 -26
  49. package/lib/dayjs/parseRelativeTime.js +65 -66
  50. package/lib/dayjs/parseRelativeTime.test.js +227 -243
  51. package/lib/dayjs/resolveRelativeTime.js +73 -72
  52. package/lib/dayjs/resolveRelativeTime.test.js +296 -307
  53. package/lib/decimal/index.js +1 -1
  54. package/lib/decimal/parseDecimal.js +12 -12
  55. package/lib/drain3/Drain.js +303 -338
  56. package/lib/drain3/LogCluster.js +25 -25
  57. package/lib/drain3/Node.js +24 -24
  58. package/lib/drain3/TemplateMiner.js +197 -196
  59. package/lib/drain3/index.js +5 -5
  60. package/lib/drain3/persistence/FilePersistence.js +19 -19
  61. package/lib/drain3/persistence/MemoryPersistence.js +8 -8
  62. package/lib/drain3/persistence/PersistenceHandler.js +2 -2
  63. package/lib/drain3/types.js +2 -2
  64. package/lib/emittery/emitter.js +7 -7
  65. package/lib/emittery/index.js +1 -1
  66. package/lib/foundation/schema/SexType.js +15 -12
  67. package/lib/foundation/schema/index.js +1 -1
  68. package/lib/foundation/schema/parseSexType.js +15 -16
  69. package/lib/foundation/schema/types.js +8 -6
  70. package/lib/fs/FileSystemError.js +18 -18
  71. package/lib/fs/IFileSystem.d.js +2 -2
  72. package/lib/fs/MemoryFileSystem.test.js +172 -181
  73. package/lib/fs/createBrowserFileSystem.js +222 -235
  74. package/lib/fs/createMemoryFileSystem.js +472 -510
  75. package/lib/fs/createSandboxFileSystem.js +102 -101
  76. package/lib/fs/createWebDavFileSystem.js +162 -149
  77. package/lib/fs/createWebFileSystem.js +197 -220
  78. package/lib/fs/findMimeType.js +14 -14
  79. package/lib/fs/index.js +7 -7
  80. package/lib/fs/minio/createMinioFileSystem.js +959 -956
  81. package/lib/fs/minio/index.js +1 -1
  82. package/lib/fs/orpc/FileSystemContract.js +57 -57
  83. package/lib/fs/orpc/createContractClientFileSystem.js +88 -88
  84. package/lib/fs/orpc/index.js +2 -2
  85. package/lib/fs/orpc/server/createFileSystemContractImpl.js +62 -60
  86. package/lib/fs/orpc/server/index.js +1 -1
  87. package/lib/fs/s3/createS3MiniFileSystem.js +756 -737
  88. package/lib/fs/s3/index.js +1 -1
  89. package/lib/fs/s3/s3mini.test.js +524 -553
  90. package/lib/fs/scandir.js +56 -56
  91. package/lib/fs/server/createDatabaseFileSystem.js +834 -741
  92. package/lib/fs/server/createNodeFileSystem.js +407 -405
  93. package/lib/fs/server/dbfs.test.js +201 -214
  94. package/lib/fs/server/index.js +1 -1
  95. package/lib/fs/server/loadTestDatabase.js +40 -43
  96. package/lib/fs/tests/runFileSystemTest.js +352 -316
  97. package/lib/fs/types.js +17 -20
  98. package/lib/fs/utils/getFileUrl.js +24 -30
  99. package/lib/fs/utils.js +17 -17
  100. package/lib/fs/webdav/index.js +1 -1
  101. package/lib/index.js +2 -2
  102. package/lib/jsonschema/JsonSchema.js +216 -155
  103. package/lib/jsonschema/JsonSchema.test.js +123 -124
  104. package/lib/jsonschema/forEachJsonSchema.js +41 -41
  105. package/lib/jsonschema/index.js +2 -2
  106. package/lib/jsonschema/types.d.js +2 -2
  107. package/lib/meta/defineFileType.js +32 -38
  108. package/lib/meta/defineInit.js +39 -35
  109. package/lib/meta/defineMetadata.js +37 -34
  110. package/lib/meta/defineMetadata.test.js +13 -12
  111. package/lib/meta/index.js +3 -3
  112. package/lib/orpc/createOpenApiContractClient.js +26 -24
  113. package/lib/orpc/createRpcContractClient.js +37 -31
  114. package/lib/orpc/index.js +2 -2
  115. package/lib/orpc/resolveLinkPlugins.js +25 -25
  116. package/lib/password/PHC.js +187 -189
  117. package/lib/password/PHC.test.js +517 -535
  118. package/lib/password/Password.js +85 -80
  119. package/lib/password/Password.test.js +330 -364
  120. package/lib/password/createArgon2PasswordAlgorithm.js +50 -51
  121. package/lib/password/createBase64PasswordAlgorithm.js +11 -11
  122. package/lib/password/createBcryptPasswordAlgorithm.js +20 -18
  123. package/lib/password/createPBKDF2PasswordAlgorithm.js +65 -52
  124. package/lib/password/createScryptPasswordAlgorithm.js +74 -63
  125. package/lib/password/index.js +5 -5
  126. package/lib/password/server/index.js +1 -1
  127. package/lib/resource/Identifiable.js +2 -2
  128. package/lib/resource/ListQuery.js +42 -42
  129. package/lib/resource/getTitleOfResource.js +5 -5
  130. package/lib/resource/index.js +2 -2
  131. package/lib/resource/schema/AnyResourceSchema.js +91 -89
  132. package/lib/resource/schema/BaseResourceSchema.js +26 -26
  133. package/lib/resource/schema/ResourceActionType.js +117 -115
  134. package/lib/resource/schema/ResourceStatus.js +94 -92
  135. package/lib/resource/schema/ResourceType.js +25 -23
  136. package/lib/resource/schema/index.js +5 -5
  137. package/lib/resource/schema/types.js +86 -55
  138. package/lib/resource/schema/types.test.js +16 -13
  139. package/lib/s3/formatS3Url.js +60 -60
  140. package/lib/s3/formatS3Url.test.js +238 -261
  141. package/lib/s3/index.js +2 -2
  142. package/lib/s3/parseS3Url.js +61 -60
  143. package/lib/s3/parseS3Url.test.js +270 -269
  144. package/lib/schema/SchemaRegistry.js +41 -42
  145. package/lib/schema/SchemaRegistry.mod.js +1 -1
  146. package/lib/schema/TypeSchema.d.js +2 -2
  147. package/lib/schema/createSchemaData.js +113 -67
  148. package/lib/schema/findJsonSchemaByPath.js +28 -23
  149. package/lib/schema/formatZodError.js +112 -131
  150. package/lib/schema/formatZodError.test.js +192 -195
  151. package/lib/schema/getSchemaCache.js +7 -7
  152. package/lib/schema/getSchemaOptions.js +17 -16
  153. package/lib/schema/index.js +6 -6
  154. package/lib/schema/toJsonSchema.js +195 -189
  155. package/lib/schema/toJsonSchema.test.js +34 -26
  156. package/lib/schema/validate.js +105 -96
  157. package/lib/tools/generateSchema.js +40 -40
  158. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +74 -74
  159. package/lib/utils/buildBaseUrl.js +8 -8
  160. package/lib/utils/buildRedactorFormSchema.js +54 -53
  161. package/lib/utils/getEstimateProcessTime.js +24 -19
  162. package/lib/utils/index.js +3 -3
  163. package/lib/utils/resolveFeatureOptions.js +9 -9
  164. package/package.json +14 -14
  165. package/src/ai/vision/index.ts +2 -2
  166. package/src/cn/index.ts +1 -2
  167. package/src/consola/index.ts +1 -1
  168. package/src/data/index.ts +3 -4
  169. package/src/data/resolvePagination.ts +2 -2
  170. package/src/dayjs/formatDuration.ts +8 -9
  171. package/src/dayjs/index.ts +1 -1
  172. package/src/dayjs/parseRelativeTime.ts +1 -1
  173. package/src/dayjs/resolveRelativeTime.ts +1 -1
  174. package/src/drain3/Drain.test.ts +2 -2
  175. package/src/drain3/index.ts +2 -4
  176. package/src/fs/createWebDavFileSystem.ts +2 -7
  177. package/src/fs/createWebFileSystem.ts +1 -1
  178. package/src/fs/index.ts +4 -4
  179. package/src/fs/minio/createMinioFileSystem.ts +2 -2
  180. package/src/fs/minio/index.ts +1 -1
  181. package/src/fs/s3/createS3MiniFileSystem.ts +1 -1
  182. package/src/fs/server/createDatabaseFileSystem.ts +84 -120
  183. package/src/fs/server/dbfs.test.ts +14 -10
  184. package/src/fs/server/index.ts +1 -0
  185. package/src/fs/server/loadTestDatabase.ts +8 -119
  186. package/src/jsonschema/index.ts +1 -1
  187. package/src/meta/index.ts +2 -3
  188. package/src/orm/createSqliteDialect.ts +17 -0
  189. package/src/orm/index.ts +1 -0
  190. package/src/orpc/createOpenApiContractClient.ts +1 -1
  191. package/src/orpc/index.ts +1 -1
  192. package/src/password/createArgon2PasswordAlgorithm.ts +1 -1
  193. package/src/password/index.ts +2 -2
  194. package/src/resource/index.ts +3 -3
  195. package/src/resource/schema/index.ts +4 -4
  196. package/src/s3/index.ts +1 -1
  197. package/src/schema/SchemaRegistry.ts +1 -1
  198. package/src/schema/createSchemaData.ts +1 -1
  199. package/src/schema/findJsonSchemaByPath.ts +1 -1
  200. package/src/schema/index.ts +5 -5
  201. package/src/schema/validate.ts +1 -1
  202. package/src/utils/buildRedactorFormSchema.ts +1 -1
  203. package/src/utils/formatNumber.ts +18 -0
  204. package/src/utils/formatPercent.ts +17 -0
  205. package/src/utils/index.ts +3 -3
  206. package/src/utils/resolveFeatureOptions.ts +1 -1
@@ -1,112 +1,121 @@
1
- import { Kind as TypeBoxKind } from "@sinclair/typebox";
2
- import "@sinclair/typebox";
3
- import { TypeCompiler } from "@sinclair/typebox/compiler";
4
- import { ifPresent } from "@wener/utils";
5
- import { Ajv } from "ajv";
6
- import addFormats from "ajv-formats";
1
+ import { Kind as TypeBoxKind } from '@sinclair/typebox';
2
+ import '@sinclair/typebox';
3
+ import { TypeCompiler } from '@sinclair/typebox/compiler';
4
+ import { ifPresent } from '@wener/utils';
5
+ import { Ajv } from 'ajv';
6
+ import addFormats from 'ajv-formats';
7
7
  /*
8
8
  https://github.com/react-hook-form/resolvers
9
9
  https://github.com/decs/typeschema/tree/main/packages
10
10
  */ export function validate(schema, data) {
11
- if (isZodSchema(schema)) {
12
- const result = schema.safeParse(data);
13
- if (result.success) {
14
- return {
15
- success: true,
16
- data: result.data
17
- };
18
- }
19
- return {
20
- issues: result.error.issues.map(({ message, path, code })=>({
21
- message,
22
- path,
23
- code
24
- })),
25
- // message: z.prettifyError(result.error),
26
- success: false
27
- };
28
- }
29
- if (isTypeBoxSchema(schema)) {
30
- const checker = TypeCompiler.Compile(schema);
31
- if (checker.Check(data)) {
32
- return {
33
- success: true,
34
- data: data
35
- };
36
- }
37
- return {
38
- issues: Array.from(checker.Errors(data)).map(({ message, path })=>{
39
- return {
40
- message,
41
- path: [
42
- path
43
- ]
44
- };
45
- }),
46
- // message: '',
47
- success: false
48
- };
49
- }
50
- if (isJsonSchema(schema)) {
51
- const ajv = new Ajv({
52
- allErrors: true,
53
- validateSchema: true
54
- });
55
- addFormats(ajv);
56
- const validator = ajv.compile(schema);
57
- if (validator(data)) {
58
- return {
59
- data: data,
60
- success: true
61
- };
62
- }
63
- const issues = validator.errors?.map((error)=>{
64
- const message = error.message || 'Unknown error';
65
- const path = error.instancePath.split('/').filter(Boolean).map((p)=>p);
66
- return {
67
- message,
68
- path
69
- };
70
- }) || [];
71
- return {
72
- success: false,
73
- // message: 'Invalid data',
74
- issues
75
- };
76
- }
77
- return {
78
- success: false,
79
- // message: 'Invalid schema',
80
- issues: [
81
- {
82
- message: 'Unknown schema type'
83
- }
84
- ]
85
- };
11
+ if (isZodSchema(schema)) {
12
+ const result = schema.safeParse(data);
13
+ if (result.success) {
14
+ return {
15
+ success: true,
16
+ data: result.data,
17
+ };
18
+ }
19
+ return {
20
+ issues: result.error.issues.map(({ message, path, code }) => ({
21
+ message,
22
+ path,
23
+ code,
24
+ })),
25
+ // message: z.prettifyError(result.error),
26
+ success: false,
27
+ };
28
+ }
29
+ if (isTypeBoxSchema(schema)) {
30
+ const checker = TypeCompiler.Compile(schema);
31
+ if (checker.Check(data)) {
32
+ return {
33
+ success: true,
34
+ data: data,
35
+ };
36
+ }
37
+ return {
38
+ issues: Array.from(checker.Errors(data)).map(({ message, path }) => {
39
+ return {
40
+ message,
41
+ path: [path],
42
+ };
43
+ }),
44
+ // message: '',
45
+ success: false,
46
+ };
47
+ }
48
+ if (isJsonSchema(schema)) {
49
+ const ajv = new Ajv({
50
+ allErrors: true,
51
+ validateSchema: true,
52
+ });
53
+ addFormats(ajv);
54
+ const validator = ajv.compile(schema);
55
+ if (validator(data)) {
56
+ return {
57
+ data: data,
58
+ success: true,
59
+ };
60
+ }
61
+ const issues =
62
+ validator.errors?.map((error) => {
63
+ const message = error.message || 'Unknown error';
64
+ const path = error.instancePath
65
+ .split('/')
66
+ .filter(Boolean)
67
+ .map((p) => p);
68
+ return {
69
+ message,
70
+ path,
71
+ };
72
+ }) || [];
73
+ return {
74
+ success: false,
75
+ // message: 'Invalid data',
76
+ issues,
77
+ };
78
+ }
79
+ return {
80
+ success: false,
81
+ // message: 'Invalid schema',
82
+ issues: [
83
+ {
84
+ message: 'Unknown schema type',
85
+ },
86
+ ],
87
+ };
86
88
  }
87
89
  export function parseData(schema, data) {
88
- let result = validate(schema, data);
89
- if (result.success) {
90
- return result.data;
91
- }
92
- throw Object.assign(new Error(result.issues.map((v)=>{
93
- return `${ifPresent(v.path?.join(), (v)=>`[${v}]`)}: ${v.message}`;
94
- }).join('; ')), {
95
- issues: result.issues
96
- });
90
+ let result = validate(schema, data);
91
+ if (result.success) {
92
+ return result.data;
93
+ }
94
+ throw Object.assign(
95
+ new Error(
96
+ result.issues
97
+ .map((v) => {
98
+ return `${ifPresent(v.path?.join(), (v) => `[${v}]`)}: ${v.message}`;
99
+ })
100
+ .join('; '),
101
+ ),
102
+ {
103
+ issues: result.issues,
104
+ },
105
+ );
97
106
  }
98
107
  function _formatIssues(_schema, _issues) {
99
- return '';
108
+ return '';
100
109
  }
101
110
  export function isZodSchema(schema) {
102
- return typeof schema === 'object' && 'parse' in schema;
111
+ return typeof schema === 'object' && 'parse' in schema;
103
112
  }
104
113
  export function isTypeBoxSchema(schema) {
105
- return typeof schema === 'object' && TypeBoxKind in schema;
114
+ return typeof schema === 'object' && TypeBoxKind in schema;
106
115
  }
107
116
  export function isJsonSchema(schema) {
108
- let sc = schema;
109
- return typeof schema === 'object' && Boolean(sc.type || sc.properties || sc.anyOf || sc.oneOf || sc.$ref || sc.items);
117
+ let sc = schema;
118
+ return typeof schema === 'object' && Boolean(sc.type || sc.properties || sc.anyOf || sc.oneOf || sc.$ref || sc.items);
110
119
  }
111
120
 
112
- //# sourceMappingURL=validate.js.map
121
+ //# sourceMappingURL=validate.js.map
@@ -1,43 +1,43 @@
1
- import { exec } from "node:child_process";
2
- import fs from "node:fs/promises";
3
- import path from "node:path";
4
- import * as Codegen from "@sinclair/typebox-codegen";
1
+ import { exec } from 'node:child_process';
2
+ import fs from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import * as Codegen from '@sinclair/typebox-codegen';
5
5
  export async function generateSchema({ file, dir = path.dirname(file) }) {
6
- const fn = path.basename(file).replace(/\.d\.ts$/, '.ts');
7
- const types = await fs.readFile(file, 'utf-8');
8
- const typeboxDir = path.join(dir, 'typebox');
9
- const zodDir = path.join(dir, 'zod');
10
- await fs.mkdir(typeboxDir, {
11
- recursive: true
12
- });
13
- await fs.mkdir(zodDir, {
14
- recursive: true
15
- });
16
- const typeBoxFile = path.join(typeboxDir, fn);
17
- const zodFile = path.join(zodDir, fn);
18
- {
19
- // avoid import type error
20
- let out = Codegen.TypeScriptToTypeBox.Generate(types);
21
- out = out.replace(/^import \{ Type, Static\b/, `import { Type, type Static`);
22
- await fs.writeFile(typeBoxFile, out);
23
- }
24
- const model = Codegen.TypeScriptToModel.Generate(types);
25
- await fs.writeFile(zodFile, Codegen.ModelToZod.Generate(model));
26
- await new Promise((resolve, reject)=>{
27
- exec(`pnpm prettier --write "${dir}/{typebox,zod}/*.ts"`, (error, stdout, stderr)=>{
28
- if (error) {
29
- console.error(`exec error: ${error}`);
30
- reject(error);
31
- return;
32
- }
33
- resolve({
34
- stderr,
35
- stdout
36
- });
37
- stdout && console.log(`prettier:stdout: ${stdout}`);
38
- stderr && console.error(`prettier:stderr: ${stderr}`);
39
- });
40
- });
6
+ const fn = path.basename(file).replace(/\.d\.ts$/, '.ts');
7
+ const types = await fs.readFile(file, 'utf-8');
8
+ const typeboxDir = path.join(dir, 'typebox');
9
+ const zodDir = path.join(dir, 'zod');
10
+ await fs.mkdir(typeboxDir, {
11
+ recursive: true,
12
+ });
13
+ await fs.mkdir(zodDir, {
14
+ recursive: true,
15
+ });
16
+ const typeBoxFile = path.join(typeboxDir, fn);
17
+ const zodFile = path.join(zodDir, fn);
18
+ {
19
+ // avoid import type error
20
+ let out = Codegen.TypeScriptToTypeBox.Generate(types);
21
+ out = out.replace(/^import \{ Type, Static\b/, `import { Type, type Static`);
22
+ await fs.writeFile(typeBoxFile, out);
23
+ }
24
+ const model = Codegen.TypeScriptToModel.Generate(types);
25
+ await fs.writeFile(zodFile, Codegen.ModelToZod.Generate(model));
26
+ await new Promise((resolve, reject) => {
27
+ exec(`pnpm prettier --write "${dir}/{typebox,zod}/*.ts"`, (error, stdout, stderr) => {
28
+ if (error) {
29
+ console.error(`exec error: ${error}`);
30
+ reject(error);
31
+ return;
32
+ }
33
+ resolve({
34
+ stderr,
35
+ stdout,
36
+ });
37
+ stdout && console.log(`prettier:stdout: ${stdout}`);
38
+ stderr && console.error(`prettier:stderr: ${stderr}`);
39
+ });
40
+ });
41
41
  }
42
42
 
43
- //# sourceMappingURL=generateSchema.js.map
43
+ //# sourceMappingURL=generateSchema.js.map
@@ -1,85 +1,85 @@
1
1
  export function renderJsonSchemaToMarkdownDoc(rootSchema) {
2
- // markdown
3
- const out = [];
4
- const all = new Set();
5
- const pending = [];
6
- const addObject = (o)=>{
7
- if (all.has(o.$id)) {
8
- return;
9
- }
10
- all.add(o.$id);
11
- pending.push(o);
12
- };
13
- const writeObjectProps = (T, { prefix = '' } = {})=>{
14
- if (!T?.properties) {
15
- return;
16
- }
17
- for (const [name, schema] of Object.entries(T.properties)){
18
- let typ = schema.$id || schema.type;
19
- if (typ === 'array') {
20
- typ = `${schema.items.$id || schema.items.type}[]`;
21
- if (schema.items.$id) {
22
- addObject(schema.items);
23
- }
24
- } else if (schema.$id) {
25
- addObject(schema);
26
- }
27
- if (!typ) {
28
- if ('anyOf' in schema) {
29
- typ = 'enum';
30
- }
31
- }
32
- out.push(`| ${prefix}${name} | ${typ} | ${schema.title || schema.description || ''} |`);
33
- if (typ === 'object') {
34
- writeObjectProps(schema, {
35
- prefix: `${prefix}${name}.`
36
- });
37
- } else if (schema.type === 'array') {
38
- if (schema.items.type === 'object' && !schema.items.$id) {
39
- writeObjectProps(schema.items, {
40
- prefix: `${prefix}${name}[].`
41
- });
42
- }
43
- }
44
- }
45
- };
46
- const writeObject = (T)=>{
47
- out.push(`### ${T.title || T.$id}`);
48
- out.push(`
2
+ // markdown
3
+ const out = [];
4
+ const all = new Set();
5
+ const pending = [];
6
+ const addObject = (o) => {
7
+ if (all.has(o.$id)) {
8
+ return;
9
+ }
10
+ all.add(o.$id);
11
+ pending.push(o);
12
+ };
13
+ const writeObjectProps = (T, { prefix = '' } = {}) => {
14
+ if (!T?.properties) {
15
+ return;
16
+ }
17
+ for (const [name, schema] of Object.entries(T.properties)) {
18
+ let typ = schema.$id || schema.type;
19
+ if (typ === 'array') {
20
+ typ = `${schema.items.$id || schema.items.type}[]`;
21
+ if (schema.items.$id) {
22
+ addObject(schema.items);
23
+ }
24
+ } else if (schema.$id) {
25
+ addObject(schema);
26
+ }
27
+ if (!typ) {
28
+ if ('anyOf' in schema) {
29
+ typ = 'enum';
30
+ }
31
+ }
32
+ out.push(`| ${prefix}${name} | ${typ} | ${schema.title || schema.description || ''} |`);
33
+ if (typ === 'object') {
34
+ writeObjectProps(schema, {
35
+ prefix: `${prefix}${name}.`,
36
+ });
37
+ } else if (schema.type === 'array') {
38
+ if (schema.items.type === 'object' && !schema.items.$id) {
39
+ writeObjectProps(schema.items, {
40
+ prefix: `${prefix}${name}[].`,
41
+ });
42
+ }
43
+ }
44
+ }
45
+ };
46
+ const writeObject = (T) => {
47
+ out.push(`### ${T.title || T.$id}`);
48
+ out.push(`
49
49
  | $id | 名字 |
50
50
  | --- | --- |
51
51
  | ${T.$id || ''} | ${T.title || ''} |
52
52
  `);
53
- if (T.description) {
54
- out.push('');
55
- out.push(`> ${T.description}`);
56
- out.push('');
57
- }
58
- out.push(`| 名字 | 类型 | 说明 |`);
59
- out.push(`| --- | --- | --- |`);
60
- writeObjectProps(T);
61
- out.push('');
62
- };
63
- writeObject(rootSchema);
64
- for (const schema of pending){
65
- if (schema.type === 'object') {
66
- writeObject(schema);
67
- } else if ('anyOf' in schema) {
68
- out.push(`### ${schema.$id || schema.title}`);
69
- out.push(`
53
+ if (T.description) {
54
+ out.push('');
55
+ out.push(`> ${T.description}`);
56
+ out.push('');
57
+ }
58
+ out.push(`| 名字 | 类型 | 说明 |`);
59
+ out.push(`| --- | --- | --- |`);
60
+ writeObjectProps(T);
61
+ out.push('');
62
+ };
63
+ writeObject(rootSchema);
64
+ for (const schema of pending) {
65
+ if (schema.type === 'object') {
66
+ writeObject(schema);
67
+ } else if ('anyOf' in schema) {
68
+ out.push(`### ${schema.$id || schema.title}`);
69
+ out.push(`
70
70
  | $id | 名字 |
71
71
  | --- | --- |
72
72
  | ${schema.$id || ''} | ${schema.title || ''} |
73
73
  `);
74
- out.push(`| 值 | 说明 |`);
75
- out.push(`| --- | --- |`);
76
- for (const item of schema.anyOf){
77
- out.push(`| ${item.const} | ${item.title || item.description || ''} |`);
78
- }
79
- out.push('');
80
- }
81
- }
82
- return out.join('\n');
74
+ out.push(`| 值 | 说明 |`);
75
+ out.push(`| --- | --- |`);
76
+ for (const item of schema.anyOf) {
77
+ out.push(`| ${item.const} | ${item.title || item.description || ''} |`);
78
+ }
79
+ out.push('');
80
+ }
81
+ }
82
+ return out.join('\n');
83
83
  }
84
84
 
85
- //# sourceMappingURL=renderJsonSchemaToMarkdownDoc.js.map
85
+ //# sourceMappingURL=renderJsonSchemaToMarkdownDoc.js.map
@@ -1,13 +1,13 @@
1
1
  function joinUrl(baseUrl, maybeUrl) {
2
- const sanitizedBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
3
- const sanitizedEndpoint = maybeUrl.startsWith('/') ? maybeUrl.slice(1) : maybeUrl;
4
- return `${sanitizedBase}/${sanitizedEndpoint}`;
2
+ const sanitizedBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
3
+ const sanitizedEndpoint = maybeUrl.startsWith('/') ? maybeUrl.slice(1) : maybeUrl;
4
+ return `${sanitizedBase}/${sanitizedEndpoint}`;
5
5
  }
6
6
  export function buildBaseUrl(url, baseUrl) {
7
- if (!baseUrl || /^https?:/.test(url)) {
8
- return url;
9
- }
10
- return joinUrl(baseUrl, url);
7
+ if (!baseUrl || /^https?:/.test(url)) {
8
+ return url;
9
+ }
10
+ return joinUrl(baseUrl, url);
11
11
  }
12
12
 
13
- //# sourceMappingURL=buildBaseUrl.js.map
13
+ //# sourceMappingURL=buildBaseUrl.js.map
@@ -1,59 +1,60 @@
1
- import { forEachJsonSchema } from "../jsonschema/index.js";
2
- import { toJsonSchema } from "../schema/index.js";
3
- export const RedactedText = "[redacted]";
4
- export function buildRedactorFormSchema(ts, { shouldRedact = (schema) => schema["x-sensitive"] === true, replacer = () => RedactedText }) {
5
- let js = toJsonSchema(ts);
6
- let paths = [];
7
- forEachJsonSchema(js, (js, { path }) => {
8
- if (shouldRedact(js)) {
9
- paths.push(path);
10
- }
11
- });
12
- const vis = (root, path) => {
13
- switch (root) {
14
- case null:
15
- case undefined:
16
- return;
17
- }
18
- let c = root;
19
- for (let i = 0; i < path.length; i++) {
20
- let k = path[i];
21
- if (c && typeof c === "object" && k in c) {
22
- let v = c[k];
23
- if (path.length === 1) {
24
- c[k] = replacer(k, v);
25
- }
26
- else if (Array.isArray(v)) {
27
- for (let vv of v) {
28
- vis(vv, path.slice(i + 1));
29
- }
30
- }
31
- else {
32
- vis(v, path.slice(i + 1));
33
- }
34
- }
35
- }
36
- };
37
- return (root) => {
38
- if (!paths.length) {
39
- return root;
40
- }
41
- paths.forEach((path) => {
42
- vis(root, path);
43
- });
44
- return root;
45
- };
1
+ import { forEachJsonSchema } from '../jsonschema/index.js';
2
+ import { toJsonSchema } from '../schema/index.js';
3
+ export const RedactedText = '[redacted]';
4
+ export function buildRedactorFormSchema(
5
+ ts,
6
+ { shouldRedact = (schema) => schema['x-sensitive'] === true, replacer = () => RedactedText },
7
+ ) {
8
+ let js = toJsonSchema(ts);
9
+ let paths = [];
10
+ forEachJsonSchema(js, (js, { path }) => {
11
+ if (shouldRedact(js)) {
12
+ paths.push(path);
13
+ }
14
+ });
15
+ const vis = (root, path) => {
16
+ switch (root) {
17
+ case null:
18
+ case undefined:
19
+ return;
20
+ }
21
+ let c = root;
22
+ for (let i = 0; i < path.length; i++) {
23
+ let k = path[i];
24
+ if (c && typeof c === 'object' && k in c) {
25
+ let v = c[k];
26
+ if (path.length === 1) {
27
+ c[k] = replacer(k, v);
28
+ } else if (Array.isArray(v)) {
29
+ for (let vv of v) {
30
+ vis(vv, path.slice(i + 1));
31
+ }
32
+ } else {
33
+ vis(v, path.slice(i + 1));
34
+ }
35
+ }
36
+ }
37
+ };
38
+ return (root) => {
39
+ if (!paths.length) {
40
+ return root;
41
+ }
42
+ paths.forEach((path) => {
43
+ vis(root, path);
44
+ });
45
+ return root;
46
+ };
46
47
  }
47
48
  function _buildReversibleRedactText({ id, type: _type, key: _key, timestamp } = {}) {
48
- if (!id) {
49
- return RedactedText;
50
- }
51
- if (timestamp === true) {
52
- timestamp = Date.now();
53
- }
54
- return `[redacted ${id}]`;
49
+ if (!id) {
50
+ return RedactedText;
51
+ }
52
+ if (timestamp === true) {
53
+ timestamp = Date.now();
54
+ }
55
+ return `[redacted ${id}]`;
55
56
  }
56
57
  export function isRedactedText(v) {
57
- return v === RedactedText || typeof v === "string" && v.startsWith("[redacted ") && v.endsWith("]");
58
+ return v === RedactedText || (typeof v === 'string' && v.startsWith('[redacted ') && v.endsWith(']'));
58
59
  }
59
60
  //# sourceMappingURL=buildRedactorFormSchema.js.map
@@ -1,21 +1,26 @@
1
- export function getEstimateProcessTime({ total, processed, startTime, elapsed = startTime ? (Date.now() - startTime.getTime()) / 1000 : undefined }) {
2
- if (typeof total !== 'number' || typeof processed !== 'number' || !elapsed || processed === 0 || processed >= total) {
3
- return undefined;
4
- }
5
- const now = new Date();
6
- const rate = processed / elapsed;
7
- if (rate === 0) {
8
- return undefined;
9
- }
10
- const remaining = total - processed;
11
- const eta = Math.round(remaining / rate);
12
- const endTime = new Date(now.getTime() + eta * 1000);
13
- return {
14
- eta,
15
- elapsed,
16
- endTime,
17
- rate
18
- };
1
+ export function getEstimateProcessTime({
2
+ total,
3
+ processed,
4
+ startTime,
5
+ elapsed = startTime ? (Date.now() - startTime.getTime()) / 1000 : undefined,
6
+ }) {
7
+ if (typeof total !== 'number' || typeof processed !== 'number' || !elapsed || processed === 0 || processed >= total) {
8
+ return undefined;
9
+ }
10
+ const now = new Date();
11
+ const rate = processed / elapsed;
12
+ if (rate === 0) {
13
+ return undefined;
14
+ }
15
+ const remaining = total - processed;
16
+ const eta = Math.round(remaining / rate);
17
+ const endTime = new Date(now.getTime() + eta * 1000);
18
+ return {
19
+ eta,
20
+ elapsed,
21
+ endTime,
22
+ rate,
23
+ };
19
24
  }
20
25
 
21
- //# sourceMappingURL=getEstimateProcessTime.js.map
26
+ //# sourceMappingURL=getEstimateProcessTime.js.map
@@ -1,4 +1,4 @@
1
- export { getEstimateProcessTime } from "./getEstimateProcessTime.js";
2
- export { buildRedactorFormSchema } from "./buildRedactorFormSchema.js";
3
- export { buildBaseUrl } from "./buildBaseUrl.js";
1
+ export { buildBaseUrl } from './buildBaseUrl.js';
2
+ export { buildRedactorFormSchema } from './buildRedactorFormSchema.js';
3
+ export { getEstimateProcessTime } from './getEstimateProcessTime.js';
4
4
  //# sourceMappingURL=index.js.map