Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: @uploadthing/expo #583

Merged
merged 163 commits into from
Jun 10, 2024
Merged
Show file tree
Hide file tree
Changes from 82 commits
Commits
Show all changes
163 commits
Select commit Hold shift + click to select a range
f28790c
first attempt
juliusmarminge Jan 26, 2024
f2ad01b
bunchee powers
juliusmarminge Jan 28, 2024
ee9d04f
add transistive dep explicitely
juliusmarminge Jan 28, 2024
bf745e9
fix import
juliusmarminge Jan 28, 2024
b3dd46f
working uploads
juliusmarminge Jan 28, 2024
c2e6a2f
lint fix
juliusmarminge Jan 28, 2024
7cfea6c
make sure types are the same
juliusmarminge Jan 28, 2024
871a3cd
add require path
juliusmarminge Jan 28, 2024
1515d50
add back express but with ts-ignore
juliusmarminge Jan 28, 2024
dc2fae0
more fix
juliusmarminge Jan 28, 2024
716cfe0
restack expo 1/2
juliusmarminge Jan 29, 2024
c2f9bbf
sync lock
juliusmarminge Jan 29, 2024
c2bf1c9
revert exports of types
juliusmarminge Jan 29, 2024
5f38c4a
first attempt
juliusmarminge Jan 26, 2024
c7229fa
bunchee powers
juliusmarminge Jan 28, 2024
ae43f53
add transistive dep explicitely
juliusmarminge Jan 28, 2024
c4e3b04
fix import
juliusmarminge Jan 28, 2024
0a5ee48
working uploads
juliusmarminge Jan 28, 2024
eae63d2
lint fix
juliusmarminge Jan 28, 2024
6a62a7a
fmt
juliusmarminge Jan 28, 2024
48e94ba
restack expo 1/2
juliusmarminge Jan 29, 2024
cb324dc
sync lock
juliusmarminge Jan 29, 2024
b17da5b
revert exports of types
juliusmarminge Jan 29, 2024
ee7fd87
re-init expo app
juliusmarminge Jan 29, 2024
cfcdb2d
sync lock, rename exmaple path
juliusmarminge Jan 29, 2024
94de51e
nit
juliusmarminge Jan 29, 2024
201c086
up router
juliusmarminge Jan 29, 2024
3a4303e
fmt
juliusmarminge Jan 29, 2024
eda0a4e
fix express
juliusmarminge Jan 31, 2024
51b7cc7
module
juliusmarminge Jan 31, 2024
7f5fb1f
rev
juliusmarminge Jan 31, 2024
9cb71a6
resolve types from src during dev
juliusmarminge Jan 31, 2024
23db2fb
single * per pattern...
juliusmarminge Jan 31, 2024
abbc59c
vitest workspaces
juliusmarminge Jan 31, 2024
b6834a7
rm aliases for now
juliusmarminge Jan 31, 2024
ab60c73
fmt
juliusmarminge Feb 4, 2024
2f50476
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 6, 2024
7acc1ec
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 16, 2024
6d91300
rm splash
juliusmarminge Feb 16, 2024
7a3a1bc
up deps
juliusmarminge Feb 16, 2024
b86e07d
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 16, 2024
1017fb8
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 16, 2024
208674e
expo package
juliusmarminge Feb 16, 2024
b3e679a
nice
juliusmarminge Feb 16, 2024
50e5600
nicee
juliusmarminge Feb 16, 2024
fe78f85
document uploader [NOT WORKING]
juliusmarminge Feb 16, 2024
702744e
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 26, 2024
88c7b8c
sync
juliusmarminge Feb 26, 2024
9a67d91
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 26, 2024
2e496e8
fix uploads
juliusmarminge Feb 26, 2024
48f02d6
nice
juliusmarminge Feb 26, 2024
b22a9a1
fix lint
juliusmarminge Feb 26, 2024
2a0e0f8
fix turbo cache deps
juliusmarminge Feb 26, 2024
ce52acb
update config to support json
juliusmarminge Feb 26, 2024
af507cb
cs
juliusmarminge Feb 26, 2024
19dc987
eas
juliusmarminge Feb 26, 2024
d6766df
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 28, 2024
5fcc604
sync
juliusmarminge Feb 28, 2024
aa01d0e
format
juliusmarminge Feb 28, 2024
a2b04c9
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 28, 2024
f00006d
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 28, 2024
2f46e27
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Feb 29, 2024
d174b37
fixynit
juliusmarminge Feb 29, 2024
94d9253
fmt
juliusmarminge Feb 29, 2024
b46058a
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Mar 5, 2024
4478703
sync lock
juliusmarminge Mar 5, 2024
1aaf82b
nice
juliusmarminge Mar 5, 2024
d9b3892
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Mar 5, 2024
2373a24
niceer
juliusmarminge Mar 5, 2024
24e91c5
pnpm i
markflorkowski Apr 11, 2024
6dc58bd
Merge branch 'main' into 01-29-re-init_expo_app
markflorkowski Apr 11, 2024
416cabf
bum bunchee for expo package
markflorkowski Apr 11, 2024
d88ce8c
lint
markflorkowski Apr 11, 2024
b44195b
helps to save
markflorkowski Apr 11, 2024
11231b7
pnpm i
markflorkowski Apr 11, 2024
4e137e9
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Apr 16, 2024
a2915d2
sync versions
juliusmarminge Apr 16, 2024
3972aff
sync lock
juliusmarminge Apr 16, 2024
883635d
node_linker hoisted, expo file store
juliusmarminge Apr 16, 2024
32e3cc4
manypkg fix
juliusmarminge Apr 16, 2024
75013f5
forward isUploading
juliusmarminge Apr 16, 2024
b87959a
wording
juliusmarminge Apr 16, 2024
e90ff26
improve example
juliusmarminge Apr 16, 2024
6323979
comment, add clean script to minimal-expo
markflorkowski Apr 16, 2024
707f647
short modal styling, empty state
markflorkowski Apr 17, 2024
62d0066
align deps
juliusmarminge Apr 17, 2024
273075f
hide button on scroll
juliusmarminge Apr 17, 2024
5ac269d
check permissions
juliusmarminge Apr 17, 2024
820a5cb
simplify
juliusmarminge Apr 17, 2024
cea2bbe
fix logic
juliusmarminge Apr 17, 2024
474f3dd
permission alert
juliusmarminge Apr 17, 2024
857cf80
3rd button
juliusmarminge Apr 17, 2024
56687fd
nit
juliusmarminge Apr 17, 2024
a92e232
do some splitting, nicer drawer
juliusmarminge Apr 17, 2024
31c547f
only dark mode
juliusmarminge Apr 17, 2024
5041b4a
apparently RN.FormData isn't spec compliant...
juliusmarminge Apr 17, 2024
da88346
fix manypkg
juliusmarminge Apr 17, 2024
f64640f
allow multiple
juliusmarminge Apr 17, 2024
6fec3c7
onUploadError
juliusmarminge Apr 17, 2024
0b85f17
psuh test
juliusmarminge Apr 17, 2024
1e0b533
don't hardcode ip for testing
markflorkowski Apr 17, 2024
b810e64
correct url format
markflorkowski Apr 17, 2024
843cb4e
docs
juliusmarminge Apr 18, 2024
ad38368
tell'em to do auth
juliusmarminge Apr 18, 2024
c2ddb78
createContext
juliusmarminge Apr 18, 2024
3e0b005
refactor a bit
juliusmarminge Apr 18, 2024
699473c
swap rnsvg to expo vector icons
juliusmarminge Apr 18, 2024
81cd953
active class on more-button
juliusmarminge Apr 18, 2024
0f9b9e1
rm
juliusmarminge Apr 18, 2024
d473c2f
swipe to delete
juliusmarminge Apr 18, 2024
3377ee3
typo
juliusmarminge Apr 18, 2024
108c03b
classname
juliusmarminge Apr 18, 2024
84f50a6
filter deleted
juliusmarminge Apr 18, 2024
7073a58
make dates descending
juliusmarminge Apr 18, 2024
1fb7fd7
revert to deterministic to avoid flickering
juliusmarminge Apr 18, 2024
0a7cd8b
fix generateMediaTypes
juliusmarminge Apr 18, 2024
27e8284
memoize
juliusmarminge Apr 18, 2024
135cb03
memoize
juliusmarminge Apr 18, 2024
fdb56a1
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Apr 24, 2024
337600a
fix effect expo
juliusmarminge Apr 25, 2024
857958e
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge May 7, 2024
2536547
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge May 7, 2024
c064929
bump to sdk51
juliusmarminge May 7, 2024
58647ca
rm TextEncoder polyfill
juliusmarminge May 7, 2024
a096a78
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge May 11, 2024
36526df
fix: mismatch in response schema for `utapi.listFiles` (#798)
juliusmarminge May 12, 2024
8620002
chore: set `sideEffects: false` (#806)
juliusmarminge May 13, 2024
6b239b6
add missing changeset
juliusmarminge May 13, 2024
fa6035e
chore(release): 📦 version packages (#803)
t3dotgg May 13, 2024
3b8ceba
docs: fix typo on react api reference (#811)
NicklessOne May 16, 2024
96c691e
fix: better mime type support for generic types (#810)
juliusmarminge May 16, 2024
d244186
feat: added onDrop prop for UploadDropzone component (#809)
growupanand May 16, 2024
e96200a
fix: Node 20.13 compat (#813)
juliusmarminge May 16, 2024
5d7351f
feat: add onDrop to remaining libs (#814)
juliusmarminge May 16, 2024
8aa19e4
feat: add with-novel example (#800)
juliusmarminge May 16, 2024
ba37b13
refactor: UploadButton (#801)
juliusmarminge May 16, 2024
831a869
chore: inline returns
juliusmarminge May 16, 2024
9188a8a
fix: make `@uploadthing/shared` treeshakeable (#808)
juliusmarminge May 16, 2024
5f18384
fix lint
juliusmarminge May 16, 2024
f157ee6
merge
juliusmarminge May 16, 2024
0f12de1
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge May 21, 2024
a2fa533
rename imporrt
juliusmarminge May 21, 2024
a9c2162
update expo
juliusmarminge May 21, 2024
4bf669e
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge May 21, 2024
7a5e12b
better rnw support
juliusmarminge May 22, 2024
d14fa0d
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge May 22, 2024
257b18a
fixx
juliusmarminge May 22, 2024
c8b8410
maybe now?
juliusmarminge May 22, 2024
61db742
man
juliusmarminge May 22, 2024
559e783
fmt
juliusmarminge May 23, 2024
327afa1
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Jun 3, 2024
9be7aac
kewl
juliusmarminge Jun 3, 2024
4a267b9
swap
juliusmarminge Jun 3, 2024
1a40575
fix manypkg lint
juliusmarminge Jun 3, 2024
b83d5c5
fix
juliusmarminge Jun 3, 2024
d4034e8
mayb?
juliusmarminge Jun 3, 2024
9004814
mby?
juliusmarminge Jun 3, 2024
d4ecf70
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Jun 4, 2024
d2bee79
Update docs/src/pages/getting-started/expo.mdx
juliusmarminge Jun 10, 2024
aee2dc1
Merge branch 'main' into 01-29-re-init_expo_app
juliusmarminge Jun 10, 2024
cdd06ba
tasks*
juliusmarminge Jun 10, 2024
1e3b465
fmt
juliusmarminge Jun 10, 2024
0690df8
lint-fix
juliusmarminge Jun 10, 2024
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
6 changes: 6 additions & 0 deletions .changeset/afraid-berries-burn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@uploadthing/react": minor
"@uploadthing/expo": minor
---

feat: support expo
2 changes: 2 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ save-workspace-protocol=false
prefer-workspace-packages=true

engine-strict=true

node-linker=hoisted
1 change: 1 addition & 0 deletions examples/minimal-expo/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPLOADTHING_SECRET="sk_live_xxx"
41 changes: 41 additions & 0 deletions examples/minimal-expo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files

# dependencies
node_modules/

# Expo
.expo/
dist/
web-build/

# Native
*.orig.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision

# Metro
.metro-health-check*

# debug
npm-debug.*
yarn-debug.*
yarn-error.*

# macOS
.DS_Store
*.pem

# local env files
.env*.local

# typescript
*.tsbuildinfo

# @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb
# The following patterns were generated by expo-cli

expo-env.d.ts
# @end expo-cli
39 changes: 39 additions & 0 deletions examples/minimal-expo/app.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import type { ConfigContext, ExpoConfig } from "expo/config";

export default ({ config }: ConfigContext): ExpoConfig => ({
...config,
name: "Minimal Expo x UploadThing",
slug: "minimal-expo",
version: "1.0.0",
orientation: "portrait",
icon: "./assets/icon.png",
scheme: "myapp",
userInterfaceStyle: "automatic",
splash: {
backgroundColor: "#ffffff",
},
assetBundlePatterns: ["**/*"],
ios: {
bundleIdentifier: "your.bundle.identifier",
supportsTablet: true,
},
android: {
adaptiveIcon: {
foregroundImage: "./assets/icon.png",
backgroundColor: "#ffffff",
},
},
web: {
bundler: "metro",
output: "server",
},
plugins: ["expo-router"],
experiments: {
typedRoutes: true,
},
// extra: {
// eas: {
// projectId: "",
// },
// },
});
17 changes: 17 additions & 0 deletions examples/minimal-expo/app/_layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Stack } from "expo-router";
import { StatusBar } from "expo-status-bar";

export default function RootLayout() {
return (
<>
<Stack
screenOptions={{
headerStyle: {
backgroundColor: "#D73328",
},
}}
/>
<StatusBar />
</>
);
}
52 changes: 52 additions & 0 deletions examples/minimal-expo/app/api/uploadthing+api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { z } from "zod";

import { createRouteHandler, createUploadthing } from "uploadthing/server";
import type { FileRouter } from "uploadthing/server";

const f = createUploadthing({
/**
* Log out more information about the error, but don't return it to the client
* @see https://docs.uploadthing.com/errors#error-formatting
*/
errorFormatter: (err) => {
console.log("Error uploading file", err.message);
console.log(" - Above error caused by:", err.cause);

return { message: err.message };
},
});

/**
* This is your Uploadthing file router. For more information:
* @see https://docs.uploadthing.com/api-reference/server#file-routes
*/
export const uploadRouter = {
videoAndImage: f({
image: {
maxFileSize: "4MB",
maxFileCount: 4,
},
}).onUploadComplete((data) => {
console.log("upload completed", data);
}),
document: f({
blob: {
maxFileSize: "16MB",
maxFileCount: 1,
contentDisposition: "inline",
},
})
.input(z.object({ foo: z.string() }))
.middleware(({ input }) => {
return { input };
})
.onUploadComplete((data) => {
console.log("upload completed", data);
}),
} satisfies FileRouter;

export type UploadRouter = typeof uploadRouter;

export const { GET, POST } = createRouteHandler({
router: uploadRouter,
});
57 changes: 57 additions & 0 deletions examples/minimal-expo/app/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { Stack } from "expo-router";
import { Button, StyleSheet, Text, View } from "react-native";

import { generateReactNativeHelpers } from "@uploadthing/expo";

import type { UploadRouter } from "./api/uploadthing+api";

const { useImageUploader, useDocumentUploader } =
generateReactNativeHelpers<UploadRouter>();

export default function ModalScreen() {
const { openImagePicker, isUploading: isUploadingImage } =
useImageUploader("videoAndImage");
const { openDocumentPicker, isUploading: isUploadingDocument } =
useDocumentUploader("document");

return (
<>
<Stack.Screen options={{ title: "Home Page" }} />
<View style={styles.container}>
<Text style={styles.title}>Modal</Text>
<Button
title="Open Gallery"
onPress={() => openImagePicker({})}
disabled={isUploadingImage}
/>
<Button
title="Select File"
onPress={() => {
return openDocumentPicker({
input: { foo: "bar" },
});
}}
disabled={isUploadingDocument}
/>
<View style={styles.separator} />
</View>
</>
);
}

const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
justifyContent: "center",
},
title: {
fontSize: 20,
fontWeight: "bold",
},
separator: {
marginVertical: 30,
height: 1,
width: "80%",
},
});
Binary file added examples/minimal-expo/assets/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions examples/minimal-expo/babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/** @type {import("@babel/core").ConfigFunction} */
module.exports = function (api) {
api.cache(true);
return {
presets: ["babel-preset-expo"],
};
};
30 changes: 30 additions & 0 deletions examples/minimal-expo/eas.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"cli": {
"version": ">= 7.3.0"
},
"build": {
"base": {
"ios": {
"resourceClass": "m-medium"
}
},
"development": {
"extends": "base",
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"extends": "base",
"distribution": "internal",
"ios": {
"simulator": true
}
},
"production": {
"extends": "base"
}
},
"submit": {
"production": {}
}
}
47 changes: 47 additions & 0 deletions examples/minimal-expo/metro.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const { getDefaultConfig } = require("expo/metro-config");
const { FileStore } = require("@expo/metro-config/file-store");
const path = require("path");

module.exports = withTurborepoManagedCache(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure you add config.resolver.unstable_enablePackageExports = true; to enable package exports. They're a bit buggy in Metro, but @robhogan has been looking into them a bit recently so it may improve.

withMonorepoPaths(getDefaultConfig(__dirname)),
);

/**
* Add the monorepo paths to the Metro config.
* This allows Metro to resolve modules from the monorepo.
*
* @see https://docs.expo.dev/guides/monorepos/#modify-the-metro-config
* @param {import('expo/metro-config').MetroConfig} config
* @returns {import('expo/metro-config').MetroConfig}
*/
function withMonorepoPaths(config) {
const projectRoot = __dirname;
const workspaceRoot = path.resolve(projectRoot, "../..");

// #1 - Watch all files in the monorepo
config.watchFolders = [workspaceRoot];

// #2 - Resolve modules within the project's `node_modules` first, then all monorepo modules
config.resolver.nodeModulesPaths = [
path.resolve(projectRoot, "node_modules"),
path.resolve(workspaceRoot, "node_modules"),
];
Comment on lines +24 to +34

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

expo/metro-config does this automatically.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

even for monorepos?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Setting nodeModulesPaths shouldn't be necessary at all afaik?


return config;
}

/**
* Move the Metro cache to the `node_modules/.cache/metro` folder.
* This repository configured Turborepo to use this cache location as well.
* If you have any environment variables, you can configure Turborepo to invalidate it when needed.
*
* @see https://turbo.build/repo/docs/reference/configuration#env
* @param {import('expo/metro-config').MetroConfig} config
* @returns {import('expo/metro-config').MetroConfig}
*/
function withTurborepoManagedCache(config) {
config.cacheStores = [
new FileStore({ root: path.join(__dirname, "node_modules/.cache/metro") }),

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use Expo's FileStore to ensure CSS works. https://docs.expo.dev/versions/latest/config/metro/#tailwind-troubleshooting

const { FileStore } = require('@expo/metro-config/file-store');

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ehhm...

CleanShot 2024-04-16 at 20 17 49

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah needed to hoist the deps... classic pnpm x expo limitation

];
return config;
}
33 changes: 33 additions & 0 deletions examples/minimal-expo/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"name": "@example/minimal-expo",
"main": "expo-router/entry",
"scripts": {
"dev": "expo start --ios",
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"@uploadthing/expo": "6.3.0",
"expo": "~50.0.15",
"expo-image-picker": "^14.7.1",
"expo-linking": "~6.2.2",
"expo-router": "~3.4.8",
"expo-splash-screen": "~0.26.4",
"expo-status-bar": "~1.11.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-native": "^0.73.6",
"react-native-safe-area-context": "4.8.2",
"react-native-screens": "~3.29.0",
"uploadthing": "6.9.0",
"zod": "^3.22.4"
},
"devDependencies": {
"@babel/core": "^7.24.4",
"@babel/runtime": "^7.24.4",
"@types/react": "18.2.78",
"typescript": "^5.4.5"
},
"private": true
}
10 changes: 10 additions & 0 deletions examples/minimal-expo/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "expo/tsconfig.base",
"compilerOptions": {
"strict": true,
"paths": {
"~/*": ["./*"]
}
},
"include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"]
}
Loading
Loading