symlink-resolver
Version:
Simple tool for replacing symlinks by real files and vice versa.
59 lines (52 loc) • 2.31 kB
text/typescript
import * as child_process from 'child_process';
import { Config } from './config';
/**
* NOTICE: This tool has been created to handle symlinks which NativeScript doesn't support for 22.04.2017
* Tested on MacOS Sierra, should work also on most popular linux distributions
* WARNING: Changes made on symlinked files during compilation start will be lost!
* USAGE: You can use direct execute command: ts-node symlink-resolver.ts build|clear
* Or use compiled version the same way yet run by clear node cli
* To add symlinks simply use command: ln -s ../../relative-to-target/source/path target
* ACTIONS:
* - build: replaces all symlinks in Config.rootDir with real files
* - clear: restores all previously replaced symlinks in Config.rootDir
* @Author Daniel Kucal <dkucal@gmail.com> www.danielkucal.com
*/
let helper = new (Config.helperClass)(Config.rootDir);
let script = process.argv[2];
let scripts: any = {};
scripts.build = () => {
console.log('Replacing symlinks by real files...');
helper.findSymlinks(Config.rootDir).then(files => {
if (!Object.keys(files).length) {
return console.error('No single symlink was found! Did you mean to clear?');
}
helper.saveSymlinks(files);
// TODO: Move to the helper class
for (let file of Object.keys(files)) {
let symlink = helper.getRelativePath(files[file]);
helper.copyFile(symlink, file);
}
});
};
scripts.clear = () => {
let symlinksPath = Config.rootDir + Config.symlinksFile;
let savedSymlinks = helper.getSavedSymlinks();
if (!savedSymlinks) {
return console.error('File ' + symlinksPath +
' doesn\'t exist! Did you mean to build?');
}
console.log('Restoring symlinks...');
// TODO: move to the helper class
Object.keys(savedSymlinks).forEach(file => {
let symlink = savedSymlinks[file];
child_process.execSync('rm -rf ' + file);
child_process.execSync('ln -s ' + symlink + ' ' + file);
});
child_process.execSync('rm ' + symlinksPath);
};
if (script && typeof scripts[script] === 'function') {
scripts[script]();
} else {
console.error('USAGE: Please provide arguments in proper format: build|clear ./symlinks/path');
}