From 112a3d9e9360a2e8eafe77e07402c9909824c5a2 Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Thu, 29 Aug 2024 11:53:52 -0300 Subject: [PATCH 01/10] Setup MKDocs and add Overview page --- docs/getting_started/overview.md | 20 ++++++ mkdocs.yml | 105 +++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 docs/getting_started/overview.md create mode 100644 mkdocs.yml diff --git a/docs/getting_started/overview.md b/docs/getting_started/overview.md new file mode 100644 index 0000000..a9048e5 --- /dev/null +++ b/docs/getting_started/overview.md @@ -0,0 +1,20 @@ +!!! info + While we actively use Belt internally at thoughtbot, this project is still in early phases of development, so its API might still change frequently. + + +# Overview + +Belt is an opinionated CLI tool for starting a new React Native app. Developed and actively used by the mobile team at thoughtbot, Belt is designed to simplify the setup process by making many of the standard decisions for you, based on tooling and conventions that have been battle-tested through numerous successful projects. + +By using Belt, you can quickly scaffold a new React Native app with a pre-configured setup that includes a curated selection of tools and libraries: + +- **Expo** for rapid development and deployment. +- **ESLint** and **Prettier** for consistent code style. +- **TypeScript** for type safety. +- **Jest** and **React Native Testing Library** for testing. +- **MSW** for API mocking during development. +- **React Navigation** with bottom tabs for navigation structure. +- **Tanstack Query** for REST API integration (with Apollo Client for GraphQL and Redux Toolkit for global state management coming soon). + + +Additionally, Belt is designed to be flexible — the default setup can be customized as your project evolves, allowing you to adapt configurations and tooling to best fit your needs. New features can also be added independently using standalone commands, giving you full control over your development environment. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..58c06d2 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,105 @@ +site_name: Belt +site_url: https://mydomain.org/belt +site_author: Diego Oliveira +site_description: >- + Discover Belt, thoughtbot’s new CLI tool that simplifies starting React Native apps with smart defaults and easy feature integration. Perfect for developers looking to streamline their workflow. + +repo_name: thoughtbot/belt +repo_url: https://github.com/thoughtbot/belt + +copyright: Copyright © 2024 thoughtbot + +theme: + name: material + # custom_dir: overrides + features: + - header.autohide + - navigation.footer + - navigation.path + - toc.follow + - navigation.sections + - navigation.instant + + icon: + logo: logo + +# extra_css: +# - stylesheets/extra.css +extra: + social: + - icon: fontawesome/brands/mastodon + link: https://thoughtbot.social/public/local + - icon: fontawesome/brands/github + link: https://github.com/thoughtbot + - icon: fontawesome/brands/twitter + link: https://twitter.com/thoughtbot?lang=en + - icon: fontawesome/brands/linkedin + link: https://www.linkedin.com/company/thoughtbot-inc-/posts/?feedView=all + - icon: fontawesome/brands/instagram + link: https://www.instagram.com/thoughtbot/?hl=en + +markdown_extensions: + - abbr + - admonition + - attr_list + - def_list + - footnotes + - md_in_html + - toc: + permalink: true + - pymdownx.arithmatex: + generic: true + - pymdownx.betterem: + smart_enable: all + - pymdownx.caret + - pymdownx.details + - pymdownx.emoji: + emoji_generator: !!python/name:material.extensions.emoji.to_svg + emoji_index: !!python/name:material.extensions.emoji.twemoji + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.keys + - pymdownx.magiclink: + normalize_issue_symbols: true + repo_url_shorthand: true + user: squidfunk + repo: mkdocs-material + - pymdownx.mark + - pymdownx.smartsymbols + - pymdownx.snippets: + auto_append: + - includes/mkdocs.md + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + - pymdownx.tabbed: + alternate_style: true + combine_header_slug: true + slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.tilde + +not_in_nav: | + /tutorials/**/*.md + +# Page tree +nav: + - Getting Started: + - Overview: getting_started/overview.md + - Installation: getting_started/installation.md + + - Commands: + - Create: getting_started/navigation.md + + - Reference: + - Belt: reference/index.md + - Types: reference/types.md + - Requests: reference/types.requests.md \ No newline at end of file From 25104419cf496f8a851bb587536742b8a4095d4c Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Tue, 3 Sep 2024 09:57:18 -0300 Subject: [PATCH 02/10] Add installation and new section strucure --- docs/commands/add/notifications.md | 0 docs/commands/index.md | 0 docs/getting_started/installation.md | 46 ++++++++++++++++++++++++++++ docs/getting_started/overview.md | 2 +- mkdocs.yml | 13 ++++++-- 5 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 docs/commands/add/notifications.md create mode 100644 docs/commands/index.md create mode 100644 docs/getting_started/installation.md diff --git a/docs/commands/add/notifications.md b/docs/commands/add/notifications.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/commands/index.md b/docs/commands/index.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/getting_started/installation.md b/docs/getting_started/installation.md new file mode 100644 index 0000000..8d428b3 --- /dev/null +++ b/docs/getting_started/installation.md @@ -0,0 +1,46 @@ +# Creating a new app + +## System Requirements +- Node.js 18.18 or later + +## Quick Start + +To quickly set up a new React Native app using Belt, run the following command in your terminal: + +```sh +# With NPM +npx create-belt-app MyApp +``` + +If you prefer you can also create a Belt app with Yarn, pnpm, or Bun by running the corresponding commands: + +```sh +# With Yarn +npx create-belt-app MyApp --yarn + +# With pnpm (experimental) +npx create-belt-app MyApp --pnpm + +# With Bun (experimental) +npx create-belt-app MyApp --bun +``` + +You will be prompted to confirm the app details and all the tools that will be setup, then Belt will generate the new app using Expo, install all the necessary dependencies and run an initial set of tests. + +## Extending App Functionality + +After creating a project with Belt, the tool adds handles that allow you to extend your app’s functionality with minimal effort. For instance, if you want to add Push Notification capability, run the following command and follow the instructions: + +```sh +# With Yarn +yarn belt add notifications + +# With NPM +npx belt add notifications + +# With PNPM +pnpm belt add notifications +``` +The above will inject the necessary code and install required dependencies to get notifications displaying in your app. All you need to do is handle the setup outside of the code, like configuring the notification service, and you’re good to go. + +If you'd like to know more details about how extending your app functionality's work, please refer to the [commands](../commands) section. diff --git a/docs/getting_started/overview.md b/docs/getting_started/overview.md index a9048e5..f522ce9 100644 --- a/docs/getting_started/overview.md +++ b/docs/getting_started/overview.md @@ -17,4 +17,4 @@ By using Belt, you can quickly scaffold a new React Native app with a pre-config - **Tanstack Query** for REST API integration (with Apollo Client for GraphQL and Redux Toolkit for global state management coming soon). -Additionally, Belt is designed to be flexible — the default setup can be customized as your project evolves, allowing you to adapt configurations and tooling to best fit your needs. New features can also be added independently using standalone commands, giving you full control over your development environment. \ No newline at end of file +Additionally, Belt is designed to be flexible — the default setup can be customized as your project evolves, allowing you to adapt configurations and tooling to best fit your needs. New features can also be added independently using standalone commands, giving you full control over your development environment. diff --git a/mkdocs.yml b/mkdocs.yml index 58c06d2..1223d51 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -94,10 +94,19 @@ not_in_nav: | nav: - Getting Started: - Overview: getting_started/overview.md - - Installation: getting_started/installation.md + - Creating a new app with Belt: getting_started/installation.md + - Core Features: + - Expo: core/expo.md + - ESLint and Prettier: core/expo.md + - TypeScript: core/expo.md + - Testing: core/expo.md + - Navigation: core/expo.md + - Data Management: core/expo.md - Commands: - - Create: getting_started/navigation.md + - Create: getting_started/create.md + - Add: + - Notifications: commands/add/notifications.md - Reference: - Belt: reference/index.md From aed1dba0c1e214431ca0e4d2b98e115fd57acb80 Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Wed, 4 Sep 2024 13:55:32 -0300 Subject: [PATCH 03/10] Add eslint doc --- docs/core/eslint.md | 59 +++++++++++++++++++++++++++++++++++++++++++++ docs/core/expo.md | 38 +++++++++++++++++++++++++++++ mkdocs.yml | 10 ++++---- 3 files changed, 102 insertions(+), 5 deletions(-) create mode 100644 docs/core/eslint.md create mode 100644 docs/core/expo.md diff --git a/docs/core/eslint.md b/docs/core/eslint.md new file mode 100644 index 0000000..654d142 --- /dev/null +++ b/docs/core/eslint.md @@ -0,0 +1,59 @@ +### ESLint & Prettier + +Belt comes pre-configured with thoughtbot’s ESLint and Prettier setups to enforce best practices and maintain code consistency across your React Native projects. These tools work together to ensure that your code is not only functional but also clean, readable, and maintainable. + +#### ESLint Configuration + +Belt uses thoughtbot’s sharable ESLint configuration, which includes setups for React, React Native, TypeScript, and Web in general. These configurations are designed to enforce thoughtbot’s [JavaScript style guide](https://github.com/thoughtbot/eslint-config?tab=readme-ov-file1) while being largely compatible with the popular ESLint config. + +When you start a new project with Belt, the appropriate ESLint configuration is automatically applied based on the project type. For example: + +- **React Native Projects**: Belt applies the `@thoughtbot/eslint-config/native` configuration, which includes rules and plugins tailored for React Native development. +- **TypeScript Support**: If your project uses TypeScript, Belt also applies the `@thoughtbot/eslint-config/typescript` configuration, adding rules specific to TypeScript. + +The configurations that include Prettier automatically disable ESLint rules that are handled by Prettier, ensuring that there are no conflicts between the two tools. + +#### Prettier Integration + +Prettier is integrated with ESLint in Belt to manage code formatting. By default, Prettier is configured to enforce thoughtbot’s formatting guidelines, such as: + +- **Single Quotes**: Prettier is configured to prefer single quotes over double quotes. +- **Semicolons**: Enforces the use of semicolons at the end of each statement. +- **Trailing Commas**: Adds a trailing comma after each item in a multi-line array or object literal, including the last item. + +#### Customization + +The ESLint and Prettier configurations are ready to use as soon as you create a new project with Belt. However, if you wish to modify or extend the default setup, you can do so by editing the `.eslintrc.js` and `.prettierrc` files in your project’s root directory. For example: + +- **React Native with TypeScript**: + ```json + { + "extends": [ + "@thoughtbot/eslint-config/native", + "@thoughtbot/eslint-config/typescript" + ] + } + ``` + +- **Custom Rule Overrides**: + You can override any of the shared rules by adding your own rules within the `rules` property: + ```json + { + "extends": "@thoughtbot/eslint-config", + "rules": { + "react/jsx-newline": "warn" + } + } + ``` + +If you encounter issues with Jest not detecting the version, you may need to add the following to your ESLint config: + +```json +{ + "settings": { + "jest": { + "version": "detect" + } + } +} +``` diff --git a/docs/core/expo.md b/docs/core/expo.md new file mode 100644 index 0000000..7df85dd --- /dev/null +++ b/docs/core/expo.md @@ -0,0 +1,38 @@ +### Using Expo with Belt + +Belt leverages Expo to provide a streamlined and efficient development experience for React Native apps. It is a powerful platform that simplifies the process of building, deploying, and managing React Native applications. + +#### Why Expo? + +Expo is the recommended choice for React Native development due to its: + +- **Ease of Use**: Expo abstracts away much of the complexity involved in setting up and managing a React Native app, making it easier for developers to get started and stay productive. +- **Pre-Built Components**: It comes packed with a rich set of pre-built components and APIs that simplify common tasks such as accessing device features, managing media, and integrating with third-party services. +- **Facilitated Distribution**: Expo simplifies the distribution process by providing tools and services that make it easy to build, deploy, and update your app across both iOS and Android platforms. +- **Over-the-Air Updates**: After the app is published, you can push updates directly to users without requiring them to download a new version from the app store. This also allow you to quickly roll out hotfixes to all users. + +#### How Belt Configures Expo + +When you create a new app with Belt, it automatically configures Expo with the latest stable version, tested and integrated with all the additional features included in Belt. It uses Expo’s managed workflow, which handles most of the heavy lifting related to native code. This means you can build your app without needing to touch Xcode or Android Studio unless you choose to eject. Additionally, it facilitates internal sharing of the app with your team, making it easy to distribute and test new builds with stakeholders. + +#### Customizing Expo in Your Belt App + +While Belt provides a solid foundation with Expo, you have the flexibility to customize and extend the Expo setup as needed. You can modify the `app.json` file to adjust settings, add new Expo modules, or configure additional plugins specific to your app's requirements. + +Additionally, if your project outgrows the managed workflow, you have the option to eject from Expo, giving you full control over the native code. This is a more advanced option and is generally not needed unless you require custom native modules or other platform-specific customizations. + +#### Working with Expo CLI + +Belt includes commands that integrate seamlessly with Expo CLI, allowing you to manage your app's lifecycle easily. + +```bash +# Start the development server +yarn start + +# Run the app on an iOS or Android simulator +yarn ios +yarn android + +# Build the app for production +yarn build +``` diff --git a/mkdocs.yml b/mkdocs.yml index 1223d51..c734e7a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -97,11 +97,11 @@ nav: - Creating a new app with Belt: getting_started/installation.md - Core Features: - Expo: core/expo.md - - ESLint and Prettier: core/expo.md - - TypeScript: core/expo.md - - Testing: core/expo.md - - Navigation: core/expo.md - - Data Management: core/expo.md + - ESLint and Prettier: core/eslint.md + - TypeScript: core/typescript.md + - Testing: core/testing.md + - Navigation: core/navigation.md + - Data Management: core/query.md - Commands: - Create: getting_started/create.md From ead8e6bba0a23880588add69d3ab87ee7cb35faf Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Mon, 9 Sep 2024 09:37:59 -0300 Subject: [PATCH 04/10] Add link to eslint doc --- docs/core/eslint.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/core/eslint.md b/docs/core/eslint.md index 654d142..95d6579 100644 --- a/docs/core/eslint.md +++ b/docs/core/eslint.md @@ -1,8 +1,6 @@ -### ESLint & Prettier +Belt comes pre-configured with [thoughtbot’s ESLint and Prettier setups](https://github.com/thoughtbot/eslint-config) to enforce best practices and maintain code consistency across your React Native projects. These tools work together to ensure that your code is not only functional but also clean, readable, and maintainable. -Belt comes pre-configured with thoughtbot’s ESLint and Prettier setups to enforce best practices and maintain code consistency across your React Native projects. These tools work together to ensure that your code is not only functional but also clean, readable, and maintainable. - -#### ESLint Configuration +## ESLint Configuration Belt uses thoughtbot’s sharable ESLint configuration, which includes setups for React, React Native, TypeScript, and Web in general. These configurations are designed to enforce thoughtbot’s [JavaScript style guide](https://github.com/thoughtbot/eslint-config?tab=readme-ov-file1) while being largely compatible with the popular ESLint config. @@ -13,7 +11,7 @@ When you start a new project with Belt, the appropriate ESLint configuration is The configurations that include Prettier automatically disable ESLint rules that are handled by Prettier, ensuring that there are no conflicts between the two tools. -#### Prettier Integration +## Prettier Integration Prettier is integrated with ESLint in Belt to manage code formatting. By default, Prettier is configured to enforce thoughtbot’s formatting guidelines, such as: @@ -21,7 +19,7 @@ Prettier is integrated with ESLint in Belt to manage code formatting. By default - **Semicolons**: Enforces the use of semicolons at the end of each statement. - **Trailing Commas**: Adds a trailing comma after each item in a multi-line array or object literal, including the last item. -#### Customization +## Customization The ESLint and Prettier configurations are ready to use as soon as you create a new project with Belt. However, if you wish to modify or extend the default setup, you can do so by editing the `.eslintrc.js` and `.prettierrc` files in your project’s root directory. For example: @@ -46,6 +44,7 @@ The ESLint and Prettier configurations are ready to use as soon as you create a } ``` +## Troubleshooting If you encounter issues with Jest not detecting the version, you may need to add the following to your ESLint config: ```json From daac86b530285c411686a72280b8dcf57dc0f498 Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Mon, 9 Sep 2024 09:38:08 -0300 Subject: [PATCH 05/10] Add testing doc --- docs/core/testing.md | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/core/testing.md diff --git a/docs/core/testing.md b/docs/core/testing.md new file mode 100644 index 0000000..ddc8692 --- /dev/null +++ b/docs/core/testing.md @@ -0,0 +1,45 @@ +## Setting Up Testing Library with Belt + +When you generate a new React Native project using Belt, it automatically sets up the Testing Library to ensure you have a robust testing environment out of the box. Here’s how Belt configures the Testing Library for your project: + +### Installation + +Belt installs the necessary dependencies for the Testing Library, including Jest and related testing utilities. The following packages are added to your project: + +- `@testing-library/react-native` +- `@testing-library/jest-native` +- `jest` +- `babel-jest` +- `@types/jest` + +### Configuration + +Belt configures Jest and the Testing Library with sensible defaults to get you started quickly. Here’s what Belt sets up: + +- **Jest Configuration**: A pre-configured `jest.config.js` file is added to your project. This configuration includes settings tailored for React Native and Expo. + +- **Setup File**: A `jest.setup.js` file is included to configure the testing environment. This file sets up mocks and other configurations needed for testing. Here's a breakdown of what it sets up: + + - Safe Area Context: mock the Safe Area Context to avoid issues related to safe area insets during testing. + - BackHandler: mock the BackHandler to control back button behavior in tests. + - Expo Modules: handle Expo-specific modules to avoid issues related to fonts and assets during testing. + - Mock Service Worker (MSW) Server: sets up a MSW server to intercept network requests during tests, allowing you to mock API responses. + - Query Client: clears the query client to ensure no stale data is carried over between tests. + - Debug Output: customizes the debug output of Testing Library to include only common props that might affect test failures, reducing verbosity. + +- **Testing Utilities**: Belt includes utility functions like `renderApplication` to simplify rendering components with the necessary providers and mocks. + +### Running Tests + +You can run these scripts using your package manager: + +```sh +# Run tests +npm test + +# Run tests with coverage +npm run test:cov + +# Run all tests and linting +npm run test:all +``` From 4e6f9ce08dec69a87799a1a614fca724b34d8114 Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Mon, 9 Sep 2024 09:38:35 -0300 Subject: [PATCH 06/10] Add typescript doc --- docs/core/typescript.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/core/typescript.md diff --git a/docs/core/typescript.md b/docs/core/typescript.md new file mode 100644 index 0000000..50238e6 --- /dev/null +++ b/docs/core/typescript.md @@ -0,0 +1,15 @@ +## TypeScript Configuration Overview + +When you create a new project with Belt, a pre-configured `tsconfig.json` file is automatically added to your project’s root directory. This configuration provides a solid foundation for using TypeScript in React Native, with settings that focus on improving code quality and catching errors early. This is a list of belt specific configurations: + +- **Strict Type-Checking**: enforces strict type-checking (`strict: true`) to catch potential issues early. +- **Force Consistent Casing**: adds `forceConsistentCasingInFileNames: true` to ensure consistent file naming across the project. +- **Custom Module Paths**: defines paths for `src/*` and `assets/*`, making imports more convenient. +- **Expanded Inclusions**: includes additional file types in the include section (`*.js`, `.*.js`, `__mocks__`). +- **No Fallthrough in Switch Cases**: includes `noFallthroughCasesInSwitch: true` to prevent errors in switch statements. + +Additionally, Belt extends the TypeScript configuration with `expo/tsconfig.base`, maintaining full compatibility with Expo’s managed workflow. + +## Customizing TypeScript in Your Project + +The default TypeScript configuration in Belt is designed to meet the needs of most React Native projects, but it can be customized as needed. You can modify the `tsconfig.json` file to adjust compiler options, module resolution paths, or other settings to better fit your project. From e2b9429676a31be9f41a87c38889b9b9a3ae7a84 Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Mon, 9 Sep 2024 09:38:46 -0300 Subject: [PATCH 07/10] Add navigation doc --- docs/core/navigation.md | 133 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 docs/core/navigation.md diff --git a/docs/core/navigation.md b/docs/core/navigation.md new file mode 100644 index 0000000..9e760a3 --- /dev/null +++ b/docs/core/navigation.md @@ -0,0 +1,133 @@ +## Setting Up Navigation with Belt + +When you generate a new React Native project using Belt, it automatically sets up navigation to ensure you have a robust and scalable navigation structure out of the box. Here’s how Belt configures navigation for your project: + +### Installation + +Belt installs the necessary dependencies for navigation, including React Navigation and related libraries. The following packages are added to your project: + +- `@react-navigation/native` +- `@react-navigation/bottom-tabs` +- `@react-navigation/native-stack` +- `react-native-screens` +- `react-native-safe-area-context` + +### Configuration + +Belt configures navigation with sensible defaults to get you started quickly. Here’s what Belt sets up: + +#### Navigation Container +The `NavigationContainer` is set up in the main application component to manage the navigation tree and state. It is injected in the list of providers in order to wrap other components under the navigation structure. For instance: + + ```tsx + import { NavigationContainer } from '@react-navigation/native'; + import { QueryClientProvider } from '@tanstack/react-query'; + import Providers, { Provider } from 'src/components/Providers'; + import RootNavigator from 'src/navigators/RootNavigator'; + import queryClient from 'src/util/api/queryClient'; + + const providers: Provider[] = [ + (children) => {children}, + (children) => ( + {children} + ), + // CODEGEN:BELT:PROVIDERS - do not remove + ]; + + export default function App() { + // CODEGEN:BELT:HOOKS - do not remove + return ( + + + + ); + } + ``` +The order of providers added in the `Providers` array will matter, as they are wrapped in reverse order from the array. + +#### Root Navigator +The RootNavigator is a central component in the navigation structure of your application. It defines the main navigation stack and serves as the entry point for all other navigators and screens. + +```tsx +import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import HomeScreen from 'src/screens/HomeScreen'; +import AboutScreen from 'src/screens/AboutScreen'; + +const Stack = createNativeStackNavigator(); + +export default function RootNavigator() { + return ( + + + + + ); +} +``` + +## Setting Up Navigator Types with Belt + +Belt ensures that your navigation structure is strongly typed by setting up TypeScript types for all navigators and screens. This helps catch errors at compile time and provides better IntelliSense support in your IDE. The types for each navigator are declared in a dedicated file, named `navigatorTypes.tsx`, including type definitions for the root stack, tabs, and individual screens. + +### Using Navigator Types + +These types are then used throughout the application to ensure type safety. For example, when defining a stack navigator, you can specify the type for the navigator and its screens: + +Example: `DashboardStack.tsx` + +```tsx +import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import React from 'react'; +import HomeScreen from '../screens/HomeScreen/HomeScreen'; +import InformationScreen from '../screens/InformationScreen/InformationScreen'; +import { DashboardTabParamList } from './navigatorTypes'; + +const Dashboard = createNativeStackNavigator(); + +export default function DashboardStack() { + return ( + + + + + ); +} +``` + +### Benefits of Typed Navigation + +1. **Compile-Time Safety**: TypeScript will catch errors related to navigation at compile time, reducing runtime errors. +2. **IntelliSense Support**: IDEs like Visual Studio Code provide better auto-completion and documentation support when types are defined. +3. **Documentation**: Types serve as a form of documentation, making it easier for developers to understand the navigation structure. + +By setting up navigator types, your navigation code is robust, maintainable, and easy to understand. + +## Testing Navigation + +Belt also sets up testing utilities to help you test navigation flows. You can use the `renderApplication` utility to render the entire app with navigation ready for integration tests. + +Example: `App.integration.test.tsx` + +```tsx +import { screen, userEvent } from '@testing-library/react-native'; +import { renderApplication } from 'src/test/render'; + +test('renders app, can navigate between screens', async () => { + renderApplication(); + + expect( + await screen.findByText('Welcome to the Home Screen'), + ).toBeDefined(); + + await userEvent.press(screen.getByText('Go to About')); + expect( + await screen.findByText('Welcome to the About Screen'), + ).toBeDefined(); +}); +``` + +As your app development progresses this will give you fine-grain control over simulating specific application states and context. From 725793fc892239d53e00a070ab87fac1b10e5cb6 Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Mon, 9 Sep 2024 10:10:50 -0300 Subject: [PATCH 08/10] Add query doc --- docs/core/navigation.md | 4 --- docs/core/query.md | 72 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 docs/core/query.md diff --git a/docs/core/navigation.md b/docs/core/navigation.md index 9e760a3..d4c6045 100644 --- a/docs/core/navigation.md +++ b/docs/core/navigation.md @@ -21,16 +21,12 @@ The `NavigationContainer` is set up in the main application component to manage ```tsx import { NavigationContainer } from '@react-navigation/native'; - import { QueryClientProvider } from '@tanstack/react-query'; import Providers, { Provider } from 'src/components/Providers'; import RootNavigator from 'src/navigators/RootNavigator'; import queryClient from 'src/util/api/queryClient'; const providers: Provider[] = [ (children) => {children}, - (children) => ( - {children} - ), // CODEGEN:BELT:PROVIDERS - do not remove ]; diff --git a/docs/core/query.md b/docs/core/query.md new file mode 100644 index 0000000..1554827 --- /dev/null +++ b/docs/core/query.md @@ -0,0 +1,72 @@ +# Setting Up TanStack Query with Belt + +When you create a new project with Belt, [TanStack Query](https://tanstack.com/query/latest) (formerly known as React Query) is automatically set up to manage server-state in your React Native application. This setup ensures you have a robust and scalable solution for data fetching, caching, synchronization, and more. + +## Installation + +Belt installs the necessary dependencies for TanStack Query. The following packages are added to your project: + +- `@tanstack/react-query` +- `@tanstack/react-query-devtools` + +These dependencies are included in your `package.json` file and installed during the project creation process. + +## Configuration + +### Query Client + +A `queryClient` instance is created and configured in the `queryClient.ts` file with a basic configuration. Retry logic is disabled by default but you can customize it based on your application and back-end behavior. + +```tsx +import { QueryClient } from '@tanstack/react-query'; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, +}); + +export default queryClient; +``` + +### Query Client Provider + +The `QueryClientProvider` is set up in the main application component to provide the query client to the entire app. This is done in the `App.tsx` file: + +```tsx +import { QueryClientProvider } from '@tanstack/react-query'; +import Providers, { Provider } from 'src/components/Providers'; +import RootNavigator from 'src/navigators/RootNavigator'; +import queryClient from 'src/util/api/queryClient'; + +const providers: Provider[] = [ + (children) => ( + {children} + ), + // CODEGEN:BELT:PROVIDERS - do not remove +]; + +export default function App() { + // CODEGEN:BELT:HOOKS - do not remove + return ( + + + + ); +} +``` + +To demonstrate how to use TanStack Query in your project, Belt includes an example in the `AboutScreen.tsx` file: + +### Benefits of Using TanStack Query + +1. **Automatic Caching**: TanStack Query automatically caches query results, reducing the need for manual state management. +2. **Background Updates**: Queries can be configured to refetch in the background, ensuring your data is always up-to-date. +3. **Optimistic Updates**: TanStack Query supports optimistic updates, providing a smoother user experience by updating the UI before the server responds. +4. **Error Handling**: Built-in error handling mechanisms make it easier to manage and display errors in your application. + +## Customization + +The default configuration provided by Belt is designed to meet the needs of most React Native projects, but it can be customized as needed. You can modify the `queryClient` configuration in the `queryClient.ts` file to adjust default options, retry logic, caching and other settings to better fit your project. From e96b07a59e0b4cdee9b088af900e72bda81d0abf Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Mon, 9 Sep 2024 10:23:05 -0300 Subject: [PATCH 09/10] Fix headers --- docs/core/navigation.md | 10 +++++----- docs/core/query.md | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/core/navigation.md b/docs/core/navigation.md index d4c6045..9c022f9 100644 --- a/docs/core/navigation.md +++ b/docs/core/navigation.md @@ -1,8 +1,8 @@ -## Setting Up Navigation with Belt +# Setting Up Navigation with Belt When you generate a new React Native project using Belt, it automatically sets up navigation to ensure you have a robust and scalable navigation structure out of the box. Here’s how Belt configures navigation for your project: -### Installation +## Installation Belt installs the necessary dependencies for navigation, including React Navigation and related libraries. The following packages are added to your project: @@ -12,11 +12,11 @@ Belt installs the necessary dependencies for navigation, including React Navigat - `react-native-screens` - `react-native-safe-area-context` -### Configuration +## Configuration Belt configures navigation with sensible defaults to get you started quickly. Here’s what Belt sets up: -#### Navigation Container +### Navigation Container The `NavigationContainer` is set up in the main application component to manage the navigation tree and state. It is injected in the list of providers in order to wrap other components under the navigation structure. For instance: ```tsx @@ -41,7 +41,7 @@ The `NavigationContainer` is set up in the main application component to manage ``` The order of providers added in the `Providers` array will matter, as they are wrapped in reverse order from the array. -#### Root Navigator +### Root Navigator The RootNavigator is a central component in the navigation structure of your application. It defines the main navigation stack and serves as the entry point for all other navigators and screens. ```tsx diff --git a/docs/core/query.md b/docs/core/query.md index 1554827..0deee3b 100644 --- a/docs/core/query.md +++ b/docs/core/query.md @@ -60,7 +60,7 @@ export default function App() { To demonstrate how to use TanStack Query in your project, Belt includes an example in the `AboutScreen.tsx` file: -### Benefits of Using TanStack Query +## Benefits of Using TanStack Query 1. **Automatic Caching**: TanStack Query automatically caches query results, reducing the need for manual state management. 2. **Background Updates**: Queries can be configured to refetch in the background, ensuring your data is always up-to-date. From c6f1d3d416dab47a83dab1065d8fb2d86889cea3 Mon Sep 17 00:00:00 2001 From: Diego Oliveira Date: Mon, 9 Sep 2024 10:40:54 -0300 Subject: [PATCH 10/10] Add icons and remove unfinished sections --- docs/assets/favicon.png | Bin 0 -> 5981 bytes docs/assets/logo.png | Bin 0 -> 62274 bytes mkdocs.yml | 15 ++------------- 3 files changed, 2 insertions(+), 13 deletions(-) create mode 100644 docs/assets/favicon.png create mode 100644 docs/assets/logo.png diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d63e8e5b01a14473f5fff88c66198cd64947c2a8 GIT binary patch literal 5981 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 G9Qi-H3dRlq literal 0 HcmV?d00001 diff --git a/docs/assets/logo.png b/docs/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..76614932bc9b75aa96e7b3bdef0d9e59b39010c0 GIT binary patch literal 62274 zcmcG$({nD&6D=Iuws&mXwz*?Jv2A9bW2x}0C|E2r~y#D|K0$u|9^>$4Oqq?Ai^Lr z;v(vvpjSQ6zQtOpFF$GyX-7Mkp3&tmNvsp0W{W2>tI`?T_4uYUTjx^DfYjqh_4&14etob!Edcuqb1Pk&qY z&b;*dB2WK6GoK7T{r}pw)<1hseD;0{p}(E4GW!yGgq{KJsY0E7TMMhEw+X#|UOk`3 zQGMOBw%@kj2HyR#g?*gk32{sh-dDzTQ!ryJpe(mPT{ENMC)z*ByWbuO_d+{2Ya`zY z9?U;O0pmokHix6K4g?=JKa|WXy33v9(HNyUZ&f)O8c6w@`E$p?*$mlJW){Hp zD^JSga}_d{$zF6RpG}z5^&dm@gW~L-cBV1L&k=!(&xLOTpS?BDH@U)zPi*W%Wv9PN zO-(JF={?Ig4NT*w56kPWbrXOVh6Wuw#J8N_@z5!gmW^6Y_bF8R&!%D%FsX7E}r~(Rn5ztOBOElVwAe9nXcJG$5vCcde$?i{O;L=5+=#DcSasC zQK%{6oViM7=sF{dUZwD?Bk7t%?nq`x)_=!um77+JlNQM^Q&VZt8)u|lNmN4ZxIE&{+&8ukwxh2*)R#WF=8PxSK#D~@McC?ug#h&5pj$$r<H%dsdxvG0CAuoU&|K+Zk>i{qQm8 ze~91t@~o$^KA({=d`Q!!!Dz$y(<@E=$Wb>YeH37B-%IV`X^>%%V(%}5>@4p&jqsEI zhHXKT)&UlTXf5ZS>bx$&%|v&FwK-_Zi0#<^o0A+#GbIxKm^4O%WxBzPHFtp?j-Ht7 zgUe7G@U0LHUJ)@lHp8?Fj%!DCHmUntr2swb1`c+o+cM@Dsg-wuVpIU$igYl z1h)E}XQ-Tt+?#r<_*eBxMWK6?pzk)7`r=~EobPk;`vta8^+tHv)wJ#Os0wi|Y*?%F zXSxI%A z(tnq`KgV{w=bbN?H-ueoC)VXQ`$@mv2JTTZLOIf=%r_7A??C!kPu-^}j^?oYGIgwb zdzuA|paxi)rgA3!iWoOX;u8EYfgcIkUp{E8+rA-kM)=ur=IY-xaIc;`bWnE9oV1d% zW7!xW$+NrkV{q!SC(c)Y2lizn#q`QS0|{L+-`QwZt(=i@%}@q(~Q8n1f|Z`|xkcp8f>3P>NTSj}~6 zk?k5cv#*{0*G$VYb@!}UFP%013yA;$|3rt^6zEDeM4|}Rc-$n5J0LR$+c;%oU5#X= zGGDH7{0l%wqiM}piRK~eU$22Q%@V*0W0sqY+P-cjeQ%`>RAYOU#ga(I4cj*OMTYtd ziau+&T`sVzG!q`d`E+pb@!za=mUX%qkTC(uv6+`Z1rd9O){Ge$e0G72*b1q>Nfw;0fiS2lnNFNc7dfYzGIQLM zQ_M+c+Gwg#nJ4 zuy2*2CN{SuwL+2lI7wMmR(ye;r)|RpE6$67b=1_~N;41YJS*Bc zSLH7TX_fL~?#lRC?9CbC+vQguCBI_Xv1C24Z}7&sHnu#e7G}((YrB;?RS|PS^mC-&c(j9SC{JriasY$% zHq-CT=f-a*80S8dWoA0?g`41?*Y6YZr?^;J0S@!JQJDC*@y;(yD(!SljOs;b<~_s; zD_3d3atVnHtCiQ3ocs2zcJXK5GRIi$!AeKo>O3>?Yv3UsTnNi>PL3E0a(QqjDr6HX z1jB>_svC5K$QeCA+%s^fc4(6PMCL%$NjMBQLIFJ^89gm_6bS3KMmSl#e>6-iTNs7{ zrx*6v5w5^nS*SR&oFg|`De(7?|NLroSDqQGun{e4-QNM&7ESJ_V{lwjk}IuHxdrO{m;VtfOXaY?i|%;MGsT zc=Hvi=ywF0`D%%!BJ#c+uq`)NV3u;4 zIE_A#&)(T?mb5pdH{iM$_kO+j^uzqw44Ul7 zh1vwZp@W@M4QwMUS6it|o6{=+$?A_S9ly&cLvEuJ`mb`x=V(5s8**aq3}cxNb7+U< zi^)}HDzd)3I4ts)cMebmA|=w=M%CBV8L2*E%$lMpUgz2C2DH<1o2*!ERO4k6Y>P!k ziWnsv`$XShk8S2nc61d=?~m@P4+7DVIxDe6aLKk(a0pnnD(F@@&U60Z)w;c_-yk^> zEzaKiZ?9|?>$yMQDOOd|tlX)`!jhM`ta4pcsnNEeC9|_lb#pW-EqoG4FeS@s)8p#R zn*7z0;*SSnCFuF5!PvA9mi?9csn zRSmTY2CKyE$@CiNzoxe6_00D5c6Z5ry zmfChm<*=M!2slB)t@9!zHlL%9bi}xB!_@p6aKuE*lJ35s>F7iib5r4(Zp8|4=971lnM9|2v~}BHvdQf%`S`&dW@{G57kgCysv|q`xiE z;7qX6NDGdwO)3*>ejCS>0k-knW~ziZD#<74{bQvR13Iu$w9e+)T)savwEAFUW=qT6 zZ zZ&f;`>QV%df9K7c9s=JL<{F;e@kGJ|F&wR(!Fn!dE`q~qJ4-5c;B8r5h z+;-2}^AKOEtwnlnwmg(`$$?c>4)a#@sV{g5Z25UJqeW9_QR24`g#XBXSeWF0evr60 ztllC(x?+iOd_E}#Ak5kQG zjfkEE*rfUePY8X&~y0T*9RwwF@g93abpM;=g=RIH9e(|{AWMB7+(c@U=sEV_+2l5d6w(UGj z%$*PT+^VQ3*sWwKuGjGNIMDtsz{Y(481ZL)@$Q{@3PdFtr?7b&}GD? z;|>V_&TxEK4<2P9RWcEfg#8Npw||`vIT7G?9<18^Pt?RFS9?&r@ZSK4R2>YCpyNT*~ ziF*tWhmtp(Z!)doRC^B5^Orq(U%fPH4GI?uja`iD644td%rg;b5>^cn&m1M*SnaH- zRplgvH3-JirYZuQWfOvNb{2&ya<^aQ-TP>R72~A-@Xq&ODuC)QsTR3G0IETGWkt=i zhN1aVaDe(gFPE>QzpA2j-8TCxHqt_u!A?|LTvIiFztM8^-7LS)*7mLN?fBPbZD3i7 zp{ot=IrEw9&tox8$J)3s87^@$$-4vwpFaju{!4jPGFtJY3*Q`h6&5UD2PeTfq>P|6 zx#22ueN_Ak!vKw6m~M*|`BP7p0S0Pu+#5t%YJuR&yt;Fj#&xcdZdkP(gI!frlR;RT zDi-Lyi43^?^0?Ro7n*kIBHAHLAolLJO@}SfptXPJjhvw9*bkU@O$l--8)W@~e5D?Xs z{|!K!SxZznOE?_rG{&Z+?zy0O2Fct^1yN9+udYthveA=Jh6mLGa~kX%g5@!>SGbzH za7Vnb!2>Sa*>%s*$6kN5_8afcqghpWtq`T6?km#TYLTC&2u5 z$K!fd@XX&Pmg})yv6(k*12-GkGF#64*&0bmMQlvp@?nH4&fdQJs_rtgs9J4f=+UCc z>r|~tZ>^^0Mu;~LK(Q)C{g^*05qvsVIuCd7*Vll@qGo5SJc(w_b^LVd{G6m~_Fjiu zR!?Qq3gjRD5E+NU*m$e?Hz!Ckb!Pk)qt{|HmK$BuC0XuwVc62tq=diXpt@Pc!3&|Q zjcn^*$Wc+frW7Sm_a|Wj1phWOFXIL(b(2lJ8$Ryr`6Cr(PJx1obLFzAjF!Q!YAnEc zl9jD+?XIB+)tgJXs>et23FlA1(4wlH6^(}eM&-O;MBo}ZZTKWc2K{PoCn5lbL=lm!2^!5m$D)HSY5tB3#mx?`K4Q?#l(0q`85~Hy!HF# z)ozt^1J~YGTkTq-28e3v+VMTqr>l+nFAt$A^4*`Xo1kG_(a@qe#b3Tb!44`@{a{J+ ziI%6nnS(O_nh#R!yq|bZt)@;CbX%P%?Ns{AU%IseZKmv#unH>!T{R~z>PJ|- z;TDjt`2O6Yd$-Yc)?@fq*ZV!8#IlxNNrbo4IFX_VX_qanbbc}(=#Fr}mRSjVk%$ng zaGE+~)s7~--+p1jfvKa8DN7SBd7Us*h5vB-_bXzlp+W;5Kug+vq5(}lIH9PzjgEK2 zX1qsVVQdgmnQ;g9RFy4QeR0Tn7PY%wYP88}$A5|Twf`OA_FPG2Bci9*8{j->GIJ7< zR5;J7xHkvL;9`>ekV2y@R*ns3L2lzhX~zQ|!Yxh0GVA?8h60($v!Y-w7rkn3s0>1> z0da+Lnra|5_V;4Rrj=%i98|!+BsSuc&+Mf1`v<;y(LRIUQqZe-?4Mu6y&VFLToo`! z#cX~V7FU?8UKstRLe-2kRDQ}vJu9_E)>zHFIOwffufuO_P%ZFSYs z)>g0*xB`r)kCCIY{%~$|%#fI=72fjaMF0h257DSp=KG7~o;k6si&pX7<87_Y!f^KLD-G5rg{~GT%>y z2Jvg=CmmN+vwb4}Q;REZA*kx4R0K1kf>RV*25JiM`H4${M#9L)@@JXOSz#*N3Srsj*3 z!wgU7&WFp})%0h*$4nc>h09*=9?B+8{cvQr-P}I4f~#S9abtGO7qS?1Cm7*sC1)J1E8!;)%QXDlWX&4@lZ}zF@cSI zv2)JNJ;%8YtHoEXQRrRJA**EL>kN5T=` zVRX-48St0YwaV4m%ksp0p627BU5~zZ&rf!rQRETiVgO5R<46?OsrdxCyjr;QRu+$b zAIlyoQw?8(a&B)trvL`|@LyA#!e4i$R-~ULxjvmsn_LhRDVcbJo3>;O5y=#M4w9uM zZrHvQjd}tFjx^3sM4h)HJOqjg{YN`*Ta0h>2xaDu(;t*&8h!1E<=fSILLNXwS>!UrvNKq^~>^Cx!w93}Jyqd!I6=_uu+&1R%~kWX_8)Us-uB2sXBYD6+j>_mPf zxi|Le=ksSWH*IAB!0?%4pI4ofBt&YAwe_*a>WL zs0e7oajSA6E^uyS||l%nW^0?~aL3CWBwYb~^S-zUuU^Wi6a3Njm#1$^cw);h)5lQJp+BM7G6NL$7$W5;53jY{ddK~9JkWtO6`Jbb2#!! zi1ncwFvD@^;_@1J#J=GFStCqR(b(uba>r(I7iBw~94-~UywMrxGE>>rhD}dV4i1fE zLx{U)PCNo>nSNv}GQ|o6;{Anra|TNb#)kYB@ikvs}YKX186v zKNjJJ!{WT}lG$b2{mTKCUzm8CM|rT7=ZK=xzCB36!KbJ0?Lf=8S^=K%Tatf+xkB2|xo zzQIE^S#n_{ur3rc_;LWmuQ*&wb}AXaM)D(5W#8_cQxvN;ZvWB91t{)EBL8$T{lp{@ zXMiOhK+6W#UB__P{XM5;I( z9jxC1sw%@>InHZqx6-|ILRqUpO=B{XDliJWy0uw5pAU&*Ay2|l(#=#!n+9z9cB@_5 zja**V&&k{d<-4feSD$61Q6W;Q{`YZdW9WPdT!9U@p;5TAYjP8P?Q9e%dwh(N0va@r zoFW9nAN7?LDI_(;xdOQeyfN`XEg*k?!nwtJU>--HA}zn6cLk5^XF z?3-&M3RaBi{lSx&@Eff4N5LWwH43bMq#8(w;Exvh5yE2yI!XoRdnnYp8K5lT;()M5 zIE+n82D1U&Aw>t%hmQ4S2)U018i0Z**Ht-Syw@=g>80`o7N%_&r$Jgus*x8M?>9oc|*g7;gzS8&xeU;!m4tx^9D^M#Y5h1{L z*xIk(CpW@`f}+Hw@XgyJE%p^oPzRr6nDy+Q2cCSyE?Mn~RmwUp~CRBN7j?7oKVybicTb{df2gXO+R%8Zfd3nWrd zvQHeTh6+stmV@_{$}KgWQgY<`XV(2}l)KIN2vv<0@d)q>mKhS@ER8TQcuS-j4)|Ay zqklC*f|xVk*Pv_CqAxp}W*|gQ!Wl`_;n~^`gCI&Ob==c5fze2X{+`s-Zl+70-|>u$ znkXD8C2Fy_JU-F=hcruLSI0)0U;P^gcwr-?j8gVgt%Y63#?Jve1s^WU>yj4J@8j&< znapH>5k&jww@?4wn=fyfxeqOT$}@Z7va{#dscF`5w)bIX%!p#k@%_fq6t55$AWjF9 zxLR&63=XXGoH_1%e{$$2-iSq3F4@095^%mHe(F~+TzyJ-#B8O}Te7w1Ye9l3!h&QE zU+0K@bE)|PmJ608b2=p@K4p#;D(@JXWt?=DNxzy+x1Pj2fMDv>@B`N@TF7P===m z6(`NQI}Q5A^j_pFw_0`ldaVm~<<~h@$N`g0{IS9b(SfxsdJN-B(1vFesT96=fyYC} z!Hsb>%thxZ=fn=A$F}pO49R)-biboZ;H5oyxAql2lvfN_P|b=vuR4%qIGeqjLP3|S z+Uv_|o-nTS8IaIAdouiLbcAJEIrS@j|O(nh-68R%v9kNIKkM>w_-^_^n+!+*R^c(n< z@4T=HSENDJvkG1BgZ?DJS8yh4}VsLE+nEN#UR(4 z5$ucHTknL{Twk=(ni}utOsc1`-7iVvFN`~u+6u^}suETA&qNq-562h5ld+EH?}YCr zMc!{u2K`11S|#u-Kpo%M9mo4#@e?uv9fG`Fa{*}wFEcrO1u2!OZxI-!QkAHciQ)s! zkv*75G!-I<5yKH1CMZEhs3^Ix%7L&7yA(_^8-Gy0yn?V*m~lVEK4~3h{^*af@&-6T zf_6rInIa2>Yu1G@wTgyFEC)iIHi6w7QL5rX2ox_;}eB& zUuRuSLzWftJcZd9WpH)Jn#v%1eb*BjNMqhP9pbLilQgT=ljpO__4c8BmvE z)|zSM4*ud_FlgVzZFKO;rluw=ZL|FNgyyH&{J5H&$jQ*^;&e4H>^VakRE)r@vyw&( zZ5dN6C>Aj;!w!w@E@W%U;}yjlNe?OL!RD+e+h2|6s&iW7|{3r4#gg>V*y~{&1Gbj-)Ac*jWx8O91GSY?Q(PV z4IRsX0wF3RH)|V2;R4$$k}i%3Qq%`ex-G*%8kuJ`hOqx_ie5a4pGPcuZq`S10qj8K zWV4i4`86&^8?w+jA&<~TRz~I{ihn`t9T}-mx^qPg|K%86~XG2{VydA_mql_`KP_kcsqjG7pQ`|Hwpy#pm<^$zK zr=k5&75QX6a6oCQRc-1ji(H;SeeoB>=2acx?ph+JpnsCrU>L#@4WkK0l>mGW#fxg8 z7f8YL4j)EiDKCiOzq`_czegunanz6CJyWf=>l*azLA2nIe;oBy+3p`8L{{Wh;iLl;Gvebz2d}+F^1g|}CUTloHr=KAe;|#nUT|l` zasdQT)!Wktl*QxP2a?rY8A;XAG51j?!a*^6Wj*I{4)d+ais2ZUi)u=Og&#M4Qu(jx zO4z)fhcbFmVv^&x>$SnCV+`#V`m0G=uECmvId#Y3>o^&dwZ2K(%0Kez#Rb+O!W#=Z zP>=|)hgUu^)1pXai{}KMC>$+~Ua^U-0>Q9c5`}2w5Th@D3t4gsteRBDYk?U6t18$~ zO9CriuDH7b4f*G4SUf(`Y`mXws|jlJmLeIp`ebeB%kC|uYqbmvM62!#UOJ@i4$WWPv|7#r)>tsw_sp z7#Nv=H|6e^@s@l`fMx>!jmZqD(P7BEP7g)h;TV3jMxIBLco}TS^{L^RwDkn zlWO(?mWd*U?QZ*b34YEIYtALw`_t759eYZQPk6oWOTpdlK7YSlEF~L&4!DHS8cAjs zSW)wrJwGd23G{*y2!PiJ=ovX2LgRuK4JLp>#?qt@tFy7^2L<^*75O3HrI(VJ4!i_G z?o%mZ4%Ou|(z>?iz--@k4&6!^;D_{thTytr&`G_Wa=k^c6@M;6~Q8mK|+5(M4E$8xg(>; z&Giz`2b*v8SrP)Orif@W&`L%?LVXEku|Z?VxPeK>=LM1u|kEpgJyDgA~pD-*OmiGbN??*X;7K)bJY?_s}q4 z$-`1aDCrnUYEDtXAhdYJH$!!TaY%T)@tLBY z44`ZwB)lBa4P+D^A8gKnyepK^>c4er#gfS{+KPWw7F*U-LI^I8rL~?j*rbc0<1M2w zKW3%qC{D6pQ`Q@Pp~}w^VFBe#rvJI zvS-!@fCHfMTyV?-M0iWi*JJ(e-`DC))Y zDaPPscN7MP36zmv3kfZ`UN7$qT_yq;8<4w_`tywpH76_a>6F*}u0cf9 zP{%R3yV)!UP)6vorw|9w#GxpN&EN`*vwW~l&z1QYA?#s?UzWtLwfm2}I2h*B9m$KxDGcjoVQr9L|^ImnkrOA2WrZ#D)T1z97mVDZnArW4C%8Ynjlx9^M-|hVp zfJyFnMUczI($|0w9cz01Y zYSF5{6_U1J4|;t9NxHsiUyOkF

HES}pTjIvTd{Xu~P6gy0s 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