@@ -2,7 +2,7 @@ import {writeFileSync as writeFileSync_, existsSync, mkdirSync, renameSync} from
2
2
import { mkdir , rename , writeFile as writeFile_ } from 'node:fs/promises' ;
3
3
import { dirname } from 'node:path' ;
4
4
5
- import { logger } from './logger ' ;
5
+ import { asyncQueue , logger } from './common ' ;
6
6
7
7
/**
8
8
* Enhanced write file (Synchronous).
@@ -57,26 +57,28 @@ export function writeFileSync(path: string, content: string): void {
57
57
* writeFile('./file.txt', 'Hello World!');
58
58
* ```
59
59
*/
60
- export async function writeFile ( path : string , content : string ) : Promise < void > {
60
+ export function writeFile ( path : string , content : string ) : Promise < void > {
61
61
logger . logMethodArgs ?.( 'writeFile' , '...' + path . slice ( - 32 ) ) ;
62
- try {
63
- logger . logOther ?.( 'writeFile start' , '...' + path . slice ( - 32 ) ) ;
64
- const pathExists = existsSync ( path ) ;
65
- if ( ! pathExists ) {
66
- const dir = dirname ( path ) ;
67
- if ( ! existsSync ( dir ) ) {
68
- await mkdir ( dir , { recursive : true } ) ;
62
+ return asyncQueue . push ( path , async ( ) => {
63
+ try {
64
+ logger . logOther ?.( 'writeFile start' , '...' + path . slice ( - 32 ) ) ;
65
+ const pathExists = existsSync ( path ) ;
66
+ if ( ! pathExists ) {
67
+ const dir = dirname ( path ) ;
68
+ if ( ! existsSync ( dir ) ) {
69
+ await mkdir ( dir , { recursive : true } ) ;
70
+ }
71
+ }
72
+ await writeFile_ ( path + '.tmp' , content , { encoding : 'utf-8' , flag : 'w' } ) ;
73
+ if ( pathExists ) {
74
+ await rename ( path , path + '.bak' ) ;
69
75
}
76
+ await rename ( path + '.tmp' , path ) ;
77
+ logger . logOther ?.( 'writeFile success' , '...' + path . slice ( - 32 ) ) ;
70
78
}
71
- await writeFile_ ( path + '.tmp' , content , { encoding : 'utf-8' , flag : 'w' } ) ;
72
- if ( pathExists ) {
73
- await rename ( path , path + '.bak' ) ;
79
+ catch ( err ) {
80
+ logger . error ( 'writeFile' , 'write_file_failed' , { path } , err ) ;
81
+ throw new Error ( 'write_file_failed' , { cause : ( err as Error ) . cause } ) ;
74
82
}
75
- await rename ( path + '.tmp' , path ) ;
76
- logger . logOther ?.( 'writeFile success' , '...' + path . slice ( - 32 ) ) ;
77
- }
78
- catch ( err ) {
79
- logger . error ( 'writeFile' , 'write_file_failed' , { path} , err ) ;
80
- throw new Error ( 'write_file_failed' , { cause : ( err as Error ) . cause } ) ;
81
- }
83
+ } ) ;
82
84
}
0 commit comments