feat: metona-sqlark v0.1.12 — 前端TypeScript关系型数据库
- 4种存储引擎:Memory / IndexedDB / OPFS / Hybrid - 完整SQL支持:SELECT/INSERT/UPDATE/DELETE/JOIN/GROUP BY/HAVING/DISTINCT - Query Builder链式API + TypeScript泛型支持 - 聚合函数:COUNT/SUM/AVG/MIN/MAX - 事务、插件系统(14 hooks)、发布订阅、数据迁移、导入导出 - React/Vue框架集成 - 264个测试用例,93.46%覆盖率 - 零运行时依赖
This commit is contained in:
+147
@@ -0,0 +1,147 @@
|
||||
# Contributing to MetonaEditor
|
||||
|
||||
Thanks for your interest in contributing! This document outlines the development workflow and conventions.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js >= 16.0.0
|
||||
- npm >= 8.0.0
|
||||
|
||||
## Setup
|
||||
|
||||
```bash
|
||||
git clone https://git.metona.cn/MetonaTeam/MetonaEditor.git
|
||||
cd MetonaEditor
|
||||
npm install
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
# Start dev server with hot reload (port 3001)
|
||||
npm run dev
|
||||
|
||||
# Run tests in watch mode
|
||||
npm run test:watch
|
||||
|
||||
# Type check
|
||||
npm run typecheck
|
||||
|
||||
# Lint
|
||||
npm run lint
|
||||
npm run lint:fix
|
||||
|
||||
# Format
|
||||
npm run format
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
src/
|
||||
├── index.ts # Entry point, global API
|
||||
├── core.ts # MarkdownEditor class
|
||||
├── parser.ts # Markdown parser (tokenizer + renderer)
|
||||
├── plugins.ts # Plugin system & 6 presets
|
||||
├── themes.ts # Theme system
|
||||
├── i18n.ts # Internationalization
|
||||
├── styles.ts # CSS-in-JS injection
|
||||
├── constants.ts # Types, defaults, configs
|
||||
├── utils.ts # Utility functions
|
||||
├── animations.ts # Animation metadata
|
||||
├── icons.ts # Toolbar SVG icons
|
||||
└── locales.ts # Translation data
|
||||
|
||||
tests/
|
||||
├── parser.test.ts
|
||||
├── core.test.ts
|
||||
├── plugins.test.ts
|
||||
├── themes.test.ts
|
||||
├── i18n.test.ts
|
||||
├── utils.test.ts
|
||||
├── animations.test.ts
|
||||
├── index.test.ts
|
||||
└── styles.test.ts
|
||||
|
||||
site/
|
||||
├── index.html # Landing page
|
||||
├── demo.html # Full-featured demo
|
||||
└── docs.html # API documentation
|
||||
```
|
||||
|
||||
## Code Conventions
|
||||
|
||||
### TypeScript
|
||||
- **Strict mode** is enabled — all code must pass `tsc --noEmit`.
|
||||
- Export types explicitly. Avoid `any` where possible.
|
||||
- Use `interface` for object shapes, `type` for unions/primitives.
|
||||
|
||||
### Style
|
||||
- Run `npm run format` before committing (uses Prettier).
|
||||
- Follow existing comment patterns: JSDoc `/** */` for public APIs, `//` for inline notes.
|
||||
- Keep functions focused and under ~60 lines where practical.
|
||||
|
||||
### Testing
|
||||
- **Every new feature must include tests.**
|
||||
- Test files mirror source structure: `src/foo.ts` → `tests/foo.test.ts`.
|
||||
- Use descriptive test names: `('does X when Y')`.
|
||||
- Run the full suite before submitting: `npm test`.
|
||||
|
||||
### Commits
|
||||
- Use conventional commit messages:
|
||||
- `feat: add reference link resolution`
|
||||
- `fix: autoSave plugin state conflict`
|
||||
- `docs: update API reference`
|
||||
- `test: add index.ts global API tests`
|
||||
- `chore: optimize rollup dev build`
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
# Production build (all formats)
|
||||
npm run build
|
||||
|
||||
# Output in dist/
|
||||
# ├── metona-editor.js UMD
|
||||
# ├── metona-editor.min.js UMD minified
|
||||
# ├── metona-editor.esm.js ES Module
|
||||
# ├── metona-editor.cjs.js CommonJS
|
||||
# └── metona-editor.d.ts TypeScript declarations
|
||||
```
|
||||
|
||||
## Plugin Development
|
||||
|
||||
Plugins follow a simple convention:
|
||||
|
||||
```typescript
|
||||
const myPlugin = {
|
||||
name: 'myPlugin',
|
||||
version: '1.0.0',
|
||||
description: 'Description of my plugin',
|
||||
depends: [], // optional: plugin names this depends on
|
||||
priority: 50, // optional: for topological sort ordering
|
||||
|
||||
install(editor, options?) {
|
||||
// Called when plugin is installed
|
||||
// Use editor.on() to subscribe to events
|
||||
// Return a Promise for async initialization
|
||||
},
|
||||
|
||||
destroy(editor) {
|
||||
// Called when plugin is uninstalled
|
||||
// Clean up event listeners, timers, DOM nodes
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
## Releasing
|
||||
|
||||
1. Update version in `package.json` and `src/index.ts` (`VERSION` constant).
|
||||
2. Update `CHANGELOG.md`.
|
||||
3. Run full test suite: `npm test`.
|
||||
4. Build: `npm run build`.
|
||||
5. Publish: `npm publish`.
|
||||
|
||||
## Questions?
|
||||
|
||||
Open an issue at [git.metona.cn/MetonaTeam/MetonaEditor/issues](https://git.metona.cn/MetonaTeam/MetonaEditor/issues).
|
||||
Reference in New Issue
Block a user