Skip to content

Commit

Permalink
Move 0.70 TypeScript over
Browse files Browse the repository at this point in the history
  • Loading branch information
Luna Wei committed Sep 13, 2022
1 parent b098215 commit 3b92183
Show file tree
Hide file tree
Showing 22 changed files with 15,337 additions and 23 deletions.
12 changes: 12 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,17 @@ module.exports = {
jest: true,
},
},
{
files: ['types/**/*.{ts,tsx}'],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint/eslint-plugin'],
rules: {
'@typescript-eslint/no-unused-vars': 'off',
'react-native/no-inline-styles': 'off',
'@typescript-eslint/no-shadow': 'off',
'no-self-compare': 'off',
'react/self-closing-comp': 'off',
},
},
],
};
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"engines": {
"node": ">=14"
},
"types": "types",
"jest-junit": {
"outputDirectory": "reports/junit",
"outputName": "js-test-results.xml"
Expand Down Expand Up @@ -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 .",
Expand All @@ -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"
},
"workspaces": [
"packages/*",
Expand Down
6 changes: 5 additions & 1 deletion repo-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@
"shelljs": "^0.8.5",
"signedsource": "^1.0.0",
"ws": "^6.1.4",
"yargs": "^15.3.1"
"yargs": "^15.3.1",
"@definitelytyped/dtslint": "^0.0.127",
"@types/react": "^18.0.18",
"typescript": "^4.8.2",
"@typescript-eslint/parser": "^5.36.2"
}
}
32 changes: 32 additions & 0 deletions types/BatchedBridge.d.ts
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;
}
74 changes: 74 additions & 0 deletions types/Codegen.d.ts
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;
}
31 changes: 31 additions & 0 deletions types/Devtools.d.ts
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[]>;
}
18 changes: 18 additions & 0 deletions types/LaunchScreen.d.ts
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;
}
Loading

0 comments on commit 3b92183

Please sign in to comment.