docspec 0.3.0 → 0.4.0
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/dist/__tests__/cli.test.js +14 -3
- package/dist/__tests__/cli.test.js.map +1 -1
- package/dist/__tests__/generate.test.js +39 -0
- package/dist/__tests__/generate.test.js.map +1 -1
- package/dist/changed.d.ts.map +1 -1
- package/dist/changed.js +1 -2
- package/dist/changed.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/create.d.ts +3 -1
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +10 -6
- package/dist/create.js.map +1 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +4 -3
- package/dist/generate.js.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/generator.test.d.ts +0 -2
- package/dist/__tests__/generator.test.d.ts.map +0 -1
- package/dist/__tests__/generator.test.js +0 -122
- package/dist/__tests__/generator.test.js.map +0 -1
- package/dist/__tests__/validator.test.d.ts +0 -2
- package/dist/__tests__/validator.test.d.ts.map +0 -1
- package/dist/__tests__/validator.test.js +0 -331
- package/dist/__tests__/validator.test.js.map +0 -1
- package/dist/docspec-changed.d.ts +0 -25
- package/dist/docspec-changed.d.ts.map +0 -1
- package/dist/docspec-changed.js +0 -210
- package/dist/docspec-changed.js.map +0 -1
- package/dist/docspec-generate.d.ts +0 -22
- package/dist/docspec-generate.d.ts.map +0 -1
- package/dist/docspec-generate.js +0 -171
- package/dist/docspec-generate.js.map +0 -1
- package/dist/format-parser.d.ts +0 -24
- package/dist/format-parser.d.ts.map +0 -1
- package/dist/format-parser.js +0 -205
- package/dist/format-parser.js.map +0 -1
- package/dist/generator.d.ts +0 -12
- package/dist/generator.d.ts.map +0 -1
- package/dist/generator.js +0 -89
- package/dist/generator.js.map +0 -1
- package/dist/types.d.ts +0 -16
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/validator.d.ts +0 -7
- package/dist/validator.d.ts.map +0 -1
- package/dist/validator.js +0 -211
- package/dist/validator.js.map +0 -1
package/dist/validator.js
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.validateDocspec = validateDocspec;
|
|
37
|
-
const fs = __importStar(require("fs/promises"));
|
|
38
|
-
const constants_1 = require("./constants");
|
|
39
|
-
const logger_1 = require("./logger");
|
|
40
|
-
/**
|
|
41
|
-
* Validate a docspec file
|
|
42
|
-
* @param filePath Path to the docspec file to validate
|
|
43
|
-
*/
|
|
44
|
-
async function validateDocspec(filePath) {
|
|
45
|
-
const errors = [];
|
|
46
|
-
logger_1.logger.debug(`Reading file: ${filePath}`);
|
|
47
|
-
try {
|
|
48
|
-
const content = await fs.readFile(filePath, "utf-8");
|
|
49
|
-
logger_1.logger.debug(`File read successfully, ${content.length} characters`);
|
|
50
|
-
logger_1.logger.debug("Parsing sections from content");
|
|
51
|
-
const sections = parseSections(content);
|
|
52
|
-
logger_1.logger.debug(`Found ${sections.length} section(s)`);
|
|
53
|
-
// Check for all required sections
|
|
54
|
-
const foundSections = new Set();
|
|
55
|
-
for (const section of sections) {
|
|
56
|
-
foundSections.add(section.name);
|
|
57
|
-
logger_1.logger.debug(`Found section: "${section.name}" (line ${section.lineNumber})`);
|
|
58
|
-
}
|
|
59
|
-
logger_1.logger.debug(`Checking for ${constants_1.REQUIRED_SECTIONS.length} required section(s)`);
|
|
60
|
-
// Check for missing sections
|
|
61
|
-
for (const requiredSection of constants_1.REQUIRED_SECTIONS) {
|
|
62
|
-
if (!foundSections.has(requiredSection)) {
|
|
63
|
-
logger_1.logger.debug(`Missing required section: "${requiredSection}"`);
|
|
64
|
-
errors.push(`Missing required section: "${requiredSection}"`);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
logger_1.logger.debug(`✓ Required section found: "${requiredSection}"`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// Validate each section's content
|
|
71
|
-
logger_1.logger.debug("Validating section content");
|
|
72
|
-
for (const section of sections) {
|
|
73
|
-
if (constants_1.REQUIRED_SECTIONS.includes(section.name)) {
|
|
74
|
-
logger_1.logger.debug(`Validating content for section: "${section.name}"`);
|
|
75
|
-
const validationError = validateSectionContent(section);
|
|
76
|
-
if (validationError) {
|
|
77
|
-
logger_1.logger.debug(`Validation error for "${section.name}": ${validationError}`);
|
|
78
|
-
errors.push(validationError);
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
logger_1.logger.debug(`✓ Section "${section.name}" content is valid`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
const isValid = errors.length === 0;
|
|
86
|
-
logger_1.logger.debug(`Validation ${isValid ? "passed" : "failed"} with ${errors.length} error(s)`);
|
|
87
|
-
return {
|
|
88
|
-
valid: isValid,
|
|
89
|
-
errors,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
logger_1.logger.debug(`Error reading file: ${error instanceof Error ? error.message : String(error)}`);
|
|
94
|
-
if (error instanceof Error) {
|
|
95
|
-
return {
|
|
96
|
-
valid: false,
|
|
97
|
-
errors: [`Failed to read file: ${error.message}`],
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
return {
|
|
101
|
-
valid: false,
|
|
102
|
-
errors: [`Failed to read file: ${String(error)}`],
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Parse markdown content into sections
|
|
108
|
-
*/
|
|
109
|
-
function parseSections(content) {
|
|
110
|
-
const sections = [];
|
|
111
|
-
const lines = content.split("\n");
|
|
112
|
-
logger_1.logger.debug(`Parsing ${lines.length} lines for sections`);
|
|
113
|
-
let currentSection = null;
|
|
114
|
-
let lineNumber = 1;
|
|
115
|
-
for (let i = 0; i < lines.length; i++) {
|
|
116
|
-
const line = lines[i];
|
|
117
|
-
const trimmedLine = line.trim();
|
|
118
|
-
// Check for section headers (## or ###)
|
|
119
|
-
const headerMatch = trimmedLine.match(/^#{2,}\s+(.+)$/);
|
|
120
|
-
if (headerMatch) {
|
|
121
|
-
// Save previous section if exists
|
|
122
|
-
if (currentSection) {
|
|
123
|
-
logger_1.logger.debug(`Closing section "${currentSection.name}" with ${currentSection.content.length} characters`);
|
|
124
|
-
sections.push(currentSection);
|
|
125
|
-
}
|
|
126
|
-
// Extract section name (remove section number if present)
|
|
127
|
-
let sectionName = headerMatch[1].trim();
|
|
128
|
-
// Skip AGENT INSTRUCTIONS section - don't validate it
|
|
129
|
-
if (sectionName === "AGENT INSTRUCTIONS") {
|
|
130
|
-
logger_1.logger.debug("Skipping AGENT INSTRUCTIONS section");
|
|
131
|
-
currentSection = null;
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
// Remove leading number and period (e.g., "1. Purpose" -> "Purpose")
|
|
135
|
-
sectionName = sectionName.replace(/^\d+\.\s*/, "");
|
|
136
|
-
logger_1.logger.debug(`Found section header: "${sectionName}" at line ${i + 1}`);
|
|
137
|
-
currentSection = {
|
|
138
|
-
name: sectionName,
|
|
139
|
-
content: "",
|
|
140
|
-
lineNumber: i + 1,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
else if (currentSection) {
|
|
144
|
-
// Accumulate content for current section
|
|
145
|
-
if (currentSection.content) {
|
|
146
|
-
currentSection.content += "\n";
|
|
147
|
-
}
|
|
148
|
-
currentSection.content += line;
|
|
149
|
-
}
|
|
150
|
-
lineNumber++;
|
|
151
|
-
}
|
|
152
|
-
// Add the last section
|
|
153
|
-
if (currentSection) {
|
|
154
|
-
logger_1.logger.debug(`Closing final section "${currentSection.name}" with ${currentSection.content.length} characters`);
|
|
155
|
-
sections.push(currentSection);
|
|
156
|
-
}
|
|
157
|
-
return sections;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Validate that section content differs from boilerplate
|
|
161
|
-
*/
|
|
162
|
-
function validateSectionContent(section) {
|
|
163
|
-
const boilerplate = constants_1.SECTION_BOILERPLATE[section.name];
|
|
164
|
-
if (!boilerplate) {
|
|
165
|
-
logger_1.logger.debug(`No boilerplate found for section "${section.name}", skipping content validation`);
|
|
166
|
-
return null; // Not a required section, skip validation
|
|
167
|
-
}
|
|
168
|
-
logger_1.logger.debug(`Validating content for "${section.name}" (boilerplate length: ${boilerplate.length})`);
|
|
169
|
-
// Clean content: remove separator lines (---) and trim
|
|
170
|
-
let content = section.content
|
|
171
|
-
.split("\n")
|
|
172
|
-
.filter(line => line.trim() !== "---")
|
|
173
|
-
.join("\n")
|
|
174
|
-
.trim();
|
|
175
|
-
const boilerplateTrimmed = boilerplate.trim();
|
|
176
|
-
logger_1.logger.debug(`Section content length: ${content.length} characters`);
|
|
177
|
-
// Check if content is empty
|
|
178
|
-
if (!content) {
|
|
179
|
-
logger_1.logger.debug(`Section "${section.name}" is empty`);
|
|
180
|
-
return `Section "${section.name}" (line ${section.lineNumber}) is empty`;
|
|
181
|
-
}
|
|
182
|
-
// Check if content matches boilerplate exactly
|
|
183
|
-
if (content === boilerplateTrimmed) {
|
|
184
|
-
logger_1.logger.debug(`Section "${section.name}" matches boilerplate exactly`);
|
|
185
|
-
return `Section "${section.name}" (line ${section.lineNumber}) contains only boilerplate text and has not been customized`;
|
|
186
|
-
}
|
|
187
|
-
// Check if content is too similar to boilerplate (only whitespace differences)
|
|
188
|
-
const normalizedContent = normalizeWhitespace(content);
|
|
189
|
-
const normalizedBoilerplate = normalizeWhitespace(boilerplateTrimmed);
|
|
190
|
-
if (normalizedContent === normalizedBoilerplate) {
|
|
191
|
-
logger_1.logger.debug(`Section "${section.name}" is too similar to boilerplate (only whitespace differences)`);
|
|
192
|
-
return `Section "${section.name}" (line ${section.lineNumber}) is too similar to boilerplate (only whitespace differences)`;
|
|
193
|
-
}
|
|
194
|
-
// Check if content is just a subset of boilerplate (very short)
|
|
195
|
-
if (content.length < 50) {
|
|
196
|
-
logger_1.logger.debug(`Section "${section.name}" is too short (${content.length} < 50 characters)`);
|
|
197
|
-
return `Section "${section.name}" (line ${section.lineNumber}) appears to be incomplete (too short)`;
|
|
198
|
-
}
|
|
199
|
-
logger_1.logger.debug(`Section "${section.name}" content validation passed`);
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Normalize whitespace for comparison
|
|
204
|
-
*/
|
|
205
|
-
function normalizeWhitespace(text) {
|
|
206
|
-
return text
|
|
207
|
-
.replace(/\s+/g, " ")
|
|
208
|
-
.replace(/\n+/g, "\n")
|
|
209
|
-
.trim();
|
|
210
|
-
}
|
|
211
|
-
//# sourceMappingURL=validator.js.map
|
package/dist/validator.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|