UNPKG

@neodx/vfs

Version:

Simple virtual file system - working dir context, lazy changes, different modes, integrations and moreover

1 lines 16.4 kB
{"version":3,"file":"eslint.cjs","sources":["../../../../internal/src/vfs.ts","../../../../internal/src/npm.ts","../../../src/plugins/eslint.ts"],"sourcesContent":["import { type Awaitable } from '@neodx/std';\nimport type { BaseVfs } from '@neodx/vfs';\n\nexport async function findInVfsUntil(\n vfs: BaseVfs,\n currentPath: string,\n predicate: (path: string) => Awaitable<boolean>\n) {\n do if (await predicate(currentPath)) return currentPath;\n while ((currentPath = vfs.resolve(currentPath, '..')) !== vfs.resolve('/'));\n return null;\n}\n","import { compact, includesIn, memoize, uniq } from '@neodx/std';\nimport { type BaseVfs, createVfsPlugin } from '@neodx/vfs';\nimport { createVfsPackageJsonFileApi } from '@neodx/vfs/plugins/package-json';\nimport { createTaskRunner } from './tasks.ts';\nimport { findInVfsUntil } from './vfs.ts';\n\nexport type NpmVfsPluginApi = ReturnType<typeof createVfsNpmApi>;\n\nexport const createVfsNpmApi = (vfs: BaseVfs) => {\n const createChecker = (predicate: (path: string) => boolean) => {\n const check = memoize(async (path: string) => (await vfs.readDir(path)).some(predicate));\n\n return async (path = '.') => await findInVfsUntil(vfs, path, check);\n };\n const { task } = createTaskRunner({ log: vfs.log.child('npm') });\n const tryFindWorkspaceRoot = task('tryFindWorkspaceRoot', createChecker(isWorkspaceFile));\n const tryFindPackageRoot = task('tryFindPackageRoot', createChecker(isPackageFile));\n\n return {\n tryFindWorkspaceRoot,\n tryFindPackageRoot,\n findWorkspaceRoot: task('findWorkspaceRoot', tryFindWorkspaceRoot, {\n invariant: 'Workspace root not found'\n }),\n findPackageRoot: task('findPackageRoot', tryFindPackageRoot, {\n invariant: 'Package root not found'\n }),\n // TODO Simplify this logic\n tryGetDependencyVersion: task('tryGetDependencyVersion', async (name: string) => {\n const lookupOrder = compact(uniq([await tryFindPackageRoot(), await tryFindWorkspaceRoot()]));\n\n // TODO Add \"find until\" common util\n for (const path of lookupOrder) {\n const pkg = createVfsPackageJsonFileApi(vfs, path);\n const content = await pkg.read();\n\n for (const field of dependencyFieldOrder) {\n if (content[field]?.[name]) {\n return content[field][name];\n }\n }\n }\n return null;\n })\n };\n};\n\nexport const npmVfsPlugin = () =>\n createVfsPlugin<NpmVfsPluginApi>('npm', vfs => Object.assign(vfs, createVfsNpmApi(vfs)));\n\nconst workspaceRootOnlyFiles = ['package-lock.json', 'pnpm-lock.yaml', 'yarn.lock'];\nconst packageFiles = ['package.json', ...workspaceRootOnlyFiles];\nconst dependencyFieldOrder = ['dependencies', 'devDependencies'];\n\nconst isWorkspaceFile = includesIn(workspaceRootOnlyFiles);\nconst isPackageFile = includesIn(packageFiles);\n","import { formatList } from '@neodx/internal/log';\nimport { createVfsNpmApi } from '@neodx/internal/npm';\nimport { createTaskRunner } from '@neodx/internal/tasks';\nimport { compact, concurrently, isTypeOfString, once, toArray } from '@neodx/std';\nimport type { ESLint } from 'eslint';\nimport { extname } from 'pathe';\nimport { displayPath, getVfsActions } from '../core/operations';\nimport { createVfsPlugin } from '../create-vfs-plugin';\nimport { createVfsPackageJsonFileApi } from './package-json.ts';\n\nexport interface EsLintPluginApi {\n /** Fix ESLint issues in the given path(s) */\n fix(path: string | string[]): Promise<void>;\n /** Fix ESLint issues in all changed files */\n fixAll(): Promise<void>;\n}\n\nexport interface EsLintPluginParams {\n /**\n * @see ESLint.Options.fix\n * @default true\n */\n fix?: boolean;\n /**\n * Should fix all issues on apply?\n * @default true\n */\n auto?: boolean;\n /**\n * Should log errors to the console?\n * @default true\n */\n logErrors?: boolean;\n /**\n * Should log warnings to the console?\n * @default false\n */\n logWarnings?: boolean;\n /**\n * Additional ESLint options\n * @see ESLint.Options\n */\n eslintParams?: ESLint.Options;\n}\n\nexport function eslint({\n fix = true,\n auto = true,\n logErrors = true,\n logWarnings = false,\n eslintParams\n}: EsLintPluginParams = {}) {\n return createVfsPlugin<EsLintPluginApi>('eslint', (vfs, { context, beforeApply }) => {\n const { fix: originalFix, fixAll: originalFixAll } = vfs;\n const npm = createVfsNpmApi(vfs);\n const getEsLint = once(async () => {\n const { ESLint } = await import('eslint');\n\n return new ESLint({\n useEslintrc: true,\n overrideConfig: {\n env: {\n es6: true,\n node: true\n },\n parserOptions: {\n ecmaVersion: 2022,\n sourceType: 'module'\n }\n },\n ...eslintParams,\n fix,\n cwd: context.path\n });\n });\n const log = context.log.child('eslint');\n const { task } = createTaskRunner({ log });\n\n vfs.fix = task(\n 'fix',\n async (path: string | string[]) => {\n const lint = await getEsLint();\n const allResults = await concurrently(toArray(path), async path => {\n const workspaceRoot = await npm.tryFindWorkspaceRoot();\n\n if (!workspaceRoot) {\n log.debug('Skipping %s, because it is not in a workspace', displayPath(context, path));\n return null;\n }\n const pkg = createVfsPackageJsonFileApi(vfs, vfs.resolve(workspaceRoot, 'package.json'));\n\n if (!(await pkg.hasDependency('eslint'))) {\n log.debug(\n 'Skipping %s, because it has no eslint dependency',\n displayPath(context, path)\n );\n return null;\n }\n if (!(await vfs.isFile(path))) {\n log.debug('Skipping %s, because it is not a file', displayPath(context, path));\n return null;\n }\n if (await lint.isPathIgnored(path)) {\n log.debug('Skipping %s, because it is ignored', displayPath(context, path));\n return null;\n }\n if (!allSourceExtensions.includes(extname(path))) {\n log.debug('Skipping %s, because it is not a source file', displayPath(context, path));\n return null;\n }\n return await lint.lintText(await vfs.read(path, 'utf-8'), {\n filePath: vfs.resolve(path)\n });\n });\n const results = compact(allResults.flat());\n\n const errors = results.filter(result => result.fatalErrorCount > 0);\n const warnings = results.filter(result => result.fatalErrorCount > 0);\n const fatalErrors = results.filter(result => result.fatalErrorCount > 0);\n const formatter = await lint.loadFormatter('stylish');\n\n if (fatalErrors.length > 0) {\n log.error('ESLint fatal errors:%s', formatter.format(fatalErrors));\n }\n if (logErrors && errors.length > 0) {\n log.error('ESLint errors:%s', formatter.format(errors));\n }\n if (logWarnings && warnings.length > 0) {\n log.warn('ESLint warnings:%s', formatter.format(warnings));\n }\n\n await concurrently(\n results.filter(it => isTypeOfString(it.output)),\n async ({ filePath, output }) => await vfs.write(filePath, output!)\n );\n await originalFix?.(path);\n },\n {\n mapSuccessMessage: (_, path) =>\n `${displayPath(context, '.')}(${formatList(toArray(path).map(context.relative))}) fixed`\n }\n );\n\n vfs.fixAll = task(\n 'fix all',\n async () => {\n log.debug('Fixing all ESLint issues in changed files...');\n const changes = await getVfsActions(context, ['create', 'update']);\n\n await vfs.fix!(changes.map(change => change.path));\n await originalFixAll?.();\n },\n {\n mapSuccessMessage: () => 'fixed all changed files'\n }\n );\n\n if (auto) {\n beforeApply(() => vfs.fixAll!());\n }\n\n return vfs;\n });\n}\n\nconst allSourceExtensions = ['js', 'ts'].flatMap(ext => [\n `.${ext}`,\n `.c${ext}`,\n `.m${ext}`,\n `.${ext}x`\n]);\n"],"names":["findInVfsUntil","vfs","currentPath","predicate","resolve","createVfsNpmApi","createChecker","check","memoize","path","readDir","some","task","createTaskRunner","log","child","tryFindWorkspaceRoot","isWorkspaceFile","tryFindPackageRoot","isPackageFile","findWorkspaceRoot","invariant","findPackageRoot","tryGetDependencyVersion","name","lookupOrder","compact","uniq","pkg","createVfsPackageJsonFileApi","content","read","field","dependencyFieldOrder","workspaceRootOnlyFiles","packageFiles","includesIn","eslint","fix","auto","logErrors","logWarnings","eslintParams","createVfsPlugin","context","beforeApply","originalFix","fixAll","originalFixAll","npm","getEsLint","once","ESLint","useEslintrc","overrideConfig","env","es6","node","parserOptions","ecmaVersion","sourceType","cwd","lint","allResults","concurrently","toArray","workspaceRoot","debug","displayPath","hasDependency","isFile","isPathIgnored","allSourceExtensions","includes","extname","lintText","filePath","results","flat","errors","filter","result","fatalErrorCount","warnings","fatalErrors","formatter","loadFormatter","length","error","format","warn","it","isTypeOfString","output","write","mapSuccessMessage","_","formatList","map","relative","changes","getVfsActions","change","flatMap","ext"],"mappings":"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"}