Files
test-repo/find_top_level_setinterval.js
T
sanbuphy ef70b1d8e1 feat: add comprehensive backend topics and fix build issues
## 新增内容

### 附录文档扩展
- 扩展前端项目架构文档 (frontend-project-architecture.md)
- 扩展后端项目架构文档 (backend-project-architecture.md)
- 扩展数据治理文档 (data-governance.md)
- 扩展数据可视化文档 (data-visualization.md)
- 扩展分布式系统文档 (distributed-systems.md)
- 扩展高可用文档 (high-availability.md)
- 扩展单体到微服务文档 (monolith-to-microservices.md)
- 扩展系统设计方法论文档 (system-design-methodology.md)
- 扩展 Docker 容器文档 (docker-containers.md)
- 扩展 Kubernetes 文档 (kubernetes.md)
- 扩展 Linux 基础文档 (linux-basics.md)
- 扩展神经网络文档 (neural-networks.md)

### 新增交互式组件
- 数据治理组件: DataQualityDemo, DataGovernanceFrameworkDemo, DataLineageDemo
- 数据可视化组件: ChartTypeSelectorDemo, DashboardLayoutDemo
- 分布式系统组件: CAPTheoremDemo, ConsistencyModelsDemo, DistributedChallengesDemo
- 高可用组件: AvailabilityCalculatorDemo, FailoverStrategyDemo
- 系统设计组件: SystemDesignStepsDemo, CapacityEstimationDemo
- Docker 容器组件: DockerArchitectureDemo, DockerLifecycleDemo
- Kubernetes 组件: K8sArchitectureDemo, K8sWorkloadsDemo
- Linux 基础组件: LinuxFileSystemDemo, LinuxCommandDemo, LinuxPermissionsDemo
- 神经网络组件: NeuronDemo, NetworkLayersDemo, NetworkArchitectureDemo
- 单体到微服务组件: ArchEvolutionDemo
- 项目架构组件: ProjectArchitectureComparisonDemo
- 附录导航组件: AppendixFlowMap

### 英文版重构
- 将 en-us 目录重命名为 en
- 更新相关配置和组件中的语言代码

## Bug 修复
- 修复 index.js 中重复的组件导入语句导致的 build 失败
- 恢复被注释的 InvertedIndexDemo 和 SearchRelevanceDemo 导入
- 修复 HomeFeatures.vue 中 en-us 与 config.mjs 中 en 不一致导致的语言切换问题

## 其他改进
- 添加构建脚本 (scripts/build.mjs)
- 更新依赖版本
2026-02-26 04:35:28 +08:00

60 lines
1.9 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const compiler = require('vue/compiler-sfc');
const babel = require('@babel/parser');
const traverse = require('@babel/traverse').default;
function walk(dir) {
let results = [];
const list = fs.readdirSync(dir);
list.forEach(function(file) {
file = dir + '/' + file;
const stat = fs.statSync(file);
if (stat && stat.isDirectory()) {
results = results.concat(walk(file));
} else {
if (file.endsWith('.vue')) results.push(file);
}
});
return results;
}
const vueFiles = walk('docs/.vitepress/theme/components');
vueFiles.forEach(file => {
const content = fs.readFileSync(file, 'utf8');
if (!content.includes('setInterval')) return;
const { descriptor } = compiler.parse(content);
if (!descriptor.scriptSetup) return;
const ast = babel.parse(descriptor.scriptSetup.content, {
sourceType: 'module',
plugins: ['typescript']
});
traverse(ast, {
CallExpression(path) {
if (path.node.callee.name === 'setInterval') {
// check if we are inside a function declaration or arrow function or onMounted check
let parent = path.parentPath;
let insideFunction = false;
while (parent) {
if (
parent.isFunctionDeclaration() ||
parent.isArrowFunctionExpression() ||
parent.isFunctionExpression() ||
parent.isObjectMethod()
) {
insideFunction = true;
break;
}
parent = parent.parentPath;
}
if (!insideFunction) {
console.log(`Top-level setInterval found in ${file} at line ${path.node.loc.start.line}`);
}
}
}
});
});