@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,318 @@
1
+ import { expect } from "vitest";
2
+ import { FileSystemError, FileSystemErrorCode } from "../FileSystemError.js";
3
+ export async function runFileSystemTest(fs, options = {}) {
4
+ const { writableStream = true, readableStream = true, readStream = true, writeStream = true, abort = true } = options;
5
+ // should be implemented
6
+ const stat = await fs.stat("/README.txt");
7
+ expect(stat).toMatchObject({
8
+ path: "/README.txt",
9
+ directory: "/",
10
+ name: "README.txt",
11
+ kind: "file",
12
+ size: 5
13
+ });
14
+ await fs.mkdir("/");
15
+ const entries = await fs.readdir("/");
16
+ expect(entries.some((e) => e.name === "README.txt")).toBe(true);
17
+ await fs.mkdir("/test");
18
+ if (fs.getUrl) {
19
+ expect(fs.getUrl(await fs.stat("/README.txt"))).toBeTypeOf("string");
20
+ }
21
+ // should handle AbortSignal
22
+ if (abort) {
23
+ const controller = new AbortController();
24
+ controller.abort();
25
+ await expect(fs.stat("/README.txt", {
26
+ signal: controller.signal
27
+ })).rejects.toThrow(Error);
28
+ await expect(fs.readdir("/", {
29
+ signal: controller.signal
30
+ })).rejects.toThrow(Error);
31
+ await expect(fs.mkdir("/test", {
32
+ signal: controller.signal
33
+ })).rejects.toThrow(Error);
34
+ await expect(fs.readFile("/README.txt", {
35
+ signal: controller.signal
36
+ })).rejects.toThrow(Error);
37
+ await expect(fs.writeFile("/test.txt", "test", {
38
+ signal: controller.signal
39
+ })).rejects.toThrow(Error);
40
+ await expect(fs.rm("/README.txt", {
41
+ signal: controller.signal
42
+ })).rejects.toThrow(Error);
43
+ await expect(fs.rename("/README.txt", "/new.txt", {
44
+ signal: controller.signal
45
+ })).rejects.toThrow(Error);
46
+ await expect(fs.copy("/README.txt", "/copy.txt", {
47
+ signal: controller.signal
48
+ })).rejects.toThrow(Error);
49
+ }
50
+ // should validate input parameters
51
+ await expect(fs.stat("")).rejects.toThrow(FileSystemError);
52
+ await expect(fs.stat("")).rejects.toMatchObject({
53
+ code: FileSystemErrorCode.EINVAL
54
+ });
55
+ await expect(fs.stat(null)).rejects.toThrow(FileSystemError);
56
+ await expect(fs.stat(null)).rejects.toMatchObject({
57
+ code: FileSystemErrorCode.EINVAL
58
+ });
59
+ await expect(fs.stat(undefined)).rejects.toThrow(FileSystemError);
60
+ await expect(fs.stat(undefined)).rejects.toMatchObject({
61
+ code: FileSystemErrorCode.EINVAL
62
+ });
63
+ await expect(fs.stat(123)).rejects.toThrow(FileSystemError);
64
+ await expect(fs.stat(123)).rejects.toMatchObject({
65
+ code: FileSystemErrorCode.EINVAL
66
+ });
67
+ await expect(fs.writeFile("", "test")).rejects.toThrow(FileSystemError);
68
+ await expect(fs.writeFile("", "test")).rejects.toMatchObject({
69
+ code: FileSystemErrorCode.EINVAL
70
+ });
71
+ await expect(fs.writeFile("/test", null)).rejects.toThrow(FileSystemError);
72
+ await expect(fs.writeFile("/test", null)).rejects.toMatchObject({
73
+ code: FileSystemErrorCode.EINVAL
74
+ });
75
+ await expect(fs.writeFile("/test", undefined)).rejects.toThrow(FileSystemError);
76
+ await expect(fs.writeFile("/test", undefined)).rejects.toMatchObject({
77
+ code: FileSystemErrorCode.EINVAL
78
+ });
79
+ await expect(fs.writeFile("/", "test")).rejects.toThrow(FileSystemError);
80
+ await expect(fs.writeFile("/", "test")).rejects.toMatchObject({
81
+ code: FileSystemErrorCode.EINVAL
82
+ });
83
+ // should support streaming operations
84
+ if (readStream && fs.createReadStream) {
85
+ await fs.writeFile("/stream.txt", "Hello, World!");
86
+ // Test createReadStream
87
+ const readStream = fs.createReadStream("/stream.txt");
88
+ expect(readStream).toBeDefined();
89
+ const chunks = [];
90
+ for await (const chunk of readStream) {
91
+ chunks.push(chunk);
92
+ }
93
+ expect(Buffer.concat(chunks).toString()).toBe("Hello, World!");
94
+ // Test createReadStream with range
95
+ const rangeStream = fs.createReadStream("/stream.txt", {
96
+ range: {
97
+ start: 0,
98
+ end: 4
99
+ }
100
+ });
101
+ const rangeChunks = [];
102
+ for await (const chunk of rangeStream) {
103
+ rangeChunks.push(chunk);
104
+ }
105
+ expect(Buffer.concat(rangeChunks).toString()).toBe("Hello");
106
+ }
107
+ if (writeStream && fs.createWriteStream) {
108
+ // Test createWriteStream
109
+ const writeStream = fs.createWriteStream("/write-test.txt");
110
+ expect(writeStream).toBeDefined();
111
+ writeStream.write("Test content");
112
+ writeStream.end();
113
+ await new Promise((resolve) => writeStream.on("finish", resolve));
114
+ expect(await fs.readFile("/write-test.txt", {
115
+ encoding: "text"
116
+ })).toBe("Test content");
117
+ }
118
+ // should support Web Streams API
119
+ if (readableStream) {
120
+ await fs.writeFile("/webstream.txt", "Web Stream Test");
121
+ // Test createReadableStream
122
+ const readableStream = fs.createReadableStream("/webstream.txt");
123
+ expect(readableStream).toBeDefined();
124
+ const reader = readableStream.getReader();
125
+ const { value } = await reader.read();
126
+ expect(value?.toString()).toBe("Web Stream Test");
127
+ }
128
+ if (writableStream) {
129
+ // Test createWritableStream
130
+ const writableStream = fs.createWritableStream("/web-write-test.txt");
131
+ expect(writableStream).toBeDefined();
132
+ const writer = writableStream.getWriter();
133
+ await writer.write(Buffer.from("Web Stream Write Test"));
134
+ await writer.close();
135
+ expect(await fs.readFile("/web-write-test.txt", {
136
+ encoding: "text"
137
+ })).toBe("Web Stream Write Test");
138
+ }
139
+ // should handle streaming errors
140
+ if (abort && readStream && fs.createReadStream) {
141
+ const controller2 = new AbortController();
142
+ // Test read stream with abort
143
+ const readStream = fs.createReadStream("/README.txt", {
144
+ signal: controller2.signal
145
+ });
146
+ controller2.abort();
147
+ await expect(new Promise((_, reject) => {
148
+ readStream.on("error", reject);
149
+ })).rejects.toThrow(Error);
150
+ }
151
+ if (abort && writeStream && fs.createWriteStream) {
152
+ // Test write stream with abort
153
+ const controller3 = new AbortController();
154
+ const writeStream = fs.createWriteStream("/abort-test.txt", {
155
+ signal: controller3.signal
156
+ });
157
+ controller3.abort();
158
+ await expect(new Promise((_, reject) => {
159
+ writeStream.on("error", reject);
160
+ writeStream.write("test");
161
+ })).rejects.toThrow(Error);
162
+ }
163
+ // should handle file operations correctly
164
+ // Test file creation
165
+ await fs.writeFile("/newfile.txt", "New content");
166
+ expect(await fs.exists("/newfile.txt")).toBe(true);
167
+ const stat2 = await fs.stat("/newfile.txt");
168
+ expect(stat2.kind).toBe("file");
169
+ expect(stat2.size).toBe(11); // "New content" is 11 bytes
170
+ // Test file reading
171
+ const content = await fs.readFile("/newfile.txt", {
172
+ encoding: "text"
173
+ });
174
+ expect(content).toBe("New content");
175
+ // Test file reading as binary
176
+ const binary = await fs.readFile("/newfile.txt");
177
+ expect(Buffer.from(binary).toString()).toBe("New content");
178
+ // Test file overwrite
179
+ await fs.writeFile("/newfile.txt", "Updated content");
180
+ expect(await fs.readFile("/newfile.txt", {
181
+ encoding: "text"
182
+ })).toBe("Updated content");
183
+ // Test file overwrite protection
184
+ await expect(fs.writeFile("/newfile.txt", "Should fail", {
185
+ overwrite: false
186
+ })).rejects.toThrow(FileSystemError);
187
+ await expect(fs.writeFile("/newfile.txt", "Should fail", {
188
+ overwrite: false
189
+ })).rejects.toMatchObject({
190
+ code: FileSystemErrorCode.EEXIST
191
+ });
192
+ // Test large file write (should use file_node_content table)
193
+ // Create ~1KB data to test large file handling
194
+ const largeData = "x".repeat(1024); // 1KB of data
195
+ await fs.writeFile("/largefile.txt", largeData);
196
+ const largeFileStat = await fs.stat("/largefile.txt");
197
+ expect(largeFileStat.size).toBe(1024);
198
+ const largeFileContent = await fs.readFile("/largefile.txt", {
199
+ encoding: "text"
200
+ });
201
+ expect(largeFileContent).toBe(largeData);
202
+ expect(largeFileContent.length).toBe(1024);
203
+ // should handle directory operations correctly
204
+ // Test directory creation
205
+ await fs.mkdir("/newdir");
206
+ expect(await fs.exists("/newdir")).toBe(true);
207
+ const stat3 = await fs.stat("/newdir");
208
+ expect(stat3.kind).toBe("directory");
209
+ // Test recursive directory creation
210
+ await fs.mkdir("/deep/nested/dir", {
211
+ recursive: true
212
+ });
213
+ expect(await fs.exists("/deep/nested/dir")).toBe(true);
214
+ // Test non-recursive directory creation failure
215
+ await expect(fs.mkdir("/another/deep/dir")).rejects.toThrow(FileSystemError);
216
+ await expect(fs.mkdir("/another/deep/dir")).rejects.toMatchObject({
217
+ code: FileSystemErrorCode.ENOENT
218
+ });
219
+ // Test directory listing
220
+ await fs.writeFile("/newdir/file1.txt", "File 1");
221
+ await fs.writeFile("/newdir/file2.txt", "File 2");
222
+ const contents = await fs.readdir("/newdir");
223
+ expect(contents).toHaveLength(2);
224
+ expect(contents.map((f) => f.name)).toContain("file1.txt");
225
+ expect(contents.map((f) => f.name)).toContain("file2.txt");
226
+ // should handle file removal correctly
227
+ await fs.writeFile("/toremove.txt", "Remove me");
228
+ expect(await fs.exists("/toremove.txt")).toBe(true);
229
+ await fs.rm("/toremove.txt");
230
+ expect(await fs.exists("/toremove.txt")).toBe(false);
231
+ // Test force removal
232
+ await expect(fs.rm("/nonexistent.txt")).rejects.toThrow(FileSystemError);
233
+ await expect(fs.rm("/nonexistent.txt")).rejects.toMatchObject({
234
+ code: FileSystemErrorCode.ENOENT
235
+ });
236
+ await fs.rm("/nonexistent.txt", {
237
+ force: true
238
+ }); // Should not throw
239
+ // Test recursive removal
240
+ await fs.mkdir("/dirwithfiles", {
241
+ recursive: true
242
+ });
243
+ await fs.writeFile("/dirwithfiles/file.txt", "content");
244
+ await expect(fs.rm("/dirwithfiles")).rejects.toThrow(FileSystemError);
245
+ await expect(fs.rm("/dirwithfiles")).rejects.toMatchObject({
246
+ code: FileSystemErrorCode.ENOTEMPTY
247
+ });
248
+ await fs.rm("/dirwithfiles", {
249
+ recursive: true
250
+ });
251
+ expect(await fs.exists("/dirwithfiles")).toBe(false);
252
+ // should handle file rename correctly
253
+ await fs.writeFile("/rename.txt", "Original content");
254
+ expect(await fs.exists("/rename.txt")).toBe(true);
255
+ await fs.rename("/rename.txt", "/renamed.txt");
256
+ expect(await fs.exists("/rename.txt")).toBe(false);
257
+ expect(await fs.exists("/renamed.txt")).toBe(true);
258
+ expect(await fs.readFile("/renamed.txt", {
259
+ encoding: "text"
260
+ })).toBe("Original content");
261
+ // should handle file copy correctly
262
+ await fs.writeFile("/copy.txt", "Copy me");
263
+ expect(await fs.exists("/copy.txt")).toBe(true);
264
+ await fs.copy("/copy.txt", "/copied.txt");
265
+ expect(await fs.exists("/copy.txt")).toBe(true);
266
+ expect(await fs.exists("/copied.txt")).toBe(true);
267
+ expect(await fs.readFile("/copied.txt", {
268
+ encoding: "text"
269
+ })).toBe("Copy me");
270
+ // Test copy overwrite
271
+ await fs.writeFile("/target2.txt", "Target content");
272
+ await expect(fs.copy("/copy.txt", "/target2.txt")).rejects.toThrow(FileSystemError);
273
+ await expect(fs.copy("/copy.txt", "/target2.txt")).rejects.toMatchObject({
274
+ code: FileSystemErrorCode.EEXIST
275
+ });
276
+ await fs.copy("/copy.txt", "/target2.txt", {
277
+ overwrite: true
278
+ });
279
+ expect(await fs.readFile("/target2.txt", {
280
+ encoding: "text"
281
+ })).toBe("Copy me");
282
+ // should handle edge cases correctly
283
+ // Test root directory operations
284
+ await expect(fs.stat("/")).resolves.toBeDefined();
285
+ await expect(fs.readdir("/")).resolves.toBeDefined();
286
+ await fs.mkdir("/"); // Should not throw
287
+ // Test path normalization
288
+ await fs.writeFile("/normalize.txt", "test");
289
+ expect(await fs.exists("/normalize.txt")).toBe(true);
290
+ expect(await fs.exists("/./normalize.txt")).toBe(true);
291
+ // Note: the exists method may return true for files with trailing slashes due to normalization
292
+ // Test error cases
293
+ await expect(fs.stat("/nonexistent")).rejects.toThrow(FileSystemError);
294
+ await expect(fs.stat("/nonexistent")).rejects.toMatchObject({
295
+ code: FileSystemErrorCode.ENOENT
296
+ });
297
+ await expect(fs.readdir("/nonexistent")).rejects.toThrow(FileSystemError);
298
+ await expect(fs.readdir("/nonexistent")).rejects.toMatchObject({
299
+ code: FileSystemErrorCode.ENOENT
300
+ });
301
+ await expect(fs.readFile("/nonexistent")).rejects.toThrow(FileSystemError);
302
+ await expect(fs.readFile("/nonexistent")).rejects.toMatchObject({
303
+ code: FileSystemErrorCode.ENOENT
304
+ });
305
+ await expect(fs.rm("/nonexistent")).rejects.toThrow(FileSystemError);
306
+ await expect(fs.rm("/nonexistent")).rejects.toMatchObject({
307
+ code: FileSystemErrorCode.ENOENT
308
+ });
309
+ await expect(fs.rename("/nonexistent", "/new")).rejects.toThrow(FileSystemError);
310
+ await expect(fs.rename("/nonexistent", "/new")).rejects.toMatchObject({
311
+ code: FileSystemErrorCode.ENOENT
312
+ });
313
+ await expect(fs.copy("/nonexistent", "/new")).rejects.toThrow(FileSystemError);
314
+ await expect(fs.copy("/nonexistent", "/new")).rejects.toMatchObject({
315
+ code: FileSystemErrorCode.ENOENT
316
+ });
317
+ }
318
+ //# sourceMappingURL=runFileSystemTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/fs/tests/runFileSystemTest.ts"],"sourcesContent":["import { expect } from 'vitest';\nimport { FileSystemError, FileSystemErrorCode } from '../FileSystemError';\nimport type { IFileSystem } from '../IFileSystem';\n\nexport type RunFileSystemTestOptions = {\n\twritableStream?: boolean;\n\treadableStream?: boolean;\n\treadStream?: boolean;\n\twriteStream?: boolean;\n\tabort?: boolean;\n};\n\nexport async function runFileSystemTest(fs: IFileSystem, options: RunFileSystemTestOptions = {}) {\n\tconst { writableStream = true, readableStream = true, readStream = true, writeStream = true, abort = true } = options;\n\t// should be implemented\n\tconst stat = await fs.stat('/README.txt');\n\texpect(stat).toMatchObject({\n\t\tpath: '/README.txt',\n\t\tdirectory: '/',\n\t\tname: 'README.txt',\n\t\tkind: 'file',\n\t\tsize: 5,\n\t});\n\tawait fs.mkdir('/');\n\tconst entries = await fs.readdir('/');\n\texpect(entries.some((e) => e.name === 'README.txt')).toBe(true);\n\tawait fs.mkdir('/test');\n\n\tif (fs.getUrl) {\n\t\texpect(fs.getUrl(await fs.stat('/README.txt'))).toBeTypeOf('string');\n\t}\n\n\t// should handle AbortSignal\n\tif (abort) {\n\t\tconst controller = new AbortController();\n\t\tcontroller.abort();\n\n\t\tawait expect(fs.stat('/README.txt', { signal: controller.signal })).rejects.toThrow(Error);\n\t\tawait expect(fs.readdir('/', { signal: controller.signal })).rejects.toThrow(Error);\n\t\tawait expect(fs.mkdir('/test', { signal: controller.signal })).rejects.toThrow(Error);\n\t\tawait expect(fs.readFile('/README.txt', { signal: controller.signal })).rejects.toThrow(Error);\n\t\tawait expect(fs.writeFile('/test.txt', 'test', { signal: controller.signal })).rejects.toThrow(Error);\n\t\tawait expect(fs.rm('/README.txt', { signal: controller.signal })).rejects.toThrow(Error);\n\t\tawait expect(fs.rename('/README.txt', '/new.txt', { signal: controller.signal })).rejects.toThrow(Error);\n\t\tawait expect(fs.copy('/README.txt', '/copy.txt', { signal: controller.signal })).rejects.toThrow(Error);\n\t}\n\n\t// should validate input parameters\n\tawait expect(fs.stat('')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.stat('')).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\tawait expect(fs.stat(null as any)).rejects.toThrow(FileSystemError);\n\tawait expect(fs.stat(null as any)).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\tawait expect(fs.stat(undefined as any)).rejects.toThrow(FileSystemError);\n\tawait expect(fs.stat(undefined as any)).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\tawait expect(fs.stat(123 as any)).rejects.toThrow(FileSystemError);\n\tawait expect(fs.stat(123 as any)).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\n\tawait expect(fs.writeFile('', 'test')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.writeFile('', 'test')).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\tawait expect(fs.writeFile('/test', null as any)).rejects.toThrow(FileSystemError);\n\tawait expect(fs.writeFile('/test', null as any)).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\tawait expect(fs.writeFile('/test', undefined as any)).rejects.toThrow(FileSystemError);\n\tawait expect(fs.writeFile('/test', undefined as any)).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\tawait expect(fs.writeFile('/', 'test')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.writeFile('/', 'test')).rejects.toMatchObject({ code: FileSystemErrorCode.EINVAL });\n\n\t// should support streaming operations\n\tif (readStream && fs.createReadStream) {\n\t\tawait fs.writeFile('/stream.txt', 'Hello, World!');\n\n\t\t// Test createReadStream\n\t\tconst readStream = fs.createReadStream('/stream.txt');\n\t\texpect(readStream).toBeDefined();\n\n\t\tconst chunks: Buffer[] = [];\n\t\tfor await (const chunk of readStream) {\n\t\t\tchunks.push(chunk);\n\t\t}\n\t\texpect(Buffer.concat(chunks).toString()).toBe('Hello, World!');\n\n\t\t// Test createReadStream with range\n\t\tconst rangeStream = fs.createReadStream('/stream.txt', { range: { start: 0, end: 4 } });\n\t\tconst rangeChunks: Buffer[] = [];\n\t\tfor await (const chunk of rangeStream) {\n\t\t\trangeChunks.push(chunk);\n\t\t}\n\t\texpect(Buffer.concat(rangeChunks).toString()).toBe('Hello');\n\t}\n\n\tif (writeStream && fs.createWriteStream) {\n\t\t// Test createWriteStream\n\t\tconst writeStream = fs.createWriteStream('/write-test.txt');\n\t\texpect(writeStream).toBeDefined();\n\n\t\twriteStream.write('Test content');\n\t\twriteStream.end();\n\n\t\tawait new Promise((resolve) => writeStream.on('finish', resolve));\n\t\texpect(await fs.readFile('/write-test.txt', { encoding: 'text' })).toBe('Test content');\n\t}\n\n\t// should support Web Streams API\n\tif (readableStream) {\n\t\tawait fs.writeFile('/webstream.txt', 'Web Stream Test');\n\n\t\t// Test createReadableStream\n\t\tconst readableStream = fs.createReadableStream('/webstream.txt');\n\t\texpect(readableStream).toBeDefined();\n\n\t\tconst reader = readableStream.getReader();\n\t\tconst { value } = await reader.read();\n\t\texpect(value?.toString()).toBe('Web Stream Test');\n\t}\n\n\tif (writableStream) {\n\t\t// Test createWritableStream\n\t\tconst writableStream = fs.createWritableStream('/web-write-test.txt');\n\t\texpect(writableStream).toBeDefined();\n\n\t\tconst writer = writableStream.getWriter();\n\t\tawait writer.write(Buffer.from('Web Stream Write Test'));\n\t\tawait writer.close();\n\n\t\texpect(await fs.readFile('/web-write-test.txt', { encoding: 'text' })).toBe('Web Stream Write Test');\n\t}\n\n\t// should handle streaming errors\n\tif (abort && readStream && fs.createReadStream) {\n\t\tconst controller2 = new AbortController();\n\n\t\t// Test read stream with abort\n\t\tconst readStream = fs.createReadStream('/README.txt', { signal: controller2.signal });\n\t\tcontroller2.abort();\n\n\t\tawait expect(\n\t\t\tnew Promise((_, reject) => {\n\t\t\t\treadStream.on('error', reject);\n\t\t\t}),\n\t\t).rejects.toThrow(Error);\n\t}\n\n\tif (abort && writeStream && fs.createWriteStream) {\n\t\t// Test write stream with abort\n\t\tconst controller3 = new AbortController();\n\t\tconst writeStream = fs.createWriteStream('/abort-test.txt', { signal: controller3.signal });\n\t\tcontroller3.abort();\n\n\t\tawait expect(\n\t\t\tnew Promise((_, reject) => {\n\t\t\t\twriteStream.on('error', reject);\n\t\t\t\twriteStream.write('test');\n\t\t\t}),\n\t\t).rejects.toThrow(Error);\n\t}\n\n\t// should handle file operations correctly\n\t// Test file creation\n\tawait fs.writeFile('/newfile.txt', 'New content');\n\texpect(await fs.exists('/newfile.txt')).toBe(true);\n\n\tconst stat2 = await fs.stat('/newfile.txt');\n\texpect(stat2.kind).toBe('file');\n\texpect(stat2.size).toBe(11); // \"New content\" is 11 bytes\n\n\t// Test file reading\n\tconst content = await fs.readFile('/newfile.txt', { encoding: 'text' });\n\texpect(content).toBe('New content');\n\n\t// Test file reading as binary\n\tconst binary = await fs.readFile('/newfile.txt');\n\texpect(Buffer.from(binary).toString()).toBe('New content');\n\n\t// Test file overwrite\n\tawait fs.writeFile('/newfile.txt', 'Updated content');\n\texpect(await fs.readFile('/newfile.txt', { encoding: 'text' })).toBe('Updated content');\n\n\t// Test file overwrite protection\n\tawait expect(fs.writeFile('/newfile.txt', 'Should fail', { overwrite: false })).rejects.toThrow(FileSystemError);\n\tawait expect(fs.writeFile('/newfile.txt', 'Should fail', { overwrite: false })).rejects.toMatchObject({\n\t\tcode: FileSystemErrorCode.EEXIST,\n\t});\n\n\t// Test large file write (should use file_node_content table)\n\t// Create ~1KB data to test large file handling\n\tconst largeData = 'x'.repeat(1024); // 1KB of data\n\tawait fs.writeFile('/largefile.txt', largeData);\n\tconst largeFileStat = await fs.stat('/largefile.txt');\n\texpect(largeFileStat.size).toBe(1024);\n\tconst largeFileContent = await fs.readFile('/largefile.txt', { encoding: 'text' });\n\texpect(largeFileContent).toBe(largeData);\n\texpect(largeFileContent.length).toBe(1024);\n\n\t// should handle directory operations correctly\n\t// Test directory creation\n\tawait fs.mkdir('/newdir');\n\texpect(await fs.exists('/newdir')).toBe(true);\n\n\tconst stat3 = await fs.stat('/newdir');\n\texpect(stat3.kind).toBe('directory');\n\n\t// Test recursive directory creation\n\tawait fs.mkdir('/deep/nested/dir', { recursive: true });\n\texpect(await fs.exists('/deep/nested/dir')).toBe(true);\n\n\t// Test non-recursive directory creation failure\n\tawait expect(fs.mkdir('/another/deep/dir')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.mkdir('/another/deep/dir')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n\n\t// Test directory listing\n\tawait fs.writeFile('/newdir/file1.txt', 'File 1');\n\tawait fs.writeFile('/newdir/file2.txt', 'File 2');\n\n\tconst contents = await fs.readdir('/newdir');\n\texpect(contents).toHaveLength(2);\n\texpect(contents.map((f) => f.name)).toContain('file1.txt');\n\texpect(contents.map((f) => f.name)).toContain('file2.txt');\n\n\t// should handle file removal correctly\n\tawait fs.writeFile('/toremove.txt', 'Remove me');\n\texpect(await fs.exists('/toremove.txt')).toBe(true);\n\n\tawait fs.rm('/toremove.txt');\n\texpect(await fs.exists('/toremove.txt')).toBe(false);\n\n\t// Test force removal\n\tawait expect(fs.rm('/nonexistent.txt')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.rm('/nonexistent.txt')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n\tawait fs.rm('/nonexistent.txt', { force: true }); // Should not throw\n\n\t// Test recursive removal\n\tawait fs.mkdir('/dirwithfiles', { recursive: true });\n\tawait fs.writeFile('/dirwithfiles/file.txt', 'content');\n\tawait expect(fs.rm('/dirwithfiles')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.rm('/dirwithfiles')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOTEMPTY });\n\tawait fs.rm('/dirwithfiles', { recursive: true });\n\texpect(await fs.exists('/dirwithfiles')).toBe(false);\n\n\t// should handle file rename correctly\n\tawait fs.writeFile('/rename.txt', 'Original content');\n\texpect(await fs.exists('/rename.txt')).toBe(true);\n\n\tawait fs.rename('/rename.txt', '/renamed.txt');\n\texpect(await fs.exists('/rename.txt')).toBe(false);\n\texpect(await fs.exists('/renamed.txt')).toBe(true);\n\texpect(await fs.readFile('/renamed.txt', { encoding: 'text' })).toBe('Original content');\n\n\t// should handle file copy correctly\n\tawait fs.writeFile('/copy.txt', 'Copy me');\n\texpect(await fs.exists('/copy.txt')).toBe(true);\n\n\tawait fs.copy('/copy.txt', '/copied.txt');\n\texpect(await fs.exists('/copy.txt')).toBe(true);\n\texpect(await fs.exists('/copied.txt')).toBe(true);\n\texpect(await fs.readFile('/copied.txt', { encoding: 'text' })).toBe('Copy me');\n\n\t// Test copy overwrite\n\tawait fs.writeFile('/target2.txt', 'Target content');\n\tawait expect(fs.copy('/copy.txt', '/target2.txt')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.copy('/copy.txt', '/target2.txt')).rejects.toMatchObject({ code: FileSystemErrorCode.EEXIST });\n\tawait fs.copy('/copy.txt', '/target2.txt', { overwrite: true });\n\texpect(await fs.readFile('/target2.txt', { encoding: 'text' })).toBe('Copy me');\n\n\t// should handle edge cases correctly\n\t// Test root directory operations\n\tawait expect(fs.stat('/')).resolves.toBeDefined();\n\tawait expect(fs.readdir('/')).resolves.toBeDefined();\n\tawait fs.mkdir('/'); // Should not throw\n\n\t// Test path normalization\n\tawait fs.writeFile('/normalize.txt', 'test');\n\texpect(await fs.exists('/normalize.txt')).toBe(true);\n\texpect(await fs.exists('/./normalize.txt')).toBe(true);\n\t// Note: the exists method may return true for files with trailing slashes due to normalization\n\n\t// Test error cases\n\tawait expect(fs.stat('/nonexistent')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.stat('/nonexistent')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n\tawait expect(fs.readdir('/nonexistent')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.readdir('/nonexistent')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n\tawait expect(fs.readFile('/nonexistent')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.readFile('/nonexistent')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n\tawait expect(fs.rm('/nonexistent')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.rm('/nonexistent')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n\tawait expect(fs.rename('/nonexistent', '/new')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.rename('/nonexistent', '/new')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n\tawait expect(fs.copy('/nonexistent', '/new')).rejects.toThrow(FileSystemError);\n\tawait expect(fs.copy('/nonexistent', '/new')).rejects.toMatchObject({ code: FileSystemErrorCode.ENOENT });\n}\n"],"names":["expect","FileSystemError","FileSystemErrorCode","runFileSystemTest","fs","options","writableStream","readableStream","readStream","writeStream","abort","stat","toMatchObject","path","directory","name","kind","size","mkdir","entries","readdir","some","e","toBe","getUrl","toBeTypeOf","controller","AbortController","signal","rejects","toThrow","Error","readFile","writeFile","rm","rename","copy","code","EINVAL","undefined","createReadStream","toBeDefined","chunks","chunk","push","Buffer","concat","toString","rangeStream","range","start","end","rangeChunks","createWriteStream","write","Promise","resolve","on","encoding","createReadableStream","reader","getReader","value","read","createWritableStream","writer","getWriter","from","close","controller2","_","reject","controller3","exists","stat2","content","binary","overwrite","EEXIST","largeData","repeat","largeFileStat","largeFileContent","length","stat3","recursive","ENOENT","contents","toHaveLength","map","f","toContain","force","ENOTEMPTY","resolves"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { z } from "zod/v4";
2
+ export const FileKind = Object.freeze({
3
+ __proto__: null,
4
+ directory: 'directory',
5
+ file: 'file'
6
+ });
7
+ export const FileKindSchema = z.enum([
8
+ 'directory',
9
+ 'file'
10
+ ]);
11
+ export const ReaddirOptionsSchema = z.object({
12
+ recursive: z.boolean().optional(),
13
+ depth: z.number().optional(),
14
+ glob: z.string().optional(),
15
+ kind: FileKindSchema.optional(),
16
+ cursor: z.string().optional(),
17
+ hidden: z.boolean().default(false)
18
+ });
19
+ export const FileUrlOptionsSchema = z.object({
20
+ size: z.coerce.number().optional(),
21
+ width: z.number().optional(),
22
+ height: z.number().optional(),
23
+ quality: z.number().optional(),
24
+ thumbnail: z.boolean().optional()
25
+ });
26
+
27
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/fs/types.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\ntype EnumValues<T> = T[Exclude<keyof T, '__proto__'>];\nexport const FileKind = Object.freeze({\n\t__proto__: null,\n\tdirectory: 'directory',\n\tfile: 'file',\n});\nexport type FileKind = EnumValues<typeof FileKind>;\nexport const FileKindSchema = z.enum(['directory', 'file']);\n\nexport type ReaddirOptions = z.infer<typeof ReaddirOptionsSchema>;\nexport const ReaddirOptionsSchema = z.object({\n\trecursive: z.boolean().optional(),\n\tdepth: z.number().optional(),\n\tglob: z.string().optional(),\n\tkind: FileKindSchema.optional(),\n\tcursor: z.string().optional(),\n\thidden: z.boolean().default(false),\n});\n\nexport type FileUrlOptions = z.infer<typeof FileUrlOptionsSchema>;\nexport const FileUrlOptionsSchema = z.object({\n\tsize: z.coerce.number().optional(),\n\twidth: z.number().optional(),\n\theight: z.number().optional(),\n\tquality: z.number().optional(),\n\tthumbnail: z.boolean().optional(),\n});\n"],"names":["z","FileKind","Object","freeze","__proto__","directory","file","FileKindSchema","enum","ReaddirOptionsSchema","object","recursive","boolean","optional","depth","number","glob","string","kind","cursor","hidden","default","FileUrlOptionsSchema","size","coerce","width","height","quality","thumbnail"],"mappings":"AAAA,SAASA,CAAC,QAAQ,SAAS;AAG3B,OAAO,MAAMC,WAAWC,OAAOC,MAAM,CAAC;IACrCC,WAAW;IACXC,WAAW;IACXC,MAAM;AACP,GAAG;AAEH,OAAO,MAAMC,iBAAiBP,EAAEQ,IAAI,CAAC;IAAC;IAAa;CAAO,EAAE;AAG5D,OAAO,MAAMC,uBAAuBT,EAAEU,MAAM,CAAC;IAC5CC,WAAWX,EAAEY,OAAO,GAAGC,QAAQ;IAC/BC,OAAOd,EAAEe,MAAM,GAAGF,QAAQ;IAC1BG,MAAMhB,EAAEiB,MAAM,GAAGJ,QAAQ;IACzBK,MAAMX,eAAeM,QAAQ;IAC7BM,QAAQnB,EAAEiB,MAAM,GAAGJ,QAAQ;IAC3BO,QAAQpB,EAAEY,OAAO,GAAGS,OAAO,CAAC;AAC7B,GAAG;AAGH,OAAO,MAAMC,uBAAuBtB,EAAEU,MAAM,CAAC;IAC5Ca,MAAMvB,EAAEwB,MAAM,CAACT,MAAM,GAAGF,QAAQ;IAChCY,OAAOzB,EAAEe,MAAM,GAAGF,QAAQ;IAC1Ba,QAAQ1B,EAAEe,MAAM,GAAGF,QAAQ;IAC3Bc,SAAS3B,EAAEe,MAAM,GAAGF,QAAQ;IAC5Be,WAAW5B,EAAEY,OAAO,GAAGC,QAAQ;AAChC,GAAG"}
@@ -0,0 +1,35 @@
1
+ export function getFileUrl(fs, needle, { ...options } = {}) {
2
+ const [file, path] = resolveFilePath(needle);
3
+ if (!path || !needle) return;
4
+ let out;
5
+ if (fs?.getUrl) {
6
+ try {
7
+ out = fs.getUrl(needle, options);
8
+ } catch (e) {
9
+ console.error(`failed to get file url`, needle, e);
10
+ }
11
+ }
12
+ if (!out && file) {
13
+ out = file.meta?.url || file.url;
14
+ }
15
+ return out;
16
+ }
17
+ export function resolveFilePath(needle) {
18
+ if (!needle) {
19
+ return [
20
+ undefined,
21
+ undefined
22
+ ];
23
+ }
24
+ let file = typeof needle === 'string' ? undefined : needle;
25
+ let path = typeof needle === 'string' ? needle : needle.path;
26
+ if (file && !path) {
27
+ path = file.path;
28
+ }
29
+ return [
30
+ file,
31
+ path
32
+ ];
33
+ }
34
+
35
+ //# sourceMappingURL=getFileUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/fs/utils/getFileUrl.ts"],"sourcesContent":["import type { IFileStat, IFileSystem } from '../IFileSystem';\nimport type { FileUrlOptions } from '../types';\n\nexport function getFileUrl(\n\tfs: IFileSystem,\n\tneedle?: IFileStat | string,\n\t{\n\t\t...options\n\t}: FileUrlOptions & {\n\t\tfs?: IFileSystem;\n\t} = {},\n) {\n\tconst [file, path] = resolveFilePath(needle);\n\tif (!path || !needle) return;\n\n\tlet out: string | undefined;\n\tif (fs?.getUrl) {\n\t\ttry {\n\t\t\tout = fs.getUrl(needle, options);\n\t\t} catch (e) {\n\t\t\tconsole.error(`failed to get file url`, needle, e);\n\t\t}\n\t}\n\tif (!out && file) {\n\t\tout = file.meta?.url || (file as any).url;\n\t}\n\treturn out;\n}\n\nexport function resolveFilePath(needle: IFileStat): [IFileStat, string];\nexport function resolveFilePath(needle: string): [undefined, string];\nexport function resolveFilePath(needle?: IFileStat | string): [IFileStat | undefined, string | undefined];\nexport function resolveFilePath(needle?: IFileStat | string): [IFileStat | undefined, string | undefined] {\n\tif (!needle) {\n\t\treturn [undefined, undefined];\n\t}\n\tlet file = typeof needle === 'string' ? undefined : needle;\n\tlet path = typeof needle === 'string' ? needle : needle.path;\n\n\tif (file && !path) {\n\t\tpath = file.path;\n\t}\n\treturn [file, path];\n}\n"],"names":["getFileUrl","fs","needle","options","file","path","resolveFilePath","out","getUrl","e","console","error","meta","url","undefined"],"mappings":"AAGA,OAAO,SAASA,WACfC,EAAe,EACfC,MAA2B,EAC3B,EACC,GAAGC,SAGH,GAAG,CAAC,CAAC;IAEN,MAAM,CAACC,MAAMC,KAAK,GAAGC,gBAAgBJ;IACrC,IAAI,CAACG,QAAQ,CAACH,QAAQ;IAEtB,IAAIK;IACJ,IAAIN,IAAIO,QAAQ;QACf,IAAI;YACHD,MAAMN,GAAGO,MAAM,CAACN,QAAQC;QACzB,EAAE,OAAOM,GAAG;YACXC,QAAQC,KAAK,CAAC,CAAC,sBAAsB,CAAC,EAAET,QAAQO;QACjD;IACD;IACA,IAAI,CAACF,OAAOH,MAAM;QACjBG,MAAMH,KAAKQ,IAAI,EAAEC,OAAO,AAACT,KAAaS,GAAG;IAC1C;IACA,OAAON;AACR;AAKA,OAAO,SAASD,gBAAgBJ,MAA2B;IAC1D,IAAI,CAACA,QAAQ;QACZ,OAAO;YAACY;YAAWA;SAAU;IAC9B;IACA,IAAIV,OAAO,OAAOF,WAAW,WAAWY,YAAYZ;IACpD,IAAIG,OAAO,OAAOH,WAAW,WAAWA,SAASA,OAAOG,IAAI;IAE5D,IAAID,QAAQ,CAACC,MAAM;QAClBA,OAAOD,KAAKC,IAAI;IACjB;IACA,OAAO;QAACD;QAAMC;KAAK;AACpB"}
@@ -0,0 +1,22 @@
1
+ import { ArrayBuffers, classOf } from "@wener/utils";
2
+ export function resolveData(data) {
3
+ let buf;
4
+ if (typeof data === 'string') {
5
+ buf = ArrayBuffers.toUint8Array(ArrayBuffers.from(data, 'utf8'));
6
+ } else if (data instanceof ArrayBuffer) {
7
+ buf = new Uint8Array(data);
8
+ } else if (data instanceof Uint8Array) {
9
+ buf = data;
10
+ } else {
11
+ throw new Error(`unable to resolve data: ${typeof data} ${classOf(data)}`);
12
+ }
13
+ return buf;
14
+ }
15
+ export function getPath(f) {
16
+ if (typeof f === 'string') {
17
+ return f;
18
+ }
19
+ return f.path;
20
+ }
21
+
22
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/fs/utils.ts"],"sourcesContent":["import { ArrayBuffers, classOf } from '@wener/utils';\nimport type { IFileStat, WritableData } from './IFileSystem';\n\nexport function resolveData(data: WritableData) {\n\tlet buf: Uint8Array;\n\tif (typeof data === 'string') {\n\t\tbuf = ArrayBuffers.toUint8Array(ArrayBuffers.from(data, 'utf8'));\n\t} else if (data instanceof ArrayBuffer) {\n\t\tbuf = new Uint8Array(data);\n\t} else if (data instanceof Uint8Array) {\n\t\tbuf = data;\n\t} else {\n\t\tthrow new Error(`unable to resolve data: ${typeof data} ${classOf(data)}`);\n\t}\n\treturn buf;\n}\n\nexport function getPath(f: IFileStat | string) {\n\tif (typeof f === 'string') {\n\t\treturn f;\n\t}\n\treturn f.path;\n}\n"],"names":["ArrayBuffers","classOf","resolveData","data","buf","toUint8Array","from","ArrayBuffer","Uint8Array","Error","getPath","f","path"],"mappings":"AAAA,SAASA,YAAY,EAAEC,OAAO,QAAQ,eAAe;AAGrD,OAAO,SAASC,YAAYC,IAAkB;IAC7C,IAAIC;IACJ,IAAI,OAAOD,SAAS,UAAU;QAC7BC,MAAMJ,aAAaK,YAAY,CAACL,aAAaM,IAAI,CAACH,MAAM;IACzD,OAAO,IAAIA,gBAAgBI,aAAa;QACvCH,MAAM,IAAII,WAAWL;IACtB,OAAO,IAAIA,gBAAgBK,YAAY;QACtCJ,MAAMD;IACP,OAAO;QACN,MAAM,IAAIM,MAAM,CAAC,wBAAwB,EAAE,OAAON,KAAK,CAAC,EAAEF,QAAQE,OAAO;IAC1E;IACA,OAAOC;AACR;AAEA,OAAO,SAASM,QAAQC,CAAqB;IAC5C,IAAI,OAAOA,MAAM,UAAU;QAC1B,OAAOA;IACR;IACA,OAAOA,EAAEC,IAAI;AACd"}
package/lib/index.js CHANGED
@@ -4,3 +4,4 @@
4
4
  /**
5
5
  * @deprecated
6
6
  */ export { resolvePagination as normalizePagination } from "./data/resolvePagination.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @deprecated\n */\nexport { parseSort, type SortRule } from './data/parseSort';\n/**\n * @deprecated\n */\nexport { resolvePagination as normalizePagination } from './data/resolvePagination';\n"],"names":["parseSort","resolvePagination","normalizePagination"],"mappings":"AAAA;;CAEC,GACD,SAASA,SAAS,QAAuB,mBAAmB;AAC5D;;CAEC,GACD,SAASC,qBAAqBC,mBAAmB,QAAQ,2BAA2B"}