File tree Expand file tree Collapse file tree 9 files changed +80
-61
lines changed
wait-for-bundle-input-object
watch-config-early-update
watch-config-initial-error Expand file tree Collapse file tree 9 files changed +80
-61
lines changed Original file line number Diff line number Diff line change 1
1
const fs = require ( 'fs' ) ;
2
2
const path = require ( 'path' ) ;
3
+ const { atomicWriteFileSync } = require ( '../../../utils' ) ;
3
4
4
5
let second ;
5
6
let third ;
@@ -17,9 +18,9 @@ module.exports = {
17
18
} ,
18
19
abortOnStderr ( data ) {
19
20
if ( data . includes ( 'waiting for input second' ) ) {
20
- fs . writeFileSync ( second , "export default 'second'" ) ;
21
+ atomicWriteFileSync ( second , "export default 'second'" ) ;
21
22
} else if ( data . includes ( 'waiting for input third' ) ) {
22
- fs . writeFileSync ( third , "export default 'third'" ) ;
23
+ atomicWriteFileSync ( third , "export default 'third'" ) ;
23
24
}
24
25
}
25
26
} ;
Original file line number Diff line number Diff line change 1
1
const fs = require ( 'fs' ) ;
2
2
const path = require ( 'path' ) ;
3
+ const { atomicWriteFileSync } = require ( '../../../utils' ) ;
3
4
4
5
let mainFile ;
5
6
@@ -15,7 +16,7 @@ module.exports = {
15
16
abortOnStderr ( data ) {
16
17
if ( data . includes ( 'waiting for input main.js' ) ) {
17
18
// wait longer than one polling interval
18
- setTimeout ( ( ) => fs . writeFileSync ( mainFile , 'export default 42;' ) , 600 ) ;
19
+ setTimeout ( ( ) => atomicWriteFileSync ( mainFile , 'export default 42;' ) , 600 ) ;
19
20
}
20
21
}
21
22
} ;
Original file line number Diff line number Diff line change 1
1
const fs = require ( 'fs' ) ;
2
2
const path = require ( 'path' ) ;
3
+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
3
4
4
5
let mainFile ;
5
6
@@ -16,7 +17,7 @@ module.exports = {
16
17
} ,
17
18
abortOnStderr ( data ) {
18
19
if ( data . includes ( 'Error: Unexpected token' ) ) {
19
- setTimeout ( ( ) => fs . writeFileSync ( mainFile , 'export default 42;' ) , 500 ) ;
20
+ setTimeout ( ( ) => atomicWriteFileSync ( mainFile , 'export default 42;' ) , 500 ) ;
20
21
return false ;
21
22
}
22
23
if ( data . includes ( 'created _actual' ) ) {
Original file line number Diff line number Diff line change 1
1
const fs = require ( 'fs' ) ;
2
2
const path = require ( 'path' ) ;
3
+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
3
4
4
5
let configFile ;
5
6
@@ -34,7 +35,7 @@ module.exports = {
34
35
} ,
35
36
abortOnStderr ( data ) {
36
37
if ( data === 'initial\n' ) {
37
- fs . writeFileSync (
38
+ atomicWriteFileSync (
38
39
configFile ,
39
40
`
40
41
console.error('updated');
Original file line number Diff line number Diff line change 1
1
const fs = require ( 'fs' ) ;
2
2
const path = require ( 'path' ) ;
3
+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
3
4
4
5
let configFile ;
5
6
@@ -25,12 +26,12 @@ module.exports = {
25
26
} ,
26
27
abortOnStderr ( data ) {
27
28
if ( data . includes ( `created _actual${ path . sep } main1.js` ) ) {
28
- fs . writeFileSync ( configFile , 'throw new Error("Config contains errors");' ) ;
29
+ atomicWriteFileSync ( configFile , 'throw new Error("Config contains errors");' ) ;
29
30
return false ;
30
31
}
31
32
if ( data . includes ( 'Config contains errors' ) ) {
32
33
setTimeout ( ( ) => {
33
- fs . writeFileSync (
34
+ atomicWriteFileSync (
34
35
configFile ,
35
36
'export default {\n' +
36
37
'\tinput: "main.js",\n' +
Original file line number Diff line number Diff line change 1
1
const fs = require ( 'fs' ) ;
2
2
const path = require ( 'path' ) ;
3
+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
3
4
4
5
let configFile ;
5
6
@@ -16,7 +17,7 @@ module.exports = {
16
17
async abortOnStderr ( data ) {
17
18
if ( data . includes ( 'Config contains initial errors' ) ) {
18
19
await new Promise ( resolve => setTimeout ( resolve , 100 ) ) ;
19
- fs . writeFileSync (
20
+ atomicWriteFileSync (
20
21
configFile ,
21
22
'export default {\n' +
22
23
'\tinput: "main.js",\n' +
Original file line number Diff line number Diff line change 1
1
const fs = require ( 'fs' ) ;
2
2
const path = require ( 'path' ) ;
3
+ const { atomicWriteFileSync } = require ( '../../../../utils' ) ;
3
4
4
5
let configFile ;
5
6
const configContent =
@@ -23,7 +24,7 @@ module.exports = {
23
24
} ,
24
25
abortOnStderr ( data ) {
25
26
if ( data . includes ( 'created _actual/main.js' ) ) {
26
- fs . writeFileSync ( configFile , configContent ) ;
27
+ atomicWriteFileSync ( configFile , configContent ) ;
27
28
return new Promise ( resolve => setTimeout ( ( ) => resolve ( true ) , 500 ) ) ;
28
29
}
29
30
} ,
Original file line number Diff line number Diff line change 1
1
const assert = require ( 'assert' ) ;
2
+ const fs = require ( 'fs' ) ;
2
3
const path = require ( 'path' ) ;
3
4
const fixturify = require ( 'fixturify' ) ;
4
5
const sander = require ( 'sander' ) ;
@@ -14,6 +15,7 @@ exports.runTestSuiteWithSamples = runTestSuiteWithSamples;
14
15
exports . assertDirectoriesAreEqual = assertDirectoriesAreEqual ;
15
16
exports . assertFilesAreEqual = assertFilesAreEqual ;
16
17
exports . assertIncludes = assertIncludes ;
18
+ exports . atomicWriteFileSync = atomicWriteFileSync ;
17
19
18
20
function normaliseError ( error ) {
19
21
delete error . stack ;
@@ -220,3 +222,12 @@ function assertIncludes(actual, expected) {
220
222
throw err ;
221
223
}
222
224
}
225
+
226
+ // Workaround a race condition in fs.writeFileSync that temporarily creates
227
+ // an empty file for a brief moment which may be read by rollup watch - even
228
+ // if the content being overwritten is identical.
229
+ function atomicWriteFileSync ( filePath , contents ) {
230
+ const stagingPath = filePath + '_' ;
231
+ fs . writeFileSync ( stagingPath , contents ) ;
232
+ fs . renameSync ( stagingPath , filePath ) ;
233
+ }
You can’t perform that action at this time.
0 commit comments