@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,136 @@
1
+ import { join, normalize, relative, sep } from 'pathe';
2
+ import type { IFileStat, IFileSystem, IServerFileSystem, ReadFileOptions } from './IFileSystem';
3
+ import { getPath } from './utils';
4
+
5
+ class SandboxSecurityError extends Error {
6
+ constructor(message: string) {
7
+ super(message);
8
+ this.name = 'SandboxSecurityError';
9
+ }
10
+ }
11
+
12
+ export function createSandboxFileSystem(
13
+ fs: IServerFileSystem,
14
+ basePath: string,
15
+ ): IServerFileSystem & {
16
+ fs: IServerFileSystem;
17
+ basePath: string;
18
+ } {
19
+ return new SandboxFS(fs, basePath);
20
+ }
21
+
22
+ class SandboxFS implements IServerFileSystem {
23
+ fs: IServerFileSystem;
24
+ basePath: string;
25
+
26
+ constructor(fs: IServerFileSystem, basePath: string) {
27
+ this.fs = fs;
28
+ this.basePath = normalize(basePath);
29
+ }
30
+
31
+ private _resolvePath(userPath: string): string {
32
+ const fullPath = join(this.basePath, userPath);
33
+
34
+ const normalizedFullPath = normalize(fullPath);
35
+
36
+ const rel = relative(this.basePath, normalizedFullPath);
37
+ if (rel.startsWith('..') || rel === '..') {
38
+ throw new SandboxSecurityError(`Path traversal attempt detected: ${userPath}`);
39
+ }
40
+ return normalizedFullPath;
41
+ }
42
+
43
+ private _stripPath(fullPath: string): string {
44
+ const relPath = relative(this.basePath, fullPath);
45
+ // 保证返回的是一个以 '/' 开头的绝对路径(在沙箱内)
46
+ return sep + relPath.split(sep).join('/');
47
+ }
48
+
49
+ private _processStat(stat: IFileStat): IFileStat {
50
+ stat.path = this._stripPath(stat.path);
51
+ stat.directory = this._stripPath(stat.directory);
52
+ return stat;
53
+ }
54
+
55
+ async stat(path: string, options?: any): Promise<IFileStat> {
56
+ const fullPath = this._resolvePath(path);
57
+ const result = await this.fs.stat(fullPath, options);
58
+ return this._processStat(result);
59
+ }
60
+
61
+ async readdir(dir: string, options?: any): Promise<IFileStat[]> {
62
+ const fullPath = this._resolvePath(dir);
63
+ const results = await this.fs.readdir(fullPath, options);
64
+ return results.map((stat) => this._processStat(stat));
65
+ }
66
+
67
+ async exists(path: string): Promise<boolean> {
68
+ try {
69
+ const fullPath = this._resolvePath(path);
70
+ return await this.fs.exists(fullPath);
71
+ } catch (e) {
72
+ if (e instanceof SandboxSecurityError) {
73
+ return false; // 越界访问视为不存在
74
+ }
75
+ throw e;
76
+ }
77
+ }
78
+
79
+ mkdir(path: string, options?: any): Promise<void> {
80
+ const fullPath = this._resolvePath(path);
81
+ return this.fs.mkdir(fullPath, options);
82
+ }
83
+
84
+ readFile(path: string, options?: ReadFileOptions & { encoding: 'text' }): Promise<string>;
85
+ readFile(path: string, options?: ReadFileOptions): Promise<Uint8Array>;
86
+ readFile(path: string, options?: ReadFileOptions): Promise<string | Uint8Array> {
87
+ const fullPath = this._resolvePath(path);
88
+ return this.fs.readFile(fullPath, options);
89
+ }
90
+
91
+ writeFile(path: string, data: any, options?: any): Promise<void> {
92
+ const fullPath = this._resolvePath(path);
93
+ return this.fs.writeFile(fullPath, data, options);
94
+ }
95
+
96
+ rm(path: string, options?: any): Promise<void> {
97
+ const fullPath = this._resolvePath(path);
98
+ return this.fs.rm(fullPath, options);
99
+ }
100
+
101
+ rename(oldPath: string, newPath: string, options?: any): Promise<void> {
102
+ const fullOldPath = this._resolvePath(oldPath);
103
+ const fullNewPath = this._resolvePath(newPath);
104
+ return this.fs.rename(fullOldPath, fullNewPath, options);
105
+ }
106
+
107
+ copy(src: string, dest: string, options?: any): Promise<void> {
108
+ const fullSrc = this._resolvePath(src);
109
+ const fullDest = this._resolvePath(dest);
110
+ return this.fs.copy(fullSrc, fullDest, options);
111
+ }
112
+
113
+ createReadStream(path: string, options?: any): any {
114
+ const fullPath = this._resolvePath(path);
115
+ if (!this.fs.createReadStream) {
116
+ throw new Error('Underlying filesystem does not support createReadStream');
117
+ }
118
+ return this.fs.createReadStream(fullPath, options);
119
+ }
120
+
121
+ createWriteStream(path: string, options?: any): any {
122
+ const fullPath = this._resolvePath(path);
123
+ if (!this.fs.createWriteStream) {
124
+ throw new Error('Underlying filesystem does not support createWriteStream');
125
+ }
126
+ return this.fs.createWriteStream(fullPath, options);
127
+ }
128
+
129
+ getUrl(file: IFileStat, options?: any): string | undefined {
130
+ let path = this._resolvePath(getPath(file.path));
131
+ if (this.fs.getUrl) {
132
+ return this.fs.getUrl(path, options);
133
+ }
134
+ return;
135
+ }
136
+ }
@@ -0,0 +1,172 @@
1
+ import type { Readable, Writable } from 'node:stream';
2
+ import { maybeFunction, type MaybeFunction } from '@wener/utils';
3
+ import type { FileStat, GetDirectoryContentsOptions, ResponseDataDetailed, WebDAVClient } from 'webdav';
4
+ import type {
5
+ IFileStat,
6
+ IFileSystem,
7
+ MkdirOptions,
8
+ ReaddirOptions,
9
+ ReadFileOptions,
10
+ RmOptions,
11
+ StatOptions,
12
+ } from './IFileSystem';
13
+
14
+ export function createWebDavFileSystem({ client }: { client: MaybeFunction<WebDAVClient> }): IFileSystem {
15
+ let fs = new WebdavFS({ client });
16
+ return fs;
17
+ }
18
+
19
+ class WebdavFS implements IFileSystem {
20
+ _client: MaybeFunction<WebDAVClient>;
21
+
22
+ constructor({
23
+ client = () => {
24
+ throw new Error('WebdavFS client not initialized');
25
+ },
26
+ }: {
27
+ client?: MaybeFunction<WebDAVClient>;
28
+ }) {
29
+ this._client = client;
30
+ }
31
+
32
+ set client(client: MaybeFunction<WebDAVClient>) {
33
+ this._client = client;
34
+ }
35
+
36
+ get client(): WebDAVClient {
37
+ return maybeFunction(this._client);
38
+ }
39
+
40
+ private toEntry(input: FileStat): IFileStat {
41
+ const { filename: path, basename, lastmod, type: kind, etag, size, mime } = input;
42
+ let meta: Record<string, any> = {};
43
+ if (etag) {
44
+ meta['etag'] = etag;
45
+ }
46
+ if (mime) {
47
+ meta['mime'] = mime;
48
+ }
49
+ return {
50
+ directory: path.substring(0, path.lastIndexOf('/')) || '/',
51
+ path,
52
+ name: basename,
53
+ mtime: +new Date(lastmod),
54
+ kind,
55
+ meta,
56
+ size,
57
+ };
58
+ }
59
+
60
+ private getData<T>(input: ResponseDataDetailed<T> | T): T {
61
+ if (
62
+ input
63
+ && typeof input === 'object'
64
+ && 'data' in input
65
+ // 'headers' in input &&
66
+ && 'status' in input
67
+ && typeof input.status === 'number'
68
+ ) {
69
+ return input.data;
70
+ }
71
+ return input as T;
72
+ }
73
+
74
+ async readdir(
75
+ path: string,
76
+ { glob, recursive, depth, kind, hidden, signal }: ReaddirOptions = {},
77
+ ): Promise<IFileStat[]> {
78
+ // webdav depth 只支持 0,1
79
+ let o: GetDirectoryContentsOptions = {};
80
+ if (recursive) {
81
+ o.deep = true;
82
+ }
83
+ let res = await this.client.getDirectoryContents(path, {
84
+ deep: recursive,
85
+ signal,
86
+ });
87
+
88
+ let out: FileStat[] = this.getData(res);
89
+
90
+ if (!recursive && typeof depth === 'number' && depth >= 2) {
91
+ let l = depth;
92
+ let cur = out;
93
+ while (l-- > 1) {
94
+ let sub = (
95
+ await Promise.all(
96
+ cur.map(async (v) => {
97
+ if (v.type === 'directory') {
98
+ return this.getData(await this.client.getDirectoryContents(v.filename, { signal }));
99
+ }
100
+ return [];
101
+ }),
102
+ )
103
+ ).flat();
104
+ out = out.concat(...sub);
105
+ cur = sub;
106
+ }
107
+ }
108
+
109
+ if (glob) {
110
+ const { default: def, matcher = def.matcher } = await import('micromatch');
111
+ const match = matcher(glob);
112
+ out = out.filter((v) => match(v.filename));
113
+ }
114
+ if (kind) {
115
+ out = out.filter((v) => v.type === kind);
116
+ }
117
+ if (!hidden) {
118
+ out = out.filter((v) => !v.basename.startsWith('.'));
119
+ }
120
+ return out.map((stat) => this.toEntry(stat));
121
+ }
122
+
123
+ async stat(path: string, { signal }: StatOptions = {}): Promise<IFileStat> {
124
+ const res = await this.client.stat(path, { details: true, signal });
125
+ return this.toEntry(this.getData(res));
126
+ }
127
+
128
+ async mkdir(path: string, { recursive, signal }: MkdirOptions = {}): Promise<void> {
129
+ await this.client.createDirectory(path, { recursive, signal });
130
+ }
131
+
132
+ async readFile(path: string, options: ReadFileOptions = {}): Promise<any> {
133
+ const format = options.encoding === 'text' ? 'text' : 'binary';
134
+ const res = await this.client.getFileContents(path, { format, ...options });
135
+ return this.getData(res);
136
+ }
137
+
138
+ async writeFile(path: string, data: string | Buffer | ArrayBuffer | Readable, options = {}): Promise<void> {
139
+ await this.client.putFileContents(path, data, options);
140
+ }
141
+
142
+ async rm(path: string, { signal, force, recursive }: RmOptions = {}): Promise<void> {
143
+ try {
144
+ await this.client.deleteFile(path);
145
+ } catch (e: any) {
146
+ if (force && e.status === 404) {
147
+ return;
148
+ }
149
+ throw e;
150
+ }
151
+ }
152
+
153
+ async rename(oldPath: string, newPath: string, options = {}): Promise<void> {
154
+ await this.client.moveFile(oldPath, newPath, options);
155
+ }
156
+
157
+ async exists(path: string): Promise<boolean> {
158
+ return await this.client.exists(path);
159
+ }
160
+
161
+ async copy(src: string, dest: string, options = {}): Promise<void> {
162
+ await this.client.copyFile(src, dest, options);
163
+ }
164
+
165
+ createReadStream(path: string, options = {}): Readable {
166
+ return this.client.createReadStream(path, options);
167
+ }
168
+
169
+ createWriteStream(path: string, options = {}): Writable {
170
+ return this.client.createWriteStream(path, options);
171
+ }
172
+ }
@@ -0,0 +1,23 @@
1
+ import { types } from 'mime-types';
2
+ import pathe from 'pathe';
3
+
4
+ export function findMimeType(path: string | undefined | null) {
5
+ // fix extname error
6
+ // https://github.com/jshttp/mime-types/issues/111
7
+
8
+ if (!path || typeof path !== 'string') {
9
+ return false;
10
+ }
11
+
12
+ // get the extension ("ext" or ".ext" or full path)
13
+ const extension = pathe
14
+ .extname('x.' + path)
15
+ .toLowerCase()
16
+ .slice(1);
17
+
18
+ if (!extension) {
19
+ return false;
20
+ }
21
+
22
+ return types[extension] || false;
23
+ }
@@ -0,0 +1,8 @@
1
+ export type * from './IFileSystem';
2
+ export { createSandboxFileSystem } from './createSandboxFileSystem';
3
+ export { createMemoryFileSystem } from './createMemoryFileSystem';
4
+ export { createWebDavFileSystem } from './createWebDavFileSystem';
5
+ export { createBrowserFileSystem } from './createBrowserFileSystem';
6
+ export { findMimeType } from './findMimeType';
7
+ export { type FileUrlOptions, FileUrlOptionsSchema } from './types';
8
+ export { FileSystemError, FileSystemErrorCode } from './FileSystemError';
@@ -0,0 +1,92 @@
1
+ import { oc } from '@orpc/contract';
2
+ import { z } from 'zod/v4';
3
+ import { FileKindSchema } from '../types';
4
+
5
+ export type FileStat = z.infer<typeof FileStatSchema>;
6
+ export const FileStatSchema = z.object({
7
+ directory: z.string(),
8
+ path: z.string(),
9
+ name: z.string(),
10
+ kind: FileKindSchema,
11
+ mtime: z.coerce.date(),
12
+ size: z.coerce.number().nonnegative().default(0),
13
+ meta: z.record(z.string(), z.any()),
14
+ });
15
+ export type ReaddirInput = z.infer<typeof ReaddirInputSchema>;
16
+ export const ReaddirInputSchema = z.object({
17
+ dir: z.string().nonempty(),
18
+ glob: z.string().optional(),
19
+ recursive: z.boolean().default(false),
20
+ depth: z.number().min(0).optional(),
21
+ kind: FileKindSchema.optional(),
22
+ cursor: z.string().optional(),
23
+ hidden: z.boolean().default(false),
24
+ });
25
+ const ReaddirOutputSchema = z.object({
26
+ data: FileStatSchema.array(),
27
+ });
28
+ const StatInputSchema = z.object({
29
+ path: z.string(),
30
+ });
31
+ const StatOutputSchema = z.object({
32
+ data: FileStatSchema,
33
+ });
34
+ const CreateDirectoryInputSchema = z.object({
35
+ path: z.string(),
36
+ recursive: z.boolean().nullish(),
37
+ });
38
+ const CreateDirectoryOutputSchema = z.object({}).default({});
39
+ const RenameInputSchema = z.object({
40
+ oldPath: z.string(),
41
+ newPath: z.string(),
42
+ overwrite: z.boolean().nullish(),
43
+ });
44
+ const RenameOutputSchema = z.object({}).default({});
45
+ const ExistsInputSchema = z.object({
46
+ path: z.string(),
47
+ });
48
+ const ExistsOutputSchema = z.object({
49
+ data: z.boolean(),
50
+ });
51
+ const CopyInputSchema = z.object({
52
+ src: z.string(),
53
+ dest: z.string(),
54
+ overwrite: z.boolean().nullish(),
55
+ shallow: z.boolean().nullish(),
56
+ });
57
+ const CopyOutputSchema = z.object({}).default({});
58
+ const ReadFileInputSchema = z.object({
59
+ path: z.string(),
60
+ });
61
+ const ReadFileOutputSchema = z.object({
62
+ base64: z.string(),
63
+ });
64
+ const WriteFileInputSchema = z.object({
65
+ path: z.string(),
66
+ base64: z.string(),
67
+ overwrite: z.boolean().optional(),
68
+ });
69
+ const WriteFileOutputSchema = z.object({});
70
+ const RemoveInputSchema = z.object({
71
+ path: z.string(),
72
+ recursive: z.boolean().nullish(),
73
+ force: z.boolean().nullish(),
74
+ });
75
+ const RemoveOutputSchema = z.object({}).default({});
76
+ export const FileSystemContract = {
77
+ readdir: oc.input(ReaddirInputSchema).output(ReaddirOutputSchema).route({ description: 'List directory contents' }),
78
+ stat: oc.input(StatInputSchema).output(StatOutputSchema).route({
79
+ method: 'GET',
80
+ description: 'Get file or directory status',
81
+ }),
82
+ mkdir: oc
83
+ .input(CreateDirectoryInputSchema)
84
+ .output(CreateDirectoryOutputSchema)
85
+ .route({ description: 'Create a directory' }),
86
+ readFile: oc.input(ReadFileInputSchema).output(ReadFileOutputSchema).route({ description: 'Read file' }),
87
+ writeFile: oc.input(WriteFileInputSchema).output(WriteFileOutputSchema),
88
+ rename: oc.input(RenameInputSchema).output(RenameOutputSchema),
89
+ exists: oc.input(ExistsInputSchema).output(ExistsOutputSchema),
90
+ copy: oc.input(CopyInputSchema).output(CopyOutputSchema),
91
+ rm: oc.input(RemoveInputSchema).output(RemoveOutputSchema),
92
+ };
@@ -0,0 +1,115 @@
1
+ import type { Readable, Writable } from 'node:stream';
2
+ import type { ContractRouterClient } from '@orpc/contract';
3
+ import { ArrayBuffers } from '@wener/utils';
4
+ import type {
5
+ CopyOptions,
6
+ CreateReadStreamOptions,
7
+ CreateWriteStreamOptions,
8
+ IFileSystem,
9
+ MkdirOptions,
10
+ ReaddirOptions,
11
+ ReadFileOptions,
12
+ RenameOptions,
13
+ RmOptions,
14
+ StatOptions,
15
+ WritableData,
16
+ WriteFileOptions,
17
+ } from '../IFileSystem';
18
+ import { resolveData } from '../utils';
19
+ import { FileSystemContract } from './FileSystemContract';
20
+
21
+ type FileSystemContractClient = ContractRouterClient<typeof FileSystemContract>;
22
+
23
+ export function createContractClientFileSystem(client: FileSystemContractClient): IFileSystem & {
24
+ client: FileSystemContractClient;
25
+ } {
26
+ return new ContractFS(client);
27
+ }
28
+
29
+ class ContractFS implements IFileSystem {
30
+ client: FileSystemContractClient;
31
+
32
+ constructor(client: FileSystemContractClient) {
33
+ this.client = client;
34
+ }
35
+
36
+ async readdir(dir: string, options: ReaddirOptions = {}) {
37
+ const { data } = await this.client.readdir({ dir, ...options });
38
+ return data.map((stat) => ({
39
+ ...stat,
40
+ mtime: stat.mtime.getTime(),
41
+ }));
42
+ }
43
+
44
+ async stat(entry: string, options?: StatOptions) {
45
+ const { data } = await this.client.stat({ path: entry });
46
+ return {
47
+ ...data,
48
+ mtime: data.mtime.getTime(),
49
+ };
50
+ }
51
+
52
+ async mkdir(path: string, options?: MkdirOptions) {
53
+ await this.client.mkdir({
54
+ path,
55
+ recursive: options?.recursive,
56
+ });
57
+ }
58
+
59
+ readFile(path: string, options?: ReadFileOptions & { encoding: 'text' }): Promise<string>;
60
+ readFile(path: string, options?: ReadFileOptions): Promise<Uint8Array>;
61
+ async readFile(path: string, options?: ReadFileOptions): Promise<string | Uint8Array> {
62
+ // Note: The contract doesn't currently support encoding options.
63
+ const { base64 } = await this.client.readFile({ path });
64
+ let enc = options?.encoding || 'binary';
65
+ let buf = ArrayBuffers.fromBase64(base64);
66
+ switch (enc) {
67
+ case 'text':
68
+ return ArrayBuffers.toString(buf);
69
+ }
70
+ return buf;
71
+ }
72
+
73
+ async writeFile(path: string, data: WritableData, options?: WriteFileOptions) {
74
+ let buf = resolveData(data);
75
+ await this.client.writeFile({ path, base64: ArrayBuffers.toBase64(buf), ...options });
76
+ }
77
+
78
+ async rename(oldPath: string, newPath: string, options?: RenameOptions) {
79
+ await this.client.rename({
80
+ oldPath,
81
+ newPath,
82
+ overwrite: options?.overwrite,
83
+ });
84
+ }
85
+
86
+ async exists(path: string) {
87
+ const { data } = await this.client.exists({ path });
88
+ return data;
89
+ }
90
+
91
+ async copy(src: string, dest: string, options?: CopyOptions) {
92
+ await this.client.copy({
93
+ src,
94
+ dest,
95
+ overwrite: options?.overwrite,
96
+ shallow: options?.shallow,
97
+ });
98
+ }
99
+
100
+ async rm(path: string, options?: RmOptions) {
101
+ await this.client.rm({
102
+ path,
103
+ recursive: options?.recursive,
104
+ force: options?.force,
105
+ });
106
+ }
107
+
108
+ createReadStream(path: string, options?: CreateReadStreamOptions): Readable {
109
+ throw new Error('createReadStream is not implemented in ContractFS');
110
+ }
111
+
112
+ createWriteStream(path: string, options?: CreateWriteStreamOptions): Writable {
113
+ throw new Error('createWriteStream is not implemented in ContractFS');
114
+ }
115
+ }
@@ -0,0 +1,2 @@
1
+ export { createContractClientFileSystem } from './createContractClientFileSystem';
2
+ export { FileSystemContract } from './FileSystemContract';
@@ -0,0 +1,64 @@
1
+ import { implement } from '@orpc/server';
2
+ import { ArrayBuffers } from '@wener/utils';
3
+ import type { IFileSystem } from '../../IFileSystem';
4
+ import { FileSystemContract } from '../FileSystemContract';
5
+
6
+ export function createFileSystemContractImpl(ifs: IFileSystem) {
7
+ const os = implement(FileSystemContract);
8
+
9
+ return {
10
+ readdir: os.readdir.handler(async ({ input }) => {
11
+ return {
12
+ data: await ifs.readdir(input.dir),
13
+ };
14
+ }),
15
+ stat: os.stat.handler(async ({ input }) => {
16
+ return {
17
+ data: await ifs.stat(input.path),
18
+ };
19
+ }),
20
+ mkdir: os.mkdir.handler(async ({ input }) => {
21
+ await ifs.mkdir(input.path, {
22
+ recursive: input.recursive ?? false,
23
+ });
24
+ return {};
25
+ }),
26
+ rename: os.rename.handler(async ({ input }) => {
27
+ await ifs.rename(input.oldPath, input.newPath, {
28
+ overwrite: input.overwrite ?? false,
29
+ });
30
+ return {};
31
+ }),
32
+ exists: os.exists.handler(async ({ input }) => {
33
+ return {
34
+ data: await ifs.exists(input.path),
35
+ };
36
+ }),
37
+ copy: os.copy.handler(async ({ input }) => {
38
+ await ifs.copy(input.src, input.dest, {
39
+ overwrite: input.overwrite ?? false,
40
+ shallow: input.shallow ?? false,
41
+ });
42
+ return {};
43
+ }),
44
+ readFile: os.readFile.handler(async ({ input }) => {
45
+ return {
46
+ base64: ArrayBuffers.toBase64(await ifs.readFile(input.path, { encoding: 'binary' })),
47
+ };
48
+ }),
49
+ writeFile: os.writeFile.handler(async ({ input }) => {
50
+ await ifs.writeFile(input.path, Buffer.from(input.base64, 'base64'), {
51
+ overwrite: input.overwrite,
52
+ });
53
+ return {};
54
+ }),
55
+
56
+ rm: os.rm.handler(async ({ input }) => {
57
+ await ifs.rm(input.path, {
58
+ recursive: input.recursive ?? undefined,
59
+ force: input.force ?? undefined,
60
+ });
61
+ return {};
62
+ }),
63
+ };
64
+ }
@@ -0,0 +1 @@
1
+ export { createFileSystemContractImpl } from './createFileSystemContractImpl';