238 lines
5.0 KiB
Markdown
238 lines
5.0 KiB
Markdown
# AudioTee.js Development Guide
|
|
|
|
This guide covers setting up the development environment and workflow for AudioTee.js.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
audiotee-js/
|
|
├── package.json # npm package configuration with node-pre-gyp
|
|
├── index.js # Main entry point, uses node-pre-gyp to find binary
|
|
├── lib/
|
|
│ └── AudioTeeStream.js # Core streaming class
|
|
├── scripts/
|
|
│ └── build.js # Build script that copies AudioTee binary
|
|
├── test/
|
|
│ └── test.js # Interactive and automated tests
|
|
├── examples/
|
|
│ └── basic-usage.js # Usage examples and demos
|
|
├── .github/workflows/
|
|
│ └── release.yml # CI/CD for automated releases
|
|
└── README.md # User documentation
|
|
```
|
|
|
|
## Initial Setup
|
|
|
|
### 1. Clone and Install Dependencies
|
|
|
|
```bash
|
|
git clone <your-audiotee-js-repo>
|
|
cd audiotee-js
|
|
npm install
|
|
```
|
|
|
|
### 2. Build AudioTee Binary
|
|
|
|
You'll need the AudioTee Swift project to build the binary:
|
|
|
|
```bash
|
|
# Option A: If AudioTee is in parent directory (current setup)
|
|
cd ../audiotee
|
|
swift build -c release
|
|
cd ../audiotee-js
|
|
|
|
# Option B: If AudioTee is elsewhere, set the path
|
|
export AUDIOTEE_BINARY_PATH=/path/to/audiotee/.build/release/audiotee
|
|
```
|
|
|
|
### 3. Build the Package
|
|
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
This copies the AudioTee binary to `bin/audiotee` and makes it executable.
|
|
|
|
## Development Workflow
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
# Interactive test - requires audio playback
|
|
npm test
|
|
|
|
# Quick automated test
|
|
npm test quick
|
|
|
|
# Run examples
|
|
node examples/basic-usage.js
|
|
node examples/basic-usage.js 2 # Save to file example
|
|
```
|
|
|
|
### Building for Different Architectures
|
|
|
|
```bash
|
|
# For Intel Macs (if you have access)
|
|
npm run build
|
|
|
|
# For Apple Silicon (if you have access)
|
|
npm run build
|
|
|
|
# Clean build artifacts
|
|
npm run clean
|
|
```
|
|
|
|
### Testing the Package Locally
|
|
|
|
```bash
|
|
# Test the package as if installed from npm
|
|
npm pack
|
|
npm install -g audiotee-js-1.0.0.tgz
|
|
|
|
# Test in another directory
|
|
cd /tmp
|
|
node -e "const { AudioTeeStream } = require('audiotee-js'); console.log('✅ Works!')"
|
|
```
|
|
|
|
## Release Process
|
|
|
|
### 1. Prepare Release
|
|
|
|
1. Update version in `package.json`
|
|
2. Update `CHANGELOG.md` (if you add one)
|
|
3. Test thoroughly on both Intel and Apple Silicon if possible
|
|
4. Commit changes
|
|
|
|
### 2. Create GitHub Release
|
|
|
|
```bash
|
|
git tag v1.0.0
|
|
git push origin v1.0.0
|
|
```
|
|
|
|
Then create a release on GitHub. This will trigger the automated build process.
|
|
|
|
### 3. Automated Release (via GitHub Actions)
|
|
|
|
The workflow will:
|
|
1. Build AudioTee binary for Intel and Apple Silicon
|
|
2. Package binaries using node-pre-gyp
|
|
3. Upload binaries to GitHub releases
|
|
4. Publish package to npm
|
|
5. Test the published package
|
|
|
|
### 4. Manual Release (if needed)
|
|
|
|
```bash
|
|
# Build and package
|
|
npm run build
|
|
npm run package
|
|
|
|
# Publish binary to GitHub releases
|
|
npm run publish-binary
|
|
|
|
# Publish to npm
|
|
npm publish
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables
|
|
|
|
- `AUDIOTEE_BINARY_PATH` - Path to AudioTee binary for building
|
|
- `GITHUB_TOKEN` - For publishing binaries to GitHub releases
|
|
- `NODE_AUTH_TOKEN` - For publishing to npm
|
|
|
|
### node-pre-gyp Configuration
|
|
|
|
The binary distribution is configured in `package.json`:
|
|
|
|
```json
|
|
{
|
|
"binary": {
|
|
"module_name": "audiotee",
|
|
"module_path": "./bin/",
|
|
"remote_path": "v{version}/",
|
|
"package_name": "audiotee-v{version}-{platform}-{arch}.tar.gz",
|
|
"host": "https://github.com/your-org/audiotee-js/releases/download/"
|
|
}
|
|
}
|
|
```
|
|
|
|
Update the `host` URL to match your repository.
|
|
|
|
## Troubleshooting
|
|
|
|
### Binary Not Found During Build
|
|
|
|
```bash
|
|
# Check if AudioTee is built
|
|
ls -la ../audiotee/.build/release/audiotee
|
|
|
|
# Or set custom path
|
|
export AUDIOTEE_BINARY_PATH=/path/to/your/audiotee/binary
|
|
npm run build
|
|
```
|
|
|
|
### Permission Issues
|
|
|
|
```bash
|
|
# Make sure binary is executable
|
|
chmod +x bin/audiotee
|
|
|
|
# Check binary works
|
|
./bin/audiotee --help
|
|
```
|
|
|
|
### node-pre-gyp Issues
|
|
|
|
```bash
|
|
# Clear cache
|
|
npm run clean
|
|
rm -rf node_modules
|
|
npm install
|
|
|
|
# Debug node-pre-gyp
|
|
DEBUG=node-pre-gyp npm run package
|
|
```
|
|
|
|
## Code Style
|
|
|
|
- Follow the patterns in `.cursorrules`
|
|
- Use functional programming where possible
|
|
- No semicolons (per project preference)
|
|
- Handle errors via EventEmitter, don't throw
|
|
- Use British English in documentation
|
|
- Comprehensive JSDoc for public APIs
|
|
|
|
## Testing Checklist
|
|
|
|
Before releasing:
|
|
|
|
- [ ] Basic audio capture works
|
|
- [ ] Both JSON and binary formats work
|
|
- [ ] Sample rate conversion works
|
|
- [ ] Process filtering works (if testable)
|
|
- [ ] Error handling works (invalid args, missing binary, etc.)
|
|
- [ ] Package installs and works on clean system
|
|
- [ ] Examples in README work
|
|
- [ ] CI/CD builds successfully
|
|
|
|
## Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Make your changes
|
|
4. Test thoroughly
|
|
5. Update documentation
|
|
6. Submit a pull request
|
|
|
|
## Publishing Checklist
|
|
|
|
- [ ] Version updated in package.json
|
|
- [ ] Tests pass
|
|
- [ ] Documentation updated
|
|
- [ ] GitHub release created
|
|
- [ ] CI/CD completed successfully
|
|
- [ ] npm package published
|
|
- [ ] Installation test passes |