Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 3 additions & 11 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
{
"extends": ["@react-native-community", "prettier"],
"extends": ["@react-native", "prettier"],
"plugins": ["prettier"],
"rules": {
"prettier/prettier": [
"error",
{
"quoteProps": "consistent",
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"useTabs": false
}
]
"prettier/prettier": "error"
}
}
83 changes: 43 additions & 40 deletions .github/workflows/ci-build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,38 +13,38 @@ on:

env:
android-adb-command-timeout-milliseconds: 20_000L
android-api-level: 31
android-api-level: 34
android-avd-name: Pixel_3_API_S_1
android-avd-ram-size: 1024M
android-promise-timeout-milliseconds: 75_000L
android-sdk-root: /Users/ely/Library/Android/sdk
node-version: 14
node-version: 22

jobs:
build-typescript-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/checkout@v4
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
key: yarn-${{ hashFiles('**/yarn.lock') }}
- uses: actions/setup-node@v2-beta
- uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
- run: TARGET=typescript make clean build
if: steps.node_modules.outputs.cache-hit != 'true'
build-typescript-macos:
runs-on: m1
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/checkout@v4
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
key: yarn-${{ hashFiles('**/yarn.lock') }}
- uses: actions/setup-node@v2-beta
- uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
- run: TARGET=typescript make clean build
Expand All @@ -55,31 +55,31 @@ jobs:
- build-typescript-macos
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/checkout@v4
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
key: yarn-${{ hashFiles('**/yarn.lock') }}
- uses: actions/setup-node@v2-beta
- uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
- run: TARGET=typescript make lint
run-typescript-tests:
needs: build-typescript-lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/checkout@v4
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
key: yarn-${{ hashFiles('**/yarn.lock') }}
- uses: actions/setup-node@v2-beta
- uses: actions/setup-node@v4
with:
node-version: ${{ env.node-version }}
- run: TARGET=typescript make test
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: ts-test-results
path: output/typescript-test-output.xml
Expand All @@ -89,12 +89,13 @@ jobs:
- build-typescript-macos
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: set up JDK 11
uses: actions/setup-java@v1
- uses: actions/checkout@v4
- name: set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 11
- uses: actions/cache@v2
distribution: temurin
java-version: 17
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
Expand All @@ -104,18 +105,19 @@ jobs:
needs: run-android-lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: set up JDK 11
uses: actions/setup-java@v1
- uses: actions/checkout@v4
- name: set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 11
- uses: actions/cache@v2
distribution: temurin
java-version: 17
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
key: yarn-${{ hashFiles('**/yarn.lock') }}
- run: TARGET=android:unit make clean test
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: android-unit-test-results
path: android/build/test-results/**/*.xml
Expand All @@ -124,17 +126,18 @@ jobs:
continue-on-error: true
runs-on: m1
steps:
- uses: actions/checkout@v2
- name: set up JDK 11
uses: actions/setup-java@v1
- uses: actions/checkout@v4
- name: set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 11
- uses: actions/cache@v2
distribution: temurin
java-version: 17
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
key: yarn-${{ hashFiles('**/yarn.lock') }}
- uses: reactivecircus/android-emulator-runner@v2.21.0
- uses: reactivecircus/android-emulator-runner@v2.34.0
env:
ANDROID_SDK_ROOT: ${{ env.android-sdk-root }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -153,12 +156,12 @@ jobs:
adb logcat | tee android_instrumented_logcat.log | grep 'io.deckers.blob_courier' &
make clean test
target: google_apis
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: android-instrumented-test-results
path: android/build/outputs/androidTest-results/connected/**/*.xml
if: always()
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: android-instrumented-logcat
path: android_instrumented_logcat.log
Expand All @@ -169,8 +172,8 @@ jobs:
- build-typescript-macos
runs-on: m1
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
- uses: actions/checkout@v4
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
Expand All @@ -180,15 +183,15 @@ jobs:
needs: run-ios-lint
runs-on: m1
steps:
- uses: actions/checkout@v2
- run: xcrun simctl boot "iPhone 11" || true
- uses: actions/cache@v2
- uses: actions/checkout@v4
- run: xcrun simctl boot "iPhone 16 Pro" || true
- uses: actions/cache@v4
id: node_modules
with:
path: node_modules
key: yarn-${{ hashFiles('**/yarn.lock') }}
- run: TARGET=ios:gui make clean test
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: ios-test-results
path: build/reports/**/*.xml
40 changes: 19 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@ npm install react-native-blob-courier
## Requirements

- Android >= 24
- Android Gradle Plugin >= 7.5.1
- Android Gradle Plugin >= 8.7
- iOS >= 13.0
- JDK >= 11
- React Native >= 0.69.x

_Note: you may have success with earlier versions of React Native but these are neither tested nor supported._
- JDK >= 17
- React Native >= 0.76.x (New Architecture)

## Usage

Expand Down Expand Up @@ -78,10 +76,10 @@ const request1 = {

const uploadResult = await BlobCourier.uploadBlob(request1);

console.log(uploadResult):
console.log(uploadResult);
// {
// "response": {
// "code": {
// "code": 200,
// "data": "<some response>",
// "headers": {
// "some_header": "some_value",
Expand Down Expand Up @@ -111,12 +109,12 @@ const request2 = {
url: 'https://file.io',
};

const multipartUploadResult = await BlobCourier.uploadBlob(request1);
const multipartUploadResult = await BlobCourier.uploadBlob(request2);

console.log(multipartUploadResult):
console.log(multipartUploadResult);
// {
// "response": {
// "code": {
// "code": 200,
// "data": "<some response>",
// "headers": {
// "some_header": "some_value",
Expand Down Expand Up @@ -485,9 +483,9 @@ You can find an example of how to use the library in the [example](example) dire

### Permissions

### Android 5.1 and below (API level < 23)
### Android 7.0 - 9.0 (API level 24-28)

Add the following line to `AndroidManifest.xml`.
Add the following lines to `AndroidManifest.xml`.

```diff
<manifest xmlns:android="http://schemas.android.com/apk/res/android" (...)>
Expand All @@ -505,12 +503,12 @@ Add the following line to `AndroidManifest.xml`.
(...)
```

### Android 6.0+ (API level 23+)
### Android 10+ (API level 29+)

Grant permissions using the [PermissionAndroid API](https://facebook.github.io/react-native/docs/permissionsandroid.html), like so:
Grant permissions using the [PermissionsAndroid API](https://reactnative.dev/docs/permissionsandroid), like so:

```tsx
const function App = () => {
const App = () => {

// ...

Expand Down Expand Up @@ -561,17 +559,17 @@ import CameraRoll from '@react-native-community/cameraroll';
// ...

const request = {
filename: 'teh_cage640x360.png',
filename: 'photo640x360.jpg',
method: 'GET',
mimeType: 'image/png',
url: 'https://www.placecage.com/640/360',
mimeType: 'image/jpeg',
url: 'https://picsum.photos/640/360',
};

const cageResult = await BlobCourier.fetchBlob(request)
const fetchResult = await BlobCourier.fetchBlob(request)

const cageLocalPath = cageResult.data.absoluteFilePath
const localPath = fetchResult.data.absoluteFilePath

CameraRoll.save(cageLocalPath);
CameraRoll.save(localPath);
```

## Contributing
Expand Down
Loading
Loading