mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/51671 Adds `flow` (or `noflow`) to all files in this directory and ensures that Flow succeeds (by adding type annotations, using minor refactors, or suppressing errors due to intentionally dynamic logic). This will help improve type safety when making changes both in these files as well as files that these depend on. Changelog: [Internal] Reviewed By: SamChou19815 Differential Revision: D75581879 fbshipit-source-id: 6dcd8cc55d0021973eeae2670c1ebceb6d69fa8f
96 lines
2.3 KiB
JavaScript
96 lines
2.3 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.
|
|
*
|
|
* @flow strict-local
|
|
* @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'],
|
|
} /*:: as {[string]: $ReadOnlyArray<string>} */;
|
|
|
|
function generateProvider(
|
|
platform /*: string */,
|
|
schemaListPath /*: string */,
|
|
outputDirectory /*: string */,
|
|
) {
|
|
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 = {} /*:: as {[string]: $FlowFixMe} */;
|
|
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() {
|
|
// $FlowFixMe[prop-missing]
|
|
generateProvider(argv.platform, argv.schemaListPath, argv.outputDir);
|
|
}
|
|
|
|
main();
|