@wener/common 2.0.3 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/lib/ai/qwen3vl/index.js +1 -1
  2. package/lib/ai/qwen3vl/utils.js +15 -15
  3. package/lib/ai/qwen3vl/utils.js.map +1 -1
  4. package/lib/ai/vision/DocLayoutElementTypeSchema.js +22 -22
  5. package/lib/ai/vision/ImageAnnotationSchema.js +63 -47
  6. package/lib/ai/vision/index.js +2 -2
  7. package/lib/ai/vision/resolveImageAnnotation.js +81 -95
  8. package/lib/cn/ChineseResidentIdNo.js +55 -41
  9. package/lib/cn/ChineseResidentIdNo.js.map +1 -1
  10. package/lib/cn/ChineseResidentIdNo.mod.js +6 -1
  11. package/lib/cn/ChineseResidentIdNo.test.js +22 -21
  12. package/lib/cn/DivisionCode.js +220 -235
  13. package/lib/cn/DivisionCode.mod.js +6 -1
  14. package/lib/cn/DivisionCode.test.js +92 -121
  15. package/lib/cn/Mod11.js +18 -37
  16. package/lib/cn/Mod11.js.map +1 -1
  17. package/lib/cn/Mod31.js +23 -41
  18. package/lib/cn/UnifiedSocialCreditCode.js +143 -137
  19. package/lib/cn/UnifiedSocialCreditCode.mod.js +6 -1
  20. package/lib/cn/UnifiedSocialCreditCode.test.js +21 -15
  21. package/lib/cn/formatChineseAmount.js +46 -71
  22. package/lib/cn/index.js +6 -6
  23. package/lib/cn/mod.js +5 -3
  24. package/lib/cn/parseChineseNumber.js +81 -85
  25. package/lib/cn/parseChineseNumber.test.js +183 -261
  26. package/lib/cn/pinyin/cartesianProduct.js +19 -19
  27. package/lib/cn/pinyin/cartesianProduct.test.js +78 -178
  28. package/lib/cn/pinyin/loader.js +13 -11
  29. package/lib/cn/pinyin/preload.js +2 -1
  30. package/lib/cn/pinyin/toPinyin.test.js +149 -161
  31. package/lib/cn/pinyin/toPinyinPure.js +28 -23
  32. package/lib/cn/pinyin/transform.js +11 -11
  33. package/lib/cn/types.d.js +2 -2
  34. package/lib/consola/createStandardConsolaReporter.js +14 -15
  35. package/lib/consola/formatLogObject.js +149 -133
  36. package/lib/consola/formatLogObject.js.map +1 -1
  37. package/lib/consola/formatLogObject.test.js +167 -178
  38. package/lib/consola/index.js +2 -2
  39. package/lib/data/formatSort.js +14 -12
  40. package/lib/data/formatSort.test.js +33 -33
  41. package/lib/data/index.js +3 -3
  42. package/lib/data/maybeNumber.js +23 -23
  43. package/lib/data/maybeNumber.js.map +1 -1
  44. package/lib/data/parseSort.js +75 -68
  45. package/lib/data/parseSort.test.js +196 -187
  46. package/lib/data/resolvePagination.js +38 -39
  47. package/lib/data/resolvePagination.test.js +228 -218
  48. package/lib/data/types.d.js +2 -2
  49. package/lib/data/types.d.js.map +1 -1
  50. package/lib/dayjs/dayjs.js +20 -20
  51. package/lib/dayjs/formatDuration.js +56 -56
  52. package/lib/dayjs/formatDuration.js.map +1 -1
  53. package/lib/dayjs/formatDuration.test.js +63 -77
  54. package/lib/dayjs/index.js +4 -4
  55. package/lib/dayjs/parseDuration.js +21 -26
  56. package/lib/dayjs/parseRelativeTime.js +65 -66
  57. package/lib/dayjs/parseRelativeTime.test.js +227 -243
  58. package/lib/dayjs/resolveRelativeTime.js +74 -144
  59. package/lib/dayjs/resolveRelativeTime.js.map +1 -1
  60. package/lib/dayjs/resolveRelativeTime.test.js +296 -307
  61. package/lib/decimal/index.js +1 -1
  62. package/lib/decimal/parseDecimal.js +12 -12
  63. package/lib/drain3/Drain.js +321 -0
  64. package/lib/drain3/Drain.js.map +1 -0
  65. package/lib/drain3/LogCluster.js +38 -0
  66. package/lib/drain3/LogCluster.js.map +1 -0
  67. package/lib/drain3/Node.js +39 -0
  68. package/lib/drain3/Node.js.map +1 -0
  69. package/lib/drain3/TemplateMiner.js +205 -0
  70. package/lib/drain3/TemplateMiner.js.map +1 -0
  71. package/lib/drain3/index.js +31 -0
  72. package/lib/drain3/index.js.map +1 -0
  73. package/lib/drain3/persistence/FilePersistence.js +24 -0
  74. package/lib/drain3/persistence/FilePersistence.js.map +1 -0
  75. package/lib/drain3/persistence/MemoryPersistence.js +18 -0
  76. package/lib/drain3/persistence/MemoryPersistence.js.map +1 -0
  77. package/lib/drain3/persistence/PersistenceHandler.js +5 -0
  78. package/lib/drain3/persistence/PersistenceHandler.js.map +1 -0
  79. package/lib/drain3/types.js +7 -0
  80. package/lib/drain3/types.js.map +1 -0
  81. package/lib/emittery/emitter.js +7 -7
  82. package/lib/emittery/index.js +1 -1
  83. package/lib/foundation/schema/SexType.js +15 -12
  84. package/lib/foundation/schema/index.js +1 -1
  85. package/lib/foundation/schema/parseSexType.js +15 -16
  86. package/lib/foundation/schema/types.js +8 -6
  87. package/lib/fs/FileSystemError.js +18 -18
  88. package/lib/fs/IFileSystem.d.js +2 -2
  89. package/lib/fs/IFileSystem.d.js.map +1 -1
  90. package/lib/fs/MemoryFileSystem.test.js +172 -181
  91. package/lib/fs/createBrowserFileSystem.js +222 -233
  92. package/lib/fs/createBrowserFileSystem.js.map +1 -1
  93. package/lib/fs/createMemoryFileSystem.js +473 -510
  94. package/lib/fs/createMemoryFileSystem.js.map +1 -1
  95. package/lib/fs/createSandboxFileSystem.js +102 -101
  96. package/lib/fs/createSandboxFileSystem.js.map +1 -1
  97. package/lib/fs/createWebDavFileSystem.js +162 -132
  98. package/lib/fs/createWebDavFileSystem.js.map +1 -1
  99. package/lib/fs/createWebFileSystem.js +202 -0
  100. package/lib/fs/createWebFileSystem.js.map +1 -0
  101. package/lib/fs/findMimeType.js +14 -14
  102. package/lib/fs/findMimeType.js.map +1 -1
  103. package/lib/fs/index.js +7 -7
  104. package/lib/fs/index.js.map +1 -1
  105. package/lib/fs/minio/createMinioFileSystem.js +977 -0
  106. package/lib/fs/minio/createMinioFileSystem.js.map +1 -0
  107. package/lib/fs/minio/index.js +2 -0
  108. package/lib/fs/minio/index.js.map +1 -0
  109. package/lib/fs/orpc/FileSystemContract.js +57 -57
  110. package/lib/fs/orpc/createContractClientFileSystem.js +88 -88
  111. package/lib/fs/orpc/createContractClientFileSystem.js.map +1 -1
  112. package/lib/fs/orpc/index.js +2 -2
  113. package/lib/fs/orpc/server/createFileSystemContractImpl.js +62 -60
  114. package/lib/fs/orpc/server/createFileSystemContractImpl.js.map +1 -1
  115. package/lib/fs/orpc/server/index.js +1 -1
  116. package/lib/fs/s3/createS3MiniFileSystem.js +756 -689
  117. package/lib/fs/s3/createS3MiniFileSystem.js.map +1 -1
  118. package/lib/fs/s3/index.js +1 -1
  119. package/lib/fs/s3/s3mini.test.js +524 -553
  120. package/lib/fs/scandir.js +56 -56
  121. package/lib/fs/server/createDatabaseFileSystem.js +834 -741
  122. package/lib/fs/server/createDatabaseFileSystem.js.map +1 -1
  123. package/lib/fs/server/createNodeFileSystem.js +407 -380
  124. package/lib/fs/server/createNodeFileSystem.js.map +1 -1
  125. package/lib/fs/server/dbfs.test.js +201 -214
  126. package/lib/fs/server/index.js +1 -1
  127. package/lib/fs/server/loadTestDatabase.js +40 -43
  128. package/lib/fs/tests/runFileSystemTest.js +352 -315
  129. package/lib/fs/tests/runFileSystemTest.js.map +1 -1
  130. package/lib/fs/types.js +17 -20
  131. package/lib/fs/utils/getFileUrl.js +24 -30
  132. package/lib/fs/utils.js +17 -17
  133. package/lib/fs/utils.js.map +1 -1
  134. package/lib/fs/webdav/index.js +2 -0
  135. package/lib/fs/webdav/index.js.map +1 -0
  136. package/lib/index.js +2 -2
  137. package/lib/jsonschema/JsonSchema.js +216 -155
  138. package/lib/jsonschema/JsonSchema.js.map +1 -1
  139. package/lib/jsonschema/JsonSchema.test.js +123 -124
  140. package/lib/jsonschema/forEachJsonSchema.js +41 -41
  141. package/lib/jsonschema/forEachJsonSchema.js.map +1 -1
  142. package/lib/jsonschema/index.js +2 -2
  143. package/lib/jsonschema/types.d.js +2 -2
  144. package/lib/jsonschema/types.d.js.map +1 -1
  145. package/lib/meta/defineFileType.js +32 -38
  146. package/lib/meta/defineInit.js +39 -35
  147. package/lib/meta/defineMetadata.js +37 -34
  148. package/lib/meta/defineMetadata.js.map +1 -1
  149. package/lib/meta/defineMetadata.test.js +13 -12
  150. package/lib/meta/index.js +3 -3
  151. package/lib/orpc/createOpenApiContractClient.js +26 -24
  152. package/lib/orpc/createOpenApiContractClient.js.map +1 -1
  153. package/lib/orpc/createRpcContractClient.js +37 -31
  154. package/lib/orpc/index.js +2 -2
  155. package/lib/orpc/resolveLinkPlugins.js +25 -25
  156. package/lib/password/PHC.js +187 -189
  157. package/lib/password/PHC.js.map +1 -1
  158. package/lib/password/PHC.test.js +517 -535
  159. package/lib/password/Password.js +85 -80
  160. package/lib/password/Password.test.js +330 -364
  161. package/lib/password/createArgon2PasswordAlgorithm.js +50 -51
  162. package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -1
  163. package/lib/password/createBase64PasswordAlgorithm.js +11 -11
  164. package/lib/password/createBase64PasswordAlgorithm.js.map +1 -1
  165. package/lib/password/createBcryptPasswordAlgorithm.js +20 -18
  166. package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -1
  167. package/lib/password/createPBKDF2PasswordAlgorithm.js +65 -52
  168. package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -1
  169. package/lib/password/createScryptPasswordAlgorithm.js +74 -63
  170. package/lib/password/createScryptPasswordAlgorithm.js.map +1 -1
  171. package/lib/password/index.js +5 -5
  172. package/lib/password/server/index.js +1 -1
  173. package/lib/resource/Identifiable.js +2 -2
  174. package/lib/resource/ListQuery.js +42 -42
  175. package/lib/resource/ListQuery.js.map +1 -1
  176. package/lib/resource/getTitleOfResource.js +5 -5
  177. package/lib/resource/index.js +2 -2
  178. package/lib/resource/index.js.map +1 -1
  179. package/lib/resource/schema/AnyResourceSchema.js +91 -89
  180. package/lib/resource/schema/BaseResourceSchema.js +26 -26
  181. package/lib/resource/schema/ResourceActionType.js +117 -115
  182. package/lib/resource/schema/ResourceStatus.js +94 -92
  183. package/lib/resource/schema/ResourceType.js +25 -23
  184. package/lib/resource/schema/index.js +5 -5
  185. package/lib/resource/schema/types.js +86 -55
  186. package/lib/resource/schema/types.test.js +16 -13
  187. package/lib/s3/formatS3Url.js +60 -60
  188. package/lib/s3/formatS3Url.js.map +1 -1
  189. package/lib/s3/formatS3Url.test.js +238 -261
  190. package/lib/s3/index.js +2 -2
  191. package/lib/s3/parseS3Url.js +61 -60
  192. package/lib/s3/parseS3Url.js.map +1 -1
  193. package/lib/s3/parseS3Url.test.js +270 -269
  194. package/lib/schema/SchemaRegistry.js +41 -42
  195. package/lib/schema/SchemaRegistry.js.map +1 -1
  196. package/lib/schema/SchemaRegistry.mod.js +1 -1
  197. package/lib/schema/TypeSchema.d.js +2 -2
  198. package/lib/schema/TypeSchema.d.js.map +1 -1
  199. package/lib/schema/createSchemaData.js +113 -67
  200. package/lib/schema/createSchemaData.js.map +1 -1
  201. package/lib/schema/findJsonSchemaByPath.js +28 -23
  202. package/lib/schema/findJsonSchemaByPath.js.map +1 -1
  203. package/lib/schema/formatZodError.js +113 -134
  204. package/lib/schema/formatZodError.js.map +1 -1
  205. package/lib/schema/formatZodError.test.js +192 -195
  206. package/lib/schema/getSchemaCache.js +7 -7
  207. package/lib/schema/getSchemaOptions.js +17 -16
  208. package/lib/schema/index.js +6 -6
  209. package/lib/schema/toJsonSchema.js +196 -190
  210. package/lib/schema/toJsonSchema.js.map +1 -1
  211. package/lib/schema/toJsonSchema.test.js +34 -26
  212. package/lib/schema/validate.js +106 -97
  213. package/lib/schema/validate.js.map +1 -1
  214. package/lib/tools/generateSchema.js +40 -40
  215. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +74 -74
  216. package/lib/utils/buildBaseUrl.js +8 -8
  217. package/lib/utils/buildRedactorFormSchema.js +55 -54
  218. package/lib/utils/buildRedactorFormSchema.js.map +1 -1
  219. package/lib/utils/getEstimateProcessTime.js +24 -19
  220. package/lib/utils/index.js +3 -3
  221. package/lib/utils/resolveFeatureOptions.js +9 -9
  222. package/package.json +37 -18
  223. package/src/ai/qwen3vl/utils.ts +1 -1
  224. package/src/ai/vision/index.ts +2 -2
  225. package/src/cn/ChineseResidentIdNo.ts +1 -1
  226. package/src/cn/Mod11.ts +1 -1
  227. package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +1 -1
  228. package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +0 -23
  229. package/src/cn/index.ts +1 -2
  230. package/src/cn/parseChineseNumber.test.ts +4 -4
  231. package/src/consola/formatLogObject.ts +6 -6
  232. package/src/consola/index.ts +1 -1
  233. package/src/data/index.ts +3 -4
  234. package/src/data/maybeNumber.ts +1 -1
  235. package/src/data/parseSort.test.ts +0 -1
  236. package/src/data/resolvePagination.ts +2 -2
  237. package/src/data/types.d.ts +2 -2
  238. package/src/dayjs/formatDuration.ts +10 -11
  239. package/src/dayjs/index.ts +1 -1
  240. package/src/dayjs/parseRelativeTime.ts +1 -1
  241. package/src/dayjs/resolveRelativeTime.ts +11 -14
  242. package/src/drain3/Drain.test.ts +378 -0
  243. package/src/drain3/Drain.ts +394 -0
  244. package/src/drain3/LogCluster.ts +46 -0
  245. package/src/drain3/Node.ts +53 -0
  246. package/src/drain3/TemplateMiner.ts +246 -0
  247. package/src/drain3/index.ts +34 -0
  248. package/src/drain3/persistence/FilePersistence.ts +24 -0
  249. package/src/drain3/persistence/MemoryPersistence.ts +23 -0
  250. package/src/drain3/persistence/PersistenceHandler.ts +19 -0
  251. package/src/drain3/types.ts +75 -0
  252. package/src/fs/IFileSystem.d.ts +1 -2
  253. package/src/fs/createBrowserFileSystem.ts +7 -5
  254. package/src/fs/createMemoryFileSystem.ts +9 -13
  255. package/src/fs/createSandboxFileSystem.ts +1 -1
  256. package/src/fs/createWebDavFileSystem.ts +30 -17
  257. package/src/fs/createWebFileSystem.ts +242 -0
  258. package/src/fs/findMimeType.ts +1 -4
  259. package/src/fs/index.ts +5 -5
  260. package/src/fs/minio/createMinioFileSystem.ts +1148 -0
  261. package/src/fs/minio/index.ts +1 -0
  262. package/src/fs/orpc/createContractClientFileSystem.ts +5 -5
  263. package/src/fs/orpc/server/createFileSystemContractImpl.ts +1 -1
  264. package/src/fs/s3/createS3MiniFileSystem.ts +120 -79
  265. package/src/fs/s3/s3fs.test.ts +441 -0
  266. package/src/fs/s3/s3mini.test.ts +2 -2
  267. package/src/fs/server/createDatabaseFileSystem.ts +78 -114
  268. package/src/fs/server/createNodeFileSystem.ts +32 -13
  269. package/src/fs/server/dbfs.test.ts +13 -8
  270. package/src/fs/server/index.ts +1 -0
  271. package/src/fs/server/loadTestDatabase.ts +8 -119
  272. package/src/fs/tests/runFileSystemTest.ts +29 -28
  273. package/src/fs/utils.ts +1 -1
  274. package/src/fs/webdav/index.ts +1 -0
  275. package/src/jsonschema/JsonSchema.ts +5 -5
  276. package/src/jsonschema/forEachJsonSchema.ts +1 -1
  277. package/src/jsonschema/index.ts +1 -1
  278. package/src/jsonschema/types.d.ts +1 -1
  279. package/src/meta/defineMetadata.ts +1 -1
  280. package/src/meta/index.ts +2 -3
  281. package/src/orm/createSqliteDialect.ts +17 -0
  282. package/src/orm/index.ts +1 -0
  283. package/src/orpc/createOpenApiContractClient.ts +3 -3
  284. package/src/orpc/index.ts +1 -1
  285. package/src/password/PHC.ts +3 -3
  286. package/src/password/createArgon2PasswordAlgorithm.ts +2 -2
  287. package/src/password/createBase64PasswordAlgorithm.ts +2 -2
  288. package/src/password/createBcryptPasswordAlgorithm.ts +4 -2
  289. package/src/password/createPBKDF2PasswordAlgorithm.ts +2 -2
  290. package/src/password/createScryptPasswordAlgorithm.ts +4 -4
  291. package/src/password/index.ts +2 -2
  292. package/src/resource/ListQuery.ts +4 -1
  293. package/src/resource/index.ts +3 -3
  294. package/src/resource/schema/index.ts +4 -4
  295. package/src/s3/formatS3Url.test.ts +1 -1
  296. package/src/s3/formatS3Url.ts +2 -2
  297. package/src/s3/index.ts +1 -1
  298. package/src/s3/parseS3Url.ts +1 -1
  299. package/src/schema/SchemaRegistry.ts +2 -2
  300. package/src/schema/TypeSchema.d.ts +6 -6
  301. package/src/schema/createSchemaData.ts +5 -5
  302. package/src/schema/findJsonSchemaByPath.ts +5 -5
  303. package/src/schema/formatZodError.test.ts +2 -1
  304. package/src/schema/formatZodError.ts +50 -62
  305. package/src/schema/index.ts +5 -5
  306. package/src/schema/toJsonSchema.ts +6 -6
  307. package/src/schema/validate.ts +2 -2
  308. package/src/utils/buildRedactorFormSchema.ts +4 -4
  309. package/src/utils/formatNumber.ts +18 -0
  310. package/src/utils/formatPercent.ts +17 -0
  311. package/src/utils/index.ts +3 -3
  312. package/src/utils/resolveFeatureOptions.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fs/server/createNodeFileSystem.ts"],"sourcesContent":["import {\n\tcreateReadStream as nodeCreateReadStream,\n\tcreateWriteStream as nodeCreateWriteStream,\n\ttype Stats,\n} from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport path from 'node:path';\nimport { Readable, type Writable } from 'node:stream';\nimport { pathToFileURL } from 'node:url';\nimport type {\n\tCopyOptions,\n\tCreateReadStreamOptions,\n\tCreateWriteStreamOptions,\n\tIFileStat,\n\tIFileSystem,\n\tMkdirOptions,\n\tReaddirOptions,\n\tReadFileOptions,\n\tRenameOptions,\n\tRmOptions,\n\tStatOptions,\n\tWriteFileOptions,\n} from '../IFileSystem';\n\nexport type INodeFileSystem = IFileSystem & {\n\treadonly root: string;\n\tresolvePath(filePath: string): string;\n};\n\n/**\n * Creates a Node.js filesystem adapter that implements the IFileSystem interface\n * @param options Configuration options for the filesystem\n * @param options.root Optional root directory to restrict all operations within\n */\nexport function createNodeFileSystem(options: { root?: string } = {}): INodeFileSystem {\n\treturn new NodeFs(options);\n}\n\ntype IFS = typeof import('fs/promises');\n\nclass NodeFs implements IFileSystem, INodeFileSystem {\n\treadonly root: string;\n\tprivate readonly fs: IFS;\n\n\tconstructor({\n\t\troot,\n\t\tfs = fsp,\n\t}: {\n\t\troot?: string;\n\t\tfs?: IFS;\n\t} = {}) {\n\t\t// Normalize the root path if provided\n\t\tif (root) {\n\t\t\tthis.root = path.resolve(root);\n\t\t} else {\n\t\t\tthis.root = '';\n\t\t}\n\t\tthis.fs = fs;\n\t}\n\n\t// Helper method to handle aborted signals consistently\n\tprivate checkAborted(signal?: AbortSignal): void {\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error('The operation was aborted');\n\t\t}\n\t}\n\n\t/**\n\t * Resolves and secures a path by:\n\t * 1. Normalizing the path\n\t * 2. Prepending the root directory if one is set\n\t * 3. Verifying the resulting path is within the root directory\n\t *\n\t * This prevents path traversal attacks.\n\t */\n\tresolvePath(filePath: string): string {\n\t\t// Handle empty paths\n\t\tif (!filePath) {\n\t\t\treturn this.root || '';\n\t\t}\n\n\t\t// Normalize to remove any '..' segments and handle slashes\n\t\tconst normalizedPath = path.normalize(filePath);\n\n\t\t// If no root is set, just return the normalized path\n\t\tif (!this.root) {\n\t\t\treturn normalizedPath;\n\t\t}\n\n\t\t// Join with root and resolve to absolute path\n\t\tconst resolvedPath = path.resolve(path.join(this.root, normalizedPath));\n\n\t\t// Security check: ensure the path is within the root directory\n\t\tif (!resolvedPath.startsWith(this.root)) {\n\t\t\tthrow new Error(`Security violation: Path ${filePath} attempts to access outside of the root directory`);\n\t\t}\n\n\t\treturn resolvedPath;\n\t}\n\n\t/**\n\t * Removes the root prefix from a path for external representation\n\t */\n\tprivate stripRoot(fullPath: string): string {\n\t\tif (!this.root || !fullPath.startsWith(this.root)) {\n\t\t\treturn fullPath;\n\t\t}\n\n\t\t// Remove the root prefix and ensure there's a leading slash\n\t\tlet relativePath = fullPath.substring(this.root.length);\n\t\tif (!relativePath) {\n\t\t\treturn '/';\n\t\t}\n\n\t\tif (!relativePath.startsWith('/') && !relativePath.startsWith('\\\\')) {\n\t\t\trelativePath = '/' + relativePath;\n\t\t}\n\n\t\t// Normalize to ensure consistent path separators\n\t\treturn path.normalize(relativePath).replace(/\\\\/g, '/');\n\t}\n\n\t/**\n\t * Converts a system file stat to our IFileStat interface,\n\t * stripping the root prefix from paths\n\t */\n\tprivate toFileStat(fullPath: string, fsStats: Stats): IFileStat {\n\t\tconst normalizedPath = this.stripRoot(fullPath);\n\t\tconst directoryPath = path.dirname(normalizedPath);\n\t\tconst directory = directoryPath === '.' ? '/' : directoryPath.replace(/\\\\/g, '/');\n\n\t\treturn {\n\t\t\tdirectory,\n\t\t\tpath: normalizedPath,\n\t\t\tname: path.basename(fullPath),\n\t\t\tkind: fsStats.isDirectory() ? 'directory' : 'file',\n\t\t\tmtime: fsStats.mtimeMs,\n\t\t\tsize: fsStats.size,\n\t\t\tmeta: {},\n\t\t};\n\t}\n\n\tasync readdir(dir: string, options: ReaddirOptions = {}): Promise<IFileStat[]> {\n\t\tconst { fs } = this;\n\t\tconst { glob, recursive, depth = 1, kind, hidden = true, signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\t// Resolve the directory path with security checks\n\t\tconst resolvedDir = this.resolvePath(dir);\n\n\t\t// Basic file listing\n\t\tconst entries = await fs.readdir(resolvedDir, { withFileTypes: true });\n\t\tlet results = await Promise.all(\n\t\t\tentries\n\t\t\t\t.filter((entry) => hidden || !entry.name.startsWith('.'))\n\t\t\t\t.filter((entry) => !kind || (kind === 'directory' ? entry.isDirectory() : entry.isFile()))\n\t\t\t\t.map(async (entry) => {\n\t\t\t\t\tthis.checkAborted(signal);\n\n\t\t\t\t\tconst entryFullPath = path.join(resolvedDir, entry.name);\n\t\t\t\t\tconst stat = await fs.stat(entryFullPath);\n\n\t\t\t\t\t// Convert to external representation\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdirectory: this.stripRoot(resolvedDir),\n\t\t\t\t\t\tpath: this.stripRoot(entryFullPath),\n\t\t\t\t\t\tname: entry.name,\n\t\t\t\t\t\tkind: entry.isDirectory() ? 'directory' : 'file',\n\t\t\t\t\t\tmtime: stat.mtimeMs,\n\t\t\t\t\t\tsize: stat.size,\n\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t} as IFileStat;\n\t\t\t\t}),\n\t\t);\n\n\t\t// Handle recursive option\n\t\tif (recursive || depth > 1) {\n\t\t\tconst subdirs = results.filter((entry) => entry.kind === 'directory');\n\n\t\t\tfor (const subdir of subdirs) {\n\t\t\t\tthis.checkAborted(signal);\n\n\t\t\t\tconst maxDepth = recursive ? Infinity : depth - 1;\n\t\t\t\tif (maxDepth > 0) {\n\t\t\t\t\t// Need to convert the path back to a full path for the recursive call\n\t\t\t\t\tconst subdirFullPath = this.resolvePath(subdir.path);\n\n\t\t\t\t\tconst subEntries = await this.readdir(subdir.path, {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tdepth: maxDepth,\n\t\t\t\t\t});\n\t\t\t\t\tresults = [...results, ...subEntries];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle glob filtering\n\t\tif (glob) {\n\t\t\tconst { matcher } = await import('micromatch');\n\t\t\tconst match = matcher(glob);\n\t\t\tresults = results.filter((entry) => match(entry.path));\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tasync stat(filePath: string, options: StatOptions = {}): Promise<IFileStat> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(filePath);\n\n\t\ttry {\n\t\t\tconst stat = await fs.stat(resolvedPath);\n\t\t\treturn this.toFileStat(resolvedPath, stat);\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync mkdir(dirPath: string, options: MkdirOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { recursive = false, signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(dirPath);\n\n\t\ttry {\n\t\t\tawait fs.mkdir(resolvedPath, { recursive });\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'EEXIST' && recursive) {\n\t\t\t\t// Ignore if directory exists and recursive is true\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync readFile(path: string, options?: ReadFileOptions & { encoding: 'text' }): Promise<string>;\n\tasync readFile(path: string, options?: ReadFileOptions): Promise<Uint8Array>;\n\tasync readFile(path: string, options: ReadFileOptions = {}): Promise<string | Uint8Array> {\n\t\tconst { fs } = this;\n\n\t\tconst { encoding = 'binary', signal, onDownloadProgress } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(path);\n\n\t\ttry {\n\t\t\t// Handle progress reporting if needed\n\t\t\tif (onDownloadProgress) {\n\t\t\t\tconst stat = await fs.stat(resolvedPath);\n\t\t\t\tconst stream = this.createReadStream(path, { signal });\n\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tconst chunks: Buffer[] = [];\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\tstream.on('data', (chunk) => {\n\t\t\t\t\t\tchunks.push(Buffer.from(chunk));\n\t\t\t\t\t\tloaded += chunk.length;\n\t\t\t\t\t\tonDownloadProgress({ loaded, total: stat.size });\n\t\t\t\t\t});\n\n\t\t\t\t\tstream.on('end', () => {\n\t\t\t\t\t\tconst buffer = Buffer.concat(chunks);\n\t\t\t\t\t\tif (encoding === 'text') {\n\t\t\t\t\t\t\tresolve(buffer.toString('utf-8'));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(buffer);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tstream.on('error', reject);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Standard file reading\n\t\t\tif (encoding === 'text') {\n\t\t\t\treturn await fs.readFile(resolvedPath, { encoding: 'utf-8' });\n\t\t\t} else {\n\t\t\t\treturn await fs.readFile(resolvedPath);\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`File not found: ${path}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync writeFile(\n\t\tpath: string,\n\t\tdata: string | Buffer | ArrayBuffer | Readable,\n\t\toptions: WriteFileOptions = {},\n\t): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal, overwrite = true, onUploadProgress } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(path);\n\n\t\t// Check if file exists and overwrite is false\n\t\tif (!overwrite) {\n\t\t\tconst exists = await this.exists(path);\n\t\t\tif (exists) {\n\t\t\t\tthrow new Error(`File already exists: ${path}`);\n\t\t\t}\n\t\t}\n\n\t\t// Create parent directories if they don't exist\n\t\tconst directory = this.getDirectoryName(resolvedPath);\n\t\tif (directory !== resolvedPath) {\n\t\t\ttry {\n\t\t\t\tawait this.mkdir(this.stripRoot(directory), { recursive: true });\n\t\t\t} catch (err: any) {\n\t\t\t\t// Ignore directory exists error\n\t\t\t\tif (err?.code !== 'EEXIST') {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (data instanceof Readable) {\n\t\t\tlet _data = data;\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst writeStream = this.createWriteStream(path, options);\n\t\t\t\tlet totalBytes = 0;\n\n\t\t\t\tif (onUploadProgress) {\n\t\t\t\t\t_data.on('data', (chunk) => {\n\t\t\t\t\t\ttotalBytes += chunk.length;\n\t\t\t\t\t\tonUploadProgress({ loaded: totalBytes, total: -1 });\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_data.pipe(writeStream);\n\n\t\t\t\twriteStream.on('finish', () => resolve());\n\t\t\t\twriteStream.on('error', reject);\n\n\t\t\t\tif (signal) {\n\t\t\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\t\t\t_data.destroy();\n\t\t\t\t\t\twriteStream.destroy();\n\t\t\t\t\t\treject(new Error('The operation was aborted'));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Convert ArrayBuffer to Buffer if necessary\n\t\t\tif (data instanceof ArrayBuffer) {\n\t\t\t\tdata = Buffer.from(data);\n\t\t\t}\n\t\t\tawait fs.writeFile(resolvedPath, data);\n\t\t}\n\t}\n\n\tasync rm(path: string, options: RmOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { recursive = false, force = false, signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(path);\n\n\t\ttry {\n\t\t\tawait fs.rm(resolvedPath, { recursive, force });\n\t\t} catch (err: any) {\n\t\t\tif (force && err.code === 'ENOENT') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync rename(oldPath: string, newPath: string, options: RenameOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal, overwrite = false } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedOldPath = this.resolvePath(oldPath);\n\t\tconst resolvedNewPath = this.resolvePath(newPath);\n\n\t\t// Check if target exists and overwrite is false\n\t\tif (!overwrite) {\n\t\t\tconst exists = await this.exists(newPath);\n\t\t\tif (exists) {\n\t\t\t\tthrow new Error(`Destination already exists: ${newPath}`);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tawait fs.rename(resolvedOldPath, resolvedNewPath);\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`Source file not found: ${oldPath}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync exists(path: string): Promise<boolean> {\n\t\tconst { fs } = this;\n\n\t\ttry {\n\t\t\tawait fs.access(this.resolvePath(path));\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync copy(src: string, dest: string, options: CopyOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal, overwrite = true, shallow = false } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedSrc = this.resolvePath(src);\n\t\tconst resolvedDest = this.resolvePath(dest);\n\n\t\t// Check if source exists\n\t\ttry {\n\t\t\tconst stat = await fs.stat(resolvedSrc);\n\n\t\t\t// Check if destination exists and overwrite is false\n\t\t\tif (!overwrite) {\n\t\t\t\tconst exists = await this.exists(dest);\n\t\t\t\tif (exists) {\n\t\t\t\t\tthrow new Error(`Destination already exists: ${dest}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Create parent directory if it doesn't exist\n\t\t\tconst parentDir = this.getDirectoryName(resolvedDest);\n\t\t\tawait this.mkdir(this.stripRoot(parentDir), { recursive: true });\n\n\t\t\t// Copy recursively or not based on shallow and if it's a directory\n\t\t\tawait fs.cp(resolvedSrc, resolvedDest, {\n\t\t\t\trecursive: !shallow && stat.isDirectory(),\n\t\t\t\tforce: overwrite,\n\t\t\t});\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`Source file not found: ${src}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tcreateReadStream(filePath: string, options: CreateReadStreamOptions = {}): Readable {\n\t\tconst resolvedPath = this.resolvePath(filePath);\n\t\tconst { signal, range } = options;\n\t\tconst stream = nodeCreateReadStream(resolvedPath, {\n\t\t\tstart: range?.start,\n\t\t\tend: range?.end,\n\t\t});\n\n\t\tsignal?.addEventListener('abort', () => stream.destroy(new Error('The operation was aborted')));\n\n\t\treturn stream;\n\t}\n\n\tcreateWriteStream(filePath: string, options: CreateWriteStreamOptions = {}): Writable {\n\t\tconst resolvedPath = this.resolvePath(filePath);\n\t\tconst { signal } = options;\n\t\tconst stream = nodeCreateWriteStream(resolvedPath, { flags: options.overwrite === false ? 'wx' : 'w' });\n\n\t\tsignal?.addEventListener('abort', () => stream.destroy(new Error('The operation was aborted')));\n\n\t\treturn stream;\n\t}\n\n\t// Helper to extract directory name correctly\n\tprivate getDirectoryName(filePath: string): string {\n\t\treturn path.dirname(filePath);\n\t}\n\n\tgetUrl(needle: IFileStat | string) {\n\t\tif (typeof needle === 'object' && needle?.kind !== 'file') {\n\t\t\treturn;\n\t\t}\n\t\tlet path = typeof needle === 'string' ? needle : needle.path;\n\t\tif (!path) {\n\t\t\treturn;\n\t\t}\n\t\t// file://\n\t\treturn pathToFileURL(this.resolvePath(path)).toString();\n\t}\n}\n"],"names":["createReadStream","nodeCreateReadStream","createWriteStream","nodeCreateWriteStream","fsp","path","Readable","pathToFileURL","createNodeFileSystem","options","NodeFs","root","fs","resolve","checkAborted","signal","aborted","Error","resolvePath","filePath","normalizedPath","normalize","resolvedPath","join","startsWith","stripRoot","fullPath","relativePath","substring","length","replace","toFileStat","fsStats","directoryPath","dirname","directory","name","basename","kind","isDirectory","mtime","mtimeMs","size","meta","readdir","dir","glob","recursive","depth","hidden","resolvedDir","entries","withFileTypes","results","Promise","all","filter","entry","isFile","map","entryFullPath","stat","subdirs","subdir","maxDepth","Infinity","subdirFullPath","subEntries","matcher","match","err","code","mkdir","dirPath","readFile","encoding","onDownloadProgress","stream","reject","chunks","loaded","on","chunk","push","Buffer","from","total","buffer","concat","toString","writeFile","data","overwrite","onUploadProgress","exists","getDirectoryName","_data","writeStream","totalBytes","pipe","addEventListener","destroy","ArrayBuffer","rm","force","rename","oldPath","newPath","resolvedOldPath","resolvedNewPath","access","copy","src","dest","shallow","resolvedSrc","resolvedDest","parentDir","cp","range","start","end","flags","getUrl","needle"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fs/server/createNodeFileSystem.ts"],"sourcesContent":["import {\n\tcreateReadStream as nodeCreateReadStream,\n\tcreateWriteStream as nodeCreateWriteStream,\n\ttype Stats,\n} from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport path from 'node:path';\nimport { Readable, type Writable } from 'node:stream';\nimport { pathToFileURL } from 'node:url';\nimport type {\n\tCopyOptions,\n\tCreateReadStreamOptions,\n\tCreateWriteStreamOptions,\n\tIFileStat,\n\tIServerFileSystem,\n\tMkdirOptions,\n\tReaddirOptions,\n\tReadFileOptions,\n\tRenameOptions,\n\tRmOptions,\n\tStatOptions,\n\tWritableData,\n\tWriteFileOptions,\n} from '../IFileSystem';\n\nexport type INodeFileSystem = IServerFileSystem & {\n\treadonly root: string;\n\tresolvePath(filePath: string): string;\n};\n\n/**\n * Creates a Node.js filesystem adapter that implements the IFileSystem interface\n * @param options Configuration options for the filesystem\n * @param options.root Optional root directory to restrict all operations within\n */\nexport function createNodeFileSystem(options: { root?: string } = {}): INodeFileSystem {\n\treturn new NodeFs(options);\n}\n\ntype IFS = typeof import('fs/promises');\n\nclass NodeFs implements IServerFileSystem, INodeFileSystem {\n\treadonly root: string;\n\tprivate readonly fs: IFS;\n\n\tconstructor({\n\t\troot,\n\t\tfs = fsp,\n\t}: {\n\t\troot?: string;\n\t\tfs?: IFS;\n\t} = {}) {\n\t\t// Normalize the root path if provided\n\t\tif (root) {\n\t\t\tthis.root = path.resolve(root);\n\t\t} else {\n\t\t\tthis.root = '';\n\t\t}\n\t\tthis.fs = fs;\n\t}\n\n\t// Helper method to handle aborted signals consistently\n\tprivate checkAborted(signal?: AbortSignal): void {\n\t\tif (signal?.aborted) {\n\t\t\tthrow new Error('The operation was aborted');\n\t\t}\n\t}\n\n\t/**\n\t * Resolves and secures a path by:\n\t * 1. Normalizing the path\n\t * 2. Prepending the root directory if one is set\n\t * 3. Verifying the resulting path is within the root directory\n\t *\n\t * This prevents path traversal attacks.\n\t */\n\tresolvePath(filePath: string): string {\n\t\t// Handle empty paths\n\t\tif (!filePath) {\n\t\t\treturn this.root || '';\n\t\t}\n\n\t\t// Normalize to remove any '..' segments and handle slashes\n\t\tconst normalizedPath = path.normalize(filePath);\n\n\t\t// If no root is set, just return the normalized path\n\t\tif (!this.root) {\n\t\t\treturn normalizedPath;\n\t\t}\n\n\t\t// Join with root and resolve to absolute path\n\t\tconst resolvedPath = path.resolve(path.join(this.root, normalizedPath));\n\n\t\t// Security check: ensure the path is within the root directory\n\t\tif (!resolvedPath.startsWith(this.root)) {\n\t\t\tthrow new Error(`Security violation: Path ${filePath} attempts to access outside of the root directory`);\n\t\t}\n\n\t\treturn resolvedPath;\n\t}\n\n\t/**\n\t * Removes the root prefix from a path for external representation\n\t */\n\tprivate stripRoot(fullPath: string): string {\n\t\tif (!this.root || !fullPath.startsWith(this.root)) {\n\t\t\treturn fullPath;\n\t\t}\n\n\t\t// Remove the root prefix and ensure there's a leading slash\n\t\tlet relativePath = fullPath.substring(this.root.length);\n\t\tif (!relativePath) {\n\t\t\treturn '/';\n\t\t}\n\n\t\tif (!relativePath.startsWith('/') && !relativePath.startsWith('\\\\')) {\n\t\t\trelativePath = `/${relativePath}`;\n\t\t}\n\n\t\t// Normalize to ensure consistent path separators\n\t\treturn path.normalize(relativePath).replace(/\\\\/g, '/');\n\t}\n\n\t/**\n\t * Converts a system file stat to our IFileStat interface,\n\t * stripping the root prefix from paths\n\t */\n\tprivate toFileStat(fullPath: string, fsStats: Stats): IFileStat {\n\t\tconst normalizedPath = this.stripRoot(fullPath);\n\t\tconst directoryPath = path.dirname(normalizedPath);\n\t\tconst directory = directoryPath === '.' ? '/' : directoryPath.replace(/\\\\/g, '/');\n\n\t\treturn {\n\t\t\tdirectory,\n\t\t\tpath: normalizedPath,\n\t\t\tname: path.basename(fullPath),\n\t\t\tkind: fsStats.isDirectory() ? 'directory' : 'file',\n\t\t\tmtime: fsStats.mtimeMs,\n\t\t\tsize: fsStats.size,\n\t\t\tmeta: {},\n\t\t};\n\t}\n\n\tasync readdir(dir: string, options: ReaddirOptions = {}): Promise<IFileStat[]> {\n\t\tconst { fs } = this;\n\t\tconst { glob, recursive, depth = 1, kind, hidden = true, signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\t// Resolve the directory path with security checks\n\t\tconst resolvedDir = this.resolvePath(dir);\n\n\t\t// Basic file listing\n\t\tconst entries = await fs.readdir(resolvedDir, { withFileTypes: true });\n\t\tlet results = await Promise.all(\n\t\t\tentries\n\t\t\t\t.filter((entry) => hidden || !entry.name.startsWith('.'))\n\t\t\t\t.filter((entry) => !kind || (kind === 'directory' ? entry.isDirectory() : entry.isFile()))\n\t\t\t\t.map(async (entry) => {\n\t\t\t\t\tthis.checkAborted(signal);\n\n\t\t\t\t\tconst entryFullPath = path.join(resolvedDir, entry.name);\n\t\t\t\t\tconst stat = await fs.stat(entryFullPath);\n\n\t\t\t\t\t// Convert to external representation\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdirectory: this.stripRoot(resolvedDir),\n\t\t\t\t\t\tpath: this.stripRoot(entryFullPath),\n\t\t\t\t\t\tname: entry.name,\n\t\t\t\t\t\tkind: entry.isDirectory() ? 'directory' : 'file',\n\t\t\t\t\t\tmtime: stat.mtimeMs,\n\t\t\t\t\t\tsize: stat.size,\n\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t} as IFileStat;\n\t\t\t\t}),\n\t\t);\n\n\t\t// Handle recursive option\n\t\tif (recursive || depth > 1) {\n\t\t\tconst subdirs = results.filter((entry) => entry.kind === 'directory');\n\n\t\t\tfor (const subdir of subdirs) {\n\t\t\t\tthis.checkAborted(signal);\n\n\t\t\t\tconst maxDepth = recursive ? Infinity : depth - 1;\n\t\t\t\tif (maxDepth > 0) {\n\t\t\t\t\t// Need to convert the path back to a full path for the recursive call\n\t\t\t\t\tconst _subdirFullPath = this.resolvePath(subdir.path);\n\n\t\t\t\t\tconst subEntries = await this.readdir(subdir.path, {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tdepth: maxDepth,\n\t\t\t\t\t});\n\t\t\t\t\tresults = [...results, ...subEntries];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle glob filtering\n\t\tif (glob) {\n\t\t\tconst { matcher } = await import('micromatch');\n\t\t\tconst match = matcher(glob);\n\t\t\tresults = results.filter((entry) => match(entry.path));\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tasync stat(filePath: string, options: StatOptions = {}): Promise<IFileStat> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(filePath);\n\n\t\ttry {\n\t\t\tconst stat = await fs.stat(resolvedPath);\n\t\t\treturn this.toFileStat(resolvedPath, stat);\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync mkdir(dirPath: string, options: MkdirOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { recursive = false, signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(dirPath);\n\n\t\ttry {\n\t\t\tawait fs.mkdir(resolvedPath, { recursive });\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'EEXIST' && recursive) {\n\t\t\t\t// Ignore if directory exists and recursive is true\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync readFile(path: string, options?: ReadFileOptions & { encoding: 'text' }): Promise<string>;\n\tasync readFile(path: string, options?: ReadFileOptions): Promise<Uint8Array>;\n\tasync readFile(path: string, options: ReadFileOptions = {}): Promise<string | Uint8Array> {\n\t\tconst { fs } = this;\n\n\t\tconst { encoding = 'binary', signal, onDownloadProgress } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(path);\n\n\t\ttry {\n\t\t\t// Handle progress reporting if needed\n\t\t\tif (onDownloadProgress) {\n\t\t\t\tconst stat = await fs.stat(resolvedPath);\n\t\t\t\tconst stream = this.createReadStream(path, { signal });\n\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tconst chunks: Buffer[] = [];\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\tstream.on('data', (chunk) => {\n\t\t\t\t\t\tchunks.push(Buffer.from(chunk));\n\t\t\t\t\t\tloaded += chunk.length;\n\t\t\t\t\t\tonDownloadProgress({ loaded, total: stat.size });\n\t\t\t\t\t});\n\n\t\t\t\t\tstream.on('end', () => {\n\t\t\t\t\t\tconst buffer = Buffer.concat(chunks);\n\t\t\t\t\t\tif (encoding === 'text') {\n\t\t\t\t\t\t\tresolve(buffer.toString('utf-8'));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(buffer);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tstream.on('error', reject);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Standard file reading\n\t\t\tif (encoding === 'text') {\n\t\t\t\treturn await fs.readFile(resolvedPath, { encoding: 'utf-8' });\n\t\t\t} else {\n\t\t\t\treturn await fs.readFile(resolvedPath);\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`File not found: ${path}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync writeFile(path: string, data: WritableData, options: WriteFileOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal, overwrite = true, onUploadProgress } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(path);\n\n\t\t// Check if file exists and overwrite is false\n\t\tif (!overwrite) {\n\t\t\tconst exists = await this.exists(path);\n\t\t\tif (exists) {\n\t\t\t\tthrow new Error(`File already exists: ${path}`);\n\t\t\t}\n\t\t}\n\n\t\t// Create parent directories if they don't exist\n\t\tconst directory = this.getDirectoryName(resolvedPath);\n\t\tif (directory !== resolvedPath) {\n\t\t\ttry {\n\t\t\t\tawait this.mkdir(this.stripRoot(directory), { recursive: true });\n\t\t\t} catch (err: any) {\n\t\t\t\t// Ignore directory exists error\n\t\t\t\tif (err?.code !== 'EEXIST') {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (data instanceof Readable) {\n\t\t\tlet _data = data;\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst writeStream = this.createWriteStream(path, options);\n\t\t\t\tlet totalBytes = 0;\n\n\t\t\t\tif (onUploadProgress) {\n\t\t\t\t\t_data.on('data', (chunk) => {\n\t\t\t\t\t\ttotalBytes += chunk.length;\n\t\t\t\t\t\tonUploadProgress({ loaded: totalBytes, total: -1 });\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_data.pipe(writeStream);\n\n\t\t\t\twriteStream.on('finish', () => resolve());\n\t\t\t\twriteStream.on('error', reject);\n\n\t\t\t\tif (signal) {\n\t\t\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\t\t\t_data.destroy();\n\t\t\t\t\t\twriteStream.destroy();\n\t\t\t\t\t\treject(new Error('The operation was aborted'));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (data instanceof ReadableStream) {\n\t\t\t// Handle web ReadableStream\n\t\t\tconst reader = data.getReader();\n\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\tlet loaded = 0;\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tif (value) {\n\t\t\t\t\tchunks.push(value);\n\t\t\t\t\tloaded += value.length;\n\t\t\t\t\tif (onUploadProgress) {\n\t\t\t\t\t\tonUploadProgress({ loaded, total: -1 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait fs.writeFile(resolvedPath, Buffer.concat(chunks));\n\t\t} else {\n\t\t\t// Convert ArrayBuffer/ArrayBufferView to Buffer if necessary\n\t\t\tlet writeData: string | Buffer;\n\t\t\tif (data instanceof ArrayBuffer) {\n\t\t\t\twriteData = Buffer.from(data);\n\t\t\t} else if (ArrayBuffer.isView(data)) {\n\t\t\t\twriteData = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n\t\t\t} else {\n\t\t\t\twriteData = data;\n\t\t\t}\n\t\t\tawait fs.writeFile(resolvedPath, writeData);\n\t\t}\n\t}\n\n\tasync rm(path: string, options: RmOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { recursive = false, force = false, signal } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedPath = this.resolvePath(path);\n\n\t\ttry {\n\t\t\tawait fs.rm(resolvedPath, { recursive, force });\n\t\t} catch (err: any) {\n\t\t\tif (force && err.code === 'ENOENT') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync rename(oldPath: string, newPath: string, options: RenameOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal, overwrite = false } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedOldPath = this.resolvePath(oldPath);\n\t\tconst resolvedNewPath = this.resolvePath(newPath);\n\n\t\t// Check if target exists and overwrite is false\n\t\tif (!overwrite) {\n\t\t\tconst exists = await this.exists(newPath);\n\t\t\tif (exists) {\n\t\t\t\tthrow new Error(`Destination already exists: ${newPath}`);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tawait fs.rename(resolvedOldPath, resolvedNewPath);\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`Source file not found: ${oldPath}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync exists(path: string): Promise<boolean> {\n\t\tconst { fs } = this;\n\n\t\ttry {\n\t\t\tawait fs.access(this.resolvePath(path));\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync copy(src: string, dest: string, options: CopyOptions = {}): Promise<void> {\n\t\tconst { fs } = this;\n\n\t\tconst { signal, overwrite = true, shallow = false } = options;\n\t\tthis.checkAborted(signal);\n\n\t\tconst resolvedSrc = this.resolvePath(src);\n\t\tconst resolvedDest = this.resolvePath(dest);\n\n\t\t// Check if source exists\n\t\ttry {\n\t\t\tconst stat = await fs.stat(resolvedSrc);\n\n\t\t\t// Check if destination exists and overwrite is false\n\t\t\tif (!overwrite) {\n\t\t\t\tconst exists = await this.exists(dest);\n\t\t\t\tif (exists) {\n\t\t\t\t\tthrow new Error(`Destination already exists: ${dest}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Create parent directory if it doesn't exist\n\t\t\tconst parentDir = this.getDirectoryName(resolvedDest);\n\t\t\tawait this.mkdir(this.stripRoot(parentDir), { recursive: true });\n\n\t\t\t// Copy recursively or not based on shallow and if it's a directory\n\t\t\tawait fs.cp(resolvedSrc, resolvedDest, {\n\t\t\t\trecursive: !shallow && stat.isDirectory(),\n\t\t\t\tforce: overwrite,\n\t\t\t});\n\t\t} catch (err: any) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tthrow new Error(`Source file not found: ${src}`);\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tcreateReadStream(filePath: string, options: CreateReadStreamOptions = {}): Readable {\n\t\tconst resolvedPath = this.resolvePath(filePath);\n\t\tconst { signal, range } = options;\n\t\tconst stream = nodeCreateReadStream(resolvedPath, {\n\t\t\tstart: range?.start,\n\t\t\tend: range?.end,\n\t\t});\n\n\t\tsignal?.addEventListener('abort', () => stream.destroy(new Error('The operation was aborted')));\n\n\t\treturn stream;\n\t}\n\n\tcreateWriteStream(filePath: string, options: CreateWriteStreamOptions = {}): Writable {\n\t\tconst resolvedPath = this.resolvePath(filePath);\n\t\tconst { signal } = options;\n\t\tconst stream = nodeCreateWriteStream(resolvedPath, { flags: options.overwrite === false ? 'wx' : 'w' });\n\n\t\tsignal?.addEventListener('abort', () => stream.destroy(new Error('The operation was aborted')));\n\n\t\treturn stream;\n\t}\n\n\t// Helper to extract directory name correctly\n\tprivate getDirectoryName(filePath: string): string {\n\t\treturn path.dirname(filePath);\n\t}\n\n\tgetUrl(needle: IFileStat | string) {\n\t\tif (typeof needle === 'object' && needle?.kind !== 'file') {\n\t\t\treturn;\n\t\t}\n\t\tlet path = typeof needle === 'string' ? needle : needle.path;\n\t\tif (!path) {\n\t\t\treturn;\n\t\t}\n\t\t// file://\n\t\treturn pathToFileURL(this.resolvePath(path)).toString();\n\t}\n}\n"],"names":["createReadStream","nodeCreateReadStream","createWriteStream","nodeCreateWriteStream","fsp","path","Readable","pathToFileURL","createNodeFileSystem","options","NodeFs","root","fs","resolve","checkAborted","signal","aborted","Error","resolvePath","filePath","normalizedPath","normalize","resolvedPath","join","startsWith","stripRoot","fullPath","relativePath","substring","length","replace","toFileStat","fsStats","directoryPath","dirname","directory","name","basename","kind","isDirectory","mtime","mtimeMs","size","meta","readdir","dir","glob","recursive","depth","hidden","resolvedDir","entries","withFileTypes","results","Promise","all","filter","entry","isFile","map","entryFullPath","stat","subdirs","subdir","maxDepth","Infinity","_subdirFullPath","subEntries","matcher","match","err","code","mkdir","dirPath","readFile","encoding","onDownloadProgress","stream","reject","chunks","loaded","on","chunk","push","Buffer","from","total","buffer","concat","toString","writeFile","data","overwrite","onUploadProgress","exists","getDirectoryName","_data","writeStream","totalBytes","pipe","addEventListener","destroy","ReadableStream","reader","getReader","done","value","read","writeData","ArrayBuffer","isView","byteOffset","byteLength","rm","force","rename","oldPath","newPath","resolvedOldPath","resolvedNewPath","access","copy","src","dest","shallow","resolvedSrc","resolvedDest","parentDir","cp","range","start","end","flags","getUrl","needle"],"mappings":"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"}
@@ -1,221 +1,208 @@
1
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
- try {
3
- var info = gen[key](arg);
4
- var value = info.value;
5
- }
6
- catch (error) {
7
- reject(error);
8
- return;
9
- }
10
- if (info.done) {
11
- resolve(value);
12
- }
13
- else {
14
- Promise.resolve(value).then(_next, _throw);
15
- }
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ if (info.done) {
10
+ resolve(value);
11
+ } else {
12
+ Promise.resolve(value).then(_next, _throw);
13
+ }
16
14
  }
17
15
  function _async_to_generator(fn) {
18
- return function () {
19
- var self = this, args = arguments;
20
- return new Promise(function (resolve, reject) {
21
- var gen = fn.apply(self, args);
22
- function _next(value) {
23
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
24
- }
25
- function _throw(err) {
26
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
27
- }
28
- _next(undefined);
29
- });
30
- };
16
+ return function () {
17
+ var args = arguments;
18
+ return new Promise((resolve, reject) => {
19
+ var gen = fn.apply(this, args);
20
+ function _next(value) {
21
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);
22
+ }
23
+ function _throw(err) {
24
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);
25
+ }
26
+ _next(undefined);
27
+ });
28
+ };
31
29
  }
