* feat(companion): TypeScript best practices improvements - Add separate tsconfig.extension.json for extension code typechecking - Add typecheck scripts: typecheck, typecheck:extension, typecheck:all - Create ambient declarations for browser extension APIs (browser.d.ts) - Create type definitions for attendee and google-calendar types - Replace all @ts-ignore with @ts-expect-error or remove where ambient declarations cover them - Replace any types with proper types in AuthContext, webAuth, buildPartialUpdatePayload - Fix implicit any errors in extension content.ts - Update deepEqual function to use unknown instead of any for better type safety All typechecks now pass for both app and extension code. * feat(companion): enable full TypeScript strict mode (#26208) * feat(companion): enable strictNullChecks and strictFunctionTypes Phase 1 of strict mode enablement for the companion app. Changes: - Enable strictNullChecks and strictFunctionTypes in tsconfig.json - Fix null check for scheduleDetails in fetchScheduleDetails - Add explicit type annotations to limits arrays in event-type-detail.tsx - Filter conferencing options with null appId before passing to buildLocationOptions - Update LimitsTab interface to use union type for field parameter - Add optional chaining for onEdit, onDuplicate, onDelete in EventTypeListItem.ios.tsx - Add explicit type annotations to options arrays in AvailabilityListScreen.tsx - Add explicit type annotations to dateOptions and timeOptions in RescheduleScreen.tsx - Fix type guard return types in calcom.ts to explicitly return boolean All typechecks pass for both app and extension code. * feat(companion): enable full strict mode and fix any types (Phase 2 + Step 7) Phase 2: Enable full strict mode - Replace strictNullChecks + strictFunctionTypes with strict: true - Fix implicit any errors in Alert.prompt callbacks (BookingDetailScreen, useBookingActions) Step 7: Fix metadata any types in type definition files - Update UserProfile.metadata to Record<string, unknown> - Update CreateEventTypeInput.metadata to Record<string, unknown> - Update Booking.responses to Record<string, unknown> All typechecks pass for both app and extension code with full strict mode enabled. * use JSON.stringify() * fix restores the recursive key comparison with sorted keys * prevents false positives when objects have different keys * feat(companion): add tree shaking optimization scripts (#26212) * feat(companion): add tree shaking optimization scripts Add npm scripts to enable Expo's experimental tree shaking for production builds: - export: Basic expo export command - export:ios / export:android: Platform-specific exports - export:optimized: Export with tree shaking enabled (all platforms) - export:optimized:ios / export:optimized:android: Platform-specific with tree shaking Bundle size improvement measured: - Baseline: 5.48 MB (1804 modules) - With tree shaking: 5.25 MB (1831 modules) - Reduction: ~230 KB (4.2% smaller) Also documented tree shaking configuration options in .env.example for: - npm scripts (recommended) - Manual env var setting - EAS build profile configuration * revert .env.example file * revert .env.example file
102 lines
4.8 KiB
JSON
102 lines
4.8 KiB
JSON
{
|
|
"name": "cal-companion",
|
|
"displayName": "Cal.com Companion",
|
|
"version": "1.7.5",
|
|
"main": "index.js",
|
|
"scripts": {
|
|
"start": "expo start",
|
|
"android": "expo run:android",
|
|
"ios": "expo run:ios",
|
|
"web": "expo start --web",
|
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
"typecheck:extension": "tsc -p tsconfig.extension.json --noEmit",
|
|
"typecheck:all": "npm run typecheck && npm run typecheck:extension",
|
|
"export": "expo export",
|
|
"export:ios": "expo export --platform ios",
|
|
"export:android": "expo export --platform android",
|
|
"export:optimized": "EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH=1 EXPO_UNSTABLE_TREE_SHAKING=1 expo export",
|
|
"export:optimized:ios": "EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH=1 EXPO_UNSTABLE_TREE_SHAKING=1 expo export --platform ios",
|
|
"export:optimized:android": "EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH=1 EXPO_UNSTABLE_TREE_SHAKING=1 expo export --platform android",
|
|
"ext": "wxt",
|
|
"ext:build": "wxt build",
|
|
"ext:build-prod": "BUILD_FOR_STORE=true wxt build",
|
|
"ext:zip": "wxt zip",
|
|
"ext:zip-prod": "BUILD_FOR_STORE=true wxt zip",
|
|
"ext:build-chrome": "BROWSER_TARGET=chrome wxt build -b chrome",
|
|
"ext:build-chrome-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=chrome wxt build -b chrome",
|
|
"ext:zip-chrome": "BROWSER_TARGET=chrome wxt zip -b chrome",
|
|
"ext:zip-chrome-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=chrome wxt zip -b chrome",
|
|
"ext:build-firefox": "BROWSER_TARGET=firefox wxt build -b firefox",
|
|
"ext:build-firefox-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=firefox wxt build -b firefox",
|
|
"ext:zip-firefox": "BROWSER_TARGET=firefox wxt zip -b firefox",
|
|
"ext:zip-firefox-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=firefox wxt zip -b firefox",
|
|
"ext:build-safari": "BROWSER_TARGET=safari wxt build -b safari",
|
|
"ext:build-safari-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=safari wxt build -b safari",
|
|
"ext:zip-safari": "BROWSER_TARGET=safari wxt zip -b safari",
|
|
"ext:zip-safari-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=safari wxt zip -b safari",
|
|
"ext:build-edge": "BROWSER_TARGET=edge wxt build -b edge",
|
|
"ext:build-edge-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=edge wxt build -b edge",
|
|
"ext:zip-edge": "BROWSER_TARGET=edge wxt zip -b edge",
|
|
"ext:zip-edge-prod": "BUILD_FOR_STORE=true BROWSER_TARGET=edge wxt zip -b edge",
|
|
"ext:build-all": "npm run ext:build && npm run ext:build-firefox && npm run ext:build-safari && npm run ext:build-edge",
|
|
"ext:build-all-prod": "npm run ext:build-prod && npm run ext:build-firefox-prod && npm run ext:build-safari-prod && npm run ext:build-edge-prod",
|
|
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
|
|
"format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
|
|
"prepare": "cd .. && husky companion/.husky"
|
|
},
|
|
"dependencies": {
|
|
"@expo/ui": "0.2.0-canary-20251216-3f01dbf",
|
|
"@expo/vector-icons": "^15.0.3",
|
|
"@react-native-async-storage/async-storage": "^2.1.0",
|
|
"@react-native-community/netinfo": "^11.4.1",
|
|
"@react-native-segmented-control/segmented-control": "^2.5.7",
|
|
"@tanstack/react-query": "^5.62.0",
|
|
"@tanstack/react-query-persist-client": "^5.62.0",
|
|
"base64-js": "1.5.1",
|
|
"expo": "^55.0.0-canary-20251216-3f01dbf",
|
|
"expo-auth-session": "7.0.11-canary-20251216-3f01dbf",
|
|
"expo-clipboard": "8.0.9-canary-20251216-3f01dbf",
|
|
"expo-constants": "18.1.0-canary-20251216-3f01dbf",
|
|
"expo-crypto": "15.0.9-canary-20251216-3f01dbf",
|
|
"expo-dev-client": "6.1.0-canary-20251216-3f01dbf",
|
|
"expo-device": "8.0.11-canary-20251216-3f01dbf",
|
|
"expo-glass-effect": "0.2.0-canary-20251216-3f01dbf",
|
|
"expo-linking": "8.0.11-canary-20251216-3f01dbf",
|
|
"expo-router": "7.0.0-canary-20251216-3f01dbf",
|
|
"expo-secure-store": "15.0.9-canary-20251216-3f01dbf",
|
|
"expo-status-bar": "3.0.10-canary-20251216-3f01dbf",
|
|
"expo-web-browser": "15.0.11-canary-20251216-3f01dbf",
|
|
"nativewind": "^4.2.1",
|
|
"react": "19.2.0",
|
|
"react-dom": "19.2.0",
|
|
"react-native": "^0.83.0",
|
|
"react-native-context-menu-view": "^1.20.0",
|
|
"react-native-gesture-handler": "~2.28.0",
|
|
"react-native-reanimated": "~4.2.0",
|
|
"react-native-safe-area-context": "~5.6.0",
|
|
"react-native-screens": "^4.19.0",
|
|
"react-native-svg": "15.12.1",
|
|
"react-native-web": "^0.21.2",
|
|
"react-native-worklets": "0.7.1"
|
|
},
|
|
"private": true,
|
|
"devDependencies": {
|
|
"@types/chrome": "^0.1.31",
|
|
"@types/react": "19.2.3",
|
|
"@types/react-dom": "19.2.3",
|
|
"babel-preset-expo": "^54.0.7",
|
|
"husky": "^9.0.11",
|
|
"lint-staged": "^15.2.0",
|
|
"prettier": "^3.2.5",
|
|
"prettier-plugin-tailwindcss": "^0.5.11",
|
|
"tailwindcss": "^3.4.17",
|
|
"typescript": "^5.9.3",
|
|
"wxt": "^0.20.11"
|
|
},
|
|
"lint-staged": {
|
|
"**/*.{js,jsx,ts,tsx,json,css,md}": [
|
|
"prettier --write"
|
|
]
|
|
}
|
|
}
|