import fs from 'fs' import path from 'path' const appDirectory = fs.realpathSync(process.cwd()) const resolveApp = (relativePath: string) => path.resolve(appDirectory, relativePath) const buildPath = process.env.BUILD_PATH || 'build' export const moduleFileExtensions = ['mjs', 'js', 'ts', 'tsx', 'json', 'jsx'] const resolveModule = (resolveFn: Function, filePath: string) => { const extension = moduleFileExtensions.find((extension) => fs.existsSync(resolveFn(`${filePath}.${extension}`)) ) if (extension) { return resolveFn(`${filePath}.${extension}`) } return resolveFn(`${filePath}.js`) } const paths = { dotenv: resolveApp('.env'), appPath: resolveApp('.'), appBuild: resolveApp(buildPath), appPublic: resolveApp('public'), appHtml: resolveApp('public/index.html'), appIndexJs: resolveModule(resolveApp, 'src/index'), appPackageJson: resolveApp('package.json'), appSrc: resolveApp('src'), appTsConfig: resolveApp('tsconfig.json'), appJsConfig: resolveApp('jsconfig.json'), yarnLockFile: resolveApp('yarn.lock'), testsSetup: resolveModule(resolveApp, 'src/setupTests'), proxySetup: resolveApp('src/setupProxy.js'), appNodeModules: resolveApp('node_modules'), swSrc: resolveModule(resolveApp, 'src/service-worker'), publicUrlOrPath: '', dll: resolveApp('dll'), moduleFileExtensions, } export default paths