@ai-dossier/core 1.0.1
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/checksum.d.ts +15 -0
- package/dist/checksum.d.ts.map +1 -0
- package/dist/checksum.js +45 -0
- package/dist/checksum.js.map +1 -0
- package/dist/formatter/formatter.d.ts +3 -0
- package/dist/formatter/formatter.d.ts.map +1 -0
- package/dist/formatter/formatter.js +120 -0
- package/dist/formatter/formatter.js.map +1 -0
- package/dist/formatter/index.d.ts +5 -0
- package/dist/formatter/index.d.ts.map +1 -0
- package/dist/formatter/index.js +32 -0
- package/dist/formatter/index.js.map +1 -0
- package/dist/formatter/types.d.ts +11 -0
- package/dist/formatter/types.d.ts.map +1 -0
- package/dist/formatter/types.js +9 -0
- package/dist/formatter/types.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/linter/config.d.ts +4 -0
- package/dist/linter/config.d.ts.map +1 -0
- package/dist/linter/config.js +42 -0
- package/dist/linter/config.js.map +1 -0
- package/dist/linter/index.d.ts +8 -0
- package/dist/linter/index.d.ts.map +1 -0
- package/dist/linter/index.js +69 -0
- package/dist/linter/index.js.map +1 -0
- package/dist/linter/registry.d.ts +10 -0
- package/dist/linter/registry.d.ts.map +1 -0
- package/dist/linter/registry.js +37 -0
- package/dist/linter/registry.js.map +1 -0
- package/dist/linter/rules/checksum-valid.d.ts +3 -0
- package/dist/linter/rules/checksum-valid.d.ts.map +1 -0
- package/dist/linter/rules/checksum-valid.js +46 -0
- package/dist/linter/rules/checksum-valid.js.map +1 -0
- package/dist/linter/rules/index.d.ts +11 -0
- package/dist/linter/rules/index.d.ts.map +1 -0
- package/dist/linter/rules/index.js +27 -0
- package/dist/linter/rules/index.js.map +1 -0
- package/dist/linter/rules/objective-quality.d.ts +3 -0
- package/dist/linter/rules/objective-quality.d.ts.map +1 -0
- package/dist/linter/rules/objective-quality.js +44 -0
- package/dist/linter/rules/objective-quality.js.map +1 -0
- package/dist/linter/rules/required-sections.d.ts +3 -0
- package/dist/linter/rules/required-sections.d.ts.map +1 -0
- package/dist/linter/rules/required-sections.js +32 -0
- package/dist/linter/rules/required-sections.js.map +1 -0
- package/dist/linter/rules/risk-level-consistency.d.ts +3 -0
- package/dist/linter/rules/risk-level-consistency.d.ts.map +1 -0
- package/dist/linter/rules/risk-level-consistency.js +24 -0
- package/dist/linter/rules/risk-level-consistency.js.map +1 -0
- package/dist/linter/rules/schema-valid.d.ts +3 -0
- package/dist/linter/rules/schema-valid.d.ts.map +1 -0
- package/dist/linter/rules/schema-valid.js +63 -0
- package/dist/linter/rules/schema-valid.js.map +1 -0
- package/dist/linter/rules/semver-version.d.ts +3 -0
- package/dist/linter/rules/semver-version.d.ts.map +1 -0
- package/dist/linter/rules/semver-version.js +34 -0
- package/dist/linter/rules/semver-version.js.map +1 -0
- package/dist/linter/rules/tools-check-command.d.ts +3 -0
- package/dist/linter/rules/tools-check-command.d.ts.map +1 -0
- package/dist/linter/rules/tools-check-command.js +27 -0
- package/dist/linter/rules/tools-check-command.js.map +1 -0
- package/dist/linter/types.d.ts +31 -0
- package/dist/linter/types.d.ts.map +1 -0
- package/dist/linter/types.js +3 -0
- package/dist/linter/types.js.map +1 -0
- package/dist/parser.d.ts +18 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +74 -0
- package/dist/parser.js.map +1 -0
- package/dist/schema/dossier-schema.json +745 -0
- package/dist/signature.d.ts +33 -0
- package/dist/signature.d.ts.map +1 -0
- package/dist/signature.js +111 -0
- package/dist/signature.js.map +1 -0
- package/dist/signers/ed25519.d.ts +17 -0
- package/dist/signers/ed25519.d.ts.map +1 -0
- package/dist/signers/ed25519.js +66 -0
- package/dist/signers/ed25519.js.map +1 -0
- package/dist/signers/index.d.ts +39 -0
- package/dist/signers/index.d.ts.map +1 -0
- package/dist/signers/index.js +18 -0
- package/dist/signers/index.js.map +1 -0
- package/dist/signers/kms.d.ts +20 -0
- package/dist/signers/kms.d.ts.map +1 -0
- package/dist/signers/kms.js +108 -0
- package/dist/signers/kms.js.map +1 -0
- package/dist/signers/registry.d.ts +29 -0
- package/dist/signers/registry.d.ts.map +1 -0
- package/dist/signers/registry.js +67 -0
- package/dist/signers/registry.js.map +1 -0
- package/dist/types.d.ts +79 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/crypto.d.ts +16 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +25 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/errors.d.ts +18 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +32 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/fs.d.ts +12 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +24 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/verification.d.ts +11 -0
- package/dist/utils/verification.d.ts.map +1 -0
- package/dist/utils/verification.js +35 -0
- package/dist/utils/verification.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checksum verification for dossier integrity
|
|
3
|
+
* Uses SHA256 hash of the body content (excluding frontmatter)
|
|
4
|
+
*/
|
|
5
|
+
import type { IntegrityResult } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Calculate SHA256 hash of dossier body
|
|
8
|
+
* CRITICAL: Hash is of the BODY only (after ---), not the entire file
|
|
9
|
+
*/
|
|
10
|
+
export declare function calculateChecksum(body: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Verify dossier integrity by comparing checksums
|
|
13
|
+
*/
|
|
14
|
+
export declare function verifyIntegrity(body: string, expectedHash: string | undefined): IntegrityResult;
|
|
15
|
+
//# sourceMappingURL=checksum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAyB/F"}
|
package/dist/checksum.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Checksum verification for dossier integrity
|
|
4
|
+
* Uses SHA256 hash of the body content (excluding frontmatter)
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.calculateChecksum = calculateChecksum;
|
|
8
|
+
exports.verifyIntegrity = verifyIntegrity;
|
|
9
|
+
const crypto_1 = require("./utils/crypto");
|
|
10
|
+
/**
|
|
11
|
+
* Calculate SHA256 hash of dossier body
|
|
12
|
+
* CRITICAL: Hash is of the BODY only (after ---), not the entire file
|
|
13
|
+
*/
|
|
14
|
+
function calculateChecksum(body) {
|
|
15
|
+
return (0, crypto_1.sha256Hex)(body);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Verify dossier integrity by comparing checksums
|
|
19
|
+
*/
|
|
20
|
+
function verifyIntegrity(body, expectedHash) {
|
|
21
|
+
if (!expectedHash) {
|
|
22
|
+
return {
|
|
23
|
+
status: 'missing',
|
|
24
|
+
message: 'No checksum found in dossier - cannot verify integrity',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const actualHash = calculateChecksum(body);
|
|
28
|
+
if (actualHash === expectedHash) {
|
|
29
|
+
return {
|
|
30
|
+
status: 'valid',
|
|
31
|
+
message: 'Checksum matches - content has not been tampered with',
|
|
32
|
+
expectedHash,
|
|
33
|
+
actualHash,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return {
|
|
38
|
+
status: 'invalid',
|
|
39
|
+
message: 'CHECKSUM MISMATCH - dossier has been tampered with!',
|
|
40
|
+
expectedHash,
|
|
41
|
+
actualHash,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=checksum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,8CAEC;AAKD,0CAyBC;AAtCD,2CAA2C;AAE3C;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,YAAgC;IAC5E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,wDAAwD;SAClE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO;YACL,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,uDAAuD;YAChE,YAAY;YACZ,UAAU;SACX,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,qDAAqD;YAC9D,YAAY;YACZ,UAAU;SACX,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/formatter/formatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAiG3D,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC/B,YAAY,CAmCd"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatDossierContent = formatDossierContent;
|
|
4
|
+
const checksum_1 = require("../checksum");
|
|
5
|
+
const parser_1 = require("../parser");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
/**
|
|
8
|
+
* Conventional key ordering for dossier frontmatter.
|
|
9
|
+
* Keys not in this list are sorted alphabetically after the known keys.
|
|
10
|
+
* checksum and signature are always last.
|
|
11
|
+
*/
|
|
12
|
+
const KEY_ORDER = [
|
|
13
|
+
'dossier_schema_version',
|
|
14
|
+
'title',
|
|
15
|
+
'version',
|
|
16
|
+
'protocol_version',
|
|
17
|
+
'status',
|
|
18
|
+
'last_updated',
|
|
19
|
+
'objective',
|
|
20
|
+
'category',
|
|
21
|
+
'tags',
|
|
22
|
+
'tools_required',
|
|
23
|
+
'estimated_duration',
|
|
24
|
+
'risk_level',
|
|
25
|
+
'risk_factors',
|
|
26
|
+
'requires_approval',
|
|
27
|
+
'destructive_operations',
|
|
28
|
+
'prerequisites',
|
|
29
|
+
'inputs',
|
|
30
|
+
'outputs',
|
|
31
|
+
'relationships',
|
|
32
|
+
'coupling',
|
|
33
|
+
'validation',
|
|
34
|
+
'rollback',
|
|
35
|
+
'authors',
|
|
36
|
+
'license',
|
|
37
|
+
'homepage',
|
|
38
|
+
'repository',
|
|
39
|
+
'custom',
|
|
40
|
+
'mcp_integration',
|
|
41
|
+
// Always last:
|
|
42
|
+
'checksum',
|
|
43
|
+
'signature',
|
|
44
|
+
];
|
|
45
|
+
function sortFrontmatterKeys(frontmatter) {
|
|
46
|
+
const sorted = {};
|
|
47
|
+
const knownSet = new Set(KEY_ORDER);
|
|
48
|
+
// Add known keys in order
|
|
49
|
+
for (const key of KEY_ORDER) {
|
|
50
|
+
if (key in frontmatter) {
|
|
51
|
+
sorted[key] = frontmatter[key];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Add unknown keys alphabetically
|
|
55
|
+
const unknownKeys = Object.keys(frontmatter)
|
|
56
|
+
.filter((k) => !knownSet.has(k))
|
|
57
|
+
.sort();
|
|
58
|
+
for (const key of unknownKeys) {
|
|
59
|
+
// Insert before checksum/signature
|
|
60
|
+
sorted[key] = frontmatter[key];
|
|
61
|
+
}
|
|
62
|
+
// If we added unknown keys, we need to re-order to ensure checksum/signature are last
|
|
63
|
+
if (unknownKeys.length > 0) {
|
|
64
|
+
const result = {};
|
|
65
|
+
const tailKeys = ['checksum', 'signature'];
|
|
66
|
+
for (const [k, v] of Object.entries(sorted)) {
|
|
67
|
+
if (!tailKeys.includes(k)) {
|
|
68
|
+
result[k] = v;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (const k of tailKeys) {
|
|
72
|
+
if (k in sorted) {
|
|
73
|
+
result[k] = sorted[k];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
return sorted;
|
|
79
|
+
}
|
|
80
|
+
function trimTrailingWhitespace(text) {
|
|
81
|
+
return text
|
|
82
|
+
.split('\n')
|
|
83
|
+
.map((line) => line.trimEnd())
|
|
84
|
+
.join('\n');
|
|
85
|
+
}
|
|
86
|
+
function ensureFinalNewline(text) {
|
|
87
|
+
if (!text.endsWith('\n')) {
|
|
88
|
+
return `${text}\n`;
|
|
89
|
+
}
|
|
90
|
+
return text;
|
|
91
|
+
}
|
|
92
|
+
function formatDossierContent(content, options) {
|
|
93
|
+
const opts = { ...types_1.defaultFormatOptions, ...options };
|
|
94
|
+
const parsed = (0, parser_1.parseDossierContent)(content);
|
|
95
|
+
let frontmatter = parsed.frontmatter;
|
|
96
|
+
if (opts.sortKeys) {
|
|
97
|
+
frontmatter = sortFrontmatterKeys(frontmatter);
|
|
98
|
+
}
|
|
99
|
+
// Normalize body: trim trailing whitespace per line, then trim trailing newlines from body
|
|
100
|
+
const body = trimTrailingWhitespace(parsed.body).replace(/\n+$/, '');
|
|
101
|
+
// Update checksum if enabled
|
|
102
|
+
if (opts.updateChecksum && frontmatter.checksum) {
|
|
103
|
+
const checksumObj = frontmatter.checksum;
|
|
104
|
+
if (checksumObj && typeof checksumObj === 'object') {
|
|
105
|
+
const newHash = (0, checksum_1.calculateChecksum)(body);
|
|
106
|
+
frontmatter.checksum = { ...checksumObj, hash: newHash };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Serialize frontmatter with controlled indentation
|
|
110
|
+
const jsonStr = JSON.stringify(frontmatter, null, opts.indent);
|
|
111
|
+
// Build the formatted output
|
|
112
|
+
let result = `---dossier\n${jsonStr}\n---\n${body}`;
|
|
113
|
+
// Ensure final newline
|
|
114
|
+
result = ensureFinalNewline(result);
|
|
115
|
+
return {
|
|
116
|
+
formatted: result,
|
|
117
|
+
changed: result !== content,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/formatter/formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FormatOptions, FormatResult } from './types';
|
|
2
|
+
export { formatDossierContent } from './formatter';
|
|
3
|
+
export * from './types';
|
|
4
|
+
export declare function formatDossierFile(filePath: string, options?: Partial<FormatOptions>): FormatResult;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatter/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,SAAS,CAAC;AAExB,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC/B,YAAY,CASd"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.formatDossierContent = void 0;
|
|
18
|
+
exports.formatDossierFile = formatDossierFile;
|
|
19
|
+
const node_fs_1 = require("node:fs");
|
|
20
|
+
const formatter_1 = require("./formatter");
|
|
21
|
+
var formatter_2 = require("./formatter");
|
|
22
|
+
Object.defineProperty(exports, "formatDossierContent", { enumerable: true, get: function () { return formatter_2.formatDossierContent; } });
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
24
|
+
function formatDossierFile(filePath, options) {
|
|
25
|
+
const content = (0, node_fs_1.readFileSync)(filePath, 'utf8');
|
|
26
|
+
const result = (0, formatter_1.formatDossierContent)(content, options);
|
|
27
|
+
if (result.changed) {
|
|
28
|
+
(0, node_fs_1.writeFileSync)(filePath, result.formatted, 'utf8');
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAOA,8CAYC;AAnBD,qCAAsD;AACtD,2CAAmD;AAGnD,yCAAmD;AAA1C,iHAAA,oBAAoB,OAAA;AAC7B,0CAAwB;AAExB,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,OAAgC;IAEhC,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAA,gCAAoB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAA,uBAAa,EAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface FormatOptions {
|
|
2
|
+
indent: number;
|
|
3
|
+
sortKeys: boolean;
|
|
4
|
+
updateChecksum: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface FormatResult {
|
|
7
|
+
formatted: string;
|
|
8
|
+
changed: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const defaultFormatOptions: FormatOptions;
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/formatter/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB,EAAE,aAIlC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/formatter/types.ts"],"names":[],"mappings":";;;AAWa,QAAA,oBAAoB,GAAkB;IACjD,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,IAAI;CACrB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ai-dossier/core - Core verification and parsing logic for dossier automation standard
|
|
3
|
+
*
|
|
4
|
+
* This package provides:
|
|
5
|
+
* - Dossier parsing (frontmatter + body extraction)
|
|
6
|
+
* - Checksum verification (SHA256 integrity checks)
|
|
7
|
+
* - Signature verification (Minisign and AWS KMS)
|
|
8
|
+
* - TypeScript type definitions
|
|
9
|
+
*/
|
|
10
|
+
export { calculateChecksum, verifyIntegrity } from './checksum';
|
|
11
|
+
export type { FormatOptions, FormatResult } from './formatter';
|
|
12
|
+
export { formatDossierContent, formatDossierFile } from './formatter';
|
|
13
|
+
export type { LintConfig, LintDiagnostic, LintResult, LintRule, LintRuleContext, LintSeverity, RuleSeverityOverride, } from './linter';
|
|
14
|
+
export { defaultRules, LintRuleRegistry, lintDossier, lintDossierFile, loadLintConfig, } from './linter';
|
|
15
|
+
export { parseDossierContent, parseDossierFile, validateFrontmatter } from './parser';
|
|
16
|
+
export { loadTrustedKeys, verifySignature, verifyWithEd25519, verifyWithKms } from './signature';
|
|
17
|
+
export { Ed25519Signer, Ed25519Verifier, getVerifierRegistry, KmsSigner, KmsVerifier, SignatureResult, Signer, Verifier, VerifierRegistry, } from './signers';
|
|
18
|
+
export * from './types';
|
|
19
|
+
export { sha256Hash, sha256Hex } from './utils/crypto';
|
|
20
|
+
export { getErrorMessage, getErrorStack } from './utils/errors';
|
|
21
|
+
export { readFileIfExists } from './utils/fs';
|
|
22
|
+
export { createDefaultVerificationResult } from './utils/verification';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjG,OAAO,EACL,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,eAAe,EACf,MAAM,EACN,QAAQ,EACR,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @ai-dossier/core - Core verification and parsing logic for dossier automation standard
|
|
4
|
+
*
|
|
5
|
+
* This package provides:
|
|
6
|
+
* - Dossier parsing (frontmatter + body extraction)
|
|
7
|
+
* - Checksum verification (SHA256 integrity checks)
|
|
8
|
+
* - Signature verification (Minisign and AWS KMS)
|
|
9
|
+
* - TypeScript type definitions
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
23
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createDefaultVerificationResult = exports.readFileIfExists = exports.getErrorStack = exports.getErrorMessage = exports.sha256Hex = exports.sha256Hash = exports.VerifierRegistry = exports.KmsVerifier = exports.KmsSigner = exports.getVerifierRegistry = exports.Ed25519Verifier = exports.Ed25519Signer = exports.verifyWithKms = exports.verifyWithEd25519 = exports.verifySignature = exports.loadTrustedKeys = exports.validateFrontmatter = exports.parseDossierFile = exports.parseDossierContent = exports.loadLintConfig = exports.lintDossierFile = exports.lintDossier = exports.LintRuleRegistry = exports.defaultRules = exports.formatDossierFile = exports.formatDossierContent = exports.verifyIntegrity = exports.calculateChecksum = void 0;
|
|
27
|
+
// Checksum exports
|
|
28
|
+
var checksum_1 = require("./checksum");
|
|
29
|
+
Object.defineProperty(exports, "calculateChecksum", { enumerable: true, get: function () { return checksum_1.calculateChecksum; } });
|
|
30
|
+
Object.defineProperty(exports, "verifyIntegrity", { enumerable: true, get: function () { return checksum_1.verifyIntegrity; } });
|
|
31
|
+
// Formatter exports
|
|
32
|
+
var formatter_1 = require("./formatter");
|
|
33
|
+
Object.defineProperty(exports, "formatDossierContent", { enumerable: true, get: function () { return formatter_1.formatDossierContent; } });
|
|
34
|
+
Object.defineProperty(exports, "formatDossierFile", { enumerable: true, get: function () { return formatter_1.formatDossierFile; } });
|
|
35
|
+
// Linter exports
|
|
36
|
+
var linter_1 = require("./linter");
|
|
37
|
+
Object.defineProperty(exports, "defaultRules", { enumerable: true, get: function () { return linter_1.defaultRules; } });
|
|
38
|
+
Object.defineProperty(exports, "LintRuleRegistry", { enumerable: true, get: function () { return linter_1.LintRuleRegistry; } });
|
|
39
|
+
Object.defineProperty(exports, "lintDossier", { enumerable: true, get: function () { return linter_1.lintDossier; } });
|
|
40
|
+
Object.defineProperty(exports, "lintDossierFile", { enumerable: true, get: function () { return linter_1.lintDossierFile; } });
|
|
41
|
+
Object.defineProperty(exports, "loadLintConfig", { enumerable: true, get: function () { return linter_1.loadLintConfig; } });
|
|
42
|
+
// Parser exports
|
|
43
|
+
var parser_1 = require("./parser");
|
|
44
|
+
Object.defineProperty(exports, "parseDossierContent", { enumerable: true, get: function () { return parser_1.parseDossierContent; } });
|
|
45
|
+
Object.defineProperty(exports, "parseDossierFile", { enumerable: true, get: function () { return parser_1.parseDossierFile; } });
|
|
46
|
+
Object.defineProperty(exports, "validateFrontmatter", { enumerable: true, get: function () { return parser_1.validateFrontmatter; } });
|
|
47
|
+
// Signature exports
|
|
48
|
+
var signature_1 = require("./signature");
|
|
49
|
+
Object.defineProperty(exports, "loadTrustedKeys", { enumerable: true, get: function () { return signature_1.loadTrustedKeys; } });
|
|
50
|
+
Object.defineProperty(exports, "verifySignature", { enumerable: true, get: function () { return signature_1.verifySignature; } });
|
|
51
|
+
Object.defineProperty(exports, "verifyWithEd25519", { enumerable: true, get: function () { return signature_1.verifyWithEd25519; } });
|
|
52
|
+
Object.defineProperty(exports, "verifyWithKms", { enumerable: true, get: function () { return signature_1.verifyWithKms; } });
|
|
53
|
+
// Signer/Verifier interfaces and implementations
|
|
54
|
+
var signers_1 = require("./signers");
|
|
55
|
+
Object.defineProperty(exports, "Ed25519Signer", { enumerable: true, get: function () { return signers_1.Ed25519Signer; } });
|
|
56
|
+
Object.defineProperty(exports, "Ed25519Verifier", { enumerable: true, get: function () { return signers_1.Ed25519Verifier; } });
|
|
57
|
+
Object.defineProperty(exports, "getVerifierRegistry", { enumerable: true, get: function () { return signers_1.getVerifierRegistry; } });
|
|
58
|
+
Object.defineProperty(exports, "KmsSigner", { enumerable: true, get: function () { return signers_1.KmsSigner; } });
|
|
59
|
+
Object.defineProperty(exports, "KmsVerifier", { enumerable: true, get: function () { return signers_1.KmsVerifier; } });
|
|
60
|
+
Object.defineProperty(exports, "VerifierRegistry", { enumerable: true, get: function () { return signers_1.VerifierRegistry; } });
|
|
61
|
+
// Type exports
|
|
62
|
+
__exportStar(require("./types"), exports);
|
|
63
|
+
// Crypto utilities
|
|
64
|
+
var crypto_1 = require("./utils/crypto");
|
|
65
|
+
Object.defineProperty(exports, "sha256Hash", { enumerable: true, get: function () { return crypto_1.sha256Hash; } });
|
|
66
|
+
Object.defineProperty(exports, "sha256Hex", { enumerable: true, get: function () { return crypto_1.sha256Hex; } });
|
|
67
|
+
// Error utilities
|
|
68
|
+
var errors_1 = require("./utils/errors");
|
|
69
|
+
Object.defineProperty(exports, "getErrorMessage", { enumerable: true, get: function () { return errors_1.getErrorMessage; } });
|
|
70
|
+
Object.defineProperty(exports, "getErrorStack", { enumerable: true, get: function () { return errors_1.getErrorStack; } });
|
|
71
|
+
// File system utilities
|
|
72
|
+
var fs_1 = require("./utils/fs");
|
|
73
|
+
Object.defineProperty(exports, "readFileIfExists", { enumerable: true, get: function () { return fs_1.readFileIfExists; } });
|
|
74
|
+
// Verification utilities
|
|
75
|
+
var verification_1 = require("./utils/verification");
|
|
76
|
+
Object.defineProperty(exports, "createDefaultVerificationResult", { enumerable: true, get: function () { return verification_1.createDefaultVerificationResult; } });
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;AAEH,mBAAmB;AACnB,uCAAgE;AAAvD,6GAAA,iBAAiB,OAAA;AAAE,2GAAA,eAAe,OAAA;AAE3C,oBAAoB;AACpB,yCAAsE;AAA7D,iHAAA,oBAAoB,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAUhD,iBAAiB;AACjB,mCAMkB;AALhB,sGAAA,YAAY,OAAA;AACZ,0GAAA,gBAAgB,OAAA;AAChB,qGAAA,WAAW,OAAA;AACX,yGAAA,eAAe,OAAA;AACf,wGAAA,cAAc,OAAA;AAEhB,iBAAiB;AACjB,mCAAsF;AAA7E,6GAAA,mBAAmB,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAAE,6GAAA,mBAAmB,OAAA;AACnE,oBAAoB;AACpB,yCAAiG;AAAxF,4GAAA,eAAe,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,0GAAA,aAAa,OAAA;AAC3E,iDAAiD;AACjD,qCAUmB;AATjB,wGAAA,aAAa,OAAA;AACb,0GAAA,eAAe,OAAA;AACf,8GAAA,mBAAmB,OAAA;AACnB,oGAAA,SAAS,OAAA;AACT,sGAAA,WAAW,OAAA;AAIX,2GAAA,gBAAgB,OAAA;AAElB,eAAe;AACf,0CAAwB;AACxB,mBAAmB;AACnB,yCAAuD;AAA9C,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAC9B,kBAAkB;AAClB,yCAAgE;AAAvD,yGAAA,eAAe,OAAA;AAAE,uGAAA,aAAa,OAAA;AACvC,wBAAwB;AACxB,iCAA8C;AAArC,sGAAA,gBAAgB,OAAA;AACzB,yBAAyB;AACzB,qDAAuE;AAA9D,+HAAA,+BAA+B,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/linter/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,eAAO,MAAM,aAAa,EAAE,UAE3B,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAe5D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultConfig = void 0;
|
|
4
|
+
exports.loadLintConfig = loadLintConfig;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const CONFIG_FILENAME = '.dossierrc.json';
|
|
8
|
+
exports.defaultConfig = {
|
|
9
|
+
rules: {},
|
|
10
|
+
};
|
|
11
|
+
function loadLintConfig(startDir) {
|
|
12
|
+
const configPath = findConfigFile(startDir || process.cwd());
|
|
13
|
+
if (!configPath) {
|
|
14
|
+
return { ...exports.defaultConfig };
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const raw = (0, node_fs_1.readFileSync)(configPath, 'utf8');
|
|
18
|
+
const parsed = JSON.parse(raw);
|
|
19
|
+
return {
|
|
20
|
+
rules: parsed.rules || {},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return { ...exports.defaultConfig };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function findConfigFile(startDir) {
|
|
28
|
+
let dir = (0, node_path_1.resolve)(startDir);
|
|
29
|
+
const root = (0, node_path_1.resolve)('/');
|
|
30
|
+
while (true) {
|
|
31
|
+
const candidate = (0, node_path_1.join)(dir, CONFIG_FILENAME);
|
|
32
|
+
if ((0, node_fs_1.existsSync)(candidate)) {
|
|
33
|
+
return candidate;
|
|
34
|
+
}
|
|
35
|
+
const parent = (0, node_path_1.dirname)(dir);
|
|
36
|
+
if (parent === dir || dir === root) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
dir = parent;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/linter/config.ts"],"names":[],"mappings":";;;AAUA,wCAeC;AAzBD,qCAAmD;AACnD,yCAAmD;AAGnD,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE7B,QAAA,aAAa,GAAe;IACvC,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,SAAgB,cAAc,CAAC,QAAiB;IAC9C,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,qBAAa,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;SAC1B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,qBAAa,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,GAAG,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC7C,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LintConfig, LintResult } from './types';
|
|
2
|
+
export { loadLintConfig } from './config';
|
|
3
|
+
export { LintRuleRegistry } from './registry';
|
|
4
|
+
export { defaultRules } from './rules';
|
|
5
|
+
export * from './types';
|
|
6
|
+
export declare function lintDossier(content: string, config?: LintConfig): LintResult;
|
|
7
|
+
export declare function lintDossierFile(filePath: string, config?: LintConfig): LintResult;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/linter/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAkB,UAAU,EAAmB,MAAM,SAAS,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,cAAc,SAAS,CAAC;AAkBxB,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,CAa5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,CAajF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.defaultRules = exports.LintRuleRegistry = exports.loadLintConfig = void 0;
|
|
18
|
+
exports.lintDossier = lintDossier;
|
|
19
|
+
exports.lintDossierFile = lintDossierFile;
|
|
20
|
+
const parser_1 = require("../parser");
|
|
21
|
+
const config_1 = require("./config");
|
|
22
|
+
const registry_1 = require("./registry");
|
|
23
|
+
const rules_1 = require("./rules");
|
|
24
|
+
var config_2 = require("./config");
|
|
25
|
+
Object.defineProperty(exports, "loadLintConfig", { enumerable: true, get: function () { return config_2.loadLintConfig; } });
|
|
26
|
+
var registry_2 = require("./registry");
|
|
27
|
+
Object.defineProperty(exports, "LintRuleRegistry", { enumerable: true, get: function () { return registry_2.LintRuleRegistry; } });
|
|
28
|
+
var rules_2 = require("./rules");
|
|
29
|
+
Object.defineProperty(exports, "defaultRules", { enumerable: true, get: function () { return rules_2.defaultRules; } });
|
|
30
|
+
__exportStar(require("./types"), exports);
|
|
31
|
+
function createRegistry() {
|
|
32
|
+
const registry = new registry_1.LintRuleRegistry();
|
|
33
|
+
registry.registerAll(rules_1.defaultRules);
|
|
34
|
+
return registry;
|
|
35
|
+
}
|
|
36
|
+
function buildResult(diagnostics, file) {
|
|
37
|
+
return {
|
|
38
|
+
file,
|
|
39
|
+
diagnostics,
|
|
40
|
+
errorCount: diagnostics.filter((d) => d.severity === 'error').length,
|
|
41
|
+
warningCount: diagnostics.filter((d) => d.severity === 'warning').length,
|
|
42
|
+
infoCount: diagnostics.filter((d) => d.severity === 'info').length,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function lintDossier(content, config) {
|
|
46
|
+
const parsed = (0, parser_1.parseDossierContent)(content);
|
|
47
|
+
const resolvedConfig = config || (0, config_1.loadLintConfig)();
|
|
48
|
+
const registry = createRegistry();
|
|
49
|
+
const context = {
|
|
50
|
+
frontmatter: parsed.frontmatter,
|
|
51
|
+
body: parsed.body,
|
|
52
|
+
raw: parsed.raw,
|
|
53
|
+
};
|
|
54
|
+
const diagnostics = registry.run(context, resolvedConfig);
|
|
55
|
+
return buildResult(diagnostics);
|
|
56
|
+
}
|
|
57
|
+
function lintDossierFile(filePath, config) {
|
|
58
|
+
const parsed = (0, parser_1.parseDossierFile)(filePath);
|
|
59
|
+
const resolvedConfig = config || (0, config_1.loadLintConfig)();
|
|
60
|
+
const registry = createRegistry();
|
|
61
|
+
const context = {
|
|
62
|
+
frontmatter: parsed.frontmatter,
|
|
63
|
+
body: parsed.body,
|
|
64
|
+
raw: parsed.raw,
|
|
65
|
+
};
|
|
66
|
+
const diagnostics = registry.run(context, resolvedConfig);
|
|
67
|
+
return buildResult(diagnostics, filePath);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/linter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA2BA,kCAaC;AAED,0CAaC;AAvDD,sCAAkE;AAClE,qCAA0C;AAC1C,yCAA8C;AAC9C,mCAAuC;AAGvC,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA;AACzB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,0CAAwB;AAExB,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAG,IAAI,2BAAgB,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,oBAAY,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,WAA6B,EAAE,IAAa;IAC/D,OAAO;QACL,IAAI;QACJ,WAAW;QACX,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QACpE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;QACxE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;KACnE,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAC,OAAe,EAAE,MAAmB;IAC9D,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,IAAI,IAAA,uBAAc,GAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAElC,MAAM,OAAO,GAAoB;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC1D,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,eAAe,CAAC,QAAgB,EAAE,MAAmB;IACnE,MAAM,MAAM,GAAG,IAAA,yBAAgB,EAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,MAAM,IAAI,IAAA,uBAAc,GAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAElC,MAAM,OAAO,GAAoB;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC1D,OAAO,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LintConfig, LintDiagnostic, LintRule, LintRuleContext } from './types';
|
|
2
|
+
export declare class LintRuleRegistry {
|
|
3
|
+
private rules;
|
|
4
|
+
register(rule: LintRule): void;
|
|
5
|
+
registerAll(rules: LintRule[]): void;
|
|
6
|
+
getRules(): LintRule[];
|
|
7
|
+
getRule(id: string): LintRule | undefined;
|
|
8
|
+
run(context: LintRuleContext, config: LintConfig): LintDiagnostic[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/linter/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,QAAQ,EACR,eAAe,EAGhB,MAAM,SAAS,CAAC;AAEjB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAoC;IAEjD,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAI9B,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAMpC,QAAQ,IAAI,QAAQ,EAAE;IAItB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIzC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,EAAE;CAqBpE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LintRuleRegistry = void 0;
|
|
4
|
+
class LintRuleRegistry {
|
|
5
|
+
rules = new Map();
|
|
6
|
+
register(rule) {
|
|
7
|
+
this.rules.set(rule.id, rule);
|
|
8
|
+
}
|
|
9
|
+
registerAll(rules) {
|
|
10
|
+
for (const rule of rules) {
|
|
11
|
+
this.register(rule);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
getRules() {
|
|
15
|
+
return Array.from(this.rules.values());
|
|
16
|
+
}
|
|
17
|
+
getRule(id) {
|
|
18
|
+
return this.rules.get(id);
|
|
19
|
+
}
|
|
20
|
+
run(context, config) {
|
|
21
|
+
const diagnostics = [];
|
|
22
|
+
for (const rule of this.rules.values()) {
|
|
23
|
+
const override = config.rules[rule.id];
|
|
24
|
+
if (override === 'off') {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const severity = override ? override : rule.defaultSeverity;
|
|
28
|
+
const ruleDiagnostics = rule.run(context);
|
|
29
|
+
for (const d of ruleDiagnostics) {
|
|
30
|
+
diagnostics.push({ ...d, severity });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return diagnostics;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.LintRuleRegistry = LintRuleRegistry;
|
|
37
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/linter/registry.ts"],"names":[],"mappings":";;;AASA,MAAa,gBAAgB;IACnB,KAAK,GAA0B,IAAI,GAAG,EAAE,CAAC;IAEjD,QAAQ,CAAC,IAAc;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,KAAiB;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,OAAwB,EAAE,MAAkB;QAC9C,MAAM,WAAW,GAAqB,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAqC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEzE,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAiB,QAAQ,CAAC,CAAC,CAAE,QAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;YAE5F,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE1C,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;gBAChC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AA1CD,4CA0CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum-valid.d.ts","sourceRoot":"","sources":["../../../src/linter/rules/checksum-valid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,QA4C/B,CAAC"}
|