Skip to content

Commit ade0197

Browse files
Remove the native SafeAreaView and the deprecated public export
`SafeAreaView` has been deprecated for several releases in favour of `react-native-safe-area-context`, and the previous change moved the core surfaces that cannot use the library onto a JavaScript implementation built on the safe area insets prop. Nothing needs the native component now. Removed: the C++ shadow node, state and component descriptor, the iOS component view, the Android view and view manager, the codegen spec and every registration of them, plus the long-deprecated public export from `index.js`, the Flow and TypeScript surfaces, the deprecated type stubs, the Babel lazy import list and the ESLint import map. The private component drops its `_INTERNAL_DO_NOT_USE` suffix now that it is the only one left. This is a breaking change for anyone still importing `SafeAreaView` from `react-native`; the replacement is `react-native-safe-area-context`, or the `experimental_onSafeAreaInsetsChange` prop directly.
1 parent 295250f commit ade0197

76 files changed

Lines changed: 4954 additions & 931 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/eslint-plugin-react-native/utils.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,6 @@ const publicAPIMapping = {
109109
'RefreshControlPropsIOS',
110110
],
111111
},
112-
'Libraries/Components/SafeAreaView/SafeAreaView': {
113-
default: 'SafeAreaView',
114-
types: null,
115-
},
116112
'Libraries/Components/ScrollView/ScrollView': {
117113
default: 'ScrollView',
118114
types: [

packages/react-native-babel-preset/src/configs/lazy-imports.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ module.exports = new Set([
2929
'Pressable',
3030
'ProgressBarAndroid',
3131
'ProgressViewIOS',
32-
'SafeAreaView',
3332
'ScrollView',
3433
'SectionList',
3534
'Slider',
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
/**
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
*
8+
* @format
9+
*/
10+
11+
import type {
12+
CompleteTypeAnnotation,
13+
NamedShape,
14+
NativeModuleEnumMember,
15+
} from "@react-native/codegen/src/CodegenSchema";
16+
type TypeAnnotationComparisonError = {
17+
type: "TypeAnnotationComparisonError";
18+
message: string;
19+
newerAnnotation: CompleteTypeAnnotation;
20+
olderAnnotation: CompleteTypeAnnotation;
21+
previousError?: TypeComparisonError | undefined;
22+
};
23+
type TypeInformationComparisonError = {
24+
type: "TypeInformationComparisonError";
25+
message: string;
26+
newerAnnotation: CompleteTypeAnnotation;
27+
olderAnnotation: CompleteTypeAnnotation;
28+
previousError?: TypeComparisonError | undefined;
29+
};
30+
type PropertyComparisonError = {
31+
type: "PropertyComparisonError";
32+
message: string;
33+
mismatchedProperties: Array<{
34+
property: string;
35+
fault?: TypeComparisonError | undefined;
36+
}>;
37+
previousError?: TypeComparisonError | undefined;
38+
};
39+
type PositionalComparisonError = {
40+
type: "PositionalComparisonError";
41+
message: string;
42+
erroneousItems: Array<[number, CompleteTypeAnnotation]>;
43+
previousError?: TypeComparisonError | undefined;
44+
};
45+
type MemberComparisonError = {
46+
type: "MemberComparisonError";
47+
message: string;
48+
mismatchedMembers: Array<{
49+
member: string;
50+
fault?: TypeComparisonError | undefined;
51+
}>;
52+
previousError?: TypeComparisonError | undefined;
53+
};
54+
export type TypeComparisonError =
55+
| TypeAnnotationComparisonError
56+
| TypeInformationComparisonError
57+
| PropertyComparisonError
58+
| PositionalComparisonError
59+
| MemberComparisonError;
60+
export type PositionalComparisonResult = {
61+
typeKind: "stringUnion" | "union" | "intersection" | "parameter" | "tuple";
62+
nestedChanges: Array<[number, number, ComparisonResult]>;
63+
addedElements?: Array<[number, CompleteTypeAnnotation]> | undefined;
64+
removedElements?: Array<[number, CompleteTypeAnnotation]> | undefined;
65+
};
66+
export type FunctionComparisonResult = {
67+
returnType?: ComparisonResult | undefined;
68+
parameterTypes?: PositionalComparisonResult | undefined;
69+
};
70+
export type PropertiesComparisonResult = {
71+
addedProperties?:
72+
ReadonlyArray<NamedShape<CompleteTypeAnnotation>> | undefined;
73+
missingProperties?:
74+
ReadonlyArray<NamedShape<CompleteTypeAnnotation>> | undefined;
75+
errorProperties?:
76+
| Array<{ property: string; fault?: TypeComparisonError | undefined }>
77+
| undefined;
78+
madeStrict?:
79+
| Array<{ property: string; furtherChanges?: ComparisonResult | undefined }>
80+
| undefined;
81+
madeOptional?:
82+
| Array<{ property: string; furtherChanges?: ComparisonResult | undefined }>
83+
| undefined;
84+
nestedPropertyChanges?: Array<[string, ComparisonResult]> | undefined;
85+
};
86+
export type EnumMembersComparisonResult = {
87+
memberKind: "enum";
88+
addedMembers?: Array<NativeModuleEnumMember> | undefined;
89+
missingMembers?: Array<NativeModuleEnumMember> | undefined;
90+
errorMembers?:
91+
| Array<{ member: string; fault?: TypeComparisonError | undefined }>
92+
| undefined;
93+
};
94+
export type UnionMembersComparisonResult = {
95+
memberKind: "union";
96+
addedMembers?: Array<CompleteTypeAnnotation> | undefined;
97+
missingMembers?: Array<CompleteTypeAnnotation> | undefined;
98+
errorMembers?:
99+
| Array<{ member: string; fault?: TypeComparisonError | undefined }>
100+
| undefined;
101+
};
102+
export type MembersComparisonResult =
103+
EnumMembersComparisonResult | UnionMembersComparisonResult;
104+
export type NullableComparisonResult = {
105+
typeRefined: boolean;
106+
optionsReduced: boolean;
107+
interiorLog: null | undefined | ComparisonResult;
108+
newType: null | undefined | CompleteTypeAnnotation;
109+
oldType: null | undefined | CompleteTypeAnnotation;
110+
};
111+
export type ComparisonResult =
112+
| { status: "matching" }
113+
| { status: "skipped" }
114+
| {
115+
status: "nullableChange";
116+
nullableLog: NullableComparisonResult;
117+
errorLog?: TypeComparisonError | undefined;
118+
}
119+
| {
120+
status: "properties";
121+
propertyLog: PropertiesComparisonResult;
122+
errorLog?: TypeComparisonError | undefined;
123+
}
124+
| {
125+
status: "members";
126+
memberLog: MembersComparisonResult;
127+
errorLog?: TypeComparisonError | undefined;
128+
}
129+
| {
130+
status: "functionChange";
131+
functionChangeLog: FunctionComparisonResult;
132+
errorLog?: TypeComparisonError | undefined;
133+
}
134+
| {
135+
status: "positionalTypeChange";
136+
changeLog: PositionalComparisonResult;
137+
errorLog?: TypeComparisonError | undefined;
138+
}
139+
| { status: "error"; errorLog: TypeComparisonError };
140+
export declare function isPropertyLogEmpty(
141+
result: PropertiesComparisonResult,
142+
): boolean;
143+
export declare function isMemberLogEmpty(
144+
result: MembersComparisonResult,
145+
): boolean;
146+
export declare function isFunctionLogEmpty(
147+
result: FunctionComparisonResult,
148+
): boolean;
149+
export declare function makeError(error: TypeComparisonError): ComparisonResult;
150+
export declare function typeInformationComparisonError(
151+
message: string,
152+
newerAnnotation: CompleteTypeAnnotation,
153+
olderAnnotation: CompleteTypeAnnotation,
154+
previousError?: TypeComparisonError,
155+
): TypeComparisonError;
156+
export declare function typeAnnotationComparisonError(
157+
message: string,
158+
newerAnnotation: CompleteTypeAnnotation,
159+
olderAnnotation: CompleteTypeAnnotation,
160+
previousError?: TypeComparisonError,
161+
): TypeComparisonError;
162+
export declare function propertyComparisonError(
163+
message: string,
164+
mismatchedProperties: Array<{
165+
property: string;
166+
fault?: TypeComparisonError | undefined;
167+
}>,
168+
previousError?: TypeComparisonError,
169+
): TypeComparisonError;
170+
export declare function memberComparisonError(
171+
message: string,
172+
mismatchedMembers: Array<{
173+
member: string;
174+
fault?: TypeComparisonError | undefined;
175+
}>,
176+
previousError?: TypeComparisonError,
177+
): TypeComparisonError;
178+
export declare function positionalComparisonError(
179+
message: string,
180+
erroneousItems: Array<[number, CompleteTypeAnnotation]>,
181+
previousError?: TypeComparisonError,
182+
): TypeComparisonError;
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
"use strict";
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true,
5+
});
6+
exports.isFunctionLogEmpty = isFunctionLogEmpty;
7+
exports.isMemberLogEmpty = isMemberLogEmpty;
8+
exports.isPropertyLogEmpty = isPropertyLogEmpty;
9+
exports.makeError = makeError;
10+
exports.memberComparisonError = memberComparisonError;
11+
exports.positionalComparisonError = positionalComparisonError;
12+
exports.propertyComparisonError = propertyComparisonError;
13+
exports.typeAnnotationComparisonError = typeAnnotationComparisonError;
14+
exports.typeInformationComparisonError = typeInformationComparisonError;
15+
function isPropertyLogEmpty(result) {
16+
return !(
17+
result.addedProperties ||
18+
result.missingProperties ||
19+
result.nestedPropertyChanges ||
20+
result.madeStrict ||
21+
result.madeOptional ||
22+
result.errorProperties
23+
);
24+
}
25+
function isMemberLogEmpty(result) {
26+
return !(result.addedMembers || result.missingMembers || result.errorMembers);
27+
}
28+
function isFunctionLogEmpty(result) {
29+
return !(result.returnType || result.parameterTypes);
30+
}
31+
function makeError(error) {
32+
return {
33+
status: "error",
34+
errorLog: error,
35+
};
36+
}
37+
function typeInformationComparisonError(
38+
message,
39+
newerAnnotation,
40+
olderAnnotation,
41+
previousError,
42+
) {
43+
return {
44+
type: "TypeInformationComparisonError",
45+
message,
46+
newerAnnotation,
47+
olderAnnotation,
48+
previousError,
49+
};
50+
}
51+
function typeAnnotationComparisonError(
52+
message,
53+
newerAnnotation,
54+
olderAnnotation,
55+
previousError,
56+
) {
57+
return {
58+
type: "TypeAnnotationComparisonError",
59+
message,
60+
newerAnnotation,
61+
olderAnnotation,
62+
previousError,
63+
};
64+
}
65+
function propertyComparisonError(message, mismatchedProperties, previousError) {
66+
return {
67+
type: "PropertyComparisonError",
68+
message,
69+
mismatchedProperties,
70+
previousError,
71+
};
72+
}
73+
function memberComparisonError(message, mismatchedMembers, previousError) {
74+
return {
75+
type: "MemberComparisonError",
76+
message,
77+
mismatchedMembers,
78+
previousError,
79+
};
80+
}
81+
function positionalComparisonError(message, erroneousItems, previousError) {
82+
return {
83+
type: "PositionalComparisonError",
84+
message,
85+
erroneousItems,
86+
previousError,
87+
};
88+
}

0 commit comments

Comments
 (0)