42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { workspaceLayout, workspaceRoot } from '@nrwl/devkit';
|
|
import { join } from 'path';
|
|
import { existsSync } from 'fs-extra';
|
|
|
|
import { getResolveRequest } from './metro-resolver';
|
|
|
|
interface WithNxOptions {
|
|
debug?: boolean;
|
|
extensions?: string[];
|
|
projectRoot?: string;
|
|
watchFolders?: string[];
|
|
}
|
|
|
|
export function withNxMetro(config: any, opts: WithNxOptions = {}) {
|
|
const extensions = ['', 'ts', 'tsx', 'js', 'jsx', 'json'];
|
|
if (opts.debug) process.env.NX_REACT_NATIVE_DEBUG = 'true';
|
|
if (opts.extensions) extensions.push(...opts.extensions);
|
|
|
|
config.projectRoot = opts.projectRoot || workspaceRoot;
|
|
|
|
// Add support for paths specified by tsconfig
|
|
config.resolver = {
|
|
...config.resolver,
|
|
resolveRequest: getResolveRequest(extensions),
|
|
};
|
|
|
|
let watchFolders = config.watchFolders || [];
|
|
watchFolders = watchFolders.concat([
|
|
join(workspaceRoot, 'node_modules'),
|
|
join(workspaceRoot, workspaceLayout().libsDir),
|
|
join(workspaceRoot, '.storybook'),
|
|
]);
|
|
if (opts.watchFolders?.length) {
|
|
watchFolders = watchFolders.concat(opts.watchFolders);
|
|
}
|
|
|
|
watchFolders = watchFolders.filter((folder) => existsSync(folder));
|
|
config.watchFolders = watchFolders;
|
|
|
|
return config;
|
|
}
|