Files
Notes/shared/extension-lists.js
2026-09-12 14:15:26 +08:00

111 lines
3.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 文件扩展名白名单main / preload / renderer 三处共用)
//
// ============================================================================
//
// 之前一批可编辑扩展名同时维护在两处(具体数量已不准):
// - main/file-ops.js 的 EDITABLE_EXTS SetclassifyEntry 入口决定文件
// entryType关系到 sidebar 展示 + 打开提示)
// - src/app.js 的 LOCAL_FILE_EXTS 数组resolveLocalFile 判断 md 内
// 链接是否可以跳转到该文件)
//
// 两边列表一旦漂移,「侧栏显示可编辑 / 点击却提示不支持」或「侧栏灰掉
// 但 md 里能点开」的体验割裂就会出现。本文件是单一事实源:
//
// • EDITABLE_EXTS — 可打开编辑的文件扩展名(小写、不含点)
// • MARKDOWN_EXTS — 支持 Markdown 渲染预览的扩展名EDITABLE_EXTS 子集)
//
// 加载方式:
// • main / preloadCJSconst exts = require('../shared/extension-lists.js')
// • renderer经 preload contextBridge 过桥window.api.EDITABLE_EXTS
// 因为 renderer 是 ESM + Chromium 原生,不能直接 import CJS。
// preload 内对 Set 调 Array.from 后再 exposeInMainWorld所以 renderer 端
// 拿到的是 Array不是 Set用 .includes / Array.isArray 判断即可。
//
// 修改流程只改本文件一处main + renderer 两侧自动同步。
// ============================================================================
'use strict';
/**
* 可打开编辑的文件扩展名白名单(小写、不含点)。
*
* 包含 Markdown + 常见纯文本 + 常见编程语言;其它扩展名一律视为 binary
* (侧栏仍展示但灰掉、点击提示"不支持的文件类型")。
*
* 范围决策2026-08-25 反馈):覆盖 Web 脚本 + 主流语言,避免「写笔记
* 时顺手维护个 .py / .sql 也打不开」的体验割裂。编辑器是 CodeMirror
* Markdown 6没有专门的语法高亮import map 里只配了 markdown /
* javascript / css / html所以 .py / .go / .rs 等虽然可编辑但会
* 是纯文本色 —— 后续要做 syntax highlighting 再补 lang-* 包。
*
* 列表约定:
* - 按「用途族」分组Markdown / 数据 / 配置 / 文档 / Python /
* JS-TS / Web 样式 / 组件框架 / JVM / Go / Rust / Ruby / PHP /
* Shell / Windows / SQL / C-C++ / C# / Swift / Scala / Lua /
* Perl / R / Dart
* - 排序方便 review 时一眼看清覆盖了哪些,没别的语义
*/
const EDITABLE_EXTS = new Set([
// Markdown
'md', 'markdown',
// 常见纯文本
'txt', 'text', 'log',
// 表格 / 结构化数据
'csv', 'tsv', 'json', 'xml', 'yaml', 'yml', 'toml',
// 配置 / 环境
'ini', 'cfg', 'conf', 'env',
'gitconfig', // 隐藏文件 .gitconfig 走 lastIndexOf('.') === 0 路径,需在白名单才能 editable
// 文档 / 排版
'rst', 'tex',
// Python
'py', 'pyi', 'pyw',
// JavaScript / TypeScriptjsx/tsx 让 React 用户也能直接编辑)
'js', 'mjs', 'cjs', 'jsx', 'ts', 'tsx',
// WebHTML / CSS 衍生
'html', 'htm', 'css', 'scss', 'sass', 'less',
// 组件框架
'vue', 'svelte',
// JVM 系
'java', 'kt', 'kts',
// Go
'go',
// Rust
'rs',
// Ruby
'rb',
// PHP
'php',
// Shell 系POSIX 主流)
'sh', 'bash', 'zsh',
// Windows 脚本
'ps1',
// SQL
'sql',
// C / C++
'c', 'h', 'cpp', 'hpp', 'cc', 'cxx',
// C#
'cs',
// Swift
'swift',
// Scala
'scala',
// Lua
'lua',
// Perl
'pl',
// R
'r',
// Dart
'dart',
]);
/**
* 支持 Markdown 渲染预览的扩展名EDITABLE_EXTS 的子集)。
*
* 仅 .md / .markdown 走 viewer 预览,其它可编辑文件(.txt/.py/.json/...
* 在 viewer 显示「不支持预览」空态,但仍可在编辑器里修改。
*/
const MARKDOWN_EXTS = new Set(['md', 'markdown']);
module.exports = { EDITABLE_EXTS, MARKDOWN_EXTS };