nodeshiftmusicburmalda/scripts/patch-track-player.js

90 lines
3.9 KiB
JavaScript
Raw Permalink Normal View History

2026-05-08 03:13:59 +05:00
/**
* Fix react-native-track-player broken npm package:
* lib/src/trackPlayer.js is missing from the published tarball.
* This script copies it from lib/web/ or creates a NativeModules shim.
*/
const fs = require('fs');
const path = require('path');
const pkg = path.join(__dirname, '..', 'node_modules', 'react-native-track-player');
const srcDir = path.join(pkg, 'lib', 'src');
const target = path.join(srcDir, 'trackPlayer.js');
console.log('[patch-track-player] lib/ contents:', fs.existsSync(path.join(pkg, 'lib'))
? fs.readdirSync(path.join(pkg, 'lib')).join(', ')
: 'MISSING');
if (fs.existsSync(srcDir)) {
console.log('[patch-track-player] lib/src/ contents:', fs.readdirSync(srcDir).join(', '));
}
if (fs.existsSync(target)) {
console.log('[patch-track-player] trackPlayer.js already exists — skipping');
process.exit(0);
}
// Priority 1: copy from lib/web/
const webFile = path.join(pkg, 'lib', 'web', 'trackPlayer.js');
if (fs.existsSync(webFile)) {
fs.mkdirSync(srcDir, { recursive: true });
fs.copyFileSync(webFile, target);
console.log('[patch-track-player] Copied from lib/web/trackPlayer.js');
process.exit(0);
}
// Priority 2: find any trackPlayer.js anywhere in the package
const findFile = (dir, name) => {
if (!fs.existsSync(dir)) return null;
for (const f of fs.readdirSync(dir, { withFileTypes: true })) {
const full = path.join(dir, f.name);
if (f.isDirectory()) {
const r = findFile(full, name);
if (r) return r;
} else if (f.name === name) {
return full;
}
}
return null;
};
const found = findFile(path.join(pkg, 'lib'), 'trackPlayer.js');
if (found && found !== target) {
fs.mkdirSync(srcDir, { recursive: true });
fs.copyFileSync(found, target);
console.log('[patch-track-player] Found and copied from:', found);
process.exit(0);
}
// Priority 3: NativeModules shim (enough for expo prebuild + native bridge)
fs.mkdirSync(srcDir, { recursive: true });
fs.writeFileSync(target, `"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const react_native_1 = require("react-native");
const NTP = react_native_1.NativeModules.TrackPlayer || {};
const TrackPlayer = {
setupPlayer: (options) => NTP.setupPlayer ? NTP.setupPlayer(options) : Promise.resolve(),
add: (tracks, insertBeforeIndex) => NTP.add ? NTP.add(tracks, insertBeforeIndex) : Promise.resolve(),
play: () => NTP.play ? NTP.play() : Promise.resolve(),
pause: () => NTP.pause ? NTP.pause() : Promise.resolve(),
stop: () => NTP.stop ? NTP.stop() : Promise.resolve(),
reset: () => NTP.reset ? NTP.reset() : Promise.resolve(),
seekTo: (seconds) => NTP.seekTo ? NTP.seekTo(seconds) : Promise.resolve(),
skipToNext: () => NTP.skipToNext ? NTP.skipToNext() : Promise.resolve(),
skipToPrevious: () => NTP.skipToPrevious ? NTP.skipToPrevious() : Promise.resolve(),
getPlaybackState: () => NTP.getState ? NTP.getState() : Promise.resolve({ state: 0 }),
updateOptions: (options) => NTP.updateOptions ? NTP.updateOptions(options) : Promise.resolve(),
updateNowPlayingMetadata: (metadata) => NTP.updateNowPlayingMetadata ? NTP.updateNowPlayingMetadata(metadata) : Promise.resolve(),
getQueue: () => NTP.getQueue ? NTP.getQueue() : Promise.resolve([]),
getCurrentTrack: () => NTP.getCurrentTrack ? NTP.getCurrentTrack() : Promise.resolve(null),
getVolume: () => NTP.getVolume ? NTP.getVolume() : Promise.resolve(1),
setVolume: (level) => NTP.setVolume ? NTP.setVolume(level) : Promise.resolve(),
getRate: () => NTP.getRate ? NTP.getRate() : Promise.resolve(1),
setRate: (rate) => NTP.setRate ? NTP.setRate(rate) : Promise.resolve(),
getProgress: () => NTP.getProgress ? NTP.getProgress() : Promise.resolve({ position: 0, duration: 0, buffered: 0 }),
};
exports.default = TrackPlayer;
Object.assign(exports, TrackPlayer);
`);
console.log('[patch-track-player] Created NativeModules shim — OK for prebuild');
process.exit(0);