Compare commits

..
Author SHA1 Message Date
evanbacon e57c2a75a2 Update app.json 2022-05-27 11:54:42 -05:00
evanbacon 92776140fe wip 2022-05-27 11:53:49 -05:00
385 changed files with 18461 additions and 13086 deletions

No files matched your search

+3 -2
View File
@@ -30,17 +30,18 @@ body:
label: Config Plugin
options:
- '@config-plugins/android-jsc-intl'
- '@config-plugins/apple-settings'
- '@config-plugins/detox'
- '@config-plugins/ffmpeg-kit-react-native'
- '@config-plugins/ios-stickers'
- '@config-plugins/react-native-adjust'
- '@config-plugins/react-native-ble-plx'
- '@config-plugins/react-native-blob-util'
- '@config-plugins/react-native-branch'
- '@config-plugins/react-native-callkeep'
- '@config-plugins/react-native-dynamic-app-icon'
- '@config-plugins/react-native-google-cast'
- '@config-plugins/react-native-pdf'
- '@config-plugins/react-native-siri-shortcut'
- '@config-plugins/react-native-quick-actions'
- '@config-plugins/react-native-webrtc'
validations:
required: true
+11 -4
View File
@@ -11,10 +11,13 @@ contact_links:
url: https://github.com/wix/Detox/issues
- about: FFmpeg Kit for React Native
name: 📦 ffmpeg-kit-react-native issues
url: https://github.com/arthenica/ffmpeg-kit/issues
url: https://github.com/tanersener/ffmpeg-kit/issues
- about: Adjust React Native SDK
name: 📦 react-native-adjust issues
url: https://github.com/adjust/react_native_sdk/issues
- about: React Native Bluetooth Low Energy library
name: 📦 react-native-ble-plx issues
url: https://github.com/Polidea/react-native-ble-plx/issues
- about: >-
A module provides upload, download, and files access API. Supports file
stream read/write for process large files.
@@ -26,12 +29,16 @@ contact_links:
- about: Programmatically change the app icon in React Native.
name: 📦 react-native-dynamic-app-icon issues
url: https://github.com/idearockers/react-native-dynamic-app-icon/issues
- about: React Native wrapper for the Google Cast SDK for iOS and Android
name: 📦 react-native-google-cast issues
url: >-
https://github.com/react-native-google-cast/react-native-google-cast/issues
- about: A react native PDF view component, support ios and android platform
name: 📦 react-native-pdf issues
url: https://github.com/wonday/react-native-pdf/issues
- about: A React Native library that enables you to use iOS 12+ Siri Shortcuts.
name: 📦 react-native-siri-shortcut issues
url: https://github.com/Gustash/react-native-siri-shortcut/issues
- about: A react-native interface for Touch 3D home screen quick actions
name: 📦 react-native-quick-actions issues
url: https://github.com/jordanbyron/react-native-quick-actions/issues
- about: WebRTC for React Native
name: 📦 react-native-webrtc issues
url: https://github.com/react-native-webrtc/react-native-webrtc/issues
+91
View File
@@ -0,0 +1,91 @@
# AUTO GENERATED:
# This file was generated by running the following in the root directory:
#
# yarn update-dependabot-config
version: 2
updates:
- package-ecosystem: npm
directory: packages/android-jsc-intl
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/detox
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/ffmpeg-kit-react-native
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/ios-stickers
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-adjust
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-ble-plx
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-blob-util
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-branch
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-callkeep
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-dynamic-app-icon
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-google-cast
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-pdf
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-quick-actions
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
- package-ecosystem: npm
directory: packages/react-native-webrtc
schedule:
interval: daily
time: '09:00'
timezone: America/Los_Angeles
+1 -1
View File
@@ -16,5 +16,5 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: yarn install --frozen-lockfile --check-files
- run: npm install
- run: npx remark --use validate-links . .github
+37
View File
@@ -0,0 +1,37 @@
name: Release
# https://github.com/bent10/monorepo-starter/blob/main/docs/recipes/release-automation.md
on:
push:
branches:
- main
jobs:
release:
name: Releasing
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/cache@v2
with:
path: "**/node_modules"
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
- run: yarn install --frozen-lockfile --check-files
- run: yarn lerna run prepare --stream
# If the dry run fails then it will prevent us from automatically breaking the repo.
- name: Semantic release (dry run)
run: npx multi-semantic-release --dry-run --ignore-private-packages
env:
GITHUB_TOKEN: ${{ github.token }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Semantic release
# use `--ignore-packages` to ignore packages on bumping process
# npx multi-semantic-release --ignore-packages=packages/a/**,packages/b/**
run: npx multi-semantic-release --ignore-private-packages
env:
GITHUB_TOKEN: ${{ github.token }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+7 -5
View File
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node: ["18"]
node: ["16", "17"]
name: Build with Node ${{ matrix.node }}
steps:
- uses: actions/checkout@v2
@@ -22,7 +22,7 @@ jobs:
node-version: ${{ matrix.node }}
- run: yarn install --frozen-lockfile --check-files
- run: yarn lerna run prepare --stream
- uses: actions/cache@v4
- uses: actions/cache@v2
with:
path: "*"
key: v2-${{ github.sha }}-${{ matrix.node }}
@@ -32,20 +32,22 @@ jobs:
strategy:
fail-fast: false
matrix:
node: ["18"]
node: ["16", "17"]
package: [
# Manually add packages here
detox,
ffmpeg-kit-react-native,
ios-stickers,
react-native-ble-plx,
react-native-blob-util,
react-native-branch,
react-native-siri-shortcut,
react-native-google-cast,
react-native-pdf,
# react-native-quick-actions,
]
name: Test ${{ matrix.package }} on Node ${{ matrix.node }}
steps:
- uses: actions/cache@v4
- uses: actions/cache@v2
with:
path: "*"
key: v2-${{ github.sha }}-${{ matrix.node }}
+1 -2
View File
@@ -62,5 +62,4 @@ packages/@*/*/build/**
apps/*/ios/*
apps/*/android/*
apps/*/web-build/*
apps/*/dist/*
apps/*/web-build/*
+62
View File
@@ -0,0 +1,62 @@
// From @byCedric https://github.com/expo/expo-github-action/blob/main/.releaserc.js
const rules = [
{ type: "feat", release: "minor", title: "Features" },
{ type: "fix", release: "patch", title: "Bug Fixes" },
{ type: "test", release: "patch", title: "Tests" },
{ type: "ci", release: "patch", title: "Continuous Integration" },
{ type: "refactor", release: "patch", title: "Code Refactoring" },
{ type: "chore", release: "patch", title: "Other chores" },
{ type: "docs", release: "patch", title: "Documentation changes" },
];
// Simple mapping to order the commit groups
const sortMap = Object.fromEntries(
rules.map((rule, index) => [rule.title, index])
);
module.exports = {
branches: ["main"],
tagFormat: "${version}",
repositoryUrl: "https://github.com/expo/config-plugins.git",
plugins: [
[
"@semantic-release/commit-analyzer",
{
preset: "conventionalcommits",
releaseRules: [
{ breaking: true, release: "major" },
{ revert: true, release: "patch" },
].concat(
rules.map(({ type, release, breaking }) => ({
type,
release,
breaking,
}))
),
},
],
[
"@semantic-release/release-notes-generator",
{
preset: "conventionalcommits",
presetConfig: {
types: rules.map(({ type, title }) => ({ type, section: title })),
},
writerOpts: {
commitGroupsSort: (a, z) => sortMap[a.title] - sortMap[z.title],
},
},
],
"@semantic-release/changelog",
"@semantic-release/npm",
[
"@semantic-release/git",
{
message: "chore: ${nextRelease.version}\n\n${nextRelease.notes}",
assets: ["package.json", "CHANGELOG.md", "build/*"],
},
],
"@semantic-release/github",
],
};
+1 -1
View File
@@ -6,7 +6,7 @@ To submit a pull request:
1. Fork the [repository](https://github.com/expo/config-plugins) and create a feature branch. (Existing contributors can create feature branches without forking. Prefix the branch name with `@your-github-username/`.)
2. Run `yarn` in the root directory to generate the build files.
3. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR title.
3. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR tile.
4. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI.
5. Make sure all tests pass on GitHub Actions.
6. Wait for a review and adjust the code if necessary.
+1 -59
View File
@@ -1,69 +1,11 @@
# Expo Config Plugins
- A collection of [Expo config plugins](https://docs.expo.dev/guides/config-plugins/) for configuring the `npx expo prebuild` command.
- A collection of [Expo config plugins](https://docs.expo.dev/guides/config-plugins/) for configuring the `expo prebuild` command.
- This repo is to Expo config plugins as [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped) is to TypeScript.
- We prefer packages ship their own Expo config plugin (to ensure versioning is aligned), but if they haven't adopted the system yet, the community can add a package here.
- All packages here are community maintained. Feel free to improve docs, packages, tests, etc.
- We maintain a 1-1 mapping of **native packages** ⇔ `@config-plugins/*`. This means there should be no general utility packages here -- those are better suited for a different repo / NPM namespace.
## First-party plugins
Here is a list of known packages that have a built-in Config Plugin.
> Not all packages need a config plugin, packages that don't appear here might still work with managed EAS.
- [React Native Firebase](https://rnfirebase.io/) (`@react-native-firebase/perf`, `@react-native-firebase/app`, `@react-native-firebase/crashlytics`)
- [react-native-google-cast](https://github.com/react-native-google-cast/react-native-google-cast)
- [react-native-nfc-manager](https://github.com/revtel/react-native-nfc-manager)
- [react-native-health](https://github.com/agencyenterprise/react-native-health)
- [@react-native-mapbox-gl/maps](https://github.com/rnmapbox/maps)
- [@logrocket/react-native](https://www.npmjs.com/package/@logrocket/react-native)
- [sentry-expo](https://www.npmjs.com/package/sentry-expo)
- [@leanplum/react-native-sdk](https://github.com/Leanplum/Leanplum-ReactNative-SDK#readme)
- [react-native-fbsdk-next](https://www.npmjs.com/package/react-native-fbsdk-next)
- [@stripe/stripe-react-native](https://www.npmjs.com/package/@stripe/stripe-react-native)
- [@react-native-voice/voice](https://www.npmjs.com/package/@react-native-voice/voice)
- [react-native-imglysdk](https://www.npmjs.com/package/react-native-imglysdk)
- [@viro-community/react-viro](https://github.com/virocommunity/viro) -- [Guide](https://viro-community.readme.io/docs/integrating-with-expo)
- [react-native-msal](https://www.npmjs.com/package/react-native-msal)
- [react-native-spotlight-search](https://www.npmjs.com/package/react-native-spotlight-search)
- [newrelic-react-native-agent](https://www.npmjs.com/package/newrelic-react-native-agent)
- [react-native-videoeditorsdk](https://www.npmjs.com/package/react-native-videoeditorsdk)
- [notifee](https://notifee.app/)
- [App Clips](https://github.com/bndkt/react-native-app-clip/)
- [iOS Safari Extensions](https://github.com/andrew-levy/react-native-safari-extension/)
- [react-native-ble-plx](https://github.com/dotintent/react-native-ble-plx)
### Complementary
More out-of-tree plugins which can be used to configure more packages.
- [onesignal-expo-plugin](https://github.com/OneSignal/onesignal-expo-plugin) (for use with `react-native-onesignal`)
- Configures **iOS Notification Service Extensions** for rich push notification and custom notification actions.
- [@lyrahealth-inc/react-native-orientation-plugin](https://www.npmjs.com/package/@lyrahealth-inc/react-native-orientation-plugin) (for use with `react-native-orientation-plugin`)
- [airship-expo-plugin](https://www.npmjs.com/package/airship-expo-plugin) (for use with `urbanairship-react-native`)
- [config-plugin-react-native-intercom](https://www.npmjs.com/package/config-plugin-react-native-intercom) (for use with `intercom-react-native`)
- [@allboatsrise/expo-marketingcloudsdk](https://www.npmjs.com/package/@allboatsrise/expo-marketingcloudsdk) (for use with `react-native-marketingcloudsdk`)
- [@ouvio/react-native-background-location-plugin](https://www.npmjs.com/package/@ouvio/react-native-background-location-plugin) (for use with `react-native-background-location-plugin`)
- [expo-community-flipper](https://www.npmjs.com/package/expo-community-flipper) (for use with Flipper)
- [expo-appcenter](https://www.npmjs.com/package/expo-appcenter) (for use with `appcenter`)
- [expo-react-native-freshchat](https://www.npmjs.com/package/expo-react-native-freshchat) (for use with `react-native-freshchat-sdk`)
- [react-native-keyevent-expo-config-plugin](https://github.com/chronsyn/react-native-keyevent-expo-config-plugin) (for use with `react-native-keyevent`)
- [watermelondb-expo-plugin](https://github.com/morrowdigital/watermelondb-expo-plugin) (for use with `@nozbe/watermelondb`)
### No Plugin Required
Just install and rebuild! If a package doesn't require any futher setup then it most likely doesn't need an Expo config plugin. Most packages work without a config plugin (including packages not listed below):
- [react-native-share](https://github.com/react-native-share/react-native-share)
- [@react-native-menu/menu](https://github.com/react-native-menu/menu)
- [react-native-blurhash](https://github.com/mrousavy/react-native-blurhash)
- [react-native-app-shortcuts](https://github.com/lokyoung/react-native-app-shortcuts)
- [react-native-multiple-image-picker](https://github.com/baronha/react-native-multiple-image-picker)
- [`@shopify/flash-list`](https://github.com/Shopify/flash-list)
> Feel free to [open a PR](https://github.com/expo/config-plugins/edit/main/README.md) with missing packages.
## Contributing!
See the [contributing guide](/CONTRIBUTING.md).
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+8
View File
@@ -0,0 +1,8 @@
{
"expo": {
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
"plugins": [
"@config-plugins/airbridge-react-native-sdk"
]
}
}
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
File renamed without changes.
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
@@ -0,0 +1,25 @@
{
"name": "@config-plugins-app/airbridge-react-native-sdk",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/airbridge-react-native-sdk": "*",
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"airbridge-react-native-sdk": "^1.4.5",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
@@ -1,9 +1,10 @@
import { View, Text } from "react-native";
import React from "react";
import { Text, View } from "react-native";
export default function App() {
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>No-op on this platform</Text>
<Text>airbridge-react-native-sdk</Text>
</View>
);
}
+4
View File
@@ -0,0 +1,4 @@
{
"12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true,
"40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true
}
+79 -1
View File
@@ -1,2 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/artifacts
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
+3 -3
View File
@@ -1,3 +1,3 @@
export { default } from "./src/detox/App";
// export { default } from "./src/android-jsc-intl/App";
// export { default } from "./src/react-native-adjust/App";
export { default } from './src/detox/App';
// export { default } from './src/android-jsc-intl/App';
// export { default } from './src/android-jsc-adjust/App';
+66
View File
@@ -0,0 +1,66 @@
### @expo/app [1.0.1](https://github.com/expo/config-plugins/compare/@expo/[email protected]...@expo/[email protected]) (2022-03-15)
### Bug Fixes
* **ci:** use correct internal versions ([ab8076a](https://github.com/expo/config-plugins/commit/ab8076adf51e9ba0439eba60b153d729a0996b8d))
### Dependencies
* **@config-plugins/android-jsc-intl:** upgraded to 1.0.1
* **@config-plugins/detox:** upgraded to 1.0.1
* **@config-plugins/react-native-adjust:** upgraded to 1.0.0
* **@config-plugins/react-native-ble-plx:** upgraded to 1.0.0
* **@config-plugins/react-native-blob-util:** upgraded to 1.0.1
* **@config-plugins/react-native-branch:** upgraded to 1.0.0
* **@config-plugins/react-native-callkeep:** upgraded to 1.0.0
* **@config-plugins/react-native-dynamic-app-icon:** upgraded to 1.0.0
* **@config-plugins/react-native-google-cast:** upgraded to 1.0.0
* **@config-plugins/react-native-pdf:** upgraded to 1.0.0
* **@config-plugins/react-native-quick-actions:** upgraded to 1.0.0
* **@config-plugins/react-native-webrtc:** upgraded to 1.0.0
## @expo/app 1.0.0 (2022-03-15)
### Features
* create react-native-branch plugin ([0b06baa](https://github.com/expo/config-plugins/commit/0b06baa2b486c5e02d433a4ac785960934f403b9))
### Bug Fixes
* respect old config from expo-branch ([d0e0186](https://github.com/expo/config-plugins/commit/d0e018601c09c0e92191a4eb2998ab0e6fa1c6ec))
### Other chores
* added start-metro script ([4a7d707](https://github.com/expo/config-plugins/commit/4a7d707b200a3e499d9d71caf49ad4fc1d0a89e0))
* update script ([dcf61a9](https://github.com/expo/config-plugins/commit/dcf61a9b9542851095954d84c9054c97c5400dc9))
* upgrade to latest react-native-branch ([df98474](https://github.com/expo/config-plugins/commit/df98474d79ed139b42ddd698d13100160c656c26))
### Documentation changes
* add android-jsc-intl example ([d96c0b2](https://github.com/expo/config-plugins/commit/d96c0b2888da3808d7c4e2dd7993129711ba717d))
### Dependencies
* **@config-plugins/android-jsc-intl:** upgraded to 1.0.0
* **@config-plugins/detox:** upgraded to 1.0.0
* **@config-plugins/ffmpeg-kit-react-native:** upgraded to 1.0.0
* **@config-plugins/ios-stickers:** upgraded to 1.0.0
* **@config-plugins/react-native-adjust:** upgraded to 1.0.0
* **@config-plugins/react-native-ble-plx:** upgraded to 1.0.0
* **@config-plugins/react-native-blob-util:** upgraded to 1.0.0
* **@config-plugins/react-native-branch:** upgraded to 1.0.0
* **@config-plugins/react-native-callkeep:** upgraded to 1.0.0
* **@config-plugins/react-native-dynamic-app-icon:** upgraded to 1.0.0
* **@config-plugins/react-native-google-cast:** upgraded to 1.0.0
* **@config-plugins/react-native-pdf:** upgraded to 1.0.0
* **@config-plugins/react-native-quick-actions:** upgraded to 1.0.0
* **@config-plugins/react-native-webrtc:** upgraded to 1.0.0
+6 -5
View File
@@ -1,10 +1,10 @@
{
"expo": {
"name": "detoxapp",
"name": "app",
"slug": "app",
"version": "1.0.0",
"orientation": "portrait",
"icon": "https://github.com/expo.png",
"icon": "https://icogen.vercel.app/api/icon",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
@@ -29,11 +29,12 @@
"favicon": "./assets/favicon.png"
},
"plugins": [
"@config-plugins/detox",
"@config-plugins/react-native-adjust",
"@config-plugins/react-native-callkeep",
"@config-plugins/android-jsc-intl",
"expo-localization"
"@config-plugins/react-native-blob-util",
"@config-plugins/react-native-pdf",
"@config-plugins/android-jsc-intl"
]
}
}
+6
View File
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+7 -15
View File
@@ -1,21 +1,13 @@
const iosName = "detoxapp";
const simulator = "iPhone 16";
const iosName = "app";
const emulator = "Pixel_3a_API_30";
const simulator = "iPhone 13 Pro";
const derivedDataPath = "ios/build";
const sdk = "iphonesimulator";
module.exports = {
testRunner: {
$0: "jest",
args: {
config: require.resolve("./e2e/jest.config.js"),
_: ["e2e"],
},
jest: {
setupTimeout: 300000,
reportSpecs: true,
reportWorkerAssign: true,
},
},
testRunner: "jest",
runnerConfig: require.resolve("./e2e/jest.config.js"),
specs: "e2e",
behavior: {
init: {
exposeGlobals: false,
@@ -55,7 +47,7 @@ module.exports = {
emulator: {
type: "android.emulator",
device: {
avdName: "Pixel_6_Pro_API_33",
avdName: emulator,
},
},
},
File renamed without changes.
+23
View File
@@ -0,0 +1,23 @@
const {
DetoxCircusEnvironment,
SpecReporter,
WorkerAssignReporter,
} = require("detox/runners/jest-circus");
class CustomDetoxEnvironment extends DetoxCircusEnvironment {
constructor(config, context) {
super(config, context);
// Can be safely removed, if you are content with the default value (=300000ms)
this.initTimeout = 300000;
// This takes care of generating status logs on a per-spec basis. By default, Jest only reports at file-level.
// This is strictly optional.
this.registerListeners({
SpecReporter,
WorkerAssignReporter,
});
}
}
module.exports = CustomDetoxEnvironment;
+3 -6
View File
@@ -1,14 +1,11 @@
module.exports = {
testEnvironment: require.resolve("./environment.js"),
testRunner: require.resolve("jest-circus/runner"),
testTimeout: 120000,
rootDir: "..",
testMatch: ["<rootDir>/**/__tests__/*"],
testRegex: "/__tests__/.*(e2e)\\.[jt]sx?$",
transform: {
"^.+\\.[jt]sx?$": "ts-jest",
},
reporters: [require.resolve("detox/runners/jest/reporter")],
globalSetup: "detox/runners/jest/globalSetup",
globalTeardown: "detox/runners/jest/globalTeardown",
testEnvironment: "detox/runners/jest/testEnvironment",
reporters: [require.resolve("detox/runners/jest/streamlineReporter")],
verbose: true,
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

+6
View File
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+24 -15
View File
@@ -25,28 +25,37 @@
"@config-plugins/detox": "*",
"@config-plugins/react-native-adjust": "*",
"@config-plugins/react-native-callkeep": "*",
"detox": "^20.37.0",
"expo": "~53",
"expo-localization": "~16.1.5",
"expo-splash-screen": "~0.30.7",
"expo": "^45.0.0",
"detox": "^19.6.9",
"expo-localization": "~13.0.0",
"expo-splash-screen": "~0.15.1",
"expo-status-bar": "~1.3.0",
"expo-updates": "~0.13.1",
"fbjs": "^0.8.18",
"i18n-js": "^3.8.0",
"luxon": "^1.27.0",
"react": "19.0.0",
"react-native": "0.79.2",
"react-native-adjust": "^5.1.0",
"react-native-callkeep": "^4.3.16",
"react-native-safe-area-context": "5.3.0"
"react": "17.0.2",
"react-dom": "17.0.2",
"react-native": "0.68.2",
"react-native-adjust": "^4.29.6",
"react-native-callkeep": "^4.3.3",
"react-native-safe-area-context": "4.2.4",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9",
"@babel/plugin-syntax-jsx": "^7.16.0",
"@types/jest": "^29.4.0",
"@expo/metro-config": "~0.3.7",
"@expo/xcpretty": "^4.1.2",
"@types/jest": "^26.0.19",
"@types/luxon": "^1.27.1",
"babel-jest": "^29.5.0",
"jest": "~29.7.0",
"jest-circus": "^29.5.0",
"ts-jest": "^29.0.5",
"typescript": "~5.8.3"
"@types/react": "~17.0.21",
"@types/react-native": "~0.64.12",
"babel-jest": "~25.2.6",
"jest": "^26.6.3",
"jest-circus": "^26.5.2",
"ts-jest": "^26.4.4",
"typescript": "~4.3.5"
},
"private": true
}
+1 -1
View File
@@ -9,7 +9,7 @@ set -eu
iosName=$1
# Debug or Release
configuration=${3:-"Debug"}
configuration=$2
# YES or NO
UseModernBuildSystem=${3:-"NO"}
+1 -1
View File
@@ -16,7 +16,7 @@ else
commandFile=$(dirname "$0")/start.command
cat > ${commandFile} << EOF
cd "\$(dirname "\$0")/.."
# Run 'npx expo start --help' to get more parameters
# Run 'react-native start --help' to get more parameters
yarn start --port ${port}
EOF
# execute the file in a new command line window
+1 -1
View File
@@ -8,7 +8,7 @@ export default function App() {
"APP_TOKEN",
AdjustConfig.EnvironmentSandbox
);
Adjust.enable();
Adjust.create(adjustConfig);
}, []);
return (
+3
View File
@@ -0,0 +1,3 @@
const { createWebpackConfigAsync } = require("expo-yarn-workspaces/webpack");
module.exports = createWebpackConfigAsync;
-123
View File
@@ -1,123 +0,0 @@
import withAppleSettings, {
ChildPane,
Group,
RadioGroup,
Slider,
Switch,
TextField,
Title,
} from "@config-plugins/apple-settings";
import { MultiValue } from "@config-plugins/apple-settings/build/models";
import { ConfigContext, ExpoConfig } from "expo/config";
import path from "node:path";
const folderName = path.basename(__dirname);
const cleanName = folderName.replace(/[_\s-]/g, "");
const appId = "dev.bacon." + cleanName;
function withWhiteLabel(config: Partial<ExpoConfig>) {
if (!config.extra) config.extra = {};
// Expose CI env variables to the app
config.extra.CI = process.env.CI;
if (!config.ios) config.ios = {};
config.ios.bundleIdentifier = appId;
if (!config.android) config.android = {};
config.android.package = appId;
return config;
}
module.exports = ({ config }: ConfigContext): Partial<ExpoConfig> => {
config = withWhiteLabel(config);
config = withAppleSettings(config as ExpoConfig, {
// The name of the .plist file to generate. Root is the default and must be provided.
Root: {
// The locales object is optional. If provided, it will be used to generate the localized .strings files.
locales: {
// The Apple locale code. This will be used to generate the .strings file.
en: {
// Name of the localized key.
Name: "Text Field",
},
},
// The page object is required. It will be used to generate the .plist file.
// The contents will be converted directly to plist.
page: {
// The `PreferenceSpecifiers` defines the UI elements to generate.
PreferenceSpecifiers: [
Title({
title: "Title",
value: "Default Title",
key: "title_preference",
}),
// Helper models can be used to generate the UI elements using
// an API that's similar to React Native.
TextField({
title: "Name",
key: "name_preference",
value: "",
keyboardType: "Alphabet",
autoCapitalize: "None",
autoCorrect: "No",
}),
Switch({
title: "Enabled",
key: "enabled_preference",
value: true,
}),
Slider({
key: "slider_preference",
value: 0.5,
}),
// Broken https://forums.developer.apple.com/forums/thread/764519
// RadioGroup({
// value: "option1",
// key: "radio_preference",
// items: [
// {
// title: "Option 1",
// value: "option1",
// },
// {
// title: "Option 2",
// value: "option2",
// },
// ],
// }),
// MultiValue({
// title: "Multi Value",
// key: "multi_value_preference",
// value: "alpha",
// items: [
// {
// title: "Alpha",
// value: "alpha",
// short: "α",
// },
// {
// title: "Beta",
// value: "beta",
// short: "β",
// },
// {
// title: "Delta",
// value: "delta",
// short: "Δ",
// },
// {
// title: "Omega",
// value: "omega",
// short: "Ω",
// },
// ],
// }),
],
},
},
});
return config;
};
-8
View File
@@ -1,8 +0,0 @@
{
"expo": {
"name": "apple-settings",
"icon": "https://github.com/expo.png",
"platforms": ["ios"],
"plugins": [["expo-build-properties", { "ios": { "ccacheEnabled": true } }]]
}
}
-20
View File
@@ -1,20 +0,0 @@
{
"name": "@config-plugins-app/apple-settings",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/apple-settings": "*",
"@react-native-community/slider": "4.5.6",
"@react-native-picker/picker": "2.11.0",
"expo": "~53",
"expo-splash-screen": "~0.30.7",
"react": "19.0.0",
"react-native": "0.79.2"
},
"private": true
}
-57
View File
@@ -1,57 +0,0 @@
import React from "react";
import { Button, Linking, StyleSheet, View } from "react-native";
import {
SettingsRadioGroup,
SettingsSlider,
SettingsSwitch,
SettingsTextInput,
SettingsTitle,
} from "./SettingsViews";
const App = () => {
return (
<View style={styles.container}>
{/* <SettingsTitle settingsKey="title_preference" /> */}
<SettingsTextInput
style={{
height: 40,
borderColor: "gray",
borderWidth: 1,
padding: 8,
}}
settingsKey="name_preference"
/>
<SettingsSwitch settingsKey="enabled_preference" />
<SettingsSlider settingsKey="slider_preference" />
<View />
<SettingsRadioGroup settingsKey="radio_preference">
<SettingsRadioGroup.Item label="Option 1" value="option1" />
<SettingsRadioGroup.Item label="Option 2" value="option2" />
</SettingsRadioGroup>
<View />
<Button
title="Launch Settings"
onPress={() => {
Linking.openSettings();
}}
/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "stretch",
paddingHorizontal: 56,
gap: 12,
},
value: {
fontSize: 24,
marginVertical: 12,
},
});
export default App;
-91
View File
@@ -1,91 +0,0 @@
import Slider from "@react-native-community/slider";
import { Picker } from "@react-native-picker/picker";
import React from "react";
import { Settings, Switch, Text, TextInput } from "react-native";
export function useSetting<T = string>(key: string): [T, (value: T) => void] {
const [value, setValue] = React.useState<T>(() => Settings.get(key));
React.useEffect(() => {
let isMounted = true;
const callback = Settings.watchKeys(key, () => {
if (isMounted) {
setValue(Settings.get(key));
}
});
return () => {
Settings.clearWatch(callback);
isMounted = false;
};
}, [key]);
return [
value,
(value) => {
Settings.set({ [key]: value });
setValue(value);
},
];
}
export function SettingsSlider({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Slider>,
"selectedValue" | "onValueChange"
>) {
const [value, setValue] = useSetting<number>(settingsKey);
return <Slider {...props} value={value ?? 0} onValueChange={setValue} />;
}
export function SettingsRadioGroup({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Picker>,
"selectedValue" | "onValueChange"
>) {
const [value, setValue] = useSetting<string>(settingsKey);
return (
<Picker
{...props}
selectedValue={value ?? "option1"}
onValueChange={setValue}
/>
);
}
SettingsRadioGroup.Item = Picker.Item;
export function SettingsSwitch({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Switch>,
"value" | "onValueChange"
>) {
const [value, setValue] = useSetting<boolean>(settingsKey);
return <Switch {...props} value={!!value} onValueChange={setValue} />;
}
export function SettingsTitle({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof Text>,
"children"
>) {
const [value] = useSetting<string>(settingsKey);
return <Text {...props} children={value} />;
}
export function SettingsTextInput({
settingsKey,
...props
}: { settingsKey: string } & Omit<
React.ComponentProps<typeof TextInput>,
"value" | "onChangeText"
>) {
const [value, setValue] = useSetting<string>(settingsKey);
return <TextInput {...props} value={value} onChangeText={setValue} />;
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+1 -5
View File
@@ -1,10 +1,6 @@
{
"expo": {
"name": "ffmpeg",
"icon": "https://github.com/expo.png",
"splash": {
"image": "https://github.com/expo.png"
},
"icon": "https://icogen.vercel.app/api/icon",
"plugins": [
[
"@config-plugins/ffmpeg-kit-react-native",
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+11 -5
View File
@@ -9,11 +9,17 @@
},
"dependencies": {
"@config-plugins/ffmpeg-kit-react-native": "*",
"expo": "~53",
"expo-splash-screen": "~0.30.7",
"ffmpeg-kit-react-native": "^6.0.2",
"react": "19.0.0",
"react-native": "0.79.2"
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"ffmpeg-kit-react-native": "^4.5.1",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
+33 -46
View File
@@ -1,54 +1,41 @@
import { Session } from "ffmpeg-kit-react-native";
import React from "react";
import {
ActivityIndicator,
SafeAreaView,
ScrollView,
Text,
View,
} from "react-native";
import { Session } from 'ffmpeg-kit-react-native';
import React from 'react';
import { ActivityIndicator, SafeAreaView, ScrollView, Text, View } from 'react-native';
import { useMediaInfo, useResolvedValue } from "./useMediaInfo";
import { useMediaInfo, useResolvedValue } from './useMediaInfo';
export default function App() {
const session = useMediaInfo(
"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"
);
const session = useMediaInfo('http://techslides.com/demos/sample-videos/small.mp4');
if (!session) {
return (
<View
style={{
flex: 1,
justifyContent: "center",
alignItems: "center",
}}
>
<ActivityIndicator />
<Text>Loading...</Text>
</View>
);
}
if (!session) {
return <View style={{
flex: 1,
justifyContent: "center",
alignItems: "center",
}}><ActivityIndicator /><Text>Loading...</Text></View>
}
return <SessionInfo session={session} />
return <SessionInfo session={session} />;
}
function SessionInfo(props: { session: Session }) {
const { session } = props;
const duration = useResolvedValue(session.getDuration.bind(session));
const output = useResolvedValue(session.getOutput.bind(session));
return (
<SafeAreaView
style={{
flex: 1,
justifyContent: "center",
alignItems: "center",
}}
>
<ScrollView>
<Text>Duration: {duration}</Text>
<Text>Output: {output}</Text>
</ScrollView>
</SafeAreaView>
);
}
const { session } = props;
const duration = useResolvedValue(session.getDuration.bind(session));
const output = useResolvedValue(session.getOutput.bind(session));
return (
<SafeAreaView
style={{
flex: 1,
justifyContent: "center",
alignItems: "center",
}}
>
<ScrollView>
<Text>Duration: {duration}</Text>
<Text>Output: {output}</Text>
</ScrollView>
</SafeAreaView>
);
}
@@ -1,4 +0,0 @@
{
"compilerOptions": {},
"extends": "expo/tsconfig.base"
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
View File
Whitespace-only changes.
+2 -6
View File
@@ -1,14 +1,11 @@
{
"expo": {
"name": "stickers",
"icon": "https://github.com/expo.png",
"platforms": ["ios"],
"icon": "https://icogen.vercel.app/api/icon",
"plugins": [
[
"@config-plugins/ios-stickers",
{
"name": "Stickers",
"stickerBundleId": "dev.bacon.iosstickers.stickers",
"icon": "./assets/imessage-icon.png",
"columns": 4,
"stickers": [
@@ -25,8 +22,7 @@
"./assets/stickers/teapot.png"
]
}
],
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
]
]
}
}
+6
View File
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+6
View File
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+10 -5
View File
@@ -4,16 +4,21 @@
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"prebuild": "expo prebuild -p ios --template ./expo-template-bare-minimum-50.0.17.tgz",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/ios-stickers": "*",
"expo": "~53",
"expo-splash-screen": "~0.30.7",
"react": "19.0.0",
"react-native": "0.79.2"
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
+1
View File
@@ -1,3 +1,4 @@
import React from "react";
import { Text, View } from "react-native";
export default function App() {
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+16
View File
@@ -0,0 +1,16 @@
const path = require("path");
const folderName = path.basename(__dirname);
const cleanName = folderName.replace(/[_\s-]/g, "");
const appId = "dev.bacon." + cleanName;
module.exports = ({ config }) => {
if (!config.extra) config.extra = {};
// Expose CI env variables to the app
config.extra.CI = process.env.CI;
if (!config.ios) config.ios = {};
config.ios.bundleIdentifier = appId;
if (!config.android) config.android = {};
config.android.package = appId;
return config;
};
+8
View File
@@ -0,0 +1,8 @@
{
"expo": {
"icon": "https://icogen.vercel.app/api/icon?icon=1f9b7&color_hex=0000ff",
"plugins": [
"@config-plugins/react-native-ble-plx"
]
}
}
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
File renamed without changes.
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+28
View File
@@ -0,0 +1,28 @@
{
"name": "@config-plugins-app/react-native-ble-plx",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/react-native-ble-plx": "*",
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"react-native-ble-plx": "^2.0.3",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9",
"@types/react": "~17.0.21",
"@types/react-native": "~0.64.12",
"typescript": "~4.3.5"
},
"private": true
}
+32
View File
@@ -0,0 +1,32 @@
import React from 'react';
import { Text, View } from 'react-native';
import useBluetoothDevices, { useManager, useManagerState } from './useBluetoothDevices';
export default function App() {
const bleManager = useManager();
const state = useManagerState(bleManager);
console.log('Info:', state);
return (
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'blue'}}>
<Text style={{fontSize: 18, color: 'white'}}>State: {state}</Text>
{state === 'PoweredOn' && <DeviceScanner bleManager={bleManager} />}
</View>
);
}
function DeviceScanner({ bleManager }) {
const [devices] = useBluetoothDevices(bleManager);
React.useEffect(() => {
console.log(devices);
}, [devices]);
return (
<View>
{devices.filter(({name}) => name).map((device, index) => (<Text key={`-${index}`} style={{fontSize: 14, color: 'white'}}>{device.name}</Text>))}
</View>
)
}
@@ -0,0 +1,70 @@
import { useEffect, useMemo, useRef, useState } from "react";
import { BleManager, State, Device } from "react-native-ble-plx";
import { uniqBy } from "lodash";
export function useManager() {
return useMemo(() => new BleManager(), []);
}
export function useManagerState(bleManager: BleManager): State | null {
const [state, setState] = useState<State | null>(null);
const isMounted = useMounted();
useEffect(() => {
if (!bleManager) return;
bleManager.onStateChange((state) => {
if (isMounted.current) {
setState(state);
}
}, true);
}, [bleManager]);
return state;
}
function useMounted() {
const isMounted = useRef(true);
useEffect(() => {
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, []);
return isMounted;
}
export function useBluetoothDevices(
bleManager: BleManager
): [Device[], null | string] {
const isMoutned = useMounted();
const [error, setError] = useState<string | null>(null);
const [devices, setDevices] = useState<Device[]>([]);
useEffect(() => {
bleManager.startDeviceScan(
[],
{ allowDuplicates: false },
(e, scannedDevice) => {
if (!isMoutned.current) return;
if (e) {
setError(e.message);
}
if (!scannedDevice) return;
setDevices((oldDevices) =>
uniqBy([...oldDevices, scannedDevice], "id")
);
}
);
return () => {
bleManager.stopDeviceScan();
};
}, [bleManager]);
return [devices, error];
}
export default useBluetoothDevices;
File renamed without changes.
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+2 -7
View File
@@ -1,10 +1,6 @@
{
"expo": {
"name": "branch",
"icon": "https://github.com/expo.png",
"splash": {
"image": "https://github.com/expo.png"
},
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
"ios": {
"config": {
"branch": {
@@ -20,8 +16,7 @@
}
},
"plugins": [
"@config-plugins/react-native-branch",
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
"@config-plugins/react-native-branch"
]
}
}
+6
View File
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+6
View File
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
+11 -5
View File
@@ -9,11 +9,17 @@
},
"dependencies": {
"@config-plugins/react-native-branch": "*",
"expo": "~53",
"expo-splash-screen": "~0.30.7",
"react": "19.0.0",
"react-native": "0.79.2",
"react-native-branch": "^6.6.0"
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"react-native-branch": "^5.4.0",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
+1
View File
@@ -1,3 +1,4 @@
import React from "react";
import { Text, View } from "react-native";
export default function App() {
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
+1 -7
View File
@@ -1,11 +1,6 @@
{
"expo": {
"name": "app-icon",
"icon": "./assets/icons/winter.png",
"platforms": ["ios"],
"ios": {
"supportsTablet": true
},
"plugins": [
[
"@config-plugins/react-native-dynamic-app-icon",
@@ -16,8 +11,7 @@
"./assets/icons/fall.png",
"./assets/icons/solstice.png"
]
],
["expo-build-properties", { "ios": { "ccacheEnabled": true } }]
]
]
}
}
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
@@ -9,11 +9,17 @@
},
"dependencies": {
"@config-plugins/react-native-dynamic-app-icon": "*",
"expo": "~53",
"expo-splash-screen": "~0.30.7",
"react": "19.0.0",
"react-native": "0.79.2",
"react-native-dynamic-app-icon": "^1.1.0"
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"react-native-dynamic-app-icon": "^1.1.0",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
@@ -1,4 +0,0 @@
{
"compilerOptions": {},
"extends": "expo/tsconfig.base"
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Whitespace-only changes.
@@ -0,0 +1,16 @@
const path = require("path");
const folderName = path.basename(__dirname);
const cleanName = folderName.replace(/[_\s-]/g, "");
const appId = "dev.bacon." + cleanName;
module.exports = ({ config }) => {
if (!config.extra) config.extra = {};
// Expose CI env variables to the app
config.extra.CI = process.env.CI;
if (!config.ios) config.ios = {};
config.ios.bundleIdentifier = appId;
if (!config.android) config.android = {};
config.android.package = appId;
return config;
};
+8
View File
@@ -0,0 +1,8 @@
{
"expo": {
"icon": "https://icogen.vercel.app/api/icon",
"plugins": [
"@config-plugins/react-native-google-cast"
]
}
}
@@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
+5
View File
@@ -0,0 +1,5 @@
import { registerRootComponent } from "expo";
import App from "./src/App";
registerRootComponent(App);
@@ -0,0 +1,6 @@
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require("@expo/metro-config");
const config = getDefaultConfig(__dirname);
module.exports = config;
@@ -0,0 +1,25 @@
{
"name": "@config-plugins-app/react-native-google-cast",
"main": "./index.js",
"version": "1.0.0",
"scripts": {
"start": "expo start --dev-client",
"ios": "expo run:ios",
"android": "expo run:android"
},
"dependencies": {
"@config-plugins/react-native-google-cast": "*",
"expo": "^45.0.0",
"expo-splash-screen": "~0.15.1",
"react": "17.0.2",
"react-native": "0.68.2",
"react-native-google-cast": "^4.1.2",
"expo-status-bar": "~1.3.0",
"react-dom": "17.0.2",
"react-native-web": "0.17.7"
},
"devDependencies": {
"@babel/core": "^7.12.9"
},
"private": true
}
+86
View File
@@ -0,0 +1,86 @@
import React from "react";
import { View, Text, Button } from "react-native";
import GoogleCast, {
CastState,
CastButton,
useCastState,
useRemoteMediaClient,
} from "react-native-google-cast";
export default function HomeScreen() {
const castState = useCastState();
const client = useRemoteMediaClient();
GoogleCast.showIntroductoryOverlay();
const isConnected = castState === CastState.CONNECTED;
function cast() {
client
.loadMedia({
mediaInfo: {
contentUrl:
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4",
contentType: "video/mp4",
metadata: {
images: [
{
url: "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/BigBuckBunny.jpg",
},
],
title: "Big Buck Bunny",
subtitle:
"A large and lovable rabbit deals with three tiny bullies, led by a flying squirrel, who are determined to squelch his happiness.",
studio: "Blender Foundation",
type: "movie",
},
streamDuration: 596, // seconds
},
startTime: 10, // seconds
})
.then(console.log)
.catch(console.warn);
}
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>State: {castState}</Text>
<CastButton style={{ width: 24, height: 24 }} />
<Button
title="Overlay"
onPress={() => {
GoogleCast.showIntroductoryOverlay();
}}
/>
<Button
title="Expanded Controls"
onPress={() => {
GoogleCast.showExpandedControls();
}}
/>
<Button
title="Cast"
disabled={!isConnected}
onPress={() => {
cast();
}}
/>
<Button
title="Pause"
disabled={!isConnected}
onPress={() => {
// cast()
client.pause();
}}
/>
<Button
title="Disconnect"
disabled={!isConnected}
onPress={() => {
GoogleCast.sessionManager.endCurrentSession(true);
}}
/>
</View>
);
}
+80
View File
@@ -0,0 +1,80 @@
node_modules/**/*
.expo/*
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
/artifacts
/scripts/start.command
/ios
/android
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
# The following patterns were generated by expo-cli
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle
# CocoaPods
/ios/Pods/
# Expo
.expo/
web-build/
dist/
# @end expo-cli
Loaded 100 of 385 files, more files were not shown because too many files have changed in this diff. Show more