@echojs-ecosystem/architect 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/commands/init.ts","../../src/config/errors.ts","../../src/config/schema.ts","../../src/config/load.ts","../../src/linter/auto-fix.ts","../../src/shared/memoize.ts","../../src/shared/resolve-import.ts","../../src/shared/index.ts","../../src/abstraction/instance/parse.ts","../../src/vfs/get-flatten-files.ts","../../src/dependencies/parse.ts","../../src/vfs/add-directory.ts","../../src/vfs/add-file.ts","../../src/vfs/create-root.ts","../../src/vfs/remove-node.ts","../../src/vfs/watch-fs.ts","../../src/linter/run-rules.ts","../../src/linter/lint.ts","../../src/linter/reporter/format-single-diagnostic.ts","../../src/linter/reporter/pluralization.ts","../../src/linter/reporter/index.ts","../../src/linter/index.ts","../../src/cli/commands/lint.ts","../../src/cli/version.ts","../../src/cli/commands/index.ts","../../src/cli/index.ts"],"names":["process","cwd","watchConfigC12","config","relative","init_parse","parseNearestTsConfig","sep","join","produce","basename","from","switchMap","Observable","path","dirname","s","chalk","figures","init_lint","defineCommand","map","fromError"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand } from \"citty\";\n\nexport default defineCommand({\n meta: {\n name: \"init\",\n description: \"Initialize a fresh project\",\n },\n});\n","import type { ZodError } from \"zod\";\nimport { relative } from \"node:path\";\nimport * as process from \"node:process\";\nimport { fromError } from \"zod-validation-error\";\n\nexport class ConfigurationNotFoundError extends Error {\n constructor() {\n super(`Configuration not found in ${process.cwd()}`);\n }\n}\n\nexport class ConfigurationInvalidError extends Error {\n constructor(\n public error: ZodError,\n filepath: string,\n ) {\n super(\n fromError(error, {\n prefix: `Invalid configuration in ${relative(process.cwd(), filepath)}`,\n }).toString(),\n );\n }\n}\n","import type { Abstraction } from \"../abstraction\";\nimport type { Rule } from \"../rule/types\";\nimport type { EvolutionConfig } from \"./define-config\";\nimport { z, type ZodType } from \"zod\";\n\ntype TypeToZod<T> = ZodType<T>;\n\nconst RuleSchema: TypeToZod<Rule> = z.object({\n name: z.string(),\n check: z.custom<Rule[\"check\"]>(),\n severity: z.enum([\"off\", \"warn\", \"error\"]),\n descriptionUrl: z.string().optional(),\n});\n\nconst AbstractionSchema: TypeToZod<Abstraction> = z.object({\n name: z.string(),\n children: z.record(z.lazy(() => AbstractionSchema)),\n rules: z.array(RuleSchema),\n fractal: z.string().optional(),\n fileTemplate: z.custom<Abstraction[\"fileTemplate\"]>(),\n});\n\nexport const EvolutionConfigSchema: TypeToZod<EvolutionConfig> = z.object({\n root: AbstractionSchema,\n baseUrl: z.string().optional(),\n files: z.array(z.string()).optional(),\n ignores: z.array(z.string()).optional(),\n});\n","import type { EvolutionConfig } from \"./define-config\";\nimport { loadConfig, watchConfig as watchConfigC12 } from \"c12\";\nimport { from, map, Observable, switchMap } from \"rxjs\";\nimport {\n ConfigurationInvalidError,\n ConfigurationNotFoundError,\n} from \"./errors\";\nimport { EvolutionConfigSchema } from \"./schema\";\n\nconst CONFIG_NAME = \"architect\";\n\nexport interface ConfigResult {\n config: EvolutionConfig;\n configPath: string;\n}\n\nconst parseConfigResult = (\n filepath: string,\n data: unknown,\n): ConfigResult => {\n const parseResult = EvolutionConfigSchema.safeParse(data);\n\n if (!parseResult.success) {\n throw new ConfigurationInvalidError(parseResult.error, filepath);\n }\n\n return {\n config: parseResult.data,\n configPath: filepath,\n };\n};\n\nexport const watchConfig = ({\n cwd,\n onlyOne,\n}: {\n cwd: string;\n onlyOne?: boolean;\n}) => {\n const config$ = from(\n loadConfig({\n cwd,\n name: CONFIG_NAME,\n }),\n ).pipe(\n map(({ configFile, config }) => {\n if (!configFile) {\n throw new ConfigurationNotFoundError();\n }\n return parseConfigResult(configFile, config);\n }),\n );\n\n if (onlyOne) {\n return config$;\n }\n\n return config$.pipe(\n switchMap(\n ({ configPath, config }) =>\n new Observable<ConfigResult>((subscriber) => {\n subscriber.next({ configPath, config });\n\n let unwatchCallback = () => {};\n\n watchConfigC12({\n cwd,\n name: CONFIG_NAME,\n onUpdate: (config) => {\n subscriber.next(\n parseConfigResult(configPath, config.newConfig.config),\n );\n },\n }).then(({ unwatch }) => {\n unwatchCallback = unwatch;\n });\n\n return () => unwatchCallback();\n }),\n ),\n );\n};\n","import type { Diagnostic } from \"../rule/types\";\nimport { mkdir, open, rename, rm } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport const applyAutofixes = async <T extends Diagnostic>(\n diagnostics: Array<T>,\n): Promise<T[]> => {\n const stillRelevantDiagnostics = [];\n const fixableDiagnostics = [];\n\n for (const diagnostic of diagnostics) {\n const fixes = diagnostic.fixes;\n\n if (!fixes) {\n stillRelevantDiagnostics.push(diagnostic);\n continue;\n }\n\n fixableDiagnostics.push(diagnostic);\n }\n\n try {\n await Promise.all(fixableDiagnostics.map(tryToApplyFixes));\n } catch (error) {\n stillRelevantDiagnostics.push(...fixableDiagnostics);\n console.error(error);\n }\n\n return stillRelevantDiagnostics;\n};\n\nconst tryToApplyFixes = async (diagnostic: Diagnostic) => {\n const fixes = diagnostic.fixes ?? [];\n\n return Promise.all(\n fixes.map((fix) => {\n switch (fix.type) {\n case \"rename\":\n return rename(fix.path, join(dirname(fix.path), fix.newName));\n case \"create-file\":\n return open(fix.path, \"w\").then((file) => {\n file.write(fix.content);\n return file.close();\n });\n case \"create-folder\":\n return mkdir(fix.path, { recursive: true });\n case \"delete\":\n return rm(fix.path, { recursive: true });\n case \"modify-file\":\n return open(fix.path, \"w\").then(async (file) => {\n await file.write(fix.content);\n return file.close();\n });\n default:\n return undefined;\n }\n }),\n );\n};\n","export const memoize = <T extends (arg: any) => any>(fn: T): T => {\n const cache = new WeakMap();\n return function (this: any, arg: any) {\n if (cache.has(arg)) {\n return cache.get(arg);\n }\n const result = fn.call(this, arg);\n\n cache.set(arg, result);\n return result;\n } as T;\n};\n","import type { CompilerOptions } from \"typescript\";\nimport { sep } from \"node:path\";\nimport ts from \"typescript\";\n\n/**\n * Given a file name, an imported path, and a TSConfig object, produce a path to the imported file, relative to TypeScript's `baseUrl`.\n *\n * The resulting path uses OS-appropriate path separators.\n *\n * @example\n * ```tsx\n * // ./src/pages/home/ui/HomePage.tsx\n * import { Button } from \"~/shared/ui\";\n * ```\n *\n * ```json\n * // ./tsconfig.json\n * {\n * \"compilerOptions\": {\n * \"moduleResolution\": \"Bundler\",\n * \"baseUrl\": \".\",\n * \"paths\": {\n * \"~/*\": [\"./src/*\"],\n * },\n * },\n * }\n * ```\n *\n * ```tsx\n * resolveImport(\n * \"~/shared/ui\",\n * \"./src/pages/home/ui/HomePage.tsx\",\n * { moduleResolution: \"Bundler\", baseUrl: \".\", paths: { \"~/*\": [\"./src/*\"] } },\n * fs.existsSync\n * );\n * ```\n * Expected output: `src/shared/ui/index.ts`\n */\nexport const resolveImport = (\n importedPath: string,\n importerPath: string,\n tsCompilerOptions: ImperfectCompilerOptions,\n fileExists: (path: string) => boolean,\n directoryExists?: (path: string) => boolean,\n): string | null => {\n return (\n ts\n .resolveModuleName(\n importedPath,\n importerPath,\n normalizeCompilerOptions(tsCompilerOptions),\n {\n ...ts.sys,\n fileExists,\n directoryExists,\n },\n )\n .resolvedModule?.resolvedFileName?.replaceAll(\"/\", sep) ?? null\n );\n};\n\nconst imperfectKeys = {\n module: ts.ModuleKind,\n moduleResolution: {\n ...ts.ModuleResolutionKind,\n node: ts.ModuleResolutionKind.Node10,\n },\n moduleDetection: ts.ModuleDetectionKind,\n newLine: ts.NewLineKind,\n target: ts.ScriptTarget,\n};\n\n/** TypeScript has a few fields which have values from an internal enum, and refuses to take the literal values from the tsconfig.json. */\nconst normalizeCompilerOptions = (\n compilerOptions: ImperfectCompilerOptions,\n): CompilerOptions => {\n return Object.fromEntries(\n Object.entries(compilerOptions).map(([key, value]) => {\n if (\n Object.keys(imperfectKeys).includes(key) &&\n typeof value === \"string\"\n ) {\n for (const [enumKey, enumValue] of Object.entries(\n imperfectKeys[key as keyof typeof imperfectKeys],\n )) {\n if (enumKey.toLowerCase() === value.toLowerCase()) {\n return [key, enumValue];\n }\n }\n }\n return [key, value];\n }),\n ) as CompilerOptions;\n};\n\nexport interface ImperfectCompilerOptions\n extends Omit<CompilerOptions, keyof typeof imperfectKeys> {\n module?: ts.ModuleKind | keyof typeof ts.ModuleKind;\n moduleResolution?:\n | ts.ModuleResolutionKind\n | keyof typeof ts.ModuleResolutionKind\n | \"node\";\n moduleDetection?:\n | ts.ModuleDetectionKind\n | keyof typeof ts.ModuleDetectionKind;\n newLine?: ts.NewLineKind | keyof typeof ts.NewLineKind;\n target?: ts.ScriptTarget | keyof typeof ts.ScriptTarget;\n}\n","export { memoize } from './memoize'\nexport { resolveImport, type ImperfectCompilerOptions } from './resolve-import'\nexport { shallowEqual } from './shallow-equal'\n","import type { Abstraction } from \"../abstraction\";\nimport type { Path, VfsNode } from \"../../vfs/types\";\nimport type { AbstractionInstance } from \"./types\";\nimport { relative } from \"node:path\";\nimport { minimatch } from \"minimatch\";\nimport { memoize } from \"../../shared\";\n\n// Так как Vfs иммутабельный,\n// то ссылки на инсансы между вызовами\n// не будут изменены, благодаря мемоизации\nexport const parseAbstractionInstance = memoize((abstraction: Abstraction) =>\n memoize((node: VfsNode): AbstractionInstance => {\n if (node.type === \"file\") {\n return {\n abstraction,\n path: node.path,\n children: [],\n childNodes: [],\n };\n }\n\n // Получаем все дочерние абстракции\n const children: Record<Path, AbstractionInstance> = {};\n\n for (const [pattern, childAbstraction] of Object.entries(\n abstraction.children\n )) {\n const nodeAbstractionInstance =\n parseAbstractionInstance(childAbstraction);\n const nodesStack: VfsNode[] = [node];\n while (nodesStack.length) {\n const currentNode = nodesStack.pop()!;\n // Если путь соответствует паттерну. То записываем или **перезаписываем** инстранс абстракции\n if (minimatch(relative(node.path, currentNode.path), pattern)) {\n children[currentNode.path] = nodeAbstractionInstance(currentNode);\n\n // Внутрь дирректории для которой создали абстракцию не идём\n continue;\n }\n\n // Если для дирректории один из прошлых матчеров создал абстракцию, тоже не идём\n if (children[currentNode.path]) {\n continue;\n }\n\n if (currentNode.type === \"folder\") {\n nodesStack.push(...currentNode.children);\n }\n }\n }\n\n // Получаем все ноды, которые не являются абстракциями\n const childNodes: Path[] = [];\n const childrenNodesStack: VfsNode[] = [node];\n\n while (childrenNodesStack.length) {\n const currentNode = childrenNodesStack.pop()!;\n\n // Если есть абстракция - игнорируем\n if (children[currentNode.path]) {\n continue;\n }\n\n if (currentNode.path !== node.path) {\n childNodes.push(currentNode.path);\n }\n\n if (currentNode.type === \"folder\") {\n childrenNodesStack.push(...currentNode.children);\n }\n }\n\n return {\n abstraction,\n path: node.path,\n childNodes: Object.values(childNodes),\n children: Object.values(children),\n };\n })\n);\n","import type { VfsFile, VfsNode } from \"./types\";\nimport { memoize } from \"../shared\";\n\nexport const getFlattenFiles = memoize((node: VfsNode): VfsFile[] => {\n if (node.type === \"file\") {\n return [node];\n }\n return node.children.reduce((acc, child) => {\n if (child.type === \"file\") {\n return [...acc, child];\n }\n\n return [...acc, ...getFlattenFiles(child)];\n }, [] as VfsFile[]);\n});\n","import type { VfsNode } from \"../vfs/types\";\nimport type { DependenciesMap } from \"./types\";\nimport * as fs from \"node:fs\";\nimport { resolveImport } from \"../shared\";\nimport precinct from \"precinct\";\nimport { parse as parseNearestTsConfig } from \"tsconfck\";\nimport { getFlattenFiles } from \"../vfs/get-flatten-files\";\n\nconst { paperwork } = precinct;\n\nexport const parseDependenciesMap = async (vfs: VfsNode) => {\n const dependenciesMap: DependenciesMap = {\n dependencies: {},\n dependencyFor: {},\n };\n\n const basePath = vfs.path;\n const { tsconfig } = await parseNearestTsConfig(basePath);\n\n const files = getFlattenFiles(vfs);\n\n for (const file of files) {\n const dependencies = paperwork(file.path, {\n includeCore: false,\n fileSystem: fs,\n });\n const resolvedDependencies = dependencies\n .map((dependency) =>\n resolveImport(\n dependency,\n file.path,\n tsconfig?.compilerOptions ?? {},\n fs.existsSync,\n fs.existsSync,\n ),\n )\n .filter((dependency) => dependency !== null);\n\n dependenciesMap.dependencies[file.path] = new Set(resolvedDependencies);\n\n for (const dependency of resolvedDependencies) {\n if (!dependenciesMap.dependencyFor[dependency]) {\n dependenciesMap.dependencyFor[dependency] = new Set();\n }\n dependenciesMap.dependencyFor[dependency].add(file.path);\n }\n }\n\n return dependenciesMap;\n};\n","import type { Path, VfsFolder } from \"./types\";\nimport { basename, join, relative, sep } from \"node:path\";\nimport { produce } from \"immer\";\n\nexport const addDirectory = (tree: VfsFolder, newDirectoryPath: Path) => {\n const rootPath = tree.path;\n return produce(tree, (draft) => {\n const pathSegments = relative(rootPath, newDirectoryPath).split(sep);\n let currentFolder = draft;\n\n for (const pathSegment of pathSegments.slice(0, -1)) {\n const existingChild = currentFolder.children.find(\n (child) =>\n child.type === \"folder\" && basename(child.path) === pathSegment,\n ) as VfsFolder | undefined;\n\n if (existingChild === undefined) {\n currentFolder.children.push({\n type: \"folder\",\n path: join(currentFolder.path, pathSegment),\n children: [],\n });\n currentFolder = currentFolder.children[\n currentFolder.children.length - 1\n ] as VfsFolder;\n } else {\n currentFolder = existingChild;\n }\n }\n\n currentFolder.children.push({\n type: \"folder\",\n path: newDirectoryPath,\n children: [],\n });\n });\n};\n","import type { Path, VfsFolder } from \"./types\";\nimport { basename, join, relative, sep } from \"node:path\";\nimport { produce } from \"immer\";\n\nexport const addFile = (tree: VfsFolder, newFilePath: Path) => {\n const rootPath = tree.path;\n return produce(tree, (draft) => {\n const pathSegments = relative(rootPath, newFilePath).split(sep);\n let currentFolder = draft;\n\n for (const pathSegment of pathSegments.slice(0, -1)) {\n const existingChild = currentFolder.children.find(\n (child) =>\n child.type === \"folder\" && basename(child.path) === pathSegment,\n ) as VfsFolder | undefined;\n\n if (existingChild === undefined) {\n currentFolder.children.push({\n type: \"folder\",\n path: join(currentFolder.path, pathSegment),\n children: [],\n });\n currentFolder = currentFolder.children[\n currentFolder.children.length - 1\n ] as VfsFolder;\n } else {\n currentFolder = existingChild;\n }\n }\n\n currentFolder.children.push({ type: \"file\", path: newFilePath });\n });\n};\n","import type { Path, VfsFolder } from \"./types\";\n\nexport const createVfsRoot = (path: Path): VfsFolder => ({\n type: \"folder\",\n path,\n children: [],\n});\n","import type { Path, VfsFolder } from \"./types\";\nimport { basename, relative, sep } from \"node:path\";\nimport { produce } from \"immer\";\n\nexport const removeNode = (tree: VfsFolder, removedNodePath: Path) => {\n const rootPath = tree.path;\n return produce(tree, (draft) => {\n const pathSegments = relative(rootPath, removedNodePath).split(sep);\n let currentFolder = draft;\n\n for (const pathSegment of pathSegments.slice(0, -1)) {\n const existingChild = currentFolder.children.find(\n (child) =>\n child.type === \"folder\" && basename(child.path) === pathSegment,\n ) as VfsFolder | undefined;\n\n if (existingChild === undefined) {\n return tree;\n } else {\n currentFolder = existingChild;\n }\n }\n\n const removedNodeIndex = currentFolder.children.findIndex(\n (child) => child.path === removedNodePath,\n );\n\n if (removedNodeIndex === -1) {\n return tree;\n }\n\n currentFolder.children.splice(removedNodeIndex, 1);\n });\n};\n","import type { Path, VfsEvents } from \"./types\";\nimport { join, sep } from \"node:path\";\nimport chokidar from \"chokidar\";\nimport { type GlobbyFilterFunction, isGitIgnored } from \"globby\";\nimport { filter, from, Observable, switchMap } from \"rxjs\";\nimport { addDirectory } from \"./add-directory\";\nimport { addFile } from \"./add-file\";\nimport { createVfsRoot } from \"./create-root\";\nimport { removeNode } from \"./remove-node\";\n\nexport const watchFs = (\n path: Path,\n { onlyReady }: { onlyReady?: boolean } = {},\n) => {\n const isIgnored$ = from(isGitIgnored({ cwd: path }));\n\n let vfs$ = isIgnored$.pipe(\n switchMap((isIgnored) => createWatcherObservable({ path, isIgnored })),\n );\n\n if (onlyReady) {\n vfs$ = vfs$.pipe(filter((e) => e.type === \"ready\"));\n }\n\n return vfs$;\n};\n\nconst createWatcherObservable = ({\n path,\n isIgnored,\n}: {\n path: string;\n isIgnored: GlobbyFilterFunction;\n}) => {\n return new Observable<VfsEvents>((observer) => {\n let vfs = createVfsRoot(path);\n const watcher = chokidar.watch(path, {\n ignored: (path) =>\n path.split(sep).includes(\"node_modules\") || isIgnored(path),\n ignoreInitial: false,\n alwaysStat: true,\n awaitWriteFinish: true,\n disableGlobbing: true,\n cwd: path,\n });\n\n watcher.on(\"add\", async (relativePath) => {\n vfs = addFile(vfs, join(path, relativePath));\n observer.next({ type: \"add\", vfs });\n });\n\n watcher.on(\"addDir\", async (relativePath) => {\n vfs = addDirectory(vfs, join(path, relativePath));\n observer.next({ type: \"addDir\", vfs });\n });\n\n watcher.on(\"change\", async () => {\n observer.next({ type: \"change\", vfs });\n });\n\n watcher.on(\"unlink\", async (relativePath) => {\n vfs = removeNode(vfs, join(path, relativePath));\n observer.next({ type: \"unlink\", vfs });\n });\n\n watcher.on(\"unlinkDir\", async (relativePath) => {\n vfs = removeNode(vfs, join(path, relativePath));\n observer.next({ type: \"unlinkDir\", vfs });\n });\n\n watcher.on(\"ready\", () => {\n observer.next({ type: \"ready\", vfs });\n });\n\n return () => {\n watcher.close();\n };\n });\n};\n","import type { AbstractionInstance } from \"../abstraction/instance/types\";\nimport type { Rule, RuleContext } from \"../rule/types\";\nimport type { AugmentedDiagnostic } from \"./reporter\";\n\nexport const runRules = async ({\n root,\n instance,\n dependenciesMap,\n}: RuleContext) => {\n const ruleDiagnostics =\n (currentInstance: AbstractionInstance) => async (rule: Rule) => {\n if (rule.severity === \"off\") {\n return [];\n }\n const { diagnostics } = await rule.check({\n root,\n instance: currentInstance,\n dependenciesMap,\n });\n return diagnostics.map((d) => ({ ...d, rule }));\n };\n\n const runAbstractionRules = (\n currentInstance: AbstractionInstance,\n ): Promise<AugmentedDiagnostic[]>[] => {\n return currentInstance.abstraction.rules\n .map(ruleDiagnostics(currentInstance))\n .concat(...currentInstance.children.flatMap(runAbstractionRules));\n };\n\n return await Promise.all(runAbstractionRules(instance)).then((r) => r.flat());\n};\n","import type { AugmentedDiagnostic } from \"./reporter\";\nimport { dirname, resolve } from \"node:path\";\nimport type { EvolutionConfig } from \"../config/define-config\";\nimport { parseAbstractionInstance } from \"../abstraction/instance/parse\";\nimport { parseDependenciesMap } from \"../dependencies/parse\";\nimport { watchFs } from \"../vfs/watch-fs\";\nimport { debounceTime, type Observable, switchMap } from \"rxjs\";\nimport { runRules } from \"./run-rules\";\n\nexport interface LinterConfig {\n watch?: boolean;\n config: EvolutionConfig;\n configPath: string;\n}\n\nexport const lint = ({\n watch,\n config,\n configPath,\n}: LinterConfig): Observable<AugmentedDiagnostic[]> => {\n const rootPath = resolve(dirname(configPath), config.baseUrl ?? \"./\");\n\n const parseNode = parseAbstractionInstance(config.root);\n return watchFs(rootPath, { onlyReady: !watch }).pipe(\n debounceTime(500),\n switchMap(async ({ vfs }) => ({\n root: vfs,\n instance: parseNode(vfs),\n dependenciesMap: await parseDependenciesMap(vfs),\n })),\n switchMap(runRules),\n );\n};\n","import type { AugmentedDiagnostic } from \"./types\";\nimport { relative } from \"node:path\";\nimport chalk from \"chalk\";\nimport figures from \"figures\";\nimport terminalLink from \"terminal-link\";\n\nconst formatLocation = (\n location: AugmentedDiagnostic[\"location\"],\n cwd: string,\n) => {\n let path = relative(cwd, location.path);\n if (location.line !== undefined) {\n path += `:${location.line}`;\n\n if (location.column !== undefined) {\n path += `:${location.column}`;\n }\n }\n\n return path;\n};\n\nexport const formatSingleDiagnostic = (\n d: AugmentedDiagnostic,\n cwd: string,\n): string => {\n const x =\n d.rule.severity === \"error\"\n ? chalk.red(figures.cross)\n : chalk.yellow(figures.warning);\n const s = chalk.reset(figures.lineDownRight);\n const bar = chalk.reset(figures.lineVertical);\n const e = chalk.reset(figures.lineUpRight);\n const message = chalk.reset(d.message);\n const autofixable =\n d.fixes !== undefined && d.fixes.length > 0\n ? chalk.green(`${figures.tick} Auto-fixable`)\n : null;\n const location = chalk.gray(formatLocation(d.location, cwd));\n const ruleName = d.rule.descriptionUrl\n ? chalk.blue(terminalLink(d.rule.name, d.rule.descriptionUrl!))\n : d.rule.name;\n\n return `\n${s} ${location}\n${x} ${message}\n${autofixable ? `${autofixable}\\n${bar}` : bar}\n${e} ${ruleName}\n`.trim();\n};\n","/**\n * Returns 's' if the amount is not 1.\n *\n * @example\n * `apple${s(1)}` // 'apple'\n * `apple${s(2)}` // 'apples'\n */\nexport const s = (amount: number) => (amount === 1 ? \"\" : \"s\");\n","import type { AugmentedDiagnostic } from \"./types\";\nimport chalk from \"chalk\";\n\nimport figures from \"figures\";\nimport { formatSingleDiagnostic } from \"./format-single-diagnostic\";\nimport { s } from \"./pluralization\";\n\nexport const formatPretty = (\n diagnostics: Array<AugmentedDiagnostic>,\n cwd: string,\n) => {\n if (diagnostics.length === 0) {\n return chalk.green(`${figures.tick} No problems found!`);\n }\n\n const errors = diagnostics.filter((d) => d.rule.severity === \"error\");\n const warnings = diagnostics.filter((d) => d.rule.severity === \"warn\");\n\n let footer = `Found ${[\n errors.length > 0 &&\n chalk.red.bold(`${errors.length} error${s(errors.length)}`),\n warnings.length > 0 &&\n chalk.yellow.bold(`${warnings.length} warning${s(warnings.length)}`),\n ]\n .filter(Boolean)\n .join(\" and \")}`;\n\n const autofixable = diagnostics.filter((d) => (d.fixes?.length ?? 0) > 0);\n if (autofixable.length === diagnostics.length) {\n footer += ` (all can be fixed automatically with ${chalk.green.bold(\"--fix\")})`;\n } else if (autofixable.length > 0) {\n footer += ` (${autofixable.length} can be fixed automatically with ${chalk.green.bold(\"--fix\")})`;\n } else {\n footer += \" (none can be fixed automatically)\";\n }\n\n return `\\n${diagnostics\n .map((d) => formatSingleDiagnostic(d, cwd))\n .join(\"\\n\\n\")}\\n\\n${\n chalk.gray(figures.line.repeat(footer.length))\n }\\n ${footer}\\n`;\n};\n\nexport const reportPretty = (\n diagnostics: Array<AugmentedDiagnostic>,\n cwd: string,\n) => {\n console.error(formatPretty(diagnostics, cwd));\n};\n\nexport type { AugmentedDiagnostic };\n","export { applyAutofixes } from \"./auto-fix\";\nexport { lint } from \"./lint\";\nexport { formatPretty, reportPretty, type AugmentedDiagnostic } from \"./reporter\";\n","import process from \"node:process\";\nimport { defineCommand } from \"citty\";\nimport { watchConfig } from \"../../config/load\";\nimport { applyAutofixes, lint, reportPretty, type AugmentedDiagnostic } from \"../../linter\";\nimport prexit from \"prexit\";\nimport { catchError, map, switchMap } from \"rxjs\";\nimport { ZodError } from \"zod\";\nimport { fromError } from \"zod-validation-error\";\n\nexport default defineCommand({\n meta: {\n name: \"lint\",\n description: \"Lint the project\",\n },\n\n args: {\n watch: {\n type: \"boolean\",\n description: \"Watch for changes\",\n default: false,\n },\n fix: {\n type: \"boolean\",\n description: \"Apply autofixes\",\n default: false,\n },\n \"fail-on-warning\": {\n type: \"boolean\",\n description: \"Fail on warnings\",\n default: false,\n },\n },\n async run(ctx) {\n const { watch, fix, \"fail-on-warning\": failOnWarning } = ctx.args;\n\n const subscription = watchConfig({\n cwd: process.cwd(),\n onlyOne: !watch,\n })\n .pipe(\n map(({ configPath, config }) => ({ configPath, config, watch })),\n switchMap(lint),\n catchError((e) => {\n if (e instanceof ZodError) {\n console.error(fromError(e).toString());\n } else if (e instanceof Error) {\n console.error(e.message);\n }\n\n process.exit(1);\n })\n )\n .subscribe(async (diagnostics) => {\n if (watch) {\n // eslint-disable-next-line no-console\n console.clear();\n reportPretty(diagnostics, process.cwd());\n if (fix) {\n await applyAutofixes(diagnostics);\n }\n } else {\n let stillRelevantDiagnostics = diagnostics;\n\n reportPretty(diagnostics, process.cwd());\n\n if (fix) {\n stillRelevantDiagnostics = await applyAutofixes(diagnostics);\n }\n\n if (stillRelevantDiagnostics.length > 0) {\n const onlyWarnings = stillRelevantDiagnostics.every(\n (d: AugmentedDiagnostic) => d.rule.severity === \"warn\"\n );\n if (failOnWarning || !onlyWarnings) {\n process.exit(1);\n }\n }\n process.exit(0);\n }\n });\n\n prexit(() => subscription.unsubscribe());\n },\n});\n","export const version = \"0.4.0\"\n","import type { CommandDef } from \"citty\";\n\nconst _rDefault = (r: any) => (r.default || r) as Promise<CommandDef>;\n\nexport const commands = {\n init: () => import(\"./init\").then(_rDefault),\n lint: () => import(\"./lint\").then(_rDefault),\n} as const;\n","import { defineCommand, runMain } from \"citty\";\nimport { version } from \"./version\";\nimport { commands } from \"./commands\";\n\nconst main = defineCommand({\n meta: {\n name: \"echo-architect\",\n version,\n description: \"EchoJS architecture linter CLI\",\n },\n subCommands: commands,\n});\n\nrunMain(main);\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/init.ts","../../src/config/errors.ts","../../src/config/schema.ts","../../src/config/load.ts","../../src/linter/auto-fix.ts","../../src/shared/memoize.ts","../../src/shared/resolve-import.ts","../../src/shared/index.ts","../../src/abstraction/instance/parse.ts","../../src/vfs/get-flatten-files.ts","../../src/dependencies/parse.ts","../../src/vfs/add-directory.ts","../../src/vfs/add-file.ts","../../src/vfs/create-root.ts","../../src/vfs/remove-node.ts","../../src/vfs/watch-fs.ts","../../src/linter/run-rules.ts","../../src/linter/lint.ts","../../src/linter/reporter/format-single-diagnostic.ts","../../src/linter/reporter/pluralization.ts","../../src/linter/reporter/index.ts","../../src/linter/index.ts","../../src/cli/commands/lint.ts","../../src/cli/version.ts","../../src/cli/commands/index.ts","../../src/cli/index.ts"],"names":["process","cwd","watchConfigC12","config","relative","init_parse","parseNearestTsConfig","sep","join","produce","basename","from","switchMap","Observable","path","dirname","s","chalk","figures","init_lint","defineCommand","map","fromError"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand } from \"citty\";\n\nexport default defineCommand({\n meta: {\n name: \"init\",\n description: \"Initialize a fresh project\",\n },\n});\n","import type { ZodError } from \"zod\";\nimport { relative } from \"node:path\";\nimport * as process from \"node:process\";\nimport { fromError } from \"zod-validation-error\";\n\nexport class ConfigurationNotFoundError extends Error {\n constructor() {\n super(`Configuration not found in ${process.cwd()}`);\n }\n}\n\nexport class ConfigurationInvalidError extends Error {\n constructor(\n public error: ZodError,\n filepath: string,\n ) {\n super(\n fromError(error, {\n prefix: `Invalid configuration in ${relative(process.cwd(), filepath)}`,\n }).toString(),\n );\n }\n}\n","import type { Abstraction } from \"../abstraction\";\nimport type { Rule } from \"../rule/types\";\nimport type { EvolutionConfig } from \"./define-config\";\nimport { z, type ZodType } from \"zod\";\n\ntype TypeToZod<T> = ZodType<T>;\n\nconst RuleSchema: TypeToZod<Rule> = z.object({\n name: z.string(),\n check: z.custom<Rule[\"check\"]>(),\n severity: z.enum([\"off\", \"warn\", \"error\"]),\n descriptionUrl: z.string().optional(),\n});\n\nconst AbstractionSchema: TypeToZod<Abstraction> = z.object({\n name: z.string(),\n children: z.record(z.lazy(() => AbstractionSchema)),\n rules: z.array(RuleSchema),\n fractal: z.string().optional(),\n fileTemplate: z.custom<Abstraction[\"fileTemplate\"]>(),\n});\n\nexport const EvolutionConfigSchema: TypeToZod<EvolutionConfig> = z.object({\n root: AbstractionSchema,\n baseUrl: z.string().optional(),\n files: z.array(z.string()).optional(),\n ignores: z.array(z.string()).optional(),\n});\n","import type { EvolutionConfig } from \"./define-config\";\nimport { loadConfig, watchConfig as watchConfigC12 } from \"c12\";\nimport { from, map, Observable, switchMap } from \"rxjs\";\nimport {\n ConfigurationInvalidError,\n ConfigurationNotFoundError,\n} from \"./errors\";\nimport { EvolutionConfigSchema } from \"./schema\";\n\nconst CONFIG_NAME = \"architect\";\n\nexport interface ConfigResult {\n config: EvolutionConfig;\n configPath: string;\n}\n\nconst parseConfigResult = (\n filepath: string,\n data: unknown,\n): ConfigResult => {\n const parseResult = EvolutionConfigSchema.safeParse(data);\n\n if (!parseResult.success) {\n throw new ConfigurationInvalidError(parseResult.error, filepath);\n }\n\n return {\n config: parseResult.data,\n configPath: filepath,\n };\n};\n\nexport const watchConfig = ({\n cwd,\n onlyOne,\n}: {\n cwd: string;\n onlyOne?: boolean;\n}) => {\n const config$ = from(\n loadConfig({\n cwd,\n name: CONFIG_NAME,\n }),\n ).pipe(\n map(({ configFile, config }) => {\n if (!configFile) {\n throw new ConfigurationNotFoundError();\n }\n return parseConfigResult(configFile, config);\n }),\n );\n\n if (onlyOne) {\n return config$;\n }\n\n return config$.pipe(\n switchMap(\n ({ configPath, config }) =>\n new Observable<ConfigResult>((subscriber) => {\n subscriber.next({ configPath, config });\n\n let unwatchCallback = () => {};\n\n watchConfigC12({\n cwd,\n name: CONFIG_NAME,\n onUpdate: (config) => {\n subscriber.next(\n parseConfigResult(configPath, config.newConfig.config),\n );\n },\n }).then(({ unwatch }) => {\n unwatchCallback = unwatch;\n });\n\n return () => unwatchCallback();\n }),\n ),\n );\n};\n","import type { Diagnostic } from \"../rule/types\";\nimport { mkdir, open, rename, rm } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport const applyAutofixes = async <T extends Diagnostic>(\n diagnostics: Array<T>,\n): Promise<T[]> => {\n const stillRelevantDiagnostics = [];\n const fixableDiagnostics = [];\n\n for (const diagnostic of diagnostics) {\n const fixes = diagnostic.fixes;\n\n if (!fixes) {\n stillRelevantDiagnostics.push(diagnostic);\n continue;\n }\n\n fixableDiagnostics.push(diagnostic);\n }\n\n try {\n await Promise.all(fixableDiagnostics.map(tryToApplyFixes));\n } catch (error) {\n stillRelevantDiagnostics.push(...fixableDiagnostics);\n console.error(error);\n }\n\n return stillRelevantDiagnostics;\n};\n\nconst tryToApplyFixes = async (diagnostic: Diagnostic) => {\n const fixes = diagnostic.fixes ?? [];\n\n return Promise.all(\n fixes.map((fix) => {\n switch (fix.type) {\n case \"rename\":\n return rename(fix.path, join(dirname(fix.path), fix.newName));\n case \"create-file\":\n return open(fix.path, \"w\").then((file) => {\n file.write(fix.content);\n return file.close();\n });\n case \"create-folder\":\n return mkdir(fix.path, { recursive: true });\n case \"delete\":\n return rm(fix.path, { recursive: true });\n case \"modify-file\":\n return open(fix.path, \"w\").then(async (file) => {\n await file.write(fix.content);\n return file.close();\n });\n default:\n return undefined;\n }\n }),\n );\n};\n","export const memoize = <T extends (arg: any) => any>(fn: T): T => {\n const cache = new WeakMap();\n return function (this: any, arg: any) {\n if (cache.has(arg)) {\n return cache.get(arg);\n }\n const result = fn.call(this, arg);\n\n cache.set(arg, result);\n return result;\n } as T;\n};\n","import type { CompilerOptions } from \"typescript\";\nimport { sep } from \"node:path\";\nimport ts from \"typescript\";\n\n/**\n * Given a file name, an imported path, and a TSConfig object, produce a path to the imported file, relative to TypeScript's `baseUrl`.\n *\n * The resulting path uses OS-appropriate path separators.\n *\n * @example\n * ```tsx\n * // ./src/pages/home/ui/HomePage.tsx\n * import { Button } from \"~/shared/ui\";\n * ```\n *\n * ```json\n * // ./tsconfig.json\n * {\n * \"compilerOptions\": {\n * \"moduleResolution\": \"Bundler\",\n * \"baseUrl\": \".\",\n * \"paths\": {\n * \"~/*\": [\"./src/*\"],\n * },\n * },\n * }\n * ```\n *\n * ```tsx\n * resolveImport(\n * \"~/shared/ui\",\n * \"./src/pages/home/ui/HomePage.tsx\",\n * { moduleResolution: \"Bundler\", baseUrl: \".\", paths: { \"~/*\": [\"./src/*\"] } },\n * fs.existsSync\n * );\n * ```\n * Expected output: `src/shared/ui/index.ts`\n */\nexport const resolveImport = (\n importedPath: string,\n importerPath: string,\n tsCompilerOptions: ImperfectCompilerOptions,\n fileExists: (path: string) => boolean,\n directoryExists?: (path: string) => boolean,\n): string | null => {\n return (\n ts\n .resolveModuleName(\n importedPath,\n importerPath,\n normalizeCompilerOptions(tsCompilerOptions),\n {\n ...ts.sys,\n fileExists,\n directoryExists,\n },\n )\n .resolvedModule?.resolvedFileName?.replaceAll(\"/\", sep) ?? null\n );\n};\n\nconst imperfectKeys = {\n module: ts.ModuleKind,\n moduleResolution: {\n ...ts.ModuleResolutionKind,\n node: ts.ModuleResolutionKind.Node10,\n },\n moduleDetection: ts.ModuleDetectionKind,\n newLine: ts.NewLineKind,\n target: ts.ScriptTarget,\n};\n\n/** TypeScript has a few fields which have values from an internal enum, and refuses to take the literal values from the tsconfig.json. */\nconst normalizeCompilerOptions = (\n compilerOptions: ImperfectCompilerOptions,\n): CompilerOptions => {\n return Object.fromEntries(\n Object.entries(compilerOptions).map(([key, value]) => {\n if (\n Object.keys(imperfectKeys).includes(key) &&\n typeof value === \"string\"\n ) {\n for (const [enumKey, enumValue] of Object.entries(\n imperfectKeys[key as keyof typeof imperfectKeys],\n )) {\n if (enumKey.toLowerCase() === value.toLowerCase()) {\n return [key, enumValue];\n }\n }\n }\n return [key, value];\n }),\n ) as CompilerOptions;\n};\n\nexport interface ImperfectCompilerOptions\n extends Omit<CompilerOptions, keyof typeof imperfectKeys> {\n module?: ts.ModuleKind | keyof typeof ts.ModuleKind;\n moduleResolution?:\n | ts.ModuleResolutionKind\n | keyof typeof ts.ModuleResolutionKind\n | \"node\";\n moduleDetection?:\n | ts.ModuleDetectionKind\n | keyof typeof ts.ModuleDetectionKind;\n newLine?: ts.NewLineKind | keyof typeof ts.NewLineKind;\n target?: ts.ScriptTarget | keyof typeof ts.ScriptTarget;\n}\n","export { memoize } from './memoize'\nexport { resolveImport, type ImperfectCompilerOptions } from './resolve-import'\nexport { shallowEqual } from './shallow-equal'\n","import type { Abstraction } from \"../abstraction\";\nimport type { Path, VfsNode } from \"../../vfs/types\";\nimport type { AbstractionInstance } from \"./types\";\nimport { relative } from \"node:path\";\nimport { minimatch } from \"minimatch\";\nimport { memoize } from \"../../shared\";\n\n// Так как Vfs иммутабельный,\n// то ссылки на инсансы между вызовами\n// не будут изменены, благодаря мемоизации\nexport const parseAbstractionInstance = memoize((abstraction: Abstraction) =>\n memoize((node: VfsNode): AbstractionInstance => {\n if (node.type === \"file\") {\n return {\n abstraction,\n path: node.path,\n children: [],\n childNodes: [],\n };\n }\n\n // Получаем все дочерние абстракции\n const children: Record<Path, AbstractionInstance> = {};\n\n for (const [pattern, childAbstraction] of Object.entries(\n abstraction.children\n )) {\n const nodeAbstractionInstance =\n parseAbstractionInstance(childAbstraction);\n const nodesStack: VfsNode[] = [node];\n while (nodesStack.length) {\n const currentNode = nodesStack.pop()!;\n // Если путь соответствует паттерну. То записываем или **перезаписываем** инстранс абстракции\n if (minimatch(relative(node.path, currentNode.path), pattern)) {\n children[currentNode.path] = nodeAbstractionInstance(currentNode);\n\n // Внутрь дирректории для которой создали абстракцию не идём\n continue;\n }\n\n // Если для дирректории один из прошлых матчеров создал абстракцию, тоже не идём\n if (children[currentNode.path]) {\n continue;\n }\n\n if (currentNode.type === \"folder\") {\n nodesStack.push(...currentNode.children);\n }\n }\n }\n\n // Получаем все ноды, которые не являются абстракциями\n const childNodes: Path[] = [];\n const childrenNodesStack: VfsNode[] = [node];\n\n while (childrenNodesStack.length) {\n const currentNode = childrenNodesStack.pop()!;\n\n // Если есть абстракция - игнорируем\n if (children[currentNode.path]) {\n continue;\n }\n\n if (currentNode.path !== node.path) {\n childNodes.push(currentNode.path);\n }\n\n if (currentNode.type === \"folder\") {\n childrenNodesStack.push(...currentNode.children);\n }\n }\n\n return {\n abstraction,\n path: node.path,\n childNodes: Object.values(childNodes),\n children: Object.values(children),\n };\n })\n);\n","import type { VfsFile, VfsNode } from \"./types\";\nimport { memoize } from \"../shared\";\n\nexport const getFlattenFiles = memoize((node: VfsNode): VfsFile[] => {\n if (node.type === \"file\") {\n return [node];\n }\n return node.children.reduce((acc, child) => {\n if (child.type === \"file\") {\n return [...acc, child];\n }\n\n return [...acc, ...getFlattenFiles(child)];\n }, [] as VfsFile[]);\n});\n","import type { VfsNode } from \"../vfs/types\";\nimport type { DependenciesMap } from \"./types\";\nimport * as fs from \"node:fs\";\nimport { resolveImport } from \"../shared\";\nimport precinct from \"precinct\";\nimport { parse as parseNearestTsConfig } from \"tsconfck\";\nimport { getFlattenFiles } from \"../vfs/get-flatten-files\";\n\nconst { paperwork } = precinct;\n\nexport const parseDependenciesMap = async (vfs: VfsNode) => {\n const dependenciesMap: DependenciesMap = {\n dependencies: {},\n dependencyFor: {},\n };\n\n const basePath = vfs.path;\n const { tsconfig } = await parseNearestTsConfig(basePath);\n\n const files = getFlattenFiles(vfs);\n\n for (const file of files) {\n const dependencies = paperwork(file.path, {\n includeCore: false,\n fileSystem: fs,\n });\n const resolvedDependencies = dependencies\n .map((dependency) =>\n resolveImport(\n dependency,\n file.path,\n tsconfig?.compilerOptions ?? {},\n fs.existsSync,\n fs.existsSync,\n ),\n )\n .filter((dependency) => dependency !== null);\n\n dependenciesMap.dependencies[file.path] = new Set(resolvedDependencies);\n\n for (const dependency of resolvedDependencies) {\n if (!dependenciesMap.dependencyFor[dependency]) {\n dependenciesMap.dependencyFor[dependency] = new Set();\n }\n dependenciesMap.dependencyFor[dependency].add(file.path);\n }\n }\n\n return dependenciesMap;\n};\n","import type { Path, VfsFolder } from \"./types\";\nimport { basename, join, relative, sep } from \"node:path\";\nimport { produce } from \"immer\";\n\nexport const addDirectory = (tree: VfsFolder, newDirectoryPath: Path) => {\n const rootPath = tree.path;\n return produce(tree, (draft) => {\n const pathSegments = relative(rootPath, newDirectoryPath).split(sep);\n let currentFolder = draft;\n\n for (const pathSegment of pathSegments.slice(0, -1)) {\n const existingChild = currentFolder.children.find(\n (child) =>\n child.type === \"folder\" && basename(child.path) === pathSegment,\n ) as VfsFolder | undefined;\n\n if (existingChild === undefined) {\n currentFolder.children.push({\n type: \"folder\",\n path: join(currentFolder.path, pathSegment),\n children: [],\n });\n currentFolder = currentFolder.children[\n currentFolder.children.length - 1\n ] as VfsFolder;\n } else {\n currentFolder = existingChild;\n }\n }\n\n currentFolder.children.push({\n type: \"folder\",\n path: newDirectoryPath,\n children: [],\n });\n });\n};\n","import type { Path, VfsFolder } from \"./types\";\nimport { basename, join, relative, sep } from \"node:path\";\nimport { produce } from \"immer\";\n\nexport const addFile = (tree: VfsFolder, newFilePath: Path) => {\n const rootPath = tree.path;\n return produce(tree, (draft) => {\n const pathSegments = relative(rootPath, newFilePath).split(sep);\n let currentFolder = draft;\n\n for (const pathSegment of pathSegments.slice(0, -1)) {\n const existingChild = currentFolder.children.find(\n (child) =>\n child.type === \"folder\" && basename(child.path) === pathSegment,\n ) as VfsFolder | undefined;\n\n if (existingChild === undefined) {\n currentFolder.children.push({\n type: \"folder\",\n path: join(currentFolder.path, pathSegment),\n children: [],\n });\n currentFolder = currentFolder.children[\n currentFolder.children.length - 1\n ] as VfsFolder;\n } else {\n currentFolder = existingChild;\n }\n }\n\n currentFolder.children.push({ type: \"file\", path: newFilePath });\n });\n};\n","import type { Path, VfsFolder } from \"./types\";\n\nexport const createVfsRoot = (path: Path): VfsFolder => ({\n type: \"folder\",\n path,\n children: [],\n});\n","import type { Path, VfsFolder } from \"./types\";\nimport { basename, relative, sep } from \"node:path\";\nimport { produce } from \"immer\";\n\nexport const removeNode = (tree: VfsFolder, removedNodePath: Path) => {\n const rootPath = tree.path;\n return produce(tree, (draft) => {\n const pathSegments = relative(rootPath, removedNodePath).split(sep);\n let currentFolder = draft;\n\n for (const pathSegment of pathSegments.slice(0, -1)) {\n const existingChild = currentFolder.children.find(\n (child) =>\n child.type === \"folder\" && basename(child.path) === pathSegment,\n ) as VfsFolder | undefined;\n\n if (existingChild === undefined) {\n return tree;\n } else {\n currentFolder = existingChild;\n }\n }\n\n const removedNodeIndex = currentFolder.children.findIndex(\n (child) => child.path === removedNodePath,\n );\n\n if (removedNodeIndex === -1) {\n return tree;\n }\n\n currentFolder.children.splice(removedNodeIndex, 1);\n });\n};\n","import type { Path, VfsEvents } from \"./types\";\nimport { join, sep } from \"node:path\";\nimport chokidar from \"chokidar\";\nimport { type GlobbyFilterFunction, isGitIgnored } from \"globby\";\nimport { filter, from, Observable, switchMap } from \"rxjs\";\nimport { addDirectory } from \"./add-directory\";\nimport { addFile } from \"./add-file\";\nimport { createVfsRoot } from \"./create-root\";\nimport { removeNode } from \"./remove-node\";\n\nexport const watchFs = (\n path: Path,\n { onlyReady }: { onlyReady?: boolean } = {},\n) => {\n const isIgnored$ = from(isGitIgnored({ cwd: path }));\n\n let vfs$ = isIgnored$.pipe(\n switchMap((isIgnored) => createWatcherObservable({ path, isIgnored })),\n );\n\n if (onlyReady) {\n vfs$ = vfs$.pipe(filter((e) => e.type === \"ready\"));\n }\n\n return vfs$;\n};\n\nconst createWatcherObservable = ({\n path,\n isIgnored,\n}: {\n path: string;\n isIgnored: GlobbyFilterFunction;\n}) => {\n return new Observable<VfsEvents>((observer) => {\n let vfs = createVfsRoot(path);\n const watcher = chokidar.watch(path, {\n ignored: (path) =>\n path.split(sep).includes(\"node_modules\") || isIgnored(path),\n ignoreInitial: false,\n alwaysStat: true,\n awaitWriteFinish: true,\n disableGlobbing: true,\n cwd: path,\n });\n\n watcher.on(\"add\", async (relativePath) => {\n vfs = addFile(vfs, join(path, relativePath));\n observer.next({ type: \"add\", vfs });\n });\n\n watcher.on(\"addDir\", async (relativePath) => {\n vfs = addDirectory(vfs, join(path, relativePath));\n observer.next({ type: \"addDir\", vfs });\n });\n\n watcher.on(\"change\", async () => {\n observer.next({ type: \"change\", vfs });\n });\n\n watcher.on(\"unlink\", async (relativePath) => {\n vfs = removeNode(vfs, join(path, relativePath));\n observer.next({ type: \"unlink\", vfs });\n });\n\n watcher.on(\"unlinkDir\", async (relativePath) => {\n vfs = removeNode(vfs, join(path, relativePath));\n observer.next({ type: \"unlinkDir\", vfs });\n });\n\n watcher.on(\"ready\", () => {\n observer.next({ type: \"ready\", vfs });\n });\n\n return () => {\n watcher.close();\n };\n });\n};\n","import type { AbstractionInstance } from \"../abstraction/instance/types\";\nimport type { Rule, RuleContext } from \"../rule/types\";\nimport type { AugmentedDiagnostic } from \"./reporter\";\n\nexport const runRules = async ({\n root,\n instance,\n dependenciesMap,\n}: RuleContext) => {\n const ruleDiagnostics =\n (currentInstance: AbstractionInstance) => async (rule: Rule) => {\n if (rule.severity === \"off\") {\n return [];\n }\n const { diagnostics } = await rule.check({\n root,\n instance: currentInstance,\n dependenciesMap,\n });\n return diagnostics.map((d) => ({ ...d, rule }));\n };\n\n const runAbstractionRules = (\n currentInstance: AbstractionInstance,\n ): Promise<AugmentedDiagnostic[]>[] => {\n return currentInstance.abstraction.rules\n .map(ruleDiagnostics(currentInstance))\n .concat(...currentInstance.children.flatMap(runAbstractionRules));\n };\n\n return await Promise.all(runAbstractionRules(instance)).then((r) => r.flat());\n};\n","import type { AugmentedDiagnostic } from \"./reporter\";\nimport { dirname, resolve } from \"node:path\";\nimport type { EvolutionConfig } from \"../config/define-config\";\nimport { parseAbstractionInstance } from \"../abstraction/instance/parse\";\nimport { parseDependenciesMap } from \"../dependencies/parse\";\nimport { watchFs } from \"../vfs/watch-fs\";\nimport { debounceTime, type Observable, switchMap } from \"rxjs\";\nimport { runRules } from \"./run-rules\";\n\nexport interface LinterConfig {\n watch?: boolean;\n config: EvolutionConfig;\n configPath: string;\n}\n\nexport const lint = ({\n watch,\n config,\n configPath,\n}: LinterConfig): Observable<AugmentedDiagnostic[]> => {\n const rootPath = resolve(dirname(configPath), config.baseUrl ?? \"./\");\n\n const parseNode = parseAbstractionInstance(config.root);\n return watchFs(rootPath, { onlyReady: !watch }).pipe(\n debounceTime(500),\n switchMap(async ({ vfs }) => ({\n root: vfs,\n instance: parseNode(vfs),\n dependenciesMap: await parseDependenciesMap(vfs),\n })),\n switchMap(runRules),\n );\n};\n","import type { AugmentedDiagnostic } from \"./types\";\nimport { relative } from \"node:path\";\nimport chalk from \"chalk\";\nimport figures from \"figures\";\nimport terminalLink from \"terminal-link\";\n\nconst formatLocation = (\n location: AugmentedDiagnostic[\"location\"],\n cwd: string,\n) => {\n let path = relative(cwd, location.path);\n if (location.line !== undefined) {\n path += `:${location.line}`;\n\n if (location.column !== undefined) {\n path += `:${location.column}`;\n }\n }\n\n return path;\n};\n\nexport const formatSingleDiagnostic = (\n d: AugmentedDiagnostic,\n cwd: string,\n): string => {\n const x =\n d.rule.severity === \"error\"\n ? chalk.red(figures.cross)\n : chalk.yellow(figures.warning);\n const s = chalk.reset(figures.lineDownRight);\n const bar = chalk.reset(figures.lineVertical);\n const e = chalk.reset(figures.lineUpRight);\n const message = chalk.reset(d.message);\n const autofixable =\n d.fixes !== undefined && d.fixes.length > 0\n ? chalk.green(`${figures.tick} Auto-fixable`)\n : null;\n const location = chalk.gray(formatLocation(d.location, cwd));\n const ruleName = d.rule.descriptionUrl\n ? chalk.blue(terminalLink(d.rule.name, d.rule.descriptionUrl!))\n : d.rule.name;\n\n return `\n${s} ${location}\n${x} ${message}\n${autofixable ? `${autofixable}\\n${bar}` : bar}\n${e} ${ruleName}\n`.trim();\n};\n","/**\n * Returns 's' if the amount is not 1.\n *\n * @example\n * `apple${s(1)}` // 'apple'\n * `apple${s(2)}` // 'apples'\n */\nexport const s = (amount: number) => (amount === 1 ? \"\" : \"s\");\n","import type { AugmentedDiagnostic } from \"./types\";\nimport chalk from \"chalk\";\n\nimport figures from \"figures\";\nimport { formatSingleDiagnostic } from \"./format-single-diagnostic\";\nimport { s } from \"./pluralization\";\n\nexport const formatPretty = (\n diagnostics: Array<AugmentedDiagnostic>,\n cwd: string,\n) => {\n if (diagnostics.length === 0) {\n return chalk.green(`${figures.tick} No problems found!`);\n }\n\n const errors = diagnostics.filter((d) => d.rule.severity === \"error\");\n const warnings = diagnostics.filter((d) => d.rule.severity === \"warn\");\n\n let footer = `Found ${[\n errors.length > 0 &&\n chalk.red.bold(`${errors.length} error${s(errors.length)}`),\n warnings.length > 0 &&\n chalk.yellow.bold(`${warnings.length} warning${s(warnings.length)}`),\n ]\n .filter(Boolean)\n .join(\" and \")}`;\n\n const autofixable = diagnostics.filter((d) => (d.fixes?.length ?? 0) > 0);\n if (autofixable.length === diagnostics.length) {\n footer += ` (all can be fixed automatically with ${chalk.green.bold(\"--fix\")})`;\n } else if (autofixable.length > 0) {\n footer += ` (${autofixable.length} can be fixed automatically with ${chalk.green.bold(\"--fix\")})`;\n } else {\n footer += \" (none can be fixed automatically)\";\n }\n\n return `\\n${diagnostics\n .map((d) => formatSingleDiagnostic(d, cwd))\n .join(\"\\n\\n\")}\\n\\n${\n chalk.gray(figures.line.repeat(footer.length))\n }\\n ${footer}\\n`;\n};\n\nexport const reportPretty = (\n diagnostics: Array<AugmentedDiagnostic>,\n cwd: string,\n) => {\n console.error(formatPretty(diagnostics, cwd));\n};\n\nexport type { AugmentedDiagnostic };\n","export { applyAutofixes } from \"./auto-fix\";\nexport { lint } from \"./lint\";\nexport { formatPretty, reportPretty, type AugmentedDiagnostic } from \"./reporter\";\n","import process from \"node:process\";\nimport { defineCommand } from \"citty\";\nimport { watchConfig } from \"../../config/load\";\nimport { applyAutofixes, lint, reportPretty, type AugmentedDiagnostic } from \"../../linter\";\nimport prexit from \"prexit\";\nimport { catchError, map, switchMap } from \"rxjs\";\nimport { ZodError } from \"zod\";\nimport { fromError } from \"zod-validation-error\";\n\nexport default defineCommand({\n meta: {\n name: \"lint\",\n description: \"Lint the project\",\n },\n\n args: {\n watch: {\n type: \"boolean\",\n description: \"Watch for changes\",\n default: false,\n },\n fix: {\n type: \"boolean\",\n description: \"Apply autofixes\",\n default: false,\n },\n \"fail-on-warning\": {\n type: \"boolean\",\n description: \"Fail on warnings\",\n default: false,\n },\n },\n async run(ctx) {\n const { watch, fix, \"fail-on-warning\": failOnWarning } = ctx.args;\n\n const subscription = watchConfig({\n cwd: process.cwd(),\n onlyOne: !watch,\n })\n .pipe(\n map(({ configPath, config }) => ({ configPath, config, watch })),\n switchMap(lint),\n catchError((e) => {\n if (e instanceof ZodError) {\n console.error(fromError(e).toString());\n } else if (e instanceof Error) {\n console.error(e.message);\n }\n\n process.exit(1);\n })\n )\n .subscribe(async (diagnostics) => {\n if (watch) {\n // eslint-disable-next-line no-console\n console.clear();\n reportPretty(diagnostics, process.cwd());\n if (fix) {\n await applyAutofixes(diagnostics);\n }\n } else {\n let stillRelevantDiagnostics = diagnostics;\n\n reportPretty(diagnostics, process.cwd());\n\n if (fix) {\n stillRelevantDiagnostics = await applyAutofixes(diagnostics);\n }\n\n if (stillRelevantDiagnostics.length > 0) {\n const onlyWarnings = stillRelevantDiagnostics.every(\n (d: AugmentedDiagnostic) => d.rule.severity === \"warn\"\n );\n if (failOnWarning || !onlyWarnings) {\n process.exit(1);\n }\n }\n process.exit(0);\n }\n });\n\n prexit(() => subscription.unsubscribe());\n },\n});\n","export const version = \"0.5.0\"\n","import type { CommandDef } from \"citty\";\n\nconst _rDefault = (r: any) => (r.default || r) as Promise<CommandDef>;\n\nexport const commands = {\n init: () => import(\"./init\").then(_rDefault),\n lint: () => import(\"./lint\").then(_rDefault),\n} as const;\n","import { defineCommand, runMain } from \"citty\";\nimport { version } from \"./version\";\nimport { commands } from \"./commands\";\n\nconst main = defineCommand({\n meta: {\n name: \"echo-architect\",\n version,\n description: \"EchoJS architecture linter CLI\",\n },\n subCommands: commands,\n});\n\nrunMain(main);\n"]}
|