@know-graph/core 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/connectors/cache.d.ts +25 -0
  4. package/dist/connectors/cache.d.ts.map +1 -0
  5. package/dist/connectors/cache.js +73 -0
  6. package/dist/connectors/cache.js.map +1 -0
  7. package/dist/connectors/index.d.ts +12 -0
  8. package/dist/connectors/index.d.ts.map +1 -0
  9. package/dist/connectors/index.js +7 -0
  10. package/dist/connectors/index.js.map +1 -0
  11. package/dist/connectors/jira-connector.d.ts +26 -0
  12. package/dist/connectors/jira-connector.d.ts.map +1 -0
  13. package/dist/connectors/jira-connector.js +234 -0
  14. package/dist/connectors/jira-connector.js.map +1 -0
  15. package/dist/connectors/notion-connector.d.ts +24 -0
  16. package/dist/connectors/notion-connector.d.ts.map +1 -0
  17. package/dist/connectors/notion-connector.js +246 -0
  18. package/dist/connectors/notion-connector.js.map +1 -0
  19. package/dist/connectors/rate-limiter.d.ts +23 -0
  20. package/dist/connectors/rate-limiter.d.ts.map +1 -0
  21. package/dist/connectors/rate-limiter.js +54 -0
  22. package/dist/connectors/rate-limiter.js.map +1 -0
  23. package/dist/connectors/registry.d.ts +15 -0
  24. package/dist/connectors/registry.d.ts.map +1 -0
  25. package/dist/connectors/registry.js +72 -0
  26. package/dist/connectors/registry.js.map +1 -0
  27. package/dist/connectors/types.d.ts +142 -0
  28. package/dist/connectors/types.d.ts.map +1 -0
  29. package/dist/connectors/types.js +35 -0
  30. package/dist/connectors/types.js.map +1 -0
  31. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts +9 -0
  32. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts.map +1 -0
  33. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js +11 -0
  34. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js.map +1 -0
  35. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts +2 -0
  36. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts.map +1 -0
  37. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js +4 -0
  38. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js.map +1 -0
  39. package/dist/coverage/coverage-calculator.d.ts +3 -0
  40. package/dist/coverage/coverage-calculator.d.ts.map +1 -0
  41. package/dist/coverage/coverage-calculator.js +204 -0
  42. package/dist/coverage/coverage-calculator.js.map +1 -0
  43. package/dist/coverage/index.d.ts +3 -0
  44. package/dist/coverage/index.d.ts.map +1 -0
  45. package/dist/coverage/index.js +2 -0
  46. package/dist/coverage/index.js.map +1 -0
  47. package/dist/coverage/types.d.ts +38 -0
  48. package/dist/coverage/types.d.ts.map +1 -0
  49. package/dist/coverage/types.js +13 -0
  50. package/dist/coverage/types.js.map +1 -0
  51. package/dist/index.d.ts +17 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +16 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/indexer/database.d.ts +32 -0
  56. package/dist/indexer/database.d.ts.map +1 -0
  57. package/dist/indexer/database.js +242 -0
  58. package/dist/indexer/database.js.map +1 -0
  59. package/dist/indexer/index.d.ts +7 -0
  60. package/dist/indexer/index.d.ts.map +1 -0
  61. package/dist/indexer/index.js +4 -0
  62. package/dist/indexer/index.js.map +1 -0
  63. package/dist/indexer/indexer.d.ts +12 -0
  64. package/dist/indexer/indexer.d.ts.map +1 -0
  65. package/dist/indexer/indexer.js +145 -0
  66. package/dist/indexer/indexer.js.map +1 -0
  67. package/dist/indexer/schema.d.ts +21 -0
  68. package/dist/indexer/schema.d.ts.map +1 -0
  69. package/dist/indexer/schema.js +122 -0
  70. package/dist/indexer/schema.js.map +1 -0
  71. package/dist/indexer/types.d.ts +85 -0
  72. package/dist/indexer/types.d.ts.map +1 -0
  73. package/dist/indexer/types.js +2 -0
  74. package/dist/indexer/types.js.map +1 -0
  75. package/dist/parsers/generic-parser.d.ts +3 -0
  76. package/dist/parsers/generic-parser.d.ts.map +1 -0
  77. package/dist/parsers/generic-parser.js +150 -0
  78. package/dist/parsers/generic-parser.js.map +1 -0
  79. package/dist/parsers/go-parser.d.ts +3 -0
  80. package/dist/parsers/go-parser.d.ts.map +1 -0
  81. package/dist/parsers/go-parser.js +437 -0
  82. package/dist/parsers/go-parser.js.map +1 -0
  83. package/dist/parsers/index.d.ts +10 -0
  84. package/dist/parsers/index.d.ts.map +1 -0
  85. package/dist/parsers/index.js +8 -0
  86. package/dist/parsers/index.js.map +1 -0
  87. package/dist/parsers/java-parser.d.ts +3 -0
  88. package/dist/parsers/java-parser.d.ts.map +1 -0
  89. package/dist/parsers/java-parser.js +321 -0
  90. package/dist/parsers/java-parser.js.map +1 -0
  91. package/dist/parsers/metadata-extractor.d.ts +25 -0
  92. package/dist/parsers/metadata-extractor.d.ts.map +1 -0
  93. package/dist/parsers/metadata-extractor.js +137 -0
  94. package/dist/parsers/metadata-extractor.js.map +1 -0
  95. package/dist/parsers/python-parser.d.ts +3 -0
  96. package/dist/parsers/python-parser.d.ts.map +1 -0
  97. package/dist/parsers/python-parser.js +226 -0
  98. package/dist/parsers/python-parser.js.map +1 -0
  99. package/dist/parsers/registry.d.ts +3 -0
  100. package/dist/parsers/registry.d.ts.map +1 -0
  101. package/dist/parsers/registry.js +41 -0
  102. package/dist/parsers/registry.js.map +1 -0
  103. package/dist/parsers/types.d.ts +23 -0
  104. package/dist/parsers/types.d.ts.map +1 -0
  105. package/dist/parsers/types.js +2 -0
  106. package/dist/parsers/types.js.map +1 -0
  107. package/dist/parsers/typescript-parser.d.ts +3 -0
  108. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  109. package/dist/parsers/typescript-parser.js +321 -0
  110. package/dist/parsers/typescript-parser.js.map +1 -0
  111. package/dist/query/index.d.ts +3 -0
  112. package/dist/query/index.d.ts.map +1 -0
  113. package/dist/query/index.js +2 -0
  114. package/dist/query/index.js.map +1 -0
  115. package/dist/query/query-engine.d.ts +40 -0
  116. package/dist/query/query-engine.d.ts.map +1 -0
  117. package/dist/query/query-engine.js +126 -0
  118. package/dist/query/query-engine.js.map +1 -0
  119. package/dist/suggest/index.d.ts +3 -0
  120. package/dist/suggest/index.d.ts.map +1 -0
  121. package/dist/suggest/index.js +2 -0
  122. package/dist/suggest/index.js.map +1 -0
  123. package/dist/suggest/suggestion-engine.d.ts +7 -0
  124. package/dist/suggest/suggestion-engine.d.ts.map +1 -0
  125. package/dist/suggest/suggestion-engine.js +239 -0
  126. package/dist/suggest/suggestion-engine.js.map +1 -0
  127. package/dist/suggest/types.d.ts +29 -0
  128. package/dist/suggest/types.d.ts.map +1 -0
  129. package/dist/suggest/types.js +13 -0
  130. package/dist/suggest/types.js.map +1 -0
  131. package/dist/types/entity.d.ts +336 -0
  132. package/dist/types/entity.d.ts.map +1 -0
  133. package/dist/types/entity.js +99 -0
  134. package/dist/types/entity.js.map +1 -0
  135. package/dist/types/index.d.ts +6 -0
  136. package/dist/types/index.d.ts.map +1 -0
  137. package/dist/types/index.js +3 -0
  138. package/dist/types/index.js.map +1 -0
  139. package/dist/types/manifest.d.ts +488 -0
  140. package/dist/types/manifest.d.ts.map +1 -0
  141. package/dist/types/manifest.js +66 -0
  142. package/dist/types/manifest.js.map +1 -0
  143. package/dist/types/parse-result.d.ts +25 -0
  144. package/dist/types/parse-result.d.ts.map +1 -0
  145. package/dist/types/parse-result.js +2 -0
  146. package/dist/types/parse-result.js.map +1 -0
  147. package/dist/validation/index.d.ts +5 -0
  148. package/dist/validation/index.d.ts.map +1 -0
  149. package/dist/validation/index.js +3 -0
  150. package/dist/validation/index.js.map +1 -0
  151. package/dist/validation/rules.d.ts +9 -0
  152. package/dist/validation/rules.d.ts.map +1 -0
  153. package/dist/validation/rules.js +119 -0
  154. package/dist/validation/rules.js.map +1 -0
  155. package/dist/validation/types.d.ts +34 -0
  156. package/dist/validation/types.d.ts.map +1 -0
  157. package/dist/validation/types.js +2 -0
  158. package/dist/validation/types.js.map +1 -0
  159. package/dist/validation/validator.d.ts +10 -0
  160. package/dist/validation/validator.d.ts.map +1 -0
  161. package/dist/validation/validator.js +111 -0
  162. package/dist/validation/validator.js.map +1 -0
  163. package/package.json +58 -0
