diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js index 977871af7d2..8d35cca3843 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentDescriptorH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateComponentDescriptorH'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateComponentDescriptorH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js index 14bc1d2d6b4..89d14fc74a6 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateComponentHObjCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateComponentHObjCpp'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateComponentHObjCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js index 1923aa581ba..603c77b5660 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateEventEmitterCpp'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateEventEmitterCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js index 8a66234e36d..05b1082297c 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateEventEmitterH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateEventEmitterH'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateEventEmitterH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js index 7e16b7338c3..131d4f4fd66 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsCpp'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js index aa406b757ac..0600f6bb70d 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsH'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js index fd4b1f4f980..3f87386c4a0 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaDelegate-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsJavaDelegate'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsJavaDelegate can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js index e77f9601820..40fcfe3d9d0 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GeneratePropsJavaInterface-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GeneratePropsJavaInterface'); const fs = require('fs'); @@ -21,7 +22,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GeneratePropsJavaInterface can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema, undefined, false); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js index b0e6af9515b..a4fa38bddab 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateShadowNodeCpp'); const fs = require('fs'); @@ -21,7 +22,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateShadowNodeCpp can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema, undefined, false); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js index 1d2339dffc4..0af0ba44f4b 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateShadowNodeH-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateShadowNodeH'); const fs = require('fs'); @@ -21,7 +22,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateShadowNodeH can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema, undefined, false); expect(Object.fromEntries(output)).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js b/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js index 947a2464d58..fa4d90797ba 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js +++ b/packages/react-native-codegen/e2e/__tests__/components/GenerateViewConfigJs-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/components/GenerateViewConfigJs'); const fs = require('fs'); @@ -22,7 +23,10 @@ const fixtures = fs.readdirSync(FIXTURE_DIR); fixtures.forEach(fixture => { it(`GenerateViewConfigJs can generate for '${fixture}'`, () => { const libName = 'RNCodegenModuleFixtures'; - const schema = parser.parseFile(`${FIXTURE_DIR}/${fixture}`); + const schema = parseFile( + `${FIXTURE_DIR}/${fixture}`, + FlowParser.buildSchema, + ); const output = generator.generate(libName, schema); expect(output).toMatchSnapshot(); }); diff --git a/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js b/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js index 822f2133076..a6bb549d056 100644 --- a/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js +++ b/packages/react-native-codegen/e2e/__tests__/modules/GenerateModuleObjCpp-test.js @@ -11,7 +11,8 @@ 'use strict'; -const parser = require('../../../src/parsers/flow'); +const {parseFile} = require('../../../src/parsers/utils'); +const FlowParser = require('../../../src/parsers/flow'); const generator = require('../../../src/generators/modules/GenerateModuleObjCpp'); const fs = require('fs'); @@ -23,7 +24,10 @@ function getModules(): SchemaType { const filenames: Array = fs.readdirSync(FIXTURE_DIR); return filenames.reduce( (accumulator, file) => { - const schema = parser.parseFile(`${FIXTURE_DIR}/${file}`); + const schema = parseFile( + `${FIXTURE_DIR}/${file}`, + FlowParser.buildSchema, + ); return { modules: { ...accumulator.modules, diff --git a/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js b/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js index 71550527915..e4bc8780db6 100644 --- a/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js +++ b/packages/react-native-codegen/src/cli/combine/combine-js-to-schema.js @@ -11,6 +11,7 @@ 'use strict'; import type {SchemaType} from '../../CodegenSchema.js'; +const {parseFile} = require('../../parsers/utils'); const FlowParser = require('../../parsers/flow'); const TypeScriptParser = require('../../parsers/typescript'); const fs = require('fs'); @@ -29,9 +30,10 @@ function combineSchemas(files: Array): SchemaType { const isTypeScript = path.extname(filename) === '.ts' || path.extname(filename) === '.tsx'; - const schema = isTypeScript - ? TypeScriptParser.parseFile(filename) - : FlowParser.parseFile(filename); + const schema = parseFile( + filename, + isTypeScript ? TypeScriptParser.buildSchema : FlowParser.buildSchema, + ); if (schema && schema.modules) { merged.modules = {...merged.modules, ...schema.modules}; diff --git a/packages/react-native-codegen/src/cli/parser/parser.js b/packages/react-native-codegen/src/cli/parser/parser.js index af0dbb17f78..1afc70035bc 100644 --- a/packages/react-native-codegen/src/cli/parser/parser.js +++ b/packages/react-native-codegen/src/cli/parser/parser.js @@ -11,6 +11,7 @@ 'use strict'; const path = require('path'); +const {parseFile} = require('../../parsers/utils'); const FlowParser = require('../../parsers/flow'); const TypeScriptParser = require('../../parsers/typescript'); @@ -22,9 +23,10 @@ function parseFiles(files: Array) { console.log( filename, JSON.stringify( - isTypeScript - ? TypeScriptParser.parseFile(filename) - : FlowParser.parseFile(filename), + parseFile( + filename, + isTypeScript ? TypeScriptParser.buildSchema : FlowParser.buildSchema, + ), null, 2, ), diff --git a/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js b/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js index 445fb096193..384b0af5b2c 100644 --- a/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js +++ b/packages/react-native-codegen/src/parsers/flow/components/__tests__/component-parser-test.js @@ -12,6 +12,7 @@ 'use strict'; const FlowParser = require('../../index.js'); +const {parseFile} = require('../../../utils.js'); const fixtures = require('../__test_fixtures__/fixtures.js'); const failureFixtures = require('../__test_fixtures__/failures.js'); jest.mock('fs', () => ({ @@ -30,7 +31,7 @@ describe('RN Codegen Flow Parser', () => { .sort() .forEach(fixtureName => { it(`can generate fixture ${fixtureName}`, () => { - const schema = FlowParser.parseFile(fixtureName); + const schema = parseFile(fixtureName, FlowParser.buildSchema); const serializedSchema = JSON.stringify(schema, null, 2).replace( /"/g, "'", @@ -44,7 +45,7 @@ describe('RN Codegen Flow Parser', () => { .forEach(fixtureName => { it(`Fails with error message ${fixtureName}`, () => { expect(() => { - FlowParser.parseFile(fixtureName); + parseFile(fixtureName, FlowParser.buildSchema); }).toThrowErrorMatchingSnapshot(); }); }); diff --git a/packages/react-native-codegen/src/parsers/flow/index.js b/packages/react-native-codegen/src/parsers/flow/index.js index b697a5538ab..3b835f77472 100644 --- a/packages/react-native-codegen/src/parsers/flow/index.js +++ b/packages/react-native-codegen/src/parsers/flow/index.js @@ -85,12 +85,6 @@ function buildSchema(contents: string, filename: ?string): SchemaType { ); } -function parseFile(filename: string): SchemaType { - const contents = fs.readFileSync(filename, 'utf8'); - - return buildSchema(contents, filename); -} - function parseModuleFixture(filename: string): SchemaType { const contents = fs.readFileSync(filename, 'utf8'); @@ -102,7 +96,7 @@ function parseString(contents: string, filename: ?string): SchemaType { } module.exports = { - parseFile, + buildSchema, parseModuleFixture, parseString, }; diff --git a/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js b/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js index 4efe01af0b7..19a49a6b8ad 100644 --- a/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js +++ b/packages/react-native-codegen/src/parsers/typescript/components/__tests__/typescript-component-parser-test.js @@ -12,6 +12,7 @@ 'use strict'; const TypeScriptParser = require('../../index.js'); +const {parseFile} = require('../../../utils.js'); const fixtures = require('../__test_fixtures__/fixtures.js'); const failureFixtures = require('../__test_fixtures__/failures.js'); jest.mock('fs', () => ({ @@ -30,7 +31,7 @@ describe('RN Codegen TypeScript Parser', () => { .sort() .forEach(fixtureName => { it(`can generate fixture ${fixtureName}`, () => { - const schema = TypeScriptParser.parseFile(fixtureName); + const schema = parseFile(fixtureName, TypeScriptParser.buildSchema); const serializedSchema = JSON.stringify(schema, null, 2).replace( /"/g, "'", @@ -44,7 +45,7 @@ describe('RN Codegen TypeScript Parser', () => { .forEach(fixtureName => { it(`Fails with error message ${fixtureName}`, () => { expect(() => { - TypeScriptParser.parseFile(fixtureName); + parseFile(fixtureName, TypeScriptParser.buildSchema); }).toThrowErrorMatchingSnapshot(); }); }); diff --git a/packages/react-native-codegen/src/parsers/typescript/index.js b/packages/react-native-codegen/src/parsers/typescript/index.js index 1f264e89aeb..c65cc538b14 100644 --- a/packages/react-native-codegen/src/parsers/typescript/index.js +++ b/packages/react-native-codegen/src/parsers/typescript/index.js @@ -95,12 +95,6 @@ function buildSchema(contents: string, filename: ?string): SchemaType { ); } -function parseFile(filename: string): SchemaType { - const contents = fs.readFileSync(filename, 'utf8'); - - return buildSchema(contents, filename); -} - function parseModuleFixture(filename: string): SchemaType { const contents = fs.readFileSync(filename, 'utf8'); @@ -112,7 +106,7 @@ function parseString(contents: string, filename: ?string): SchemaType { } module.exports = { - parseFile, + buildSchema, parseModuleFixture, parseString, }; diff --git a/packages/react-native-codegen/src/parsers/utils.js b/packages/react-native-codegen/src/parsers/utils.js index 0d31dbfd406..49ed1a1dba4 100644 --- a/packages/react-native-codegen/src/parsers/utils.js +++ b/packages/react-native-codegen/src/parsers/utils.js @@ -12,10 +12,10 @@ import type {ComponentSchemaBuilderConfig} from './flow/components/schema'; import type {NativeModuleSchema, SchemaType} from '../CodegenSchema'; - const {ParserError} = require('./errors'); const {wrapModuleSchema} = require('./parsers-commons'); +const fs = require('fs'); const path = require('path'); const invariant = require('invariant'); @@ -95,6 +95,15 @@ function verifyPlatforms( }; } +function parseFile( + filename: string, + callback: (contents: string, filename: string) => SchemaType, +): SchemaType { + const contents = fs.readFileSync(filename, 'utf8'); + + return callback(contents, filename); +} + // TODO(T108222691): Use flow-types for @babel/parser function visit( astNode: $FlowFixMe, @@ -180,6 +189,7 @@ module.exports = { extractNativeModuleName, createParserErrorCapturer, verifyPlatforms, + parseFile, visit, buildSchemaFromConfigType, };