diff --git a/.circleci/config.yml b/.circleci/config.yml
index c388a1ce..faa040a9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -29,19 +29,17 @@ jobs:
paths:
- node_modules
- - run:
- name: jest tests
- command: |
- mkdir -p test-results/jest
- yarn run test
- environment:
- JEST_JUNIT_OUTPUT: test-results/jest/junit.xml
-
- persist_to_workspace:
root: ~/dooboo
paths:
- node_modules
+ - run:
+ name: Generate fbt
+ working_directory: .
+ command: |
+ yarn fbt:all
+
- run:
name: ESLint Test
working_directory: .
@@ -110,6 +108,13 @@ jobs:
# paths:
# - android/vendor/bundle
+ - run:
+ name: Generate fbt
+ working_directory: .
+ command: |
+ yarn fbt:all && yarn fbt:android
+
+
- run:
name: Check MD5 on files
command: |
diff --git a/.gitignore b/.gitignore
index 41f14643..d95acaf5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,4 +63,7 @@ package-lock.json
ios/Pods/
-.vscode
\ No newline at end of file
+# fbt
+i18n/fbt/.enum_manifest.json
+i18n/fbt/.source_strings.json
+i18n/fbt/.src_manifest.json
diff --git a/@types/fbt/globals.d.ts b/@types/fbt/globals.d.ts
new file mode 100644
index 00000000..34f65f09
--- /dev/null
+++ b/@types/fbt/globals.d.ts
@@ -0,0 +1,92 @@
+///
+
+declare namespace FBT {
+ type $Values = T[keyof T];
+
+ // https://github.com/facebookincubator/fbt/blob/e9c591f451dbfc91852e316869ae39ad41848c55/runtime/nonfb/GenderConst.js#L9-L23
+ interface GenderConst {
+ NOT_A_PERSON: 0;
+ FEMALE_SINGULAR: 1;
+ MALE_SINGULAR: 2;
+ FEMALE_SINGULAR_GUESS: 3;
+ MALE_SINGULAR_GUESS: 4;
+ MIXED_SINGULAR: 5;
+ MIXED_PLURAL: 5;
+ NEUTER_SINGULAR: 6;
+ UNKNOWN_SINGULAR: 7;
+ FEMALE_PLURAL: 8;
+ MALE_PLURAL: 9;
+ NEUTER_PLURAL: 10;
+ UNKNOWN_PLURAL: 11;
+ }
+
+ interface IntlVariationsGender {
+ GENDER_MALE: 1;
+ GENDER_FEMALE: 2;
+ GENDER_UNKNOWN: 3;
+ }
+
+ // https://github.com/facebookincubator/fbt/blob/e9c591f451dbfc91852e316869ae39ad41848c55/runtime/nonfb/IntlVariations.js#L9-L21
+ interface IntlVariations extends IntlVariationsGender {
+ BITMASK_NUMBER: 28;
+ BITMASK_GENDER: 3;
+ NUMBER_ZERO: 16;
+ NUMBER_ONE: 4;
+ NUMBER_TWO: 8;
+ NUMBER_FEW: 20;
+ NUMBER_MANY: 12;
+ NUMBER_OTHER: 24;
+ }
+
+ // https://github.com/facebookincubator/fbt/blob/c2d363a40b622d5aaf80ff1d249b38604fd869f6/transform/babel-plugin-fbt/FbtConstants.js#L22-L27
+ type PronounType = 'object' | 'possessive' | 'reflexive' | 'subject';
+
+ type IntlVariationsGenderValues = $Values;
+
+ interface IntlViewerContext {
+ GENDER: IntlVariationsGenderValues;
+ locale: string;
+ }
+
+ type IntlVariationsValues = $Values;
+ type GenderConstValues = $Values;
+
+ type Translations = { [locale: string]: { [key: string]: string } };
+
+ interface Options {
+ author?: string;
+ common?: boolean;
+ doNotExtract?: boolean;
+ preserveWhitespace?: boolean;
+ project?: string;
+ subject?: IntlVariationsGenderValues;
+ }
+
+ interface PluralOptions {
+ many?: string;
+ showCount?: 'yes' | 'no' | 'ifMany';
+ name?: string;
+ value?: any;
+ }
+
+ interface ParamOptions {
+ gender?: IntlVariationsGenderValues;
+ number?: number | true;
+ }
+
+ interface PronounOptions {
+ human?: boolean;
+ capitalize?: boolean;
+ }
+
+ type FbtResult = string;
+}
+
+declare namespace JSX {
+ interface IntrinsicElements {
+ fbt: {
+ desc: string;
+ children: React.ReactNode | React.ReactNode[];
+ } & FBT.Options;
+ }
+}
diff --git a/@types/fbt/index.d.ts b/@types/fbt/index.d.ts
new file mode 100644
index 00000000..44664a56
--- /dev/null
+++ b/@types/fbt/index.d.ts
@@ -0,0 +1,76 @@
+///
+
+declare module 'fbt' {
+ export const GenderConst: FBT.GenderConst;
+ export const IntlVariations: FBT.IntlVariations;
+ export const IntlViewerContext: FBT.IntlViewerContext;
+
+ // These exports (Fbt*) isn't real! It is only syntax abstraction
+ // https://github.com/facebookincubator/fbt/blob/8607c1f2798ef18c6142a2cf1c5a9351c6d7df69/transform/babel-plugin-fbt/FbtUtil.js#L28-L40
+ export const FbtEnum: React.FC<{
+ 'enum-range': Array | { [enumKey: string]: string };
+ value: string;
+ }>;
+ export const FbtParam: React.FC<
+ FBT.ParamOptions & { name: string; children: React.ReactNode }
+ >;
+ export const FbtPlural: React.FC<
+ FBT.PluralOptions & { count: number; children: string }
+ >;
+ export const FbtPronoun: React.FC<
+ FBT.PronounOptions & {
+ type: FBT.PronounType;
+ gender: FBT.GenderConstValues;
+ }
+ >;
+ export const FbtName: React.FC<
+ Omit & {
+ name: string;
+ gender: FBT.IntlVariationsGenderValues;
+ children: React.ReactNode;
+ }
+ >;
+ export const FbtSameParam: React.FC<{
+ name: string;
+ }>;
+
+ export interface Fbt {
+ (source: string, desc: string, options?: FBT.Options): FBT.FbtResult;
+
+ param(
+ paramName: string,
+ value: any,
+ options?: FBT.ParamOptions,
+ ): FBT.FbtResult;
+ sameParam(paramName: string): FBT.FbtResult;
+ name(name: string, gender: FBT.IntlVariationsGenderValues): FBT.FbtResult;
+ plural(
+ singularPhrase: string,
+ count: number,
+ options?: FBT.PluralOptions,
+ ): FBT.FbtResult;
+ enum<
+ Range extends { [enumKey: string]: string },
+ RangeKeys extends keyof Range
+ >(
+ enumKey: RangeKeys,
+ enumRange: Range,
+ ): FBT.FbtResult;
+ enum(index: string, enumRange: Array): FBT.FbtResult;
+ pronoun(
+ type: FBT.PronounType,
+ gender: FBT.GenderConstValues,
+ options: FBT.PronounOptions,
+ ): FBT.FbtResult;
+ }
+
+ export const init: (options: { translations: FBT.Translations, hooks: { getViewerContext: () => any} }) => void;
+
+ export const fbt: Fbt;
+}
+
+declare namespace JSX {
+ interface IntrinsicElements {
+ fbt: any;
+ }
+}
diff --git a/README.md b/README.md
index 74f32e7b..29e8a973 100644
--- a/README.md
+++ b/README.md
@@ -198,117 +198,10 @@ const component = (props): React.ReactElement => {
### Localization
-We've defined Localization strings in `STRINGS.js` which is in root dir.
-We used [react-native-localize](https://github.com/react-native-community/react-native-localize) pacakage for this one which use [i18n-js](https://github.com/fnando/i18n-js) together.
-
-- How it is installed
-
- ```tsx
- import * as Localization from 'react-native-localize';
-
- import en from './assets/langs/en.json';
- import i18n from 'i18n-js';
- import ja from './assets/langs/ja.json';
- import ko from './assets/langs/ko.json';
-
- const locales = Localization.getLocales();
-
- if (Array.isArray(locales)) {
- i18n.locale = locales[0].languageTag;
- }
-
- i18n.fallbacks = true;
- i18n.translations = { en, ko, ja };
-
- export const getString = (param: string, mapObj?: Record): string => {
- if (mapObj) {
- return i18n.t(param, mapObj);
- }
- return i18n.t(param);
- };
- ```
-
-- How it is used
-
- > Import locales in `assets/langs`. Currently, `ko.json` and `en.json` is installed. If you want to add more languages you can add it in `STRINGS.ts` and `i18n.translations = { en, ko };` add more languages inside `i18n.translations`.
-
- ```ts
- import { getString } from '../../../STRINGS';
-
- getString('LOGIN');
- ```
-
-- How it is mocked
-
- > Fixed jest setup by adding following in `__mocks__/react-native-localize.ts`.
-
- ```ts
- interface Locale {
- countryCode: string;
- languageTag: string;
- languageCode: string;
- isRTL: boolean;
- }
- const getLocales = (): Locale[] => [
- {
- countryCode: 'US',
- languageTag: 'en-US',
- languageCode: 'en',
- isRTL: false,
- },
- {
- countryCode: 'EC',
- languageTag: 'es-EC',
- languageCode: 'es',
- isRTL: false,
- },
- ];
-
- const findBestAvailableLanguage = (): Partial => ({
- languageTag: 'es',
- isRTL: false,
- });
-
- const getNumberFormatSettings = (): Record => ({
- decimalSeparator: '.',
- groupingSeparator: ',',
- });
-
- const getCalendar = (): string => 'gregorian'; // or "japanese", "buddhist"
- const getCountry = (): string => 'ES'; // the country code you want
- const getCurrencies = (): [string] => ['USD']; // can be empty array
- const getTemperatureUnit = (): string => 'celsius'; // or "fahrenheit"
- const getTimeZone = (): string => 'Ecuador/Guayaquil'; // the timezone you want
- const uses24HourClock = (): boolean => true;
- const usesMetricSystem = (): boolean => true;
-
- const addEventListener = jest.fn();
- const removeEventListener = jest.fn();
-
- export {
- findBestAvailableLanguage,
- getLocales,
- getNumberFormatSettings,
- getCalendar,
- getCountry,
- getCurrencies,
- getTemperatureUnit,
- getTimeZone,
- uses24HourClock,
- usesMetricSystem,
- addEventListener,
- removeEventListener,
- };
- ```
-
-### React version
-
-16.9
-
-### React Native version
-
-0.61
-
-### React navigation
-
-4
+Previously, we used `i18n-j` to localize our app and we decided to switch to [fbt](https://github.com/facebook/fbt). If you want to understand why, you may see our blog for [Localizing react app with FBT instead of i18n](https://medium.com/dooboolab/localizing-react-app-with-fbt-instead-of-i18n-90822e0cb373).
+
+We've defined localized strings in `assets/translations/en.json` for English and `assets/translations/ko.json` for Korean. Since the `en` is default locale setup in current project, you do not need to localize this file. However, you still should not delete this if you don't want to see missing localization warning messages when you are running jest.
+
+We are using [fbt](https://github.com/facebook/fbt) to localize our app which is maintained by Facebook team. Simply running `yarn fbt-all` will generate `i18n/fbt/translatedFbts.json` which has all the localized strings.
+
+If you find trouble using it, you may follow [Integrate FBT into your React Native Application](https://medium.com/translate-your-react-native-application-with/integrate-fbt-into-your-react-native-application-2bac420e8e0c).
diff --git a/STRINGS.ts b/STRINGS.ts
deleted file mode 100644
index 461ce842..00000000
--- a/STRINGS.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import * as Localization from 'react-native-localize';
-
-import en from './assets/langs/en.json';
-import i18n from 'i18n-js';
-import ko from './assets/langs/ko.json';
-
-const locales = Localization.getLocales();
-
-if (Array.isArray(locales)) {
- i18n.locale = locales[0].languageTag;
-}
-
-i18n.fallbacks = true;
-i18n.translations = { en, ko };
-
-export const getString = (param: string, mapObj?: Record): string => {
- if (mapObj) {
- return i18n.t(param, mapObj);
- }
- return i18n.t(param);
-};
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 87d1e943..6baa3370 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -13,7 +13,7 @@
diff --git a/android/app/src/main/java/com/dooboo/MainActivity.java b/android/app/src/main/java/com/dooboo/MainActivity.java
index 21ab5d9b..d121f950 100644
--- a/android/app/src/main/java/com/dooboo/MainActivity.java
+++ b/android/app/src/main/java/com/dooboo/MainActivity.java
@@ -1,12 +1,17 @@
package com.dooboo;
+import android.content.res.Configuration;
+
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
public class MainActivity extends ReactActivity {
+ static String currentLocale;
+
/**
* Returns the name of the main component registered from JavaScript. This is
* used to schedule rendering of the component.
@@ -25,4 +30,16 @@ protected ReactRootView createRootView() {
}
};
}
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ String locale = newConfig.locale.toString();
+ if (!locale.equals(MainActivity.currentLocale)) {
+ MainActivity.currentLocale = locale;
+ final ReactInstanceManager instanceManager = getReactInstanceManager();
+ instanceManager.recreateReactContextInBackground();
+ }
+ }
}
diff --git a/android/app/src/main/res/raw-en-rUS/localizable.json b/android/app/src/main/res/raw-en-rUS/localizable.json
new file mode 100644
index 00000000..04dcab6f
--- /dev/null
+++ b/android/app/src/main/res/raw-en-rUS/localizable.json
@@ -0,0 +1 @@
+{"18yDJU":"\"Go Back\"","4rqrl3":"\"Sign In\"","3fayOT":"\"Navigate\"","zcXn6":"\"Change Theme\""}
\ No newline at end of file
diff --git a/android/app/src/main/res/raw-ko-rKR/localizable.json b/android/app/src/main/res/raw-ko-rKR/localizable.json
new file mode 100644
index 00000000..36fc07e4
--- /dev/null
+++ b/android/app/src/main/res/raw-ko-rKR/localizable.json
@@ -0,0 +1 @@
+{"18yDJU":"\"뒤로가기\"","4rqrl3":"\"로그인\"","3fayOT":"\"화면 전환\"","zcXn6":"\"테마 변경\""}
\ No newline at end of file
diff --git a/android/app/src/main/res/raw/localizable.json b/android/app/src/main/res/raw/localizable.json
new file mode 100644
index 00000000..e69de29b
diff --git a/android/drawable-hdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png b/android/drawable-hdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png
new file mode 100644
index 00000000..ad03a63b
Binary files /dev/null and b/android/drawable-hdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png differ
diff --git a/android/drawable-mdpi/assets_icons_mask.png b/android/drawable-mdpi/assets_icons_mask.png
new file mode 100644
index 00000000..8d67eb81
Binary files /dev/null and b/android/drawable-mdpi/assets_icons_mask.png differ
diff --git a/android/drawable-mdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png b/android/drawable-mdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png
new file mode 100644
index 00000000..083db295
Binary files /dev/null and b/android/drawable-mdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png differ
diff --git a/android/drawable-mdpi/node_modules_reactnavigation_stack_src_views_assets_backiconmask.png b/android/drawable-mdpi/node_modules_reactnavigation_stack_src_views_assets_backiconmask.png
new file mode 100644
index 00000000..9de72420
Binary files /dev/null and b/android/drawable-mdpi/node_modules_reactnavigation_stack_src_views_assets_backiconmask.png differ
diff --git a/android/drawable-xhdpi/assets_icons_mask.png b/android/drawable-xhdpi/assets_icons_mask.png
new file mode 100644
index 00000000..99d12240
Binary files /dev/null and b/android/drawable-xhdpi/assets_icons_mask.png differ
diff --git a/android/drawable-xhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png b/android/drawable-xhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png
new file mode 100644
index 00000000..6de0a1cb
Binary files /dev/null and b/android/drawable-xhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png differ
diff --git a/android/drawable-xxhdpi/assets_icons_mask.png b/android/drawable-xxhdpi/assets_icons_mask.png
new file mode 100644
index 00000000..eec61342
Binary files /dev/null and b/android/drawable-xxhdpi/assets_icons_mask.png differ
diff --git a/android/drawable-xxhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png b/android/drawable-xxhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png
new file mode 100644
index 00000000..15a983a6
Binary files /dev/null and b/android/drawable-xxhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png differ
diff --git a/android/drawable-xxxhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png b/android/drawable-xxxhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png
new file mode 100644
index 00000000..17e52e85
Binary files /dev/null and b/android/drawable-xxxhdpi/node_modules_reactnavigation_stack_src_views_assets_backicon.png differ
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 1ba7206f..a4b44297 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/android/raw/i18n_fbt_translatedfbts.json b/android/raw/i18n_fbt_translatedfbts.json
new file mode 100644
index 00000000..f5372106
--- /dev/null
+++ b/android/raw/i18n_fbt_translatedfbts.json
@@ -0,0 +1 @@
+{"en_US":{"18yDJU":"Go Back","4rqrl3":"Sign In","3fayOT":"Navigate","zcXn6":"Change Theme"},"ko_KR":{"18yDJU":"뒤로가기","4rqrl3":"로그인","3fayOT":"화면 전환","zcXn6":"테마 변경"}}
\ No newline at end of file
diff --git a/android/raw/node_modules_csscolorkeywords_colors.json b/android/raw/node_modules_csscolorkeywords_colors.json
new file mode 100644
index 00000000..6637d25d
--- /dev/null
+++ b/android/raw/node_modules_csscolorkeywords_colors.json
@@ -0,0 +1,148 @@
+{
+ "black": "#000000",
+ "silver": "#c0c0c0",
+ "gray": "#808080",
+ "white": "#ffffff",
+ "maroon": "#800000",
+ "red": "#ff0000",
+ "purple": "#800080",
+ "fuchsia": "#ff00ff",
+ "green": "#008000",
+ "lime": "#00ff00",
+ "olive": "#808000",
+ "yellow": "#ffff00",
+ "navy": "#000080",
+ "blue": "#0000ff",
+ "teal": "#008080",
+ "aqua": "#00ffff",
+ "orange": "#ffa500",
+ "aliceblue": "#f0f8ff",
+ "antiquewhite": "#faebd7",
+ "aquamarine": "#7fffd4",
+ "azure": "#f0ffff",
+ "beige": "#f5f5dc",
+ "bisque": "#ffe4c4",
+ "blanchedalmond": "#ffebcd",
+ "blueviolet": "#8a2be2",
+ "brown": "#a52a2a",
+ "burlywood": "#deb887",
+ "cadetblue": "#5f9ea0",
+ "chartreuse": "#7fff00",
+ "chocolate": "#d2691e",
+ "coral": "#ff7f50",
+ "cornflowerblue": "#6495ed",
+ "cornsilk": "#fff8dc",
+ "crimson": "#dc143c",
+ "darkblue": "#00008b",
+ "darkcyan": "#008b8b",
+ "darkgoldenrod": "#b8860b",
+ "darkgray": "#a9a9a9",
+ "darkgreen": "#006400",
+ "darkgrey": "#a9a9a9",
+ "darkkhaki": "#bdb76b",
+ "darkmagenta": "#8b008b",
+ "darkolivegreen": "#556b2f",
+ "darkorange": "#ff8c00",
+ "darkorchid": "#9932cc",
+ "darkred": "#8b0000",
+ "darksalmon": "#e9967a",
+ "darkseagreen": "#8fbc8f",
+ "darkslateblue": "#483d8b",
+ "darkslategray": "#2f4f4f",
+ "darkslategrey": "#2f4f4f",
+ "darkturquoise": "#00ced1",
+ "darkviolet": "#9400d3",
+ "deeppink": "#ff1493",
+ "deepskyblue": "#00bfff",
+ "dimgray": "#696969",
+ "dimgrey": "#696969",
+ "dodgerblue": "#1e90ff",
+ "firebrick": "#b22222",
+ "floralwhite": "#fffaf0",
+ "forestgreen": "#228b22",
+ "gainsboro": "#dcdcdc",
+ "ghostwhite": "#f8f8ff",
+ "gold": "#ffd700",
+ "goldenrod": "#daa520",
+ "greenyellow": "#adff2f",
+ "grey": "#808080",
+ "honeydew": "#f0fff0",
+ "hotpink": "#ff69b4",
+ "indianred": "#cd5c5c",
+ "indigo": "#4b0082",
+ "ivory": "#fffff0",
+ "khaki": "#f0e68c",
+ "lavender": "#e6e6fa",
+ "lavenderblush": "#fff0f5",
+ "lawngreen": "#7cfc00",
+ "lemonchiffon": "#fffacd",
+ "lightblue": "#add8e6",
+ "lightcoral": "#f08080",
+ "lightcyan": "#e0ffff",
+ "lightgoldenrodyellow": "#fafad2",
+ "lightgray": "#d3d3d3",
+ "lightgreen": "#90ee90",
+ "lightgrey": "#d3d3d3",
+ "lightpink": "#ffb6c1",
+ "lightsalmon": "#ffa07a",
+ "lightseagreen": "#20b2aa",
+ "lightskyblue": "#87cefa",
+ "lightslategray": "#778899",
+ "lightslategrey": "#778899",
+ "lightsteelblue": "#b0c4de",
+ "lightyellow": "#ffffe0",
+ "limegreen": "#32cd32",
+ "linen": "#faf0e6",
+ "mediumaquamarine": "#66cdaa",
+ "mediumblue": "#0000cd",
+ "mediumorchid": "#ba55d3",
+ "mediumpurple": "#9370db",
+ "mediumseagreen": "#3cb371",
+ "mediumslateblue": "#7b68ee",
+ "mediumspringgreen": "#00fa9a",
+ "mediumturquoise": "#48d1cc",
+ "mediumvioletred": "#c71585",
+ "midnightblue": "#191970",
+ "mintcream": "#f5fffa",
+ "mistyrose": "#ffe4e1",
+ "moccasin": "#ffe4b5",
+ "navajowhite": "#ffdead",
+ "oldlace": "#fdf5e6",
+ "olivedrab": "#6b8e23",
+ "orangered": "#ff4500",
+ "orchid": "#da70d6",
+ "palegoldenrod": "#eee8aa",
+ "palegreen": "#98fb98",
+ "paleturquoise": "#afeeee",
+ "palevioletred": "#db7093",
+ "papayawhip": "#ffefd5",
+ "peachpuff": "#ffdab9",
+ "peru": "#cd853f",
+ "pink": "#ffc0cb",
+ "plum": "#dda0dd",
+ "powderblue": "#b0e0e6",
+ "rosybrown": "#bc8f8f",
+ "royalblue": "#4169e1",
+ "saddlebrown": "#8b4513",
+ "salmon": "#fa8072",
+ "sandybrown": "#f4a460",
+ "seagreen": "#2e8b57",
+ "seashell": "#fff5ee",
+ "sienna": "#a0522d",
+ "skyblue": "#87ceeb",
+ "slateblue": "#6a5acd",
+ "slategray": "#708090",
+ "slategrey": "#708090",
+ "snow": "#fffafa",
+ "springgreen": "#00ff7f",
+ "steelblue": "#4682b4",
+ "tan": "#d2b48c",
+ "thistle": "#d8bfd8",
+ "tomato": "#ff6347",
+ "turquoise": "#40e0d0",
+ "violet": "#ee82ee",
+ "wheat": "#f5deb3",
+ "whitesmoke": "#f5f5f5",
+ "yellowgreen": "#9acd32",
+ "rebeccapurple": "#663399"
+}
diff --git a/app.config.js b/app.config.js
new file mode 100644
index 00000000..f5182ac9
--- /dev/null
+++ b/app.config.js
@@ -0,0 +1,11 @@
+import 'dotenv/config';
+
+export default {
+ name: 'dooboo',
+ displayName: 'dooboo',
+ entryPoint: 'index.js',
+ packagerOpts: {
+ assetExts: ['ttf', 'png'],
+ sourceExts: ['ts', 'tsx'],
+ },
+};
diff --git a/app.json b/app.json
deleted file mode 100644
index 58c36cba..00000000
--- a/app.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "dooboo",
- "displayName": "dooboo",
- "entryPoint": "index.js",
- "packagerOpts": {
- "assetExts": ["ttf", "png"],
- "sourceExts": ["ts", "tsx"]
- }
-}
diff --git a/assets/langs/en.json b/assets/langs/en.json
deleted file mode 100644
index 54d34e02..00000000
--- a/assets/langs/en.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "HELLO": "Hello",
- "LOGIN": "Login",
- "EMAIL": "Email",
- "PASSWORD": "Password",
- "SIGNUP": "SIGN UP",
- "FORGOT_PW": "Forgot password?",
- "NAVIGATE": "Navigate to %{name}",
- "CHANGE_THEME": "Change theme"
-}
diff --git a/assets/langs/ko.json b/assets/langs/ko.json
deleted file mode 100644
index f2151ca8..00000000
--- a/assets/langs/ko.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "HELLO": "안녕하세요",
- "LOGIN": "로그인",
- "EMAIL": "이메일",
- "PASSWORD": "패스워드",
- "SIGNUP": "회원가입",
- "FORGOT_PW": "비밀번호를 잊어버리셨나요?",
- "NAVIGATE": "%{name}으로 이동",
- "CHANGE_THEME": "테마 변경"
-}
diff --git a/assets/translations/en.json b/assets/translations/en.json
new file mode 100644
index 00000000..3da3cfbe
--- /dev/null
+++ b/assets/translations/en.json
@@ -0,0 +1,15 @@
+{
+ "fb-locale": "en_US",
+ "translations": {
+ "8187f7a32af24a016622027a1aaf7c49": {
+ "tokens": [],
+ "types": [],
+ "translations": [
+ {
+ "translation": "Sign In",
+ "variations": {}
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/assets/translations/ko.json b/assets/translations/ko.json
new file mode 100644
index 00000000..7b882998
--- /dev/null
+++ b/assets/translations/ko.json
@@ -0,0 +1,45 @@
+{
+ "fb-locale": "ko_KR",
+ "translations": {
+ "8187f7a32af24a016622027a1aaf7c49": {
+ "tokens": [],
+ "types": [],
+ "translations": [
+ {
+ "translation": "로그인",
+ "variations": {}
+ }
+ ]
+ },
+ "579290b3f62f0fd93162fd1c69667b80": {
+ "tokens": [],
+ "types": [],
+ "translations": [
+ {
+ "translation": "화면 전환",
+ "variations": {}
+ }
+ ]
+ },
+ "266e827836b82d38073d828285fd7b08": {
+ "tokens": [],
+ "types": [],
+ "translations": [
+ {
+ "translation": "테마 변경",
+ "variations": {}
+ }
+ ]
+ },
+ "d045dda0e2a4f8df14e676e3adbcf94d": {
+ "tokens": [],
+ "types": [],
+ "translations": [
+ {
+ "translation": "뒤로가기",
+ "variations": {}
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/babel.config.js b/babel.config.js
index 7f36c258..47791c68 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,6 +1,16 @@
+const path = require('path');
+
module.exports = {
presets: [
'module:metro-react-native-babel-preset',
'@babel/preset-typescript',
],
+ plugins: [
+ 'babel-plugin-fbt-runtime',
+ ['babel-plugin-fbt', {
+ fbtEnumPath: path.join(__dirname, 'i18n/fbt/.enum_manifest.json'),
+ extraOptions: { __self: true },
+ },
+ ],
+ ],
};
diff --git a/i18n/FbtI18nNativeAssets.js b/i18n/FbtI18nNativeAssets.js
new file mode 100644
index 00000000..1356f8d1
--- /dev/null
+++ b/i18n/FbtI18nNativeAssets.js
@@ -0,0 +1,48 @@
+/**
+ * @generated SignedSource<>
+ *
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * !! This file is synchronized from fbsource. You should not !!
+ * !! modify it directly. Instead: !!
+ * !! !!
+ * !! 1) Update this file on fbsource and land your change there. !!
+ * !! 2) A sync diff should be created and accepted automatically !!
+ * !! within 30 minutes that copies the changes you made on !!
+ * !! fbsource to www. All that's left is to verify the !!
+ * !! revision is good land it on www. !!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ */
+
+'use strict';
+
+import NativeFbtModule from './NativeFbtModule';
+
+const _translationsDictionary: {[hashKey: string]: ?string} = {};
+
+export default class FbtI18nNativeAssets {
+ static getString = (hashKey: string): ?string => {
+ let translatedPayload;
+ if (hashKey in _translationsDictionary) {
+ translatedPayload = _translationsDictionary[hashKey];
+ } else {
+ if (__DEV__ && !global.nativeExtensions && !global.nativeCallSyncHook) {
+ // Chrome debugger does not support synchronous native method.
+ // Thus do not use getString in Chrome debugger.
+ // **Translations will not work while debugging**
+ translatedPayload = null;
+ } else if (NativeFbtModule != null) {
+ translatedPayload = NativeFbtModule.getString(hashKey);
+ }
+ _translationsDictionary[hashKey] = translatedPayload;
+ }
+
+ return translatedPayload;
+ };
+}
diff --git a/i18n/NativeFbtModule.js b/i18n/NativeFbtModule.js
new file mode 100644
index 00000000..13934417
--- /dev/null
+++ b/i18n/NativeFbtModule.js
@@ -0,0 +1,32 @@
+/**
+ * @generated SignedSource<>
+ *
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * !! This file is synchronized from fbsource. You should not !!
+ * !! modify it directly. Instead: !!
+ * !! !!
+ * !! 1) Update this file on fbsource and land your change there. !!
+ * !! 2) A sync diff should be created and accepted automatically !!
+ * !! within 30 minutes that copies the changes you made on !!
+ * !! fbsource to www. All that's left is to verify the !!
+ * !! revision is good land it on www. !!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ */
+
+'use strict';
+
+import {TurboModule} from 'react-native/Libraries/TurboModule/RCTExport';
+import * as TurboModuleRegistry from 'react-native/Libraries/TurboModule/TurboModuleRegistry';
+
+export interface Spec extends TurboModule {
+ getString: (hashKey: string) => string;
+}
+
+export default (TurboModuleRegistry.get('FbtModule'): ?Spec);
diff --git a/i18n/fbt/translatedFbts.json b/i18n/fbt/translatedFbts.json
new file mode 100644
index 00000000..f5372106
--- /dev/null
+++ b/i18n/fbt/translatedFbts.json
@@ -0,0 +1 @@
+{"en_US":{"18yDJU":"Go Back","4rqrl3":"Sign In","3fayOT":"Navigate","zcXn6":"Change Theme"},"ko_KR":{"18yDJU":"뒤로가기","4rqrl3":"로그인","3fayOT":"화면 전환","zcXn6":"테마 변경"}}
\ No newline at end of file
diff --git a/i18n/getTranslatedInput.js b/i18n/getTranslatedInput.js
new file mode 100644
index 00000000..edb09d4b
--- /dev/null
+++ b/i18n/getTranslatedInput.js
@@ -0,0 +1,42 @@
+/**
+ * @generated SignedSource<<64f5f834628fc680784f95cc3842b80e>>
+ *
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * !! This file is synchronized from fbsource. You should not !!
+ * !! modify it directly. Instead: !!
+ * !! !!
+ * !! 1) Update this file on fbsource and land your change there. !!
+ * !! 2) A sync diff should be created and accepted automatically !!
+ * !! within 30 minutes that copies the changes you made on !!
+ * !! fbsource to www. All that's left is to verify the !!
+ * !! revision is good land it on www. !!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ */
+
+'use strict';
+
+import type {FbtRuntimeCallInput, FbtTranslatedInput} from 'fbt/lib/FbtHooks';
+
+import FbtI18nNativeAssets from './FbtI18nNativeAssets';
+
+function getTranslatedInput(
+ input: FbtRuntimeCallInput,
+): ?FbtTranslatedInput {
+ const {options} = input;
+ if (options.hk != null) {
+ let translatedPayload = FbtI18nNativeAssets.getString(options.hk);
+ if (translatedPayload) {
+ return {table: JSON.parse(translatedPayload), args: input.args};
+ }
+ }
+ return null;
+}
+
+export {getTranslatedInput};
diff --git a/i18n/scripts/generate-android-localizables-executor.js b/i18n/scripts/generate-android-localizables-executor.js
new file mode 100644
index 00000000..c7f93382
--- /dev/null
+++ b/i18n/scripts/generate-android-localizables-executor.js
@@ -0,0 +1,71 @@
+/**
+ * @generated SignedSource<<342c45ee3cb664f60d81eea85f914c6f>>
+ *
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * !! This file is synchronized from fbsource. You should not !!
+ * !! modify it directly. Instead: !!
+ * !! !!
+ * !! 1) Update this file on fbsource and land your change there. !!
+ * !! 2) A sync diff should be created and accepted automatically !!
+ * !! within 30 minutes that copies the changes you made on !!
+ * !! fbsource to www. All that's left is to verify the !!
+ * !! revision is good land it on www. !!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ *
+ * Nice wraper to use generate-android-localizables from babel node directly
+ */
+
+'use strict';
+
+const {
+ generateAndroidLocalizableFiles,
+} = require('./generate-android-localizables');
+const fs = require('fs');
+const yargs = require('yargs');
+
+const args = {
+ HELP: 'h',
+ TRANSLATION_OUTPUT: 'translationOutput',
+ ANDROID_RES_DIR: 'androidResDir',
+ TRANSLATIONS_FILENAME: 'translationsFilename',
+};
+
+const argv = yargs
+ .usage(
+ 'Take translations output, and write individual JSON files for each ' +
+ 'locale: raw-es_rES/localizable.json => {: translatedString}',
+ )
+ .string(args.TRANSLATION_OUTPUT)
+ .default(args.TRANSLATION_OUTPUT, './i18n/fbt/translatedFbts.json')
+ .describe(args.TRANSLATION_OUTPUT, `path to the translatedFbts`)
+ .string(args.ANDROID_RES_DIR)
+ .default(args.ANDROID_RES_DIR, 'android/app/src/main/res')
+ .describe(
+ args.ANDROID_RES_DIR,
+ `path to the res folder of your android application`,
+ )
+ .string(args.TRANSLATIONS_FILENAME)
+ .default(args.TRANSLATIONS_FILENAME, 'localizable.json')
+ .describe(
+ args.TRANSLATIONS_FILENAME,
+ `name that json translation files should take`,
+ ).argv;
+
+if (argv[args.HELP]) {
+ yargs.showHelp();
+ process.exit(0);
+}
+
+generateAndroidLocalizableFiles(
+ JSON.parse(
+ fs.readFileSync(argv[args.TRANSLATION_OUTPUT], {encoding: 'utf8'}),
+ ),
+ argv[args.ANDROID_RES_DIR],
+ argv[args.TRANSLATIONS_FILENAME],
+);
diff --git a/i18n/scripts/generate-android-localizables.js b/i18n/scripts/generate-android-localizables.js
new file mode 100644
index 00000000..8a431bae
--- /dev/null
+++ b/i18n/scripts/generate-android-localizables.js
@@ -0,0 +1,87 @@
+/**
+ * @generated SignedSource<<8eb51a2ebfe40bc40fca79cd0f9cc1fc>>
+ *
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * !! This file is synchronized from fbsource. You should not !!
+ * !! modify it directly. Instead: !!
+ * !! !!
+ * !! 1) Update this file on fbsource and land your change there. !!
+ * !! 2) A sync diff should be created and accepted automatically !!
+ * !! within 30 minutes that copies the changes you made on !!
+ * !! fbsource to www. All that's left is to verify the !!
+ * !! revision is good land it on www. !!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @flow strict-local
+ */
+
+import type {TranslationScriptOutput} from './translate-fbts';
+
+const invariant = require('invariant');
+const fs = require('fs');
+const path = require('path');
+
+/**
+ * Generates locales that comply with Android resources format
+ * https://developer.android.com/guide/topics/resources/providing-resources
+ *
+ * @param locale Locale in the form langCode_regionCode.
+ * @return Locale in the form langCode-rRegionCode.
+ */
+function generateAndroidLocale(locale: string): string {
+ const langRegionCode = locale.split('_');
+ invariant(
+ langRegionCode.length == 2,
+ 'Lang-region array must have two items',
+ );
+ return `${langRegionCode[0]}-r${langRegionCode[1]}`;
+}
+
+function jsonEncodeValues(localeValues) {
+ const encodedValues = {};
+ for (const hash in localeValues) {
+ encodedValues[hash] = JSON.stringify(localeValues[hash]);
+ }
+ return encodedValues;
+}
+
+/**
+ * Take translations output, and write individual JSON files for each locale
+ * raw-es_rES/localizable.json => {: translatedString}
+ * raw-ru_rRU/localizable.json
+ */
+function generateAndroidLocalizableFiles(
+ translationOutput: TranslationScriptOutput,
+ androidResDir: string,
+ translationsFileName: string,
+) {
+ try {
+ for (const locale in translationOutput) {
+ const androidLocale = generateAndroidLocale(locale);
+ const rawXXDir = path.join(androidResDir, `raw-${androidLocale}`);
+
+ if (!fs.existsSync(rawXXDir)) {
+ fs.mkdirSync(rawXXDir);
+ }
+ fs.writeFileSync(
+ path.join(rawXXDir, translationsFileName),
+ JSON.stringify(jsonEncodeValues(translationOutput[locale])),
+ {encoding: 'utf8'},
+ );
+ }
+ } catch (error) {
+ console.error('An error ocurred while generating the android localizables');
+ console.error(error);
+ process.exit(1);
+ throw error;
+ }
+}
+
+module.exports = {
+ generateAndroidLocalizableFiles,
+};
diff --git a/ios/Podfile b/ios/Podfile
index 1f61546d..97bdf23e 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -1,7 +1,7 @@
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
-platform :ios, '10.0'
+platform :ios, '11.0'
target 'dooboo' do
config = use_native_modules!
@@ -20,14 +20,12 @@ target 'dooboo' do
use_flipper!
post_install do |installer|
flipper_post_install(installer)
- end
-end
-
-target 'dooboo-tvOS' do
- # Pods for dooboo-tvOS
-
- target 'dooboo-tvOSTests' do
- inherit! :search_paths
- # Pods for testing
+ installer.pods_project.targets.each do |target|
+ target.build_configurations.each do |config|
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
+ config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
+ config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
+ end
+ end
end
end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 9ac9553b..83f3f38e 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -3,58 +3,58 @@ PODS:
- CocoaAsyncSocket (7.6.4)
- CocoaLibEvent (1.0.0)
- DoubleConversion (1.1.6)
- - FBLazyVector (0.63.2)
- - FBReactNativeSpec (0.63.2):
+ - FBLazyVector (0.63.4)
+ - FBReactNativeSpec (0.63.4):
- Folly (= 2020.01.13.00)
- - RCTRequired (= 0.63.2)
- - RCTTypeSafety (= 0.63.2)
- - React-Core (= 0.63.2)
- - React-jsi (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - Flipper (0.41.5):
+ - RCTRequired (= 0.63.4)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - Flipper (0.54.0):
- Flipper-Folly (~> 2.2)
- Flipper-RSocket (~> 1.1)
- Flipper-DoubleConversion (1.1.7)
- - Flipper-Folly (2.2.0):
+ - Flipper-Folly (2.3.0):
- boost-for-react-native
- CocoaLibEvent (~> 1.0)
- Flipper-DoubleConversion
- Flipper-Glog
- - OpenSSL-Universal (= 1.0.2.19)
+ - OpenSSL-Universal (= 1.0.2.20)
- Flipper-Glog (0.3.6)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.1.0):
- Flipper-Folly (~> 2.2)
- - FlipperKit (0.41.5):
- - FlipperKit/Core (= 0.41.5)
- - FlipperKit/Core (0.41.5):
- - Flipper (~> 0.41.5)
+ - FlipperKit (0.54.0):
+ - FlipperKit/Core (= 0.54.0)
+ - FlipperKit/Core (0.54.0):
+ - Flipper (~> 0.54.0)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- - FlipperKit/CppBridge (0.41.5):
- - Flipper (~> 0.41.5)
- - FlipperKit/FBCxxFollyDynamicConvert (0.41.5):
+ - FlipperKit/CppBridge (0.54.0):
+ - Flipper (~> 0.54.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (0.54.0):
- Flipper-Folly (~> 2.2)
- - FlipperKit/FBDefines (0.41.5)
- - FlipperKit/FKPortForwarding (0.41.5):
+ - FlipperKit/FBDefines (0.54.0)
+ - FlipperKit/FKPortForwarding (0.54.0):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- - FlipperKit/FlipperKitHighlightOverlay (0.41.5)
- - FlipperKit/FlipperKitLayoutPlugin (0.41.5):
+ - FlipperKit/FlipperKitHighlightOverlay (0.54.0)
+ - FlipperKit/FlipperKitLayoutPlugin (0.54.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- - FlipperKit/FlipperKitLayoutTextSearchable (0.41.5)
- - FlipperKit/FlipperKitNetworkPlugin (0.41.5):
+ - FlipperKit/FlipperKitLayoutTextSearchable (0.54.0)
+ - FlipperKit/FlipperKitNetworkPlugin (0.54.0):
- FlipperKit/Core
- - FlipperKit/FlipperKitReactPlugin (0.41.5):
+ - FlipperKit/FlipperKitReactPlugin (0.54.0):
- FlipperKit/Core
- - FlipperKit/FlipperKitUserDefaultsPlugin (0.41.5):
+ - FlipperKit/FlipperKitUserDefaultsPlugin (0.54.0):
- FlipperKit/Core
- - FlipperKit/SKIOSNetworkPlugin (0.41.5):
+ - FlipperKit/SKIOSNetworkPlugin (0.54.0):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- Folly (2020.01.13.00):
@@ -67,249 +67,249 @@ PODS:
- DoubleConversion
- glog
- glog (0.3.5)
- - OpenSSL-Universal (1.0.2.19):
- - OpenSSL-Universal/Static (= 1.0.2.19)
- - OpenSSL-Universal/Static (1.0.2.19)
- - RCTRequired (0.63.2)
- - RCTTypeSafety (0.63.2):
- - FBLazyVector (= 0.63.2)
+ - OpenSSL-Universal (1.0.2.20):
+ - OpenSSL-Universal/Static (= 1.0.2.20)
+ - OpenSSL-Universal/Static (1.0.2.20)
+ - RCTRequired (0.63.4)
+ - RCTTypeSafety (0.63.4):
+ - FBLazyVector (= 0.63.4)
- Folly (= 2020.01.13.00)
- - RCTRequired (= 0.63.2)
- - React-Core (= 0.63.2)
- - React (0.63.2):
- - React-Core (= 0.63.2)
- - React-Core/DevSupport (= 0.63.2)
- - React-Core/RCTWebSocket (= 0.63.2)
- - React-RCTActionSheet (= 0.63.2)
- - React-RCTAnimation (= 0.63.2)
- - React-RCTBlob (= 0.63.2)
- - React-RCTImage (= 0.63.2)
- - React-RCTLinking (= 0.63.2)
- - React-RCTNetwork (= 0.63.2)
- - React-RCTSettings (= 0.63.2)
- - React-RCTText (= 0.63.2)
- - React-RCTVibration (= 0.63.2)
- - React-callinvoker (0.63.2)
- - React-Core (0.63.2):
+ - RCTRequired (= 0.63.4)
+ - React-Core (= 0.63.4)
+ - React (0.63.4):
+ - React-Core (= 0.63.4)
+ - React-Core/DevSupport (= 0.63.4)
+ - React-Core/RCTWebSocket (= 0.63.4)
+ - React-RCTActionSheet (= 0.63.4)
+ - React-RCTAnimation (= 0.63.4)
+ - React-RCTBlob (= 0.63.4)
+ - React-RCTImage (= 0.63.4)
+ - React-RCTLinking (= 0.63.4)
+ - React-RCTNetwork (= 0.63.4)
+ - React-RCTSettings (= 0.63.4)
+ - React-RCTText (= 0.63.4)
+ - React-RCTVibration (= 0.63.4)
+ - React-callinvoker (0.63.4)
+ - React-Core (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- - React-Core/Default (= 0.63.2)
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-Core/Default (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/CoreModulesHeaders (0.63.2):
+ - React-Core/CoreModulesHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/Default (0.63.2):
+ - React-Core/Default (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/DevSupport (0.63.2):
+ - React-Core/DevSupport (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- - React-Core/Default (= 0.63.2)
- - React-Core/RCTWebSocket (= 0.63.2)
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
- - React-jsinspector (= 0.63.2)
+ - React-Core/Default (= 0.63.4)
+ - React-Core/RCTWebSocket (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - React-jsinspector (= 0.63.4)
- Yoga
- - React-Core/RCTActionSheetHeaders (0.63.2):
+ - React-Core/RCTActionSheetHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTAnimationHeaders (0.63.2):
+ - React-Core/RCTAnimationHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTBlobHeaders (0.63.2):
+ - React-Core/RCTBlobHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTImageHeaders (0.63.2):
+ - React-Core/RCTImageHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTLinkingHeaders (0.63.2):
+ - React-Core/RCTLinkingHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTNetworkHeaders (0.63.2):
+ - React-Core/RCTNetworkHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTSettingsHeaders (0.63.2):
+ - React-Core/RCTSettingsHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTTextHeaders (0.63.2):
+ - React-Core/RCTTextHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTVibrationHeaders (0.63.2):
+ - React-Core/RCTVibrationHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-Core/RCTWebSocket (0.63.2):
+ - React-Core/RCTWebSocket (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- - React-Core/Default (= 0.63.2)
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsiexecutor (= 0.63.2)
+ - React-Core/Default (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
- Yoga
- - React-CoreModules (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
+ - React-CoreModules (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- - RCTTypeSafety (= 0.63.2)
- - React-Core/CoreModulesHeaders (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-RCTImage (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - React-cxxreact (0.63.2):
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/CoreModulesHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-RCTImage (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-cxxreact (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2020.01.13.00)
- glog
- - React-callinvoker (= 0.63.2)
- - React-jsinspector (= 0.63.2)
- - React-jsi (0.63.2):
+ - React-callinvoker (= 0.63.4)
+ - React-jsinspector (= 0.63.4)
+ - React-jsi (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2020.01.13.00)
- glog
- - React-jsi/Default (= 0.63.2)
- - React-jsi/Default (0.63.2):
+ - React-jsi/Default (= 0.63.4)
+ - React-jsi/Default (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2020.01.13.00)
- glog
- - React-jsiexecutor (0.63.2):
+ - React-jsiexecutor (0.63.4):
- DoubleConversion
- Folly (= 2020.01.13.00)
- glog
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-jsinspector (0.63.2)
- - react-native-safe-area-context (3.1.8):
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsinspector (0.63.4)
+ - react-native-fbt (0.0.1):
+ - React
+ - react-native-safe-area-context (3.1.9):
- React-Core
- - React-RCTActionSheet (0.63.2):
- - React-Core/RCTActionSheetHeaders (= 0.63.2)
- - React-RCTAnimation (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
+ - React-RCTActionSheet (0.63.4):
+ - React-Core/RCTActionSheetHeaders (= 0.63.4)
+ - React-RCTAnimation (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- - RCTTypeSafety (= 0.63.2)
- - React-Core/RCTAnimationHeaders (= 0.63.2)
- - React-jsi (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - React-RCTBlob (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTAnimationHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTBlob (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- - React-Core/RCTBlobHeaders (= 0.63.2)
- - React-Core/RCTWebSocket (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-RCTNetwork (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - React-RCTImage (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
+ - React-Core/RCTBlobHeaders (= 0.63.4)
+ - React-Core/RCTWebSocket (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-RCTNetwork (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTImage (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- - RCTTypeSafety (= 0.63.2)
- - React-Core/RCTImageHeaders (= 0.63.2)
- - React-jsi (= 0.63.2)
- - React-RCTNetwork (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - React-RCTLinking (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
- - React-Core/RCTLinkingHeaders (= 0.63.2)
- - React-jsi (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - React-RCTNetwork (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTImageHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-RCTNetwork (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTLinking (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - React-Core/RCTLinkingHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTNetwork (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- - RCTTypeSafety (= 0.63.2)
- - React-Core/RCTNetworkHeaders (= 0.63.2)
- - React-jsi (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - React-RCTSettings (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTNetworkHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTSettings (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- - RCTTypeSafety (= 0.63.2)
- - React-Core/RCTSettingsHeaders (= 0.63.2)
- - React-jsi (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - React-RCTText (0.63.2):
- - React-Core/RCTTextHeaders (= 0.63.2)
- - React-RCTVibration (0.63.2):
- - FBReactNativeSpec (= 0.63.2)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTSettingsHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTText (0.63.4):
+ - React-Core/RCTTextHeaders (= 0.63.4)
+ - React-RCTVibration (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- - React-Core/RCTVibrationHeaders (= 0.63.2)
- - React-jsi (= 0.63.2)
- - ReactCommon/turbomodule/core (= 0.63.2)
- - ReactCommon/turbomodule/core (0.63.2):
+ - React-Core/RCTVibrationHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - ReactCommon/turbomodule/core (0.63.4):
- DoubleConversion
- Folly (= 2020.01.13.00)
- glog
- - React-callinvoker (= 0.63.2)
- - React-Core (= 0.63.2)
- - React-cxxreact (= 0.63.2)
- - React-jsi (= 0.63.2)
- - RNCAsyncStorage (1.12.0):
- - React
+ - React-callinvoker (= 0.63.4)
+ - React-Core (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - RNCAsyncStorage (1.12.1):
+ - React-Core
- RNCMaskedView (0.1.10):
- React
- - RNGestureHandler (1.8.0):
- - React
- - RNLocalize (1.4.1):
- - React
- - RNReanimated (1.13.1):
- - React
- - RNScreens (2.11.0):
- - React
+ - RNGestureHandler (1.9.0):
+ - React-Core
+ - RNReanimated (1.13.2):
+ - React-Core
+ - RNScreens (2.16.1):
+ - React-Core
- Yoga (1.14.0)
- YogaKit (1.18.1):
- Yoga (~> 1.14)
@@ -318,25 +318,25 @@ DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
- - Flipper (~> 0.41.1)
+ - Flipper (~> 0.54.0)
- Flipper-DoubleConversion (= 1.1.7)
- Flipper-Folly (~> 2.2)
- Flipper-Glog (= 0.3.6)
- Flipper-PeerTalk (~> 0.0.4)
- Flipper-RSocket (~> 1.1)
- - FlipperKit (~> 0.41.1)
- - FlipperKit/Core (~> 0.41.1)
- - FlipperKit/CppBridge (~> 0.41.1)
- - FlipperKit/FBCxxFollyDynamicConvert (~> 0.41.1)
- - FlipperKit/FBDefines (~> 0.41.1)
- - FlipperKit/FKPortForwarding (~> 0.41.1)
- - FlipperKit/FlipperKitHighlightOverlay (~> 0.41.1)
- - FlipperKit/FlipperKitLayoutPlugin (~> 0.41.1)
- - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.41.1)
- - FlipperKit/FlipperKitNetworkPlugin (~> 0.41.1)
- - FlipperKit/FlipperKitReactPlugin (~> 0.41.1)
- - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.41.1)
- - FlipperKit/SKIOSNetworkPlugin (~> 0.41.1)
+ - FlipperKit (~> 0.54.0)
+ - FlipperKit/Core (~> 0.54.0)
+ - FlipperKit/CppBridge (~> 0.54.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (~> 0.54.0)
+ - FlipperKit/FBDefines (~> 0.54.0)
+ - FlipperKit/FKPortForwarding (~> 0.54.0)
+ - FlipperKit/FlipperKitHighlightOverlay (~> 0.54.0)
+ - FlipperKit/FlipperKitLayoutPlugin (~> 0.54.0)
+ - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.54.0)
+ - FlipperKit/FlipperKitNetworkPlugin (~> 0.54.0)
+ - FlipperKit/FlipperKitReactPlugin (~> 0.54.0)
+ - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.54.0)
+ - FlipperKit/SKIOSNetworkPlugin (~> 0.54.0)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
@@ -351,6 +351,7 @@ DEPENDENCIES:
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
+ - react-native-fbt (from `../node_modules/react-native-fbt`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
@@ -365,7 +366,6 @@ DEPENDENCIES:
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- - RNLocalize (from `../node_modules/react-native-localize`)
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
@@ -416,6 +416,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector:
:path: "../node_modules/react-native/ReactCommon/jsinspector"
+ react-native-fbt:
+ :path: "../node_modules/react-native-fbt"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
React-RCTActionSheet:
@@ -444,8 +446,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/@react-native-community/masked-view"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
- RNLocalize:
- :path: "../node_modules/react-native-localize"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
@@ -458,48 +458,48 @@ SPEC CHECKSUMS:
CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
DoubleConversion: cde416483dac037923206447da6e1454df403714
- FBLazyVector: 3ef4a7f62e7db01092f9d517d2ebc0d0677c4a37
- FBReactNativeSpec: dc7fa9088f0f2a998503a352b0554d69a4391c5a
- Flipper: 33585e2d9810fe5528346be33bcf71b37bb7ae13
+ FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
+ FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e
+ Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
- Flipper-Folly: c12092ea368353b58e992843a990a3225d4533c3
+ Flipper-Folly: e4493b013c02d9347d5e0cb4d128680239f6c78a
Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7
- FlipperKit: bc68102cd4952a258a23c9c1b316c7bec1fecf83
+ FlipperKit: ab353d41aea8aae2ea6daaf813e67496642f3d7d
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
- OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
- RCTRequired: f13f25e7b12f925f1f6a6a8c69d929a03c0129fe
- RCTTypeSafety: 44982c5c8e43ff4141eb519a8ddc88059acd1f3a
- React: e1c65dd41cb9db13b99f24608e47dd595f28ca9a
- React-callinvoker: 552a6a6bc8b3bb794cf108ad59e5a9e2e3b4fc98
- React-Core: 9d341e725dc9cd2f49e4c49ad1fc4e8776aa2639
- React-CoreModules: 5335e168165da7f7083ce7147768d36d3e292318
- React-cxxreact: d3261ec5f7d11743fbf21e263a34ea51d1f13ebc
- React-jsi: 54245e1d5f4b690dec614a73a3795964eeef13a8
- React-jsiexecutor: 8ca588cc921e70590820ce72b8789b02c67cce38
- React-jsinspector: b14e62ebe7a66e9231e9581279909f2fc3db6606
- react-native-safe-area-context: 79fea126c6830c85f65947c223a5e3058a666937
- React-RCTActionSheet: 910163b6b09685a35c4ebbc52b66d1bfbbe39fc5
- React-RCTAnimation: 9a883bbe1e9d2e158d4fb53765ed64c8dc2200c6
- React-RCTBlob: 39cf0ece1927996c4466510e25d2105f67010e13
- React-RCTImage: de355d738727b09ad3692f2a979affbd54b5f378
- React-RCTLinking: 8122f221d395a63364b2c0078ce284214bd04575
- React-RCTNetwork: 8f96c7b49ea6a0f28f98258f347b6ad218bc0830
- React-RCTSettings: 8a49622aff9c1925f5455fa340b6fe4853d64ab6
- React-RCTText: 1b6773e776e4b33f90468c20fe3b16ca3e224bb8
- React-RCTVibration: 4d2e726957f4087449739b595f107c0d4b6c2d2d
- ReactCommon: a0a1edbebcac5e91338371b72ffc66aa822792ce
- RNCAsyncStorage: 2a692bcb9b69b76a2f1a95f33db057129700af64
+ OpenSSL-Universal: ff34003318d5e1163e9529b08470708e389ffcdd
+ RCTRequired: 082f10cd3f905d6c124597fd1c14f6f2655ff65e
+ RCTTypeSafety: 8c9c544ecbf20337d069e4ae7fd9a377aadf504b
+ React: b0a957a2c44da4113b0c4c9853d8387f8e64e615
+ React-callinvoker: c3f44dd3cb195b6aa46621fff95ded79d59043fe
+ React-Core: d3b2a1ac9a2c13c3bcde712d9281fc1c8a5b315b
+ React-CoreModules: 0581ff36cb797da0943d424f69e7098e43e9be60
+ React-cxxreact: c1480d4fda5720086c90df537ee7d285d4c57ac3
+ React-jsi: a0418934cf48f25b485631deb27c64dc40fb4c31
+ React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949
+ React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a
+ react-native-fbt: 6f5cf86b6c1f407856dd2ae68024d2a1f49a33b3
+ react-native-safe-area-context: b6e0e284002381d2ff29fa4fff42b4d8282e3c94
+ React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
+ React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
+ React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0
+ React-RCTImage: c1b1f2d3f43a4a528c8946d6092384b5c880d2f0
+ React-RCTLinking: 35ae4ab9dc0410d1fcbdce4d7623194a27214fb2
+ React-RCTNetwork: 29ec2696f8d8cfff7331fac83d3e893c95ef43ae
+ React-RCTSettings: 60f0691bba2074ef394f95d4c2265ec284e0a46a
+ React-RCTText: 5c51df3f08cb9dedc6e790161195d12bac06101c
+ React-RCTVibration: ae4f914cfe8de7d4de95ae1ea6cc8f6315d73d9d
+ ReactCommon: 73d79c7039f473b76db6ff7c6b159c478acbbb3b
+ RNCAsyncStorage: b03032fdbdb725bea0bd9e5ec5a7272865ae7398
RNCMaskedView: 5a8ec07677aa885546a0d98da336457e2bea557f
- RNGestureHandler: 7a5833d0f788dbd107fbb913e09aa0c1ff333c39
- RNLocalize: 49634a6a605dcdeb319e9c42a5c2f1aec508694b
- RNReanimated: dd8c286ab5dd4ba36d3a7fef8bff7e08711b5476
- RNScreens: 0e91da98ab26d5d04c7b59a9b6bd694124caf88c
- Yoga: 7740b94929bbacbddda59bf115b5317e9a161598
+ RNGestureHandler: 9b7e605a741412e20e13c512738a31bd1611759b
+ RNReanimated: e03f7425cb7a38dcf1b644d680d1bfc91c3337ad
+ RNScreens: 45c457af3d2ee9e08fc01e70da87e653d46b1198
+ Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
-PODFILE CHECKSUM: 73f909c2b4533e55ed87d09d4f712b98f76fa947
+PODFILE CHECKSUM: 01b4c2c0870cfc4db814a311c242840c221c0baa
-COCOAPODS: 1.9.3
+COCOAPODS: 1.10.0
diff --git a/ios/dooboo.xcodeproj/project.pbxproj b/ios/dooboo.xcodeproj/project.pbxproj
index 1fa8aeb0..d747b0c0 100644
--- a/ios/dooboo.xcodeproj/project.pbxproj
+++ b/ios/dooboo.xcodeproj/project.pbxproj
@@ -12,13 +12,11 @@
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 2C2F24E9C70DB46763B59EBD /* libPods-dooboo-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 12E824000AE1642C8D8AE62F /* libPods-dooboo-tvOSTests.a */; };
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2DCD954D1E0B4F2C00145EB5 /* doobooTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* doobooTests.m */; };
386370538CEF1D2DCB8A5E71 /* libPods-dooboo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F97A477A04E5A0CE527DC64B /* libPods-dooboo.a */; };
- 3D43E79D64940A68AE921F45 /* libPods-dooboo-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DC92724D93ECB64F4F8D5C98 /* libPods-dooboo-tvOS.a */; };
7ED01A28318BAEC924CF05DC /* libPods-dooboo-doobooTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D1E2A78FA19AD6D2670147 /* libPods-dooboo-doobooTests.a */; };
/* End PBXBuildFile section */
@@ -44,9 +42,6 @@
00E356EE1AD99517003FC87E /* doobooTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = doobooTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
00E356F21AD99517003FC87E /* doobooTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = doobooTests.m; sourceTree = ""; };
- 0BAA10794AB471D92AE08F3E /* Pods-dooboo-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-dooboo-tvOSTests/Pods-dooboo-tvOSTests.release.xcconfig"; sourceTree = ""; };
- 12E0E58F6E4EA64DC50675A9 /* Pods-dooboo-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo-tvOS.release.xcconfig"; path = "Target Support Files/Pods-dooboo-tvOS/Pods-dooboo-tvOS.release.xcconfig"; sourceTree = ""; };
- 12E824000AE1642C8D8AE62F /* libPods-dooboo-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dooboo-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
13B07F961A680F5B00A75B9A /* dooboo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dooboo.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = dooboo/AppDelegate.h; sourceTree = ""; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = dooboo/AppDelegate.m; sourceTree = ""; };
@@ -56,14 +51,11 @@
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = dooboo/main.m; sourceTree = ""; };
24FE732FDF9BA60D44E52033 /* Pods-dooboo-doobooTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo-doobooTests.debug.xcconfig"; path = "Target Support Files/Pods-dooboo-doobooTests/Pods-dooboo-doobooTests.debug.xcconfig"; sourceTree = ""; };
27D1E2A78FA19AD6D2670147 /* libPods-dooboo-doobooTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dooboo-doobooTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 2984CEDFA03E33646B8EE484 /* Pods-dooboo-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-dooboo-tvOSTests/Pods-dooboo-tvOSTests.debug.xcconfig"; sourceTree = ""; };
2D02E47B1E0B4A5D006451C7 /* dooboo-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "dooboo-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
2D02E4901E0B4A5D006451C7 /* dooboo-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "dooboo-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
48CBD2C8CC19555343597BB2 /* Pods-dooboo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo.release.xcconfig"; path = "Target Support Files/Pods-dooboo/Pods-dooboo.release.xcconfig"; sourceTree = ""; };
55B7D9F61F111B13C977C0DE /* Pods-dooboo-doobooTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo-doobooTests.release.xcconfig"; path = "Target Support Files/Pods-dooboo-doobooTests/Pods-dooboo-doobooTests.release.xcconfig"; sourceTree = ""; };
- 8585EE60D8938FD9B7BF8684 /* Pods-dooboo-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-dooboo-tvOS/Pods-dooboo-tvOS.debug.xcconfig"; sourceTree = ""; };
921D8784156B2139E974811E /* Pods-dooboo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dooboo.debug.xcconfig"; path = "Target Support Files/Pods-dooboo/Pods-dooboo.debug.xcconfig"; sourceTree = ""; };
- DC92724D93ECB64F4F8D5C98 /* libPods-dooboo-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dooboo-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
F97A477A04E5A0CE527DC64B /* libPods-dooboo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dooboo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -90,7 +82,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 3D43E79D64940A68AE921F45 /* libPods-dooboo-tvOS.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -98,7 +89,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 2C2F24E9C70DB46763B59EBD /* libPods-dooboo-tvOSTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -143,10 +133,6 @@
48CBD2C8CC19555343597BB2 /* Pods-dooboo.release.xcconfig */,
24FE732FDF9BA60D44E52033 /* Pods-dooboo-doobooTests.debug.xcconfig */,
55B7D9F61F111B13C977C0DE /* Pods-dooboo-doobooTests.release.xcconfig */,
- 8585EE60D8938FD9B7BF8684 /* Pods-dooboo-tvOS.debug.xcconfig */,
- 12E0E58F6E4EA64DC50675A9 /* Pods-dooboo-tvOS.release.xcconfig */,
- 2984CEDFA03E33646B8EE484 /* Pods-dooboo-tvOSTests.debug.xcconfig */,
- 0BAA10794AB471D92AE08F3E /* Pods-dooboo-tvOSTests.release.xcconfig */,
);
name = Pods;
path = Pods;
@@ -159,8 +145,6 @@
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
F97A477A04E5A0CE527DC64B /* libPods-dooboo.a */,
27D1E2A78FA19AD6D2670147 /* libPods-dooboo-doobooTests.a */,
- DC92724D93ECB64F4F8D5C98 /* libPods-dooboo-tvOS.a */,
- 12E824000AE1642C8D8AE62F /* libPods-dooboo-tvOSTests.a */,
);
name = Frameworks;
sourceTree = "";
@@ -246,7 +230,6 @@
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "dooboo-tvOS" */;
buildPhases = (
- 2DE459A6844CB2A9CB9C1F07 /* [CP] Check Pods Manifest.lock */,
FD10A7F122414F3F0027D42C /* Start Packager */,
2D02E4771E0B4A5D006451C7 /* Sources */,
2D02E4781E0B4A5D006451C7 /* Frameworks */,
@@ -266,7 +249,6 @@
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "dooboo-tvOSTests" */;
buildPhases = (
- 705AC4BDDB402A7C8D7237C2 /* [CP] Check Pods Manifest.lock */,
2D02E48C1E0B4A5D006451C7 /* Sources */,
2D02E48D1E0B4A5D006451C7 /* Frameworks */,
2D02E48E1E0B4A5D006451C7 /* Resources */,
@@ -391,50 +373,6 @@
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
- 2DE459A6844CB2A9CB9C1F07 /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-dooboo-tvOS-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
- showEnvVarsInLog = 0;
- };
- 705AC4BDDB402A7C8D7237C2 /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-dooboo-tvOSTests-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
- showEnvVarsInLog = 0;
- };
7D6619BBAE3F2D6D5FAE2DCF /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -711,7 +649,6 @@
};
2D02E4971E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 8585EE60D8938FD9B7BF8684 /* Pods-dooboo-tvOS.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
@@ -739,7 +676,6 @@
};
2D02E4981E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 12E0E58F6E4EA64DC50675A9 /* Pods-dooboo-tvOS.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
@@ -767,7 +703,6 @@
};
2D02E4991E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 2984CEDFA03E33646B8EE484 /* Pods-dooboo-tvOSTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
@@ -794,7 +729,6 @@
};
2D02E49A1E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 0BAA10794AB471D92AE08F3E /* Pods-dooboo-tvOSTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
diff --git a/package.json b/package.json
index 8dbb3962..8794906f 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,7 @@
"private": true,
"postinstall": "npx jetify",
"scripts": {
+ "postinstall": "yarn fbt:all",
"dev": "node node_modules/react-native/local-cli/cli.js start",
"tsc": "tsc",
"watch": "tsc -w",
@@ -31,51 +32,63 @@
"ios:reset": "rm -rf ios/build/ModuleCache",
"lint": "eslint src --ext .ts,.tsx,.js,.jsx",
"build:ios": "react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ./ios",
- "build:android": "react-native bundle --entry-file index.js --platform android --dev false --bundle-output android/main.jsbundle --assets-dest ./android"
+ "build:android": "react-native bundle --entry-file index.js --platform android --dev false --bundle-output android/main.jsbundle --assets-dest ./android",
+ "manifest": "babel-node ./node_modules/babel-plugin-fbt/bin/manifest --src src/ --enum-manifest i18n/fbt/.enum_manifest.json --src-manifest i18n/fbt/.src_manifest.json",
+ "collect-fbts": "babel-node ./node_modules/babel-plugin-fbt/bin/collectFBT --hash-module 'fb-tiger-hash/src/hashPhrases' --react-native-mode --manifest --options __self < i18n/fbt/.src_manifest.json > i18n/fbt/.source_strings.json",
+ "translate-fbts": "babel-node ./node_modules/babel-plugin-fbt/bin/translate.js --jenkins --source-strings i18n/fbt/.source_strings.json --translations assets/translations/*.json > i18n/fbt/translatedFbts.json",
+ "clean-fbts": "rm i18n/fbt/.enum_manifest.json i18n/fbt/.src_manifest.json i18n/fbt/.source_strings.json assets/translatedFbts.json 2&> /dev/null || exit 0",
+ "fbt:all": "yarn manifest && yarn collect-fbts && yarn translate-fbts",
+ "fbt:android": "babel-node i18n/scripts/generate-android-localizables-executor.js"
},
"dependencies": {
- "@dooboo-ui/native-theme": "^0.1.7",
+ "@dooboo-ui/theme": "^0.0.3",
"@react-native-community/async-storage": "^1.12.0",
"@react-native-community/masked-view": "^0.1.10",
- "@react-navigation/core": "^5.14.1",
- "@react-navigation/native": "^5.8.7",
- "@react-navigation/stack": "^5.12.4",
- "i18n-js": "^3.8.0",
+ "@react-navigation/core": "^5.14.4",
+ "@react-navigation/native": "^5.8.10",
+ "@react-navigation/stack": "^5.12.8",
+ "fbt": "^0.16.0",
"react": "16.13.1",
- "react-native": "0.63.3",
- "react-native-gesture-handler": "^1.8.0",
- "react-native-localize": "^1.4.3",
- "react-native-reanimated": "^1.13.1",
- "react-native-safe-area-context": "^3.1.8",
- "react-native-screens": "^2.13.0",
+ "react-native": "0.63.4",
+ "react-native-gesture-handler": "^1.9.0",
+ "react-native-reanimated": "^1.13.2",
+ "react-native-safe-area-context": "^3.1.9",
+ "react-native-screens": "^2.16.1",
"styled-components": "^5.2.1"
},
"devDependencies": {
- "@babel/cli": "^7.12.1",
- "@babel/core": "^7.12.3",
- "@babel/preset-typescript": "^7.12.1",
+ "@babel/cli": "^7.12.10",
+ "@babel/core": "^7.12.10",
+ "@babel/node": "^7.12.10",
+ "@babel/preset-typescript": "^7.12.7",
"@babel/runtime": "^7.12.5",
- "@dooboo/eslint-config": "^0.5.4",
+ "@dooboo/eslint-config": "^0.5.8",
"@testing-library/jest-native": "^3.4.3",
"@testing-library/react-native": "^7.1.0",
- "@types/i18n-js": "^3.0.3",
- "@types/jest": "^26.0.15",
- "@types/react": "^16.9.56",
- "@types/react-native": "^0.63.33",
- "@types/react-test-renderer": "^16.9.3",
- "@types/styled-components": "^5.1.4",
+ "@types/jest": "^26.0.19",
+ "@types/react": "^17.0.0",
+ "@types/react-native": "^0.63.43",
+ "@types/react-test-renderer": "^17.0.0",
+ "@types/styled-components": "^5.1.7",
"babel-jest": "^26.6.3",
+ "babel-plugin-fbt": "^0.16.0",
+ "babel-plugin-fbt-runtime": "^0.9.12",
+ "babel-preset-react-native": "^4.0.1",
"codecov": "^3.8.1",
- "eslint": "^7.13.0",
+ "eslint": "^7.16.0",
+ "fb-tiger-hash": "^0.1.6",
+ "fbt-generate-translations": "^0.0.4",
"jest": "^26.6.3",
"jest-fetch-mock": "^3.0.3",
"jest-styled-components": "^7.0.3",
"jetifier": "^1.6.6",
- "metro-react-native-babel-preset": "^0.63.0",
- "prettier": "^2.1.2",
+ "metro-react-native-babel-preset": "^0.64.0",
+ "prettier": "^2.2.1",
"react-dom": "^16.13.1",
+ "react-native-fbt": "^0.0.1",
"react-test-renderer": "16.13.1",
+ "shelljs": "^0.8.4",
"ts-jest": "^26.4.4",
- "typescript": "4.0.5"
+ "typescript": "4.1.3"
}
}
diff --git a/src/App.tsx b/src/App.tsx
index 4432cae6..345d8d1f 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,6 +1,9 @@
import React from 'react';
import RootNavigator from './components/navigation/RootStackNavigator';
import RootProvider from './providers';
+import { initFbt } from './utils/fbt';
+
+initFbt();
function App(): React.ReactElement {
return ;
diff --git a/src/components/navigation/RootStackNavigator.tsx b/src/components/navigation/RootStackNavigator.tsx
index 3c3ecc79..a5d83117 100644
--- a/src/components/navigation/RootStackNavigator.tsx
+++ b/src/components/navigation/RootStackNavigator.tsx
@@ -1,7 +1,7 @@
import 'react-native-gesture-handler';
import { StackNavigationProp, createStackNavigator } from '@react-navigation/stack';
-import { ThemeType, useThemeContext } from '@dooboo-ui/native-theme';
+import { ThemeType, useThemeContext } from '@dooboo-ui/theme';
import Intro from '../screen/Intro';
import { NavigationContainer } from '@react-navigation/native';
diff --git a/src/components/navigation/__tests__/RootStackNavigator.test.tsx b/src/components/navigation/__tests__/RootStackNavigator.test.tsx
index 502310ab..f457c01e 100644
--- a/src/components/navigation/__tests__/RootStackNavigator.test.tsx
+++ b/src/components/navigation/__tests__/RootStackNavigator.test.tsx
@@ -4,7 +4,7 @@ import React, { ReactElement } from 'react';
import { createTestElement, createTestProps } from '../../../../test/testUtils';
import StackNavigator from '../RootStackNavigator';
-import { ThemeType } from '@dooboo-ui/native-theme';
+import { ThemeType } from '@dooboo-ui/theme';
import renderer from 'react-test-renderer';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
diff --git a/src/components/navigation/__tests__/__snapshots__/RootStackNavigator.test.tsx.snap b/src/components/navigation/__tests__/__snapshots__/RootStackNavigator.test.tsx.snap
index ec263d0c..e68537cf 100644
--- a/src/components/navigation/__tests__/__snapshots__/RootStackNavigator.test.tsx.snap
+++ b/src/components/navigation/__tests__/__snapshots__/RootStackNavigator.test.tsx.snap
@@ -57,16 +57,21 @@ exports[`[Stack] navigator should renders [Dark] mode 1`] = `
onGestureCanceled={[Function]}
onGestureEnd={[Function]}
onOpen={[Function]}
- onTransitionStart={[Function]}
+ onTransition={[Function]}
pointerEvents="box-none"
style={
- Object {
- "bottom": 0,
- "left": 0,
- "position": "absolute",
- "right": 0,
- "top": 0,
- }
+ Array [
+ Object {
+ "overflow": undefined,
+ },
+ Object {
+ "bottom": 0,
+ "left": 0,
+ "position": "absolute",
+ "right": 0,
+ "top": 0,
+ },
+ ]
}
transitionSpec={
Object {
@@ -355,7 +360,7 @@ exports[`[Stack] navigator should renders [Dark] mode 1`] = `
]
}
>
- Navigate to Temp
+ Navigate
@@ -398,7 +403,7 @@ exports[`[Stack] navigator should renders [Dark] mode 1`] = `
]
}
>
- Change theme
+ Change Theme
@@ -678,16 +683,21 @@ exports[`[Stack] navigator should renders without crashing 1`] = `
onGestureCanceled={[Function]}
onGestureEnd={[Function]}
onOpen={[Function]}
- onTransitionStart={[Function]}
+ onTransition={[Function]}
pointerEvents="box-none"
style={
- Object {
- "bottom": 0,
- "left": 0,
- "position": "absolute",
- "right": 0,
- "top": 0,
- }
+ Array [
+ Object {
+ "overflow": undefined,
+ },
+ Object {
+ "bottom": 0,
+ "left": 0,
+ "position": "absolute",
+ "right": 0,
+ "top": 0,
+ },
+ ]
}
transitionSpec={
Object {
@@ -976,7 +986,7 @@ exports[`[Stack] navigator should renders without crashing 1`] = `
]
}
>
- Navigate to Temp
+ Navigate
@@ -1019,7 +1029,7 @@ exports[`[Stack] navigator should renders without crashing 1`] = `
]
}
>
- Change theme
+ Change Theme
diff --git a/src/components/screen/Intro.tsx b/src/components/screen/Intro.tsx
index 89c938aa..e3def2ef 100644
--- a/src/components/screen/Intro.tsx
+++ b/src/components/screen/Intro.tsx
@@ -4,10 +4,10 @@ import React from 'react';
import { RootStackNavigationProps } from '../navigation/RootStackNavigator';
import { User } from '../../types';
import { View } from 'react-native';
-import { getString } from '../../../STRINGS';
+import { fbt } from 'fbt';
import styled from 'styled-components/native';
import { useAppContext } from '../../providers/AppProvider';
-import { useThemeContext } from '@dooboo-ui/native-theme';
+import { useThemeContext } from '@dooboo-ui/theme';
const Container = styled.View`
flex: 1;
@@ -48,7 +48,7 @@ interface Props {
}
function Intro(props: Props): React.ReactElement {
- let timer: NodeJS.Timeout;
+ let timer: number;
const { state: { user }, setUser } = useAppContext();
const { changeThemeType } = useThemeContext();
const [isLoggingIn, setIsLoggingIn] = React.useState(false);
@@ -88,21 +88,21 @@ function Intro(props: Props): React.ReactElement {
imgLeftSrc={IC_MASK}
isLoading={isLoggingIn}
onClick={(): void => onLogin()}
- text={getString('LOGIN')}
+ text={fbt('Login', 'login')}
/>