Writing a custom parser is a fairly common need. Although there are already parser combinators in others languages, TypeScript provides a powerful and well-structured foundation for building this. Common parser combinators’ weakness are error handling and ambiguity resolving, but these are ts-parsec’s important features. Additionally, ts-parsec provides a very easy to use programming interface, that could help people to build programming-language-scale parsers in just a few hours. This technology has already been used in Microsoft/react-native-tscodegen.
Перейти к файлу
REDMOND\acoates 9ad24a3913 Move repo to use yarn workspaces and lerna 2019-08-22 16:03:49 -07:00
.github/workflows Move repo to use yarn workspaces and lerna 2019-08-22 16:03:49 -07:00
packages Move repo to use yarn workspaces and lerna 2019-08-22 16:03:49 -07:00
react-native@9a3d722ccb Update react native 2019-08-16 13:32:35 -07:00
.gitignore update .girignore 2019-08-20 18:44:22 -07:00
.gitmodules Submodule facebook/react-native 2019-08-05 16:13:05 -07:00
CODE_OF_CONDUCT.md Initial commit 2019-08-20 16:41:45 -07:00
Init.bat Start minimum-flow-parser 2019-08-20 15:07:39 -07:00
LICENSE Initial commit 2019-08-20 16:41:46 -07:00
Note.md ... 2019-08-05 23:33:11 -07:00
README.md Move repo to use yarn workspaces and lerna 2019-08-22 16:03:49 -07:00
SECURITY.md Initial commit 2019-08-20 16:41:48 -07:00
lerna.json Move repo to use yarn workspaces and lerna 2019-08-22 16:03:49 -07:00
package.json Move repo to use yarn workspaces and lerna 2019-08-22 16:03:49 -07:00
yarn.lock Move repo to use yarn workspaces and lerna 2019-08-22 16:03:49 -07:00

README.md

react-native-tscodegen

Type Script Code Generation for React Native Turbo Module

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Building this repo

yarn
yarn build
yarn test

Packages

tslint-shared

This is the shared tslint configuration for all other packages.

RN-TSCodegen

This is the TypeScript code generation for TurboModule in react native.

In facebook/react-native, you are able to find following files in packages/react-native-codegen/src:

  • cli/parser/parser-cli.js: It calls parseFiles from
  • cli/parser/parser.js: It calls parseFile from
  • parsers/flow/index.js: It parse a Flow source file to SchemaType, which is defined in CodegenSchema.js

RN-TSCodegen also provides typeScriptToCodeSchema for the same purpose, but instead of consuming Flow source file, it consumes TypeScript source file.

RN-TSCodegen-Test

This package contains all test cases for RN-TSCodegen.

ts-parsec

This is a parser combinator written in TypeScript. It allows you to create parsers very quickly. Please take a look at:

  • packages/ts-parsec/test/TestRecursiveParser.ts
  • packages/minimum-flow-parser/src/Parser.ts

for deeper understanding of this library.

minimum-flow-parser

This is a Flow parser, just enough to convert necessary files to TypeScript for this repo.

update-test-files

I started this repo in the days when Facebook is actively updating their react native code generation for Flow. There is no document or specification at this moment.

I need to develop a TypeScript version working exactly as their Flow code generation, and to track and catch up their progress when they are changing their code generation parallelly.

So I started update-test files. Whenever I need to know what is changed in their code, I run this package, and then I can:

  • Get the latest CodegenSchema.js converted to TypeScript automatically. RN-TSCodegen is written in TypeScript, so the definition of the intermediate format should be recognizable by TypeScript.
  • Get latest test cases. Facebook has prepared a set of Flow source files, along with snapshots showing how a SchemaType object should be created for each file. All test cases are automatically converted to TypeScript to be my test cases. At the early stage of the development, if RN-TSCodegen produces exactly the same output as theirs, I consider my code generation is correct.
  • Get the diff of generated files. In this way I can know how many features are added or removed. This is a very important guidance for the development of this project.