@deploid/cli 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,180 @@
1
+ # Deploid
2
+
3
+ **From build to publish — one command.**
4
+
5
+ Deploid automates the entire process of turning a web app into a ready-to-ship Android package.
6
+
7
+ ## 🚀 Quick Start
8
+
9
+ ```bash
10
+ # Install globally
11
+ npm install -g @deploid/cli
12
+
13
+ # Initialize a project
14
+ deploid init
15
+
16
+ # Add your logo
17
+ cp your-logo.svg assets/logo.svg
18
+
19
+ # Generate all required assets
20
+ deploid assets
21
+
22
+ # Package for Android
23
+ deploid package
24
+
25
+ # Build APK/AAB
26
+ deploid build
27
+
28
+ # Deploy to connected device
29
+ deploid deploy
30
+
31
+ # Setup Firebase for push notifications
32
+ deploid firebase
33
+
34
+ # Manage plugins
35
+ deploid plugin --list
36
+ deploid plugin --install storage
37
+ deploid plugin --remove debug-network
38
+
39
+ # Publish to stores
40
+ deploid publish
41
+ ```
42
+
43
+ ## ✨ Features
44
+
45
+ - **🖼️ Asset Generation**: Automatic icon generation for all Android densities and PWA
46
+ - **📦 Multi-Engine Packaging**: Capacitor, Tauri, and TWA support
47
+ - **🔨 Build System**: APK/AAB generation with signing
48
+ - **☁️ Publishing**: Play Store and GitHub Releases integration
49
+ - **🔧 Plugin Architecture**: Extensible and modular design
50
+ - **💾 Cross-Platform Storage**: Seamless storage across web and native environments
51
+ - **🔥 Firebase Integration**: Automated push notification setup
52
+ - **📱 Native Deployment**: Direct APK installation to devices
53
+ - **🍎 iOS Preparation**: Generate Xcode projects for Mac handoff
54
+
55
+ ## 💾 Cross-Platform Storage
56
+
57
+ Deploid includes built-in cross-platform storage utilities that work seamlessly across web and native environments:
58
+
59
+ ```bash
60
+ # Install storage plugin during init
61
+ deploid init
62
+ # Select "Cross-platform storage utilities" when prompted
63
+ ```
64
+
65
+ ### Usage
66
+
67
+ ```typescript
68
+ import { crossPlatformStorage } from './lib/storage'
69
+ import { secureStorageUtil } from './lib/secureStorage'
70
+
71
+ // Store data
72
+ await crossPlatformStorage.set('theme', 'dark')
73
+ await secureStorageUtil.set('authToken', 'secret-token')
74
+
75
+ // Retrieve data
76
+ const theme = await crossPlatformStorage.get('theme')
77
+ const token = await secureStorageUtil.get('authToken')
78
+ ```
79
+
80
+ **Features:**
81
+ - 🌐 **Web**: Uses localStorage/sessionStorage
82
+ - 📱 **Native**: Uses Capacitor Preferences + Secure Storage
83
+ - 🔒 **Security**: Encrypted storage for sensitive data
84
+ - 🔄 **Migration**: Easy transition from existing localStorage
85
+
86
+ ## 🔧 Plugin Management
87
+
88
+ Deploid includes a powerful plugin system that you can manage after initialization:
89
+
90
+ ```bash
91
+ # List all available plugins
92
+ deploid plugin --list
93
+
94
+ # Install a specific plugin
95
+ deploid plugin --install storage
96
+ deploid plugin --install debug-network
97
+
98
+ # Remove a plugin
99
+ deploid plugin --remove debug-network
100
+
101
+ # Interactive plugin manager
102
+ deploid plugin
103
+ ```
104
+
105
+ ### Available Plugins
106
+
107
+ - **📦 Assets** - Generate app icons and assets (required)
108
+ - **📱 Packaging** - Capacitor, Tauri, TWA support (required for packaging)
109
+ - **🔨 Build** - Android APK/AAB generation
110
+ - **📲 Deploy** - Direct device deployment via ADB
111
+ - **🍎 iOS** - iOS project preparation for Mac handoff
112
+ - **🐛 Debug** - Network debugging tools
113
+ - **💾 Storage** - Cross-platform storage utilities
114
+
115
+ ## 🎯 Supported Frameworks
116
+
117
+ - **Vite** (React, Vue, Svelte)
118
+ - **Next.js** (Static export)
119
+ - **Create React App**
120
+ - **Static HTML** projects
121
+
122
+ ## 📦 Supported Packaging Engines
123
+
124
+ - **Capacitor** - Native WebView wrapper
125
+ - **Tauri** - Rust-based desktop/mobile (planned)
126
+ - **TWA** - Trusted Web Activity (planned)
127
+
128
+ ## 🧩 Commands
129
+
130
+ | Command | Description |
131
+ | -------------------- | ------------------------------------------- |
132
+ | `deploid init` | Setup config and base folders |
133
+ | `deploid assets` | Generate all required icons and screenshots |
134
+ | `deploid package` | Wrap app for Android (Capacitor/Tauri/TWA) |
135
+ | `deploid build` | Build APK/AAB (debug/release) |
136
+ | `deploid publish` | Upload build to Play Store or GitHub |
137
+
138
+ ## 📚 Documentation
139
+
140
+ - [Getting Started](docs/getting-started.md)
141
+ - [Configuration](docs/configuration.md)
142
+ - [CLI Reference](docs/cli-reference.md)
143
+ - [Examples](docs/examples.md)
144
+ - [Contributing](docs/contributing.md)
145
+
146
+ ## 🎯 Current Status
147
+
148
+ ✅ **Milestone 1 — Core CLI + Capacitor** (Complete)
149
+ - [x] Config loader + basic CLI
150
+ - [x] Assets (icons) generation with Sharp
151
+ - [x] Capacitor packaging
152
+ - [x] Debug APK build system
153
+
154
+ 🔄 **Next: Milestone 2 — Release + CI**
155
+ - [ ] Signing + release builds
156
+ - [ ] Play/GitHub publishing
157
+ - [ ] Auto GitHub Actions generator
158
+
159
+ ## 🧠 Vision
160
+
161
+ > "Turn any web app into a publishable Android app with one command — including icons, signing, builds, and release automation."
162
+
163
+ The long-term goal: Expand to **multi-platform** (Windows .exe, macOS DMG, iOS IPA, and Web Deploy).
164
+
165
+ ## 📄 License
166
+
167
+ MIT © [MadsenDev](https://github.com/MadsenDev)
168
+
169
+ ## 🤝 Contributing
170
+
171
+ Contributions are welcome! Please see our [Contributing Guide](docs/contributing.md) for details.
172
+
173
+ ## 📞 Support
174
+
175
+ - **GitHub Issues**: [Report bugs and request features](https://github.com/MadsenDev/deploid/issues)
176
+ - **GitHub Discussions**: [Ask questions and discuss](https://github.com/MadsenDev/deploid/discussions)
177
+
178
+ ---
179
+
180
+ **Made with ❤️ by [MadsenDev](https://github.com/MadsenDev)**
package/bin/deploid ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/index.js');
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { execa } from 'execa';
3
+ import fs from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ describe('Deploid CLI', () => {
7
+ const cliEntry = path.resolve('dist/index.js');
8
+ it('should show help when run without arguments', async () => {
9
+ const { stdout } = await execa('node', [cliEntry, '--help']);
10
+ expect(stdout).toContain('Build -> package -> sign -> publish web apps to Android');
11
+ });
12
+ it('should show version', async () => {
13
+ const { stdout } = await execa('node', [cliEntry, '--version']);
14
+ expect(stdout).toContain('2.0.0');
15
+ });
16
+ it('should list available commands', async () => {
17
+ const { stdout } = await execa('node', [cliEntry, '--help']);
18
+ expect(stdout).toContain('init');
19
+ expect(stdout).toContain('assets');
20
+ expect(stdout).toContain('package');
21
+ expect(stdout).toContain('build');
22
+ expect(stdout).toContain('deploy');
23
+ expect(stdout).toContain('firebase');
24
+ });
25
+ it('should fail fast for publish in 2.0', async () => {
26
+ const { stderr, exitCode } = await execa('node', [cliEntry, 'publish'], {
27
+ reject: false
28
+ });
29
+ expect(exitCode).not.toBe(0);
30
+ expect(stderr).toContain('not implemented');
31
+ });
32
+ it('should reject non-capacitor packaging in 2.0', async () => {
33
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'deploid-test-'));
34
+ await fs.writeFile(path.join(tmpDir, 'deploid.config.mjs'), `export default {
35
+ appName: 'TestApp',
36
+ appId: 'com.example.testapp',
37
+ web: { framework: 'vite', buildCommand: 'npm run build', webDir: 'dist' },
38
+ android: { packaging: 'tauri' }
39
+ };\n`);
40
+ const { stderr, exitCode } = await execa('node', [cliEntry, 'package'], {
41
+ cwd: tmpDir,
42
+ reject: false
43
+ });
44
+ expect(exitCode).not.toBe(0);
45
+ expect(stderr).toContain('not supported in Deploid 2.0');
46
+ });
47
+ });
48
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface FirebaseOptions {
2
+ projectId?: string;
3
+ autoCreate?: boolean;
4
+ }
5
+ export declare function setupFirebase(options: FirebaseOptions): Promise<void>;
6
+ //# sourceMappingURL=firebase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.d.ts","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwG3E"}
@@ -0,0 +1,152 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { execa } from 'execa';
4
+ import readline from 'node:readline';
5
+ export async function setupFirebase(options) {
6
+ const cwd = process.cwd();
7
+ console.log('🔥 Firebase Setup for Push Notifications');
8
+ console.log('This will configure Firebase for native Android push notifications.\n');
9
+ try {
10
+ // Check if Firebase CLI is installed
11
+ try {
12
+ await execa('firebase', ['--version'], { stdio: 'pipe' });
13
+ console.log('✅ Firebase CLI found');
14
+ }
15
+ catch (error) {
16
+ console.log('📦 Installing Firebase CLI...');
17
+ await execa('npm', ['install', '-g', 'firebase-tools'], { stdio: 'inherit' });
18
+ }
19
+ // Login to Firebase
20
+ console.log('🔐 Please login to Firebase...');
21
+ await execa('firebase', ['login'], { stdio: 'inherit' });
22
+ let projectId = options.projectId;
23
+ // Create or select Firebase project
24
+ if (options.autoCreate || !projectId) {
25
+ if (options.autoCreate) {
26
+ console.log('🚀 Creating new Firebase project...');
27
+ const projectName = path.basename(cwd).replace(/[^a-zA-Z0-9]/g, '-');
28
+ await execa('firebase', ['projects:create', projectName], { stdio: 'inherit' });
29
+ projectId = projectName;
30
+ }
31
+ else {
32
+ // List existing projects
33
+ console.log('📋 Available Firebase projects:');
34
+ const { stdout } = await execa('firebase', ['projects:list'], { stdio: 'pipe' });
35
+ console.log(stdout);
36
+ const rl = readline.createInterface({
37
+ input: process.stdin,
38
+ output: process.stdout
39
+ });
40
+ projectId = await new Promise((resolve) => {
41
+ rl.question('Enter project ID: ', resolve);
42
+ });
43
+ rl.close();
44
+ }
45
+ }
46
+ // Initialize Firebase in the project
47
+ console.log('🔧 Initializing Firebase in project...');
48
+ await execa('firebase', ['use', projectId], { cwd, stdio: 'inherit' });
49
+ // Add Android app to Firebase
50
+ console.log('📱 Adding Android app to Firebase...');
51
+ const packageName = await getPackageName(cwd);
52
+ await execa('firebase', ['apps:create', 'android', packageName], {
53
+ cwd,
54
+ stdio: 'inherit'
55
+ });
56
+ // Download google-services.json
57
+ console.log('📄 Downloading google-services.json...');
58
+ await execa('firebase', ['apps:sdkconfig', 'android'], {
59
+ cwd,
60
+ stdio: 'inherit'
61
+ });
62
+ // Move google-services.json to correct location
63
+ const sourcePath = path.join(cwd, 'google-services.json');
64
+ const targetPath = path.join(cwd, 'android/app/google-services.json');
65
+ if (fs.existsSync(sourcePath)) {
66
+ // Ensure android/app directory exists
67
+ const androidAppDir = path.dirname(targetPath);
68
+ if (!fs.existsSync(androidAppDir)) {
69
+ fs.mkdirSync(androidAppDir, { recursive: true });
70
+ }
71
+ fs.copyFileSync(sourcePath, targetPath);
72
+ fs.unlinkSync(sourcePath); // Remove from root
73
+ console.log('✅ google-services.json placed in android/app/');
74
+ }
75
+ else {
76
+ console.log('⚠️ google-services.json not found. Please download it manually from Firebase Console.');
77
+ console.log('Place it in: android/app/google-services.json');
78
+ }
79
+ // Update Android build.gradle if needed
80
+ await updateAndroidBuildGradle(cwd);
81
+ console.log('\n🎉 Firebase setup complete!');
82
+ console.log('Your app now supports native push notifications.');
83
+ console.log('\nNext steps:');
84
+ console.log(' 1. Run: deploid build');
85
+ console.log(' 2. Run: deploid deploy');
86
+ console.log(' 3. Test push notifications in your app');
87
+ }
88
+ catch (error) {
89
+ console.log('❌ Firebase setup failed:', error);
90
+ console.log('\nManual setup:');
91
+ console.log(' 1. Go to https://console.firebase.google.com/');
92
+ console.log(' 2. Create a new project');
93
+ console.log(' 3. Add Android app with package name:', await getPackageName(cwd));
94
+ console.log(' 4. Download google-services.json to android/app/');
95
+ }
96
+ }
97
+ async function getPackageName(cwd) {
98
+ try {
99
+ // Try to read from android/app/build.gradle
100
+ const buildGradlePath = path.join(cwd, 'android/app/build.gradle');
101
+ if (fs.existsSync(buildGradlePath)) {
102
+ const content = fs.readFileSync(buildGradlePath, 'utf8');
103
+ const match = content.match(/applicationId\s+['"]([^'"]+)['"]/);
104
+ if (match) {
105
+ return match[1];
106
+ }
107
+ }
108
+ // Try to read from deploid.config.ts
109
+ const configPath = path.join(cwd, 'deploid.config.ts');
110
+ if (fs.existsSync(configPath)) {
111
+ const content = fs.readFileSync(configPath, 'utf8');
112
+ const match = content.match(/appId:\s+['"]([^'"]+)['"]/);
113
+ if (match) {
114
+ return match[1];
115
+ }
116
+ }
117
+ // Default fallback
118
+ return 'com.example.myapp';
119
+ }
120
+ catch (error) {
121
+ return 'com.example.myapp';
122
+ }
123
+ }
124
+ async function updateAndroidBuildGradle(cwd) {
125
+ const buildGradlePath = path.join(cwd, 'android/app/build.gradle');
126
+ if (!fs.existsSync(buildGradlePath)) {
127
+ console.log('⚠️ android/app/build.gradle not found. Skipping build.gradle updates.');
128
+ return;
129
+ }
130
+ let content = fs.readFileSync(buildGradlePath, 'utf8');
131
+ // Check if Google Services plugin is already applied
132
+ if (!content.includes('com.google.gms.google-services')) {
133
+ console.log('🔧 Adding Google Services plugin to build.gradle...');
134
+ // Add plugin application
135
+ content = content.replace(/apply plugin: 'com\.android\.application'/, "apply plugin: 'com.android.application'\napply plugin: 'com.google.gms.google-services'");
136
+ // Add Firebase dependencies if not present
137
+ if (!content.includes('firebase-messaging')) {
138
+ const dependenciesMatch = content.match(/(dependencies\s*\{[^}]*\})/s);
139
+ if (dependenciesMatch) {
140
+ const dependencies = dependenciesMatch[1];
141
+ const newDependencies = dependencies.replace(/(implementation project\(':capacitor-android'\))/, '$1\n \n // Firebase dependencies\n implementation \'com.google.firebase:firebase-messaging:23.4.1\'\n implementation \'com.google.firebase:firebase-analytics:21.5.1\'');
142
+ content = content.replace(dependencies, newDependencies);
143
+ }
144
+ }
145
+ fs.writeFileSync(buildGradlePath, content);
146
+ console.log('✅ Updated android/app/build.gradle');
147
+ }
148
+ else {
149
+ console.log('✅ Google Services plugin already configured');
150
+ }
151
+ }
152
+ //# sourceMappingURL=firebase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { createContext, loadConfig, runPipeline, loadPlugin } from '@deploid/core';
4
+ import { readFileSync } from 'node:fs';
5
+ import { join, dirname } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ // Get version from package.json
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
11
+ const program = new Command();
12
+ program
13
+ .name('deploid')
14
+ .description('Build -> package -> sign -> publish web apps to Android')
15
+ .version(packageJson.version);
16
+ program
17
+ .command('init')
18
+ .description('Setup config and base folders')
19
+ .option('-f, --framework <framework>', 'Web framework (vite|next|cra|static)', 'vite')
20
+ .option('-p, --packaging <engine>', 'Android packaging engine (capacitor|tauri|twa)', 'capacitor')
21
+ .option('--all-plugins', 'Install all available plugins without prompts')
22
+ .option('--debug', 'Enable debug logging')
23
+ .action(async (options) => {
24
+ const { initProject } = await import('./init.js');
25
+ await initProject(options);
26
+ });
27
+ program
28
+ .command('assets')
29
+ .description('Generate icons and screenshots')
30
+ .option('--debug', 'Enable debug logging')
31
+ .action(async (options) => {
32
+ const config = await loadConfig();
33
+ const ctx = createContext(process.cwd(), config, options.debug);
34
+ const assetsStep = await loadPlugin('assets', config);
35
+ await runPipeline(ctx, [assetsStep]);
36
+ });
37
+ program
38
+ .command('package')
39
+ .description('Wrap app for Android (Capacitor/Tauri/TWA)')
40
+ .option('--debug', 'Enable debug logging')
41
+ .action(async (options) => {
42
+ const config = await loadConfig();
43
+ if (config.android.packaging !== 'capacitor') {
44
+ throw new Error(`Packaging engine "${config.android.packaging}" is not supported in Deploid 2.0. Use "capacitor".`);
45
+ }
46
+ const ctx = createContext(process.cwd(), config, options.debug);
47
+ const packagingStep = await loadPlugin(`packaging-${config.android.packaging}`, config);
48
+ await runPipeline(ctx, [packagingStep]);
49
+ });
50
+ program
51
+ .command('build')
52
+ .description('Build APK/AAB')
53
+ .option('--debug', 'Enable debug logging')
54
+ .action(async (options) => {
55
+ const config = await loadConfig();
56
+ const ctx = createContext(process.cwd(), config, options.debug);
57
+ const buildStep = await loadPlugin('build-android', config);
58
+ await runPipeline(ctx, [buildStep]);
59
+ });
60
+ program
61
+ .command('debug')
62
+ .description('Add network debugging tools to your project')
63
+ .action(async () => {
64
+ const config = await loadConfig();
65
+ const ctx = createContext(process.cwd(), config);
66
+ const debugStep = await loadPlugin('debug-network', config);
67
+ await runPipeline(ctx, [debugStep]);
68
+ });
69
+ program
70
+ .command('deploy')
71
+ .description('Deploy APK to connected Android devices')
72
+ .option('-f, --force', 'Force install (overwrite existing app)')
73
+ .option('-l, --launch', 'Launch app after installation')
74
+ .option('--debug', 'Enable debug logging')
75
+ .action(async (options) => {
76
+ const config = await loadConfig();
77
+ const ctx = createContext(process.cwd(), config, options.debug);
78
+ const deployStep = await loadPlugin('deploy-android', config);
79
+ await runPipeline(ctx, [deployStep]);
80
+ });
81
+ program
82
+ .command('devices')
83
+ .description('List connected Android devices')
84
+ .option('--debug', 'Enable debug logging')
85
+ .action(async (options) => {
86
+ const { execa } = await import('execa');
87
+ try {
88
+ await execa('adb', ['devices'], { stdio: 'inherit' });
89
+ }
90
+ catch (error) {
91
+ console.error('❌ ADB not found. Please install Android SDK Platform Tools.');
92
+ console.log('Install: sudo pacman -S android-tools');
93
+ }
94
+ });
95
+ program
96
+ .command('logs')
97
+ .description('View app logs from connected device')
98
+ .option('--debug', 'Enable debug logging')
99
+ .action(async (options) => {
100
+ const config = await loadConfig();
101
+ const { execa } = await import('execa');
102
+ try {
103
+ await execa('adb', ['logcat', '-c']); // Clear logs
104
+ console.log(`Showing device logs (filter manually for "${config.appName}")...`);
105
+ await execa('adb', ['logcat'], { stdio: 'inherit' });
106
+ }
107
+ catch (error) {
108
+ console.error('❌ Failed to view logs:', error);
109
+ }
110
+ });
111
+ program
112
+ .command('uninstall')
113
+ .description('Uninstall app from connected devices')
114
+ .option('--debug', 'Enable debug logging')
115
+ .action(async (options) => {
116
+ const config = await loadConfig();
117
+ const { execa } = await import('execa');
118
+ try {
119
+ await execa('adb', ['uninstall', config.appId], { stdio: 'inherit' });
120
+ console.log(`✅ Uninstalled ${config.appName} from device`);
121
+ }
122
+ catch (error) {
123
+ console.error('❌ Failed to uninstall:', error);
124
+ }
125
+ });
126
+ program
127
+ .command('ios')
128
+ .description('Prepare iOS project for Mac handoff')
129
+ .option('--debug', 'Enable debug logging')
130
+ .action(async (options) => {
131
+ const config = await loadConfig();
132
+ const ctx = createContext(process.cwd(), config, options.debug);
133
+ const iosStep = await loadPlugin('prepare-ios', config);
134
+ await runPipeline(ctx, [iosStep]);
135
+ });
136
+ program
137
+ .command('ios:assets')
138
+ .description('Generate iOS app icons and launch screens')
139
+ .option('--debug', 'Enable debug logging')
140
+ .action(async (options) => {
141
+ throw new Error('`deploid ios:assets` is not implemented in Deploid 2.0 yet.');
142
+ });
143
+ program
144
+ .command('ios:handbook')
145
+ .description('Generate iOS handoff documentation')
146
+ .option('--debug', 'Enable debug logging')
147
+ .action(async (options) => {
148
+ const config = await loadConfig();
149
+ const ctx = createContext(process.cwd(), config, options.debug);
150
+ const iosStep = await loadPlugin('prepare-ios', config);
151
+ await runPipeline(ctx, [iosStep]);
152
+ });
153
+ program
154
+ .command('firebase')
155
+ .description('Setup Firebase for push notifications')
156
+ .option('--project-id <id>', 'Firebase project ID')
157
+ .option('--auto-create', 'Auto-create Firebase project')
158
+ .option('--debug', 'Enable debug logging')
159
+ .action(async (options) => {
160
+ const { setupFirebase } = await import('./firebase.js');
161
+ await setupFirebase(options);
162
+ });
163
+ program
164
+ .command('plugin')
165
+ .description('Manage Deploid plugins')
166
+ .option('--list', 'List available plugins')
167
+ .option('--install <plugin>', 'Install a specific plugin')
168
+ .option('--remove <plugin>', 'Remove a plugin')
169
+ .option('--debug', 'Enable debug logging')
170
+ .action(async (options) => {
171
+ const { managePlugins } = await import('./plugin-manager.js');
172
+ await managePlugins(options);
173
+ });
174
+ program
175
+ .command('publish')
176
+ .description('Upload to Play Store or GitHub')
177
+ .option('--debug', 'Enable debug logging')
178
+ .action(async (options) => {
179
+ throw new Error('`deploid publish` is not implemented in Deploid 2.0 yet.');
180
+ });
181
+ program.parseAsync();
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export interface InitOptions {
2
+ framework: 'vite' | 'next' | 'cra' | 'static';
3
+ packaging: 'capacitor' | 'tauri' | 'twa';
4
+ firebase?: boolean;
5
+ firebaseProjectId?: string;
6
+ firebaseApiKey?: string;
7
+ allPlugins?: boolean;
8
+ }
9
+ export declare function initProject(options: InitOptions): Promise<void>;
10
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC9C,SAAS,EAAE,WAAW,GAAG,OAAO,GAAG,KAAK,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDrE"}