From 67a08c358adb909657787112c201d9795c6523d6 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:02:05 +0100 Subject: [PATCH 1/4] chore: bump ESLint and migrate to new config format --- package.json | 8 +- packages/api/eslint.config.js | 1 + packages/api/package.json | 4 +- packages/api/src/StorageExtension.ts | 1 + packages/default-storage/babel.config.js | 2 +- packages/default-storage/eslint.config.js | 1 + packages/default-storage/example/App.tsx | 34 +- .../example/examples/Basic.tsx | 80 +- .../example/examples/Functional.tsx | 59 +- .../example/examples/GetSetClear.tsx | 20 +- .../example/examples/MergeItem.tsx | 94 +- .../default-storage/ios/RNCAsyncStorage.mm | 2 +- .../jest/async-storage-mock.d.ts | 2 +- packages/default-storage/metro.config.js | 8 +- packages/default-storage/package.json | 8 +- .../default-storage/react-native.config.js | 22 +- .../src/AsyncStorage.native.ts | 2 - packages/default-storage/src/AsyncStorage.ts | 14 +- .../src/NativeAsyncStorageModule.ts | 16 +- .../default-storage/src/RCTAsyncStorage.ts | 1 - packages/default-storage/src/helpers.ts | 2 +- packages/default-storage/src/types.ts | 2 +- packages/default-storage/tsconfig.build.json | 4 +- packages/default-storage/tsconfig.json | 5 +- packages/default-storage/webpack.config.js | 4 +- packages/eslint-config/index.js | 9 + packages/eslint-config/package.json | 27 + yarn.lock | 1330 +++++++++++------ 28 files changed, 1072 insertions(+), 690 deletions(-) create mode 100644 packages/api/eslint.config.js create mode 100644 packages/default-storage/eslint.config.js create mode 100644 packages/eslint-config/index.js create mode 100644 packages/eslint-config/package.json diff --git a/package.json b/package.json index 658d950f..3b2f41a7 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,10 @@ ], "packageManager": "yarn@3.4.1", "devDependencies": { - "@react-native-community/eslint-config": "3.2.0", - "eslint": "8.26.0", - "prettier": "2.8.8", - "typescript": "4.9.5" + "@rnx-kit/eslint-plugin": "^0.5.0", + "eslint": "^8.26.0", + "prettier": "^2.8.8", + "typescript": "^5.0.0" }, "resolutions": { "@react-native-community/cli": "^10.2.5", diff --git a/packages/api/eslint.config.js b/packages/api/eslint.config.js new file mode 100644 index 00000000..f23036d9 --- /dev/null +++ b/packages/api/eslint.config.js @@ -0,0 +1 @@ +module.exports = require("@react-native-async-storage/eslint-config"); diff --git a/packages/api/package.json b/packages/api/package.json index 488b1882..b690a808 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -32,11 +32,11 @@ "license": "MIT", "devDependencies": { "@types/jest": "29.5.4", - "eslint": "8.26.0", + "eslint": "^8.26.0", "jest": "29.5.0", "react-native-builder-bob": "0.20.0", "ts-jest": "29.1.1", - "typescript": "4.9.5" + "typescript": "^5.0.0" }, "react-native-builder-bob": { "source": "src", diff --git a/packages/api/src/StorageExtension.ts b/packages/api/src/StorageExtension.ts index a12ff707..55a03bb9 100644 --- a/packages/api/src/StorageExtension.ts +++ b/packages/api/src/StorageExtension.ts @@ -3,4 +3,5 @@ * core interface beyond its operations. It acts as a placeholder for implementing * additional methods. */ +// eslint-disable-next-line @typescript-eslint/ban-types export type StorageExtension = {}; diff --git a/packages/default-storage/babel.config.js b/packages/default-storage/babel.config.js index f842b77f..5ae49c32 100644 --- a/packages/default-storage/babel.config.js +++ b/packages/default-storage/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: ['module:metro-react-native-babel-preset'], + presets: ["module:metro-react-native-babel-preset"], }; diff --git a/packages/default-storage/eslint.config.js b/packages/default-storage/eslint.config.js new file mode 100644 index 00000000..f23036d9 --- /dev/null +++ b/packages/default-storage/eslint.config.js @@ -0,0 +1 @@ +module.exports = require("@react-native-async-storage/eslint-config"); diff --git a/packages/default-storage/example/App.tsx b/packages/default-storage/example/App.tsx index 5a17df16..706dfc0f 100644 --- a/packages/default-storage/example/App.tsx +++ b/packages/default-storage/example/App.tsx @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useCallback, useMemo, useState } from "react"; import { Button, Keyboard, @@ -14,11 +14,11 @@ import { Text, TouchableOpacity, View, -} from 'react-native'; -import Basic from './examples/Basic'; -import Functional from './examples/Functional'; -import GetSetClear from './examples/GetSetClear'; -import MergeItem from './examples/MergeItem'; +} from "react-native"; +import Basic from "./examples/Basic"; +import Functional from "./examples/Functional"; +import GetSetClear from "./examples/GetSetClear"; +import MergeItem from "./examples/MergeItem"; const SCREENS = { Functional, @@ -86,13 +86,13 @@ export default function App(): JSX.Element { const styles = StyleSheet.create({ container: { flex: 1, - backgroundColor: '#F5FCFF', + backgroundColor: "#F5FCFF", padding: 8, }, exampleContainer: { padding: 4, - backgroundColor: '#FFF', - borderColor: '#EEE', + backgroundColor: "#FFF", + borderColor: "#EEE", borderTopWidth: 1, borderBottomWidth: 1, flex: 1, @@ -101,11 +101,11 @@ const styles = StyleSheet.create({ fontSize: 18, }, exampleDescription: { - color: '#333333', + color: "#333333", marginBottom: 16, }, exampleInnerContainer: { - borderColor: '#EEE', + borderColor: "#EEE", borderTopWidth: 1, paddingTop: 10, flex: 1, @@ -113,17 +113,17 @@ const styles = StyleSheet.create({ restartButton: { padding: 6, borderRadius: 5, - backgroundColor: '#F3F3F3', - alignItems: 'center', - justifyContent: 'center', - alignSelf: 'flex-end', + backgroundColor: "#F3F3F3", + alignItems: "center", + justifyContent: "center", + alignSelf: "flex-end", }, closeKeyboardView: { width: 5, height: 5, }, testPickerContainer: { - flexDirection: 'row', - flexWrap: 'wrap', + flexDirection: "row", + flexWrap: "wrap", }, }); diff --git a/packages/default-storage/example/examples/Basic.tsx b/packages/default-storage/example/examples/Basic.tsx index f3ef0b70..9b05a6ca 100644 --- a/packages/default-storage/example/examples/Basic.tsx +++ b/packages/default-storage/example/examples/Basic.tsx @@ -1,6 +1,6 @@ // @ts-ignore -import AsyncStorage from '@react-native-async-storage/async-storage'; -import React from 'react'; +import AsyncStorage from "@react-native-async-storage/async-storage"; +import React from "react"; import { Button, ScrollView, @@ -8,7 +8,7 @@ import { Text, TextInput, View, -} from 'react-native'; +} from "react-native"; type DataType = { deeper?: DataType; @@ -17,45 +17,45 @@ type DataType = { }; const mergeInitialValue = { - initial: 'keep', - override1: 'override', + initial: "keep", + override1: "override", nested: { - nestedValue: 'keep', - override2: 'override', + nestedValue: "keep", + override2: "override", deeper: { - deeperValue: 'keep', - override3: 'override', + deeperValue: "keep", + override3: "override", }, }, }; function hasMessage(e: unknown): e is { message: string } { - return Boolean(typeof e === 'object' && e && 'message' in e); + return Boolean(typeof e === "object" && e && "message" in e); } function NextExample() { const [keys, setKeys] = React.useState([]); - const [error, setError] = React.useState(''); - const [inputKey, setInputKey] = React.useState(''); - const [inputValue, setInputValue] = React.useState(''); + const [error, setError] = React.useState(""); + const [inputKey, setInputKey] = React.useState(""); + const [inputValue, setInputValue] = React.useState(""); const [value, setValue] = React.useState(); const [mergedValue, setMergedValue] = React.useState(); const [overrideValue, setOverrideValue] = React.useState({ - override1: '', - override2: '', - override3: '', + override1: "", + override2: "", + override3: "", }); function runWithCatch(block: () => Promise) { return async () => { try { - setError(''); + setError(""); await block(); } catch (e) { if (hasMessage(e)) { - setError('Caught error: ' + (e.message || e)); + setError("Caught error: " + (e.message || e)); } else { - setError('Unknown error: ' + e); + setError("Unknown error: " + e); } } }; @@ -76,15 +76,15 @@ function NextExample() { } async function crashValueType() { - await AsyncStorage.setItem('CRASH', 435345); + await AsyncStorage.setItem("CRASH", 435345); } async function crashKeyNull() { - await AsyncStorage.setItem(null, '435345'); + await AsyncStorage.setItem(null, "435345"); } async function crashKeyNotString() { - await AsyncStorage.setItem(432, '435345'); + await AsyncStorage.setItem(432, "435345"); } async function removeValue() { @@ -96,13 +96,13 @@ function NextExample() { } async function resetMergedValue() { - await AsyncStorage.setItem('MERGER', JSON.stringify(mergeInitialValue)); - const saved = await AsyncStorage.getItem('MERGER'); + await AsyncStorage.setItem("MERGER", JSON.stringify(mergeInitialValue)); + const saved = await AsyncStorage.getItem("MERGER"); setMergedValue(JSON.parse(saved)); } async function readMergedValue() { - const saved = await AsyncStorage.getItem('MERGER'); + const saved = await AsyncStorage.getItem("MERGER"); setMergedValue(saved ? JSON.parse(saved) : {}); } @@ -112,7 +112,7 @@ function NextExample() { // leave out empty inputs const toMerge: DataType = {}; if (override1) { - toMerge['override1'] = override1; + toMerge["override1"] = override1; } if (override2) { toMerge.nested = { @@ -132,7 +132,7 @@ function NextExample() { }; } } - await AsyncStorage.mergeItem('MERGER', JSON.stringify(toMerge)); + await AsyncStorage.mergeItem("MERGER", JSON.stringify(toMerge)); } return ( @@ -226,7 +226,7 @@ function NextExample() {