Skip to content

Commit f6fa980

Browse files
committed
refactor: replace fs-extra with node:fs
1 parent b623311 commit f6fa980

20 files changed

+163
-159
lines changed

lib/builders/ProjectBuilder.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
under the License.
1818
*/
1919

20-
const fs = require('fs-extra');
20+
const fs = require('node:fs');
2121
const path = require('node:path');
2222
const execa = require('execa');
2323
const glob = require('fast-glob');
@@ -174,7 +174,7 @@ class ProjectBuilder {
174174
try {
175175
fs.accessSync(subProjectGradle, fs.F_OK);
176176
} catch (e) {
177-
fs.copySync(pluginBuildGradle, subProjectGradle);
177+
fs.cpSync(pluginBuildGradle, subProjectGradle);
178178
}
179179
};
180180

@@ -207,7 +207,7 @@ class ProjectBuilder {
207207
settingsGradlePaths.join(''));
208208

209209
// Touch empty cdv-gradle-name.gradle file if missing.
210-
if (!fs.pathExistsSync(path.join(this.root, 'cdv-gradle-name.gradle'))) {
210+
if (!fs.existsSync(path.join(this.root, 'cdv-gradle-name.gradle'))) {
211211
fs.writeFileSync(path.join(this.root, 'cdv-gradle-name.gradle'), '');
212212
}
213213

@@ -294,7 +294,7 @@ class ProjectBuilder {
294294
}).then(() => {
295295
const signingPropertiesPath = path.join(self.root, `${opts.buildType}${SIGNING_PROPERTIES}`);
296296

297-
if (fs.existsSync(signingPropertiesPath)) fs.removeSync(signingPropertiesPath);
297+
if (fs.existsSync(signingPropertiesPath)) fs.rmSync(signingPropertiesPath);
298298
if (opts.packageInfo) {
299299
fs.ensureFileSync(signingPropertiesPath);
300300
const signingProperties = createEditor(signingPropertiesPath);
@@ -309,7 +309,7 @@ class ProjectBuilder {
309309
* @returns The user defined configs
310310
*/
311311
_getCordovaConfig () {
312-
return fs.readJSONSync(path.join(this.root, 'cdv-gradle-config.json'));
312+
return JSON.parse(fs.readFileSync(path.join(this.root, 'cdv-gradle-config.json'), 'utf-8') || '{}');
313313
}
314314

315315
/*
@@ -342,15 +342,15 @@ class ProjectBuilder {
342342
const args = this.getArgs('clean', opts);
343343
return execa(wrapper, args, { stdio: 'inherit', cwd: path.resolve(this.root) })
344344
.then(() => {
345-
fs.removeSync(path.join(this.root, 'out'));
345+
fs.rmSync(path.join(this.root, 'out'));
346346

347347
['debug', 'release'].map(config => path.join(this.root, `${config}${SIGNING_PROPERTIES}`))
348348
.forEach(file => {
349349
const hasFile = fs.existsSync(file);
350350
const hasMarker = hasFile && fs.readFileSync(file, 'utf8')
351351
.includes(MARKER);
352352

353-
if (hasFile && hasMarker) fs.removeSync(file);
353+
if (hasFile && hasMarker) fs.rmSync(file);
354354
});
355355
});
356356
}

lib/check_reqs.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
const execa = require('execa');
2121
const path = require('node:path');
22-
const fs = require('fs-extra');
22+
const fs = require('node:fs');
2323
const { forgivingWhichSync, isWindows, isDarwin } = require('./utils');
2424
const java = require('./env/java');
2525
const { CordovaError, ConfigParser, events } = require('cordova-common');

lib/config/CordovaGradleConfigParser.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
under the License.
1818
*/
1919

20-
const fs = require('fs-extra');
20+
const fs = require('node:fs');
2121
const path = require('node:path');
2222
const events = require('cordova-common').events;
2323

@@ -41,7 +41,7 @@ class CordovaGradleConfigParser {
4141
* @returns {Record<any, any>} The parsed JSON object representing the gradle config.
4242
*/
4343
_readConfig (configPath) {
44-
return fs.readJSONSync(configPath, 'utf-8');
44+
return JSON.parse(fs.readFileSync(configPath, 'utf-8') || '{}');
4545
}
4646

4747
setPackageName (packageName) {
@@ -64,7 +64,7 @@ class CordovaGradleConfigParser {
6464
*/
6565
write () {
6666
events.emit('verbose', '[Cordova Gradle Config] Saving File');
67-
fs.writeJSONSync(this._cdvGradleConfigFilePath, this._cdvGradleConfig, 'utf-8');
67+
fs.writeFileSync(this._cdvGradleConfigFilePath, JSON.stringify(this._cdvGradleConfig, null, 2), 'utf-8');
6868
}
6969
}
7070

lib/create.js

+28-28
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
const path = require('node:path');
21-
const fs = require('fs-extra');
21+
const fs = require('node:fs');
2222
const utils = require('./utils');
2323
const check_reqs = require('./check_reqs');
2424
const ROOT = path.join(__dirname, '..');
@@ -49,27 +49,27 @@ function copyJsAndLibrary (projectPath, shared, projectName, targetAPI) {
4949
const app_path = path.join(projectPath, 'app', 'src', 'main');
5050
const platform_www = path.join(projectPath, 'platform_www');
5151

52-
fs.copySync(srcCordovaJsPath, path.join(app_path, 'assets', 'www', 'cordova.js'));
52+
fs.cpSync(srcCordovaJsPath, path.join(app_path, 'assets', 'www', 'cordova.js'));
5353

5454
// Copy the cordova.js file to platforms/<platform>/platform_www/
5555
// The www dir is nuked on each prepare so we keep cordova.js in platform_www
56-
fs.ensureDirSync(platform_www);
57-
fs.copySync(srcCordovaJsPath, path.join(platform_www, 'cordova.js'));
58-
fs.copySync(path.join(ROOT, 'framework', 'cdv-gradle-config-defaults.json'), path.join(projectPath, 'cdv-gradle-config.json'));
56+
fs.mkdirSync(platform_www, { recursive: true });
57+
fs.cpSync(srcCordovaJsPath, path.join(platform_www, 'cordova.js'));
58+
fs.cpSync(path.join(ROOT, 'framework', 'cdv-gradle-config-defaults.json'), path.join(projectPath, 'cdv-gradle-config.json'));
5959

6060
if (shared) {
6161
const relativeFrameworkPath = path.relative(projectPath, getFrameworkDir(projectPath, true));
6262
fs.symlinkSync(relativeFrameworkPath, nestedCordovaLibPath, 'dir');
6363
} else {
64-
fs.ensureDirSync(nestedCordovaLibPath);
65-
fs.copySync(path.join(ROOT, 'framework', 'AndroidManifest.xml'), path.join(nestedCordovaLibPath, 'AndroidManifest.xml'));
64+
fs.mkdirSync(nestedCordovaLibPath, { recursive: true });
65+
fs.cpSync(path.join(ROOT, 'framework', 'AndroidManifest.xml'), path.join(nestedCordovaLibPath, 'AndroidManifest.xml'));
6666
const propertiesEditor = createEditor(path.join(ROOT, 'framework', 'project.properties'));
6767
propertiesEditor.set('target', targetAPI);
6868
propertiesEditor.save(path.join(nestedCordovaLibPath, 'project.properties'));
69-
fs.copySync(path.join(ROOT, 'framework', 'build.gradle'), path.join(nestedCordovaLibPath, 'build.gradle'));
70-
fs.copySync(path.join(ROOT, 'framework', 'cordova.gradle'), path.join(nestedCordovaLibPath, 'cordova.gradle'));
71-
fs.copySync(path.join(ROOT, 'framework', 'repositories.gradle'), path.join(nestedCordovaLibPath, 'repositories.gradle'));
72-
fs.copySync(path.join(ROOT, 'framework', 'src'), path.join(nestedCordovaLibPath, 'src'));
69+
fs.cpSync(path.join(ROOT, 'framework', 'build.gradle'), path.join(nestedCordovaLibPath, 'build.gradle'));
70+
fs.cpSync(path.join(ROOT, 'framework', 'cordova.gradle'), path.join(nestedCordovaLibPath, 'cordova.gradle'));
71+
fs.cpSync(path.join(ROOT, 'framework', 'repositories.gradle'), path.join(nestedCordovaLibPath, 'repositories.gradle'));
72+
fs.cpSync(path.join(ROOT, 'framework', 'src'), path.join(nestedCordovaLibPath, 'src'), { recursive: true });
7373
}
7474
}
7575

@@ -116,10 +116,10 @@ function prepBuildFiles (projectPath) {
116116
function copyBuildRules (projectPath) {
117117
const srcDir = path.join(ROOT, 'templates', 'project');
118118

119-
fs.copySync(path.join(srcDir, 'build.gradle'), path.join(projectPath, 'build.gradle'));
120-
fs.copySync(path.join(srcDir, 'app', 'build.gradle'), path.join(projectPath, 'app', 'build.gradle'));
121-
fs.copySync(path.join(srcDir, 'app', 'repositories.gradle'), path.join(projectPath, 'app', 'repositories.gradle'));
122-
fs.copySync(path.join(srcDir, 'repositories.gradle'), path.join(projectPath, 'repositories.gradle'));
119+
fs.cpSync(path.join(srcDir, 'build.gradle'), path.join(projectPath, 'build.gradle'));
120+
fs.cpSync(path.join(srcDir, 'app', 'build.gradle'), path.join(projectPath, 'app', 'build.gradle'));
121+
fs.cpSync(path.join(srcDir, 'app', 'repositories.gradle'), path.join(projectPath, 'app', 'repositories.gradle'));
122+
fs.cpSync(path.join(srcDir, 'repositories.gradle'), path.join(projectPath, 'repositories.gradle'));
123123

124124
copyGradleTools(projectPath);
125125
}
@@ -128,9 +128,9 @@ function copyScripts (projectPath) {
128128
const srcScriptsDir = path.join(ROOT, 'templates', 'cordova');
129129
const destScriptsDir = path.join(projectPath, 'cordova');
130130
// Delete old scripts directory if this is an update.
131-
fs.removeSync(destScriptsDir);
131+
fs.rmSync(destScriptsDir, { recursive: true, force: true });
132132
// Copy in the new ones.
133-
fs.copySync(srcScriptsDir, destScriptsDir);
133+
fs.cpSync(srcScriptsDir, destScriptsDir, { recursive: true });
134134
}
135135

136136
/**
@@ -174,7 +174,7 @@ function validateProjectName (project_name) {
174174
function copyGradleTools (projectPath) {
175175
const srcDir = path.join(ROOT, 'templates', 'project');
176176

177-
fs.copySync(path.resolve(srcDir, 'tools'), path.resolve(projectPath, 'tools'));
177+
fs.cpSync(path.resolve(srcDir, 'tools'), path.resolve(projectPath, 'tools'), { recursive: true });
178178
}
179179

180180
/**
@@ -232,13 +232,13 @@ exports.create = function (project_path, config, options, events) {
232232
const app_path = path.join(project_path, 'app', 'src', 'main');
233233

234234
// copy project template
235-
fs.ensureDirSync(app_path);
236-
fs.copySync(path.join(project_template_dir, 'assets'), path.join(app_path, 'assets'));
237-
fs.copySync(path.join(project_template_dir, 'res'), path.join(app_path, 'res'));
238-
fs.copySync(path.join(project_template_dir, 'gitignore'), path.join(project_path, '.gitignore'));
235+
fs.mkdirSync(app_path, { recursive: true });
236+
fs.cpSync(path.join(project_template_dir, 'assets'), path.join(app_path, 'assets'), { recursive: true });
237+
fs.cpSync(path.join(project_template_dir, 'res'), path.join(app_path, 'res'), { recursive: true });
238+
fs.cpSync(path.join(project_template_dir, 'gitignore'), path.join(project_path, '.gitignore'));
239239

240240
// Manually create directories that would be empty within the template (since git doesn't track directories).
241-
fs.ensureDirSync(path.join(app_path, 'libs'));
241+
fs.mkdirSync(path.join(app_path, 'libs'), { recursive: true });
242242

243243
// copy cordova.js, cordova.jar
244244
exports.copyJsAndLibrary(project_path, options.link, safe_activity_name, target_api);
@@ -247,9 +247,9 @@ exports.create = function (project_path, config, options, events) {
247247
const java_path = path.join(app_path, 'java');
248248
const assets_path = path.join(app_path, 'assets');
249249
const resource_path = path.join(app_path, 'res');
250-
fs.ensureDirSync(java_path);
251-
fs.ensureDirSync(assets_path);
252-
fs.ensureDirSync(resource_path);
250+
fs.mkdirSync(java_path, { recursive: true });
251+
fs.mkdirSync(assets_path, { recursive: true });
252+
fs.mkdirSync(resource_path, { recursive: true });
253253

254254
// store package name in cdv-gradle-config
255255
const cdvGradleConfig = CordovaGradleConfigParserFactory.create(project_path);
@@ -261,8 +261,8 @@ exports.create = function (project_path, config, options, events) {
261261
const activity_dir = path.join(java_path, packagePath);
262262
const activity_path = path.join(activity_dir, safe_activity_name + '.java');
263263

264-
fs.ensureDirSync(activity_dir);
265-
fs.copySync(path.join(project_template_dir, 'Activity.java'), activity_path);
264+
fs.mkdirSync(activity_dir, { recursive: true });
265+
fs.cpSync(path.join(project_template_dir, 'Activity.java'), activity_path);
266266
utils.replaceFileContents(activity_path, /__ACTIVITY__/, safe_activity_name);
267267
utils.replaceFileContents(path.join(app_path, 'res', 'values', 'strings.xml'), /__NAME__/, utils.escape(project_name));
268268
utils.replaceFileContents(activity_path, /__ID__/, package_name);

lib/emulator.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
const execa = require('execa');
21-
const fs = require('fs-extra');
21+
const fs = require('node:fs');
2222
const android_versions = require('android-versions');
2323
const path = require('node:path');
2424
const Adb = require('./Adb');

lib/env/java.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
const execa = require('execa');
21-
const fs = require('fs-extra');
21+
const fs = require('node:fs');
2222
const path = require('node:path');
2323
const glob = require('fast-glob');
2424
const { CordovaError, events } = require('cordova-common');

lib/pluginHandlers.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*
1515
*/
1616

17-
const fs = require('fs-extra');
17+
const fs = require('node:fs');
1818
const path = require('node:path');
1919
const isPathInside = require('is-path-inside');
2020
const events = require('cordova-common').events;
@@ -166,13 +166,13 @@ const handlers = {
166166
scriptContent = 'cordova.define("' + moduleName + '", function(require, exports, module) {\n' + scriptContent + '\n});\n';
167167

168168
const wwwDest = path.resolve(project.www, 'plugins', plugin.id, obj.src);
169-
fs.ensureDirSync(path.dirname(wwwDest));
169+
fs.mkdirSync(path.dirname(wwwDest), { recursive: true });
170170
fs.writeFileSync(wwwDest, scriptContent, 'utf-8');
171171

172172
if (options && options.usePlatformWww) {
173173
// CB-11022 copy file to both directories if usePlatformWww is specified
174174
const platformWwwDest = path.resolve(project.platformWww, 'plugins', plugin.id, obj.src);
175-
fs.ensureDirSync(path.dirname(platformWwwDest));
175+
fs.mkdirSync(path.dirname(platformWwwDest), { recursive: true });
176176
fs.writeFileSync(platformWwwDest, scriptContent, 'utf-8');
177177
}
178178
},
@@ -217,11 +217,11 @@ function copyFile (plugin_dir, src, project_dir, dest, link) {
217217
// check that dest path is located in project directory
218218
if (!isPathInside(dest, project_dir)) { throw new CordovaError('Destination "' + dest + '" for source file "' + src + '" is located outside the project'); }
219219

220-
fs.ensureDirSync(path.dirname(dest));
220+
fs.mkdirSync(path.dirname(dest), { recursive: true });
221221
if (link) {
222222
symlinkFileOrDirTree(src, dest);
223223
} else {
224-
fs.copySync(src, dest);
224+
fs.cpSync(src, dest, { recursive: true });
225225
}
226226
}
227227

@@ -235,11 +235,11 @@ function copyNewFile (plugin_dir, src, project_dir, dest, link) {
235235

236236
function symlinkFileOrDirTree (src, dest) {
237237
if (fs.existsSync(dest)) {
238-
fs.removeSync(dest);
238+
fs.rmSync(dest, { recursive: true, force: true });
239239
}
240240

241241
if (fs.statSync(src).isDirectory()) {
242-
fs.ensureDirSync(path.dirname(dest));
242+
fs.mkdirSync(path.dirname(dest), { recursive: true });
243243
fs.readdirSync(src).forEach(function (entry) {
244244
symlinkFileOrDirTree(path.join(src, entry), path.join(dest, entry));
245245
});
@@ -249,7 +249,7 @@ function symlinkFileOrDirTree (src, dest) {
249249
}
250250

251251
function removeFile (file) {
252-
fs.removeSync(file);
252+
fs.rmSync(file);
253253
}
254254

255255
// Sometimes we want to remove some java, and prune any unnecessary empty directories

lib/prepare.js

+9-9
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
under the License.
1818
*/
1919

20-
const fs = require('fs-extra');
20+
const fs = require('node:fs');
2121
const path = require('node:path');
2222
const nopt = require('nopt');
2323
const glob = require('fast-glob');
@@ -93,7 +93,7 @@ function updateUserProjectGradleConfig (project) {
9393

9494
// Write out changes
9595
const projectGradleConfigPath = path.join(project.root, 'cdv-gradle-config.json');
96-
fs.writeJSONSync(projectGradleConfigPath, projectGradleConfig, { spaces: 2 });
96+
fs.writeFileSync(projectGradleConfigPath, JSON.stringify(projectGradleConfig, null, 2), 'utf-8');
9797
}
9898

9999
function getUserGradleConfig (configXml) {
@@ -198,7 +198,7 @@ function updateConfigFilesFrom (sourceConfig, configMunger, locations) {
198198

199199
// First cleanup current config and merge project's one into own
200200
// Overwrite platform config.xml with defaults.xml.
201-
fs.copySync(locations.defaultConfigXml, locations.configXml);
201+
fs.cpSync(locations.defaultConfigXml, locations.configXml);
202202

203203
// Then apply config changes from global munge to all config files
204204
// in project (including project's config)
@@ -316,14 +316,14 @@ function updateProjectAccordingTo (platformConfig, locations) {
316316
const newDestFile = path.join(locations.root, 'app', 'src', 'main', 'java', androidPkgName.replace(/\./g, '/'), path.basename(destFile));
317317
if (newDestFile.toLowerCase() !== destFile.toLowerCase()) {
318318
// If package was name changed we need to create new java with main activity in path matching new package name
319-
fs.ensureDirSync(path.dirname(newDestFile));
319+
fs.mkdirSync(path.dirname(newDestFile), { recursive: true });
320320
events.emit('verbose', `copy ${destFile} to ${newDestFile}`);
321-
fs.copySync(destFile, newDestFile);
321+
fs.cpSync(destFile, newDestFile);
322322
utils.replaceFileContents(newDestFile, /package [\w.]*;/, 'package ' + androidPkgName + ';');
323323
events.emit('verbose', 'Wrote out Android package name "' + androidPkgName + '" to ' + newDestFile);
324324
// If package was name changed we need to remove old java with main activity
325325
events.emit('verbose', `remove ${destFile}`);
326-
fs.removeSync(destFile);
326+
fs.rmSync(destFile);
327327
// remove any empty directories
328328
let currentDir = path.dirname(destFile);
329329
const sourcesRoot = path.resolve(locations.root, 'src');
@@ -536,16 +536,16 @@ function updateProjectSplashScreenIconBackgroundColor (splashIconBackgroundColor
536536

537537
function cleanupAndSetProjectSplashScreenImage (srcFile, destFilePath, possiblePreviousDestFilePath, cleanupOnly = false) {
538538
if (fs.existsSync(possiblePreviousDestFilePath)) {
539-
fs.removeSync(possiblePreviousDestFilePath);
539+
fs.rmSync(possiblePreviousDestFilePath);
540540
}
541541

542542
if (cleanupOnly && fs.existsSync(destFilePath)) {
543543
// Also remove dest file path for cleanup even if previous was not use.
544-
fs.removeSync(destFilePath);
544+
fs.rmSync(destFilePath);
545545
}
546546

547547
if (!cleanupOnly && srcFile && fs.existsSync(srcFile)) {
548-
fs.copySync(srcFile, destFilePath);
548+
fs.cpSync(srcFile, destFilePath);
549549
}
550550
}
551551

lib/utils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
// TODO: Perhaps this should live in cordova-common?
2525

26-
const fs = require('fs-extra');
26+
const fs = require('node:fs');
2727
const which = require('which');
2828
const os = require('node:os');
2929

package-lock.json

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
"dedent": "^1.5.3",
3030
"execa": "^5.1.1",
3131
"fast-glob": "^3.3.2",
32-
"fs-extra": "^11.2.0",
3332
"is-path-inside": "^3.0.3",
3433
"nopt": "^7.2.1",
3534
"properties-parser": "^0.6.0",

0 commit comments

Comments
 (0)