Files
trans-form-middleware/DESIGN.md
T
windychen ccd16bf956
Node.js Build / build (push) Has been skipped
chore: 初始化 trans-form 项目脚手架
- 基于 grill-me Q1-Q61 决策
- Vitest 测试与 CI workflow
- middleware: parseFilters 核心实现
- component: Vue3 TransForm 基础组件 + Storybook

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-07 00:47:58 +00:00

50 lines
1.5 KiB
Markdown
Raw 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.
# trans-form-middleware — Design (Q1–Q61)
Status: **implementation scaffold** (v0.1.0)
Companion package: `@windychen/trans-form-component` (Vue 3 dynamic query form).
## Role
Receive component filter output → structured `{ field, query, op, value, logic?, values?, empty? }[]`. **No SQL generation.**
## Key decisions
| # | Decision |
|---|----------|
| 1–2 | Node.js pure JS; structured filters only |
| 8 | Dual fields: `query` (code) + `op` (symbol) |
| 14 | `mode`: pass-through (default) / flat / tree |
| 24–25 | Zero deps; ESM only; no bundling (`src/index.js`) |
| 38 | `empty: true` preserved by default |
| 39 | Built-in `DEFAULT_OPERATOR_MAP`, merge via `operatorMap` |
| 41 | Multi-function exports: `parseFilters`, `toTree`, `mapOperators`, … |
| 44 | `strict` default false |
| 46 | Multi-value: `value` (string) + `values` (parsed array) |
| 49–50 | `allowedFields` required; `unknownField: 'error'` default |
| 60 | Component emits all state flags; middleware skips `disabled` by default |
| 61 | Also skips `hidden`; `skipEmpty` option controls empty items |
## Output example
```json
[
{
"field": "tags",
"query": "IN",
"op": "IN",
"value": "a,b,c",
"values": ["a", "b", "c"],
"logic": "OR"
}
]
```
## Operator map
`EQ→=`, `NE→<>`, `GT→>`, `GTE→>=`, `LT→<`, `LTE→<=`, `LIKE→LIKE`, `IN→IN`, `NOT_IN→NOT IN`, `BETWEEN→BETWEEN`, `IS_NULL→IS NULL`, `IS_NOT_NULL→IS NOT NULL`
## CI
Copy of windychen-utils pattern: commit message must contain `chore` + `版本` + `更新` to trigger publish.