@storybook/react-native
Version:
A better way to develop React Native Components for your app
66 lines (53 loc) • 1.65 kB
JavaScript
const chokidar = require('chokidar');
const path = require('path');
const { writeRequires, getMain, getFilePathExtension } = require('./loader');
const { getArguments } = require('./handle-args');
const args = getArguments();
const log = console.log.bind(console);
const mainExt = getFilePathExtension(args, 'main');
const previewExt = getFilePathExtension(args, 'preview');
const watchPaths = [`./main.${mainExt}`];
if (previewExt) {
watchPaths.push(`./preview.${previewExt}`);
}
const updateRequires = (event, watchPath) => {
if (typeof watchPath === 'string') {
log(`event ${event} for file ${path.basename(watchPath)}`);
}
writeRequires(args);
};
const globs = getMain(args).stories;
chokidar
.watch(watchPaths, { cwd: args.configPath })
.on('change', (watchPath) => updateRequires('change', watchPath));
let isReady = false;
chokidar
.watch(globs, { cwd: args.configPath })
.on('ready', () => {
log('Watcher is ready, performing initial write');
writeRequires(args);
log('Waiting for changes, press r to manually re-write');
isReady = true;
})
.on('add', (watchPath) => {
if (isReady) {
updateRequires('add', watchPath);
}
})
.on('unlink', (watchPath) => {
if (isReady) {
updateRequires('unlink', watchPath);
}
});
const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
process.stdin.on('keypress', (str, key) => {
if (key.ctrl && key.name === 'c') {
process.exit();
}
if (key.name === 'r') {
log('Detected "r" keypress, rewriting story imports...');
writeRequires(args);
}
});