@wener/common 2.0.1 → 2.0.3

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 (405) hide show
  1. package/lib/ai/qwen3vl/index.js +2 -0
  2. package/lib/ai/qwen3vl/index.js.map +1 -0
  3. package/lib/ai/qwen3vl/utils.js +31 -0
  4. package/lib/ai/qwen3vl/utils.js.map +1 -0
  5. package/lib/ai/vision/DocLayoutElementTypeSchema.js +28 -0
  6. package/lib/ai/vision/DocLayoutElementTypeSchema.js.map +1 -0
  7. package/lib/ai/vision/ImageAnnotationSchema.js +50 -0
  8. package/lib/ai/vision/ImageAnnotationSchema.js.map +1 -0
  9. package/lib/ai/vision/index.js +3 -0
  10. package/lib/ai/vision/index.js.map +1 -0
  11. package/lib/ai/vision/resolveImageAnnotation.js +105 -0
  12. package/lib/ai/vision/resolveImageAnnotation.js.map +1 -0
  13. package/lib/cn/ChineseResidentIdNo.js +48 -0
  14. package/lib/cn/ChineseResidentIdNo.js.map +1 -0
  15. package/lib/cn/ChineseResidentIdNo.mod.js +1 -0
  16. package/lib/cn/{ResidentIdentityCardNumber.test.js → ChineseResidentIdNo.test.js} +7 -6
  17. package/lib/cn/DivisionCode.js +217 -301
  18. package/lib/cn/DivisionCode.js.map +1 -0
  19. package/lib/cn/DivisionCode.mod.js +1 -0
  20. package/lib/cn/DivisionCode.test.js +9 -15
  21. package/lib/cn/Mod11.js +43 -0
  22. package/lib/cn/Mod11.js.map +1 -0
  23. package/lib/cn/Mod31.js +49 -0
  24. package/lib/cn/Mod31.js.map +1 -0
  25. package/lib/cn/UnifiedSocialCreditCode.js +137 -113
  26. package/lib/cn/UnifiedSocialCreditCode.js.map +1 -0
  27. package/lib/cn/UnifiedSocialCreditCode.mod.js +1 -0
  28. package/lib/cn/UnifiedSocialCreditCode.test.js +1 -1
  29. package/lib/cn/formatChineseAmount.js +77 -0
  30. package/lib/cn/formatChineseAmount.js.map +1 -0
  31. package/lib/cn/index.js +6 -2
  32. package/lib/cn/index.js.map +1 -0
  33. package/lib/cn/mod.js +6 -0
  34. package/lib/cn/parseChineseNumber.js +94 -0
  35. package/lib/cn/parseChineseNumber.js.map +1 -0
  36. package/lib/cn/parseChineseNumber.test.js +278 -0
  37. package/lib/cn/pinyin/cartesianProduct.js +22 -0
  38. package/lib/cn/pinyin/cartesianProduct.js.map +1 -0
  39. package/lib/cn/pinyin/cartesianProduct.test.js +179 -0
  40. package/lib/cn/pinyin/data.json +23573 -0
  41. package/lib/cn/pinyin/loader.js +14 -0
  42. package/lib/cn/pinyin/loader.js.map +1 -0
  43. package/lib/cn/pinyin/preload.js +3 -0
  44. package/lib/cn/pinyin/preload.js.map +1 -0
  45. package/lib/cn/pinyin/toPinyin.test.js +167 -0
  46. package/lib/cn/pinyin/toPinyinPure.js +33 -0
  47. package/lib/cn/pinyin/toPinyinPure.js.map +1 -0
  48. package/lib/cn/pinyin/transform.js +14 -0
  49. package/lib/cn/pinyin/transform.js.map +1 -0
  50. package/lib/cn/types.d.js +2 -0
  51. package/lib/cn/types.d.js.map +1 -0
  52. package/lib/consola/createStandardConsolaReporter.js +6 -6
  53. package/lib/consola/createStandardConsolaReporter.js.map +1 -0
  54. package/lib/consola/formatLogObject.js +67 -135
  55. package/lib/consola/formatLogObject.js.map +1 -0
  56. package/lib/consola/formatLogObject.test.js +184 -0
  57. package/lib/consola/index.js +1 -0
  58. package/lib/consola/index.js.map +1 -0
  59. package/lib/data/formatSort.js +6 -5
  60. package/lib/data/formatSort.js.map +1 -0
  61. package/lib/data/index.js +1 -0
  62. package/lib/data/index.js.map +1 -0
  63. package/lib/data/maybeNumber.js +5 -7
  64. package/lib/data/maybeNumber.js.map +1 -0
  65. package/lib/data/parseSort.js +22 -28
  66. package/lib/data/parseSort.js.map +1 -0
  67. package/lib/data/resolvePagination.js +13 -17
  68. package/lib/data/resolvePagination.js.map +1 -0
  69. package/lib/data/types.d.js +2 -0
  70. package/lib/data/types.d.js.map +1 -0
  71. package/lib/dayjs/dayjs.js +40 -0
  72. package/lib/dayjs/dayjs.js.map +1 -0
  73. package/lib/dayjs/formatDuration.js +59 -0
  74. package/lib/dayjs/formatDuration.js.map +1 -0
  75. package/lib/dayjs/formatDuration.test.js +90 -0
  76. package/lib/dayjs/index.js +5 -0
  77. package/lib/dayjs/index.js.map +1 -0
  78. package/lib/dayjs/parseDuration.js +29 -0
  79. package/lib/dayjs/parseDuration.js.map +1 -0
  80. package/lib/dayjs/parseRelativeTime.js +90 -0
  81. package/lib/dayjs/parseRelativeTime.js.map +1 -0
  82. package/lib/dayjs/parseRelativeTime.test.js +247 -0
  83. package/lib/dayjs/resolveRelativeTime.js +158 -0
  84. package/lib/dayjs/resolveRelativeTime.js.map +1 -0
  85. package/lib/dayjs/resolveRelativeTime.test.js +310 -0
  86. package/lib/decimal/index.js +2 -0
  87. package/lib/decimal/index.js.map +1 -0
  88. package/lib/decimal/parseDecimal.js +15 -0
  89. package/lib/decimal/parseDecimal.js.map +1 -0
  90. package/lib/emittery/emitter.js +10 -0
  91. package/lib/emittery/emitter.js.map +1 -0
  92. package/lib/emittery/index.js +2 -0
  93. package/lib/emittery/index.js.map +1 -0
  94. package/lib/foundation/schema/SexType.js +16 -0
  95. package/lib/foundation/schema/SexType.js.map +1 -0
  96. package/lib/foundation/schema/index.js +2 -0
  97. package/lib/foundation/schema/index.js.map +1 -0
  98. package/lib/foundation/schema/parseSexType.js +19 -0
  99. package/lib/foundation/schema/parseSexType.js.map +1 -0
  100. package/lib/foundation/schema/types.js +7 -0
  101. package/lib/foundation/schema/types.js.map +1 -0
  102. package/lib/fs/FileSystemError.js +23 -0
  103. package/lib/fs/FileSystemError.js.map +1 -0
  104. package/lib/fs/IFileSystem.d.js +3 -0
  105. package/lib/fs/IFileSystem.d.js.map +1 -0
  106. package/lib/fs/MemoryFileSystem.test.js +188 -0
  107. package/lib/fs/createBrowserFileSystem.js +248 -0
  108. package/lib/fs/createBrowserFileSystem.js.map +1 -0
  109. package/lib/fs/createMemoryFileSystem.js +516 -0
  110. package/lib/fs/createMemoryFileSystem.js.map +1 -0
  111. package/lib/fs/createSandboxFileSystem.js +108 -0
  112. package/lib/fs/createSandboxFileSystem.js.map +1 -0
  113. package/lib/fs/createWebDavFileSystem.js +137 -0
  114. package/lib/fs/createWebDavFileSystem.js.map +1 -0
  115. package/lib/fs/findMimeType.js +17 -0
  116. package/lib/fs/findMimeType.js.map +1 -0
  117. package/lib/fs/index.js +8 -0
  118. package/lib/fs/index.js.map +1 -0
  119. package/lib/fs/orpc/FileSystemContract.js +93 -0
  120. package/lib/fs/orpc/FileSystemContract.js.map +1 -0
  121. package/lib/fs/orpc/createContractClientFileSystem.js +93 -0
  122. package/lib/fs/orpc/createContractClientFileSystem.js.map +1 -0
  123. package/lib/fs/orpc/index.js +3 -0
  124. package/lib/fs/orpc/index.js.map +1 -0
  125. package/lib/fs/orpc/server/createFileSystemContractImpl.js +63 -0
  126. package/lib/fs/orpc/server/createFileSystemContractImpl.js.map +1 -0
  127. package/lib/fs/orpc/server/index.js +2 -0
  128. package/lib/fs/orpc/server/index.js.map +1 -0
  129. package/lib/fs/s3/createS3MiniFileSystem.js +705 -0
  130. package/lib/fs/s3/createS3MiniFileSystem.js.map +1 -0
  131. package/lib/fs/s3/index.js +2 -0
  132. package/lib/fs/s3/index.js.map +1 -0
  133. package/lib/fs/s3/s3mini.test.js +584 -0
  134. package/lib/fs/scandir.js +59 -0
  135. package/lib/fs/scandir.js.map +1 -0
  136. package/lib/fs/server/createDatabaseFileSystem.js +750 -0
  137. package/lib/fs/server/createDatabaseFileSystem.js.map +1 -0
  138. package/lib/fs/server/createNodeFileSystem.js +401 -0
  139. package/lib/fs/server/createNodeFileSystem.js.map +1 -0
  140. package/lib/fs/server/dbfs.test.js +221 -0
  141. package/lib/fs/server/index.js +2 -0
  142. package/lib/fs/server/index.js.map +1 -0
  143. package/lib/fs/server/loadTestDatabase.js +127 -0
  144. package/lib/fs/server/loadTestDatabase.js.map +1 -0
  145. package/lib/fs/tests/runFileSystemTest.js +318 -0
  146. package/lib/fs/tests/runFileSystemTest.js.map +1 -0
  147. package/lib/fs/types.js +27 -0
  148. package/lib/fs/types.js.map +1 -0
  149. package/lib/fs/utils/getFileUrl.js +35 -0
  150. package/lib/fs/utils/getFileUrl.js.map +1 -0
  151. package/lib/fs/utils.js +22 -0
  152. package/lib/fs/utils.js.map +1 -0
  153. package/lib/index.js +1 -0
  154. package/lib/index.js.map +1 -0
  155. package/lib/jsonschema/JsonSchema.js +146 -172
  156. package/lib/jsonschema/JsonSchema.js.map +1 -0
  157. package/lib/jsonschema/forEachJsonSchema.js +44 -0
  158. package/lib/jsonschema/forEachJsonSchema.js.map +1 -0
  159. package/lib/jsonschema/index.js +2 -0
  160. package/lib/jsonschema/index.js.map +1 -0
  161. package/lib/jsonschema/types.d.js +2 -0
  162. package/lib/jsonschema/types.d.js.map +1 -0
  163. package/lib/meta/defineFileType.js +20 -103
  164. package/lib/meta/defineFileType.js.map +1 -0
  165. package/lib/meta/defineInit.js +31 -250
  166. package/lib/meta/defineInit.js.map +1 -0
  167. package/lib/meta/defineMetadata.js +24 -140
  168. package/lib/meta/defineMetadata.js.map +1 -0
  169. package/lib/meta/index.js +1 -0
  170. package/lib/meta/index.js.map +1 -0
  171. package/lib/orpc/createOpenApiContractClient.js +27 -0
  172. package/lib/orpc/createOpenApiContractClient.js.map +1 -0
  173. package/lib/orpc/createRpcContractClient.js +34 -0
  174. package/lib/orpc/createRpcContractClient.js.map +1 -0
  175. package/lib/orpc/index.js +3 -0
  176. package/lib/orpc/index.js.map +1 -0
  177. package/lib/orpc/resolveLinkPlugins.js +28 -0
  178. package/lib/orpc/resolveLinkPlugins.js.map +1 -0
  179. package/lib/password/PHC.js +63 -87
  180. package/lib/password/PHC.js.map +1 -0
  181. package/lib/password/PHC.test.js +11 -3
  182. package/lib/password/Password.js +30 -292
  183. package/lib/password/Password.js.map +1 -0
  184. package/lib/password/Password.test.js +35 -22
  185. package/lib/password/createArgon2PasswordAlgorithm.js +35 -191
  186. package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -0
  187. package/lib/password/createBase64PasswordAlgorithm.js +8 -141
  188. package/lib/password/createBase64PasswordAlgorithm.js.map +1 -0
  189. package/lib/password/createBcryptPasswordAlgorithm.js +13 -168
  190. package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -0
  191. package/lib/password/createPBKDF2PasswordAlgorithm.js +46 -228
  192. package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -0
  193. package/lib/password/createScryptPasswordAlgorithm.js +55 -211
  194. package/lib/password/createScryptPasswordAlgorithm.js.map +1 -0
  195. package/lib/password/index.js +1 -0
  196. package/lib/password/index.js.map +1 -0
  197. package/lib/password/server/index.js +1 -0
  198. package/lib/password/server/index.js.map +1 -0
  199. package/lib/resource/Identifiable.js +2 -0
  200. package/lib/resource/Identifiable.js.map +1 -0
  201. package/lib/resource/ListQuery.js +47 -0
  202. package/lib/resource/ListQuery.js.map +1 -0
  203. package/lib/resource/getTitleOfResource.js +3 -5
  204. package/lib/resource/getTitleOfResource.js.map +1 -0
  205. package/lib/resource/index.js +2 -0
  206. package/lib/resource/index.js.map +1 -0
  207. package/lib/resource/schema/AnyResourceSchema.js +3 -2
  208. package/lib/resource/schema/AnyResourceSchema.js.map +1 -0
  209. package/lib/resource/schema/BaseResourceSchema.js +2 -1
  210. package/lib/resource/schema/BaseResourceSchema.js.map +1 -0
  211. package/lib/resource/schema/ResourceActionType.js +6 -4
  212. package/lib/resource/schema/ResourceActionType.js.map +1 -0
  213. package/lib/resource/schema/ResourceStatus.js +5 -3
  214. package/lib/resource/schema/ResourceStatus.js.map +1 -0
  215. package/lib/resource/schema/ResourceType.js +5 -3
  216. package/lib/resource/schema/ResourceType.js.map +1 -0
  217. package/lib/resource/schema/index.js +6 -0
  218. package/lib/resource/schema/index.js.map +1 -0
  219. package/lib/resource/schema/types.js +16 -20
  220. package/lib/resource/schema/types.js.map +1 -0
  221. package/lib/s3/formatS3Url.js +65 -0
  222. package/lib/s3/formatS3Url.js.map +1 -0
  223. package/lib/s3/formatS3Url.test.js +262 -0
  224. package/lib/s3/index.js +3 -0
  225. package/lib/s3/index.js.map +1 -0
  226. package/lib/s3/parseS3Url.js +65 -0
  227. package/lib/s3/parseS3Url.js.map +1 -0
  228. package/lib/s3/parseS3Url.test.js +270 -0
  229. package/lib/schema/SchemaRegistry.js +45 -0
  230. package/lib/schema/SchemaRegistry.js.map +1 -0
  231. package/lib/schema/SchemaRegistry.mod.js +2 -0
  232. package/lib/schema/TypeSchema.d.js +2 -0
  233. package/lib/schema/TypeSchema.d.js.map +1 -0
  234. package/lib/schema/createSchemaData.js +26 -125
  235. package/lib/schema/createSchemaData.js.map +1 -0
  236. package/lib/schema/findJsonSchemaByPath.js +13 -36
  237. package/lib/schema/findJsonSchemaByPath.js.map +1 -0
  238. package/lib/schema/formatZodError.js +140 -0
  239. package/lib/schema/formatZodError.js.map +1 -0
  240. package/lib/schema/formatZodError.test.js +196 -0
  241. package/lib/schema/getSchemaCache.js +5 -5
  242. package/lib/schema/getSchemaCache.js.map +1 -0
  243. package/lib/schema/getSchemaOptions.js +8 -11
  244. package/lib/schema/getSchemaOptions.js.map +1 -0
  245. package/lib/schema/index.js +2 -0
  246. package/lib/schema/index.js.map +1 -0
  247. package/lib/schema/toJsonSchema.js +47 -290
  248. package/lib/schema/toJsonSchema.js.map +1 -0
  249. package/lib/schema/validate.js +33 -45
  250. package/lib/schema/validate.js.map +1 -0
  251. package/lib/tools/generateSchema.js +39 -197
  252. package/lib/tools/generateSchema.js.map +1 -0
  253. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +55 -143
  254. package/lib/tools/renderJsonSchemaToMarkdownDoc.js.map +1 -0
  255. package/lib/utils/buildBaseUrl.js +13 -0
  256. package/lib/utils/buildBaseUrl.js.map +1 -0
  257. package/lib/utils/buildRedactorFormSchema.js +59 -0
  258. package/lib/utils/buildRedactorFormSchema.js.map +1 -0
  259. package/lib/utils/getEstimateProcessTime.js +21 -0
  260. package/lib/utils/getEstimateProcessTime.js.map +1 -0
  261. package/lib/utils/index.js +4 -0
  262. package/lib/utils/index.js.map +1 -0
  263. package/lib/utils/resolveFeatureOptions.js +12 -0
  264. package/lib/utils/resolveFeatureOptions.js.map +1 -0
  265. package/package.json +77 -20
  266. package/src/ai/qwen3vl/index.ts +1 -0
  267. package/src/ai/qwen3vl/utils.ts +36 -0
  268. package/src/ai/vision/DocLayoutElementTypeSchema.ts +30 -0
  269. package/src/ai/vision/ImageAnnotationSchema.ts +60 -0
  270. package/src/ai/vision/index.ts +2 -0
  271. package/src/ai/vision/resolveImageAnnotation.ts +135 -0
  272. package/src/cn/ChineseResidentIdNo.test.ts +18 -0
  273. package/src/cn/ChineseResidentIdNo.ts +74 -0
  274. package/src/cn/DivisionCode.test.ts +3 -13
  275. package/src/cn/DivisionCode.ts +138 -193
  276. package/src/cn/{Mod11Checksum.ts → Mod11.ts} +3 -1
  277. package/src/cn/{Mod31Checksum.ts → Mod31.ts} +2 -0
  278. package/src/cn/UnifiedSocialCreditCode.test.ts +2 -2
  279. package/src/cn/UnifiedSocialCreditCode.ts +119 -124
  280. package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +14 -0
  281. package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +41 -12
  282. package/src/cn/formatChineseAmount.ts +61 -0
  283. package/src/cn/index.ts +6 -2
  284. package/src/cn/parseChineseNumber.test.ts +159 -0
  285. package/src/cn/parseChineseNumber.ts +97 -0
  286. package/src/cn/pinyin/cartesianProduct.test.ts +64 -0
  287. package/src/cn/pinyin/cartesianProduct.ts +24 -0
  288. package/src/cn/pinyin/data.json +23573 -0
  289. package/src/cn/pinyin/loader.ts +12 -0
  290. package/src/cn/pinyin/preload.ts +3 -0
  291. package/src/cn/pinyin/toPinyin.test.ts +12 -0
  292. package/src/cn/pinyin/toPinyinPure.ts +43 -0
  293. package/src/cn/pinyin/transform.ts +12 -0
  294. package/src/consola/formatLogObject.test.ts +27 -0
  295. package/src/consola/formatLogObject.ts +46 -10
  296. package/src/dayjs/dayjs.ts +40 -0
  297. package/src/dayjs/formatDuration.test.ts +14 -0
  298. package/src/dayjs/formatDuration.ts +86 -0
  299. package/src/dayjs/index.ts +5 -0
  300. package/src/dayjs/parseDuration.ts +40 -0
  301. package/src/dayjs/parseRelativeTime.test.ts +185 -0
  302. package/src/dayjs/parseRelativeTime.ts +115 -0
  303. package/src/dayjs/resolveRelativeTime.test.ts +357 -0
  304. package/src/dayjs/resolveRelativeTime.ts +167 -0
  305. package/src/decimal/index.ts +1 -0
  306. package/src/decimal/parseDecimal.ts +16 -0
  307. package/src/emittery/emitter.ts +9 -0
  308. package/src/emittery/index.ts +1 -0
  309. package/src/foundation/schema/SexType.ts +21 -0
  310. package/src/foundation/schema/index.ts +1 -0
  311. package/src/foundation/schema/parseSexType.ts +19 -0
  312. package/src/foundation/schema/types.ts +8 -0
  313. package/src/fs/FileSystemError.ts +26 -0
  314. package/src/fs/IFileSystem.d.ts +102 -0
  315. package/src/fs/MemoryFileSystem.test.ts +37 -0
  316. package/src/fs/createBrowserFileSystem.ts +291 -0
  317. package/src/fs/createMemoryFileSystem.ts +604 -0
  318. package/src/fs/createSandboxFileSystem.ts +136 -0
  319. package/src/fs/createWebDavFileSystem.ts +172 -0
  320. package/src/fs/findMimeType.ts +23 -0
  321. package/src/fs/index.ts +8 -0
  322. package/src/fs/orpc/FileSystemContract.ts +92 -0
  323. package/src/fs/orpc/createContractClientFileSystem.ts +115 -0
  324. package/src/fs/orpc/index.ts +2 -0
  325. package/src/fs/orpc/server/createFileSystemContractImpl.ts +64 -0
  326. package/src/fs/orpc/server/index.ts +1 -0
  327. package/src/fs/s3/createS3MiniFileSystem.ts +830 -0
  328. package/src/fs/s3/index.ts +1 -0
  329. package/src/fs/s3/s3mini.test.ts +264 -0
  330. package/src/fs/scandir.ts +75 -0
  331. package/src/fs/server/createDatabaseFileSystem.ts +668 -0
  332. package/src/fs/server/createNodeFileSystem.ts +499 -0
  333. package/src/fs/server/dbfs.test.ts +47 -0
  334. package/src/fs/server/index.ts +1 -0
  335. package/src/fs/server/loadTestDatabase.ts +131 -0
  336. package/src/fs/tests/runFileSystemTest.ts +288 -0
  337. package/src/fs/types.ts +29 -0
  338. package/src/fs/utils/getFileUrl.ts +44 -0
  339. package/src/fs/utils.ts +23 -0
  340. package/src/jsonschema/JsonSchema.ts +118 -110
  341. package/src/jsonschema/forEachJsonSchema.ts +50 -0
  342. package/src/jsonschema/index.ts +1 -0
  343. package/src/orpc/createOpenApiContractClient.ts +52 -0
  344. package/src/orpc/createRpcContractClient.ts +50 -0
  345. package/src/orpc/index.ts +2 -0
  346. package/src/orpc/resolveLinkPlugins.ts +29 -0
  347. package/src/password/PHC.ts +3 -3
  348. package/src/password/Password.test.ts +1 -1
  349. package/src/password/Password.ts +2 -2
  350. package/src/password/createPBKDF2PasswordAlgorithm.ts +2 -2
  351. package/src/resource/ListQuery.ts +53 -0
  352. package/src/resource/index.ts +1 -0
  353. package/src/resource/schema/AnyResourceSchema.ts +17 -3
  354. package/src/resource/schema/index.ts +5 -0
  355. package/src/s3/formatS3Url.test.ts +254 -0
  356. package/src/s3/formatS3Url.ts +84 -0
  357. package/src/s3/index.ts +2 -0
  358. package/src/s3/parseS3Url.test.ts +258 -0
  359. package/src/s3/parseS3Url.ts +88 -0
  360. package/src/schema/SchemaRegistry.ts +48 -0
  361. package/src/schema/createSchemaData.ts +1 -1
  362. package/src/schema/formatZodError.test.ts +196 -0
  363. package/src/schema/formatZodError.ts +151 -0
  364. package/src/schema/getSchemaOptions.ts +3 -3
  365. package/src/schema/index.ts +1 -0
  366. package/src/utils/buildBaseUrl.ts +12 -0
  367. package/src/utils/buildRedactorFormSchema.ts +85 -0
  368. package/src/utils/getEstimateProcessTime.ts +36 -0
  369. package/src/utils/index.ts +5 -0
  370. package/src/utils/resolveFeatureOptions.ts +14 -0
  371. package/lib/cn/Mod11Checksum.js +0 -85
  372. package/lib/cn/Mod31Checksum.js +0 -97
  373. package/lib/cn/ResidentIdentityCardNumber.js +0 -50
  374. package/lib/cn/formatDate.js +0 -13
  375. package/lib/cn/parseSex.js +0 -20
  376. package/lib/resource/schema/SchemaRegistry.js +0 -38
  377. package/lib/resource/schema/SexType.js +0 -10
  378. package/lib/search/AdvanceSearch.js +0 -9
  379. package/lib/search/AdvanceSearch.test.js +0 -435
  380. package/lib/search/formatAdvanceSearch.js +0 -78
  381. package/lib/search/index.js +0 -1
  382. package/lib/search/optimizeAdvanceSearch.js +0 -143
  383. package/lib/search/parseAdvanceSearch.js +0 -20
  384. package/lib/search/parser.d.js +0 -1
  385. package/lib/search/parser.js +0 -3088
  386. package/lib/search/types.d.js +0 -1
  387. package/src/cn/ResidentIdentityCardNumber.test.ts +0 -17
  388. package/src/cn/ResidentIdentityCardNumber.ts +0 -96
  389. package/src/cn/__snapshots__/ResidentIdentityCardNumber.test.ts.snap +0 -15
  390. package/src/cn/formatDate.ts +0 -12
  391. package/src/cn/parseSex.ts +0 -13
  392. package/src/resource/schema/SchemaRegistry.ts +0 -42
  393. package/src/resource/schema/SexType.ts +0 -13
  394. package/src/search/AdvanceSearch.test.ts +0 -149
  395. package/src/search/AdvanceSearch.ts +0 -14
  396. package/src/search/Makefile +0 -2
  397. package/src/search/__snapshots__/AdvanceSearch.test.ts.snap +0 -675
  398. package/src/search/formatAdvanceSearch.ts +0 -52
  399. package/src/search/index.ts +0 -1
  400. package/src/search/optimizeAdvanceSearch.ts +0 -77
  401. package/src/search/parseAdvanceSearch.ts +0 -23
  402. package/src/search/parser.d.ts +0 -8
  403. package/src/search/parser.js +0 -2794
  404. package/src/search/parser.peggy +0 -237
  405. package/src/search/types.d.ts +0 -45
