@spinajs/fs 2.0.481 → 2.0.484

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 (211) hide show
  1. package/lib/cjs/cli/cat.d.ts +11 -0
  2. package/lib/cjs/cli/cat.d.ts.map +1 -0
  3. package/lib/cjs/cli/cat.js +40 -0
  4. package/lib/cjs/cli/cat.js.map +1 -0
  5. package/lib/cjs/cli/cp.d.ts +11 -0
  6. package/lib/cjs/cli/cp.d.ts.map +1 -0
  7. package/lib/cjs/cli/cp.js +41 -0
  8. package/lib/cjs/cli/cp.js.map +1 -0
  9. package/lib/cjs/cli/download.d.ts +7 -0
  10. package/lib/cjs/cli/download.d.ts.map +1 -0
  11. package/lib/cjs/cli/download.js +39 -0
  12. package/lib/cjs/cli/download.js.map +1 -0
  13. package/lib/cjs/cli/exists.d.ts +7 -0
  14. package/lib/cjs/cli/exists.d.ts.map +1 -0
  15. package/lib/cjs/cli/exists.js +39 -0
  16. package/lib/cjs/cli/exists.js.map +1 -0
  17. package/lib/cjs/cli/fs.d.ts +11 -0
  18. package/lib/cjs/cli/fs.d.ts.map +1 -1
  19. package/lib/cjs/cli/fs.js +47 -21
  20. package/lib/cjs/cli/fs.js.map +1 -1
  21. package/lib/cjs/cli/hash.d.ts +11 -0
  22. package/lib/cjs/cli/hash.d.ts.map +1 -0
  23. package/lib/cjs/cli/hash.js +40 -0
  24. package/lib/cjs/cli/hash.js.map +1 -0
  25. package/lib/cjs/cli/info.d.ts +7 -0
  26. package/lib/cjs/cli/info.d.ts.map +1 -0
  27. package/lib/cjs/cli/info.js +45 -0
  28. package/lib/cjs/cli/info.js.map +1 -0
  29. package/lib/cjs/cli/ls.d.ts +7 -0
  30. package/lib/cjs/cli/ls.d.ts.map +1 -0
  31. package/lib/cjs/cli/ls.js +40 -0
  32. package/lib/cjs/cli/ls.js.map +1 -0
  33. package/lib/cjs/cli/mkdir.d.ts +7 -0
  34. package/lib/cjs/cli/mkdir.d.ts.map +1 -0
  35. package/lib/cjs/cli/mkdir.js +39 -0
  36. package/lib/cjs/cli/mkdir.js.map +1 -0
  37. package/lib/cjs/cli/mv.d.ts +11 -0
  38. package/lib/cjs/cli/mv.d.ts.map +1 -0
  39. package/lib/cjs/cli/mv.js +41 -0
  40. package/lib/cjs/cli/mv.js.map +1 -0
  41. package/lib/cjs/cli/rm.d.ts +1 -6
  42. package/lib/cjs/cli/rm.d.ts.map +1 -1
  43. package/lib/cjs/cli/rm.js +14 -4
  44. package/lib/cjs/cli/rm.js.map +1 -1
  45. package/lib/cjs/cli/stat.d.ts +1 -5
  46. package/lib/cjs/cli/stat.d.ts.map +1 -1
  47. package/lib/cjs/cli/stat.js +20 -3
  48. package/lib/cjs/cli/stat.js.map +1 -1
  49. package/lib/cjs/cli/unzip.d.ts +11 -0
  50. package/lib/cjs/cli/unzip.d.ts.map +1 -0
  51. package/lib/cjs/cli/unzip.js +47 -0
  52. package/lib/cjs/cli/unzip.js.map +1 -0
  53. package/lib/cjs/cli/upload.d.ts +7 -0
  54. package/lib/cjs/cli/upload.d.ts.map +1 -0
  55. package/lib/cjs/cli/upload.js +40 -0
  56. package/lib/cjs/cli/upload.js.map +1 -0
  57. package/lib/cjs/cli/write.d.ts +13 -0
  58. package/lib/cjs/cli/write.d.ts.map +1 -0
  59. package/lib/cjs/cli/write.js +54 -0
  60. package/lib/cjs/cli/write.js.map +1 -0
  61. package/lib/cjs/cli/zip.d.ts +12 -0
  62. package/lib/cjs/cli/zip.d.ts.map +1 -0
  63. package/lib/cjs/cli/zip.js +51 -0
  64. package/lib/cjs/cli/zip.js.map +1 -0
  65. package/lib/cjs/config/fs.d.ts +9 -0
  66. package/lib/cjs/config/fs.d.ts.map +1 -0
  67. package/lib/cjs/config/fs.js +22 -0
  68. package/lib/cjs/config/fs.js.map +1 -0
  69. package/lib/cjs/file-hasher.d.ts +85 -5
  70. package/lib/cjs/file-hasher.d.ts.map +1 -1
  71. package/lib/cjs/file-hasher.js +106 -14
  72. package/lib/cjs/file-hasher.js.map +1 -1
  73. package/lib/cjs/file-info.d.ts +94 -5
  74. package/lib/cjs/file-info.d.ts.map +1 -1
  75. package/lib/cjs/file-info.js +267 -73
  76. package/lib/cjs/file-info.js.map +1 -1
  77. package/lib/cjs/fp.d.ts +80 -2
  78. package/lib/cjs/fp.d.ts.map +1 -1
  79. package/lib/cjs/fp.js +149 -3
  80. package/lib/cjs/fp.js.map +1 -1
  81. package/lib/cjs/index.d.ts +2 -1
  82. package/lib/cjs/index.d.ts.map +1 -1
  83. package/lib/cjs/index.js +7 -2
  84. package/lib/cjs/index.js.map +1 -1
  85. package/lib/cjs/interfaces.d.ts +89 -12
  86. package/lib/cjs/interfaces.d.ts.map +1 -1
  87. package/lib/cjs/interfaces.js +13 -13
  88. package/lib/cjs/interfaces.js.map +1 -1
  89. package/lib/cjs/local-provider.d.ts +51 -6
  90. package/lib/cjs/local-provider.d.ts.map +1 -1
  91. package/lib/cjs/local-provider.js +254 -76
  92. package/lib/cjs/local-provider.js.map +1 -1
  93. package/lib/cjs/temp-cleanup-strategy.d.ts +70 -0
  94. package/lib/cjs/temp-cleanup-strategy.d.ts.map +1 -0
  95. package/lib/cjs/temp-cleanup-strategy.js +157 -0
  96. package/lib/cjs/temp-cleanup-strategy.js.map +1 -0
  97. package/lib/cjs/temp-provider.d.ts +59 -0
  98. package/lib/cjs/temp-provider.d.ts.map +1 -0
  99. package/lib/cjs/temp-provider.js +150 -0
  100. package/lib/cjs/temp-provider.js.map +1 -0
  101. package/lib/mjs/cli/cat.d.ts +11 -0
  102. package/lib/mjs/cli/cat.d.ts.map +1 -0
  103. package/lib/mjs/cli/cat.js +37 -0
  104. package/lib/mjs/cli/cat.js.map +1 -0
  105. package/lib/mjs/cli/cp.d.ts +11 -0
  106. package/lib/mjs/cli/cp.d.ts.map +1 -0
  107. package/lib/mjs/cli/cp.js +38 -0
  108. package/lib/mjs/cli/cp.js.map +1 -0
  109. package/lib/mjs/cli/download.d.ts +7 -0
  110. package/lib/mjs/cli/download.d.ts.map +1 -0
  111. package/lib/mjs/cli/download.js +36 -0
  112. package/lib/mjs/cli/download.js.map +1 -0
  113. package/lib/mjs/cli/exists.d.ts +7 -0
  114. package/lib/mjs/cli/exists.d.ts.map +1 -0
  115. package/lib/mjs/cli/exists.js +36 -0
  116. package/lib/mjs/cli/exists.js.map +1 -0
  117. package/lib/mjs/cli/fs.d.ts +11 -1
  118. package/lib/mjs/cli/fs.d.ts.map +1 -1
  119. package/lib/mjs/cli/fs.js +43 -22
  120. package/lib/mjs/cli/fs.js.map +1 -1
  121. package/lib/mjs/cli/hash.d.ts +11 -0
  122. package/lib/mjs/cli/hash.d.ts.map +1 -0
  123. package/lib/mjs/cli/hash.js +37 -0
  124. package/lib/mjs/cli/hash.js.map +1 -0
  125. package/lib/mjs/cli/info.d.ts +7 -0
  126. package/lib/mjs/cli/info.d.ts.map +1 -0
  127. package/lib/mjs/cli/info.js +42 -0
  128. package/lib/mjs/cli/info.js.map +1 -0
  129. package/lib/mjs/cli/ls.d.ts +7 -0
  130. package/lib/mjs/cli/ls.d.ts.map +1 -0
  131. package/lib/mjs/cli/ls.js +37 -0
  132. package/lib/mjs/cli/ls.js.map +1 -0
  133. package/lib/mjs/cli/mkdir.d.ts +7 -0
  134. package/lib/mjs/cli/mkdir.d.ts.map +1 -0
  135. package/lib/mjs/cli/mkdir.js +36 -0
  136. package/lib/mjs/cli/mkdir.js.map +1 -0
  137. package/lib/mjs/cli/mv.d.ts +11 -0
  138. package/lib/mjs/cli/mv.d.ts.map +1 -0
  139. package/lib/mjs/cli/mv.js +38 -0
  140. package/lib/mjs/cli/mv.js.map +1 -0
  141. package/lib/mjs/cli/rm.d.ts +1 -6
  142. package/lib/mjs/cli/rm.d.ts.map +1 -1
  143. package/lib/mjs/cli/rm.js +15 -5
  144. package/lib/mjs/cli/rm.js.map +1 -1
  145. package/lib/mjs/cli/stat.d.ts +1 -5
  146. package/lib/mjs/cli/stat.d.ts.map +1 -1
  147. package/lib/mjs/cli/stat.js +21 -4
  148. package/lib/mjs/cli/stat.js.map +1 -1
  149. package/lib/mjs/cli/unzip.d.ts +11 -0
  150. package/lib/mjs/cli/unzip.d.ts.map +1 -0
  151. package/lib/mjs/cli/unzip.js +44 -0
  152. package/lib/mjs/cli/unzip.js.map +1 -0
  153. package/lib/mjs/cli/upload.d.ts +7 -0
  154. package/lib/mjs/cli/upload.d.ts.map +1 -0
  155. package/lib/mjs/cli/upload.js +37 -0
  156. package/lib/mjs/cli/upload.js.map +1 -0
  157. package/lib/mjs/cli/write.d.ts +13 -0
  158. package/lib/mjs/cli/write.d.ts.map +1 -0
  159. package/lib/mjs/cli/write.js +51 -0
  160. package/lib/mjs/cli/write.js.map +1 -0
  161. package/lib/mjs/cli/zip.d.ts +12 -0
  162. package/lib/mjs/cli/zip.d.ts.map +1 -0
  163. package/lib/mjs/cli/zip.js +48 -0
  164. package/lib/mjs/cli/zip.js.map +1 -0
  165. package/lib/mjs/config/fs.d.ts +9 -0
  166. package/lib/mjs/config/fs.d.ts.map +1 -0
  167. package/lib/mjs/config/fs.js +20 -0
  168. package/lib/mjs/config/fs.js.map +1 -0
  169. package/lib/mjs/file-hasher.d.ts +85 -5
  170. package/lib/mjs/file-hasher.d.ts.map +1 -1
  171. package/lib/mjs/file-hasher.js +106 -14
  172. package/lib/mjs/file-hasher.js.map +1 -1
  173. package/lib/mjs/file-info.d.ts +94 -5
  174. package/lib/mjs/file-info.d.ts.map +1 -1
  175. package/lib/mjs/file-info.js +233 -73
  176. package/lib/mjs/file-info.js.map +1 -1
  177. package/lib/mjs/fp.d.ts +80 -2
  178. package/lib/mjs/fp.d.ts.map +1 -1
  179. package/lib/mjs/fp.js +135 -4
  180. package/lib/mjs/fp.js.map +1 -1
  181. package/lib/mjs/index.d.ts +2 -1
  182. package/lib/mjs/index.d.ts.map +1 -1
  183. package/lib/mjs/index.js +8 -3
  184. package/lib/mjs/index.js.map +1 -1
  185. package/lib/mjs/interfaces.d.ts +89 -12
  186. package/lib/mjs/interfaces.d.ts.map +1 -1
  187. package/lib/mjs/interfaces.js +13 -13
  188. package/lib/mjs/interfaces.js.map +1 -1
  189. package/lib/mjs/local-provider.d.ts +51 -6
  190. package/lib/mjs/local-provider.d.ts.map +1 -1
  191. package/lib/mjs/local-provider.js +257 -79
  192. package/lib/mjs/local-provider.js.map +1 -1
  193. package/lib/mjs/temp-cleanup-strategy.d.ts +70 -0
  194. package/lib/mjs/temp-cleanup-strategy.d.ts.map +1 -0
  195. package/lib/mjs/temp-cleanup-strategy.js +153 -0
  196. package/lib/mjs/temp-cleanup-strategy.js.map +1 -0
  197. package/lib/mjs/temp-provider.d.ts +59 -0
  198. package/lib/mjs/temp-provider.d.ts.map +1 -0
  199. package/lib/mjs/temp-provider.js +147 -0
  200. package/lib/mjs/temp-provider.js.map +1 -0
  201. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  202. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  203. package/package.json +12 -6
  204. package/lib/cjs/local-temp-provider.d.ts +0 -18
  205. package/lib/cjs/local-temp-provider.d.ts.map +0 -1
  206. package/lib/cjs/local-temp-provider.js +0 -63
  207. package/lib/cjs/local-temp-provider.js.map +0 -1
  208. package/lib/mjs/local-temp-provider.d.ts +0 -18
  209. package/lib/mjs/local-temp-provider.d.ts.map +0 -1
  210. package/lib/mjs/local-temp-provider.js +0 -60
  211. package/lib/mjs/local-temp-provider.js.map +0 -1
