public ScanResult scan()

in doc-architect/doc-architect-core/src/main/java/com/docarchitect/core/scanner/impl/javascript/ExpressScanner.java [122:176]


    public ScanResult scan(ScanContext context) {
        log.info("Scanning Express.js API endpoints in: {}", context.rootPath());

        List<ApiEndpoint> apiEndpoints = new ArrayList<>();
        ScanStatistics.Builder statsBuilder = new ScanStatistics.Builder();

        // Find all JavaScript and TypeScript files
        List<Path> jsFiles = context.findFiles(JS_GLOB).toList();
        List<Path> tsFiles = context.findFiles(TS_GLOB).toList();
        List<Path> allFiles = new ArrayList<>();
        allFiles.addAll(jsFiles);
        allFiles.addAll(tsFiles);

        statsBuilder.filesDiscovered(allFiles.size());

        if (allFiles.isEmpty()) {
            log.warn("No JavaScript or TypeScript files found in project");
            return emptyResult();
        }

        for (Path file : allFiles) {
            if (!shouldScanFile(file)) {
                continue;
            }

            statsBuilder.incrementFilesScanned();

            // Use three-tier parsing with fallback
            FileParseResult<ApiEndpoint> result = parseWithFallback(
                file,
                routes -> extractEndpointsFromAST(file, routes),
                createFallbackStrategy(),
                statsBuilder
            );

            if (result.isSuccess()) {
                apiEndpoints.addAll(result.getData());
            }
        }

        ScanStatistics statistics = statsBuilder.build();
        log.info("Found {} Express.js API endpoints (success rate: {:.1f}%, overall parse rate: {:.1f}%)",
            apiEndpoints.size(), statistics.getSuccessRate(), statistics.getOverallParseRate());

        return buildSuccessResult(
            List.of(), // No components
            List.of(), // No dependencies
            apiEndpoints,
            List.of(), // No message flows
            List.of(), // No data entities
            List.of(), // No relationships
            List.of(), // No warnings
            statistics
        );
    }