@0disoft/mensor-contract 0.1.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/LICENSE +201 -0
- package/dist/spec/diagnostic-report-v1.schema.json +735 -0
- package/dist/spec/feature-contract-v1.schema.json +257 -0
- package/dist/spec/project-contract-v1.schema.json +132 -0
- package/dist/spec/route-index-v1.schema.json +78 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/jsonc.d.ts +4 -0
- package/dist/src/jsonc.d.ts.map +1 -0
- package/dist/src/jsonc.js +132 -0
- package/dist/src/jsonc.js.map +1 -0
- package/dist/src/route-index.d.ts +4 -0
- package/dist/src/route-index.d.ts.map +1 -0
- package/dist/src/route-index.js +120 -0
- package/dist/src/route-index.js.map +1 -0
- package/dist/src/schemas.d.ts +8 -0
- package/dist/src/schemas.d.ts.map +1 -0
- package/dist/src/schemas.js +40 -0
- package/dist/src/schemas.js.map +1 -0
- package/dist/src/types.d.ts +385 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/validate.d.ts +5 -0
- package/dist/src/validate.d.ts.map +1 -0
- package/dist/src/validate.js +102 -0
- package/dist/src/validate.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { parseJsonc } from "./jsonc.js";
|
|
2
|
+
import { schemaIssues, validateRouteIndex } from "./schemas.js";
|
|
3
|
+
const windowsReservedName = /^(?:aux|con|nul|prn|com[1-9]|lpt[1-9])(?:\..*)?$/iu;
|
|
4
|
+
export function parseRouteIndex(text) {
|
|
5
|
+
const parsed = parseJsonc(text);
|
|
6
|
+
if (!parsed.ok) {
|
|
7
|
+
return parsed;
|
|
8
|
+
}
|
|
9
|
+
if (!validateRouteIndex(parsed.value)) {
|
|
10
|
+
return { ok: false, issues: schemaIssues(validateRouteIndex) };
|
|
11
|
+
}
|
|
12
|
+
const issues = routeIndexSemanticIssues(parsed.value);
|
|
13
|
+
if (issues.length > 0) {
|
|
14
|
+
return { ok: false, issues };
|
|
15
|
+
}
|
|
16
|
+
const canonical = canonicalRouteIndex(parsed.value);
|
|
17
|
+
if (serializeRouteIndex(canonical) !== text) {
|
|
18
|
+
return {
|
|
19
|
+
ok: false,
|
|
20
|
+
issues: [semanticIssue("", "RouteIndex must use canonical JSON encoding.")],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return { ok: true, value: canonical };
|
|
24
|
+
}
|
|
25
|
+
export function serializeRouteIndex(value) {
|
|
26
|
+
if (!validateRouteIndex(value)) {
|
|
27
|
+
const issue = schemaIssues(validateRouteIndex)[0];
|
|
28
|
+
throw new TypeError(`RouteIndex cannot be serialized: ${issue?.message ?? "schema validation failed"}`);
|
|
29
|
+
}
|
|
30
|
+
const issues = routeIndexSemanticIssues(value);
|
|
31
|
+
if (issues.length > 0) {
|
|
32
|
+
throw new TypeError(`RouteIndex cannot be serialized: ${issues[0]?.message}`);
|
|
33
|
+
}
|
|
34
|
+
return `${JSON.stringify(canonicalRouteIndex(value), null, 2)}\n`;
|
|
35
|
+
}
|
|
36
|
+
function canonicalRouteIndex(value) {
|
|
37
|
+
return {
|
|
38
|
+
schemaVersion: 1,
|
|
39
|
+
producer: {
|
|
40
|
+
name: value.producer.name,
|
|
41
|
+
version: value.producer.version,
|
|
42
|
+
},
|
|
43
|
+
routes: [...value.routes]
|
|
44
|
+
.sort(compareRoutes)
|
|
45
|
+
.map((route) => ({
|
|
46
|
+
method: route.method,
|
|
47
|
+
path: route.path,
|
|
48
|
+
source: {
|
|
49
|
+
file: route.source.file,
|
|
50
|
+
contentDigest: route.source.contentDigest,
|
|
51
|
+
range: {
|
|
52
|
+
start: {
|
|
53
|
+
line: route.source.range.start.line,
|
|
54
|
+
character: route.source.range.start.character,
|
|
55
|
+
},
|
|
56
|
+
end: {
|
|
57
|
+
line: route.source.range.end.line,
|
|
58
|
+
character: route.source.range.end.character,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function routeIndexSemanticIssues(value) {
|
|
66
|
+
const issues = [];
|
|
67
|
+
const routeKeys = new Set();
|
|
68
|
+
value.routes.forEach((route, index) => {
|
|
69
|
+
if (!portableSourcePath(route.source.file)) {
|
|
70
|
+
issues.push(semanticIssue(`/routes/${index}/source/file`, "Route source file must be a portable project-relative POSIX path."));
|
|
71
|
+
}
|
|
72
|
+
if (!rangeIsOrdered(route.source.range)) {
|
|
73
|
+
issues.push(semanticIssue(`/routes/${index}/source/range`, "Route source range start must not follow its end."));
|
|
74
|
+
}
|
|
75
|
+
const key = `${route.method}\u0000${route.path}`;
|
|
76
|
+
if (routeKeys.has(key)) {
|
|
77
|
+
issues.push(semanticIssue(`/routes/${index}`, "Route method and path pairs must be unique."));
|
|
78
|
+
}
|
|
79
|
+
routeKeys.add(key);
|
|
80
|
+
});
|
|
81
|
+
return issues;
|
|
82
|
+
}
|
|
83
|
+
function portableSourcePath(value) {
|
|
84
|
+
return value.split("/").every((segment) => segment.length > 0
|
|
85
|
+
&& segment !== "."
|
|
86
|
+
&& segment !== ".."
|
|
87
|
+
&& !segment.includes(":")
|
|
88
|
+
&& !segment.endsWith(".")
|
|
89
|
+
&& !segment.endsWith(" ")
|
|
90
|
+
&& !windowsReservedName.test(segment));
|
|
91
|
+
}
|
|
92
|
+
function compareRoutes(left, right) {
|
|
93
|
+
return compareText(left.method, right.method)
|
|
94
|
+
|| compareText(left.path, right.path)
|
|
95
|
+
|| compareText(left.source.file, right.source.file)
|
|
96
|
+
|| compareRanges(left.source.range, right.source.range);
|
|
97
|
+
}
|
|
98
|
+
function compareText(left, right) {
|
|
99
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
100
|
+
}
|
|
101
|
+
function compareRanges(left, right) {
|
|
102
|
+
return comparePositions(left.start, right.start)
|
|
103
|
+
|| comparePositions(left.end, right.end);
|
|
104
|
+
}
|
|
105
|
+
function comparePositions(left, right) {
|
|
106
|
+
return left.line - right.line || left.character - right.character;
|
|
107
|
+
}
|
|
108
|
+
function rangeIsOrdered(range) {
|
|
109
|
+
return comparePositions(range.start, range.end) <= 0;
|
|
110
|
+
}
|
|
111
|
+
function semanticIssue(instancePath, message) {
|
|
112
|
+
return {
|
|
113
|
+
code: "schema.violation",
|
|
114
|
+
message,
|
|
115
|
+
instancePath,
|
|
116
|
+
schemaPath: "#/$semantic",
|
|
117
|
+
keyword: "semantic",
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=route-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-index.js","sourceRoot":"","sources":["../../src/route-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ValidateFunction } from "ajv/dist/2020.js";
|
|
2
|
+
import type { ContractIssue, DiagnosticReport, FeatureContract, ProjectContract, RouteIndex } from "./types.js";
|
|
3
|
+
export declare const validateProjectContract: ValidateFunction<ProjectContract>;
|
|
4
|
+
export declare const validateFeatureContract: ValidateFunction<FeatureContract>;
|
|
5
|
+
export declare const validateDiagnosticReport: ValidateFunction<DiagnosticReport>;
|
|
6
|
+
export declare const validateRouteIndex: ValidateFunction<RouteIndex>;
|
|
7
|
+
export declare function schemaIssues(validator: ValidateFunction): readonly ContractIssue[];
|
|
8
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,UAAU,EACX,MAAM,YAAY,CAAC;AAYpB,eAAO,MAAM,uBAAuB,mCAEnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,mCAEnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,oCAEpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,8BAA4C,CAAC;AAE5E,wBAAgB,YAAY,CAC1B,SAAS,EAAE,gBAAgB,GAC1B,SAAS,aAAa,EAAE,CAU1B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Ajv2020, } from "ajv/dist/2020.js";
|
|
2
|
+
import diagnosticReportSchema from "../spec/diagnostic-report-v1.schema.json" with { type: "json" };
|
|
3
|
+
import featureContractSchema from "../spec/feature-contract-v1.schema.json" with { type: "json" };
|
|
4
|
+
import projectContractSchema from "../spec/project-contract-v1.schema.json" with { type: "json" };
|
|
5
|
+
import routeIndexSchema from "../spec/route-index-v1.schema.json" with { type: "json" };
|
|
6
|
+
const ajv = new Ajv2020({
|
|
7
|
+
allErrors: true,
|
|
8
|
+
coerceTypes: false,
|
|
9
|
+
messages: true,
|
|
10
|
+
removeAdditional: false,
|
|
11
|
+
strict: true,
|
|
12
|
+
useDefaults: false,
|
|
13
|
+
validateFormats: false,
|
|
14
|
+
});
|
|
15
|
+
export const validateProjectContract = ajv.compile(projectContractSchema);
|
|
16
|
+
export const validateFeatureContract = ajv.compile(featureContractSchema);
|
|
17
|
+
export const validateDiagnosticReport = ajv.compile(diagnosticReportSchema);
|
|
18
|
+
export const validateRouteIndex = ajv.compile(routeIndexSchema);
|
|
19
|
+
export function schemaIssues(validator) {
|
|
20
|
+
return [...(validator.errors ?? [])]
|
|
21
|
+
.sort(compareSchemaErrors)
|
|
22
|
+
.map((error) => ({
|
|
23
|
+
code: "schema.violation",
|
|
24
|
+
message: schemaErrorMessage(error),
|
|
25
|
+
instancePath: error.instancePath,
|
|
26
|
+
schemaPath: error.schemaPath,
|
|
27
|
+
keyword: error.keyword,
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
function compareSchemaErrors(left, right) {
|
|
31
|
+
return (left.instancePath.localeCompare(right.instancePath) ||
|
|
32
|
+
left.schemaPath.localeCompare(right.schemaPath) ||
|
|
33
|
+
left.keyword.localeCompare(right.keyword) ||
|
|
34
|
+
(left.message ?? "").localeCompare(right.message ?? ""));
|
|
35
|
+
}
|
|
36
|
+
function schemaErrorMessage(error) {
|
|
37
|
+
const location = error.instancePath === "" ? "/" : error.instancePath;
|
|
38
|
+
return `${location} ${error.message ?? "does not satisfy the schema"}.`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,GAGR,MAAM,kBAAkB,CAAC;AAE1B,OAAO,sBAAsB,MAAM,0CAA0C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpG,OAAO,qBAAqB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClG,OAAO,qBAAqB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClG,OAAO,gBAAgB,MAAM,oCAAoC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAUxF,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC;IACtB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,KAAK;IACvB,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,KAAK;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAChD,qBAAqB,CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAChD,qBAAqB,CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC,OAAO,CACjD,sBAAsB,CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAa,gBAAgB,CAAC,CAAC;AAE5E,MAAM,UAAU,YAAY,CAC1B,SAA2B;IAE3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;SACjC,IAAI,CAAC,mBAAmB,CAAC;SACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,IAAI,EAAE,kBAA2B;QACjC,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAiB,EAAE,KAAkB;IAChE,OAAO,CACL,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QACzC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IACtE,OAAO,GAAG,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,6BAA6B,GAAG,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
2
|
+
export type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[];
|
|
3
|
+
export interface JsonObject {
|
|
4
|
+
readonly [key: string]: JsonValue;
|
|
5
|
+
}
|
|
6
|
+
export type ContractIssueCode = "jsonc.empty" | "jsonc.syntax" | "jsonc.duplicate_key" | "schema.violation";
|
|
7
|
+
export interface ContractIssue {
|
|
8
|
+
readonly code: ContractIssueCode;
|
|
9
|
+
readonly message: string;
|
|
10
|
+
readonly offset?: number;
|
|
11
|
+
readonly length?: number;
|
|
12
|
+
readonly instancePath?: string;
|
|
13
|
+
readonly schemaPath?: string;
|
|
14
|
+
readonly keyword?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ContractSuccess<T> {
|
|
17
|
+
readonly ok: true;
|
|
18
|
+
readonly value: T;
|
|
19
|
+
}
|
|
20
|
+
export interface ContractFailure {
|
|
21
|
+
readonly ok: false;
|
|
22
|
+
readonly issues: readonly ContractIssue[];
|
|
23
|
+
}
|
|
24
|
+
export type ContractResult<T> = ContractSuccess<T> | ContractFailure;
|
|
25
|
+
export interface ProjectContract {
|
|
26
|
+
readonly $schema?: string;
|
|
27
|
+
readonly version: 1;
|
|
28
|
+
readonly sourceRoot: string;
|
|
29
|
+
readonly featureContracts: readonly string[];
|
|
30
|
+
readonly fileRoles: readonly FileRoleContract[];
|
|
31
|
+
readonly boundaries?: readonly BoundaryContract[];
|
|
32
|
+
readonly ownershipRules?: readonly OwnershipRuleContract[];
|
|
33
|
+
readonly routeIndex?: string;
|
|
34
|
+
}
|
|
35
|
+
export type ContentDigest = `sha256:${string}`;
|
|
36
|
+
export interface RouteIndex {
|
|
37
|
+
readonly schemaVersion: 1;
|
|
38
|
+
readonly producer: {
|
|
39
|
+
readonly name: string;
|
|
40
|
+
readonly version: string;
|
|
41
|
+
};
|
|
42
|
+
readonly routes: readonly IndexedRoute[];
|
|
43
|
+
}
|
|
44
|
+
export interface IndexedRoute {
|
|
45
|
+
readonly method: "GET" | "POST";
|
|
46
|
+
readonly path: string;
|
|
47
|
+
readonly source: {
|
|
48
|
+
readonly file: string;
|
|
49
|
+
readonly contentDigest: ContentDigest;
|
|
50
|
+
readonly range: SourceRange;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export interface BoundaryContract {
|
|
54
|
+
readonly id: string;
|
|
55
|
+
readonly mode: "direct" | "transitive";
|
|
56
|
+
readonly from: readonly string[];
|
|
57
|
+
readonly deny: readonly string[];
|
|
58
|
+
}
|
|
59
|
+
export interface OwnershipRuleContract {
|
|
60
|
+
readonly id: string;
|
|
61
|
+
readonly kind: "i18n" | "test";
|
|
62
|
+
readonly suffixes: readonly string[];
|
|
63
|
+
readonly withinFeature: string;
|
|
64
|
+
}
|
|
65
|
+
export interface FileRoleContract {
|
|
66
|
+
readonly role: string;
|
|
67
|
+
readonly withinFeature: string;
|
|
68
|
+
}
|
|
69
|
+
export interface StringSchema {
|
|
70
|
+
readonly kind: "string";
|
|
71
|
+
readonly minLength?: number;
|
|
72
|
+
readonly maxLength?: number;
|
|
73
|
+
}
|
|
74
|
+
export interface ObjectSchema {
|
|
75
|
+
readonly kind: "object";
|
|
76
|
+
readonly properties: Readonly<Record<string, StringSchema>>;
|
|
77
|
+
readonly required: readonly string[];
|
|
78
|
+
}
|
|
79
|
+
export interface TextDecoder {
|
|
80
|
+
readonly kind: "text";
|
|
81
|
+
readonly trim: boolean;
|
|
82
|
+
readonly empty: "allow" | "reject";
|
|
83
|
+
}
|
|
84
|
+
export interface FormBinding {
|
|
85
|
+
readonly name: string;
|
|
86
|
+
readonly path: readonly string[];
|
|
87
|
+
readonly decode: TextDecoder;
|
|
88
|
+
}
|
|
89
|
+
export interface IgnoredFormField {
|
|
90
|
+
readonly name: string;
|
|
91
|
+
readonly consumer: string;
|
|
92
|
+
}
|
|
93
|
+
export interface FormCodec {
|
|
94
|
+
readonly encoding: "urlencoded";
|
|
95
|
+
readonly unknownFields: "reject";
|
|
96
|
+
readonly bindings: readonly FormBinding[];
|
|
97
|
+
readonly ignoredFields?: readonly IgnoredFormField[];
|
|
98
|
+
}
|
|
99
|
+
export interface ActionContract {
|
|
100
|
+
readonly id: string;
|
|
101
|
+
readonly route: {
|
|
102
|
+
readonly method: "POST";
|
|
103
|
+
readonly path: string;
|
|
104
|
+
};
|
|
105
|
+
readonly form: {
|
|
106
|
+
readonly template: string;
|
|
107
|
+
readonly id: string;
|
|
108
|
+
readonly documentPath?: string;
|
|
109
|
+
};
|
|
110
|
+
readonly handler: {
|
|
111
|
+
readonly file: string;
|
|
112
|
+
readonly export: string;
|
|
113
|
+
readonly role: string;
|
|
114
|
+
};
|
|
115
|
+
readonly input: {
|
|
116
|
+
readonly schema: ObjectSchema;
|
|
117
|
+
readonly formCodec: FormCodec;
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export interface FeatureContract {
|
|
121
|
+
readonly $schema?: string;
|
|
122
|
+
readonly version: 1;
|
|
123
|
+
readonly feature: {
|
|
124
|
+
readonly id: string;
|
|
125
|
+
};
|
|
126
|
+
readonly actions: readonly ActionContract[];
|
|
127
|
+
}
|
|
128
|
+
export interface SourcePosition {
|
|
129
|
+
readonly line: number;
|
|
130
|
+
readonly character: number;
|
|
131
|
+
}
|
|
132
|
+
export interface SourceRange {
|
|
133
|
+
readonly start: SourcePosition;
|
|
134
|
+
readonly end: SourcePosition;
|
|
135
|
+
}
|
|
136
|
+
export interface RelatedLocation {
|
|
137
|
+
readonly role: string;
|
|
138
|
+
readonly message: string;
|
|
139
|
+
readonly file: string;
|
|
140
|
+
readonly range: SourceRange;
|
|
141
|
+
}
|
|
142
|
+
export interface RepairInstruction {
|
|
143
|
+
readonly strategy: string;
|
|
144
|
+
readonly hint: string;
|
|
145
|
+
readonly mustPreserve: readonly string[];
|
|
146
|
+
readonly mustNot: readonly string[];
|
|
147
|
+
}
|
|
148
|
+
export interface FormFieldMissingFacts {
|
|
149
|
+
readonly actionId: string;
|
|
150
|
+
readonly fieldName: string;
|
|
151
|
+
readonly formId: string;
|
|
152
|
+
readonly schemaPath: readonly string[];
|
|
153
|
+
readonly template: string;
|
|
154
|
+
}
|
|
155
|
+
export interface FormFieldMissingDiagnostic {
|
|
156
|
+
readonly code: "form.field_missing";
|
|
157
|
+
readonly severity: "error";
|
|
158
|
+
readonly category: "form-contract";
|
|
159
|
+
readonly message: string;
|
|
160
|
+
readonly file: string;
|
|
161
|
+
readonly range: SourceRange;
|
|
162
|
+
readonly facts: FormFieldMissingFacts;
|
|
163
|
+
readonly related: readonly RelatedLocation[];
|
|
164
|
+
readonly repair: RepairInstruction;
|
|
165
|
+
}
|
|
166
|
+
export interface FormFieldUnexpectedFacts {
|
|
167
|
+
readonly actionId: string;
|
|
168
|
+
readonly fieldName: string;
|
|
169
|
+
readonly formId: string;
|
|
170
|
+
readonly template: string;
|
|
171
|
+
readonly unknownFieldsPolicy: "reject";
|
|
172
|
+
}
|
|
173
|
+
export interface FormFieldUnexpectedDiagnostic {
|
|
174
|
+
readonly code: "form.field_unexpected";
|
|
175
|
+
readonly severity: "error";
|
|
176
|
+
readonly category: "form-contract";
|
|
177
|
+
readonly message: string;
|
|
178
|
+
readonly file: string;
|
|
179
|
+
readonly range: SourceRange;
|
|
180
|
+
readonly facts: FormFieldUnexpectedFacts;
|
|
181
|
+
readonly related: readonly RelatedLocation[];
|
|
182
|
+
readonly repair: RepairInstruction;
|
|
183
|
+
}
|
|
184
|
+
export interface FormMethodMismatchFacts {
|
|
185
|
+
readonly actionId: string;
|
|
186
|
+
readonly actualMethod: string;
|
|
187
|
+
readonly expectedMethod: "POST";
|
|
188
|
+
readonly formId: string;
|
|
189
|
+
readonly template: string;
|
|
190
|
+
}
|
|
191
|
+
export interface FormMethodMismatchDiagnostic {
|
|
192
|
+
readonly code: "form.method_mismatch";
|
|
193
|
+
readonly severity: "error";
|
|
194
|
+
readonly category: "form-contract";
|
|
195
|
+
readonly message: string;
|
|
196
|
+
readonly file: string;
|
|
197
|
+
readonly range: SourceRange;
|
|
198
|
+
readonly facts: FormMethodMismatchFacts;
|
|
199
|
+
readonly related: readonly RelatedLocation[];
|
|
200
|
+
readonly repair: RepairInstruction;
|
|
201
|
+
}
|
|
202
|
+
export interface FormActionMismatchFacts {
|
|
203
|
+
readonly actionId: string;
|
|
204
|
+
readonly actualAction: string;
|
|
205
|
+
readonly actualActionSource: "literal" | "current-document";
|
|
206
|
+
readonly expectedAction: string;
|
|
207
|
+
readonly formId: string;
|
|
208
|
+
readonly template: string;
|
|
209
|
+
}
|
|
210
|
+
export interface FormActionMismatchDiagnostic {
|
|
211
|
+
readonly code: "form.action_mismatch";
|
|
212
|
+
readonly severity: "error";
|
|
213
|
+
readonly category: "form-contract";
|
|
214
|
+
readonly message: string;
|
|
215
|
+
readonly file: string;
|
|
216
|
+
readonly range: SourceRange;
|
|
217
|
+
readonly facts: FormActionMismatchFacts;
|
|
218
|
+
readonly related: readonly RelatedLocation[];
|
|
219
|
+
readonly repair: RepairInstruction;
|
|
220
|
+
}
|
|
221
|
+
export interface FormControlCodecMismatchFacts {
|
|
222
|
+
readonly actionId: string;
|
|
223
|
+
readonly controlKind: "input" | "select";
|
|
224
|
+
readonly controlCount?: number;
|
|
225
|
+
readonly controlType: string;
|
|
226
|
+
readonly decoderKind: "text";
|
|
227
|
+
readonly fieldName: string;
|
|
228
|
+
readonly formId: string;
|
|
229
|
+
readonly multiple: boolean;
|
|
230
|
+
readonly template: string;
|
|
231
|
+
}
|
|
232
|
+
export interface FormControlCodecMismatchDiagnostic {
|
|
233
|
+
readonly code: "form.control_codec_mismatch";
|
|
234
|
+
readonly severity: "error";
|
|
235
|
+
readonly category: "form-contract";
|
|
236
|
+
readonly message: string;
|
|
237
|
+
readonly file: string;
|
|
238
|
+
readonly range: SourceRange;
|
|
239
|
+
readonly facts: FormControlCodecMismatchFacts;
|
|
240
|
+
readonly related: readonly RelatedLocation[];
|
|
241
|
+
readonly repair: RepairInstruction;
|
|
242
|
+
}
|
|
243
|
+
export interface FormControlUnsupportedFacts {
|
|
244
|
+
readonly actionId: string;
|
|
245
|
+
readonly controlKind: "button" | "input";
|
|
246
|
+
readonly controlType: string;
|
|
247
|
+
readonly fieldName: string;
|
|
248
|
+
readonly formId: string;
|
|
249
|
+
readonly reason: "file-input" | "named-submitter" | "submitter-route-override";
|
|
250
|
+
readonly template: string;
|
|
251
|
+
}
|
|
252
|
+
export interface FormControlUnsupportedDiagnostic {
|
|
253
|
+
readonly code: "form.control_unsupported";
|
|
254
|
+
readonly severity: "error";
|
|
255
|
+
readonly category: "form-contract";
|
|
256
|
+
readonly message: string;
|
|
257
|
+
readonly file: string;
|
|
258
|
+
readonly range: SourceRange;
|
|
259
|
+
readonly facts: FormControlUnsupportedFacts;
|
|
260
|
+
readonly related: readonly RelatedLocation[];
|
|
261
|
+
readonly repair: RepairInstruction;
|
|
262
|
+
}
|
|
263
|
+
export interface HandlerExportMissingFacts {
|
|
264
|
+
readonly actionId: string;
|
|
265
|
+
readonly exportName: string;
|
|
266
|
+
readonly handlerFile: string;
|
|
267
|
+
}
|
|
268
|
+
export interface HandlerExportMissingDiagnostic {
|
|
269
|
+
readonly code: "handler.export_missing";
|
|
270
|
+
readonly severity: "error";
|
|
271
|
+
readonly category: "project-structure";
|
|
272
|
+
readonly message: string;
|
|
273
|
+
readonly file: string;
|
|
274
|
+
readonly range: SourceRange;
|
|
275
|
+
readonly facts: HandlerExportMissingFacts;
|
|
276
|
+
readonly related: readonly RelatedLocation[];
|
|
277
|
+
readonly repair: RepairInstruction;
|
|
278
|
+
}
|
|
279
|
+
export interface RouteMissingFacts {
|
|
280
|
+
readonly actionId: string;
|
|
281
|
+
readonly expectedMethod: "POST";
|
|
282
|
+
readonly expectedPath: string;
|
|
283
|
+
readonly routeIndex: string;
|
|
284
|
+
readonly sameMethodPaths: readonly string[];
|
|
285
|
+
}
|
|
286
|
+
export interface RouteMissingDiagnostic {
|
|
287
|
+
readonly code: "route.missing";
|
|
288
|
+
readonly severity: "error";
|
|
289
|
+
readonly category: "route-contract";
|
|
290
|
+
readonly message: string;
|
|
291
|
+
readonly file: string;
|
|
292
|
+
readonly range: SourceRange;
|
|
293
|
+
readonly facts: RouteMissingFacts;
|
|
294
|
+
readonly related: readonly RelatedLocation[];
|
|
295
|
+
readonly repair: RepairInstruction;
|
|
296
|
+
}
|
|
297
|
+
export interface ModuleBoundaryViolationFacts {
|
|
298
|
+
readonly boundaryId: string;
|
|
299
|
+
readonly edgeKind: "runtime" | "type";
|
|
300
|
+
readonly importChain: readonly string[];
|
|
301
|
+
readonly importSpecifier: string;
|
|
302
|
+
readonly mode: "direct" | "transitive";
|
|
303
|
+
readonly sourceRole: string;
|
|
304
|
+
readonly targetFile: string;
|
|
305
|
+
readonly targetRole: string;
|
|
306
|
+
}
|
|
307
|
+
export interface ModuleBoundaryViolationDiagnostic {
|
|
308
|
+
readonly code: "module.boundary_violation";
|
|
309
|
+
readonly severity: "error";
|
|
310
|
+
readonly category: "environment-boundary";
|
|
311
|
+
readonly message: string;
|
|
312
|
+
readonly file: string;
|
|
313
|
+
readonly range: SourceRange;
|
|
314
|
+
readonly facts: ModuleBoundaryViolationFacts;
|
|
315
|
+
readonly related: readonly RelatedLocation[];
|
|
316
|
+
readonly repair: RepairInstruction;
|
|
317
|
+
}
|
|
318
|
+
export interface ModuleDynamicImportUnsupportedFacts {
|
|
319
|
+
readonly boundaryId: string;
|
|
320
|
+
readonly mode: "direct" | "transitive";
|
|
321
|
+
readonly sourceRole: string;
|
|
322
|
+
}
|
|
323
|
+
export interface ModuleDynamicImportUnsupportedDiagnostic {
|
|
324
|
+
readonly code: "module.dynamic_import_unsupported";
|
|
325
|
+
readonly severity: "error";
|
|
326
|
+
readonly category: "environment-boundary";
|
|
327
|
+
readonly message: string;
|
|
328
|
+
readonly file: string;
|
|
329
|
+
readonly range: SourceRange;
|
|
330
|
+
readonly facts: ModuleDynamicImportUnsupportedFacts;
|
|
331
|
+
readonly related: readonly RelatedLocation[];
|
|
332
|
+
readonly repair: RepairInstruction;
|
|
333
|
+
}
|
|
334
|
+
export interface FileOwnershipMismatchFacts {
|
|
335
|
+
readonly actualPath: string;
|
|
336
|
+
readonly expectedWithinFeature: string;
|
|
337
|
+
readonly featureId: string | null;
|
|
338
|
+
readonly kind: "i18n" | "test";
|
|
339
|
+
readonly ruleId: string;
|
|
340
|
+
}
|
|
341
|
+
export interface FileOwnershipMismatchDiagnostic {
|
|
342
|
+
readonly code: "file.ownership_mismatch";
|
|
343
|
+
readonly severity: "error";
|
|
344
|
+
readonly category: "project-structure";
|
|
345
|
+
readonly message: string;
|
|
346
|
+
readonly file: string;
|
|
347
|
+
readonly range: SourceRange;
|
|
348
|
+
readonly facts: FileOwnershipMismatchFacts;
|
|
349
|
+
readonly related: readonly RelatedLocation[];
|
|
350
|
+
readonly repair: RepairInstruction;
|
|
351
|
+
}
|
|
352
|
+
export interface FileRoleMismatchFacts {
|
|
353
|
+
readonly actionId: string;
|
|
354
|
+
readonly actualRole: string;
|
|
355
|
+
readonly expectedRole: string;
|
|
356
|
+
readonly expectedWithinFeature: string;
|
|
357
|
+
readonly featureId: string;
|
|
358
|
+
readonly handlerFile: string;
|
|
359
|
+
}
|
|
360
|
+
export interface FileRoleMismatchDiagnostic {
|
|
361
|
+
readonly code: "file.role_mismatch";
|
|
362
|
+
readonly severity: "error";
|
|
363
|
+
readonly category: "project-structure";
|
|
364
|
+
readonly message: string;
|
|
365
|
+
readonly file: string;
|
|
366
|
+
readonly range: SourceRange;
|
|
367
|
+
readonly facts: FileRoleMismatchFacts;
|
|
368
|
+
readonly related: readonly RelatedLocation[];
|
|
369
|
+
readonly repair: RepairInstruction;
|
|
370
|
+
}
|
|
371
|
+
export type Diagnostic = FileOwnershipMismatchDiagnostic | FileRoleMismatchDiagnostic | FormActionMismatchDiagnostic | FormControlCodecMismatchDiagnostic | FormControlUnsupportedDiagnostic | FormFieldMissingDiagnostic | FormFieldUnexpectedDiagnostic | FormMethodMismatchDiagnostic | HandlerExportMissingDiagnostic | RouteMissingDiagnostic | ModuleBoundaryViolationDiagnostic | ModuleDynamicImportUnsupportedDiagnostic;
|
|
372
|
+
export interface DiagnosticReport {
|
|
373
|
+
readonly schemaVersion: 1;
|
|
374
|
+
readonly producer: {
|
|
375
|
+
readonly name: "mensor";
|
|
376
|
+
readonly version: string;
|
|
377
|
+
};
|
|
378
|
+
readonly status: "passed" | "failed";
|
|
379
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
380
|
+
readonly summary: {
|
|
381
|
+
readonly errorCount: number;
|
|
382
|
+
readonly warningCount: number;
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ContractResult, DiagnosticReport, FeatureContract, ProjectContract } from "./types.js";
|
|
2
|
+
export declare function parseProjectContract(text: string): ContractResult<ProjectContract>;
|
|
3
|
+
export declare function parseFeatureContract(text: string): ContractResult<FeatureContract>;
|
|
4
|
+
export declare function parseDiagnosticReport(text: string): ContractResult<DiagnosticReport>;
|
|
5
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,cAAc,CAAC,eAAe,CAAC,CAEjC;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,cAAc,CAAC,eAAe,CAAC,CAGjC;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GACX,cAAc,CAAC,gBAAgB,CAAC,CAGlC"}
|