@@ -1,6 +1,7 @@
1
- import { ReadStream } from 'fs';
1
+ import { Stats } from 'fs';
2
2
  import { fs, IFsLocalOptions, IStat, IZipResult } from './interfaces.js';
3
3
  import { Log } from '@spinajs/log-common';
4
+ import archiver from 'archiver';
4
5
  /**
5
6
  * Abstract layer for file operations.
6
7
  * Basic implementation is just wrapper for native node fs functions
@@ -8,7 +9,9 @@ import { Log } from '@spinajs/log-common';
8
9
  * It allows to wrap other libs eg. aws s3, ftp
9
10
  * and inject it into code without changing logic that use them.
10
11
  *
11
- * TODO: map errors to some kind of common errors shared with other implementations
12
+ * All failures are surfaced as IOFail ( the original error is preserved as the
13
+ * inner cause ). When basePath is set, all paths are sandboxed to it - resolved
14
+ * paths escaping basePath ( eg. via `..` ) throw IOFail.
12
15
  */
13
16
  export declare class fsNative<T extends IFsLocalOptions> extends fs {
14
17
  Options: T;
@@ -32,12 +35,12 @@ export declare class fsNative<T extends IFsLocalOptions> extends fs {
32
35
  /**
33
36
  * read all content of file
34
37
  */
35
- read(path: string, encoding?: BufferEncoding): Promise<string | Buffer<ArrayBufferLike>>;
36
- readStream(path: string, encoding?: BufferEncoding): Promise<ReadStream>;
38
+ read(path: string, encoding?: BufferEncoding): Promise<string | NonSharedBuffer>;
39
+ readStream(path: string, encoding?: BufferEncoding): Promise<import("fs").ReadStream>;
37
40
  /**
38
41
  * Write to file string or buffer
39
42
  */
40
- write(path: string, data: string | Uint8Array, encoding: BufferEncoding): Promise<void>;
43
+ write(path: string, data: string | Uint8Array, encoding?: BufferEncoding): Promise<void>;
41
44
  append(path: string, data: string | Uint8Array, encoding?: BufferEncoding): Promise<void>;
42
45
  writeStream(path: string, rStream?: BufferEncoding | NodeJS.ReadableStream, encoding?: BufferEncoding): Promise<import("fs").WriteStream>;
43
46
  /**
@@ -60,6 +63,11 @@ export declare class fsNative<T extends IFsLocalOptions> extends fs {
60
63
  * Change name of a file
61
64
  */
62
65
  rename(oldPath: string, newPath: string): Promise<void>;
66
+ /**
67
+ * Native rename seam - extracted so move/rename logic ( eg. EXDEV fallback )
68
+ * can be tested without a real cross-device setup.
69
+ */
70
+ protected _rename(oldPath: string, newPath: string): Promise<void>;
63
71
  /**
64
72
  *
65
73
  * Deletes file OR
@@ -79,7 +87,16 @@ export declare class fsNative<T extends IFsLocalOptions> extends fs {
79
87
  * Returns file statistics, not all fields may be accesible
80
88
  */
81
89
  stat(path: string): Promise<IStat>;
82
- tmppath(): string;
90
+ /**
91
+ * Maps native fs.Stats onto IStat.
92
+ *
93
+ * birthtime is the creation time; ctime is inode CHANGE time and would reset
94
+ * file age on chmod / rename ( breaks temp fs cleanup ageing ). Defensive:
95
+ * some filesystems report epoch 0 when birthtime is unsupported - fall back
96
+ * to mtime so age-based logic does not treat files as infinitely old.
97
+ */
98
+ protected toStatEntry(result: Stats): IStat;
99
+ tmppath(ext?: string): string;
83
100
  /**
84
101
  * List content of directory
85
102
  *
@@ -89,6 +106,34 @@ export declare class fsNative<T extends IFsLocalOptions> extends fs {
89
106
  unzip(path: string, destPath?: string, dstFs?: fs): Promise<string>;
90
107
  isDir(path: string): Promise<boolean>;
91
108
  zip(path: string | (string | string[])[], dstFs?: fs, dstFile?: string): Promise<IZipResult>;
109
+ /**
110
+ * Source path of a zip entry. Entries are either a plain path or a
111
+ * [ sourcePath, entryName ] tuple.
112
+ */
113
+ protected zipEntrySource(entry: string | string[]): string;
114
+ /**
115
+ * Name a zip entry is stored under. Defaults to the source path when no
116
+ * explicit entry name is given.
117
+ */
118
+ protected zipEntryName(entry: string | string[]): string;
119
+ /**
120
+ * Fails fast with a single clear error listing every missing source, so a
121
+ * missing entry never yields a silently incomplete archive.
122
+ */
123
+ protected assertSourcesExist(paths: (string | string[])[]): Promise<void>;
124
+ /**
125
+ * Adds every source to the archive - a plain-path directory is added
126
+ * recursively, everything else as a single file stored under its entry name.
127
+ */
128
+ protected addZipEntries(archive: ReturnType<typeof archiver>, paths: (string | string[])[]): Promise<void>;
129
+ /**
130
+ * Builds the {@link IZipResult} accessor object for a finished archive.
131
+ *
132
+ * The zip path is resolved against the DESTINATION fs ( outFile is relative
133
+ * to its base path ). Remote destinations may not support path resolving -
134
+ * fall back to the raw name so the accessors still work.
135
+ */
136
+ protected buildZipResult(fs: fs, outFile: string): IZipResult;
92
137
  resolvePath(path: string): string;
93
138
  }
94
139
  //# sourceMappingURL=local-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-provider.d.ts","sourceRoot":"","sources":["../../src/local-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsF,UAAU,EAAE,MAAM,IAAI,CAAC;AAIpH,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,GAAG,EAAU,MAAM,qBAAqB,CAAC;AAMlD;;;;;;;;GAQG;AACH,qBAEa,QAAQ,CAAC,CAAC,SAAS,eAAe,CAAE,SAAQ,EAAE;IAYtC,OAAO,EAAE,CAAC;IAV7B,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IAEtB;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;gBAEkB,OAAO,EAAE,CAAC;IAQhB,OAAO;IAmBpB;;;;;;OAMG;IACU,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASvC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAStD;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc;IAYlD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc;IAIzD;;OAEG;IACU,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,QAAQ,EAAE,cAAc;IAgBvE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,cAAc;IAY5G;;;OAGG;IACU,MAAM,CAAC,IAAI,EAAE,MAAM;IASnB,SAAS,CAAC,IAAI,EAAE,MAAM;IAInC;;;;OAIG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;IAkBxD;;OAEG;IACU,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;IAY9D;;OAEG;IACU,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIpD;;;;;;OAMG;IACU,EAAE,CAAC,IAAI,EAAE,MAAM;IAI5B;;;;;OAKG;IACU,KAAK,CAAC,IAAI,EAAE,MAAM;IAI/B;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAaxC,OAAO,IAAI,MAAM;IAIxB;;;;OAIG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;IAgBjD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwElG,WAAW,CAAC,IAAI,EAAE,MAAM;CAIhC"}
1
+ {"version":3,"file":"local-provider.d.ts","sourceRoot":"","sources":["../../src/local-provider.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  /* eslint-disable security/detect-non-literal-fs-filename */
11
11
  import { IOFail } from '@spinajs/exceptions';
12
- import { constants, createReadStream, createWriteStream, existsSync, readFile, readFileSync, ReadStream } from 'fs';
13
- import { rm, stat, readdir, rename, mkdir, access, open, appendFile } from 'node:fs/promises';
12
+ import { constants, createReadStream, createWriteStream, existsSync, readFileSync } from 'fs';
13
+ import { rm, stat, readdir, rename, mkdir, access, open, appendFile, readFile } from 'node:fs/promises';
14
14
  import { DateTime } from 'luxon';
15
15
  import { DI, Injectable, PerInstanceCheck } from '@spinajs/di';
16
16
  import { fs } from './interfaces.js';
17
- import { basename, join } from 'path';
17
+ import { basename, dirname, isAbsolute, join, parse, relative, resolve as pathResolve } from 'path';
18
18
  import { Log, Logger } from '@spinajs/log-common';
19
19
  import archiver from 'archiver';
20
20
  import unzipper from 'unzipper';
@@ -27,7 +27,9 @@ import { toArray } from '@spinajs/util';
27
27
  * It allows to wrap other libs eg. aws s3, ftp
28
28
  * and inject it into code without changing logic that use them.
29
29
  *
30
- * TODO: map errors to some kind of common errors shared with other implementations
30
+ * All failures are surfaced as IOFail ( the original error is preserved as the
31
+ * inner cause ). When basePath is set, all paths are sandboxed to it - resolved
32
+ * paths escaping basePath ( eg. via `..` ) throw IOFail.
31
33
  */
32
34
  let fsNative = class fsNative extends fs {
33
35
  /**
@@ -46,12 +48,20 @@ let fsNative = class fsNative extends fs {
46
48
  }
47
49
  async resolve() {
48
50
  await super.resolve();
51
+ // canonicalize configured base path once - a relative basePath would otherwise
52
+ // resolve against cwd at every call ( and self-join in checks below )
53
+ if (this.Options.basePath) {
54
+ this.Options.basePath = pathResolve(this.Options.basePath);
55
+ }
49
56
  const basePath = this.Options.basePath ?? process.env.WORKSPACE_ROOT_PATH ?? process.cwd();
50
57
  this.Logger.info(`Initializing file provider ${this.Options.name} with base path ${basePath}`);
51
- if ((await this.exists(basePath)) === false) {
52
- this.Logger.warn(`Base path ${this.Options.basePath} for file provider ${this.Options.name} not exists, trying to create base folder`);
53
- await mkdir(this.Options.basePath, { recursive: true });
54
- this.Logger.success(`Base path ${this.Options.basePath} created`);
58
+ // check the raw path - this.exists() would resolve it against basePath again
59
+ if (!existsSync(basePath)) {
60
+ this.Logger.warn(`Base path ${basePath} for file provider ${this.Options.name} not exists, trying to create base folder`);
61
+ // use the computed base path - Options.basePath may be undefined when the
62
+ // env / cwd fallback was taken
63
+ await mkdir(basePath, { recursive: true });
64
+ this.Logger.success(`Base path ${basePath} created`);
55
65
  }
56
66
  }
57
67
  /**
@@ -74,53 +84,81 @@ let fsNative = class fsNative extends fs {
74
84
  throw new IOFail(`file ${srcPath} does not exists`);
75
85
  }
76
86
  const dPath = this.resolvePath(destPath ?? basename(srcPath));
77
- await cp(srcPath, dPath, { force: true, recursive: true });
87
+ try {
88
+ // cp creates missing destination parent directories itself
89
+ await cp(srcPath, dPath, { force: true, recursive: true });
90
+ }
91
+ catch (err) {
92
+ throw new IOFail(`Cannot upload ${srcPath} to ${dPath}`, err);
93
+ }
78
94
  }
79
95
  /**
80
96
  * read all content of file
81
97
  */
82
98
  async read(path, encoding) {
83
- return new Promise((resolve, reject) => {
84
- readFile(this.resolvePath(path), { encoding: encoding ?? 'binary' }, (err, data) => {
85
- if (err) {
86
- reject(err);
87
- }
88
- else {
89
- resolve(data);
90
- }
91
- });
92
- });
99
+ const p = this.resolvePath(path);
100
+ try {
101
+ // no encoding -> raw Buffer. Defaulting to 'binary' ( latin1 ) would return
102
+ // a string and corrupt binary data for callers expecting a Buffer.
103
+ return await readFile(p, { encoding: encoding ?? null });
104
+ }
105
+ catch (err) {
106
+ throw new IOFail(`Cannot read file ${path}`, err);
107
+ }
93
108
  }
94
- readStream(path, encoding) {
95
- return Promise.resolve(createReadStream(this.resolvePath(path), { encoding: encoding ?? 'binary' }));
109
+ async readStream(path, encoding) {
110
+ const p = this.resolvePath(path);
111
+ // fail fast with a consistent error - otherwise the error surfaces asynchronously
112
+ // on the returned stream. NOTE: runtime read failures are still stream errors.
113
+ if (!(await this.exists(path))) {
114
+ throw new IOFail(`Cannot read file ${path}, file does not exists`);
115
+ }
116
+ return createReadStream(p, encoding ? { encoding } : {});
96
117
  }
97
118
  /**
98
119
  * Write to file string or buffer
99
120
  */
100
121
  async write(path, data, encoding) {
101
- let fHandle = null;
122
+ const p = this.resolvePath(path);
123
+ let fHandle;
124
+ try {
125
+ fHandle = await open(p, 'w');
126
+ }
127
+ catch (err) {
128
+ throw new IOFail(`Cannot open file ${path} for writing`, err);
129
+ }
102
130
  try {
103
- fHandle = await open(this.resolvePath(path), 'w');
104
131
  await fHandle.writeFile(data, { encoding });
132
+ // flush to disk so data is durable before success is reported
133
+ await fHandle.sync();
105
134
  }
106
135
  catch (err) {
107
136
  throw new IOFail(`Cannot write to file ${path}`, err);
108
137
  }
109
138
  finally {
110
- if (fHandle) {
111
- await fHandle.sync();
112
- await fHandle.close();
113
- }
139
+ // close must ALWAYS run and must never mask the original error
140
+ await fHandle.close().catch(() => { });
114
141
  }
115
142
  }
116
143
  async append(path, data, encoding) {
117
- await appendFile(path, data, encoding);
144
+ const p = this.resolvePath(path);
145
+ try {
146
+ await appendFile(p, data, encoding);
147
+ }
148
+ catch (err) {
149
+ throw new IOFail(`Cannot append to file ${path}`, err);
150
+ }
118
151
  }
119
152
  writeStream(path, rStream, encoding) {
120
- const stream = createWriteStream(this.resolvePath(path), {
121
- encoding: (typeof rStream === 'string' ? rStream : encoding) ?? 'binary',
122
- });
123
- if (rStream instanceof ReadStream) {
153
+ const enc = typeof rStream === 'string' ? rStream : encoding;
154
+ const stream = createWriteStream(this.resolvePath(path), enc ? { encoding: enc } : {});
155
+ // pipe ANY readable stream, not only fs.ReadStream instances - the contract accepts
156
+ // NodeJS.ReadableStream ( PassThrough, http/s3 bodies etc. ), instanceof would
157
+ // silently skip those and stall the caller
158
+ if (rStream && typeof rStream !== 'string' && typeof rStream.pipe === 'function') {
159
+ // pipe() does NOT forward errors - without this, a failing source leaves the
160
+ // write stream open forever and the caller waiting for 'close' hangs
161
+ rStream.on('error', (err) => stream.destroy(err instanceof Error ? err : new IOFail(String(err))));
124
162
  rStream.pipe(stream);
125
163
  }
126
164
  return Promise.resolve(stream);
@@ -139,7 +177,7 @@ let fsNative = class fsNative extends fs {
139
177
  }
140
178
  }
141
179
  async dirExists(path) {
142
- return this.exists(this.resolvePath(path));
180
+ return this.isDir(path);
143
181
  }
144
182
  /**
145
183
  * Copy file or dir to another location
@@ -157,10 +195,15 @@ let fsNative = class fsNative extends fs {
157
195
  }
158
196
  else {
159
197
  const dPath = this.resolvePath(dest);
160
- await cp(sPath, dPath, {
161
- recursive: true,
162
- force: true,
163
- });
198
+ try {
199
+ await cp(sPath, dPath, {
200
+ recursive: true,
201
+ force: true,
202
+ });
203
+ }
204
+ catch (err) {
205
+ throw new IOFail(`Cannot copy ${path} to ${dest}`, err);
206
+ }
164
207
  }
165
208
  }
166
209
  /**
@@ -171,17 +214,45 @@ let fsNative = class fsNative extends fs {
171
214
  if (dstFs) {
172
215
  await dstFs.upload(oPath, newPath);
173
216
  await this.rm(oldPath);
217
+ return;
174
218
  }
175
- else {
176
- const nPath = this.resolvePath(newPath);
177
- await rename(oPath, nPath);
219
+ const nPath = this.resolvePath(newPath);
220
+ // rename does not create missing destination directories - align with copy
221
+ // ( cp creates them ). Failures here are ignored, rename reports the real error.
222
+ await mkdir(dirname(nPath), { recursive: true }).catch(() => { });
223
+ try {
224
+ await this._rename(oPath, nPath);
225
+ }
226
+ catch (err) {
227
+ // rename cannot cross devices / mounts ( eg. C: -> D:, docker volumes ) -
228
+ // fall back to copy + delete
229
+ if (err?.code === 'EXDEV') {
230
+ await cp(oPath, nPath, { recursive: true, force: true });
231
+ await this.rm(oldPath);
232
+ return;
233
+ }
234
+ throw new IOFail(`Cannot move ${oldPath} to ${newPath}`, err);
178
235
  }
179
236
  }
180
237
  /**
181
238
  * Change name of a file
182
239
  */
183
240
  async rename(oldPath, newPath) {
184
- await rename(this.resolvePath(oldPath), this.resolvePath(newPath));
241
+ const oPath = this.resolvePath(oldPath);
242
+ const nPath = this.resolvePath(newPath);
243
+ try {
244
+ await this._rename(oPath, nPath);
245
+ }
246
+ catch (err) {
247
+ throw new IOFail(`Cannot rename ${oldPath} to ${newPath}`, err);
248
+ }
249
+ }
250
+ /**
251
+ * Native rename seam - extracted so move/rename logic ( eg. EXDEV fallback )
252
+ * can be tested without a real cross-device setup.
253
+ */
254
+ _rename(oldPath, newPath) {
255
+ return rename(oldPath, newPath);
185
256
  }
186
257
  /**
187
258
  *
@@ -200,24 +271,47 @@ let fsNative = class fsNative extends fs {
200
271
  * @param path - directory to create
201
272
  */
202
273
  async mkdir(path) {
203
- await mkdir(this.resolvePath(path), { recursive: true });
274
+ const p = this.resolvePath(path);
275
+ try {
276
+ await mkdir(p, { recursive: true });
277
+ }
278
+ catch (err) {
279
+ throw new IOFail(`Cannot create directory ${path}`, err);
280
+ }
204
281
  }
205
282
  /**
206
283
  * Returns file statistics, not all fields may be accesible
207
284
  */
208
285
  async stat(path) {
209
- const result = await stat(this.resolvePath(path));
286
+ const p = this.resolvePath(path);
287
+ try {
288
+ return this.toStatEntry(await stat(p));
289
+ }
290
+ catch (err) {
291
+ throw err instanceof IOFail ? err : new IOFail(`Cannot stat ${path}`, err);
292
+ }
293
+ }
294
+ /**
295
+ * Maps native fs.Stats onto IStat.
296
+ *
297
+ * birthtime is the creation time; ctime is inode CHANGE time and would reset
298
+ * file age on chmod / rename ( breaks temp fs cleanup ageing ). Defensive:
299
+ * some filesystems report epoch 0 when birthtime is unsupported - fall back
300
+ * to mtime so age-based logic does not treat files as infinitely old.
301
+ */
302
+ toStatEntry(result) {
303
+ const birth = result.birthtime && result.birthtime.getTime() > 0 ? result.birthtime : result.mtime;
210
304
  return {
211
305
  IsDirectory: result.isDirectory(),
212
306
  IsFile: result.isFile(),
213
- CreationTime: DateTime.fromJSDate(result.ctime),
307
+ CreationTime: DateTime.fromJSDate(birth),
214
308
  ModifiedTime: DateTime.fromJSDate(result.mtime),
215
309
  AccessTime: DateTime.fromJSDate(result.atime),
216
310
  Size: result.size,
217
311
  };
218
312
  }
219
- tmppath() {
220
- return join(this.Options.basePath, super.tmpname());
313
+ tmppath(ext) {
314
+ return join(this.Options.basePath, super.tmpname(ext));
221
315
  }
222
316
  /**
223
317
  * List content of directory
@@ -225,18 +319,32 @@ let fsNative = class fsNative extends fs {
225
319
  * @param path - path to directory
226
320
  */
227
321
  async list(path) {
228
- return await readdir(this.resolvePath(path));
322
+ const p = this.resolvePath(path);
323
+ try {
324
+ return await readdir(p);
325
+ }
326
+ catch (err) {
327
+ throw new IOFail(`Cannot list directory ${path}`, err);
328
+ }
229
329
  }
230
330
  async unzip(path, destPath, dstFs) {
331
+ const srcPath = this.resolvePath(path);
332
+ if (!(await this.exists(path))) {
333
+ throw new IOFail(`Cannot unzip, file ${path} does not exists`);
334
+ }
231
335
  const dFs = dstFs ?? this;
232
336
  const dst = dFs.resolvePath(destPath ?? dFs.tmpname());
233
337
  return new Promise((resolve, reject) => {
234
- createReadStream(this.resolvePath(path)).pipe(unzipper
338
+ const rStream = createReadStream(srcPath);
339
+ // without this handler a source read error is an unhandled stream 'error'
340
+ // event and CRASHES the process instead of rejecting
341
+ rStream.on('error', (err) => reject(new IOFail(`Cannot read zip file ${path}`, err)));
342
+ rStream.pipe(unzipper
235
343
  .Extract({
236
344
  path: dst,
237
345
  })
238
346
  .on('close', () => resolve(dst))
239
- .on('error', reject));
347
+ .on('error', (err) => reject(new IOFail(`Cannot unzip file ${path}`, err))));
240
348
  });
241
349
  }
242
350
  async isDir(path) {
@@ -250,21 +358,14 @@ let fsNative = class fsNative extends fs {
250
358
  }
251
359
  async zip(path, dstFs, dstFile) {
252
360
  const paths = toArray(path);
361
+ await this.assertSourcesExist(paths);
253
362
  const fs = dstFs ?? (await DI.resolve('__file_provider__', ['fs-temp']));
254
363
  const outFile = dstFile ?? `${fs.tmpname()}.zip`;
255
364
  const wStream = await fs.writeStream(outFile);
256
365
  const archive = archiver('zip');
257
366
  // pipe archive data to the file
258
367
  archive.pipe(wStream);
259
- for (const p of paths) {
260
- if (!Array.isArray(p)) {
261
- if (await this.isDir(p)) {
262
- archive.directory(this.resolvePath(p), false);
263
- continue;
264
- }
265
- }
266
- archive.file(this.resolvePath(Array.isArray(p) ? p[0] : p), { name: basename(Array.isArray(p) ? p[1] : p) });
267
- }
368
+ await this.addZipEntries(archive, paths);
268
369
  archive.on('entry', (entry) => {
269
370
  this.Logger.trace(`Archiving file ${entry.name}, size: ${entry.stats?.size} into ${outFile}, fs: ${fs.Name}`);
270
371
  });
@@ -283,32 +384,109 @@ let fsNative = class fsNative extends fs {
283
384
  reject(new IOFail('Archiving error', err));
284
385
  });
285
386
  wStream.on('close', () => {
286
- const result = {
287
- fs,
288
- asFilePath: () => {
289
- return outFile;
290
- },
291
- asStream: (encoding) => {
292
- return createReadStream(outFile, {
293
- encoding: encoding ?? 'binary',
294
- });
295
- },
296
- asBase64: () => {
297
- return readFileSync(outFile, { encoding: 'base64' });
298
- },
299
- unlink: async () => {
300
- return await fs.rm(outFile);
301
- },
302
- };
303
- resolve(result);
387
+ resolve(this.buildZipResult(fs, outFile));
304
388
  });
305
- archive.finalize();
389
+ // finalize() also reports failures via its returned promise - catch it so a
390
+ // failure is not an unhandled rejection on top of the 'error' event
391
+ archive.finalize().catch((err) => reject(new IOFail('Archiving error', err)));
306
392
  });
307
393
  }
394
+ /**
395
+ * Source path of a zip entry. Entries are either a plain path or a
396
+ * [ sourcePath, entryName ] tuple.
397
+ */
398
+ zipEntrySource(entry) {
399
+ return Array.isArray(entry) ? entry[0] : entry;
400
+ }
401
+ /**
402
+ * Name a zip entry is stored under. Defaults to the source path when no
403
+ * explicit entry name is given.
404
+ */
405
+ zipEntryName(entry) {
406
+ return Array.isArray(entry) ? entry[1] : entry;
407
+ }
408
+ /**
409
+ * Fails fast with a single clear error listing every missing source, so a
410
+ * missing entry never yields a silently incomplete archive.
411
+ */
412
+ async assertSourcesExist(paths) {
413
+ const missing = [];
414
+ for (const p of paths) {
415
+ const src = this.zipEntrySource(p);
416
+ if (!(await this.exists(src))) {
417
+ missing.push(src);
418
+ }
419
+ }
420
+ if (missing.length > 0) {
421
+ throw new IOFail(`Cannot zip, source path(s) not found: ${missing.join(', ')}`);
422
+ }
423
+ }
424
+ /**
425
+ * Adds every source to the archive - a plain-path directory is added
426
+ * recursively, everything else as a single file stored under its entry name.
427
+ */
428
+ async addZipEntries(archive, paths) {
429
+ for (const p of paths) {
430
+ if (!Array.isArray(p) && (await this.isDir(p))) {
431
+ archive.directory(this.resolvePath(p), false);
432
+ continue;
433
+ }
434
+ archive.file(this.resolvePath(this.zipEntrySource(p)), { name: basename(this.zipEntryName(p)) });
435
+ }
436
+ }
437
+ /**
438
+ * Builds the {@link IZipResult} accessor object for a finished archive.
439
+ *
440
+ * The zip path is resolved against the DESTINATION fs ( outFile is relative
441
+ * to its base path ). Remote destinations may not support path resolving -
442
+ * fall back to the raw name so the accessors still work.
443
+ */
444
+ buildZipResult(fs, outFile) {
445
+ let zipPath = outFile;
446
+ try {
447
+ zipPath = fs.resolvePath(outFile);
448
+ }
449
+ catch {
450
+ /* keep outFile as-is */
451
+ }
452
+ return {
453
+ fs,
454
+ asFilePath: () => zipPath,
455
+ asStream: (encoding) => createReadStream(zipPath, encoding ? { encoding } : {}),
456
+ asBase64: () => readFileSync(zipPath, { encoding: 'base64' }),
457
+ unlink: async () => await fs.rm(outFile),
458
+ };
459
+ }
308
460
  resolvePath(path) {
309
- if (!this.Options.basePath || path.startsWith(this.Options.basePath))
461
+ if (!this.Options.basePath)
310
462
  return path;
311
- return join(this.Options.basePath, path);
463
+ const base = this.Options.basePath;
464
+ if (isAbsolute(path)) {
465
+ // absolute path already inside basePath is returned as-is. Using
466
+ // path.relative instead of startsWith avoids false positives on sibling
467
+ // directories (eg. basePath `/data/files` and path `/data/files-2/x`)
468
+ // and is separator-safe across platforms.
469
+ const rel = relative(base, path);
470
+ if (rel === '' || (!rel.startsWith('..') && !isAbsolute(rel))) {
471
+ return path;
472
+ }
473
+ // fully-qualified paths ( drive letter / UNC on windows ) outside the
474
+ // sandbox are rejected. Rooted-but-driveless paths ( `/x`, `\x` ) are the
475
+ // established "fs root" idiom ( eg. list('/') ) and fall through to be
476
+ // resolved relative to basePath, exactly like join() always treated them.
477
+ const root = parse(path).root;
478
+ if (root !== '/' && root !== '\\') {
479
+ throw new IOFail(`Path ${path} is outside of filesystem base path ( ${base} ), fs: ${this.Options.name}`);
480
+ }
481
+ }
482
+ // join normalizes `..` segments - verify the result still lives inside basePath
483
+ // so relative paths cannot escape the sandbox ( eg. ../../etc/passwd )
484
+ const joined = join(base, path);
485
+ const rel = relative(base, joined);
486
+ if (rel.startsWith('..') || isAbsolute(rel)) {
487
+ throw new IOFail(`Path ${path} escapes filesystem base path ( ${base} ), fs: ${this.Options.name}`);
488
+ }
489
+ return joined;
312
490
  }
313
491
  };
314
492
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"local-provider.js","sourceRoot":"","sources":["../../src/local-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-provider.js","sourceRoot":"","sources":["../../src/local-provider.ts"],"names":[],"mappings":"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"}