32
30
  function _ts_generator(thisArg, body) {
33
- var f, y, t, _ = {
34
- label: 0,
35
- sent: function () {
36
- if (t[0] & 1)
37
- throw t[1];
38
- return t[1];
39
- },
40
- trys: [],
41
- ops: []
42
- }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
43
- return d(g, "next", {
44
- value: verb(0)
45
- }), d(g, "throw", {
46
- value: verb(1)
47
- }), d(g, "return", {
48
- value: verb(2)
49
- }), typeof Symbol === "function" && d(g, Symbol.iterator, {
50
- value: function () {
51
- return this;
52
- }
53
- }), g;
54
- function verb(n) {
55
- return function (v) {
56
- return step([
57
- n,
58
- v
59
- ]);
60
- };
61
- }
62
- function step(op) {
63
- if (f)
64
- throw new TypeError("Generator is already executing.");
65
- while (g && (g = 0, op[0] && (_ = 0)), _)
66
- try {
67
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
68
- return t;
69
- if (y = 0, t)
70
- op = [
71
- op[0] & 2,
72
- t.value
73
- ];
74
- switch (op[0]) {
75
- case 0:
76
- case 1:
77
- t = op;
78
- break;
79
- case 4:
80
- _.label++;
81
- return {
82
- value: op[1],
83
- done: false
84
- };
85
- case 5:
86
- _.label++;
87
- y = op[1];
88
- op = [
89
- 0
90
- ];
91
- continue;
92
- case 7:
93
- op = _.ops.pop();
94
- _.trys.pop();
95
- continue;
96
- default:
97
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
98
- _ = 0;
99
- continue;
100
- }
101
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
102
- _.label = op[1];
103
- break;
104
- }
105
- if (op[0] === 6 && _.label < t[1]) {
106
- _.label = t[1];
107
- t = op;
108
- break;
109
- }
110
- if (t && _.label < t[2]) {
111
- _.label = t[2];
112
- _.ops.push(op);
113
- break;
114
- }
115
- if (t[2])
116
- _.ops.pop();
117
- _.trys.pop();
118
- continue;
119
- }
120
- op = body.call(thisArg, _);
121
- }
122
- catch (e) {
123
- op = [
124
- 6,
125
- e
126
- ];
127
- y = 0;
128
- }
129
- finally {
130
- f = t = 0;
131
- }
132
- if (op[0] & 5)
133
- throw op[1];
134
- return {
135
- value: op[0] ? op[1] : void 0,
136
- done: true
137
- };
138
- }
31
+ var f,
32
+ y,
33
+ t,
34
+ _ = {
35
+ label: 0,
36
+ sent: () => {
37
+ if (t[0] & 1) throw t[1];
38
+ return t[1];
39
+ },
40
+ trys: [],
41
+ ops: [],
42
+ },
43
+ g = Object.create((typeof Iterator === 'function' ? Iterator : Object).prototype),
44
+ d = Object.defineProperty;
45
+ return (
46
+ d(g, 'next', {
47
+ value: verb(0),
48
+ }),
49
+ d(g, 'throw', {
50
+ value: verb(1),
51
+ }),
52
+ d(g, 'return', {
53
+ value: verb(2),
54
+ }),
55
+ typeof Symbol === 'function' &&
56
+ d(g, Symbol.iterator, {
57
+ value: function () {
58
+ return this;
59
+ },
60
+ }),
61
+ g
62
+ );
63
+ function verb(n) {
64
+ return (v) => step([n, v]);
65
+ }
66
+ function step(op) {
67
+ if (f) throw new TypeError('Generator is already executing.');
68
+ while ((g && ((g = 0), op[0] && (_ = 0)), _))
69
+ try {
70
+ if (
71
+ ((f = 1),
72
+ y &&
73
+ (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) &&
74
+ !(t = t.call(y, op[1])).done)
75
+ )
76
+ return t;
77
+ if (((y = 0), t)) op = [op[0] & 2, t.value];
78
+ switch (op[0]) {
79
+ case 0:
80
+ case 1:
81
+ t = op;
82
+ break;
83
+ case 4:
84
+ _.label++;
85
+ return {
86
+ value: op[1],
87
+ done: false,
88
+ };
89
+ case 5:
90
+ _.label++;
91
+ y = op[1];
92
+ op = [0];
93
+ continue;
94
+ case 7:
95
+ op = _.ops.pop();
96
+ _.trys.pop();
97
+ continue;
98
+ default:
99
+ if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) {
100
+ _ = 0;
101
+ continue;
102
+ }
103
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
104
+ _.label = op[1];
105
+ break;
106
+ }
107
+ if (op[0] === 6 && _.label < t[1]) {
108
+ _.label = t[1];
109
+ t = op;
110
+ break;
111
+ }
112
+ if (t && _.label < t[2]) {
113
+ _.label = t[2];
114
+ _.ops.push(op);
115
+ break;
116
+ }
117
+ if (t[2]) _.ops.pop();
118
+ _.trys.pop();
119
+ continue;
120
+ }
121
+ op = body.call(thisArg, _);
122
+ } catch (e) {
123
+ op = [6, e];
124
+ y = 0;
125
+ } finally {
126
+ f = t = 0;
127
+ }
128
+ if (op[0] & 5) throw op[1];
129
+ return {
130
+ value: op[0] ? op[1] : void 0,
131
+ done: true,
132
+ };
133
+ }
139
134
  }
