@gherk/requirements-extractor 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +262 -0
- package/dist/extractor.d.ts.map +1 -1
- package/dist/extractor.js +17 -10
- package/dist/extractor.js.map +1 -1
- package/dist/markdown.d.ts +1 -0
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +3 -0
- package/dist/markdown.js.map +1 -1
- package/dist/prompts.d.ts +8 -0
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +116 -54
- package/dist/prompts.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# @gherk/requirements-extractor
|
|
2
|
+
|
|
3
|
+
An MCP (Model Context Protocol) server that extracts, classifies, and generates structured requirement documents from PDF files using a local Ollama LLM.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **3-Pass AI Pipeline** — Identify → Classify → Generate requirements from any PDF
|
|
8
|
+
- **Async Processing** — Returns a job ID immediately; poll for incremental results
|
|
9
|
+
- **6 Categories** — Backend, Frontend, Mobile, Infrastructure, DevOps, Non-Functional
|
|
10
|
+
- **Structured Output** — Generates individual markdown files and/or JSON per requirement
|
|
11
|
+
- **Crash-Resilient** — Files are written incrementally during generation (survives interruptions)
|
|
12
|
+
- **Local LLM** — Powered by Ollama (default: `qwen3:8b`), no external API keys required
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- **Node.js** ≥ 18
|
|
17
|
+
- **Ollama** running locally with a model pulled:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
ollama pull qwen3:8b
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx -y @gherk/requirements-extractor
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Or install globally:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install -g @gherk/requirements-extractor
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## MCP Configuration
|
|
36
|
+
|
|
37
|
+
Add to your MCP client configuration (e.g., `mcp-servers.json`):
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"name": "requirements-extractor",
|
|
42
|
+
"command": "npx",
|
|
43
|
+
"args": ["-y", "@gherk/requirements-extractor"],
|
|
44
|
+
"enabled": true
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Tools
|
|
49
|
+
|
|
50
|
+
### `extract_requirements`
|
|
51
|
+
|
|
52
|
+
Starts an asynchronous extraction job. Returns a `jobId` immediately.
|
|
53
|
+
|
|
54
|
+
| Parameter | Type | Required | Default | Description |
|
|
55
|
+
|-----------|------|----------|---------|-------------|
|
|
56
|
+
| `pdfPath` | `string` | ✅ | — | Absolute path to the PDF file |
|
|
57
|
+
| `outputDir` | `string` | ✅ | — | Absolute path to the output directory |
|
|
58
|
+
| `projectPrefix` | `string` | ❌ | `"ACS"` | Prefix for requirement IDs (e.g., `ACS_BE_01`) |
|
|
59
|
+
| `outputFormat` | `"markdown" \| "json" \| "both"` | ❌ | `"markdown"` | Output format |
|
|
60
|
+
| `filterCategories` | `string[]` | ❌ | all | Only generate for these categories |
|
|
61
|
+
| `model` | `string` | ❌ | `"qwen3:8b"` | Ollama model to use |
|
|
62
|
+
| `ollamaUrl` | `string` | ❌ | `"http://localhost:11434"` | Ollama API URL |
|
|
63
|
+
|
|
64
|
+
**Response:**
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"jobId": "a1b2c3d4",
|
|
69
|
+
"status": "running",
|
|
70
|
+
"message": "Extraction started. Use get_extraction_progress to poll for results."
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### `get_extraction_progress`
|
|
77
|
+
|
|
78
|
+
Polls a running job for incremental results.
|
|
79
|
+
|
|
80
|
+
| Parameter | Type | Required | Default | Description |
|
|
81
|
+
|-----------|------|----------|---------|-------------|
|
|
82
|
+
| `jobId` | `string` | ✅ | — | Job ID from `extract_requirements` |
|
|
83
|
+
| `since` | `number` | ❌ | `0` | Return requirements generated after this index |
|
|
84
|
+
|
|
85
|
+
**Response:**
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"jobId": "a1b2c3d4",
|
|
90
|
+
"status": "running",
|
|
91
|
+
"phase": "Pass 3: Generating markdown...",
|
|
92
|
+
"totalIdentified": 42,
|
|
93
|
+
"totalToGenerate": 38,
|
|
94
|
+
"done": 12,
|
|
95
|
+
"finished": false,
|
|
96
|
+
"new": [
|
|
97
|
+
{
|
|
98
|
+
"id": "ACS_BE_01",
|
|
99
|
+
"title": "User Authentication",
|
|
100
|
+
"category": "backend",
|
|
101
|
+
"category_label": "Backend",
|
|
102
|
+
"type": "Funcional",
|
|
103
|
+
"page_range": "5-7",
|
|
104
|
+
"description": "JWT-based authentication system...",
|
|
105
|
+
"acceptance_criteria": ["Given a valid token...", "..."]
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### `list_jobs`
|
|
114
|
+
|
|
115
|
+
Lists all extraction jobs (running and completed). Takes no parameters.
|
|
116
|
+
|
|
117
|
+
**Response:**
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
[
|
|
121
|
+
{ "id": "a1b2c3d4", "status": "completed", "phase": "Done", "done": 38, "total": 38 },
|
|
122
|
+
{ "id": "e5f6g7h8", "status": "running", "phase": "Pass 2: Classifying...", "done": 0, "total": 0 }
|
|
123
|
+
]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### `list_requirements`
|
|
129
|
+
|
|
130
|
+
Lists all generated requirement files in a directory, organized by category.
|
|
131
|
+
|
|
132
|
+
| Parameter | Type | Required | Description |
|
|
133
|
+
|-----------|------|----------|-------------|
|
|
134
|
+
| `requirementsDir` | `string` | ✅ | Absolute path to the requirements directory |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### `get_requirement`
|
|
139
|
+
|
|
140
|
+
Returns the full content of a specific requirement file.
|
|
141
|
+
|
|
142
|
+
| Parameter | Type | Required | Description |
|
|
143
|
+
|-----------|------|----------|-------------|
|
|
144
|
+
| `requirementsDir` | `string` | ✅ | Absolute path to the requirements directory |
|
|
145
|
+
| `requirementId` | `string` | ✅ | Requirement ID (e.g., `BE_01`) or filename (e.g., `ACS_BE_01_auth.md`) |
|
|
146
|
+
|
|
147
|
+
## Pipeline Architecture
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
PDF → Parse (5-page chunks)
|
|
151
|
+
↓
|
|
152
|
+
Pass 1: Identify — LLM extracts raw requirements from each chunk
|
|
153
|
+
↓
|
|
154
|
+
Pass 2: Classify — LLM assigns category (backend/frontend/mobile/infra/devops/nf)
|
|
155
|
+
↓
|
|
156
|
+
Sequence — Assign IDs: {PREFIX}_{CATEGORY}_{SEQ} (e.g., ACS_BE_01)
|
|
157
|
+
↓
|
|
158
|
+
Pass 3: Generate — LLM generates structured markdown per requirement
|
|
159
|
+
↓
|
|
160
|
+
Write — Each file written immediately (crash-resilient)
|
|
161
|
+
↓
|
|
162
|
+
Summary — README.md + requirements.json in output directory
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Categories
|
|
166
|
+
|
|
167
|
+
| ID | Prefix | Label | Description |
|
|
168
|
+
|----|--------|-------|-------------|
|
|
169
|
+
| `backend` | `BE` | Backend | APIs, services, business logic, integrations |
|
|
170
|
+
| `frontend` | `FE` | Frontend | Web interfaces, dashboards, forms, portals |
|
|
171
|
+
| `mobile` | `MB` | Mobile | iOS/Android apps, Bluetooth, GPS, push notifications |
|
|
172
|
+
| `infra` | `IF` | Infrastructure | Databases, schemas, storage, message queues, caching |
|
|
173
|
+
| `devops` | `DO` | DevOps | CI/CD, environments, containers, monitoring |
|
|
174
|
+
| `non-functional` | `NF` | Non-Functional | Security, performance, scalability, SLAs, GDPR |
|
|
175
|
+
|
|
176
|
+
## Output Structure
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
outputDir/
|
|
180
|
+
├── backend/
|
|
181
|
+
│ ├── ACS_BE_01_user_authentication.md
|
|
182
|
+
│ └── ACS_BE_02_payment_api.md
|
|
183
|
+
├── frontend/
|
|
184
|
+
│ └── ACS_FE_01_dashboard.md
|
|
185
|
+
├── mobile/
|
|
186
|
+
│ └── ACS_MB_01_push_notifications.md
|
|
187
|
+
├── infra/
|
|
188
|
+
├── devops/
|
|
189
|
+
├── non-functional/
|
|
190
|
+
│ └── ACS_NF_01_gdpr_compliance.md
|
|
191
|
+
├── README.md # Summary with requirement counts
|
|
192
|
+
└── requirements.json # All requirements as structured JSON
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Gherk Integration
|
|
196
|
+
|
|
197
|
+
When used within the Gherk platform, the MCP is called through a multi-layer async pipeline:
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
Frontend (ImporterComponent)
|
|
201
|
+
│ POST /tickets/analyze-requirements (file upload)
|
|
202
|
+
▼
|
|
203
|
+
server-go (RequirementsHandler)
|
|
204
|
+
│ Returns { jobId } immediately
|
|
205
|
+
│ Spawns goroutine →
|
|
206
|
+
▼
|
|
207
|
+
agent-go (/ai/extract-requirements)
|
|
208
|
+
│ Calls MCP tool: extract_requirements
|
|
209
|
+
│ MCP returns { jobId } → agent-go polls get_extraction_progress
|
|
210
|
+
│ When done, reads requirements.json from outputDir
|
|
211
|
+
▼
|
|
212
|
+
agent-go → maps MCP output to AnalyzedRequirementV2:
|
|
213
|
+
│ • category → side (frontend/backend/both)
|
|
214
|
+
│ • Adds priority, roles, acceptanceCriteria
|
|
215
|
+
▼
|
|
216
|
+
server-go → broadcasts via WebSocket:
|
|
217
|
+
│ • requirements_progress (phase updates)
|
|
218
|
+
│ • requirements_complete (final results)
|
|
219
|
+
│ • requirements_failed (errors)
|
|
220
|
+
▼
|
|
221
|
+
Frontend (ImporterStore) — receives results, shows preview
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Category-to-Side Mapping
|
|
225
|
+
|
|
226
|
+
| MCP Category | Gherk Side |
|
|
227
|
+
|-------------|------------|
|
|
228
|
+
| `frontend` | `frontend` |
|
|
229
|
+
| `mobile` | `frontend` |
|
|
230
|
+
| `backend` | `backend` |
|
|
231
|
+
| `infra` | `both` |
|
|
232
|
+
| `devops` | `both` |
|
|
233
|
+
| `non-functional` | `both` |
|
|
234
|
+
|
|
235
|
+
### Key Files
|
|
236
|
+
|
|
237
|
+
| File | Description |
|
|
238
|
+
|------|-------------|
|
|
239
|
+
| `agent-go/extract_requirements_handler.go` | Calls MCP, reads `requirements.json`, maps to Gherk format |
|
|
240
|
+
| `agent-go/internal/mcp/mcp-servers.json` | MCP registration (`timeoutSeconds: 0`) |
|
|
241
|
+
| `server-go/.../requirements.go` | Async handler, WebSocket broadcasting |
|
|
242
|
+
| `desktop-app/.../importer.store.ts` | Frontend state (survives navigation) |
|
|
243
|
+
|
|
244
|
+
## Development
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# Clone and install
|
|
248
|
+
npm install
|
|
249
|
+
|
|
250
|
+
# Build
|
|
251
|
+
npm run build
|
|
252
|
+
|
|
253
|
+
# Watch mode
|
|
254
|
+
npm run dev
|
|
255
|
+
|
|
256
|
+
# Run locally
|
|
257
|
+
npm start
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## License
|
|
261
|
+
|
|
262
|
+
MIT
|
package/dist/extractor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIR,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAGnB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,mBAAwB,GACpC,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIR,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAGnB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,mBAAwB,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAwP3B"}
|
package/dist/extractor.js
CHANGED
|
@@ -74,10 +74,10 @@ export async function extractRequirements(config, callbacks = {}) {
|
|
|
74
74
|
const classified = await generateJson(classifyUserPrompt(batch, cats), classifySystemPrompt(cats), ollamaOpts);
|
|
75
75
|
if (Array.isArray(classified)) {
|
|
76
76
|
for (const c of classified) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
// Support both `categories: [...]` and legacy `category: "..."`
|
|
78
|
+
const rawCats = c.categories || (c.category ? [c.category] : ["backend"]);
|
|
79
|
+
const validCats = rawCats.filter((catId) => cats.some((cat) => cat.id === catId));
|
|
80
|
+
classifiedMap[c.id_suggestion] = validCats.length > 0 ? validCats : ["backend"];
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -85,17 +85,21 @@ export async function extractRequirements(config, callbacks = {}) {
|
|
|
85
85
|
log(` ⚠️ Error in classification batch ${batchNum}: ${e}`);
|
|
86
86
|
for (const req of batch) {
|
|
87
87
|
if (!classifiedMap[req.id_suggestion]) {
|
|
88
|
-
classifiedMap[req.id_suggestion] = "backend";
|
|
88
|
+
classifiedMap[req.id_suggestion] = ["backend"];
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
log(`✅ Pass 2 complete: requirements classified`);
|
|
94
94
|
// Merge classification with raw requirements
|
|
95
|
-
const mergedForSequencing = allRaw.map((req) =>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
const mergedForSequencing = allRaw.map((req) => {
|
|
96
|
+
const cats_arr = classifiedMap[req.id_suggestion] || ["backend"];
|
|
97
|
+
return {
|
|
98
|
+
...req,
|
|
99
|
+
category: cats_arr[0],
|
|
100
|
+
categories: cats_arr,
|
|
101
|
+
};
|
|
102
|
+
});
|
|
99
103
|
// Assign sequential numbers and filenames
|
|
100
104
|
let sequenced = assignSequences(mergedForSequencing, cats, projectPrefix);
|
|
101
105
|
// ─── Step 4: Filter by category (if requested) ──────────────────
|
|
@@ -127,6 +131,9 @@ export async function extractRequirements(config, callbacks = {}) {
|
|
|
127
131
|
const req = sequenced[i];
|
|
128
132
|
const fullId = generateId(req.prefix, projectPrefix, req.seq);
|
|
129
133
|
const cat = cats.find((c) => c.id === req.category);
|
|
134
|
+
const allCatLabels = (req.categories || [req.category])
|
|
135
|
+
.map((cId) => cats.find((c) => c.id === cId)?.label || cId)
|
|
136
|
+
.join(", ");
|
|
130
137
|
log(` [${i + 1}/${sequenced.length}] ${fullId} — ${req.title}`);
|
|
131
138
|
let markdown;
|
|
132
139
|
try {
|
|
@@ -136,7 +143,7 @@ export async function extractRequirements(config, callbacks = {}) {
|
|
|
136
143
|
summary: req.summary,
|
|
137
144
|
raw_text: req.raw_text,
|
|
138
145
|
page_range: req.page_range,
|
|
139
|
-
section_label:
|
|
146
|
+
section_label: allCatLabels,
|
|
140
147
|
type: req.category === "non-functional" ? "No Funcional" : "Funcional",
|
|
141
148
|
}), generateSystemPrompt(), ollamaOpts);
|
|
142
149
|
// Clean up wrapping code blocks
|
package/dist/extractor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"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"}
|
package/dist/markdown.d.ts
CHANGED
|
@@ -38,5 +38,6 @@ export declare function assignSequences(classified: Array<{
|
|
|
38
38
|
page_range: string;
|
|
39
39
|
raw_text: string;
|
|
40
40
|
category: string;
|
|
41
|
+
categories: string[];
|
|
41
42
|
}>, categories: Category[], projectPrefix: string): ClassifiedRequirement[];
|
|
42
43
|
//# sourceMappingURL=markdown.d.ts.map
|
package/dist/markdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,QAAQ,EACR,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACf,MAAM,YAAY,CAAC;AAmBpB;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACd,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,GACZ,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,GACvB,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAYf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,YAAY,EAAE,oBAAoB,EAAE,EACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,EACtB,YAAY,GAAE,YAAyB,GACxC,gBAAgB,CA2DlB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,oBAAoB,EAAE,EACpC,UAAU,EAAE,QAAQ,EAAE,GACvB,eAAe,EAAE,CAEnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,QAAQ,EAAE,GACvB,eAAe,
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,QAAQ,EACR,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACf,MAAM,YAAY,CAAC;AAmBpB;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACd,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,GACZ,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,GACvB,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAYf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,YAAY,EAAE,oBAAoB,EAAE,EACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,EACtB,YAAY,GAAE,YAAyB,GACxC,gBAAgB,CA2DlB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,oBAAoB,EAAE,EACpC,UAAU,EAAE,QAAQ,EAAE,GACvB,eAAe,EAAE,CAEnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,QAAQ,EAAE,GACvB,eAAe,CAwBjB;AA8CD;;GAEG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,KAAK,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,EACF,UAAU,EAAE,QAAQ,EAAE,EACtB,aAAa,EAAE,MAAM,GACtB,qBAAqB,EAAE,CAqBzB"}
|
package/dist/markdown.js
CHANGED
|
@@ -133,7 +133,9 @@ export function toSingleJsonRequirement(req, categories) {
|
|
|
133
133
|
id: fullId,
|
|
134
134
|
title: req.title,
|
|
135
135
|
category: req.category,
|
|
136
|
+
categories: req.categories || [req.category],
|
|
136
137
|
category_label: cat?.label || req.category,
|
|
138
|
+
category_labels: (req.categories || [req.category]).map((cId) => categories.find((c) => c.id === cId)?.label || cId),
|
|
137
139
|
type: req.category === "non-functional" ? "No Funcional" : "Funcional",
|
|
138
140
|
page_range: req.page_range,
|
|
139
141
|
description: req.markdown,
|
|
@@ -187,6 +189,7 @@ export function assignSequences(classified, categories, projectPrefix) {
|
|
|
187
189
|
const seq = counters[req.category];
|
|
188
190
|
return {
|
|
189
191
|
...req,
|
|
192
|
+
categories: req.categories,
|
|
190
193
|
prefix,
|
|
191
194
|
seq,
|
|
192
195
|
filename: generateFilename(prefix, projectPrefix, seq, req.title),
|
package/dist/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -18,4 +18,12 @@ export declare function generateUserPrompt(req: {
|
|
|
18
18
|
section_label: string;
|
|
19
19
|
type: string;
|
|
20
20
|
}): string;
|
|
21
|
+
export declare function gherkinSystemPrompt(): string;
|
|
22
|
+
export declare function gherkinUserPrompt(req: {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
summary: string;
|
|
26
|
+
category: string;
|
|
27
|
+
acceptance_criteria: string[];
|
|
28
|
+
}): string;
|
|
21
29
|
//# sourceMappingURL=prompts.d.ts.map
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,oBAAoB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,oBAAoB,IAAI,MAAM,CAqB7C;AAED,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAChB,MAAM,CAyBR;AAID,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CA4CnE;AAED,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,KAAK,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,EACF,UAAU,EAAE,QAAQ,EAAE,GACvB,MAAM,CAwBR;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CAChB,GACF,MAAM,CA6DR;AAID,wBAAgB,mBAAmB,IAAI,MAAM,CAY5C;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC,GAAG,MAAM,CAuBT"}
|
package/dist/prompts.js
CHANGED
|
@@ -1,90 +1,115 @@
|
|
|
1
1
|
// ─── Pass 1: Identify Requirements ──────────────────────────────────
|
|
2
2
|
export function identifySystemPrompt() {
|
|
3
|
-
return `Eres un analista de requisitos software experto.
|
|
3
|
+
return `Eres un analista de requisitos software experto.
|
|
4
|
+
|
|
5
|
+
Tu tarea es leer un fragmento de un documento PDF y extraer TODOS los requisitos explícitos que aparezcan en el texto.
|
|
4
6
|
|
|
5
7
|
REGLAS IMPORTANTES:
|
|
6
|
-
-
|
|
7
|
-
- Un requisito
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
- Extrae SOLO requisitos reales, no contexto ni descripciones generales
|
|
9
|
+
- Un requisito debe describir UNA capacidad, funcionalidad o restricción concreta del sistema
|
|
10
|
+
- Usa únicamente lenguaje normativo como señal de requisito: "debe", "deberá", "must", "shall", "required"
|
|
11
|
+
- NO extraigas recomendaciones, ejemplos o texto explicativo sin obligación
|
|
12
|
+
- Si un párrafo contiene varios requisitos, sepáralos
|
|
13
|
+
- Incluye requisitos funcionales y no funcionales
|
|
14
|
+
- NO inventes información que no esté explícitamente en el texto
|
|
15
|
+
- Si no hay requisitos claros, responde con un array vacío: []
|
|
16
|
+
|
|
17
|
+
FORMATO DE RESPUESTA:
|
|
18
|
+
- Devuelve SOLO un JSON array válido
|
|
19
|
+
- Usa solo comillas dobles (")
|
|
20
|
+
- No incluyas texto adicional, comentarios ni markdown
|
|
21
|
+
|
|
22
|
+
Responde ÚNICAMENTE con el JSON array.`;
|
|
14
23
|
}
|
|
15
24
|
export function identifyUserPrompt(chunkText, startPage, endPage) {
|
|
16
|
-
return `Analiza el siguiente fragmento (páginas ${startPage}-${endPage}) y extrae los requisitos individuales.
|
|
25
|
+
return `Analiza el siguiente fragmento del documento (páginas ${startPage}-${endPage}) y extrae los requisitos individuales.
|
|
17
26
|
|
|
18
27
|
Para cada requisito devuelve un objeto JSON con:
|
|
19
|
-
- "id_suggestion":
|
|
28
|
+
- "id_suggestion": identificador corto y único (ej: "auth_login", "user_roles", "payment_sync")
|
|
20
29
|
- "title": título descriptivo en inglés
|
|
21
|
-
- "summary": resumen
|
|
30
|
+
- "summary": resumen breve (1–3 frases) del requisito
|
|
22
31
|
- "page_range": rango de páginas donde aparece (ej: "12-15")
|
|
23
|
-
- "raw_text":
|
|
32
|
+
- "raw_text": frase o fragmento exacto del documento que define el requisito (máx. 500 caracteres)
|
|
24
33
|
|
|
25
34
|
TEXTO DEL DOCUMENTO:
|
|
26
35
|
---
|
|
27
36
|
${chunkText}
|
|
28
37
|
---
|
|
29
38
|
|
|
30
|
-
Responde SOLO con el JSON array. Ejemplo
|
|
31
|
-
[
|
|
39
|
+
Responde SOLO con el JSON array. Ejemplo:
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"id_suggestion": "user_login",
|
|
43
|
+
"title": "User Login",
|
|
44
|
+
"summary": "The system must allow users to authenticate using email and password.",
|
|
45
|
+
"page_range": "${startPage}-${endPage}",
|
|
46
|
+
"raw_text": "El sistema debe permitir a los usuarios iniciar sesión mediante email y contraseña."
|
|
47
|
+
}
|
|
48
|
+
]`;
|
|
32
49
|
}
|
|
33
50
|
// ─── Pass 2: Classify Requirements ──────────────────────────────────
|
|
34
51
|
export function classifySystemPrompt(categories) {
|
|
35
52
|
const catDescriptions = categories
|
|
36
53
|
.map((c) => `- "${c.id}": ${c.label} — ${c.description}`)
|
|
37
54
|
.join("\n");
|
|
38
|
-
return `Eres un
|
|
39
|
-
|
|
40
|
-
CATEGORÍAS:
|
|
41
|
-
${catDescriptions}
|
|
42
|
-
|
|
43
|
-
REGLAS DE CLASIFICACIÓN (aplicar en ESTE ORDEN de prioridad):
|
|
44
|
-
|
|
45
|
-
1. **"mobile"** → Si el requisito es específico de apps móviles: iOS, Android, Bluetooth, GPS del dispositivo, notificaciones push, cámara, escáner QR, app nativa
|
|
46
|
-
- Ejemplos: "App nativa del usuario", "Notificaciones push", "Escaneo de QR desde el móvil"
|
|
47
|
-
|
|
48
|
-
2. **"frontend"** → Si el requisito involucra CUALQUIER interfaz web o pantalla visual: dashboards, CRUDs, portales, formularios, menús, configuración visual, subida de documentos, templates, gestión desde interfaz, reportes visuales, paneles de administración
|
|
49
|
-
- Ejemplos: "Dashboard operativo", "CRUD de entidades", "Subida de documentos", "Panel de gestión", "Menú de configuración"
|
|
55
|
+
return `Eres un ARQUITECTO DE SOFTWARE PRINCIPAL con 20 años de experiencia en sistemas distribuidos. Tu capacidad de análisis es legendaria.
|
|
56
|
+
Tu misión es diseccionar requisitos funcionales y mapearlos a las capas arquitectónicas correctas.
|
|
50
57
|
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
CONTEXTO:
|
|
59
|
+
Estás analizando un sistema moderno basado en microservicios, SPAs (React/Vue) y aplicaciones móviles. La mayoría de las funcionalidades modernas son "Full Stack" (tocan varias capas), pero otras son específicas.
|
|
53
60
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
5. **"non-functional"** → Si el requisito trata sobre: seguridad, cifrado, rendimiento, escalabilidad, calidad de código, SLAs, auditoría, privacidad GDPR, accesibilidad, testing, confidencialidad, acuerdos legales
|
|
58
|
-
- Ejemplos: "Cifrado de datos", "GDPR compliance", "SLA de disponibilidad", "Acuerdo de confidencialidad"
|
|
59
|
-
|
|
60
|
-
6. **"backend"** → SOLO si NO encaja en ninguna categoría anterior. Exclusivamente para: API REST puras sin pantalla, lógica de negocio interna, algoritmos, integraciones con sistemas externos, sincronización entre sistemas, webhooks, reglas de negocio automáticas
|
|
61
|
-
- Ejemplos: "API de autenticación", "Sincronización con sistema externo", "Motor de asignación", "Integración con pasarela de pago"
|
|
62
|
-
|
|
63
|
-
⚠️ REGLA DE ORO: Si el título o resumen contiene "Management", "Configuration", "Menu", "Dashboard", "Upload", "Template", "Settings", "CRUD", "Monitor", "List", "Rules", "Access", "Profile", "gestión" → es "frontend", NO "backend". Las pantallas y gestión son FRONTEND.
|
|
61
|
+
TUS HERRAMIENTAS (CATEGORÍAS):
|
|
62
|
+
${catDescriptions}
|
|
64
63
|
|
|
65
|
-
|
|
64
|
+
MODELO MENTAL DE CLASIFICACIÓN (Usa este razonamiento):
|
|
65
|
+
|
|
66
|
+
1. **ANÁLISIS DE IMPACTO**:
|
|
67
|
+
- ¿El requisito cambia lo que el usuario VE o TOCA? → Impacto FRONTEND.
|
|
68
|
+
- ¿El requisito implica guardar datos, reglas de negocio, correos, integraciones o APIs? → Impacto BACKEND.
|
|
69
|
+
- ¿El requisito habla de sensores, GPS, notificaciones push o tiendas de apps? → Impacto MOBILE.
|
|
70
|
+
- ¿El requisito habla de seguridad, rendimiento, logs o despliegue? → NON-FUNCTIONAL o DEVOPS.
|
|
71
|
+
|
|
72
|
+
2. **REGLA DE ORO "FULL STACK"**:
|
|
73
|
+
- Una funcionalidad compleja casi siempre es HÍBRIDA.
|
|
74
|
+
- Ejemplo: "Sistema de Chat".
|
|
75
|
+
- ¿Tiene pantallas? SÍ → FRONTEND.
|
|
76
|
+
- ¿Guarda mensajes? SÍ → BACKEND.
|
|
77
|
+
- ¿Notifica al móvil? SÍ → MOBILE.
|
|
78
|
+
-> Resultado: ["frontend", "backend", "mobile"]
|
|
79
|
+
|
|
80
|
+
- Ejemplo: "Validación de formularios complejos (Vueform)".
|
|
81
|
+
- ¿Renderiza campos? SÍ → FRONTEND.
|
|
82
|
+
- ¿Valida contra base de datos? SÍ → BACKEND.
|
|
83
|
+
-> Resultado: ["frontend", "backend"]
|
|
84
|
+
|
|
85
|
+
3. **PRIORIDAD**:
|
|
86
|
+
- Ordena las categorías por "peso" del desarrollo.
|
|
87
|
+
- Si es 80% interfaz y 20% API → ["frontend", "backend"]
|
|
88
|
+
- Si es 80% algoritmo y 20% panel de control → ["backend", "frontend"]
|
|
89
|
+
|
|
90
|
+
TU SALIDA:
|
|
91
|
+
- Devuelve un JSON array de objetos.
|
|
92
|
+
- Propiedad "categories": Array de strings EN ORDEN DE IMPORTANCIA.
|
|
93
|
+
- Sé preciso. No adivines. Usa tu criterio experto.`;
|
|
66
94
|
}
|
|
67
95
|
export function classifyUserPrompt(requirements, categories) {
|
|
68
96
|
const reqList = requirements
|
|
69
|
-
.map((r, i) =>
|
|
70
|
-
|
|
97
|
+
.map((r, i) => `#${i + 1} [${r.id_suggestion}] "${r.title}"
|
|
98
|
+
Resumen: ${r.summary}
|
|
99
|
+
Contexto Original: "${r.raw_text ? r.raw_text.substring(0, 300).replace(/\n/g, " ") : "N/A"}"`)
|
|
100
|
+
.join("\n\n");
|
|
71
101
|
const catIds = categories.map((c) => `"${c.id}"`).join(", ");
|
|
72
|
-
return `
|
|
102
|
+
return `Analiza estos requisitos y clasifícalos arquitectónicamente.
|
|
103
|
+
Categorías válidas: ${catIds}
|
|
73
104
|
|
|
74
|
-
REQUISITOS:
|
|
105
|
+
REQUISITOS A ANALIZAR:
|
|
75
106
|
${reqList}
|
|
76
107
|
|
|
77
|
-
Responde SOLO con
|
|
108
|
+
Responde SOLO con el JSON array. Ejemplo:
|
|
78
109
|
[
|
|
79
|
-
{"id_suggestion": "
|
|
80
|
-
{"id_suggestion": "
|
|
81
|
-
{"id_suggestion": "
|
|
82
|
-
{"id_suggestion": "user_management", "category": "frontend"},
|
|
83
|
-
{"id_suggestion": "push_notifications", "category": "mobile"},
|
|
84
|
-
{"id_suggestion": "db_schema", "category": "infra"},
|
|
85
|
-
{"id_suggestion": "uat_environment", "category": "devops"},
|
|
86
|
-
{"id_suggestion": "gdpr_compliance", "category": "non-functional"},
|
|
87
|
-
{"id_suggestion": "external_sync", "category": "backend"}
|
|
110
|
+
{ "id_suggestion": "user_chat", "categories": ["frontend", "backend", "mobile"] },
|
|
111
|
+
{ "id_suggestion": "api_gateway", "categories": ["backend", "devops"] },
|
|
112
|
+
{ "id_suggestion": "landing_page", "categories": ["frontend"] }
|
|
88
113
|
]`;
|
|
89
114
|
}
|
|
90
115
|
// ─── Pass 3: Generate Markdown ──────────────────────────────────────
|
|
@@ -158,8 +183,45 @@ También incluye tablas para configuraciones, campos o comparativas]
|
|
|
158
183
|
- [ ] [criterio 1]
|
|
159
184
|
- [ ] [criterio 2]
|
|
160
185
|
- [ ] [criterio 3]
|
|
186
|
+
|
|
161
187
|
---
|
|
162
188
|
|
|
163
189
|
Ahora genera la documentación COMPLETA para este requisito. Recuerda: en español, con diagramas mermaid relevantes, sé específico basándote en el resumen y texto original.`;
|
|
164
190
|
}
|
|
191
|
+
// ─── Pass 3b: Generate Gherkin Feature ──────────────────────────────
|
|
192
|
+
export function gherkinSystemPrompt() {
|
|
193
|
+
return `You are a BDD expert generating Gherkin feature files from software requirements.
|
|
194
|
+
|
|
195
|
+
RULES:
|
|
196
|
+
- Write in English
|
|
197
|
+
- Use standard Gherkin syntax: Feature, Scenario, Given / When / Then / And
|
|
198
|
+
- Each acceptance criterion should become at least one Scenario
|
|
199
|
+
- Include a Background section if multiple scenarios share setup steps
|
|
200
|
+
- Use descriptive scenario names
|
|
201
|
+
- Be specific — use concrete examples, not generic placeholders
|
|
202
|
+
- Return ONLY the .feature file content, no wrapping code blocks
|
|
203
|
+
- Include relevant tags (@backend, @frontend, @mobile, @api, etc.)`;
|
|
204
|
+
}
|
|
205
|
+
export function gherkinUserPrompt(req) {
|
|
206
|
+
const criteriaList = req.acceptance_criteria.length > 0
|
|
207
|
+
? req.acceptance_criteria.map((ac, i) => ` ${i + 1}. ${ac}`).join("\n")
|
|
208
|
+
: " (derive scenarios from the summary)";
|
|
209
|
+
return `Generate a Gherkin feature file for this requirement:
|
|
210
|
+
|
|
211
|
+
ID: ${req.id}
|
|
212
|
+
Title: ${req.title}
|
|
213
|
+
Category: ${req.category}
|
|
214
|
+
Summary: ${req.summary}
|
|
215
|
+
|
|
216
|
+
Acceptance Criteria:
|
|
217
|
+
${criteriaList}
|
|
218
|
+
|
|
219
|
+
Generate a complete .feature file with:
|
|
220
|
+
- A Feature description based on the title and summary
|
|
221
|
+
- One Scenario per acceptance criterion (or derive from summary if none)
|
|
222
|
+
- Concrete Given / When / Then steps
|
|
223
|
+
- Appropriate tags (@${req.category}, @${req.id.toLowerCase()})
|
|
224
|
+
|
|
225
|
+
Return ONLY the Gherkin content.`;
|
|
226
|
+
}
|
|
165
227
|
//# sourceMappingURL=prompts.js.map
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB;IAChC,OAAO
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface RawRequirement {
|
|
|
14
14
|
}
|
|
15
15
|
export interface ClassifiedRequirement extends RawRequirement {
|
|
16
16
|
category: string;
|
|
17
|
+
categories: string[];
|
|
17
18
|
prefix: string;
|
|
18
19
|
seq: number;
|
|
19
20
|
filename: string;
|
|
@@ -39,7 +40,9 @@ export interface JsonRequirement {
|
|
|
39
40
|
id: string;
|
|
40
41
|
title: string;
|
|
41
42
|
category: string;
|
|
43
|
+
categories: string[];
|
|
42
44
|
category_label: string;
|
|
45
|
+
category_labels: string[];
|
|
43
46
|
type: string;
|
|
44
47
|
page_range: string;
|
|
45
48
|
description: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAqCxC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAqCxC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACjB"}
|
package/package.json
CHANGED