@@ -0,0 +1,750 @@
1
+ import { _ as _ts_decorate } from "@swc/helpers/_/_ts_decorate";
2
+ import { _ as _ts_metadata } from "@swc/helpers/_/_ts_metadata";
3
+ import * as crypto from "node:crypto";
4
+ import { basename, dirname, join, normalize } from "node:path";
5
+ import { Cascade, Collection, Entity, ManyToOne, OneToMany, OneToOne, Property, types, Unique } from "@mikro-orm/core";
6
+ import { TenantBaseEntity } from "@wener/server/entity";
7
+ import { getEntityManager } from "@wener/server/mikro-orm";
8
+ import { FileSystemError, FileSystemErrorCode } from "../FileSystemError.js";
9
+ import { FileKind } from "../types.js";
10
+ export function createDatabaseFileSystem(options = {}) {
11
+ return new DBFS(options);
12
+ }
13
+ let DBFS = class DBFS {
14
+ options;
15
+ constructor(options = {}) {
16
+ this.options = {
17
+ getEntityManager: () => getEntityManager().fork(),
18
+ smallFileThreshold: 512,
19
+ ...options
20
+ };
21
+ }
22
+ get em() {
23
+ return this.options.getEntityManager();
24
+ }
25
+ /**
26
+ * Ensure root node exists, create it if it doesn't exist
27
+ * @returns The root FileNodeMetaEntity
28
+ */ async ensureRootNode() {
29
+ const em = this.em;
30
+ const rootQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
31
+ rootQb.where({
32
+ parent: null
33
+ });
34
+ const rootNode = await rootQb.getSingleResult();
35
+ if (rootNode) {
36
+ return rootNode;
37
+ }
38
+ // Create root directory (parent is null, filename is empty string)
39
+ const now = new Date();
40
+ const rootDir = em.create(FileNodeMetaEntity, {
41
+ filename: "",
42
+ parent: null,
43
+ kind: FileKind.directory,
44
+ size: 0,
45
+ atime: now,
46
+ btime: now,
47
+ ctime: now,
48
+ mtime: now
49
+ });
50
+ try {
51
+ await em.persistAndFlush(rootDir);
52
+ return rootDir;
53
+ }
54
+ catch (error) {
55
+ // If root already exists (race condition), fetch and return it
56
+ if (error.message?.includes("UNIQUE constraint") || error.message?.includes("duplicate")) {
57
+ const existingRootQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
58
+ existingRootQb.where({
59
+ parent: null
60
+ });
61
+ const existingRoot = await existingRootQb.getSingleResult();
62
+ if (existingRoot) {
63
+ return existingRoot;
64
+ }
65
+ }
66
+ throw error;
67
+ }
68
+ }
69
+ async stat(path, options) {
70
+ // Validate input
71
+ if (!path || typeof path !== "string") {
72
+ throw new FileSystemError("Invalid path", FileSystemErrorCode.EINVAL);
73
+ }
74
+ const em = this.em;
75
+ const node = await this._getNodeByPath(path, em);
76
+ if (!node) {
77
+ throw new FileSystemError(`Path not found: ${path}`, FileSystemErrorCode.ENOENT);
78
+ }
79
+ return this._toFileStat(node, path);
80
+ }
81
+ async exists(path) {
82
+ return !!await this._getNodeByPath(path, this.em);
83
+ }
84
+ async readdir(dir, options) {
85
+ const em = this.em;
86
+ const parentNode = await this._getNodeByPath(dir, em);
87
+ if (!parentNode) {
88
+ throw new FileSystemError(`Directory not found: ${dir}`, FileSystemErrorCode.ENOENT);
89
+ }
90
+ if (parentNode.kind !== FileKind.directory) {
91
+ throw new FileSystemError(`Path is not a directory: ${dir}`, FileSystemErrorCode.ENOTDIR);
92
+ }
93
+ // Use QueryBuilder to avoid automatic relationship loading
94
+ const qb = em.createQueryBuilder(FileNodeMetaEntity, "f");
95
+ qb.where({
96
+ parent: parentNode
97
+ });
98
+ const children = await qb.getResult();
99
+ return children.map((child) => this._toFileStat(child, join(dir, child.filename)));
100
+ }
101
+ async mkdir(path, options = {}) {
102
+ await this._mkdirInTransaction(path, options, this.em);
103
+ }
104
+ async _mkdirInTransaction(path, options, em) {
105
+ const normalized = normalize(path);
106
+ // Special handling for root directory
107
+ if (normalized === "/") {
108
+ const rootQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
109
+ rootQb.where({
110
+ parent: null
111
+ });
112
+ const rootNode = await rootQb.getSingleResult();
113
+ if (rootNode) {
114
+ // Root directory already exists
115
+ return;
116
+ }
117
+ // Create root directory (parent is null, filename is empty string)
118
+ const now = new Date();
119
+ const rootDir = em.create(FileNodeMetaEntity, {
120
+ filename: "",
121
+ parent: null,
122
+ kind: FileKind.directory,
123
+ size: 0,
124
+ atime: now,
125
+ btime: now,
126
+ ctime: now,
127
+ mtime: now
128
+ });
129
+ try {
130
+ await em.persistAndFlush(rootDir);
131
+ }
132
+ catch (error) {
133
+ // If root already exists (race condition), ignore the error
134
+ if (!error.message?.includes("UNIQUE constraint") && !error.message?.includes("duplicate")) {
135
+ throw error;
136
+ }
137
+ }
138
+ return;
139
+ }
140
+ const parentPath = dirname(normalized);
141
+ const newDirName = basename(normalized);
142
+ if (!newDirName)
143
+ throw new FileSystemError("Cannot create directory with empty name", FileSystemErrorCode.EINVAL);
144
+ let parentNode = await this._getNodeByPath(parentPath, em);
145
+ if (!parentNode) {
146
+ if (options.recursive) {
147
+ // 递归创建父目录
148
+ await this._mkdirInTransaction(parentPath, options, em);
149
+ parentNode = await this._getNodeByPath(parentPath, em);
150
+ }
151
+ else {
152
+ throw new FileSystemError(`Parent directory not found: ${parentPath}`, FileSystemErrorCode.ENOENT);
153
+ }
154
+ }
155
+ if (!parentNode)
156
+ throw new FileSystemError("Failed to create parent directory structure", FileSystemErrorCode.EINVAL);
157
+ // Check if directory already exists using QueryBuilder
158
+ const existingQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
159
+ existingQb.where({
160
+ parent: parentNode,
161
+ filename: newDirName
162
+ });
163
+ const existing = await existingQb.getSingleResult();
164
+ if (existing) {
165
+ if (existing.kind === FileKind.directory) {
166
+ // Directory already exists, return silently
167
+ return;
168
+ }
169
+ throw new FileSystemError(`A file with the same name already exists: ${path}`, FileSystemErrorCode.EEXIST);
170
+ }
171
+ // Create directory using EntityManager
172
+ const now = new Date();
173
+ const newDir = em.create(FileNodeMetaEntity, {
174
+ tid: parentNode.tid,
175
+ parent: parentNode,
176
+ filename: newDirName,
177
+ kind: FileKind.directory,
178
+ size: 0,
179
+ atime: now,
180
+ btime: now,
181
+ ctime: now,
182
+ mtime: now
183
+ });
184
+ await em.persistAndFlush(newDir);
185
+ }
186
+ async readFile(path, options) {
187
+ const em = this.em;
188
+ const node = await this._getNodeByPath(path, em);
189
+ if (!node)
190
+ throw new FileSystemError(`File not found: ${path}`, FileSystemErrorCode.ENOENT);
191
+ if (node.kind !== FileKind.file)
192
+ throw new FileSystemError(`Path is not a file: ${path}`, FileSystemErrorCode.EISDIR);
193
+ let buffer;
194
+ if (node.content) {
195
+ // 小文件优化 - content is already loaded
196
+ buffer = node.content;
197
+ }
198
+ else {
199
+ // Large file: load from file_node_content table using QueryBuilder
200
+ const fileContentQb = em.createQueryBuilder(FileNodeContentEntity, "fc");
201
+ fileContentQb.where({
202
+ node: node
203
+ });
204
+ const fileContent = await fileContentQb.getSingleResult();
205
+ if (!fileContent)
206
+ throw new FileSystemError("File content is missing", FileSystemErrorCode.ENOENT);
207
+ buffer = fileContent.content;
208
+ }
209
+ return options?.encoding === "text" ? buffer.toString("utf-8") : buffer;
210
+ }
211
+ async writeFile(path, data, options = {}) {
212
+ // Validate input
213
+ if (!path || typeof path !== "string") {
214
+ throw new FileSystemError("Invalid path", FileSystemErrorCode.EINVAL);
215
+ }
216
+ if (data === null || data === undefined) {
217
+ throw new FileSystemError("Invalid data", FileSystemErrorCode.EINVAL);
218
+ }
219
+ await this.em.transactional(async (em) => {
220
+ const { overwrite = true } = options;
221
+ const bufferData = Buffer.isBuffer(data) ? data : Buffer.from(data, "utf-8");
222
+ const size = bufferData.length;
223
+ const parentPath = dirname(path);
224
+ const filename = basename(path);
225
+ // Validate filename
226
+ if (!filename) {
227
+ throw new FileSystemError("filename cannot be empty", FileSystemErrorCode.EINVAL);
228
+ }
229
+ // 确保父目录存在 - create it within the transaction
230
+ await this._mkdirInTransaction(parentPath, {
231
+ recursive: true
232
+ }, em);
233
+ const parentNode = await this._getNodeByPath(parentPath, em);
234
+ if (!parentNode)
235
+ throw new FileSystemError("Failed to establish parent directory", FileSystemErrorCode.EINVAL);
236
+ // Find existing node using QueryBuilder
237
+ const nodeQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
238
+ nodeQb.where({
239
+ parent: parentNode,
240
+ filename
241
+ });
242
+ let node = await nodeQb.getSingleResult();
243
+ if (node) {
244
+ // 文件已存在
245
+ if (!overwrite)
246
+ throw new FileSystemError(`File already exists: ${path}`, FileSystemErrorCode.EEXIST);
247
+ if (node.kind === FileKind.directory)
248
+ throw new FileSystemError(`Cannot overwrite a directory with a file: ${path}`, FileSystemErrorCode.EISDIR);
249
+ // 更新节点
250
+ node.size = size;
251
+ node.mtime = new Date();
252
+ // ... 其他时间戳
253
+ }
254
+ else {
255
+ // 新建文件
256
+ const now = new Date();
257
+ node = em.create(FileNodeMetaEntity, {
258
+ tid: parentNode.tid,
259
+ filename,
260
+ parent: parentNode,
261
+ kind: FileKind.file,
262
+ size,
263
+ atime: now,
264
+ btime: now,
265
+ ctime: now,
266
+ mtime: now
267
+ });
268
+ }
269
+ // 处理文件内容
270
+ if (size <= this.options.smallFileThreshold) {
271
+ // Small file: store in file_node_meta.content
272
+ node.content = bufferData;
273
+ // If there was large file content, delete it
274
+ // Use QueryBuilder to avoid relationship issues
275
+ const existingContentQb = em.createQueryBuilder(FileNodeContentEntity, "fc");
276
+ existingContentQb.where({
277
+ node: node
278
+ });
279
+ const existingContent = await existingContentQb.getSingleResult();
280
+ if (existingContent) {
281
+ await em.removeAndFlush(existingContent);
282
+ }
283
+ }
284
+ else {
285
+ // Large file: store in file_node_content table
286
+ node.content = undefined; // Clear small file content
287
+ const md5 = crypto.createHash("md5").update(bufferData).digest("hex");
288
+ const sha256 = crypto.createHash("sha256").update(bufferData).digest("hex");
289
+ // Check if fileContent already exists using QueryBuilder
290
+ const fileContentQb = em.createQueryBuilder(FileNodeContentEntity, "fc");
291
+ fileContentQb.where({
292
+ node: node
293
+ });
294
+ let fileContent = await fileContentQb.getSingleResult();
295
+ if (fileContent) {
296
+ // Update existing content
297
+ fileContent.content = bufferData;
298
+ fileContent.size = size;
299
+ fileContent.md5 = md5;
300
+ fileContent.sha256 = sha256;
301
+ }
302
+ else {
303
+ // Create new content entity
304
+ fileContent = em.create(FileNodeContentEntity, {
305
+ node: node,
306
+ tid: node.tid,
307
+ content: bufferData,
308
+ size: size,
309
+ md5: md5,
310
+ sha256: sha256
311
+ });
312
+ }
313
+ }
314
+ await em.persistAndFlush(node);
315
+ });
316
+ }
317
+ async rm(path, options = {}) {
318
+ await this.em.transactional(async (em) => {
319
+ const node = await this._getNodeByPath(path, em);
320
+ if (!node) {
321
+ if (options.force)
322
+ return; // force=true, 不存在也算成功
323
+ throw new FileSystemError(`Path not found: ${path}`, FileSystemErrorCode.ENOENT);
324
+ }
325
+ if (node.kind === FileKind.directory && !options.recursive) {
326
+ // Check if directory has children using QueryBuilder
327
+ const childrenQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
328
+ childrenQb.where({
329
+ parent: node
330
+ });
331
+ childrenQb.select("id");
332
+ const children = await childrenQb.getResult();
333
+ if (children.length > 0) {
334
+ throw new FileSystemError(`Directory not empty: ${path}`, FileSystemErrorCode.ENOTEMPTY);
335
+ }
336
+ }
337
+ // 使用 orphanRemoval: true, ORM会自动处理子节点和内容的删除
338
+ await em.removeAndFlush(node);
339
+ });
340
+ }
341
+ async rename(oldPath, newPath, options = {}) {
342
+ await this.em.transactional(async (em) => {
343
+ const node = await this._getNodeByPath(oldPath, em);
344
+ if (!node)
345
+ throw new FileSystemError(`Source path not found: ${oldPath}`, FileSystemErrorCode.ENOENT);
346
+ const newParentPath = dirname(newPath);
347
+ const newFilename = basename(newPath);
348
+ const newParentNode = await this._getNodeByPath(newParentPath, em);
349
+ if (!newParentNode)
350
+ throw new FileSystemError(`Destination directory not found: ${newParentPath}`, FileSystemErrorCode.ENOENT);
351
+ const existingDestQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
352
+ existingDestQb.where({
353
+ parent: newParentNode,
354
+ filename: newFilename
355
+ });
356
+ const existingDest = await existingDestQb.getSingleResult();
357
+ if (existingDest) {
358
+ if (!options.overwrite)
359
+ throw new FileSystemError(`Destination path already exists: ${newPath}`, FileSystemErrorCode.EEXIST);
360
+ if (node.id === existingDest.id)
361
+ return; // 移动到原位置,什么都不做
362
+ await em.removeAndFlush(existingDest);
363
+ }
364
+ node.parent = newParentNode;
365
+ node.filename = newFilename;
366
+ node.mtime = new Date();
367
+ await em.flush();
368
+ });
369
+ }
370
+ async copy(srcPath, destPath, options = {}) {
371
+ await this.em.transactional(async (em) => {
372
+ const srcNode = await this._getNodeByPath(srcPath, em);
373
+ if (!srcNode)
374
+ throw new FileSystemError(`Source path not found: ${srcPath}`, FileSystemErrorCode.ENOENT);
375
+ const destParentPath = dirname(destPath);
376
+ const destFilename = basename(destPath);
377
+ const destParentNode = await this._getNodeByPath(destParentPath, em);
378
+ if (!destParentNode)
379
+ throw new FileSystemError(`Destination directory not found: ${destParentPath}`, FileSystemErrorCode.ENOENT);
380
+ const existingDestQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
381
+ existingDestQb.where({
382
+ parent: destParentNode,
383
+ filename: destFilename
384
+ });
385
+ const existingDest = await existingDestQb.getSingleResult();
386
+ if (existingDest) {
387
+ if (!options.overwrite)
388
+ throw new FileSystemError(`Destination path already exists: ${destPath}`, FileSystemErrorCode.EEXIST);
389
+ // Delete existing destination within the same transaction
390
+ await em.removeAndFlush(existingDest);
391
+ }
392
+ await this._copyNode(srcNode, destParentNode, destFilename, em);
393
+ });
394
+ }
395
+ createReadStream(path, options) {
396
+ throw new Error("Streaming read is not supported by DBFS yet.");
397
+ }
398
+ createWriteStream(path, options) {
399
+ throw new Error("Streaming write is not supported by DBFS yet.");
400
+ }
401
+ createReadableStream(path, options) {
402
+ throw new Error("ReadableStream is not supported by DBFS yet.");
403
+ }
404
+ createWritableStream(path, options) {
405
+ throw new Error("WritableStream is not supported by DBFS yet.");
406
+ }
407
+ /**
408
+ * 将路径字符串解析为数据库中的节点。这是大部分操作的基础。
409
+ * @param pathStr 绝对路径, e.g., /home/user/file.txt
410
+ * @param em EntityManager 实例
411
+ * @returns 找到的节点或 null
412
+ */ async _getNodeByPath(pathStr, em) {
413
+ const normalized = normalize(pathStr);
414
+ if (normalized === "/") {
415
+ // Use QueryBuilder to avoid automatic relationship loading
416
+ const qb = em.createQueryBuilder(FileNodeMetaEntity, "f");
417
+ qb.where({
418
+ parent: null
419
+ });
420
+ const rootNode = await qb.getSingleResult();
421
+ return rootNode || null;
422
+ }
423
+ const parts = normalized.split("/").filter((p) => p);
424
+ // Get root node
425
+ const rootQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
426
+ rootQb.where({
427
+ parent: null
428
+ });
429
+ let currentNode = await rootQb.getSingleResult();
430
+ if (!currentNode)
431
+ return null;
432
+ // Traverse path parts
433
+ for (const part of parts) {
434
+ const childQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
435
+ childQb.where({
436
+ parent: currentNode,
437
+ filename: part
438
+ });
439
+ const child = await childQb.getSingleResult();
440
+ if (!child)
441
+ return null;
442
+ currentNode = child;
443
+ }
444
+ return currentNode;
445
+ }
446
+ /**
447
+ * 将数据库实体转换为 IFileStat 接口
448
+ */ _toFileStat(node, path) {
449
+ // Handle mtime - it might be a Date object or a string from raw query
450
+ let mtime;
451
+ if (node.mtime instanceof Date) {
452
+ mtime = node.mtime.getTime();
453
+ }
454
+ else if (typeof node.mtime === "string") {
455
+ mtime = new Date(node.mtime).getTime();
456
+ }
457
+ else {
458
+ mtime = Date.now();
459
+ }
460
+ // Handle size - convert bigint to number if needed
461
+ let size;
462
+ if (typeof node.size === "bigint") {
463
+ size = Number(node.size);
464
+ }
465
+ else {
466
+ size = node.size;
467
+ }
468
+ return {
469
+ path: path,
470
+ name: node.filename,
471
+ kind: node.kind,
472
+ size: size,
473
+ mtime: mtime,
474
+ meta: node.metadata || {},
475
+ // `directory` 字段可以根据 path 动态计算
476
+ directory: dirname(path)
477
+ };
478
+ }
479
+ async _copyNode(srcNode, destParent, newName, em) {
480
+ // 1. 复制节点本身
481
+ const now = new Date();
482
+ const newNode = em.create(FileNodeMetaEntity, {
483
+ tid: srcNode.tid,
484
+ filename: newName,
485
+ parent: destParent,
486
+ kind: srcNode.kind,
487
+ size: srcNode.size,
488
+ metadata: srcNode.metadata,
489
+ content: srcNode.content,
490
+ atime: now,
491
+ btime: now,
492
+ ctime: now,
493
+ mtime: now
494
+ });
495
+ // 2. 复制大文件内容 (如果存在) - use QueryBuilder to avoid relationship loading
496
+ if (!srcNode.content) {
497
+ const srcFileContentQb = em.createQueryBuilder(FileNodeContentEntity, "fc");
498
+ srcFileContentQb.where({
499
+ node: srcNode
500
+ });
501
+ const srcFileContent = await srcFileContentQb.getSingleResult();
502
+ if (srcFileContent) {
503
+ const newContent = em.create(FileNodeContentEntity, {
504
+ node: newNode,
505
+ tid: srcNode.tid,
506
+ content: srcFileContent.content,
507
+ size: srcFileContent.size,
508
+ md5: srcFileContent.md5,
509
+ sha256: srcFileContent.sha256,
510
+ mimeType: srcFileContent.mimeType,
511
+ metadata: srcFileContent.metadata
512
+ });
513
+ }
514
+ }
515
+ await em.persistAndFlush(newNode);
516
+ // 3. 如果是目录,递归复制子节点
517
+ if (srcNode.kind === FileKind.directory) {
518
+ const childrenQb = em.createQueryBuilder(FileNodeMetaEntity, "f");
519
+ childrenQb.where({
520
+ parent: srcNode
521
+ });
522
+ const children = await childrenQb.getResult();
523
+ for (const child of children) {
524
+ await this._copyNode(child, newNode, child.filename, em);
525
+ }
526
+ }
527
+ }
528
+ };
529
+ export class FileNodeMetaEntity extends TenantBaseEntity {
530
+ filename;
531
+ size;
532
+ kind;
533
+ atime;
534
+ btime;
535
+ ctime;
536
+ mtime;
537
+ metadata;
538
+ parent;
539
+ children = new Collection(this);
540
+ fileContent;
541
+ content;
542
+ //region content
543
+ get parentId() {
544
+ return this.parent?.id;
545
+ }
546
+ }
547
+ _ts_decorate([
548
+ Property({
549
+ type: types.string,
550
+ nullable: false,
551
+ comment: "\u6587\u4EF6\u540D"
552
+ }),
553
+ _ts_metadata("design:type", String)
554
+ ], FileNodeMetaEntity.prototype, "filename", void 0);
555
+ _ts_decorate([
556
+ Property({
557
+ type: types.bigint,
558
+ nullable: false,
559
+ default: 0,
560
+ comment: "\u6587\u4EF6\u5927\u5C0F"
561
+ }),
562
+ _ts_metadata("design:type", Object)
563
+ ], FileNodeMetaEntity.prototype, "size", void 0);
564
+ _ts_decorate([
565
+ Property({
566
+ type: types.string,
567
+ nullable: false,
568
+ comment: "\u6587\u4EF6\u7C7B\u578B"
569
+ }),
570
+ _ts_metadata("design:type", typeof FileKind === "undefined" ? Object : FileKind)
571
+ ], FileNodeMetaEntity.prototype, "kind", void 0);
572
+ _ts_decorate([
573
+ Property({
574
+ type: types.datetime,
575
+ nullable: false,
576
+ defaultRaw: "CURRENT_TIMESTAMP"
577
+ }),
578
+ _ts_metadata("design:type", Object)
579
+ ], FileNodeMetaEntity.prototype, "atime", void 0);
580
+ _ts_decorate([
581
+ Property({
582
+ type: types.datetime,
583
+ nullable: false,
584
+ defaultRaw: "CURRENT_TIMESTAMP"
585
+ }),
586
+ _ts_metadata("design:type", Object)
587
+ ], FileNodeMetaEntity.prototype, "btime", void 0);
588
+ _ts_decorate([
589
+ Property({
590
+ type: types.datetime,
591
+ nullable: false,
592
+ defaultRaw: "CURRENT_TIMESTAMP"
593
+ }),
594
+ _ts_metadata("design:type", Object)
595
+ ], FileNodeMetaEntity.prototype, "ctime", void 0);
596
+ _ts_decorate([
597
+ Property({
598
+ type: types.datetime,
599
+ nullable: false,
600
+ defaultRaw: "CURRENT_TIMESTAMP"
601
+ }),
602
+ _ts_metadata("design:type", Object)
603
+ ], FileNodeMetaEntity.prototype, "mtime", void 0);
604
+ _ts_decorate([
605
+ Property({
606
+ type: types.json,
607
+ nullable: false,
608
+ defaultRaw: "{}"
609
+ }),
610
+ _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
611
+ ], FileNodeMetaEntity.prototype, "metadata", void 0);
612
+ _ts_decorate([
613
+ ManyToOne(() => FileNodeMetaEntity, {
614
+ nullable: true,
615
+ cascade: []
616
+ }),
617
+ _ts_metadata("design:type", typeof Rel === "undefined" ? Object : Rel)
618
+ ], FileNodeMetaEntity.prototype, "parent", void 0);
619
+ _ts_decorate([
620
+ OneToMany({
621
+ entity: () => FileNodeMetaEntity,
622
+ mappedBy: "parent",
623
+ orphanRemoval: true
624
+ })
625
+ ], FileNodeMetaEntity.prototype, "children", void 0);
626
+ _ts_decorate([
627
+ OneToOne({
628
+ entity: () => FileNodeContentEntity,
629
+ mappedBy: "node",
630
+ orphanRemoval: true,
631
+ nullable: true,
632
+ cascade: [
633
+ Cascade.ALL
634
+ ]
635
+ }),
636
+ _ts_metadata("design:type", typeof Rel === "undefined" ? Object : Rel)
637
+ ], FileNodeMetaEntity.prototype, "fileContent", void 0);
638
+ _ts_decorate([
639
+ Property({
640
+ type: types.blob,
641
+ nullable: true,
642
+ comment: "\u6587\u4EF6\u5185\u5BB9"
643
+ }),
644
+ _ts_metadata("design:type", typeof Buffer === "undefined" ? Object : Buffer)
645
+ ], FileNodeMetaEntity.prototype, "content", void 0);
646
+ FileNodeMetaEntity = _ts_decorate([
647
+ Entity({
648
+ tableName: "file_node_meta"
649
+ }),
650
+ Unique({
651
+ properties: [
652
+ "tid",
653
+ "parent",
654
+ "filename"
655
+ ]
656
+ })
657
+ ], FileNodeMetaEntity);
658
+ export class FileNodeContentEntity extends TenantBaseEntity {
659
+ node;
660
+ size;
661
+ content;
662
+ mimeType;
663
+ md5;
664
+ sha256;
665
+ text;
666
+ width;
667
+ height;
668
+ // @Property({ type: types.integer, nullable: true })
669
+ // length?: number;
670
+ metadata;
671
+ }
672
+ _ts_decorate([
673
+ OneToOne({
674
+ entity: () => FileNodeMetaEntity,
675
+ owner: true,
676
+ joinColumn: "node_id"
677
+ }),
678
+ _ts_metadata("design:type", typeof Rel === "undefined" ? Object : Rel)
679
+ ], FileNodeContentEntity.prototype, "node", void 0);
680
+ _ts_decorate([
681
+ Property({
682
+ type: types.integer,
683
+ nullable: false
684
+ }),
685
+ _ts_metadata("design:type", Number)
686
+ ], FileNodeContentEntity.prototype, "size", void 0);
687
+ _ts_decorate([
688
+ Property({
689
+ type: types.blob,
690
+ lazy: true,
691
+ comment: "\u6587\u4EF6\u5185\u5BB9"
692
+ }),
693
+ _ts_metadata("design:type", typeof Buffer === "undefined" ? Object : Buffer)
694
+ ], FileNodeContentEntity.prototype, "content", void 0);
695
+ _ts_decorate([
696
+ Property({
697
+ type: types.string,
698
+ nullable: true
699
+ }),
700
+ _ts_metadata("design:type", String)
701
+ ], FileNodeContentEntity.prototype, "mimeType", void 0);
702
+ _ts_decorate([
703
+ Property({
704
+ type: types.string,
705
+ nullable: false
706
+ }),
707
+ _ts_metadata("design:type", String)
708
+ ], FileNodeContentEntity.prototype, "md5", void 0);
709
+ _ts_decorate([
710
+ Property({
711
+ type: types.string,
712
+ nullable: false
713
+ }),
714
+ _ts_metadata("design:type", String)
715
+ ], FileNodeContentEntity.prototype, "sha256", void 0);
716
+ _ts_decorate([
717
+ Property({
718
+ type: types.string,
719
+ nullable: true
720
+ }),
721
+ _ts_metadata("design:type", String)
722
+ ], FileNodeContentEntity.prototype, "text", void 0);
723
+ _ts_decorate([
724
+ Property({
725
+ type: types.integer,
726
+ nullable: true
727
+ }),
728
+ _ts_metadata("design:type", Number)
729
+ ], FileNodeContentEntity.prototype, "width", void 0);
730
+ _ts_decorate([
731
+ Property({
732
+ type: types.integer,
733
+ nullable: true
734
+ }),
735
+ _ts_metadata("design:type", Number)
736
+ ], FileNodeContentEntity.prototype, "height", void 0);
737
+ _ts_decorate([
738
+ Property({
739
+ type: types.json,
740
+ nullable: false,
741
+ defaultRaw: "{}"
742
+ }),
743
+ _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
744
+ ], FileNodeContentEntity.prototype, "metadata", void 0);
745
+ FileNodeContentEntity = _ts_decorate([
746
+ Entity({
747
+ tableName: "file_node_content"
748
+ })
749
+ ], FileNodeContentEntity);
750
+ //# sourceMappingURL=createDatabaseFileSystem.js.map