mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary:
This pull request replaces the use of mkdirp with Node.js's built-in fs.mkdirSync({ recursive: true }) function, which is available in Node.js version 10.12.0 and above. This change reduces the number of external dependencies and simplifies the codebase by using the native capabilities of Node.js.
The motivation behind this change is to remove the unnecessary mkdirp dependency, as Node.js natively supports recursive directory creation since version 10.12.0. This streamlines the code and reduces the reliance on external libraries.
## Changelog:
[INTERNAL] [REMOVED] - Replaced mkdirp with fs.mkdirSync({ recursive: true }) in build scripts and codegen. Requires Node.js 10.12.0 and above.
Pull Request resolved: https://github.com/facebook/react-native/pull/46388
Test Plan: I ran the build and codegen scripts locally with Node.js version 10.12.0 and above after replacing mkdirp, ensuring the scripts work as expected. No issues were encountered, and all processes, including directory creation and file handling, function correctly.
Reviewed By: cortinico
Differential Revision: D62852488
Pulled By: huntie
fbshipit-source-id: 76f44102a80b499521c156308d276a17d279ce38
90 lines
2.1 KiB
JavaScript
90 lines
2.1 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const utils = require('./codegen/codegen-utils');
|
|
const fs = require('fs');
|
|
const yargs = require('yargs');
|
|
|
|
const argv = yargs
|
|
.option('p', {
|
|
alias: 'platform',
|
|
describe: 'Platform to generate native code artifacts for.',
|
|
})
|
|
.option('s', {
|
|
alias: 'schemaListPath',
|
|
describe: 'The path to the schema list file.',
|
|
})
|
|
.option('o', {
|
|
alias: 'outputDir',
|
|
describe:
|
|
'Path to directory where native code source files should be saved.',
|
|
})
|
|
.usage('Usage: $0 <args>')
|
|
.demandOption(
|
|
['platform', 'schemaListPath', 'outputDir'],
|
|
'Please provide platform, schema path, and output directory.',
|
|
).argv;
|
|
|
|
const GENERATORS = {
|
|
android: [],
|
|
ios: ['providerIOS'],
|
|
};
|
|
|
|
function generateProvider(platform, schemaListPath, outputDirectory) {
|
|
const schemaListText = fs.readFileSync(schemaListPath, 'utf-8');
|
|
|
|
if (schemaListText == null) {
|
|
throw new Error(`Can't find schema list file at ${schemaListPath}`);
|
|
}
|
|
|
|
if (!outputDirectory) {
|
|
throw new Error('outputDir is required');
|
|
}
|
|
fs.mkdirSync(outputDirectory, {recursive: true});
|
|
|
|
let schemaPaths;
|
|
try {
|
|
schemaPaths = JSON.parse(schemaListText);
|
|
} catch (err) {
|
|
throw new Error(`Can't parse schema to JSON. ${schemaListPath}`);
|
|
}
|
|
|
|
const schemas = {};
|
|
try {
|
|
for (const libraryName of Object.keys(schemaPaths)) {
|
|
const tmpSchemaText = fs.readFileSync(schemaPaths[libraryName], 'utf-8');
|
|
schemas[libraryName] = JSON.parse(tmpSchemaText);
|
|
}
|
|
} catch (err) {
|
|
throw new Error(`Failed to read schema file. ${err.message}`);
|
|
}
|
|
|
|
if (GENERATORS[platform] == null) {
|
|
throw new Error(`Invalid platform type. ${platform}`);
|
|
}
|
|
|
|
utils.getCodegen().generateFromSchemas(
|
|
{
|
|
schemas,
|
|
outputDirectory,
|
|
},
|
|
{
|
|
generators: GENERATORS[platform],
|
|
},
|
|
);
|
|
}
|
|
|
|
function main() {
|
|
generateProvider(argv.platform, argv.schemaListPath, argv.outputDir);
|
|
}
|
|
|
|
main();
|