From 1f3d151736c9b6f128f478bf0e4ca49368f2d0f8 Mon Sep 17 00:00:00 2001 From: Michael Kochell <6913320+mickmister@users.noreply.github.com> Date: Wed, 27 Aug 2025 08:21:25 +0000 Subject: [PATCH 1/2] react-native-caz beginning --- .devcontainer/Dockerfile | 2 + .../react-native-caz/INTEGRATION.md | 116 +++++++++++ .../react-native-caz/README.md | 112 ++++++++++ .../react-native-caz/index.js | 90 ++++++++ .../react-native-caz/package.json | 22 ++ .../template/.springboard.config.json | 43 ++++ .../react-native-caz/template/App.tsx | 106 ++++++++++ .../react-native-caz/template/app.config.ts | 110 ++++++++++ .../app/entrypoints/rn_init_module.d.ts | 9 + .../app/entrypoints/rn_init_module.js | 19 ++ .../template/assets/adaptive-icon.png | Bin 0 -> 17547 bytes .../template/assets/favicon.png | Bin 0 -> 1466 bytes .../assets/icon-android-background.png | Bin 0 -> 18161 bytes .../assets/icon-android-foreground.png | Bin 0 -> 4987 bytes .../template/assets/icon-ios.png | Bin 0 -> 36831 bytes .../react-native-caz/template/assets/icon.png | Bin 0 -> 43695 bytes .../react-native-caz/template/babel.config.js | 36 ++++ .../babel_plugin_platform_comments.js | 55 +++++ .../react-native-caz/template/eas.json | 66 ++++++ .../template/expo_notifications.tsx | 158 ++++++++++++++ .../template/expo_notifications_old.tsx | 134 ++++++++++++ .../react-native-caz/template/index.js | 8 + .../react-native-caz/template/metro.config.js | 28 +++ .../react-native-caz/template/package.json | 68 ++++++ .../template/scripts/patch-gradle-notifee.sh | 32 +++ .../react-native-caz/template/tsconfig.json | 10 + .../react-native/components/main_webview.tsx | 193 ++++++++++++++++++ 27 files changed, 1417 insertions(+) create mode 100644 packages/springboard/platform-templates/react-native-caz/INTEGRATION.md create mode 100644 packages/springboard/platform-templates/react-native-caz/README.md create mode 100644 packages/springboard/platform-templates/react-native-caz/index.js create mode 100644 packages/springboard/platform-templates/react-native-caz/package.json create mode 100644 packages/springboard/platform-templates/react-native-caz/template/.springboard.config.json create mode 100644 packages/springboard/platform-templates/react-native-caz/template/App.tsx create mode 100644 packages/springboard/platform-templates/react-native-caz/template/app.config.ts create mode 100644 packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.d.ts create mode 100644 packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.js create mode 100644 packages/springboard/platform-templates/react-native-caz/template/assets/adaptive-icon.png create mode 100644 packages/springboard/platform-templates/react-native-caz/template/assets/favicon.png create mode 100644 packages/springboard/platform-templates/react-native-caz/template/assets/icon-android-background.png create mode 100644 packages/springboard/platform-templates/react-native-caz/template/assets/icon-android-foreground.png create mode 100644 packages/springboard/platform-templates/react-native-caz/template/assets/icon-ios.png create mode 100644 packages/springboard/platform-templates/react-native-caz/template/assets/icon.png create mode 100644 packages/springboard/platform-templates/react-native-caz/template/babel.config.js create mode 100644 packages/springboard/platform-templates/react-native-caz/template/babel_plugins/babel_plugin_platform_comments.js create mode 100644 packages/springboard/platform-templates/react-native-caz/template/eas.json create mode 100644 packages/springboard/platform-templates/react-native-caz/template/expo_notifications.tsx create mode 100644 packages/springboard/platform-templates/react-native-caz/template/expo_notifications_old.tsx create mode 100644 packages/springboard/platform-templates/react-native-caz/template/index.js create mode 100644 packages/springboard/platform-templates/react-native-caz/template/metro.config.js create mode 100644 packages/springboard/platform-templates/react-native-caz/template/package.json create mode 100755 packages/springboard/platform-templates/react-native-caz/template/scripts/patch-gradle-notifee.sh create mode 100644 packages/springboard/platform-templates/react-native-caz/template/tsconfig.json create mode 100644 packages/springboard/platforms/react-native/components/main_webview.tsx diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 32be5193..dde9ad7b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -5,6 +5,8 @@ RUN git lfs install ENV PNPM_HOME=/workspaces/pnpm +WORKDIR /workspaces/songdrive + RUN corepack enable pnpm COPY pnpm-lock.yaml ./ diff --git a/packages/springboard/platform-templates/react-native-caz/INTEGRATION.md b/packages/springboard/platform-templates/react-native-caz/INTEGRATION.md new file mode 100644 index 00000000..ccfabe94 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/INTEGRATION.md @@ -0,0 +1,116 @@ +# CLI Integration Guide + +This document explains how to integrate the React Native CAZ template with your Springboard CLI to replicate the functionality of `/workspaces/songdrive/build/esbuild.ts` but in a zero-config manner. + +## CLI Integration Points + +### 1. Template Generation +```typescript +// In react_native_project_generator.ts +import { execSync } from 'child_process'; + +export async function generateReactNativeProject(config: SpringboardConfig) { + // Use CAZ to generate from template + const templateName = '@springboardjs/template-react-native'; + const projectPath = `./apps/${config.ids.slug}-mobile`; + + await execSync(`npx caz ${templateName} ${projectPath}`, { + input: JSON.stringify({ + ...config.ids, + siteUrl: config.siteUrl, + customRnMainPackage: '@acme/rn-main', // from your monorepo + customRnSharedPackage: '@acme/rn-shared', + customStorePackage: '@acme/store', + customFilesPackage: '@acme/files', + injectCustomCode: true + }) + }); +} +``` + +### 2. Code Injection (Replicating esbuild.ts:358) +```typescript +export async function injectCustomCode(projectPath: string, monorepoRoot: string) { + const configPath = path.join(projectPath, '.springboard.config.json'); + const springboardConfig = JSON.parse(fs.readFileSync(configPath, 'utf8')); + + // Copy built entrypoint (like esbuild.ts line 359) + if (springboardConfig.injectionPoints?.entrypoint) { + const sourcePath = path.join(monorepoRoot, springboardConfig.injectionPoints.entrypoint.sourceFile); + const destPath = path.join(projectPath, springboardConfig.injectionPoints.entrypoint.file); + await fs.copyFile(sourcePath, destPath); + } + + // Copy TypeScript definitions (like esbuild.ts line 360) + if (springboardConfig.injectionPoints?.entrypointTypes) { + const sourcePath = path.join(monorepoRoot, springboardConfig.injectionPoints.entrypointTypes.sourceFile); + const destPath = path.join(projectPath, springboardConfig.injectionPoints.entrypointTypes.file); + await fs.copyFile(sourcePath, destPath); + } + + // Run post-scaffold hooks + await execSync('npm run post-scaffold', { cwd: projectPath }); +} +``` + +### 3. Build Integration +```typescript +export async function buildMobileApp(profile: 'development' | 'preview' | 'production') { + const projectPath = './apps/mobile'; + + switch (profile) { + case 'development': + await execSync('npm run dev', { cwd: projectPath }); + break; + case 'preview': + await execSync('npm run build-android && npm run build-ios', { cwd: projectPath }); + break; + case 'production': + await execSync('npm run ci:build', { cwd: projectPath }); + break; + } +} +``` + +## Example Workflow + +### Scaffolding +```bash +# Your CLI command +sb scaffold mobile --config ./configs/songdrive.json + +# Internally runs: +# 1. npx caz @springboardjs/template-react-native songdrive-mobile +# 2. Inject code from /workspaces/songdrive/platform-templates/react-native/app/entrypoints/rn_init_module.js +# 3. Add custom dependencies from @acme/* packages +# 4. Run post-scaffold setup +``` + +### Building +```bash +# Zero-config CI builds +cd songdrive-mobile +npm run ci:build + +# Or via CLI +sb build mobile --profile production +``` + +## Template Injection Points + +The template provides these injection points: + +1. **`app/entrypoints/rn_init_module.js`** - Between `INJECTION_POINT_START/END` markers +2. **`package.json`** - Custom dependencies via template variables +3. **`App.tsx`** - Conditional imports and providers +4. **`.springboard.config.json`** - Configuration for CLI detection + +## Custom Code Sources + +Your CLI should source custom code from: + +- **Entrypoint**: `/workspaces/songdrive/platform-templates/react-native/app/entrypoints/rn_init_module.js` +- **Dependencies**: Automatically from `@acme/*` workspace packages +- **Hooks**: From `@acme/rn-main/src/hooks/rn_main_init_hooks` + +This replicates your `esbuild.ts` functionality but in a maintainable, zero-config way that works in CI/CD environments. \ No newline at end of file diff --git a/packages/springboard/platform-templates/react-native-caz/README.md b/packages/springboard/platform-templates/react-native-caz/README.md new file mode 100644 index 00000000..0ae1f02c --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/README.md @@ -0,0 +1,112 @@ +# Springboard React Native Template + +A CAZ template for creating React Native Springboard applications with Expo. + +## Usage + +### With CAZ CLI +```bash +npx caz @springboardjs/template-react-native my-app +``` + +### With Springboard CLI +```bash +sb scaffold mobile --config springboard.json +``` + +## Configuration + +The template accepts the following variables: + +### Required +- `slug`: App slug (lowercase, no spaces) - used for Expo slug +- `title`: App display name - shown to users +- `dot`: Bundle identifier in reverse domain format (e.g., `com.myorg.myapp`) +- `flat`: Flat identifier without dots (e.g., `myapp`) - used for package name +- `siteUrl`: Base URL for your Springboard web app + +### Optional +- `springboardVersion`: Version of Springboard packages to use (default: `latest`) + +## Example Configuration + +```json +{ + "ids": { + "slug": "my-app", + "title": "My App", + "dot": "com.myorg.myapp", + "flat": "myapp" + }, + "siteUrl": "https://myapp.com", + "springboardVersion": "latest" +} +``` + +## Features + +- ✅ Generic React Native + Expo setup +- ✅ Springboard engine integration +- ✅ WebView component for hybrid apps +- ✅ EAS build configuration +- ✅ Configurable app identifiers +- ✅ TypeScript support +- ✅ Development and production build profiles +- ✅ **Code injection support** for custom packages +- ✅ **Zero-config CI builds** with `npm run ci:build` +- ✅ **Conditional dependency injection** (@acme/rn-main, @acme/rn-shared, etc.) + +## Generated Structure + +``` +my-app/ +├── App.tsx # Main app component +├── app.config.ts # Expo configuration +├── eas.json # EAS build configuration +├── package.json # Dependencies and scripts +├── app/ +│ └── entrypoints/ +│ ├── rn_init_module.js # Springboard entrypoint +│ └── rn_init_module.d.ts # TypeScript declarations +├── assets/ # App icons and assets +└── babel.config.js # Babel configuration +``` + +## Code Injection System + +The template supports **zero-config code injection** for custom business logic: + +### File Copy Injection Points (Matching esbuild.ts) +- **`rn_init_module.js`**: Copies `dist/rn-main/neutral/dist/index.js` → `app/entrypoints/rn_init_module.js` +- **`rn_init_module.d.ts`**: Copies `packages/rn-main/springboard_entrypoint.d.ts` → `app/entrypoints/rn_init_module.d.ts` +- **Dependencies**: Conditional inclusion of `@acme/*` packages +- **Providers**: Automatic wrapping with custom RN providers + +### Post-Scaffold Workflow (Zero-Config) +1. Template generates with placeholder files +2. CLI builds your monorepo packages +3. CLI detects `.springboard.config.json` +4. Built files get copied to injection points (exactly like esbuild.ts:358-360) +5. `npm run post-scaffold` executes additional setup + +### CI/CD Integration +```bash +# Zero-config production builds +npm run ci:build # Build both platforms +npm run ci:build-android # Android only +npm run ci:build-ios # iOS only +``` + +## Next Steps + +### For Generic Apps +1. Install dependencies: `npm install` +2. Start development server: `npm run dev` +3. Customize your Springboard modules in `app/entrypoints/rn_init_module.js` +4. Update app icons in `assets/` directory +5. Configure EAS project ID for builds + +### For Organization-Specific Apps +1. Use Springboard CLI: `sb scaffold mobile --config myapp.json` +2. CLI automatically injects your custom code +3. Ready for CI/CD with `npm run ci:build` \ No newline at end of file diff --git a/packages/springboard/platform-templates/react-native-caz/index.js b/packages/springboard/platform-templates/react-native-caz/index.js new file mode 100644 index 00000000..83d8d624 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/index.js @@ -0,0 +1,90 @@ +const { prompt } = require('enquirer'); + +module.exports = { + name: 'react-native-springboard', + description: 'A React Native Springboard app template', + + prompts: [ + { + type: 'input', + name: 'slug', + message: 'App slug (lowercase, no spaces):', + default: 'my-app' + }, + { + type: 'input', + name: 'title', + message: 'App title (display name):', + default: 'My App' + }, + { + type: 'input', + name: 'dot', + message: 'Bundle identifier (reverse domain):', + default: 'com.myorg.myapp' + }, + { + type: 'input', + name: 'flat', + message: 'Flat identifier (no dots):', + default: 'myapp' + }, + { + type: 'input', + name: 'siteUrl', + message: 'Default site URL:', + default: 'https://myapp.com' + }, + { + type: 'input', + name: 'springboardVersion', + message: 'Springboard version:', + default: 'latest' + }, + { + type: 'input', + name: 'customRnMainPackage', + message: 'Custom RN main package (optional, e.g., @acme/rn-main):', + default: '' + }, + { + type: 'input', + name: 'customRnSharedPackage', + message: 'Custom RN shared package (optional, e.g., @acme/rn-shared):', + default: '' + }, + { + type: 'input', + name: 'customStorePackage', + message: 'Custom store package (optional, e.g., @acme/store):', + default: '' + }, + { + type: 'input', + name: 'customFilesPackage', + message: 'Custom files package (optional, e.g., @acme/files):', + default: '' + }, + { + type: 'confirm', + name: 'injectCustomCode', + message: 'Will custom code be injected after scaffolding?', + default: true + } + ], + + filters: { + 'node_modules/**': false, + '.expo/**': false, + 'dist/**': false, + '*.log': false + }, + + complete: (data) => { + console.log(`\n🎉 Successfully created ${data.title}!`); + console.log('\nNext steps:'); + console.log(' cd', data.dest); + console.log(' npm install'); + console.log(' npm run dev'); + } +}; \ No newline at end of file diff --git a/packages/springboard/platform-templates/react-native-caz/package.json b/packages/springboard/platform-templates/react-native-caz/package.json new file mode 100644 index 00000000..cb0400e7 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/package.json @@ -0,0 +1,22 @@ +{ + "name": "@springboardjs/template-react-native", + "version": "1.0.0", + "description": "CAZ template for React Native Springboard apps", + "main": "index.js", + "keywords": [ + "caz-template", + "react-native", + "expo", + "springboard", + "mobile-app" + ], + "author": "Springboard Team", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/springboardjs/springboard" + }, + "engines": { + "node": ">=16" + } +} \ No newline at end of file diff --git a/packages/springboard/platform-templates/react-native-caz/template/.springboard.config.json b/packages/springboard/platform-templates/react-native-caz/template/.springboard.config.json new file mode 100644 index 00000000..edf005fa --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/.springboard.config.json @@ -0,0 +1,43 @@ +{ + "platform": "react-native", + "templateVersion": "1.0.0", + "injectionPoints": {<% if (injectCustomCode) { %> + "entrypoint": { + "file": "app/entrypoints/rn_init_module.js", + "sourceFile": "dist/rn-main/neutral/dist/index.js", + "description": "Copy built rn-main module as entrypoint" + }, + "entrypointTypes": { + "file": "app/entrypoints/rn_init_module.d.ts", + "sourceFile": "packages/rn-main/springboard_entrypoint.d.ts", + "description": "Copy TypeScript definitions for entrypoint" + }, + "postScaffoldScript": "post-scaffold"<% } %> + }, + "buildProfiles": { + "development": { + "platform": "both", + "distribution": "internal", + "script": "npm run dev" + }, + "preview": { + "platform": "both", + "distribution": "internal", + "buildScript": { + "android": "npm run build-android", + "ios": "npm run build-ios" + } + }, + "production": { + "platform": "both", + "distribution": "store", + "buildScript": "npm run ci:build" + } + }, + "customPackages": [<% if (customRnMainPackage) { %> + "<%= customRnMainPackage %>",<% } %><% if (customRnSharedPackage) { %> + "<%= customRnSharedPackage %>",<% } %><% if (customStorePackage) { %> + "<%= customStorePackage %>",<% } %><% if (customFilesPackage) { %> + "<%= customFilesPackage %>"<% } %> + ] +} \ No newline at end of file diff --git a/packages/springboard/platform-templates/react-native-caz/template/App.tsx b/packages/springboard/platform-templates/react-native-caz/template/App.tsx new file mode 100644 index 00000000..645fc324 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/App.tsx @@ -0,0 +1,106 @@ +import React, {useRef, useState} from 'react'; +import {StyleSheet, StatusBar} from 'react-native'; + +import {MainWebview} from '@springboardjs/platforms-react-native/components/main_webview'; + +import {SafeAreaProvider, SafeAreaView} from 'react-native-safe-area-context'; +import {SpringboardProviderPure} from 'springboard/engine/engine'; + +// Conditionally import custom packages if available<% if (customRnMainPackage) { %> +import {handleOnShouldStartLoadWithRequest, initRnMainHooks, RnMainProviders} from '<%= customRnMainPackage %>/src/hooks/rn_main_init_hooks';<% } %> + + +import {useAndInitializeSpringboardEngine} from '@springboardjs/platforms-react-native/entrypoints/rn_app_springboard_entrypoint'; + +import initializeRNSpringboardEngine from './app/entrypoints/rn_init_module'; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +import {makeMockCoreDependencies} from 'springboard/test/mock_core_dependencies'; +import {BrowserJsonRpcClientAndServer} from '@springboardjs/platforms-browser/services/browser_json_rpc'; +import {HttpKVStoreService} from 'springboard/services/http_kv_store_client'; + +const DATA_HOST: string = process.env.EXPO_PUBLIC_SITE_URL || ''; +const WS_HOST = DATA_HOST.replace('http', 'ws'); + +let WS_FULL_URL = WS_HOST + '/ws'; +// if (queryParams) { +// WS_FULL_URL += `?${queryParams.toString()}`; +// } + +const remoteRpc = new BrowserJsonRpcClientAndServer(WS_FULL_URL); +const remoteKv = new HttpKVStoreService(DATA_HOST); + +export default function App() { + const [spaRoute, setSpaRoute] = useState<{route: string} | null>(null); + const onMessageFromRN = useRef<((message: string) => void) | null>(null); + + const sbInitResult = useAndInitializeSpringboardEngine({ + applicationEntrypoint: initializeRNSpringboardEngine, + asyncStorageDependency: AsyncStorage, + onMessageFromRN: (message) => { + onMessageFromRN.current?.(message); + }, + remoteKv, + remoteRpc, + }); + +<% if (customRnMainPackage) { %> // Initialize custom RN main hooks if available + initRnMainHooks({ + setSpaRoute, + engine: sbInitResult?.engine, + }); + + const customHandleOnShouldStartLoadWithRequest = (request: any) => { + return handleOnShouldStartLoadWithRequest(request, sbInitResult?.engine!); + };<% } else { %> const genericHandleOnShouldStartLoadWithRequest = (request: any) => { + // Generic handler for webview navigation requests + const url = request.url; + + // Allow standard protocols + if (url.startsWith('http://') || url.startsWith('https://')) { + return true; + } + + // Block other protocols for security + return false; + };<% } %> + + let content: React.ReactNode = sbInitResult?.engine && sbInitResult?.handleMessageFromWebview && ( + { + onMessageFromRN.current = cb; + }} + onShouldStartLoadWithRequest={<% if (customRnMainPackage) { %>customHandleOnShouldStartLoadWithRequest<% } else { %>genericHandleOnShouldStartLoadWithRequest<% } %>} + webAppUrl={DATA_HOST} + showNavigation={true} + /> + ); + + return ( + + + + + ); +} + + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, +}); diff --git a/packages/springboard/platform-templates/react-native-caz/template/app.config.ts b/packages/springboard/platform-templates/react-native-caz/template/app.config.ts new file mode 100644 index 00000000..df63e1ad --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/app.config.ts @@ -0,0 +1,110 @@ +import {ExpoConfig, ConfigContext} from 'expo/config'; + +const appProfile = (process.env as Record).EXPO_APP_PROFILE || 'development'; +const appQualifier = appProfile.includes('production') ? '' : appProfile; + +const appQualifierWithDash = appQualifier ? (appQualifier + '-') : ''; +const appQualifierWithDot = appQualifier ? ('.' + appQualifier) : ''; + +const env = (process.env as Record); + +// const appQualifierWithDash = appProfile === 'production' ? '' : '-' + appProfile; +// const appQualifierWithDot = appProfile === 'production' ? '' : '.' + appProfile; + +const version = '0.1.0'; + +const ids = { + "title": "<%= title %>", + "slug": "<%= slug %>", + "dot": "<%= dot %>", + "flat": "<%= flat %>" +}; + +export default ({config}: ConfigContext): ExpoConfig => ({ + "name": `${appQualifierWithDash}${ids.title}`, + "scheme": `${ids.flat}${appQualifier}`, + "userInterfaceStyle": "automatic", + "slug": ids.slug, + "version": version, + "orientation": "portrait", + "splash": { + "image": "./assets/icon-android-foreground.png", + "resizeMode": "contain", + "backgroundColor": "#2D2C80" + }, + "updates": { + "fallbackToCacheTimeout": 0 + }, + "assetBundlePatterns": [ + "**/*" + ], + "ios": { + "bundleIdentifier": `${ids.dot}${appQualifierWithDot}`, + "buildNumber": version, + "supportsTablet": true, + "infoPlist": { + "ITSAppUsesNonExemptEncryption": false + }, + "icon": "./assets/icon-ios.png", + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/icon-android-foreground.png", + "backgroundImage": "./assets/icon-android-background.png" + }, + "icon": "./assets/icon.png", + "package": `${ids.dot}${appQualifierWithDot}`, + ...( + !env.EXPO_GITHUB_ACTIONS_RUN ? { + "googleServicesFile": env.GOOGLE_SERVICES_JSON || env.EXPO_GOOGLE_SERVICES_FILE, + } : { + + } + ), + "permissions": [ + "android.permission.READ_EXTERNAL_STORAGE", + "android.permission.WRITE_EXTERNAL_STORAGE", + "android.permission.RECORD_AUDIO", + "android.permission.MODIFY_AUDIO_SETTINGS", + ] + }, + "web": { + "favicon": "./assets/favicon.png" + }, + "extra": { + "eas": { + "build": { + "experimental": { + "ios": { + "appExtensions": [] + } + } + } + } + }, + "plugins": [ + "expo-document-picker", + [ + "expo-share-intent", + { + "iosActivationRules": { + "NSExtensionActivationSupportsWebURLWithMaxCount": 10, + "NSExtensionActivationSupportsWebPageWithMaxCount": 10, + "NSExtensionActivationSupportsImageWithMaxCount": 10, + "NSExtensionActivationSupportsMovieWithMaxCount": 10, + "NSExtensionActivationSupportsText": true, + "NSExtensionActivationSupportsFileWithMaxCount": 10 + }, + "androidIntentFilters": [ + "*/*" + ], + "androidMultiIntentFilters": [ + "*/*" + ] + } + ], + ], + "runtimeVersion": { + "policy": "appVersion" + } +}); diff --git a/packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.d.ts b/packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.d.ts new file mode 100644 index 00000000..a7f56ea4 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.d.ts @@ -0,0 +1,9 @@ +import {SpringboardRegistry} from 'springboard/engine/register'; + +/** + * Accepts a SpringboardRegisry, which can be used to define modules to be registered + * @param springboardRegistry - SpringboardRegistry + */ +declare function springboardEntrypoint(springboardRegistry: SpringboardRegistry): void; + +export default springboardEntrypoint; diff --git a/packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.js b/packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.js new file mode 100644 index 00000000..92433d89 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/app/entrypoints/rn_init_module.js @@ -0,0 +1,19 @@ +<% if (injectCustomCode) { %>// This file will be replaced during scaffolding with dist/rn-main/neutral/dist/index.js +/** + * Springboard entrypoint for React Native apps + * This file will be copied from the built rn-main package during scaffolding + */ +export default function springboardEntrypoint(springboardRegistry) { + console.log('Placeholder entrypoint - will be replaced by CLI with built rn-main module'); +}<% } else { %>/** + * Default Springboard entrypoint for React Native apps + * Register your custom modules here + * @param {import('springboard/engine/register').SpringboardRegistry} springboardRegistry + */ +export default function springboardEntrypoint(springboardRegistry) { + // Register your custom modules here + // Example: + // springboardRegistry.defineModule('MyCustomModule', () => import('./my_custom_module')); + + console.log('Springboard React Native app initialized'); +}<% } %> \ No newline at end of file diff --git a/packages/springboard/platform-templates/react-native-caz/template/assets/adaptive-icon.png b/packages/springboard/platform-templates/react-native-caz/template/assets/adaptive-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03d6f6b6c6727954aec1d8206222769afd178d8d GIT binary patch literal 17547 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 literal 0 HcmV?d00001 diff --git a/packages/springboard/platform-templates/react-native-caz/template/assets/icon-android-background.png b/packages/springboard/platform-templates/react-native-caz/template/assets/icon-android-background.png new file mode 100644 index 0000000000000000000000000000000000000000..de959e533763ffe6fa7032f2095e2ed1eeca370c GIT binary patch literal 18161 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 A#Q*>R literal 0 HcmV?d00001 diff --git a/packages/springboard/platform-templates/react-native-caz/template/assets/icon-android-foreground.png b/packages/springboard/platform-templates/react-native-caz/template/assets/icon-android-foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4b4a2858b56dc018d2bb9c34a849bf05d2a1b1 GIT binary patch literal 4987 zcmeHL`CF1{_s29vuS&>rnNbvV%t|e-+!9UH%$1tTvDD0^%yGkwMKLXzVMa~V(o#q# zTYTT#QVCNc4NWo^CYTXd&?Ip~R8m~9-lwP^@k6kbzkd~#FyX!d| zRWde__&vXcJ<)dLv%f$i@7xK22JzhG$J>ne2L8J}W&4=}htIo;G*^M!7~xyW5AxcvXTU zAj_0Pyh{02;g>pWv@3z4?P=}@eo!GZ&2_mRoKiMnW%-*O)FWp%(w>Pg`pMz*yM$1z z*QF|tB{$)j@f0G&KdMmVxEVTk{5g4Dzw z{puv!g&PpXB-|D8X>TjAROMaoav;0JsYQmn7KQ7=*vvZ{Nct~dw&(1iG`&BJ}sd2a64@VEa0!{?)*P{MDz zHjYRzBS^Fcr6QK+B3_hE8A}W-FYh5jFv+F78kH!rVk59$K`6v1@7z%iVNG7u>zAc_ zrALfezwl0H?AJXCC$gD+&tQeR9jnvBZQNakq}RKVxIu^z5k8cjg<#&IMCl%e6D3m) zy$#W%Roe_rp@4rO_)ug!5wd_S4{O7bC3U^h$uzj~4@7j^+>T9yj|pj-iz@sEk9Qz- zI6-35F}iz<=9?~LSv%w^x9SFVJ%-O)%wH7k;; z6vZM!UL7s@dwf_o;RGI9jZ_tl2$b7z+^-6mq$DV$&-;o6o3zPy&LWxetXOY#r;Qv> z!Ek#60~%uZP&ZX1xb)`TOvSw@c|n}B>6fhsYK{#a7kf!58+{Q2)vPN*>-GWj$zv$S z$yIoFCO4j?JM#0w=>R=(YO{w_$q0(6z%beNoSoP8Swtu7(kd)#m{{=Og6XH?yr35>dl<)pz(8lXC+xug0aYy{z7YDo60^hv4WV&uGv6|G3 z4*e;f6}As~3RQ1%vnq)~x1lEO;P-Q1)qTFrIrEY*t$CUP;r1BA$o9`05D_@=ocZSx z`V~j1!;TJ9;wNqNXH)^`>DTO=Y3+bt?c}9({;F$@tT|EmkX5DS+n(yCVg~XK_ z6RD%Azh)lH++J@}uC_q_=rLR}Gl$d3;}Q$bw)!%f$YHqRL??7+tji+=dD@Cs3E)W~ z=)eO`0S(nnG=^_NcxqriB71MSGqiIy1cI)VeY`vigLUOKZ<7c+T~{_aI5JO*qQ^vn}31@JlXB92YUif9QNC z8n}E!^8JsrelF}xOCK+O4QCMaNDl2#*FxsUy-&}owBo|FGvCo^wey=HZ*uTO!2Yr~ z`)!z82RG{@OA=>$ZC$$Tu(wT!`n;ENkZJV6(vf+rN#9E1$x>p)WK8;xUk&82tS`;i zZR7d6b>ZjN3Ys0}U#q5=elsCV7)!Pje&TzUMQHRl3dKcAz|k`df%0Op&d^pb|9p*x zVG>km;d>L3WFZqMKl@vAXse-wV$yHD-KDGL(ZhX2{ah^tNn*y>`rh*Ps6lGc5@QAd z;s965l@^gC7L0_#w9OjQkgA1rqF;AzTy~z*M_@h!IN`z%p{8*Q^8uY3G2TTv&l+ zF{vMy+#t@>@PgkVEGQJ2|7JFfFhy3hX7a{D0R5OcoV^T>uhXUArAlU9Ptm4;VdG8R zyBC1vRY5uk^EK{`a?t$8N;ydD2#|RUz{`Y_M0**i+PIrv%|yllLl2FJ`tR_=*`3W^ zpD7|SE!jd(r>auFWR7UE7$;TIW#Wh5aYB-KXgzTbj9ViIIr)R}Pw~S_9RV4nV{?dh zfqbkFQm^i`(Xco_0+MBQyg+2Mv605Im+X0MaUC_TbKd-u8qLB^)&_Yi0>^*o@#$i zfuHf)pL^KieN-iXZ}0^z*CL5jH=IHR8t885qxE~6ZqqM)&HTU@ga!w0S~L>~*I9bw zB4R;vVvtiGy@Os0ERh_Btxr-vNySb4gGt2l1& z6+FZ_=8ByY)v@xucv z7LxBv&ept*UsxYBe&xTb+iowAL_Aw5;)FFeIw(A$X~ZDg(Du5}Z-Xku!w!v-Xp*;% zs=nZ=I6-=ru|Sjzs+e@k|KeO&&wFL%9IMET%7OKN%T)gnfXP~NGs!Ore`E8Q!H@dV zDfI7XKcv}Xmwx3xGzE?UsO`R0gozw`D$_@$YK!|}*%3QDy}?y|xnp5tkH-QV=Z~u@ zf3kv=>ROUf?eT&~V-qd&PHG*I$Lzxch`g`4K~$L3Z9N-9EvdeIX!Z?KA^0*nxVicx zFUf4wNzQ=zC`x7Mjd3Wfs2vQ<7Jk6OWilpmH!v>Pl6CB1t3I*6`~M1I-6h=RL8Vs#zYKzuo$XrM zW(S1rO#B~Z&k~$7HvURi&5tS;F$8XTonIo?MnalQ+vKoHBPiAWAS*g(1$Nm~5V;2R z?P^Fpe#|&93*tWlloAu`l8z!BrkeRwhWj%WIFl_puw2(Y^^3^>Z^v}FSAzw zU!K&cHO+O@>qF7lk5-%cu9`^u3_Bp@F2om6S770+g(8Kef9`%iaFx_Hu7|W4vI-kl z$~6_rVd0g|PwpQ)o_qc>9vPS|c`pHK%HRhZx;uFyVt7BYX-%=Lwy)=}!>HvLDO@%7 zTGcyh)!1~T&nNT(cj09QC2T9`2q=Jf%z}3b{6g3xP>!`nZOV7Q7H{6e{QReo8<1rO zbzKPa2xJ>~bC@LEf64W_p0iR_4monHuVSMsI+_!`vJBM2EDggSH}na4@?T`jA&4*^~pU$u5G%zbgwhQ`H4q-srIY$qmu3$;4nmW zU}~()$3LC9=p>=sHuPV^=D%hTE`6-cd_iZw2R7us2v{qybLe9@z4T>dv@P5HKp82U zGpx>+oxTGZp!qIW$|1_DX5H2LQG0DrLE8g16!p!=>>`@y?KKIm;Fz+{C}&VnYAt6x%cDzR8io$v|>>x@RB#|qJ!?C)IapxGCaHaWYQ|MetEQ^ z+gv>?uE#g?mn8E!F)x6ucqOATP*uzL=e6A;KqZbo6knV$IDTZL?2aihxU2Be--83h zoyb$%y0EP(IYfVSiavFq!tj)uEf^k?i+hFc6^MIcaMd_7P0aGwu9HV`xvt$2#^|}r zUkqrdRp%HJV_VlJqpasSbTjI2wPzM4A=A9ZT6F_;_y{iOkB*Vif#8p_9L?!dVEkL4 zWi4*@C+EFq5L#+yN}Y7g;gLG^++8{J^Bd3mu%`pN=w^BOkjCl@!?WlEo+L>R-OTq6 zq_JK@`Yhzg2aa}9R6-Q0VZNu1b0`{Uzd;>+8&J=1}U2CqiDjwQM=W?FrBiedldMa2J-UocdtWUzWE>Q#jiO4 literal 0 HcmV?d00001 diff --git a/packages/springboard/platform-templates/react-native-caz/template/assets/icon-ios.png b/packages/springboard/platform-templates/react-native-caz/template/assets/icon-ios.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ed436a8a3229bb33431cf49866507ca8b5200f GIT binary patch literal 36831 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%0DCwgiesOhj43qQ+$Jw?b;Ru{$q-xg^fS9JKH@+ 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 literal 0 HcmV?d00001 diff --git a/packages/springboard/platform-templates/react-native-caz/template/assets/icon.png b/packages/springboard/platform-templates/react-native-caz/template/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d3326b38985b7e0117b0026cdef84f398c80d5d2 GIT binary patch literal 43695 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 literal 0 HcmV?d00001 diff --git a/packages/springboard/platform-templates/react-native-caz/template/babel.config.js b/packages/springboard/platform-templates/react-native-caz/template/babel.config.js new file mode 100644 index 00000000..29d3fa52 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/babel.config.js @@ -0,0 +1,36 @@ +const fs = require('node:fs'); + +const plugins = [ + ['./babel_plugins/babel_plugin_platform_comments.js', { platform: 'react-native' }], +]; + +// TODO: this is a WIP to support developing alongside open-source repo. haven't gotten the imports to work yet +// The compilation error that I receive: "Unable to resolve "../jamtools/packages/springboard/core/engine/engine" from "apps/mobile/App.tsx"" +if (process.env.USE_DEV_ALIASES) { + const cwd = process.cwd(); + const devPathFileName = `${cwd}/../../scripts/dev_cycle/dev_paths.json`; + let devAliases = {}; + try { + devAliases = JSON.parse(fs.readFileSync(devPathFileName).toString()); + } catch (e) { + console.error(`USE_DEV_ALIASES env var is true, and failed to parse ${devPathFileName}`, e); + process.exit(1); + } + + // for (const key of Object.keys(devAliases)) { + // devAliases[key] = devAliases[key]; + // } + + plugins.push(['module-resolver', { + root: ['../..'], + alias: devAliases, + }]); +} + +module.exports = function (api) { + api.cache(true); + return { + presets: ['babel-preset-expo'], + plugins, + }; +}; diff --git a/packages/springboard/platform-templates/react-native-caz/template/babel_plugins/babel_plugin_platform_comments.js b/packages/springboard/platform-templates/react-native-caz/template/babel_plugins/babel_plugin_platform_comments.js new file mode 100644 index 00000000..82641193 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/babel_plugins/babel_plugin_platform_comments.js @@ -0,0 +1,55 @@ +// import {PluginObj} from '@babel/core'; + +// export default function babelPluginPlatformComments() { // : PluginObj { +module.exports = function () { + return { + visitor: { + Program(path, state) { + const rawSource = state.file.code; + + const platformStartRegex = /@platform "(node|browser|react-native)"/; + const platformEndRegex = /@platform end/; + + const hasPlatformStart = platformStartRegex.test(rawSource); + const hasPlatformEnd = platformEndRegex.test(rawSource); + // console.log(`File: ${state.filename}, hasPlatformStart: ${hasPlatformStart}, hasPlatformEnd: ${hasPlatformEnd}`); + if (!hasPlatformStart && !hasPlatformEnd) { + // console.log(`Skipping file: ${state.filename}`); + return; + } + const platform = state.opts.platform || 'react-native'; + let insideUnmatchedBlock = false; + + path.get('body').forEach(statementPath => { + const leadingComments = statementPath.node.leadingComments || []; + + leadingComments.forEach(comment => { + const commentText = comment.value.trim(); + + // Start of a platform block + if (commentText.startsWith('@platform')) { + const [, blockPlatform] = commentText.match(/@platform "(.*?)"/) || []; + + if (blockPlatform && blockPlatform !== platform) { + insideUnmatchedBlock = true; + } else { + insideUnmatchedBlock = false; + } + } + + // End of a platform block + if (commentText === '@platform end') { + insideUnmatchedBlock = false; + } + }); + + // Notice this is outside of the loop above + // This removes the line that is inside of a platform block that doesn't match the current platform + if (insideUnmatchedBlock) { + statementPath.remove(); + } + }); + }, + }, + }; +}; diff --git a/packages/springboard/platform-templates/react-native-caz/template/eas.json b/packages/springboard/platform-templates/react-native-caz/template/eas.json new file mode 100644 index 00000000..3c227500 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/eas.json @@ -0,0 +1,66 @@ +{ + "cli": { + "promptToConfigurePushNotifications": false, + "appVersionSource": "remote" + }, + "build": { + "base": { + "node": "20.17.0", + "env": { + "EXPO_USE_FAST_RESOLVER": "true" + }, + "autoIncrement": true + }, + "development": { + "channel": "development", + "distribution": "internal", + "extends": "base", + "developmentClient": true, + "env": { + "EXPO_APP_PROFILE": "development", + "EXPO_PUBLIC_SITE_URL": "<%= siteUrl %>", + "PUBLIC_SITE_URL": "<%= siteUrl %>" + }, + "android": { + "buildType": "apk" + }, + "ios": { + "resourceClass": "m1-medium" + } + }, + "preview": { + "channel": "preview", + "distribution": "internal", + "extends": "base", + "developmentClient": false, + "env": { + "EXPO_APP_PROFILE": "preview", + "EXPO_PUBLIC_SITE_URL": "<%= siteUrl %>", + "PUBLIC_SITE_URL": "<%= siteUrl %>" + }, + "android": { + "buildType": "apk" + }, + "ios": { + "resourceClass": "m1-medium" + } + }, + "production": { + "channel": "production", + "distribution": "store", + "extends": "base", + "developmentClient": false, + "env": { + "EXPO_APP_PROFILE": "production", + "EXPO_PUBLIC_SITE_URL": "<%= siteUrl %>", + "PUBLIC_SITE_URL": "<%= siteUrl %>" + }, + "android": { + "buildType": "app-bundle" + }, + "ios": { + "resourceClass": "m1-medium" + } + } + } +} diff --git a/packages/springboard/platform-templates/react-native-caz/template/expo_notifications.tsx b/packages/springboard/platform-templates/react-native-caz/template/expo_notifications.tsx new file mode 100644 index 00000000..50106b30 --- /dev/null +++ b/packages/springboard/platform-templates/react-native-caz/template/expo_notifications.tsx @@ -0,0 +1,158 @@ +import { useState, useEffect, useRef } from 'react'; +import { Text, View, Button, Platform } from 'react-native'; +import * as Device from 'expo-device'; +import * as Notifications from 'expo-notifications'; +import Constants from 'expo-constants'; + +import notifee from '@notifee/react-native'; +import {AndroidColor, AndroidImportance, EventType} from '@notifee/react-native'; + + +const displayNotification = async (notification: Notifications.Notification) => { + const content = notification.request.content; + + await notifee.displayNotification({ + title: content.title || '', + body: content.body || '', + data: content.data, + android: { + importance: AndroidImportance.HIGH, + channelId: 'default4', + // smallIcon: 'name-of-a-small-icon', // optional, defaults to 'ic_launcher'. + // pressAction is needed if you want the notification to open the app when pressed + pressAction: { + id: 'default', + }, + // fullScreenAction: { + // id: 'default2', // Set an ID for the full-screen action + // }, + }, + }); +} + + +Notifications.setNotificationHandler({ + handleNotification: async () => ({ + shouldShowAlert: true, + shouldPlaySound: false, + shouldSetBadge: false, + }), +}); + + + +async function sendPushNotification(expoPushToken: string) { + const message = { + to: expoPushToken, + sound: 'default', + title: 'Original Title', + body: 'And here is the body!', + data: { someData: 'goes here' }, + }; + + await fetch('https://exp.host/--/api/v2/push/send', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Accept-encoding': 'gzip, deflate', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(message), + }); +} + + +function handleRegistrationError(errorMessage: string) { + alert(errorMessage); + throw new Error(errorMessage); +} + +async function registerForPushNotificationsAsync() { + if (Platform.OS === 'android') { + Notifications.setNotificationChannelAsync('default5', { + name: 'default5', + importance: Notifications.AndroidImportance.MAX, + vibrationPattern: [0, 250, 250, 250], + lightColor: '#FF231F7C', + }); + } + + if (Device.isDevice) { + const { status: existingStatus } = await Notifications.getPermissionsAsync(); + let finalStatus = existingStatus; + if (existingStatus !== 'granted') { + const { status } = await Notifications.requestPermissionsAsync(); + finalStatus = status; + } + if (finalStatus !== 'granted') { + handleRegistrationError('Permission not granted to get push token for push notification!'); + return; + } + const projectId = + Constants?.expoConfig?.extra?.eas?.projectId ?? Constants?.easConfig?.projectId; + if (!projectId) { + handleRegistrationError('Project ID not found'); + } + try { + const pushTokenString = ( + await Notifications.getExpoPushTokenAsync({ + projectId, + }) + ).data; + console.log(pushTokenString); + return pushTokenString; + } catch (e: unknown) { + handleRegistrationError(`${e}`); + } + } else { + handleRegistrationError('Must use physical device for push notifications'); + } +} + +export function ExpoNotificationsTest() { + const [expoPushToken, setExpoPushToken] = useState(''); + const [notification, setNotification] = useState( + undefined + ); + const notificationListener = useRef(null); + const responseListener = useRef(null); + + useEffect(() => { + registerForPushNotificationsAsync() + .then(token => setExpoPushToken(token ?? '')) + .catch((error: any) => setExpoPushToken(`${error}`)); + + notificationListener.current = Notifications.addNotificationReceivedListener(notification => { + setNotification(notification); + displayNotification(notification); + }); + + responseListener.current = Notifications.addNotificationResponseReceivedListener(response => { + console.log(response); + }); + + return () => { + notificationListener.current && + Notifications.removeNotificationSubscription(notificationListener.current); + responseListener.current && + Notifications.removeNotificationSubscription(responseListener.current); + }; + }, []); + + return ( + + Your Expo push token: {expoPushToken} + + Title: {notification && notification.request.content.title} + Body: {notification && notification.request.content.body} + Data: {notification && JSON.stringify(notification.request.content.data)} + +