-
Notifications
You must be signed in to change notification settings - Fork 24.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Move TypeScript declarations into react-native #34614
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ | |
"engines": { | ||
"node": ">=14" | ||
}, | ||
"types": "types", | ||
"jest-junit": { | ||
"outputDirectory": "reports/junit", | ||
"outputName": "js-test-results.xml" | ||
|
@@ -81,8 +82,8 @@ | |
"shellcheck": "./scripts/circleci/analyze_scripts.sh", | ||
"clang-format": "clang-format -i --glob=*/**/*.{h,cpp,m,mm}", | ||
"format": "npm run prettier && npm run clang-format", | ||
"prettier": "prettier --write \"./**/*.{js,md,yml}\"", | ||
"format-check": "prettier --list-different \"./**/*.{js,md,yml}\"", | ||
"prettier": "prettier --write \"./**/*.{js,md,yml,ts,tsx}\"", | ||
"format-check": "prettier --list-different \"./**/*.{js,md,yml,ts,tsx}\"", | ||
"update-lock": "npx yarn-deduplicate", | ||
"docker-setup-android": "docker pull reactnativecommunity/react-native-android:5.2", | ||
"docker-build-android": "docker build -t reactnativeci/android -f .circleci/Dockerfiles/Dockerfile.android .", | ||
|
@@ -93,7 +94,8 @@ | |
"test-android-instrumentation": "yarn run docker-build-android && yarn run test-android-run-instrumentation", | ||
"test-android-unit": "yarn run docker-build-android && yarn run test-android-run-unit", | ||
"test-android-e2e": "yarn run docker-build-android && yarn run test-android-run-e2e", | ||
"test-ios": "./scripts/objc-test.sh test" | ||
"test-ios": "./scripts/objc-test.sh test", | ||
"test-typescript": "dtslint types" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't know if you explored this, but there is https://github.com/jest-community/jest-runner-tsd allowing you to run type tests with Jest instead of adding a new tool. You might have ported tests from DT, in which case using the same tool is easier, I guess 😀 Also, super excited you've done this! 🎉 |
||
}, | ||
"workspaces": [ | ||
"packages/*", | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
# Make sure we never publish __test__ folders (Gradle output) | ||
**/__tests__/ | ||
**/__*tests__/ |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/** | ||
* 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 | ||
*/ | ||
|
||
interface SpyData { | ||
type: number; | ||
module?: string | undefined; | ||
method: string | number; | ||
args: any[]; | ||
} | ||
|
||
declare class MessageQueue { | ||
static spy(spyOrToggle: boolean | ((data: SpyData) => void)): void; | ||
|
||
getCallableModule(name: string): Object; | ||
registerCallableModule(name: string, module: Object): void; | ||
registerLazyCallableModule(name: string, factory: () => Object): void; | ||
} | ||
|
||
declare module 'react-native/Libraries/BatchedBridge/BatchedBridge' { | ||
const BatchedBridge: MessageQueue; | ||
export default BatchedBridge; | ||
} | ||
|
||
declare module 'react-native/Libraries/BatchedBridge/MessageQueue' { | ||
export default MessageQueue; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/** | ||
* 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 | ||
*/ | ||
|
||
declare module 'react-native/Libraries/Utilities/codegenNativeCommands' { | ||
export interface Options<T extends string> { | ||
readonly supportedCommands: ReadonlyArray<T>; | ||
} | ||
|
||
function codegenNativeCommands<T extends object>( | ||
options: Options<keyof T extends string ? keyof T : never>, | ||
): T; | ||
|
||
export default codegenNativeCommands; | ||
} | ||
|
||
declare module 'react-native/Libraries/Utilities/codegenNativeComponent' { | ||
import type {HostComponent} from 'react-native'; | ||
|
||
export interface Options { | ||
readonly interfaceOnly?: boolean; | ||
readonly paperComponentName?: string; | ||
readonly paperComponentNameDeprecated?: string; | ||
readonly excludedPlatforms?: ReadonlyArray<'iOS' | 'android'>; | ||
} | ||
|
||
export type NativeComponentType<T> = HostComponent<T>; | ||
|
||
function codegenNativeComponent<Props extends object>( | ||
componentName: string, | ||
options?: Options, | ||
): NativeComponentType<Props>; | ||
|
||
export default codegenNativeComponent; | ||
} | ||
|
||
declare module 'react-native/Libraries/Types/CodegenTypes' { | ||
import type {NativeSyntheticEvent} from 'react-native'; | ||
|
||
// Event types | ||
// We're not using the PaperName, it is only used to codegen view config settings | ||
|
||
export type BubblingEventHandler< | ||
T, | ||
PaperName extends string | never = never, | ||
> = (event: NativeSyntheticEvent<T>) => void | Promise<void>; | ||
export type DirectEventHandler< | ||
T, | ||
PaperName extends string | never = never, | ||
> = (event: NativeSyntheticEvent<T>) => void | Promise<void>; | ||
|
||
// Prop types | ||
export type Double = number; | ||
export type Float = number; | ||
export type Int32 = number; | ||
export type UnsafeObject = object; | ||
|
||
type DefaultTypes = number | boolean | string | ReadonlyArray<string>; | ||
// Default handling, ignore the unused value | ||
// we're only using it for type checking | ||
// | ||
// TODO: (rickhanlonii) T44881457 If a default is provided, it should always be optional | ||
// but that is currently not supported in the codegen since we require a default | ||
|
||
export type WithDefault< | ||
Type extends DefaultTypes, | ||
Value extends Type | string | undefined | null, | ||
> = Type | undefined | null; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
/** | ||
* 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 | ||
*/ | ||
|
||
declare module 'react-native/Libraries/Core/Devtools/parseErrorStack' { | ||
export type StackFrame = { | ||
file: string; | ||
methodName: string; | ||
lineNumber: number; | ||
column: number | null; | ||
}; | ||
|
||
export interface ExtendedError extends Error { | ||
framesToPop?: number | undefined; | ||
} | ||
|
||
export default function parseErrorStack(error: ExtendedError): StackFrame[]; | ||
} | ||
|
||
declare module 'react-native/Libraries/Core/Devtools/symbolicateStackTrace' { | ||
import {StackFrame} from 'react-native/Libraries/Core/Devtools/parseErrorStack'; | ||
|
||
export default function symbolicateStackTrace( | ||
stack: ReadonlyArray<StackFrame>, | ||
): Promise<StackFrame[]>; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
/** | ||
* 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 | ||
*/ | ||
|
||
// Adds the JSX elements used in the launch screen. | ||
|
||
declare module 'react-native/Libraries/NewAppScreen' { | ||
export const Header: any; | ||
export const LearnMoreLinks: any; | ||
export const Colors: any; | ||
export const DebugInstructions: any; | ||
export const ReloadInstructions: any; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is anything running these tests during build/pr?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not yet, will address this!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added running dtslint as part of the
analyze_code
CircleCI tests