140
- import { beforeEach, describe, test } from "vitest";
141
- import { runFileSystemTest } from "../tests/runFileSystemTest.js";
142
- import { createDatabaseFileSystem, FileNodeMetaEntity } from "./createDatabaseFileSystem.js";
143
- import { loadTestDatabase } from "./loadTestDatabase.js";
144
- describe("DatabaseFileSystem", function () {
145
- var fs;
146
- var em;
147
- beforeEach(function () {
148
- return _async_to_generator(function () {
149
- var _ref, entityManager, rootNode, content, readmeFile;
150
- return _ts_generator(this, function (_state) {
151
- switch (_state.label) {
152
- case 0:
153
- return [
154
- 4,
155
- loadTestDatabase()
156
- ];
157
- case 1:
158
- _ref = _state.sent(), entityManager = _ref.em;
159
- em = entityManager; // Type cast to match expected EntityManager type
160
- fs = createDatabaseFileSystem({
161
- getEntityManager: function () {
162
- return em;
163
- }
164
- });
165
- return [
166
- 4,
167
- fs.ensureRootNode()
168
- ];
169
- case 2:
170
- rootNode = _state.sent();
171
- // Create /README.txt file using EntityManager
172
- content = Buffer.from("Hello");
173
- readmeFile = em.create(FileNodeMetaEntity, {
174
- filename: "README.txt",
175
- parent: rootNode,
176
- kind: "file",
177
- size: content.length,
178
- content: content,
179
- atime: new Date(),
180
- btime: new Date(),
181
- ctime: new Date(),
182
- mtime: new Date()
183
- });
184
- return [
185
- 4,
186
- em.persistAndFlush(readmeFile)
187
- ];
188
- case 3:
189
- _state.sent();
190
- return [
191
- 2
192
- ];
193
- }
194
- });
195
- })();
196
- }, 30000); // Increase timeout to 30 seconds
197
- test("common tests", function () {
198
- return _async_to_generator(function () {
199
- return _ts_generator(this, function (_state) {
200
- switch (_state.label) {
201
- case 0:
202
- return [
203
- 4,
204
- runFileSystemTest(fs, {
205
- writableStream: false,
206
- readableStream: false,
207
- readStream: false,
208
- writeStream: false,
209
- abort: false
210
- })
211
- ];
212
- case 1:
213
- _state.sent();
214
- return [
215
- 2
216
- ];
217
- }
218
- });
219
- })();
220
- }, 60000); // Increase timeout to 60 seconds
135
+
136
+ import { beforeEach, describe, test } from 'vitest';
137
+ import { runFileSystemTest } from '../tests/runFileSystemTest.js';
138
+ import { createDatabaseFileSystem, FileNodeMetaEntity } from './createDatabaseFileSystem.js';
139
+ import { loadTestDatabase } from './loadTestDatabase.js';
140
+
141
+ describe('DatabaseFileSystem', () => {
142
+ var fs;
143
+ var em;
144
+ beforeEach(
145
+ () =>
146
+ _async_to_generator(function () {
147
+ var _ref, entityManager, rootNode, content, readmeFile;
148
+ return _ts_generator(this, (_state) => {
149
+ switch (_state.label) {
150
+ case 0:
151
+ return [4, loadTestDatabase()];
152
+ case 1:
153
+ (_ref = _state.sent()), (entityManager = _ref.em);
154
+ em = entityManager; // Type cast to match expected EntityManager type
155
+ fs = createDatabaseFileSystem({
156
+ getEntityManager: () => em,
157
+ });
158
+ return [4, fs.ensureRootNode()];
159
+ case 2:
160
+ rootNode = _state.sent();
161
+ // Create /README.txt file using EntityManager
162
+ content = Buffer.from('Hello');
163
+ readmeFile = em.create(FileNodeMetaEntity, {
164
+ filename: 'README.txt',
165
+ parent: rootNode,
166
+ kind: 'file',
167
+ size: content.length,
168
+ content: content,
169
+ atime: new Date(),
170
+ btime: new Date(),
171
+ ctime: new Date(),
172
+ mtime: new Date(),
173
+ });
174
+ return [4, em.persistAndFlush(readmeFile)];
175
+ case 3:
176
+ _state.sent();
177
+ return [2];
178
+ }
179
+ });
180
+ })(),
181
+ 30000,
182
+ ); // Increase timeout to 30 seconds
183
+ test(
184
+ 'common tests',
185
+ () =>
186
+ _async_to_generator(function () {
187
+ return _ts_generator(this, (_state) => {
188
+ switch (_state.label) {
189
+ case 0:
190
+ return [
191
+ 4,
192
+ runFileSystemTest(fs, {
193
+ writableStream: false,
194
+ readableStream: false,
195
+ readStream: false,
196
+ writeStream: false,
197
+ abort: false,
198
+ }),
199
+ ];
200
+ case 1:
201
+ _state.sent();
202
+ return [2];
203
+ }
204
+ });
205
+ })(),
206
+ 60000,
207
+ ); // Increase timeout to 60 seconds
221
208
  });
@@ -1,2 +1,2 @@
1
- export { createNodeFileSystem } from "./createNodeFileSystem.js";
1
+ export { createNodeFileSystem } from './createNodeFileSystem.js';
2
2
  //# sourceMappingURL=index.js.map