@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.
Files changed (114) hide show
  1. package/dist/checksum.d.ts +15 -0
  2. package/dist/checksum.d.ts.map +1 -0
  3. package/dist/checksum.js +45 -0
  4. package/dist/checksum.js.map +1 -0
  5. package/dist/formatter/formatter.d.ts +3 -0
  6. package/dist/formatter/formatter.d.ts.map +1 -0
  7. package/dist/formatter/formatter.js +120 -0
  8. package/dist/formatter/formatter.js.map +1 -0
  9. package/dist/formatter/index.d.ts +5 -0
  10. package/dist/formatter/index.d.ts.map +1 -0
  11. package/dist/formatter/index.js +32 -0
  12. package/dist/formatter/index.js.map +1 -0
  13. package/dist/formatter/types.d.ts +11 -0
  14. package/dist/formatter/types.d.ts.map +1 -0
  15. package/dist/formatter/types.js +9 -0
  16. package/dist/formatter/types.js.map +1 -0
  17. package/dist/index.d.ts +23 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +77 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/linter/config.d.ts +4 -0
  22. package/dist/linter/config.d.ts.map +1 -0
  23. package/dist/linter/config.js +42 -0
  24. package/dist/linter/config.js.map +1 -0
  25. package/dist/linter/index.d.ts +8 -0
  26. package/dist/linter/index.d.ts.map +1 -0
  27. package/dist/linter/index.js +69 -0
  28. package/dist/linter/index.js.map +1 -0
  29. package/dist/linter/registry.d.ts +10 -0
  30. package/dist/linter/registry.d.ts.map +1 -0
  31. package/dist/linter/registry.js +37 -0
  32. package/dist/linter/registry.js.map +1 -0
  33. package/dist/linter/rules/checksum-valid.d.ts +3 -0
  34. package/dist/linter/rules/checksum-valid.d.ts.map +1 -0
  35. package/dist/linter/rules/checksum-valid.js +46 -0
  36. package/dist/linter/rules/checksum-valid.js.map +1 -0
  37. package/dist/linter/rules/index.d.ts +11 -0
  38. package/dist/linter/rules/index.d.ts.map +1 -0
  39. package/dist/linter/rules/index.js +27 -0
  40. package/dist/linter/rules/index.js.map +1 -0
  41. package/dist/linter/rules/objective-quality.d.ts +3 -0
  42. package/dist/linter/rules/objective-quality.d.ts.map +1 -0
  43. package/dist/linter/rules/objective-quality.js +44 -0
  44. package/dist/linter/rules/objective-quality.js.map +1 -0
  45. package/dist/linter/rules/required-sections.d.ts +3 -0
  46. package/dist/linter/rules/required-sections.d.ts.map +1 -0
  47. package/dist/linter/rules/required-sections.js +32 -0
  48. package/dist/linter/rules/required-sections.js.map +1 -0
  49. package/dist/linter/rules/risk-level-consistency.d.ts +3 -0
  50. package/dist/linter/rules/risk-level-consistency.d.ts.map +1 -0
  51. package/dist/linter/rules/risk-level-consistency.js +24 -0
  52. package/dist/linter/rules/risk-level-consistency.js.map +1 -0
  53. package/dist/linter/rules/schema-valid.d.ts +3 -0
  54. package/dist/linter/rules/schema-valid.d.ts.map +1 -0
  55. package/dist/linter/rules/schema-valid.js +63 -0
  56. package/dist/linter/rules/schema-valid.js.map +1 -0
  57. package/dist/linter/rules/semver-version.d.ts +3 -0
  58. package/dist/linter/rules/semver-version.d.ts.map +1 -0
  59. package/dist/linter/rules/semver-version.js +34 -0
  60. package/dist/linter/rules/semver-version.js.map +1 -0
  61. package/dist/linter/rules/tools-check-command.d.ts +3 -0
  62. package/dist/linter/rules/tools-check-command.d.ts.map +1 -0
  63. package/dist/linter/rules/tools-check-command.js +27 -0
  64. package/dist/linter/rules/tools-check-command.js.map +1 -0
  65. package/dist/linter/types.d.ts +31 -0
  66. package/dist/linter/types.d.ts.map +1 -0
  67. package/dist/linter/types.js +3 -0
  68. package/dist/linter/types.js.map +1 -0
  69. package/dist/parser.d.ts +18 -0
  70. package/dist/parser.d.ts.map +1 -0
  71. package/dist/parser.js +74 -0
  72. package/dist/parser.js.map +1 -0
  73. package/dist/schema/dossier-schema.json +745 -0
  74. package/dist/signature.d.ts +33 -0
  75. package/dist/signature.d.ts.map +1 -0
  76. package/dist/signature.js +111 -0
  77. package/dist/signature.js.map +1 -0
  78. package/dist/signers/ed25519.d.ts +17 -0
  79. package/dist/signers/ed25519.d.ts.map +1 -0
  80. package/dist/signers/ed25519.js +66 -0
  81. package/dist/signers/ed25519.js.map +1 -0
  82. package/dist/signers/index.d.ts +39 -0
  83. package/dist/signers/index.d.ts.map +1 -0
  84. package/dist/signers/index.js +18 -0
  85. package/dist/signers/index.js.map +1 -0
  86. package/dist/signers/kms.d.ts +20 -0
  87. package/dist/signers/kms.d.ts.map +1 -0
  88. package/dist/signers/kms.js +108 -0
  89. package/dist/signers/kms.js.map +1 -0
  90. package/dist/signers/registry.d.ts +29 -0
  91. package/dist/signers/registry.d.ts.map +1 -0
  92. package/dist/signers/registry.js +67 -0
  93. package/dist/signers/registry.js.map +1 -0
  94. package/dist/types.d.ts +79 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +6 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/crypto.d.ts +16 -0
  99. package/dist/utils/crypto.d.ts.map +1 -0
  100. package/dist/utils/crypto.js +25 -0
  101. package/dist/utils/crypto.js.map +1 -0
  102. package/dist/utils/errors.d.ts +18 -0
  103. package/dist/utils/errors.d.ts.map +1 -0
  104. package/dist/utils/errors.js +32 -0
  105. package/dist/utils/errors.js.map +1 -0
  106. package/dist/utils/fs.d.ts +12 -0
  107. package/dist/utils/fs.d.ts.map +1 -0
  108. package/dist/utils/fs.js +24 -0
  109. package/dist/utils/fs.js.map +1 -0
  110. package/dist/utils/verification.d.ts +11 -0
  111. package/dist/utils/verification.d.ts.map +1 -0
  112. package/dist/utils/verification.js +35 -0
  113. package/dist/utils/verification.js.map +1 -0
  114. 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"}
@@ -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,3 @@
1
+ import type { FormatOptions, FormatResult } from './types';
2
+ export declare function formatDossierContent(content: string, options?: Partial<FormatOptions>): FormatResult;
3
+ //# sourceMappingURL=formatter.d.ts.map
@@ -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,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultFormatOptions = void 0;
4
+ exports.defaultFormatOptions = {
5
+ indent: 2,
6
+ sortKeys: true,
7
+ updateChecksum: true,
8
+ };
9
+ //# sourceMappingURL=types.js.map
@@ -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"}
@@ -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,4 @@
1
+ import type { LintConfig } from './types';
2
+ export declare const defaultConfig: LintConfig;
3
+ export declare function loadLintConfig(startDir?: string): LintConfig;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -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,3 @@
1
+ import type { LintRule } from '../types';
2
+ export declare const checksumValidRule: LintRule;
3
+ //# sourceMappingURL=checksum-valid.d.ts.map
@@ -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"}