@@ -0,0 +1,119 @@
1
+ import { EntityTypeSchema, StatusSchema } from '../types/entity.js';
2
+ function createIssue(parseResult, rule, message, severity) {
3
+ return {
4
+ filePath: parseResult.filePath,
5
+ line: parseResult.line,
6
+ rule,
7
+ message,
8
+ severity,
9
+ };
10
+ }
11
+ export function createRequiredFieldsRule() {
12
+ return {
13
+ name: 'required-fields',
14
+ description: 'description must be present',
15
+ severity: 'error',
16
+ check(parseResult) {
17
+ const issues = [];
18
+ if (!parseResult.metadata.description) {
19
+ issues.push(createIssue(parseResult, 'required-fields', 'Missing required field: description', 'error'));
20
+ }
21
+ return issues;
22
+ },
23
+ };
24
+ }
25
+ export function createValidStatusRule() {
26
+ return {
27
+ name: 'valid-status',
28
+ description: 'status must be experimental, stable, or deprecated',
29
+ severity: 'error',
30
+ check(parseResult) {
31
+ const { status } = parseResult.metadata;
32
+ if (status === undefined) {
33
+ return [];
34
+ }
35
+ const result = StatusSchema.safeParse(status);
36
+ if (!result.success) {
37
+ return [
38
+ createIssue(parseResult, 'valid-status', `Invalid status "${status}". Must be one of: experimental, stable, deprecated`, 'error'),
39
+ ];
40
+ }
41
+ return [];
42
+ },
43
+ };
44
+ }
45
+ export function createValidTypeRule() {
46
+ return {
47
+ name: 'valid-type',
48
+ description: 'type must be a valid entity type',
49
+ severity: 'error',
50
+ check(parseResult) {
51
+ const { type } = parseResult.metadata;
52
+ const result = EntityTypeSchema.safeParse(type);
53
+ if (!result.success) {
54
+ return [
55
+ createIssue(parseResult, 'valid-type', `Invalid type "${type}". Must be one of: ${EntityTypeSchema.options.join(', ')}`, 'error'),
56
+ ];
57
+ }
58
+ return [];
59
+ },
60
+ };
61
+ }
62
+ export function createNonEmptyTagsRule() {
63
+ return {
64
+ name: 'non-empty-tags',
65
+ description: 'tags should not be empty when present',
66
+ severity: 'warning',
67
+ check(parseResult) {
68
+ const { tags } = parseResult.metadata;
69
+ if (tags !== undefined && tags.length === 0) {
70
+ return [
71
+ createIssue(parseResult, 'non-empty-tags', 'Tags array is present but empty', 'warning'),
72
+ ];
73
+ }
74
+ return [];
75
+ },
76
+ };
77
+ }
78
+ export function createOwnerPresentRule() {
79
+ return {
80
+ name: 'owner-present',
81
+ description: 'owner should be present',
82
+ severity: 'warning',
83
+ check(parseResult) {
84
+ if (!parseResult.metadata.owner) {
85
+ return [
86
+ createIssue(parseResult, 'owner-present', 'Missing recommended field: owner', 'warning'),
87
+ ];
88
+ }
89
+ return [];
90
+ },
91
+ };
92
+ }
93
+ export function createDescriptionLengthRule() {
94
+ return {
95
+ name: 'description-length',
96
+ description: 'description should be at least 10 characters',
97
+ severity: 'warning',
98
+ check(parseResult) {
99
+ const { description } = parseResult.metadata;
100
+ if (description && description.length < 10) {
101
+ return [
102
+ createIssue(parseResult, 'description-length', `Description is too short (${description.length} chars). Minimum recommended: 10`, 'warning'),
103
+ ];
104
+ }
105
+ return [];
106
+ },
107
+ };
108
+ }
109
+ export function createAllDefaultRules() {
110
+ return [
111
+ createRequiredFieldsRule(),
112
+ createValidStatusRule(),
113
+ createValidTypeRule(),
114
+ createNonEmptyTagsRule(),
115
+ createOwnerPresentRule(),
116
+ createDescriptionLengthRule(),
117
+ ];
118
+ }
119
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/validation/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @knowgraph
3
+ * type: interface
4
+ * description: Immutable types for the annotation validation system
5
+ * owner: knowgraph-core
6
+ * status: experimental
7
+ * tags: [validation, types, interface]
8
+ * context:
9
+ * business_goal: Define contracts for pluggable validation rules and results
10
+ * domain: validation
11
+ */
12
+ import type { ParseResult } from '../types/parse-result.js';
13
+ export type ValidationSeverity = 'error' | 'warning';
14
+ export interface ValidationIssue {
15
+ readonly filePath: string;
16
+ readonly line: number;
17
+ readonly rule: string;
18
+ readonly message: string;
19
+ readonly severity: ValidationSeverity;
20
+ }
21
+ export interface ValidationResult {
22
+ readonly issues: readonly ValidationIssue[];
23
+ readonly fileCount: number;
24
+ readonly errorCount: number;
25
+ readonly warningCount: number;
26
+ readonly isValid: boolean;
27
+ }
28
+ export interface ValidationRule {
29
+ readonly name: string;
30
+ readonly description: string;
31
+ readonly severity: ValidationSeverity;
32
+ check(parseResult: ParseResult): readonly ValidationIssue[];
33
+ }
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/validation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,eAAe,EAAE,CAAC;CAC7D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/validation/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { ValidationResult, ValidationRule } from './types.js';
2
+ export interface ValidateOptions {
3
+ readonly strict?: boolean;
4
+ readonly ruleName?: string;
5
+ }
6
+ export interface Validator {
7
+ validate(rootDir: string, options?: ValidateOptions): ValidationResult;
8
+ }
9
+ export declare function createValidator(customRules?: readonly ValidationRule[]): Validator;
10
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validation/validator.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgBpF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AA+CD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAAC;CACxE;AAED,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAmDlF"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @knowgraph
3
+ * type: module
4
+ * description: Main validator that scans files, parses annotations, and runs validation rules
5
+ * owner: knowgraph-core
6
+ * status: experimental
7
+ * tags: [validation, scanner, core]
8
+ * context:
9
+ * business_goal: Ensure annotation quality across the entire codebase
10
+ * domain: validation
11
+ */
12
+ import { readFileSync, statSync, readdirSync } from 'node:fs';
13
+ import { join, extname } from 'node:path';
14
+ import { createDefaultRegistry } from '../parsers/registry.js';
15
+ import { createAllDefaultRules } from './rules.js';
16
+ const PARSABLE_EXTENSIONS = new Set(['.py', '.ts', '.tsx', '.js', '.jsx']);
17
+ const SKIP_DIRS = new Set([
18
+ 'node_modules',
19
+ '.git',
20
+ 'dist',
21
+ 'build',
22
+ '__pycache__',
23
+ '.venv',
24
+ 'venv',
25
+ 'coverage',
26
+ ]);
27
+ function collectFiles(targetPath) {
28
+ const stat = statSync(targetPath);
29
+ if (stat.isFile()) {
30
+ return [targetPath];
31
+ }
32
+ if (!stat.isDirectory()) {
33
+ return [];
34
+ }
35
+ const results = [];
36
+ function walk(dir) {
37
+ const entries = readdirSync(dir);
38
+ for (const entry of entries) {
39
+ if (entry.startsWith('.') || SKIP_DIRS.has(entry))
40
+ continue;
41
+ const fullPath = join(dir, entry);
42
+ const s = statSync(fullPath);
43
+ if (s.isDirectory()) {
44
+ walk(fullPath);
45
+ }
46
+ else if (s.isFile()) {
47
+ results.push(fullPath);
48
+ }
49
+ }
50
+ }
51
+ walk(targetPath);
52
+ return results;
53
+ }
54
+ function buildResult(issues, fileCount) {
55
+ const errorCount = issues.filter((i) => i.severity === 'error').length;
56
+ const warningCount = issues.filter((i) => i.severity === 'warning').length;
57
+ return {
58
+ issues,
59
+ fileCount,
60
+ errorCount,
61
+ warningCount,
62
+ isValid: errorCount === 0,
63
+ };
64
+ }
65
+ export function createValidator(customRules) {
66
+ const rules = customRules ?? createAllDefaultRules();
67
+ return {
68
+ validate(rootDir, options) {
69
+ const activeRules = options?.ruleName
70
+ ? rules.filter((r) => r.name === options.ruleName)
71
+ : rules;
72
+ if (options?.ruleName && activeRules.length === 0) {
73
+ return buildResult([], 0);
74
+ }
75
+ const registry = createDefaultRegistry();
76
+ const files = collectFiles(rootDir);
77
+ const allIssues = [];
78
+ let annotatedFileCount = 0;
79
+ for (const filePath of files) {
80
+ const ext = extname(filePath);
81
+ if (!PARSABLE_EXTENSIONS.has(ext))
82
+ continue;
83
+ let content;
84
+ try {
85
+ content = readFileSync(filePath, 'utf-8');
86
+ }
87
+ catch {
88
+ continue;
89
+ }
90
+ let results;
91
+ try {
92
+ results = registry.parseFile(content, filePath);
93
+ }
94
+ catch {
95
+ continue;
96
+ }
97
+ if (results.length === 0)
98
+ continue;
99
+ annotatedFileCount++;
100
+ for (const parseResult of results) {
101
+ for (const rule of activeRules) {
102
+ const issues = rule.check(parseResult);
103
+ allIssues.push(...issues);
104
+ }
105
+ }
106
+ }
107
+ return buildResult(allIssues, annotatedFileCount);
108
+ },
109
+ };
110
+ }
111
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validation/validator.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@know-graph/core",
3
+ "version": "0.4.0",
4
+ "description": "Core library for KnowGraph - code knowledge graph",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/idosams/know-know.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "homepage": "https://github.com/idosams/know-know#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/idosams/know-know/issues"
15
+ },
16
+ "keywords": [
17
+ "knowgraph",
18
+ "code-knowledge",
19
+ "metadata",
20
+ "parser",
21
+ "indexer",
22
+ "sqlite",
23
+ "ai"
24
+ ],
25
+ "files": [
26
+ "dist",
27
+ "README.md",
28
+ "LICENSE"
29
+ ],
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ }
35
+ },
36
+ "main": "dist/index.js",
37
+ "types": "dist/index.d.ts",
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "dependencies": {
42
+ "better-sqlite3": "^11.0.0",
43
+ "glob": "^11.0.0",
44
+ "ignore": "^7.0.0",
45
+ "yaml": "^2.6.0",
46
+ "zod": "^3.24.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/better-sqlite3": "^7.6.0"
50
+ },
51
+ "scripts": {
52
+ "build": "tsc",
53
+ "test": "vitest run",
54
+ "lint": "eslint src/",
55
+ "typecheck": "tsc --noEmit",
56
+ "clean": "rm -rf dist"
57
+ }
58
+ }