@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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cryptographic utilities for dossier operations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Calculate SHA256 hash of content
|
|
6
|
+
* @param content - String content to hash
|
|
7
|
+
* @returns Buffer containing the hash
|
|
8
|
+
*/
|
|
9
|
+
export declare function sha256Hash(content: string): Buffer;
|
|
10
|
+
/**
|
|
11
|
+
* Calculate SHA256 hash of content as hex string
|
|
12
|
+
* @param content - String content to hash
|
|
13
|
+
* @returns Hex string of the hash
|
|
14
|
+
*/
|
|
15
|
+
export declare function sha256Hex(content: string): string;
|
|
16
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cryptographic utilities for dossier operations
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sha256Hash = sha256Hash;
|
|
7
|
+
exports.sha256Hex = sha256Hex;
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
/**
|
|
10
|
+
* Calculate SHA256 hash of content
|
|
11
|
+
* @param content - String content to hash
|
|
12
|
+
* @returns Buffer containing the hash
|
|
13
|
+
*/
|
|
14
|
+
function sha256Hash(content) {
|
|
15
|
+
return (0, node_crypto_1.createHash)('sha256').update(content, 'utf8').digest();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Calculate SHA256 hash of content as hex string
|
|
19
|
+
* @param content - String content to hash
|
|
20
|
+
* @returns Hex string of the hash
|
|
21
|
+
*/
|
|
22
|
+
function sha256Hex(content) {
|
|
23
|
+
return sha256Hash(content).toString('hex');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,gCAEC;AAOD,8BAEC;AAlBD,6CAAyC;AAEzC;;;;GAIG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling utilities
|
|
3
|
+
* Safe extraction of error information from unknown error types
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Safely extract error message from unknown error type
|
|
7
|
+
* Handles the common TypeScript pattern of catching 'unknown' errors
|
|
8
|
+
* @param err - The caught error (unknown type)
|
|
9
|
+
* @returns Error message string
|
|
10
|
+
*/
|
|
11
|
+
export declare function getErrorMessage(err: unknown): string;
|
|
12
|
+
/**
|
|
13
|
+
* Safely extract error stack from unknown error type
|
|
14
|
+
* @param err - The caught error (unknown type)
|
|
15
|
+
* @returns Error stack string or undefined
|
|
16
|
+
*/
|
|
17
|
+
export declare function getErrorStack(err: unknown): string | undefined;
|
|
18
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKpD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK9D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Error handling utilities
|
|
4
|
+
* Safe extraction of error information from unknown error types
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getErrorMessage = getErrorMessage;
|
|
8
|
+
exports.getErrorStack = getErrorStack;
|
|
9
|
+
/**
|
|
10
|
+
* Safely extract error message from unknown error type
|
|
11
|
+
* Handles the common TypeScript pattern of catching 'unknown' errors
|
|
12
|
+
* @param err - The caught error (unknown type)
|
|
13
|
+
* @returns Error message string
|
|
14
|
+
*/
|
|
15
|
+
function getErrorMessage(err) {
|
|
16
|
+
if (err instanceof Error) {
|
|
17
|
+
return err.message;
|
|
18
|
+
}
|
|
19
|
+
return String(err);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Safely extract error stack from unknown error type
|
|
23
|
+
* @param err - The caught error (unknown type)
|
|
24
|
+
* @returns Error stack string or undefined
|
|
25
|
+
*/
|
|
26
|
+
function getErrorStack(err) {
|
|
27
|
+
if (err instanceof Error) {
|
|
28
|
+
return err.stack;
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAQH,0CAKC;AAOD,sCAKC;AAvBD;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,GAAY;IACxC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities for dossier operations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Read a file if it exists, optionally throwing an error if not found
|
|
6
|
+
* @param filePath - Path to the file
|
|
7
|
+
* @param errorMessage - Optional error message template (use {path} as placeholder)
|
|
8
|
+
* @returns File content as string, or null if file doesn't exist and no errorMessage provided
|
|
9
|
+
* @throws Error if file doesn't exist and errorMessage is provided
|
|
10
|
+
*/
|
|
11
|
+
export declare function readFileIfExists(filePath: string, errorMessage?: string): string | null;
|
|
12
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQvF"}
|
package/dist/utils/fs.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* File system utilities for dossier operations
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.readFileIfExists = readFileIfExists;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
/**
|
|
9
|
+
* Read a file if it exists, optionally throwing an error if not found
|
|
10
|
+
* @param filePath - Path to the file
|
|
11
|
+
* @param errorMessage - Optional error message template (use {path} as placeholder)
|
|
12
|
+
* @returns File content as string, or null if file doesn't exist and no errorMessage provided
|
|
13
|
+
* @throws Error if file doesn't exist and errorMessage is provided
|
|
14
|
+
*/
|
|
15
|
+
function readFileIfExists(filePath, errorMessage) {
|
|
16
|
+
if (!(0, node_fs_1.existsSync)(filePath)) {
|
|
17
|
+
if (errorMessage) {
|
|
18
|
+
throw new Error(errorMessage.replace('{path}', filePath));
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return (0, node_fs_1.readFileSync)(filePath, 'utf8');
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAWH,4CAQC;AAjBD,qCAAmD;AAEnD;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,YAAqB;IACtE,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,sBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification result factory functions
|
|
3
|
+
*/
|
|
4
|
+
import type { VerificationResult } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Create a default VerificationResult with safe initial values
|
|
7
|
+
* @param dossierFile - Path to the dossier file being verified
|
|
8
|
+
* @returns VerificationResult with BLOCK recommendation and safe defaults
|
|
9
|
+
*/
|
|
10
|
+
export declare function createDefaultVerificationResult(dossierFile: string): VerificationResult;
|
|
11
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/utils/verification.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAsBvF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verification result factory functions
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createDefaultVerificationResult = createDefaultVerificationResult;
|
|
7
|
+
/**
|
|
8
|
+
* Create a default VerificationResult with safe initial values
|
|
9
|
+
* @param dossierFile - Path to the dossier file being verified
|
|
10
|
+
* @returns VerificationResult with BLOCK recommendation and safe defaults
|
|
11
|
+
*/
|
|
12
|
+
function createDefaultVerificationResult(dossierFile) {
|
|
13
|
+
return {
|
|
14
|
+
dossierFile,
|
|
15
|
+
integrity: {
|
|
16
|
+
status: 'missing',
|
|
17
|
+
message: '',
|
|
18
|
+
},
|
|
19
|
+
authenticity: {
|
|
20
|
+
status: 'unsigned',
|
|
21
|
+
message: '',
|
|
22
|
+
isTrusted: false,
|
|
23
|
+
},
|
|
24
|
+
riskAssessment: {
|
|
25
|
+
riskLevel: 'unknown',
|
|
26
|
+
riskFactors: [],
|
|
27
|
+
destructiveOperations: [],
|
|
28
|
+
requiresApproval: true,
|
|
29
|
+
},
|
|
30
|
+
recommendation: 'BLOCK',
|
|
31
|
+
message: '',
|
|
32
|
+
errors: [],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/utils/verification.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,0EAsBC;AA3BD;;;;GAIG;AACH,SAAgB,+BAA+B,CAAC,WAAmB;IACjE,OAAO;QACL,WAAW;QACX,SAAS,EAAE;YACT,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,EAAE;SACZ;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,KAAK;SACjB;QACD,cAAc,EAAE;YACd,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,EAAE;YACf,qBAAqB,EAAE,EAAE;YACzB,gBAAgB,EAAE,IAAI;SACvB;QACD,cAAc,EAAE,OAAO;QACvB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ai-dossier/core",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Core verification and parsing logic for dossier automation standard",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"test": "vitest run",
|
|
14
|
+
"test:watch": "vitest",
|
|
15
|
+
"test:ui": "vitest --ui",
|
|
16
|
+
"test:coverage": "vitest run --coverage"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"dossier",
|
|
20
|
+
"parsing",
|
|
21
|
+
"verification",
|
|
22
|
+
"checksum",
|
|
23
|
+
"signature",
|
|
24
|
+
"security"
|
|
25
|
+
],
|
|
26
|
+
"author": "Yuval Dimnik <yuval.dimnik@gmail.com>",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/imboard-ai/ai-dossier.git",
|
|
31
|
+
"directory": "packages/core"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/imboard-ai/ai-dossier#readme",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/imboard-ai/ai-dossier/issues"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public",
|
|
39
|
+
"registry": "https://registry.npmjs.org"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@aws-sdk/client-kms": "^3.927.0",
|
|
43
|
+
"ajv": "^8.18.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^24.10.0",
|
|
47
|
+
"@vitest/coverage-v8": "^4.0.9",
|
|
48
|
+
"@vitest/ui": "^4.0.9",
|
|
49
|
+
"typescript": "^5.9.3",
|
|
50
|
+
"vitest": "^4.0.9"
|
|
51
|
+
}
|
|
52
|
+
}
|